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
  */
@@ -121,9 +121,49 @@ exports.DockviewEvent = void 0;
121
121
  };
122
122
  };
123
123
  })(exports.DockviewEvent || (exports.DockviewEvent = {}));
124
- // dumb event emitter with better typings than nodes event emitter
125
- // https://github.com/microsoft/vscode/blob/master/src/vs/base/common/event.ts
124
+ class LeakageMonitor {
125
+ constructor() {
126
+ this.events = new Map();
127
+ }
128
+ get size() {
129
+ return this.events.size;
130
+ }
131
+ add(event, stacktrace) {
132
+ this.events.set(event, stacktrace);
133
+ }
134
+ delete(event) {
135
+ this.events.delete(event);
136
+ }
137
+ clear() {
138
+ this.events.clear();
139
+ }
140
+ }
141
+ class Stacktrace {
142
+ static create() {
143
+ var _a;
144
+ return new Stacktrace((_a = new Error().stack) !== null && _a !== void 0 ? _a : '');
145
+ }
146
+ constructor(value) {
147
+ this.value = value;
148
+ }
149
+ print() {
150
+ console.warn(this.value);
151
+ }
152
+ }
153
+ class Listener {
154
+ constructor(callback, stacktrace) {
155
+ this.callback = callback;
156
+ this.stacktrace = stacktrace;
157
+ }
158
+ }
159
+ // relatively simple event emitter taken from https://github.com/microsoft/vscode/blob/master/src/vs/base/common/event.ts
126
160
  class Emitter {
161
+ static setLeakageMonitorEnabled(isEnabled) {
162
+ if (isEnabled !== Emitter.ENABLE_TRACKING) {
163
+ Emitter.MEMORY_LEAK_WATCHER.clear();
164
+ }
165
+ Emitter.ENABLE_TRACKING = isEnabled;
166
+ }
127
167
  constructor(options) {
128
168
  this.options = options;
129
169
  this._listeners = [];
@@ -131,11 +171,12 @@ class Emitter {
131
171
  }
132
172
  get event() {
133
173
  if (!this._event) {
134
- this._event = (listener) => {
174
+ this._event = (callback) => {
135
175
  var _a;
136
176
  if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.replay) && this._last !== undefined) {
137
- listener(this._last);
177
+ callback(this._last);
138
178
  }
179
+ const listener = new Listener(callback, Emitter.ENABLE_TRACKING ? Stacktrace.create() : undefined);
139
180
  this._listeners.push(listener);
140
181
  return {
141
182
  dispose: () => {
@@ -143,28 +184,50 @@ class Emitter {
143
184
  if (index > -1) {
144
185
  this._listeners.splice(index, 1);
145
186
  }
187
+ else if (Emitter.ENABLE_TRACKING) ;
146
188
  },
147
189
  };
148
190
  };
191
+ if (Emitter.ENABLE_TRACKING) {
192
+ Emitter.MEMORY_LEAK_WATCHER.add(this._event, Stacktrace.create());
193
+ }
149
194
  }
150
195
  return this._event;
151
196
  }
152
197
  fire(e) {
153
198
  this._last = e;
154
199
  for (const listener of this._listeners) {
155
- listener(e);
200
+ listener.callback(e);
156
201
  }
157
202
  }
158
203
  dispose() {
159
- this._listeners = [];
160
- this._disposed = true;
204
+ if (!this._disposed) {
205
+ this._disposed = true;
206
+ if (this._listeners.length > 0) {
207
+ if (Emitter.ENABLE_TRACKING) {
208
+ queueMicrotask(() => {
209
+ var _a;
210
+ // don't check until stack of execution is completed to allow for out-of-order disposals within the same execution block
211
+ for (const listener of this._listeners) {
212
+ console.warn((_a = listener.stacktrace) === null || _a === void 0 ? void 0 : _a.print());
213
+ }
214
+ });
215
+ }
216
+ this._listeners = [];
217
+ }
218
+ if (Emitter.ENABLE_TRACKING && this._event) {
219
+ Emitter.MEMORY_LEAK_WATCHER.delete(this._event);
220
+ }
221
+ }
161
222
  }
162
223
  }
224
+ Emitter.ENABLE_TRACKING = false;
225
+ Emitter.MEMORY_LEAK_WATCHER = new LeakageMonitor();
163
226
  function addDisposableWindowListener(element, type, listener, options) {
164
227
  element.addEventListener(type, listener, options);
165
228
  return {
166
229
  dispose: () => {
167
- element.removeEventListener(type, listener);
230
+ element.removeEventListener(type, listener, options);
168
231
  },
169
232
  };
170
233
  }
@@ -172,7 +235,7 @@ function addDisposableListener(element, type, listener, options) {
172
235
  element.addEventListener(type, listener, options);
173
236
  return {
174
237
  dispose: () => {
175
- element.removeEventListener(type, listener);
238
+ element.removeEventListener(type, listener, options);
176
239
  },
177
240
  };
178
241
  }
@@ -212,13 +275,13 @@ class CompositeDisposable {
212
275
  }
213
276
  constructor(...args) {
214
277
  this._isDisposed = false;
215
- this.disposables = args;
278
+ this._disposables = args;
216
279
  }
217
280
  addDisposables(...args) {
218
- args.forEach((arg) => this.disposables.push(arg));
281
+ args.forEach((arg) => this._disposables.push(arg));
219
282
  }
220
283
  dispose() {
221
- this.disposables.forEach((arg) => arg.dispose());
284
+ this._disposables.forEach((arg) => arg.dispose());
222
285
  this._isDisposed = true;
223
286
  }
224
287
  }
@@ -308,6 +371,7 @@ class FocusTracker extends CompositeDisposable {
308
371
  this.onDidFocus = this._onDidFocus.event;
309
372
  this._onDidBlur = new Emitter();
310
373
  this.onDidBlur = this._onDidBlur.event;
374
+ this.addDisposables(this._onDidFocus, this._onDidBlur);
311
375
  let hasFocus = isAncestor(document.activeElement, element);
312
376
  let loosingFocus = false;
313
377
  const onFocus = () => {
@@ -352,11 +416,6 @@ class FocusTracker extends CompositeDisposable {
352
416
  refreshState() {
353
417
  this._refreshStateHandler();
354
418
  }
355
- dispose() {
356
- super.dispose();
357
- this._onDidBlur.dispose();
358
- this._onDidFocus.dispose();
359
- }
360
419
  }
361
420
 
362
421
  function createComponent(id, componentName, components = {}, frameworkComponents = {}, createFrameworkComponent, fallback) {
@@ -585,7 +644,7 @@ class Splitview {
585
644
  this._orthogonalSize = value;
586
645
  }
587
646
  get length() {
588
- return this.views.length;
647
+ return this.viewItems.length;
589
648
  }
590
649
  get proportions() {
591
650
  return this._proportions ? [...this._proportions] : undefined;
@@ -604,12 +663,12 @@ class Splitview {
604
663
  : 'vertical');
605
664
  }
606
665
  get minimumSize() {
607
- return this.views.reduce((r, item) => r + item.minimumSize, 0);
666
+ return this.viewItems.reduce((r, item) => r + item.minimumSize, 0);
608
667
  }
609
668
  get maximumSize() {
610
669
  return this.length === 0
611
670
  ? Number.POSITIVE_INFINITY
612
- : this.views.reduce((r, item) => r + item.maximumSize, 0);
671
+ : this.viewItems.reduce((r, item) => r + item.maximumSize, 0);
613
672
  }
614
673
  get startSnappingEnabled() {
615
674
  return this._startSnappingEnabled;
@@ -633,7 +692,7 @@ class Splitview {
633
692
  }
634
693
  constructor(container, options) {
635
694
  this.container = container;
636
- this.views = [];
695
+ this.viewItems = [];
637
696
  this.sashes = [];
638
697
  this._size = 0;
639
698
  this._orthogonalSize = 0;
@@ -647,12 +706,12 @@ class Splitview {
647
706
  this.onDidAddView = this._onDidAddView.event;
648
707
  this._onDidRemoveView = new Emitter();
649
708
  this.onDidRemoveView = this._onDidRemoveView.event;
650
- this.resize = (index, delta, sizes = this.views.map((x) => x.size), lowPriorityIndexes, highPriorityIndexes, overloadMinDelta = Number.NEGATIVE_INFINITY, overloadMaxDelta = Number.POSITIVE_INFINITY, snapBefore, snapAfter) => {
651
- if (index < 0 || index > this.views.length) {
709
+ this.resize = (index, delta, sizes = this.viewItems.map((x) => x.size), lowPriorityIndexes, highPriorityIndexes, overloadMinDelta = Number.NEGATIVE_INFINITY, overloadMaxDelta = Number.POSITIVE_INFINITY, snapBefore, snapAfter) => {
710
+ if (index < 0 || index > this.viewItems.length) {
652
711
  return 0;
653
712
  }
654
713
  const upIndexes = range(index, -1);
655
- const downIndexes = range(index + 1, this.views.length);
714
+ const downIndexes = range(index + 1, this.viewItems.length);
656
715
  //
657
716
  if (highPriorityIndexes) {
658
717
  for (const i of highPriorityIndexes) {
@@ -667,34 +726,34 @@ class Splitview {
667
726
  }
668
727
  }
669
728
  //
670
- const upItems = upIndexes.map((i) => this.views[i]);
729
+ const upItems = upIndexes.map((i) => this.viewItems[i]);
671
730
  const upSizes = upIndexes.map((i) => sizes[i]);
672
731
  //
673
- const downItems = downIndexes.map((i) => this.views[i]);
732
+ const downItems = downIndexes.map((i) => this.viewItems[i]);
674
733
  const downSizes = downIndexes.map((i) => sizes[i]);
675
734
  //
676
- const minDeltaUp = upIndexes.reduce((_, i) => _ + this.views[i].minimumSize - sizes[i], 0);
677
- const maxDeltaUp = upIndexes.reduce((_, i) => _ + this.views[i].maximumSize - sizes[i], 0);
735
+ const minDeltaUp = upIndexes.reduce((_, i) => _ + this.viewItems[i].minimumSize - sizes[i], 0);
736
+ const maxDeltaUp = upIndexes.reduce((_, i) => _ + this.viewItems[i].maximumSize - sizes[i], 0);
678
737
  //
679
738
  const maxDeltaDown = downIndexes.length === 0
680
739
  ? Number.POSITIVE_INFINITY
681
- : downIndexes.reduce((_, i) => _ + sizes[i] - this.views[i].minimumSize, 0);
740
+ : downIndexes.reduce((_, i) => _ + sizes[i] - this.viewItems[i].minimumSize, 0);
682
741
  const minDeltaDown = downIndexes.length === 0
683
742
  ? Number.NEGATIVE_INFINITY
684
- : downIndexes.reduce((_, i) => _ + sizes[i] - this.views[i].maximumSize, 0);
743
+ : downIndexes.reduce((_, i) => _ + sizes[i] - this.viewItems[i].maximumSize, 0);
685
744
  //
686
745
  const minDelta = Math.max(minDeltaUp, minDeltaDown);
687
746
  const maxDelta = Math.min(maxDeltaDown, maxDeltaUp);
688
747
  //
689
748
  let snapped = false;
690
749
  if (snapBefore) {
691
- const snapView = this.views[snapBefore.index];
750
+ const snapView = this.viewItems[snapBefore.index];
692
751
  const visible = delta >= snapBefore.limitDelta;
693
752
  snapped = visible !== snapView.visible;
694
753
  snapView.setVisible(visible, snapBefore.size);
695
754
  }
696
755
  if (!snapped && snapAfter) {
697
- const snapView = this.views[snapAfter.index];
756
+ const snapView = this.viewItems[snapAfter.index];
698
757
  const visible = delta < snapAfter.limitDelta;
699
758
  snapped = visible !== snapView.visible;
700
759
  snapView.setVisible(visible, snapAfter.size);
@@ -756,7 +815,7 @@ class Splitview {
756
815
  );
757
816
  });
758
817
  // Initialize content size and proportions for first layout
759
- this.contentSize = this.views.reduce((r, i) => r + i.size, 0);
818
+ this.contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
760
819
  this.saveProportions();
761
820
  }
762
821
  }
@@ -773,18 +832,18 @@ class Splitview {
773
832
  }
774
833
  }
775
834
  isViewVisible(index) {
776
- if (index < 0 || index >= this.views.length) {
835
+ if (index < 0 || index >= this.viewItems.length) {
777
836
  throw new Error('Index out of bounds');
778
837
  }
779
- const viewItem = this.views[index];
838
+ const viewItem = this.viewItems[index];
780
839
  return viewItem.visible;
781
840
  }
782
841
  setViewVisible(index, visible) {
783
- if (index < 0 || index >= this.views.length) {
842
+ if (index < 0 || index >= this.viewItems.length) {
784
843
  throw new Error('Index out of bounds');
785
844
  }
786
845
  toggleClass(this.container, 'visible', visible);
787
- const viewItem = this.views[index];
846
+ const viewItem = this.viewItems[index];
788
847
  toggleClass(this.container, 'visible', visible);
789
848
  viewItem.setVisible(visible, viewItem.size);
790
849
  this.distributeEmptySpace(index);
@@ -792,33 +851,33 @@ class Splitview {
792
851
  this.saveProportions();
793
852
  }
794
853
  getViewSize(index) {
795
- if (index < 0 || index >= this.views.length) {
854
+ if (index < 0 || index >= this.viewItems.length) {
796
855
  return -1;
797
856
  }
798
- return this.views[index].size;
857
+ return this.viewItems[index].size;
799
858
  }
800
859
  resizeView(index, size) {
801
- if (index < 0 || index >= this.views.length) {
860
+ if (index < 0 || index >= this.viewItems.length) {
802
861
  return;
803
862
  }
804
- const indexes = range(this.views.length).filter((i) => i !== index);
863
+ const indexes = range(this.viewItems.length).filter((i) => i !== index);
805
864
  const lowPriorityIndexes = [
806
- ...indexes.filter((i) => this.views[i].priority === exports.LayoutPriority.Low),
865
+ ...indexes.filter((i) => this.viewItems[i].priority === exports.LayoutPriority.Low),
807
866
  index,
808
867
  ];
809
- const highPriorityIndexes = indexes.filter((i) => this.views[i].priority === exports.LayoutPriority.High);
810
- const item = this.views[index];
868
+ const highPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === exports.LayoutPriority.High);
869
+ const item = this.viewItems[index];
811
870
  size = Math.round(size);
812
871
  size = clamp(size, item.minimumSize, Math.min(item.maximumSize, this._size));
813
872
  item.size = size;
814
873
  this.relayout(lowPriorityIndexes, highPriorityIndexes);
815
874
  }
816
875
  getViews() {
817
- return this.views.map((x) => x.view);
876
+ return this.viewItems.map((x) => x.view);
818
877
  }
819
878
  onDidChange(item, size) {
820
- const index = this.views.indexOf(item);
821
- if (index < 0 || index >= this.views.length) {
879
+ const index = this.viewItems.indexOf(item);
880
+ if (index < 0 || index >= this.viewItems.length) {
822
881
  return;
823
882
  }
824
883
  size = typeof size === 'number' ? size : item.size;
@@ -826,7 +885,7 @@ class Splitview {
826
885
  item.size = size;
827
886
  this.relayout([index]);
828
887
  }
829
- addView(view, size = { type: 'distribute' }, index = this.views.length, skipLayout) {
888
+ addView(view, size = { type: 'distribute' }, index = this.viewItems.length, skipLayout) {
830
889
  const container = document.createElement('div');
831
890
  container.className = 'view';
832
891
  container.appendChild(view.element);
@@ -844,24 +903,25 @@ class Splitview {
844
903
  viewSize = view.minimumSize;
845
904
  }
846
905
  const disposable = view.onDidChange((newSize) => this.onDidChange(viewItem, newSize.size));
847
- const dispose = () => {
848
- disposable === null || disposable === void 0 ? void 0 : disposable.dispose();
849
- this.viewContainer.removeChild(container);
850
- };
851
- const viewItem = new ViewItem(container, view, viewSize, { dispose });
852
- if (index === this.views.length) {
906
+ const viewItem = new ViewItem(container, view, viewSize, {
907
+ dispose: () => {
908
+ disposable.dispose();
909
+ this.viewContainer.removeChild(container);
910
+ },
911
+ });
912
+ if (index === this.viewItems.length) {
853
913
  this.viewContainer.appendChild(container);
854
914
  }
855
915
  else {
856
916
  this.viewContainer.insertBefore(container, this.viewContainer.children.item(index));
857
917
  }
858
- this.views.splice(index, 0, viewItem);
859
- if (this.views.length > 1) {
918
+ this.viewItems.splice(index, 0, viewItem);
919
+ if (this.viewItems.length > 1) {
860
920
  //add sash
861
921
  const sash = document.createElement('div');
862
922
  sash.className = 'sash';
863
923
  const onStart = (event) => {
864
- for (const item of this.views) {
924
+ for (const item of this.viewItems) {
865
925
  item.enabled = false;
866
926
  }
867
927
  const iframes = [
@@ -876,27 +936,29 @@ class Splitview {
876
936
  : event.clientY;
877
937
  const sashIndex = firstIndex(this.sashes, (s) => s.container === sash);
878
938
  //
879
- const sizes = this.views.map((x) => x.size);
939
+ const sizes = this.viewItems.map((x) => x.size);
880
940
  //
881
941
  let snapBefore;
882
942
  let snapAfter;
883
943
  const upIndexes = range(sashIndex, -1);
884
- const downIndexes = range(sashIndex + 1, this.views.length);
885
- const minDeltaUp = upIndexes.reduce((r, i) => r + (this.views[i].minimumSize - sizes[i]), 0);
886
- const maxDeltaUp = upIndexes.reduce((r, i) => r + (this.views[i].viewMaximumSize - sizes[i]), 0);
944
+ const downIndexes = range(sashIndex + 1, this.viewItems.length);
945
+ const minDeltaUp = upIndexes.reduce((r, i) => r + (this.viewItems[i].minimumSize - sizes[i]), 0);
946
+ const maxDeltaUp = upIndexes.reduce((r, i) => r + (this.viewItems[i].viewMaximumSize - sizes[i]), 0);
887
947
  const maxDeltaDown = downIndexes.length === 0
888
948
  ? Number.POSITIVE_INFINITY
889
- : downIndexes.reduce((r, i) => r + (sizes[i] - this.views[i].minimumSize), 0);
949
+ : downIndexes.reduce((r, i) => r +
950
+ (sizes[i] - this.viewItems[i].minimumSize), 0);
890
951
  const minDeltaDown = downIndexes.length === 0
891
952
  ? Number.NEGATIVE_INFINITY
892
953
  : downIndexes.reduce((r, i) => r +
893
- (sizes[i] - this.views[i].viewMaximumSize), 0);
954
+ (sizes[i] -
955
+ this.viewItems[i].viewMaximumSize), 0);
894
956
  const minDelta = Math.max(minDeltaUp, minDeltaDown);
895
957
  const maxDelta = Math.min(maxDeltaDown, maxDeltaUp);
896
958
  const snapBeforeIndex = this.findFirstSnapIndex(upIndexes);
897
959
  const snapAfterIndex = this.findFirstSnapIndex(downIndexes);
898
960
  if (typeof snapBeforeIndex === 'number') {
899
- const snappedViewItem = this.views[snapBeforeIndex];
961
+ const snappedViewItem = this.viewItems[snapBeforeIndex];
900
962
  const halfSize = Math.floor(snappedViewItem.viewMinimumSize / 2);
901
963
  snapBefore = {
902
964
  index: snapBeforeIndex,
@@ -907,7 +969,7 @@ class Splitview {
907
969
  };
908
970
  }
909
971
  if (typeof snapAfterIndex === 'number') {
910
- const snappedViewItem = this.views[snapAfterIndex];
972
+ const snappedViewItem = this.viewItems[snapAfterIndex];
911
973
  const halfSize = Math.floor(snappedViewItem.viewMinimumSize / 2);
912
974
  snapAfter = {
913
975
  index: snapAfterIndex,
@@ -928,7 +990,7 @@ class Splitview {
928
990
  this.layoutViews();
929
991
  };
930
992
  const end = () => {
931
- for (const item of this.views) {
993
+ for (const item of this.viewItems) {
932
994
  item.enabled = true;
933
995
  }
934
996
  for (const iframe of iframes) {
@@ -937,12 +999,10 @@ class Splitview {
937
999
  this.saveProportions();
938
1000
  document.removeEventListener('mousemove', mousemove);
939
1001
  document.removeEventListener('mouseup', end);
940
- document.removeEventListener('mouseend', end);
941
1002
  this._onDidSashEnd.fire(undefined);
942
1003
  };
943
1004
  document.addEventListener('mousemove', mousemove);
944
1005
  document.addEventListener('mouseup', end);
945
- document.addEventListener('mouseend', end);
946
1006
  };
947
1007
  sash.addEventListener('mousedown', onStart);
948
1008
  const sashItem = {
@@ -968,7 +1028,7 @@ class Splitview {
968
1028
  distributeViewSizes() {
969
1029
  const flexibleViewItems = [];
970
1030
  let flexibleSize = 0;
971
- for (const item of this.views) {
1031
+ for (const item of this.viewItems) {
972
1032
  if (item.maximumSize - item.minimumSize > 0) {
973
1033
  flexibleViewItems.push(item);
974
1034
  flexibleSize += item.size;
@@ -978,17 +1038,17 @@ class Splitview {
978
1038
  for (const item of flexibleViewItems) {
979
1039
  item.size = clamp(size, item.minimumSize, item.maximumSize);
980
1040
  }
981
- const indexes = range(this.views.length);
982
- const lowPriorityIndexes = indexes.filter((i) => this.views[i].priority === exports.LayoutPriority.Low);
983
- const highPriorityIndexes = indexes.filter((i) => this.views[i].priority === exports.LayoutPriority.High);
1041
+ const indexes = range(this.viewItems.length);
1042
+ const lowPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === exports.LayoutPriority.Low);
1043
+ const highPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === exports.LayoutPriority.High);
984
1044
  this.relayout(lowPriorityIndexes, highPriorityIndexes);
985
1045
  }
986
1046
  removeView(index, sizing, skipLayout = false) {
987
1047
  // Remove view
988
- const viewItem = this.views.splice(index, 1)[0];
1048
+ const viewItem = this.viewItems.splice(index, 1)[0];
989
1049
  viewItem.dispose();
990
1050
  // Remove sash
991
- if (this.views.length >= 1) {
1051
+ if (this.viewItems.length >= 1) {
992
1052
  const sashIndex = Math.max(index - 1, 0);
993
1053
  const sashItem = this.sashes.splice(sashIndex, 1)[0];
994
1054
  sashItem.disposable();
@@ -1003,10 +1063,10 @@ class Splitview {
1003
1063
  return viewItem.view;
1004
1064
  }
1005
1065
  getViewCachedVisibleSize(index) {
1006
- if (index < 0 || index >= this.views.length) {
1066
+ if (index < 0 || index >= this.viewItems.length) {
1007
1067
  throw new Error('Index out of bounds');
1008
1068
  }
1009
- const viewItem = this.views[index];
1069
+ const viewItem = this.viewItems[index];
1010
1070
  return viewItem.cachedVisibleSize;
1011
1071
  }
1012
1072
  moveView(from, to) {
@@ -1022,14 +1082,14 @@ class Splitview {
1022
1082
  this.size = size;
1023
1083
  this.orthogonalSize = orthogonalSize;
1024
1084
  if (!this.proportions) {
1025
- const indexes = range(this.views.length);
1026
- const lowPriorityIndexes = indexes.filter((i) => this.views[i].priority === exports.LayoutPriority.Low);
1027
- const highPriorityIndexes = indexes.filter((i) => this.views[i].priority === exports.LayoutPriority.High);
1028
- this.resize(this.views.length - 1, size - previousSize, undefined, lowPriorityIndexes, highPriorityIndexes);
1085
+ const indexes = range(this.viewItems.length);
1086
+ const lowPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === exports.LayoutPriority.Low);
1087
+ const highPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === exports.LayoutPriority.High);
1088
+ this.resize(this.viewItems.length - 1, size - previousSize, undefined, lowPriorityIndexes, highPriorityIndexes);
1029
1089
  }
1030
1090
  else {
1031
- for (let i = 0; i < this.views.length; i++) {
1032
- const item = this.views[i];
1091
+ for (let i = 0; i < this.viewItems.length; i++) {
1092
+ const item = this.viewItems[i];
1033
1093
  item.size = clamp(Math.round(this.proportions[i] * size), item.minimumSize, item.maximumSize);
1034
1094
  }
1035
1095
  }
@@ -1037,18 +1097,18 @@ class Splitview {
1037
1097
  this.layoutViews();
1038
1098
  }
1039
1099
  relayout(lowPriorityIndexes, highPriorityIndexes) {
1040
- const contentSize = this.views.reduce((r, i) => r + i.size, 0);
1041
- this.resize(this.views.length - 1, this._size - contentSize, undefined, lowPriorityIndexes, highPriorityIndexes);
1100
+ const contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
1101
+ this.resize(this.viewItems.length - 1, this._size - contentSize, undefined, lowPriorityIndexes, highPriorityIndexes);
1042
1102
  this.distributeEmptySpace();
1043
1103
  this.layoutViews();
1044
1104
  this.saveProportions();
1045
1105
  }
1046
1106
  distributeEmptySpace(lowPriorityIndex) {
1047
- const contentSize = this.views.reduce((r, i) => r + i.size, 0);
1107
+ const contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
1048
1108
  let emptyDelta = this.size - contentSize;
1049
- const indexes = range(this.views.length - 1, -1);
1050
- const lowPriorityIndexes = indexes.filter((i) => this.views[i].priority === exports.LayoutPriority.Low);
1051
- const highPriorityIndexes = indexes.filter((i) => this.views[i].priority === exports.LayoutPriority.High);
1109
+ const indexes = range(this.viewItems.length - 1, -1);
1110
+ const lowPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === exports.LayoutPriority.Low);
1111
+ const highPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === exports.LayoutPriority.High);
1052
1112
  for (const index of highPriorityIndexes) {
1053
1113
  pushToStart(indexes, index);
1054
1114
  }
@@ -1059,7 +1119,7 @@ class Splitview {
1059
1119
  pushToEnd(indexes, lowPriorityIndex);
1060
1120
  }
1061
1121
  for (let i = 0; emptyDelta !== 0 && i < indexes.length; i++) {
1062
- const item = this.views[indexes[i]];
1122
+ const item = this.viewItems[indexes[i]];
1063
1123
  const size = clamp(item.size + emptyDelta, item.minimumSize, item.maximumSize);
1064
1124
  const viewDelta = size - item.size;
1065
1125
  emptyDelta -= viewDelta;
@@ -1068,16 +1128,16 @@ class Splitview {
1068
1128
  }
1069
1129
  saveProportions() {
1070
1130
  if (this.proportionalLayout && this.contentSize > 0) {
1071
- this._proportions = this.views.map((i) => i.size / this.contentSize);
1131
+ this._proportions = this.viewItems.map((i) => i.size / this.contentSize);
1072
1132
  }
1073
1133
  }
1074
1134
  layoutViews() {
1075
- this.contentSize = this.views.reduce((r, i) => r + i.size, 0);
1135
+ this.contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
1076
1136
  let sum = 0;
1077
1137
  const x = [];
1078
1138
  this.updateSashEnablement();
1079
- for (let i = 0; i < this.views.length - 1; i++) {
1080
- sum += this.views[i].size;
1139
+ for (let i = 0; i < this.viewItems.length - 1; i++) {
1140
+ sum += this.viewItems[i].size;
1081
1141
  x.push(sum);
1082
1142
  const offset = Math.min(Math.max(0, sum - 2), this.size - 4);
1083
1143
  if (this._orientation === exports.Orientation.HORIZONTAL) {
@@ -1089,7 +1149,7 @@ class Splitview {
1089
1149
  this.sashes[i].container.style.top = `${offset}px`;
1090
1150
  }
1091
1151
  }
1092
- this.views.forEach((view, i) => {
1152
+ this.viewItems.forEach((view, i) => {
1093
1153
  if (this._orientation === exports.Orientation.HORIZONTAL) {
1094
1154
  view.container.style.width = `${view.size}px`;
1095
1155
  view.container.style.left = i == 0 ? '0px' : `${x[i - 1]}px`;
@@ -1108,7 +1168,7 @@ class Splitview {
1108
1168
  findFirstSnapIndex(indexes) {
1109
1169
  // visible views first
1110
1170
  for (const index of indexes) {
1111
- const viewItem = this.views[index];
1171
+ const viewItem = this.viewItems[index];
1112
1172
  if (!viewItem.visible) {
1113
1173
  continue;
1114
1174
  }
@@ -1118,7 +1178,7 @@ class Splitview {
1118
1178
  }
1119
1179
  // then, hidden views
1120
1180
  for (const index of indexes) {
1121
- const viewItem = this.views[index];
1181
+ const viewItem = this.viewItems[index];
1122
1182
  if (viewItem.visible &&
1123
1183
  viewItem.maximumSize - viewItem.minimumSize > 0) {
1124
1184
  return undefined;
@@ -1131,10 +1191,10 @@ class Splitview {
1131
1191
  }
1132
1192
  updateSashEnablement() {
1133
1193
  let previous = false;
1134
- const collapsesDown = this.views.map((i) => (previous = i.size - i.minimumSize > 0 || previous));
1194
+ const collapsesDown = this.viewItems.map((i) => (previous = i.size - i.minimumSize > 0 || previous));
1135
1195
  previous = false;
1136
- const expandsDown = this.views.map((i) => (previous = i.maximumSize - i.size > 0 || previous));
1137
- const reverseViews = [...this.views].reverse();
1196
+ const expandsDown = this.viewItems.map((i) => (previous = i.maximumSize - i.size > 0 || previous));
1197
+ const reverseViews = [...this.viewItems].reverse();
1138
1198
  previous = false;
1139
1199
  const collapsesUp = reverseViews
1140
1200
  .map((i) => (previous = i.size - i.minimumSize > 0 || previous))
@@ -1146,19 +1206,19 @@ class Splitview {
1146
1206
  let position = 0;
1147
1207
  for (let index = 0; index < this.sashes.length; index++) {
1148
1208
  const sash = this.sashes[index];
1149
- const viewItem = this.views[index];
1209
+ const viewItem = this.viewItems[index];
1150
1210
  position += viewItem.size;
1151
1211
  const min = !(collapsesDown[index] && expandsUp[index + 1]);
1152
1212
  const max = !(expandsDown[index] && collapsesUp[index + 1]);
1153
1213
  if (min && max) {
1154
1214
  const upIndexes = range(index, -1);
1155
- const downIndexes = range(index + 1, this.views.length);
1215
+ const downIndexes = range(index + 1, this.viewItems.length);
1156
1216
  const snapBeforeIndex = this.findFirstSnapIndex(upIndexes);
1157
1217
  const snapAfterIndex = this.findFirstSnapIndex(downIndexes);
1158
1218
  const snappedBefore = typeof snapBeforeIndex === 'number' &&
1159
- !this.views[snapBeforeIndex].visible;
1219
+ !this.viewItems[snapBeforeIndex].visible;
1160
1220
  const snappedAfter = typeof snapAfterIndex === 'number' &&
1161
- !this.views[snapAfterIndex].visible;
1221
+ !this.viewItems[snapAfterIndex].visible;
1162
1222
  if (snappedBefore &&
1163
1223
  collapsesUp[index] &&
1164
1224
  (position > 0 || this.startSnappingEnabled)) {
@@ -1218,6 +1278,9 @@ class Splitview {
1218
1278
  break;
1219
1279
  }
1220
1280
  }
1281
+ for (const viewItem of this.viewItems) {
1282
+ viewItem.dispose();
1283
+ }
1221
1284
  this.element.remove();
1222
1285
  }
1223
1286
  }
@@ -1652,7 +1715,7 @@ class BranchNode extends CompositeDisposable {
1652
1715
  throw new Error('Invalid index');
1653
1716
  }
1654
1717
  this.splitview.removeView(index, sizing);
1655
- this._removeChild(index);
1718
+ return this._removeChild(index);
1656
1719
  }
1657
1720
  _addChild(node, index) {
1658
1721
  this.children.splice(index, 0, node);
@@ -1674,10 +1737,10 @@ class BranchNode extends CompositeDisposable {
1674
1737
  });
1675
1738
  }
1676
1739
  dispose() {
1677
- super.dispose();
1678
1740
  this._childrenDisposable.dispose();
1679
- this.children.forEach((child) => child.dispose());
1680
1741
  this.splitview.dispose();
1742
+ this.children.forEach((child) => child.dispose());
1743
+ super.dispose();
1681
1744
  }
1682
1745
  }
1683
1746
 
@@ -1907,7 +1970,8 @@ class Gridview {
1907
1970
  if (oldRoot.children.length === 1) {
1908
1971
  // can remove one level of redundant branching if there is only a single child
1909
1972
  const childReference = oldRoot.children[0];
1910
- oldRoot.removeChild(0); // remove to prevent disposal when disposing of unwanted root
1973
+ const child = oldRoot.removeChild(0); // remove to prevent disposal when disposing of unwanted root
1974
+ child.dispose();
1911
1975
  oldRoot.dispose();
1912
1976
  this._root.addChild(
1913
1977
  /**
@@ -2014,7 +2078,8 @@ class Gridview {
2014
2078
  if (typeof newSiblingCachedVisibleSize === 'number') {
2015
2079
  newSiblingSize = exports.Sizing.Invisible(newSiblingCachedVisibleSize);
2016
2080
  }
2017
- grandParent.removeChild(parentIndex);
2081
+ const child = grandParent.removeChild(parentIndex);
2082
+ child.dispose();
2018
2083
  const newParent = new BranchNode(parent.orientation, this.proportionalLayout, this.styles, parent.size, parent.orthogonalSize);
2019
2084
  grandParent.addChild(newParent, parent.size, parentIndex);
2020
2085
  const newSibling = new LeafNode(parent.view, grandParent.orientation, parent.size);
@@ -2576,6 +2641,7 @@ class Droptarget extends CompositeDisposable {
2576
2641
  }
2577
2642
  dispose() {
2578
2643
  this.removeDropTarget();
2644
+ super.dispose();
2579
2645
  }
2580
2646
  toggleClasses(quadrant, width, height) {
2581
2647
  var _a, _b, _c, _d;
@@ -2753,8 +2819,8 @@ class ContentContainer extends CompositeDisposable {
2753
2819
  if (this.panel.view) {
2754
2820
  const _onDidFocus = this.panel.view.content.onDidFocus;
2755
2821
  const _onDidBlur = this.panel.view.content.onDidBlur;
2756
- const { onDidFocus, onDidBlur } = trackFocus(this._element);
2757
- disposable.addDisposables(onDidFocus(() => this._onDidFocus.fire()), onDidBlur(() => this._onDidBlur.fire()));
2822
+ const focusTracker = trackFocus(this._element);
2823
+ disposable.addDisposables(focusTracker, focusTracker.onDidFocus(() => this._onDidFocus.fire()), focusTracker.onDidBlur(() => this._onDidBlur.fire()));
2758
2824
  if (_onDidFocus) {
2759
2825
  disposable.addDisposables(_onDidFocus(() => this._onDidFocus.fire()));
2760
2826
  }
@@ -2793,24 +2859,32 @@ class DragHandler extends CompositeDisposable {
2793
2859
  constructor(el) {
2794
2860
  super();
2795
2861
  this.el = el;
2796
- this.disposable = new MutableDisposable();
2862
+ this.dataDisposable = new MutableDisposable();
2863
+ this.pointerEventsDisposable = new MutableDisposable();
2797
2864
  this._onDragStart = new Emitter();
2798
2865
  this.onDragStart = this._onDragStart.event;
2799
- this.iframes = [];
2866
+ this.addDisposables(this._onDragStart, this.dataDisposable, this.pointerEventsDisposable);
2800
2867
  this.configure();
2801
2868
  }
2802
2869
  configure() {
2803
2870
  this.addDisposables(this._onDragStart, addDisposableListener(this.el, 'dragstart', (event) => {
2804
- this.iframes = [
2871
+ const iframes = [
2805
2872
  ...getElementsByTagName('iframe'),
2806
2873
  ...getElementsByTagName('webview'),
2807
2874
  ];
2808
- for (const iframe of this.iframes) {
2875
+ this.pointerEventsDisposable.value = {
2876
+ dispose: () => {
2877
+ for (const iframe of iframes) {
2878
+ iframe.style.pointerEvents = 'auto';
2879
+ }
2880
+ },
2881
+ };
2882
+ for (const iframe of iframes) {
2809
2883
  iframe.style.pointerEvents = 'none';
2810
2884
  }
2811
2885
  this.el.classList.add('dv-dragged');
2812
2886
  setTimeout(() => this.el.classList.remove('dv-dragged'), 0);
2813
- this.disposable.value = this.getData(event.dataTransfer);
2887
+ this.dataDisposable.value = this.getData(event.dataTransfer);
2814
2888
  if (event.dataTransfer) {
2815
2889
  event.dataTransfer.effectAllowed = 'move';
2816
2890
  /**
@@ -2825,11 +2899,8 @@ class DragHandler extends CompositeDisposable {
2825
2899
  event.dataTransfer.setData('text/plain', '__dockview_internal_drag_event__');
2826
2900
  }
2827
2901
  }), addDisposableListener(this.el, 'dragend', () => {
2828
- for (const iframe of this.iframes) {
2829
- iframe.style.pointerEvents = 'auto';
2830
- }
2831
- this.iframes = [];
2832
- this.disposable.dispose();
2902
+ this.pointerEventsDisposable.dispose();
2903
+ this.dataDisposable.dispose();
2833
2904
  }));
2834
2905
  }
2835
2906
  }
@@ -2847,13 +2918,12 @@ class Tab extends CompositeDisposable {
2847
2918
  this.onChanged = this._onChanged.event;
2848
2919
  this._onDropped = new Emitter();
2849
2920
  this.onDrop = this._onDropped.event;
2850
- this.addDisposables(this._onChanged, this._onDropped);
2851
2921
  this._element = document.createElement('div');
2852
2922
  this._element.className = 'tab';
2853
2923
  this._element.tabIndex = 0;
2854
2924
  this._element.draggable = true;
2855
2925
  toggleClass(this.element, 'inactive-tab', true);
2856
- this.addDisposables(new (class Handler extends DragHandler {
2926
+ this.addDisposables(this._onChanged, this._onDropped, new (class Handler extends DragHandler {
2857
2927
  constructor() {
2858
2928
  super(...arguments);
2859
2929
  this.panelTransfer = LocalSelectionTransfer.getInstance();
@@ -2866,9 +2936,6 @@ class Tab extends CompositeDisposable {
2866
2936
  },
2867
2937
  };
2868
2938
  }
2869
- dispose() {
2870
- //
2871
- }
2872
2939
  })(this._element));
2873
2940
  this.addDisposables(addDisposableListener(this._element, 'mousedown', (event) => {
2874
2941
  if (event.defaultPrevented) {
@@ -2903,7 +2970,7 @@ class Tab extends CompositeDisposable {
2903
2970
  });
2904
2971
  this.addDisposables(this.droptarget.onDrop((event) => {
2905
2972
  this._onDropped.fire(event);
2906
- }));
2973
+ }), this.droptarget);
2907
2974
  }
2908
2975
  setActive(isActive) {
2909
2976
  toggleClass(this.element, 'active-tab', isActive);
@@ -2918,7 +2985,6 @@ class Tab extends CompositeDisposable {
2918
2985
  }
2919
2986
  dispose() {
2920
2987
  super.dispose();
2921
- this.droptarget.dispose();
2922
2988
  }
2923
2989
  }
2924
2990
 
@@ -2964,9 +3030,6 @@ class GroupDragHandler extends DragHandler {
2964
3030
  },
2965
3031
  };
2966
3032
  }
2967
- dispose() {
2968
- //
2969
- }
2970
3033
  }
2971
3034
 
2972
3035
  class VoidContainer extends CompositeDisposable {
@@ -3122,6 +3185,7 @@ class TabsContainer extends CompositeDisposable {
3122
3185
  const tabToRemove = this.tabs.splice(index, 1)[0];
3123
3186
  const { value, disposable } = tabToRemove;
3124
3187
  disposable.dispose();
3188
+ value.dispose();
3125
3189
  value.element.remove();
3126
3190
  }
3127
3191
  setActivePanel(panel) {
@@ -3165,9 +3229,10 @@ class TabsContainer extends CompositeDisposable {
3165
3229
  }
3166
3230
  dispose() {
3167
3231
  super.dispose();
3168
- this.tabs.forEach((tab) => {
3169
- tab.disposable.dispose();
3170
- });
3232
+ for (const { value, disposable } of this.tabs) {
3233
+ disposable.dispose();
3234
+ value.dispose();
3235
+ }
3171
3236
  this.tabs = [];
3172
3237
  }
3173
3238
  }
@@ -3265,7 +3330,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3265
3330
  container.append(this.tabsContainer.element, this.contentContainer.element);
3266
3331
  this.header.hidden = !!options.hideHeader;
3267
3332
  this.locked = !!options.locked;
3268
- this.addDisposables(this._onMove, this._onDidChange, this._onDidDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange, this.tabsContainer.onDrop((event) => {
3333
+ this.addDisposables(this.tabsContainer.onDrop((event) => {
3269
3334
  this.handleDropEvent(event.event, 'center', event.index);
3270
3335
  }), this.contentContainer.onDidFocus(() => {
3271
3336
  this.accessor.doSetGroupActive(this.groupPanel, true);
@@ -3273,7 +3338,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3273
3338
  // noop
3274
3339
  }), this.dropTarget.onDrop((event) => {
3275
3340
  this.handleDropEvent(event.nativeEvent, event.position);
3276
- }));
3341
+ }), this._onMove, this._onDidChange, this._onDidDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange);
3277
3342
  }
3278
3343
  initialize() {
3279
3344
  var _a, _b;
@@ -3707,8 +3772,7 @@ class BaseGrid extends Resizable {
3707
3772
  this.layout(0, 0, true); // set some elements height/widths
3708
3773
  this.addDisposables(this.gridview.onDidChange(() => {
3709
3774
  this._bufferOnDidLayoutChange.fire();
3710
- }));
3711
- this.addDisposables(exports.DockviewEvent.any(this.onDidAddGroup, this.onDidRemoveGroup, this.onDidActiveGroupChange)(() => {
3775
+ }), exports.DockviewEvent.any(this.onDidAddGroup, this.onDidRemoveGroup, this.onDidActiveGroupChange)(() => {
3712
3776
  this._bufferOnDidLayoutChange.fire();
3713
3777
  }), this._bufferOnDidLayoutChange.onEvent(() => {
3714
3778
  this._onDidLayoutChange.fire();
@@ -3811,7 +3875,6 @@ class BaseGrid extends Resizable {
3811
3875
  this.gridview.layout(width, height);
3812
3876
  }
3813
3877
  dispose() {
3814
- super.dispose();
3815
3878
  this._onDidActiveGroupChange.dispose();
3816
3879
  this._onDidAddGroup.dispose();
3817
3880
  this._onDidRemoveGroup.dispose();
@@ -3820,6 +3883,7 @@ class BaseGrid extends Resizable {
3820
3883
  group.dispose();
3821
3884
  }
3822
3885
  this.gridview.dispose();
3886
+ super.dispose();
3823
3887
  }
3824
3888
  }
3825
3889
 
@@ -3883,7 +3947,7 @@ class PanelApiImpl extends CompositeDisposable {
3883
3947
  //
3884
3948
  this._onUpdateParameters = new Emitter();
3885
3949
  this.onUpdateParameters = this._onUpdateParameters.event;
3886
- this.addDisposables(this.panelUpdatesDisposable, this._onDidDimensionChange, this._onDidChangeFocus, this._onDidVisibilityChange, this._onDidActiveChange, this._onFocusEvent, this._onActiveChange, this._onVisibilityChange, this._onUpdateParameters, this.onDidFocusChange((event) => {
3950
+ this.addDisposables(this.onDidFocusChange((event) => {
3887
3951
  this._isFocused = event.isFocused;
3888
3952
  }), this.onDidActiveChange((event) => {
3889
3953
  this._isActive = event.isActive;
@@ -3892,14 +3956,12 @@ class PanelApiImpl extends CompositeDisposable {
3892
3956
  }), this.onDidDimensionsChange((event) => {
3893
3957
  this._width = event.width;
3894
3958
  this._height = event.height;
3895
- }));
3959
+ }), this.panelUpdatesDisposable, this._onDidDimensionChange, this._onDidChangeFocus, this._onDidVisibilityChange, this._onDidActiveChange, this._onFocusEvent, this._onActiveChange, this._onVisibilityChange, this._onUpdateParameters);
3896
3960
  }
3897
3961
  initialize(panel) {
3898
3962
  this.panelUpdatesDisposable.value = this._onUpdateParameters.event((parameters) => {
3899
3963
  panel.update({
3900
- params: {
3901
- params: parameters,
3902
- },
3964
+ params: parameters,
3903
3965
  });
3904
3966
  });
3905
3967
  }
@@ -3994,12 +4056,12 @@ class BasePanelView extends CompositeDisposable {
3994
4056
  this._element.style.height = '100%';
3995
4057
  this._element.style.width = '100%';
3996
4058
  this._element.style.overflow = 'hidden';
3997
- const { onDidFocus, onDidBlur } = trackFocus(this._element);
3998
- this.addDisposables(this.api, onDidFocus(() => {
4059
+ const focusTracker = trackFocus(this._element);
4060
+ this.addDisposables(this.api, focusTracker.onDidFocus(() => {
3999
4061
  this.api._onDidChangeFocus.fire({ isFocused: true });
4000
- }), onDidBlur(() => {
4062
+ }), focusTracker.onDidBlur(() => {
4001
4063
  this.api._onDidChangeFocus.fire({ isFocused: false });
4002
- }));
4064
+ }), focusTracker);
4003
4065
  }
4004
4066
  focus() {
4005
4067
  this.api._onFocusEvent.fire();
@@ -4020,7 +4082,18 @@ class BasePanelView extends CompositeDisposable {
4020
4082
  }
4021
4083
  update(event) {
4022
4084
  var _a, _b;
4085
+ // merge the new parameters with the existing parameters
4023
4086
  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) });
4087
+ /**
4088
+ * delete new keys that have a value of undefined,
4089
+ * allow values of null
4090
+ */
4091
+ for (const key of Object.keys(event.params)) {
4092
+ if (event.params[key] === undefined) {
4093
+ delete this._params.params[key];
4094
+ }
4095
+ }
4096
+ // update the view with the updated props
4024
4097
  (_b = this.part) === null || _b === void 0 ? void 0 : _b.update({ params: this._params.params });
4025
4098
  }
4026
4099
  toJSON() {
@@ -4034,9 +4107,9 @@ class BasePanelView extends CompositeDisposable {
4034
4107
  }
4035
4108
  dispose() {
4036
4109
  var _a;
4037
- super.dispose();
4038
4110
  this.api.dispose();
4039
4111
  (_a = this.part) === null || _a === void 0 ? void 0 : _a.dispose();
4112
+ super.dispose();
4040
4113
  }
4041
4114
  }
4042
4115
 
@@ -4415,7 +4488,7 @@ class GridviewPanel extends BasePanelView {
4415
4488
  this._maximumHeight = options.maximumHeight;
4416
4489
  }
4417
4490
  this.api.initialize(this); // TODO: required to by-pass 'super before this' requirement
4418
- this.addDisposables(this._onDidChange, this.api.onVisibilityChange((event) => {
4491
+ this.addDisposables(this.api.onVisibilityChange((event) => {
4419
4492
  const { isVisible } = event;
4420
4493
  const { accessor } = this._params;
4421
4494
  accessor.setVisible(this, isVisible);
@@ -4444,7 +4517,7 @@ class GridviewPanel extends BasePanelView {
4444
4517
  height: event.height,
4445
4518
  width: event.width,
4446
4519
  });
4447
- }));
4520
+ }), this._onDidChange);
4448
4521
  }
4449
4522
  setVisible(isVisible) {
4450
4523
  this.api._onDidVisibilityChange.fire({ isVisible });
@@ -4601,7 +4674,7 @@ class DockviewPanelApiImpl extends GridviewPanelApiImpl {
4601
4674
  this.addDisposables(this.disposable, this._onDidTitleChange, this._onDidGroupChange, this._onDidActiveGroupChange);
4602
4675
  }
4603
4676
  setTitle(title) {
4604
- this.panel.update({ params: { title } });
4677
+ this.panel.setTitle(title);
4605
4678
  }
4606
4679
  close() {
4607
4680
  this.group.model.closePanel(this.panel);
@@ -4666,12 +4739,18 @@ class DockviewPanel extends CompositeDisposable {
4666
4739
  }
4667
4740
  }
4668
4741
  update(event) {
4669
- const params = event.params;
4670
- this._params = Object.assign(Object.assign({}, (this._params || {})), event.params.params);
4671
- if (params.title !== this.title) {
4672
- this._title = params.title;
4673
- this.api._onDidTitleChange.fire({ title: params.title });
4742
+ // merge the new parameters with the existing parameters
4743
+ this._params = Object.assign(Object.assign({}, (this._params || {})), event.params);
4744
+ /**
4745
+ * delete new keys that have a value of undefined,
4746
+ * allow values of null
4747
+ */
4748
+ for (const key of Object.keys(event.params)) {
4749
+ if (event.params[key] === undefined) {
4750
+ delete this._params[key];
4751
+ }
4674
4752
  }
4753
+ // update the view with the updated props
4675
4754
  this.view.update({
4676
4755
  params: {
4677
4756
  params: this._params,
@@ -5047,7 +5126,7 @@ class DockviewComponent extends BaseGrid {
5047
5126
  size: { type: 'pixels', value: 20 },
5048
5127
  },
5049
5128
  });
5050
- this.addDisposables(dropTarget, dropTarget.onDrop((event) => {
5129
+ this.addDisposables(dropTarget.onDrop((event) => {
5051
5130
  const data = getPanelData();
5052
5131
  if (data) {
5053
5132
  this.moveGroupOrPanel(this.orthogonalize(event.position), data.groupId, data.panelId || undefined, 'center');
@@ -5055,7 +5134,7 @@ class DockviewComponent extends BaseGrid {
5055
5134
  else {
5056
5135
  this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api, group: null, getData: getPanelData }));
5057
5136
  }
5058
- }));
5137
+ }), dropTarget);
5059
5138
  this._api = new DockviewApi(this);
5060
5139
  this.updateWatermark();
5061
5140
  }
@@ -5379,31 +5458,33 @@ class DockviewComponent extends BaseGrid {
5379
5458
  }
5380
5459
  super.doRemoveGroup(group, { skipActive });
5381
5460
  }
5382
- moveGroupOrPanel(referenceGroup, groupId, itemId, target, index) {
5461
+ moveGroupOrPanel(destinationGroup, sourceGroupId, sourceItemId, destinationTarget, destinationIndex) {
5383
5462
  var _a;
5384
- const sourceGroup = groupId
5385
- ? (_a = this._groups.get(groupId)) === null || _a === void 0 ? void 0 : _a.value
5463
+ const sourceGroup = sourceGroupId
5464
+ ? (_a = this._groups.get(sourceGroupId)) === null || _a === void 0 ? void 0 : _a.value
5386
5465
  : undefined;
5387
- if (itemId === undefined) {
5466
+ if (sourceItemId === undefined) {
5388
5467
  if (sourceGroup) {
5389
- this.moveGroup(sourceGroup, referenceGroup, target);
5468
+ this.moveGroup(sourceGroup, destinationGroup, destinationTarget);
5390
5469
  }
5391
5470
  return;
5392
5471
  }
5393
- if (!target || target === 'center') {
5394
- const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(itemId)) ||
5395
- this.panels.find((panel) => panel.id === itemId);
5472
+ if (!destinationTarget || destinationTarget === 'center') {
5473
+ const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(sourceItemId)) ||
5474
+ this.panels.find((panel) => panel.id === sourceItemId);
5396
5475
  if (!groupItem) {
5397
- throw new Error(`No panel with id ${itemId}`);
5476
+ throw new Error(`No panel with id ${sourceItemId}`);
5398
5477
  }
5399
5478
  if ((sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.size) === 0) {
5400
5479
  this.doRemoveGroup(sourceGroup);
5401
5480
  }
5402
- referenceGroup.model.openPanel(groupItem, { index });
5481
+ destinationGroup.model.openPanel(groupItem, {
5482
+ index: destinationIndex,
5483
+ });
5403
5484
  }
5404
5485
  else {
5405
- const referenceLocation = getGridLocation(referenceGroup.element);
5406
- const targetLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
5486
+ const referenceLocation = getGridLocation(destinationGroup.element);
5487
+ const targetLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, destinationTarget);
5407
5488
  if (sourceGroup && sourceGroup.size < 2) {
5408
5489
  const [targetParentLocation, to] = tail(targetLocation);
5409
5490
  const sourceLocation = getGridLocation(sourceGroup.element);
@@ -5421,18 +5502,18 @@ class DockviewComponent extends BaseGrid {
5421
5502
  skipDispose: true,
5422
5503
  });
5423
5504
  // after deleting the group we need to re-evaulate the ref location
5424
- const updatedReferenceLocation = getGridLocation(referenceGroup.element);
5425
- const location = getRelativeLocation(this.gridview.orientation, updatedReferenceLocation, target);
5505
+ const updatedReferenceLocation = getGridLocation(destinationGroup.element);
5506
+ const location = getRelativeLocation(this.gridview.orientation, updatedReferenceLocation, destinationTarget);
5426
5507
  this.doAddGroup(targetGroup, location);
5427
5508
  }
5428
5509
  }
5429
5510
  else {
5430
- const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(itemId)) ||
5431
- this.panels.find((panel) => panel.id === itemId);
5511
+ const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(sourceItemId)) ||
5512
+ this.panels.find((panel) => panel.id === sourceItemId);
5432
5513
  if (!groupItem) {
5433
- throw new Error(`No panel with id ${itemId}`);
5514
+ throw new Error(`No panel with id ${sourceItemId}`);
5434
5515
  }
5435
- const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
5516
+ const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, destinationTarget);
5436
5517
  const group = this.createGroupAtLocation(dropLocation);
5437
5518
  group.model.openPanel(groupItem);
5438
5519
  }
@@ -5526,11 +5607,11 @@ class DockviewComponent extends BaseGrid {
5526
5607
  return (_a = Array.from(this._groups.values()).find((group) => group.value.model.containsPanel(panel))) === null || _a === void 0 ? void 0 : _a.value;
5527
5608
  }
5528
5609
  dispose() {
5529
- super.dispose();
5530
5610
  this._onDidActivePanelChange.dispose();
5531
5611
  this._onDidAddPanel.dispose();
5532
5612
  this._onDidRemovePanel.dispose();
5533
5613
  this._onDidLayoutFromJSON.dispose();
5614
+ super.dispose();
5534
5615
  }
5535
5616
  }
5536
5617
 
@@ -5788,7 +5869,7 @@ class SplitviewComponent extends Resizable {
5788
5869
  }
5789
5870
  set splitview(value) {
5790
5871
  this._splitview = value;
5791
- this._disposable.value = new CompositeDisposable(this._splitview.onDidSashEnd(() => {
5872
+ this._splitviewChangeDisposable.value = new CompositeDisposable(this._splitview.onDidSashEnd(() => {
5792
5873
  this._onDidLayoutChange.fire(undefined);
5793
5874
  }), this._splitview.onDidAddView((e) => this._onDidAddView.fire(e)), this._splitview.onDidRemoveView((e) => this._onDidRemoveView.fire(e)));
5794
5875
  }
@@ -5810,7 +5891,7 @@ class SplitviewComponent extends Resizable {
5810
5891
  }
5811
5892
  constructor(options) {
5812
5893
  super(options.parentElement);
5813
- this._disposable = new MutableDisposable();
5894
+ this._splitviewChangeDisposable = new MutableDisposable();
5814
5895
  this._panels = new Map();
5815
5896
  this._onDidLayoutfromJSON = new Emitter();
5816
5897
  this.onDidLayoutFromJSON = this._onDidLayoutfromJSON.event;
@@ -5828,7 +5909,7 @@ class SplitviewComponent extends Resizable {
5828
5909
  options.frameworkComponents = {};
5829
5910
  }
5830
5911
  this.splitview = new Splitview(this.element, options);
5831
- this.addDisposables(this._disposable, this._onDidAddView, this._onDidLayoutfromJSON, this._onDidRemoveView, this._onDidLayoutChange);
5912
+ this.addDisposables(this._onDidAddView, this._onDidLayoutfromJSON, this._onDidRemoveView, this._onDidLayoutChange);
5832
5913
  }
5833
5914
  updateOptions(options) {
5834
5915
  const hasOrientationChanged = typeof options.orientation === 'string' &&
@@ -5866,15 +5947,15 @@ class SplitviewComponent extends Resizable {
5866
5947
  }
5867
5948
  }
5868
5949
  removePanel(panel, sizing) {
5869
- const disposable = this._panels.get(panel.id);
5870
- if (!disposable) {
5950
+ const item = this._panels.get(panel.id);
5951
+ if (!item) {
5871
5952
  throw new Error(`unknown splitview panel ${panel.id}`);
5872
5953
  }
5873
- disposable.disposable.dispose();
5874
- disposable.value.dispose();
5954
+ item.dispose();
5875
5955
  this._panels.delete(panel.id);
5876
5956
  const index = this.panels.findIndex((_) => _ === panel);
5877
- this.splitview.removeView(index, sizing);
5957
+ const removedView = this.splitview.removeView(index, sizing);
5958
+ removedView.dispose();
5878
5959
  const panels = this.panels;
5879
5960
  if (panels.length > 0) {
5880
5961
  this.setActive(panels[panels.length - 1]);
@@ -5921,7 +6002,7 @@ class SplitviewComponent extends Resizable {
5921
6002
  }
5922
6003
  this.setActive(view, true);
5923
6004
  });
5924
- this._panels.set(view.id, { disposable, value: view });
6005
+ this._panels.set(view.id, disposable);
5925
6006
  }
5926
6007
  toJSON() {
5927
6008
  var _a;
@@ -5994,20 +6075,26 @@ class SplitviewComponent extends Resizable {
5994
6075
  this._onDidLayoutfromJSON.fire();
5995
6076
  }
5996
6077
  clear() {
5997
- for (const [_, value] of this._panels.entries()) {
5998
- value.disposable.dispose();
5999
- value.value.dispose();
6078
+ for (const disposable of this._panels.values()) {
6079
+ disposable.dispose();
6000
6080
  }
6001
6081
  this._panels.clear();
6002
- this.splitview.dispose();
6082
+ while (this.splitview.length > 0) {
6083
+ const view = this.splitview.removeView(0, exports.Sizing.Distribute, true);
6084
+ view.dispose();
6085
+ }
6003
6086
  }
6004
6087
  dispose() {
6005
- for (const [_, value] of this._panels.entries()) {
6006
- value.disposable.dispose();
6007
- value.value.dispose();
6088
+ for (const disposable of this._panels.values()) {
6089
+ disposable.dispose();
6008
6090
  }
6009
6091
  this._panels.clear();
6092
+ const views = this.splitview.getViews();
6093
+ this._splitviewChangeDisposable.dispose();
6010
6094
  this.splitview.dispose();
6095
+ for (const view of views) {
6096
+ view.dispose();
6097
+ }
6011
6098
  super.dispose();
6012
6099
  }
6013
6100
  }