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,9 +1,9 @@
1
1
  import { IDisposable, CompositeDisposable } from '../../lifecycle';
2
2
  import { Event } from '../../events';
3
3
  import { ITab } from '../tab';
4
- import { IDockviewPanel } from '../groupPanel';
5
4
  import { DockviewComponent } from '../../dockview/dockviewComponent';
6
5
  import { GroupPanel } from '../groupviewPanel';
6
+ import { IDockviewPanel } from '../../dockview/dockviewPanel';
7
7
  export interface TabDropIndexEvent {
8
8
  event: DragEvent;
9
9
  readonly index: number;
@@ -28,13 +28,12 @@ export interface ITabsContainer extends IDisposable {
28
28
  hide(): void;
29
29
  }
30
30
  export declare class TabsContainer extends CompositeDisposable implements ITabsContainer {
31
- private accessor;
32
- private group;
31
+ private readonly accessor;
32
+ private readonly group;
33
33
  private readonly _element;
34
34
  private readonly tabContainer;
35
- private readonly voidContainer;
36
35
  private readonly actionContainer;
37
- private readonly voidDropTarget;
36
+ private readonly voidContainer;
38
37
  private tabs;
39
38
  private selectedIndex;
40
39
  private actions;
@@ -55,9 +54,7 @@ export declare class TabsContainer extends CompositeDisposable implements ITabsC
55
54
  isActive(tab: ITab): boolean;
56
55
  at(index: number): ITab;
57
56
  indexOf(id: string): number;
58
- constructor(accessor: DockviewComponent, group: GroupPanel, options: {
59
- tabHeight?: number;
60
- });
57
+ constructor(accessor: DockviewComponent, group: GroupPanel);
61
58
  setActive(_isGroupActive: boolean): void;
62
59
  private addTab;
63
60
  delete(id: string): void;
@@ -1,60 +1,9 @@
1
1
  import { CompositeDisposable, } from '../../lifecycle';
2
2
  import { addDisposableListener, Emitter } from '../../events';
3
- import { MouseEventKind, Tab } from '../tab';
4
- import { last } from '../../array';
5
- import { getPanelData } from '../../dnd/dataTransfer';
6
- import { Droptarget } from '../../dnd/droptarget';
7
- import { DockviewDropTargets } from '../dnd';
3
+ import { Tab } from '../tab';
4
+ import { VoidContainer } from './voidContainer';
5
+ import { toggleClass } from '../../dom';
8
6
  export class TabsContainer extends CompositeDisposable {
9
- constructor(accessor, group, options) {
10
- super();
11
- this.accessor = accessor;
12
- this.group = group;
13
- this.tabs = [];
14
- this.selectedIndex = -1;
15
- this._hidden = false;
16
- this._onDrop = new Emitter();
17
- this.onDrop = this._onDrop.event;
18
- this.addDisposables(this._onDrop);
19
- this._element = document.createElement('div');
20
- this._element.className = 'tabs-and-actions-container';
21
- this.height = options.tabHeight;
22
- this.actionContainer = document.createElement('div');
23
- this.actionContainer.className = 'action-container';
24
- this.tabContainer = document.createElement('div');
25
- this.tabContainer.className = 'tabs-container';
26
- this.voidContainer = document.createElement('div');
27
- this.voidContainer.className = 'void-container';
28
- this._element.appendChild(this.tabContainer);
29
- this._element.appendChild(this.voidContainer);
30
- this._element.appendChild(this.actionContainer);
31
- this.voidDropTarget = new Droptarget(this.voidContainer, {
32
- validOverlays: 'none',
33
- canDisplayOverlay: (event) => {
34
- var _a;
35
- const data = getPanelData();
36
- if (data && this.accessor.id === data.viewId) {
37
- // don't show the overlay if the tab being dragged is the last panel of this group
38
- return ((_a = last(this.tabs)) === null || _a === void 0 ? void 0 : _a.value.panelId) !== data.panelId;
39
- }
40
- return group.model.canDisplayOverlay(event, DockviewDropTargets.Panel);
41
- },
42
- });
43
- this.addDisposables(this.voidDropTarget.onDrop((event) => {
44
- this._onDrop.fire({
45
- event: event.nativeEvent,
46
- index: this.tabs.length,
47
- });
48
- }), this.voidDropTarget, addDisposableListener(this.tabContainer, 'mousedown', (event) => {
49
- if (event.defaultPrevented) {
50
- return;
51
- }
52
- const isLeftClick = event.button === 0;
53
- if (isLeftClick) {
54
- this.accessor.doSetGroupActive(this.group);
55
- }
56
- }));
57
- }
58
7
  get panels() {
59
8
  return this.tabs.map((_) => _.value.panelId);
60
9
  }
@@ -115,6 +64,52 @@ export class TabsContainer extends CompositeDisposable {
115
64
  indexOf(id) {
116
65
  return this.tabs.findIndex((tab) => tab.value.panelId === id);
117
66
  }
67
+ constructor(accessor, group) {
68
+ super();
69
+ this.accessor = accessor;
70
+ this.group = group;
71
+ this.tabs = [];
72
+ this.selectedIndex = -1;
73
+ this._hidden = false;
74
+ this._onDrop = new Emitter();
75
+ this.onDrop = this._onDrop.event;
76
+ this.addDisposables(this._onDrop);
77
+ this._element = document.createElement('div');
78
+ this._element.className = 'tabs-and-actions-container';
79
+ this.height = accessor.options.tabHeight;
80
+ toggleClass(this._element, 'dv-full-width-single-tab', this.accessor.options.singleTabMode === 'fullwidth');
81
+ this.addDisposables(this.accessor.onDidAddPanel((e) => {
82
+ if (e.api.group === this.group) {
83
+ toggleClass(this._element, 'dv-single-tab', this.size === 1);
84
+ }
85
+ }), this.accessor.onDidRemovePanel((e) => {
86
+ if (e.api.group === this.group) {
87
+ toggleClass(this._element, 'dv-single-tab', this.size === 1);
88
+ }
89
+ }));
90
+ this.actionContainer = document.createElement('div');
91
+ this.actionContainer.className = 'action-container';
92
+ this.tabContainer = document.createElement('div');
93
+ this.tabContainer.className = 'tabs-container';
94
+ this.voidContainer = new VoidContainer(this.accessor, this.group);
95
+ this._element.appendChild(this.tabContainer);
96
+ this._element.appendChild(this.voidContainer.element);
97
+ this._element.appendChild(this.actionContainer);
98
+ this.addDisposables(this.voidContainer, this.voidContainer.onDrop((event) => {
99
+ this._onDrop.fire({
100
+ event: event.nativeEvent,
101
+ index: this.tabs.length,
102
+ });
103
+ }), addDisposableListener(this.tabContainer, 'mousedown', (event) => {
104
+ if (event.defaultPrevented) {
105
+ return;
106
+ }
107
+ const isLeftClick = event.button === 0;
108
+ if (isLeftClick) {
109
+ this.accessor.doSetGroupActive(this.group);
110
+ }
111
+ }));
112
+ }
118
113
  setActive(_isGroupActive) {
119
114
  // noop
120
115
  }
@@ -159,15 +154,13 @@ export class TabsContainer extends CompositeDisposable {
159
154
  var _a;
160
155
  const alreadyFocused = panel.id === ((_a = this.group.model.activePanel) === null || _a === void 0 ? void 0 : _a.id) &&
161
156
  this.group.model.isContentFocused;
162
- const isLeftClick = event.event.button === 0;
163
- if (!isLeftClick || event.event.defaultPrevented) {
157
+ const isLeftClick = event.button === 0;
158
+ if (!isLeftClick || event.defaultPrevented) {
164
159
  return;
165
160
  }
166
- if (event.kind === MouseEventKind.CLICK) {
167
- this.group.model.openPanel(panel, {
168
- skipFocus: alreadyFocused,
169
- });
170
- }
161
+ this.group.model.openPanel(panel, {
162
+ skipFocus: alreadyFocused,
163
+ });
171
164
  }), tabToAdd.onDrop((event) => {
172
165
  this._onDrop.fire({
173
166
  event: event.nativeEvent,
@@ -0,0 +1,15 @@
1
+ import { DroptargetEvent } from '../../dnd/droptarget';
2
+ import { DockviewComponent } from '../../dockview/dockviewComponent';
3
+ import { Event } from '../../events';
4
+ import { CompositeDisposable } from '../../lifecycle';
5
+ import { GroupPanel } from '../groupviewPanel';
6
+ export declare class VoidContainer extends CompositeDisposable {
7
+ private readonly accessor;
8
+ private readonly group;
9
+ private readonly _element;
10
+ private readonly voidDropTarget;
11
+ private readonly _onDrop;
12
+ readonly onDrop: Event<DroptargetEvent>;
13
+ get element(): HTMLElement;
14
+ constructor(accessor: DockviewComponent, group: GroupPanel);
15
+ }
@@ -0,0 +1,47 @@
1
+ import { last } from '../../array';
2
+ import { getPanelData } from '../../dnd/dataTransfer';
3
+ import { Droptarget } from '../../dnd/droptarget';
4
+ import { GroupDragHandler } from '../../dnd/groupDragHandler';
5
+ import { addDisposableListener, Emitter } from '../../events';
6
+ import { CompositeDisposable } from '../../lifecycle';
7
+ import { DockviewDropTargets } from '../dnd';
8
+ export class VoidContainer extends CompositeDisposable {
9
+ get element() {
10
+ return this._element;
11
+ }
12
+ constructor(accessor, group) {
13
+ super();
14
+ this.accessor = accessor;
15
+ this.group = group;
16
+ this._onDrop = new Emitter();
17
+ this.onDrop = this._onDrop.event;
18
+ this._element = document.createElement('div');
19
+ this._element.className = 'void-container';
20
+ this._element.tabIndex = 0;
21
+ this._element.draggable = true;
22
+ this.addDisposables(this._onDrop, addDisposableListener(this._element, 'click', () => {
23
+ this.accessor.doSetGroupActive(this.group);
24
+ }));
25
+ const handler = new GroupDragHandler(this._element, accessor.id, group);
26
+ this.voidDropTarget = new Droptarget(this._element, {
27
+ acceptedTargetZones: ['center'],
28
+ canDisplayOverlay: (event, position) => {
29
+ var _a;
30
+ const data = getPanelData();
31
+ if (data && this.accessor.id === data.viewId) {
32
+ if (data.panelId === null &&
33
+ data.groupId === this.group.id) {
34
+ // don't allow group move to drop on self
35
+ return false;
36
+ }
37
+ // don't show the overlay if the tab being dragged is the last panel of this group
38
+ return ((_a = last(this.group.panels)) === null || _a === void 0 ? void 0 : _a.id) !== data.panelId;
39
+ }
40
+ return group.model.canDisplayOverlay(event, position, DockviewDropTargets.Panel);
41
+ },
42
+ });
43
+ this.addDisposables(handler, this.voidDropTarget.onDrop((event) => {
44
+ this._onDrop.fire(event);
45
+ }), this.voidDropTarget);
46
+ }
47
+ }
@@ -1,9 +1,10 @@
1
1
  import { IDockviewComponent } from '../dockview/dockviewComponent';
2
- import { DockviewPanelApi } from '../api/groupPanelApi';
3
- import { PanelInitParameters, IPanel } from '../panel/types';
2
+ import { DockviewPanelApi } from '../api/dockviewPanelApi';
3
+ import { PanelInitParameters, IPanel, PanelUpdateEvent, Parameters } from '../panel/types';
4
4
  import { DockviewApi } from '../api/component.api';
5
5
  import { GroupPanel } from './groupviewPanel';
6
6
  import { Event } from '../events';
7
+ import { IGroupPanelView } from '../dockview/defaultGroupPanelView';
7
8
  export interface IRenderable {
8
9
  id: string;
9
10
  element: HTMLElement;
@@ -50,3 +51,18 @@ export interface PanelContentPartConstructor {
50
51
  export interface WatermarkConstructor {
51
52
  new (): IWatermarkRenderer;
52
53
  }
54
+ export interface IGroupPanelInitParameters extends PanelInitParameters, HeaderPartInitParameters {
55
+ view: IGroupPanelView;
56
+ }
57
+ export type GroupPanelUpdateEvent = PanelUpdateEvent<{
58
+ params?: Parameters;
59
+ title?: string;
60
+ }>;
61
+ export interface GroupviewPanelState {
62
+ id: string;
63
+ view?: any;
64
+ title: string;
65
+ params?: {
66
+ [key: string]: any;
67
+ };
68
+ }
@@ -1,6 +1,9 @@
1
1
  import { trackFocus } from './dom';
2
2
  import { Emitter } from './events';
3
3
  export class HostedContainer {
4
+ get element() {
5
+ return this._element;
6
+ }
4
7
  constructor(options) {
5
8
  this.options = options;
6
9
  this._onDidFocus = new Emitter();
@@ -36,9 +39,6 @@ export class HostedContainer {
36
39
  });
37
40
  options.parent.appendChild(this._element);
38
41
  }
39
- get element() {
40
- return this._element;
41
- }
42
42
  hide() {
43
43
  this._element.style.visibility = 'hidden';
44
44
  }
@@ -17,14 +17,14 @@ export { PaneviewComponentOptions } from './paneview/options';
17
17
  export * from './gridview/gridviewPanel';
18
18
  export * from './splitview/splitviewPanel';
19
19
  export * from './paneview/paneviewPanel';
20
- export * from './groupview/groupPanel';
20
+ export * from './groupview/types';
21
21
  export * from './react';
22
22
  export { Event } from './events';
23
23
  export { IDisposable } from './lifecycle';
24
- export { Position } from './dnd/droptarget';
24
+ export { Position, positionToDirection, directionToPosition, } from './dnd/droptarget';
25
25
  export { FocusEvent, PanelDimensionChangeEvent, VisibilityEvent, ActiveEvent, PanelApi, } from './api/panelApi';
26
26
  export { SizeEvent, GridviewPanelApi, GridConstraintChangeEvent, } from './api/gridviewPanelApi';
27
- export { TitleEvent, DockviewPanelApi } from './api/groupPanelApi';
27
+ export { TitleEvent, DockviewPanelApi } from './api/dockviewPanelApi';
28
28
  export { PanelSizeEvent, PanelConstraintChangeEvent, SplitviewPanelApi, } from './api/splitviewPanelApi';
29
29
  export { ExpansionEvent, PaneviewPanelApi } from './api/paneviewPanelApi';
30
30
  export { CommonApi, SplitviewApi, PaneviewApi, GridviewApi, DockviewApi, } from './api/component.api';
package/dist/esm/index.js CHANGED
@@ -16,8 +16,8 @@ export * from './paneview/paneviewComponent';
16
16
  export * from './gridview/gridviewPanel';
17
17
  export * from './splitview/splitviewPanel';
18
18
  export * from './paneview/paneviewPanel';
19
- export * from './groupview/groupPanel';
19
+ export * from './groupview/types';
20
20
  export * from './react'; // TODO: should be conditional on whether user wants the React wrappers
21
21
  export { Event } from './events';
22
- export { Position } from './dnd/droptarget';
22
+ export { positionToDirection, directionToPosition, } from './dnd/droptarget';
23
23
  export { SplitviewApi, PaneviewApi, GridviewApi, DockviewApi, } from './api/component.api';
@@ -7,12 +7,12 @@ export var Disposable;
7
7
  };
8
8
  })(Disposable || (Disposable = {}));
9
9
  export class CompositeDisposable {
10
- constructor(...args) {
11
- this.disposables = args;
12
- }
13
10
  static from(...args) {
14
11
  return new CompositeDisposable(...args);
15
12
  }
13
+ constructor(...args) {
14
+ this.disposables = args;
15
+ }
16
16
  addDisposables(...args) {
17
17
  args.forEach((arg) => this.disposables.push(arg));
18
18
  }
@@ -3,6 +3,9 @@ import { CompositeDisposable, MutableDisposable } from '../lifecycle';
3
3
  import { toggleClass } from '../dom';
4
4
  import { createChevronRightButton, createExpandMoreButton } from '../svg';
5
5
  export class DefaultHeader extends CompositeDisposable {
6
+ get element() {
7
+ return this._element;
8
+ }
6
9
  constructor() {
7
10
  super();
8
11
  this._expandedIcon = createExpandMoreButton();
@@ -21,9 +24,6 @@ export class DefaultHeader extends CompositeDisposable {
21
24
  (_a = this.apiRef.api) === null || _a === void 0 ? void 0 : _a.setExpanded(!this.apiRef.api.isExpanded);
22
25
  }));
23
26
  }
24
- get element() {
25
- return this._element;
26
- }
27
27
  init(params) {
28
28
  this.apiRef.api = params.api;
29
29
  this._content.textContent = params.title;
@@ -1,6 +1,6 @@
1
1
  import { DragHandler } from '../dnd/abstractDragHandler';
2
2
  import { getPaneData, LocalSelectionTransfer, PaneTransfer, } from '../dnd/dataTransfer';
3
- import { Droptarget, Position } from '../dnd/droptarget';
3
+ import { Droptarget } from '../dnd/droptarget';
4
4
  import { Emitter } from '../events';
5
5
  import { PaneviewPanel, } from './paneviewPanel';
6
6
  export class DraggablePaneviewPanel extends PaneviewPanel {
@@ -31,7 +31,10 @@ export class DraggablePaneviewPanel extends PaneviewPanel {
31
31
  }
32
32
  })(this.header);
33
33
  this.target = new Droptarget(this.element, {
34
- validOverlays: 'vertical',
34
+ acceptedTargetZones: ['top', 'bottom'],
35
+ overlayModel: {
36
+ activationSize: { type: 'percentage', value: 50 },
37
+ },
35
38
  canDisplayOverlay: (event) => {
36
39
  const data = getPaneData();
37
40
  if (data) {
@@ -74,12 +77,10 @@ export class DraggablePaneviewPanel extends PaneviewPanel {
74
77
  const allPanels = containerApi.panels;
75
78
  const fromIndex = allPanels.indexOf(existingPanel);
76
79
  let toIndex = containerApi.panels.indexOf(this);
77
- if (event.position === Position.Left ||
78
- event.position === Position.Top) {
80
+ if (event.position === 'left' || event.position === 'top') {
79
81
  toIndex = Math.max(0, toIndex - 1);
80
82
  }
81
- if (event.position === Position.Right ||
82
- event.position === Position.Bottom) {
83
+ if (event.position === 'right' || event.position === 'bottom') {
83
84
  if (fromIndex > toIndex) {
84
85
  toIndex++;
85
86
  }
@@ -3,6 +3,27 @@ import { CompositeDisposable } from '../lifecycle';
3
3
  import { Emitter } from '../events';
4
4
  import { addClasses, removeClasses } from '../dom';
5
5
  export class Paneview extends CompositeDisposable {
6
+ get onDidAddView() {
7
+ return this.splitview.onDidAddView;
8
+ }
9
+ get onDidRemoveView() {
10
+ return this.splitview.onDidRemoveView;
11
+ }
12
+ get minimumSize() {
13
+ return this.splitview.minimumSize;
14
+ }
15
+ get maximumSize() {
16
+ return this.splitview.maximumSize;
17
+ }
18
+ get orientation() {
19
+ return this.splitview.orientation;
20
+ }
21
+ get size() {
22
+ return this.splitview.size;
23
+ }
24
+ get orthogonalSize() {
25
+ return this.splitview.orthogonalSize;
26
+ }
6
27
  constructor(container, options) {
7
28
  var _a;
8
29
  super();
@@ -45,27 +66,6 @@ export class Paneview extends CompositeDisposable {
45
66
  this._onDidChange.fire();
46
67
  }));
47
68
  }
48
- get onDidAddView() {
49
- return this.splitview.onDidAddView;
50
- }
51
- get onDidRemoveView() {
52
- return this.splitview.onDidRemoveView;
53
- }
54
- get minimumSize() {
55
- return this.splitview.minimumSize;
56
- }
57
- get maximumSize() {
58
- return this.splitview.maximumSize;
59
- }
60
- get orientation() {
61
- return this.splitview.orientation;
62
- }
63
- get size() {
64
- return this.splitview.size;
65
- }
66
- get orthogonalSize() {
67
- return this.splitview.orthogonalSize;
68
- }
69
69
  addPane(pane, size, index = this.splitview.length, skipLayout = false) {
70
70
  const disposable = pane.onDidChangeExpansionState(() => {
71
71
  this.setupAnimation();
@@ -21,36 +21,6 @@ export class PaneFramework extends DraggablePaneviewPanel {
21
21
  }
22
22
  }
23
23
  export class PaneviewComponent extends CompositeDisposable {
24
- constructor(element, options) {
25
- super();
26
- this.element = element;
27
- this._id = nextLayoutId.next();
28
- this._disposable = new MutableDisposable();
29
- this._viewDisposables = new Map();
30
- this._onDidLayoutfromJSON = new Emitter();
31
- this.onDidLayoutFromJSON = this._onDidLayoutfromJSON.event;
32
- this._onDidLayoutChange = new Emitter();
33
- this.onDidLayoutChange = this._onDidLayoutChange.event;
34
- this._onDidDrop = new Emitter();
35
- this.onDidDrop = this._onDidDrop.event;
36
- this._onDidAddView = new Emitter();
37
- this.onDidAddView = this._onDidAddView.event;
38
- this._onDidRemoveView = new Emitter();
39
- this.onDidRemoveView = this._onDidRemoveView.event;
40
- this.addDisposables(this._onDidLayoutChange, this._onDidLayoutfromJSON, this._onDidDrop, this._onDidAddView, this._onDidRemoveView);
41
- this._options = options;
42
- if (!options.components) {
43
- options.components = {};
44
- }
45
- if (!options.frameworkComponents) {
46
- options.frameworkComponents = {};
47
- }
48
- this.paneview = new Paneview(this.element, {
49
- // only allow paneview in the vertical orientation for now
50
- orientation: Orientation.VERTICAL,
51
- });
52
- this.addDisposables(this._disposable);
53
- }
54
24
  get id() {
55
25
  return this._id;
56
26
  }
@@ -85,6 +55,36 @@ export class PaneviewComponent extends CompositeDisposable {
85
55
  get options() {
86
56
  return this._options;
87
57
  }
58
+ constructor(element, options) {
59
+ super();
60
+ this.element = element;
61
+ this._id = nextLayoutId.next();
62
+ this._disposable = new MutableDisposable();
63
+ this._viewDisposables = new Map();
64
+ this._onDidLayoutfromJSON = new Emitter();
65
+ this.onDidLayoutFromJSON = this._onDidLayoutfromJSON.event;
66
+ this._onDidLayoutChange = new Emitter();
67
+ this.onDidLayoutChange = this._onDidLayoutChange.event;
68
+ this._onDidDrop = new Emitter();
69
+ this.onDidDrop = this._onDidDrop.event;
70
+ this._onDidAddView = new Emitter();
71
+ this.onDidAddView = this._onDidAddView.event;
72
+ this._onDidRemoveView = new Emitter();
73
+ this.onDidRemoveView = this._onDidRemoveView.event;
74
+ this.addDisposables(this._onDidLayoutChange, this._onDidLayoutfromJSON, this._onDidDrop, this._onDidAddView, this._onDidRemoveView);
75
+ this._options = options;
76
+ if (!options.components) {
77
+ options.components = {};
78
+ }
79
+ if (!options.frameworkComponents) {
80
+ options.frameworkComponents = {};
81
+ }
82
+ this.paneview = new Paneview(this.element, {
83
+ // only allow paneview in the vertical orientation for now
84
+ orientation: Orientation.VERTICAL,
85
+ });
86
+ this.addDisposables(this._disposable);
87
+ }
88
88
  focus() {
89
89
  //
90
90
  }
@@ -4,50 +4,6 @@ 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, isHeaderVisible) {
8
- super(id, component, new PaneviewPanelApiImpl(id));
9
- this.headerComponent = headerComponent;
10
- this._onDidChangeExpansionState = new Emitter({ replay: true });
11
- this.onDidChangeExpansionState = this._onDidChangeExpansionState.event;
12
- this._onDidChange = new Emitter();
13
- this.onDidChange = this._onDidChange.event;
14
- this.headerSize = 22;
15
- this._orthogonalSize = 0;
16
- this._size = 0;
17
- this._minimumBodySize = 100;
18
- this._maximumBodySize = Number.POSITIVE_INFINITY;
19
- this._isExpanded = false;
20
- this.expandedSize = 0;
21
- this.api.pane = this; // TODO cannot use 'this' before 'super'
22
- this._isExpanded = isExpanded;
23
- this._headerVisible = isHeaderVisible;
24
- this._onDidChangeExpansionState.fire(this.isExpanded()); // initialize value
25
- this._orientation = orientation;
26
- this.element.classList.add('pane');
27
- this.addDisposables(this.api.onDidSizeChange((event) => {
28
- this._onDidChange.fire({ size: event.size });
29
- }), addDisposableListener(this.element, 'mouseenter', (ev) => {
30
- this.api._onMouseEnter.fire(ev);
31
- }), addDisposableListener(this.element, 'mouseleave', (ev) => {
32
- this.api._onMouseLeave.fire(ev);
33
- }));
34
- this.addDisposables(this._onDidChangeExpansionState, this.onDidChangeExpansionState((isPanelExpanded) => {
35
- this.api._onDidExpansionChange.fire({
36
- isExpanded: isPanelExpanded,
37
- });
38
- }), this.api.onDidFocusChange((e) => {
39
- if (!this.header) {
40
- return;
41
- }
42
- if (e.isFocused) {
43
- addClasses(this.header, 'focused');
44
- }
45
- else {
46
- removeClasses(this.header, 'focused');
47
- }
48
- }));
49
- this.renderOnce();
50
- }
51
7
  set orientation(value) {
52
8
  this._orientation = value;
53
9
  }
@@ -95,6 +51,51 @@ export class PaneviewPanel extends BasePanelView {
95
51
  this._headerVisible = value;
96
52
  this.header.style.display = value ? '' : 'none';
97
53
  }
54
+ constructor(id, component, headerComponent, orientation, isExpanded, isHeaderVisible) {
55
+ super(id, component, new PaneviewPanelApiImpl(id));
56
+ this.headerComponent = headerComponent;
57
+ this._onDidChangeExpansionState = new Emitter({ replay: true });
58
+ this.onDidChangeExpansionState = this._onDidChangeExpansionState.event;
59
+ this._onDidChange = new Emitter();
60
+ this.onDidChange = this._onDidChange.event;
61
+ this.headerSize = 22;
62
+ this._orthogonalSize = 0;
63
+ this._size = 0;
64
+ this._minimumBodySize = 100;
65
+ this._maximumBodySize = Number.POSITIVE_INFINITY;
66
+ this._isExpanded = false;
67
+ this.expandedSize = 0;
68
+ this.api.pane = this; // TODO cannot use 'this' before 'super'
69
+ this.api.initialize(this);
70
+ this._isExpanded = isExpanded;
71
+ this._headerVisible = isHeaderVisible;
72
+ this._onDidChangeExpansionState.fire(this.isExpanded()); // initialize value
73
+ this._orientation = orientation;
74
+ this.element.classList.add('pane');
75
+ this.addDisposables(this.api.onDidSizeChange((event) => {
76
+ this._onDidChange.fire({ size: event.size });
77
+ }), addDisposableListener(this.element, 'mouseenter', (ev) => {
78
+ this.api._onMouseEnter.fire(ev);
79
+ }), addDisposableListener(this.element, 'mouseleave', (ev) => {
80
+ this.api._onMouseLeave.fire(ev);
81
+ }));
82
+ this.addDisposables(this._onDidChangeExpansionState, this.onDidChangeExpansionState((isPanelExpanded) => {
83
+ this.api._onDidExpansionChange.fire({
84
+ isExpanded: isPanelExpanded,
85
+ });
86
+ }), this.api.onDidFocusChange((e) => {
87
+ if (!this.header) {
88
+ return;
89
+ }
90
+ if (e.isFocused) {
91
+ addClasses(this.header, 'focused');
92
+ }
93
+ else {
94
+ removeClasses(this.header, 'focused');
95
+ }
96
+ }));
97
+ this.renderOnce();
98
+ }
98
99
  setVisible(isVisible) {
99
100
  this.api._onDidVisibilityChange.fire({ isVisible });
100
101
  }
@@ -1,5 +1,6 @@
1
1
  import { DockviewComponent } from '../dockview/dockviewComponent';
2
- import { GroupviewPanelState, IDockviewPanel } from '../groupview/groupPanel';
2
+ import { GroupviewPanelState } from '../groupview/types';
3
+ import { IDockviewPanel } from '../dockview/dockviewPanel';
3
4
  import { IPanelDeserializer } from '../dockview/deserializer';
4
5
  import { GroupPanel } from '../groupview/groupviewPanel';
5
6
  export declare class ReactPanelDeserialzier implements IPanelDeserializer {
@@ -1,4 +1,4 @@
1
- import { DockviewGroupPanel } from '../dockview/dockviewGroupPanel';
1
+ import { DockviewPanel } from '../dockview/dockviewPanel';
2
2
  import { createComponent } from '../panel/componentFactory';
3
3
  import { DockviewApi } from '../api/component.api';
4
4
  import { DefaultTab } from '../dockview/components/tab/defaultTab';
@@ -27,7 +27,7 @@ export class ReactPanelDeserialzier {
27
27
  content: createComponent(viewData.content.id, viewData.content.id, this.layout.options.components, this.layout.options.frameworkComponents, (_d = this.layout.options.frameworkComponentFactory) === null || _d === void 0 ? void 0 : _d.content),
28
28
  tab,
29
29
  });
30
- const panel = new DockviewGroupPanel(panelId, this.layout, new DockviewApi(this.layout), group);
30
+ const panel = new DockviewPanel(panelId, this.layout, new DockviewApi(this.layout), group);
31
31
  panel.init({
32
32
  view,
33
33
  title,
@@ -1,4 +1,4 @@
1
1
  import { IDockviewPanelHeaderProps } from './dockview';
2
2
  import * as React from 'react';
3
- export declare type IDockviewDefaultTabProps = IDockviewPanelHeaderProps & React.DOMAttributes<HTMLDivElement>;
3
+ export type IDockviewDefaultTabProps = IDockviewPanelHeaderProps & React.DOMAttributes<HTMLDivElement>;
4
4
  export declare const DockviewDefaultTab: React.FunctionComponent<IDockviewDefaultTabProps>;