dockview-core 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 (294) hide show
  1. package/README.md +52 -0
  2. package/dist/cjs/api/component.api.d.ts +145 -0
  3. package/dist/cjs/api/component.api.js +579 -0
  4. package/dist/cjs/api/component.api.js.map +1 -0
  5. package/dist/cjs/api/dockviewPanelApi.d.ts +34 -0
  6. package/dist/cjs/api/dockviewPanelApi.js +84 -0
  7. package/dist/cjs/api/dockviewPanelApi.js.map +1 -0
  8. package/dist/cjs/api/gridviewPanelApi.d.ts +37 -0
  9. package/dist/cjs/api/gridviewPanelApi.js +48 -0
  10. package/dist/cjs/api/gridviewPanelApi.js.map +1 -0
  11. package/dist/cjs/api/panelApi.d.ts +88 -0
  12. package/dist/cjs/api/panelApi.js +138 -0
  13. package/dist/cjs/api/panelApi.js.map +1 -0
  14. package/dist/cjs/api/paneviewPanelApi.d.ts +26 -0
  15. package/dist/cjs/api/paneviewPanelApi.js +58 -0
  16. package/dist/cjs/api/paneviewPanelApi.js.map +1 -0
  17. package/dist/cjs/api/splitviewPanelApi.d.ts +32 -0
  18. package/dist/cjs/api/splitviewPanelApi.js +48 -0
  19. package/dist/cjs/api/splitviewPanelApi.js.map +1 -0
  20. package/dist/cjs/array.d.ts +12 -0
  21. package/dist/cjs/array.js +59 -0
  22. package/dist/cjs/array.js.map +1 -0
  23. package/dist/cjs/dnd/abstractDragHandler.d.ts +11 -0
  24. package/dist/cjs/dnd/abstractDragHandler.js +126 -0
  25. package/dist/cjs/dnd/abstractDragHandler.js.map +1 -0
  26. package/dist/cjs/dnd/dataTransfer.d.ts +31 -0
  27. package/dist/cjs/dnd/dataTransfer.js +101 -0
  28. package/dist/cjs/dnd/dataTransfer.js.map +1 -0
  29. package/dist/cjs/dnd/dnd.d.ts +27 -0
  30. package/dist/cjs/dnd/dnd.js +60 -0
  31. package/dist/cjs/dnd/dnd.js.map +1 -0
  32. package/dist/cjs/dnd/droptarget.d.ts +42 -0
  33. package/dist/cjs/dnd/droptarget.js +281 -0
  34. package/dist/cjs/dnd/droptarget.js.map +1 -0
  35. package/dist/cjs/dnd/ghost.d.ts +1 -0
  36. package/dist/cjs/dnd/ghost.js +16 -0
  37. package/dist/cjs/dnd/ghost.js.map +1 -0
  38. package/dist/cjs/dnd/groupDragHandler.d.ts +11 -0
  39. package/dist/cjs/dnd/groupDragHandler.js +62 -0
  40. package/dist/cjs/dnd/groupDragHandler.js.map +1 -0
  41. package/dist/cjs/dockview/components/panel/content.d.ts +30 -0
  42. package/dist/cjs/dockview/components/panel/content.js +101 -0
  43. package/dist/cjs/dockview/components/panel/content.js.map +1 -0
  44. package/dist/cjs/dockview/components/tab/defaultTab.d.ts +21 -0
  45. package/dist/cjs/dockview/components/tab/defaultTab.js +106 -0
  46. package/dist/cjs/dockview/components/tab/defaultTab.js.map +1 -0
  47. package/dist/cjs/dockview/components/tab/tab.d.ts +31 -0
  48. package/dist/cjs/dockview/components/tab/tab.js +125 -0
  49. package/dist/cjs/dockview/components/tab/tab.js.map +1 -0
  50. package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts +63 -0
  51. package/dist/cjs/dockview/components/titlebar/tabsContainer.js +248 -0
  52. package/dist/cjs/dockview/components/titlebar/tabsContainer.js.map +1 -0
  53. package/dist/cjs/dockview/components/titlebar/voidContainer.d.ts +15 -0
  54. package/dist/cjs/dockview/components/titlebar/voidContainer.js +74 -0
  55. package/dist/cjs/dockview/components/titlebar/voidContainer.js.map +1 -0
  56. package/dist/cjs/dockview/components/watermark/watermark.d.ts +18 -0
  57. package/dist/cjs/dockview/components/watermark/watermark.js +87 -0
  58. package/dist/cjs/dockview/components/watermark/watermark.js.map +1 -0
  59. package/dist/cjs/dockview/deserializer.d.ts +12 -0
  60. package/dist/cjs/dockview/deserializer.js +46 -0
  61. package/dist/cjs/dockview/deserializer.js.map +1 -0
  62. package/dist/cjs/dockview/dockviewComponent.d.ts +126 -0
  63. package/dist/cjs/dockview/dockviewComponent.js +772 -0
  64. package/dist/cjs/dockview/dockviewComponent.js.map +1 -0
  65. package/dist/cjs/dockview/dockviewGroupPanel.d.ts +31 -0
  66. package/dist/cjs/dockview/dockviewGroupPanel.js +97 -0
  67. package/dist/cjs/dockview/dockviewGroupPanel.js.map +1 -0
  68. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +176 -0
  69. package/dist/cjs/dockview/dockviewGroupPanelModel.js +579 -0
  70. package/dist/cjs/dockview/dockviewGroupPanelModel.js.map +1 -0
  71. package/dist/cjs/dockview/dockviewPanel.d.ts +40 -0
  72. package/dist/cjs/dockview/dockviewPanel.js +150 -0
  73. package/dist/cjs/dockview/dockviewPanel.js.map +1 -0
  74. package/dist/cjs/dockview/dockviewPanelModel.d.ts +34 -0
  75. package/dist/cjs/dockview/dockviewPanelModel.js +93 -0
  76. package/dist/cjs/dockview/dockviewPanelModel.js.map +1 -0
  77. package/dist/cjs/dockview/options.d.ts +116 -0
  78. package/dist/cjs/dockview/options.js +32 -0
  79. package/dist/cjs/dockview/options.js.map +1 -0
  80. package/dist/cjs/dockview/types.d.ts +67 -0
  81. package/dist/cjs/dockview/types.js +11 -0
  82. package/dist/cjs/dockview/types.js.map +1 -0
  83. package/dist/cjs/dom.d.ts +14 -0
  84. package/dist/cjs/dom.js +183 -0
  85. package/dist/cjs/dom.js.map +1 -0
  86. package/dist/cjs/events.d.ts +30 -0
  87. package/dist/cjs/events.js +130 -0
  88. package/dist/cjs/events.js.map +1 -0
  89. package/dist/cjs/gridview/baseComponentGridview.d.ts +87 -0
  90. package/dist/cjs/gridview/baseComponentGridview.js +280 -0
  91. package/dist/cjs/gridview/baseComponentGridview.js.map +1 -0
  92. package/dist/cjs/gridview/basePanelView.d.ts +40 -0
  93. package/dist/cjs/gridview/basePanelView.js +124 -0
  94. package/dist/cjs/gridview/basePanelView.js.map +1 -0
  95. package/dist/cjs/gridview/branchNode.d.ts +49 -0
  96. package/dist/cjs/gridview/branchNode.js +343 -0
  97. package/dist/cjs/gridview/branchNode.js.map +1 -0
  98. package/dist/cjs/gridview/gridview.d.ts +133 -0
  99. package/dist/cjs/gridview/gridview.js +511 -0
  100. package/dist/cjs/gridview/gridview.js.map +1 -0
  101. package/dist/cjs/gridview/gridviewComponent.d.ts +80 -0
  102. package/dist/cjs/gridview/gridviewComponent.js +325 -0
  103. package/dist/cjs/gridview/gridviewComponent.js.map +1 -0
  104. package/dist/cjs/gridview/gridviewPanel.d.ts +65 -0
  105. package/dist/cjs/gridview/gridviewPanel.js +215 -0
  106. package/dist/cjs/gridview/gridviewPanel.js.map +1 -0
  107. package/dist/cjs/gridview/leafNode.d.ts +34 -0
  108. package/dist/cjs/gridview/leafNode.js +171 -0
  109. package/dist/cjs/gridview/leafNode.js.map +1 -0
  110. package/dist/cjs/gridview/options.d.ts +18 -0
  111. package/dist/cjs/gridview/options.js +3 -0
  112. package/dist/cjs/gridview/options.js.map +1 -0
  113. package/dist/cjs/gridview/types.d.ts +3 -0
  114. package/dist/cjs/gridview/types.js +3 -0
  115. package/dist/cjs/gridview/types.js.map +1 -0
  116. package/dist/cjs/index.d.ts +41 -0
  117. package/dist/cjs/index.js +64 -0
  118. package/dist/cjs/index.js.map +1 -0
  119. package/dist/cjs/lifecycle.d.ts +22 -0
  120. package/dist/cjs/lifecycle.js +89 -0
  121. package/dist/cjs/lifecycle.js.map +1 -0
  122. package/dist/cjs/math.d.ts +5 -0
  123. package/dist/cjs/math.js +35 -0
  124. package/dist/cjs/math.js.map +1 -0
  125. package/dist/cjs/panel/componentFactory.d.ts +10 -0
  126. package/dist/cjs/panel/componentFactory.js +31 -0
  127. package/dist/cjs/panel/componentFactory.js.map +1 -0
  128. package/dist/cjs/panel/types.d.ts +33 -0
  129. package/dist/cjs/panel/types.js +3 -0
  130. package/dist/cjs/panel/types.js.map +1 -0
  131. package/dist/cjs/paneview/defaultPaneviewHeader.d.ts +21 -0
  132. package/dist/cjs/paneview/defaultPaneviewHeader.js +91 -0
  133. package/dist/cjs/paneview/defaultPaneviewHeader.js.map +1 -0
  134. package/dist/cjs/paneview/draggablePaneviewPanel.d.ts +21 -0
  135. package/dist/cjs/paneview/draggablePaneviewPanel.js +132 -0
  136. package/dist/cjs/paneview/draggablePaneviewPanel.js.map +1 -0
  137. package/dist/cjs/paneview/options.d.ts +27 -0
  138. package/dist/cjs/paneview/options.js +3 -0
  139. package/dist/cjs/paneview/options.js.map +1 -0
  140. package/dist/cjs/paneview/paneview.d.ts +40 -0
  141. package/dist/cjs/paneview/paneview.js +202 -0
  142. package/dist/cjs/paneview/paneview.js.map +1 -0
  143. package/dist/cjs/paneview/paneviewComponent.d.ts +129 -0
  144. package/dist/cjs/paneview/paneviewComponent.js +395 -0
  145. package/dist/cjs/paneview/paneviewComponent.js.map +1 -0
  146. package/dist/cjs/paneview/paneviewPanel.d.ts +92 -0
  147. package/dist/cjs/paneview/paneviewPanel.js +276 -0
  148. package/dist/cjs/paneview/paneviewPanel.js.map +1 -0
  149. package/dist/cjs/splitview/options.d.ts +26 -0
  150. package/dist/cjs/splitview/options.js +3 -0
  151. package/dist/cjs/splitview/options.js.map +1 -0
  152. package/dist/cjs/splitview/splitview.d.ts +127 -0
  153. package/dist/cjs/splitview/splitview.js +909 -0
  154. package/dist/cjs/splitview/splitview.js.map +1 -0
  155. package/dist/cjs/splitview/splitviewComponent.d.ts +101 -0
  156. package/dist/cjs/splitview/splitviewComponent.js +374 -0
  157. package/dist/cjs/splitview/splitviewComponent.js.map +1 -0
  158. package/dist/cjs/splitview/splitviewPanel.d.ts +45 -0
  159. package/dist/cjs/splitview/splitviewPanel.js +180 -0
  160. package/dist/cjs/splitview/splitviewPanel.js.map +1 -0
  161. package/dist/cjs/splitview/viewItem.d.ts +25 -0
  162. package/dist/cjs/splitview/viewItem.js +120 -0
  163. package/dist/cjs/splitview/viewItem.js.map +1 -0
  164. package/dist/cjs/svg.d.ts +3 -0
  165. package/dist/cjs/svg.js +44 -0
  166. package/dist/cjs/svg.js.map +1 -0
  167. package/dist/cjs/types.d.ts +2 -0
  168. package/dist/cjs/types.js +3 -0
  169. package/dist/cjs/types.js.map +1 -0
  170. package/dist/dockview-core.amd.js +6492 -0
  171. package/dist/dockview-core.amd.min.js +7 -0
  172. package/dist/dockview-core.amd.min.noStyle.js +7 -0
  173. package/dist/dockview-core.amd.noStyle.js +6462 -0
  174. package/dist/dockview-core.cjs.js +6490 -0
  175. package/dist/dockview-core.esm.js +6441 -0
  176. package/dist/dockview-core.esm.min.js +7 -0
  177. package/dist/dockview-core.js +6496 -0
  178. package/dist/dockview-core.min.js +7 -0
  179. package/dist/dockview-core.min.noStyle.js +7 -0
  180. package/dist/dockview-core.noStyle.js +6466 -0
  181. package/dist/esm/api/component.api.d.ts +145 -0
  182. package/dist/esm/api/component.api.js +329 -0
  183. package/dist/esm/api/dockviewPanelApi.d.ts +34 -0
  184. package/dist/esm/api/dockviewPanelApi.js +48 -0
  185. package/dist/esm/api/gridviewPanelApi.d.ts +37 -0
  186. package/dist/esm/api/gridviewPanelApi.js +25 -0
  187. package/dist/esm/api/panelApi.d.ts +88 -0
  188. package/dist/esm/api/panelApi.js +95 -0
  189. package/dist/esm/api/paneviewPanelApi.d.ts +26 -0
  190. package/dist/esm/api/paneviewPanelApi.js +27 -0
  191. package/dist/esm/api/splitviewPanelApi.d.ts +32 -0
  192. package/dist/esm/api/splitviewPanelApi.js +25 -0
  193. package/dist/esm/array.d.ts +12 -0
  194. package/dist/esm/array.js +49 -0
  195. package/dist/esm/dnd/abstractDragHandler.d.ts +11 -0
  196. package/dist/esm/dnd/abstractDragHandler.js +47 -0
  197. package/dist/esm/dnd/dataTransfer.d.ts +31 -0
  198. package/dist/esm/dnd/dataTransfer.js +69 -0
  199. package/dist/esm/dnd/dnd.d.ts +27 -0
  200. package/dist/esm/dnd/dnd.js +36 -0
  201. package/dist/esm/dnd/droptarget.d.ts +42 -0
  202. package/dist/esm/dnd/droptarget.js +250 -0
  203. package/dist/esm/dnd/ghost.d.ts +1 -0
  204. package/dist/esm/dnd/ghost.js +11 -0
  205. package/dist/esm/dnd/groupDragHandler.d.ts +11 -0
  206. package/dist/esm/dnd/groupDragHandler.js +38 -0
  207. package/dist/esm/dockview/components/panel/content.d.ts +30 -0
  208. package/dist/esm/dockview/components/panel/content.js +73 -0
  209. package/dist/esm/dockview/components/tab/defaultTab.d.ts +21 -0
  210. package/dist/esm/dockview/components/tab/defaultTab.js +67 -0
  211. package/dist/esm/dockview/components/tab/tab.d.ts +31 -0
  212. package/dist/esm/dockview/components/tab/tab.js +94 -0
  213. package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts +63 -0
  214. package/dist/esm/dockview/components/titlebar/tabsContainer.js +179 -0
  215. package/dist/esm/dockview/components/titlebar/voidContainer.d.ts +15 -0
  216. package/dist/esm/dockview/components/titlebar/voidContainer.js +47 -0
  217. package/dist/esm/dockview/components/watermark/watermark.d.ts +18 -0
  218. package/dist/esm/dockview/components/watermark/watermark.js +60 -0
  219. package/dist/esm/dockview/deserializer.d.ts +12 -0
  220. package/dist/esm/dockview/deserializer.js +40 -0
  221. package/dist/esm/dockview/dockviewComponent.d.ts +126 -0
  222. package/dist/esm/dockview/dockviewComponent.js +612 -0
  223. package/dist/esm/dockview/dockviewGroupPanel.d.ts +31 -0
  224. package/dist/esm/dockview/dockviewGroupPanel.js +50 -0
  225. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +176 -0
  226. package/dist/esm/dockview/dockviewGroupPanelModel.js +449 -0
  227. package/dist/esm/dockview/dockviewPanel.d.ts +40 -0
  228. package/dist/esm/dockview/dockviewPanel.js +104 -0
  229. package/dist/esm/dockview/dockviewPanelModel.d.ts +34 -0
  230. package/dist/esm/dockview/dockviewPanelModel.js +68 -0
  231. package/dist/esm/dockview/options.d.ts +116 -0
  232. package/dist/esm/dockview/options.js +24 -0
  233. package/dist/esm/dockview/types.d.ts +67 -0
  234. package/dist/esm/dockview/types.js +7 -0
  235. package/dist/esm/dom.d.ts +14 -0
  236. package/dist/esm/dom.js +113 -0
  237. package/dist/esm/events.d.ts +30 -0
  238. package/dist/esm/events.js +88 -0
  239. package/dist/esm/gridview/baseComponentGridview.d.ts +87 -0
  240. package/dist/esm/gridview/baseComponentGridview.js +189 -0
  241. package/dist/esm/gridview/basePanelView.d.ts +40 -0
  242. package/dist/esm/gridview/basePanelView.js +74 -0
  243. package/dist/esm/gridview/branchNode.d.ts +49 -0
  244. package/dist/esm/gridview/branchNode.js +218 -0
  245. package/dist/esm/gridview/gridview.d.ts +133 -0
  246. package/dist/esm/gridview/gridview.js +423 -0
  247. package/dist/esm/gridview/gridviewComponent.d.ts +80 -0
  248. package/dist/esm/gridview/gridviewComponent.js +237 -0
  249. package/dist/esm/gridview/gridviewPanel.d.ts +65 -0
  250. package/dist/esm/gridview/gridviewPanel.js +151 -0
  251. package/dist/esm/gridview/leafNode.d.ts +34 -0
  252. package/dist/esm/gridview/leafNode.js +103 -0
  253. package/dist/esm/gridview/options.d.ts +18 -0
  254. package/dist/esm/gridview/options.js +1 -0
  255. package/dist/esm/gridview/types.d.ts +3 -0
  256. package/dist/esm/gridview/types.js +1 -0
  257. package/dist/esm/index.d.ts +41 -0
  258. package/dist/esm/index.js +35 -0
  259. package/dist/esm/lifecycle.d.ts +22 -0
  260. package/dist/esm/lifecycle.js +39 -0
  261. package/dist/esm/math.d.ts +5 -0
  262. package/dist/esm/math.js +28 -0
  263. package/dist/esm/panel/componentFactory.d.ts +10 -0
  264. package/dist/esm/panel/componentFactory.js +24 -0
  265. package/dist/esm/panel/types.d.ts +33 -0
  266. package/dist/esm/panel/types.js +1 -0
  267. package/dist/esm/paneview/defaultPaneviewHeader.d.ts +21 -0
  268. package/dist/esm/paneview/defaultPaneviewHeader.js +63 -0
  269. package/dist/esm/paneview/draggablePaneviewPanel.d.ts +21 -0
  270. package/dist/esm/paneview/draggablePaneviewPanel.js +92 -0
  271. package/dist/esm/paneview/options.d.ts +27 -0
  272. package/dist/esm/paneview/options.js +1 -0
  273. package/dist/esm/paneview/paneview.d.ts +40 -0
  274. package/dist/esm/paneview/paneview.js +145 -0
  275. package/dist/esm/paneview/paneviewComponent.d.ts +129 -0
  276. package/dist/esm/paneview/paneviewComponent.js +270 -0
  277. package/dist/esm/paneview/paneviewPanel.d.ts +92 -0
  278. package/dist/esm/paneview/paneviewPanel.js +192 -0
  279. package/dist/esm/splitview/options.d.ts +26 -0
  280. package/dist/esm/splitview/options.js +1 -0
  281. package/dist/esm/splitview/splitview.d.ts +127 -0
  282. package/dist/esm/splitview/splitview.js +689 -0
  283. package/dist/esm/splitview/splitviewComponent.d.ts +101 -0
  284. package/dist/esm/splitview/splitviewComponent.js +249 -0
  285. package/dist/esm/splitview/splitviewPanel.d.ts +45 -0
  286. package/dist/esm/splitview/splitviewPanel.js +108 -0
  287. package/dist/esm/splitview/viewItem.d.ts +25 -0
  288. package/dist/esm/splitview/viewItem.js +74 -0
  289. package/dist/esm/svg.d.ts +3 -0
  290. package/dist/esm/svg.js +31 -0
  291. package/dist/esm/types.d.ts +2 -0
  292. package/dist/esm/types.js +1 -0
  293. package/dist/styles/dockview.css +615 -0
  294. package/package.json +68 -0
@@ -0,0 +1,612 @@
1
+ import { getRelativeLocation, getGridLocation, } from '../gridview/gridview';
2
+ import { directionToPosition, Droptarget } from '../dnd/droptarget';
3
+ import { tail, sequenceEquals } from '../array';
4
+ import { DockviewPanel } from './dockviewPanel';
5
+ import { CompositeDisposable } from '../lifecycle';
6
+ import { Event, Emitter } from '../events';
7
+ import { Watermark } from './components/watermark/watermark';
8
+ import { DockviewDropTargets, } from './types';
9
+ import { sequentialNumberGenerator } from '../math';
10
+ import { DefaultDockviewDeserialzier } from './deserializer';
11
+ import { createComponent } from '../panel/componentFactory';
12
+ import { isGroupOptionsWithGroup, isGroupOptionsWithPanel, isPanelOptionsWithGroup, isPanelOptionsWithPanel, } from './options';
13
+ import { BaseGrid, toTarget, } from '../gridview/baseComponentGridview';
14
+ import { DockviewApi } from '../api/component.api';
15
+ import { Orientation, Sizing } from '../splitview/splitview';
16
+ import { DockviewGroupPanel } from './dockviewGroupPanel';
17
+ import { DockviewPanelModel } from './dockviewPanelModel';
18
+ import { getPanelData } from '../dnd/dataTransfer';
19
+ export class DockviewComponent extends BaseGrid {
20
+ get orientation() {
21
+ return this.gridview.orientation;
22
+ }
23
+ get totalPanels() {
24
+ return this.panels.length;
25
+ }
26
+ get panels() {
27
+ return this.groups.flatMap((group) => group.panels);
28
+ }
29
+ get options() {
30
+ return this._options;
31
+ }
32
+ get activePanel() {
33
+ const activeGroup = this.activeGroup;
34
+ if (!activeGroup) {
35
+ return undefined;
36
+ }
37
+ return activeGroup.activePanel;
38
+ }
39
+ set tabHeight(height) {
40
+ this.options.tabHeight = height;
41
+ this._groups.forEach((value) => {
42
+ value.value.model.header.height = height;
43
+ });
44
+ }
45
+ get tabHeight() {
46
+ return this.options.tabHeight;
47
+ }
48
+ constructor(element, options) {
49
+ super(element, {
50
+ proportionalLayout: true,
51
+ orientation: options.orientation || Orientation.HORIZONTAL,
52
+ styles: options.styles,
53
+ });
54
+ this.nextGroupId = sequentialNumberGenerator();
55
+ this._deserializer = new DefaultDockviewDeserialzier(this);
56
+ this.watermark = null;
57
+ this._onDidDrop = new Emitter();
58
+ this.onDidDrop = this._onDidDrop.event;
59
+ this._onDidRemovePanel = new Emitter();
60
+ this.onDidRemovePanel = this._onDidRemovePanel.event;
61
+ this._onDidAddPanel = new Emitter();
62
+ this.onDidAddPanel = this._onDidAddPanel.event;
63
+ this._onDidLayoutFromJSON = new Emitter();
64
+ this.onDidLayoutFromJSON = this._onDidLayoutFromJSON.event;
65
+ this._onDidActivePanelChange = new Emitter();
66
+ this.onDidActivePanelChange = this._onDidActivePanelChange.event;
67
+ this.element.classList.add('dv-dockview');
68
+ this.addDisposables(this._onDidDrop, Event.any(this.onDidAddGroup, this.onDidRemoveGroup)(() => {
69
+ this.updateWatermark();
70
+ }), Event.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidActivePanelChange)(() => {
71
+ this._bufferOnDidLayoutChange.fire();
72
+ }));
73
+ this._options = options;
74
+ if (!this.options.components) {
75
+ this.options.components = {};
76
+ }
77
+ if (!this.options.frameworkComponents) {
78
+ this.options.frameworkComponents = {};
79
+ }
80
+ if (!this.options.frameworkTabComponents) {
81
+ this.options.frameworkTabComponents = {};
82
+ }
83
+ if (!this.options.tabComponents) {
84
+ this.options.tabComponents = {};
85
+ }
86
+ if (!this.options.watermarkComponent &&
87
+ !this.options.watermarkFrameworkComponent) {
88
+ this.options.watermarkComponent = Watermark;
89
+ }
90
+ const dropTarget = new Droptarget(this.element, {
91
+ canDisplayOverlay: (event, position) => {
92
+ const data = getPanelData();
93
+ if (data) {
94
+ if (data.viewId !== this.id) {
95
+ return false;
96
+ }
97
+ return true;
98
+ }
99
+ if (this.options.showDndOverlay) {
100
+ return this.options.showDndOverlay({
101
+ nativeEvent: event,
102
+ position: position,
103
+ target: DockviewDropTargets.Edge,
104
+ getData: getPanelData,
105
+ });
106
+ }
107
+ return false;
108
+ },
109
+ acceptedTargetZones: ['top', 'bottom', 'left', 'right'],
110
+ overlayModel: {
111
+ activationSize: { type: 'pixels', value: 10 },
112
+ size: { type: 'pixels', value: 20 },
113
+ },
114
+ });
115
+ this.addDisposables(dropTarget, dropTarget.onDrop((event) => {
116
+ const data = getPanelData();
117
+ if (data) {
118
+ this.moveGroupOrPanel(this.orthogonalize(event.position), data.groupId, data.panelId || undefined, 'center');
119
+ }
120
+ else {
121
+ this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api, group: null, getData: getPanelData }));
122
+ }
123
+ }));
124
+ this._api = new DockviewApi(this);
125
+ this.updateWatermark();
126
+ }
127
+ orthogonalize(position) {
128
+ switch (position) {
129
+ case 'top':
130
+ case 'bottom':
131
+ if (this.gridview.orientation === Orientation.HORIZONTAL) {
132
+ // we need to add to a vertical splitview but the current root is a horizontal splitview.
133
+ // insert a vertical splitview at the root level and add the existing view as a child
134
+ this.gridview.insertOrthogonalSplitviewAtRoot();
135
+ }
136
+ break;
137
+ case 'left':
138
+ case 'right':
139
+ if (this.gridview.orientation === Orientation.VERTICAL) {
140
+ // we need to add to a horizontal splitview but the current root is a vertical splitview.
141
+ // insert a horiziontal splitview at the root level and add the existing view as a child
142
+ this.gridview.insertOrthogonalSplitviewAtRoot();
143
+ }
144
+ break;
145
+ default:
146
+ break;
147
+ }
148
+ switch (position) {
149
+ case 'top':
150
+ case 'left':
151
+ return this.createGroupAtLocation([0]); // insert into first position
152
+ case 'bottom':
153
+ case 'right':
154
+ return this.createGroupAtLocation([this.gridview.length]); // insert into last position
155
+ default:
156
+ throw new Error(`unsupported position ${position}`);
157
+ }
158
+ }
159
+ updateOptions(options) {
160
+ const hasOrientationChanged = typeof options.orientation === 'string' &&
161
+ this.gridview.orientation !== options.orientation;
162
+ this._options = Object.assign(Object.assign({}, this.options), options);
163
+ if (hasOrientationChanged) {
164
+ this.gridview.orientation = options.orientation;
165
+ }
166
+ this.layout(this.gridview.width, this.gridview.height, true);
167
+ }
168
+ focus() {
169
+ var _a;
170
+ (_a = this.activeGroup) === null || _a === void 0 ? void 0 : _a.focus();
171
+ }
172
+ getGroupPanel(id) {
173
+ return this.panels.find((panel) => panel.id === id);
174
+ }
175
+ setActivePanel(panel) {
176
+ this.doSetGroupActive(panel.group);
177
+ panel.group.model.openPanel(panel);
178
+ }
179
+ moveToNext(options = {}) {
180
+ var _a;
181
+ if (!options.group) {
182
+ if (!this.activeGroup) {
183
+ return;
184
+ }
185
+ options.group = this.activeGroup;
186
+ }
187
+ if (options.includePanel && options.group) {
188
+ if (options.group.activePanel !==
189
+ options.group.panels[options.group.panels.length - 1]) {
190
+ options.group.model.moveToNext({ suppressRoll: true });
191
+ return;
192
+ }
193
+ }
194
+ const location = getGridLocation(options.group.element);
195
+ const next = (_a = this.gridview.next(location)) === null || _a === void 0 ? void 0 : _a.view;
196
+ this.doSetGroupActive(next);
197
+ }
198
+ moveToPrevious(options = {}) {
199
+ var _a;
200
+ if (!options.group) {
201
+ if (!this.activeGroup) {
202
+ return;
203
+ }
204
+ options.group = this.activeGroup;
205
+ }
206
+ if (options.includePanel && options.group) {
207
+ if (options.group.activePanel !== options.group.panels[0]) {
208
+ options.group.model.moveToPrevious({ suppressRoll: true });
209
+ return;
210
+ }
211
+ }
212
+ const location = getGridLocation(options.group.element);
213
+ const next = (_a = this.gridview.previous(location)) === null || _a === void 0 ? void 0 : _a.view;
214
+ if (next) {
215
+ this.doSetGroupActive(next);
216
+ }
217
+ }
218
+ /**
219
+ * Serialize the current state of the layout
220
+ *
221
+ * @returns A JSON respresentation of the layout
222
+ */
223
+ toJSON() {
224
+ var _a;
225
+ const data = this.gridview.serialize();
226
+ const panels = this.panels.reduce((collection, panel) => {
227
+ collection[panel.id] = panel.toJSON();
228
+ return collection;
229
+ }, {});
230
+ return {
231
+ grid: data,
232
+ panels,
233
+ activeGroup: (_a = this.activeGroup) === null || _a === void 0 ? void 0 : _a.id,
234
+ options: { tabHeight: this.tabHeight },
235
+ };
236
+ }
237
+ fromJSON(data) {
238
+ this.clear();
239
+ const { grid, panels, options, activeGroup } = data;
240
+ if (typeof (options === null || options === void 0 ? void 0 : options.tabHeight) === 'number') {
241
+ this.tabHeight = options.tabHeight;
242
+ }
243
+ if (grid.root.type !== 'branch' || !Array.isArray(grid.root.data)) {
244
+ throw new Error('root must be of type branch');
245
+ }
246
+ this.gridview.deserialize(grid, {
247
+ fromJSON: (node) => {
248
+ const { id, locked, hideHeader, views, activeView } = node.data;
249
+ const group = this.createGroup({
250
+ id,
251
+ locked: !!locked,
252
+ hideHeader: !!hideHeader,
253
+ });
254
+ this._onDidAddGroup.fire(group);
255
+ for (const child of views) {
256
+ const panel = this._deserializer.fromJSON(panels[child], group);
257
+ const isActive = typeof activeView === 'string' &&
258
+ activeView === panel.id;
259
+ group.model.openPanel(panel, {
260
+ skipSetPanelActive: !isActive,
261
+ skipSetGroupActive: true,
262
+ });
263
+ }
264
+ if (!group.activePanel && group.panels.length > 0) {
265
+ group.model.openPanel(group.panels[group.panels.length - 1], {
266
+ skipSetGroupActive: true,
267
+ });
268
+ }
269
+ return group;
270
+ },
271
+ });
272
+ if (typeof activeGroup === 'string') {
273
+ const panel = this.getPanel(activeGroup);
274
+ if (panel) {
275
+ this.doSetGroupActive(panel);
276
+ }
277
+ }
278
+ this.gridview.layout(this.width, this.height);
279
+ this._onDidLayoutFromJSON.fire();
280
+ }
281
+ clear() {
282
+ const groups = Array.from(this._groups.values()).map((_) => _.value);
283
+ const hasActiveGroup = !!this.activeGroup;
284
+ const hasActivePanel = !!this.activePanel;
285
+ for (const group of groups) {
286
+ // remove the group will automatically remove the panels
287
+ this.removeGroup(group, true);
288
+ }
289
+ if (hasActiveGroup) {
290
+ this.doSetGroupActive(undefined);
291
+ }
292
+ if (hasActivePanel) {
293
+ this._onDidActivePanelChange.fire(undefined);
294
+ }
295
+ this.gridview.clear();
296
+ }
297
+ closeAllGroups() {
298
+ for (const entry of this._groups.entries()) {
299
+ const [_, group] = entry;
300
+ group.value.model.closeAllPanels();
301
+ }
302
+ }
303
+ addPanel(options) {
304
+ var _a, _b;
305
+ if (this.panels.find((_) => _.id === options.id)) {
306
+ throw new Error(`panel with id ${options.id} already exists`);
307
+ }
308
+ let referenceGroup;
309
+ if (options.position) {
310
+ if (isPanelOptionsWithPanel(options.position)) {
311
+ const referencePanel = typeof options.position.referencePanel === 'string'
312
+ ? this.getGroupPanel(options.position.referencePanel)
313
+ : options.position.referencePanel;
314
+ if (!referencePanel) {
315
+ throw new Error(`referencePanel ${options.position.referencePanel} does not exist`);
316
+ }
317
+ referenceGroup = this.findGroup(referencePanel);
318
+ }
319
+ else if (isPanelOptionsWithGroup(options.position)) {
320
+ referenceGroup =
321
+ typeof options.position.referenceGroup === 'string'
322
+ ? (_a = this._groups.get(options.position.referenceGroup)) === null || _a === void 0 ? void 0 : _a.value
323
+ : options.position.referenceGroup;
324
+ if (!referenceGroup) {
325
+ throw new Error(`referencePanel ${options.position.referenceGroup} does not exist`);
326
+ }
327
+ }
328
+ else {
329
+ const group = this.orthogonalize(directionToPosition(options.position.direction));
330
+ const panel = this.createPanel(options, group);
331
+ group.model.openPanel(panel);
332
+ return panel;
333
+ }
334
+ }
335
+ else {
336
+ referenceGroup = this.activeGroup;
337
+ }
338
+ let panel;
339
+ if (referenceGroup) {
340
+ const target = toTarget(((_b = options.position) === null || _b === void 0 ? void 0 : _b.direction) || 'within');
341
+ if (target === 'center') {
342
+ panel = this.createPanel(options, referenceGroup);
343
+ referenceGroup.model.openPanel(panel);
344
+ }
345
+ else {
346
+ const location = getGridLocation(referenceGroup.element);
347
+ const relativeLocation = getRelativeLocation(this.gridview.orientation, location, target);
348
+ const group = this.createGroupAtLocation(relativeLocation);
349
+ panel = this.createPanel(options, group);
350
+ group.model.openPanel(panel);
351
+ }
352
+ }
353
+ else {
354
+ const group = this.createGroupAtLocation();
355
+ panel = this.createPanel(options, group);
356
+ group.model.openPanel(panel);
357
+ }
358
+ return panel;
359
+ }
360
+ removePanel(panel, options = {
361
+ removeEmptyGroup: true,
362
+ skipDispose: false,
363
+ }) {
364
+ const group = panel.group;
365
+ if (!group) {
366
+ throw new Error(`cannot remove panel ${panel.id}. it's missing a group.`);
367
+ }
368
+ group.model.removePanel(panel);
369
+ panel.dispose();
370
+ if (group.size === 0 && options.removeEmptyGroup) {
371
+ this.removeGroup(group);
372
+ }
373
+ }
374
+ createWatermarkComponent() {
375
+ var _a;
376
+ return createComponent('watermark-id', 'watermark-name', this.options.watermarkComponent
377
+ ? { 'watermark-name': this.options.watermarkComponent }
378
+ : {}, this.options.watermarkFrameworkComponent
379
+ ? { 'watermark-name': this.options.watermarkFrameworkComponent }
380
+ : {}, (_a = this.options.frameworkComponentFactory) === null || _a === void 0 ? void 0 : _a.watermark);
381
+ }
382
+ updateWatermark() {
383
+ var _a, _b;
384
+ if (this.groups.length === 0) {
385
+ if (!this.watermark) {
386
+ this.watermark = this.createWatermarkComponent();
387
+ this.watermark.init({
388
+ containerApi: new DockviewApi(this),
389
+ });
390
+ const watermarkContainer = document.createElement('div');
391
+ watermarkContainer.className = 'dv-watermark-container';
392
+ watermarkContainer.appendChild(this.watermark.element);
393
+ this.element.appendChild(watermarkContainer);
394
+ }
395
+ }
396
+ else if (this.watermark) {
397
+ this.watermark.element.parentElement.remove();
398
+ (_b = (_a = this.watermark).dispose) === null || _b === void 0 ? void 0 : _b.call(_a);
399
+ this.watermark = null;
400
+ }
401
+ }
402
+ addGroup(options) {
403
+ var _a;
404
+ const group = this.createGroup();
405
+ if (options) {
406
+ let referenceGroup;
407
+ if (isGroupOptionsWithPanel(options)) {
408
+ const referencePanel = typeof options.referencePanel === 'string'
409
+ ? this.panels.find((panel) => panel.id === options.referencePanel)
410
+ : options.referencePanel;
411
+ if (!referencePanel) {
412
+ throw new Error(`reference panel ${options.referencePanel} does not exist`);
413
+ }
414
+ referenceGroup = this.findGroup(referencePanel);
415
+ if (!referenceGroup) {
416
+ throw new Error(`reference group for reference panel ${options.referencePanel} does not exist`);
417
+ }
418
+ }
419
+ else if (isGroupOptionsWithGroup(options)) {
420
+ referenceGroup =
421
+ typeof options.referenceGroup === 'string'
422
+ ? (_a = this._groups.get(options.referenceGroup)) === null || _a === void 0 ? void 0 : _a.value
423
+ : options.referenceGroup;
424
+ if (!referenceGroup) {
425
+ throw new Error(`reference group ${options.referenceGroup} does not exist`);
426
+ }
427
+ }
428
+ else {
429
+ const group = this.orthogonalize(directionToPosition(options.direction));
430
+ return group;
431
+ }
432
+ const target = toTarget(options.direction || 'within');
433
+ const location = getGridLocation(referenceGroup.element);
434
+ const relativeLocation = getRelativeLocation(this.gridview.orientation, location, target);
435
+ this.doAddGroup(group, relativeLocation);
436
+ return group;
437
+ }
438
+ else {
439
+ this.doAddGroup(group);
440
+ return group;
441
+ }
442
+ }
443
+ removeGroup(group, skipActive = false) {
444
+ const panels = [...group.panels]; // reassign since group panels will mutate
445
+ for (const panel of panels) {
446
+ this.removePanel(panel, {
447
+ removeEmptyGroup: false,
448
+ skipDispose: false,
449
+ });
450
+ }
451
+ super.doRemoveGroup(group, { skipActive });
452
+ }
453
+ moveGroupOrPanel(referenceGroup, groupId, itemId, target, index) {
454
+ var _a;
455
+ const sourceGroup = groupId
456
+ ? (_a = this._groups.get(groupId)) === null || _a === void 0 ? void 0 : _a.value
457
+ : undefined;
458
+ if (itemId === undefined) {
459
+ if (sourceGroup) {
460
+ this.moveGroup(sourceGroup, referenceGroup, target);
461
+ }
462
+ return;
463
+ }
464
+ if (!target || target === 'center') {
465
+ const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(itemId)) ||
466
+ this.panels.find((panel) => panel.id === itemId);
467
+ if (!groupItem) {
468
+ throw new Error(`No panel with id ${itemId}`);
469
+ }
470
+ if ((sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.size) === 0) {
471
+ this.doRemoveGroup(sourceGroup);
472
+ }
473
+ referenceGroup.model.openPanel(groupItem, { index });
474
+ }
475
+ else {
476
+ const referenceLocation = getGridLocation(referenceGroup.element);
477
+ const targetLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
478
+ if (sourceGroup && sourceGroup.size < 2) {
479
+ const [targetParentLocation, to] = tail(targetLocation);
480
+ const sourceLocation = getGridLocation(sourceGroup.element);
481
+ const [sourceParentLocation, from] = tail(sourceLocation);
482
+ if (sequenceEquals(sourceParentLocation, targetParentLocation)) {
483
+ // special case when 'swapping' two views within same grid location
484
+ // if a group has one tab - we are essentially moving the 'group'
485
+ // which is equivalent to swapping two views in this case
486
+ this.gridview.moveView(sourceParentLocation, from, to);
487
+ }
488
+ else {
489
+ // source group will become empty so delete the group
490
+ const targetGroup = this.doRemoveGroup(sourceGroup, {
491
+ skipActive: true,
492
+ skipDispose: true,
493
+ });
494
+ // after deleting the group we need to re-evaulate the ref location
495
+ const updatedReferenceLocation = getGridLocation(referenceGroup.element);
496
+ const location = getRelativeLocation(this.gridview.orientation, updatedReferenceLocation, target);
497
+ this.doAddGroup(targetGroup, location);
498
+ }
499
+ }
500
+ else {
501
+ const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(itemId)) ||
502
+ this.panels.find((panel) => panel.id === itemId);
503
+ if (!groupItem) {
504
+ throw new Error(`No panel with id ${itemId}`);
505
+ }
506
+ const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
507
+ const group = this.createGroupAtLocation(dropLocation);
508
+ group.model.openPanel(groupItem);
509
+ }
510
+ }
511
+ }
512
+ moveGroup(sourceGroup, referenceGroup, target) {
513
+ if (sourceGroup) {
514
+ if (!target || target === 'center') {
515
+ const activePanel = sourceGroup.activePanel;
516
+ const panels = [...sourceGroup.panels].map((p) => sourceGroup.model.removePanel(p.id));
517
+ if ((sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.size) === 0) {
518
+ this.doRemoveGroup(sourceGroup);
519
+ }
520
+ for (const panel of panels) {
521
+ referenceGroup.model.openPanel(panel, {
522
+ skipSetPanelActive: panel !== activePanel,
523
+ });
524
+ }
525
+ }
526
+ else {
527
+ this.gridview.removeView(getGridLocation(sourceGroup.element));
528
+ const referenceLocation = getGridLocation(referenceGroup.element);
529
+ const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
530
+ this.gridview.addView(sourceGroup, Sizing.Distribute, dropLocation);
531
+ }
532
+ }
533
+ }
534
+ doSetGroupActive(group, skipFocus) {
535
+ var _a, _b;
536
+ const isGroupAlreadyFocused = this._activeGroup === group;
537
+ super.doSetGroupActive(group, skipFocus);
538
+ if (!isGroupAlreadyFocused && ((_a = this._activeGroup) === null || _a === void 0 ? void 0 : _a.activePanel)) {
539
+ this._onDidActivePanelChange.fire((_b = this._activeGroup) === null || _b === void 0 ? void 0 : _b.activePanel);
540
+ }
541
+ }
542
+ createGroup(options) {
543
+ if (!options) {
544
+ options = { tabHeight: this.tabHeight };
545
+ }
546
+ if (typeof options.tabHeight !== 'number') {
547
+ options.tabHeight = this.tabHeight;
548
+ }
549
+ let id = options === null || options === void 0 ? void 0 : options.id;
550
+ if (id && this._groups.has(options.id)) {
551
+ console.warn(`Duplicate group id ${options === null || options === void 0 ? void 0 : options.id}. reassigning group id to avoid errors`);
552
+ id = undefined;
553
+ }
554
+ if (!id) {
555
+ id = this.nextGroupId.next();
556
+ while (this._groups.has(id)) {
557
+ id = this.nextGroupId.next();
558
+ }
559
+ }
560
+ const view = new DockviewGroupPanel(this, id, options);
561
+ view.init({ params: {}, accessor: null }); // required to initialized .part and allow for correct disposal of group
562
+ if (!this._groups.has(view.id)) {
563
+ const disposable = new CompositeDisposable(view.model.onMove((event) => {
564
+ const { groupId, itemId, target, index } = event;
565
+ this.moveGroupOrPanel(view, groupId, itemId, target, index);
566
+ }), view.model.onDidDrop((event) => {
567
+ this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api, group: view }));
568
+ }), view.model.onDidAddPanel((event) => {
569
+ this._onDidAddPanel.fire(event.panel);
570
+ }), view.model.onDidRemovePanel((event) => {
571
+ this._onDidRemovePanel.fire(event.panel);
572
+ }), view.model.onDidActivePanelChange((event) => {
573
+ this._onDidActivePanelChange.fire(event.panel);
574
+ }));
575
+ this._groups.set(view.id, { value: view, disposable });
576
+ }
577
+ // TODO: must be called after the above listeners have been setup,
578
+ // not an ideal pattern
579
+ view.initialize();
580
+ if (typeof this.options.tabHeight === 'number') {
581
+ view.model.header.height = this.options.tabHeight;
582
+ }
583
+ return view;
584
+ }
585
+ createPanel(options, group) {
586
+ const contentComponent = options.component;
587
+ const tabComponent = options.tabComponent || this.options.defaultTabComponent;
588
+ const view = new DockviewPanelModel(this, options.id, contentComponent, tabComponent);
589
+ const panel = new DockviewPanel(options.id, this, this._api, group, view);
590
+ panel.init({
591
+ title: options.title || options.id,
592
+ params: (options === null || options === void 0 ? void 0 : options.params) || {},
593
+ });
594
+ return panel;
595
+ }
596
+ createGroupAtLocation(location = [0]) {
597
+ const group = this.createGroup();
598
+ this.doAddGroup(group, location);
599
+ return group;
600
+ }
601
+ findGroup(panel) {
602
+ var _a;
603
+ return (_a = Array.from(this._groups.values()).find((group) => group.value.model.containsPanel(panel))) === null || _a === void 0 ? void 0 : _a.value;
604
+ }
605
+ dispose() {
606
+ super.dispose();
607
+ this._onDidActivePanelChange.dispose();
608
+ this._onDidAddPanel.dispose();
609
+ this._onDidRemovePanel.dispose();
610
+ this._onDidLayoutFromJSON.dispose();
611
+ }
612
+ }
@@ -0,0 +1,31 @@
1
+ import { IFrameworkPart } from '../panel/types';
2
+ import { DockviewComponent } from '../dockview/dockviewComponent';
3
+ import { GridviewPanelApi } from '../api/gridviewPanelApi';
4
+ import { GroupOptions, IDockviewGroupPanelModel, IHeader } from './dockviewGroupPanelModel';
5
+ import { GridviewPanel, IGridviewPanel } from '../gridview/gridviewPanel';
6
+ import { IDockviewPanel } from '../dockview/dockviewPanel';
7
+ export interface IDockviewGroupPanel extends IGridviewPanel {
8
+ model: IDockviewGroupPanelModel;
9
+ locked: boolean;
10
+ readonly size: number;
11
+ readonly panels: IDockviewPanel[];
12
+ readonly activePanel: IDockviewPanel | undefined;
13
+ }
14
+ export type IDockviewGroupPanelPublic = IDockviewGroupPanel;
15
+ export type DockviewGroupPanelApi = GridviewPanelApi;
16
+ export declare class DockviewGroupPanel extends GridviewPanel implements IDockviewGroupPanel {
17
+ private readonly _model;
18
+ get panels(): IDockviewPanel[];
19
+ get activePanel(): IDockviewPanel | undefined;
20
+ get size(): number;
21
+ get model(): IDockviewGroupPanelModel;
22
+ get locked(): boolean;
23
+ set locked(value: boolean);
24
+ get header(): IHeader;
25
+ constructor(accessor: DockviewComponent, id: string, options: GroupOptions);
26
+ initialize(): void;
27
+ setActive(isActive: boolean): void;
28
+ layout(width: number, height: number): void;
29
+ getComponent(): IFrameworkPart;
30
+ toJSON(): any;
31
+ }
@@ -0,0 +1,50 @@
1
+ import { DockviewGroupPanelModel, } from './dockviewGroupPanelModel';
2
+ import { GridviewPanel } from '../gridview/gridviewPanel';
3
+ export class DockviewGroupPanel extends GridviewPanel {
4
+ get panels() {
5
+ return this._model.panels;
6
+ }
7
+ get activePanel() {
8
+ return this._model.activePanel;
9
+ }
10
+ get size() {
11
+ return this._model.size;
12
+ }
13
+ get model() {
14
+ return this._model;
15
+ }
16
+ get locked() {
17
+ return this._model.locked;
18
+ }
19
+ set locked(value) {
20
+ this._model.locked = value;
21
+ }
22
+ get header() {
23
+ return this._model.header;
24
+ }
25
+ constructor(accessor, id, options) {
26
+ super(id, 'groupview_default', {
27
+ minimumHeight: 100,
28
+ minimumWidth: 100,
29
+ });
30
+ this._model = new DockviewGroupPanelModel(this.element, accessor, id, options, this);
31
+ }
32
+ initialize() {
33
+ this._model.initialize();
34
+ }
35
+ setActive(isActive) {
36
+ super.setActive(isActive);
37
+ this.model.setActive(isActive);
38
+ }
39
+ layout(width, height) {
40
+ super.layout(width, height);
41
+ this.model.layout(width, height);
42
+ }
43
+ getComponent() {
44
+ return this._model;
45
+ }
46
+ toJSON() {
47
+ // TODO fix typing
48
+ return this.model.toJSON();
49
+ }
50
+ }