dockview 1.0.3 → 1.3.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 (261) hide show
  1. package/README.md +243 -186
  2. package/dist/cjs/api/component.api.d.ts +31 -25
  3. package/dist/cjs/api/component.api.js +97 -40
  4. package/dist/cjs/api/component.api.js.map +1 -1
  5. package/dist/cjs/api/gridviewPanelApi.js +1 -0
  6. package/dist/cjs/api/gridviewPanelApi.js.map +1 -1
  7. package/dist/cjs/api/groupPanelApi.d.ts +11 -14
  8. package/dist/cjs/api/groupPanelApi.js +19 -17
  9. package/dist/cjs/api/groupPanelApi.js.map +1 -1
  10. package/dist/cjs/api/panelApi.d.ts +0 -25
  11. package/dist/cjs/api/panelApi.js +1 -20
  12. package/dist/cjs/api/panelApi.js.map +1 -1
  13. package/dist/cjs/api/paneviewPanelApi.js +1 -0
  14. package/dist/cjs/api/paneviewPanelApi.js.map +1 -1
  15. package/dist/cjs/api/splitviewPanelApi.d.ts +0 -1
  16. package/dist/cjs/api/splitviewPanelApi.js +1 -5
  17. package/dist/cjs/api/splitviewPanelApi.js.map +1 -1
  18. package/dist/cjs/dnd/abstractDragHandler.d.ts +2 -2
  19. package/dist/cjs/dnd/abstractDragHandler.js +15 -15
  20. package/dist/cjs/dnd/abstractDragHandler.js.map +1 -1
  21. package/dist/cjs/dnd/dataTransfer.d.ts +0 -25
  22. package/dist/cjs/dnd/dataTransfer.js +1 -45
  23. package/dist/cjs/dnd/dataTransfer.js.map +1 -1
  24. package/dist/cjs/dnd/dnd.d.ts +1 -14
  25. package/dist/cjs/dnd/dnd.js +1 -79
  26. package/dist/cjs/dnd/dnd.js.map +1 -1
  27. package/dist/cjs/dnd/droptarget.d.ts +3 -0
  28. package/dist/cjs/dnd/droptarget.js +72 -48
  29. package/dist/cjs/dnd/droptarget.js.map +1 -1
  30. package/dist/cjs/dockview/components/tab/defaultTab.d.ts +1 -2
  31. package/dist/cjs/dockview/components/tab/defaultTab.js +1 -9
  32. package/dist/cjs/dockview/components/tab/defaultTab.js.map +1 -1
  33. package/dist/cjs/dockview/components/watermark/watermark.d.ts +3 -3
  34. package/dist/cjs/dockview/components/watermark/watermark.js +4 -4
  35. package/dist/cjs/dockview/components/watermark/watermark.js.map +1 -1
  36. package/dist/cjs/dockview/deserializer.js.map +1 -1
  37. package/dist/cjs/dockview/dockviewComponent.d.ts +34 -23
  38. package/dist/cjs/dockview/dockviewComponent.js +117 -209
  39. package/dist/cjs/dockview/dockviewComponent.js.map +1 -1
  40. package/dist/cjs/dockview/dockviewGroupPanel.d.ts +3 -5
  41. package/dist/cjs/dockview/dockviewGroupPanel.js +10 -31
  42. package/dist/cjs/dockview/dockviewGroupPanel.js.map +1 -1
  43. package/dist/cjs/dockview/options.d.ts +2 -1
  44. package/dist/cjs/events.js +25 -4
  45. package/dist/cjs/events.js.map +1 -1
  46. package/dist/cjs/gridview/baseComponentGridview.d.ts +12 -20
  47. package/dist/cjs/gridview/baseComponentGridview.js +49 -45
  48. package/dist/cjs/gridview/baseComponentGridview.js.map +1 -1
  49. package/dist/cjs/gridview/basePanelView.d.ts +5 -8
  50. package/dist/cjs/gridview/basePanelView.js +16 -8
  51. package/dist/cjs/gridview/basePanelView.js.map +1 -1
  52. package/dist/cjs/gridview/branchNode.js +3 -3
  53. package/dist/cjs/gridview/branchNode.js.map +1 -1
  54. package/dist/cjs/gridview/gridview.js +21 -18
  55. package/dist/cjs/gridview/gridview.js.map +1 -1
  56. package/dist/cjs/gridview/gridviewComponent.d.ts +5 -6
  57. package/dist/cjs/gridview/gridviewComponent.js +33 -9
  58. package/dist/cjs/gridview/gridviewComponent.js.map +1 -1
  59. package/dist/cjs/gridview/gridviewPanel.d.ts +0 -1
  60. package/dist/cjs/gridview/gridviewPanel.js +3 -6
  61. package/dist/cjs/gridview/gridviewPanel.js.map +1 -1
  62. package/dist/cjs/gridview/leafNode.js +2 -1
  63. package/dist/cjs/gridview/leafNode.js.map +1 -1
  64. package/dist/cjs/groupview/groupPanel.d.ts +1 -7
  65. package/dist/cjs/groupview/groupview.d.ts +18 -10
  66. package/dist/cjs/groupview/groupview.js +51 -129
  67. package/dist/cjs/groupview/groupview.js.map +1 -1
  68. package/dist/cjs/groupview/groupviewPanel.d.ts +5 -2
  69. package/dist/cjs/groupview/groupviewPanel.js.map +1 -1
  70. package/dist/cjs/groupview/panel/content.d.ts +1 -1
  71. package/dist/cjs/groupview/panel/content.js +2 -1
  72. package/dist/cjs/groupview/panel/content.js.map +1 -1
  73. package/dist/cjs/groupview/tab.d.ts +10 -13
  74. package/dist/cjs/groupview/tab.js +22 -80
  75. package/dist/cjs/groupview/tab.js.map +1 -1
  76. package/dist/cjs/groupview/titlebar/tabsContainer.js +4 -6
  77. package/dist/cjs/groupview/titlebar/tabsContainer.js.map +1 -1
  78. package/dist/cjs/hostedContainer.js +2 -2
  79. package/dist/cjs/hostedContainer.js.map +1 -1
  80. package/dist/cjs/index.d.ts +3 -3
  81. package/dist/cjs/index.js +8 -4
  82. package/dist/cjs/index.js.map +1 -1
  83. package/dist/cjs/lifecycle.js +2 -1
  84. package/dist/cjs/lifecycle.js.map +1 -1
  85. package/dist/cjs/panel/types.d.ts +0 -2
  86. package/dist/cjs/paneview/defaultPaneviewHeader.d.ts +1 -1
  87. package/dist/cjs/paneview/defaultPaneviewHeader.js +1 -1
  88. package/dist/cjs/paneview/defaultPaneviewHeader.js.map +1 -1
  89. package/dist/cjs/paneview/draggablePaneviewPanel.d.ts +2 -2
  90. package/dist/cjs/paneview/draggablePaneviewPanel.js +32 -29
  91. package/dist/cjs/paneview/draggablePaneviewPanel.js.map +1 -1
  92. package/dist/cjs/paneview/paneview.d.ts +3 -1
  93. package/dist/cjs/paneview/paneview.js +13 -7
  94. package/dist/cjs/paneview/paneview.js.map +1 -1
  95. package/dist/cjs/paneview/paneviewComponent.d.ts +7 -6
  96. package/dist/cjs/paneview/paneviewComponent.js +65 -8
  97. package/dist/cjs/paneview/paneviewComponent.js.map +1 -1
  98. package/dist/cjs/paneview/paneviewPanel.js +1 -1
  99. package/dist/cjs/paneview/paneviewPanel.js.map +1 -1
  100. package/dist/cjs/react/deserializer.js +1 -3
  101. package/dist/cjs/react/deserializer.js.map +1 -1
  102. package/dist/cjs/react/dockview/components.js +5 -1
  103. package/dist/cjs/react/dockview/components.js.map +1 -1
  104. package/dist/cjs/react/dockview/dockview.d.ts +9 -9
  105. package/dist/cjs/react/dockview/dockview.js +40 -5
  106. package/dist/cjs/react/dockview/dockview.js.map +1 -1
  107. package/dist/cjs/react/dockview/reactContentPart.d.ts +2 -2
  108. package/dist/cjs/react/dockview/reactContentPart.js +6 -17
  109. package/dist/cjs/react/dockview/reactContentPart.js.map +1 -1
  110. package/dist/cjs/react/dockview/reactHeaderPart.d.ts +2 -2
  111. package/dist/cjs/react/dockview/reactHeaderPart.js +3 -2
  112. package/dist/cjs/react/dockview/reactHeaderPart.js.map +1 -1
  113. package/dist/cjs/react/dockview/reactWatermarkPart.d.ts +3 -4
  114. package/dist/cjs/react/dockview/reactWatermarkPart.js +3 -4
  115. package/dist/cjs/react/dockview/reactWatermarkPart.js.map +1 -1
  116. package/dist/cjs/react/dockview/v2/reactContentRenderer.d.ts +2 -2
  117. package/dist/cjs/react/dockview/v2/reactContentRenderer.js +2 -2
  118. package/dist/cjs/react/dockview/v2/reactContentRenderer.js.map +1 -1
  119. package/dist/cjs/react/dockview/v2/webviewContentRenderer.d.ts +2 -2
  120. package/dist/cjs/react/dockview/v2/webviewContentRenderer.js +2 -2
  121. package/dist/cjs/react/dockview/v2/webviewContentRenderer.js.map +1 -1
  122. package/dist/cjs/react/gridview/gridview.js +9 -2
  123. package/dist/cjs/react/gridview/gridview.js.map +1 -1
  124. package/dist/cjs/react/gridview/view.d.ts +3 -2
  125. package/dist/cjs/react/gridview/view.js +2 -2
  126. package/dist/cjs/react/gridview/view.js.map +1 -1
  127. package/dist/cjs/react/index.d.ts +1 -0
  128. package/dist/cjs/react/index.js +5 -1
  129. package/dist/cjs/react/index.js.map +1 -1
  130. package/dist/cjs/react/paneview/paneview.js +6 -2
  131. package/dist/cjs/react/paneview/paneview.js.map +1 -1
  132. package/dist/cjs/react/react.js +6 -3
  133. package/dist/cjs/react/react.js.map +1 -1
  134. package/dist/cjs/react/splitview/splitview.js +8 -2
  135. package/dist/cjs/react/splitview/splitview.js.map +1 -1
  136. package/dist/cjs/react/splitview/view.js +2 -2
  137. package/dist/cjs/react/splitview/view.js.map +1 -1
  138. package/dist/cjs/splitview/core/splitview.js +1 -1
  139. package/dist/cjs/splitview/core/splitview.js.map +1 -1
  140. package/dist/cjs/splitview/splitviewComponent.d.ts +0 -3
  141. package/dist/cjs/splitview/splitviewComponent.js +50 -6
  142. package/dist/cjs/splitview/splitviewComponent.js.map +1 -1
  143. package/dist/cjs/splitview/splitviewPanel.d.ts +1 -6
  144. package/dist/cjs/splitview/splitviewPanel.js +5 -3
  145. package/dist/cjs/splitview/splitviewPanel.js.map +1 -1
  146. package/dist/dockview.amd.js +666 -791
  147. package/dist/dockview.amd.min.js +2 -16
  148. package/dist/dockview.amd.min.noStyle.js +2 -16
  149. package/dist/dockview.amd.noStyle.js +665 -790
  150. package/dist/dockview.cjs.js +666 -791
  151. package/dist/dockview.esm.js +666 -780
  152. package/dist/dockview.esm.min.js +2 -16
  153. package/dist/dockview.js +666 -791
  154. package/dist/dockview.min.js +2 -16
  155. package/dist/dockview.min.noStyle.js +2 -16
  156. package/dist/dockview.noStyle.js +665 -790
  157. package/dist/esm/api/component.api.d.ts +31 -25
  158. package/dist/esm/api/component.api.js +47 -26
  159. package/dist/esm/api/gridviewPanelApi.js +1 -0
  160. package/dist/esm/api/groupPanelApi.d.ts +11 -14
  161. package/dist/esm/api/groupPanelApi.js +18 -13
  162. package/dist/esm/api/panelApi.d.ts +0 -25
  163. package/dist/esm/api/panelApi.js +1 -20
  164. package/dist/esm/api/paneviewPanelApi.js +1 -0
  165. package/dist/esm/api/splitviewPanelApi.d.ts +0 -1
  166. package/dist/esm/api/splitviewPanelApi.js +1 -5
  167. package/dist/esm/dnd/abstractDragHandler.d.ts +2 -2
  168. package/dist/esm/dnd/abstractDragHandler.js +10 -10
  169. package/dist/esm/dnd/dataTransfer.d.ts +0 -25
  170. package/dist/esm/dnd/dataTransfer.js +0 -40
  171. package/dist/esm/dnd/dnd.d.ts +1 -14
  172. package/dist/esm/dnd/dnd.js +1 -69
  173. package/dist/esm/dnd/droptarget.d.ts +3 -0
  174. package/dist/esm/dnd/droptarget.js +72 -48
  175. package/dist/esm/dockview/components/tab/defaultTab.d.ts +1 -2
  176. package/dist/esm/dockview/components/tab/defaultTab.js +2 -10
  177. package/dist/esm/dockview/components/watermark/watermark.d.ts +3 -3
  178. package/dist/esm/dockview/components/watermark/watermark.js +4 -4
  179. package/dist/esm/dockview/dockviewComponent.d.ts +34 -23
  180. package/dist/esm/dockview/dockviewComponent.js +82 -150
  181. package/dist/esm/dockview/dockviewGroupPanel.d.ts +3 -5
  182. package/dist/esm/dockview/dockviewGroupPanel.js +6 -30
  183. package/dist/esm/dockview/options.d.ts +2 -1
  184. package/dist/esm/events.js +2 -3
  185. package/dist/esm/gridview/baseComponentGridview.d.ts +12 -20
  186. package/dist/esm/gridview/baseComponentGridview.js +27 -45
  187. package/dist/esm/gridview/basePanelView.d.ts +5 -8
  188. package/dist/esm/gridview/basePanelView.js +12 -8
  189. package/dist/esm/gridview/branchNode.js +3 -3
  190. package/dist/esm/gridview/gridview.js +18 -16
  191. package/dist/esm/gridview/gridviewComponent.d.ts +5 -6
  192. package/dist/esm/gridview/gridviewComponent.js +12 -10
  193. package/dist/esm/gridview/gridviewPanel.d.ts +0 -1
  194. package/dist/esm/gridview/gridviewPanel.js +3 -6
  195. package/dist/esm/gridview/leafNode.js +1 -0
  196. package/dist/esm/groupview/groupPanel.d.ts +1 -7
  197. package/dist/esm/groupview/groupview.d.ts +18 -10
  198. package/dist/esm/groupview/groupview.js +30 -59
  199. package/dist/esm/groupview/groupviewPanel.d.ts +5 -2
  200. package/dist/esm/groupview/panel/content.d.ts +1 -1
  201. package/dist/esm/groupview/panel/content.js +2 -1
  202. package/dist/esm/groupview/tab.d.ts +10 -13
  203. package/dist/esm/groupview/tab.js +17 -24
  204. package/dist/esm/groupview/titlebar/tabsContainer.js +4 -6
  205. package/dist/esm/hostedContainer.js +2 -2
  206. package/dist/esm/index.d.ts +3 -3
  207. package/dist/esm/index.js +1 -2
  208. package/dist/esm/lifecycle.js +2 -1
  209. package/dist/esm/panel/types.d.ts +0 -2
  210. package/dist/esm/paneview/defaultPaneviewHeader.d.ts +1 -1
  211. package/dist/esm/paneview/defaultPaneviewHeader.js +1 -1
  212. package/dist/esm/paneview/draggablePaneviewPanel.d.ts +2 -2
  213. package/dist/esm/paneview/draggablePaneviewPanel.js +32 -29
  214. package/dist/esm/paneview/paneview.d.ts +3 -1
  215. package/dist/esm/paneview/paneview.js +10 -6
  216. package/dist/esm/paneview/paneviewComponent.d.ts +7 -6
  217. package/dist/esm/paneview/paneviewComponent.js +31 -7
  218. package/dist/esm/paneview/paneviewPanel.js +1 -1
  219. package/dist/esm/react/deserializer.js +1 -3
  220. package/dist/esm/react/dockview/dockview.d.ts +9 -9
  221. package/dist/esm/react/dockview/dockview.js +36 -5
  222. package/dist/esm/react/dockview/reactContentPart.d.ts +2 -2
  223. package/dist/esm/react/dockview/reactContentPart.js +6 -17
  224. package/dist/esm/react/dockview/reactHeaderPart.d.ts +2 -2
  225. package/dist/esm/react/dockview/reactHeaderPart.js +3 -2
  226. package/dist/esm/react/dockview/reactWatermarkPart.d.ts +3 -4
  227. package/dist/esm/react/dockview/reactWatermarkPart.js +3 -4
  228. package/dist/esm/react/dockview/v2/reactContentRenderer.d.ts +2 -2
  229. package/dist/esm/react/dockview/v2/reactContentRenderer.js +2 -2
  230. package/dist/esm/react/dockview/v2/webviewContentRenderer.d.ts +2 -2
  231. package/dist/esm/react/dockview/v2/webviewContentRenderer.js +2 -2
  232. package/dist/esm/react/gridview/gridview.js +4 -1
  233. package/dist/esm/react/gridview/view.d.ts +3 -2
  234. package/dist/esm/react/gridview/view.js +2 -2
  235. package/dist/esm/react/index.d.ts +1 -0
  236. package/dist/esm/react/paneview/paneview.js +1 -1
  237. package/dist/esm/react/react.js +1 -2
  238. package/dist/esm/react/splitview/splitview.js +3 -1
  239. package/dist/esm/react/splitview/view.js +2 -2
  240. package/dist/esm/splitview/core/splitview.js +1 -1
  241. package/dist/esm/splitview/splitviewComponent.d.ts +0 -3
  242. package/dist/esm/splitview/splitviewComponent.js +17 -6
  243. package/dist/esm/splitview/splitviewPanel.d.ts +1 -6
  244. package/dist/esm/splitview/splitviewPanel.js +5 -3
  245. package/dist/styles/dockview.css +14 -17
  246. package/package.json +13 -13
  247. package/dist/cjs/functions.d.ts +0 -1
  248. package/dist/cjs/functions.js +0 -42
  249. package/dist/cjs/functions.js.map +0 -1
  250. package/dist/cjs/groupview/panel/hostedPanel.d.ts +0 -22
  251. package/dist/cjs/groupview/panel/hostedPanel.js +0 -57
  252. package/dist/cjs/groupview/panel/hostedPanel.js.map +0 -1
  253. package/dist/cjs/json.d.ts +0 -1
  254. package/dist/cjs/json.js +0 -14
  255. package/dist/cjs/json.js.map +0 -1
  256. package/dist/esm/functions.d.ts +0 -1
  257. package/dist/esm/functions.js +0 -8
  258. package/dist/esm/groupview/panel/hostedPanel.d.ts +0 -22
  259. package/dist/esm/groupview/panel/hostedPanel.js +0 -43
  260. package/dist/esm/json.d.ts +0 -1
  261. package/dist/esm/json.js +0 -9
@@ -23,6 +23,7 @@ export class PaneviewComponent extends CompositeDisposable {
23
23
  super();
24
24
  this.element = element;
25
25
  this._disposable = new MutableDisposable();
26
+ this._viewDisposables = new Map();
26
27
  this._onDidLayoutChange = new Emitter();
27
28
  this.onDidLayoutChange = this._onDidLayoutChange.event;
28
29
  this._onDidDrop = new Emitter();
@@ -31,6 +32,7 @@ export class PaneviewComponent extends CompositeDisposable {
31
32
  this.onDidAddView = this._onDidAddView.event;
32
33
  this._onDidRemoveView = new Emitter();
33
34
  this.onDidRemoveView = this._onDidRemoveView.event;
35
+ this.addDisposables(this._onDidLayoutChange, this._onDidDrop, this._onDidAddView, this._onDidRemoveView);
34
36
  this._options = options;
35
37
  if (!options.components) {
36
38
  options.components = {};
@@ -106,9 +108,7 @@ export class PaneviewComponent extends CompositeDisposable {
106
108
  isExpanded: !!options.isExpanded,
107
109
  disableDnd: !!this.options.disableDnd,
108
110
  });
109
- const disposable = new CompositeDisposable(view.onDidDrop((event) => {
110
- this._onDidDrop.fire(event);
111
- }));
111
+ this.doAddPanel(view);
112
112
  const size = typeof options.size === 'number' ? options.size : Sizing.Distribute;
113
113
  const index = typeof options.index === 'number' ? options.index : undefined;
114
114
  view.init({
@@ -121,7 +121,7 @@ export class PaneviewComponent extends CompositeDisposable {
121
121
  });
122
122
  this.paneview.addPane(view, size, index);
123
123
  view.orientation = this.paneview.orientation;
124
- return disposable;
124
+ return view;
125
125
  }
126
126
  getPanels() {
127
127
  return this.paneview.getPanes();
@@ -130,6 +130,7 @@ export class PaneviewComponent extends CompositeDisposable {
130
130
  const views = this.getPanels();
131
131
  const index = views.findIndex((_) => _ === panel);
132
132
  this.paneview.removePane(index);
133
+ this.doRemovePanel(panel);
133
134
  }
134
135
  movePanel(from, to) {
135
136
  this.paneview.moveView(from, to);
@@ -179,6 +180,10 @@ export class PaneviewComponent extends CompositeDisposable {
179
180
  fromJSON(serializedPaneview, deferComponentLayout) {
180
181
  const { views, size } = serializedPaneview;
181
182
  const queue = [];
183
+ for (const [_, value] of this._viewDisposables.entries()) {
184
+ value.dispose();
185
+ }
186
+ this._viewDisposables.clear();
182
187
  this.paneview.dispose();
183
188
  this.paneview = new Paneview(this.element, {
184
189
  orientation: Orientation.VERTICAL,
@@ -214,9 +219,7 @@ export class PaneviewComponent extends CompositeDisposable {
214
219
  isExpanded: !!view.expanded,
215
220
  disableDnd: !!this.options.disableDnd,
216
221
  });
217
- panel.onDidDrop((event) => {
218
- this._onDidDrop.fire(event);
219
- });
222
+ this.doAddPanel(panel);
220
223
  queue.push(() => {
221
224
  panel.init({
222
225
  params: data.params || {},
@@ -246,4 +249,25 @@ export class PaneviewComponent extends CompositeDisposable {
246
249
  queue.forEach((f) => f());
247
250
  }
248
251
  }
252
+ doAddPanel(panel) {
253
+ const disposable = panel.onDidDrop((event) => {
254
+ this._onDidDrop.fire(event);
255
+ });
256
+ this._viewDisposables.set(panel.id, disposable);
257
+ }
258
+ doRemovePanel(panel) {
259
+ const disposable = this._viewDisposables.get(panel.id);
260
+ if (disposable) {
261
+ disposable.dispose();
262
+ this._viewDisposables.delete(panel.id);
263
+ }
264
+ }
265
+ dispose() {
266
+ super.dispose();
267
+ for (const [_, value] of this._viewDisposables.entries()) {
268
+ value.dispose();
269
+ }
270
+ this._viewDisposables.clear();
271
+ this.paneview.dispose();
272
+ }
249
273
  }
@@ -157,7 +157,7 @@ export class PaneviewPanel extends BasePanelView {
157
157
  }
158
158
  }
159
159
  toJSON() {
160
- const params = this.params;
160
+ const params = this._params;
161
161
  return Object.assign(Object.assign({}, super.toJSON()), { headerComponent: this.headerComponent, title: params.title });
162
162
  }
163
163
  renderOnce() {
@@ -12,7 +12,6 @@ export class ReactPanelDeserialzier {
12
12
  const panelId = panelData.id;
13
13
  const params = panelData.params;
14
14
  const title = panelData.title;
15
- const state = panelData.state;
16
15
  const suppressClosable = panelData.suppressClosable;
17
16
  const viewData = panelData.view;
18
17
  const view = new DefaultGroupPanelView({
@@ -21,13 +20,12 @@ export class ReactPanelDeserialzier {
21
20
  ? createComponent(viewData.tab.id, viewData.tab.id, this.layout.options.tabComponents, this.layout.options.frameworkTabComponents, (_c = this.layout.options.frameworkComponentFactory) === null || _c === void 0 ? void 0 : _c.tab)
22
21
  : new DefaultTab(),
23
22
  });
24
- const panel = new DockviewGroupPanel(panelId, new DockviewApi(this.layout));
23
+ const panel = new DockviewGroupPanel(panelId, this.layout, new DockviewApi(this.layout));
25
24
  panel.init({
26
25
  view,
27
26
  title,
28
27
  suppressClosable,
29
28
  params: params || {},
30
- state: state || {},
31
29
  });
32
30
  return panel;
33
31
  }
@@ -1,32 +1,32 @@
1
1
  import * as React from 'react';
2
+ import { DockviewDropEvent } from '../../dockview/dockviewComponent';
2
3
  import { TabContextMenuEvent } from '../../dockview/options';
3
4
  import { DockviewPanelApi } from '../../api/groupPanelApi';
4
5
  import { DockviewApi } from '../../api/component.api';
6
+ import { IWatermarkPanelProps } from './reactWatermarkPart';
5
7
  import { PanelCollection, PanelParameters } from '../types';
8
+ import { DockviewDropTargets } from '../../groupview/dnd';
6
9
  export interface IGroupPanelBaseProps<T extends {} = Record<string, any>> extends PanelParameters<T> {
7
10
  api: DockviewPanelApi;
8
11
  containerApi: DockviewApi;
9
12
  }
10
- export interface IDockviewPanelProps<T extends {
13
+ export declare type IDockviewPanelHeaderProps<T extends {} = Record<string, any>> = IGroupPanelBaseProps<T>;
14
+ export declare type IDockviewPanelProps<T extends {
11
15
  [index: string]: any;
12
- } = any> extends IGroupPanelBaseProps<T> {
13
- }
16
+ } = any> = IGroupPanelBaseProps<T>;
14
17
  export interface DockviewReadyEvent {
15
18
  api: DockviewApi;
16
19
  }
17
- export interface IWatermarkPanelProps<T extends {} = Record<string, any>> extends PanelParameters<T> {
18
- containerApi: DockviewApi;
19
- close(): void;
20
- }
21
20
  export interface IDockviewReactProps {
22
21
  components?: PanelCollection<IDockviewPanelProps>;
23
- tabComponents?: PanelCollection<IGroupPanelBaseProps>;
22
+ tabComponents?: PanelCollection<IDockviewPanelHeaderProps>;
24
23
  watermarkComponent?: React.FunctionComponent<IWatermarkPanelProps>;
25
24
  onReady?: (event: DockviewReadyEvent) => void;
26
25
  debug?: boolean;
27
26
  tabHeight?: number;
28
- enableExternalDragEvents?: boolean;
29
27
  onTabContextMenu?: (event: TabContextMenuEvent) => void;
28
+ onDidDrop?: (event: DockviewDropEvent) => void;
29
+ showDndOverlay?: (event: DragEvent, target: DockviewDropTargets) => boolean;
30
30
  hideBorders?: boolean;
31
31
  className?: string;
32
32
  disableAutoResizing?: boolean;
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { DockviewComponent } from '../../dockview/dockviewComponent';
2
+ import { DockviewComponent, } from '../../dockview/dockviewComponent';
3
3
  import { ReactPanelContentPart } from './reactContentPart';
4
4
  import { ReactPanelHeaderPart } from './reactHeaderPart';
5
5
  import { ReactPanelDeserialzier } from '../deserializer';
@@ -31,21 +31,21 @@ export const DockviewReact = React.forwardRef((props, ref) => {
31
31
  var _a;
32
32
  const factory = {
33
33
  content: {
34
- createComponent: (id, componentId, component) => {
34
+ createComponent: (_id, componentId, component) => {
35
35
  return new ReactPanelContentPart(componentId, component, {
36
36
  addPortal,
37
37
  });
38
38
  },
39
39
  },
40
40
  tab: {
41
- createComponent: (id, componentId, component) => {
41
+ createComponent: (_id, componentId, component) => {
42
42
  return new ReactPanelHeaderPart(componentId, component, {
43
43
  addPortal,
44
44
  });
45
45
  },
46
46
  },
47
47
  watermark: {
48
- createComponent: (id, componentId, component) => {
48
+ createComponent: (_id, componentId, component) => {
49
49
  return new ReactWatermarkPart(componentId, component, {
50
50
  addPortal,
51
51
  });
@@ -59,7 +59,6 @@ export const DockviewReact = React.forwardRef((props, ref) => {
59
59
  frameworkTabComponents: props.tabComponents,
60
60
  tabHeight: props.tabHeight,
61
61
  debug: props.debug,
62
- enableExternalDragEvents: props.enableExternalDragEvents,
63
62
  watermarkFrameworkComponent: props.watermarkComponent,
64
63
  styles: props.hideBorders
65
64
  ? { separatorBorder: 'transparent' }
@@ -75,8 +74,24 @@ export const DockviewReact = React.forwardRef((props, ref) => {
75
74
  dockviewRef.current = dockview;
76
75
  return () => {
77
76
  dockview.dispose();
77
+ element.remove();
78
78
  };
79
79
  }, []);
80
+ React.useEffect(() => {
81
+ if (!dockviewRef.current) {
82
+ return () => {
83
+ // noop
84
+ };
85
+ }
86
+ const disposable = dockviewRef.current.onDidDrop((event) => {
87
+ if (props.onDidDrop) {
88
+ props.onDidDrop(event);
89
+ }
90
+ });
91
+ return () => {
92
+ disposable.dispose();
93
+ };
94
+ }, [props.onDidDrop]);
80
95
  React.useEffect(() => {
81
96
  if (!dockviewRef.current) {
82
97
  return;
@@ -85,6 +100,22 @@ export const DockviewReact = React.forwardRef((props, ref) => {
85
100
  frameworkComponents: props.components,
86
101
  });
87
102
  }, [props.components]);
103
+ React.useEffect(() => {
104
+ if (!dockviewRef.current) {
105
+ return;
106
+ }
107
+ dockviewRef.current.updateOptions({
108
+ watermarkFrameworkComponent: props.watermarkComponent,
109
+ });
110
+ }, [props.watermarkComponent]);
111
+ React.useEffect(() => {
112
+ if (!dockviewRef.current) {
113
+ return;
114
+ }
115
+ dockviewRef.current.updateOptions({
116
+ showDndOverlay: props.showDndOverlay,
117
+ });
118
+ }, [props.showDndOverlay]);
88
119
  React.useEffect(() => {
89
120
  if (!dockviewRef.current) {
90
121
  return;
@@ -40,8 +40,8 @@ export declare class ReactPanelContentPart implements IContentRenderer {
40
40
  id: string;
41
41
  };
42
42
  update(event: PanelUpdateEvent): void;
43
- updateParentGroup(group: GroupviewPanel, isPanelVisible: boolean): void;
44
- layout(width: number, height: number): void;
43
+ updateParentGroup(group: GroupviewPanel, _isPanelVisible: boolean): void;
44
+ layout(_width: number, _height: number): void;
45
45
  close(): Promise<boolean>;
46
46
  dispose(): void;
47
47
  }
@@ -5,22 +5,14 @@ export class ReactPanelContentPart {
5
5
  this.id = id;
6
6
  this.component = component;
7
7
  this.reactPortalStore = reactPortalStore;
8
- // private hostedContainer: HostedContainer;
9
8
  this._onDidFocus = new Emitter();
10
9
  this.onDidFocus = this._onDidFocus.event;
11
10
  this._onDidBlur = new Emitter();
12
11
  this.onDidBlur = this._onDidBlur.event;
13
12
  this._element = document.createElement('div');
14
- this._element.style.height = '100%';
15
- this._element.style.width = '100%';
16
- // this.hostedContainer = new HostedContainer({
17
- // id,
18
- // });
19
- // this.hostedContainer.onDidFocus(() => this._onDidFocus.fire());
20
- // this.hostedContainer.onDidBlur(() => this._onDidBlur.fire());
13
+ this._element.className = 'dockview-react-part';
21
14
  this._actionsElement = document.createElement('div');
22
- this._actionsElement.style.height = '100%';
23
- this._actionsElement.style.width = '100%';
15
+ this._actionsElement.className = 'dockview-react-part';
24
16
  }
25
17
  get element() {
26
18
  return this._element;
@@ -53,23 +45,20 @@ export class ReactPanelContentPart {
53
45
  var _a;
54
46
  (_a = this.part) === null || _a === void 0 ? void 0 : _a.update(event.params);
55
47
  }
56
- updateParentGroup(group, isPanelVisible) {
48
+ updateParentGroup(group, _isPanelVisible) {
57
49
  this._group = group;
58
50
  }
59
- layout(width, height) {
51
+ layout(_width, _height) {
60
52
  // noop
61
- // this.hostedContainer.layout(
62
- // this.element
63
- // // { width, height }
64
- // );
65
53
  }
66
54
  close() {
67
55
  return Promise.resolve(true);
68
56
  }
69
57
  dispose() {
70
58
  var _a, _b;
59
+ this._onDidFocus.dispose();
60
+ this._onDidBlur.dispose();
71
61
  (_a = this.part) === null || _a === void 0 ? void 0 : _a.dispose();
72
- // this.hostedContainer?.dispose();
73
62
  (_b = this.actionsPart) === null || _b === void 0 ? void 0 : _b.dispose();
74
63
  }
75
64
  }
@@ -18,7 +18,7 @@ export declare class ReactPanelHeaderPart implements ITabRenderer {
18
18
  toJSON(): {
19
19
  id: string;
20
20
  };
21
- layout(width: number, height: number): void;
22
- updateParentGroup(group: GroupviewPanel, isPanelVisible: boolean): void;
21
+ layout(_width: number, _height: number): void;
22
+ updateParentGroup(_group: GroupviewPanel, _isPanelVisible: boolean): void;
23
23
  dispose(): void;
24
24
  }
@@ -5,6 +5,7 @@ export class ReactPanelHeaderPart {
5
5
  this.component = component;
6
6
  this.reactPortalStore = reactPortalStore;
7
7
  this._element = document.createElement('div');
8
+ this._element.className = 'dockview-react-part';
8
9
  }
9
10
  get element() {
10
11
  return this._element;
@@ -28,10 +29,10 @@ export class ReactPanelHeaderPart {
28
29
  id: this.id,
29
30
  };
30
31
  }
31
- layout(width, height) {
32
+ layout(_width, _height) {
32
33
  // noop - retrieval from api
33
34
  }
34
- updateParentGroup(group, isPanelVisible) {
35
+ updateParentGroup(_group, _isPanelVisible) {
35
36
  // noop - retrieval from api
36
37
  }
37
38
  dispose() {
@@ -4,7 +4,7 @@ import { GroupviewPanel } from '../../groupview/groupviewPanel';
4
4
  import { ReactPortalStore } from '../react';
5
5
  import { IGroupPanelBaseProps } from './dockview';
6
6
  import { PanelUpdateEvent } from '../../panel/types';
7
- interface IWatermarkPanelProps extends IGroupPanelBaseProps {
7
+ export interface IWatermarkPanelProps extends IGroupPanelBaseProps {
8
8
  close: () => void;
9
9
  }
10
10
  export declare class ReactWatermarkPart implements IWatermarkRenderer {
@@ -23,8 +23,7 @@ export declare class ReactWatermarkPart implements IWatermarkRenderer {
23
23
  toJSON(): {
24
24
  id: string;
25
25
  };
26
- layout(width: number, height: number): void;
27
- updateParentGroup(group: GroupviewPanel, isPanelVisible: boolean): void;
26
+ layout(_width: number, _height: number): void;
27
+ updateParentGroup(group: GroupviewPanel, _isPanelVisible: boolean): void;
28
28
  dispose(): void;
29
29
  }
30
- export {};
@@ -8,8 +8,7 @@ export class ReactWatermarkPart {
8
8
  value: undefined,
9
9
  };
10
10
  this._element = document.createElement('div');
11
- this._element.style.height = '100%';
12
- this._element.style.width = '100%';
11
+ this._element.className = 'dockview-react-part';
13
12
  }
14
13
  get element() {
15
14
  return this._element;
@@ -42,10 +41,10 @@ export class ReactWatermarkPart {
42
41
  id: this.id,
43
42
  };
44
43
  }
45
- layout(width, height) {
44
+ layout(_width, _height) {
46
45
  // noop - retrieval from api
47
46
  }
48
- updateParentGroup(group, isPanelVisible) {
47
+ updateParentGroup(group, _isPanelVisible) {
49
48
  // noop - retrieval from api
50
49
  this._groupRef.value = group;
51
50
  }
@@ -23,8 +23,8 @@ export declare class ReactContentRenderer implements IContentRenderer {
23
23
  id: string;
24
24
  };
25
25
  update(params: PanelUpdateEvent): void;
26
- updateParentGroup(group: GroupviewPanel, isPanelVisible: boolean): void;
27
- layout(width: number, height: number): void;
26
+ updateParentGroup(group: GroupviewPanel, _isPanelVisible: boolean): void;
27
+ layout(_width: number, _height: number): void;
28
28
  close(): Promise<boolean>;
29
29
  dispose(): void;
30
30
  }
@@ -56,10 +56,10 @@ export class ReactContentRenderer {
56
56
  }
57
57
  (_a = this.part) === null || _a === void 0 ? void 0 : _a.update(params.params);
58
58
  }
59
- updateParentGroup(group, isPanelVisible) {
59
+ updateParentGroup(group, _isPanelVisible) {
60
60
  this._group = group;
61
61
  }
62
- layout(width, height) {
62
+ layout(_width, _height) {
63
63
  this._hostedContainer.layout(this.element);
64
64
  }
65
65
  close() {
@@ -12,7 +12,7 @@ export declare class WebviewContentRenderer implements IContentRenderer {
12
12
  init(parameters: GroupPanelPartInitParameters): void;
13
13
  toJSON(): {};
14
14
  update(params: PanelUpdateEvent): void;
15
- updateParentGroup(group: GroupviewPanel, isPanelVisible: boolean): void;
16
- layout(width: number, height: number): void;
15
+ updateParentGroup(_group: GroupviewPanel, _isPanelVisible: boolean): void;
16
+ layout(_width: number, _height: number): void;
17
17
  dispose(): void;
18
18
  }
@@ -24,10 +24,10 @@ export class WebviewContentRenderer {
24
24
  this.parameters.params = params.params;
25
25
  }
26
26
  }
27
- updateParentGroup(group, isPanelVisible) {
27
+ updateParentGroup(_group, _isPanelVisible) {
28
28
  //
29
29
  }
30
- layout(width, height) {
30
+ layout(_width, _height) {
31
31
  this._hostedContainer.layout(this._element);
32
32
  }
33
33
  dispose() {
@@ -28,7 +28,9 @@ export const GridviewReact = React.forwardRef((props, ref) => {
28
28
  var _a;
29
29
  const element = document.createElement('div');
30
30
  const gridview = new GridviewComponent(element, {
31
- proportionalLayout: !!props.proportionalLayout,
31
+ proportionalLayout: typeof props.proportionalLayout === 'boolean'
32
+ ? props.proportionalLayout
33
+ : true,
32
34
  orientation: props.orientation,
33
35
  frameworkComponents: props.components,
34
36
  frameworkComponentFactory: {
@@ -51,6 +53,7 @@ export const GridviewReact = React.forwardRef((props, ref) => {
51
53
  gridviewRef.current = gridview;
52
54
  return () => {
53
55
  gridview.dispose();
56
+ element.remove();
54
57
  };
55
58
  }, []);
56
59
  React.useEffect(() => {
@@ -1,10 +1,11 @@
1
1
  /// <reference types="react" />
2
2
  import { GridviewPanel } from '../../gridview/gridviewPanel';
3
- import { ReactPart, ReactPortalStore } from '../react';
3
+ import { IFrameworkPart } from '../../panel/types';
4
+ import { ReactPortalStore } from '../react';
4
5
  import { IGridviewPanelProps } from './gridview';
5
6
  export declare class ReactGridPanelView extends GridviewPanel {
6
7
  private readonly reactComponent;
7
8
  private readonly reactPortalStore;
8
9
  constructor(id: string, component: string, reactComponent: React.FunctionComponent<IGridviewPanelProps>, reactPortalStore: ReactPortalStore);
9
- getComponent(): ReactPart<IGridviewPanelProps<any>, {}>;
10
+ getComponent(): IFrameworkPart;
10
11
  }
@@ -9,9 +9,9 @@ export class ReactGridPanelView extends GridviewPanel {
9
9
  getComponent() {
10
10
  var _a;
11
11
  return new ReactPart(this.element, this.reactPortalStore, this.reactComponent, {
12
- params: ((_a = this.params) === null || _a === void 0 ? void 0 : _a.params) || {},
12
+ params: ((_a = this._params) === null || _a === void 0 ? void 0 : _a.params) || {},
13
13
  api: this.api,
14
- containerApi: this.params
14
+ containerApi: this._params
15
15
  .containerApi,
16
16
  });
17
17
  }
@@ -4,6 +4,7 @@ export * from './splitview/splitview';
4
4
  export * from './gridview/gridview';
5
5
  export * from './dockview/reactContentPart';
6
6
  export * from './dockview/reactHeaderPart';
7
+ export { IWatermarkPanelProps } from './dockview/reactWatermarkPart';
7
8
  export * from './paneview/paneview';
8
9
  export * from './types';
9
10
  export * from './react';
@@ -25,7 +25,7 @@ export const PaneviewReact = React.forwardRef((props, ref) => {
25
25
  };
26
26
  }, [props.disableAutoResizing]);
27
27
  React.useEffect(() => {
28
- const createComponent = (id, componentId, component) => new PanePanelSection(id, component, {
28
+ const createComponent = (id, _componentId, component) => new PanePanelSection(id, component, {
29
29
  addPortal,
30
30
  });
31
31
  const paneview = new PaneviewComponent(domRef.current, {
@@ -55,14 +55,13 @@ export class ReactPart {
55
55
  if (this.disposed) {
56
56
  throw new Error('invalid operation: resource is already disposed');
57
57
  }
58
- // TODO use a better check for isReactFunctionalComponent
59
58
  if (typeof this.component !== 'function') {
60
59
  /**
61
60
  * we know this isn't a React.FunctionComponent so throw an error here.
62
61
  * if we do not intercept this the React library will throw a very obsure error
63
62
  * for the same reason, at least at this point we will emit a sensible stacktrace.
64
63
  */
65
- throw new Error('invalid operation: only functional components are supported');
64
+ throw new Error('Invalid Operation. dockview only supports React Functional Components.');
66
65
  }
67
66
  const bridgeComponent = React.createElement(React.forwardRef(ReactComponentBridge), {
68
67
  component: this
@@ -35,7 +35,9 @@ export const SplitviewReact = React.forwardRef((props, ref) => {
35
35
  });
36
36
  },
37
37
  },
38
- proportionalLayout: props.proportionalLayout,
38
+ proportionalLayout: typeof props.proportionalLayout === 'boolean'
39
+ ? props.proportionalLayout
40
+ : true,
39
41
  styles: props.hideBorders
40
42
  ? { separatorBorder: 'transparent' }
41
43
  : undefined,
@@ -9,9 +9,9 @@ export class ReactPanelView extends SplitviewPanel {
9
9
  getComponent() {
10
10
  var _a;
11
11
  return new ReactPart(this.element, this.reactPortalStore, this.reactComponent, {
12
- params: ((_a = this.params) === null || _a === void 0 ? void 0 : _a.params) || {},
12
+ params: ((_a = this._params) === null || _a === void 0 ? void 0 : _a.params) || {},
13
13
  api: this.api,
14
- containerApi: this.params
14
+ containerApi: this._params
15
15
  .containerApi,
16
16
  });
17
17
  }
@@ -678,12 +678,12 @@ export class Splitview {
678
678
  this._onDidSashEnd.dispose();
679
679
  this._onDidAddView.dispose();
680
680
  this._onDidRemoveView.dispose();
681
- this.element.remove();
682
681
  for (let i = 0; i < this.element.children.length; i++) {
683
682
  if (this.element.children.item(i) === this.element) {
684
683
  this.element.removeChild(this.element);
685
684
  break;
686
685
  }
687
686
  }
687
+ this.element.remove();
688
688
  }
689
689
  }
@@ -12,9 +12,6 @@ export interface SerializedSplitviewPanelData {
12
12
  params?: {
13
13
  [index: string]: any;
14
14
  };
15
- state?: {
16
- [index: string]: any;
17
- };
18
15
  }
19
16
  export interface SerializedSplitviewPanel {
20
17
  snap?: boolean;
@@ -26,7 +26,7 @@ export class SplitviewComponent extends CompositeDisposable {
26
26
  options.frameworkComponents = {};
27
27
  }
28
28
  this.splitview = new Splitview(this.element, options);
29
- this.addDisposables(this._disposable);
29
+ this.addDisposables(this._disposable, this._onDidAddView, this._onDidRemoveView, this._onDidLayoutChange);
30
30
  }
31
31
  get options() {
32
32
  return this._options;
@@ -102,7 +102,11 @@ export class SplitviewComponent extends CompositeDisposable {
102
102
  }
103
103
  removePanel(panel, sizing) {
104
104
  const disposable = this.panels.get(panel.id);
105
- disposable === null || disposable === void 0 ? void 0 : disposable.dispose();
105
+ if (!disposable) {
106
+ throw new Error(`unknown splitview panel ${panel.id}`);
107
+ }
108
+ disposable.disposable.dispose();
109
+ disposable.value.dispose();
106
110
  this.panels.delete(panel.id);
107
111
  const index = this.getPanels().findIndex((_) => _ === panel);
108
112
  this.splitview.removeView(index, sizing);
@@ -161,7 +165,7 @@ export class SplitviewComponent extends CompositeDisposable {
161
165
  }
162
166
  this.setActive(view, true);
163
167
  });
164
- this.panels.set(view.id, disposable);
168
+ this.panels.set(view.id, { disposable, value: view });
165
169
  }
166
170
  toJSON() {
167
171
  var _a;
@@ -185,6 +189,11 @@ export class SplitviewComponent extends CompositeDisposable {
185
189
  }
186
190
  fromJSON(serializedSplitview, deferComponentLayout = false) {
187
191
  const { views, orientation, size, activeView } = serializedSplitview;
192
+ for (const [_, value] of this.panels.entries()) {
193
+ value.disposable.dispose();
194
+ value.value.dispose();
195
+ }
196
+ this.panels.clear();
188
197
  this.splitview.dispose();
189
198
  const queue = [];
190
199
  this.splitview = new Splitview(this.element, {
@@ -240,10 +249,12 @@ export class SplitviewComponent extends CompositeDisposable {
240
249
  }
241
250
  }
242
251
  dispose() {
243
- Array.from(this.panels.values()).forEach((value) => {
244
- value.dispose();
245
- });
252
+ for (const [_, value] of this.panels.entries()) {
253
+ value.disposable.dispose();
254
+ value.value.dispose();
255
+ }
246
256
  this.panels.clear();
257
+ this.splitview.dispose();
247
258
  super.dispose();
248
259
  }
249
260
  }
@@ -36,12 +36,7 @@ export declare abstract class SplitviewPanel extends BasePanelView<SplitviewPane
36
36
  maximumSize: number | undefined;
37
37
  id: string;
38
38
  component: string;
39
- params?: {
40
- [key: string]: any;
41
- } | undefined;
42
- state?: {
43
- [key: string]: any;
44
- } | undefined;
39
+ params?: Record<string, any> | undefined;
45
40
  };
46
41
  private updateConstraints;
47
42
  }