dockview 1.5.2 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/dist/cjs/api/component.api.d.ts +3 -2
  2. package/dist/cjs/api/component.api.js +9 -2
  3. package/dist/cjs/api/component.api.js.map +1 -1
  4. package/dist/cjs/api/{groupPanelApi.d.ts → dockviewPanelApi.d.ts} +2 -2
  5. package/dist/cjs/api/{groupPanelApi.js → dockviewPanelApi.js} +4 -6
  6. package/dist/cjs/api/dockviewPanelApi.js.map +1 -0
  7. package/dist/cjs/api/gridviewPanelApi.d.ts +4 -3
  8. package/dist/cjs/api/gridviewPanelApi.js +4 -4
  9. package/dist/cjs/api/gridviewPanelApi.js.map +1 -1
  10. package/dist/cjs/api/panelApi.d.ts +7 -0
  11. package/dist/cjs/api/panelApi.js +17 -1
  12. package/dist/cjs/api/panelApi.js.map +1 -1
  13. package/dist/cjs/array.d.ts +1 -1
  14. package/dist/cjs/dnd/abstractDragHandler.d.ts +2 -2
  15. package/dist/cjs/dnd/abstractDragHandler.js +3 -3
  16. package/dist/cjs/dnd/abstractDragHandler.js.map +1 -1
  17. package/dist/cjs/dnd/dataTransfer.d.ts +2 -2
  18. package/dist/cjs/dnd/dataTransfer.js.map +1 -1
  19. package/dist/cjs/dnd/dnd.d.ts +1 -1
  20. package/dist/cjs/dnd/dnd.js +7 -12
  21. package/dist/cjs/dnd/dnd.js.map +1 -1
  22. package/dist/cjs/dnd/droptarget.d.ts +20 -15
  23. package/dist/cjs/dnd/droptarget.js +152 -74
  24. package/dist/cjs/dnd/droptarget.js.map +1 -1
  25. package/dist/cjs/dnd/ghost.d.ts +1 -0
  26. package/dist/cjs/dnd/ghost.js +15 -0
  27. package/dist/cjs/dnd/ghost.js.map +1 -0
  28. package/dist/cjs/dnd/groupDragHandler.d.ts +11 -0
  29. package/dist/cjs/dnd/groupDragHandler.js +62 -0
  30. package/dist/cjs/dnd/groupDragHandler.js.map +1 -0
  31. package/dist/cjs/dockview/defaultGroupPanelView.d.ts +1 -1
  32. package/dist/cjs/dockview/deserializer.d.ts +2 -1
  33. package/dist/cjs/dockview/dockviewComponent.d.ts +15 -7
  34. package/dist/cjs/dockview/dockviewComponent.js +215 -34
  35. package/dist/cjs/dockview/dockviewComponent.js.map +1 -1
  36. package/dist/{esm/dockview/dockviewGroupPanel.d.ts → cjs/dockview/dockviewPanel.d.ts} +16 -5
  37. package/dist/cjs/dockview/{dockviewGroupPanel.js → dockviewPanel.js} +25 -21
  38. package/dist/cjs/dockview/dockviewPanel.js.map +1 -0
  39. package/dist/cjs/dockview/options.d.ts +32 -10
  40. package/dist/cjs/dockview/options.js +29 -0
  41. package/dist/cjs/dockview/options.js.map +1 -1
  42. package/dist/cjs/dockview/validation.d.ts +2 -0
  43. package/dist/cjs/dockview/validation.js +135 -0
  44. package/dist/cjs/dockview/validation.js.map +1 -0
  45. package/dist/cjs/gridview/baseComponentGridview.d.ts +1 -1
  46. package/dist/cjs/gridview/baseComponentGridview.js +5 -6
  47. package/dist/cjs/gridview/baseComponentGridview.js.map +1 -1
  48. package/dist/cjs/gridview/basePanelView.d.ts +2 -2
  49. package/dist/cjs/gridview/gridview.d.ts +9 -3
  50. package/dist/cjs/gridview/gridview.js +38 -7
  51. package/dist/cjs/gridview/gridview.js.map +1 -1
  52. package/dist/cjs/gridview/gridviewComponent.d.ts +2 -2
  53. package/dist/cjs/gridview/gridviewComponent.js +2 -3
  54. package/dist/cjs/gridview/gridviewComponent.js.map +1 -1
  55. package/dist/cjs/gridview/gridviewPanel.d.ts +3 -3
  56. package/dist/cjs/gridview/gridviewPanel.js +1 -2
  57. package/dist/cjs/gridview/gridviewPanel.js.map +1 -1
  58. package/dist/cjs/gridview/types.d.ts +1 -1
  59. package/dist/cjs/groupview/dnd.d.ts +2 -1
  60. package/dist/cjs/groupview/dnd.js +1 -0
  61. package/dist/cjs/groupview/dnd.js.map +1 -1
  62. package/dist/cjs/groupview/groupview.d.ts +6 -6
  63. package/dist/cjs/groupview/groupview.js +43 -25
  64. package/dist/cjs/groupview/groupview.js.map +1 -1
  65. package/dist/cjs/groupview/groupviewPanel.d.ts +3 -3
  66. package/dist/cjs/groupview/panel/content.d.ts +1 -1
  67. package/dist/cjs/groupview/tab.d.ts +2 -12
  68. package/dist/cjs/groupview/tab.js +13 -9
  69. package/dist/cjs/groupview/tab.js.map +1 -1
  70. package/dist/cjs/groupview/titlebar/tabsContainer.d.ts +5 -8
  71. package/dist/cjs/groupview/titlebar/tabsContainer.js +23 -30
  72. package/dist/cjs/groupview/titlebar/tabsContainer.js.map +1 -1
  73. package/dist/cjs/groupview/titlebar/voidContainer.d.ts +15 -0
  74. package/dist/cjs/groupview/titlebar/voidContainer.js +74 -0
  75. package/dist/cjs/groupview/titlebar/voidContainer.js.map +1 -0
  76. package/dist/cjs/groupview/types.d.ts +18 -2
  77. package/dist/cjs/index.d.ts +3 -3
  78. package/dist/cjs/index.js +4 -3
  79. package/dist/cjs/index.js.map +1 -1
  80. package/dist/cjs/paneview/draggablePaneviewPanel.js +6 -5
  81. package/dist/cjs/paneview/draggablePaneviewPanel.js.map +1 -1
  82. package/dist/cjs/paneview/paneviewComponent.js +2 -2
  83. package/dist/cjs/paneview/paneviewComponent.js.map +1 -1
  84. package/dist/cjs/paneview/paneviewPanel.js +1 -0
  85. package/dist/cjs/paneview/paneviewPanel.js.map +1 -1
  86. package/dist/cjs/react/deserializer.d.ts +2 -1
  87. package/dist/cjs/react/deserializer.js +2 -2
  88. package/dist/cjs/react/deserializer.js.map +1 -1
  89. package/dist/cjs/react/dockview/defaultTab.d.ts +1 -1
  90. package/dist/cjs/react/dockview/dockview.d.ts +5 -4
  91. package/dist/cjs/react/dockview/dockview.js +1 -0
  92. package/dist/cjs/react/dockview/dockview.js.map +1 -1
  93. package/dist/cjs/react/dockview/groupControlsRenderer.d.ts +1 -1
  94. package/dist/cjs/react/gridview/view.js +2 -1
  95. package/dist/cjs/react/gridview/view.js.map +1 -1
  96. package/dist/cjs/react/react.d.ts +1 -1
  97. package/dist/cjs/splitview/core/splitview.d.ts +4 -4
  98. package/dist/cjs/splitview/splitviewComponent.d.ts +1 -1
  99. package/dist/cjs/splitview/splitviewComponent.js +2 -2
  100. package/dist/cjs/splitview/splitviewComponent.js.map +1 -1
  101. package/dist/cjs/splitview/splitviewPanel.js +1 -0
  102. package/dist/cjs/splitview/splitviewPanel.js.map +1 -1
  103. package/dist/cjs/types.d.ts +2 -1
  104. package/dist/cjs/types.js +5 -0
  105. package/dist/cjs/types.js.map +1 -1
  106. package/dist/dockview.amd.js +1411 -987
  107. package/dist/dockview.amd.min.js +2 -2
  108. package/dist/dockview.amd.min.noStyle.js +2 -2
  109. package/dist/dockview.amd.noStyle.js +1410 -986
  110. package/dist/dockview.cjs.js +1394 -970
  111. package/dist/dockview.esm.js +1385 -964
  112. package/dist/dockview.esm.min.js +2 -2
  113. package/dist/dockview.js +1411 -987
  114. package/dist/dockview.min.js +2 -2
  115. package/dist/dockview.min.noStyle.js +2 -2
  116. package/dist/dockview.noStyle.js +1410 -986
  117. package/dist/esm/actionbar/actionsContainer.js +3 -3
  118. package/dist/esm/api/component.api.d.ts +3 -2
  119. package/dist/esm/api/component.api.js +16 -13
  120. package/dist/esm/api/{groupPanelApi.d.ts → dockviewPanelApi.d.ts} +2 -2
  121. package/dist/esm/api/{groupPanelApi.js → dockviewPanelApi.js} +16 -18
  122. package/dist/esm/api/gridviewPanelApi.d.ts +4 -3
  123. package/dist/esm/api/gridviewPanelApi.js +4 -4
  124. package/dist/esm/api/panelApi.d.ts +7 -0
  125. package/dist/esm/api/panelApi.js +33 -17
  126. package/dist/esm/api/paneviewPanelApi.js +3 -3
  127. package/dist/esm/array.d.ts +1 -1
  128. package/dist/esm/dnd/abstractDragHandler.d.ts +2 -2
  129. package/dist/esm/dnd/abstractDragHandler.js +3 -3
  130. package/dist/esm/dnd/dataTransfer.d.ts +2 -2
  131. package/dist/esm/dnd/dnd.d.ts +1 -1
  132. package/dist/esm/dnd/dnd.js +7 -12
  133. package/dist/esm/dnd/droptarget.d.ts +20 -15
  134. package/dist/esm/dnd/droptarget.js +149 -67
  135. package/dist/esm/dnd/ghost.d.ts +1 -0
  136. package/dist/esm/dnd/ghost.js +10 -0
  137. package/dist/esm/dnd/groupDragHandler.d.ts +11 -0
  138. package/dist/esm/dnd/groupDragHandler.js +38 -0
  139. package/dist/esm/dockview/components/tab/defaultTab.js +6 -6
  140. package/dist/esm/dockview/components/watermark/watermark.js +3 -3
  141. package/dist/esm/dockview/defaultGroupPanelView.d.ts +1 -1
  142. package/dist/esm/dockview/defaultGroupPanelView.js +5 -5
  143. package/dist/esm/dockview/deserializer.d.ts +2 -1
  144. package/dist/esm/dockview/dockviewComponent.d.ts +15 -7
  145. package/dist/esm/dockview/dockviewComponent.js +229 -65
  146. package/dist/{cjs/dockview/dockviewGroupPanel.d.ts → esm/dockview/dockviewPanel.d.ts} +16 -5
  147. package/dist/esm/dockview/{dockviewGroupPanel.js → dockviewPanel.js} +19 -15
  148. package/dist/esm/dockview/options.d.ts +32 -10
  149. package/dist/esm/dockview/options.js +24 -1
  150. package/dist/esm/dockview/validation.d.ts +2 -0
  151. package/dist/esm/dockview/validation.js +86 -0
  152. package/dist/esm/gridview/baseComponentGridview.d.ts +1 -1
  153. package/dist/esm/gridview/baseComponentGridview.js +31 -32
  154. package/dist/esm/gridview/basePanelView.d.ts +2 -2
  155. package/dist/esm/gridview/basePanelView.js +13 -13
  156. package/dist/esm/gridview/branchNode.js +47 -47
  157. package/dist/esm/gridview/gridview.d.ts +9 -3
  158. package/dist/esm/gridview/gridview.js +41 -15
  159. package/dist/esm/gridview/gridviewComponent.d.ts +2 -2
  160. package/dist/esm/gridview/gridviewComponent.js +17 -18
  161. package/dist/esm/gridview/gridviewPanel.d.ts +3 -3
  162. package/dist/esm/gridview/gridviewPanel.js +45 -45
  163. package/dist/esm/gridview/leafNode.js +23 -23
  164. package/dist/esm/gridview/types.d.ts +1 -1
  165. package/dist/esm/groupview/dnd.d.ts +2 -1
  166. package/dist/esm/groupview/dnd.js +1 -0
  167. package/dist/esm/groupview/groupview.d.ts +6 -6
  168. package/dist/esm/groupview/groupview.js +90 -72
  169. package/dist/esm/groupview/groupviewPanel.d.ts +3 -3
  170. package/dist/esm/groupview/groupviewPanel.js +4 -4
  171. package/dist/esm/groupview/panel/content.d.ts +1 -1
  172. package/dist/esm/groupview/panel/content.js +3 -3
  173. package/dist/esm/groupview/tab.d.ts +2 -12
  174. package/dist/esm/groupview/tab.js +15 -11
  175. package/dist/esm/groupview/titlebar/tabsContainer.d.ts +5 -8
  176. package/dist/esm/groupview/titlebar/tabsContainer.js +54 -61
  177. package/dist/esm/groupview/titlebar/voidContainer.d.ts +15 -0
  178. package/dist/esm/groupview/titlebar/voidContainer.js +47 -0
  179. package/dist/esm/groupview/types.d.ts +18 -2
  180. package/dist/esm/hostedContainer.js +3 -3
  181. package/dist/esm/index.d.ts +3 -3
  182. package/dist/esm/index.js +2 -2
  183. package/dist/esm/lifecycle.js +3 -3
  184. package/dist/esm/paneview/defaultPaneviewHeader.js +3 -3
  185. package/dist/esm/paneview/draggablePaneviewPanel.js +7 -6
  186. package/dist/esm/paneview/paneview.js +21 -21
  187. package/dist/esm/paneview/paneviewComponent.js +30 -30
  188. package/dist/esm/paneview/paneviewPanel.js +45 -44
  189. package/dist/esm/react/deserializer.d.ts +2 -1
  190. package/dist/esm/react/deserializer.js +2 -2
  191. package/dist/esm/react/dockview/defaultTab.d.ts +1 -1
  192. package/dist/esm/react/dockview/dockview.d.ts +5 -4
  193. package/dist/esm/react/dockview/dockview.js +1 -0
  194. package/dist/esm/react/dockview/groupControlsRenderer.d.ts +1 -1
  195. package/dist/esm/react/dockview/groupControlsRenderer.js +8 -8
  196. package/dist/esm/react/dockview/reactContentPart.js +3 -3
  197. package/dist/esm/react/dockview/reactHeaderPart.js +3 -3
  198. package/dist/esm/react/dockview/reactWatermarkPart.js +3 -3
  199. package/dist/esm/react/dockview/v2/reactContentRenderer.js +9 -9
  200. package/dist/esm/react/dockview/v2/webviewContentRenderer.js +3 -3
  201. package/dist/esm/react/gridview/view.js +2 -1
  202. package/dist/esm/react/paneview/view.js +3 -3
  203. package/dist/esm/react/react.d.ts +1 -1
  204. package/dist/esm/splitview/core/splitview.d.ts +4 -4
  205. package/dist/esm/splitview/core/splitview.js +59 -59
  206. package/dist/esm/splitview/core/viewItem.js +15 -15
  207. package/dist/esm/splitview/splitviewComponent.d.ts +1 -1
  208. package/dist/esm/splitview/splitviewComponent.js +23 -23
  209. package/dist/esm/splitview/splitviewPanel.js +31 -30
  210. package/dist/esm/types.d.ts +2 -1
  211. package/dist/esm/types.js +3 -1
  212. package/dist/styles/dockview.css +23 -26
  213. package/package.json +12 -16
  214. package/dist/cjs/api/groupPanelApi.js.map +0 -1
  215. package/dist/cjs/dockview/dockviewGroupPanel.js.map +0 -1
  216. package/dist/cjs/groupview/groupPanel.d.ts +0 -32
  217. package/dist/cjs/groupview/groupPanel.js +0 -3
  218. package/dist/cjs/groupview/groupPanel.js.map +0 -1
  219. package/dist/esm/groupview/groupPanel.d.ts +0 -32
  220. package/dist/esm/groupview/groupPanel.js +0 -1
@@ -1,51 +1,6 @@
1
1
  import { BasePanelView, } from './basePanelView';
2
- import { GridviewPanelApiImpl } from '../api/gridviewPanelApi';
3
2
  import { Emitter } from '../events';
4
3
  export class GridviewPanel extends BasePanelView {
5
- constructor(id, component, api = new GridviewPanelApiImpl(id)) {
6
- super(id, component, api);
7
- this._evaluatedMinimumWidth = 0;
8
- this._evaluatedMaximumWidth = Number.MAX_SAFE_INTEGER;
9
- this._evaluatedMinimumHeight = 0;
10
- this._evaluatedMaximumHeight = Number.MAX_SAFE_INTEGER;
11
- this._minimumWidth = 0;
12
- this._minimumHeight = 0;
13
- this._maximumWidth = Number.MAX_SAFE_INTEGER;
14
- this._maximumHeight = Number.MAX_SAFE_INTEGER;
15
- this._snap = false;
16
- this._onDidChange = new Emitter();
17
- this.onDidChange = this._onDidChange.event;
18
- this.addDisposables(this._onDidChange, this.api.onVisibilityChange((event) => {
19
- const { isVisible } = event;
20
- const { accessor } = this._params;
21
- accessor.setVisible(this, isVisible);
22
- }), this.api.onActiveChange(() => {
23
- const { accessor } = this._params;
24
- accessor.setActive(this);
25
- }), this.api.onDidConstraintsChangeInternal((event) => {
26
- if (typeof event.minimumWidth === 'number' ||
27
- typeof event.minimumWidth === 'function') {
28
- this._minimumWidth = event.minimumWidth;
29
- }
30
- if (typeof event.minimumHeight === 'number' ||
31
- typeof event.minimumHeight === 'function') {
32
- this._minimumHeight = event.minimumHeight;
33
- }
34
- if (typeof event.maximumWidth === 'number' ||
35
- typeof event.maximumWidth === 'function') {
36
- this._maximumWidth = event.maximumWidth;
37
- }
38
- if (typeof event.maximumHeight === 'number' ||
39
- typeof event.maximumHeight === 'function') {
40
- this._maximumHeight = event.maximumHeight;
41
- }
42
- }), this.api.onDidSizeChange((event) => {
43
- this._onDidChange.fire({
44
- height: event.height,
45
- width: event.width,
46
- });
47
- }));
48
- }
49
4
  get priority() {
50
5
  return this._priority;
51
6
  }
@@ -95,6 +50,51 @@ export class GridviewPanel extends BasePanelView {
95
50
  get isActive() {
96
51
  return this.api.isActive;
97
52
  }
53
+ constructor(id, component, api) {
54
+ super(id, component, api);
55
+ this._evaluatedMinimumWidth = 0;
56
+ this._evaluatedMaximumWidth = Number.MAX_SAFE_INTEGER;
57
+ this._evaluatedMinimumHeight = 0;
58
+ this._evaluatedMaximumHeight = Number.MAX_SAFE_INTEGER;
59
+ this._minimumWidth = 0;
60
+ this._minimumHeight = 0;
61
+ this._maximumWidth = Number.MAX_SAFE_INTEGER;
62
+ this._maximumHeight = Number.MAX_SAFE_INTEGER;
63
+ this._snap = false;
64
+ this._onDidChange = new Emitter();
65
+ this.onDidChange = this._onDidChange.event;
66
+ this.api.initialize(this); // TODO: required to by-pass 'super before this' requirement
67
+ this.addDisposables(this._onDidChange, this.api.onVisibilityChange((event) => {
68
+ const { isVisible } = event;
69
+ const { accessor } = this._params;
70
+ accessor.setVisible(this, isVisible);
71
+ }), this.api.onActiveChange(() => {
72
+ const { accessor } = this._params;
73
+ accessor.setActive(this);
74
+ }), this.api.onDidConstraintsChangeInternal((event) => {
75
+ if (typeof event.minimumWidth === 'number' ||
76
+ typeof event.minimumWidth === 'function') {
77
+ this._minimumWidth = event.minimumWidth;
78
+ }
79
+ if (typeof event.minimumHeight === 'number' ||
80
+ typeof event.minimumHeight === 'function') {
81
+ this._minimumHeight = event.minimumHeight;
82
+ }
83
+ if (typeof event.maximumWidth === 'number' ||
84
+ typeof event.maximumWidth === 'function') {
85
+ this._maximumWidth = event.maximumWidth;
86
+ }
87
+ if (typeof event.maximumHeight === 'number' ||
88
+ typeof event.maximumHeight === 'function') {
89
+ this._maximumHeight = event.maximumHeight;
90
+ }
91
+ }), this.api.onDidSizeChange((event) => {
92
+ this._onDidChange.fire({
93
+ height: event.height,
94
+ width: event.width,
95
+ });
96
+ }));
97
+ }
98
98
  setVisible(isVisible) {
99
99
  this.api._onDidVisibilityChange.fire({ isVisible });
100
100
  }
@@ -5,29 +5,6 @@
5
5
  import { Orientation, } from '../splitview/core/splitview';
6
6
  import { Emitter } from '../events';
7
7
  export class LeafNode {
8
- constructor(view, orientation, orthogonalSize, size = 0) {
9
- this.view = view;
10
- this.orientation = orientation;
11
- this._onDidChange = new Emitter();
12
- this.onDidChange = this._onDidChange.event;
13
- this._orthogonalSize = orthogonalSize;
14
- this._size = size;
15
- this._disposable = this.view.onDidChange((event) => {
16
- if (event) {
17
- this._onDidChange.fire({
18
- size: this.orientation === Orientation.VERTICAL
19
- ? event.width
20
- : event.height,
21
- orthogonalSize: this.orientation === Orientation.VERTICAL
22
- ? event.height
23
- : event.width,
24
- });
25
- }
26
- else {
27
- this._onDidChange.fire({});
28
- }
29
- });
30
- }
31
8
  get minimumWidth() {
32
9
  return this.view.minimumWidth;
33
10
  }
@@ -85,6 +62,29 @@ export class LeafNode {
85
62
  ? this.size
86
63
  : this.orthogonalSize;
87
64
  }
65
+ constructor(view, orientation, orthogonalSize, size = 0) {
66
+ this.view = view;
67
+ this.orientation = orientation;
68
+ this._onDidChange = new Emitter();
69
+ this.onDidChange = this._onDidChange.event;
70
+ this._orthogonalSize = orthogonalSize;
71
+ this._size = size;
72
+ this._disposable = this.view.onDidChange((event) => {
73
+ if (event) {
74
+ this._onDidChange.fire({
75
+ size: this.orientation === Orientation.VERTICAL
76
+ ? event.width
77
+ : event.height,
78
+ orthogonalSize: this.orientation === Orientation.VERTICAL
79
+ ? event.height
80
+ : event.width,
81
+ });
82
+ }
83
+ else {
84
+ this._onDidChange.fire({});
85
+ }
86
+ });
87
+ }
88
88
  setVisible(visible) {
89
89
  if (this.view.setVisible) {
90
90
  this.view.setVisible(visible);
@@ -1,3 +1,3 @@
1
1
  import { BranchNode } from './branchNode';
2
2
  import { LeafNode } from './leafNode';
3
- export declare type Node = BranchNode | LeafNode;
3
+ export type Node = BranchNode | LeafNode;
@@ -1,5 +1,6 @@
1
1
  export declare enum DockviewDropTargets {
2
2
  Tab = 0,
3
3
  Panel = 1,
4
- TabContainer = 2
4
+ TabContainer = 2,
5
+ Edge = 3
5
6
  }
@@ -3,4 +3,5 @@ export var DockviewDropTargets;
3
3
  DockviewDropTargets[DockviewDropTargets["Tab"] = 0] = "Tab";
4
4
  DockviewDropTargets[DockviewDropTargets["Panel"] = 1] = "Panel";
5
5
  DockviewDropTargets[DockviewDropTargets["TabContainer"] = 2] = "TabContainer";
6
+ DockviewDropTargets[DockviewDropTargets["Edge"] = 3] = "Edge";
6
7
  })(DockviewDropTargets || (DockviewDropTargets = {}));
@@ -6,9 +6,9 @@ import { IGridPanelView } from '../gridview/baseComponentGridview';
6
6
  import { IViewSize } from '../gridview/gridview';
7
7
  import { CompositeDisposable, IDisposable } from '../lifecycle';
8
8
  import { PanelInitParameters, PanelUpdateEvent } from '../panel/types';
9
- import { IDockviewPanel } from './groupPanel';
10
9
  import { GroupPanel } from './groupviewPanel';
11
10
  import { DockviewDropTargets } from './dnd';
11
+ import { IDockviewPanel } from '../dockview/dockviewPanel';
12
12
  export interface DndService {
13
13
  canDisplayOverlay(group: IGroupview, event: DragEvent, target: DockviewDropTargets): boolean;
14
14
  onDrop(group: IGroupview, event: DragEvent, position: Position, index?: number): void;
@@ -24,7 +24,7 @@ export interface IGroupItem {
24
24
  }
25
25
  interface GroupMoveEvent {
26
26
  groupId: string;
27
- itemId: string;
27
+ itemId?: string;
28
28
  target: Position;
29
29
  index?: number;
30
30
  }
@@ -87,14 +87,14 @@ export interface IGroupview extends IDisposable, IGridPanelView {
87
87
  panel?: IDockviewPanel;
88
88
  suppressRoll?: boolean;
89
89
  }): void;
90
- canDisplayOverlay(event: DragEvent, target: DockviewDropTargets): boolean;
90
+ canDisplayOverlay(event: DragEvent, position: Position, target: DockviewDropTargets): boolean;
91
91
  }
92
92
  export declare class Groupview extends CompositeDisposable implements IGroupview {
93
93
  private readonly container;
94
94
  private accessor;
95
95
  id: string;
96
96
  private readonly options;
97
- private readonly parent;
97
+ private readonly groupPanel;
98
98
  private readonly tabsContainer;
99
99
  private readonly contentContainer;
100
100
  private readonly dropTarget;
@@ -134,7 +134,7 @@ export declare class Groupview extends CompositeDisposable implements IGroupview
134
134
  get hasWatermark(): boolean;
135
135
  get header(): IHeader;
136
136
  get isContentFocused(): boolean;
137
- constructor(container: HTMLElement, accessor: DockviewComponent, id: string, options: GroupOptions, parent: GroupPanel);
137
+ constructor(container: HTMLElement, accessor: DockviewComponent, id: string, options: GroupOptions, groupPanel: GroupPanel);
138
138
  initialize(): void;
139
139
  indexOf(panel: IDockviewPanel): number;
140
140
  toJSON(): GroupPanelViewState;
@@ -170,7 +170,7 @@ export declare class Groupview extends CompositeDisposable implements IGroupview
170
170
  private doSetActivePanel;
171
171
  private updateMru;
172
172
  private updateContainer;
173
- canDisplayOverlay(event: DragEvent, target: DockviewDropTargets): boolean;
173
+ canDisplayOverlay(event: DragEvent, position: Position, target: DockviewDropTargets): boolean;
174
174
  private handleDropEvent;
175
175
  dispose(): void;
176
176
  }
@@ -1,6 +1,6 @@
1
1
  import { DockviewApi } from '../api/component.api';
2
2
  import { getPanelData } from '../dnd/dataTransfer';
3
- import { Droptarget, Position } from '../dnd/droptarget';
3
+ import { Droptarget } from '../dnd/droptarget';
4
4
  import { isAncestor, toggleClass } from '../dom';
5
5
  import { addDisposableListener, Emitter } from '../events';
6
6
  import { CompositeDisposable } from '../lifecycle';
@@ -8,63 +8,6 @@ import { ContentContainer } from './panel/content';
8
8
  import { TabsContainer } from './titlebar/tabsContainer';
9
9
  import { DockviewDropTargets } from './dnd';
10
10
  export class Groupview extends CompositeDisposable {
11
- constructor(container, accessor, id, options, parent) {
12
- super();
13
- this.container = container;
14
- this.accessor = accessor;
15
- this.id = id;
16
- this.options = options;
17
- this.parent = parent;
18
- this._isGroupActive = false;
19
- this._locked = false;
20
- this.mostRecentlyUsed = [];
21
- this._onDidChange = new Emitter();
22
- this.onDidChange = this._onDidChange.event;
23
- this._width = 0;
24
- this._height = 0;
25
- this._panels = [];
26
- this._onMove = new Emitter();
27
- this.onMove = this._onMove.event;
28
- this._onDidDrop = new Emitter();
29
- this.onDidDrop = this._onDidDrop.event;
30
- this._onDidAddPanel = new Emitter();
31
- this.onDidAddPanel = this._onDidAddPanel.event;
32
- this._onDidRemovePanel = new Emitter();
33
- this.onDidRemovePanel = this._onDidRemovePanel.event;
34
- this._onDidActivePanelChange = new Emitter();
35
- this.onDidActivePanelChange = this._onDidActivePanelChange.event;
36
- this.container.classList.add('groupview');
37
- this.tabsContainer = new TabsContainer(this.accessor, this.parent, {
38
- tabHeight: options.tabHeight,
39
- });
40
- this.contentContainer = new ContentContainer();
41
- this.dropTarget = new Droptarget(this.contentContainer.element, {
42
- validOverlays: 'all',
43
- canDisplayOverlay: (event, quadrant) => {
44
- if (this.locked && !quadrant) {
45
- return false;
46
- }
47
- const data = getPanelData();
48
- if (data && data.viewId === this.accessor.id) {
49
- const groupHasOnePanelAndIsActiveDragElement = this._panels.length === 1 && data.groupId === this.id;
50
- return !groupHasOnePanelAndIsActiveDragElement;
51
- }
52
- return this.canDisplayOverlay(event, DockviewDropTargets.Panel);
53
- },
54
- });
55
- container.append(this.tabsContainer.element, this.contentContainer.element);
56
- this.header.hidden = !!options.hideHeader;
57
- this.locked = !!options.locked;
58
- this.addDisposables(this._onMove, this._onDidChange, this._onDidDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange, this.tabsContainer.onDrop((event) => {
59
- this.handleDropEvent(event.event, Position.Center, event.index);
60
- }), this.contentContainer.onDidFocus(() => {
61
- this.accessor.doSetGroupActive(this.parent, true);
62
- }), this.contentContainer.onDidBlur(() => {
63
- // noop
64
- }), this.dropTarget.onDrop((event) => {
65
- this.handleDropEvent(event.nativeEvent, event.position);
66
- }));
67
- }
68
11
  get element() {
69
12
  throw new Error('not supported');
70
13
  }
@@ -76,6 +19,7 @@ export class Groupview extends CompositeDisposable {
76
19
  }
77
20
  set locked(value) {
78
21
  this._locked = value;
22
+ toggleClass(this.container, 'locked-groupview', value);
79
23
  }
80
24
  get isActive() {
81
25
  return this._isGroupActive;
@@ -113,6 +57,71 @@ export class Groupview extends CompositeDisposable {
113
57
  }
114
58
  return isAncestor(document.activeElement, this.contentContainer.element);
115
59
  }
60
+ constructor(container, accessor, id, options, groupPanel) {
61
+ super();
62
+ this.container = container;
63
+ this.accessor = accessor;
64
+ this.id = id;
65
+ this.options = options;
66
+ this.groupPanel = groupPanel;
67
+ this._isGroupActive = false;
68
+ this._locked = false;
69
+ this.mostRecentlyUsed = [];
70
+ this._onDidChange = new Emitter();
71
+ this.onDidChange = this._onDidChange.event;
72
+ this._width = 0;
73
+ this._height = 0;
74
+ this._panels = [];
75
+ this._onMove = new Emitter();
76
+ this.onMove = this._onMove.event;
77
+ this._onDidDrop = new Emitter();
78
+ this.onDidDrop = this._onDidDrop.event;
79
+ this._onDidAddPanel = new Emitter();
80
+ this.onDidAddPanel = this._onDidAddPanel.event;
81
+ this._onDidRemovePanel = new Emitter();
82
+ this.onDidRemovePanel = this._onDidRemovePanel.event;
83
+ this._onDidActivePanelChange = new Emitter();
84
+ this.onDidActivePanelChange = this._onDidActivePanelChange.event;
85
+ this.container.classList.add('groupview');
86
+ this.tabsContainer = new TabsContainer(this.accessor, this.groupPanel);
87
+ this.contentContainer = new ContentContainer();
88
+ this.dropTarget = new Droptarget(this.contentContainer.element, {
89
+ acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
90
+ canDisplayOverlay: (event, position) => {
91
+ if (this.locked && position === 'center') {
92
+ return false;
93
+ }
94
+ const data = getPanelData();
95
+ if (data && data.viewId === this.accessor.id) {
96
+ if (data.groupId === this.id) {
97
+ if (position === 'center') {
98
+ // don't allow to drop on self for center position
99
+ return false;
100
+ }
101
+ if (data.panelId === null) {
102
+ // don't allow group move to drop anywhere on self
103
+ return false;
104
+ }
105
+ }
106
+ const groupHasOnePanelAndIsActiveDragElement = this._panels.length === 1 && data.groupId === this.id;
107
+ return !groupHasOnePanelAndIsActiveDragElement;
108
+ }
109
+ return this.canDisplayOverlay(event, position, DockviewDropTargets.Panel);
110
+ },
111
+ });
112
+ container.append(this.tabsContainer.element, this.contentContainer.element);
113
+ this.header.hidden = !!options.hideHeader;
114
+ this.locked = !!options.locked;
115
+ this.addDisposables(this._onMove, this._onDidChange, this._onDidDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange, this.tabsContainer.onDrop((event) => {
116
+ this.handleDropEvent(event.event, 'center', event.index);
117
+ }), this.contentContainer.onDidFocus(() => {
118
+ this.accessor.doSetGroupActive(this.groupPanel, true);
119
+ }), this.contentContainer.onDidBlur(() => {
120
+ // noop
121
+ }), this.dropTarget.onDrop((event) => {
122
+ this.handleDropEvent(event.nativeEvent, event.position);
123
+ }));
124
+ }
116
125
  initialize() {
117
126
  var _a, _b;
118
127
  if ((_a = this.options) === null || _a === void 0 ? void 0 : _a.panels) {
@@ -128,11 +137,11 @@ export class Groupview extends CompositeDisposable {
128
137
  this.setActive(this.isActive, true, true);
129
138
  this.updateContainer();
130
139
  if (this.accessor.options.createGroupControlElement) {
131
- this._control = this.accessor.options.createGroupControlElement(this.parent);
140
+ this._control = this.accessor.options.createGroupControlElement(this.groupPanel);
132
141
  this.addDisposables(this._control);
133
142
  this._control.init({
134
143
  containerApi: new DockviewApi(this.accessor),
135
- api: this.parent.api,
144
+ api: this.groupPanel.api,
136
145
  });
137
146
  this.tabsContainer.setActionElement(this._control.element);
138
147
  }
@@ -219,10 +228,10 @@ export class Groupview extends CompositeDisposable {
219
228
  const skipSetPanelActive = !!options.skipSetPanelActive;
220
229
  const skipSetGroupActive = !!options.skipSetGroupActive;
221
230
  // ensure the group is updated before we fire any events
222
- panel.updateParentGroup(this.parent, true);
231
+ panel.updateParentGroup(this.groupPanel, true);
223
232
  if (this._activePanel === panel) {
224
233
  if (!skipSetGroupActive) {
225
- this.accessor.doSetGroupActive(this.parent);
234
+ this.accessor.doSetGroupActive(this.groupPanel);
226
235
  }
227
236
  return;
228
237
  }
@@ -231,7 +240,7 @@ export class Groupview extends CompositeDisposable {
231
240
  this.doSetActivePanel(panel);
232
241
  }
233
242
  if (!skipSetGroupActive) {
234
- this.accessor.doSetGroupActive(this.parent, !!options.skipFocus);
243
+ this.accessor.doSetGroupActive(this.groupPanel, !!options.skipFocus);
235
244
  }
236
245
  this.updateContainer();
237
246
  }
@@ -254,7 +263,7 @@ export class Groupview extends CompositeDisposable {
254
263
  }
255
264
  }
256
265
  else {
257
- this.accessor.removeGroup(this.parent);
266
+ this.accessor.removeGroup(this.groupPanel);
258
267
  }
259
268
  }
260
269
  closePanel(panel) {
@@ -359,7 +368,7 @@ export class Groupview extends CompositeDisposable {
359
368
  }
360
369
  updateContainer() {
361
370
  toggleClass(this.container, 'empty', this.isEmpty);
362
- this.panels.forEach((panel) => panel.updateParentGroup(this.parent, this.isActive));
371
+ this.panels.forEach((panel) => panel.updateParentGroup(this.groupPanel, this.isActive));
363
372
  if (this.isEmpty && !this.watermark) {
364
373
  const watermark = this.accessor.createWatermarkComponent();
365
374
  watermark.init({
@@ -371,29 +380,28 @@ export class Groupview extends CompositeDisposable {
371
380
  this.watermark = watermark;
372
381
  addDisposableListener(this.watermark.element, 'click', () => {
373
382
  if (!this.isActive) {
374
- this.accessor.doSetGroupActive(this.parent);
383
+ this.accessor.doSetGroupActive(this.groupPanel);
375
384
  }
376
385
  });
377
- this.contentContainer.hide();
378
386
  this.tabsContainer.hide();
379
- this.container.appendChild(this.watermark.element);
380
- this.watermark.updateParentGroup(this.parent, true);
387
+ this.contentContainer.element.appendChild(this.watermark.element);
388
+ this.watermark.updateParentGroup(this.groupPanel, true);
381
389
  }
382
390
  if (!this.isEmpty && this.watermark) {
383
391
  this.watermark.element.remove();
384
392
  this.watermark.dispose();
385
393
  this.watermark = undefined;
386
- this.contentContainer.show();
387
394
  this.tabsContainer.show();
388
395
  }
389
396
  }
390
- canDisplayOverlay(event, target) {
397
+ canDisplayOverlay(event, position, target) {
391
398
  // custom overlay handler
392
399
  if (this.accessor.options.showDndOverlay) {
393
400
  return this.accessor.options.showDndOverlay({
394
401
  nativeEvent: event,
395
402
  target,
396
403
  group: this.accessor.getPanel(this.id),
404
+ position,
397
405
  getData: getPanelData,
398
406
  });
399
407
  }
@@ -401,7 +409,17 @@ export class Groupview extends CompositeDisposable {
401
409
  }
402
410
  handleDropEvent(event, position, index) {
403
411
  const data = getPanelData();
404
- if (data) {
412
+ if (data && data.viewId === this.accessor.id) {
413
+ if (data.panelId === null) {
414
+ // this is a group move dnd event
415
+ const { groupId } = data;
416
+ this._onMove.fire({
417
+ target: position,
418
+ groupId: groupId,
419
+ index,
420
+ });
421
+ return;
422
+ }
405
423
  const fromSameGroup = this.tabsContainer.indexOf(data.panelId) !== -1;
406
424
  if (fromSameGroup && this.tabsContainer.size === 1) {
407
425
  return;
@@ -3,7 +3,7 @@ import { DockviewComponent } from '../dockview/dockviewComponent';
3
3
  import { GridviewPanelApi } from '../api/gridviewPanelApi';
4
4
  import { Groupview, GroupOptions, IHeader } from './groupview';
5
5
  import { GridviewPanel, IGridviewPanel } from '../gridview/gridviewPanel';
6
- import { IDockviewPanel } from './groupPanel';
6
+ import { IDockviewPanel } from '../dockview/dockviewPanel';
7
7
  export interface IGroupviewPanel extends IGridviewPanel {
8
8
  model: Groupview;
9
9
  locked: boolean;
@@ -11,8 +11,8 @@ export interface IGroupviewPanel extends IGridviewPanel {
11
11
  readonly panels: IDockviewPanel[];
12
12
  readonly activePanel: IDockviewPanel | undefined;
13
13
  }
14
- export declare type IGroupviewPanelPublic = IGroupviewPanel;
15
- export declare type GroupviewPanelApi = GridviewPanelApi;
14
+ export type IGroupviewPanelPublic = IGroupviewPanel;
15
+ export type GroupviewPanelApi = GridviewPanelApi;
16
16
  export declare class GroupPanel extends GridviewPanel implements IGroupviewPanel {
17
17
  private readonly _model;
18
18
  get panels(): IDockviewPanel[];
@@ -4,10 +4,6 @@ import { GridviewPanel } from '../gridview/gridviewPanel';
4
4
  class GroupviewApi extends GridviewPanelApiImpl {
5
5
  }
6
6
  export class GroupPanel extends GridviewPanel {
7
- constructor(accessor, id, options) {
8
- super(id, 'groupview_default', new GroupviewApi(id));
9
- this._model = new Groupview(this.element, accessor, id, options, this);
10
- }
11
7
  get panels() {
12
8
  return this._model.panels;
13
9
  }
@@ -41,6 +37,10 @@ export class GroupPanel extends GridviewPanel {
41
37
  get header() {
42
38
  return this._model.header;
43
39
  }
40
+ constructor(accessor, id, options) {
41
+ super(id, 'groupview_default', new GroupviewApi(id));
42
+ this._model = new Groupview(this.element, accessor, id, options, this);
43
+ }
44
44
  initialize() {
45
45
  this._model.initialize();
46
46
  }
@@ -1,6 +1,6 @@
1
1
  import { CompositeDisposable, IDisposable } from '../../lifecycle';
2
2
  import { Event } from '../../events';
3
- import { IDockviewPanel } from '../groupPanel';
3
+ import { IDockviewPanel } from '../../dockview/dockviewPanel';
4
4
  export interface IContentContainer extends IDisposable {
5
5
  onDidFocus: Event<void>;
6
6
  onDidBlur: Event<void>;
@@ -2,6 +2,9 @@ import { CompositeDisposable, MutableDisposable, } from '../../lifecycle';
2
2
  import { Emitter } from '../../events';
3
3
  import { trackFocus } from '../../dom';
4
4
  export class ContentContainer extends CompositeDisposable {
5
+ get element() {
6
+ return this._element;
7
+ }
5
8
  constructor() {
6
9
  super();
7
10
  this.disposable = new MutableDisposable();
@@ -19,9 +22,6 @@ export class ContentContainer extends CompositeDisposable {
19
22
  // 3) register dragEnd events
20
23
  // 4) register mouseMove events (if no buttons are present we take this as a dragEnd event)
21
24
  }
22
- get element() {
23
- return this._element;
24
- }
25
25
  show() {
26
26
  this.element.style.display = '';
27
27
  }
@@ -2,23 +2,13 @@ import { Event } from '../events';
2
2
  import { CompositeDisposable } from '../lifecycle';
3
3
  import { IDockviewComponent } from '../dockview/dockviewComponent';
4
4
  import { ITabRenderer } from './types';
5
- import { IDockviewPanel } from './groupPanel';
6
5
  import { GroupPanel } from './groupviewPanel';
7
6
  import { DroptargetEvent } from '../dnd/droptarget';
8
- export declare enum MouseEventKind {
9
- CLICK = "CLICK"
10
- }
11
- export interface LayoutMouseEvent {
12
- readonly kind: MouseEventKind;
13
- readonly event: MouseEvent;
14
- readonly panel?: IDockviewPanel;
15
- readonly tab?: boolean;
16
- }
17
7
  export interface ITab {
18
8
  readonly panelId: string;
19
9
  readonly element: HTMLElement;
20
10
  setContent: (element: ITabRenderer) => void;
21
- onChanged: Event<LayoutMouseEvent>;
11
+ onChanged: Event<MouseEvent>;
22
12
  onDrop: Event<DroptargetEvent>;
23
13
  setActive(isActive: boolean): void;
24
14
  }
@@ -30,7 +20,7 @@ export declare class Tab extends CompositeDisposable implements ITab {
30
20
  private readonly droptarget;
31
21
  private content?;
32
22
  private readonly _onChanged;
33
- readonly onChanged: Event<LayoutMouseEvent>;
23
+ readonly onChanged: Event<MouseEvent>;
34
24
  private readonly _onDropped;
35
25
  readonly onDrop: Event<DroptargetEvent>;
36
26
  get element(): HTMLElement;
@@ -5,11 +5,10 @@ import { toggleClass } from '../dom';
5
5
  import { Droptarget } from '../dnd/droptarget';
6
6
  import { DockviewDropTargets } from './dnd';
7
7
  import { DragHandler } from '../dnd/abstractDragHandler';
8
- export var MouseEventKind;
9
- (function (MouseEventKind) {
10
- MouseEventKind["CLICK"] = "CLICK";
11
- })(MouseEventKind || (MouseEventKind = {}));
12
8
  export class Tab extends CompositeDisposable {
9
+ get element() {
10
+ return this._element;
11
+ }
13
12
  constructor(panelId, accessor, group) {
14
13
  super();
15
14
  this.panelId = panelId;
@@ -53,25 +52,30 @@ export class Tab extends CompositeDisposable {
53
52
  * on the tabs-container. I cannot use event.preventDefault() since I need the on DragStart event to occur
54
53
  */
55
54
  event.stopPropagation();
56
- this._onChanged.fire({ kind: MouseEventKind.CLICK, event });
55
+ this._onChanged.fire(event);
57
56
  }));
58
57
  this.droptarget = new Droptarget(this._element, {
59
- validOverlays: 'none',
60
- canDisplayOverlay: (event) => {
58
+ acceptedTargetZones: ['center'],
59
+ canDisplayOverlay: (event, position) => {
60
+ if (this.group.locked) {
61
+ return false;
62
+ }
61
63
  const data = getPanelData();
62
64
  if (data && this.accessor.id === data.viewId) {
65
+ if (data.panelId === null &&
66
+ data.groupId === this.group.id) {
67
+ // don't allow group move to drop on self
68
+ return false;
69
+ }
63
70
  return this.panelId !== data.panelId;
64
71
  }
65
- return this.group.model.canDisplayOverlay(event, DockviewDropTargets.Tab);
72
+ return this.group.model.canDisplayOverlay(event, position, DockviewDropTargets.Tab);
66
73
  },
67
74
  });
68
75
  this.addDisposables(this.droptarget.onDrop((event) => {
69
76
  this._onDropped.fire(event);
70
77
  }));
71
78
  }
72
- get element() {
73
- return this._element;
74
- }
75
79
  setActive(isActive) {
76
80
  toggleClass(this.element, 'active-tab', isActive);
77
81
  toggleClass(this.element, 'inactive-tab', !isActive);