dockview-core 1.8.2 → 1.8.4

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 (187) hide show
  1. package/dist/cjs/api/component.api.d.ts +8 -4
  2. package/dist/cjs/api/component.api.d.ts.map +1 -1
  3. package/dist/cjs/api/component.api.js +14 -0
  4. package/dist/cjs/api/component.api.js.map +1 -1
  5. package/dist/cjs/dnd/abstractDragHandler.d.ts +2 -2
  6. package/dist/cjs/dnd/abstractDragHandler.d.ts.map +1 -1
  7. package/dist/cjs/dnd/abstractDragHandler.js +16 -12
  8. package/dist/cjs/dnd/abstractDragHandler.js.map +1 -1
  9. package/dist/cjs/dnd/groupDragHandler.d.ts +4 -3
  10. package/dist/cjs/dnd/groupDragHandler.d.ts.map +1 -1
  11. package/dist/cjs/dnd/groupDragHandler.js +5 -4
  12. package/dist/cjs/dnd/groupDragHandler.js.map +1 -1
  13. package/dist/cjs/dnd/overlay.d.ts +6 -2
  14. package/dist/cjs/dnd/overlay.d.ts.map +1 -1
  15. package/dist/cjs/dnd/overlay.js +54 -23
  16. package/dist/cjs/dnd/overlay.js.map +1 -1
  17. package/dist/cjs/dockview/components/tab/tab.d.ts +7 -4
  18. package/dist/cjs/dockview/components/tab/tab.d.ts.map +1 -1
  19. package/dist/cjs/dockview/components/tab/tab.js +36 -28
  20. package/dist/cjs/dockview/components/tab/tab.js.map +1 -1
  21. package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts +19 -1
  22. package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts.map +1 -1
  23. package/dist/cjs/dockview/components/titlebar/tabsContainer.js +42 -15
  24. package/dist/cjs/dockview/components/titlebar/tabsContainer.js.map +1 -1
  25. package/dist/cjs/dockview/components/titlebar/voidContainer.d.ts +2 -0
  26. package/dist/cjs/dockview/components/titlebar/voidContainer.d.ts.map +1 -1
  27. package/dist/cjs/dockview/components/titlebar/voidContainer.js +7 -3
  28. package/dist/cjs/dockview/components/titlebar/voidContainer.js.map +1 -1
  29. package/dist/cjs/dockview/dockviewComponent.d.ts +11 -4
  30. package/dist/cjs/dockview/dockviewComponent.d.ts.map +1 -1
  31. package/dist/cjs/dockview/dockviewComponent.js +288 -92
  32. package/dist/cjs/dockview/dockviewComponent.js.map +1 -1
  33. package/dist/cjs/dockview/dockviewGroupPanel.d.ts +4 -4
  34. package/dist/cjs/dockview/dockviewGroupPanel.d.ts.map +1 -1
  35. package/dist/cjs/dockview/dockviewGroupPanel.js.map +1 -1
  36. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +11 -4
  37. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts.map +1 -1
  38. package/dist/cjs/dockview/dockviewGroupPanelModel.js +28 -6
  39. package/dist/cjs/dockview/dockviewGroupPanelModel.js.map +1 -1
  40. package/dist/cjs/dockview/dockviewPanel.d.ts +1 -1
  41. package/dist/cjs/dockview/dockviewPanel.d.ts.map +1 -1
  42. package/dist/cjs/dockview/options.d.ts +9 -5
  43. package/dist/cjs/dockview/options.d.ts.map +1 -1
  44. package/dist/cjs/dockview/options.js.map +1 -1
  45. package/dist/cjs/gridview/baseComponentGridview.d.ts +1 -1
  46. package/dist/cjs/gridview/baseComponentGridview.d.ts.map +1 -1
  47. package/dist/cjs/gridview/baseComponentGridview.js.map +1 -1
  48. package/dist/cjs/gridview/basePanelView.d.ts +4 -4
  49. package/dist/cjs/gridview/basePanelView.d.ts.map +1 -1
  50. package/dist/cjs/gridview/basePanelView.js.map +1 -1
  51. package/dist/cjs/gridview/branchNode.d.ts.map +1 -1
  52. package/dist/cjs/gridview/branchNode.js +1 -0
  53. package/dist/cjs/gridview/branchNode.js.map +1 -1
  54. package/dist/cjs/gridview/gridview.d.ts.map +1 -1
  55. package/dist/cjs/gridview/gridview.js +8 -0
  56. package/dist/cjs/gridview/gridview.js.map +1 -1
  57. package/dist/cjs/gridview/gridviewComponent.d.ts +4 -4
  58. package/dist/cjs/gridview/gridviewComponent.d.ts.map +1 -1
  59. package/dist/cjs/gridview/gridviewComponent.js +71 -39
  60. package/dist/cjs/gridview/gridviewComponent.js.map +1 -1
  61. package/dist/cjs/index.d.ts +1 -0
  62. package/dist/cjs/index.d.ts.map +1 -1
  63. package/dist/cjs/index.js.map +1 -1
  64. package/dist/cjs/lifecycle.d.ts +0 -1
  65. package/dist/cjs/lifecycle.d.ts.map +1 -1
  66. package/dist/cjs/lifecycle.js +0 -32
  67. package/dist/cjs/lifecycle.js.map +1 -1
  68. package/dist/cjs/panel/types.d.ts +2 -2
  69. package/dist/cjs/panel/types.d.ts.map +1 -1
  70. package/dist/cjs/paneview/paneviewComponent.d.ts +5 -6
  71. package/dist/cjs/paneview/paneviewComponent.d.ts.map +1 -1
  72. package/dist/cjs/paneview/paneviewComponent.js.map +1 -1
  73. package/dist/cjs/resizable.d.ts.map +1 -1
  74. package/dist/cjs/resizable.js +8 -0
  75. package/dist/cjs/resizable.js.map +1 -1
  76. package/dist/cjs/splitview/splitview.d.ts.map +1 -1
  77. package/dist/cjs/splitview/splitview.js +11 -1
  78. package/dist/cjs/splitview/splitview.js.map +1 -1
  79. package/dist/cjs/splitview/splitviewComponent.d.ts +4 -4
  80. package/dist/cjs/splitview/splitviewComponent.d.ts.map +1 -1
  81. package/dist/cjs/splitview/splitviewComponent.js.map +1 -1
  82. package/dist/cjs/splitview/splitviewPanel.d.ts +1 -1
  83. package/dist/dockview-core.amd.js +411 -186
  84. package/dist/dockview-core.amd.js.map +1 -1
  85. package/dist/dockview-core.amd.min.js +2 -2
  86. package/dist/dockview-core.amd.min.js.map +1 -1
  87. package/dist/dockview-core.amd.min.noStyle.js +2 -2
  88. package/dist/dockview-core.amd.min.noStyle.js.map +1 -1
  89. package/dist/dockview-core.amd.noStyle.js +411 -186
  90. package/dist/dockview-core.amd.noStyle.js.map +1 -1
  91. package/dist/dockview-core.cjs.js +411 -186
  92. package/dist/dockview-core.cjs.js.map +1 -1
  93. package/dist/dockview-core.esm.js +411 -186
  94. package/dist/dockview-core.esm.js.map +1 -1
  95. package/dist/dockview-core.esm.min.js +2 -2
  96. package/dist/dockview-core.esm.min.js.map +1 -1
  97. package/dist/dockview-core.js +411 -186
  98. package/dist/dockview-core.js.map +1 -1
  99. package/dist/dockview-core.min.js +2 -2
  100. package/dist/dockview-core.min.js.map +1 -1
  101. package/dist/dockview-core.min.noStyle.js +2 -2
  102. package/dist/dockview-core.min.noStyle.js.map +1 -1
  103. package/dist/dockview-core.noStyle.js +411 -186
  104. package/dist/dockview-core.noStyle.js.map +1 -1
  105. package/dist/esm/api/component.api.d.ts +8 -4
  106. package/dist/esm/api/component.api.d.ts.map +1 -1
  107. package/dist/esm/api/component.api.js +6 -0
  108. package/dist/esm/api/component.api.js.map +1 -1
  109. package/dist/esm/dnd/abstractDragHandler.d.ts +2 -2
  110. package/dist/esm/dnd/abstractDragHandler.d.ts.map +1 -1
  111. package/dist/esm/dnd/abstractDragHandler.js +16 -12
  112. package/dist/esm/dnd/abstractDragHandler.js.map +1 -1
  113. package/dist/esm/dnd/groupDragHandler.d.ts +4 -3
  114. package/dist/esm/dnd/groupDragHandler.d.ts.map +1 -1
  115. package/dist/esm/dnd/groupDragHandler.js +5 -4
  116. package/dist/esm/dnd/groupDragHandler.js.map +1 -1
  117. package/dist/esm/dnd/overlay.d.ts +6 -2
  118. package/dist/esm/dnd/overlay.d.ts.map +1 -1
  119. package/dist/esm/dnd/overlay.js +46 -23
  120. package/dist/esm/dnd/overlay.js.map +1 -1
  121. package/dist/esm/dockview/components/tab/tab.d.ts +7 -4
  122. package/dist/esm/dockview/components/tab/tab.d.ts.map +1 -1
  123. package/dist/esm/dockview/components/tab/tab.js +32 -24
  124. package/dist/esm/dockview/components/tab/tab.js.map +1 -1
  125. package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts +19 -1
  126. package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts.map +1 -1
  127. package/dist/esm/dockview/components/titlebar/tabsContainer.js +42 -15
  128. package/dist/esm/dockview/components/titlebar/tabsContainer.js.map +1 -1
  129. package/dist/esm/dockview/components/titlebar/voidContainer.d.ts +2 -0
  130. package/dist/esm/dockview/components/titlebar/voidContainer.d.ts.map +1 -1
  131. package/dist/esm/dockview/components/titlebar/voidContainer.js +7 -3
  132. package/dist/esm/dockview/components/titlebar/voidContainer.js.map +1 -1
  133. package/dist/esm/dockview/dockviewComponent.d.ts +11 -4
  134. package/dist/esm/dockview/dockviewComponent.d.ts.map +1 -1
  135. package/dist/esm/dockview/dockviewComponent.js +204 -59
  136. package/dist/esm/dockview/dockviewComponent.js.map +1 -1
  137. package/dist/esm/dockview/dockviewGroupPanel.d.ts +4 -4
  138. package/dist/esm/dockview/dockviewGroupPanel.d.ts.map +1 -1
  139. package/dist/esm/dockview/dockviewGroupPanel.js.map +1 -1
  140. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +11 -4
  141. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts.map +1 -1
  142. package/dist/esm/dockview/dockviewGroupPanelModel.js +28 -6
  143. package/dist/esm/dockview/dockviewGroupPanelModel.js.map +1 -1
  144. package/dist/esm/dockview/dockviewPanel.d.ts +1 -1
  145. package/dist/esm/dockview/dockviewPanel.d.ts.map +1 -1
  146. package/dist/esm/dockview/options.d.ts +9 -5
  147. package/dist/esm/dockview/options.d.ts.map +1 -1
  148. package/dist/esm/dockview/options.js.map +1 -1
  149. package/dist/esm/gridview/baseComponentGridview.d.ts +1 -1
  150. package/dist/esm/gridview/baseComponentGridview.d.ts.map +1 -1
  151. package/dist/esm/gridview/baseComponentGridview.js.map +1 -1
  152. package/dist/esm/gridview/basePanelView.d.ts +4 -4
  153. package/dist/esm/gridview/basePanelView.d.ts.map +1 -1
  154. package/dist/esm/gridview/basePanelView.js.map +1 -1
  155. package/dist/esm/gridview/branchNode.d.ts.map +1 -1
  156. package/dist/esm/gridview/branchNode.js +1 -0
  157. package/dist/esm/gridview/branchNode.js.map +1 -1
  158. package/dist/esm/gridview/gridview.d.ts.map +1 -1
  159. package/dist/esm/gridview/gridview.js +8 -0
  160. package/dist/esm/gridview/gridview.js.map +1 -1
  161. package/dist/esm/gridview/gridviewComponent.d.ts +4 -4
  162. package/dist/esm/gridview/gridviewComponent.d.ts.map +1 -1
  163. package/dist/esm/gridview/gridviewComponent.js +56 -35
  164. package/dist/esm/gridview/gridviewComponent.js.map +1 -1
  165. package/dist/esm/index.d.ts +1 -0
  166. package/dist/esm/index.d.ts.map +1 -1
  167. package/dist/esm/index.js.map +1 -1
  168. package/dist/esm/lifecycle.d.ts +0 -1
  169. package/dist/esm/lifecycle.d.ts.map +1 -1
  170. package/dist/esm/lifecycle.js +0 -3
  171. package/dist/esm/lifecycle.js.map +1 -1
  172. package/dist/esm/panel/types.d.ts +2 -2
  173. package/dist/esm/panel/types.d.ts.map +1 -1
  174. package/dist/esm/paneview/paneviewComponent.d.ts +5 -6
  175. package/dist/esm/paneview/paneviewComponent.d.ts.map +1 -1
  176. package/dist/esm/paneview/paneviewComponent.js.map +1 -1
  177. package/dist/esm/resizable.d.ts.map +1 -1
  178. package/dist/esm/resizable.js +8 -0
  179. package/dist/esm/resizable.js.map +1 -1
  180. package/dist/esm/splitview/splitview.d.ts.map +1 -1
  181. package/dist/esm/splitview/splitview.js +11 -1
  182. package/dist/esm/splitview/splitview.js.map +1 -1
  183. package/dist/esm/splitview/splitviewComponent.d.ts +4 -4
  184. package/dist/esm/splitview/splitviewComponent.d.ts.map +1 -1
  185. package/dist/esm/splitview/splitviewComponent.js.map +1 -1
  186. package/dist/esm/splitview/splitviewPanel.d.ts +1 -1
  187. package/package.json +3 -4
@@ -84,6 +84,67 @@ var dataTransfer_1 = require("../dnd/dataTransfer");
84
84
  var overlay_1 = require("../dnd/overlay");
85
85
  var dom_1 = require("../dom");
86
86
  var dockviewFloatingGroupPanel_1 = require("./dockviewFloatingGroupPanel");
87
+ var DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE = 100;
88
+ function typeValidate3(data, path) {
89
+ if (typeof data.id !== 'string') {
90
+ throw new Error("".concat(path, ".id must be a string"));
91
+ }
92
+ if (typeof data.activeView !== 'string' ||
93
+ typeof data.activeView !== 'undefined') {
94
+ throw new Error("".concat(path, ".activeView must be a string of undefined"));
95
+ }
96
+ }
97
+ function typeValidate2(data, path) {
98
+ if (typeof data.size !== 'number' && typeof data.size !== 'undefined') {
99
+ throw new Error("".concat(path, ".size must be a number or undefined"));
100
+ }
101
+ if (typeof data.visible !== 'boolean' &&
102
+ typeof data.visible !== 'undefined') {
103
+ throw new Error("".concat(path, ".visible must be a boolean or undefined"));
104
+ }
105
+ if (data.type === 'leaf') {
106
+ if (typeof data.data !== 'object' ||
107
+ data.data === null ||
108
+ Array.isArray(data.data)) {
109
+ throw new Error('object must be a non-null object');
110
+ }
111
+ typeValidate3(data.data, "".concat(path, ".data"));
112
+ }
113
+ else if (data.type === 'branch') {
114
+ if (!Array.isArray(data.data)) {
115
+ throw new Error("".concat(path, ".data must be an array"));
116
+ }
117
+ }
118
+ else {
119
+ throw new Error("".concat(path, ".type must be onew of {'branch', 'leaf'}"));
120
+ }
121
+ }
122
+ function typeValidate(data) {
123
+ if (typeof data !== 'object' || data === null) {
124
+ throw new Error('object must be a non-null object');
125
+ }
126
+ var grid = data.grid, panels = data.panels, activeGroup = data.activeGroup, floatingGroups = data.floatingGroups;
127
+ if (typeof grid !== 'object' || grid === null) {
128
+ throw new Error("'.grid' must be a non-null object");
129
+ }
130
+ if (typeof grid.height !== 'number') {
131
+ throw new Error("'.grid.height' must be a number");
132
+ }
133
+ if (typeof grid.width !== 'number') {
134
+ throw new Error("'.grid.width' must be a number");
135
+ }
136
+ if (typeof grid.root !== 'object' || grid.root === null) {
137
+ throw new Error("'.grid.root' must be a non-null object");
138
+ }
139
+ if (grid.root.type !== 'branch') {
140
+ throw new Error(".grid.root.type must be of type 'branch'");
141
+ }
142
+ if (grid.orientation !== splitview_1.Orientation.HORIZONTAL &&
143
+ grid.orientation !== splitview_1.Orientation.VERTICAL) {
144
+ throw new Error("'.grid.width' must be one of {".concat(splitview_1.Orientation.HORIZONTAL, ", ").concat(splitview_1.Orientation.VERTICAL, "}"));
145
+ }
146
+ typeValidate2(grid.root, '.grid.root');
147
+ }
87
148
  var DockviewComponent = /** @class */ (function (_super) {
88
149
  __extends(DockviewComponent, _super);
89
150
  function DockviewComponent(options) {
@@ -96,6 +157,10 @@ var DockviewComponent = /** @class */ (function (_super) {
96
157
  _this.nextGroupId = (0, math_1.sequentialNumberGenerator)();
97
158
  _this._deserializer = new deserializer_1.DefaultDockviewDeserialzier(_this);
98
159
  _this.watermark = null;
160
+ _this._onWillDragPanel = new events_1.Emitter();
161
+ _this.onWillDragPanel = _this._onWillDragPanel.event;
162
+ _this._onWillDragGroup = new events_1.Emitter();
163
+ _this.onWillDragGroup = _this._onWillDragGroup.event;
99
164
  _this._onDidDrop = new events_1.Emitter();
100
165
  _this.onDidDrop = _this._onDidDrop.event;
101
166
  _this._onDidRemovePanel = new events_1.Emitter();
@@ -108,7 +173,7 @@ var DockviewComponent = /** @class */ (function (_super) {
108
173
  _this.onDidActivePanelChange = _this._onDidActivePanelChange.event;
109
174
  _this.floatingGroups = [];
110
175
  (0, dom_1.toggleClass)(_this.gridview.element, 'dv-dockview', true);
111
- _this.addDisposables(_this._onDidDrop, events_1.Event.any(_this.onDidAddGroup, _this.onDidRemoveGroup)(function () {
176
+ _this.addDisposables(_this._onWillDragPanel, _this._onWillDragGroup, _this._onDidActivePanelChange, _this._onDidAddPanel, _this._onDidRemovePanel, _this._onDidLayoutFromJSON, _this._onDidDrop, events_1.Event.any(_this.onDidAddGroup, _this.onDidRemoveGroup)(function () {
112
177
  _this.updateWatermark();
113
178
  }), events_1.Event.any(_this.onDidAddPanel, _this.onDidRemovePanel, _this.onDidActivePanelChange)(function () {
114
179
  _this._bufferOnDidLayoutChange.fire();
@@ -222,7 +287,7 @@ var DockviewComponent = /** @class */ (function (_super) {
222
287
  });
223
288
  DockviewComponent.prototype.addFloatingGroup = function (item, coord, options) {
224
289
  var _this = this;
225
- var _a, _b;
290
+ var _a, _b, _c, _d, _e, _f;
226
291
  var group;
227
292
  if (item instanceof dockviewPanel_1.DockviewPanel) {
228
293
  group = this.createGroup();
@@ -250,8 +315,12 @@ var DockviewComponent = /** @class */ (function (_super) {
250
315
  width: (_b = coord === null || coord === void 0 ? void 0 : coord.width) !== null && _b !== void 0 ? _b : 300,
251
316
  left: overlayLeft,
252
317
  top: overlayTop,
253
- minimumInViewportWidth: 100,
254
- minimumInViewportHeight: 100,
318
+ minimumInViewportWidth: this.options.floatingGroupBounds === 'boundedWithinViewport'
319
+ ? undefined
320
+ : (_d = (_c = this.options.floatingGroupBounds) === null || _c === void 0 ? void 0 : _c.minimumWidthWithinViewport) !== null && _d !== void 0 ? _d : DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE,
321
+ minimumInViewportHeight: this.options.floatingGroupBounds === 'boundedWithinViewport'
322
+ ? undefined
323
+ : (_f = (_e = this.options.floatingGroupBounds) === null || _e === void 0 ? void 0 : _e.minimumHeightWithinViewport) !== null && _f !== void 0 ? _f : DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE,
255
324
  });
256
325
  var el = group.element.querySelector('.void-container');
257
326
  if (!el) {
@@ -324,16 +393,52 @@ var DockviewComponent = /** @class */ (function (_super) {
324
393
  }
325
394
  };
326
395
  DockviewComponent.prototype.updateOptions = function (options) {
396
+ var e_1, _a;
397
+ var _b, _c;
327
398
  var hasOrientationChanged = typeof options.orientation === 'string' &&
328
399
  this.gridview.orientation !== options.orientation;
400
+ var hasFloatingGroupOptionsChanged = options.floatingGroupBounds !== undefined &&
401
+ options.floatingGroupBounds !== this.options.floatingGroupBounds;
329
402
  this._options = __assign(__assign({}, this.options), options);
330
403
  if (hasOrientationChanged) {
331
404
  this.gridview.orientation = options.orientation;
332
405
  }
406
+ if (hasFloatingGroupOptionsChanged) {
407
+ try {
408
+ for (var _d = __values(this.floatingGroups), _e = _d.next(); !_e.done; _e = _d.next()) {
409
+ var group = _e.value;
410
+ switch (this.options.floatingGroupBounds) {
411
+ case 'boundedWithinViewport':
412
+ group.overlay.minimumInViewportHeight = undefined;
413
+ group.overlay.minimumInViewportWidth = undefined;
414
+ break;
415
+ case undefined:
416
+ group.overlay.minimumInViewportHeight =
417
+ DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE;
418
+ group.overlay.minimumInViewportWidth =
419
+ DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE;
420
+ break;
421
+ default:
422
+ group.overlay.minimumInViewportHeight =
423
+ (_b = this.options.floatingGroupBounds) === null || _b === void 0 ? void 0 : _b.minimumHeightWithinViewport;
424
+ group.overlay.minimumInViewportWidth =
425
+ (_c = this.options.floatingGroupBounds) === null || _c === void 0 ? void 0 : _c.minimumWidthWithinViewport;
426
+ }
427
+ group.overlay.setBounds({});
428
+ }
429
+ }
430
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
431
+ finally {
432
+ try {
433
+ if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
434
+ }
435
+ finally { if (e_1) throw e_1.error; }
436
+ }
437
+ }
333
438
  this.layout(this.gridview.width, this.gridview.height, true);
334
439
  };
335
440
  DockviewComponent.prototype.layout = function (width, height, forceResize) {
336
- var e_1, _a;
441
+ var e_2, _a;
337
442
  _super.prototype.layout.call(this, width, height, forceResize);
338
443
  if (this.floatingGroups) {
339
444
  try {
@@ -343,12 +448,12 @@ var DockviewComponent = /** @class */ (function (_super) {
343
448
  floating.overlay.setBounds();
344
449
  }
345
450
  }
346
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
451
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
347
452
  finally {
348
453
  try {
349
454
  if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
350
455
  }
351
- finally { if (e_1) throw e_1.error; }
456
+ finally { if (e_2) throw e_2.error; }
352
457
  }
353
458
  }
354
459
  };
@@ -433,101 +538,194 @@ var DockviewComponent = /** @class */ (function (_super) {
433
538
  return result;
434
539
  };
435
540
  DockviewComponent.prototype.fromJSON = function (data) {
436
- var e_2, _a, e_3, _b;
541
+ var e_3, _a, e_4, _b, e_5, _c, e_6, _d, e_7, _e, e_8, _f;
437
542
  var _this = this;
438
- var _c;
543
+ var _g;
439
544
  this.clear();
545
+ if (typeof data !== 'object' || data === null) {
546
+ throw new Error('serialized layout must be a non-null object');
547
+ }
440
548
  var grid = data.grid, panels = data.panels, activeGroup = data.activeGroup;
441
549
  if (grid.root.type !== 'branch' || !Array.isArray(grid.root.data)) {
442
550
  throw new Error('root must be of type branch');
443
551
  }
444
- // take note of the existing dimensions
445
- var width = this.width;
446
- var height = this.height;
447
- var createGroupFromSerializedState = function (data) {
448
- var e_4, _a;
449
- var id = data.id, locked = data.locked, hideHeader = data.hideHeader, views = data.views, activeView = data.activeView;
450
- var group = _this.createGroup({
451
- id: id,
452
- locked: !!locked,
453
- hideHeader: !!hideHeader,
454
- });
455
- _this._onDidAddGroup.fire(group);
456
- try {
457
- for (var views_1 = __values(views), views_1_1 = views_1.next(); !views_1_1.done; views_1_1 = views_1.next()) {
458
- var child = views_1_1.value;
459
- var panel = _this._deserializer.fromJSON(panels[child], group);
460
- var isActive = typeof activeView === 'string' && activeView === panel.id;
552
+ try {
553
+ // take note of the existing dimensions
554
+ var width = this.width;
555
+ var height = this.height;
556
+ var createGroupFromSerializedState_1 = function (data) {
557
+ var e_9, _a;
558
+ var id = data.id, locked = data.locked, hideHeader = data.hideHeader, views = data.views, activeView = data.activeView;
559
+ if (typeof id !== 'string') {
560
+ throw new Error('group id must be of type string');
561
+ }
562
+ var group = _this.createGroup({
563
+ id: id,
564
+ locked: !!locked,
565
+ hideHeader: !!hideHeader,
566
+ });
567
+ var createdPanels = [];
568
+ try {
569
+ for (var views_1 = __values(views), views_1_1 = views_1.next(); !views_1_1.done; views_1_1 = views_1.next()) {
570
+ var child = views_1_1.value;
571
+ /**
572
+ * Run the deserializer step seperately since this may fail to due corrupted external state.
573
+ * In running this section first we avoid firing lots of 'add' events in the event of a failure
574
+ * due to a corruption of input data.
575
+ */
576
+ var panel = _this._deserializer.fromJSON(panels[child], group);
577
+ createdPanels.push(panel);
578
+ }
579
+ }
580
+ catch (e_9_1) { e_9 = { error: e_9_1 }; }
581
+ finally {
582
+ try {
583
+ if (views_1_1 && !views_1_1.done && (_a = views_1.return)) _a.call(views_1);
584
+ }
585
+ finally { if (e_9) throw e_9.error; }
586
+ }
587
+ _this._onDidAddGroup.fire(group);
588
+ for (var i = 0; i < views.length; i++) {
589
+ var panel = createdPanels[i];
590
+ var isActive = typeof activeView === 'string' &&
591
+ activeView === panel.id;
461
592
  group.model.openPanel(panel, {
462
593
  skipSetPanelActive: !isActive,
463
594
  skipSetGroupActive: true,
464
595
  });
465
596
  }
597
+ if (!group.activePanel && group.panels.length > 0) {
598
+ group.model.openPanel(group.panels[group.panels.length - 1], {
599
+ skipSetGroupActive: true,
600
+ });
601
+ }
602
+ return group;
603
+ };
604
+ this.gridview.deserialize(grid, {
605
+ fromJSON: function (node) {
606
+ return createGroupFromSerializedState_1(node.data);
607
+ },
608
+ });
609
+ this.layout(width, height, true);
610
+ var serializedFloatingGroups = (_g = data.floatingGroups) !== null && _g !== void 0 ? _g : [];
611
+ try {
612
+ for (var serializedFloatingGroups_1 = __values(serializedFloatingGroups), serializedFloatingGroups_1_1 = serializedFloatingGroups_1.next(); !serializedFloatingGroups_1_1.done; serializedFloatingGroups_1_1 = serializedFloatingGroups_1.next()) {
613
+ var serializedFloatingGroup = serializedFloatingGroups_1_1.value;
614
+ var data_1 = serializedFloatingGroup.data, position = serializedFloatingGroup.position;
615
+ var group = createGroupFromSerializedState_1(data_1);
616
+ this.addFloatingGroup(group, {
617
+ x: position.left,
618
+ y: position.top,
619
+ height: position.height,
620
+ width: position.width,
621
+ }, { skipRemoveGroup: true, inDragMode: false });
622
+ }
623
+ }
624
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
625
+ finally {
626
+ try {
627
+ if (serializedFloatingGroups_1_1 && !serializedFloatingGroups_1_1.done && (_a = serializedFloatingGroups_1.return)) _a.call(serializedFloatingGroups_1);
628
+ }
629
+ finally { if (e_3) throw e_3.error; }
630
+ }
631
+ try {
632
+ for (var _h = __values(this.floatingGroups), _j = _h.next(); !_j.done; _j = _h.next()) {
633
+ var floatingGroup = _j.value;
634
+ floatingGroup.overlay.setBounds();
635
+ }
466
636
  }
467
637
  catch (e_4_1) { e_4 = { error: e_4_1 }; }
468
638
  finally {
469
639
  try {
470
- if (views_1_1 && !views_1_1.done && (_a = views_1.return)) _a.call(views_1);
640
+ if (_j && !_j.done && (_b = _h.return)) _b.call(_h);
471
641
  }
472
642
  finally { if (e_4) throw e_4.error; }
473
643
  }
474
- if (!group.activePanel && group.panels.length > 0) {
475
- group.model.openPanel(group.panels[group.panels.length - 1], {
476
- skipSetGroupActive: true,
477
- });
644
+ if (typeof activeGroup === 'string') {
645
+ var panel = this.getPanel(activeGroup);
646
+ if (panel) {
647
+ this.doSetGroupActive(panel);
648
+ }
478
649
  }
479
- return group;
480
- };
481
- this.gridview.deserialize(grid, {
482
- fromJSON: function (node) {
483
- return createGroupFromSerializedState(node.data);
484
- },
485
- });
486
- this.layout(width, height, true);
487
- var serializedFloatingGroups = (_c = data.floatingGroups) !== null && _c !== void 0 ? _c : [];
488
- try {
489
- for (var serializedFloatingGroups_1 = __values(serializedFloatingGroups), serializedFloatingGroups_1_1 = serializedFloatingGroups_1.next(); !serializedFloatingGroups_1_1.done; serializedFloatingGroups_1_1 = serializedFloatingGroups_1.next()) {
490
- var serializedFloatingGroup = serializedFloatingGroups_1_1.value;
491
- var data_1 = serializedFloatingGroup.data, position = serializedFloatingGroup.position;
492
- var group = createGroupFromSerializedState(data_1);
493
- this.addFloatingGroup(group, {
494
- x: position.left,
495
- y: position.top,
496
- height: position.height,
497
- width: position.width,
498
- }, { skipRemoveGroup: true, inDragMode: false });
499
- }
500
- }
501
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
502
- finally {
650
+ }
651
+ catch (err) {
503
652
  try {
504
- if (serializedFloatingGroups_1_1 && !serializedFloatingGroups_1_1.done && (_a = serializedFloatingGroups_1.return)) _a.call(serializedFloatingGroups_1);
653
+ /**
654
+ * Takes all the successfully created groups and remove all of their panels.
655
+ */
656
+ for (var _k = __values(this.groups), _l = _k.next(); !_l.done; _l = _k.next()) {
657
+ var group = _l.value;
658
+ try {
659
+ for (var _m = (e_6 = void 0, __values(group.panels)), _o = _m.next(); !_o.done; _o = _m.next()) {
660
+ var panel = _o.value;
661
+ this.removePanel(panel, {
662
+ removeEmptyGroup: false,
663
+ skipDispose: false,
664
+ });
665
+ }
666
+ }
667
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
668
+ finally {
669
+ try {
670
+ if (_o && !_o.done && (_d = _m.return)) _d.call(_m);
671
+ }
672
+ finally { if (e_6) throw e_6.error; }
673
+ }
674
+ }
505
675
  }
506
- finally { if (e_2) throw e_2.error; }
507
- }
508
- try {
509
- for (var _d = __values(this.floatingGroups), _e = _d.next(); !_e.done; _e = _d.next()) {
510
- var floatingGroup = _e.value;
511
- floatingGroup.overlay.setBounds();
676
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
677
+ finally {
678
+ try {
679
+ if (_l && !_l.done && (_c = _k.return)) _c.call(_k);
680
+ }
681
+ finally { if (e_5) throw e_5.error; }
512
682
  }
513
- }
514
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
515
- finally {
516
683
  try {
517
- if (_e && !_e.done && (_b = _d.return)) _b.call(_d);
684
+ /**
685
+ * To remove a group we cannot call this.removeGroup(...) since this makes assumptions about
686
+ * the underlying HTMLElement existing in the Gridview.
687
+ */
688
+ for (var _p = __values(this.groups), _q = _p.next(); !_q.done; _q = _p.next()) {
689
+ var group = _q.value;
690
+ group.dispose();
691
+ this._groups.delete(group.id);
692
+ this._onDidRemoveGroup.fire(group);
693
+ }
518
694
  }
519
- finally { if (e_3) throw e_3.error; }
520
- }
521
- if (typeof activeGroup === 'string') {
522
- var panel = this.getPanel(activeGroup);
523
- if (panel) {
524
- this.doSetGroupActive(panel);
695
+ catch (e_7_1) { e_7 = { error: e_7_1 }; }
696
+ finally {
697
+ try {
698
+ if (_q && !_q.done && (_e = _p.return)) _e.call(_p);
699
+ }
700
+ finally { if (e_7) throw e_7.error; }
701
+ }
702
+ try {
703
+ // iterate over a reassigned array since original array will be modified
704
+ for (var _r = __values(__spreadArray([], __read(this.floatingGroups), false)), _s = _r.next(); !_s.done; _s = _r.next()) {
705
+ var floatingGroup = _s.value;
706
+ floatingGroup.dispose();
707
+ }
525
708
  }
709
+ catch (e_8_1) { e_8 = { error: e_8_1 }; }
710
+ finally {
711
+ try {
712
+ if (_s && !_s.done && (_f = _r.return)) _f.call(_r);
713
+ }
714
+ finally { if (e_8) throw e_8.error; }
715
+ }
716
+ // fires clean-up events and clears the underlying HTML gridview.
717
+ this.clear();
718
+ /**
719
+ * even though we have cleaned-up we still want to inform the caller of their error
720
+ * and we'll do this through re-throwing the original error since afterall you would
721
+ * expect trying to load a corrupted layout to result in an error and not silently fail...
722
+ */
723
+ throw err;
526
724
  }
527
725
  this._onDidLayoutFromJSON.fire();
528
726
  };
529
727
  DockviewComponent.prototype.clear = function () {
530
- var e_5, _a;
728
+ var e_10, _a;
531
729
  var groups = Array.from(this._groups.values()).map(function (_) { return _.value; });
532
730
  var hasActiveGroup = !!this.activeGroup;
533
731
  var hasActivePanel = !!this.activePanel;
@@ -538,12 +736,12 @@ var DockviewComponent = /** @class */ (function (_super) {
538
736
  this.removeGroup(group, { skipActive: true });
539
737
  }
540
738
  }
541
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
739
+ catch (e_10_1) { e_10 = { error: e_10_1 }; }
542
740
  finally {
543
741
  try {
544
742
  if (groups_1_1 && !groups_1_1.done && (_a = groups_1.return)) _a.call(groups_1);
545
743
  }
546
- finally { if (e_5) throw e_5.error; }
744
+ finally { if (e_10) throw e_10.error; }
547
745
  }
548
746
  if (hasActiveGroup) {
549
747
  this.doSetGroupActive(undefined);
@@ -554,7 +752,7 @@ var DockviewComponent = /** @class */ (function (_super) {
554
752
  this.gridview.clear();
555
753
  };
556
754
  DockviewComponent.prototype.closeAllGroups = function () {
557
- var e_6, _a;
755
+ var e_11, _a;
558
756
  try {
559
757
  for (var _b = __values(this._groups.entries()), _c = _b.next(); !_c.done; _c = _b.next()) {
560
758
  var entry = _c.value;
@@ -562,12 +760,12 @@ var DockviewComponent = /** @class */ (function (_super) {
562
760
  group.value.model.closeAllPanels();
563
761
  }
564
762
  }
565
- catch (e_6_1) { e_6 = { error: e_6_1 }; }
763
+ catch (e_11_1) { e_11 = { error: e_11_1 }; }
566
764
  finally {
567
765
  try {
568
766
  if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
569
767
  }
570
- finally { if (e_6) throw e_6.error; }
768
+ finally { if (e_11) throw e_11.error; }
571
769
  }
572
770
  };
573
771
  DockviewComponent.prototype.addPanel = function (options) {
@@ -743,7 +941,7 @@ var DockviewComponent = /** @class */ (function (_super) {
743
941
  }
744
942
  };
745
943
  DockviewComponent.prototype.removeGroup = function (group, options) {
746
- var e_7, _a;
944
+ var e_12, _a;
747
945
  var _b;
748
946
  var panels = __spreadArray([], __read(group.panels), false); // reassign since group panels will mutate
749
947
  try {
@@ -755,12 +953,12 @@ var DockviewComponent = /** @class */ (function (_super) {
755
953
  });
756
954
  }
757
955
  }
758
- catch (e_7_1) { e_7 = { error: e_7_1 }; }
956
+ catch (e_12_1) { e_12 = { error: e_12_1 }; }
759
957
  finally {
760
958
  try {
761
959
  if (panels_1_1 && !panels_1_1.done && (_a = panels_1.return)) _a.call(panels_1);
762
960
  }
763
- finally { if (e_7) throw e_7.error; }
961
+ finally { if (e_12) throw e_12.error; }
764
962
  }
765
963
  this.doRemoveGroup(group, options);
766
964
  };
@@ -770,6 +968,7 @@ var DockviewComponent = /** @class */ (function (_super) {
770
968
  if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
771
969
  floatingGroup.group.dispose();
772
970
  this._groups.delete(group.id);
971
+ // TODO: fire group removed event?
773
972
  }
774
973
  floatingGroup.dispose();
775
974
  return floatingGroup.group;
@@ -839,7 +1038,7 @@ var DockviewComponent = /** @class */ (function (_super) {
839
1038
  }
840
1039
  };
841
1040
  DockviewComponent.prototype.moveGroup = function (sourceGroup, referenceGroup, target) {
842
- var e_8, _a;
1041
+ var e_13, _a;
843
1042
  if (sourceGroup) {
844
1043
  if (!target || target === 'center') {
845
1044
  var activePanel = sourceGroup.activePanel;
@@ -857,12 +1056,12 @@ var DockviewComponent = /** @class */ (function (_super) {
857
1056
  });
858
1057
  }
859
1058
  }
860
- catch (e_8_1) { e_8 = { error: e_8_1 }; }
1059
+ catch (e_13_1) { e_13 = { error: e_13_1 }; }
861
1060
  finally {
862
1061
  try {
863
1062
  if (panels_2_1 && !panels_2_1.done && (_a = panels_2.return)) _a.call(panels_2);
864
1063
  }
865
- finally { if (e_8) throw e_8.error; }
1064
+ finally { if (e_13) throw e_13.error; }
866
1065
  }
867
1066
  }
868
1067
  else {
@@ -906,7 +1105,11 @@ var DockviewComponent = /** @class */ (function (_super) {
906
1105
  var view = new dockviewGroupPanel_1.DockviewGroupPanel(this, id, options);
907
1106
  view.init({ params: {}, accessor: null }); // required to initialized .part and allow for correct disposal of group
908
1107
  if (!this._groups.has(view.id)) {
909
- var disposable = new lifecycle_1.CompositeDisposable(view.model.onMove(function (event) {
1108
+ var disposable = new lifecycle_1.CompositeDisposable(view.model.onTabDragStart(function (event) {
1109
+ _this._onWillDragPanel.fire(event);
1110
+ }), view.model.onGroupDragStart(function (event) {
1111
+ _this._onWillDragGroup.fire(event);
1112
+ }), view.model.onMove(function (event) {
910
1113
  var groupId = event.groupId, itemId = event.itemId, target = event.target, index = event.index;
911
1114
  _this.moveGroupOrPanel(view, groupId, itemId, target, index);
912
1115
  }), view.model.onDidDrop(function (event) {
@@ -948,13 +1151,6 @@ var DockviewComponent = /** @class */ (function (_super) {
948
1151
  return group.value.model.containsPanel(panel);
949
1152
  })) === null || _a === void 0 ? void 0 : _a.value;
950
1153
  };
951
- DockviewComponent.prototype.dispose = function () {
952
- this._onDidActivePanelChange.dispose();
953
- this._onDidAddPanel.dispose();
954
- this._onDidRemovePanel.dispose();
955
- this._onDidLayoutFromJSON.dispose();
956
- _super.prototype.dispose.call(this);
957
- };
958
1154
  return DockviewComponent;
959
1155
  }(baseComponentGridview_1.BaseGrid));
960
1156
  exports.DockviewComponent = DockviewComponent;