dockview-core 1.7.6 → 1.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/README.md +2 -1
  2. package/dist/cjs/api/component.api.d.ts +6 -1
  3. package/dist/cjs/api/component.api.d.ts.map +1 -1
  4. package/dist/cjs/api/component.api.js +6 -0
  5. package/dist/cjs/api/component.api.js.map +1 -1
  6. package/dist/cjs/api/dockviewGroupPanelApi.d.ts +30 -0
  7. package/dist/cjs/api/dockviewGroupPanelApi.d.ts.map +1 -0
  8. package/dist/cjs/api/dockviewGroupPanelApi.js +54 -0
  9. package/dist/cjs/api/dockviewGroupPanelApi.js.map +1 -0
  10. package/dist/cjs/api/dockviewPanelApi.d.ts +14 -1
  11. package/dist/cjs/api/dockviewPanelApi.d.ts.map +1 -1
  12. package/dist/cjs/api/dockviewPanelApi.js +6 -1
  13. package/dist/cjs/api/dockviewPanelApi.js.map +1 -1
  14. package/dist/cjs/array.d.ts +1 -0
  15. package/dist/cjs/array.d.ts.map +1 -1
  16. package/dist/cjs/array.js +10 -1
  17. package/dist/cjs/array.js.map +1 -1
  18. package/dist/cjs/dnd/abstractDragHandler.d.ts +1 -0
  19. package/dist/cjs/dnd/abstractDragHandler.d.ts.map +1 -1
  20. package/dist/cjs/dnd/abstractDragHandler.js +7 -0
  21. package/dist/cjs/dnd/abstractDragHandler.js.map +1 -1
  22. package/dist/cjs/dnd/droptarget.d.ts +11 -0
  23. package/dist/cjs/dnd/droptarget.d.ts.map +1 -1
  24. package/dist/cjs/dnd/droptarget.js +32 -9
  25. package/dist/cjs/dnd/droptarget.js.map +1 -1
  26. package/dist/cjs/dnd/groupDragHandler.d.ts +1 -0
  27. package/dist/cjs/dnd/groupDragHandler.d.ts.map +1 -1
  28. package/dist/cjs/dnd/groupDragHandler.js +18 -0
  29. package/dist/cjs/dnd/groupDragHandler.js.map +1 -1
  30. package/dist/cjs/dnd/overlay.d.ts +40 -0
  31. package/dist/cjs/dnd/overlay.d.ts.map +1 -0
  32. package/dist/cjs/dnd/overlay.js +382 -0
  33. package/dist/cjs/dnd/overlay.js.map +1 -0
  34. package/dist/cjs/dockview/components/tab/tab.d.ts +2 -2
  35. package/dist/cjs/dockview/components/tab/tab.d.ts.map +1 -1
  36. package/dist/cjs/dockview/components/tab/tab.js +0 -7
  37. package/dist/cjs/dockview/components/tab/tab.js.map +1 -1
  38. package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts +8 -4
  39. package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts.map +1 -1
  40. package/dist/cjs/dockview/components/titlebar/tabsContainer.js +54 -10
  41. package/dist/cjs/dockview/components/titlebar/tabsContainer.js.map +1 -1
  42. package/dist/cjs/dockview/deserializer.d.ts +2 -2
  43. package/dist/cjs/dockview/deserializer.d.ts.map +1 -1
  44. package/dist/cjs/dockview/deserializer.js.map +1 -1
  45. package/dist/cjs/dockview/dockviewComponent.d.ts +41 -9
  46. package/dist/cjs/dockview/dockviewComponent.d.ts.map +1 -1
  47. package/dist/cjs/dockview/dockviewComponent.js +285 -76
  48. package/dist/cjs/dockview/dockviewComponent.js.map +1 -1
  49. package/dist/cjs/dockview/dockviewFloatingGroupPanel.d.ts +24 -0
  50. package/dist/cjs/dockview/dockviewFloatingGroupPanel.d.ts.map +1 -0
  51. package/dist/cjs/dockview/dockviewFloatingGroupPanel.js +35 -0
  52. package/dist/cjs/dockview/dockviewFloatingGroupPanel.js.map +1 -0
  53. package/dist/cjs/dockview/dockviewGroupPanel.d.ts +5 -6
  54. package/dist/cjs/dockview/dockviewGroupPanel.d.ts.map +1 -1
  55. package/dist/cjs/dockview/dockviewGroupPanel.js +3 -2
  56. package/dist/cjs/dockview/dockviewGroupPanel.js.map +1 -1
  57. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +5 -1
  58. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts.map +1 -1
  59. package/dist/cjs/dockview/dockviewGroupPanelModel.js +43 -12
  60. package/dist/cjs/dockview/dockviewGroupPanelModel.js.map +1 -1
  61. package/dist/cjs/dockview/dockviewPanel.d.ts +2 -2
  62. package/dist/cjs/dockview/dockviewPanel.d.ts.map +1 -1
  63. package/dist/cjs/dockview/dockviewPanel.js +1 -1
  64. package/dist/cjs/dockview/dockviewPanel.js.map +1 -1
  65. package/dist/cjs/dockview/options.d.ts +22 -6
  66. package/dist/cjs/dockview/options.d.ts.map +1 -1
  67. package/dist/cjs/dockview/options.js.map +1 -1
  68. package/dist/cjs/dom.d.ts +5 -3
  69. package/dist/cjs/dom.d.ts.map +1 -1
  70. package/dist/cjs/dom.js +13 -1
  71. package/dist/cjs/dom.js.map +1 -1
  72. package/dist/cjs/events.d.ts.map +1 -1
  73. package/dist/cjs/gridview/branchNode.js +2 -2
  74. package/dist/cjs/gridview/branchNode.js.map +1 -1
  75. package/dist/cjs/gridview/gridview.d.ts.map +1 -1
  76. package/dist/cjs/gridview/gridview.js +9 -7
  77. package/dist/cjs/gridview/gridview.js.map +1 -1
  78. package/dist/cjs/gridview/gridviewComponent.d.ts.map +1 -1
  79. package/dist/cjs/gridview/gridviewComponent.js +4 -1
  80. package/dist/cjs/gridview/gridviewComponent.js.map +1 -1
  81. package/dist/cjs/gridview/gridviewPanel.d.ts +3 -3
  82. package/dist/cjs/gridview/gridviewPanel.d.ts.map +1 -1
  83. package/dist/cjs/gridview/gridviewPanel.js +2 -2
  84. package/dist/cjs/gridview/gridviewPanel.js.map +1 -1
  85. package/dist/cjs/index.d.ts +1 -1
  86. package/dist/cjs/index.d.ts.map +1 -1
  87. package/dist/cjs/index.js +1 -3
  88. package/dist/cjs/index.js.map +1 -1
  89. package/dist/cjs/math.d.ts.map +1 -1
  90. package/dist/cjs/paneview/paneviewComponent.d.ts.map +1 -1
  91. package/dist/cjs/paneview/paneviewComponent.js +4 -1
  92. package/dist/cjs/paneview/paneviewComponent.js.map +1 -1
  93. package/dist/cjs/splitview/splitviewComponent.d.ts.map +1 -1
  94. package/dist/cjs/splitview/splitviewComponent.js +4 -1
  95. package/dist/cjs/splitview/splitviewComponent.js.map +1 -1
  96. package/dist/dockview-core.amd.js +772 -133
  97. package/dist/dockview-core.amd.js.map +1 -0
  98. package/dist/dockview-core.amd.min.js +3 -2
  99. package/dist/dockview-core.amd.min.js.map +1 -0
  100. package/dist/dockview-core.amd.min.noStyle.js +3 -2
  101. package/dist/dockview-core.amd.min.noStyle.js.map +1 -0
  102. package/dist/dockview-core.amd.noStyle.js +771 -132
  103. package/dist/dockview-core.amd.noStyle.js.map +1 -0
  104. package/dist/dockview-core.cjs.js +772 -133
  105. package/dist/dockview-core.cjs.js.map +1 -0
  106. package/dist/dockview-core.esm.js +773 -133
  107. package/dist/dockview-core.esm.js.map +1 -0
  108. package/dist/dockview-core.esm.min.js +3 -2
  109. package/dist/dockview-core.esm.min.js.map +1 -0
  110. package/dist/dockview-core.js +772 -133
  111. package/dist/dockview-core.js.map +1 -0
  112. package/dist/dockview-core.min.js +3 -2
  113. package/dist/dockview-core.min.js.map +1 -0
  114. package/dist/dockview-core.min.noStyle.js +3 -2
  115. package/dist/dockview-core.min.noStyle.js.map +1 -0
  116. package/dist/dockview-core.noStyle.js +771 -132
  117. package/dist/dockview-core.noStyle.js.map +1 -0
  118. package/dist/esm/api/component.api.d.ts +6 -1
  119. package/dist/esm/api/component.api.d.ts.map +1 -1
  120. package/dist/esm/api/component.api.js +6 -0
  121. package/dist/esm/api/component.api.js.map +1 -1
  122. package/dist/esm/api/dockviewGroupPanelApi.d.ts +30 -0
  123. package/dist/esm/api/dockviewGroupPanelApi.d.ts.map +1 -0
  124. package/dist/esm/api/dockviewGroupPanelApi.js +28 -0
  125. package/dist/esm/api/dockviewGroupPanelApi.js.map +1 -0
  126. package/dist/esm/api/dockviewPanelApi.d.ts +14 -1
  127. package/dist/esm/api/dockviewPanelApi.d.ts.map +1 -1
  128. package/dist/esm/api/dockviewPanelApi.js +6 -1
  129. package/dist/esm/api/dockviewPanelApi.js.map +1 -1
  130. package/dist/esm/array.d.ts +1 -0
  131. package/dist/esm/array.d.ts.map +1 -1
  132. package/dist/esm/array.js +8 -0
  133. package/dist/esm/array.js.map +1 -1
  134. package/dist/esm/dnd/abstractDragHandler.d.ts +1 -0
  135. package/dist/esm/dnd/abstractDragHandler.d.ts.map +1 -1
  136. package/dist/esm/dnd/abstractDragHandler.js +7 -0
  137. package/dist/esm/dnd/abstractDragHandler.js.map +1 -1
  138. package/dist/esm/dnd/droptarget.d.ts +11 -0
  139. package/dist/esm/dnd/droptarget.d.ts.map +1 -1
  140. package/dist/esm/dnd/droptarget.js +32 -9
  141. package/dist/esm/dnd/droptarget.js.map +1 -1
  142. package/dist/esm/dnd/groupDragHandler.d.ts +1 -0
  143. package/dist/esm/dnd/groupDragHandler.d.ts.map +1 -1
  144. package/dist/esm/dnd/groupDragHandler.js +18 -0
  145. package/dist/esm/dnd/groupDragHandler.js.map +1 -1
  146. package/dist/esm/dnd/overlay.d.ts +40 -0
  147. package/dist/esm/dnd/overlay.d.ts.map +1 -0
  148. package/dist/esm/dnd/overlay.js +282 -0
  149. package/dist/esm/dnd/overlay.js.map +1 -0
  150. package/dist/esm/dockview/components/tab/tab.d.ts +2 -2
  151. package/dist/esm/dockview/components/tab/tab.d.ts.map +1 -1
  152. package/dist/esm/dockview/components/tab/tab.js +0 -7
  153. package/dist/esm/dockview/components/tab/tab.js.map +1 -1
  154. package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts +8 -4
  155. package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts.map +1 -1
  156. package/dist/esm/dockview/components/titlebar/tabsContainer.js +54 -10
  157. package/dist/esm/dockview/components/titlebar/tabsContainer.js.map +1 -1
  158. package/dist/esm/dockview/deserializer.d.ts +2 -2
  159. package/dist/esm/dockview/deserializer.d.ts.map +1 -1
  160. package/dist/esm/dockview/deserializer.js.map +1 -1
  161. package/dist/esm/dockview/dockviewComponent.d.ts +41 -9
  162. package/dist/esm/dockview/dockviewComponent.d.ts.map +1 -1
  163. package/dist/esm/dockview/dockviewComponent.js +231 -54
  164. package/dist/esm/dockview/dockviewComponent.js.map +1 -1
  165. package/dist/esm/dockview/dockviewFloatingGroupPanel.d.ts +24 -0
  166. package/dist/esm/dockview/dockviewFloatingGroupPanel.d.ts.map +1 -0
  167. package/dist/esm/dockview/dockviewFloatingGroupPanel.js +13 -0
  168. package/dist/esm/dockview/dockviewFloatingGroupPanel.js.map +1 -0
  169. package/dist/esm/dockview/dockviewGroupPanel.d.ts +5 -6
  170. package/dist/esm/dockview/dockviewGroupPanel.d.ts.map +1 -1
  171. package/dist/esm/dockview/dockviewGroupPanel.js +3 -2
  172. package/dist/esm/dockview/dockviewGroupPanel.js.map +1 -1
  173. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +5 -1
  174. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts.map +1 -1
  175. package/dist/esm/dockview/dockviewGroupPanelModel.js +36 -9
  176. package/dist/esm/dockview/dockviewGroupPanelModel.js.map +1 -1
  177. package/dist/esm/dockview/dockviewPanel.d.ts +2 -2
  178. package/dist/esm/dockview/dockviewPanel.d.ts.map +1 -1
  179. package/dist/esm/dockview/dockviewPanel.js +1 -1
  180. package/dist/esm/dockview/dockviewPanel.js.map +1 -1
  181. package/dist/esm/dockview/options.d.ts +22 -6
  182. package/dist/esm/dockview/options.d.ts.map +1 -1
  183. package/dist/esm/dockview/options.js.map +1 -1
  184. package/dist/esm/dom.d.ts +5 -3
  185. package/dist/esm/dom.d.ts.map +1 -1
  186. package/dist/esm/dom.js +10 -0
  187. package/dist/esm/dom.js.map +1 -1
  188. package/dist/esm/events.d.ts.map +1 -1
  189. package/dist/esm/gridview/branchNode.js +2 -2
  190. package/dist/esm/gridview/branchNode.js.map +1 -1
  191. package/dist/esm/gridview/gridview.d.ts.map +1 -1
  192. package/dist/esm/gridview/gridview.js +9 -6
  193. package/dist/esm/gridview/gridview.js.map +1 -1
  194. package/dist/esm/gridview/gridviewComponent.d.ts.map +1 -1
  195. package/dist/esm/gridview/gridviewComponent.js +4 -1
  196. package/dist/esm/gridview/gridviewComponent.js.map +1 -1
  197. package/dist/esm/gridview/gridviewPanel.d.ts +3 -3
  198. package/dist/esm/gridview/gridviewPanel.d.ts.map +1 -1
  199. package/dist/esm/gridview/gridviewPanel.js +2 -2
  200. package/dist/esm/gridview/gridviewPanel.js.map +1 -1
  201. package/dist/esm/index.d.ts +1 -1
  202. package/dist/esm/index.d.ts.map +1 -1
  203. package/dist/esm/index.js +0 -1
  204. package/dist/esm/index.js.map +1 -1
  205. package/dist/esm/math.d.ts.map +1 -1
  206. package/dist/esm/math.js.map +1 -1
  207. package/dist/esm/paneview/paneviewComponent.d.ts.map +1 -1
  208. package/dist/esm/paneview/paneviewComponent.js +4 -1
  209. package/dist/esm/paneview/paneviewComponent.js.map +1 -1
  210. package/dist/esm/splitview/splitviewComponent.d.ts.map +1 -1
  211. package/dist/esm/splitview/splitviewComponent.js +4 -1
  212. package/dist/esm/splitview/splitviewComponent.js.map +1 -1
  213. package/dist/styles/dockview.css +216 -1
  214. package/package.json +5 -5
@@ -81,6 +81,9 @@ var splitview_1 = require("../splitview/splitview");
81
81
  var dockviewGroupPanel_1 = require("./dockviewGroupPanel");
82
82
  var dockviewPanelModel_1 = require("./dockviewPanelModel");
83
83
  var dataTransfer_1 = require("../dnd/dataTransfer");
84
+ var overlay_1 = require("../dnd/overlay");
85
+ var dom_1 = require("../dom");
86
+ var dockviewFloatingGroupPanel_1 = require("./dockviewFloatingGroupPanel");
84
87
  var DockviewComponent = /** @class */ (function (_super) {
85
88
  __extends(DockviewComponent, _super);
86
89
  function DockviewComponent(options) {
@@ -103,7 +106,8 @@ var DockviewComponent = /** @class */ (function (_super) {
103
106
  _this.onDidLayoutFromJSON = _this._onDidLayoutFromJSON.event;
104
107
  _this._onDidActivePanelChange = new events_1.Emitter();
105
108
  _this.onDidActivePanelChange = _this._onDidActivePanelChange.event;
106
- _this.element.classList.add('dv-dockview');
109
+ _this.floatingGroups = [];
110
+ (0, dom_1.toggleClass)(_this.gridview.element, 'dv-dockview', true);
107
111
  _this.addDisposables(_this._onDidDrop, events_1.Event.any(_this.onDidAddGroup, _this.onDidRemoveGroup)(function () {
108
112
  _this.updateWatermark();
109
113
  }), events_1.Event.any(_this.onDidAddPanel, _this.onDidRemovePanel, _this.onDidActivePanelChange)(function () {
@@ -133,9 +137,22 @@ var DockviewComponent = /** @class */ (function (_super) {
133
137
  if (data.viewId !== _this.id) {
134
138
  return false;
135
139
  }
140
+ if (position === 'center') {
141
+ // center drop target is only allowed if there are no panels in the grid
142
+ // floating panels are allowed
143
+ return _this.gridview.length === 0;
144
+ }
136
145
  return true;
137
146
  }
138
147
  if (_this.options.showDndOverlay) {
148
+ if (position === 'center') {
149
+ /**
150
+ * for external events only show the four-corner drag overlays, disable
151
+ * the center position so that external drag events can fall through to the group
152
+ * and panel drop target handlers
153
+ */
154
+ return false;
155
+ }
139
156
  return _this.options.showDndOverlay({
140
157
  nativeEvent: event,
141
158
  position: position,
@@ -145,7 +162,7 @@ var DockviewComponent = /** @class */ (function (_super) {
145
162
  }
146
163
  return false;
147
164
  },
148
- acceptedTargetZones: ['top', 'bottom', 'left', 'right'],
165
+ acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
149
166
  overlayModel: {
150
167
  activationSize: { type: 'pixels', value: 10 },
151
168
  size: { type: 'pixels', value: 20 },
@@ -203,6 +220,76 @@ var DockviewComponent = /** @class */ (function (_super) {
203
220
  enumerable: false,
204
221
  configurable: true
205
222
  });
223
+ DockviewComponent.prototype.addFloatingGroup = function (item, coord, options) {
224
+ var _this = this;
225
+ var _a, _b;
226
+ var group;
227
+ if (item instanceof dockviewPanel_1.DockviewPanel) {
228
+ group = this.createGroup();
229
+ this.removePanel(item, {
230
+ removeEmptyGroup: true,
231
+ skipDispose: true,
232
+ });
233
+ group.model.openPanel(item);
234
+ }
235
+ else {
236
+ group = item;
237
+ var skip = typeof (options === null || options === void 0 ? void 0 : options.skipRemoveGroup) === 'boolean' &&
238
+ options.skipRemoveGroup;
239
+ if (!skip) {
240
+ this.doRemoveGroup(item, { skipDispose: true });
241
+ }
242
+ }
243
+ group.model.isFloating = true;
244
+ var overlayLeft = typeof (coord === null || coord === void 0 ? void 0 : coord.x) === 'number' ? Math.max(coord.x, 0) : 100;
245
+ var overlayTop = typeof (coord === null || coord === void 0 ? void 0 : coord.y) === 'number' ? Math.max(coord.y, 0) : 100;
246
+ var overlay = new overlay_1.Overlay({
247
+ container: this.gridview.element,
248
+ content: group.element,
249
+ height: (_a = coord === null || coord === void 0 ? void 0 : coord.height) !== null && _a !== void 0 ? _a : 300,
250
+ width: (_b = coord === null || coord === void 0 ? void 0 : coord.width) !== null && _b !== void 0 ? _b : 300,
251
+ left: overlayLeft,
252
+ top: overlayTop,
253
+ minimumInViewportWidth: 100,
254
+ minimumInViewportHeight: 100,
255
+ });
256
+ var el = group.element.querySelector('.void-container');
257
+ if (!el) {
258
+ throw new Error('failed to find drag handle');
259
+ }
260
+ overlay.setupDrag(el, {
261
+ inDragMode: typeof (options === null || options === void 0 ? void 0 : options.inDragMode) === 'boolean'
262
+ ? options.inDragMode
263
+ : false,
264
+ });
265
+ var floatingGroupPanel = new dockviewFloatingGroupPanel_1.DockviewFloatingGroupPanel(group, overlay);
266
+ var disposable = (0, dom_1.watchElementResize)(group.element, function (entry) {
267
+ var _a = entry.contentRect, width = _a.width, height = _a.height;
268
+ group.layout(width, height); // let the group know it's size is changing so it can fire events to the panel
269
+ });
270
+ floatingGroupPanel.addDisposables(overlay.onDidChange(function () {
271
+ // this is either a resize or a move
272
+ // to inform the panels .layout(...) the group with it's current size
273
+ // don't care about resize since the above watcher handles that
274
+ group.layout(group.height, group.width);
275
+ }), overlay.onDidChangeEnd(function () {
276
+ _this._bufferOnDidLayoutChange.fire();
277
+ }), group.onDidChange(function (event) {
278
+ overlay.setBounds({
279
+ height: event === null || event === void 0 ? void 0 : event.height,
280
+ width: event === null || event === void 0 ? void 0 : event.width,
281
+ });
282
+ }), {
283
+ dispose: function () {
284
+ disposable.dispose();
285
+ group.model.isFloating = false;
286
+ (0, array_1.remove)(_this.floatingGroups, floatingGroupPanel);
287
+ _this.updateWatermark();
288
+ },
289
+ });
290
+ this.floatingGroups.push(floatingGroupPanel);
291
+ this.updateWatermark();
292
+ };
206
293
  DockviewComponent.prototype.orthogonalize = function (position) {
207
294
  switch (position) {
208
295
  case 'top':
@@ -227,6 +314,7 @@ var DockviewComponent = /** @class */ (function (_super) {
227
314
  switch (position) {
228
315
  case 'top':
229
316
  case 'left':
317
+ case 'center':
230
318
  return this.createGroupAtLocation([0]); // insert into first position
231
319
  case 'bottom':
232
320
  case 'right':
@@ -244,6 +332,26 @@ var DockviewComponent = /** @class */ (function (_super) {
244
332
  }
245
333
  this.layout(this.gridview.width, this.gridview.height, true);
246
334
  };
335
+ DockviewComponent.prototype.layout = function (width, height, forceResize) {
336
+ var e_1, _a;
337
+ _super.prototype.layout.call(this, width, height, forceResize);
338
+ if (this.floatingGroups) {
339
+ try {
340
+ for (var _b = __values(this.floatingGroups), _c = _b.next(); !_c.done; _c = _b.next()) {
341
+ var floating = _c.value;
342
+ // ensure floting groups stay within visible boundaries
343
+ floating.overlay.setBounds();
344
+ }
345
+ }
346
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
347
+ finally {
348
+ try {
349
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
350
+ }
351
+ finally { if (e_1) throw e_1.error; }
352
+ }
353
+ }
354
+ };
247
355
  DockviewComponent.prototype.focus = function () {
248
356
  var _a;
249
357
  (_a = this.activeGroup) === null || _a === void 0 ? void 0 : _a.focus();
@@ -308,67 +416,118 @@ var DockviewComponent = /** @class */ (function (_super) {
308
416
  collection[panel.id] = panel.toJSON();
309
417
  return collection;
310
418
  }, {});
311
- return {
419
+ var floats = this.floatingGroups.map(function (floatingGroup) {
420
+ return {
421
+ data: floatingGroup.group.toJSON(),
422
+ position: floatingGroup.overlay.toJSON(),
423
+ };
424
+ });
425
+ var result = {
312
426
  grid: data,
313
427
  panels: panels,
314
428
  activeGroup: (_a = this.activeGroup) === null || _a === void 0 ? void 0 : _a.id,
315
429
  };
430
+ if (floats.length > 0) {
431
+ result.floatingGroups = floats;
432
+ }
433
+ return result;
316
434
  };
317
435
  DockviewComponent.prototype.fromJSON = function (data) {
436
+ var e_2, _a, e_3, _b;
318
437
  var _this = this;
438
+ var _c;
319
439
  this.clear();
320
440
  var grid = data.grid, panels = data.panels, activeGroup = data.activeGroup;
321
441
  if (grid.root.type !== 'branch' || !Array.isArray(grid.root.data)) {
322
442
  throw new Error('root must be of type branch');
323
443
  }
324
- this.gridview.deserialize(grid, {
325
- fromJSON: function (node) {
326
- var e_1, _a;
327
- var _b = node.data, id = _b.id, locked = _b.locked, hideHeader = _b.hideHeader, views = _b.views, activeView = _b.activeView;
328
- var group = _this.createGroup({
329
- id: id,
330
- locked: !!locked,
331
- hideHeader: !!hideHeader,
332
- });
333
- _this._onDidAddGroup.fire(group);
334
- try {
335
- for (var views_1 = __values(views), views_1_1 = views_1.next(); !views_1_1.done; views_1_1 = views_1.next()) {
336
- var child = views_1_1.value;
337
- var panel = _this._deserializer.fromJSON(panels[child], group);
338
- var isActive = typeof activeView === 'string' &&
339
- activeView === panel.id;
340
- group.model.openPanel(panel, {
341
- skipSetPanelActive: !isActive,
342
- skipSetGroupActive: true,
343
- });
344
- }
345
- }
346
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
347
- finally {
348
- try {
349
- if (views_1_1 && !views_1_1.done && (_a = views_1.return)) _a.call(views_1);
350
- }
351
- finally { if (e_1) throw e_1.error; }
352
- }
353
- if (!group.activePanel && group.panels.length > 0) {
354
- group.model.openPanel(group.panels[group.panels.length - 1], {
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;
461
+ group.model.openPanel(panel, {
462
+ skipSetPanelActive: !isActive,
355
463
  skipSetGroupActive: true,
356
464
  });
357
465
  }
358
- return group;
466
+ }
467
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
468
+ finally {
469
+ try {
470
+ if (views_1_1 && !views_1_1.done && (_a = views_1.return)) _a.call(views_1);
471
+ }
472
+ finally { if (e_4) throw e_4.error; }
473
+ }
474
+ if (!group.activePanel && group.panels.length > 0) {
475
+ group.model.openPanel(group.panels[group.panels.length - 1], {
476
+ skipSetGroupActive: true,
477
+ });
478
+ }
479
+ return group;
480
+ };
481
+ this.gridview.deserialize(grid, {
482
+ fromJSON: function (node) {
483
+ return createGroupFromSerializedState(node.data);
359
484
  },
360
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 {
503
+ try {
504
+ if (serializedFloatingGroups_1_1 && !serializedFloatingGroups_1_1.done && (_a = serializedFloatingGroups_1.return)) _a.call(serializedFloatingGroups_1);
505
+ }
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();
512
+ }
513
+ }
514
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
515
+ finally {
516
+ try {
517
+ if (_e && !_e.done && (_b = _d.return)) _b.call(_d);
518
+ }
519
+ finally { if (e_3) throw e_3.error; }
520
+ }
361
521
  if (typeof activeGroup === 'string') {
362
522
  var panel = this.getPanel(activeGroup);
363
523
  if (panel) {
364
524
  this.doSetGroupActive(panel);
365
525
  }
366
526
  }
367
- this.gridview.layout(this.width, this.height);
368
527
  this._onDidLayoutFromJSON.fire();
369
528
  };
370
529
  DockviewComponent.prototype.clear = function () {
371
- var e_2, _a;
530
+ var e_5, _a;
372
531
  var groups = Array.from(this._groups.values()).map(function (_) { return _.value; });
373
532
  var hasActiveGroup = !!this.activeGroup;
374
533
  var hasActivePanel = !!this.activePanel;
@@ -376,15 +535,15 @@ var DockviewComponent = /** @class */ (function (_super) {
376
535
  for (var groups_1 = __values(groups), groups_1_1 = groups_1.next(); !groups_1_1.done; groups_1_1 = groups_1.next()) {
377
536
  var group = groups_1_1.value;
378
537
  // remove the group will automatically remove the panels
379
- this.removeGroup(group, true);
538
+ this.removeGroup(group, { skipActive: true });
380
539
  }
381
540
  }
382
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
541
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
383
542
  finally {
384
543
  try {
385
544
  if (groups_1_1 && !groups_1_1.done && (_a = groups_1.return)) _a.call(groups_1);
386
545
  }
387
- finally { if (e_2) throw e_2.error; }
546
+ finally { if (e_5) throw e_5.error; }
388
547
  }
389
548
  if (hasActiveGroup) {
390
549
  this.doSetGroupActive(undefined);
@@ -395,7 +554,7 @@ var DockviewComponent = /** @class */ (function (_super) {
395
554
  this.gridview.clear();
396
555
  };
397
556
  DockviewComponent.prototype.closeAllGroups = function () {
398
- var e_3, _a;
557
+ var e_6, _a;
399
558
  try {
400
559
  for (var _b = __values(this._groups.entries()), _c = _b.next(); !_c.done; _c = _b.next()) {
401
560
  var entry = _c.value;
@@ -403,12 +562,12 @@ var DockviewComponent = /** @class */ (function (_super) {
403
562
  group.value.model.closeAllPanels();
404
563
  }
405
564
  }
406
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
565
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
407
566
  finally {
408
567
  try {
409
568
  if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
410
569
  }
411
- finally { if (e_3) throw e_3.error; }
570
+ finally { if (e_6) throw e_6.error; }
412
571
  }
413
572
  };
414
573
  DockviewComponent.prototype.addPanel = function (options) {
@@ -417,6 +576,9 @@ var DockviewComponent = /** @class */ (function (_super) {
417
576
  throw new Error("panel with id ".concat(options.id, " already exists"));
418
577
  }
419
578
  var referenceGroup;
579
+ if (options.position && options.floating) {
580
+ throw new Error('you can only provide one of: position, floating as arguments to .addPanel(...)');
581
+ }
420
582
  if (options.position) {
421
583
  if ((0, options_1.isPanelOptionsWithPanel)(options.position)) {
422
584
  var referencePanel = typeof options.position.referencePanel === 'string'
@@ -449,7 +611,20 @@ var DockviewComponent = /** @class */ (function (_super) {
449
611
  var panel;
450
612
  if (referenceGroup) {
451
613
  var target = (0, baseComponentGridview_1.toTarget)(((_b = options.position) === null || _b === void 0 ? void 0 : _b.direction) || 'within');
452
- if (target === 'center') {
614
+ if (options.floating) {
615
+ var group = this.createGroup();
616
+ panel = this.createPanel(options, group);
617
+ group.model.openPanel(panel);
618
+ var o = typeof options.floating === 'object' &&
619
+ options.floating !== null
620
+ ? options.floating
621
+ : {};
622
+ this.addFloatingGroup(group, o, {
623
+ inDragMode: false,
624
+ skipRemoveGroup: true,
625
+ });
626
+ }
627
+ else if (referenceGroup.api.isFloating || target === 'center') {
453
628
  panel = this.createPanel(options, referenceGroup);
454
629
  referenceGroup.model.openPanel(panel);
455
630
  }
@@ -461,6 +636,19 @@ var DockviewComponent = /** @class */ (function (_super) {
461
636
  group.model.openPanel(panel);
462
637
  }
463
638
  }
639
+ else if (options.floating) {
640
+ var group = this.createGroup();
641
+ panel = this.createPanel(options, group);
642
+ group.model.openPanel(panel);
643
+ var o = typeof options.floating === 'object' &&
644
+ options.floating !== null
645
+ ? options.floating
646
+ : {};
647
+ this.addFloatingGroup(group, o, {
648
+ inDragMode: false,
649
+ skipRemoveGroup: true,
650
+ });
651
+ }
464
652
  else {
465
653
  var group = this.createGroupAtLocation();
466
654
  panel = this.createPanel(options, group);
@@ -478,7 +666,9 @@ var DockviewComponent = /** @class */ (function (_super) {
478
666
  throw new Error("cannot remove panel ".concat(panel.id, ". it's missing a group."));
479
667
  }
480
668
  group.model.removePanel(panel);
481
- panel.dispose();
669
+ if (!options.skipDispose) {
670
+ panel.dispose();
671
+ }
482
672
  if (group.size === 0 && options.removeEmptyGroup) {
483
673
  this.removeGroup(group);
484
674
  }
@@ -493,7 +683,7 @@ var DockviewComponent = /** @class */ (function (_super) {
493
683
  };
494
684
  DockviewComponent.prototype.updateWatermark = function () {
495
685
  var _a, _b;
496
- if (this.groups.length === 0) {
686
+ if (this.groups.filter(function (x) { return !x.api.isFloating; }).length === 0) {
497
687
  if (!this.watermark) {
498
688
  this.watermark = this.createWatermarkComponent();
499
689
  this.watermark.init({
@@ -502,7 +692,7 @@ var DockviewComponent = /** @class */ (function (_super) {
502
692
  var watermarkContainer = document.createElement('div');
503
693
  watermarkContainer.className = 'dv-watermark-container';
504
694
  watermarkContainer.appendChild(this.watermark.element);
505
- this.element.appendChild(watermarkContainer);
695
+ this.gridview.element.appendChild(watermarkContainer);
506
696
  }
507
697
  }
508
698
  else if (this.watermark) {
@@ -552,27 +742,39 @@ var DockviewComponent = /** @class */ (function (_super) {
552
742
  return group;
553
743
  }
554
744
  };
555
- DockviewComponent.prototype.removeGroup = function (group, skipActive) {
556
- var e_4, _a;
557
- if (skipActive === void 0) { skipActive = false; }
745
+ DockviewComponent.prototype.removeGroup = function (group, options) {
746
+ var e_7, _a;
747
+ var _b;
558
748
  var panels = __spreadArray([], __read(group.panels), false); // reassign since group panels will mutate
559
749
  try {
560
750
  for (var panels_1 = __values(panels), panels_1_1 = panels_1.next(); !panels_1_1.done; panels_1_1 = panels_1.next()) {
561
751
  var panel = panels_1_1.value;
562
752
  this.removePanel(panel, {
563
753
  removeEmptyGroup: false,
564
- skipDispose: false,
754
+ skipDispose: (_b = options === null || options === void 0 ? void 0 : options.skipDispose) !== null && _b !== void 0 ? _b : false,
565
755
  });
566
756
  }
567
757
  }
568
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
758
+ catch (e_7_1) { e_7 = { error: e_7_1 }; }
569
759
  finally {
570
760
  try {
571
761
  if (panels_1_1 && !panels_1_1.done && (_a = panels_1.return)) _a.call(panels_1);
572
762
  }
573
- finally { if (e_4) throw e_4.error; }
763
+ finally { if (e_7) throw e_7.error; }
574
764
  }
575
- _super.prototype.doRemoveGroup.call(this, group, { skipActive: skipActive });
765
+ this.doRemoveGroup(group, options);
766
+ };
767
+ DockviewComponent.prototype.doRemoveGroup = function (group, options) {
768
+ var floatingGroup = this.floatingGroups.find(function (_) { return _.group === group; });
769
+ if (floatingGroup) {
770
+ if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
771
+ floatingGroup.group.dispose();
772
+ this._groups.delete(group.id);
773
+ }
774
+ floatingGroup.dispose();
775
+ return floatingGroup.group;
776
+ }
777
+ return _super.prototype.doRemoveGroup.call(this, group, options);
576
778
  };
577
779
  DockviewComponent.prototype.moveGroupOrPanel = function (destinationGroup, sourceGroupId, sourceItemId, destinationTarget, destinationIndex) {
578
780
  var _a;
@@ -603,25 +805,26 @@ var DockviewComponent = /** @class */ (function (_super) {
603
805
  var targetLocation = (0, gridview_1.getRelativeLocation)(this.gridview.orientation, referenceLocation, destinationTarget);
604
806
  if (sourceGroup && sourceGroup.size < 2) {
605
807
  var _b = __read((0, array_1.tail)(targetLocation), 2), targetParentLocation = _b[0], to = _b[1];
606
- var sourceLocation = (0, gridview_1.getGridLocation)(sourceGroup.element);
607
- var _c = __read((0, array_1.tail)(sourceLocation), 2), sourceParentLocation = _c[0], from = _c[1];
608
- if ((0, array_1.sequenceEquals)(sourceParentLocation, targetParentLocation)) {
609
- // special case when 'swapping' two views within same grid location
610
- // if a group has one tab - we are essentially moving the 'group'
611
- // which is equivalent to swapping two views in this case
612
- this.gridview.moveView(sourceParentLocation, from, to);
613
- }
614
- else {
615
- // source group will become empty so delete the group
616
- var targetGroup = this.doRemoveGroup(sourceGroup, {
617
- skipActive: true,
618
- skipDispose: true,
619
- });
620
- // after deleting the group we need to re-evaulate the ref location
621
- var updatedReferenceLocation = (0, gridview_1.getGridLocation)(destinationGroup.element);
622
- var location_3 = (0, gridview_1.getRelativeLocation)(this.gridview.orientation, updatedReferenceLocation, destinationTarget);
623
- this.doAddGroup(targetGroup, location_3);
808
+ var isFloating = this.floatingGroups.find(function (x) { return x.group === sourceGroup; });
809
+ if (!isFloating) {
810
+ var sourceLocation = (0, gridview_1.getGridLocation)(sourceGroup.element);
811
+ var _c = __read((0, array_1.tail)(sourceLocation), 2), sourceParentLocation = _c[0], from = _c[1];
812
+ if ((0, array_1.sequenceEquals)(sourceParentLocation, targetParentLocation)) {
813
+ // special case when 'swapping' two views within same grid location
814
+ // if a group has one tab - we are essentially moving the 'group'
815
+ // which is equivalent to swapping two views in this case
816
+ this.gridview.moveView(sourceParentLocation, from, to);
817
+ }
624
818
  }
819
+ // source group will become empty so delete the group
820
+ var targetGroup = this.doRemoveGroup(sourceGroup, {
821
+ skipActive: true,
822
+ skipDispose: true,
823
+ });
824
+ // after deleting the group we need to re-evaulate the ref location
825
+ var updatedReferenceLocation = (0, gridview_1.getGridLocation)(destinationGroup.element);
826
+ var location_3 = (0, gridview_1.getRelativeLocation)(this.gridview.orientation, updatedReferenceLocation, destinationTarget);
827
+ this.doAddGroup(targetGroup, location_3);
625
828
  }
626
829
  else {
627
830
  var groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(sourceItemId)) ||
@@ -636,7 +839,7 @@ var DockviewComponent = /** @class */ (function (_super) {
636
839
  }
637
840
  };
638
841
  DockviewComponent.prototype.moveGroup = function (sourceGroup, referenceGroup, target) {
639
- var e_5, _a;
842
+ var e_8, _a;
640
843
  if (sourceGroup) {
641
844
  if (!target || target === 'center') {
642
845
  var activePanel = sourceGroup.activePanel;
@@ -654,16 +857,22 @@ var DockviewComponent = /** @class */ (function (_super) {
654
857
  });
655
858
  }
656
859
  }
657
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
860
+ catch (e_8_1) { e_8 = { error: e_8_1 }; }
658
861
  finally {
659
862
  try {
660
863
  if (panels_2_1 && !panels_2_1.done && (_a = panels_2.return)) _a.call(panels_2);
661
864
  }
662
- finally { if (e_5) throw e_5.error; }
865
+ finally { if (e_8) throw e_8.error; }
663
866
  }
664
867
  }
665
868
  else {
666
- this.gridview.removeView((0, gridview_1.getGridLocation)(sourceGroup.element));
869
+ var floatingGroup = this.floatingGroups.find(function (x) { return x.group === sourceGroup; });
870
+ if (floatingGroup) {
871
+ floatingGroup.dispose();
872
+ }
873
+ else {
874
+ this.gridview.removeView((0, gridview_1.getGridLocation)(sourceGroup.element));
875
+ }
667
876
  var referenceLocation = (0, gridview_1.getGridLocation)(referenceGroup.element);
668
877
  var dropLocation = (0, gridview_1.getRelativeLocation)(this.gridview.orientation, referenceLocation, target);
669
878
  this.gridview.addView(sourceGroup, splitview_1.Sizing.Distribute, dropLocation);