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,176 @@
1
+ import { PanelTransfer } from '../dnd/dataTransfer';
2
+ import { Position } from '../dnd/droptarget';
3
+ import { DockviewComponent } from './dockviewComponent';
4
+ import { Event } from '../events';
5
+ import { IViewSize } from '../gridview/gridview';
6
+ import { CompositeDisposable } from '../lifecycle';
7
+ import { IPanel, PanelInitParameters, PanelUpdateEvent } from '../panel/types';
8
+ import { DockviewDropTargets } from './types';
9
+ import { DockviewGroupPanel } from './dockviewGroupPanel';
10
+ import { IDockviewPanel } from './dockviewPanel';
11
+ export interface DndService {
12
+ canDisplayOverlay(group: IDockviewGroupPanelModel, event: DragEvent, target: DockviewDropTargets): boolean;
13
+ onDrop(group: IDockviewGroupPanelModel, event: DragEvent, position: Position, index?: number): void;
14
+ }
15
+ export interface IGroupItem {
16
+ id: string;
17
+ header: {
18
+ element: HTMLElement;
19
+ };
20
+ body: {
21
+ element: HTMLElement;
22
+ };
23
+ }
24
+ interface GroupMoveEvent {
25
+ groupId: string;
26
+ itemId?: string;
27
+ target: Position;
28
+ index?: number;
29
+ }
30
+ interface CoreGroupOptions {
31
+ locked?: boolean;
32
+ hideHeader?: boolean;
33
+ }
34
+ export interface GroupOptions extends CoreGroupOptions {
35
+ readonly panels?: IDockviewPanel[];
36
+ readonly activePanel?: IDockviewPanel;
37
+ readonly id?: string;
38
+ tabHeight?: number;
39
+ }
40
+ export interface GroupPanelViewState extends CoreGroupOptions {
41
+ views: string[];
42
+ activeView?: string;
43
+ id: string;
44
+ }
45
+ export interface GroupviewChangeEvent {
46
+ readonly panel: IDockviewPanel;
47
+ }
48
+ export interface GroupviewDropEvent {
49
+ readonly nativeEvent: DragEvent;
50
+ readonly position: Position;
51
+ readonly index?: number;
52
+ getData(): PanelTransfer | undefined;
53
+ }
54
+ export interface IHeader {
55
+ hidden: boolean;
56
+ height: number | undefined;
57
+ }
58
+ export interface IDockviewGroupPanelModel extends IPanel {
59
+ readonly isActive: boolean;
60
+ readonly size: number;
61
+ readonly panels: IDockviewPanel[];
62
+ readonly activePanel: IDockviewPanel | undefined;
63
+ readonly header: IHeader;
64
+ readonly isContentFocused: boolean;
65
+ readonly onDidDrop: Event<GroupviewDropEvent>;
66
+ readonly onDidAddPanel: Event<GroupviewChangeEvent>;
67
+ readonly onDidRemovePanel: Event<GroupviewChangeEvent>;
68
+ readonly onDidActivePanelChange: Event<GroupviewChangeEvent>;
69
+ readonly onMove: Event<GroupMoveEvent>;
70
+ locked: boolean;
71
+ setActive(isActive: boolean): void;
72
+ initialize(): void;
73
+ isPanelActive: (panel: IDockviewPanel) => boolean;
74
+ indexOf(panel: IDockviewPanel): number;
75
+ openPanel(panel: IDockviewPanel, options?: {
76
+ index?: number;
77
+ skipFocus?: boolean;
78
+ skipSetPanelActive?: boolean;
79
+ skipSetGroupActive?: boolean;
80
+ }): void;
81
+ closePanel(panel: IDockviewPanel): void;
82
+ closeAllPanels(): void;
83
+ containsPanel(panel: IDockviewPanel): boolean;
84
+ removePanel: (panelOrId: IDockviewPanel | string) => IDockviewPanel;
85
+ moveToNext(options?: {
86
+ panel?: IDockviewPanel;
87
+ suppressRoll?: boolean;
88
+ }): void;
89
+ moveToPrevious(options?: {
90
+ panel?: IDockviewPanel;
91
+ suppressRoll?: boolean;
92
+ }): void;
93
+ canDisplayOverlay(event: DragEvent, position: Position, target: DockviewDropTargets): boolean;
94
+ }
95
+ export declare class DockviewGroupPanelModel extends CompositeDisposable implements IDockviewGroupPanelModel {
96
+ private readonly container;
97
+ private accessor;
98
+ id: string;
99
+ private readonly options;
100
+ private readonly groupPanel;
101
+ private readonly tabsContainer;
102
+ private readonly contentContainer;
103
+ private readonly dropTarget;
104
+ private _activePanel;
105
+ private watermark?;
106
+ private _isGroupActive;
107
+ private _locked;
108
+ private _control;
109
+ private mostRecentlyUsed;
110
+ private readonly _onDidChange;
111
+ readonly onDidChange: Event<IViewSize | undefined>;
112
+ private _width;
113
+ private _height;
114
+ private _panels;
115
+ private readonly _onMove;
116
+ readonly onMove: Event<GroupMoveEvent>;
117
+ private readonly _onDidDrop;
118
+ readonly onDidDrop: Event<GroupviewDropEvent>;
119
+ private readonly _onDidAddPanel;
120
+ readonly onDidAddPanel: Event<GroupviewChangeEvent>;
121
+ private readonly _onDidRemovePanel;
122
+ readonly onDidRemovePanel: Event<GroupviewChangeEvent>;
123
+ private readonly _onDidActivePanelChange;
124
+ readonly onDidActivePanelChange: Event<GroupviewChangeEvent>;
125
+ get element(): HTMLElement;
126
+ get activePanel(): IDockviewPanel | undefined;
127
+ get locked(): boolean;
128
+ set locked(value: boolean);
129
+ get isActive(): boolean;
130
+ get panels(): IDockviewPanel[];
131
+ get size(): number;
132
+ get isEmpty(): boolean;
133
+ get hasWatermark(): boolean;
134
+ get header(): IHeader;
135
+ get isContentFocused(): boolean;
136
+ constructor(container: HTMLElement, accessor: DockviewComponent, id: string, options: GroupOptions, groupPanel: DockviewGroupPanel);
137
+ initialize(): void;
138
+ indexOf(panel: IDockviewPanel): number;
139
+ toJSON(): GroupPanelViewState;
140
+ moveToNext(options?: {
141
+ panel?: IDockviewPanel;
142
+ suppressRoll?: boolean;
143
+ }): void;
144
+ moveToPrevious(options?: {
145
+ panel?: IDockviewPanel;
146
+ suppressRoll?: boolean;
147
+ }): void;
148
+ containsPanel(panel: IDockviewPanel): boolean;
149
+ init(_params: PanelInitParameters): void;
150
+ update(_params: PanelUpdateEvent): void;
151
+ focus(): void;
152
+ openPanel(panel: IDockviewPanel, options?: {
153
+ index?: number;
154
+ skipFocus?: boolean;
155
+ skipSetPanelActive?: boolean;
156
+ skipSetGroupActive?: boolean;
157
+ }): void;
158
+ removePanel(groupItemOrId: IDockviewPanel | string): IDockviewPanel;
159
+ closeAllPanels(): void;
160
+ closePanel(panel: IDockviewPanel): void;
161
+ private doClose;
162
+ isPanelActive(panel: IDockviewPanel): boolean;
163
+ updateActions(element: HTMLElement | undefined): void;
164
+ setActive(isGroupActive: boolean, skipFocus?: boolean, force?: boolean): void;
165
+ layout(width: number, height: number): void;
166
+ private _removePanel;
167
+ private doRemovePanel;
168
+ private doAddPanel;
169
+ private doSetActivePanel;
170
+ private updateMru;
171
+ private updateContainer;
172
+ canDisplayOverlay(event: DragEvent, position: Position, target: DockviewDropTargets): boolean;
173
+ private handleDropEvent;
174
+ dispose(): void;
175
+ }
176
+ export {};
@@ -0,0 +1,449 @@
1
+ import { DockviewApi } from '../api/component.api';
2
+ import { getPanelData } from '../dnd/dataTransfer';
3
+ import { Droptarget } from '../dnd/droptarget';
4
+ import { isAncestor, toggleClass } from '../dom';
5
+ import { addDisposableListener, Emitter } from '../events';
6
+ import { CompositeDisposable } from '../lifecycle';
7
+ import { ContentContainer, } from './components/panel/content';
8
+ import { TabsContainer, } from './components/titlebar/tabsContainer';
9
+ import { DockviewDropTargets } from './types';
10
+ export class DockviewGroupPanelModel extends CompositeDisposable {
11
+ get element() {
12
+ throw new Error('not supported');
13
+ }
14
+ get activePanel() {
15
+ return this._activePanel;
16
+ }
17
+ get locked() {
18
+ return this._locked;
19
+ }
20
+ set locked(value) {
21
+ this._locked = value;
22
+ toggleClass(this.container, 'locked-groupview', value);
23
+ }
24
+ get isActive() {
25
+ return this._isGroupActive;
26
+ }
27
+ get panels() {
28
+ return this._panels;
29
+ }
30
+ get size() {
31
+ return this._panels.length;
32
+ }
33
+ get isEmpty() {
34
+ return this._panels.length === 0;
35
+ }
36
+ get hasWatermark() {
37
+ return !!(this.watermark && this.container.contains(this.watermark.element));
38
+ }
39
+ get header() {
40
+ return this.tabsContainer;
41
+ }
42
+ get isContentFocused() {
43
+ if (!document.activeElement) {
44
+ return false;
45
+ }
46
+ return isAncestor(document.activeElement, this.contentContainer.element);
47
+ }
48
+ constructor(container, accessor, id, options, groupPanel) {
49
+ super();
50
+ this.container = container;
51
+ this.accessor = accessor;
52
+ this.id = id;
53
+ this.options = options;
54
+ this.groupPanel = groupPanel;
55
+ this._isGroupActive = false;
56
+ this._locked = false;
57
+ this.mostRecentlyUsed = [];
58
+ this._onDidChange = new Emitter();
59
+ this.onDidChange = this._onDidChange.event;
60
+ this._width = 0;
61
+ this._height = 0;
62
+ this._panels = [];
63
+ this._onMove = new Emitter();
64
+ this.onMove = this._onMove.event;
65
+ this._onDidDrop = new Emitter();
66
+ this.onDidDrop = this._onDidDrop.event;
67
+ this._onDidAddPanel = new Emitter();
68
+ this.onDidAddPanel = this._onDidAddPanel.event;
69
+ this._onDidRemovePanel = new Emitter();
70
+ this.onDidRemovePanel = this._onDidRemovePanel.event;
71
+ this._onDidActivePanelChange = new Emitter();
72
+ this.onDidActivePanelChange = this._onDidActivePanelChange.event;
73
+ this.container.classList.add('groupview');
74
+ this.tabsContainer = new TabsContainer(this.accessor, this.groupPanel);
75
+ this.contentContainer = new ContentContainer();
76
+ this.dropTarget = new Droptarget(this.contentContainer.element, {
77
+ acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
78
+ canDisplayOverlay: (event, position) => {
79
+ if (this.locked && position === 'center') {
80
+ return false;
81
+ }
82
+ const data = getPanelData();
83
+ if (data && data.viewId === this.accessor.id) {
84
+ if (data.groupId === this.id) {
85
+ if (position === 'center') {
86
+ // don't allow to drop on self for center position
87
+ return false;
88
+ }
89
+ if (data.panelId === null) {
90
+ // don't allow group move to drop anywhere on self
91
+ return false;
92
+ }
93
+ }
94
+ const groupHasOnePanelAndIsActiveDragElement = this._panels.length === 1 && data.groupId === this.id;
95
+ return !groupHasOnePanelAndIsActiveDragElement;
96
+ }
97
+ return this.canDisplayOverlay(event, position, DockviewDropTargets.Panel);
98
+ },
99
+ });
100
+ container.append(this.tabsContainer.element, this.contentContainer.element);
101
+ this.header.hidden = !!options.hideHeader;
102
+ this.locked = !!options.locked;
103
+ this.addDisposables(this._onMove, this._onDidChange, this._onDidDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange, this.tabsContainer.onDrop((event) => {
104
+ this.handleDropEvent(event.event, 'center', event.index);
105
+ }), this.contentContainer.onDidFocus(() => {
106
+ this.accessor.doSetGroupActive(this.groupPanel, true);
107
+ }), this.contentContainer.onDidBlur(() => {
108
+ // noop
109
+ }), this.dropTarget.onDrop((event) => {
110
+ this.handleDropEvent(event.nativeEvent, event.position);
111
+ }));
112
+ }
113
+ initialize() {
114
+ var _a, _b;
115
+ if ((_a = this.options) === null || _a === void 0 ? void 0 : _a.panels) {
116
+ this.options.panels.forEach((panel) => {
117
+ this.doAddPanel(panel);
118
+ });
119
+ }
120
+ if ((_b = this.options) === null || _b === void 0 ? void 0 : _b.activePanel) {
121
+ this.openPanel(this.options.activePanel);
122
+ }
123
+ // must be run after the constructor otherwise this.parent may not be
124
+ // correctly initialized
125
+ this.setActive(this.isActive, true, true);
126
+ this.updateContainer();
127
+ if (this.accessor.options.createGroupControlElement) {
128
+ this._control = this.accessor.options.createGroupControlElement(this.groupPanel);
129
+ this.addDisposables(this._control);
130
+ this._control.init({
131
+ containerApi: new DockviewApi(this.accessor),
132
+ api: this.groupPanel.api,
133
+ });
134
+ this.tabsContainer.setActionElement(this._control.element);
135
+ }
136
+ }
137
+ indexOf(panel) {
138
+ return this.tabsContainer.indexOf(panel.id);
139
+ }
140
+ toJSON() {
141
+ var _a;
142
+ const result = {
143
+ views: this.tabsContainer.panels,
144
+ activeView: (_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.id,
145
+ id: this.id,
146
+ };
147
+ if (this.locked) {
148
+ result.locked = true;
149
+ }
150
+ if (this.header.hidden) {
151
+ result.hideHeader = true;
152
+ }
153
+ return result;
154
+ }
155
+ moveToNext(options) {
156
+ if (!options) {
157
+ options = {};
158
+ }
159
+ if (!options.panel) {
160
+ options.panel = this.activePanel;
161
+ }
162
+ const index = options.panel ? this.panels.indexOf(options.panel) : -1;
163
+ let normalizedIndex;
164
+ if (index < this.panels.length - 1) {
165
+ normalizedIndex = index + 1;
166
+ }
167
+ else if (!options.suppressRoll) {
168
+ normalizedIndex = 0;
169
+ }
170
+ else {
171
+ return;
172
+ }
173
+ this.openPanel(this.panels[normalizedIndex]);
174
+ }
175
+ moveToPrevious(options) {
176
+ if (!options) {
177
+ options = {};
178
+ }
179
+ if (!options.panel) {
180
+ options.panel = this.activePanel;
181
+ }
182
+ if (!options.panel) {
183
+ return;
184
+ }
185
+ const index = this.panels.indexOf(options.panel);
186
+ let normalizedIndex;
187
+ if (index > 0) {
188
+ normalizedIndex = index - 1;
189
+ }
190
+ else if (!options.suppressRoll) {
191
+ normalizedIndex = this.panels.length - 1;
192
+ }
193
+ else {
194
+ return;
195
+ }
196
+ this.openPanel(this.panels[normalizedIndex]);
197
+ }
198
+ containsPanel(panel) {
199
+ return this.panels.includes(panel);
200
+ }
201
+ init(_params) {
202
+ //noop
203
+ }
204
+ update(_params) {
205
+ //noop
206
+ }
207
+ focus() {
208
+ var _a, _b;
209
+ (_b = (_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.focus) === null || _b === void 0 ? void 0 : _b.call(_a);
210
+ }
211
+ openPanel(panel, options = {}) {
212
+ if (typeof options.index !== 'number' ||
213
+ options.index > this.panels.length) {
214
+ options.index = this.panels.length;
215
+ }
216
+ const skipSetPanelActive = !!options.skipSetPanelActive;
217
+ const skipSetGroupActive = !!options.skipSetGroupActive;
218
+ // ensure the group is updated before we fire any events
219
+ panel.updateParentGroup(this.groupPanel, true);
220
+ if (this._activePanel === panel) {
221
+ if (!skipSetGroupActive) {
222
+ this.accessor.doSetGroupActive(this.groupPanel);
223
+ }
224
+ return;
225
+ }
226
+ this.doAddPanel(panel, options.index, skipSetPanelActive);
227
+ if (!skipSetPanelActive) {
228
+ this.doSetActivePanel(panel);
229
+ }
230
+ if (!skipSetGroupActive) {
231
+ this.accessor.doSetGroupActive(this.groupPanel, !!options.skipFocus);
232
+ }
233
+ this.updateContainer();
234
+ }
235
+ removePanel(groupItemOrId) {
236
+ const id = typeof groupItemOrId === 'string'
237
+ ? groupItemOrId
238
+ : groupItemOrId.id;
239
+ const panelToRemove = this._panels.find((panel) => panel.id === id);
240
+ if (!panelToRemove) {
241
+ throw new Error('invalid operation');
242
+ }
243
+ return this._removePanel(panelToRemove);
244
+ }
245
+ closeAllPanels() {
246
+ if (this.panels.length > 0) {
247
+ // take a copy since we will be edting the array as we iterate through
248
+ const arrPanelCpy = [...this.panels];
249
+ for (const panel of arrPanelCpy) {
250
+ this.doClose(panel);
251
+ }
252
+ }
253
+ else {
254
+ this.accessor.removeGroup(this.groupPanel);
255
+ }
256
+ }
257
+ closePanel(panel) {
258
+ this.doClose(panel);
259
+ }
260
+ doClose(panel) {
261
+ this.accessor.removePanel(panel);
262
+ }
263
+ isPanelActive(panel) {
264
+ return this._activePanel === panel;
265
+ }
266
+ updateActions(element) {
267
+ this.tabsContainer.setActionElement(element);
268
+ }
269
+ setActive(isGroupActive, skipFocus = false, force = false) {
270
+ var _a, _b, _c, _d;
271
+ if (!force && this.isActive === isGroupActive) {
272
+ if (!skipFocus) {
273
+ (_b = (_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.focus) === null || _b === void 0 ? void 0 : _b.call(_a);
274
+ }
275
+ return;
276
+ }
277
+ this._isGroupActive = isGroupActive;
278
+ toggleClass(this.container, 'active-group', isGroupActive);
279
+ toggleClass(this.container, 'inactive-group', !isGroupActive);
280
+ this.tabsContainer.setActive(this.isActive);
281
+ if (!this._activePanel && this.panels.length > 0) {
282
+ this.doSetActivePanel(this.panels[0]);
283
+ }
284
+ this.updateContainer();
285
+ if (isGroupActive) {
286
+ if (!skipFocus) {
287
+ (_d = (_c = this._activePanel) === null || _c === void 0 ? void 0 : _c.focus) === null || _d === void 0 ? void 0 : _d.call(_c);
288
+ }
289
+ }
290
+ }
291
+ layout(width, height) {
292
+ var _a;
293
+ this._width = width;
294
+ this._height = height;
295
+ this.contentContainer.layout(this._width, this._height);
296
+ if ((_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.layout) {
297
+ this._activePanel.layout(this._width, this._height);
298
+ }
299
+ }
300
+ _removePanel(panel) {
301
+ const isActivePanel = this._activePanel === panel;
302
+ this.doRemovePanel(panel);
303
+ if (isActivePanel && this.panels.length > 0) {
304
+ const nextPanel = this.mostRecentlyUsed[0];
305
+ this.openPanel(nextPanel);
306
+ }
307
+ if (this._activePanel && this.panels.length === 0) {
308
+ this.doSetActivePanel(undefined);
309
+ }
310
+ this.updateContainer();
311
+ return panel;
312
+ }
313
+ doRemovePanel(panel) {
314
+ const index = this.panels.indexOf(panel);
315
+ if (this._activePanel === panel) {
316
+ this.contentContainer.closePanel();
317
+ }
318
+ this.tabsContainer.delete(panel.id);
319
+ this._panels.splice(index, 1);
320
+ if (this.mostRecentlyUsed.includes(panel)) {
321
+ this.mostRecentlyUsed.splice(this.mostRecentlyUsed.indexOf(panel), 1);
322
+ }
323
+ this._onDidRemovePanel.fire({ panel });
324
+ }
325
+ doAddPanel(panel, index = this.panels.length, skipSetActive = false) {
326
+ const existingPanel = this._panels.indexOf(panel);
327
+ const hasExistingPanel = existingPanel > -1;
328
+ this.tabsContainer.openPanel(panel, index);
329
+ if (!skipSetActive) {
330
+ this.contentContainer.openPanel(panel);
331
+ }
332
+ this.tabsContainer.show();
333
+ this.contentContainer.show();
334
+ if (hasExistingPanel) {
335
+ // TODO - need to ensure ordering hasn't changed and if it has need to re-order this.panels
336
+ return;
337
+ }
338
+ this.updateMru(panel);
339
+ this.panels.splice(index, 0, panel);
340
+ this._onDidAddPanel.fire({ panel });
341
+ }
342
+ doSetActivePanel(panel) {
343
+ this._activePanel = panel;
344
+ if (panel) {
345
+ this.tabsContainer.setActivePanel(panel);
346
+ panel.layout(this._width, this._height);
347
+ this.updateMru(panel);
348
+ this._onDidActivePanelChange.fire({ panel });
349
+ }
350
+ }
351
+ updateMru(panel) {
352
+ if (this.mostRecentlyUsed.includes(panel)) {
353
+ this.mostRecentlyUsed.splice(this.mostRecentlyUsed.indexOf(panel), 1);
354
+ }
355
+ this.mostRecentlyUsed = [panel, ...this.mostRecentlyUsed];
356
+ }
357
+ updateContainer() {
358
+ var _a, _b;
359
+ toggleClass(this.container, 'empty', this.isEmpty);
360
+ this.panels.forEach((panel) => panel.updateParentGroup(this.groupPanel, this.isActive));
361
+ if (this.isEmpty && !this.watermark) {
362
+ const watermark = this.accessor.createWatermarkComponent();
363
+ watermark.init({
364
+ containerApi: new DockviewApi(this.accessor),
365
+ group: this.groupPanel,
366
+ });
367
+ this.watermark = watermark;
368
+ addDisposableListener(this.watermark.element, 'click', () => {
369
+ if (!this.isActive) {
370
+ this.accessor.doSetGroupActive(this.groupPanel);
371
+ }
372
+ });
373
+ this.tabsContainer.hide();
374
+ this.contentContainer.element.appendChild(this.watermark.element);
375
+ this.watermark.updateParentGroup(this.groupPanel, true);
376
+ }
377
+ if (!this.isEmpty && this.watermark) {
378
+ this.watermark.element.remove();
379
+ (_b = (_a = this.watermark).dispose) === null || _b === void 0 ? void 0 : _b.call(_a);
380
+ this.watermark = undefined;
381
+ this.tabsContainer.show();
382
+ }
383
+ }
384
+ canDisplayOverlay(event, position, target) {
385
+ // custom overlay handler
386
+ if (this.accessor.options.showDndOverlay) {
387
+ return this.accessor.options.showDndOverlay({
388
+ nativeEvent: event,
389
+ target,
390
+ group: this.accessor.getPanel(this.id),
391
+ position,
392
+ getData: getPanelData,
393
+ });
394
+ }
395
+ return false;
396
+ }
397
+ handleDropEvent(event, position, index) {
398
+ const data = getPanelData();
399
+ if (data && data.viewId === this.accessor.id) {
400
+ if (data.panelId === null) {
401
+ // this is a group move dnd event
402
+ const { groupId } = data;
403
+ this._onMove.fire({
404
+ target: position,
405
+ groupId: groupId,
406
+ index,
407
+ });
408
+ return;
409
+ }
410
+ const fromSameGroup = this.tabsContainer.indexOf(data.panelId) !== -1;
411
+ if (fromSameGroup && this.tabsContainer.size === 1) {
412
+ return;
413
+ }
414
+ const { groupId, panelId } = data;
415
+ const isSameGroup = this.id === groupId;
416
+ if (isSameGroup && !position) {
417
+ const oldIndex = this.tabsContainer.indexOf(panelId);
418
+ if (oldIndex === index) {
419
+ return;
420
+ }
421
+ }
422
+ this._onMove.fire({
423
+ target: position,
424
+ groupId: data.groupId,
425
+ itemId: data.panelId,
426
+ index,
427
+ });
428
+ }
429
+ else {
430
+ this._onDidDrop.fire({
431
+ nativeEvent: event,
432
+ position,
433
+ index,
434
+ getData: () => getPanelData(),
435
+ });
436
+ }
437
+ }
438
+ dispose() {
439
+ var _a, _b;
440
+ super.dispose();
441
+ (_b = (_a = this.watermark) === null || _a === void 0 ? void 0 : _a.dispose) === null || _b === void 0 ? void 0 : _b.call(_a);
442
+ for (const panel of this.panels) {
443
+ panel.dispose();
444
+ }
445
+ this.dropTarget.dispose();
446
+ this.tabsContainer.dispose();
447
+ this.contentContainer.dispose();
448
+ }
449
+ }
@@ -0,0 +1,40 @@
1
+ import { DockviewApi } from '../api/component.api';
2
+ import { DockviewPanelApi, DockviewPanelApiImpl } from '../api/dockviewPanelApi';
3
+ import { GroupPanelUpdateEvent, GroupviewPanelState, IGroupPanelInitParameters } from './types';
4
+ import { DockviewGroupPanel } from './dockviewGroupPanel';
5
+ import { CompositeDisposable, IDisposable } from '../lifecycle';
6
+ import { IPanel, Parameters } from '../panel/types';
7
+ import { IDockviewPanelModel } from './dockviewPanelModel';
8
+ import { IDockviewComponent } from './dockviewComponent';
9
+ export interface IDockviewPanel extends IDisposable, IPanel {
10
+ readonly view: IDockviewPanelModel;
11
+ readonly group: DockviewGroupPanel;
12
+ readonly api: DockviewPanelApi;
13
+ readonly title: string;
14
+ readonly params: Record<string, any> | undefined;
15
+ updateParentGroup(group: DockviewGroupPanel, isGroupActive: boolean): void;
16
+ init(params: IGroupPanelInitParameters): void;
17
+ toJSON(): GroupviewPanelState;
18
+ update(event: GroupPanelUpdateEvent): void;
19
+ }
20
+ export declare class DockviewPanel extends CompositeDisposable implements IDockviewPanel {
21
+ readonly id: string;
22
+ private readonly containerApi;
23
+ readonly view: IDockviewPanelModel;
24
+ readonly api: DockviewPanelApiImpl;
25
+ private _group;
26
+ private _params?;
27
+ private _title;
28
+ get params(): Parameters | undefined;
29
+ get title(): string;
30
+ get group(): DockviewGroupPanel;
31
+ constructor(id: string, accessor: IDockviewComponent, containerApi: DockviewApi, group: DockviewGroupPanel, view: IDockviewPanelModel);
32
+ init(params: IGroupPanelInitParameters): void;
33
+ focus(): void;
34
+ toJSON(): GroupviewPanelState;
35
+ setTitle(title: string): void;
36
+ update(event: GroupPanelUpdateEvent): void;
37
+ updateParentGroup(group: DockviewGroupPanel, isGroupActive: boolean): void;
38
+ layout(width: number, height: number): void;
39
+ dispose(): void;
40
+ }