dockview-core 1.9.1 → 1.10.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 (536) hide show
  1. package/dist/cjs/api/component.api.d.ts +25 -6
  2. package/dist/cjs/api/component.api.js +27 -5
  3. package/dist/cjs/api/dockviewGroupPanelApi.d.ts +7 -1
  4. package/dist/cjs/api/dockviewGroupPanelApi.js +22 -3
  5. package/dist/cjs/api/dockviewPanelApi.d.ts +23 -7
  6. package/dist/cjs/api/dockviewPanelApi.js +49 -12
  7. package/dist/cjs/api/gridviewPanelApi.d.ts +0 -1
  8. package/dist/cjs/api/gridviewPanelApi.js +1 -4
  9. package/dist/cjs/api/panelApi.d.ts +20 -9
  10. package/dist/cjs/api/panelApi.js +30 -30
  11. package/dist/cjs/api/paneviewPanelApi.d.ts +0 -1
  12. package/dist/cjs/api/paneviewPanelApi.js +0 -1
  13. package/dist/cjs/api/splitviewPanelApi.d.ts +0 -1
  14. package/dist/cjs/api/splitviewPanelApi.js +0 -1
  15. package/dist/cjs/array.d.ts +0 -1
  16. package/dist/cjs/array.js +0 -1
  17. package/dist/cjs/constants.d.ts +0 -1
  18. package/dist/cjs/constants.js +0 -1
  19. package/dist/cjs/dnd/abstractDragHandler.d.ts +0 -1
  20. package/dist/cjs/dnd/abstractDragHandler.js +0 -1
  21. package/dist/cjs/dnd/dataTransfer.d.ts +0 -1
  22. package/dist/cjs/dnd/dataTransfer.js +0 -1
  23. package/dist/cjs/dnd/dnd.d.ts +0 -1
  24. package/dist/cjs/dnd/dnd.js +0 -1
  25. package/dist/cjs/dnd/droptarget.d.ts +20 -9
  26. package/dist/cjs/dnd/droptarget.js +71 -14
  27. package/dist/cjs/dnd/ghost.d.ts +0 -1
  28. package/dist/cjs/dnd/ghost.js +0 -1
  29. package/dist/cjs/dnd/groupDragHandler.d.ts +0 -1
  30. package/dist/cjs/dnd/groupDragHandler.js +1 -2
  31. package/dist/cjs/dnd/overlay.d.ts +0 -1
  32. package/dist/cjs/dnd/overlay.js +0 -1
  33. package/dist/cjs/dockview/components/panel/content.d.ts +0 -1
  34. package/dist/cjs/dockview/components/panel/content.js +8 -9
  35. package/dist/cjs/dockview/components/tab/defaultTab.d.ts +0 -1
  36. package/dist/cjs/dockview/components/tab/defaultTab.js +0 -1
  37. package/dist/cjs/dockview/components/tab/tab.d.ts +5 -13
  38. package/dist/cjs/dockview/components/tab/tab.js +5 -6
  39. package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts +17 -14
  40. package/dist/cjs/dockview/components/titlebar/tabsContainer.js +26 -22
  41. package/dist/cjs/dockview/components/titlebar/voidContainer.d.ts +3 -3
  42. package/dist/cjs/dockview/components/titlebar/voidContainer.js +5 -6
  43. package/dist/cjs/dockview/components/watermark/watermark.d.ts +0 -1
  44. package/dist/cjs/dockview/components/watermark/watermark.js +0 -1
  45. package/dist/cjs/dockview/deserializer.d.ts +0 -1
  46. package/dist/cjs/dockview/deserializer.js +0 -1
  47. package/dist/cjs/dockview/dockviewComponent.d.ts +86 -25
  48. package/dist/cjs/dockview/dockviewComponent.js +578 -198
  49. package/dist/cjs/dockview/dockviewFloatingGroupPanel.d.ts +0 -1
  50. package/dist/cjs/dockview/dockviewFloatingGroupPanel.js +0 -1
  51. package/dist/cjs/dockview/dockviewGroupPanel.d.ts +1 -1
  52. package/dist/cjs/dockview/dockviewGroupPanel.js +6 -1
  53. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +79 -34
  54. package/dist/cjs/dockview/dockviewGroupPanelModel.js +227 -57
  55. package/dist/cjs/dockview/dockviewPanel.d.ts +8 -3
  56. package/dist/cjs/dockview/dockviewPanel.js +39 -12
  57. package/dist/cjs/dockview/dockviewPanelModel.d.ts +1 -4
  58. package/dist/cjs/dockview/dockviewPanelModel.js +2 -22
  59. package/dist/cjs/dockview/options.d.ts +9 -4
  60. package/dist/cjs/dockview/options.js +0 -1
  61. package/dist/cjs/dockview/types.d.ts +1 -11
  62. package/dist/cjs/dockview/types.js +0 -9
  63. package/dist/cjs/dom.d.ts +0 -1
  64. package/dist/cjs/dom.js +0 -1
  65. package/dist/cjs/events.d.ts +10 -1
  66. package/dist/cjs/events.js +25 -2
  67. package/dist/cjs/gridview/baseComponentGridview.d.ts +15 -16
  68. package/dist/cjs/gridview/baseComponentGridview.js +37 -27
  69. package/dist/cjs/gridview/basePanelView.d.ts +0 -1
  70. package/dist/cjs/gridview/basePanelView.js +7 -2
  71. package/dist/cjs/gridview/branchNode.d.ts +3 -2
  72. package/dist/cjs/gridview/branchNode.js +12 -2
  73. package/dist/cjs/gridview/gridview.d.ts +5 -3
  74. package/dist/cjs/gridview/gridview.js +54 -21
  75. package/dist/cjs/gridview/gridviewComponent.d.ts +10 -2
  76. package/dist/cjs/gridview/gridviewComponent.js +14 -1
  77. package/dist/cjs/gridview/gridviewPanel.d.ts +3 -3
  78. package/dist/cjs/gridview/gridviewPanel.js +4 -5
  79. package/dist/cjs/gridview/leafNode.d.ts +0 -1
  80. package/dist/cjs/gridview/leafNode.js +0 -1
  81. package/dist/cjs/gridview/options.d.ts +1 -2
  82. package/dist/cjs/gridview/options.js +0 -1
  83. package/dist/cjs/gridview/types.d.ts +0 -1
  84. package/dist/cjs/gridview/types.js +0 -1
  85. package/dist/cjs/index.d.ts +2 -2
  86. package/dist/cjs/index.js +0 -2
  87. package/dist/cjs/lifecycle.d.ts +2 -3
  88. package/dist/cjs/lifecycle.js +5 -2
  89. package/dist/cjs/math.d.ts +0 -1
  90. package/dist/cjs/math.js +0 -1
  91. package/dist/cjs/overlayRenderContainer.d.ts +1 -1
  92. package/dist/cjs/overlayRenderContainer.js +8 -4
  93. package/dist/cjs/panel/componentFactory.d.ts +0 -1
  94. package/dist/cjs/panel/componentFactory.js +0 -1
  95. package/dist/cjs/panel/types.d.ts +1 -2
  96. package/dist/cjs/panel/types.js +0 -1
  97. package/dist/cjs/paneview/defaultPaneviewHeader.d.ts +0 -1
  98. package/dist/cjs/paneview/defaultPaneviewHeader.js +0 -1
  99. package/dist/cjs/paneview/draggablePaneviewPanel.d.ts +0 -1
  100. package/dist/cjs/paneview/draggablePaneviewPanel.js +0 -1
  101. package/dist/cjs/paneview/options.d.ts +1 -2
  102. package/dist/cjs/paneview/options.js +0 -1
  103. package/dist/cjs/paneview/paneview.d.ts +0 -1
  104. package/dist/cjs/paneview/paneview.js +0 -1
  105. package/dist/cjs/paneview/paneviewComponent.d.ts +0 -1
  106. package/dist/cjs/paneview/paneviewComponent.js +0 -1
  107. package/dist/cjs/paneview/paneviewPanel.d.ts +0 -1
  108. package/dist/cjs/paneview/paneviewPanel.js +0 -1
  109. package/dist/cjs/popoutWindow.d.ts +15 -4
  110. package/dist/cjs/popoutWindow.js +140 -56
  111. package/dist/cjs/resizable.d.ts +1 -2
  112. package/dist/cjs/resizable.js +1 -10
  113. package/dist/cjs/splitview/options.d.ts +3 -7
  114. package/dist/cjs/splitview/options.js +0 -1
  115. package/dist/cjs/splitview/splitview.d.ts +3 -1
  116. package/dist/cjs/splitview/splitview.js +12 -1
  117. package/dist/cjs/splitview/splitviewComponent.d.ts +0 -1
  118. package/dist/cjs/splitview/splitviewComponent.js +0 -1
  119. package/dist/cjs/splitview/splitviewPanel.d.ts +2 -3
  120. package/dist/cjs/splitview/splitviewPanel.js +3 -4
  121. package/dist/cjs/splitview/viewItem.d.ts +0 -1
  122. package/dist/cjs/splitview/viewItem.js +0 -1
  123. package/dist/cjs/svg.d.ts +0 -1
  124. package/dist/cjs/svg.js +0 -1
  125. package/dist/cjs/types.d.ts +0 -1
  126. package/dist/cjs/types.js +0 -1
  127. package/dist/dockview-core.amd.js +1265 -529
  128. package/dist/dockview-core.amd.js.map +1 -1
  129. package/dist/dockview-core.amd.min.js +2 -2
  130. package/dist/dockview-core.amd.min.js.map +1 -1
  131. package/dist/dockview-core.amd.min.noStyle.js +2 -2
  132. package/dist/dockview-core.amd.min.noStyle.js.map +1 -1
  133. package/dist/dockview-core.amd.noStyle.js +1264 -528
  134. package/dist/dockview-core.amd.noStyle.js.map +1 -1
  135. package/dist/dockview-core.cjs.js +1265 -529
  136. package/dist/dockview-core.cjs.js.map +1 -1
  137. package/dist/dockview-core.esm.js +1263 -530
  138. package/dist/dockview-core.esm.js.map +1 -1
  139. package/dist/dockview-core.esm.min.js +2 -2
  140. package/dist/dockview-core.esm.min.js.map +1 -1
  141. package/dist/dockview-core.js +1265 -529
  142. package/dist/dockview-core.js.map +1 -1
  143. package/dist/dockview-core.min.js +2 -2
  144. package/dist/dockview-core.min.js.map +1 -1
  145. package/dist/dockview-core.min.noStyle.js +2 -2
  146. package/dist/dockview-core.min.noStyle.js.map +1 -1
  147. package/dist/dockview-core.noStyle.js +1264 -528
  148. package/dist/dockview-core.noStyle.js.map +1 -1
  149. package/dist/esm/api/component.api.d.ts +25 -6
  150. package/dist/esm/api/component.api.js +19 -5
  151. package/dist/esm/api/dockviewGroupPanelApi.d.ts +7 -1
  152. package/dist/esm/api/dockviewGroupPanelApi.js +22 -3
  153. package/dist/esm/api/dockviewPanelApi.d.ts +23 -7
  154. package/dist/esm/api/dockviewPanelApi.js +46 -13
  155. package/dist/esm/api/gridviewPanelApi.d.ts +0 -1
  156. package/dist/esm/api/gridviewPanelApi.js +1 -4
  157. package/dist/esm/api/panelApi.d.ts +20 -9
  158. package/dist/esm/api/panelApi.js +23 -30
  159. package/dist/esm/api/paneviewPanelApi.d.ts +0 -1
  160. package/dist/esm/api/paneviewPanelApi.js +0 -1
  161. package/dist/esm/api/splitviewPanelApi.d.ts +0 -1
  162. package/dist/esm/api/splitviewPanelApi.js +0 -1
  163. package/dist/esm/array.d.ts +0 -1
  164. package/dist/esm/array.js +0 -1
  165. package/dist/esm/constants.d.ts +0 -1
  166. package/dist/esm/constants.js +0 -1
  167. package/dist/esm/dnd/abstractDragHandler.d.ts +0 -1
  168. package/dist/esm/dnd/abstractDragHandler.js +0 -1
  169. package/dist/esm/dnd/dataTransfer.d.ts +0 -1
  170. package/dist/esm/dnd/dataTransfer.js +0 -1
  171. package/dist/esm/dnd/dnd.d.ts +0 -1
  172. package/dist/esm/dnd/dnd.js +0 -1
  173. package/dist/esm/dnd/droptarget.d.ts +20 -9
  174. package/dist/esm/dnd/droptarget.js +59 -14
  175. package/dist/esm/dnd/ghost.d.ts +0 -1
  176. package/dist/esm/dnd/ghost.js +0 -1
  177. package/dist/esm/dnd/groupDragHandler.d.ts +0 -1
  178. package/dist/esm/dnd/groupDragHandler.js +1 -2
  179. package/dist/esm/dnd/overlay.d.ts +0 -1
  180. package/dist/esm/dnd/overlay.js +0 -1
  181. package/dist/esm/dockview/components/panel/content.d.ts +0 -1
  182. package/dist/esm/dockview/components/panel/content.js +8 -9
  183. package/dist/esm/dockview/components/tab/defaultTab.d.ts +0 -1
  184. package/dist/esm/dockview/components/tab/defaultTab.js +0 -1
  185. package/dist/esm/dockview/components/tab/tab.d.ts +5 -13
  186. package/dist/esm/dockview/components/tab/tab.js +6 -7
  187. package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts +17 -14
  188. package/dist/esm/dockview/components/titlebar/tabsContainer.js +24 -20
  189. package/dist/esm/dockview/components/titlebar/voidContainer.d.ts +3 -3
  190. package/dist/esm/dockview/components/titlebar/voidContainer.js +6 -7
  191. package/dist/esm/dockview/components/watermark/watermark.d.ts +0 -1
  192. package/dist/esm/dockview/components/watermark/watermark.js +0 -1
  193. package/dist/esm/dockview/deserializer.d.ts +0 -1
  194. package/dist/esm/dockview/deserializer.js +0 -1
  195. package/dist/esm/dockview/dockviewComponent.d.ts +86 -25
  196. package/dist/esm/dockview/dockviewComponent.js +521 -163
  197. package/dist/esm/dockview/dockviewFloatingGroupPanel.d.ts +0 -1
  198. package/dist/esm/dockview/dockviewFloatingGroupPanel.js +0 -1
  199. package/dist/esm/dockview/dockviewGroupPanel.d.ts +1 -1
  200. package/dist/esm/dockview/dockviewGroupPanel.js +6 -1
  201. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +79 -34
  202. package/dist/esm/dockview/dockviewGroupPanelModel.js +170 -53
  203. package/dist/esm/dockview/dockviewPanel.d.ts +8 -3
  204. package/dist/esm/dockview/dockviewPanel.js +39 -12
  205. package/dist/esm/dockview/dockviewPanelModel.d.ts +1 -4
  206. package/dist/esm/dockview/dockviewPanelModel.js +2 -22
  207. package/dist/esm/dockview/options.d.ts +9 -4
  208. package/dist/esm/dockview/options.js +0 -1
  209. package/dist/esm/dockview/types.d.ts +1 -11
  210. package/dist/esm/dockview/types.js +1 -8
  211. package/dist/esm/dom.d.ts +0 -1
  212. package/dist/esm/dom.js +0 -1
  213. package/dist/esm/events.d.ts +10 -1
  214. package/dist/esm/events.js +14 -1
  215. package/dist/esm/gridview/baseComponentGridview.d.ts +15 -16
  216. package/dist/esm/gridview/baseComponentGridview.js +33 -27
  217. package/dist/esm/gridview/basePanelView.d.ts +0 -1
  218. package/dist/esm/gridview/basePanelView.js +7 -2
  219. package/dist/esm/gridview/branchNode.d.ts +3 -2
  220. package/dist/esm/gridview/branchNode.js +8 -2
  221. package/dist/esm/gridview/gridview.d.ts +5 -3
  222. package/dist/esm/gridview/gridview.js +49 -20
  223. package/dist/esm/gridview/gridviewComponent.d.ts +10 -2
  224. package/dist/esm/gridview/gridviewComponent.js +14 -1
  225. package/dist/esm/gridview/gridviewPanel.d.ts +3 -3
  226. package/dist/esm/gridview/gridviewPanel.js +4 -5
  227. package/dist/esm/gridview/leafNode.d.ts +0 -1
  228. package/dist/esm/gridview/leafNode.js +0 -1
  229. package/dist/esm/gridview/options.d.ts +1 -2
  230. package/dist/esm/gridview/options.js +0 -1
  231. package/dist/esm/gridview/types.d.ts +0 -1
  232. package/dist/esm/gridview/types.js +0 -1
  233. package/dist/esm/index.d.ts +2 -2
  234. package/dist/esm/index.js +0 -2
  235. package/dist/esm/lifecycle.d.ts +2 -3
  236. package/dist/esm/lifecycle.js +5 -2
  237. package/dist/esm/math.d.ts +0 -1
  238. package/dist/esm/math.js +0 -1
  239. package/dist/esm/overlayRenderContainer.d.ts +1 -1
  240. package/dist/esm/overlayRenderContainer.js +8 -4
  241. package/dist/esm/panel/componentFactory.d.ts +0 -1
  242. package/dist/esm/panel/componentFactory.js +0 -1
  243. package/dist/esm/panel/types.d.ts +1 -2
  244. package/dist/esm/panel/types.js +0 -1
  245. package/dist/esm/paneview/defaultPaneviewHeader.d.ts +0 -1
  246. package/dist/esm/paneview/defaultPaneviewHeader.js +0 -1
  247. package/dist/esm/paneview/draggablePaneviewPanel.d.ts +0 -1
  248. package/dist/esm/paneview/draggablePaneviewPanel.js +0 -1
  249. package/dist/esm/paneview/options.d.ts +1 -2
  250. package/dist/esm/paneview/options.js +0 -1
  251. package/dist/esm/paneview/paneview.d.ts +0 -1
  252. package/dist/esm/paneview/paneview.js +0 -1
  253. package/dist/esm/paneview/paneviewComponent.d.ts +0 -1
  254. package/dist/esm/paneview/paneviewComponent.js +0 -1
  255. package/dist/esm/paneview/paneviewPanel.d.ts +0 -1
  256. package/dist/esm/paneview/paneviewPanel.js +0 -1
  257. package/dist/esm/popoutWindow.d.ts +15 -4
  258. package/dist/esm/popoutWindow.js +105 -52
  259. package/dist/esm/resizable.d.ts +1 -2
  260. package/dist/esm/resizable.js +1 -10
  261. package/dist/esm/splitview/options.d.ts +3 -7
  262. package/dist/esm/splitview/options.js +0 -1
  263. package/dist/esm/splitview/splitview.d.ts +3 -1
  264. package/dist/esm/splitview/splitview.js +8 -1
  265. package/dist/esm/splitview/splitviewComponent.d.ts +0 -1
  266. package/dist/esm/splitview/splitviewComponent.js +0 -1
  267. package/dist/esm/splitview/splitviewPanel.d.ts +2 -3
  268. package/dist/esm/splitview/splitviewPanel.js +3 -4
  269. package/dist/esm/splitview/viewItem.d.ts +0 -1
  270. package/dist/esm/splitview/viewItem.js +0 -1
  271. package/dist/esm/svg.d.ts +0 -1
  272. package/dist/esm/svg.js +0 -1
  273. package/dist/esm/types.d.ts +0 -1
  274. package/dist/esm/types.js +0 -1
  275. package/dist/styles/dockview.css +20 -6
  276. package/package.json +3 -3
  277. package/dist/cjs/api/component.api.d.ts.map +0 -1
  278. package/dist/cjs/api/component.api.js.map +0 -1
  279. package/dist/cjs/api/dockviewGroupPanelApi.d.ts.map +0 -1
  280. package/dist/cjs/api/dockviewGroupPanelApi.js.map +0 -1
  281. package/dist/cjs/api/dockviewPanelApi.d.ts.map +0 -1
  282. package/dist/cjs/api/dockviewPanelApi.js.map +0 -1
  283. package/dist/cjs/api/gridviewPanelApi.d.ts.map +0 -1
  284. package/dist/cjs/api/gridviewPanelApi.js.map +0 -1
  285. package/dist/cjs/api/panelApi.d.ts.map +0 -1
  286. package/dist/cjs/api/panelApi.js.map +0 -1
  287. package/dist/cjs/api/paneviewPanelApi.d.ts.map +0 -1
  288. package/dist/cjs/api/paneviewPanelApi.js.map +0 -1
  289. package/dist/cjs/api/splitviewPanelApi.d.ts.map +0 -1
  290. package/dist/cjs/api/splitviewPanelApi.js.map +0 -1
  291. package/dist/cjs/array.d.ts.map +0 -1
  292. package/dist/cjs/array.js.map +0 -1
  293. package/dist/cjs/constants.d.ts.map +0 -1
  294. package/dist/cjs/constants.js.map +0 -1
  295. package/dist/cjs/dnd/abstractDragHandler.d.ts.map +0 -1
  296. package/dist/cjs/dnd/abstractDragHandler.js.map +0 -1
  297. package/dist/cjs/dnd/dataTransfer.d.ts.map +0 -1
  298. package/dist/cjs/dnd/dataTransfer.js.map +0 -1
  299. package/dist/cjs/dnd/dnd.d.ts.map +0 -1
  300. package/dist/cjs/dnd/dnd.js.map +0 -1
  301. package/dist/cjs/dnd/droptarget.d.ts.map +0 -1
  302. package/dist/cjs/dnd/droptarget.js.map +0 -1
  303. package/dist/cjs/dnd/ghost.d.ts.map +0 -1
  304. package/dist/cjs/dnd/ghost.js.map +0 -1
  305. package/dist/cjs/dnd/groupDragHandler.d.ts.map +0 -1
  306. package/dist/cjs/dnd/groupDragHandler.js.map +0 -1
  307. package/dist/cjs/dnd/overlay.d.ts.map +0 -1
  308. package/dist/cjs/dnd/overlay.js.map +0 -1
  309. package/dist/cjs/dockview/components/panel/content.d.ts.map +0 -1
  310. package/dist/cjs/dockview/components/panel/content.js.map +0 -1
  311. package/dist/cjs/dockview/components/tab/defaultTab.d.ts.map +0 -1
  312. package/dist/cjs/dockview/components/tab/defaultTab.js.map +0 -1
  313. package/dist/cjs/dockview/components/tab/tab.d.ts.map +0 -1
  314. package/dist/cjs/dockview/components/tab/tab.js.map +0 -1
  315. package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts.map +0 -1
  316. package/dist/cjs/dockview/components/titlebar/tabsContainer.js.map +0 -1
  317. package/dist/cjs/dockview/components/titlebar/voidContainer.d.ts.map +0 -1
  318. package/dist/cjs/dockview/components/titlebar/voidContainer.js.map +0 -1
  319. package/dist/cjs/dockview/components/watermark/watermark.d.ts.map +0 -1
  320. package/dist/cjs/dockview/components/watermark/watermark.js.map +0 -1
  321. package/dist/cjs/dockview/deserializer.d.ts.map +0 -1
  322. package/dist/cjs/dockview/deserializer.js.map +0 -1
  323. package/dist/cjs/dockview/dockviewComponent.d.ts.map +0 -1
  324. package/dist/cjs/dockview/dockviewComponent.js.map +0 -1
  325. package/dist/cjs/dockview/dockviewFloatingGroupPanel.d.ts.map +0 -1
  326. package/dist/cjs/dockview/dockviewFloatingGroupPanel.js.map +0 -1
  327. package/dist/cjs/dockview/dockviewGroupPanel.d.ts.map +0 -1
  328. package/dist/cjs/dockview/dockviewGroupPanel.js.map +0 -1
  329. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts.map +0 -1
  330. package/dist/cjs/dockview/dockviewGroupPanelModel.js.map +0 -1
  331. package/dist/cjs/dockview/dockviewPanel.d.ts.map +0 -1
  332. package/dist/cjs/dockview/dockviewPanel.js.map +0 -1
  333. package/dist/cjs/dockview/dockviewPanelModel.d.ts.map +0 -1
  334. package/dist/cjs/dockview/dockviewPanelModel.js.map +0 -1
  335. package/dist/cjs/dockview/dockviewPopoutGroupPanel.d.ts +0 -16
  336. package/dist/cjs/dockview/dockviewPopoutGroupPanel.d.ts.map +0 -1
  337. package/dist/cjs/dockview/dockviewPopoutGroupPanel.js +0 -50
  338. package/dist/cjs/dockview/dockviewPopoutGroupPanel.js.map +0 -1
  339. package/dist/cjs/dockview/options.d.ts.map +0 -1
  340. package/dist/cjs/dockview/options.js.map +0 -1
  341. package/dist/cjs/dockview/types.d.ts.map +0 -1
  342. package/dist/cjs/dockview/types.js.map +0 -1
  343. package/dist/cjs/dom.d.ts.map +0 -1
  344. package/dist/cjs/dom.js.map +0 -1
  345. package/dist/cjs/events.d.ts.map +0 -1
  346. package/dist/cjs/events.js.map +0 -1
  347. package/dist/cjs/gridview/baseComponentGridview.d.ts.map +0 -1
  348. package/dist/cjs/gridview/baseComponentGridview.js.map +0 -1
  349. package/dist/cjs/gridview/basePanelView.d.ts.map +0 -1
  350. package/dist/cjs/gridview/basePanelView.js.map +0 -1
  351. package/dist/cjs/gridview/branchNode.d.ts.map +0 -1
  352. package/dist/cjs/gridview/branchNode.js.map +0 -1
  353. package/dist/cjs/gridview/gridview.d.ts.map +0 -1
  354. package/dist/cjs/gridview/gridview.js.map +0 -1
  355. package/dist/cjs/gridview/gridviewComponent.d.ts.map +0 -1
  356. package/dist/cjs/gridview/gridviewComponent.js.map +0 -1
  357. package/dist/cjs/gridview/gridviewPanel.d.ts.map +0 -1
  358. package/dist/cjs/gridview/gridviewPanel.js.map +0 -1
  359. package/dist/cjs/gridview/leafNode.d.ts.map +0 -1
  360. package/dist/cjs/gridview/leafNode.js.map +0 -1
  361. package/dist/cjs/gridview/options.d.ts.map +0 -1
  362. package/dist/cjs/gridview/options.js.map +0 -1
  363. package/dist/cjs/gridview/types.d.ts.map +0 -1
  364. package/dist/cjs/gridview/types.js.map +0 -1
  365. package/dist/cjs/index.d.ts.map +0 -1
  366. package/dist/cjs/index.js.map +0 -1
  367. package/dist/cjs/lifecycle.d.ts.map +0 -1
  368. package/dist/cjs/lifecycle.js.map +0 -1
  369. package/dist/cjs/math.d.ts.map +0 -1
  370. package/dist/cjs/math.js.map +0 -1
  371. package/dist/cjs/overlayRenderContainer.d.ts.map +0 -1
  372. package/dist/cjs/overlayRenderContainer.js.map +0 -1
  373. package/dist/cjs/panel/componentFactory.d.ts.map +0 -1
  374. package/dist/cjs/panel/componentFactory.js.map +0 -1
  375. package/dist/cjs/panel/types.d.ts.map +0 -1
  376. package/dist/cjs/panel/types.js.map +0 -1
  377. package/dist/cjs/paneview/defaultPaneviewHeader.d.ts.map +0 -1
  378. package/dist/cjs/paneview/defaultPaneviewHeader.js.map +0 -1
  379. package/dist/cjs/paneview/draggablePaneviewPanel.d.ts.map +0 -1
  380. package/dist/cjs/paneview/draggablePaneviewPanel.js.map +0 -1
  381. package/dist/cjs/paneview/options.d.ts.map +0 -1
  382. package/dist/cjs/paneview/options.js.map +0 -1
  383. package/dist/cjs/paneview/paneview.d.ts.map +0 -1
  384. package/dist/cjs/paneview/paneview.js.map +0 -1
  385. package/dist/cjs/paneview/paneviewComponent.d.ts.map +0 -1
  386. package/dist/cjs/paneview/paneviewComponent.js.map +0 -1
  387. package/dist/cjs/paneview/paneviewPanel.d.ts.map +0 -1
  388. package/dist/cjs/paneview/paneviewPanel.js.map +0 -1
  389. package/dist/cjs/popoutWindow.d.ts.map +0 -1
  390. package/dist/cjs/popoutWindow.js.map +0 -1
  391. package/dist/cjs/resizable.d.ts.map +0 -1
  392. package/dist/cjs/resizable.js.map +0 -1
  393. package/dist/cjs/splitview/options.d.ts.map +0 -1
  394. package/dist/cjs/splitview/options.js.map +0 -1
  395. package/dist/cjs/splitview/splitview.d.ts.map +0 -1
  396. package/dist/cjs/splitview/splitview.js.map +0 -1
  397. package/dist/cjs/splitview/splitviewComponent.d.ts.map +0 -1
  398. package/dist/cjs/splitview/splitviewComponent.js.map +0 -1
  399. package/dist/cjs/splitview/splitviewPanel.d.ts.map +0 -1
  400. package/dist/cjs/splitview/splitviewPanel.js.map +0 -1
  401. package/dist/cjs/splitview/viewItem.d.ts.map +0 -1
  402. package/dist/cjs/splitview/viewItem.js.map +0 -1
  403. package/dist/cjs/svg.d.ts.map +0 -1
  404. package/dist/cjs/svg.js.map +0 -1
  405. package/dist/cjs/types.d.ts.map +0 -1
  406. package/dist/cjs/types.js.map +0 -1
  407. package/dist/esm/api/component.api.d.ts.map +0 -1
  408. package/dist/esm/api/component.api.js.map +0 -1
  409. package/dist/esm/api/dockviewGroupPanelApi.d.ts.map +0 -1
  410. package/dist/esm/api/dockviewGroupPanelApi.js.map +0 -1
  411. package/dist/esm/api/dockviewPanelApi.d.ts.map +0 -1
  412. package/dist/esm/api/dockviewPanelApi.js.map +0 -1
  413. package/dist/esm/api/gridviewPanelApi.d.ts.map +0 -1
  414. package/dist/esm/api/gridviewPanelApi.js.map +0 -1
  415. package/dist/esm/api/panelApi.d.ts.map +0 -1
  416. package/dist/esm/api/panelApi.js.map +0 -1
  417. package/dist/esm/api/paneviewPanelApi.d.ts.map +0 -1
  418. package/dist/esm/api/paneviewPanelApi.js.map +0 -1
  419. package/dist/esm/api/splitviewPanelApi.d.ts.map +0 -1
  420. package/dist/esm/api/splitviewPanelApi.js.map +0 -1
  421. package/dist/esm/array.d.ts.map +0 -1
  422. package/dist/esm/array.js.map +0 -1
  423. package/dist/esm/constants.d.ts.map +0 -1
  424. package/dist/esm/constants.js.map +0 -1
  425. package/dist/esm/dnd/abstractDragHandler.d.ts.map +0 -1
  426. package/dist/esm/dnd/abstractDragHandler.js.map +0 -1
  427. package/dist/esm/dnd/dataTransfer.d.ts.map +0 -1
  428. package/dist/esm/dnd/dataTransfer.js.map +0 -1
  429. package/dist/esm/dnd/dnd.d.ts.map +0 -1
  430. package/dist/esm/dnd/dnd.js.map +0 -1
  431. package/dist/esm/dnd/droptarget.d.ts.map +0 -1
  432. package/dist/esm/dnd/droptarget.js.map +0 -1
  433. package/dist/esm/dnd/ghost.d.ts.map +0 -1
  434. package/dist/esm/dnd/ghost.js.map +0 -1
  435. package/dist/esm/dnd/groupDragHandler.d.ts.map +0 -1
  436. package/dist/esm/dnd/groupDragHandler.js.map +0 -1
  437. package/dist/esm/dnd/overlay.d.ts.map +0 -1
  438. package/dist/esm/dnd/overlay.js.map +0 -1
  439. package/dist/esm/dockview/components/panel/content.d.ts.map +0 -1
  440. package/dist/esm/dockview/components/panel/content.js.map +0 -1
  441. package/dist/esm/dockview/components/tab/defaultTab.d.ts.map +0 -1
  442. package/dist/esm/dockview/components/tab/defaultTab.js.map +0 -1
  443. package/dist/esm/dockview/components/tab/tab.d.ts.map +0 -1
  444. package/dist/esm/dockview/components/tab/tab.js.map +0 -1
  445. package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts.map +0 -1
  446. package/dist/esm/dockview/components/titlebar/tabsContainer.js.map +0 -1
  447. package/dist/esm/dockview/components/titlebar/voidContainer.d.ts.map +0 -1
  448. package/dist/esm/dockview/components/titlebar/voidContainer.js.map +0 -1
  449. package/dist/esm/dockview/components/watermark/watermark.d.ts.map +0 -1
  450. package/dist/esm/dockview/components/watermark/watermark.js.map +0 -1
  451. package/dist/esm/dockview/deserializer.d.ts.map +0 -1
  452. package/dist/esm/dockview/deserializer.js.map +0 -1
  453. package/dist/esm/dockview/dockviewComponent.d.ts.map +0 -1
  454. package/dist/esm/dockview/dockviewComponent.js.map +0 -1
  455. package/dist/esm/dockview/dockviewFloatingGroupPanel.d.ts.map +0 -1
  456. package/dist/esm/dockview/dockviewFloatingGroupPanel.js.map +0 -1
  457. package/dist/esm/dockview/dockviewGroupPanel.d.ts.map +0 -1
  458. package/dist/esm/dockview/dockviewGroupPanel.js.map +0 -1
  459. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts.map +0 -1
  460. package/dist/esm/dockview/dockviewGroupPanelModel.js.map +0 -1
  461. package/dist/esm/dockview/dockviewPanel.d.ts.map +0 -1
  462. package/dist/esm/dockview/dockviewPanel.js.map +0 -1
  463. package/dist/esm/dockview/dockviewPanelModel.d.ts.map +0 -1
  464. package/dist/esm/dockview/dockviewPanelModel.js.map +0 -1
  465. package/dist/esm/dockview/dockviewPopoutGroupPanel.d.ts +0 -16
  466. package/dist/esm/dockview/dockviewPopoutGroupPanel.d.ts.map +0 -1
  467. package/dist/esm/dockview/dockviewPopoutGroupPanel.js +0 -28
  468. package/dist/esm/dockview/dockviewPopoutGroupPanel.js.map +0 -1
  469. package/dist/esm/dockview/options.d.ts.map +0 -1
  470. package/dist/esm/dockview/options.js.map +0 -1
  471. package/dist/esm/dockview/types.d.ts.map +0 -1
  472. package/dist/esm/dockview/types.js.map +0 -1
  473. package/dist/esm/dom.d.ts.map +0 -1
  474. package/dist/esm/dom.js.map +0 -1
  475. package/dist/esm/events.d.ts.map +0 -1
  476. package/dist/esm/events.js.map +0 -1
  477. package/dist/esm/gridview/baseComponentGridview.d.ts.map +0 -1
  478. package/dist/esm/gridview/baseComponentGridview.js.map +0 -1
  479. package/dist/esm/gridview/basePanelView.d.ts.map +0 -1
  480. package/dist/esm/gridview/basePanelView.js.map +0 -1
  481. package/dist/esm/gridview/branchNode.d.ts.map +0 -1
  482. package/dist/esm/gridview/branchNode.js.map +0 -1
  483. package/dist/esm/gridview/gridview.d.ts.map +0 -1
  484. package/dist/esm/gridview/gridview.js.map +0 -1
  485. package/dist/esm/gridview/gridviewComponent.d.ts.map +0 -1
  486. package/dist/esm/gridview/gridviewComponent.js.map +0 -1
  487. package/dist/esm/gridview/gridviewPanel.d.ts.map +0 -1
  488. package/dist/esm/gridview/gridviewPanel.js.map +0 -1
  489. package/dist/esm/gridview/leafNode.d.ts.map +0 -1
  490. package/dist/esm/gridview/leafNode.js.map +0 -1
  491. package/dist/esm/gridview/options.d.ts.map +0 -1
  492. package/dist/esm/gridview/options.js.map +0 -1
  493. package/dist/esm/gridview/types.d.ts.map +0 -1
  494. package/dist/esm/gridview/types.js.map +0 -1
  495. package/dist/esm/index.d.ts.map +0 -1
  496. package/dist/esm/index.js.map +0 -1
  497. package/dist/esm/lifecycle.d.ts.map +0 -1
  498. package/dist/esm/lifecycle.js.map +0 -1
  499. package/dist/esm/math.d.ts.map +0 -1
  500. package/dist/esm/math.js.map +0 -1
  501. package/dist/esm/overlayRenderContainer.d.ts.map +0 -1
  502. package/dist/esm/overlayRenderContainer.js.map +0 -1
  503. package/dist/esm/panel/componentFactory.d.ts.map +0 -1
  504. package/dist/esm/panel/componentFactory.js.map +0 -1
  505. package/dist/esm/panel/types.d.ts.map +0 -1
  506. package/dist/esm/panel/types.js.map +0 -1
  507. package/dist/esm/paneview/defaultPaneviewHeader.d.ts.map +0 -1
  508. package/dist/esm/paneview/defaultPaneviewHeader.js.map +0 -1
  509. package/dist/esm/paneview/draggablePaneviewPanel.d.ts.map +0 -1
  510. package/dist/esm/paneview/draggablePaneviewPanel.js.map +0 -1
  511. package/dist/esm/paneview/options.d.ts.map +0 -1
  512. package/dist/esm/paneview/options.js.map +0 -1
  513. package/dist/esm/paneview/paneview.d.ts.map +0 -1
  514. package/dist/esm/paneview/paneview.js.map +0 -1
  515. package/dist/esm/paneview/paneviewComponent.d.ts.map +0 -1
  516. package/dist/esm/paneview/paneviewComponent.js.map +0 -1
  517. package/dist/esm/paneview/paneviewPanel.d.ts.map +0 -1
  518. package/dist/esm/paneview/paneviewPanel.js.map +0 -1
  519. package/dist/esm/popoutWindow.d.ts.map +0 -1
  520. package/dist/esm/popoutWindow.js.map +0 -1
  521. package/dist/esm/resizable.d.ts.map +0 -1
  522. package/dist/esm/resizable.js.map +0 -1
  523. package/dist/esm/splitview/options.d.ts.map +0 -1
  524. package/dist/esm/splitview/options.js.map +0 -1
  525. package/dist/esm/splitview/splitview.d.ts.map +0 -1
  526. package/dist/esm/splitview/splitview.js.map +0 -1
  527. package/dist/esm/splitview/splitviewComponent.d.ts.map +0 -1
  528. package/dist/esm/splitview/splitviewComponent.js.map +0 -1
  529. package/dist/esm/splitview/splitviewPanel.d.ts.map +0 -1
  530. package/dist/esm/splitview/splitviewPanel.js.map +0 -1
  531. package/dist/esm/splitview/viewItem.d.ts.map +0 -1
  532. package/dist/esm/splitview/viewItem.js.map +0 -1
  533. package/dist/esm/svg.d.ts.map +0 -1
  534. package/dist/esm/svg.js.map +0 -1
  535. package/dist/esm/types.d.ts.map +0 -1
  536. package/dist/esm/types.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * dockview-core
3
- * @version 1.9.1
3
+ * @version 1.10.0
4
4
  * @link https://github.com/mathuo/dockview
5
5
  * @license MIT
6
6
  */
@@ -88,6 +88,17 @@ define(['exports'], (function (exports) { 'use strict';
88
88
  };
89
89
  };
90
90
  })(exports.DockviewEvent || (exports.DockviewEvent = {}));
91
+ class DockviewEvent {
92
+ constructor() {
93
+ this._defaultPrevented = false;
94
+ }
95
+ get defaultPrevented() {
96
+ return this._defaultPrevented;
97
+ }
98
+ preventDefault() {
99
+ this._defaultPrevented = true;
100
+ }
101
+ }
91
102
  class LeakageMonitor {
92
103
  constructor() {
93
104
  this.events = new Map();
@@ -131,6 +142,9 @@ define(['exports'], (function (exports) { 'use strict';
131
142
  }
132
143
  Emitter.ENABLE_TRACKING = isEnabled;
133
144
  }
145
+ get value() {
146
+ return this._last;
147
+ }
134
148
  constructor(options) {
135
149
  this.options = options;
136
150
  this._listeners = [];
@@ -253,8 +267,12 @@ define(['exports'], (function (exports) { 'use strict';
253
267
  args.forEach((arg) => this._disposables.push(arg));
254
268
  }
255
269
  dispose() {
256
- this._disposables.forEach((arg) => arg.dispose());
270
+ if (this._isDisposed) {
271
+ return;
272
+ }
257
273
  this._isDisposed = true;
274
+ this._disposables.forEach((arg) => arg.dispose());
275
+ this._disposables = [];
258
276
  }
259
277
  }
260
278
  class MutableDisposable {
@@ -738,6 +756,13 @@ define(['exports'], (function (exports) { 'use strict';
738
756
  this._endSnappingEnabled = endSnappingEnabled;
739
757
  this.updateSashEnablement();
740
758
  }
759
+ get disabled() {
760
+ return this._disabled;
761
+ }
762
+ set disabled(value) {
763
+ this._disabled = value;
764
+ toggleClass(this.element, 'dv-splitview-disabled', value);
765
+ }
741
766
  constructor(container, options) {
742
767
  this.container = container;
743
768
  this.viewItems = [];
@@ -748,6 +773,7 @@ define(['exports'], (function (exports) { 'use strict';
748
773
  this._proportions = undefined;
749
774
  this._startSnappingEnabled = true;
750
775
  this._endSnappingEnabled = true;
776
+ this._disabled = false;
751
777
  this._onDidSashEnd = new Emitter();
752
778
  this.onDidSashEnd = this._onDidSashEnd.event;
753
779
  this._onDidAddView = new Emitter();
@@ -1675,7 +1701,13 @@ define(['exports'], (function (exports) { 'use strict';
1675
1701
  }
1676
1702
  return exports.LayoutPriority.Normal;
1677
1703
  }
1678
- constructor(orientation, proportionalLayout, styles, size, orthogonalSize, childDescriptors) {
1704
+ get disabled() {
1705
+ return this.splitview.disabled;
1706
+ }
1707
+ set disabled(value) {
1708
+ this.splitview.disabled = value;
1709
+ }
1710
+ constructor(orientation, proportionalLayout, styles, size, orthogonalSize, disabled, childDescriptors) {
1679
1711
  super();
1680
1712
  this.orientation = orientation;
1681
1713
  this.proportionalLayout = proportionalLayout;
@@ -1720,6 +1752,7 @@ define(['exports'], (function (exports) { 'use strict';
1720
1752
  styles,
1721
1753
  });
1722
1754
  }
1755
+ this.disabled = disabled;
1723
1756
  this.addDisposables(this._onDidChange, this._onDidVisibilityChange, this.splitview.onDidSashEnd(() => {
1724
1757
  this._onDidChange.fire({});
1725
1758
  }));
@@ -1853,7 +1886,7 @@ define(['exports'], (function (exports) { 'use strict';
1853
1886
  }
1854
1887
  function flipNode(node, size, orthogonalSize) {
1855
1888
  if (node instanceof BranchNode) {
1856
- const result = new BranchNode(orthogonal(node.orientation), node.proportionalLayout, node.styles, size, orthogonalSize);
1889
+ const result = new BranchNode(orthogonal(node.orientation), node.proportionalLayout, node.styles, size, orthogonalSize, node.disabled);
1857
1890
  let totalSize = 0;
1858
1891
  for (let i = node.children.length - 1; i >= 0; i--) {
1859
1892
  const child = node.children[i];
@@ -1989,31 +2022,57 @@ define(['exports'], (function (exports) { 'use strict';
1989
2022
  get maximumHeight() {
1990
2023
  return this.root.maximumHeight;
1991
2024
  }
2025
+ get locked() {
2026
+ return this._locked;
2027
+ }
2028
+ set locked(value) {
2029
+ this._locked = value;
2030
+ const branch = [this.root];
2031
+ /**
2032
+ * simple depth-first-search to cover all nodes
2033
+ *
2034
+ * @see https://en.wikipedia.org/wiki/Depth-first_search
2035
+ */
2036
+ while (branch.length > 0) {
2037
+ const node = branch.pop();
2038
+ if (node instanceof BranchNode) {
2039
+ node.disabled = value;
2040
+ branch.push(...node.children);
2041
+ }
2042
+ }
2043
+ }
1992
2044
  maximizedView() {
1993
2045
  var _a;
1994
- return (_a = this._maximizedNode) === null || _a === void 0 ? void 0 : _a.view;
2046
+ return (_a = this._maximizedNode) === null || _a === void 0 ? void 0 : _a.leaf.view;
1995
2047
  }
1996
2048
  hasMaximizedView() {
1997
2049
  return this._maximizedNode !== undefined;
1998
2050
  }
1999
2051
  maximizeView(view) {
2052
+ var _a;
2000
2053
  const location = getGridLocation(view.element);
2001
2054
  const [_, node] = this.getNode(location);
2002
2055
  if (!(node instanceof LeafNode)) {
2003
2056
  return;
2004
2057
  }
2005
- if (this._maximizedNode === node) {
2058
+ if (((_a = this._maximizedNode) === null || _a === void 0 ? void 0 : _a.leaf) === node) {
2006
2059
  return;
2007
2060
  }
2008
2061
  if (this.hasMaximizedView()) {
2009
2062
  this.exitMaximizedView();
2010
2063
  }
2064
+ const hiddenOnMaximize = [];
2011
2065
  function hideAllViewsBut(parent, exclude) {
2012
2066
  for (let i = 0; i < parent.children.length; i++) {
2013
2067
  const child = parent.children[i];
2014
2068
  if (child instanceof LeafNode) {
2015
2069
  if (child !== exclude) {
2016
- parent.setChildVisible(i, false);
2070
+ if (parent.isChildVisible(i)) {
2071
+ parent.setChildVisible(i, false);
2072
+ }
2073
+ else {
2074
+ hiddenOnMaximize.push(child);
2075
+ }
2017
2076
  }
2018
2077
  }
2019
2078
  else {
@@ -2022,18 +2081,21 @@ define(['exports'], (function (exports) { 'use strict';
2022
2081
  }
2023
2082
  }
2024
2083
  hideAllViewsBut(this.root, node);
2025
- this._maximizedNode = node;
2026
- this._onDidMaxmizedNodeChange.fire();
2084
+ this._maximizedNode = { leaf: node, hiddenOnMaximize };
2085
+ this._onDidMaximizedNodeChange.fire();
2027
2086
  }
2028
2087
  exitMaximizedView() {
2029
2088
  if (!this._maximizedNode) {
2030
2089
  return;
2031
2090
  }
2091
+ const hiddenOnMaximize = this._maximizedNode.hiddenOnMaximize;
2032
2092
  function showViewsInReverseOrder(parent) {
2033
2093
  for (let index = parent.children.length - 1; index >= 0; index--) {
2034
2094
  const child = parent.children[index];
2035
2095
  if (child instanceof LeafNode) {
2036
- parent.setChildVisible(index, true);
2096
+ if (!hiddenOnMaximize.includes(child)) {
2097
+ parent.setChildVisible(index, true);
2098
+ }
2037
2099
  }
2038
2100
  else {
2039
2101
  showViewsInReverseOrder(child);
@@ -2042,13 +2104,13 @@ define(['exports'], (function (exports) { 'use strict';
2042
2104
  }
2043
2105
  showViewsInReverseOrder(this.root);
2044
2106
  this._maximizedNode = undefined;
2045
- this._onDidMaxmizedNodeChange.fire();
2107
+ this._onDidMaximizedNodeChange.fire();
2046
2108
  }
2047
2109
  serialize() {
2048
2110
  if (this.hasMaximizedView()) {
2049
2111
  /**
2050
- * do not persist maximized view state but we must first exit any maximized views
2051
- * before serialization to ensure the correct dimensions are persisted
2112
+ * do not persist maximized view state
2113
+ * firstly exit any maximized views to ensure the correct dimensions are persisted
2052
2114
  */
2053
2115
  this.exitMaximizedView();
2054
2116
  }
@@ -2063,14 +2125,14 @@ define(['exports'], (function (exports) { 'use strict';
2063
2125
  dispose() {
2064
2126
  this.disposable.dispose();
2065
2127
  this._onDidChange.dispose();
2066
- this._onDidMaxmizedNodeChange.dispose();
2128
+ this._onDidMaximizedNodeChange.dispose();
2067
2129
  this.root.dispose();
2068
2130
  this._maximizedNode = undefined;
2069
2131
  this.element.remove();
2070
2132
  }
2071
2133
  clear() {
2072
2134
  const orientation = this.root.orientation;
2073
- this.root = new BranchNode(orientation, this.proportionalLayout, this.styles, this.root.size, this.root.orthogonalSize);
2135
+ this.root = new BranchNode(orientation, this.proportionalLayout, this.styles, this.root.size, this.root.orthogonalSize, this._locked);
2074
2136
  }
2075
2137
  deserialize(json, deserializer) {
2076
2138
  const orientation = json.orientation;
@@ -2091,8 +2153,8 @@ define(['exports'], (function (exports) { 'use strict';
2091
2153
  };
2092
2154
  });
2093
2155
  result = new BranchNode(orientation, this.proportionalLayout, this.styles, node.size, // <- orthogonal size - flips at each depth
2094
- orthogonalSize, // <- size - flips at each depth
2095
- children);
2156
+ orthogonalSize, // <- size - flips at each depth,
2157
+ this._locked, children);
2096
2158
  }
2097
2159
  else {
2098
2160
  result = new LeafNode(deserializer.fromJSON(node), orientation, orthogonalSize, node.size);
@@ -2125,7 +2187,7 @@ define(['exports'], (function (exports) { 'use strict';
2125
2187
  }
2126
2188
  const oldRoot = this.root;
2127
2189
  oldRoot.element.remove();
2128
- this._root = new BranchNode(orthogonal(oldRoot.orientation), this.proportionalLayout, this.styles, this.root.orthogonalSize, this.root.size);
2190
+ this._root = new BranchNode(orthogonal(oldRoot.orientation), this.proportionalLayout, this.styles, this.root.orthogonalSize, this.root.size, this._locked);
2129
2191
  if (oldRoot.children.length === 0) ;
2130
2192
  else if (oldRoot.children.length === 1) {
2131
2193
  // can remove one level of redundant branching if there is only a single child
@@ -2193,15 +2255,16 @@ define(['exports'], (function (exports) { 'use strict';
2193
2255
  constructor(proportionalLayout, styles, orientation) {
2194
2256
  this.proportionalLayout = proportionalLayout;
2195
2257
  this.styles = styles;
2258
+ this._locked = false;
2196
2259
  this._maximizedNode = undefined;
2197
2260
  this.disposable = new MutableDisposable();
2198
2261
  this._onDidChange = new Emitter();
2199
2262
  this.onDidChange = this._onDidChange.event;
2200
- this._onDidMaxmizedNodeChange = new Emitter();
2201
- this.onDidMaxmizedNodeChange = this._onDidMaxmizedNodeChange.event;
2263
+ this._onDidMaximizedNodeChange = new Emitter();
2264
+ this.onDidMaximizedNodeChange = this._onDidMaximizedNodeChange.event;
2202
2265
  this.element = document.createElement('div');
2203
2266
  this.element.className = 'grid-view';
2204
- this.root = new BranchNode(orientation, proportionalLayout, styles, 0, 0);
2267
+ this.root = new BranchNode(orientation, proportionalLayout, styles, 0, 0, this._locked);
2205
2268
  }
2206
2269
  isViewVisible(location) {
2207
2270
  const [rest, index] = tail(location);
@@ -2252,7 +2315,7 @@ define(['exports'], (function (exports) { 'use strict';
2252
2315
  }
2253
2316
  const child = grandParent.removeChild(parentIndex);
2254
2317
  child.dispose();
2255
- const newParent = new BranchNode(parent.orientation, this.proportionalLayout, this.styles, parent.size, parent.orthogonalSize);
2318
+ const newParent = new BranchNode(parent.orientation, this.proportionalLayout, this.styles, parent.size, parent.orthogonalSize, this._locked);
2256
2319
  grandParent.addChild(newParent, parent.size, parentIndex);
2257
2320
  const newSibling = new LeafNode(parent.view, grandParent.orientation, parent.size);
2258
2321
  newParent.addChild(newSibling, newSiblingSize, 0);
@@ -2879,6 +2942,21 @@ define(['exports'], (function (exports) { 'use strict';
2879
2942
  get onDidDrop() {
2880
2943
  return this.component.onDidDrop;
2881
2944
  }
2945
+ /**
2946
+ * Invoked when a Drag'n'Drop event occurs but before dockview handles it giving the user an opportunity to intecept and
2947
+ * prevent the event from occuring using the standard `preventDefault()` syntax.
2948
+ *
2949
+ * Preventing certain events may causes unexpected behaviours, use carefully.
2950
+ */
2951
+ get onWillDrop() {
2952
+ return this.component.onWillDrop;
2953
+ }
2954
+ /**
2955
+ *
2956
+ */
2957
+ get onWillShowOverlay() {
2958
+ return this.component.onWillShowOverlay;
2959
+ }
2882
2960
  /**
2883
2961
  * Invoked before a group is dragged. Exposed for custom Drag'n'Drop functionality.
2884
2962
  */
@@ -3014,17 +3092,17 @@ define(['exports'], (function (exports) { 'use strict';
3014
3092
  hasMaximizedGroup() {
3015
3093
  return this.component.hasMaximizedGroup();
3016
3094
  }
3017
- exitMaxmizedGroup() {
3095
+ exitMaximizedGroup() {
3018
3096
  this.component.exitMaximizedGroup();
3019
3097
  }
3020
- get onDidMaxmizedGroupChange() {
3021
- return this.component.onDidMaxmizedGroupChange;
3098
+ get onDidMaximizedGroupChange() {
3099
+ return this.component.onDidMaximizedGroupChange;
3022
3100
  }
3023
3101
  /**
3024
3102
  * Add a popout group in a new Window
3025
3103
  */
3026
3104
  addPopoutGroup(item, options) {
3027
- this.component.addPopoutGroup(item, options);
3105
+ return this.component.addPopoutGroup(item, options);
3028
3106
  }
3029
3107
  }
3030
3108
 
@@ -3078,6 +3156,18 @@ define(['exports'], (function (exports) { 'use strict';
3078
3156
  }
3079
3157
  }
3080
3158
 
3159
+ class WillShowOverlayEvent extends DockviewEvent {
3160
+ get nativeEvent() {
3161
+ return this.options.nativeEvent;
3162
+ }
3163
+ get position() {
3164
+ return this.options.position;
3165
+ }
3166
+ constructor(options) {
3167
+ super();
3168
+ this.options = options;
3169
+ }
3170
+ }
3081
3171
  function directionToPosition(direction) {
3082
3172
  switch (direction) {
3083
3173
  case 'above':
@@ -3130,6 +3220,8 @@ define(['exports'], (function (exports) { 'use strict';
3130
3220
  this.options = options;
3131
3221
  this._onDrop = new Emitter();
3132
3222
  this.onDrop = this._onDrop.event;
3223
+ this._onWillShowOverlay = new Emitter();
3224
+ this.onWillShowOverlay = this._onWillShowOverlay.event;
3133
3225
  // use a set to take advantage of #<set>.has
3134
3226
  this._acceptedTargetZonesSet = new Set(this.options.acceptedTargetZones);
3135
3227
  this.dnd = new DragAndDropObserver(this.element, {
@@ -3158,6 +3250,19 @@ define(['exports'], (function (exports) { 'use strict';
3158
3250
  this.removeDropTarget();
3159
3251
  return;
3160
3252
  }
3253
+ const willShowOverlayEvent = new WillShowOverlayEvent({
3254
+ nativeEvent: e,
3255
+ position: quadrant,
3256
+ });
3257
+ /**
3258
+ * Provide an opportunity to prevent the overlay appearing and in turn
3259
+ * any dnd behaviours
3260
+ */
3261
+ this._onWillShowOverlay.fire(willShowOverlayEvent);
3262
+ if (willShowOverlayEvent.defaultPrevented) {
3263
+ this.removeDropTarget();
3264
+ return;
3265
+ }
3161
3266
  if (typeof this.options.canDisplayOverlay === 'boolean') {
3162
3267
  if (!this.options.canDisplayOverlay) {
3163
3268
  this.removeDropTarget();
@@ -3200,7 +3305,7 @@ define(['exports'], (function (exports) { 'use strict';
3200
3305
  }
3201
3306
  },
3202
3307
  });
3203
- this.addDisposables(this._onDrop, this.dnd);
3308
+ this.addDisposables(this._onDrop, this._onWillShowOverlay, this.dnd);
3204
3309
  }
3205
3310
  setTargetZones(acceptedTargetZones) {
3206
3311
  this._acceptedTargetZonesSet = new Set(acceptedTargetZones);
@@ -3253,25 +3358,44 @@ define(['exports'], (function (exports) { 'use strict';
3253
3358
  size = clamp(0, sizeOptions.value, height) / height;
3254
3359
  }
3255
3360
  }
3256
- const translate = (1 - size) / 2;
3257
- const scale = size;
3258
- let transform;
3361
+ const box = { top: '0px', left: '0px', width: '100%', height: '100%' };
3362
+ /**
3363
+ * You can also achieve the overlay placement using the transform CSS property
3364
+ * to translate and scale the element however this has the undesired effect of
3365
+ * 'skewing' the element. Comment left here for anybody that ever revisits this.
3366
+ *
3367
+ * @see https://developer.mozilla.org/en-US/docs/Web/CSS/transform
3368
+ *
3369
+ * right
3370
+ * translateX(${100 * (1 - size) / 2}%) scaleX(${scale})
3371
+ *
3372
+ * left
3373
+ * translateX(-${100 * (1 - size) / 2}%) scaleX(${scale})
3374
+ *
3375
+ * top
3376
+ * translateY(-${100 * (1 - size) / 2}%) scaleY(${scale})
3377
+ *
3378
+ * bottom
3379
+ * translateY(${100 * (1 - size) / 2}%) scaleY(${scale})
3380
+ */
3259
3381
  if (rightClass) {
3260
- transform = `translateX(${100 * translate}%) scaleX(${scale})`;
3382
+ box.left = `${100 * (1 - size)}%`;
3383
+ box.width = `${100 * size}%`;
3261
3384
  }
3262
3385
  else if (leftClass) {
3263
- transform = `translateX(-${100 * translate}%) scaleX(${scale})`;
3386
+ box.width = `${100 * size}%`;
3264
3387
  }
3265
3388
  else if (topClass) {
3266
- transform = `translateY(-${100 * translate}%) scaleY(${scale})`;
3389
+ box.height = `${100 * size}%`;
3267
3390
  }
3268
3391
  else if (bottomClass) {
3269
- transform = `translateY(${100 * translate}%) scaleY(${scale})`;
3270
- }
3271
- else {
3272
- transform = '';
3392
+ box.top = `${100 * (1 - size)}%`;
3393
+ box.height = `${100 * size}%`;
3273
3394
  }
3274
- this.overlayElement.style.transform = transform;
3395
+ this.overlayElement.style.top = box.top;
3396
+ this.overlayElement.style.left = box.left;
3397
+ this.overlayElement.style.width = box.width;
3398
+ this.overlayElement.style.height = box.height;
3275
3399
  toggleClass(this.overlayElement, 'dv-drop-target-small-vertical', isSmallY);
3276
3400
  toggleClass(this.overlayElement, 'dv-drop-target-small-horizontal', isSmallX);
3277
3401
  toggleClass(this.overlayElement, 'dv-drop-target-left', isLeft);
@@ -3339,14 +3463,6 @@ define(['exports'], (function (exports) { 'use strict';
3339
3463
  return 'center';
3340
3464
  }
3341
3465
 
3342
- exports.DockviewDropTargets = void 0;
3343
- (function (DockviewDropTargets) {
3344
- DockviewDropTargets[DockviewDropTargets["Tab"] = 0] = "Tab";
3345
- DockviewDropTargets[DockviewDropTargets["Panel"] = 1] = "Panel";
3346
- DockviewDropTargets[DockviewDropTargets["TabContainer"] = 2] = "TabContainer";
3347
- DockviewDropTargets[DockviewDropTargets["Edge"] = 3] = "Edge";
3348
- })(exports.DockviewDropTargets || (exports.DockviewDropTargets = {}));
3349
-
3350
3466
  class ContentContainer extends CompositeDisposable {
3351
3467
  get element() {
3352
3468
  return this._element;
@@ -3374,7 +3490,7 @@ define(['exports'], (function (exports) { 'use strict';
3374
3490
  const data = getPanelData();
3375
3491
  if (!data &&
3376
3492
  event.shiftKey &&
3377
- this.group.location !== 'floating') {
3493
+ this.group.location.type !== 'floating') {
3378
3494
  return false;
3379
3495
  }
3380
3496
  if (data && data.viewId === this.accessor.id) {
@@ -3392,7 +3508,7 @@ define(['exports'], (function (exports) { 'use strict';
3392
3508
  data.groupId === this.group.id;
3393
3509
  return !groupHasOnePanelAndIsActiveDragElement;
3394
3510
  }
3395
- return this.group.canDisplayOverlay(event, position, exports.DockviewDropTargets.Panel);
3511
+ return this.group.canDisplayOverlay(event, position, 'panel');
3396
3512
  },
3397
3513
  });
3398
3514
  this.addDisposables(this.dropTarget);
@@ -3417,7 +3533,7 @@ define(['exports'], (function (exports) { 'use strict';
3417
3533
  let container;
3418
3534
  switch (panel.api.renderer) {
3419
3535
  case 'onlyWhenVisibile':
3420
- this.accessor.overlayRenderContainer.detatch(panel);
3536
+ this.group.renderContainer.detatch(panel);
3421
3537
  if (this.panel) {
3422
3538
  if (doRender) {
3423
3539
  this._element.appendChild(this.panel.view.content.element);
@@ -3429,7 +3545,7 @@ define(['exports'], (function (exports) { 'use strict';
3429
3545
  if (panel.view.content.element.parentElement === this._element) {
3430
3546
  this._element.removeChild(panel.view.content.element);
3431
3547
  }
3432
- container = this.accessor.overlayRenderContainer.attach({
3548
+ container = this.group.renderContainer.attach({
3433
3549
  panel,
3434
3550
  referenceContainer: this,
3435
3551
  });
@@ -3460,12 +3576,13 @@ define(['exports'], (function (exports) { 'use strict';
3460
3576
  // noop
3461
3577
  }
3462
3578
  closePanel() {
3579
+ var _a;
3463
3580
  if (this.panel) {
3464
- if (this.accessor.options.defaultRenderer === 'onlyWhenVisibile') {
3465
- this._element.removeChild(this.panel.view.content.element);
3581
+ if (this.panel.api.renderer === 'onlyWhenVisibile') {
3582
+ (_a = this.panel.view.content.element.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(this.panel.view.content.element);
3466
3583
  }
3467
- this.panel = undefined;
3468
3584
  }
3585
+ this.panel = undefined;
3469
3586
  }
3470
3587
  dispose() {
3471
3588
  this.disposable.dispose();
@@ -3573,7 +3690,7 @@ define(['exports'], (function (exports) { 'use strict';
3573
3690
  this._element.draggable = true;
3574
3691
  toggleClass(this.element, 'inactive-tab', true);
3575
3692
  const dragHandler = new TabDragHandler(this._element, this.accessor, this.group, this.panel);
3576
- this.droptarget = new Droptarget(this._element, {
3693
+ this.dropTarget = new Droptarget(this._element, {
3577
3694
  acceptedTargetZones: ['center'],
3578
3695
  canDisplayOverlay: (event, position) => {
3579
3696
  if (this.group.locked) {
@@ -3588,9 +3705,10 @@ define(['exports'], (function (exports) { 'use strict';
3588
3705
  }
3589
3706
  return this.panel.id !== data.panelId;
3590
3707
  }
3591
- return this.group.model.canDisplayOverlay(event, position, exports.DockviewDropTargets.Tab);
3708
+ return this.group.model.canDisplayOverlay(event, position, 'tab');
3592
3709
  },
3593
3710
  });
3711
+ this.onWillShowOverlay = this.dropTarget.onWillShowOverlay;
3594
3712
  this.addDisposables(this._onChanged, this._onDropped, this._onDragStart, dragHandler.onDragStart((event) => {
3595
3713
  this._onDragStart.fire(event);
3596
3714
  }), dragHandler, addDisposableListener(this._element, 'mousedown', (event) => {
@@ -3598,9 +3716,9 @@ define(['exports'], (function (exports) { 'use strict';
3598
3716
  return;
3599
3717
  }
3600
3718
  this._onChanged.fire(event);
3601
- }), this.droptarget.onDrop((event) => {
3719
+ }), this.dropTarget.onDrop((event) => {
3602
3720
  this._onDropped.fire(event);
3603
- }), this.droptarget);
3721
+ }), this.dropTarget);
3604
3722
  }
3605
3723
  setActive(isActive) {
3606
3724
  toggleClass(this.element, 'active-tab', isActive);
@@ -3647,7 +3765,7 @@ define(['exports'], (function (exports) { 'use strict';
3647
3765
  }, true));
3648
3766
  }
3649
3767
  isCancelled(_event) {
3650
- if (this.group.api.location === 'floating' && !_event.shiftKey) {
3768
+ if (this.group.api.location.type === 'floating' && !_event.shiftKey) {
3651
3769
  return true;
3652
3770
  }
3653
3771
  return false;
@@ -3699,7 +3817,7 @@ define(['exports'], (function (exports) { 'use strict';
3699
3817
  this.accessor.doSetGroupActive(this.group);
3700
3818
  }));
3701
3819
  const handler = new GroupDragHandler(this._element, accessor, group);
3702
- this.voidDropTarget = new Droptarget(this._element, {
3820
+ this.dropTraget = new Droptarget(this._element, {
3703
3821
  acceptedTargetZones: ['center'],
3704
3822
  canDisplayOverlay: (event, position) => {
3705
3823
  var _a;
@@ -3713,14 +3831,15 @@ define(['exports'], (function (exports) { 'use strict';
3713
3831
  // don't show the overlay if the tab being dragged is the last panel of this group
3714
3832
  return ((_a = last(this.group.panels)) === null || _a === void 0 ? void 0 : _a.id) !== data.panelId;
3715
3833
  }
3716
- return group.model.canDisplayOverlay(event, position, exports.DockviewDropTargets.Panel);
3834
+ return group.model.canDisplayOverlay(event, position, 'panel');
3717
3835
  },
3718
3836
  });
3837
+ this.onWillShowOverlay = this.dropTraget.onWillShowOverlay;
3719
3838
  this.addDisposables(handler, handler.onDragStart((event) => {
3720
3839
  this._onDragStart.fire(event);
3721
- }), this.voidDropTarget.onDrop((event) => {
3840
+ }), this.dropTraget.onDrop((event) => {
3722
3841
  this._onDrop.fire(event);
3723
- }), this.voidDropTarget);
3842
+ }), this.dropTraget);
3724
3843
  }
3725
3844
  }
3726
3845
 
@@ -3808,19 +3927,11 @@ define(['exports'], (function (exports) { 'use strict';
3808
3927
  this.onTabDragStart = this._onTabDragStart.event;
3809
3928
  this._onGroupDragStart = new Emitter();
3810
3929
  this.onGroupDragStart = this._onGroupDragStart.event;
3811
- this.addDisposables(this._onDrop, this._onTabDragStart, this._onGroupDragStart);
3930
+ this._onWillShowOverlay = new Emitter();
3931
+ this.onWillShowOverlay = this._onWillShowOverlay.event;
3812
3932
  this._element = document.createElement('div');
3813
3933
  this._element.className = 'tabs-and-actions-container';
3814
3934
  toggleClass(this._element, 'dv-full-width-single-tab', this.accessor.options.singleTabMode === 'fullwidth');
3815
- this.addDisposables(this.accessor.onDidAddPanel((e) => {
3816
- if (e.api.group === this.group) {
3817
- toggleClass(this._element, 'dv-single-tab', this.size === 1);
3818
- }
3819
- }), this.accessor.onDidRemovePanel((e) => {
3820
- if (e.api.group === this.group) {
3821
- toggleClass(this._element, 'dv-single-tab', this.size === 1);
3822
- }
3823
- }));
3824
3935
  this.rightActionsContainer = document.createElement('div');
3825
3936
  this.rightActionsContainer.className = 'right-actions-container';
3826
3937
  this.leftActionsContainer = document.createElement('div');
@@ -3835,7 +3946,15 @@ define(['exports'], (function (exports) { 'use strict';
3835
3946
  this._element.appendChild(this.leftActionsContainer);
3836
3947
  this._element.appendChild(this.voidContainer.element);
3837
3948
  this._element.appendChild(this.rightActionsContainer);
3838
- this.addDisposables(this.voidContainer, this.voidContainer.onDragStart((event) => {
3949
+ this.addDisposables(this.accessor.onDidAddPanel((e) => {
3950
+ if (e.api.group === this.group) {
3951
+ toggleClass(this._element, 'dv-single-tab', this.size === 1);
3952
+ }
3953
+ }), this.accessor.onDidRemovePanel((e) => {
3954
+ if (e.api.group === this.group) {
3955
+ toggleClass(this._element, 'dv-single-tab', this.size === 1);
3956
+ }
3957
+ }), this._onWillShowOverlay, this._onDrop, this._onTabDragStart, this._onGroupDragStart, this.voidContainer, this.voidContainer.onDragStart((event) => {
3839
3958
  this._onGroupDragStart.fire({
3840
3959
  nativeEvent: event,
3841
3960
  group: this.group,
@@ -3845,11 +3964,15 @@ define(['exports'], (function (exports) { 'use strict';
3845
3964
  event: event.nativeEvent,
3846
3965
  index: this.tabs.length,
3847
3966
  });
3967
+ }), this.voidContainer.onWillShowOverlay((event) => {
3968
+ this._onWillShowOverlay.fire(new WillShowOverlayLocationEvent(event, {
3969
+ kind: 'header_space',
3970
+ }));
3848
3971
  }), addDisposableListener(this.voidContainer.element, 'mousedown', (event) => {
3849
3972
  const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
3850
3973
  if (isFloatingGroupsEnabled &&
3851
3974
  event.shiftKey &&
3852
- this.group.api.location !== 'floating') {
3975
+ this.group.api.location.type !== 'floating') {
3853
3976
  event.preventDefault();
3854
3977
  const { top, left } = this.element.getBoundingClientRect();
3855
3978
  const { top: rootTop, left: rootLeft } = this.accessor.element.getBoundingClientRect();
@@ -3912,9 +4035,9 @@ define(['exports'], (function (exports) { 'use strict';
3912
4035
  const disposable = new CompositeDisposable(tab.onDragStart((event) => {
3913
4036
  this._onTabDragStart.fire({ nativeEvent: event, panel });
3914
4037
  }), tab.onChanged((event) => {
3915
- var _a;
3916
4038
  const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
3917
- const isFloatingWithOnePanel = this.group.api.location === 'floating' && this.size === 1;
4039
+ const isFloatingWithOnePanel = this.group.api.location.type === 'floating' &&
4040
+ this.size === 1;
3918
4041
  if (isFloatingGroupsEnabled &&
3919
4042
  !isFloatingWithOnePanel &&
3920
4043
  event.shiftKey) {
@@ -3928,20 +4051,20 @@ define(['exports'], (function (exports) { 'use strict';
3928
4051
  }, { inDragMode: true });
3929
4052
  return;
3930
4053
  }
3931
- const alreadyFocused = panel.id === ((_a = this.group.model.activePanel) === null || _a === void 0 ? void 0 : _a.id) &&
3932
- this.group.model.isContentFocused;
3933
4054
  const isLeftClick = event.button === 0;
3934
4055
  if (!isLeftClick || event.defaultPrevented) {
3935
4056
  return;
3936
4057
  }
3937
- this.group.model.openPanel(panel, {
3938
- skipFocus: alreadyFocused,
3939
- });
4058
+ if (this.group.activePanel !== panel) {
4059
+ this.group.model.openPanel(panel);
4060
+ }
3940
4061
  }), tab.onDrop((event) => {
3941
4062
  this._onDrop.fire({
3942
4063
  event: event.nativeEvent,
3943
4064
  index: this.tabs.findIndex((x) => x.value === tab),
3944
4065
  });
4066
+ }), tab.onWillShowOverlay((event) => {
4067
+ this._onWillShowOverlay.fire(new WillShowOverlayLocationEvent(event, { kind: 'tab' }));
3945
4068
  }));
3946
4069
  const value = { value: tab, disposable };
3947
4070
  this.addTab(value, index);
@@ -3959,6 +4082,60 @@ define(['exports'], (function (exports) { 'use strict';
3959
4082
  }
3960
4083
  }
3961
4084
 
4085
+ class DockviewDidDropEvent extends DockviewEvent {
4086
+ get nativeEvent() {
4087
+ return this.options.nativeEvent;
4088
+ }
4089
+ get position() {
4090
+ return this.options.position;
4091
+ }
4092
+ get panel() {
4093
+ return this.options.panel;
4094
+ }
4095
+ get group() {
4096
+ return this.options.group;
4097
+ }
4098
+ get api() {
4099
+ return this.options.api;
4100
+ }
4101
+ constructor(options) {
4102
+ super();
4103
+ this.options = options;
4104
+ }
4105
+ getData() {
4106
+ return this.options.getData();
4107
+ }
4108
+ }
4109
+ class DockviewWillDropEvent extends DockviewDidDropEvent {
4110
+ get kind() {
4111
+ return this._kind;
4112
+ }
4113
+ constructor(options) {
4114
+ super(options);
4115
+ this._kind = options.kind;
4116
+ }
4117
+ }
4118
+ class WillShowOverlayLocationEvent {
4119
+ get kind() {
4120
+ return this._kind;
4121
+ }
4122
+ get nativeEvent() {
4123
+ return this.event.nativeEvent;
4124
+ }
4125
+ get position() {
4126
+ return this.event.position;
4127
+ }
4128
+ get defaultPrevented() {
4129
+ return this.event.defaultPrevented;
4130
+ }
4131
+ preventDefault() {
4132
+ this.event.preventDefault();
4133
+ }
4134
+ constructor(event, options) {
4135
+ this.event = event;
4136
+ this._kind = options.kind;
4137
+ }
4138
+ }
3962
4139
  class DockviewGroupPanelModel extends CompositeDisposable {
3963
4140
  get element() {
3964
4141
  throw new Error('not supported');
@@ -4004,7 +4181,7 @@ define(['exports'], (function (exports) { 'use strict';
4004
4181
  this._location = value;
4005
4182
  toggleClass(this.container, 'dv-groupview-floating', false);
4006
4183
  toggleClass(this.container, 'dv-groupview-popout', false);
4007
- switch (value) {
4184
+ switch (value.type) {
4008
4185
  case 'grid':
4009
4186
  this.contentContainer.dropTarget.setTargetZones([
4010
4187
  'top',
@@ -4040,7 +4217,7 @@ define(['exports'], (function (exports) { 'use strict';
4040
4217
  this.groupPanel = groupPanel;
4041
4218
  this._isGroupActive = false;
4042
4219
  this._locked = false;
4043
- this._location = 'grid';
4220
+ this._location = { type: 'grid' };
4044
4221
  this.mostRecentlyUsed = [];
4045
4222
  this._onDidChange = new Emitter();
4046
4223
  this.onDidChange = this._onDidChange.event;
@@ -4051,6 +4228,10 @@ define(['exports'], (function (exports) { 'use strict';
4051
4228
  this.onMove = this._onMove.event;
4052
4229
  this._onDidDrop = new Emitter();
4053
4230
  this.onDidDrop = this._onDidDrop.event;
4231
+ this._onWillDrop = new Emitter();
4232
+ this.onWillDrop = this._onWillDrop.event;
4233
+ this._onWillShowOverlay = new Emitter();
4234
+ this.onWillShowOverlay = this._onWillShowOverlay.event;
4054
4235
  this._onTabDragStart = new Emitter();
4055
4236
  this.onTabDragStart = this._onTabDragStart.event;
4056
4237
  this._onGroupDragStart = new Emitter();
@@ -4061,46 +4242,69 @@ define(['exports'], (function (exports) { 'use strict';
4061
4242
  this.onDidRemovePanel = this._onDidRemovePanel.event;
4062
4243
  this._onDidActivePanelChange = new Emitter();
4063
4244
  this.onDidActivePanelChange = this._onDidActivePanelChange.event;
4245
+ this._overwriteRenderContainer = null;
4064
4246
  toggleClass(this.container, 'groupview', true);
4247
+ this._api = new DockviewApi(this.accessor);
4065
4248
  this.tabsContainer = new TabsContainer(this.accessor, this.groupPanel);
4066
4249
  this.contentContainer = new ContentContainer(this.accessor, this);
4067
4250
  container.append(this.tabsContainer.element, this.contentContainer.element);
4068
4251
  this.header.hidden = !!options.hideHeader;
4069
4252
  this.locked = (_a = options.locked) !== null && _a !== void 0 ? _a : false;
4070
- this.addDisposables(this._onTabDragStart, this._onGroupDragStart, this.tabsContainer.onTabDragStart((event) => {
4253
+ this.addDisposables(this._onTabDragStart, this._onGroupDragStart, this._onWillShowOverlay, this.tabsContainer.onTabDragStart((event) => {
4071
4254
  this._onTabDragStart.fire(event);
4072
4255
  }), this.tabsContainer.onGroupDragStart((event) => {
4073
4256
  this._onGroupDragStart.fire(event);
4074
4257
  }), this.tabsContainer.onDrop((event) => {
4075
- this.handleDropEvent(event.event, 'center', event.index);
4258
+ this.handleDropEvent('header', event.event, 'center', event.index);
4076
4259
  }), this.contentContainer.onDidFocus(() => {
4077
- this.accessor.doSetGroupActive(this.groupPanel, true);
4260
+ this.accessor.doSetGroupActive(this.groupPanel);
4078
4261
  }), this.contentContainer.onDidBlur(() => {
4079
4262
  // noop
4080
4263
  }), this.contentContainer.dropTarget.onDrop((event) => {
4081
- this.handleDropEvent(event.nativeEvent, event.position);
4082
- }), this._onMove, this._onDidChange, this._onDidDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange);
4264
+ this.handleDropEvent('content', event.nativeEvent, event.position);
4265
+ }), this.tabsContainer.onWillShowOverlay((event) => {
4266
+ this._onWillShowOverlay.fire(event);
4267
+ }), this.contentContainer.dropTarget.onWillShowOverlay((event) => {
4268
+ this._onWillShowOverlay.fire(new WillShowOverlayLocationEvent(event, {
4269
+ kind: 'content',
4270
+ }));
4271
+ }), this._onMove, this._onDidChange, this._onDidDrop, this._onWillDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange);
4272
+ }
4273
+ focusContent() {
4274
+ this.contentContainer.element.focus();
4275
+ }
4276
+ set renderContainer(value) {
4277
+ this.panels.forEach((panel) => {
4278
+ this.renderContainer.detatch(panel);
4279
+ });
4280
+ this._overwriteRenderContainer = value;
4281
+ this.panels.forEach((panel) => {
4282
+ this.rerender(panel);
4283
+ });
4284
+ }
4285
+ get renderContainer() {
4286
+ var _a;
4287
+ return ((_a = this._overwriteRenderContainer) !== null && _a !== void 0 ? _a : this.accessor.overlayRenderContainer);
4083
4288
  }
4084
4289
  initialize() {
4085
- var _a, _b;
4086
- if ((_a = this.options) === null || _a === void 0 ? void 0 : _a.panels) {
4290
+ if (this.options.panels) {
4087
4291
  this.options.panels.forEach((panel) => {
4088
4292
  this.doAddPanel(panel);
4089
4293
  });
4090
4294
  }
4091
- if ((_b = this.options) === null || _b === void 0 ? void 0 : _b.activePanel) {
4295
+ if (this.options.activePanel) {
4092
4296
  this.openPanel(this.options.activePanel);
4093
4297
  }
4094
4298
  // must be run after the constructor otherwise this.parent may not be
4095
4299
  // correctly initialized
4096
- this.setActive(this.isActive, true, true);
4300
+ this.setActive(this.isActive, true);
4097
4301
  this.updateContainer();
4098
4302
  if (this.accessor.options.createRightHeaderActionsElement) {
4099
4303
  this._rightHeaderActions =
4100
4304
  this.accessor.options.createRightHeaderActionsElement(this.groupPanel);
4101
4305
  this.addDisposables(this._rightHeaderActions);
4102
4306
  this._rightHeaderActions.init({
4103
- containerApi: new DockviewApi(this.accessor),
4307
+ containerApi: this._api,
4104
4308
  api: this.groupPanel.api,
4105
4309
  });
4106
4310
  this.tabsContainer.setRightActionsElement(this._rightHeaderActions.element);
@@ -4110,7 +4314,7 @@ define(['exports'], (function (exports) { 'use strict';
4110
4314
  this.accessor.options.createLeftHeaderActionsElement(this.groupPanel);
4111
4315
  this.addDisposables(this._leftHeaderActions);
4112
4316
  this._leftHeaderActions.init({
4113
- containerApi: new DockviewApi(this.accessor),
4317
+ containerApi: this._api,
4114
4318
  api: this.groupPanel.api,
4115
4319
  });
4116
4320
  this.tabsContainer.setLeftActionsElement(this._leftHeaderActions.element);
@@ -4120,7 +4324,7 @@ define(['exports'], (function (exports) { 'use strict';
4120
4324
  this.accessor.options.createPrefixHeaderActionsElement(this.groupPanel);
4121
4325
  this.addDisposables(this._prefixHeaderActions);
4122
4326
  this._prefixHeaderActions.init({
4123
- containerApi: new DockviewApi(this.accessor),
4327
+ containerApi: this._api,
4124
4328
  api: this.groupPanel.api,
4125
4329
  });
4126
4330
  this.tabsContainer.setPrefixActionsElement(this._prefixHeaderActions.element);
@@ -4200,34 +4404,45 @@ define(['exports'], (function (exports) { 'use strict';
4200
4404
  //noop
4201
4405
  }
4202
4406
  focus() {
4203
- var _a, _b;
4204
- (_b = (_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.focus) === null || _b === void 0 ? void 0 : _b.call(_a);
4407
+ var _a;
4408
+ (_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.focus();
4205
4409
  }
4206
4410
  openPanel(panel, options = {}) {
4411
+ /**
4412
+ * set the panel group
4413
+ * add the panel
4414
+ * check if group active
4415
+ * check if panel active
4416
+ */
4207
4417
  if (typeof options.index !== 'number' ||
4208
4418
  options.index > this.panels.length) {
4209
4419
  options.index = this.panels.length;
4210
4420
  }
4211
- const skipSetPanelActive = !!options.skipSetPanelActive;
4212
- const skipSetGroupActive = !!options.skipSetGroupActive;
4421
+ const skipSetActive = !!options.skipSetActive;
4213
4422
  // ensure the group is updated before we fire any events
4214
- panel.updateParentGroup(this.groupPanel, true);
4423
+ panel.updateParentGroup(this.groupPanel, {
4424
+ skipSetActive: options.skipSetActive,
4425
+ });
4426
+ this.doAddPanel(panel, options.index, {
4427
+ skipSetActive: skipSetActive,
4428
+ });
4215
4429
  if (this._activePanel === panel) {
4216
- if (!skipSetGroupActive) {
4217
- this.accessor.doSetGroupActive(this.groupPanel);
4218
- }
4430
+ this.contentContainer.renderPanel(panel, { asActive: true });
4219
4431
  return;
4220
4432
  }
4221
- this.doAddPanel(panel, options.index, skipSetPanelActive);
4222
- if (!skipSetPanelActive) {
4433
+ if (!skipSetActive) {
4223
4434
  this.doSetActivePanel(panel);
4224
4435
  }
4225
- if (!skipSetGroupActive) {
4226
- this.accessor.doSetGroupActive(this.groupPanel, !!options.skipFocus);
4436
+ if (!options.skipSetGroupActive) {
4437
+ this.accessor.doSetGroupActive(this.groupPanel);
4438
+ }
4439
+ if (!options.skipSetActive) {
4440
+ this.updateContainer();
4227
4441
  }
4228
- this.updateContainer();
4229
4442
  }
4230
- removePanel(groupItemOrId) {
4443
+ removePanel(groupItemOrId, options = {
4444
+ skipSetActive: false,
4445
+ }) {
4231
4446
  const id = typeof groupItemOrId === 'string'
4232
4447
  ? groupItemOrId
4233
4448
  : groupItemOrId.id;
@@ -4235,7 +4450,7 @@ define(['exports'], (function (exports) { 'use strict';
4235
4450
  if (!panelToRemove) {
4236
4451
  throw new Error('invalid operation');
4237
4452
  }
4238
- return this._removePanel(panelToRemove);
4453
+ return this._removePanel(panelToRemove, options);
4239
4454
  }
4240
4455
  closeAllPanels() {
4241
4456
  if (this.panels.length > 0) {
@@ -4261,12 +4476,8 @@ define(['exports'], (function (exports) { 'use strict';
4261
4476
  updateActions(element) {
4262
4477
  this.tabsContainer.setRightActionsElement(element);
4263
4478
  }
4264
- setActive(isGroupActive, skipFocus = false, force = false) {
4265
- var _a, _b, _c, _d;
4479
+ setActive(isGroupActive, force = false) {
4266
4480
  if (!force && this.isActive === isGroupActive) {
4267
- if (!skipFocus) {
4268
- (_b = (_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.focus) === null || _b === void 0 ? void 0 : _b.call(_a);
4269
- }
4270
4481
  return;
4271
4482
  }
4272
4483
  this._isGroupActive = isGroupActive;
@@ -4277,11 +4488,6 @@ define(['exports'], (function (exports) { 'use strict';
4277
4488
  this.doSetActivePanel(this.panels[0]);
4278
4489
  }
4279
4490
  this.updateContainer();
4280
- if (isGroupActive) {
4281
- if (!skipFocus) {
4282
- (_d = (_c = this._activePanel) === null || _c === void 0 ? void 0 : _c.focus) === null || _d === void 0 ? void 0 : _d.call(_c);
4283
- }
4284
- }
4285
4491
  }
4286
4492
  layout(width, height) {
4287
4493
  var _a;
@@ -4292,17 +4498,22 @@ define(['exports'], (function (exports) { 'use strict';
4292
4498
  this._activePanel.layout(this._width, this._height);
4293
4499
  }
4294
4500
  }
4295
- _removePanel(panel) {
4501
+ _removePanel(panel, options) {
4296
4502
  const isActivePanel = this._activePanel === panel;
4297
4503
  this.doRemovePanel(panel);
4298
4504
  if (isActivePanel && this.panels.length > 0) {
4299
4505
  const nextPanel = this.mostRecentlyUsed[0];
4300
- this.openPanel(nextPanel);
4506
+ this.openPanel(nextPanel, {
4507
+ skipSetActive: options.skipSetActive,
4508
+ skipSetGroupActive: options.skipSetActiveGroup,
4509
+ });
4301
4510
  }
4302
4511
  if (this._activePanel && this.panels.length === 0) {
4303
4512
  this.doSetActivePanel(undefined);
4304
4513
  }
4305
- this.updateContainer();
4514
+ if (!options.skipSetActive) {
4515
+ this.updateContainer();
4516
+ }
4306
4517
  return panel;
4307
4518
  }
4308
4519
  doRemovePanel(panel) {
@@ -4317,13 +4528,13 @@ define(['exports'], (function (exports) { 'use strict';
4317
4528
  }
4318
4529
  this._onDidRemovePanel.fire({ panel });
4319
4530
  }
4320
- doAddPanel(panel, index = this.panels.length, skipSetActive = false) {
4531
+ doAddPanel(panel, index = this.panels.length, options = { skipSetActive: false }) {
4321
4532
  const existingPanel = this._panels.indexOf(panel);
4322
4533
  const hasExistingPanel = existingPanel > -1;
4323
4534
  this.tabsContainer.show();
4324
4535
  this.contentContainer.show();
4325
4536
  this.tabsContainer.openPanel(panel, index);
4326
- if (!skipSetActive) {
4537
+ if (!options.skipSetActive) {
4327
4538
  this.contentContainer.openPanel(panel);
4328
4539
  }
4329
4540
  if (hasExistingPanel) {
@@ -4335,12 +4546,17 @@ define(['exports'], (function (exports) { 'use strict';
4335
4546
  this._onDidAddPanel.fire({ panel });
4336
4547
  }
4337
4548
  doSetActivePanel(panel) {
4549
+ if (this._activePanel === panel) {
4550
+ return;
4551
+ }
4338
4552
  this._activePanel = panel;
4339
4553
  if (panel) {
4340
4554
  this.tabsContainer.setActivePanel(panel);
4341
4555
  panel.layout(this._width, this._height);
4342
4556
  this.updateMru(panel);
4343
- this._onDidActivePanelChange.fire({ panel });
4557
+ this._onDidActivePanelChange.fire({
4558
+ panel,
4559
+ });
4344
4560
  }
4345
4561
  }
4346
4562
  updateMru(panel) {
@@ -4352,11 +4568,11 @@ define(['exports'], (function (exports) { 'use strict';
4352
4568
  updateContainer() {
4353
4569
  var _a, _b;
4354
4570
  toggleClass(this.container, 'empty', this.isEmpty);
4355
- this.panels.forEach((panel) => panel.updateParentGroup(this.groupPanel, this.isActive));
4571
+ this.panels.forEach((panel) => panel.runEvents());
4356
4572
  if (this.isEmpty && !this.watermark) {
4357
4573
  const watermark = this.accessor.createWatermarkComponent();
4358
4574
  watermark.init({
4359
- containerApi: new DockviewApi(this.accessor),
4575
+ containerApi: this._api,
4360
4576
  group: this.groupPanel,
4361
4577
  });
4362
4578
  this.watermark = watermark;
@@ -4389,10 +4605,32 @@ define(['exports'], (function (exports) { 'use strict';
4389
4605
  }
4390
4606
  return false;
4391
4607
  }
4392
- handleDropEvent(event, position, index) {
4608
+ handleDropEvent(type, event, position, index) {
4393
4609
  if (this.locked === 'no-drop-target') {
4394
4610
  return;
4395
4611
  }
4612
+ function getKind() {
4613
+ switch (type) {
4614
+ case 'header':
4615
+ return typeof index === 'number' ? 'tab' : 'header_space';
4616
+ case 'content':
4617
+ return 'content';
4618
+ }
4619
+ }
4620
+ const panel = typeof index === 'number' ? this.panels[index] : undefined;
4621
+ const willDropEvent = new DockviewWillDropEvent({
4622
+ nativeEvent: event,
4623
+ position,
4624
+ panel,
4625
+ getData: () => getPanelData(),
4626
+ kind: getKind(),
4627
+ group: this.groupPanel,
4628
+ api: this._api,
4629
+ });
4630
+ this._onWillDrop.fire(willDropEvent);
4631
+ if (willDropEvent.defaultPrevented) {
4632
+ return;
4633
+ }
4396
4634
  const data = getPanelData();
4397
4635
  if (data && data.viewId === this.accessor.id) {
4398
4636
  if (data.panelId === null) {
@@ -4425,12 +4663,14 @@ define(['exports'], (function (exports) { 'use strict';
4425
4663
  });
4426
4664
  }
4427
4665
  else {
4428
- this._onDidDrop.fire({
4666
+ this._onDidDrop.fire(new DockviewDidDropEvent({
4429
4667
  nativeEvent: event,
4430
4668
  position,
4431
- index,
4669
+ panel,
4432
4670
  getData: () => getPanelData(),
4433
- });
4671
+ group: this.groupPanel,
4672
+ api: this._api,
4673
+ }));
4434
4674
  }
4435
4675
  }
4436
4676
  dispose() {
@@ -4438,6 +4678,7 @@ define(['exports'], (function (exports) { 'use strict';
4438
4678
  super.dispose();
4439
4679
  (_a = this.watermark) === null || _a === void 0 ? void 0 : _a.element.remove();
4440
4680
  (_c = (_b = this.watermark) === null || _b === void 0 ? void 0 : _b.dispose) === null || _c === void 0 ? void 0 : _c.call(_b);
4681
+ this.watermark = undefined;
4441
4682
  for (const panel of this.panels) {
4442
4683
  panel.dispose();
4443
4684
  }
@@ -4459,15 +4700,7 @@ define(['exports'], (function (exports) { 'use strict';
4459
4700
  constructor(parentElement, disableResizing = false) {
4460
4701
  super();
4461
4702
  this._disableResizing = disableResizing;
4462
- if (parentElement) {
4463
- this._element = parentElement;
4464
- }
4465
- else {
4466
- this._element = document.createElement('div');
4467
- this._element.style.height = '100%';
4468
- this._element.style.width = '100%';
4469
- this._element.className = 'dv-resizable-container';
4470
- }
4703
+ this._element = parentElement;
4471
4704
  this.addDisposables(watchElementResize(this._element, (entry) => {
4472
4705
  if (this.isDisposed) {
4473
4706
  /**
@@ -4555,25 +4788,38 @@ define(['exports'], (function (exports) { 'use strict';
4555
4788
  get activeGroup() {
4556
4789
  return this._activeGroup;
4557
4790
  }
4791
+ get locked() {
4792
+ return this.gridview.locked;
4793
+ }
4794
+ set locked(value) {
4795
+ this.gridview.locked = value;
4796
+ }
4558
4797
  constructor(options) {
4559
- super(options.parentElement, options.disableAutoResizing);
4798
+ super(document.createElement('div'), options.disableAutoResizing);
4560
4799
  this._id = nextLayoutId$1.next();
4561
4800
  this._groups = new Map();
4562
4801
  this._onDidLayoutChange = new Emitter();
4563
4802
  this.onDidLayoutChange = this._onDidLayoutChange.event;
4564
- this._onDidRemoveGroup = new Emitter();
4565
- this.onDidRemoveGroup = this._onDidRemoveGroup.event;
4566
- this._onDidAddGroup = new Emitter();
4567
- this.onDidAddGroup = this._onDidAddGroup.event;
4568
- this._onDidActiveGroupChange = new Emitter();
4569
- this.onDidActiveGroupChange = this._onDidActiveGroupChange.event;
4803
+ this._onDidRemove = new Emitter();
4804
+ this.onDidRemove = this._onDidRemove.event;
4805
+ this._onDidAdd = new Emitter();
4806
+ this.onDidAdd = this._onDidAdd.event;
4807
+ this._onDidActiveChange = new Emitter();
4808
+ this.onDidActiveChange = this._onDidActiveChange.event;
4570
4809
  this._bufferOnDidLayoutChange = new TickDelayedEvent();
4810
+ this.element.style.height = '100%';
4811
+ this.element.style.width = '100%';
4812
+ options.parentElement.appendChild(this.element);
4571
4813
  this.gridview = new Gridview(!!options.proportionalLayout, options.styles, options.orientation);
4814
+ this.gridview.locked = !!options.locked;
4572
4815
  this.element.appendChild(this.gridview.element);
4573
4816
  this.layout(0, 0, true); // set some elements height/widths
4574
- this.addDisposables(this.gridview.onDidChange(() => {
4817
+ this.addDisposables(Disposable.from(() => {
4818
+ var _a;
4819
+ (_a = this.element.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(this.element);
4820
+ }), this.gridview.onDidChange(() => {
4575
4821
  this._bufferOnDidLayoutChange.fire();
4576
- }), exports.DockviewEvent.any(this.onDidAddGroup, this.onDidRemoveGroup, this.onDidActiveGroupChange)(() => {
4822
+ }), exports.DockviewEvent.any(this.onDidAdd, this.onDidRemove, this.onDidActiveChange)(() => {
4577
4823
  this._bufferOnDidLayoutChange.fire();
4578
4824
  }), this._bufferOnDidLayoutChange.onEvent(() => {
4579
4825
  this._onDidLayoutChange.fire();
@@ -4588,6 +4834,7 @@ define(['exports'], (function (exports) { 'use strict';
4588
4834
  }
4589
4835
  maximizeGroup(panel) {
4590
4836
  this.gridview.maximizeView(panel);
4837
+ this.doSetGroupActive(panel);
4591
4838
  }
4592
4839
  isMaximizedGroup(panel) {
4593
4840
  return this.gridview.maximizedView() === panel;
@@ -4598,13 +4845,12 @@ define(['exports'], (function (exports) { 'use strict';
4598
4845
  hasMaximizedGroup() {
4599
4846
  return this.gridview.hasMaximizedView();
4600
4847
  }
4601
- get onDidMaxmizedGroupChange() {
4602
- return this.gridview.onDidMaxmizedNodeChange;
4848
+ get onDidMaximizedGroupChange() {
4849
+ return this.gridview.onDidMaximizedNodeChange;
4603
4850
  }
4604
4851
  doAddGroup(group, location = [0], size) {
4605
4852
  this.gridview.addView(group, size !== null && size !== void 0 ? size : exports.Sizing.Distribute, location);
4606
- this._onDidAddGroup.fire(group);
4607
- this.doSetGroupActive(group);
4853
+ this._onDidAdd.fire(group);
4608
4854
  }
4609
4855
  doRemoveGroup(group, options) {
4610
4856
  if (!this._groups.has(group.id)) {
@@ -4616,8 +4862,8 @@ define(['exports'], (function (exports) { 'use strict';
4616
4862
  item.disposable.dispose();
4617
4863
  item.value.dispose();
4618
4864
  this._groups.delete(group.id);
4865
+ this._onDidRemove.fire(group);
4619
4866
  }
4620
- this._onDidRemoveGroup.fire(group);
4621
4867
  if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
4622
4868
  const groups = Array.from(this._groups.values());
4623
4869
  this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
@@ -4628,25 +4874,18 @@ define(['exports'], (function (exports) { 'use strict';
4628
4874
  var _a;
4629
4875
  return (_a = this._groups.get(id)) === null || _a === void 0 ? void 0 : _a.value;
4630
4876
  }
4631
- doSetGroupActive(group, skipFocus) {
4632
- var _a, _b, _c;
4877
+ doSetGroupActive(group) {
4633
4878
  if (this._activeGroup === group) {
4634
4879
  return;
4635
4880
  }
4636
4881
  if (this._activeGroup) {
4637
4882
  this._activeGroup.setActive(false);
4638
- if (!skipFocus) {
4639
- (_b = (_a = this._activeGroup).focus) === null || _b === void 0 ? void 0 : _b.call(_a);
4640
- }
4641
4883
  }
4642
4884
  if (group) {
4643
4885
  group.setActive(true);
4644
- if (!skipFocus) {
4645
- (_c = group.focus) === null || _c === void 0 ? void 0 : _c.call(group);
4646
- }
4647
4886
  }
4648
4887
  this._activeGroup = group;
4649
- this._onDidActiveGroupChange.fire(group);
4888
+ this._onDidActiveChange.fire(group);
4650
4889
  }
4651
4890
  removeGroup(group) {
4652
4891
  this.doRemoveGroup(group);
@@ -4691,9 +4930,9 @@ define(['exports'], (function (exports) { 'use strict';
4691
4930
  this.gridview.layout(width, height);
4692
4931
  }
4693
4932
  dispose() {
4694
- this._onDidActiveGroupChange.dispose();
4695
- this._onDidAddGroup.dispose();
4696
- this._onDidRemoveGroup.dispose();
4933
+ this._onDidActiveChange.dispose();
4934
+ this._onDidAdd.dispose();
4935
+ this._onDidRemove.dispose();
4697
4936
  this._onDidLayoutChange.dispose();
4698
4937
  for (const group of this.groups) {
4699
4938
  group.dispose();
@@ -4703,11 +4942,15 @@ define(['exports'], (function (exports) { 'use strict';
4703
4942
  }
4704
4943
  }
4705
4944
 
4945
+ class WillFocusEvent extends DockviewEvent {
4946
+ constructor() {
4947
+ super();
4948
+ }
4949
+ }
4706
4950
  /**
4707
4951
  * A core api implementation that should be used across all panel-like objects
4708
4952
  */
4709
4953
  class PanelApiImpl extends CompositeDisposable {
4710
- //
4711
4954
  get isFocused() {
4712
4955
  return this._isFocused;
4713
4956
  }
@@ -4717,6 +4960,9 @@ define(['exports'], (function (exports) { 'use strict';
4717
4960
  get isVisible() {
4718
4961
  return this._isVisible;
4719
4962
  }
4963
+ get isHidden() {
4964
+ return this._isHidden;
4965
+ }
4720
4966
  get width() {
4721
4967
  return this._width;
4722
4968
  }
@@ -4729,38 +4975,26 @@ define(['exports'], (function (exports) { 'use strict';
4729
4975
  this._isFocused = false;
4730
4976
  this._isActive = false;
4731
4977
  this._isVisible = true;
4978
+ this._isHidden = false;
4732
4979
  this._width = 0;
4733
4980
  this._height = 0;
4734
4981
  this.panelUpdatesDisposable = new MutableDisposable();
4735
- this._onDidDimensionChange = new Emitter({
4736
- replay: true,
4737
- });
4982
+ this._onDidDimensionChange = new Emitter();
4738
4983
  this.onDidDimensionsChange = this._onDidDimensionChange.event;
4739
- //
4740
- this._onDidChangeFocus = new Emitter({
4741
- replay: true,
4742
- });
4984
+ this._onDidChangeFocus = new Emitter();
4743
4985
  this.onDidFocusChange = this._onDidChangeFocus.event;
4744
4986
  //
4745
- this._onFocusEvent = new Emitter();
4746
- this.onFocusEvent = this._onFocusEvent.event;
4987
+ this._onWillFocus = new Emitter();
4988
+ this.onWillFocus = this._onWillFocus.event;
4747
4989
  //
4748
- this._onDidVisibilityChange = new Emitter({
4749
- replay: true,
4750
- });
4990
+ this._onDidVisibilityChange = new Emitter();
4751
4991
  this.onDidVisibilityChange = this._onDidVisibilityChange.event;
4752
- //
4753
- this._onVisibilityChange = new Emitter();
4754
- this.onVisibilityChange = this._onVisibilityChange.event;
4755
- //
4756
- this._onDidActiveChange = new Emitter({
4757
- replay: true,
4758
- });
4992
+ this._onDidHiddenChange = new Emitter();
4993
+ this.onDidHiddenChange = this._onDidHiddenChange.event;
4994
+ this._onDidActiveChange = new Emitter();
4759
4995
  this.onDidActiveChange = this._onDidActiveChange.event;
4760
- //
4761
4996
  this._onActiveChange = new Emitter();
4762
4997
  this.onActiveChange = this._onActiveChange.event;
4763
- //
4764
4998
  this._onUpdateParameters = new Emitter();
4765
4999
  this.onUpdateParameters = this._onUpdateParameters.event;
4766
5000
  this.addDisposables(this.onDidFocusChange((event) => {
@@ -4769,10 +5003,12 @@ define(['exports'], (function (exports) { 'use strict';
4769
5003
  this._isActive = event.isActive;
4770
5004
  }), this.onDidVisibilityChange((event) => {
4771
5005
  this._isVisible = event.isVisible;
5006
+ }), this.onDidHiddenChange((event) => {
5007
+ this._isHidden = event.isHidden;
4772
5008
  }), this.onDidDimensionsChange((event) => {
4773
5009
  this._width = event.width;
4774
5010
  this._height = event.height;
4775
- }), this.panelUpdatesDisposable, this._onDidDimensionChange, this._onDidChangeFocus, this._onDidVisibilityChange, this._onDidActiveChange, this._onFocusEvent, this._onActiveChange, this._onVisibilityChange, this._onUpdateParameters);
5011
+ }), this.panelUpdatesDisposable, this._onDidDimensionChange, this._onDidChangeFocus, this._onDidVisibilityChange, this._onDidActiveChange, this._onWillFocus, this._onActiveChange, this._onUpdateParameters, this._onWillFocus, this._onDidHiddenChange, this._onUpdateParameters);
4776
5012
  }
4777
5013
  initialize(panel) {
4778
5014
  this.panelUpdatesDisposable.value = this._onUpdateParameters.event((parameters) => {
@@ -4781,8 +5017,8 @@ define(['exports'], (function (exports) { 'use strict';
4781
5017
  });
4782
5018
  });
4783
5019
  }
4784
- setVisible(isVisible) {
4785
- this._onVisibilityChange.fire({ isVisible });
5020
+ setHidden(isHidden) {
5021
+ this._onDidHiddenChange.fire({ isHidden });
4786
5022
  }
4787
5023
  setActive() {
4788
5024
  this._onActiveChange.fire();
@@ -4790,9 +5026,6 @@ define(['exports'], (function (exports) { 'use strict';
4790
5026
  updateParameters(parameters) {
4791
5027
  this._onUpdateParameters.fire(parameters);
4792
5028
  }
4793
- dispose() {
4794
- super.dispose();
4795
- }
4796
5029
  }
4797
5030
 
4798
5031
  class SplitviewPanelApiImpl extends PanelApiImpl {
@@ -4880,7 +5113,12 @@ define(['exports'], (function (exports) { 'use strict';
4880
5113
  }), focusTracker);
4881
5114
  }
4882
5115
  focus() {
4883
- this.api._onFocusEvent.fire();
5116
+ const event = new WillFocusEvent();
5117
+ this.api._onWillFocus.fire(event);
5118
+ if (event.defaultPrevented) {
5119
+ return;
5120
+ }
5121
+ this._element.focus();
4884
5122
  }
4885
5123
  layout(width, height) {
4886
5124
  this._width = width;
@@ -5209,9 +5447,7 @@ define(['exports'], (function (exports) { 'use strict';
5209
5447
  super(id);
5210
5448
  this._onDidConstraintsChangeInternal = new Emitter();
5211
5449
  this.onDidConstraintsChangeInternal = this._onDidConstraintsChangeInternal.event;
5212
- this._onDidConstraintsChange = new Emitter({
5213
- replay: true,
5214
- });
5450
+ this._onDidConstraintsChange = new Emitter();
5215
5451
  this.onDidConstraintsChange = this._onDidConstraintsChange.event;
5216
5452
  this._onDidSizeChange = new Emitter();
5217
5453
  this.onDidSizeChange = this._onDidSizeChange.event;
@@ -5304,13 +5540,13 @@ define(['exports'], (function (exports) { 'use strict';
5304
5540
  this._maximumHeight = options.maximumHeight;
5305
5541
  }
5306
5542
  this.api.initialize(this); // TODO: required to by-pass 'super before this' requirement
5307
- this.addDisposables(this.api.onVisibilityChange((event) => {
5308
- const { isVisible } = event;
5543
+ this.addDisposables(this.api.onDidHiddenChange((event) => {
5544
+ const { isHidden } = event;
5309
5545
  const { accessor } = this._params;
5310
- accessor.setVisible(this, isVisible);
5546
+ accessor.setVisible(this, !isHidden);
5311
5547
  }), this.api.onActiveChange(() => {
5312
5548
  const { accessor } = this._params;
5313
- accessor.setActive(this);
5549
+ accessor.doSetGroupActive(this);
5314
5550
  }), this.api.onDidConstraintsChangeInternal((event) => {
5315
5551
  if (typeof event.minimumWidth === 'number' ||
5316
5552
  typeof event.minimumWidth === 'function') {
@@ -5393,6 +5629,17 @@ define(['exports'], (function (exports) { 'use strict';
5393
5629
  this.onDidLocationChange = this._onDidLocationChange.event;
5394
5630
  this.addDisposables(this._onDidLocationChange);
5395
5631
  }
5632
+ close() {
5633
+ if (!this._group) {
5634
+ return;
5635
+ }
5636
+ return this.accessor.removeGroup(this._group);
5637
+ }
5638
+ getWindow() {
5639
+ return this.location.type === 'popout'
5640
+ ? this.location.getWindow()
5641
+ : window;
5642
+ }
5396
5643
  moveTo(options) {
5397
5644
  var _a, _b, _c;
5398
5645
  if (!this._group) {
@@ -5400,14 +5647,23 @@ define(['exports'], (function (exports) { 'use strict';
5400
5647
  }
5401
5648
  const group = (_a = options.group) !== null && _a !== void 0 ? _a : this.accessor.addGroup({
5402
5649
  direction: positionToDirection((_b = options.position) !== null && _b !== void 0 ? _b : 'right'),
5650
+ skipSetActive: true,
5651
+ });
5652
+ this.accessor.moveGroupOrPanel({
5653
+ from: { groupId: this._group.id },
5654
+ to: {
5655
+ group,
5656
+ position: options.group
5657
+ ? (_c = options.position) !== null && _c !== void 0 ? _c : 'center'
5658
+ : 'center',
5659
+ },
5403
5660
  });
5404
- this.accessor.moveGroupOrPanel(group, this._group.id, undefined, options.group ? (_c = options.position) !== null && _c !== void 0 ? _c : 'center' : 'center');
5405
5661
  }
5406
5662
  maximize() {
5407
5663
  if (!this._group) {
5408
5664
  throw new Error(NOT_INITIALIZED_MESSAGE);
5409
5665
  }
5410
- if (this.location !== 'grid') {
5666
+ if (this.location.type !== 'grid') {
5411
5667
  // only grid groups can be maximized
5412
5668
  return;
5413
5669
  }
@@ -5464,6 +5720,12 @@ define(['exports'], (function (exports) { 'use strict';
5464
5720
  this.api.initialize(this); // cannot use 'this' after after 'super' call
5465
5721
  this._model = new DockviewGroupPanelModel(this.element, accessor, id, options, this);
5466
5722
  }
5723
+ focus() {
5724
+ if (!this.api.isActive) {
5725
+ this.api.setActive();
5726
+ }
5727
+ super.focus();
5728
+ }
5467
5729
  initialize() {
5468
5730
  this._model.initialize();
5469
5731
  }
@@ -5509,6 +5771,9 @@ define(['exports'], (function (exports) { 'use strict';
5509
5771
  }
5510
5772
 
5511
5773
  class DockviewPanelApiImpl extends GridviewPanelApiImpl {
5774
+ get location() {
5775
+ return this.group.api.location;
5776
+ }
5512
5777
  get title() {
5513
5778
  return this.panel.title;
5514
5779
  }
@@ -5520,15 +5785,34 @@ define(['exports'], (function (exports) { 'use strict';
5520
5785
  }
5521
5786
  set group(value) {
5522
5787
  const isOldGroupActive = this.isGroupActive;
5523
- this._group = value;
5524
- this._onDidGroupChange.fire();
5525
- if (this._group) {
5526
- this.disposable.value = this._group.api.onDidActiveChange(() => {
5527
- this._onDidActiveGroupChange.fire();
5788
+ if (this._group !== value) {
5789
+ this._group = value;
5790
+ this._onDidGroupChange.fire({});
5791
+ let _trackGroupActive = isOldGroupActive; // prevent duplicate events with same state
5792
+ this.groupEventsDisposable.value = new CompositeDisposable(this.group.api.onDidLocationChange((event) => {
5793
+ if (this.group !== this.panel.group) {
5794
+ return;
5795
+ }
5796
+ this._onDidLocationChange.fire(event);
5797
+ }), this.group.api.onDidActiveChange(() => {
5798
+ if (this.group !== this.panel.group) {
5799
+ return;
5800
+ }
5801
+ if (_trackGroupActive !== this.isGroupActive) {
5802
+ _trackGroupActive = this.isGroupActive;
5803
+ this._onDidActiveGroupChange.fire({
5804
+ isActive: this.isGroupActive,
5805
+ });
5806
+ }
5807
+ }));
5808
+ // if (this.isGroupActive !== isOldGroupActive) {
5809
+ // this._onDidActiveGroupChange.fire({
5810
+ // isActive: this.isGroupActive,
5811
+ // });
5812
+ // }
5813
+ this._onDidLocationChange.fire({
5814
+ location: this.group.api.location,
5528
5815
  });
5529
- if (this.isGroupActive !== isOldGroupActive) {
5530
- this._onDidActiveGroupChange.fire();
5531
- }
5532
5816
  }
5533
5817
  }
5534
5818
  get group() {
@@ -5546,14 +5830,26 @@ define(['exports'], (function (exports) { 'use strict';
5546
5830
  this.onDidGroupChange = this._onDidGroupChange.event;
5547
5831
  this._onDidRendererChange = new Emitter();
5548
5832
  this.onDidRendererChange = this._onDidRendererChange.event;
5549
- this.disposable = new MutableDisposable();
5833
+ this._onDidLocationChange = new Emitter();
5834
+ this.onDidLocationChange = this._onDidLocationChange.event;
5835
+ this.groupEventsDisposable = new MutableDisposable();
5550
5836
  this.initialize(panel);
5551
5837
  this._group = group;
5552
- this.addDisposables(this.disposable, this._onDidRendererChange, this._onDidTitleChange, this._onDidGroupChange, this._onDidActiveGroupChange);
5838
+ this.addDisposables(this.groupEventsDisposable, this._onDidRendererChange, this._onDidTitleChange, this._onDidGroupChange, this._onDidActiveGroupChange, this._onDidLocationChange);
5839
+ }
5840
+ getWindow() {
5841
+ return this.group.api.getWindow();
5553
5842
  }
5554
5843
  moveTo(options) {
5555
5844
  var _a;
5556
- this.accessor.moveGroupOrPanel(options.group, this._group.id, this.panel.id, (_a = options.position) !== null && _a !== void 0 ? _a : 'center', options.index);
5845
+ this.accessor.moveGroupOrPanel({
5846
+ from: { groupId: this._group.id, panelId: this.panel.id },
5847
+ to: {
5848
+ group: options.group,
5849
+ position: (_a = options.position) !== null && _a !== void 0 ? _a : 'center',
5850
+ index: options.index,
5851
+ },
5852
+ });
5557
5853
  }
5558
5854
  setTitle(title) {
5559
5855
  this.panel.setTitle(title);
@@ -5614,7 +5910,14 @@ define(['exports'], (function (exports) { 'use strict';
5614
5910
  this.setTitle(params.title);
5615
5911
  }
5616
5912
  focus() {
5617
- this.api._onFocusEvent.fire();
5913
+ const event = new WillFocusEvent();
5914
+ this.api._onWillFocus.fire(event);
5915
+ if (event.defaultPrevented) {
5916
+ return;
5917
+ }
5918
+ if (!this.api.isActive) {
5919
+ this.api.setActive();
5920
+ }
5618
5921
  }
5619
5922
  toJSON() {
5620
5923
  return {
@@ -5671,20 +5974,40 @@ define(['exports'], (function (exports) { 'use strict';
5671
5974
  },
5672
5975
  });
5673
5976
  }
5674
- updateParentGroup(group, isGroupActive) {
5977
+ updateParentGroup(group, options) {
5675
5978
  this._group = group;
5676
- this.api.group = group;
5979
+ this.api.group = this._group;
5677
5980
  const isPanelVisible = this._group.model.isPanelActive(this);
5678
- this.api._onDidActiveChange.fire({
5679
- isActive: isGroupActive && isPanelVisible,
5680
- });
5681
- this.api._onDidVisibilityChange.fire({
5682
- isVisible: isPanelVisible,
5683
- });
5684
- this.view.updateParentGroup(this._group, this._group.model.isPanelActive(this));
5981
+ const isActive = this.group.api.isActive && isPanelVisible;
5982
+ if (!(options === null || options === void 0 ? void 0 : options.skipSetActive)) {
5983
+ if (this.api.isActive !== isActive) {
5984
+ this.api._onDidActiveChange.fire({
5985
+ isActive: this.group.api.isActive && isPanelVisible,
5986
+ });
5987
+ }
5988
+ }
5989
+ if (this.api.isVisible !== isPanelVisible) {
5990
+ this.api._onDidVisibilityChange.fire({
5991
+ isVisible: isPanelVisible,
5992
+ });
5993
+ }
5994
+ }
5995
+ runEvents() {
5996
+ const isPanelVisible = this._group.model.isPanelActive(this);
5997
+ const isActive = this.group.api.isActive && isPanelVisible;
5998
+ if (this.api.isActive !== isActive) {
5999
+ this.api._onDidActiveChange.fire({
6000
+ isActive: this.group.api.isActive && isPanelVisible,
6001
+ });
6002
+ }
6003
+ if (this.api.isVisible !== isPanelVisible) {
6004
+ this.api._onDidVisibilityChange.fire({
6005
+ isVisible: isPanelVisible,
6006
+ });
6007
+ }
5685
6008
  }
5686
6009
  layout(width, height) {
5687
- // the obtain the correct dimensions of the content panel we must deduct the tab height
6010
+ // TODO: Can we somehow do height without header height or indicate what the header height is?
5688
6011
  this.api._onDidDimensionChange.fire({
5689
6012
  width,
5690
6013
  height: height,
@@ -5806,8 +6129,6 @@ define(['exports'], (function (exports) { 'use strict';
5806
6129
  this.id = id;
5807
6130
  this.contentComponent = contentComponent;
5808
6131
  this.tabComponent = tabComponent;
5809
- this._group = null;
5810
- this._isPanelVisible = null;
5811
6132
  this._content = this.createContentComponent(this.id, contentComponent);
5812
6133
  this._tab = this.createTabComponent(this.id, tabComponent);
5813
6134
  }
@@ -5815,25 +6136,8 @@ define(['exports'], (function (exports) { 'use strict';
5815
6136
  this.content.init(Object.assign(Object.assign({}, params), { tab: this.tab }));
5816
6137
  this.tab.init(params);
5817
6138
  }
5818
- updateParentGroup(group, isPanelVisible) {
5819
- if (group !== this._group) {
5820
- this._group = group;
5821
- if (this._content.onGroupChange) {
5822
- this._content.onGroupChange(group);
5823
- }
5824
- if (this._tab.onGroupChange) {
5825
- this._tab.onGroupChange(group);
5826
- }
5827
- }
5828
- if (isPanelVisible !== this._isPanelVisible) {
5829
- this._isPanelVisible = isPanelVisible;
5830
- if (this._content.onPanelVisibleChange) {
5831
- this._content.onPanelVisibleChange(isPanelVisible);
5832
- }
5833
- if (this._tab.onPanelVisibleChange) {
5834
- this._tab.onPanelVisibleChange(isPanelVisible);
5835
- }
5836
- }
6139
+ updateParentGroup(_group, _isPanelVisible) {
6140
+ // noop
5837
6141
  }
5838
6142
  layout(width, height) {
5839
6143
  var _a, _b;
@@ -6266,117 +6570,6 @@ define(['exports'], (function (exports) { 'use strict';
6266
6570
  }
6267
6571
  }
6268
6572
 
6269
- class PopoutWindow extends CompositeDisposable {
6270
- constructor(id, className, options) {
6271
- super();
6272
- this.id = id;
6273
- this.className = className;
6274
- this.options = options;
6275
- this._onDidClose = new Emitter();
6276
- this.onDidClose = this._onDidClose.event;
6277
- this._window = null;
6278
- this.addDisposables(this._onDidClose, {
6279
- dispose: () => {
6280
- this.close();
6281
- },
6282
- });
6283
- }
6284
- dimensions() {
6285
- if (!this._window) {
6286
- return null;
6287
- }
6288
- const left = this._window.value.screenX;
6289
- const top = this._window.value.screenY;
6290
- const width = this._window.value.innerWidth;
6291
- const height = this._window.value.innerHeight;
6292
- return { top, left, width, height };
6293
- }
6294
- close() {
6295
- if (this._window) {
6296
- this._window.disposable.dispose();
6297
- this._window.value.close();
6298
- this._window = null;
6299
- }
6300
- }
6301
- open(content) {
6302
- if (this._window) {
6303
- throw new Error('instance of popout window is already open');
6304
- }
6305
- const url = `${this.options.url}`;
6306
- const features = Object.entries({
6307
- top: this.options.top,
6308
- left: this.options.left,
6309
- width: this.options.width,
6310
- height: this.options.height,
6311
- })
6312
- .map(([key, value]) => `${key}=${value}`)
6313
- .join(',');
6314
- // https://developer.mozilla.org/en-US/docs/Web/API/Window/open
6315
- const externalWindow = window.open(url, this.id, features);
6316
- if (!externalWindow) {
6317
- return;
6318
- }
6319
- const disposable = new CompositeDisposable();
6320
- this._window = { value: externalWindow, disposable };
6321
- const cleanUp = () => {
6322
- this._onDidClose.fire();
6323
- this._window = null;
6324
- };
6325
- // prevent any default content from loading
6326
- // externalWindow.document.body.replaceWith(document.createElement('div'));
6327
- disposable.addDisposables(addDisposableWindowListener(window, 'beforeunload', () => {
6328
- cleanUp();
6329
- this.close();
6330
- }));
6331
- externalWindow.addEventListener('load', () => {
6332
- const externalDocument = externalWindow.document;
6333
- externalDocument.title = document.title;
6334
- const div = document.createElement('div');
6335
- div.classList.add('dv-popout-window');
6336
- div.style.position = 'absolute';
6337
- div.style.width = '100%';
6338
- div.style.height = '100%';
6339
- div.style.top = '0px';
6340
- div.style.left = '0px';
6341
- div.classList.add(this.className);
6342
- div.appendChild(content);
6343
- externalDocument.body.replaceChildren(div);
6344
- externalDocument.body.classList.add(this.className);
6345
- addStyles(externalDocument, window.document.styleSheets);
6346
- externalWindow.addEventListener('beforeunload', () => {
6347
- // TODO: indicate external window is closing
6348
- cleanUp();
6349
- });
6350
- });
6351
- }
6352
- }
6353
-
6354
- class DockviewPopoutGroupPanel extends CompositeDisposable {
6355
- constructor(id, group, options) {
6356
- var _a;
6357
- super();
6358
- this.id = id;
6359
- this.group = group;
6360
- this.options = options;
6361
- this.window = new PopoutWindow(id, (_a = options.className) !== null && _a !== void 0 ? _a : '', {
6362
- url: this.options.popoutUrl,
6363
- left: this.options.box.left,
6364
- top: this.options.box.top,
6365
- width: this.options.box.width,
6366
- height: this.options.box.height,
6367
- });
6368
- group.model.location = 'popout';
6369
- this.addDisposables(this.window, {
6370
- dispose: () => {
6371
- group.model.location = 'grid';
6372
- },
6373
- }, this.window.onDidClose(() => {
6374
- this.dispose();
6375
- }));
6376
- this.window.open(group.element);
6377
- }
6378
- }
6379
-
6380
6573
  const DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE = 100;
6381
6574
  const DEFAULT_FLOATING_GROUP_POSITION = { left: 100, top: 100 };
6382
6575
 
@@ -6390,11 +6583,13 @@ define(['exports'], (function (exports) { 'use strict';
6390
6583
  super();
6391
6584
  this.element = element;
6392
6585
  this.map = {};
6586
+ this._disposed = false;
6393
6587
  this.addDisposables(Disposable.from(() => {
6394
6588
  for (const value of Object.values(this.map)) {
6395
6589
  value.disposable.dispose();
6396
6590
  value.destroy.dispose();
6397
6591
  }
6592
+ this._disposed = true;
6398
6593
  }));
6399
6594
  }
6400
6595
  detatch(panel) {
@@ -6434,7 +6629,7 @@ define(['exports'], (function (exports) { 'use strict';
6434
6629
  focusContainer.style.top = `${box.top - box2.top}px`;
6435
6630
  focusContainer.style.width = `${box.width}px`;
6436
6631
  focusContainer.style.height = `${box.height}px`;
6437
- toggleClass(focusContainer, 'dv-render-overlay-float', panel.group.api.location === 'floating');
6632
+ toggleClass(focusContainer, 'dv-render-overlay-float', panel.group.api.location.type === 'floating');
6438
6633
  };
6439
6634
  const visibilityChanged = () => {
6440
6635
  if (panel.api.isVisible) {
@@ -6480,8 +6675,11 @@ define(['exports'], (function (exports) { 'use strict';
6480
6675
  resize();
6481
6676
  }));
6482
6677
  this.map[panel.api.id].destroy = Disposable.from(() => {
6483
- focusContainer.removeChild(panel.view.content.element);
6484
- this.element.removeChild(focusContainer);
6678
+ var _a;
6679
+ if (panel.view.content.element.parentElement === focusContainer) {
6680
+ focusContainer.removeChild(panel.view.content.element);
6681
+ }
6682
+ (_a = focusContainer.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(focusContainer);
6485
6683
  });
6486
6684
  queueMicrotask(() => {
6487
6685
  if (this.isDisposed) {
@@ -6502,11 +6700,187 @@ define(['exports'], (function (exports) { 'use strict';
6502
6700
  }
6503
6701
  }
6504
6702
 
6703
+ /******************************************************************************
6704
+ Copyright (c) Microsoft Corporation.
6705
+
6706
+ Permission to use, copy, modify, and/or distribute this software for any
6707
+ purpose with or without fee is hereby granted.
6708
+
6709
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
6710
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
6711
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
6712
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
6713
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
6714
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
6715
+ PERFORMANCE OF THIS SOFTWARE.
6716
+ ***************************************************************************** */
6717
+ /* global Reflect, Promise, SuppressedError, Symbol */
6718
+
6719
+
6720
+ function __awaiter(thisArg, _arguments, P, generator) {
6721
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6722
+ return new (P || (P = Promise))(function (resolve, reject) {
6723
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6724
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6725
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
6726
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
6727
+ });
6728
+ }
6729
+
6730
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
6731
+ var e = new Error(message);
6732
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
6733
+ };
6734
+
6735
+ class PopoutWindow extends CompositeDisposable {
6736
+ get window() {
6737
+ var _a, _b;
6738
+ return (_b = (_a = this._window) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : null;
6739
+ }
6740
+ constructor(target, className, options) {
6741
+ super();
6742
+ this.target = target;
6743
+ this.className = className;
6744
+ this.options = options;
6745
+ this._onWillClose = new Emitter();
6746
+ this.onWillClose = this._onWillClose.event;
6747
+ this._onDidClose = new Emitter();
6748
+ this.onDidClose = this._onDidClose.event;
6749
+ this._window = null;
6750
+ this.addDisposables(this._onWillClose, this._onDidClose, {
6751
+ dispose: () => {
6752
+ this.close();
6753
+ },
6754
+ });
6755
+ }
6756
+ dimensions() {
6757
+ if (!this._window) {
6758
+ return null;
6759
+ }
6760
+ const left = this._window.value.screenX;
6761
+ const top = this._window.value.screenY;
6762
+ const width = this._window.value.innerWidth;
6763
+ const height = this._window.value.innerHeight;
6764
+ return { top, left, width, height };
6765
+ }
6766
+ close() {
6767
+ var _a, _b;
6768
+ if (this._window) {
6769
+ this._onWillClose.fire();
6770
+ (_b = (_a = this.options).onWillClose) === null || _b === void 0 ? void 0 : _b.call(_a, {
6771
+ id: this.target,
6772
+ window: this._window.value,
6773
+ });
6774
+ this._window.disposable.dispose();
6775
+ this._window.value.close();
6776
+ this._window = null;
6777
+ this._onDidClose.fire();
6778
+ }
6779
+ }
6780
+ open() {
6781
+ var _a, _b;
6782
+ return __awaiter(this, void 0, void 0, function* () {
6783
+ if (this._window) {
6784
+ throw new Error('instance of popout window is already open');
6785
+ }
6786
+ const url = `${this.options.url}`;
6787
+ const features = Object.entries({
6788
+ top: this.options.top,
6789
+ left: this.options.left,
6790
+ width: this.options.width,
6791
+ height: this.options.height,
6792
+ })
6793
+ .map(([key, value]) => `${key}=${value}`)
6794
+ .join(',');
6795
+ /**
6796
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/open
6797
+ */
6798
+ const externalWindow = window.open(url, this.target, features);
6799
+ if (!externalWindow) {
6800
+ /**
6801
+ * Popup blocked
6802
+ */
6803
+ return null;
6804
+ }
6805
+ const disposable = new CompositeDisposable();
6806
+ this._window = { value: externalWindow, disposable };
6807
+ disposable.addDisposables(addDisposableWindowListener(window, 'beforeunload', () => {
6808
+ /**
6809
+ * before the main window closes we should close this popup too
6810
+ * to be good citizens
6811
+ *
6812
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event
6813
+ */
6814
+ this.close();
6815
+ }));
6816
+ const container = this.createPopoutWindowContainer();
6817
+ if (this.className) {
6818
+ container.classList.add(this.className);
6819
+ }
6820
+ (_b = (_a = this.options).onDidOpen) === null || _b === void 0 ? void 0 : _b.call(_a, {
6821
+ id: this.target,
6822
+ window: externalWindow,
6823
+ });
6824
+ return new Promise((resolve) => {
6825
+ externalWindow.addEventListener('unload', (e) => {
6826
+ // if page fails to load before unloading
6827
+ // this.close();
6828
+ });
6829
+ externalWindow.addEventListener('load', () => {
6830
+ /**
6831
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/load_event
6832
+ */
6833
+ const externalDocument = externalWindow.document;
6834
+ externalDocument.title = document.title;
6835
+ externalDocument.body.appendChild(container);
6836
+ addStyles(externalDocument, window.document.styleSheets);
6837
+ /**
6838
+ * beforeunload must be registered after load for reasons I could not determine
6839
+ * otherwise the beforeunload event will not fire when the window is closed
6840
+ */
6841
+ addDisposableWindowListener(externalWindow, 'beforeunload', () => {
6842
+ /**
6843
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event
6844
+ */
6845
+ this.close();
6846
+ });
6847
+ resolve(container);
6848
+ });
6849
+ });
6850
+ });
6851
+ }
6852
+ createPopoutWindowContainer() {
6853
+ const el = document.createElement('div');
6854
+ el.classList.add('dv-popout-window');
6855
+ el.id = 'dv-popout-window';
6856
+ el.style.position = 'absolute';
6857
+ el.style.width = '100%';
6858
+ el.style.height = '100%';
6859
+ el.style.top = '0px';
6860
+ el.style.left = '0px';
6861
+ return el;
6862
+ }
6863
+ }
6864
+
6505
6865
  const DEFAULT_ROOT_OVERLAY_MODEL = {
6506
6866
  activationSize: { type: 'pixels', value: 10 },
6507
6867
  size: { type: 'pixels', value: 20 },
6508
6868
  };
6509
- function getTheme(element) {
6869
+ function moveGroupWithoutDestroying(options) {
6870
+ const activePanel = options.from.activePanel;
6871
+ const panels = [...options.from.panels].map((panel) => {
6872
+ const removedPanel = options.from.model.removePanel(panel);
6873
+ options.from.model.renderContainer.detatch(panel);
6874
+ return removedPanel;
6875
+ });
6876
+ panels.forEach((panel) => {
6877
+ options.to.model.openPanel(panel, {
6878
+ skipSetActive: activePanel !== panel,
6879
+ skipSetGroupActive: true,
6880
+ });
6881
+ });
6882
+ }
6883
+ function getDockviewTheme(element) {
6510
6884
  function toClassList(element) {
6511
6885
  const list = [];
6512
6886
  for (let i = 0; i < element.classList.length; i++) {
@@ -6557,6 +6931,7 @@ define(['exports'], (function (exports) { 'use strict';
6557
6931
  styles: options.styles,
6558
6932
  parentElement: options.parentElement,
6559
6933
  disableAutoResizing: options.disableAutoResizing,
6934
+ locked: options.locked,
6560
6935
  });
6561
6936
  this.nextGroupId = sequentialNumberGenerator();
6562
6937
  this._deserializer = new DefaultDockviewDeserialzier(this);
@@ -6567,6 +6942,10 @@ define(['exports'], (function (exports) { 'use strict';
6567
6942
  this.onWillDragGroup = this._onWillDragGroup.event;
6568
6943
  this._onDidDrop = new Emitter();
6569
6944
  this.onDidDrop = this._onDidDrop.event;
6945
+ this._onWillDrop = new Emitter();
6946
+ this.onWillDrop = this._onWillDrop.event;
6947
+ this._onWillShowOverlay = new Emitter();
6948
+ this.onWillShowOverlay = this._onWillShowOverlay.event;
6570
6949
  this._onDidRemovePanel = new Emitter();
6571
6950
  this.onDidRemovePanel = this._onDidRemovePanel.event;
6572
6951
  this._onDidAddPanel = new Emitter();
@@ -6575,15 +6954,36 @@ define(['exports'], (function (exports) { 'use strict';
6575
6954
  this.onDidLayoutFromJSON = this._onDidLayoutFromJSON.event;
6576
6955
  this._onDidActivePanelChange = new Emitter();
6577
6956
  this.onDidActivePanelChange = this._onDidActivePanelChange.event;
6957
+ this._onDidMovePanel = new Emitter();
6578
6958
  this._floatingGroups = [];
6579
6959
  this._popoutGroups = [];
6960
+ this._ignoreEvents = 0;
6961
+ this._onDidRemoveGroup = new Emitter();
6962
+ this.onDidRemoveGroup = this._onDidRemoveGroup.event;
6963
+ this._onDidAddGroup = new Emitter();
6964
+ this.onDidAddGroup = this._onDidAddGroup.event;
6965
+ this._onDidActiveGroupChange = new Emitter();
6966
+ this.onDidActiveGroupChange = this._onDidActiveGroupChange.event;
6967
+ this._moving = false;
6580
6968
  const gready = document.createElement('div');
6581
6969
  gready.className = 'dv-overlay-render-container';
6582
6970
  this.gridview.element.appendChild(gready);
6583
6971
  this.overlayRenderContainer = new OverlayRenderContainer(gready);
6584
6972
  toggleClass(this.gridview.element, 'dv-dockview', true);
6585
6973
  toggleClass(this.element, 'dv-debug', !!options.debug);
6586
- this.addDisposables(this.overlayRenderContainer, this._onWillDragPanel, this._onWillDragGroup, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, exports.DockviewEvent.any(this.onDidAddGroup, this.onDidRemoveGroup)(() => {
6974
+ this.addDisposables(this.overlayRenderContainer, this._onWillDragPanel, this._onWillDragGroup, this._onWillShowOverlay, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, this._onWillDrop, this._onDidMovePanel, this._onDidAddGroup, this._onDidRemoveGroup, this._onDidActiveGroupChange, this.onDidAdd((event) => {
6975
+ if (!this._moving) {
6976
+ this._onDidAddGroup.fire(event);
6977
+ }
6978
+ }), this.onDidRemove((event) => {
6979
+ if (!this._moving) {
6980
+ this._onDidRemoveGroup.fire(event);
6981
+ }
6982
+ }), this.onDidActiveChange((event) => {
6983
+ if (!this._moving) {
6984
+ this._onDidActiveGroupChange.fire(event);
6985
+ }
6986
+ }), exports.DockviewEvent.any(this.onDidAdd, this.onDidRemove)(() => {
6587
6987
  this.updateWatermark();
6588
6988
  }), exports.DockviewEvent.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidActivePanelChange)(() => {
6589
6989
  this._bufferOnDidLayoutChange.fire();
@@ -6594,7 +6994,7 @@ define(['exports'], (function (exports) { 'use strict';
6594
6994
  }
6595
6995
  // iterate over a copy of the array since .dispose() mutates the original array
6596
6996
  for (const group of [...this._popoutGroups]) {
6597
- group.dispose();
6997
+ group.disposable.dispose();
6598
6998
  }
6599
6999
  }));
6600
7000
  this._options = options;
@@ -6640,7 +7040,7 @@ define(['exports'], (function (exports) { 'use strict';
6640
7040
  return this.options.showDndOverlay({
6641
7041
  nativeEvent: event,
6642
7042
  position: position,
6643
- target: exports.DockviewDropTargets.Edge,
7043
+ target: 'edge',
6644
7044
  getData: getPanelData,
6645
7045
  });
6646
7046
  }
@@ -6651,86 +7051,249 @@ define(['exports'], (function (exports) { 'use strict';
6651
7051
  });
6652
7052
  this.addDisposables(this._rootDropTarget.onDrop((event) => {
6653
7053
  var _a;
7054
+ const willDropEvent = new DockviewWillDropEvent({
7055
+ nativeEvent: event.nativeEvent,
7056
+ position: event.position,
7057
+ panel: undefined,
7058
+ api: this._api,
7059
+ group: undefined,
7060
+ getData: getPanelData,
7061
+ kind: 'content',
7062
+ });
7063
+ this._onWillDrop.fire(willDropEvent);
7064
+ if (willDropEvent.defaultPrevented) {
7065
+ return;
7066
+ }
6654
7067
  const data = getPanelData();
6655
7068
  if (data) {
6656
- this.moveGroupOrPanel(this.orthogonalize(event.position), data.groupId, (_a = data.panelId) !== null && _a !== void 0 ? _a : undefined, 'center');
7069
+ this.moveGroupOrPanel({
7070
+ from: {
7071
+ groupId: data.groupId,
7072
+ panelId: (_a = data.panelId) !== null && _a !== void 0 ? _a : undefined,
7073
+ },
7074
+ to: {
7075
+ group: this.orthogonalize(event.position),
7076
+ position: 'center',
7077
+ },
7078
+ });
6657
7079
  }
6658
7080
  else {
6659
- this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api, group: null, getData: getPanelData }));
7081
+ this._onDidDrop.fire(new DockviewDidDropEvent({
7082
+ nativeEvent: event.nativeEvent,
7083
+ position: event.position,
7084
+ panel: undefined,
7085
+ api: this._api,
7086
+ group: undefined,
7087
+ getData: getPanelData,
7088
+ }));
6660
7089
  }
6661
7090
  }), this._rootDropTarget);
6662
7091
  this._api = new DockviewApi(this);
6663
7092
  this.updateWatermark();
6664
7093
  }
6665
- addPopoutGroup(item, options) {
6666
- var _a;
6667
- let group;
6668
- let box = options === null || options === void 0 ? void 0 : options.position;
6669
- if (item instanceof DockviewPanel) {
6670
- group = this.createGroup();
6671
- this.removePanel(item, {
6672
- removeEmptyGroup: true,
6673
- skipDispose: true,
6674
- });
6675
- group.model.openPanel(item);
6676
- if (!box) {
6677
- box = this.element.getBoundingClientRect();
7094
+ addPopoutGroup(itemToPopout, options) {
7095
+ var _a, _b, _c;
7096
+ if (itemToPopout instanceof DockviewPanel &&
7097
+ itemToPopout.group.size === 1) {
7098
+ return this.addPopoutGroup(itemToPopout.group);
7099
+ }
7100
+ const theme = getDockviewTheme(this.gridview.element);
7101
+ const element = this.element;
7102
+ function getBox() {
7103
+ if (options === null || options === void 0 ? void 0 : options.position) {
7104
+ return options.position;
7105
+ }
7106
+ if (itemToPopout instanceof DockviewGroupPanel) {
7107
+ return itemToPopout.element.getBoundingClientRect();
7108
+ }
7109
+ if (itemToPopout.group) {
7110
+ return itemToPopout.group.element.getBoundingClientRect();
7111
+ }
7112
+ return element.getBoundingClientRect();
7113
+ }
7114
+ const box = getBox();
7115
+ const groupId = (_b = (_a = options === null || options === void 0 ? void 0 : options.overridePopoutGroup) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : this.getNextGroupId(); //item.id;
7116
+ if (itemToPopout.api.location.type === 'grid') {
7117
+ itemToPopout.api.setHidden(true);
7118
+ }
7119
+ const _window = new PopoutWindow(`${this.id}-${groupId}`, // unique id
7120
+ theme !== null && theme !== void 0 ? theme : '', {
7121
+ url: (_c = options === null || options === void 0 ? void 0 : options.popoutUrl) !== null && _c !== void 0 ? _c : '/popout.html',
7122
+ left: window.screenX + box.left,
7123
+ top: window.screenY + box.top,
7124
+ width: box.width,
7125
+ height: box.height,
7126
+ onDidOpen: options === null || options === void 0 ? void 0 : options.onDidOpen,
7127
+ onWillClose: options === null || options === void 0 ? void 0 : options.onWillClose,
7128
+ });
7129
+ const popoutWindowDisposable = new CompositeDisposable(_window, _window.onDidClose(() => {
7130
+ popoutWindowDisposable.dispose();
7131
+ }));
7132
+ return _window
7133
+ .open()
7134
+ .then((popoutContainer) => {
7135
+ var _a;
7136
+ if (_window.isDisposed) {
7137
+ return;
6678
7138
  }
6679
- }
6680
- else {
6681
- group = item;
6682
- if (!box) {
6683
- box = group.element.getBoundingClientRect();
7139
+ if (popoutContainer === null) {
7140
+ popoutWindowDisposable.dispose();
7141
+ return;
6684
7142
  }
6685
- const skip = typeof (options === null || options === void 0 ? void 0 : options.skipRemoveGroup) === 'boolean' &&
6686
- options.skipRemoveGroup;
6687
- if (!skip) {
6688
- this.doRemoveGroup(item, { skipDispose: true });
6689
- }
6690
- }
6691
- const theme = getTheme(this.gridview.element);
6692
- const popoutWindow = new DockviewPopoutGroupPanel(`${this.id}-${group.id}`, // globally unique within dockview
6693
- group, {
6694
- className: theme !== null && theme !== void 0 ? theme : '',
6695
- popoutUrl: (_a = options === null || options === void 0 ? void 0 : options.popoutUrl) !== null && _a !== void 0 ? _a : '/popout.html',
6696
- box: {
6697
- left: window.screenX + box.left,
6698
- top: window.screenY + box.top,
6699
- width: box.width,
6700
- height: box.height,
6701
- },
7143
+ const gready = document.createElement('div');
7144
+ gready.className = 'dv-overlay-render-container';
7145
+ const overlayRenderContainer = new OverlayRenderContainer(gready);
7146
+ const referenceGroup = itemToPopout instanceof DockviewPanel
7147
+ ? itemToPopout.group
7148
+ : itemToPopout;
7149
+ const referenceLocation = itemToPopout.api.location.type;
7150
+ const group = (_a = options === null || options === void 0 ? void 0 : options.overridePopoutGroup) !== null && _a !== void 0 ? _a : this.createGroup({ id: groupId });
7151
+ group.model.renderContainer = overlayRenderContainer;
7152
+ if (!(options === null || options === void 0 ? void 0 : options.overridePopoutGroup)) {
7153
+ this._onDidAddGroup.fire(group);
7154
+ }
7155
+ if (itemToPopout instanceof DockviewPanel) {
7156
+ this.movingLock(() => {
7157
+ const panel = referenceGroup.model.removePanel(itemToPopout);
7158
+ group.model.openPanel(panel);
7159
+ });
7160
+ }
7161
+ else {
7162
+ this.movingLock(() => moveGroupWithoutDestroying({
7163
+ from: referenceGroup,
7164
+ to: group,
7165
+ }));
7166
+ switch (referenceLocation) {
7167
+ case 'grid':
7168
+ referenceGroup.api.setHidden(true);
7169
+ break;
7170
+ case 'floating':
7171
+ case 'popout':
7172
+ this.removeGroup(referenceGroup);
7173
+ break;
7174
+ }
7175
+ }
7176
+ popoutContainer.classList.add('dv-dockview');
7177
+ popoutContainer.style.overflow = 'hidden';
7178
+ popoutContainer.appendChild(gready);
7179
+ popoutContainer.appendChild(group.element);
7180
+ group.model.location = {
7181
+ type: 'popout',
7182
+ getWindow: () => _window.window,
7183
+ };
7184
+ this.doSetGroupAndPanelActive(group);
7185
+ popoutWindowDisposable.addDisposables(group.api.onDidActiveChange((event) => {
7186
+ var _a;
7187
+ if (event.isActive) {
7188
+ (_a = _window.window) === null || _a === void 0 ? void 0 : _a.focus();
7189
+ }
7190
+ }), group.api.onWillFocus(() => {
7191
+ var _a;
7192
+ (_a = _window.window) === null || _a === void 0 ? void 0 : _a.focus();
7193
+ }));
7194
+ let returnedGroup;
7195
+ const value = {
7196
+ window: _window,
7197
+ popoutGroup: group,
7198
+ referenceGroup: this.getPanel(referenceGroup.id)
7199
+ ? referenceGroup.id
7200
+ : undefined,
7201
+ disposable: {
7202
+ dispose: () => {
7203
+ popoutWindowDisposable.dispose();
7204
+ return returnedGroup;
7205
+ },
7206
+ },
7207
+ };
7208
+ popoutWindowDisposable.addDisposables(
7209
+ /**
7210
+ * ResizeObserver seems slow here, I do not know why but we don't need it
7211
+ * since we can reply on the window resize event as we will occupy the full
7212
+ * window dimensions
7213
+ */
7214
+ addDisposableWindowListener(_window.window, 'resize', () => {
7215
+ group.layout(window.innerWidth, window.innerHeight);
7216
+ }), overlayRenderContainer, Disposable.from(() => {
7217
+ if (this.getPanel(referenceGroup.id)) {
7218
+ this.movingLock(() => moveGroupWithoutDestroying({
7219
+ from: group,
7220
+ to: referenceGroup,
7221
+ }));
7222
+ if (referenceGroup.api.isHidden) {
7223
+ referenceGroup.api.setHidden(false);
7224
+ }
7225
+ if (this.getPanel(group.id)) {
7226
+ this.doRemoveGroup(group, {
7227
+ skipPopoutAssociated: true,
7228
+ });
7229
+ }
7230
+ }
7231
+ else {
7232
+ if (this.getPanel(group.id)) {
7233
+ const removedGroup = this.doRemoveGroup(group, {
7234
+ skipDispose: true,
7235
+ skipActive: true,
7236
+ });
7237
+ removedGroup.model.renderContainer =
7238
+ this.overlayRenderContainer;
7239
+ removedGroup.model.location = { type: 'grid' };
7240
+ returnedGroup = removedGroup;
7241
+ }
7242
+ }
7243
+ }));
7244
+ this._popoutGroups.push(value);
7245
+ this.updateWatermark();
7246
+ })
7247
+ .catch((err) => {
7248
+ console.error(err);
6702
7249
  });
6703
- popoutWindow.addDisposables({
6704
- dispose: () => {
6705
- remove(this._popoutGroups, popoutWindow);
6706
- this.updateWatermark();
6707
- },
6708
- }, popoutWindow.window.onDidClose(() => {
6709
- this.doAddGroup(group, [0]);
6710
- }));
6711
- this._popoutGroups.push(popoutWindow);
6712
- this.updateWatermark();
6713
7250
  }
6714
7251
  addFloatingGroup(item, coord, options) {
6715
- var _a, _b, _c, _d, _e, _f;
7252
+ var _a, _b, _c, _d, _e, _f, _g;
6716
7253
  let group;
6717
7254
  if (item instanceof DockviewPanel) {
6718
7255
  group = this.createGroup();
6719
- this.removePanel(item, {
7256
+ this._onDidAddGroup.fire(group);
7257
+ this.movingLock(() => this.removePanel(item, {
6720
7258
  removeEmptyGroup: true,
6721
7259
  skipDispose: true,
6722
- });
6723
- group.model.openPanel(item);
7260
+ skipSetActiveGroup: true,
7261
+ }));
7262
+ group.model.openPanel(item, { skipSetGroupActive: true });
6724
7263
  }
6725
7264
  else {
6726
7265
  group = item;
7266
+ const popoutReferenceGroupId = (_a = this._popoutGroups.find((_) => _.popoutGroup === group)) === null || _a === void 0 ? void 0 : _a.referenceGroup;
7267
+ const popoutReferenceGroup = popoutReferenceGroupId
7268
+ ? this.getPanel(popoutReferenceGroupId)
7269
+ : undefined;
6727
7270
  const skip = typeof (options === null || options === void 0 ? void 0 : options.skipRemoveGroup) === 'boolean' &&
6728
7271
  options.skipRemoveGroup;
6729
7272
  if (!skip) {
6730
- this.doRemoveGroup(item, { skipDispose: true });
7273
+ if (popoutReferenceGroup) {
7274
+ this.movingLock(() => moveGroupWithoutDestroying({
7275
+ from: item,
7276
+ to: popoutReferenceGroup,
7277
+ }));
7278
+ this.doRemoveGroup(item, {
7279
+ skipPopoutReturn: true,
7280
+ skipPopoutAssociated: true,
7281
+ });
7282
+ this.doRemoveGroup(popoutReferenceGroup, {
7283
+ skipDispose: true,
7284
+ });
7285
+ group = popoutReferenceGroup;
7286
+ }
7287
+ else {
7288
+ this.doRemoveGroup(item, {
7289
+ skipDispose: true,
7290
+ skipPopoutReturn: true,
7291
+ skipPopoutAssociated: !!popoutReferenceGroup,
7292
+ });
7293
+ }
6731
7294
  }
6732
7295
  }
6733
- group.model.location = 'floating';
7296
+ group.model.location = { type: 'floating' };
6734
7297
  const overlayLeft = typeof (coord === null || coord === void 0 ? void 0 : coord.x) === 'number'
6735
7298
  ? Math.max(coord.x, 0)
6736
7299
  : DEFAULT_FLOATING_GROUP_POSITION.left;
@@ -6740,16 +7303,16 @@ define(['exports'], (function (exports) { 'use strict';
6740
7303
  const overlay = new Overlay({
6741
7304
  container: this.gridview.element,
6742
7305
  content: group.element,
6743
- height: (_a = coord === null || coord === void 0 ? void 0 : coord.height) !== null && _a !== void 0 ? _a : 300,
6744
- width: (_b = coord === null || coord === void 0 ? void 0 : coord.width) !== null && _b !== void 0 ? _b : 300,
7306
+ height: (_b = coord === null || coord === void 0 ? void 0 : coord.height) !== null && _b !== void 0 ? _b : 300,
7307
+ width: (_c = coord === null || coord === void 0 ? void 0 : coord.width) !== null && _c !== void 0 ? _c : 300,
6745
7308
  left: overlayLeft,
6746
7309
  top: overlayTop,
6747
7310
  minimumInViewportWidth: this.options.floatingGroupBounds === 'boundedWithinViewport'
6748
7311
  ? undefined
6749
- : (_d = (_c = this.options.floatingGroupBounds) === null || _c === void 0 ? void 0 : _c.minimumWidthWithinViewport) !== null && _d !== void 0 ? _d : DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE,
7312
+ : (_e = (_d = this.options.floatingGroupBounds) === null || _d === void 0 ? void 0 : _d.minimumWidthWithinViewport) !== null && _e !== void 0 ? _e : DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE,
6750
7313
  minimumInViewportHeight: this.options.floatingGroupBounds === 'boundedWithinViewport'
6751
7314
  ? undefined
6752
- : (_f = (_e = this.options.floatingGroupBounds) === null || _e === void 0 ? void 0 : _e.minimumHeightWithinViewport) !== null && _f !== void 0 ? _f : DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE,
7315
+ : (_g = (_f = this.options.floatingGroupBounds) === null || _f === void 0 ? void 0 : _f.minimumHeightWithinViewport) !== null && _g !== void 0 ? _g : DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE,
6753
7316
  });
6754
7317
  const el = group.element.querySelector('.void-container');
6755
7318
  if (!el) {
@@ -6780,12 +7343,15 @@ define(['exports'], (function (exports) { 'use strict';
6780
7343
  }), {
6781
7344
  dispose: () => {
6782
7345
  disposable.dispose();
6783
- group.model.location = 'grid';
7346
+ group.model.location = { type: 'grid' };
6784
7347
  remove(this._floatingGroups, floatingGroupPanel);
6785
7348
  this.updateWatermark();
6786
7349
  },
6787
7350
  });
6788
7351
  this._floatingGroups.push(floatingGroupPanel);
7352
+ if (!(options === null || options === void 0 ? void 0 : options.skipActiveGroup)) {
7353
+ this.doSetGroupAndPanelActive(group);
7354
+ }
6789
7355
  this.updateWatermark();
6790
7356
  }
6791
7357
  orthogonalize(position) {
@@ -6875,8 +7441,8 @@ define(['exports'], (function (exports) { 'use strict';
6875
7441
  return this.panels.find((panel) => panel.id === id);
6876
7442
  }
6877
7443
  setActivePanel(panel) {
6878
- this.doSetGroupActive(panel.group);
6879
7444
  panel.group.model.openPanel(panel);
7445
+ this.doSetGroupAndPanelActive(panel.group);
6880
7446
  }
6881
7447
  moveToNext(options = {}) {
6882
7448
  var _a;
@@ -6937,7 +7503,8 @@ define(['exports'], (function (exports) { 'use strict';
6937
7503
  });
6938
7504
  const popoutGroups = this._popoutGroups.map((group) => {
6939
7505
  return {
6940
- data: group.group.toJSON(),
7506
+ data: group.popoutGroup.toJSON(),
7507
+ gridReferenceGroup: group.referenceGroup,
6941
7508
  position: group.window.dimensions(),
6942
7509
  };
6943
7510
  });
@@ -6955,7 +7522,7 @@ define(['exports'], (function (exports) { 'use strict';
6955
7522
  return result;
6956
7523
  }
6957
7524
  fromJSON(data) {
6958
- var _a, _b;
7525
+ var _a, _b, _c;
6959
7526
  this.clear();
6960
7527
  if (typeof data !== 'object' || data === null) {
6961
7528
  throw new Error('serialized layout must be a non-null object');
@@ -6994,7 +7561,7 @@ define(['exports'], (function (exports) { 'use strict';
6994
7561
  const isActive = typeof activeView === 'string' &&
6995
7562
  activeView === panel.id;
6996
7563
  group.model.openPanel(panel, {
6997
- skipSetPanelActive: !isActive,
7564
+ skipSetActive: !isActive,
6998
7565
  skipSetGroupActive: true,
6999
7566
  });
7000
7567
  }
@@ -7024,11 +7591,16 @@ define(['exports'], (function (exports) { 'use strict';
7024
7591
  }
7025
7592
  const serializedPopoutGroups = (_b = data.popoutGroups) !== null && _b !== void 0 ? _b : [];
7026
7593
  for (const serializedPopoutGroup of serializedPopoutGroups) {
7027
- const { data, position } = serializedPopoutGroup;
7594
+ const { data, position, gridReferenceGroup } = serializedPopoutGroup;
7028
7595
  const group = createGroupFromSerializedState(data);
7029
- this.addPopoutGroup(group, {
7596
+ this.addPopoutGroup((_c = (gridReferenceGroup
7597
+ ? this.getPanel(gridReferenceGroup)
7598
+ : undefined)) !== null && _c !== void 0 ? _c : group, {
7030
7599
  skipRemoveGroup: true,
7031
7600
  position: position !== null && position !== void 0 ? position : undefined,
7601
+ overridePopoutGroup: gridReferenceGroup
7602
+ ? group
7603
+ : undefined,
7032
7604
  });
7033
7605
  }
7034
7606
  for (const floatingGroup of this._floatingGroups) {
@@ -7075,12 +7647,13 @@ define(['exports'], (function (exports) { 'use strict';
7075
7647
  */
7076
7648
  throw err;
7077
7649
  }
7650
+ this.updateWatermark();
7078
7651
  this._onDidLayoutFromJSON.fire();
7079
7652
  }
7080
7653
  clear() {
7081
7654
  const groups = Array.from(this._groups.values()).map((_) => _.value);
7082
7655
  const hasActiveGroup = !!this.activeGroup;
7083
- const hasActivePanel = !!this.activePanel;
7656
+ !!this.activePanel;
7084
7657
  for (const group of groups) {
7085
7658
  // remove the group will automatically remove the panels
7086
7659
  this.removeGroup(group, { skipActive: true });
@@ -7088,9 +7661,6 @@ define(['exports'], (function (exports) { 'use strict';
7088
7661
  if (hasActiveGroup) {
7089
7662
  this.doSetGroupAndPanelActive(undefined);
7090
7663
  }
7091
- if (hasActivePanel) {
7092
- this._onDidActivePanelChange.fire(undefined);
7093
- }
7094
7664
  this.gridview.clear();
7095
7665
  }
7096
7666
  closeAllGroups() {
@@ -7131,6 +7701,7 @@ define(['exports'], (function (exports) { 'use strict';
7131
7701
  const group = this.orthogonalize(directionToPosition(options.position.direction));
7132
7702
  const panel = this.createPanel(options, group);
7133
7703
  group.model.openPanel(panel);
7704
+ this.doSetGroupAndPanelActive(group);
7134
7705
  return panel;
7135
7706
  }
7136
7707
  }
@@ -7142,6 +7713,7 @@ define(['exports'], (function (exports) { 'use strict';
7142
7713
  const target = toTarget(((_b = options.position) === null || _b === void 0 ? void 0 : _b.direction) || 'within');
7143
7714
  if (options.floating) {
7144
7715
  const group = this.createGroup();
7716
+ this._onDidAddGroup.fire(group);
7145
7717
  const o = typeof options.floating === 'object' &&
7146
7718
  options.floating !== null
7147
7719
  ? options.floating
@@ -7149,16 +7721,16 @@ define(['exports'], (function (exports) { 'use strict';
7149
7721
  this.addFloatingGroup(group, o, {
7150
7722
  inDragMode: false,
7151
7723
  skipRemoveGroup: true,
7724
+ skipActiveGroup: true,
7152
7725
  });
7153
- this._onDidAddGroup.fire(group);
7154
7726
  panel = this.createPanel(options, group);
7155
7727
  group.model.openPanel(panel);
7156
- this.doSetGroupAndPanelActive(group);
7157
7728
  }
7158
- else if (referenceGroup.api.location === 'floating' ||
7729
+ else if (referenceGroup.api.location.type === 'floating' ||
7159
7730
  target === 'center') {
7160
7731
  panel = this.createPanel(options, referenceGroup);
7161
7732
  referenceGroup.model.openPanel(panel);
7733
+ this.doSetGroupAndPanelActive(referenceGroup);
7162
7734
  }
7163
7735
  else {
7164
7736
  const location = getGridLocation(referenceGroup.element);
@@ -7166,10 +7738,12 @@ define(['exports'], (function (exports) { 'use strict';
7166
7738
  const group = this.createGroupAtLocation(relativeLocation);
7167
7739
  panel = this.createPanel(options, group);
7168
7740
  group.model.openPanel(panel);
7741
+ this.doSetGroupAndPanelActive(group);
7169
7742
  }
7170
7743
  }
7171
7744
  else if (options.floating) {
7172
7745
  const group = this.createGroup();
7746
+ this._onDidAddGroup.fire(group);
7173
7747
  const o = typeof options.floating === 'object' &&
7174
7748
  options.floating !== null
7175
7749
  ? options.floating
@@ -7177,16 +7751,16 @@ define(['exports'], (function (exports) { 'use strict';
7177
7751
  this.addFloatingGroup(group, o, {
7178
7752
  inDragMode: false,
7179
7753
  skipRemoveGroup: true,
7754
+ skipActiveGroup: true,
7180
7755
  });
7181
- this._onDidAddGroup.fire(group);
7182
7756
  panel = this.createPanel(options, group);
7183
7757
  group.model.openPanel(panel);
7184
- this.doSetGroupAndPanelActive(group);
7185
7758
  }
7186
7759
  else {
7187
7760
  const group = this.createGroupAtLocation();
7188
7761
  panel = this.createPanel(options, group);
7189
7762
  group.model.openPanel(panel);
7763
+ this.doSetGroupAndPanelActive(group);
7190
7764
  }
7191
7765
  return panel;
7192
7766
  }
@@ -7198,13 +7772,15 @@ define(['exports'], (function (exports) { 'use strict';
7198
7772
  if (!group) {
7199
7773
  throw new Error(`cannot remove panel ${panel.id}. it's missing a group.`);
7200
7774
  }
7201
- group.model.removePanel(panel);
7775
+ group.model.removePanel(panel, {
7776
+ skipSetActiveGroup: options.skipSetActiveGroup,
7777
+ });
7202
7778
  if (!options.skipDispose) {
7203
- this.overlayRenderContainer.detatch(panel);
7779
+ panel.group.model.renderContainer.detatch(panel);
7204
7780
  panel.dispose();
7205
7781
  }
7206
7782
  if (group.size === 0 && options.removeEmptyGroup) {
7207
- this.removeGroup(group);
7783
+ this.removeGroup(group, { skipActive: options.skipSetActiveGroup });
7208
7784
  }
7209
7785
  }
7210
7786
  createWatermarkComponent() {
@@ -7217,7 +7793,7 @@ define(['exports'], (function (exports) { 'use strict';
7217
7793
  }
7218
7794
  updateWatermark() {
7219
7795
  var _a, _b;
7220
- if (this.groups.filter((x) => x.api.location === 'grid').length === 0) {
7796
+ if (this.groups.filter((x) => x.api.location.type === 'grid' && !x.api.isHidden).length === 0) {
7221
7797
  if (!this.watermark) {
7222
7798
  this.watermark = this.createWatermarkComponent();
7223
7799
  this.watermark.init({
@@ -7237,7 +7813,7 @@ define(['exports'], (function (exports) { 'use strict';
7237
7813
  }
7238
7814
  addGroup(options) {
7239
7815
  var _a;
7240
- const group = this.createGroup();
7816
+ const group = this.createGroup(options);
7241
7817
  if (options) {
7242
7818
  let referenceGroup;
7243
7819
  if (isGroupOptionsWithPanel(options)) {
@@ -7263,36 +7839,42 @@ define(['exports'], (function (exports) { 'use strict';
7263
7839
  }
7264
7840
  else {
7265
7841
  const group = this.orthogonalize(directionToPosition(options.direction));
7842
+ if (!options.skipSetActive) {
7843
+ this.doSetGroupAndPanelActive(group);
7844
+ }
7266
7845
  return group;
7267
7846
  }
7268
7847
  const target = toTarget(options.direction || 'within');
7269
7848
  const location = getGridLocation(referenceGroup.element);
7270
7849
  const relativeLocation = getRelativeLocation(this.gridview.orientation, location, target);
7271
7850
  this.doAddGroup(group, relativeLocation);
7851
+ if (!options.skipSetActive) {
7852
+ this.doSetGroupAndPanelActive(group);
7853
+ }
7272
7854
  return group;
7273
7855
  }
7274
7856
  else {
7275
7857
  this.doAddGroup(group);
7858
+ this.doSetGroupAndPanelActive(group);
7276
7859
  return group;
7277
7860
  }
7278
7861
  }
7279
7862
  removeGroup(group, options) {
7863
+ this.doRemoveGroup(group, options);
7864
+ }
7865
+ doRemoveGroup(group, options) {
7280
7866
  var _a;
7281
7867
  const panels = [...group.panels]; // reassign since group panels will mutate
7282
- for (const panel of panels) {
7283
- this.removePanel(panel, {
7284
- removeEmptyGroup: false,
7285
- skipDispose: (_a = options === null || options === void 0 ? void 0 : options.skipDispose) !== null && _a !== void 0 ? _a : false,
7286
- });
7868
+ if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
7869
+ for (const panel of panels) {
7870
+ this.removePanel(panel, {
7871
+ removeEmptyGroup: false,
7872
+ skipDispose: (_a = options === null || options === void 0 ? void 0 : options.skipDispose) !== null && _a !== void 0 ? _a : false,
7873
+ });
7874
+ }
7287
7875
  }
7288
7876
  const activePanel = this.activePanel;
7289
- this.doRemoveGroup(group, options);
7290
- if (this.activePanel !== activePanel) {
7291
- this._onDidActivePanelChange.fire(this.activePanel);
7292
- }
7293
- }
7294
- doRemoveGroup(group, options) {
7295
- if (group.api.location === 'floating') {
7877
+ if (group.api.location.type === 'floating') {
7296
7878
  const floatingGroup = this._floatingGroups.find((_) => _.group === group);
7297
7879
  if (floatingGroup) {
7298
7880
  if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
@@ -7304,60 +7886,124 @@ define(['exports'], (function (exports) { 'use strict';
7304
7886
  floatingGroup.dispose();
7305
7887
  if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
7306
7888
  const groups = Array.from(this._groups.values());
7307
- this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
7889
+ this.doSetGroupAndPanelActive(groups.length > 0 ? groups[0].value : undefined);
7308
7890
  }
7309
7891
  return floatingGroup.group;
7310
7892
  }
7311
7893
  throw new Error('failed to find floating group');
7312
7894
  }
7313
- if (group.api.location === 'popout') {
7314
- const selectedGroup = this._popoutGroups.find((_) => _.group === group);
7895
+ if (group.api.location.type === 'popout') {
7896
+ const selectedGroup = this._popoutGroups.find((_) => _.popoutGroup === group);
7315
7897
  if (selectedGroup) {
7316
7898
  if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
7317
- selectedGroup.group.dispose();
7899
+ if (!(options === null || options === void 0 ? void 0 : options.skipPopoutAssociated)) {
7900
+ const refGroup = selectedGroup.referenceGroup
7901
+ ? this.getPanel(selectedGroup.referenceGroup)
7902
+ : undefined;
7903
+ if (refGroup) {
7904
+ this.removeGroup(refGroup);
7905
+ }
7906
+ }
7907
+ selectedGroup.popoutGroup.dispose();
7318
7908
  this._groups.delete(group.id);
7319
7909
  this._onDidRemoveGroup.fire(group);
7320
7910
  }
7321
- selectedGroup.dispose();
7911
+ const removedGroup = selectedGroup.disposable.dispose();
7912
+ if (!(options === null || options === void 0 ? void 0 : options.skipPopoutReturn) && removedGroup) {
7913
+ this.doAddGroup(removedGroup, [0]);
7914
+ this.doSetGroupAndPanelActive(removedGroup);
7915
+ }
7322
7916
  if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
7323
7917
  const groups = Array.from(this._groups.values());
7324
- this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
7918
+ this.doSetGroupAndPanelActive(groups.length > 0 ? groups[0].value : undefined);
7325
7919
  }
7326
- return selectedGroup.group;
7920
+ this.updateWatermark();
7921
+ return selectedGroup.popoutGroup;
7327
7922
  }
7328
7923
  throw new Error('failed to find popout group');
7329
7924
  }
7330
- return super.doRemoveGroup(group, options);
7925
+ const re = super.doRemoveGroup(group, options);
7926
+ if (!(options === null || options === void 0 ? void 0 : options.skipActive)) {
7927
+ if (this.activePanel !== activePanel) {
7928
+ this._onDidActivePanelChange.fire(this.activePanel);
7929
+ }
7930
+ }
7931
+ return re;
7331
7932
  }
7332
- moveGroupOrPanel(destinationGroup, sourceGroupId, sourceItemId, destinationTarget, destinationIndex) {
7333
- var _a, _b, _c;
7933
+ movingLock(func) {
7934
+ const isMoving = this._moving;
7935
+ try {
7936
+ this._moving = true;
7937
+ return func();
7938
+ }
7939
+ finally {
7940
+ this._moving = isMoving;
7941
+ }
7942
+ }
7943
+ moveGroupOrPanel(options) {
7944
+ var _a;
7945
+ const destinationGroup = options.to.group;
7946
+ const sourceGroupId = options.from.groupId;
7947
+ const sourceItemId = options.from.panelId;
7948
+ const destinationTarget = options.to.position;
7949
+ const destinationIndex = options.to.index;
7334
7950
  const sourceGroup = sourceGroupId
7335
7951
  ? (_a = this._groups.get(sourceGroupId)) === null || _a === void 0 ? void 0 : _a.value
7336
7952
  : undefined;
7953
+ if (!sourceGroup) {
7954
+ throw new Error(`Failed to find group id ${sourceGroupId}`);
7955
+ }
7337
7956
  if (sourceItemId === undefined) {
7338
- if (sourceGroup) {
7339
- this.moveGroup(sourceGroup, destinationGroup, destinationTarget);
7340
- }
7957
+ /**
7958
+ * Moving an entire group into another group
7959
+ */
7960
+ this.moveGroup({
7961
+ from: { group: sourceGroup },
7962
+ to: {
7963
+ group: destinationGroup,
7964
+ position: destinationTarget,
7965
+ },
7966
+ });
7341
7967
  return;
7342
7968
  }
7343
7969
  if (!destinationTarget || destinationTarget === 'center') {
7344
- const groupItem = (_b = sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(sourceItemId)) !== null && _b !== void 0 ? _b : this.panels.find((panel) => panel.id === sourceItemId);
7345
- if (!groupItem) {
7970
+ /**
7971
+ * Dropping a panel within another group
7972
+ */
7973
+ const removedPanel = this.movingLock(() => sourceGroup.model.removePanel(sourceItemId, {
7974
+ skipSetActive: false,
7975
+ skipSetActiveGroup: true,
7976
+ }));
7977
+ if (!removedPanel) {
7346
7978
  throw new Error(`No panel with id ${sourceItemId}`);
7347
7979
  }
7348
- if ((sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.size) === 0) {
7349
- this.doRemoveGroup(sourceGroup);
7980
+ if (sourceGroup.model.size === 0) {
7981
+ // remove the group and do not set a new group as active
7982
+ this.doRemoveGroup(sourceGroup, { skipActive: true });
7350
7983
  }
7351
- destinationGroup.model.openPanel(groupItem, {
7984
+ this.movingLock(() => destinationGroup.model.openPanel(removedPanel, {
7352
7985
  index: destinationIndex,
7986
+ skipSetGroupActive: true,
7987
+ }));
7988
+ this.doSetGroupAndPanelActive(destinationGroup);
7989
+ this._onDidMovePanel.fire({
7990
+ panel: removedPanel,
7353
7991
  });
7354
7992
  }
7355
7993
  else {
7994
+ /**
7995
+ * Dropping a panel to the extremities of a group which will place that panel
7996
+ * into an adjacent group
7997
+ */
7356
7998
  const referenceLocation = getGridLocation(destinationGroup.element);
7357
7999
  const targetLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, destinationTarget);
7358
- if (sourceGroup && sourceGroup.size < 2) {
8000
+ if (sourceGroup.size < 2) {
8001
+ /**
8002
+ * If we are moving from a group which only has one panel left we will consider
8003
+ * moving the group itself rather than moving the panel into a newly created group
8004
+ */
7359
8005
  const [targetParentLocation, to] = tail(targetLocation);
7360
- if (sourceGroup.api.location === 'grid') {
8006
+ if (sourceGroup.api.location.type === 'grid') {
7361
8007
  const sourceLocation = getGridLocation(sourceGroup.element);
7362
8008
  const [sourceParentLocation, from] = tail(sourceLocation);
7363
8009
  if (sequenceEquals(sourceParentLocation, targetParentLocation)) {
@@ -7365,78 +8011,123 @@ define(['exports'], (function (exports) { 'use strict';
7365
8011
  // if a group has one tab - we are essentially moving the 'group'
7366
8012
  // which is equivalent to swapping two views in this case
7367
8013
  this.gridview.moveView(sourceParentLocation, from, to);
8014
+ return;
7368
8015
  }
7369
8016
  }
7370
8017
  // source group will become empty so delete the group
7371
- const targetGroup = this.doRemoveGroup(sourceGroup, {
8018
+ const targetGroup = this.movingLock(() => this.doRemoveGroup(sourceGroup, {
7372
8019
  skipActive: true,
7373
8020
  skipDispose: true,
7374
- });
8021
+ }));
7375
8022
  // after deleting the group we need to re-evaulate the ref location
7376
8023
  const updatedReferenceLocation = getGridLocation(destinationGroup.element);
7377
8024
  const location = getRelativeLocation(this.gridview.orientation, updatedReferenceLocation, destinationTarget);
7378
- this.doAddGroup(targetGroup, location);
8025
+ this.movingLock(() => this.doAddGroup(targetGroup, location));
8026
+ this.doSetGroupAndPanelActive(targetGroup);
7379
8027
  }
7380
8028
  else {
7381
- const groupItem = (_c = sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(sourceItemId)) !== null && _c !== void 0 ? _c : this.panels.find((panel) => panel.id === sourceItemId);
7382
- if (!groupItem) {
8029
+ /**
8030
+ * The group we are removing from has many panels, we need to remove the panels we are moving,
8031
+ * create a new group, add the panels to that new group and add the new group in an appropiate position
8032
+ */
8033
+ const removedPanel = this.movingLock(() => sourceGroup.model.removePanel(sourceItemId, {
8034
+ skipSetActive: false,
8035
+ skipSetActiveGroup: true,
8036
+ }));
8037
+ if (!removedPanel) {
7383
8038
  throw new Error(`No panel with id ${sourceItemId}`);
7384
8039
  }
7385
8040
  const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, destinationTarget);
7386
8041
  const group = this.createGroupAtLocation(dropLocation);
7387
- group.model.openPanel(groupItem);
8042
+ this.movingLock(() => group.model.openPanel(removedPanel, {
8043
+ skipSetGroupActive: true,
8044
+ }));
8045
+ this.doSetGroupAndPanelActive(group);
7388
8046
  }
7389
8047
  }
7390
8048
  }
7391
- moveGroup(sourceGroup, referenceGroup, target) {
7392
- if (sourceGroup) {
7393
- if (!target || target === 'center') {
7394
- const activePanel = sourceGroup.activePanel;
7395
- const panels = [...sourceGroup.panels].map((p) => sourceGroup.model.removePanel(p.id));
7396
- if ((sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.size) === 0) {
7397
- this.doRemoveGroup(sourceGroup);
7398
- }
8049
+ moveGroup(options) {
8050
+ const from = options.from.group;
8051
+ const to = options.to.group;
8052
+ const target = options.to.position;
8053
+ if (target === 'center') {
8054
+ const activePanel = from.activePanel;
8055
+ const panels = this.movingLock(() => [...from.panels].map((p) => from.model.removePanel(p.id, {
8056
+ skipSetActive: true,
8057
+ })));
8058
+ if ((from === null || from === void 0 ? void 0 : from.model.size) === 0) {
8059
+ this.doRemoveGroup(from, { skipActive: true });
8060
+ }
8061
+ this.movingLock(() => {
7399
8062
  for (const panel of panels) {
7400
- referenceGroup.model.openPanel(panel, {
7401
- skipSetPanelActive: panel !== activePanel,
8063
+ to.model.openPanel(panel, {
8064
+ skipSetActive: panel !== activePanel,
8065
+ skipSetGroupActive: true,
7402
8066
  });
7403
8067
  }
7404
- }
7405
- else {
7406
- switch (sourceGroup.api.location) {
7407
- case 'grid':
7408
- this.gridview.removeView(getGridLocation(sourceGroup.element));
7409
- break;
7410
- case 'floating': {
7411
- const selectedFloatingGroup = this._floatingGroups.find((x) => x.group === sourceGroup);
7412
- if (!selectedFloatingGroup) {
7413
- throw new Error('failed to find floating group');
7414
- }
7415
- selectedFloatingGroup.dispose();
7416
- break;
8068
+ });
8069
+ this.doSetGroupAndPanelActive(to);
8070
+ panels.forEach((panel) => {
8071
+ this._onDidMovePanel.fire({ panel });
8072
+ });
8073
+ }
8074
+ else {
8075
+ switch (from.api.location.type) {
8076
+ case 'grid':
8077
+ this.gridview.removeView(getGridLocation(from.element));
8078
+ break;
8079
+ case 'floating': {
8080
+ const selectedFloatingGroup = this._floatingGroups.find((x) => x.group === from);
8081
+ if (!selectedFloatingGroup) {
8082
+ throw new Error('failed to find floating group');
7417
8083
  }
7418
- case 'popout': {
7419
- const selectedPopoutGroup = this._popoutGroups.find((x) => x.group === sourceGroup);
7420
- if (!selectedPopoutGroup) {
7421
- throw new Error('failed to find popout group');
7422
- }
7423
- selectedPopoutGroup.dispose();
8084
+ selectedFloatingGroup.dispose();
8085
+ break;
8086
+ }
8087
+ case 'popout': {
8088
+ const selectedPopoutGroup = this._popoutGroups.find((x) => x.popoutGroup === from);
8089
+ if (!selectedPopoutGroup) {
8090
+ throw new Error('failed to find popout group');
7424
8091
  }
8092
+ selectedPopoutGroup.disposable.dispose();
7425
8093
  }
7426
- const referenceLocation = getGridLocation(referenceGroup.element);
7427
- const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
7428
- this.gridview.addView(sourceGroup, exports.Sizing.Distribute, dropLocation);
7429
8094
  }
8095
+ const referenceLocation = getGridLocation(to.element);
8096
+ const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
8097
+ this.gridview.addView(from, exports.Sizing.Distribute, dropLocation);
8098
+ from.panels.forEach((panel) => {
8099
+ this._onDidMovePanel.fire({ panel });
8100
+ });
7430
8101
  }
7431
8102
  }
7432
- doSetGroupAndPanelActive(group, skipFocus) {
7433
- var _a, _b;
8103
+ doSetGroupActive(group) {
8104
+ super.doSetGroupActive(group);
8105
+ const activePanel = this.activePanel;
8106
+ if (!this._moving &&
8107
+ activePanel !== this._onDidActivePanelChange.value) {
8108
+ this._onDidActivePanelChange.fire(activePanel);
8109
+ }
8110
+ }
8111
+ doSetGroupAndPanelActive(group) {
8112
+ super.doSetGroupActive(group);
7434
8113
  const activePanel = this.activePanel;
7435
- super.doSetGroupActive(group, skipFocus);
7436
- if (((_a = this._activeGroup) === null || _a === void 0 ? void 0 : _a.activePanel) !== activePanel) {
7437
- this._onDidActivePanelChange.fire((_b = this._activeGroup) === null || _b === void 0 ? void 0 : _b.activePanel);
8114
+ if (group &&
8115
+ this.hasMaximizedGroup() &&
8116
+ !this.isMaximizedGroup(group)) {
8117
+ this.exitMaximizedGroup();
8118
+ }
8119
+ if (!this._moving &&
8120
+ activePanel !== this._onDidActivePanelChange.value) {
8121
+ this._onDidActivePanelChange.fire(activePanel);
7438
8122
  }
7439
8123
  }
8124
+ getNextGroupId() {
8125
+ let id = this.nextGroupId.next();
8126
+ while (this._groups.has(id)) {
8127
+ id = this.nextGroupId.next();
8128
+ }
8129
+ return id;
8130
+ }
7440
8131
  createGroup(options) {
7441
8132
  if (!options) {
7442
8133
  options = {};
@@ -7453,7 +8144,7 @@ define(['exports'], (function (exports) { 'use strict';
7453
8144
  }
7454
8145
  }
7455
8146
  const view = new DockviewGroupPanel(this, id, options);
7456
- view.init({ params: {}, accessor: null }); // required to initialized .part and allow for correct disposal of group
8147
+ view.init({ params: {}, accessor: this });
7457
8148
  if (!this._groups.has(view.id)) {
7458
8149
  const disposable = new CompositeDisposable(view.model.onTabDragStart((event) => {
7459
8150
  this._onWillDragPanel.fire(event);
@@ -7461,20 +8152,48 @@ define(['exports'], (function (exports) { 'use strict';
7461
8152
  this._onWillDragGroup.fire(event);
7462
8153
  }), view.model.onMove((event) => {
7463
8154
  const { groupId, itemId, target, index } = event;
7464
- this.moveGroupOrPanel(view, groupId, itemId, target, index);
8155
+ this.moveGroupOrPanel({
8156
+ from: { groupId: groupId, panelId: itemId },
8157
+ to: {
8158
+ group: view,
8159
+ position: target,
8160
+ index,
8161
+ },
8162
+ });
7465
8163
  }), view.model.onDidDrop((event) => {
7466
- this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api, group: view }));
8164
+ this._onDidDrop.fire(event);
8165
+ }), view.model.onWillDrop((event) => {
8166
+ this._onWillDrop.fire(event);
8167
+ }), view.model.onWillShowOverlay((event) => {
8168
+ if (this.options.disableDnd) {
8169
+ event.preventDefault();
8170
+ return;
8171
+ }
8172
+ this._onWillShowOverlay.fire(event);
7467
8173
  }), view.model.onDidAddPanel((event) => {
8174
+ if (this._moving) {
8175
+ return;
8176
+ }
7468
8177
  this._onDidAddPanel.fire(event.panel);
7469
8178
  }), view.model.onDidRemovePanel((event) => {
8179
+ if (this._moving) {
8180
+ return;
8181
+ }
7470
8182
  this._onDidRemovePanel.fire(event.panel);
7471
8183
  }), view.model.onDidActivePanelChange((event) => {
7472
- this._onDidActivePanelChange.fire(event.panel);
8184
+ if (this._moving) {
8185
+ return;
8186
+ }
8187
+ if (event.panel !== this.activePanel) {
8188
+ return;
8189
+ }
8190
+ if (this._onDidActivePanelChange.value !== event.panel) {
8191
+ this._onDidActivePanelChange.fire(event.panel);
8192
+ }
7473
8193
  }));
7474
8194
  this._groups.set(view.id, { value: view, disposable });
7475
8195
  }
7476
- // TODO: must be called after the above listeners have been setup,
7477
- // not an ideal pattern
8196
+ // TODO: must be called after the above listeners have been setup, not an ideal pattern
7478
8197
  view.initialize();
7479
8198
  return view;
7480
8199
  }
@@ -7527,7 +8246,20 @@ define(['exports'], (function (exports) { 'use strict';
7527
8246
  });
7528
8247
  this._onDidLayoutfromJSON = new Emitter();
7529
8248
  this.onDidLayoutFromJSON = this._onDidLayoutfromJSON.event;
8249
+ this._onDidRemoveGroup = new Emitter();
8250
+ this.onDidRemoveGroup = this._onDidRemoveGroup.event;
8251
+ this._onDidAddGroup = new Emitter();
8252
+ this.onDidAddGroup = this._onDidAddGroup.event;
8253
+ this._onDidActiveGroupChange = new Emitter();
8254
+ this.onDidActiveGroupChange = this._onDidActiveGroupChange.event;
7530
8255
  this._options = options;
8256
+ this.addDisposables(this._onDidAddGroup, this._onDidRemoveGroup, this._onDidActiveGroupChange, this.onDidAdd((event) => {
8257
+ this._onDidAddGroup.fire(event);
8258
+ }), this.onDidRemove((event) => {
8259
+ this._onDidRemoveGroup.fire(event);
8260
+ }), this.onDidActiveChange((event) => {
8261
+ this._onDidActiveGroupChange.fire(event);
8262
+ }));
7531
8263
  if (!this.options.components) {
7532
8264
  this.options.components = {};
7533
8265
  }
@@ -7702,6 +8434,7 @@ define(['exports'], (function (exports) { 'use strict';
7702
8434
  });
7703
8435
  this.registerPanel(view);
7704
8436
  this.doAddGroup(view, relativeLocation, options.size);
8437
+ this.doSetGroupActive(view);
7705
8438
  return view;
7706
8439
  }
7707
8440
  registerPanel(panel) {
@@ -8387,10 +9120,10 @@ define(['exports'], (function (exports) { 'use strict';
8387
9120
  this._onDidChange = new Emitter();
8388
9121
  this.onDidChange = this._onDidChange.event;
8389
9122
  this.api.initialize(this);
8390
- this.addDisposables(this._onDidChange, this.api.onVisibilityChange((event) => {
8391
- const { isVisible } = event;
9123
+ this.addDisposables(this._onDidChange, this.api.onDidHiddenChange((event) => {
9124
+ const { isHidden } = event;
8392
9125
  const { accessor } = this._params;
8393
- accessor.setVisible(this, isVisible);
9126
+ accessor.setVisible(this, !isHidden);
8394
9127
  }), this.api.onActiveChange(() => {
8395
9128
  const { accessor } = this._params;
8396
9129
  accessor.setActive(this);
@@ -8456,11 +9189,13 @@ define(['exports'], (function (exports) { 'use strict';
8456
9189
  exports.DockviewApi = DockviewApi;
8457
9190
  exports.DockviewComponent = DockviewComponent;
8458
9191
  exports.DockviewCompositeDisposable = CompositeDisposable;
9192
+ exports.DockviewDidDropEvent = DockviewDidDropEvent;
8459
9193
  exports.DockviewEmitter = Emitter;
8460
9194
  exports.DockviewGroupPanel = DockviewGroupPanel;
8461
9195
  exports.DockviewGroupPanelModel = DockviewGroupPanelModel;
8462
9196
  exports.DockviewMutableDisposable = MutableDisposable;
8463
9197
  exports.DockviewPanel = DockviewPanel;
9198
+ exports.DockviewWillDropEvent = DockviewWillDropEvent;
8464
9199
  exports.DraggablePaneviewPanel = DraggablePaneviewPanel;
8465
9200
  exports.Gridview = Gridview;
8466
9201
  exports.GridviewApi = GridviewApi;
@@ -8479,6 +9214,7 @@ define(['exports'], (function (exports) { 'use strict';
8479
9214
  exports.SplitviewComponent = SplitviewComponent;
8480
9215
  exports.SplitviewPanel = SplitviewPanel;
8481
9216
  exports.Tab = Tab;
9217
+ exports.WillShowOverlayLocationEvent = WillShowOverlayLocationEvent;
8482
9218
  exports.createComponent = createComponent;
8483
9219
  exports.directionToPosition = directionToPosition;
8484
9220
  exports.getDirectionOrientation = getDirectionOrientation;