dockview 1.0.2 → 1.2.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 (229) hide show
  1. package/README.md +243 -186
  2. package/dist/cjs/api/component.api.d.ts +32 -23
  3. package/dist/cjs/api/component.api.js +105 -34
  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 +14 -14
  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 +69 -45
  29. package/dist/cjs/dnd/droptarget.js.map +1 -1
  30. package/dist/cjs/dockview/components/tab/defaultTab.d.ts +0 -1
  31. package/dist/cjs/dockview/components/tab/defaultTab.js +0 -8
  32. package/dist/cjs/dockview/components/tab/defaultTab.js.map +1 -1
  33. package/dist/cjs/dockview/deserializer.js.map +1 -1
  34. package/dist/cjs/dockview/dockviewComponent.d.ts +31 -21
  35. package/dist/cjs/dockview/dockviewComponent.js +103 -207
  36. package/dist/cjs/dockview/dockviewComponent.js.map +1 -1
  37. package/dist/cjs/dockview/dockviewGroupPanel.d.ts +3 -5
  38. package/dist/cjs/dockview/dockviewGroupPanel.js +10 -31
  39. package/dist/cjs/dockview/dockviewGroupPanel.js.map +1 -1
  40. package/dist/cjs/dockview/options.d.ts +2 -1
  41. package/dist/cjs/events.js +25 -4
  42. package/dist/cjs/events.js.map +1 -1
  43. package/dist/cjs/gridview/baseComponentGridview.d.ts +12 -20
  44. package/dist/cjs/gridview/baseComponentGridview.js +23 -45
  45. package/dist/cjs/gridview/baseComponentGridview.js.map +1 -1
  46. package/dist/cjs/gridview/basePanelView.d.ts +5 -8
  47. package/dist/cjs/gridview/basePanelView.js +14 -8
  48. package/dist/cjs/gridview/basePanelView.js.map +1 -1
  49. package/dist/cjs/gridview/branchNode.js +2 -2
  50. package/dist/cjs/gridview/branchNode.js.map +1 -1
  51. package/dist/cjs/gridview/gridview.js +20 -17
  52. package/dist/cjs/gridview/gridview.js.map +1 -1
  53. package/dist/cjs/gridview/gridviewComponent.d.ts +4 -0
  54. package/dist/cjs/gridview/gridviewComponent.js +5 -1
  55. package/dist/cjs/gridview/gridviewComponent.js.map +1 -1
  56. package/dist/cjs/gridview/gridviewPanel.d.ts +0 -1
  57. package/dist/cjs/gridview/gridviewPanel.js +3 -6
  58. package/dist/cjs/gridview/gridviewPanel.js.map +1 -1
  59. package/dist/cjs/gridview/leafNode.js +2 -1
  60. package/dist/cjs/gridview/leafNode.js.map +1 -1
  61. package/dist/cjs/groupview/groupPanel.d.ts +1 -7
  62. package/dist/cjs/groupview/groupview.d.ts +15 -8
  63. package/dist/cjs/groupview/groupview.js +36 -123
  64. package/dist/cjs/groupview/groupview.js.map +1 -1
  65. package/dist/cjs/groupview/groupviewPanel.d.ts +5 -2
  66. package/dist/cjs/groupview/groupviewPanel.js.map +1 -1
  67. package/dist/cjs/groupview/panel/content.js +1 -0
  68. package/dist/cjs/groupview/panel/content.js.map +1 -1
  69. package/dist/cjs/groupview/tab.d.ts +10 -13
  70. package/dist/cjs/groupview/tab.js +22 -80
  71. package/dist/cjs/groupview/tab.js.map +1 -1
  72. package/dist/cjs/groupview/titlebar/tabsContainer.js +4 -6
  73. package/dist/cjs/groupview/titlebar/tabsContainer.js.map +1 -1
  74. package/dist/cjs/index.d.ts +3 -3
  75. package/dist/cjs/index.js +8 -4
  76. package/dist/cjs/index.js.map +1 -1
  77. package/dist/cjs/lifecycle.js +2 -1
  78. package/dist/cjs/lifecycle.js.map +1 -1
  79. package/dist/cjs/panel/types.d.ts +0 -2
  80. package/dist/cjs/paneview/draggablePaneviewPanel.d.ts +2 -2
  81. package/dist/cjs/paneview/draggablePaneviewPanel.js +32 -29
  82. package/dist/cjs/paneview/draggablePaneviewPanel.js.map +1 -1
  83. package/dist/cjs/paneview/paneview.js +4 -3
  84. package/dist/cjs/paneview/paneview.js.map +1 -1
  85. package/dist/cjs/paneview/paneviewComponent.d.ts +5 -5
  86. package/dist/cjs/paneview/paneviewComponent.js +15 -16
  87. package/dist/cjs/paneview/paneviewComponent.js.map +1 -1
  88. package/dist/cjs/paneview/paneviewPanel.d.ts +5 -1
  89. package/dist/cjs/paneview/paneviewPanel.js +14 -2
  90. package/dist/cjs/paneview/paneviewPanel.js.map +1 -1
  91. package/dist/cjs/react/deserializer.js +1 -3
  92. package/dist/cjs/react/deserializer.js.map +1 -1
  93. package/dist/cjs/react/dockview/components.js +5 -1
  94. package/dist/cjs/react/dockview/components.js.map +1 -1
  95. package/dist/cjs/react/dockview/dockview.d.ts +9 -9
  96. package/dist/cjs/react/dockview/dockview.js +28 -2
  97. package/dist/cjs/react/dockview/dockview.js.map +1 -1
  98. package/dist/cjs/react/dockview/reactContentPart.js +4 -4
  99. package/dist/cjs/react/dockview/reactContentPart.js.map +1 -1
  100. package/dist/cjs/react/dockview/reactHeaderPart.js +1 -0
  101. package/dist/cjs/react/dockview/reactHeaderPart.js.map +1 -1
  102. package/dist/cjs/react/dockview/reactWatermarkPart.d.ts +1 -2
  103. package/dist/cjs/react/dockview/reactWatermarkPart.js +1 -2
  104. package/dist/cjs/react/dockview/reactWatermarkPart.js.map +1 -1
  105. package/dist/cjs/react/gridview/gridview.js +9 -2
  106. package/dist/cjs/react/gridview/gridview.js.map +1 -1
  107. package/dist/cjs/react/gridview/view.js +2 -2
  108. package/dist/cjs/react/gridview/view.js.map +1 -1
  109. package/dist/cjs/react/index.d.ts +1 -0
  110. package/dist/cjs/react/index.js +5 -1
  111. package/dist/cjs/react/index.js.map +1 -1
  112. package/dist/cjs/react/paneview/paneview.js +5 -1
  113. package/dist/cjs/react/paneview/paneview.js.map +1 -1
  114. package/dist/cjs/react/react.js +6 -3
  115. package/dist/cjs/react/react.js.map +1 -1
  116. package/dist/cjs/react/splitview/splitview.js +8 -2
  117. package/dist/cjs/react/splitview/splitview.js.map +1 -1
  118. package/dist/cjs/react/splitview/view.js +2 -2
  119. package/dist/cjs/react/splitview/view.js.map +1 -1
  120. package/dist/cjs/splitview/core/splitview.js +2 -2
  121. package/dist/cjs/splitview/core/splitview.js.map +1 -1
  122. package/dist/cjs/splitview/splitviewComponent.d.ts +9 -6
  123. package/dist/cjs/splitview/splitviewComponent.js +12 -1
  124. package/dist/cjs/splitview/splitviewComponent.js.map +1 -1
  125. package/dist/cjs/splitview/splitviewPanel.d.ts +1 -6
  126. package/dist/cjs/splitview/splitviewPanel.js +5 -3
  127. package/dist/cjs/splitview/splitviewPanel.js.map +1 -1
  128. package/dist/dockview.amd.js +592 -745
  129. package/dist/dockview.amd.min.js +2 -16
  130. package/dist/dockview.amd.min.noStyle.js +2 -16
  131. package/dist/dockview.amd.noStyle.js +591 -744
  132. package/dist/dockview.cjs.js +592 -745
  133. package/dist/dockview.esm.js +592 -734
  134. package/dist/dockview.esm.min.js +2 -16
  135. package/dist/dockview.js +592 -745
  136. package/dist/dockview.min.js +2 -16
  137. package/dist/dockview.min.noStyle.js +2 -16
  138. package/dist/dockview.noStyle.js +591 -744
  139. package/dist/esm/api/component.api.d.ts +32 -23
  140. package/dist/esm/api/component.api.js +51 -24
  141. package/dist/esm/api/gridviewPanelApi.js +1 -0
  142. package/dist/esm/api/groupPanelApi.d.ts +11 -14
  143. package/dist/esm/api/groupPanelApi.js +18 -13
  144. package/dist/esm/api/panelApi.d.ts +0 -25
  145. package/dist/esm/api/panelApi.js +1 -20
  146. package/dist/esm/api/paneviewPanelApi.js +1 -0
  147. package/dist/esm/api/splitviewPanelApi.d.ts +0 -1
  148. package/dist/esm/api/splitviewPanelApi.js +1 -5
  149. package/dist/esm/dnd/abstractDragHandler.d.ts +2 -2
  150. package/dist/esm/dnd/abstractDragHandler.js +9 -9
  151. package/dist/esm/dnd/dataTransfer.d.ts +0 -25
  152. package/dist/esm/dnd/dataTransfer.js +0 -40
  153. package/dist/esm/dnd/dnd.d.ts +1 -14
  154. package/dist/esm/dnd/dnd.js +1 -69
  155. package/dist/esm/dnd/droptarget.d.ts +3 -0
  156. package/dist/esm/dnd/droptarget.js +69 -45
  157. package/dist/esm/dockview/components/tab/defaultTab.d.ts +0 -1
  158. package/dist/esm/dockview/components/tab/defaultTab.js +1 -9
  159. package/dist/esm/dockview/dockviewComponent.d.ts +31 -21
  160. package/dist/esm/dockview/dockviewComponent.js +68 -148
  161. package/dist/esm/dockview/dockviewGroupPanel.d.ts +3 -5
  162. package/dist/esm/dockview/dockviewGroupPanel.js +6 -30
  163. package/dist/esm/dockview/options.d.ts +2 -1
  164. package/dist/esm/events.js +2 -3
  165. package/dist/esm/gridview/baseComponentGridview.d.ts +12 -20
  166. package/dist/esm/gridview/baseComponentGridview.js +23 -45
  167. package/dist/esm/gridview/basePanelView.d.ts +5 -8
  168. package/dist/esm/gridview/basePanelView.js +10 -8
  169. package/dist/esm/gridview/branchNode.js +2 -2
  170. package/dist/esm/gridview/gridview.js +17 -15
  171. package/dist/esm/gridview/gridviewComponent.d.ts +4 -0
  172. package/dist/esm/gridview/gridviewComponent.js +6 -2
  173. package/dist/esm/gridview/gridviewPanel.d.ts +0 -1
  174. package/dist/esm/gridview/gridviewPanel.js +3 -6
  175. package/dist/esm/gridview/leafNode.js +1 -0
  176. package/dist/esm/groupview/groupPanel.d.ts +1 -7
  177. package/dist/esm/groupview/groupview.d.ts +15 -8
  178. package/dist/esm/groupview/groupview.js +22 -56
  179. package/dist/esm/groupview/groupviewPanel.d.ts +5 -2
  180. package/dist/esm/groupview/panel/content.js +1 -0
  181. package/dist/esm/groupview/tab.d.ts +10 -13
  182. package/dist/esm/groupview/tab.js +17 -24
  183. package/dist/esm/groupview/titlebar/tabsContainer.js +4 -6
  184. package/dist/esm/index.d.ts +3 -3
  185. package/dist/esm/index.js +1 -2
  186. package/dist/esm/lifecycle.js +2 -1
  187. package/dist/esm/panel/types.d.ts +0 -2
  188. package/dist/esm/paneview/draggablePaneviewPanel.d.ts +2 -2
  189. package/dist/esm/paneview/draggablePaneviewPanel.js +32 -29
  190. package/dist/esm/paneview/paneview.js +2 -2
  191. package/dist/esm/paneview/paneviewComponent.d.ts +5 -5
  192. package/dist/esm/paneview/paneviewComponent.js +15 -8
  193. package/dist/esm/paneview/paneviewPanel.d.ts +5 -1
  194. package/dist/esm/paneview/paneviewPanel.js +10 -2
  195. package/dist/esm/react/deserializer.js +1 -3
  196. package/dist/esm/react/dockview/dockview.d.ts +9 -9
  197. package/dist/esm/react/dockview/dockview.js +24 -2
  198. package/dist/esm/react/dockview/reactContentPart.js +4 -4
  199. package/dist/esm/react/dockview/reactHeaderPart.js +1 -0
  200. package/dist/esm/react/dockview/reactWatermarkPart.d.ts +1 -2
  201. package/dist/esm/react/dockview/reactWatermarkPart.js +1 -2
  202. package/dist/esm/react/gridview/gridview.js +4 -1
  203. package/dist/esm/react/gridview/view.js +2 -2
  204. package/dist/esm/react/index.d.ts +1 -0
  205. package/dist/esm/react/react.js +1 -2
  206. package/dist/esm/react/splitview/splitview.js +3 -1
  207. package/dist/esm/react/splitview/view.js +2 -2
  208. package/dist/esm/splitview/core/splitview.js +2 -2
  209. package/dist/esm/splitview/splitviewComponent.d.ts +9 -6
  210. package/dist/esm/splitview/splitviewComponent.js +11 -2
  211. package/dist/esm/splitview/splitviewPanel.d.ts +1 -6
  212. package/dist/esm/splitview/splitviewPanel.js +5 -3
  213. package/dist/styles/dockview.css +51 -54
  214. package/package.json +11 -11
  215. package/dist/cjs/functions.d.ts +0 -1
  216. package/dist/cjs/functions.js +0 -42
  217. package/dist/cjs/functions.js.map +0 -1
  218. package/dist/cjs/groupview/panel/hostedPanel.d.ts +0 -22
  219. package/dist/cjs/groupview/panel/hostedPanel.js +0 -57
  220. package/dist/cjs/groupview/panel/hostedPanel.js.map +0 -1
  221. package/dist/cjs/json.d.ts +0 -1
  222. package/dist/cjs/json.js +0 -14
  223. package/dist/cjs/json.js.map +0 -1
  224. package/dist/esm/functions.d.ts +0 -1
  225. package/dist/esm/functions.js +0 -8
  226. package/dist/esm/groupview/panel/hostedPanel.d.ts +0 -22
  227. package/dist/esm/groupview/panel/hostedPanel.js +0 -43
  228. package/dist/esm/json.d.ts +0 -1
  229. package/dist/esm/json.js +0 -9
@@ -10,33 +10,30 @@ export declare enum MouseEventKind {
10
10
  CONTEXT_MENU = "CONTEXT_MENU"
11
11
  }
12
12
  export interface LayoutMouseEvent {
13
- kind: MouseEventKind;
14
- event: MouseEvent;
15
- panel?: IGroupPanel;
16
- tab?: boolean;
13
+ readonly kind: MouseEventKind;
14
+ readonly event: MouseEvent;
15
+ readonly panel?: IGroupPanel;
16
+ readonly tab?: boolean;
17
17
  }
18
18
  export interface ITab {
19
- panelId: string;
20
- element: HTMLElement;
19
+ readonly panelId: string;
20
+ readonly element: HTMLElement;
21
21
  setContent: (element: ITabRenderer) => void;
22
22
  onChanged: Event<LayoutMouseEvent>;
23
23
  onDrop: Event<DroptargetEvent>;
24
24
  setActive(isActive: boolean): void;
25
25
  }
26
26
  export declare class Tab extends CompositeDisposable implements ITab {
27
- panelId: string;
28
- private readonly accessor;
29
- private group;
30
- private _element;
31
- private droptarget;
27
+ readonly panelId: string;
28
+ private readonly group;
29
+ private readonly _element;
30
+ private readonly droptarget;
32
31
  private content?;
33
32
  private readonly _onChanged;
34
33
  readonly onChanged: Event<LayoutMouseEvent>;
35
34
  private readonly _onDropped;
36
35
  readonly onDrop: Event<DroptargetEvent>;
37
- private readonly panelTransfer;
38
36
  get element(): HTMLElement;
39
- private iframes;
40
37
  constructor(panelId: string, accessor: IDockviewComponent, group: GroupviewPanel);
41
38
  setActive(isActive: boolean): void;
42
39
  setContent(part: ITabRenderer): void;
@@ -1,9 +1,10 @@
1
1
  import { addDisposableListener, Emitter } from '../events';
2
2
  import { CompositeDisposable } from '../lifecycle';
3
3
  import { getPanelData, LocalSelectionTransfer, PanelTransfer, } from '../dnd/dataTransfer';
4
- import { getElementsByTagName, toggleClass } from '../dom';
4
+ import { toggleClass } from '../dom';
5
5
  import { Droptarget } from '../dnd/droptarget';
6
6
  import { DockviewDropTargets } from './dnd';
7
+ import { DragHandler } from '../dnd/abstractDragHandler';
7
8
  export var MouseEventKind;
8
9
  (function (MouseEventKind) {
9
10
  MouseEventKind["CLICK"] = "CLICK";
@@ -13,42 +14,34 @@ export class Tab extends CompositeDisposable {
13
14
  constructor(panelId, accessor, group) {
14
15
  super();
15
16
  this.panelId = panelId;
16
- this.accessor = accessor;
17
17
  this.group = group;
18
18
  this._onChanged = new Emitter();
19
19
  this.onChanged = this._onChanged.event;
20
20
  this._onDropped = new Emitter();
21
21
  this.onDrop = this._onDropped.event;
22
- this.panelTransfer = LocalSelectionTransfer.getInstance();
23
- this.iframes = [];
24
22
  this.addDisposables(this._onChanged, this._onDropped);
25
23
  this._element = document.createElement('div');
26
24
  this._element.className = 'tab';
27
25
  this._element.tabIndex = 0;
28
26
  this._element.draggable = true;
29
- this.addDisposables(addDisposableListener(this._element, 'dragstart', (event) => {
30
- this.iframes = [
31
- ...getElementsByTagName('iframe'),
32
- ...getElementsByTagName('webview'),
33
- ];
34
- for (const iframe of this.iframes) {
35
- iframe.style.pointerEvents = 'none';
27
+ this.addDisposables(new (class Handler extends DragHandler {
28
+ constructor() {
29
+ super(...arguments);
30
+ this.panelTransfer = LocalSelectionTransfer.getInstance();
36
31
  }
37
- this.element.classList.add('dragged');
38
- setTimeout(() => this.element.classList.remove('dragged'), 0);
39
- this.panelTransfer.setData([
40
- new PanelTransfer(this.accessor.id, this.group.id, this.panelId),
41
- ], PanelTransfer.prototype);
42
- if (event.dataTransfer) {
43
- event.dataTransfer.effectAllowed = 'move';
32
+ getData() {
33
+ this.panelTransfer.setData([new PanelTransfer(accessor.id, group.id, panelId)], PanelTransfer.prototype);
34
+ return {
35
+ dispose: () => {
36
+ this.panelTransfer.clearData(PanelTransfer.prototype);
37
+ },
38
+ };
44
39
  }
45
- }), addDisposableListener(this._element, 'dragend', (ev) => {
46
- for (const iframe of this.iframes) {
47
- iframe.style.pointerEvents = 'auto';
40
+ dispose() {
41
+ //
48
42
  }
49
- this.iframes = [];
50
- this.panelTransfer.clearData(PanelTransfer.prototype);
51
- }), addDisposableListener(this._element, 'mousedown', (event) => {
43
+ })(this._element));
44
+ this.addDisposables(addDisposableListener(this._element, 'mousedown', (event) => {
52
45
  if (event.defaultPrevented) {
53
46
  return;
54
47
  }
@@ -155,12 +155,10 @@ export class TabsContainer extends CompositeDisposable {
155
155
  if (!isLeftClick || event.event.defaultPrevented) {
156
156
  return;
157
157
  }
158
- switch (event.kind) {
159
- case MouseEventKind.CLICK:
160
- this.group.model.openPanel(panel, {
161
- skipFocus: alreadyFocused,
162
- });
163
- break;
158
+ if (event.kind === MouseEventKind.CLICK) {
159
+ this.group.model.openPanel(panel, {
160
+ skipFocus: alreadyFocused,
161
+ });
164
162
  }
165
163
  }), tabToAdd.onDrop((event) => {
166
164
  this._onDrop.fire({
@@ -1,5 +1,3 @@
1
- export * from './events';
2
- export * from './lifecycle';
3
1
  export * from './dnd/dataTransfer';
4
2
  export * from './api/component.api';
5
3
  export * from './splitview/core/splitview';
@@ -20,8 +18,10 @@ export * from './splitview/splitviewPanel';
20
18
  export * from './paneview/paneviewPanel';
21
19
  export * from './groupview/groupPanel';
22
20
  export * from './react';
21
+ export { Event } from './events';
22
+ export { IDisposable } from './lifecycle';
23
23
  export { Position } from './dnd/droptarget';
24
- export { StateObject, State, FocusEvent, PanelDimensionChangeEvent, VisibilityEvent, ActiveEvent, PanelApi, } from './api/panelApi';
24
+ export { FocusEvent, PanelDimensionChangeEvent, VisibilityEvent, ActiveEvent, PanelApi, } from './api/panelApi';
25
25
  export { SizeEvent, GridviewPanelApi, GridConstraintChangeEvent, } from './api/gridviewPanelApi';
26
26
  export { TitleEvent, SuppressClosableEvent, DockviewPanelApi, } from './api/groupPanelApi';
27
27
  export { PanelSizeEvent, PanelConstraintChangeEvent, SplitviewPanelApi, } from './api/splitviewPanelApi';
package/dist/esm/index.js CHANGED
@@ -1,5 +1,3 @@
1
- export * from './events';
2
- export * from './lifecycle';
3
1
  export * from './dnd/dataTransfer';
4
2
  export * from './api/component.api';
5
3
  export * from './splitview/core/splitview';
@@ -20,4 +18,5 @@ export * from './splitview/splitviewPanel';
20
18
  export * from './paneview/paneviewPanel';
21
19
  export * from './groupview/groupPanel';
22
20
  export * from './react'; // TODO: should be conditional on whether user wants the React wrappers
21
+ export { Event } from './events';
23
22
  export { Position } from './dnd/droptarget';
@@ -14,7 +14,7 @@ export class CompositeDisposable {
14
14
  return new CompositeDisposable(...args);
15
15
  }
16
16
  addDisposables(...args) {
17
- args === null || args === void 0 ? void 0 : args.forEach((arg) => this.disposables.push(arg));
17
+ args.forEach((arg) => this.disposables.push(arg));
18
18
  }
19
19
  dispose() {
20
20
  this.disposables.forEach((arg) => arg.dispose());
@@ -33,6 +33,7 @@ export class MutableDisposable {
33
33
  dispose() {
34
34
  if (this._disposable) {
35
35
  this._disposable.dispose();
36
+ this._disposable = Disposable.NONE;
36
37
  }
37
38
  }
38
39
  }
@@ -1,4 +1,3 @@
1
- import { State } from '../api/panelApi';
2
1
  import { IDisposable } from '../lifecycle';
3
2
  import { LayoutPriority } from '../splitview/core/splitview';
4
3
  /**
@@ -9,7 +8,6 @@ export interface Parameters {
9
8
  }
10
9
  export interface PanelInitParameters {
11
10
  params: Parameters;
12
- state?: State;
13
11
  }
14
12
  export interface PanelUpdateEvent<T extends Parameters = Parameters> {
15
13
  params: Partial<T>;
@@ -1,6 +1,5 @@
1
1
  import { PaneTransfer } from '../dnd/dataTransfer';
2
2
  import { DroptargetEvent } from '../dnd/droptarget';
3
- import { Event } from '../events';
4
3
  import { Orientation } from '../splitview/core/splitview';
5
4
  import { IPaneviewPanel, PaneviewPanel } from './paneviewPanel';
6
5
  export interface PaneviewDropEvent2 extends DroptargetEvent {
@@ -11,7 +10,8 @@ export declare abstract class DraggablePaneviewPanel extends PaneviewPanel {
11
10
  private handler;
12
11
  private target;
13
12
  private readonly _onDidDrop;
14
- readonly onDidDrop: Event<PaneviewDropEvent2>;
13
+ readonly onDidDrop: import("../events").Event<PaneviewDropEvent2>;
15
14
  constructor(id: string, component: string, headerComponent: string | undefined, orientation: Orientation, isExpanded: boolean, disableDnd: boolean);
16
15
  private initDragFeatures;
16
+ private onDrop;
17
17
  }
@@ -5,7 +5,7 @@ import { Emitter } from '../events';
5
5
  import { PaneviewPanel, } from './paneviewPanel';
6
6
  export class DraggablePaneviewPanel extends PaneviewPanel {
7
7
  constructor(id, component, headerComponent, orientation, isExpanded, disableDnd) {
8
- super(id, component, headerComponent, orientation, isExpanded);
8
+ super(id, component, headerComponent, orientation, isExpanded, true);
9
9
  this._onDidDrop = new Emitter();
10
10
  this.onDidDrop = this._onDidDrop.event;
11
11
  if (!disableDnd) {
@@ -39,34 +39,37 @@ export class DraggablePaneviewPanel extends PaneviewPanel {
39
39
  },
40
40
  });
41
41
  this.addDisposables(this._onDidDrop, this.handler, this.target, this.target.onDrop((event) => {
42
- const data = getPaneData();
43
- if (!data) {
44
- this._onDidDrop.fire(Object.assign(Object.assign({}, event), { panel: this, getData: () => getPaneData() }));
45
- return;
46
- }
47
- const containerApi = this.params
48
- .containerApi;
49
- const panelId = data.paneId;
50
- const existingPanel = containerApi.getPanel(panelId);
51
- if (!existingPanel) {
52
- this._onDidDrop.fire(Object.assign(Object.assign({}, event), { panel: this, getData: () => getPaneData() }));
53
- return;
54
- }
55
- const allPanels = containerApi.getPanels();
56
- const fromIndex = allPanels.indexOf(existingPanel);
57
- let toIndex = containerApi.getPanels().indexOf(this);
58
- if (event.position === Position.Left ||
59
- event.position === Position.Top) {
60
- toIndex = Math.max(0, toIndex - 1);
61
- }
62
- if (event.position === Position.Right ||
63
- event.position === Position.Bottom) {
64
- if (fromIndex > toIndex) {
65
- toIndex++;
66
- }
67
- toIndex = Math.min(allPanels.length - 1, toIndex);
68
- }
69
- containerApi.movePanel(fromIndex, toIndex);
42
+ this.onDrop(event);
70
43
  }));
71
44
  }
45
+ onDrop(event) {
46
+ const data = getPaneData();
47
+ if (!data) {
48
+ this._onDidDrop.fire(Object.assign(Object.assign({}, event), { panel: this, getData: () => getPaneData() }));
49
+ return;
50
+ }
51
+ const containerApi = this._params
52
+ .containerApi;
53
+ const panelId = data.paneId;
54
+ const existingPanel = containerApi.getPanel(panelId);
55
+ if (!existingPanel) {
56
+ this._onDidDrop.fire(Object.assign(Object.assign({}, event), { panel: this, getData: () => getPaneData() }));
57
+ return;
58
+ }
59
+ const allPanels = containerApi.getPanels();
60
+ const fromIndex = allPanels.indexOf(existingPanel);
61
+ let toIndex = containerApi.getPanels().indexOf(this);
62
+ if (event.position === Position.Left ||
63
+ event.position === Position.Top) {
64
+ toIndex = Math.max(0, toIndex - 1);
65
+ }
66
+ if (event.position === Position.Right ||
67
+ event.position === Position.Bottom) {
68
+ if (fromIndex > toIndex) {
69
+ toIndex++;
70
+ }
71
+ toIndex = Math.min(allPanels.length - 1, toIndex);
72
+ }
73
+ containerApi.movePanel(fromIndex, toIndex);
74
+ }
72
75
  }
@@ -37,7 +37,7 @@ export class Paneview extends CompositeDisposable {
37
37
  this.paneItems.push(paneItem);
38
38
  pane.orthogonalSize = this.splitview.orthogonalSize;
39
39
  });
40
- this.addDisposables(this.splitview.onDidSashEnd(() => {
40
+ this.addDisposables(this._onDidChange, this.splitview.onDidSashEnd(() => {
41
41
  this._onDidChange.fire(undefined);
42
42
  }), this.splitview.onDidAddView(() => {
43
43
  this._onDidChange.fire();
@@ -127,7 +127,6 @@ export class Paneview extends CompositeDisposable {
127
127
  }
128
128
  dispose() {
129
129
  super.dispose();
130
- this.splitview.dispose();
131
130
  if (this.animationTimer) {
132
131
  clearTimeout(this.animationTimer);
133
132
  this.animationTimer = undefined;
@@ -136,6 +135,7 @@ export class Paneview extends CompositeDisposable {
136
135
  paneItem.disposable.dispose();
137
136
  });
138
137
  this.paneItems = [];
138
+ this.splitview.dispose();
139
139
  this.element.remove();
140
140
  }
141
141
  }
@@ -18,9 +18,6 @@ export interface SerializedPaneviewPanel {
18
18
  params?: {
19
19
  [index: string]: any;
20
20
  };
21
- state?: {
22
- [index: string]: any;
23
- };
24
21
  };
25
22
  size: number;
26
23
  expanded?: boolean;
@@ -87,8 +84,10 @@ export declare class PaneviewComponent extends CompositeDisposable implements IP
87
84
  readonly onDidLayoutChange: Event<void>;
88
85
  private readonly _onDidDrop;
89
86
  readonly onDidDrop: Event<PaneviewDropEvent2>;
90
- get onDidAddView(): Event<PaneviewPanel>;
91
- get onDidRemoveView(): Event<PaneviewPanel>;
87
+ private readonly _onDidAddView;
88
+ readonly onDidAddView: Event<PaneviewPanel>;
89
+ private readonly _onDidRemoveView;
90
+ readonly onDidRemoveView: Event<PaneviewPanel>;
92
91
  set paneview(value: Paneview);
93
92
  get paneview(): Paneview;
94
93
  get minimumSize(): number;
@@ -112,4 +111,5 @@ export declare class PaneviewComponent extends CompositeDisposable implements IP
112
111
  resizeToFit(): void;
113
112
  toJSON(): SerializedPaneview;
114
113
  fromJSON(serializedPaneview: SerializedPaneview, deferComponentLayout?: boolean): void;
114
+ dispose(): void;
115
115
  }
@@ -27,6 +27,11 @@ export class PaneviewComponent extends CompositeDisposable {
27
27
  this.onDidLayoutChange = this._onDidLayoutChange.event;
28
28
  this._onDidDrop = new Emitter();
29
29
  this.onDidDrop = this._onDidDrop.event;
30
+ this._onDidAddView = new Emitter();
31
+ this.onDidAddView = this._onDidAddView.event;
32
+ this._onDidRemoveView = new Emitter();
33
+ this.onDidRemoveView = this._onDidRemoveView.event;
34
+ this.addDisposables(this._onDidLayoutChange, this._onDidDrop, this._onDidAddView, this._onDidRemoveView);
30
35
  this._options = options;
31
36
  if (!options.components) {
32
37
  options.components = {};
@@ -40,17 +45,11 @@ export class PaneviewComponent extends CompositeDisposable {
40
45
  });
41
46
  this.addDisposables(this._disposable);
42
47
  }
43
- get onDidAddView() {
44
- return this._paneview.onDidAddView;
45
- }
46
- get onDidRemoveView() {
47
- return this._paneview.onDidRemoveView;
48
- }
49
48
  set paneview(value) {
50
49
  this._paneview = value;
51
- this._disposable.value = new CompositeDisposable(this.paneview.onDidChange(() => {
50
+ this._disposable.value = new CompositeDisposable(this._paneview.onDidChange(() => {
52
51
  this._onDidLayoutChange.fire(undefined);
53
- }));
52
+ }), this._paneview.onDidAddView((e) => this._onDidAddView.fire(e)), this._paneview.onDidRemoveView((e) => this._onDidRemoveView.fire(e)));
54
53
  }
55
54
  get paneview() {
56
55
  return this._paneview;
@@ -230,6 +229,10 @@ export class PaneviewComponent extends CompositeDisposable {
230
229
  });
231
230
  panel.orientation = this.paneview.orientation;
232
231
  });
232
+ setTimeout(() => {
233
+ // the original onDidAddView events are missed since they are fired before we can subcribe to them
234
+ this._onDidAddView.fire(panel);
235
+ }, 0);
233
236
  return { size: view.size, view: panel };
234
237
  }),
235
238
  },
@@ -244,4 +247,8 @@ export class PaneviewComponent extends CompositeDisposable {
244
247
  queue.forEach((f) => f());
245
248
  }
246
249
  }
250
+ dispose() {
251
+ super.dispose();
252
+ this.paneview.dispose();
253
+ }
247
254
  }
@@ -39,6 +39,7 @@ export interface IPaneviewPanel extends BasePanelViewExported<PaneviewPanelApiIm
39
39
  readonly maximumBodySize: number;
40
40
  isExpanded(): boolean;
41
41
  setExpanded(isExpanded: boolean): void;
42
+ headerVisible: boolean;
42
43
  }
43
44
  export declare abstract class PaneviewPanel extends BasePanelView<PaneviewPanelApiImpl> implements IPaneview, IPaneviewPanel {
44
45
  private readonly headerComponent;
@@ -59,6 +60,7 @@ export declare abstract class PaneviewPanel extends BasePanelView<PaneviewPanelA
59
60
  private expandedSize;
60
61
  private animationTimer;
61
62
  private _orientation;
63
+ private _headerVisible;
62
64
  set orientation(value: Orientation);
63
65
  get orientation(): Orientation;
64
66
  get minimumSize(): number;
@@ -70,7 +72,9 @@ export declare abstract class PaneviewPanel extends BasePanelView<PaneviewPanelA
70
72
  set minimumBodySize(value: number);
71
73
  get maximumBodySize(): number;
72
74
  set maximumBodySize(value: number);
73
- constructor(id: string, component: string, headerComponent: string | undefined, orientation: Orientation, isExpanded: boolean);
75
+ get headerVisible(): boolean;
76
+ set headerVisible(value: boolean);
77
+ constructor(id: string, component: string, headerComponent: string | undefined, orientation: Orientation, isExpanded: boolean, isHeaderVisible: boolean);
74
78
  setVisible(isVisible: boolean): void;
75
79
  setActive(isActive: boolean): void;
76
80
  isExpanded(): boolean;
@@ -4,7 +4,7 @@ import { addDisposableListener, Emitter } from '../events';
4
4
  import { BasePanelView, } from '../gridview/basePanelView';
5
5
  import { Orientation } from '../splitview/core/splitview';
6
6
  export class PaneviewPanel extends BasePanelView {
7
- constructor(id, component, headerComponent, orientation, isExpanded) {
7
+ constructor(id, component, headerComponent, orientation, isExpanded, isHeaderVisible) {
8
8
  super(id, component, new PaneviewPanelApiImpl(id));
9
9
  this.headerComponent = headerComponent;
10
10
  this._onDidChangeExpansionState = new Emitter({ replay: true });
@@ -20,6 +20,7 @@ export class PaneviewPanel extends BasePanelView {
20
20
  this.expandedSize = 0;
21
21
  this.api.pane = this; // TODO cannot use 'this' before 'super'
22
22
  this._isExpanded = isExpanded;
23
+ this._headerVisible = isHeaderVisible;
23
24
  this._onDidChangeExpansionState.fire(this.isExpanded()); // initialize value
24
25
  this._orientation = orientation;
25
26
  this.element.classList.add('pane');
@@ -87,6 +88,13 @@ export class PaneviewPanel extends BasePanelView {
87
88
  this._maximumBodySize =
88
89
  typeof value === 'number' ? value : Number.POSITIVE_INFINITY;
89
90
  }
91
+ get headerVisible() {
92
+ return this._headerVisible;
93
+ }
94
+ set headerVisible(value) {
95
+ this._headerVisible = value;
96
+ this.header.style.display = value ? '' : 'none';
97
+ }
90
98
  setVisible(isVisible) {
91
99
  this.api._onDidVisibilityChange.fire({ isVisible });
92
100
  }
@@ -149,7 +157,7 @@ export class PaneviewPanel extends BasePanelView {
149
157
  }
150
158
  }
151
159
  toJSON() {
152
- const params = this.params;
160
+ const params = this._params;
153
161
  return Object.assign(Object.assign({}, super.toJSON()), { headerComponent: this.headerComponent, title: params.title });
154
162
  }
155
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';
@@ -59,12 +59,16 @@ 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' }
66
65
  : undefined,
67
66
  });
67
+ const disposable = dockview.onDidDrop((event) => {
68
+ if (props.onDidDrop) {
69
+ props.onDidDrop(event);
70
+ }
71
+ });
68
72
  (_a = domRef.current) === null || _a === void 0 ? void 0 : _a.appendChild(dockview.element);
69
73
  dockview.deserializer = new ReactPanelDeserialzier(dockview);
70
74
  const { clientWidth, clientHeight } = domRef.current;
@@ -74,7 +78,9 @@ export const DockviewReact = React.forwardRef((props, ref) => {
74
78
  }
75
79
  dockviewRef.current = dockview;
76
80
  return () => {
81
+ disposable.dispose();
77
82
  dockview.dispose();
83
+ element.remove();
78
84
  };
79
85
  }, []);
80
86
  React.useEffect(() => {
@@ -85,6 +91,22 @@ export const DockviewReact = React.forwardRef((props, ref) => {
85
91
  frameworkComponents: props.components,
86
92
  });
87
93
  }, [props.components]);
94
+ React.useEffect(() => {
95
+ if (!dockviewRef.current) {
96
+ return;
97
+ }
98
+ dockviewRef.current.updateOptions({
99
+ watermarkFrameworkComponent: props.watermarkComponent,
100
+ });
101
+ }, [props.watermarkComponent]);
102
+ React.useEffect(() => {
103
+ if (!dockviewRef.current) {
104
+ return;
105
+ }
106
+ dockviewRef.current.updateOptions({
107
+ showDndOverlay: props.showDndOverlay,
108
+ });
109
+ }, [props.showDndOverlay]);
88
110
  React.useEffect(() => {
89
111
  if (!dockviewRef.current) {
90
112
  return;
@@ -11,16 +11,14 @@ export class ReactPanelContentPart {
11
11
  this._onDidBlur = new Emitter();
12
12
  this.onDidBlur = this._onDidBlur.event;
13
13
  this._element = document.createElement('div');
14
- this._element.style.height = '100%';
15
- this._element.style.width = '100%';
14
+ this._element.className = 'dockview-react-part';
16
15
  // this.hostedContainer = new HostedContainer({
17
16
  // id,
18
17
  // });
19
18
  // this.hostedContainer.onDidFocus(() => this._onDidFocus.fire());
20
19
  // this.hostedContainer.onDidBlur(() => this._onDidBlur.fire());
21
20
  this._actionsElement = document.createElement('div');
22
- this._actionsElement.style.height = '100%';
23
- this._actionsElement.style.width = '100%';
21
+ this._actionsElement.className = 'dockview-react-part';
24
22
  }
25
23
  get element() {
26
24
  return this._element;
@@ -68,6 +66,8 @@ export class ReactPanelContentPart {
68
66
  }
69
67
  dispose() {
70
68
  var _a, _b;
69
+ this._onDidFocus.dispose();
70
+ this._onDidBlur.dispose();
71
71
  (_a = this.part) === null || _a === void 0 ? void 0 : _a.dispose();
72
72
  // this.hostedContainer?.dispose();
73
73
  (_b = this.actionsPart) === null || _b === void 0 ? void 0 : _b.dispose();
@@ -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;
@@ -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 {
@@ -27,4 +27,3 @@ export declare class ReactWatermarkPart implements IWatermarkRenderer {
27
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;