dockview 1.4.1 → 1.5.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 (156) hide show
  1. package/README.md +4 -195
  2. package/dist/cjs/api/component.api.d.ts +8 -3
  3. package/dist/cjs/api/component.api.js +16 -4
  4. package/dist/cjs/api/component.api.js.map +1 -1
  5. package/dist/cjs/dnd/droptarget.d.ts +1 -2
  6. package/dist/cjs/dockview/components/tab/defaultTab.d.ts +1 -0
  7. package/dist/cjs/dockview/components/tab/defaultTab.js +6 -3
  8. package/dist/cjs/dockview/components/tab/defaultTab.js.map +1 -1
  9. package/dist/cjs/dockview/components/watermark/watermark.js +3 -1
  10. package/dist/cjs/dockview/components/watermark/watermark.js.map +1 -1
  11. package/dist/cjs/dockview/defaultGroupPanelView.d.ts +1 -5
  12. package/dist/cjs/dockview/defaultGroupPanelView.js +5 -20
  13. package/dist/cjs/dockview/defaultGroupPanelView.js.map +1 -1
  14. package/dist/cjs/dockview/deserializer.d.ts +0 -12
  15. package/dist/cjs/dockview/deserializer.js +0 -52
  16. package/dist/cjs/dockview/deserializer.js.map +1 -1
  17. package/dist/cjs/dockview/dockviewComponent.d.ts +6 -8
  18. package/dist/cjs/dockview/dockviewComponent.js +84 -58
  19. package/dist/cjs/dockview/dockviewComponent.js.map +1 -1
  20. package/dist/cjs/dockview/options.d.ts +11 -1
  21. package/dist/cjs/gridview/baseComponentGridview.d.ts +4 -2
  22. package/dist/cjs/gridview/baseComponentGridview.js +1 -1
  23. package/dist/cjs/gridview/baseComponentGridview.js.map +1 -1
  24. package/dist/cjs/gridview/gridviewComponent.d.ts +1 -0
  25. package/dist/cjs/gridview/gridviewComponent.js +26 -18
  26. package/dist/cjs/gridview/gridviewComponent.js.map +1 -1
  27. package/dist/cjs/groupview/groupview.d.ts +20 -18
  28. package/dist/cjs/groupview/groupview.js +44 -41
  29. package/dist/cjs/groupview/groupview.js.map +1 -1
  30. package/dist/cjs/groupview/groupviewPanel.d.ts +2 -2
  31. package/dist/cjs/groupview/groupviewPanel.js.map +1 -1
  32. package/dist/cjs/groupview/tab.d.ts +1 -0
  33. package/dist/cjs/groupview/tab.js +3 -1
  34. package/dist/cjs/groupview/tab.js.map +1 -1
  35. package/dist/cjs/groupview/titlebar/tabsContainer.d.ts +3 -5
  36. package/dist/cjs/groupview/titlebar/tabsContainer.js +3 -5
  37. package/dist/cjs/groupview/titlebar/tabsContainer.js.map +1 -1
  38. package/dist/cjs/groupview/types.d.ts +0 -4
  39. package/dist/cjs/index.d.ts +2 -0
  40. package/dist/cjs/index.js +1 -0
  41. package/dist/cjs/index.js.map +1 -1
  42. package/dist/cjs/paneview/defaultPaneviewHeader.d.ts +3 -0
  43. package/dist/cjs/paneview/defaultPaneviewHeader.js +32 -6
  44. package/dist/cjs/paneview/defaultPaneviewHeader.js.map +1 -1
  45. package/dist/cjs/paneview/draggablePaneviewPanel.d.ts +3 -1
  46. package/dist/cjs/paneview/draggablePaneviewPanel.js +24 -9
  47. package/dist/cjs/paneview/draggablePaneviewPanel.js.map +1 -1
  48. package/dist/cjs/paneview/options.d.ts +2 -0
  49. package/dist/cjs/paneview/paneviewComponent.d.ts +14 -1
  50. package/dist/cjs/paneview/paneviewComponent.js +32 -17
  51. package/dist/cjs/paneview/paneviewComponent.js.map +1 -1
  52. package/dist/cjs/react/deserializer.js +13 -5
  53. package/dist/cjs/react/deserializer.js.map +1 -1
  54. package/dist/cjs/react/dockview/defaultTab.d.ts +4 -0
  55. package/dist/cjs/react/dockview/defaultTab.js +73 -0
  56. package/dist/cjs/react/dockview/defaultTab.js.map +1 -0
  57. package/dist/cjs/react/dockview/dockview.d.ts +5 -3
  58. package/dist/cjs/react/dockview/dockview.js +45 -3
  59. package/dist/cjs/react/dockview/dockview.js.map +1 -1
  60. package/dist/cjs/react/dockview/groupControlsRenderer.d.ts +43 -0
  61. package/dist/cjs/react/dockview/groupControlsRenderer.js +87 -0
  62. package/dist/cjs/react/dockview/groupControlsRenderer.js.map +1 -0
  63. package/dist/cjs/react/dockview/reactContentPart.d.ts +1 -16
  64. package/dist/cjs/react/dockview/reactContentPart.js +2 -18
  65. package/dist/cjs/react/dockview/reactContentPart.js.map +1 -1
  66. package/dist/cjs/react/dockview/reactHeaderPart.d.ts +2 -0
  67. package/dist/cjs/react/dockview/reactHeaderPart.js +4 -0
  68. package/dist/cjs/react/dockview/reactHeaderPart.js.map +1 -1
  69. package/dist/cjs/react/index.d.ts +2 -2
  70. package/dist/cjs/react/index.js +1 -2
  71. package/dist/cjs/react/index.js.map +1 -1
  72. package/dist/cjs/react/paneview/paneview.d.ts +2 -0
  73. package/dist/cjs/react/paneview/paneview.js +9 -0
  74. package/dist/cjs/react/paneview/paneview.js.map +1 -1
  75. package/dist/cjs/react/react.d.ts +1 -0
  76. package/dist/cjs/react/react.js +12 -2
  77. package/dist/cjs/react/react.js.map +1 -1
  78. package/dist/cjs/react/svg.d.ts +3 -0
  79. package/dist/cjs/react/svg.js +36 -0
  80. package/dist/cjs/react/svg.js.map +1 -0
  81. package/dist/cjs/splitview/splitviewComponent.d.ts +2 -0
  82. package/dist/cjs/splitview/splitviewComponent.js +20 -17
  83. package/dist/cjs/splitview/splitviewComponent.js.map +1 -1
  84. package/dist/cjs/svg.d.ts +3 -0
  85. package/dist/cjs/svg.js +44 -0
  86. package/dist/cjs/svg.js.map +1 -0
  87. package/dist/dockview.amd.js +454 -204
  88. package/dist/dockview.amd.min.js +2 -2
  89. package/dist/dockview.amd.min.noStyle.js +2 -2
  90. package/dist/dockview.amd.noStyle.js +453 -203
  91. package/dist/dockview.cjs.js +454 -204
  92. package/dist/dockview.esm.js +449 -198
  93. package/dist/dockview.esm.min.js +2 -2
  94. package/dist/dockview.js +454 -204
  95. package/dist/dockview.min.js +2 -2
  96. package/dist/dockview.min.noStyle.js +2 -2
  97. package/dist/dockview.noStyle.js +453 -203
  98. package/dist/esm/api/component.api.d.ts +8 -3
  99. package/dist/esm/api/component.api.js +16 -4
  100. package/dist/esm/dnd/droptarget.d.ts +1 -2
  101. package/dist/esm/dockview/components/tab/defaultTab.d.ts +1 -0
  102. package/dist/esm/dockview/components/tab/defaultTab.js +5 -2
  103. package/dist/esm/dockview/components/watermark/watermark.js +3 -1
  104. package/dist/esm/dockview/defaultGroupPanelView.d.ts +1 -5
  105. package/dist/esm/dockview/defaultGroupPanelView.js +5 -16
  106. package/dist/esm/dockview/deserializer.d.ts +0 -12
  107. package/dist/esm/dockview/deserializer.js +1 -27
  108. package/dist/esm/dockview/dockviewComponent.d.ts +6 -8
  109. package/dist/esm/dockview/dockviewComponent.js +56 -41
  110. package/dist/esm/dockview/options.d.ts +11 -1
  111. package/dist/esm/gridview/baseComponentGridview.d.ts +4 -2
  112. package/dist/esm/gridview/baseComponentGridview.js +1 -1
  113. package/dist/esm/gridview/gridviewComponent.d.ts +1 -0
  114. package/dist/esm/gridview/gridviewComponent.js +15 -7
  115. package/dist/esm/groupview/groupview.d.ts +20 -18
  116. package/dist/esm/groupview/groupview.js +42 -40
  117. package/dist/esm/groupview/groupviewPanel.d.ts +2 -2
  118. package/dist/esm/groupview/tab.d.ts +1 -0
  119. package/dist/esm/groupview/tab.js +3 -1
  120. package/dist/esm/groupview/titlebar/tabsContainer.d.ts +3 -5
  121. package/dist/esm/groupview/titlebar/tabsContainer.js +3 -5
  122. package/dist/esm/groupview/types.d.ts +0 -4
  123. package/dist/esm/index.d.ts +2 -0
  124. package/dist/esm/index.js +1 -0
  125. package/dist/esm/paneview/defaultPaneviewHeader.d.ts +3 -0
  126. package/dist/esm/paneview/defaultPaneviewHeader.js +32 -6
  127. package/dist/esm/paneview/draggablePaneviewPanel.d.ts +3 -1
  128. package/dist/esm/paneview/draggablePaneviewPanel.js +24 -9
  129. package/dist/esm/paneview/options.d.ts +2 -0
  130. package/dist/esm/paneview/paneviewComponent.d.ts +14 -1
  131. package/dist/esm/paneview/paneviewComponent.js +17 -6
  132. package/dist/esm/react/deserializer.js +13 -5
  133. package/dist/esm/react/dockview/defaultTab.d.ts +4 -0
  134. package/dist/esm/react/dockview/defaultTab.js +34 -0
  135. package/dist/esm/react/dockview/dockview.d.ts +5 -3
  136. package/dist/esm/react/dockview/dockview.js +30 -1
  137. package/dist/esm/react/dockview/groupControlsRenderer.d.ts +43 -0
  138. package/dist/esm/react/dockview/groupControlsRenderer.js +68 -0
  139. package/dist/esm/react/dockview/reactContentPart.d.ts +1 -16
  140. package/dist/esm/react/dockview/reactContentPart.js +2 -14
  141. package/dist/esm/react/dockview/reactHeaderPart.d.ts +2 -0
  142. package/dist/esm/react/dockview/reactHeaderPart.js +4 -0
  143. package/dist/esm/react/index.d.ts +2 -2
  144. package/dist/esm/react/index.js +1 -2
  145. package/dist/esm/react/paneview/paneview.d.ts +2 -0
  146. package/dist/esm/react/paneview/paneview.js +9 -0
  147. package/dist/esm/react/react.d.ts +1 -0
  148. package/dist/esm/react/react.js +12 -2
  149. package/dist/esm/react/svg.d.ts +3 -0
  150. package/dist/esm/react/svg.js +7 -0
  151. package/dist/esm/splitview/splitviewComponent.d.ts +2 -0
  152. package/dist/esm/splitview/splitviewComponent.js +9 -6
  153. package/dist/esm/svg.d.ts +3 -0
  154. package/dist/esm/svg.js +31 -0
  155. package/dist/styles/dockview.css +158 -40
  156. package/package.json +2 -2
@@ -21,6 +21,7 @@ export interface CommonApi<T = any> {
21
21
  layout(width: number, height: number): void;
22
22
  fromJSON(data: T): void;
23
23
  toJSON(): T;
24
+ clear(): void;
24
25
  }
25
26
  export declare class SplitviewApi implements CommonApi<SerializedSplitview> {
26
27
  private readonly component;
@@ -45,6 +46,7 @@ export declare class SplitviewApi implements CommonApi<SerializedSplitview> {
45
46
  movePanel(from: number, to: number): void;
46
47
  fromJSON(data: SerializedSplitview): void;
47
48
  toJSON(): SerializedSplitview;
49
+ clear(): void;
48
50
  }
49
51
  export declare class PaneviewApi implements CommonApi<SerializedPaneview> {
50
52
  private readonly component;
@@ -67,6 +69,7 @@ export declare class PaneviewApi implements CommonApi<SerializedPaneview> {
67
69
  addPanel(options: AddPaneviewComponentOptions): IPaneviewPanel;
68
70
  fromJSON(data: SerializedPaneview): void;
69
71
  toJSON(): SerializedPaneview;
72
+ clear(): void;
70
73
  }
71
74
  export declare class GridviewApi implements CommonApi<SerializedGridview> {
72
75
  private readonly component;
@@ -77,9 +80,9 @@ export declare class GridviewApi implements CommonApi<SerializedGridview> {
77
80
  get width(): number;
78
81
  get height(): number;
79
82
  get onDidLayoutChange(): Event<void>;
80
- get onDidAddGroup(): Event<IGridviewPanel>;
81
- get onDidRemoveGroup(): Event<IGridviewPanel>;
82
- get onDidActiveGroupChange(): Event<IGridviewPanel | undefined>;
83
+ get onDidAddPanel(): Event<IGridviewPanel>;
84
+ get onDidRemovePanel(): Event<IGridviewPanel>;
85
+ get onDidActivePanelChange(): Event<IGridviewPanel | undefined>;
83
86
  get onDidLayoutFromJSON(): Event<void>;
84
87
  get panels(): IGridviewPanel[];
85
88
  get orientation(): Orientation;
@@ -97,6 +100,7 @@ export declare class GridviewApi implements CommonApi<SerializedGridview> {
97
100
  getPanel(id: string): IGridviewPanel | undefined;
98
101
  fromJSON(data: SerializedGridview): void;
99
102
  toJSON(): SerializedGridview;
103
+ clear(): void;
100
104
  }
101
105
  export declare class DockviewApi implements CommonApi<SerializedDockview> {
102
106
  private readonly component;
@@ -136,4 +140,5 @@ export declare class DockviewApi implements CommonApi<SerializedDockview> {
136
140
  getGroup(id: string): GroupPanel | undefined;
137
141
  fromJSON(data: SerializedDockview): void;
138
142
  toJSON(): SerializedDockview;
143
+ clear(): void;
139
144
  }
@@ -63,6 +63,9 @@ export class SplitviewApi {
63
63
  toJSON() {
64
64
  return this.component.toJSON();
65
65
  }
66
+ clear() {
67
+ this.component.clear();
68
+ }
66
69
  }
67
70
  export class PaneviewApi {
68
71
  constructor(component) {
@@ -130,6 +133,9 @@ export class PaneviewApi {
130
133
  toJSON() {
131
134
  return this.component.toJSON();
132
135
  }
136
+ clear() {
137
+ this.component.clear();
138
+ }
133
139
  }
134
140
  export class GridviewApi {
135
141
  constructor(component) {
@@ -156,13 +162,13 @@ export class GridviewApi {
156
162
  get onDidLayoutChange() {
157
163
  return this.component.onDidLayoutChange;
158
164
  }
159
- get onDidAddGroup() {
165
+ get onDidAddPanel() {
160
166
  return this.component.onDidAddGroup;
161
167
  }
162
- get onDidRemoveGroup() {
168
+ get onDidRemovePanel() {
163
169
  return this.component.onDidRemoveGroup;
164
170
  }
165
- get onDidActiveGroupChange() {
171
+ get onDidActivePanelChange() {
166
172
  return this.component.onDidActiveGroupChange;
167
173
  }
168
174
  get onDidLayoutFromJSON() {
@@ -201,6 +207,9 @@ export class GridviewApi {
201
207
  toJSON() {
202
208
  return this.component.toJSON();
203
209
  }
210
+ clear() {
211
+ this.component.clear();
212
+ }
204
213
  }
205
214
  export class DockviewApi {
206
215
  constructor(component) {
@@ -249,7 +258,7 @@ export class DockviewApi {
249
258
  return this.component.onDidRemovePanel;
250
259
  }
251
260
  get onDidLayoutFromJSON() {
252
- return this.component.onDidLayoutfromJSON;
261
+ return this.component.onDidLayoutFromJSON;
253
262
  }
254
263
  get onDidLayoutChange() {
255
264
  return this.component.onDidLayoutChange;
@@ -311,4 +320,7 @@ export class DockviewApi {
311
320
  toJSON() {
312
321
  return this.component.toJSON();
313
322
  }
323
+ clear() {
324
+ this.component.clear();
325
+ }
314
326
  }
@@ -7,7 +7,7 @@ export declare enum Position {
7
7
  Right = "Right",
8
8
  Center = "Center"
9
9
  }
10
- declare type Quadrant = 'top' | 'bottom' | 'left' | 'right';
10
+ export declare type Quadrant = 'top' | 'bottom' | 'left' | 'right';
11
11
  export interface DroptargetEvent {
12
12
  position: Position;
13
13
  nativeEvent: DragEvent;
@@ -35,4 +35,3 @@ export declare class Droptarget extends CompositeDisposable {
35
35
  private calculateQuadrant;
36
36
  private removeDropTarget;
37
37
  }
38
- export {};
@@ -2,6 +2,7 @@ import { CompositeDisposable } from '../../../lifecycle';
2
2
  import { ITabRenderer, GroupPanelPartInitParameters } from '../../../groupview/types';
3
3
  import { PanelUpdateEvent } from '../../../panel/types';
4
4
  import { GroupPanel } from '../../../groupview/groupviewPanel';
5
+ export declare const DEFAULT_TAB_IDENTIFIER = "__default__tab__";
5
6
  export declare class DefaultTab extends CompositeDisposable implements ITabRenderer {
6
7
  private _element;
7
8
  private _isPanelVisible;
@@ -1,5 +1,7 @@
1
1
  import { CompositeDisposable } from '../../../lifecycle';
2
2
  import { addDisposableListener } from '../../../events';
3
+ import { createCloseButton } from '../../../svg';
4
+ export const DEFAULT_TAB_IDENTIFIER = '__default__tab__';
3
5
  export class DefaultTab extends CompositeDisposable {
4
6
  constructor() {
5
7
  super();
@@ -19,8 +21,9 @@ export class DefaultTab extends CompositeDisposable {
19
21
  this._list = document.createElement('ul');
20
22
  this._list.className = 'tab-list';
21
23
  //
22
- this.action = document.createElement('a');
24
+ this.action = document.createElement('div');
23
25
  this.action.className = 'tab-action';
26
+ this.action.appendChild(createCloseButton());
24
27
  //
25
28
  this._element.appendChild(this._content);
26
29
  this._element.appendChild(this._actionContainer);
@@ -36,7 +39,7 @@ export class DefaultTab extends CompositeDisposable {
36
39
  return this._element;
37
40
  }
38
41
  get id() {
39
- return '__DEFAULT_TAB__';
42
+ return DEFAULT_TAB_IDENTIFIER;
40
43
  }
41
44
  update(event) {
42
45
  this.params = Object.assign(Object.assign({}, this.params), event.params);
@@ -2,6 +2,7 @@ import { ActionContainer } from '../../../actionbar/actionsContainer';
2
2
  import { addDisposableListener } from '../../../events';
3
3
  import { toggleClass } from '../../../dom';
4
4
  import { CompositeDisposable } from '../../../lifecycle';
5
+ import { createCloseButton } from '../../../svg';
5
6
  export class Watermark extends CompositeDisposable {
6
7
  constructor() {
7
8
  super();
@@ -18,8 +19,9 @@ export class Watermark extends CompositeDisposable {
18
19
  const actions = new ActionContainer();
19
20
  title.appendChild(emptySpace);
20
21
  title.appendChild(actions.element);
21
- const closeAnchor = document.createElement('a');
22
+ const closeAnchor = document.createElement('div');
22
23
  closeAnchor.className = 'close-action';
24
+ closeAnchor.appendChild(createCloseButton());
23
25
  actions.add(closeAnchor);
24
26
  this.addDisposables(addDisposableListener(closeAnchor, 'click', (ev) => {
25
27
  var _a;
@@ -1,11 +1,10 @@
1
- import { GroupPanelPartInitParameters, IActionsRenderer, IContentRenderer, ITabRenderer } from '../groupview/types';
1
+ import { GroupPanelPartInitParameters, IContentRenderer, ITabRenderer } from '../groupview/types';
2
2
  import { GroupPanel } from '../groupview/groupviewPanel';
3
3
  import { IDisposable } from '../lifecycle';
4
4
  import { GroupPanelUpdateEvent } from '../groupview/groupPanel';
5
5
  export interface IGroupPanelView extends IDisposable {
6
6
  readonly content: IContentRenderer;
7
7
  readonly tab?: ITabRenderer;
8
- readonly actions?: IActionsRenderer;
9
8
  update(event: GroupPanelUpdateEvent): void;
10
9
  layout(width: number, height: number): void;
11
10
  init(params: GroupPanelPartInitParameters): void;
@@ -15,14 +14,11 @@ export interface IGroupPanelView extends IDisposable {
15
14
  export declare class DefaultGroupPanelView implements IGroupPanelView {
16
15
  private readonly _content;
17
16
  private readonly _tab;
18
- private readonly _actions;
19
17
  get content(): IContentRenderer;
20
18
  get tab(): ITabRenderer;
21
- get actions(): IActionsRenderer | undefined;
22
19
  constructor(renderers: {
23
20
  content: IContentRenderer;
24
21
  tab?: ITabRenderer;
25
- actions?: IActionsRenderer;
26
22
  });
27
23
  init(params: GroupPanelPartInitParameters): void;
28
24
  updateParentGroup(group: GroupPanel, isPanelVisible: boolean): void;
@@ -4,16 +4,6 @@ export class DefaultGroupPanelView {
4
4
  var _a;
5
5
  this._content = renderers.content;
6
6
  this._tab = (_a = renderers.tab) !== null && _a !== void 0 ? _a : new DefaultTab();
7
- this._actions =
8
- renderers.actions ||
9
- (this.content.actions
10
- ? {
11
- element: this.content.actions,
12
- dispose: () => {
13
- //
14
- },
15
- }
16
- : undefined);
17
7
  }
18
8
  get content() {
19
9
  return this._content;
@@ -21,9 +11,6 @@ export class DefaultGroupPanelView {
21
11
  get tab() {
22
12
  return this._tab;
23
13
  }
24
- get actions() {
25
- return this._actions;
26
- }
27
14
  init(params) {
28
15
  this.content.init(Object.assign(Object.assign({}, params), { tab: this.tab }));
29
16
  this.tab.init(params);
@@ -41,15 +28,17 @@ export class DefaultGroupPanelView {
41
28
  this.tab.update(event);
42
29
  }
43
30
  toJSON() {
31
+ let tab = this.tab instanceof DefaultTab ? undefined : this.tab.toJSON();
32
+ if (tab && Object.keys(tab).length === 0) {
33
+ tab = undefined;
34
+ }
44
35
  return {
45
36
  content: this.content.toJSON(),
46
- tab: this.tab instanceof DefaultTab ? undefined : this.tab.toJSON(),
37
+ tab,
47
38
  };
48
39
  }
49
40
  dispose() {
50
- var _a;
51
41
  this.content.dispose();
52
42
  this.tab.dispose();
53
- (_a = this.actions) === null || _a === void 0 ? void 0 : _a.dispose();
54
43
  }
55
44
  }
@@ -1,17 +1,5 @@
1
- import { IGridView, ISerializedLeafNode, IViewDeserializer } from '../gridview/gridview';
2
1
  import { GroupviewPanelState, IDockviewPanel } from '../groupview/groupPanel';
3
- import { GroupPanelViewState } from '../groupview/groupview';
4
2
  import { GroupPanel } from '../groupview/groupviewPanel';
5
- import { DockviewComponent } from './dockviewComponent';
6
3
  export interface IPanelDeserializer {
7
4
  fromJSON(panelData: GroupviewPanelState, group: GroupPanel): IDockviewPanel;
8
5
  }
9
- export interface PanelDeserializerOptions {
10
- createPanel: (id: string, group: GroupPanel) => IDockviewPanel;
11
- }
12
- export declare class DefaultDeserializer implements IViewDeserializer {
13
- private readonly layout;
14
- private panelDeserializer;
15
- constructor(layout: DockviewComponent, panelDeserializer: PanelDeserializerOptions);
16
- fromJSON(node: ISerializedLeafNode<GroupPanelViewState>): IGridView;
17
- }
@@ -1,27 +1 @@
1
- export class DefaultDeserializer {
2
- constructor(layout, panelDeserializer) {
3
- this.layout = layout;
4
- this.panelDeserializer = panelDeserializer;
5
- }
6
- fromJSON(node) {
7
- const data = node.data;
8
- const children = data.views;
9
- const active = data.activeView;
10
- const group = this.layout.createGroup({
11
- id: data.id,
12
- locked: !!data.locked,
13
- hideHeader: !!data.hideHeader,
14
- });
15
- for (const child of children) {
16
- const panel = this.panelDeserializer.createPanel(child, group);
17
- const isActive = typeof active === 'string' && active === panel.id;
18
- group.model.openPanel(panel, {
19
- skipSetActive: !isActive,
20
- });
21
- }
22
- if (!group.activePanel && group.panels.length > 0) {
23
- group.model.openPanel(group.panels[group.panels.length - 1]);
24
- }
25
- return group;
26
- }
27
- }
1
+ export {};
@@ -34,9 +34,10 @@ export interface SerializedDockview {
34
34
  tabHeight?: number;
35
35
  };
36
36
  }
37
- export declare type DockviewComponentUpdateOptions = Pick<DockviewComponentOptions, 'orientation' | 'components' | 'frameworkComponents' | 'tabComponents' | 'frameworkTabComponents' | 'showDndOverlay' | 'watermarkFrameworkComponent'>;
37
+ export declare type DockviewComponentUpdateOptions = Pick<DockviewComponentOptions, 'orientation' | 'components' | 'frameworkComponents' | 'tabComponents' | 'frameworkTabComponents' | 'showDndOverlay' | 'watermarkFrameworkComponent' | 'defaultTabComponent' | 'createGroupControlElement'>;
38
38
  export interface DockviewDropEvent extends GroupviewDropEvent {
39
39
  api: DockviewApi;
40
+ group: GroupPanel;
40
41
  }
41
42
  export interface IDockviewComponent extends IBaseGrid<GroupPanel> {
42
43
  readonly activePanel: IDockviewPanel | undefined;
@@ -53,11 +54,9 @@ export interface IDockviewComponent extends IBaseGrid<GroupPanel> {
53
54
  addPanel(options: AddPanelOptions): IDockviewPanel;
54
55
  removePanel(panel: IDockviewPanel): void;
55
56
  getGroupPanel: (id: string) => IDockviewPanel | undefined;
56
- fireMouseEvent(event: LayoutMouseEvent): void;
57
57
  createWatermarkComponent(): IWatermarkRenderer;
58
58
  addEmptyGroup(options?: AddGroupOptions): void;
59
59
  closeAllGroups(): void;
60
- onTabInteractionEvent: Event<LayoutMouseEvent>;
61
60
  onTabContextMenu: Event<TabContextMenuEvent>;
62
61
  moveToNext(options?: MovementOptions): void;
63
62
  moveToPrevious(options?: MovementOptions): void;
@@ -67,15 +66,13 @@ export interface IDockviewComponent extends IBaseGrid<GroupPanel> {
67
66
  fromJSON(data: SerializedDockview): void;
68
67
  readonly onDidRemovePanel: Event<IDockviewPanel>;
69
68
  readonly onDidAddPanel: Event<IDockviewPanel>;
70
- readonly onDidLayoutfromJSON: Event<void>;
69
+ readonly onDidLayoutFromJSON: Event<void>;
71
70
  readonly onDidActivePanelChange: Event<IDockviewPanel | undefined>;
72
71
  }
73
72
  export declare class DockviewComponent extends BaseGrid<GroupPanel> implements IDockviewComponent {
74
73
  private _deserializer;
75
74
  private _api;
76
75
  private _options;
77
- private readonly _onTabInteractionEvent;
78
- readonly onTabInteractionEvent: Event<LayoutMouseEvent>;
79
76
  private readonly _onTabContextMenu;
80
77
  readonly onTabContextMenu: Event<TabContextMenuEvent>;
81
78
  private readonly _onDidDrop;
@@ -84,8 +81,8 @@ export declare class DockviewComponent extends BaseGrid<GroupPanel> implements I
84
81
  readonly onDidRemovePanel: Event<IDockviewPanel>;
85
82
  private readonly _onDidAddPanel;
86
83
  readonly onDidAddPanel: Event<IDockviewPanel>;
87
- private readonly _onDidLayoutfromJSON;
88
- readonly onDidLayoutfromJSON: Event<void>;
84
+ private readonly _onDidLayoutFromJSON;
85
+ readonly onDidLayoutFromJSON: Event<void>;
89
86
  private readonly _onDidActivePanelChange;
90
87
  readonly onDidActivePanelChange: Event<IDockviewPanel | undefined>;
91
88
  get totalPanels(): number;
@@ -110,6 +107,7 @@ export declare class DockviewComponent extends BaseGrid<GroupPanel> implements I
110
107
  */
111
108
  toJSON(): SerializedDockview;
112
109
  fromJSON(data: SerializedDockview): void;
110
+ clear(): void;
113
111
  closeAllGroups(): void;
114
112
  fireMouseEvent(event: LayoutMouseEvent): void;
115
113
  addPanel(options: AddPanelOptions): IDockviewPanel;
@@ -6,14 +6,12 @@ import { CompositeDisposable } from '../lifecycle';
6
6
  import { Event, Emitter } from '../events';
7
7
  import { Watermark } from './components/watermark/watermark';
8
8
  import { sequentialNumberGenerator } from '../math';
9
- import { DefaultDeserializer } from './deserializer';
10
9
  import { createComponent } from '../panel/componentFactory';
11
10
  import { BaseGrid, toTarget, } from '../gridview/baseComponentGridview';
12
11
  import { DockviewApi } from '../api/component.api';
13
12
  import { MouseEventKind } from '../groupview/tab';
14
13
  import { Orientation } from '../splitview/core/splitview';
15
14
  import { DefaultTab } from './components/tab/defaultTab';
16
- import { GroupChangeKind2, } from '../groupview/groupview';
17
15
  import { GroupPanel } from '../groupview/groupviewPanel';
18
16
  import { DefaultGroupPanelView } from './defaultGroupPanelView';
19
17
  const nextGroupId = sequentialNumberGenerator();
@@ -24,9 +22,6 @@ export class DockviewComponent extends BaseGrid {
24
22
  orientation: options.orientation || Orientation.HORIZONTAL,
25
23
  styles: options.styles,
26
24
  });
27
- // events
28
- this._onTabInteractionEvent = new Emitter();
29
- this.onTabInteractionEvent = this._onTabInteractionEvent.event;
30
25
  this._onTabContextMenu = new Emitter();
31
26
  this.onTabContextMenu = this._onTabContextMenu.event;
32
27
  this._onDidDrop = new Emitter();
@@ -35,11 +30,11 @@ export class DockviewComponent extends BaseGrid {
35
30
  this.onDidRemovePanel = this._onDidRemovePanel.event;
36
31
  this._onDidAddPanel = new Emitter();
37
32
  this.onDidAddPanel = this._onDidAddPanel.event;
38
- this._onDidLayoutfromJSON = new Emitter();
39
- this.onDidLayoutfromJSON = this._onDidLayoutfromJSON.event;
33
+ this._onDidLayoutFromJSON = new Emitter();
34
+ this.onDidLayoutFromJSON = this._onDidLayoutFromJSON.event;
40
35
  this._onDidActivePanelChange = new Emitter();
41
36
  this.onDidActivePanelChange = this._onDidActivePanelChange.event;
42
- this.addDisposables(this._onTabInteractionEvent, this._onTabContextMenu, this._onDidDrop, Event.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidActivePanelChange)(() => {
37
+ this.addDisposables(this._onTabContextMenu, this._onDidDrop, Event.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidActivePanelChange)(() => {
43
38
  this._bufferOnDidLayoutChange.fire();
44
39
  }));
45
40
  this._options = options;
@@ -94,7 +89,7 @@ export class DockviewComponent extends BaseGrid {
94
89
  }
95
90
  updateOptions(options) {
96
91
  const hasOrientationChanged = typeof options.orientation === 'string' &&
97
- this.options.orientation !== options.orientation;
92
+ this.gridview.orientation !== options.orientation;
98
93
  this._options = Object.assign(Object.assign({}, this.options), options);
99
94
  if (hasOrientationChanged) {
100
95
  this.gridview.orientation = options.orientation;
@@ -172,12 +167,7 @@ export class DockviewComponent extends BaseGrid {
172
167
  };
173
168
  }
174
169
  fromJSON(data) {
175
- const groups = Array.from(this._groups.values()).map((_) => _.value);
176
- for (const group of groups) {
177
- // remove the group will automatically remove the panels
178
- this.removeGroup(group, true);
179
- }
180
- this.gridview.clear();
170
+ this.clear();
181
171
  if (!this.deserializer) {
182
172
  throw new Error('invalid deserializer');
183
173
  }
@@ -188,12 +178,31 @@ export class DockviewComponent extends BaseGrid {
188
178
  if (!this.deserializer) {
189
179
  throw new Error('no deserializer provided');
190
180
  }
191
- this.gridview.deserialize(grid, new DefaultDeserializer(this, {
192
- createPanel: (id, group) => {
193
- const panelData = panels[id];
194
- return this.deserializer.fromJSON(panelData, group);
195
- },
196
- }));
181
+ this.gridview.deserialize(grid, {
182
+ fromJSON: (node) => {
183
+ const { id, locked, hideHeader, views, activeView } = node.data;
184
+ const group = this.createGroup({
185
+ id,
186
+ locked: !!locked,
187
+ hideHeader: !!hideHeader,
188
+ });
189
+ this._onDidAddGroup.fire(group);
190
+ for (const child of views) {
191
+ const panel = this.deserializer.fromJSON(panels[child], group);
192
+ const isActive = typeof activeView === 'string' && activeView === panel.id;
193
+ group.model.openPanel(panel, {
194
+ skipSetPanelActive: !isActive,
195
+ skipSetGroupActive: true
196
+ });
197
+ }
198
+ if (!group.activePanel && group.panels.length > 0) {
199
+ group.model.openPanel(group.panels[group.panels.length - 1], {
200
+ skipSetGroupActive: true
201
+ });
202
+ }
203
+ return group;
204
+ }
205
+ });
197
206
  if (typeof activeGroup === 'string') {
198
207
  const panel = this.getPanel(activeGroup);
199
208
  if (panel) {
@@ -201,7 +210,23 @@ export class DockviewComponent extends BaseGrid {
201
210
  }
202
211
  }
203
212
  this.gridview.layout(this.width, this.height);
204
- this._onDidLayoutfromJSON.fire();
213
+ this._onDidLayoutFromJSON.fire();
214
+ }
215
+ clear() {
216
+ const groups = Array.from(this._groups.values()).map((_) => _.value);
217
+ const hasActiveGroup = !!this.activeGroup;
218
+ const hasActivePanel = !!this.activePanel;
219
+ for (const group of groups) {
220
+ // remove the group will automatically remove the panels
221
+ this.removeGroup(group, true);
222
+ }
223
+ if (hasActiveGroup) {
224
+ this.doSetGroupActive(undefined);
225
+ }
226
+ if (hasActivePanel) {
227
+ this._onDidActivePanelChange.fire(undefined);
228
+ }
229
+ this.gridview.clear();
205
230
  }
206
231
  closeAllGroups() {
207
232
  for (const entry of this._groups.entries()) {
@@ -399,23 +424,13 @@ export class DockviewComponent extends BaseGrid {
399
424
  const { groupId, itemId, target, index } = event;
400
425
  this.moveGroupOrPanel(view, groupId, itemId, target, index);
401
426
  }), view.model.onDidDrop((event) => {
402
- this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api }));
403
- }), view.model.onDidGroupChange((event) => {
404
- switch (event.kind) {
405
- case GroupChangeKind2.ADD_PANEL:
406
- if (event.panel) {
407
- this._onDidAddPanel.fire(event.panel);
408
- }
409
- break;
410
- case GroupChangeKind2.REMOVE_PANEL:
411
- if (event.panel) {
412
- this._onDidRemovePanel.fire(event.panel);
413
- }
414
- break;
415
- case GroupChangeKind2.PANEL_ACTIVE:
416
- this._onDidActivePanelChange.fire(event.panel);
417
- break;
418
- }
427
+ this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api, group: view }));
428
+ }), view.model.onDidAddPanel((event) => {
429
+ this._onDidAddPanel.fire(event.panel);
430
+ }), view.model.onDidRemovePanel((event) => {
431
+ this._onDidRemovePanel.fire(event.panel);
432
+ }), view.model.onDidActivePanelChange((event) => {
433
+ this._onDidActivePanelChange.fire(event.panel);
419
434
  }));
420
435
  this._groups.set(view.id, { value: view, disposable });
421
436
  }
@@ -430,7 +445,7 @@ export class DockviewComponent extends BaseGrid {
430
445
  createPanel(options, group) {
431
446
  const view = new DefaultGroupPanelView({
432
447
  content: this.createContentComponent(options.id, options.component),
433
- tab: this.createTabComponent(options.id, options.tabComponent),
448
+ tab: this.createTabComponent(options.id, options.tabComponent || this.options.defaultTabComponent),
434
449
  });
435
450
  const panel = new DockviewGroupPanel(options.id, this, this._api, group);
436
451
  panel.init({
@@ -463,6 +478,6 @@ export class DockviewComponent extends BaseGrid {
463
478
  this._onDidActivePanelChange.dispose();
464
479
  this._onDidAddPanel.dispose();
465
480
  this._onDidRemovePanel.dispose();
466
- this._onDidLayoutfromJSON.dispose();
481
+ this._onDidLayoutFromJSON.dispose();
467
482
  }
468
483
  }
@@ -7,6 +7,8 @@ import { GroupPanel } from '../groupview/groupviewPanel';
7
7
  import { ISplitviewStyles, Orientation } from '../splitview/core/splitview';
8
8
  import { FrameworkFactory } from '../types';
9
9
  import { DockviewDropTargets } from '../groupview/dnd';
10
+ import { PanelTransfer } from '../dnd/dataTransfer';
11
+ import { IGroupControlRenderer } from '../react/dockview/groupControlsRenderer';
10
12
  export interface GroupPanelFrameworkComponentFactory {
11
13
  content: FrameworkFactory<IContentRenderer>;
12
14
  tab: FrameworkFactory<ITabRenderer>;
@@ -39,6 +41,12 @@ export interface ViewFactoryData {
39
41
  content: string;
40
42
  tab?: string;
41
43
  }
44
+ export interface DockviewDndOverlayEvent {
45
+ nativeEvent: DragEvent;
46
+ target: DockviewDropTargets;
47
+ group: GroupPanel;
48
+ getData: () => PanelTransfer | undefined;
49
+ }
42
50
  export interface DockviewComponentOptions extends DockviewRenderFunctions {
43
51
  watermarkComponent?: WatermarkConstructor;
44
52
  watermarkFrameworkComponent?: any;
@@ -46,7 +54,9 @@ export interface DockviewComponentOptions extends DockviewRenderFunctions {
46
54
  tabHeight?: number;
47
55
  orientation?: Orientation;
48
56
  styles?: ISplitviewStyles;
49
- showDndOverlay?: (event: DragEvent, target: DockviewDropTargets) => boolean;
57
+ defaultTabComponent?: string;
58
+ showDndOverlay?: (event: DockviewDndOverlayEvent) => boolean;
59
+ createGroupControlElement?: (group: GroupPanel) => IGroupControlRenderer;
50
60
  }
51
61
  export interface PanelOptions {
52
62
  component: string;
@@ -1,4 +1,4 @@
1
- import { Event, TickDelayedEvent } from '../events';
1
+ import { Emitter, Event, TickDelayedEvent } from '../events';
2
2
  import { Gridview, IGridView } from './gridview';
3
3
  import { Position } from '../dnd/droptarget';
4
4
  import { CompositeDisposable, IValueDisposable } from '../lifecycle';
@@ -35,6 +35,7 @@ export interface IBaseGrid<T extends IGridPanelView> {
35
35
  getPanel(id: string): T | undefined;
36
36
  toJSON(): object;
37
37
  fromJSON(data: any): void;
38
+ clear(): void;
38
39
  layout(width: number, height: number, force?: boolean): void;
39
40
  setVisible(panel: T, visible: boolean): void;
40
41
  isVisible(panel: T): boolean;
@@ -49,7 +50,7 @@ export declare abstract class BaseGrid<T extends IGridPanelView> extends Composi
49
50
  readonly onDidLayoutChange: Event<void>;
50
51
  private readonly _onDidRemoveGroup;
51
52
  readonly onDidRemoveGroup: Event<T>;
52
- private readonly _onDidAddGroup;
53
+ protected readonly _onDidAddGroup: Emitter<T>;
53
54
  readonly onDidAddGroup: Event<T>;
54
55
  private readonly _onDidActiveGroupChange;
55
56
  readonly onDidActiveGroupChange: Event<T | undefined>;
@@ -68,6 +69,7 @@ export declare abstract class BaseGrid<T extends IGridPanelView> extends Composi
68
69
  constructor(_element: HTMLElement, options: BaseGridOptions);
69
70
  abstract toJSON(): object;
70
71
  abstract fromJSON(data: any): void;
72
+ abstract clear(): void;
71
73
  setVisible(panel: T, visible: boolean): void;
72
74
  isVisible(panel: T): boolean;
73
75
  protected doAddGroup(group: T, location?: number[], size?: number): void;
@@ -39,7 +39,7 @@ export class BaseGrid extends CompositeDisposable {
39
39
  this.element.appendChild(this.gridview.element);
40
40
  this.layout(0, 0, true); // set some elements height/widths
41
41
  this.addDisposables(this.gridview.onDidChange(() => {
42
- this._onDidLayoutChange.fire();
42
+ this._bufferOnDidLayoutChange.fire();
43
43
  }));
44
44
  this.addDisposables(Event.any(this.onDidAddGroup, this.onDidRemoveGroup, this.onDidActiveGroupChange)(() => {
45
45
  this._bufferOnDidLayoutChange.fire();
@@ -71,6 +71,7 @@ export declare class GridviewComponent extends BaseGrid<GridviewPanel> implement
71
71
  setActive(panel: GridviewPanel): void;
72
72
  focus(): void;
73
73
  fromJSON(serializedGridview: SerializedGridview): void;
74
+ clear(): void;
74
75
  movePanel(panel: GridviewPanel, options: {
75
76
  direction: Direction;
76
77
  reference: string;