dockview 1.0.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. package/README.md +243 -186
  2. package/dist/cjs/api/component.api.d.ts +32 -23
  3. package/dist/cjs/api/component.api.js +105 -34
  4. package/dist/cjs/api/component.api.js.map +1 -1
  5. package/dist/cjs/api/gridviewPanelApi.js +1 -0
  6. package/dist/cjs/api/gridviewPanelApi.js.map +1 -1
  7. package/dist/cjs/api/groupPanelApi.d.ts +11 -14
  8. package/dist/cjs/api/groupPanelApi.js +19 -17
  9. package/dist/cjs/api/groupPanelApi.js.map +1 -1
  10. package/dist/cjs/api/panelApi.d.ts +0 -25
  11. package/dist/cjs/api/panelApi.js +1 -20
  12. package/dist/cjs/api/panelApi.js.map +1 -1
  13. package/dist/cjs/api/paneviewPanelApi.js +1 -0
  14. package/dist/cjs/api/paneviewPanelApi.js.map +1 -1
  15. package/dist/cjs/api/splitviewPanelApi.d.ts +0 -1
  16. package/dist/cjs/api/splitviewPanelApi.js +1 -5
  17. package/dist/cjs/api/splitviewPanelApi.js.map +1 -1
  18. package/dist/cjs/dnd/abstractDragHandler.d.ts +2 -2
  19. package/dist/cjs/dnd/abstractDragHandler.js +14 -14
  20. package/dist/cjs/dnd/abstractDragHandler.js.map +1 -1
  21. package/dist/cjs/dnd/dataTransfer.d.ts +0 -25
  22. package/dist/cjs/dnd/dataTransfer.js +1 -45
  23. package/dist/cjs/dnd/dataTransfer.js.map +1 -1
  24. package/dist/cjs/dnd/dnd.d.ts +1 -14
  25. package/dist/cjs/dnd/dnd.js +1 -79
  26. package/dist/cjs/dnd/dnd.js.map +1 -1
  27. package/dist/cjs/dnd/droptarget.d.ts +3 -0
  28. package/dist/cjs/dnd/droptarget.js +69 -45
  29. package/dist/cjs/dnd/droptarget.js.map +1 -1
  30. package/dist/cjs/dockview/components/tab/defaultTab.d.ts +0 -1
  31. package/dist/cjs/dockview/components/tab/defaultTab.js +0 -8
  32. package/dist/cjs/dockview/components/tab/defaultTab.js.map +1 -1
  33. package/dist/cjs/dockview/deserializer.js.map +1 -1
  34. package/dist/cjs/dockview/dockviewComponent.d.ts +31 -21
  35. package/dist/cjs/dockview/dockviewComponent.js +103 -207
  36. package/dist/cjs/dockview/dockviewComponent.js.map +1 -1
  37. package/dist/cjs/dockview/dockviewGroupPanel.d.ts +3 -5
  38. package/dist/cjs/dockview/dockviewGroupPanel.js +10 -31
  39. package/dist/cjs/dockview/dockviewGroupPanel.js.map +1 -1
  40. package/dist/cjs/dockview/options.d.ts +2 -1
  41. package/dist/cjs/events.js +25 -4
  42. package/dist/cjs/events.js.map +1 -1
  43. package/dist/cjs/gridview/baseComponentGridview.d.ts +12 -20
  44. package/dist/cjs/gridview/baseComponentGridview.js +23 -45
  45. package/dist/cjs/gridview/baseComponentGridview.js.map +1 -1
  46. package/dist/cjs/gridview/basePanelView.d.ts +5 -8
  47. package/dist/cjs/gridview/basePanelView.js +14 -8
  48. package/dist/cjs/gridview/basePanelView.js.map +1 -1
  49. package/dist/cjs/gridview/branchNode.js +2 -2
  50. package/dist/cjs/gridview/branchNode.js.map +1 -1
  51. package/dist/cjs/gridview/gridview.js +20 -17
  52. package/dist/cjs/gridview/gridview.js.map +1 -1
  53. package/dist/cjs/gridview/gridviewComponent.d.ts +4 -0
  54. package/dist/cjs/gridview/gridviewComponent.js +5 -1
  55. package/dist/cjs/gridview/gridviewComponent.js.map +1 -1
  56. package/dist/cjs/gridview/gridviewPanel.d.ts +0 -1
  57. package/dist/cjs/gridview/gridviewPanel.js +3 -6
  58. package/dist/cjs/gridview/gridviewPanel.js.map +1 -1
  59. package/dist/cjs/gridview/leafNode.js +2 -1
  60. package/dist/cjs/gridview/leafNode.js.map +1 -1
  61. package/dist/cjs/groupview/groupPanel.d.ts +1 -7
  62. package/dist/cjs/groupview/groupview.d.ts +15 -8
  63. package/dist/cjs/groupview/groupview.js +36 -123
  64. package/dist/cjs/groupview/groupview.js.map +1 -1
  65. package/dist/cjs/groupview/groupviewPanel.d.ts +5 -2
  66. package/dist/cjs/groupview/groupviewPanel.js.map +1 -1
  67. package/dist/cjs/groupview/panel/content.js +1 -0
  68. package/dist/cjs/groupview/panel/content.js.map +1 -1
  69. package/dist/cjs/groupview/tab.d.ts +10 -13
  70. package/dist/cjs/groupview/tab.js +22 -80
  71. package/dist/cjs/groupview/tab.js.map +1 -1
  72. package/dist/cjs/groupview/titlebar/tabsContainer.js +4 -6
  73. package/dist/cjs/groupview/titlebar/tabsContainer.js.map +1 -1
  74. package/dist/cjs/index.d.ts +3 -3
  75. package/dist/cjs/index.js +8 -4
  76. package/dist/cjs/index.js.map +1 -1
  77. package/dist/cjs/lifecycle.js +2 -1
  78. package/dist/cjs/lifecycle.js.map +1 -1
  79. package/dist/cjs/panel/types.d.ts +0 -2
  80. package/dist/cjs/paneview/draggablePaneviewPanel.d.ts +2 -2
  81. package/dist/cjs/paneview/draggablePaneviewPanel.js +32 -29
  82. package/dist/cjs/paneview/draggablePaneviewPanel.js.map +1 -1
  83. package/dist/cjs/paneview/paneview.js +4 -3
  84. package/dist/cjs/paneview/paneview.js.map +1 -1
  85. package/dist/cjs/paneview/paneviewComponent.d.ts +5 -5
  86. package/dist/cjs/paneview/paneviewComponent.js +15 -16
  87. package/dist/cjs/paneview/paneviewComponent.js.map +1 -1
  88. package/dist/cjs/paneview/paneviewPanel.d.ts +5 -1
  89. package/dist/cjs/paneview/paneviewPanel.js +14 -2
  90. package/dist/cjs/paneview/paneviewPanel.js.map +1 -1
  91. package/dist/cjs/react/deserializer.js +1 -3
  92. package/dist/cjs/react/deserializer.js.map +1 -1
  93. package/dist/cjs/react/dockview/components.js +5 -1
  94. package/dist/cjs/react/dockview/components.js.map +1 -1
  95. package/dist/cjs/react/dockview/dockview.d.ts +9 -9
  96. package/dist/cjs/react/dockview/dockview.js +28 -2
  97. package/dist/cjs/react/dockview/dockview.js.map +1 -1
  98. package/dist/cjs/react/dockview/reactContentPart.js +4 -4
  99. package/dist/cjs/react/dockview/reactContentPart.js.map +1 -1
  100. package/dist/cjs/react/dockview/reactHeaderPart.js +1 -0
  101. package/dist/cjs/react/dockview/reactHeaderPart.js.map +1 -1
  102. package/dist/cjs/react/dockview/reactWatermarkPart.d.ts +1 -2
  103. package/dist/cjs/react/dockview/reactWatermarkPart.js +1 -2
  104. package/dist/cjs/react/dockview/reactWatermarkPart.js.map +1 -1
  105. package/dist/cjs/react/gridview/gridview.js +9 -2
  106. package/dist/cjs/react/gridview/gridview.js.map +1 -1
  107. package/dist/cjs/react/gridview/view.js +2 -2
  108. package/dist/cjs/react/gridview/view.js.map +1 -1
  109. package/dist/cjs/react/index.d.ts +1 -0
  110. package/dist/cjs/react/index.js +5 -1
  111. package/dist/cjs/react/index.js.map +1 -1
  112. package/dist/cjs/react/paneview/paneview.js +5 -1
  113. package/dist/cjs/react/paneview/paneview.js.map +1 -1
  114. package/dist/cjs/react/react.js +6 -3
  115. package/dist/cjs/react/react.js.map +1 -1
  116. package/dist/cjs/react/splitview/splitview.js +8 -2
  117. package/dist/cjs/react/splitview/splitview.js.map +1 -1
  118. package/dist/cjs/react/splitview/view.js +2 -2
  119. package/dist/cjs/react/splitview/view.js.map +1 -1
  120. package/dist/cjs/splitview/core/splitview.js +2 -2
  121. package/dist/cjs/splitview/core/splitview.js.map +1 -1
  122. package/dist/cjs/splitview/splitviewComponent.d.ts +9 -6
  123. package/dist/cjs/splitview/splitviewComponent.js +12 -1
  124. package/dist/cjs/splitview/splitviewComponent.js.map +1 -1
  125. package/dist/cjs/splitview/splitviewPanel.d.ts +1 -6
  126. package/dist/cjs/splitview/splitviewPanel.js +5 -3
  127. package/dist/cjs/splitview/splitviewPanel.js.map +1 -1
  128. package/dist/dockview.amd.js +592 -745
  129. package/dist/dockview.amd.min.js +2 -16
  130. package/dist/dockview.amd.min.noStyle.js +2 -16
  131. package/dist/dockview.amd.noStyle.js +591 -744
  132. package/dist/dockview.cjs.js +592 -745
  133. package/dist/dockview.esm.js +592 -734
  134. package/dist/dockview.esm.min.js +2 -16
  135. package/dist/dockview.js +592 -745
  136. package/dist/dockview.min.js +2 -16
  137. package/dist/dockview.min.noStyle.js +2 -16
  138. package/dist/dockview.noStyle.js +591 -744
  139. package/dist/esm/api/component.api.d.ts +32 -23
  140. package/dist/esm/api/component.api.js +51 -24
  141. package/dist/esm/api/gridviewPanelApi.js +1 -0
  142. package/dist/esm/api/groupPanelApi.d.ts +11 -14
  143. package/dist/esm/api/groupPanelApi.js +18 -13
  144. package/dist/esm/api/panelApi.d.ts +0 -25
  145. package/dist/esm/api/panelApi.js +1 -20
  146. package/dist/esm/api/paneviewPanelApi.js +1 -0
  147. package/dist/esm/api/splitviewPanelApi.d.ts +0 -1
  148. package/dist/esm/api/splitviewPanelApi.js +1 -5
  149. package/dist/esm/dnd/abstractDragHandler.d.ts +2 -2
  150. package/dist/esm/dnd/abstractDragHandler.js +9 -9
  151. package/dist/esm/dnd/dataTransfer.d.ts +0 -25
  152. package/dist/esm/dnd/dataTransfer.js +0 -40
  153. package/dist/esm/dnd/dnd.d.ts +1 -14
  154. package/dist/esm/dnd/dnd.js +1 -69
  155. package/dist/esm/dnd/droptarget.d.ts +3 -0
  156. package/dist/esm/dnd/droptarget.js +69 -45
  157. package/dist/esm/dockview/components/tab/defaultTab.d.ts +0 -1
  158. package/dist/esm/dockview/components/tab/defaultTab.js +1 -9
  159. package/dist/esm/dockview/dockviewComponent.d.ts +31 -21
  160. package/dist/esm/dockview/dockviewComponent.js +68 -148
  161. package/dist/esm/dockview/dockviewGroupPanel.d.ts +3 -5
  162. package/dist/esm/dockview/dockviewGroupPanel.js +6 -30
  163. package/dist/esm/dockview/options.d.ts +2 -1
  164. package/dist/esm/events.js +2 -3
  165. package/dist/esm/gridview/baseComponentGridview.d.ts +12 -20
  166. package/dist/esm/gridview/baseComponentGridview.js +23 -45
  167. package/dist/esm/gridview/basePanelView.d.ts +5 -8
  168. package/dist/esm/gridview/basePanelView.js +10 -8
  169. package/dist/esm/gridview/branchNode.js +2 -2
  170. package/dist/esm/gridview/gridview.js +17 -15
  171. package/dist/esm/gridview/gridviewComponent.d.ts +4 -0
  172. package/dist/esm/gridview/gridviewComponent.js +6 -2
  173. package/dist/esm/gridview/gridviewPanel.d.ts +0 -1
  174. package/dist/esm/gridview/gridviewPanel.js +3 -6
  175. package/dist/esm/gridview/leafNode.js +1 -0
  176. package/dist/esm/groupview/groupPanel.d.ts +1 -7
  177. package/dist/esm/groupview/groupview.d.ts +15 -8
  178. package/dist/esm/groupview/groupview.js +22 -56
  179. package/dist/esm/groupview/groupviewPanel.d.ts +5 -2
  180. package/dist/esm/groupview/panel/content.js +1 -0
  181. package/dist/esm/groupview/tab.d.ts +10 -13
  182. package/dist/esm/groupview/tab.js +17 -24
  183. package/dist/esm/groupview/titlebar/tabsContainer.js +4 -6
  184. package/dist/esm/index.d.ts +3 -3
  185. package/dist/esm/index.js +1 -2
  186. package/dist/esm/lifecycle.js +2 -1
  187. package/dist/esm/panel/types.d.ts +0 -2
  188. package/dist/esm/paneview/draggablePaneviewPanel.d.ts +2 -2
  189. package/dist/esm/paneview/draggablePaneviewPanel.js +32 -29
  190. package/dist/esm/paneview/paneview.js +2 -2
  191. package/dist/esm/paneview/paneviewComponent.d.ts +5 -5
  192. package/dist/esm/paneview/paneviewComponent.js +15 -8
  193. package/dist/esm/paneview/paneviewPanel.d.ts +5 -1
  194. package/dist/esm/paneview/paneviewPanel.js +10 -2
  195. package/dist/esm/react/deserializer.js +1 -3
  196. package/dist/esm/react/dockview/dockview.d.ts +9 -9
  197. package/dist/esm/react/dockview/dockview.js +24 -2
  198. package/dist/esm/react/dockview/reactContentPart.js +4 -4
  199. package/dist/esm/react/dockview/reactHeaderPart.js +1 -0
  200. package/dist/esm/react/dockview/reactWatermarkPart.d.ts +1 -2
  201. package/dist/esm/react/dockview/reactWatermarkPart.js +1 -2
  202. package/dist/esm/react/gridview/gridview.js +4 -1
  203. package/dist/esm/react/gridview/view.js +2 -2
  204. package/dist/esm/react/index.d.ts +1 -0
  205. package/dist/esm/react/react.js +1 -2
  206. package/dist/esm/react/splitview/splitview.js +3 -1
  207. package/dist/esm/react/splitview/view.js +2 -2
  208. package/dist/esm/splitview/core/splitview.js +2 -2
  209. package/dist/esm/splitview/splitviewComponent.d.ts +9 -6
  210. package/dist/esm/splitview/splitviewComponent.js +11 -2
  211. package/dist/esm/splitview/splitviewPanel.d.ts +1 -6
  212. package/dist/esm/splitview/splitviewPanel.js +5 -3
  213. package/dist/styles/dockview.css +51 -54
  214. package/package.json +11 -11
  215. package/dist/cjs/functions.d.ts +0 -1
  216. package/dist/cjs/functions.js +0 -42
  217. package/dist/cjs/functions.js.map +0 -1
  218. package/dist/cjs/groupview/panel/hostedPanel.d.ts +0 -22
  219. package/dist/cjs/groupview/panel/hostedPanel.js +0 -57
  220. package/dist/cjs/groupview/panel/hostedPanel.js.map +0 -1
  221. package/dist/cjs/json.d.ts +0 -1
  222. package/dist/cjs/json.js +0 -14
  223. package/dist/cjs/json.js.map +0 -1
  224. package/dist/esm/functions.d.ts +0 -1
  225. package/dist/esm/functions.js +0 -8
  226. package/dist/esm/groupview/panel/hostedPanel.d.ts +0 -22
  227. package/dist/esm/groupview/panel/hostedPanel.js +0 -43
  228. package/dist/esm/json.d.ts +0 -1
  229. package/dist/esm/json.js +0 -9
@@ -6,9 +6,10 @@ import { IWatermarkRenderer } from '../groupview/types';
6
6
  import { IPanelDeserializer } from './deserializer';
7
7
  import { AddGroupOptions, AddPanelOptions, DockviewOptions as DockviewComponentOptions, MovementOptions, TabContextMenuEvent } from './options';
8
8
  import { BaseGrid, IBaseGrid } from '../gridview/baseComponentGridview';
9
+ import { DockviewApi } from '../api/component.api';
9
10
  import { LayoutMouseEvent } from '../groupview/tab';
10
11
  import { Orientation } from '../splitview/core/splitview';
11
- import { GroupOptions, GroupPanelViewState } from '../groupview/groupview';
12
+ import { GroupOptions, GroupPanelViewState, GroupviewDropEvent } from '../groupview/groupview';
12
13
  import { GroupviewPanel } from '../groupview/groupviewPanel';
13
14
  export interface PanelReference {
14
15
  update: (event: {
@@ -33,11 +34,15 @@ export interface SerializedDockview {
33
34
  tabHeight?: number;
34
35
  };
35
36
  }
36
- export declare type DockviewComponentUpdateOptions = Pick<DockviewComponentOptions, 'orientation' | 'components' | 'frameworkComponents' | 'tabComponents' | 'frameworkTabComponents'>;
37
+ export declare type DockviewComponentUpdateOptions = Pick<DockviewComponentOptions, 'orientation' | 'components' | 'frameworkComponents' | 'tabComponents' | 'frameworkTabComponents' | 'showDndOverlay' | 'watermarkFrameworkComponent'>;
38
+ export interface DockviewDropEvent extends GroupviewDropEvent {
39
+ api: DockviewApi;
40
+ }
37
41
  export interface IDockviewComponent extends IBaseGrid<GroupviewPanel> {
38
42
  readonly activePanel: IGroupPanel | undefined;
39
43
  readonly totalPanels: number;
40
44
  readonly panels: IGroupPanel[];
45
+ readonly onDidDrop: Event<DockviewDropEvent>;
41
46
  tabHeight: number | undefined;
42
47
  deserializer: IPanelDeserializer | undefined;
43
48
  updateOptions(options: DockviewComponentUpdateOptions): void;
@@ -51,7 +56,7 @@ export interface IDockviewComponent extends IBaseGrid<GroupviewPanel> {
51
56
  fireMouseEvent(event: LayoutMouseEvent): void;
52
57
  createWatermarkComponent(): IWatermarkRenderer;
53
58
  addEmptyGroup(options?: AddGroupOptions): void;
54
- closeAllGroups: () => Promise<boolean>;
59
+ closeAllGroups(): void;
55
60
  onTabInteractionEvent: Event<LayoutMouseEvent>;
56
61
  onTabContextMenu: Event<TabContextMenuEvent>;
57
62
  moveToNext(options?: MovementOptions): void;
@@ -60,19 +65,29 @@ export interface IDockviewComponent extends IBaseGrid<GroupviewPanel> {
60
65
  focus(): void;
61
66
  toJSON(): SerializedDockview;
62
67
  fromJSON(data: SerializedDockview): void;
68
+ readonly onDidRemovePanel: Event<IGroupPanel>;
69
+ readonly onDidAddPanel: Event<IGroupPanel>;
70
+ readonly onDidLayoutfromJSON: Event<void>;
71
+ readonly onDidActivePanelChange: Event<IGroupPanel | undefined>;
63
72
  }
64
73
  export declare class DockviewComponent extends BaseGrid<GroupviewPanel> implements IDockviewComponent {
65
- private readonly _panels;
66
- private readonly dirtyPanels;
67
- private readonly debouncedDeque;
74
+ private _deserializer;
75
+ private _api;
76
+ private _options;
68
77
  private readonly _onTabInteractionEvent;
69
78
  readonly onTabInteractionEvent: Event<LayoutMouseEvent>;
70
79
  private readonly _onTabContextMenu;
71
80
  readonly onTabContextMenu: Event<TabContextMenuEvent>;
72
- private _deserializer;
73
- private panelState;
74
- private _api;
75
- private _options;
81
+ private readonly _onDidDrop;
82
+ readonly onDidDrop: Event<DockviewDropEvent>;
83
+ private readonly _onDidRemovePanel;
84
+ readonly onDidRemovePanel: Event<IGroupPanel>;
85
+ private readonly _onDidAddPanel;
86
+ readonly onDidAddPanel: Event<IGroupPanel>;
87
+ private readonly _onDidLayoutfromJSON;
88
+ readonly onDidLayoutfromJSON: Event<void>;
89
+ private readonly _onDidActivePanelChange;
90
+ readonly onDidActivePanelChange: Event<IGroupPanel | undefined>;
76
91
  get totalPanels(): number;
77
92
  get panels(): IGroupPanel[];
78
93
  get deserializer(): IPanelDeserializer | undefined;
@@ -88,8 +103,6 @@ export declare class DockviewComponent extends BaseGrid<GroupviewPanel> implemen
88
103
  setActivePanel(panel: IGroupPanel): void;
89
104
  moveToNext(options?: MovementOptions): void;
90
105
  moveToPrevious(options?: MovementOptions): void;
91
- private registerPanel;
92
- private unregisterPanel;
93
106
  /**
94
107
  * Serialize the current state of the layout
95
108
  *
@@ -97,25 +110,22 @@ export declare class DockviewComponent extends BaseGrid<GroupviewPanel> implemen
97
110
  */
98
111
  toJSON(): SerializedDockview;
99
112
  fromJSON(data: SerializedDockview): void;
100
- closeAllGroups(): Promise<boolean>;
113
+ closeAllGroups(): void;
101
114
  fireMouseEvent(event: LayoutMouseEvent): void;
102
115
  addPanel(options: AddPanelOptions): IGroupPanel;
103
- removePanel(panel: IGroupPanel): void;
116
+ removePanel(panel: IGroupPanel, options?: {
117
+ removeEmptyGroup: boolean;
118
+ }): void;
104
119
  createWatermarkComponent(): IWatermarkRenderer;
105
120
  addEmptyGroup(options: AddGroupOptions): void;
106
- removeGroup(group: GroupviewPanel): void;
121
+ removeGroup(group: GroupviewPanel, skipActive?: boolean): void;
107
122
  moveGroupOrPanel(referenceGroup: GroupviewPanel, groupId: string, itemId: string, target: Position, index?: number): void;
108
123
  doSetGroupActive(group: GroupviewPanel | undefined, skipFocus?: boolean): void;
109
124
  createGroup(options?: GroupOptions): GroupviewPanel;
110
- dispose(): void;
111
- /**
112
- * Ensure the local copy of the layout state is up-to-date
113
- */
114
- private syncConfigs;
115
125
  private _addPanel;
116
126
  private createContentComponent;
117
127
  private createTabComponent;
118
128
  private addPanelToNewGroup;
119
129
  private findGroup;
120
- private addDirtyPanel;
130
+ dispose(): void;
121
131
  }
@@ -25,42 +25,6 @@ var __assign = (this && this.__assign) || function () {
25
25
  };
26
26
  return __assign.apply(this, arguments);
27
27
  };
28
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
29
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
30
- return new (P || (P = Promise))(function (resolve, reject) {
31
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
32
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
33
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
34
- step((generator = generator.apply(thisArg, _arguments || [])).next());
35
- });
36
- };
37
- var __generator = (this && this.__generator) || function (thisArg, body) {
38
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
39
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
40
- function verb(n) { return function (v) { return step([n, v]); }; }
41
- function step(op) {
42
- if (f) throw new TypeError("Generator is already executing.");
43
- while (_) try {
44
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
45
- if (y = 0, t) op = [op[0] & 2, t.value];
46
- switch (op[0]) {
47
- case 0: case 1: t = op; break;
48
- case 4: _.label++; return { value: op[1], done: false };
49
- case 5: _.label++; y = op[1]; op = [0]; continue;
50
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
51
- default:
52
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
53
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
54
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
55
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
56
- if (t[2]) _.ops.pop();
57
- _.trys.pop(); continue;
58
- }
59
- op = body.call(thisArg, _);
60
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
61
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
62
- }
63
- };
64
28
  var __values = (this && this.__values) || function(o) {
65
29
  var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
66
30
  if (m) return m.call(o);
@@ -106,7 +70,6 @@ var dockviewGroupPanel_1 = require("./dockviewGroupPanel");
106
70
  var lifecycle_1 = require("../lifecycle");
107
71
  var events_1 = require("../events");
108
72
  var watermark_1 = require("./components/watermark/watermark");
109
- var functions_1 = require("../functions");
110
73
  var math_1 = require("../math");
111
74
  var deserializer_1 = require("./deserializer");
112
75
  var componentFactory_1 = require("../panel/componentFactory");
@@ -127,15 +90,24 @@ var DockviewComponent = /** @class */ (function (_super) {
127
90
  orientation: options.orientation || splitview_1.Orientation.HORIZONTAL,
128
91
  styles: options.styles,
129
92
  }) || this;
130
- _this._panels = new Map();
131
- _this.dirtyPanels = new Set();
132
- _this.debouncedDeque = (0, functions_1.debounce)(_this.syncConfigs.bind(_this), 5000);
133
93
  // events
134
94
  _this._onTabInteractionEvent = new events_1.Emitter();
135
95
  _this.onTabInteractionEvent = _this._onTabInteractionEvent.event;
136
96
  _this._onTabContextMenu = new events_1.Emitter();
137
97
  _this.onTabContextMenu = _this._onTabContextMenu.event;
138
- _this.panelState = {};
98
+ _this._onDidDrop = new events_1.Emitter();
99
+ _this.onDidDrop = _this._onDidDrop.event;
100
+ _this._onDidRemovePanel = new events_1.Emitter();
101
+ _this.onDidRemovePanel = _this._onDidRemovePanel.event;
102
+ _this._onDidAddPanel = new events_1.Emitter();
103
+ _this.onDidAddPanel = _this._onDidAddPanel.event;
104
+ _this._onDidLayoutfromJSON = new events_1.Emitter();
105
+ _this.onDidLayoutfromJSON = _this._onDidLayoutfromJSON.event;
106
+ _this._onDidActivePanelChange = new events_1.Emitter();
107
+ _this.onDidActivePanelChange = _this._onDidActivePanelChange.event;
108
+ _this.addDisposables(_this._onTabInteractionEvent, _this._onTabContextMenu, _this._onDidDrop, events_1.Event.any(_this.onDidAddPanel, _this.onDidRemovePanel, _this.onDidActivePanelChange)(function () {
109
+ _this._bufferOnDidLayoutChange.fire();
110
+ }));
139
111
  _this._options = options;
140
112
  if (!_this.options.components) {
141
113
  _this.options.components = {};
@@ -158,14 +130,14 @@ var DockviewComponent = /** @class */ (function (_super) {
158
130
  }
159
131
  Object.defineProperty(DockviewComponent.prototype, "totalPanels", {
160
132
  get: function () {
161
- return this._panels.size;
133
+ return this.panels.length;
162
134
  },
163
135
  enumerable: false,
164
136
  configurable: true
165
137
  });
166
138
  Object.defineProperty(DockviewComponent.prototype, "panels", {
167
139
  get: function () {
168
- return Array.from(this._panels.values()).map(function (_) { return _.value; });
140
+ return this.groups.flatMap(function (group) { return group.model.panels; });
169
141
  },
170
142
  enumerable: false,
171
143
  configurable: true
@@ -214,10 +186,6 @@ var DockviewComponent = /** @class */ (function (_super) {
214
186
  DockviewComponent.prototype.updateOptions = function (options) {
215
187
  var hasOrientationChanged = typeof options.orientation === 'string' &&
216
188
  this.options.orientation !== options.orientation;
217
- // TODO support style update
218
- // const hasStylesChanged =
219
- // typeof options.styles === 'object' &&
220
- // this.options.styles !== options.styles;
221
189
  this._options = __assign(__assign({}, this.options), options);
222
190
  if (hasOrientationChanged) {
223
191
  this.gridview.orientation = options.orientation;
@@ -229,8 +197,7 @@ var DockviewComponent = /** @class */ (function (_super) {
229
197
  (_a = this.activeGroup) === null || _a === void 0 ? void 0 : _a.focus();
230
198
  };
231
199
  DockviewComponent.prototype.getGroupPanel = function (id) {
232
- var _a;
233
- return (_a = this._panels.get(id)) === null || _a === void 0 ? void 0 : _a.value;
200
+ return this.panels.find(function (panel) { return panel.id === id; });
234
201
  };
235
202
  DockviewComponent.prototype.setActivePanel = function (panel) {
236
203
  if (!panel.group) {
@@ -281,39 +248,16 @@ var DockviewComponent = /** @class */ (function (_super) {
281
248
  this.doSetGroupActive(next);
282
249
  }
283
250
  };
284
- DockviewComponent.prototype.registerPanel = function (panel) {
285
- var _this = this;
286
- if (this._panels.has(panel.id)) {
287
- throw new Error("panel ".concat(panel.id, " already exists"));
288
- }
289
- var disposable = new lifecycle_1.CompositeDisposable(panel.onDidStateChange(function () { return _this.addDirtyPanel(panel); }));
290
- this._panels.set(panel.id, { value: panel, disposable: disposable });
291
- };
292
- DockviewComponent.prototype.unregisterPanel = function (panel) {
293
- if (!this._panels.has(panel.id)) {
294
- throw new Error("panel ".concat(panel.id, " doesn't exist"));
295
- }
296
- var item = this._panels.get(panel.id);
297
- if (item) {
298
- item.disposable.dispose();
299
- item.value.dispose();
300
- }
301
- this._panels.delete(panel.id);
302
- };
303
251
  /**
304
252
  * Serialize the current state of the layout
305
253
  *
306
254
  * @returns A JSON respresentation of the layout
307
255
  */
308
256
  DockviewComponent.prototype.toJSON = function () {
309
- var _this = this;
310
257
  var _a;
311
- this.syncConfigs();
312
258
  var data = this.gridview.serialize();
313
- var panels = Array.from(this._panels.values()).reduce(function (collection, panel) {
314
- if (!_this.panelState[panel.value.id]) {
315
- collection[panel.value.id] = panel.value.toJSON();
316
- }
259
+ var panels = this.panels.reduce(function (collection, panel) {
260
+ collection[panel.id] = panel.toJSON();
317
261
  return collection;
318
262
  }, {});
319
263
  return {
@@ -324,14 +268,24 @@ var DockviewComponent = /** @class */ (function (_super) {
324
268
  };
325
269
  };
326
270
  DockviewComponent.prototype.fromJSON = function (data) {
271
+ var e_1, _a;
327
272
  var _this = this;
273
+ var groups = Array.from(this._groups.values()).map(function (_) { return _.value; });
274
+ try {
275
+ for (var groups_1 = __values(groups), groups_1_1 = groups_1.next(); !groups_1_1.done; groups_1_1 = groups_1.next()) {
276
+ var group = groups_1_1.value;
277
+ // remove the group will automatically remove the panels
278
+ this.removeGroup(group, true);
279
+ }
280
+ }
281
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
282
+ finally {
283
+ try {
284
+ if (groups_1_1 && !groups_1_1.done && (_a = groups_1.return)) _a.call(groups_1);
285
+ }
286
+ finally { if (e_1) throw e_1.error; }
287
+ }
328
288
  this.gridview.clear();
329
- this._panels.forEach(function (panel) {
330
- panel.disposable.dispose();
331
- panel.value.dispose();
332
- });
333
- this._panels.clear();
334
- this._groups.clear();
335
289
  if (!this.deserializer) {
336
290
  throw new Error('invalid deserializer');
337
291
  }
@@ -345,9 +299,7 @@ var DockviewComponent = /** @class */ (function (_super) {
345
299
  this.gridview.deserialize(grid, new deserializer_1.DefaultDeserializer(this, {
346
300
  createPanel: function (id) {
347
301
  var panelData = panels[id];
348
- var panel = _this.deserializer.fromJSON(panelData);
349
- _this.registerPanel(panel);
350
- return panel;
302
+ return _this.deserializer.fromJSON(panelData);
351
303
  },
352
304
  }));
353
305
  if (typeof activeGroup === 'string') {
@@ -357,59 +309,34 @@ var DockviewComponent = /** @class */ (function (_super) {
357
309
  }
358
310
  }
359
311
  this.gridview.layout(this.width, this.height);
360
- this._onGridEvent.fire({ kind: baseComponentGridview_1.GroupChangeKind.LAYOUT_FROM_JSON });
312
+ this._onDidLayoutfromJSON.fire();
361
313
  };
362
314
  DockviewComponent.prototype.closeAllGroups = function () {
363
- return __awaiter(this, void 0, void 0, function () {
364
- var _a, _b, entry, _c, _, group, didCloseAll, e_1_1;
365
- var e_1, _d;
366
- return __generator(this, function (_e) {
367
- switch (_e.label) {
368
- case 0:
369
- _e.trys.push([0, 5, 6, 7]);
370
- _a = __values(this._groups.entries()), _b = _a.next();
371
- _e.label = 1;
372
- case 1:
373
- if (!!_b.done) return [3 /*break*/, 4];
374
- entry = _b.value;
375
- _c = __read(entry, 2), _ = _c[0], group = _c[1];
376
- return [4 /*yield*/, group.value.model.closeAllPanels()];
377
- case 2:
378
- didCloseAll = _e.sent();
379
- if (!didCloseAll) {
380
- return [2 /*return*/, false];
381
- }
382
- _e.label = 3;
383
- case 3:
384
- _b = _a.next();
385
- return [3 /*break*/, 1];
386
- case 4: return [3 /*break*/, 7];
387
- case 5:
388
- e_1_1 = _e.sent();
389
- e_1 = { error: e_1_1 };
390
- return [3 /*break*/, 7];
391
- case 6:
392
- try {
393
- if (_b && !_b.done && (_d = _a.return)) _d.call(_a);
394
- }
395
- finally { if (e_1) throw e_1.error; }
396
- return [7 /*endfinally*/];
397
- case 7: return [2 /*return*/, true];
398
- }
399
- });
400
- });
315
+ var e_2, _a;
316
+ try {
317
+ for (var _b = __values(this._groups.entries()), _c = _b.next(); !_c.done; _c = _b.next()) {
318
+ var entry = _c.value;
319
+ var _d = __read(entry, 2), _ = _d[0], group = _d[1];
320
+ group.value.model.closeAllPanels();
321
+ }
322
+ }
323
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
324
+ finally {
325
+ try {
326
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
327
+ }
328
+ finally { if (e_2) throw e_2.error; }
329
+ }
401
330
  };
402
331
  DockviewComponent.prototype.fireMouseEvent = function (event) {
403
- switch (event.kind) {
404
- case tab_1.MouseEventKind.CONTEXT_MENU:
405
- if (event.tab && event.panel) {
406
- this._onTabContextMenu.fire({
407
- event: event.event,
408
- api: this._api,
409
- panel: event.panel,
410
- });
411
- }
412
- break;
332
+ if (event.kind === tab_1.MouseEventKind.CONTEXT_MENU) {
333
+ if (event.tab && event.panel) {
334
+ this._onTabContextMenu.fire({
335
+ event: event.event,
336
+ api: this._api,
337
+ panel: event.panel,
338
+ });
339
+ }
413
340
  }
414
341
  };
415
342
  DockviewComponent.prototype.addPanel = function (options) {
@@ -442,14 +369,14 @@ var DockviewComponent = /** @class */ (function (_super) {
442
369
  }
443
370
  return panel;
444
371
  };
445
- DockviewComponent.prototype.removePanel = function (panel) {
446
- this.unregisterPanel(panel);
372
+ DockviewComponent.prototype.removePanel = function (panel, options) {
373
+ if (options === void 0) { options = { removeEmptyGroup: true }; }
447
374
  var group = panel.group;
448
375
  if (!group) {
449
376
  throw new Error("cannot remove panel ".concat(panel.id, ". it's missing a group."));
450
377
  }
451
378
  group.model.removePanel(panel);
452
- if (group.model.size === 0) {
379
+ if (group.model.size === 0 && options.removeEmptyGroup) {
453
380
  this.removeGroup(group);
454
381
  }
455
382
  };
@@ -462,10 +389,9 @@ var DockviewComponent = /** @class */ (function (_super) {
462
389
  : {}, (_a = this.options.frameworkComponentFactory) === null || _a === void 0 ? void 0 : _a.watermark);
463
390
  };
464
391
  DockviewComponent.prototype.addEmptyGroup = function (options) {
465
- var _a;
466
392
  var group = this.createGroup();
467
393
  if (options) {
468
- var referencePanel = (_a = this._panels.get(options.referencePanel)) === null || _a === void 0 ? void 0 : _a.value;
394
+ var referencePanel = this.panels.find(function (panel) { return panel.id === options.referencePanel; });
469
395
  if (!referencePanel) {
470
396
  throw new Error("reference panel ".concat(options.referencePanel, " does not exist"));
471
397
  }
@@ -482,26 +408,35 @@ var DockviewComponent = /** @class */ (function (_super) {
482
408
  this.doAddGroup(group);
483
409
  }
484
410
  };
485
- DockviewComponent.prototype.removeGroup = function (group) {
486
- var _this = this;
411
+ DockviewComponent.prototype.removeGroup = function (group, skipActive) {
412
+ var e_3, _a;
413
+ if (skipActive === void 0) { skipActive = false; }
487
414
  var panels = __spreadArray([], __read(group.model.panels), false); // reassign since group panels will mutate
488
- panels.forEach(function (panel) {
489
- _this.removePanel(panel);
490
- });
491
- if (this._groups.size === 1) {
492
- this._activeGroup = group;
493
- return;
415
+ try {
416
+ for (var panels_1 = __values(panels), panels_1_1 = panels_1.next(); !panels_1_1.done; panels_1_1 = panels_1.next()) {
417
+ var panel = panels_1_1.value;
418
+ this.removePanel(panel, {
419
+ removeEmptyGroup: false,
420
+ });
421
+ }
422
+ }
423
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
424
+ finally {
425
+ try {
426
+ if (panels_1_1 && !panels_1_1.done && (_a = panels_1.return)) _a.call(panels_1);
427
+ }
428
+ finally { if (e_3) throw e_3.error; }
494
429
  }
495
- _super.prototype.removeGroup.call(this, group);
430
+ _super.prototype.doRemoveGroup.call(this, group, { skipActive: skipActive });
496
431
  };
497
432
  DockviewComponent.prototype.moveGroupOrPanel = function (referenceGroup, groupId, itemId, target, index) {
498
- var _a, _b, _c;
433
+ var _a;
499
434
  var sourceGroup = groupId
500
435
  ? (_a = this._groups.get(groupId)) === null || _a === void 0 ? void 0 : _a.value
501
436
  : undefined;
502
437
  if (!target || target === droptarget_1.Position.Center) {
503
438
  var groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(itemId)) ||
504
- ((_b = this._panels.get(itemId)) === null || _b === void 0 ? void 0 : _b.value);
439
+ this.panels.find(function (panel) { return panel.id === itemId; });
505
440
  if (!groupItem) {
506
441
  throw new Error("No panel with id ".concat(itemId));
507
442
  }
@@ -514,9 +449,9 @@ var DockviewComponent = /** @class */ (function (_super) {
514
449
  var referenceLocation = (0, gridview_1.getGridLocation)(referenceGroup.element);
515
450
  var targetLocation = (0, gridview_1.getRelativeLocation)(this.gridview.orientation, referenceLocation, target);
516
451
  if (sourceGroup && sourceGroup.model.size < 2) {
517
- var _d = __read((0, array_1.tail)(targetLocation), 2), targetParentLocation = _d[0], to = _d[1];
452
+ var _b = __read((0, array_1.tail)(targetLocation), 2), targetParentLocation = _b[0], to = _b[1];
518
453
  var sourceLocation = (0, gridview_1.getGridLocation)(sourceGroup.element);
519
- var _e = __read((0, array_1.tail)(sourceLocation), 2), sourceParentLocation = _e[0], from = _e[1];
454
+ var _c = __read((0, array_1.tail)(sourceLocation), 2), sourceParentLocation = _c[0], from = _c[1];
520
455
  if ((0, array_1.sequenceEquals)(sourceParentLocation, targetParentLocation)) {
521
456
  // special case when 'swapping' two views within same grid location
522
457
  // if a group has one tab - we are essentially moving the 'group'
@@ -537,7 +472,7 @@ var DockviewComponent = /** @class */ (function (_super) {
537
472
  }
538
473
  else {
539
474
  var groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(itemId)) ||
540
- ((_c = this._panels.get(itemId)) === null || _c === void 0 ? void 0 : _c.value);
475
+ this.panels.find(function (panel) { return panel.id === itemId; });
541
476
  if (!groupItem) {
542
477
  throw new Error("No panel with id ".concat(itemId));
543
478
  }
@@ -551,10 +486,7 @@ var DockviewComponent = /** @class */ (function (_super) {
551
486
  var isGroupAlreadyFocused = this._activeGroup === group;
552
487
  _super.prototype.doSetGroupActive.call(this, group, skipFocus);
553
488
  if (!isGroupAlreadyFocused && ((_a = this._activeGroup) === null || _a === void 0 ? void 0 : _a.model.activePanel)) {
554
- this._onGridEvent.fire({
555
- kind: baseComponentGridview_1.GroupChangeKind.PANEL_ACTIVE,
556
- panel: (_b = this._activeGroup) === null || _b === void 0 ? void 0 : _b.model.activePanel,
557
- });
489
+ this._onDidActivePanelChange.fire((_b = this._activeGroup) === null || _b === void 0 ? void 0 : _b.model.activePanel);
558
490
  }
559
491
  };
560
492
  DockviewComponent.prototype.createGroup = function (options) {
@@ -581,31 +513,22 @@ var DockviewComponent = /** @class */ (function (_super) {
581
513
  var disposable = new lifecycle_1.CompositeDisposable(view.model.onMove(function (event) {
582
514
  var groupId = event.groupId, itemId = event.itemId, target = event.target, index = event.index;
583
515
  _this.moveGroupOrPanel(view, groupId, itemId, target, index);
516
+ }), view.model.onDidDrop(function (event) {
517
+ _this._onDidDrop.fire(__assign(__assign({}, event), { api: _this._api }));
584
518
  }), view.model.onDidGroupChange(function (event) {
585
519
  switch (event.kind) {
586
520
  case groupview_1.GroupChangeKind2.ADD_PANEL:
587
- _this._onGridEvent.fire({
588
- kind: baseComponentGridview_1.GroupChangeKind.ADD_PANEL,
589
- panel: event.panel,
590
- });
591
- break;
592
- case groupview_1.GroupChangeKind2.GROUP_ACTIVE:
593
- _this._onGridEvent.fire({
594
- kind: baseComponentGridview_1.GroupChangeKind.GROUP_ACTIVE,
595
- panel: event.panel,
596
- });
521
+ if (event.panel) {
522
+ _this._onDidAddPanel.fire(event.panel);
523
+ }
597
524
  break;
598
525
  case groupview_1.GroupChangeKind2.REMOVE_PANEL:
599
- _this._onGridEvent.fire({
600
- kind: baseComponentGridview_1.GroupChangeKind.REMOVE_PANEL,
601
- panel: event.panel,
602
- });
526
+ if (event.panel) {
527
+ _this._onDidRemovePanel.fire(event.panel);
528
+ }
603
529
  break;
604
530
  case groupview_1.GroupChangeKind2.PANEL_ACTIVE:
605
- _this._onGridEvent.fire({
606
- kind: baseComponentGridview_1.GroupChangeKind.PANEL_ACTIVE,
607
- panel: event.panel,
608
- });
531
+ _this._onDidActivePanelChange.fire(event.panel);
609
532
  break;
610
533
  }
611
534
  }));
@@ -619,47 +542,18 @@ var DockviewComponent = /** @class */ (function (_super) {
619
542
  }
620
543
  return view;
621
544
  };
622
- DockviewComponent.prototype.dispose = function () {
623
- _super.prototype.dispose.call(this);
624
- this._onGridEvent.dispose();
625
- };
626
- /**
627
- * Ensure the local copy of the layout state is up-to-date
628
- */
629
- DockviewComponent.prototype.syncConfigs = function () {
630
- var _this = this;
631
- var dirtyPanels = Array.from(this.dirtyPanels);
632
- if (dirtyPanels.length === 0) {
633
- //
634
- }
635
- this.dirtyPanels.clear();
636
- var partialPanelState = dirtyPanels
637
- .map(function (panel) { return _this._panels.get(panel.id); })
638
- .filter(function (_) { return !!_; })
639
- .reduce(function (collection, panel) {
640
- collection[panel.value.id] = panel.value.toJSON();
641
- return collection;
642
- }, {});
643
- this.panelState = __assign(__assign({}, this.panelState), partialPanelState);
644
- dirtyPanels
645
- .filter(function (p) { return _this._panels.has(p.id); })
646
- .forEach(function (panel) {
647
- panel.setDirty(false);
648
- });
649
- };
650
545
  DockviewComponent.prototype._addPanel = function (options) {
651
546
  var view = new defaultGroupPanelView_1.DefaultGroupPanelView({
652
547
  content: this.createContentComponent(options.id, options.component),
653
548
  tab: this.createTabComponent(options.id, options.tabComponent),
654
549
  });
655
- var panel = new dockviewGroupPanel_1.DockviewGroupPanel(options.id, this._api);
550
+ var panel = new dockviewGroupPanel_1.DockviewGroupPanel(options.id, this, this._api);
656
551
  panel.init({
657
552
  view: view,
658
553
  title: options.title || options.id,
659
554
  suppressClosable: options === null || options === void 0 ? void 0 : options.suppressClosable,
660
555
  params: (options === null || options === void 0 ? void 0 : options.params) || {},
661
556
  });
662
- this.registerPanel(panel);
663
557
  return panel;
664
558
  };
665
559
  DockviewComponent.prototype.createContentComponent = function (id, componentName) {
@@ -682,10 +576,12 @@ var DockviewComponent = /** @class */ (function (_super) {
682
576
  return group.value.model.containsPanel(panel);
683
577
  })) === null || _a === void 0 ? void 0 : _a.value;
684
578
  };
685
- DockviewComponent.prototype.addDirtyPanel = function (panel) {
686
- this.dirtyPanels.add(panel);
687
- panel.setDirty(true);
688
- this.debouncedDeque();
579
+ DockviewComponent.prototype.dispose = function () {
580
+ _super.prototype.dispose.call(this);
581
+ this._onDidActivePanelChange.dispose();
582
+ this._onDidAddPanel.dispose();
583
+ this._onDidRemovePanel.dispose();
584
+ this._onDidLayoutfromJSON.dispose();
689
585
  };
690
586
  return DockviewComponent;
691
587
  }(baseComponentGridview_1.BaseGrid));