dockview-core 1.7.5 → 1.8.0

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 (220) 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 +277 -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 +40 -20
  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/splitview.d.ts.map +1 -1
  94. package/dist/cjs/splitview/splitview.js +12 -11
  95. package/dist/cjs/splitview/splitview.js.map +1 -1
  96. package/dist/cjs/splitview/splitviewComponent.d.ts.map +1 -1
  97. package/dist/cjs/splitview/splitviewComponent.js +4 -1
  98. package/dist/cjs/splitview/splitviewComponent.js.map +1 -1
  99. package/dist/dockview-core.amd.js +808 -158
  100. package/dist/dockview-core.amd.js.map +1 -0
  101. package/dist/dockview-core.amd.min.js +3 -2
  102. package/dist/dockview-core.amd.min.js.map +1 -0
  103. package/dist/dockview-core.amd.min.noStyle.js +3 -2
  104. package/dist/dockview-core.amd.min.noStyle.js.map +1 -0
  105. package/dist/dockview-core.amd.noStyle.js +807 -157
  106. package/dist/dockview-core.amd.noStyle.js.map +1 -0
  107. package/dist/dockview-core.cjs.js +808 -158
  108. package/dist/dockview-core.cjs.js.map +1 -0
  109. package/dist/dockview-core.esm.js +809 -158
  110. package/dist/dockview-core.esm.js.map +1 -0
  111. package/dist/dockview-core.esm.min.js +3 -2
  112. package/dist/dockview-core.esm.min.js.map +1 -0
  113. package/dist/dockview-core.js +808 -158
  114. package/dist/dockview-core.js.map +1 -0
  115. package/dist/dockview-core.min.js +3 -2
  116. package/dist/dockview-core.min.js.map +1 -0
  117. package/dist/dockview-core.min.noStyle.js +3 -2
  118. package/dist/dockview-core.min.noStyle.js.map +1 -0
  119. package/dist/dockview-core.noStyle.js +807 -157
  120. package/dist/dockview-core.noStyle.js.map +1 -0
  121. package/dist/esm/api/component.api.d.ts +6 -1
  122. package/dist/esm/api/component.api.d.ts.map +1 -1
  123. package/dist/esm/api/component.api.js +6 -0
  124. package/dist/esm/api/component.api.js.map +1 -1
  125. package/dist/esm/api/dockviewGroupPanelApi.d.ts +30 -0
  126. package/dist/esm/api/dockviewGroupPanelApi.d.ts.map +1 -0
  127. package/dist/esm/api/dockviewGroupPanelApi.js +28 -0
  128. package/dist/esm/api/dockviewGroupPanelApi.js.map +1 -0
  129. package/dist/esm/api/dockviewPanelApi.d.ts +14 -1
  130. package/dist/esm/api/dockviewPanelApi.d.ts.map +1 -1
  131. package/dist/esm/api/dockviewPanelApi.js +6 -1
  132. package/dist/esm/api/dockviewPanelApi.js.map +1 -1
  133. package/dist/esm/array.d.ts +1 -0
  134. package/dist/esm/array.d.ts.map +1 -1
  135. package/dist/esm/array.js +8 -0
  136. package/dist/esm/array.js.map +1 -1
  137. package/dist/esm/dnd/abstractDragHandler.d.ts +1 -0
  138. package/dist/esm/dnd/abstractDragHandler.d.ts.map +1 -1
  139. package/dist/esm/dnd/abstractDragHandler.js +7 -0
  140. package/dist/esm/dnd/abstractDragHandler.js.map +1 -1
  141. package/dist/esm/dnd/droptarget.d.ts +11 -0
  142. package/dist/esm/dnd/droptarget.d.ts.map +1 -1
  143. package/dist/esm/dnd/droptarget.js +32 -9
  144. package/dist/esm/dnd/droptarget.js.map +1 -1
  145. package/dist/esm/dnd/groupDragHandler.d.ts +1 -0
  146. package/dist/esm/dnd/groupDragHandler.d.ts.map +1 -1
  147. package/dist/esm/dnd/groupDragHandler.js +18 -0
  148. package/dist/esm/dnd/groupDragHandler.js.map +1 -1
  149. package/dist/esm/dnd/overlay.d.ts +40 -0
  150. package/dist/esm/dnd/overlay.d.ts.map +1 -0
  151. package/dist/esm/dnd/overlay.js +282 -0
  152. package/dist/esm/dnd/overlay.js.map +1 -0
  153. package/dist/esm/dockview/components/tab/tab.d.ts +2 -2
  154. package/dist/esm/dockview/components/tab/tab.d.ts.map +1 -1
  155. package/dist/esm/dockview/components/tab/tab.js +0 -7
  156. package/dist/esm/dockview/components/tab/tab.js.map +1 -1
  157. package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts +8 -4
  158. package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts.map +1 -1
  159. package/dist/esm/dockview/components/titlebar/tabsContainer.js +54 -10
  160. package/dist/esm/dockview/components/titlebar/tabsContainer.js.map +1 -1
  161. package/dist/esm/dockview/deserializer.d.ts +2 -2
  162. package/dist/esm/dockview/deserializer.d.ts.map +1 -1
  163. package/dist/esm/dockview/deserializer.js.map +1 -1
  164. package/dist/esm/dockview/dockviewComponent.d.ts +41 -9
  165. package/dist/esm/dockview/dockviewComponent.d.ts.map +1 -1
  166. package/dist/esm/dockview/dockviewComponent.js +223 -54
  167. package/dist/esm/dockview/dockviewComponent.js.map +1 -1
  168. package/dist/esm/dockview/dockviewFloatingGroupPanel.d.ts +24 -0
  169. package/dist/esm/dockview/dockviewFloatingGroupPanel.d.ts.map +1 -0
  170. package/dist/esm/dockview/dockviewFloatingGroupPanel.js +13 -0
  171. package/dist/esm/dockview/dockviewFloatingGroupPanel.js.map +1 -0
  172. package/dist/esm/dockview/dockviewGroupPanel.d.ts +5 -6
  173. package/dist/esm/dockview/dockviewGroupPanel.d.ts.map +1 -1
  174. package/dist/esm/dockview/dockviewGroupPanel.js +3 -2
  175. package/dist/esm/dockview/dockviewGroupPanel.js.map +1 -1
  176. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +5 -1
  177. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts.map +1 -1
  178. package/dist/esm/dockview/dockviewGroupPanelModel.js +36 -9
  179. package/dist/esm/dockview/dockviewGroupPanelModel.js.map +1 -1
  180. package/dist/esm/dockview/dockviewPanel.d.ts +2 -2
  181. package/dist/esm/dockview/dockviewPanel.d.ts.map +1 -1
  182. package/dist/esm/dockview/dockviewPanel.js +1 -1
  183. package/dist/esm/dockview/dockviewPanel.js.map +1 -1
  184. package/dist/esm/dockview/options.d.ts +22 -6
  185. package/dist/esm/dockview/options.d.ts.map +1 -1
  186. package/dist/esm/dockview/options.js.map +1 -1
  187. package/dist/esm/dom.d.ts +5 -3
  188. package/dist/esm/dom.d.ts.map +1 -1
  189. package/dist/esm/dom.js +10 -0
  190. package/dist/esm/dom.js.map +1 -1
  191. package/dist/esm/events.d.ts.map +1 -1
  192. package/dist/esm/gridview/branchNode.js +2 -2
  193. package/dist/esm/gridview/branchNode.js.map +1 -1
  194. package/dist/esm/gridview/gridview.d.ts.map +1 -1
  195. package/dist/esm/gridview/gridview.js +40 -19
  196. package/dist/esm/gridview/gridview.js.map +1 -1
  197. package/dist/esm/gridview/gridviewComponent.d.ts.map +1 -1
  198. package/dist/esm/gridview/gridviewComponent.js +4 -1
  199. package/dist/esm/gridview/gridviewComponent.js.map +1 -1
  200. package/dist/esm/gridview/gridviewPanel.d.ts +3 -3
  201. package/dist/esm/gridview/gridviewPanel.d.ts.map +1 -1
  202. package/dist/esm/gridview/gridviewPanel.js +2 -2
  203. package/dist/esm/gridview/gridviewPanel.js.map +1 -1
  204. package/dist/esm/index.d.ts +1 -1
  205. package/dist/esm/index.d.ts.map +1 -1
  206. package/dist/esm/index.js +0 -1
  207. package/dist/esm/index.js.map +1 -1
  208. package/dist/esm/math.d.ts.map +1 -1
  209. package/dist/esm/math.js.map +1 -1
  210. package/dist/esm/paneview/paneviewComponent.d.ts.map +1 -1
  211. package/dist/esm/paneview/paneviewComponent.js +4 -1
  212. package/dist/esm/paneview/paneviewComponent.js.map +1 -1
  213. package/dist/esm/splitview/splitview.d.ts.map +1 -1
  214. package/dist/esm/splitview/splitview.js +12 -11
  215. package/dist/esm/splitview/splitview.js.map +1 -1
  216. package/dist/esm/splitview/splitviewComponent.d.ts.map +1 -1
  217. package/dist/esm/splitview/splitviewComponent.js +4 -1
  218. package/dist/esm/splitview/splitviewComponent.js.map +1 -1
  219. package/dist/styles/dockview.css +217 -1
  220. 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,6 +137,11 @@ 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) {
@@ -145,7 +154,7 @@ var DockviewComponent = /** @class */ (function (_super) {
145
154
  }
146
155
  return false;
147
156
  },
148
- acceptedTargetZones: ['top', 'bottom', 'left', 'right'],
157
+ acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
149
158
  overlayModel: {
150
159
  activationSize: { type: 'pixels', value: 10 },
151
160
  size: { type: 'pixels', value: 20 },
@@ -203,6 +212,76 @@ var DockviewComponent = /** @class */ (function (_super) {
203
212
  enumerable: false,
204
213
  configurable: true
205
214
  });
215
+ DockviewComponent.prototype.addFloatingGroup = function (item, coord, options) {
216
+ var _this = this;
217
+ var _a, _b;
218
+ var group;
219
+ if (item instanceof dockviewPanel_1.DockviewPanel) {
220
+ group = this.createGroup();
221
+ this.removePanel(item, {
222
+ removeEmptyGroup: true,
223
+ skipDispose: true,
224
+ });
225
+ group.model.openPanel(item);
226
+ }
227
+ else {
228
+ group = item;
229
+ var skip = typeof (options === null || options === void 0 ? void 0 : options.skipRemoveGroup) === 'boolean' &&
230
+ options.skipRemoveGroup;
231
+ if (!skip) {
232
+ this.doRemoveGroup(item, { skipDispose: true });
233
+ }
234
+ }
235
+ group.model.isFloating = true;
236
+ var overlayLeft = typeof (coord === null || coord === void 0 ? void 0 : coord.x) === 'number' ? Math.max(coord.x, 0) : 100;
237
+ var overlayTop = typeof (coord === null || coord === void 0 ? void 0 : coord.y) === 'number' ? Math.max(coord.y, 0) : 100;
238
+ var overlay = new overlay_1.Overlay({
239
+ container: this.gridview.element,
240
+ content: group.element,
241
+ height: (_a = coord === null || coord === void 0 ? void 0 : coord.height) !== null && _a !== void 0 ? _a : 300,
242
+ width: (_b = coord === null || coord === void 0 ? void 0 : coord.width) !== null && _b !== void 0 ? _b : 300,
243
+ left: overlayLeft,
244
+ top: overlayTop,
245
+ minimumInViewportWidth: 100,
246
+ minimumInViewportHeight: 100,
247
+ });
248
+ var el = group.element.querySelector('.void-container');
249
+ if (!el) {
250
+ throw new Error('failed to find drag handle');
251
+ }
252
+ overlay.setupDrag(el, {
253
+ inDragMode: typeof (options === null || options === void 0 ? void 0 : options.inDragMode) === 'boolean'
254
+ ? options.inDragMode
255
+ : false,
256
+ });
257
+ var floatingGroupPanel = new dockviewFloatingGroupPanel_1.DockviewFloatingGroupPanel(group, overlay);
258
+ var disposable = (0, dom_1.watchElementResize)(group.element, function (entry) {
259
+ var _a = entry.contentRect, width = _a.width, height = _a.height;
260
+ group.layout(width, height); // let the group know it's size is changing so it can fire events to the panel
261
+ });
262
+ floatingGroupPanel.addDisposables(overlay.onDidChange(function () {
263
+ // this is either a resize or a move
264
+ // to inform the panels .layout(...) the group with it's current size
265
+ // don't care about resize since the above watcher handles that
266
+ group.layout(group.height, group.width);
267
+ }), overlay.onDidChangeEnd(function () {
268
+ _this._bufferOnDidLayoutChange.fire();
269
+ }), group.onDidChange(function (event) {
270
+ overlay.setBounds({
271
+ height: event === null || event === void 0 ? void 0 : event.height,
272
+ width: event === null || event === void 0 ? void 0 : event.width,
273
+ });
274
+ }), {
275
+ dispose: function () {
276
+ disposable.dispose();
277
+ group.model.isFloating = false;
278
+ (0, array_1.remove)(_this.floatingGroups, floatingGroupPanel);
279
+ _this.updateWatermark();
280
+ },
281
+ });
282
+ this.floatingGroups.push(floatingGroupPanel);
283
+ this.updateWatermark();
284
+ };
206
285
  DockviewComponent.prototype.orthogonalize = function (position) {
207
286
  switch (position) {
208
287
  case 'top':
@@ -227,6 +306,7 @@ var DockviewComponent = /** @class */ (function (_super) {
227
306
  switch (position) {
228
307
  case 'top':
229
308
  case 'left':
309
+ case 'center':
230
310
  return this.createGroupAtLocation([0]); // insert into first position
231
311
  case 'bottom':
232
312
  case 'right':
@@ -244,6 +324,26 @@ var DockviewComponent = /** @class */ (function (_super) {
244
324
  }
245
325
  this.layout(this.gridview.width, this.gridview.height, true);
246
326
  };
327
+ DockviewComponent.prototype.layout = function (width, height, forceResize) {
328
+ var e_1, _a;
329
+ _super.prototype.layout.call(this, width, height, forceResize);
330
+ if (this.floatingGroups) {
331
+ try {
332
+ for (var _b = __values(this.floatingGroups), _c = _b.next(); !_c.done; _c = _b.next()) {
333
+ var floating = _c.value;
334
+ // ensure floting groups stay within visible boundaries
335
+ floating.overlay.setBounds();
336
+ }
337
+ }
338
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
339
+ finally {
340
+ try {
341
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
342
+ }
343
+ finally { if (e_1) throw e_1.error; }
344
+ }
345
+ }
346
+ };
247
347
  DockviewComponent.prototype.focus = function () {
248
348
  var _a;
249
349
  (_a = this.activeGroup) === null || _a === void 0 ? void 0 : _a.focus();
@@ -308,67 +408,118 @@ var DockviewComponent = /** @class */ (function (_super) {
308
408
  collection[panel.id] = panel.toJSON();
309
409
  return collection;
310
410
  }, {});
311
- return {
411
+ var floats = this.floatingGroups.map(function (floatingGroup) {
412
+ return {
413
+ data: floatingGroup.group.toJSON(),
414
+ position: floatingGroup.overlay.toJSON(),
415
+ };
416
+ });
417
+ var result = {
312
418
  grid: data,
313
419
  panels: panels,
314
420
  activeGroup: (_a = this.activeGroup) === null || _a === void 0 ? void 0 : _a.id,
315
421
  };
422
+ if (floats.length > 0) {
423
+ result.floatingGroups = floats;
424
+ }
425
+ return result;
316
426
  };
317
427
  DockviewComponent.prototype.fromJSON = function (data) {
428
+ var e_2, _a, e_3, _b;
318
429
  var _this = this;
430
+ var _c;
319
431
  this.clear();
320
432
  var grid = data.grid, panels = data.panels, activeGroup = data.activeGroup;
321
433
  if (grid.root.type !== 'branch' || !Array.isArray(grid.root.data)) {
322
434
  throw new Error('root must be of type branch');
323
435
  }
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], {
436
+ // take note of the existing dimensions
437
+ var width = this.width;
438
+ var height = this.height;
439
+ var createGroupFromSerializedState = function (data) {
440
+ var e_4, _a;
441
+ var id = data.id, locked = data.locked, hideHeader = data.hideHeader, views = data.views, activeView = data.activeView;
442
+ var group = _this.createGroup({
443
+ id: id,
444
+ locked: !!locked,
445
+ hideHeader: !!hideHeader,
446
+ });
447
+ _this._onDidAddGroup.fire(group);
448
+ try {
449
+ for (var views_1 = __values(views), views_1_1 = views_1.next(); !views_1_1.done; views_1_1 = views_1.next()) {
450
+ var child = views_1_1.value;
451
+ var panel = _this._deserializer.fromJSON(panels[child], group);
452
+ var isActive = typeof activeView === 'string' && activeView === panel.id;
453
+ group.model.openPanel(panel, {
454
+ skipSetPanelActive: !isActive,
355
455
  skipSetGroupActive: true,
356
456
  });
357
457
  }
358
- return group;
458
+ }
459
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
460
+ finally {
461
+ try {
462
+ if (views_1_1 && !views_1_1.done && (_a = views_1.return)) _a.call(views_1);
463
+ }
464
+ finally { if (e_4) throw e_4.error; }
465
+ }
466
+ if (!group.activePanel && group.panels.length > 0) {
467
+ group.model.openPanel(group.panels[group.panels.length - 1], {
468
+ skipSetGroupActive: true,
469
+ });
470
+ }
471
+ return group;
472
+ };
473
+ this.gridview.deserialize(grid, {
474
+ fromJSON: function (node) {
475
+ return createGroupFromSerializedState(node.data);
359
476
  },
360
477
  });
478
+ this.layout(width, height, true);
479
+ var serializedFloatingGroups = (_c = data.floatingGroups) !== null && _c !== void 0 ? _c : [];
480
+ try {
481
+ for (var serializedFloatingGroups_1 = __values(serializedFloatingGroups), serializedFloatingGroups_1_1 = serializedFloatingGroups_1.next(); !serializedFloatingGroups_1_1.done; serializedFloatingGroups_1_1 = serializedFloatingGroups_1.next()) {
482
+ var serializedFloatingGroup = serializedFloatingGroups_1_1.value;
483
+ var data_1 = serializedFloatingGroup.data, position = serializedFloatingGroup.position;
484
+ var group = createGroupFromSerializedState(data_1);
485
+ this.addFloatingGroup(group, {
486
+ x: position.left,
487
+ y: position.top,
488
+ height: position.height,
489
+ width: position.width,
490
+ }, { skipRemoveGroup: true, inDragMode: false });
491
+ }
492
+ }
493
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
494
+ finally {
495
+ try {
496
+ if (serializedFloatingGroups_1_1 && !serializedFloatingGroups_1_1.done && (_a = serializedFloatingGroups_1.return)) _a.call(serializedFloatingGroups_1);
497
+ }
498
+ finally { if (e_2) throw e_2.error; }
499
+ }
500
+ try {
501
+ for (var _d = __values(this.floatingGroups), _e = _d.next(); !_e.done; _e = _d.next()) {
502
+ var floatingGroup = _e.value;
503
+ floatingGroup.overlay.setBounds();
504
+ }
505
+ }
506
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
507
+ finally {
508
+ try {
509
+ if (_e && !_e.done && (_b = _d.return)) _b.call(_d);
510
+ }
511
+ finally { if (e_3) throw e_3.error; }
512
+ }
361
513
  if (typeof activeGroup === 'string') {
362
514
  var panel = this.getPanel(activeGroup);
363
515
  if (panel) {
364
516
  this.doSetGroupActive(panel);
365
517
  }
366
518
  }
367
- this.gridview.layout(this.width, this.height);
368
519
  this._onDidLayoutFromJSON.fire();
369
520
  };
370
521
  DockviewComponent.prototype.clear = function () {
371
- var e_2, _a;
522
+ var e_5, _a;
372
523
  var groups = Array.from(this._groups.values()).map(function (_) { return _.value; });
373
524
  var hasActiveGroup = !!this.activeGroup;
374
525
  var hasActivePanel = !!this.activePanel;
@@ -376,15 +527,15 @@ var DockviewComponent = /** @class */ (function (_super) {
376
527
  for (var groups_1 = __values(groups), groups_1_1 = groups_1.next(); !groups_1_1.done; groups_1_1 = groups_1.next()) {
377
528
  var group = groups_1_1.value;
378
529
  // remove the group will automatically remove the panels
379
- this.removeGroup(group, true);
530
+ this.removeGroup(group, { skipActive: true });
380
531
  }
381
532
  }
382
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
533
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
383
534
  finally {
384
535
  try {
385
536
  if (groups_1_1 && !groups_1_1.done && (_a = groups_1.return)) _a.call(groups_1);
386
537
  }
387
- finally { if (e_2) throw e_2.error; }
538
+ finally { if (e_5) throw e_5.error; }
388
539
  }
389
540
  if (hasActiveGroup) {
390
541
  this.doSetGroupActive(undefined);
@@ -395,7 +546,7 @@ var DockviewComponent = /** @class */ (function (_super) {
395
546
  this.gridview.clear();
396
547
  };
397
548
  DockviewComponent.prototype.closeAllGroups = function () {
398
- var e_3, _a;
549
+ var e_6, _a;
399
550
  try {
400
551
  for (var _b = __values(this._groups.entries()), _c = _b.next(); !_c.done; _c = _b.next()) {
401
552
  var entry = _c.value;
@@ -403,12 +554,12 @@ var DockviewComponent = /** @class */ (function (_super) {
403
554
  group.value.model.closeAllPanels();
404
555
  }
405
556
  }
406
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
557
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
407
558
  finally {
408
559
  try {
409
560
  if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
410
561
  }
411
- finally { if (e_3) throw e_3.error; }
562
+ finally { if (e_6) throw e_6.error; }
412
563
  }
413
564
  };
414
565
  DockviewComponent.prototype.addPanel = function (options) {
@@ -417,6 +568,9 @@ var DockviewComponent = /** @class */ (function (_super) {
417
568
  throw new Error("panel with id ".concat(options.id, " already exists"));
418
569
  }
419
570
  var referenceGroup;
571
+ if (options.position && options.floating) {
572
+ throw new Error('you can only provide one of: position, floating as arguments to .addPanel(...)');
573
+ }
420
574
  if (options.position) {
421
575
  if ((0, options_1.isPanelOptionsWithPanel)(options.position)) {
422
576
  var referencePanel = typeof options.position.referencePanel === 'string'
@@ -449,7 +603,20 @@ var DockviewComponent = /** @class */ (function (_super) {
449
603
  var panel;
450
604
  if (referenceGroup) {
451
605
  var target = (0, baseComponentGridview_1.toTarget)(((_b = options.position) === null || _b === void 0 ? void 0 : _b.direction) || 'within');
452
- if (target === 'center') {
606
+ if (options.floating) {
607
+ var group = this.createGroup();
608
+ panel = this.createPanel(options, group);
609
+ group.model.openPanel(panel);
610
+ var o = typeof options.floating === 'object' &&
611
+ options.floating !== null
612
+ ? options.floating
613
+ : {};
614
+ this.addFloatingGroup(group, o, {
615
+ inDragMode: false,
616
+ skipRemoveGroup: true,
617
+ });
618
+ }
619
+ else if (referenceGroup.api.isFloating || target === 'center') {
453
620
  panel = this.createPanel(options, referenceGroup);
454
621
  referenceGroup.model.openPanel(panel);
455
622
  }
@@ -461,6 +628,19 @@ var DockviewComponent = /** @class */ (function (_super) {
461
628
  group.model.openPanel(panel);
462
629
  }
463
630
  }
631
+ else if (options.floating) {
632
+ var group = this.createGroup();
633
+ panel = this.createPanel(options, group);
634
+ group.model.openPanel(panel);
635
+ var o = typeof options.floating === 'object' &&
636
+ options.floating !== null
637
+ ? options.floating
638
+ : {};
639
+ this.addFloatingGroup(group, o, {
640
+ inDragMode: false,
641
+ skipRemoveGroup: true,
642
+ });
643
+ }
464
644
  else {
465
645
  var group = this.createGroupAtLocation();
466
646
  panel = this.createPanel(options, group);
@@ -478,7 +658,9 @@ var DockviewComponent = /** @class */ (function (_super) {
478
658
  throw new Error("cannot remove panel ".concat(panel.id, ". it's missing a group."));
479
659
  }
480
660
  group.model.removePanel(panel);
481
- panel.dispose();
661
+ if (!options.skipDispose) {
662
+ panel.dispose();
663
+ }
482
664
  if (group.size === 0 && options.removeEmptyGroup) {
483
665
  this.removeGroup(group);
484
666
  }
@@ -493,7 +675,7 @@ var DockviewComponent = /** @class */ (function (_super) {
493
675
  };
494
676
  DockviewComponent.prototype.updateWatermark = function () {
495
677
  var _a, _b;
496
- if (this.groups.length === 0) {
678
+ if (this.groups.filter(function (x) { return !x.api.isFloating; }).length === 0) {
497
679
  if (!this.watermark) {
498
680
  this.watermark = this.createWatermarkComponent();
499
681
  this.watermark.init({
@@ -502,7 +684,7 @@ var DockviewComponent = /** @class */ (function (_super) {
502
684
  var watermarkContainer = document.createElement('div');
503
685
  watermarkContainer.className = 'dv-watermark-container';
504
686
  watermarkContainer.appendChild(this.watermark.element);
505
- this.element.appendChild(watermarkContainer);
687
+ this.gridview.element.appendChild(watermarkContainer);
506
688
  }
507
689
  }
508
690
  else if (this.watermark) {
@@ -552,27 +734,39 @@ var DockviewComponent = /** @class */ (function (_super) {
552
734
  return group;
553
735
  }
554
736
  };
555
- DockviewComponent.prototype.removeGroup = function (group, skipActive) {
556
- var e_4, _a;
557
- if (skipActive === void 0) { skipActive = false; }
737
+ DockviewComponent.prototype.removeGroup = function (group, options) {
738
+ var e_7, _a;
739
+ var _b;
558
740
  var panels = __spreadArray([], __read(group.panels), false); // reassign since group panels will mutate
559
741
  try {
560
742
  for (var panels_1 = __values(panels), panels_1_1 = panels_1.next(); !panels_1_1.done; panels_1_1 = panels_1.next()) {
561
743
  var panel = panels_1_1.value;
562
744
  this.removePanel(panel, {
563
745
  removeEmptyGroup: false,
564
- skipDispose: false,
746
+ skipDispose: (_b = options === null || options === void 0 ? void 0 : options.skipDispose) !== null && _b !== void 0 ? _b : false,
565
747
  });
566
748
  }
567
749
  }
568
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
750
+ catch (e_7_1) { e_7 = { error: e_7_1 }; }
569
751
  finally {
570
752
  try {
571
753
  if (panels_1_1 && !panels_1_1.done && (_a = panels_1.return)) _a.call(panels_1);
572
754
  }
573
- finally { if (e_4) throw e_4.error; }
755
+ finally { if (e_7) throw e_7.error; }
574
756
  }
575
- _super.prototype.doRemoveGroup.call(this, group, { skipActive: skipActive });
757
+ this.doRemoveGroup(group, options);
758
+ };
759
+ DockviewComponent.prototype.doRemoveGroup = function (group, options) {
760
+ var floatingGroup = this.floatingGroups.find(function (_) { return _.group === group; });
761
+ if (floatingGroup) {
762
+ if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
763
+ floatingGroup.group.dispose();
764
+ this._groups.delete(group.id);
765
+ }
766
+ floatingGroup.dispose();
767
+ return floatingGroup.group;
768
+ }
769
+ return _super.prototype.doRemoveGroup.call(this, group, options);
576
770
  };
577
771
  DockviewComponent.prototype.moveGroupOrPanel = function (destinationGroup, sourceGroupId, sourceItemId, destinationTarget, destinationIndex) {
578
772
  var _a;
@@ -603,25 +797,26 @@ var DockviewComponent = /** @class */ (function (_super) {
603
797
  var targetLocation = (0, gridview_1.getRelativeLocation)(this.gridview.orientation, referenceLocation, destinationTarget);
604
798
  if (sourceGroup && sourceGroup.size < 2) {
605
799
  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);
800
+ var isFloating = this.floatingGroups.find(function (x) { return x.group === sourceGroup; });
801
+ if (!isFloating) {
802
+ var sourceLocation = (0, gridview_1.getGridLocation)(sourceGroup.element);
803
+ var _c = __read((0, array_1.tail)(sourceLocation), 2), sourceParentLocation = _c[0], from = _c[1];
804
+ if ((0, array_1.sequenceEquals)(sourceParentLocation, targetParentLocation)) {
805
+ // special case when 'swapping' two views within same grid location
806
+ // if a group has one tab - we are essentially moving the 'group'
807
+ // which is equivalent to swapping two views in this case
808
+ this.gridview.moveView(sourceParentLocation, from, to);
809
+ }
624
810
  }
811
+ // source group will become empty so delete the group
812
+ var targetGroup = this.doRemoveGroup(sourceGroup, {
813
+ skipActive: true,
814
+ skipDispose: true,
815
+ });
816
+ // after deleting the group we need to re-evaulate the ref location
817
+ var updatedReferenceLocation = (0, gridview_1.getGridLocation)(destinationGroup.element);
818
+ var location_3 = (0, gridview_1.getRelativeLocation)(this.gridview.orientation, updatedReferenceLocation, destinationTarget);
819
+ this.doAddGroup(targetGroup, location_3);
625
820
  }
626
821
  else {
627
822
  var groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(sourceItemId)) ||
@@ -636,7 +831,7 @@ var DockviewComponent = /** @class */ (function (_super) {
636
831
  }
637
832
  };
638
833
  DockviewComponent.prototype.moveGroup = function (sourceGroup, referenceGroup, target) {
639
- var e_5, _a;
834
+ var e_8, _a;
640
835
  if (sourceGroup) {
641
836
  if (!target || target === 'center') {
642
837
  var activePanel = sourceGroup.activePanel;
@@ -654,16 +849,22 @@ var DockviewComponent = /** @class */ (function (_super) {
654
849
  });
655
850
  }
656
851
  }
657
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
852
+ catch (e_8_1) { e_8 = { error: e_8_1 }; }
658
853
  finally {
659
854
  try {
660
855
  if (panels_2_1 && !panels_2_1.done && (_a = panels_2.return)) _a.call(panels_2);
661
856
  }
662
- finally { if (e_5) throw e_5.error; }
857
+ finally { if (e_8) throw e_8.error; }
663
858
  }
664
859
  }
665
860
  else {
666
- this.gridview.removeView((0, gridview_1.getGridLocation)(sourceGroup.element));
861
+ var floatingGroup = this.floatingGroups.find(function (x) { return x.group === sourceGroup; });
862
+ if (floatingGroup) {
863
+ floatingGroup.dispose();
864
+ }
865
+ else {
866
+ this.gridview.removeView((0, gridview_1.getGridLocation)(sourceGroup.element));
867
+ }
667
868
  var referenceLocation = (0, gridview_1.getGridLocation)(referenceGroup.element);
668
869
  var dropLocation = (0, gridview_1.getRelativeLocation)(this.gridview.orientation, referenceLocation, target);
669
870
  this.gridview.addView(sourceGroup, splitview_1.Sizing.Distribute, dropLocation);