dockview 1.0.1 → 1.1.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 (221) hide show
  1. package/README.md +243 -186
  2. package/dist/cjs/api/component.api.d.ts +32 -17
  3. package/dist/cjs/api/component.api.js +155 -28
  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 +3 -3
  19. package/dist/cjs/dnd/abstractDragHandler.js +15 -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 +4 -5
  28. package/dist/cjs/dnd/droptarget.js +70 -46
  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/defaultGroupPanelView.js +3 -1
  34. package/dist/cjs/dockview/defaultGroupPanelView.js.map +1 -1
  35. package/dist/cjs/dockview/dockviewComponent.d.ts +27 -19
  36. package/dist/cjs/dockview/dockviewComponent.js +67 -178
  37. package/dist/cjs/dockview/dockviewComponent.js.map +1 -1
  38. package/dist/cjs/dockview/dockviewGroupPanel.d.ts +2 -5
  39. package/dist/cjs/dockview/dockviewGroupPanel.js +2 -31
  40. package/dist/cjs/dockview/dockviewGroupPanel.js.map +1 -1
  41. package/dist/cjs/dockview/options.d.ts +2 -1
  42. package/dist/cjs/events.d.ts +7 -0
  43. package/dist/cjs/events.js +47 -5
  44. package/dist/cjs/events.js.map +1 -1
  45. package/dist/cjs/gridview/baseComponentGridview.d.ts +9 -0
  46. package/dist/cjs/gridview/baseComponentGridview.js +20 -15
  47. package/dist/cjs/gridview/baseComponentGridview.js.map +1 -1
  48. package/dist/cjs/gridview/basePanelView.d.ts +5 -8
  49. package/dist/cjs/gridview/basePanelView.js +14 -8
  50. package/dist/cjs/gridview/basePanelView.js.map +1 -1
  51. package/dist/cjs/gridview/branchNode.js +1 -1
  52. package/dist/cjs/gridview/branchNode.js.map +1 -1
  53. package/dist/cjs/gridview/gridview.js +19 -18
  54. package/dist/cjs/gridview/gridview.js.map +1 -1
  55. package/dist/cjs/gridview/gridviewComponent.d.ts +4 -0
  56. package/dist/cjs/gridview/gridviewComponent.js +5 -0
  57. package/dist/cjs/gridview/gridviewComponent.js.map +1 -1
  58. package/dist/cjs/gridview/gridviewPanel.d.ts +0 -1
  59. package/dist/cjs/gridview/gridviewPanel.js +3 -6
  60. package/dist/cjs/gridview/gridviewPanel.js.map +1 -1
  61. package/dist/cjs/gridview/leafNode.js +1 -0
  62. package/dist/cjs/gridview/leafNode.js.map +1 -1
  63. package/dist/cjs/groupview/groupPanel.d.ts +0 -7
  64. package/dist/cjs/groupview/groupview.d.ts +15 -8
  65. package/dist/cjs/groupview/groupview.js +38 -125
  66. package/dist/cjs/groupview/groupview.js.map +1 -1
  67. package/dist/cjs/groupview/groupviewPanel.d.ts +5 -2
  68. package/dist/cjs/groupview/groupviewPanel.js.map +1 -1
  69. package/dist/cjs/groupview/panel/content.js +1 -0
  70. package/dist/cjs/groupview/panel/content.js.map +1 -1
  71. package/dist/cjs/groupview/tab.d.ts +10 -13
  72. package/dist/cjs/groupview/tab.js +22 -80
  73. package/dist/cjs/groupview/tab.js.map +1 -1
  74. package/dist/cjs/groupview/titlebar/tabsContainer.js +6 -8
  75. package/dist/cjs/groupview/titlebar/tabsContainer.js.map +1 -1
  76. package/dist/cjs/index.d.ts +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.d.ts +1 -1
  84. package/dist/cjs/paneview/paneview.js +2 -5
  85. package/dist/cjs/paneview/paneview.js.map +1 -1
  86. package/dist/cjs/paneview/paneviewComponent.d.ts +6 -5
  87. package/dist/cjs/paneview/paneviewComponent.js +11 -16
  88. package/dist/cjs/paneview/paneviewComponent.js.map +1 -1
  89. package/dist/cjs/paneview/paneviewPanel.d.ts +5 -1
  90. package/dist/cjs/paneview/paneviewPanel.js +14 -2
  91. package/dist/cjs/paneview/paneviewPanel.js.map +1 -1
  92. package/dist/cjs/react/deserializer.js +1 -3
  93. package/dist/cjs/react/deserializer.js.map +1 -1
  94. package/dist/cjs/react/dockview/dockview.d.ts +9 -9
  95. package/dist/cjs/react/dockview/dockview.js +14 -1
  96. package/dist/cjs/react/dockview/dockview.js.map +1 -1
  97. package/dist/cjs/react/dockview/reactContentPart.js +4 -4
  98. package/dist/cjs/react/dockview/reactContentPart.js.map +1 -1
  99. package/dist/cjs/react/dockview/reactHeaderPart.js +1 -0
  100. package/dist/cjs/react/dockview/reactHeaderPart.js.map +1 -1
  101. package/dist/cjs/react/dockview/reactWatermarkPart.d.ts +1 -2
  102. package/dist/cjs/react/dockview/reactWatermarkPart.js +1 -2
  103. package/dist/cjs/react/dockview/reactWatermarkPart.js.map +1 -1
  104. package/dist/cjs/react/gridview/view.js +2 -2
  105. package/dist/cjs/react/gridview/view.js.map +1 -1
  106. package/dist/cjs/react/index.d.ts +1 -0
  107. package/dist/cjs/react/index.js.map +1 -1
  108. package/dist/cjs/react/react.js +1 -2
  109. package/dist/cjs/react/react.js.map +1 -1
  110. package/dist/cjs/react/splitview/view.js +2 -2
  111. package/dist/cjs/react/splitview/view.js.map +1 -1
  112. package/dist/cjs/splitview/core/splitview.js +1 -1
  113. package/dist/cjs/splitview/core/splitview.js.map +1 -1
  114. package/dist/cjs/splitview/splitviewComponent.d.ts +9 -6
  115. package/dist/cjs/splitview/splitviewComponent.js +11 -1
  116. package/dist/cjs/splitview/splitviewComponent.js.map +1 -1
  117. package/dist/cjs/splitview/splitviewPanel.d.ts +1 -6
  118. package/dist/cjs/splitview/splitviewPanel.js +5 -3
  119. package/dist/cjs/splitview/splitviewPanel.js.map +1 -1
  120. package/dist/dockview.amd.js +480 -567
  121. package/dist/dockview.amd.min.js +2 -16
  122. package/dist/dockview.amd.min.noStyle.js +2 -16
  123. package/dist/dockview.amd.noStyle.js +479 -566
  124. package/dist/dockview.cjs.js +480 -567
  125. package/dist/dockview.esm.js +480 -563
  126. package/dist/dockview.esm.min.js +2 -16
  127. package/dist/dockview.js +480 -567
  128. package/dist/dockview.min.js +2 -16
  129. package/dist/dockview.min.noStyle.js +2 -16
  130. package/dist/dockview.noStyle.js +479 -566
  131. package/dist/esm/api/component.api.d.ts +32 -17
  132. package/dist/esm/api/component.api.js +71 -20
  133. package/dist/esm/api/gridviewPanelApi.js +1 -0
  134. package/dist/esm/api/groupPanelApi.d.ts +11 -14
  135. package/dist/esm/api/groupPanelApi.js +18 -13
  136. package/dist/esm/api/panelApi.d.ts +0 -25
  137. package/dist/esm/api/panelApi.js +1 -20
  138. package/dist/esm/api/paneviewPanelApi.js +1 -0
  139. package/dist/esm/api/splitviewPanelApi.d.ts +0 -1
  140. package/dist/esm/api/splitviewPanelApi.js +1 -5
  141. package/dist/esm/dnd/abstractDragHandler.d.ts +3 -3
  142. package/dist/esm/dnd/abstractDragHandler.js +9 -8
  143. package/dist/esm/dnd/dataTransfer.d.ts +0 -25
  144. package/dist/esm/dnd/dataTransfer.js +0 -40
  145. package/dist/esm/dnd/dnd.d.ts +1 -14
  146. package/dist/esm/dnd/dnd.js +1 -69
  147. package/dist/esm/dnd/droptarget.d.ts +4 -5
  148. package/dist/esm/dnd/droptarget.js +70 -46
  149. package/dist/esm/dockview/components/tab/defaultTab.d.ts +0 -1
  150. package/dist/esm/dockview/components/tab/defaultTab.js +1 -9
  151. package/dist/esm/dockview/defaultGroupPanelView.js +3 -1
  152. package/dist/esm/dockview/dockviewComponent.d.ts +27 -19
  153. package/dist/esm/dockview/dockviewComponent.js +54 -118
  154. package/dist/esm/dockview/dockviewGroupPanel.d.ts +2 -5
  155. package/dist/esm/dockview/dockviewGroupPanel.js +2 -30
  156. package/dist/esm/dockview/options.d.ts +2 -1
  157. package/dist/esm/events.d.ts +7 -0
  158. package/dist/esm/events.js +20 -3
  159. package/dist/esm/gridview/baseComponentGridview.d.ts +9 -0
  160. package/dist/esm/gridview/baseComponentGridview.js +21 -16
  161. package/dist/esm/gridview/basePanelView.d.ts +5 -8
  162. package/dist/esm/gridview/basePanelView.js +10 -8
  163. package/dist/esm/gridview/branchNode.js +1 -1
  164. package/dist/esm/gridview/gridview.js +16 -16
  165. package/dist/esm/gridview/gridviewComponent.d.ts +4 -0
  166. package/dist/esm/gridview/gridviewComponent.js +5 -0
  167. package/dist/esm/gridview/gridviewPanel.d.ts +0 -1
  168. package/dist/esm/gridview/gridviewPanel.js +3 -6
  169. package/dist/esm/gridview/leafNode.js +1 -0
  170. package/dist/esm/groupview/groupPanel.d.ts +0 -7
  171. package/dist/esm/groupview/groupview.d.ts +15 -8
  172. package/dist/esm/groupview/groupview.js +24 -58
  173. package/dist/esm/groupview/groupviewPanel.d.ts +5 -2
  174. package/dist/esm/groupview/panel/content.js +1 -0
  175. package/dist/esm/groupview/tab.d.ts +10 -13
  176. package/dist/esm/groupview/tab.js +17 -24
  177. package/dist/esm/groupview/titlebar/tabsContainer.js +6 -8
  178. package/dist/esm/index.d.ts +1 -1
  179. package/dist/esm/lifecycle.js +2 -1
  180. package/dist/esm/panel/types.d.ts +0 -2
  181. package/dist/esm/paneview/draggablePaneviewPanel.d.ts +2 -2
  182. package/dist/esm/paneview/draggablePaneviewPanel.js +32 -29
  183. package/dist/esm/paneview/paneview.d.ts +1 -1
  184. package/dist/esm/paneview/paneview.js +2 -5
  185. package/dist/esm/paneview/paneviewComponent.d.ts +6 -5
  186. package/dist/esm/paneview/paneviewComponent.js +11 -8
  187. package/dist/esm/paneview/paneviewPanel.d.ts +5 -1
  188. package/dist/esm/paneview/paneviewPanel.js +10 -2
  189. package/dist/esm/react/deserializer.js +1 -3
  190. package/dist/esm/react/dockview/dockview.d.ts +9 -9
  191. package/dist/esm/react/dockview/dockview.js +15 -2
  192. package/dist/esm/react/dockview/reactContentPart.js +4 -4
  193. package/dist/esm/react/dockview/reactHeaderPart.js +1 -0
  194. package/dist/esm/react/dockview/reactWatermarkPart.d.ts +1 -2
  195. package/dist/esm/react/dockview/reactWatermarkPart.js +1 -2
  196. package/dist/esm/react/gridview/view.js +2 -2
  197. package/dist/esm/react/index.d.ts +1 -0
  198. package/dist/esm/react/react.js +1 -2
  199. package/dist/esm/react/splitview/view.js +2 -2
  200. package/dist/esm/splitview/core/splitview.js +1 -1
  201. package/dist/esm/splitview/splitviewComponent.d.ts +9 -6
  202. package/dist/esm/splitview/splitviewComponent.js +10 -2
  203. package/dist/esm/splitview/splitviewPanel.d.ts +1 -6
  204. package/dist/esm/splitview/splitviewPanel.js +5 -3
  205. package/dist/styles/dockview.css +5 -9
  206. package/package.json +4 -4
  207. package/dist/cjs/functions.d.ts +0 -1
  208. package/dist/cjs/functions.js +0 -42
  209. package/dist/cjs/functions.js.map +0 -1
  210. package/dist/cjs/groupview/panel/hostedPanel.d.ts +0 -22
  211. package/dist/cjs/groupview/panel/hostedPanel.js +0 -57
  212. package/dist/cjs/groupview/panel/hostedPanel.js.map +0 -1
  213. package/dist/cjs/json.d.ts +0 -1
  214. package/dist/cjs/json.js +0 -14
  215. package/dist/cjs/json.js.map +0 -1
  216. package/dist/esm/functions.d.ts +0 -1
  217. package/dist/esm/functions.js +0 -8
  218. package/dist/esm/groupview/panel/hostedPanel.d.ts +0 -22
  219. package/dist/esm/groupview/panel/hostedPanel.js +0 -43
  220. package/dist/esm/json.d.ts +0 -1
  221. package/dist/esm/json.js +0 -9
@@ -4,21 +4,17 @@ import { PanelApiImpl } from '../api/panelApi';
4
4
  export interface BasePanelViewState {
5
5
  id: string;
6
6
  component: string;
7
- params?: {
8
- [key: string]: any;
9
- };
10
- state?: {
11
- [key: string]: any;
12
- };
7
+ params?: Record<string, any>;
13
8
  }
14
9
  export interface BasePanelViewExported<T extends PanelApiImpl> {
15
10
  readonly id: string;
16
11
  readonly api: T;
17
12
  readonly width: number;
18
13
  readonly height: number;
14
+ readonly params: Record<string, any> | undefined;
19
15
  focus(): void;
20
16
  toJSON(): object;
21
- update(params: PanelUpdateEvent): void;
17
+ update(event: PanelUpdateEvent): void;
22
18
  }
23
19
  export declare abstract class BasePanelView<T extends PanelApiImpl> extends CompositeDisposable implements IPanel, BasePanelViewExported<T> {
24
20
  readonly id: string;
@@ -28,7 +24,7 @@ export declare abstract class BasePanelView<T extends PanelApiImpl> extends Comp
28
24
  private _width;
29
25
  private _element;
30
26
  protected part?: IFrameworkPart;
31
- protected params?: PanelInitParameters;
27
+ protected _params?: PanelInitParameters;
32
28
  /**
33
29
  * Provide an IFrameworkPart that will determine the rendered UI of this view piece.
34
30
  */
@@ -36,6 +32,7 @@ export declare abstract class BasePanelView<T extends PanelApiImpl> extends Comp
36
32
  get element(): HTMLElement;
37
33
  get width(): number;
38
34
  get height(): number;
35
+ get params(): Record<string, any> | undefined;
39
36
  constructor(id: string, component: string, api: T);
40
37
  focus(): void;
41
38
  layout(width: number, height: number): void;
@@ -30,6 +30,10 @@ export class BasePanelView extends CompositeDisposable {
30
30
  get height() {
31
31
  return this._height;
32
32
  }
33
+ get params() {
34
+ var _a;
35
+ return (_a = this._params) === null || _a === void 0 ? void 0 : _a.params;
36
+ }
33
37
  focus() {
34
38
  this.api._onFocusEvent.fire();
35
39
  }
@@ -38,29 +42,27 @@ export class BasePanelView extends CompositeDisposable {
38
42
  this._height = height;
39
43
  this.api._onDidPanelDimensionChange.fire({ width, height });
40
44
  if (this.part) {
41
- if (this.params) {
42
- this.part.update(this.params.params);
45
+ if (this._params) {
46
+ this.part.update(this._params.params);
43
47
  }
44
48
  }
45
49
  }
46
50
  init(parameters) {
47
- this.params = parameters;
51
+ this._params = parameters;
48
52
  this.part = this.getComponent();
49
53
  }
50
54
  update(event) {
51
55
  var _a, _b;
52
- this.params = Object.assign(Object.assign({}, this.params), { params: Object.assign(Object.assign({}, (_a = this.params) === null || _a === void 0 ? void 0 : _a.params), event.params) });
53
- (_b = this.part) === null || _b === void 0 ? void 0 : _b.update({ params: this.params.params });
56
+ this._params = Object.assign(Object.assign({}, this._params), { params: Object.assign(Object.assign({}, (_a = this._params) === null || _a === void 0 ? void 0 : _a.params), event.params) });
57
+ (_b = this.part) === null || _b === void 0 ? void 0 : _b.update({ params: this._params.params });
54
58
  }
55
59
  toJSON() {
56
60
  var _a, _b;
57
- const state = this.api.getState();
58
- const params = (_b = (_a = this.params) === null || _a === void 0 ? void 0 : _a.params) !== null && _b !== void 0 ? _b : {};
61
+ const params = (_b = (_a = this._params) === null || _a === void 0 ? void 0 : _a.params) !== null && _b !== void 0 ? _b : {};
59
62
  return {
60
63
  id: this.id,
61
64
  component: this.component,
62
65
  params: Object.keys(params).length > 0 ? params : undefined,
63
- state: Object.keys(state).length === 0 ? undefined : state,
64
66
  };
65
67
  }
66
68
  dispose() {
@@ -49,7 +49,7 @@ export class BranchNode extends CompositeDisposable {
49
49
  proportionalLayout,
50
50
  });
51
51
  }
52
- this.addDisposables(this.splitview.onDidSashEnd(() => {
52
+ this.addDisposables(this._onDidChange, this.splitview.onDidSashEnd(() => {
53
53
  this._onDidChange.fire(undefined);
54
54
  }));
55
55
  this.setupChildrenEvents();
@@ -9,6 +9,15 @@ import { LeafNode } from './leafNode';
9
9
  import { BranchNode } from './branchNode';
10
10
  import { Emitter } from '../events';
11
11
  import { MutableDisposable } from '../lifecycle';
12
+ function findLeaf(candiateNode, last) {
13
+ if (candiateNode instanceof LeafNode) {
14
+ return candiateNode;
15
+ }
16
+ if (candiateNode instanceof BranchNode) {
17
+ return findLeaf(candiateNode.children[last ? candiateNode.children.length - 1 : 0], last);
18
+ }
19
+ throw new Error('invalid node');
20
+ }
12
21
  function flipNode(node, size, orthogonalSize) {
13
22
  if (node instanceof BranchNode) {
14
23
  const result = new BranchNode(orthogonal(node.orientation), node.proportionalLayout, node.styles, size, orthogonalSize);
@@ -147,13 +156,13 @@ export class Gridview {
147
156
  }
148
157
  deserialize(json, deserializer) {
149
158
  const orientation = json.orientation;
150
- const height = json.height;
159
+ const height = orientation === Orientation.VERTICAL ? json.height : json.width;
151
160
  this._deserialize(json.root, orientation, deserializer, height);
152
161
  }
153
162
  _deserialize(root, orientation, deserializer, orthogonalSize) {
154
- this.root = this._deserializeNode(root, orientation, deserializer, orthogonalSize);
163
+ this.root = this._deserializeNode(root, orientation, deserializer, orthogonalSize, true);
155
164
  }
156
- _deserializeNode(node, orientation, deserializer, orthogonalSize) {
165
+ _deserializeNode(node, orientation, deserializer, orthogonalSize, isRoot = false) {
157
166
  let result;
158
167
  if (node.type === 'branch') {
159
168
  const serializedChildren = node.data;
@@ -163,7 +172,9 @@ export class Gridview {
163
172
  visible: serializedChild.visible,
164
173
  };
165
174
  });
166
- result = new BranchNode(orientation, this.proportionalLayout, this.styles, node.size, orthogonalSize, children);
175
+ // HORIZONTAL => height=orthogonalsize width=size
176
+ // VERTICAL => height=size width=orthogonalsize
177
+ result = new BranchNode(orientation, this.proportionalLayout, this.styles, isRoot ? orthogonalSize : node.size, isRoot ? node.size : orthogonalSize, children);
167
178
  }
168
179
  else {
169
180
  result = new LeafNode(deserializer.fromJSON(node), orientation, orthogonalSize, node.size);
@@ -224,15 +235,6 @@ export class Gridview {
224
235
  if (!(node instanceof LeafNode)) {
225
236
  throw new Error('invalid location');
226
237
  }
227
- const findLeaf = (candiateNode, last) => {
228
- if (candiateNode instanceof LeafNode) {
229
- return candiateNode;
230
- }
231
- if (candiateNode instanceof BranchNode) {
232
- return findLeaf(candiateNode.children[last ? candiateNode.children.length - 1 : 0], last);
233
- }
234
- throw new Error('invalid node');
235
- };
236
238
  for (let i = path.length - 1; i > -1; i--) {
237
239
  const n = path[i];
238
240
  const l = location[i] || 0;
@@ -329,15 +331,14 @@ export class Gridview {
329
331
  }
330
332
  parent.removeChild(index, sizing);
331
333
  if (parent.children.length === 0) {
332
- // throw new Error('Invalid grid state');
333
334
  return node.view;
334
335
  }
335
336
  if (parent.children.length > 1) {
336
337
  return node.view;
337
338
  }
339
+ const sibling = parent.children[0];
338
340
  if (pathToParent.length === 0) {
339
341
  // parent is root
340
- const sibling = parent.children[0];
341
342
  if (sibling instanceof LeafNode) {
342
343
  return node.view;
343
344
  }
@@ -348,7 +349,6 @@ export class Gridview {
348
349
  }
349
350
  const [grandParent, ..._] = [...pathToParent].reverse();
350
351
  const [parentIndex, ...__] = [...rest].reverse();
351
- const sibling = parent.children[0];
352
352
  const isSiblingVisible = parent.isChildVisible(0);
353
353
  parent.removeChild(0, sizing);
354
354
  const sizes = grandParent.children.map((size, i) => grandParent.getChildSize(i));
@@ -7,6 +7,7 @@ import { GridviewPanel, GridviewInitParameters, GridPanelViewState, IGridviewPan
7
7
  import { BaseComponentOptions } from '../panel/types';
8
8
  import { GridviewPanelApiImpl } from '../api/gridviewPanelApi';
9
9
  import { Orientation, Sizing } from '../splitview/core/splitview';
10
+ import { Event } from '../events';
10
11
  interface PanelReference {
11
12
  api: GridviewPanelApiImpl;
12
13
  }
@@ -37,6 +38,7 @@ export interface IGridPanelComponentView extends IGridPanelView {
37
38
  export declare type GridviewComponentUpdateOptions = Pick<GridviewComponentOptions, 'orientation' | 'components' | 'frameworkComponents'>;
38
39
  export interface IGridviewComponent extends IBaseGrid<GridviewPanel> {
39
40
  readonly orientation: Orientation;
41
+ readonly onDidLayoutFromJSON: Event<void>;
40
42
  updateOptions(options: Partial<GridviewComponentUpdateOptions>): void;
41
43
  addPanel(options: AddComponentOptions): void;
42
44
  removePanel(panel: IGridviewPanel, sizing?: Sizing): void;
@@ -55,6 +57,8 @@ export interface IGridviewComponent extends IBaseGrid<GridviewPanel> {
55
57
  export declare class GridviewComponent extends BaseGrid<GridviewPanel> implements IGridviewComponent {
56
58
  private _options;
57
59
  private _deserializer;
60
+ private readonly _onDidLayoutfromJSON;
61
+ readonly onDidLayoutFromJSON: Event<void>;
58
62
  get orientation(): Orientation;
59
63
  set orientation(value: Orientation);
60
64
  get options(): GridviewComponentOptions;
@@ -5,6 +5,7 @@ import { CompositeDisposable } from '../lifecycle';
5
5
  import { BaseGrid, GroupChangeKind, toTarget, } from './baseComponentGridview';
6
6
  import { GridviewApi } from '../api/component.api';
7
7
  import { createComponent } from '../panel/componentFactory';
8
+ import { Emitter } from '../events';
8
9
  export class GridviewComponent extends BaseGrid {
9
10
  constructor(element, options) {
10
11
  super(element, {
@@ -12,6 +13,8 @@ export class GridviewComponent extends BaseGrid {
12
13
  orientation: options.orientation,
13
14
  styles: options.styles,
14
15
  });
16
+ this._onDidLayoutfromJSON = new Emitter();
17
+ this.onDidLayoutFromJSON = this._onDidLayoutfromJSON.event;
15
18
  this._options = options;
16
19
  if (!this.options.components) {
17
20
  this.options.components = {};
@@ -120,6 +123,7 @@ export class GridviewComponent extends BaseGrid {
120
123
  }
121
124
  }
122
125
  this._onGridEvent.fire({ kind: GroupChangeKind.LAYOUT_FROM_JSON });
126
+ this._onDidLayoutfromJSON.fire();
123
127
  }
124
128
  movePanel(panel, options) {
125
129
  var _a;
@@ -234,5 +238,6 @@ export class GridviewComponent extends BaseGrid {
234
238
  }
235
239
  dispose() {
236
240
  super.dispose();
241
+ this._onDidLayoutfromJSON.dispose();
237
242
  }
238
243
  }
@@ -50,7 +50,6 @@ export declare abstract class GridviewPanel extends BasePanelView<GridviewPanelA
50
50
  init(parameters: GridviewInitParameters): void;
51
51
  private updateConstraints;
52
52
  toJSON(): GridPanelViewState;
53
- dispose(): void;
54
53
  }
55
54
  export interface GridPanelViewState extends BasePanelViewState {
56
55
  minimumHeight?: number;
@@ -15,12 +15,12 @@ export class GridviewPanel extends BasePanelView {
15
15
  this._snap = false;
16
16
  this._onDidChange = new Emitter();
17
17
  this.onDidChange = this._onDidChange.event;
18
- this.addDisposables(this.api.onVisibilityChange((event) => {
18
+ this.addDisposables(this._onDidChange, this.api.onVisibilityChange((event) => {
19
19
  const { isVisible } = event;
20
- const { containerApi } = this.params;
20
+ const { containerApi } = this._params;
21
21
  containerApi.setVisible(this, isVisible);
22
22
  }), this.api.onActiveChange(() => {
23
- const { containerApi } = this.params;
23
+ const { containerApi } = this._params;
24
24
  containerApi.setActive(this);
25
25
  }), this.api.onDidConstraintsChangeInternal((event) => {
26
26
  if (typeof event.minimumWidth === 'number' ||
@@ -135,7 +135,4 @@ export class GridviewPanel extends BasePanelView {
135
135
  const minimum = (value) => (value <= 0 ? undefined : value);
136
136
  return Object.assign(Object.assign({}, state), { minimumHeight: minimum(this.minimumHeight), maximumHeight: maximum(this.maximumHeight), minimumWidth: minimum(this.minimumWidth), maximumWidth: maximum(this.maximumWidth), snap: this.snap, priority: this.priority });
137
137
  }
138
- dispose() {
139
- super.dispose();
140
- }
141
138
  }
@@ -92,6 +92,7 @@ export class LeafNode {
92
92
  this.view.layout(this.width, this.height);
93
93
  }
94
94
  dispose() {
95
+ this._onDidChange.dispose();
95
96
  this._disposable.dispose();
96
97
  }
97
98
  }
@@ -1,5 +1,4 @@
1
1
  import { DockviewPanelApi } from '../api/groupPanelApi';
2
- import { Event } from '../events';
3
2
  import { IDisposable } from '../lifecycle';
4
3
  import { HeaderPartInitParameters } from './types';
5
4
  import { IPanel, PanelInitParameters, PanelUpdateEvent, Parameters } from '../panel/types';
@@ -20,10 +19,7 @@ export interface IGroupPanel extends IDisposable, IPanel {
20
19
  readonly title: string;
21
20
  readonly suppressClosable: boolean;
22
21
  updateParentGroup(group: GroupviewPanel, isGroupActive: boolean): void;
23
- setDirty(isDirty: boolean): void;
24
- close?(): Promise<boolean>;
25
22
  init(params: IGroupPanelInitParameters): void;
26
- onDidStateChange: Event<void>;
27
23
  toJSON(): GroupviewPanelState;
28
24
  update(event: GroupPanelUpdateEvent): void;
29
25
  }
@@ -35,7 +31,4 @@ export interface GroupviewPanelState {
35
31
  [key: string]: any;
36
32
  };
37
33
  suppressClosable?: boolean;
38
- state?: {
39
- [key: string]: any;
40
- };
41
34
  }
@@ -11,8 +11,7 @@ import { DockviewDropTargets } from './dnd';
11
11
  export declare enum GroupChangeKind2 {
12
12
  ADD_PANEL = "ADD_PANEL",
13
13
  REMOVE_PANEL = "REMOVE_PANEL",
14
- PANEL_ACTIVE = "PANEL_ACTIVE",
15
- GROUP_ACTIVE = "GROUP_ACTIVE"
14
+ PANEL_ACTIVE = "PANEL_ACTIVE"
16
15
  }
17
16
  export interface DndService {
18
17
  canDisplayOverlay(group: IGroupview, event: DragEvent, target: DockviewDropTargets): boolean;
@@ -48,20 +47,26 @@ export interface GroupPanelViewState {
48
47
  activeView?: string;
49
48
  id: string;
50
49
  }
50
+ export interface GroupviewDropEvent {
51
+ nativeEvent: DragEvent;
52
+ position: Position;
53
+ index?: number;
54
+ }
51
55
  export interface IGroupview extends IDisposable, IGridPanelView {
52
56
  readonly isActive: boolean;
53
57
  readonly size: number;
54
58
  readonly panels: IGroupPanel[];
55
59
  readonly tabHeight: number | undefined;
60
+ readonly activePanel: IGroupPanel | undefined;
61
+ readonly onDidDrop: Event<GroupviewDropEvent>;
56
62
  isPanelActive: (panel: IGroupPanel) => boolean;
57
- activePanel: IGroupPanel | undefined;
58
63
  indexOf(panel: IGroupPanel): number;
59
64
  openPanel(panel: IGroupPanel, options?: {
60
65
  index?: number;
61
66
  skipFocus?: boolean;
62
67
  }): void;
63
- closePanel(panel: IGroupPanel): Promise<boolean>;
64
- closeAllPanels(): Promise<boolean>;
68
+ closePanel(panel: IGroupPanel): void;
69
+ closeAllPanels(): void;
65
70
  containsPanel(panel: IGroupPanel): boolean;
66
71
  removePanel: (panelOrId: IGroupPanel | string) => IGroupPanel;
67
72
  onDidGroupChange: Event<GroupviewChangeEvent>;
@@ -100,6 +105,8 @@ export declare class Groupview extends CompositeDisposable implements IGroupview
100
105
  readonly onMove: Event<GroupMoveEvent>;
101
106
  private readonly _onDidGroupChange;
102
107
  readonly onDidGroupChange: Event<GroupviewChangeEvent>;
108
+ private readonly _onDidDrop;
109
+ readonly onDidDrop: Event<GroupviewDropEvent>;
103
110
  get element(): HTMLElement;
104
111
  get activePanel(): IGroupPanel | undefined;
105
112
  get tabHeight(): number | undefined;
@@ -134,8 +141,8 @@ export declare class Groupview extends CompositeDisposable implements IGroupview
134
141
  skipFocus?: boolean;
135
142
  }): void;
136
143
  removePanel(groupItemOrId: IGroupPanel | string): IGroupPanel;
137
- closeAllPanels(): Promise<boolean>;
138
- closePanel: (panel: IGroupPanel) => Promise<boolean>;
144
+ closeAllPanels(): void;
145
+ closePanel(panel: IGroupPanel): void;
139
146
  private doClose;
140
147
  isPanelActive(panel: IGroupPanel): boolean;
141
148
  updateActions(): void;
@@ -147,7 +154,7 @@ export declare class Groupview extends CompositeDisposable implements IGroupview
147
154
  private doSetActivePanel;
148
155
  private updateMru;
149
156
  private updateContainer;
150
- canDisplayOverlay(dragOverEvent: DragEvent, target: DockviewDropTargets): boolean;
157
+ canDisplayOverlay(event: DragEvent, target: DockviewDropTargets): boolean;
151
158
  private handleDropEvent;
152
159
  dispose(): void;
153
160
  }
@@ -1,12 +1,3 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
1
  import { DockviewApi } from '../api/component.api';
11
2
  import { getPanelData } from '../dnd/dataTransfer';
12
3
  import { Droptarget, Position } from '../dnd/droptarget';
@@ -21,7 +12,6 @@ export var GroupChangeKind2;
21
12
  GroupChangeKind2["ADD_PANEL"] = "ADD_PANEL";
22
13
  GroupChangeKind2["REMOVE_PANEL"] = "REMOVE_PANEL";
23
14
  GroupChangeKind2["PANEL_ACTIVE"] = "PANEL_ACTIVE";
24
- GroupChangeKind2["GROUP_ACTIVE"] = "GROUP_ACTIVE";
25
15
  })(GroupChangeKind2 || (GroupChangeKind2 = {}));
26
16
  export class Groupview extends CompositeDisposable {
27
17
  constructor(container, accessor, id, options, parent) {
@@ -42,15 +32,10 @@ export class Groupview extends CompositeDisposable {
42
32
  this.onMove = this._onMove.event;
43
33
  this._onDidGroupChange = new Emitter();
44
34
  this.onDidGroupChange = this._onDidGroupChange.event;
45
- this.closePanel = (panel) => __awaiter(this, void 0, void 0, function* () {
46
- if (panel.close && !(yield panel.close())) {
47
- return false;
48
- }
49
- this.doClose(panel);
50
- return true;
51
- });
35
+ this._onDidDrop = new Emitter();
36
+ this.onDidDrop = this._onDidDrop.event;
52
37
  this.container.classList.add('groupview');
53
- this.addDisposables(this._onMove, this._onDidGroupChange);
38
+ this.addDisposables(this._onMove, this._onDidGroupChange, this._onDidChange, this._onDidDrop);
54
39
  this.tabsContainer = new TabsContainer(this.accessor, this.parent, {
55
40
  tabHeight: options.tabHeight,
56
41
  });
@@ -72,9 +57,9 @@ export class Groupview extends CompositeDisposable {
72
57
  }), this.contentContainer.onDidFocus(() => {
73
58
  this.accessor.doSetGroupActive(this.parent, true);
74
59
  }), this.contentContainer.onDidBlur(() => {
75
- // this._activePanel?.api._ondid
60
+ // noop
76
61
  }), this.dropTarget.onDrop((event) => {
77
- this.handleDropEvent(event.event, event.position);
62
+ this.handleDropEvent(event.nativeEvent, event.position);
78
63
  }));
79
64
  }
80
65
  get element() {
@@ -207,6 +192,8 @@ export class Groupview extends CompositeDisposable {
207
192
  options.index > this.panels.length) {
208
193
  options.index = this.panels.length;
209
194
  }
195
+ // ensure the group is updated before we fire any events
196
+ panel.updateParentGroup(this.parent, true);
210
197
  if (this._activePanel === panel) {
211
198
  this.accessor.doSetGroupActive(this.parent);
212
199
  return;
@@ -227,43 +214,19 @@ export class Groupview extends CompositeDisposable {
227
214
  return this._removePanel(panelToRemove);
228
215
  }
229
216
  closeAllPanels() {
230
- var _a;
231
- return __awaiter(this, void 0, void 0, function* () {
232
- const index = this._activePanel
233
- ? this.panels.indexOf(this._activePanel)
234
- : -1;
235
- if (this._activePanel && index > -1) {
236
- if (this.panels.indexOf(this._activePanel) < 0) {
237
- console.warn('active panel not tracked');
238
- }
239
- const canClose = !((_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.close) || (yield this._activePanel.close());
240
- if (!canClose) {
241
- return false;
242
- }
243
- }
244
- for (let i = 0; i < this.panels.length; i++) {
245
- if (i === index) {
246
- continue;
247
- }
248
- const panel = this.panels[i];
249
- this.openPanel(panel);
250
- if (panel.close) {
251
- const canClose = yield panel.close();
252
- if (!canClose) {
253
- return false;
254
- }
255
- }
217
+ if (this.panels.length > 0) {
218
+ // take a copy since we will be edting the array as we iterate through
219
+ const arrPanelCpy = [...this.panels];
220
+ for (const panel of arrPanelCpy) {
221
+ this.doClose(panel);
256
222
  }
257
- if (this.panels.length > 0) {
258
- // take a copy since we will be edting the array as we iterate through
259
- const arrPanelCpy = [...this.panels];
260
- yield Promise.all(arrPanelCpy.map((p) => this.doClose(p)));
261
- }
262
- else {
263
- this.accessor.removeGroup(this.parent);
264
- }
265
- return true;
266
- });
223
+ }
224
+ else {
225
+ this.accessor.removeGroup(this.parent);
226
+ }
227
+ }
228
+ closePanel(panel) {
229
+ this.doClose(panel);
267
230
  }
268
231
  doClose(panel) {
269
232
  this.accessor.removePanel(panel);
@@ -406,8 +369,11 @@ export class Groupview extends CompositeDisposable {
406
369
  this.tabsContainer.show();
407
370
  }
408
371
  }
409
- canDisplayOverlay(dragOverEvent, target) {
372
+ canDisplayOverlay(event, target) {
410
373
  // custom overlay handler
374
+ if (this.accessor.options.showDndOverlay) {
375
+ return this.accessor.options.showDndOverlay(event, target);
376
+ }
411
377
  return false;
412
378
  }
413
379
  handleDropEvent(event, position, index) {
@@ -433,7 +399,7 @@ export class Groupview extends CompositeDisposable {
433
399
  });
434
400
  }
435
401
  else {
436
- // custom drop handler
402
+ this._onDidDrop.fire({ nativeEvent: event, position, index });
437
403
  }
438
404
  }
439
405
  dispose() {
@@ -1,8 +1,11 @@
1
1
  import { IFrameworkPart } from '../panel/types';
2
2
  import { IDockviewComponent } from '../dockview/dockviewComponent';
3
3
  import { Groupview, GroupOptions } from './groupview';
4
- import { GridviewPanel } from '../gridview/gridviewPanel';
5
- export declare class GroupviewPanel extends GridviewPanel {
4
+ import { GridviewPanel, IGridviewPanel } from '../gridview/gridviewPanel';
5
+ export interface IGroupviewPanel extends IGridviewPanel {
6
+ model: Groupview;
7
+ }
8
+ export declare class GroupviewPanel extends GridviewPanel implements IGroupviewPanel {
6
9
  private readonly _model;
7
10
  get model(): Groupview;
8
11
  get minimumHeight(): number;
@@ -12,6 +12,7 @@ export class ContentContainer extends CompositeDisposable {
12
12
  this._element = document.createElement('div');
13
13
  this._element.className = 'content-container';
14
14
  this._element.tabIndex = -1;
15
+ this.addDisposables(this._onDidFocus, this._onDidBlur);
15
16
  // for hosted containers
16
17
  // 1) register a drop target on the host
17
18
  // 2) register window dragStart events to disable pointer events
@@ -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
  }