dockview-core 1.9.2 → 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 +6 -7
  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 +577 -197
  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 +226 -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 +7 -3
  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 +1261 -526
  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 +1260 -525
  134. package/dist/dockview-core.amd.noStyle.js.map +1 -1
  135. package/dist/dockview-core.cjs.js +1261 -526
  136. package/dist/dockview-core.cjs.js.map +1 -1
  137. package/dist/dockview-core.esm.js +1259 -527
  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 +1261 -526
  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 +1260 -525
  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 +6 -7
  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 +520 -162
  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 +169 -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 +7 -3
  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.2
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,9 +3576,10 @@ define(['exports'], (function (exports) { 'use strict';
3460
3576
  // noop
3461
3577
  }
3462
3578
  closePanel() {
3579
+ var _a;
3463
3580
  if (this.panel) {
3464
3581
  if (this.panel.api.renderer === 'onlyWhenVisibile') {
3465
- this._element.removeChild(this.panel.view.content.element);
3582
+ (_a = this.panel.view.content.element.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(this.panel.view.content.element);
3466
3583
  }
3467
3584
  }
3468
3585
  this.panel = undefined;
@@ -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,35 +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
- }
4219
4430
  this.contentContainer.renderPanel(panel, { asActive: true });
4220
4431
  return;
4221
4432
  }
4222
- this.doAddPanel(panel, options.index, skipSetPanelActive);
4223
- if (!skipSetPanelActive) {
4433
+ if (!skipSetActive) {
4224
4434
  this.doSetActivePanel(panel);
4225
4435
  }
4226
- if (!skipSetGroupActive) {
4227
- 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();
4228
4441
  }
4229
- this.updateContainer();
4230
4442
  }
4231
- removePanel(groupItemOrId) {
4443
+ removePanel(groupItemOrId, options = {
4444
+ skipSetActive: false,
4445
+ }) {
4232
4446
  const id = typeof groupItemOrId === 'string'
4233
4447
  ? groupItemOrId
4234
4448
  : groupItemOrId.id;
@@ -4236,7 +4450,7 @@ define(['exports'], (function (exports) { 'use strict';
4236
4450
  if (!panelToRemove) {
4237
4451
  throw new Error('invalid operation');
4238
4452
  }
4239
- return this._removePanel(panelToRemove);
4453
+ return this._removePanel(panelToRemove, options);
4240
4454
  }
4241
4455
  closeAllPanels() {
4242
4456
  if (this.panels.length > 0) {
@@ -4262,12 +4476,8 @@ define(['exports'], (function (exports) { 'use strict';
4262
4476
  updateActions(element) {
4263
4477
  this.tabsContainer.setRightActionsElement(element);
4264
4478
  }
4265
- setActive(isGroupActive, skipFocus = false, force = false) {
4266
- var _a, _b, _c, _d;
4479
+ setActive(isGroupActive, force = false) {
4267
4480
  if (!force && this.isActive === isGroupActive) {
4268
- if (!skipFocus) {
4269
- (_b = (_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.focus) === null || _b === void 0 ? void 0 : _b.call(_a);
4270
- }
4271
4481
  return;
4272
4482
  }
4273
4483
  this._isGroupActive = isGroupActive;
@@ -4278,11 +4488,6 @@ define(['exports'], (function (exports) { 'use strict';
4278
4488
  this.doSetActivePanel(this.panels[0]);
4279
4489
  }
4280
4490
  this.updateContainer();
4281
- if (isGroupActive) {
4282
- if (!skipFocus) {
4283
- (_d = (_c = this._activePanel) === null || _c === void 0 ? void 0 : _c.focus) === null || _d === void 0 ? void 0 : _d.call(_c);
4284
- }
4285
- }
4286
4491
  }
4287
4492
  layout(width, height) {
4288
4493
  var _a;
@@ -4293,17 +4498,22 @@ define(['exports'], (function (exports) { 'use strict';
4293
4498
  this._activePanel.layout(this._width, this._height);
4294
4499
  }
4295
4500
  }
4296
- _removePanel(panel) {
4501
+ _removePanel(panel, options) {
4297
4502
  const isActivePanel = this._activePanel === panel;
4298
4503
  this.doRemovePanel(panel);
4299
4504
  if (isActivePanel && this.panels.length > 0) {
4300
4505
  const nextPanel = this.mostRecentlyUsed[0];
4301
- this.openPanel(nextPanel);
4506
+ this.openPanel(nextPanel, {
4507
+ skipSetActive: options.skipSetActive,
4508
+ skipSetGroupActive: options.skipSetActiveGroup,
4509
+ });
4302
4510
  }
4303
4511
  if (this._activePanel && this.panels.length === 0) {
4304
4512
  this.doSetActivePanel(undefined);
4305
4513
  }
4306
- this.updateContainer();
4514
+ if (!options.skipSetActive) {
4515
+ this.updateContainer();
4516
+ }
4307
4517
  return panel;
4308
4518
  }
4309
4519
  doRemovePanel(panel) {
@@ -4318,13 +4528,13 @@ define(['exports'], (function (exports) { 'use strict';
4318
4528
  }
4319
4529
  this._onDidRemovePanel.fire({ panel });
4320
4530
  }
4321
- doAddPanel(panel, index = this.panels.length, skipSetActive = false) {
4531
+ doAddPanel(panel, index = this.panels.length, options = { skipSetActive: false }) {
4322
4532
  const existingPanel = this._panels.indexOf(panel);
4323
4533
  const hasExistingPanel = existingPanel > -1;
4324
4534
  this.tabsContainer.show();
4325
4535
  this.contentContainer.show();
4326
4536
  this.tabsContainer.openPanel(panel, index);
4327
- if (!skipSetActive) {
4537
+ if (!options.skipSetActive) {
4328
4538
  this.contentContainer.openPanel(panel);
4329
4539
  }
4330
4540
  if (hasExistingPanel) {
@@ -4336,12 +4546,17 @@ define(['exports'], (function (exports) { 'use strict';
4336
4546
  this._onDidAddPanel.fire({ panel });
4337
4547
  }
4338
4548
  doSetActivePanel(panel) {
4549
+ if (this._activePanel === panel) {
4550
+ return;
4551
+ }
4339
4552
  this._activePanel = panel;
4340
4553
  if (panel) {
4341
4554
  this.tabsContainer.setActivePanel(panel);
4342
4555
  panel.layout(this._width, this._height);
4343
4556
  this.updateMru(panel);
4344
- this._onDidActivePanelChange.fire({ panel });
4557
+ this._onDidActivePanelChange.fire({
4558
+ panel,
4559
+ });
4345
4560
  }
4346
4561
  }
4347
4562
  updateMru(panel) {
@@ -4353,11 +4568,11 @@ define(['exports'], (function (exports) { 'use strict';
4353
4568
  updateContainer() {
4354
4569
  var _a, _b;
4355
4570
  toggleClass(this.container, 'empty', this.isEmpty);
4356
- this.panels.forEach((panel) => panel.updateParentGroup(this.groupPanel, this.isActive));
4571
+ this.panels.forEach((panel) => panel.runEvents());
4357
4572
  if (this.isEmpty && !this.watermark) {
4358
4573
  const watermark = this.accessor.createWatermarkComponent();
4359
4574
  watermark.init({
4360
- containerApi: new DockviewApi(this.accessor),
4575
+ containerApi: this._api,
4361
4576
  group: this.groupPanel,
4362
4577
  });
4363
4578
  this.watermark = watermark;
@@ -4390,10 +4605,32 @@ define(['exports'], (function (exports) { 'use strict';
4390
4605
  }
4391
4606
  return false;
4392
4607
  }
4393
- handleDropEvent(event, position, index) {
4608
+ handleDropEvent(type, event, position, index) {
4394
4609
  if (this.locked === 'no-drop-target') {
4395
4610
  return;
4396
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
+ }
4397
4634
  const data = getPanelData();
4398
4635
  if (data && data.viewId === this.accessor.id) {
4399
4636
  if (data.panelId === null) {
@@ -4426,12 +4663,14 @@ define(['exports'], (function (exports) { 'use strict';
4426
4663
  });
4427
4664
  }
4428
4665
  else {
4429
- this._onDidDrop.fire({
4666
+ this._onDidDrop.fire(new DockviewDidDropEvent({
4430
4667
  nativeEvent: event,
4431
4668
  position,
4432
- index,
4669
+ panel,
4433
4670
  getData: () => getPanelData(),
4434
- });
4671
+ group: this.groupPanel,
4672
+ api: this._api,
4673
+ }));
4435
4674
  }
4436
4675
  }
4437
4676
  dispose() {
@@ -4439,6 +4678,7 @@ define(['exports'], (function (exports) { 'use strict';
4439
4678
  super.dispose();
4440
4679
  (_a = this.watermark) === null || _a === void 0 ? void 0 : _a.element.remove();
4441
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;
4442
4682
  for (const panel of this.panels) {
4443
4683
  panel.dispose();
4444
4684
  }
@@ -4460,15 +4700,7 @@ define(['exports'], (function (exports) { 'use strict';
4460
4700
  constructor(parentElement, disableResizing = false) {
4461
4701
  super();
4462
4702
  this._disableResizing = disableResizing;
4463
- if (parentElement) {
4464
- this._element = parentElement;
4465
- }
4466
- else {
4467
- this._element = document.createElement('div');
4468
- this._element.style.height = '100%';
4469
- this._element.style.width = '100%';
4470
- this._element.className = 'dv-resizable-container';
4471
- }
4703
+ this._element = parentElement;
4472
4704
  this.addDisposables(watchElementResize(this._element, (entry) => {
4473
4705
  if (this.isDisposed) {
4474
4706
  /**
@@ -4556,25 +4788,38 @@ define(['exports'], (function (exports) { 'use strict';
4556
4788
  get activeGroup() {
4557
4789
  return this._activeGroup;
4558
4790
  }
4791
+ get locked() {
4792
+ return this.gridview.locked;
4793
+ }
4794
+ set locked(value) {
4795
+ this.gridview.locked = value;
4796
+ }
4559
4797
  constructor(options) {
4560
- super(options.parentElement, options.disableAutoResizing);
4798
+ super(document.createElement('div'), options.disableAutoResizing);
4561
4799
  this._id = nextLayoutId$1.next();
4562
4800
  this._groups = new Map();
4563
4801
  this._onDidLayoutChange = new Emitter();
4564
4802
  this.onDidLayoutChange = this._onDidLayoutChange.event;
4565
- this._onDidRemoveGroup = new Emitter();
4566
- this.onDidRemoveGroup = this._onDidRemoveGroup.event;
4567
- this._onDidAddGroup = new Emitter();
4568
- this.onDidAddGroup = this._onDidAddGroup.event;
4569
- this._onDidActiveGroupChange = new Emitter();
4570
- 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;
4571
4809
  this._bufferOnDidLayoutChange = new TickDelayedEvent();
4810
+ this.element.style.height = '100%';
4811
+ this.element.style.width = '100%';
4812
+ options.parentElement.appendChild(this.element);
4572
4813
  this.gridview = new Gridview(!!options.proportionalLayout, options.styles, options.orientation);
4814
+ this.gridview.locked = !!options.locked;
4573
4815
  this.element.appendChild(this.gridview.element);
4574
4816
  this.layout(0, 0, true); // set some elements height/widths
4575
- 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(() => {
4576
4821
  this._bufferOnDidLayoutChange.fire();
4577
- }), exports.DockviewEvent.any(this.onDidAddGroup, this.onDidRemoveGroup, this.onDidActiveGroupChange)(() => {
4822
+ }), exports.DockviewEvent.any(this.onDidAdd, this.onDidRemove, this.onDidActiveChange)(() => {
4578
4823
  this._bufferOnDidLayoutChange.fire();
4579
4824
  }), this._bufferOnDidLayoutChange.onEvent(() => {
4580
4825
  this._onDidLayoutChange.fire();
@@ -4589,6 +4834,7 @@ define(['exports'], (function (exports) { 'use strict';
4589
4834
  }
4590
4835
  maximizeGroup(panel) {
4591
4836
  this.gridview.maximizeView(panel);
4837
+ this.doSetGroupActive(panel);
4592
4838
  }
4593
4839
  isMaximizedGroup(panel) {
4594
4840
  return this.gridview.maximizedView() === panel;
@@ -4599,13 +4845,12 @@ define(['exports'], (function (exports) { 'use strict';
4599
4845
  hasMaximizedGroup() {
4600
4846
  return this.gridview.hasMaximizedView();
4601
4847
  }
4602
- get onDidMaxmizedGroupChange() {
4603
- return this.gridview.onDidMaxmizedNodeChange;
4848
+ get onDidMaximizedGroupChange() {
4849
+ return this.gridview.onDidMaximizedNodeChange;
4604
4850
  }
4605
4851
  doAddGroup(group, location = [0], size) {
4606
4852
  this.gridview.addView(group, size !== null && size !== void 0 ? size : exports.Sizing.Distribute, location);
4607
- this._onDidAddGroup.fire(group);
4608
- this.doSetGroupActive(group);
4853
+ this._onDidAdd.fire(group);
4609
4854
  }
4610
4855
  doRemoveGroup(group, options) {
4611
4856
  if (!this._groups.has(group.id)) {
@@ -4617,8 +4862,8 @@ define(['exports'], (function (exports) { 'use strict';
4617
4862
  item.disposable.dispose();
4618
4863
  item.value.dispose();
4619
4864
  this._groups.delete(group.id);
4865
+ this._onDidRemove.fire(group);
4620
4866
  }
4621
- this._onDidRemoveGroup.fire(group);
4622
4867
  if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
4623
4868
  const groups = Array.from(this._groups.values());
4624
4869
  this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
@@ -4629,25 +4874,18 @@ define(['exports'], (function (exports) { 'use strict';
4629
4874
  var _a;
4630
4875
  return (_a = this._groups.get(id)) === null || _a === void 0 ? void 0 : _a.value;
4631
4876
  }
4632
- doSetGroupActive(group, skipFocus) {
4633
- var _a, _b, _c;
4877
+ doSetGroupActive(group) {
4634
4878
  if (this._activeGroup === group) {
4635
4879
  return;
4636
4880
  }
4637
4881
  if (this._activeGroup) {
4638
4882
  this._activeGroup.setActive(false);
4639
- if (!skipFocus) {
4640
- (_b = (_a = this._activeGroup).focus) === null || _b === void 0 ? void 0 : _b.call(_a);
4641
- }
4642
4883
  }
4643
4884
  if (group) {
4644
4885
  group.setActive(true);
4645
- if (!skipFocus) {
4646
- (_c = group.focus) === null || _c === void 0 ? void 0 : _c.call(group);
4647
- }
4648
4886
  }
4649
4887
  this._activeGroup = group;
4650
- this._onDidActiveGroupChange.fire(group);
4888
+ this._onDidActiveChange.fire(group);
4651
4889
  }
4652
4890
  removeGroup(group) {
4653
4891
  this.doRemoveGroup(group);
@@ -4692,9 +4930,9 @@ define(['exports'], (function (exports) { 'use strict';
4692
4930
  this.gridview.layout(width, height);
4693
4931
  }
4694
4932
  dispose() {
4695
- this._onDidActiveGroupChange.dispose();
4696
- this._onDidAddGroup.dispose();
4697
- this._onDidRemoveGroup.dispose();
4933
+ this._onDidActiveChange.dispose();
4934
+ this._onDidAdd.dispose();
4935
+ this._onDidRemove.dispose();
4698
4936
  this._onDidLayoutChange.dispose();
4699
4937
  for (const group of this.groups) {
4700
4938
  group.dispose();
@@ -4704,11 +4942,15 @@ define(['exports'], (function (exports) { 'use strict';
4704
4942
  }
4705
4943
  }
4706
4944
 
4945
+ class WillFocusEvent extends DockviewEvent {
4946
+ constructor() {
4947
+ super();
4948
+ }
4949
+ }
4707
4950
  /**
4708
4951
  * A core api implementation that should be used across all panel-like objects
4709
4952
  */
4710
4953
  class PanelApiImpl extends CompositeDisposable {
4711
- //
4712
4954
  get isFocused() {
4713
4955
  return this._isFocused;
4714
4956
  }
@@ -4718,6 +4960,9 @@ define(['exports'], (function (exports) { 'use strict';
4718
4960
  get isVisible() {
4719
4961
  return this._isVisible;
4720
4962
  }
4963
+ get isHidden() {
4964
+ return this._isHidden;
4965
+ }
4721
4966
  get width() {
4722
4967
  return this._width;
4723
4968
  }
@@ -4730,38 +4975,26 @@ define(['exports'], (function (exports) { 'use strict';
4730
4975
  this._isFocused = false;
4731
4976
  this._isActive = false;
4732
4977
  this._isVisible = true;
4978
+ this._isHidden = false;
4733
4979
  this._width = 0;
4734
4980
  this._height = 0;
4735
4981
  this.panelUpdatesDisposable = new MutableDisposable();
4736
- this._onDidDimensionChange = new Emitter({
4737
- replay: true,
4738
- });
4982
+ this._onDidDimensionChange = new Emitter();
4739
4983
  this.onDidDimensionsChange = this._onDidDimensionChange.event;
4740
- //
4741
- this._onDidChangeFocus = new Emitter({
4742
- replay: true,
4743
- });
4984
+ this._onDidChangeFocus = new Emitter();
4744
4985
  this.onDidFocusChange = this._onDidChangeFocus.event;
4745
4986
  //
4746
- this._onFocusEvent = new Emitter();
4747
- this.onFocusEvent = this._onFocusEvent.event;
4987
+ this._onWillFocus = new Emitter();
4988
+ this.onWillFocus = this._onWillFocus.event;
4748
4989
  //
4749
- this._onDidVisibilityChange = new Emitter({
4750
- replay: true,
4751
- });
4990
+ this._onDidVisibilityChange = new Emitter();
4752
4991
  this.onDidVisibilityChange = this._onDidVisibilityChange.event;
4753
- //
4754
- this._onVisibilityChange = new Emitter();
4755
- this.onVisibilityChange = this._onVisibilityChange.event;
4756
- //
4757
- this._onDidActiveChange = new Emitter({
4758
- replay: true,
4759
- });
4992
+ this._onDidHiddenChange = new Emitter();
4993
+ this.onDidHiddenChange = this._onDidHiddenChange.event;
4994
+ this._onDidActiveChange = new Emitter();
4760
4995
  this.onDidActiveChange = this._onDidActiveChange.event;
4761
- //
4762
4996
  this._onActiveChange = new Emitter();
4763
4997
  this.onActiveChange = this._onActiveChange.event;
4764
- //
4765
4998
  this._onUpdateParameters = new Emitter();
4766
4999
  this.onUpdateParameters = this._onUpdateParameters.event;
4767
5000
  this.addDisposables(this.onDidFocusChange((event) => {
@@ -4770,10 +5003,12 @@ define(['exports'], (function (exports) { 'use strict';
4770
5003
  this._isActive = event.isActive;
4771
5004
  }), this.onDidVisibilityChange((event) => {
4772
5005
  this._isVisible = event.isVisible;
5006
+ }), this.onDidHiddenChange((event) => {
5007
+ this._isHidden = event.isHidden;
4773
5008
  }), this.onDidDimensionsChange((event) => {
4774
5009
  this._width = event.width;
4775
5010
  this._height = event.height;
4776
- }), 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);
4777
5012
  }
4778
5013
  initialize(panel) {
4779
5014
  this.panelUpdatesDisposable.value = this._onUpdateParameters.event((parameters) => {
@@ -4782,8 +5017,8 @@ define(['exports'], (function (exports) { 'use strict';
4782
5017
  });
4783
5018
  });
4784
5019
  }
4785
- setVisible(isVisible) {
4786
- this._onVisibilityChange.fire({ isVisible });
5020
+ setHidden(isHidden) {
5021
+ this._onDidHiddenChange.fire({ isHidden });
4787
5022
  }
4788
5023
  setActive() {
4789
5024
  this._onActiveChange.fire();
@@ -4791,9 +5026,6 @@ define(['exports'], (function (exports) { 'use strict';
4791
5026
  updateParameters(parameters) {
4792
5027
  this._onUpdateParameters.fire(parameters);
4793
5028
  }
4794
- dispose() {
4795
- super.dispose();
4796
- }
4797
5029
  }
4798
5030
 
4799
5031
  class SplitviewPanelApiImpl extends PanelApiImpl {
@@ -4881,7 +5113,12 @@ define(['exports'], (function (exports) { 'use strict';
4881
5113
  }), focusTracker);
4882
5114
  }
4883
5115
  focus() {
4884
- 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();
4885
5122
  }
4886
5123
  layout(width, height) {
4887
5124
  this._width = width;
@@ -5210,9 +5447,7 @@ define(['exports'], (function (exports) { 'use strict';
5210
5447
  super(id);
5211
5448
  this._onDidConstraintsChangeInternal = new Emitter();
5212
5449
  this.onDidConstraintsChangeInternal = this._onDidConstraintsChangeInternal.event;
5213
- this._onDidConstraintsChange = new Emitter({
5214
- replay: true,
5215
- });
5450
+ this._onDidConstraintsChange = new Emitter();
5216
5451
  this.onDidConstraintsChange = this._onDidConstraintsChange.event;
5217
5452
  this._onDidSizeChange = new Emitter();
5218
5453
  this.onDidSizeChange = this._onDidSizeChange.event;
@@ -5305,13 +5540,13 @@ define(['exports'], (function (exports) { 'use strict';
5305
5540
  this._maximumHeight = options.maximumHeight;
5306
5541
  }
5307
5542
  this.api.initialize(this); // TODO: required to by-pass 'super before this' requirement
5308
- this.addDisposables(this.api.onVisibilityChange((event) => {
5309
- const { isVisible } = event;
5543
+ this.addDisposables(this.api.onDidHiddenChange((event) => {
5544
+ const { isHidden } = event;
5310
5545
  const { accessor } = this._params;
5311
- accessor.setVisible(this, isVisible);
5546
+ accessor.setVisible(this, !isHidden);
5312
5547
  }), this.api.onActiveChange(() => {
5313
5548
  const { accessor } = this._params;
5314
- accessor.setActive(this);
5549
+ accessor.doSetGroupActive(this);
5315
5550
  }), this.api.onDidConstraintsChangeInternal((event) => {
5316
5551
  if (typeof event.minimumWidth === 'number' ||
5317
5552
  typeof event.minimumWidth === 'function') {
@@ -5394,6 +5629,17 @@ define(['exports'], (function (exports) { 'use strict';
5394
5629
  this.onDidLocationChange = this._onDidLocationChange.event;
5395
5630
  this.addDisposables(this._onDidLocationChange);
5396
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
+ }
5397
5643
  moveTo(options) {
5398
5644
  var _a, _b, _c;
5399
5645
  if (!this._group) {
@@ -5401,14 +5647,23 @@ define(['exports'], (function (exports) { 'use strict';
5401
5647
  }
5402
5648
  const group = (_a = options.group) !== null && _a !== void 0 ? _a : this.accessor.addGroup({
5403
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
+ },
5404
5660
  });
5405
- this.accessor.moveGroupOrPanel(group, this._group.id, undefined, options.group ? (_c = options.position) !== null && _c !== void 0 ? _c : 'center' : 'center');
5406
5661
  }
5407
5662
  maximize() {
5408
5663
  if (!this._group) {
5409
5664
  throw new Error(NOT_INITIALIZED_MESSAGE);
5410
5665
  }
5411
- if (this.location !== 'grid') {
5666
+ if (this.location.type !== 'grid') {
5412
5667
  // only grid groups can be maximized
5413
5668
  return;
5414
5669
  }
@@ -5465,6 +5720,12 @@ define(['exports'], (function (exports) { 'use strict';
5465
5720
  this.api.initialize(this); // cannot use 'this' after after 'super' call
5466
5721
  this._model = new DockviewGroupPanelModel(this.element, accessor, id, options, this);
5467
5722
  }
5723
+ focus() {
5724
+ if (!this.api.isActive) {
5725
+ this.api.setActive();
5726
+ }
5727
+ super.focus();
5728
+ }
5468
5729
  initialize() {
5469
5730
  this._model.initialize();
5470
5731
  }
@@ -5510,6 +5771,9 @@ define(['exports'], (function (exports) { 'use strict';
5510
5771
  }
5511
5772
 
5512
5773
  class DockviewPanelApiImpl extends GridviewPanelApiImpl {
5774
+ get location() {
5775
+ return this.group.api.location;
5776
+ }
5513
5777
  get title() {
5514
5778
  return this.panel.title;
5515
5779
  }
@@ -5521,15 +5785,34 @@ define(['exports'], (function (exports) { 'use strict';
5521
5785
  }
5522
5786
  set group(value) {
5523
5787
  const isOldGroupActive = this.isGroupActive;
5524
- this._group = value;
5525
- this._onDidGroupChange.fire();
5526
- if (this._group) {
5527
- this.disposable.value = this._group.api.onDidActiveChange(() => {
5528
- 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,
5529
5815
  });
5530
- if (this.isGroupActive !== isOldGroupActive) {
5531
- this._onDidActiveGroupChange.fire();
5532
- }
5533
5816
  }
5534
5817
  }
5535
5818
  get group() {
@@ -5547,14 +5830,26 @@ define(['exports'], (function (exports) { 'use strict';
5547
5830
  this.onDidGroupChange = this._onDidGroupChange.event;
5548
5831
  this._onDidRendererChange = new Emitter();
5549
5832
  this.onDidRendererChange = this._onDidRendererChange.event;
5550
- this.disposable = new MutableDisposable();
5833
+ this._onDidLocationChange = new Emitter();
5834
+ this.onDidLocationChange = this._onDidLocationChange.event;
5835
+ this.groupEventsDisposable = new MutableDisposable();
5551
5836
  this.initialize(panel);
5552
5837
  this._group = group;
5553
- 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();
5554
5842
  }
5555
5843
  moveTo(options) {
5556
5844
  var _a;
5557
- 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
+ });
5558
5853
  }
5559
5854
  setTitle(title) {
5560
5855
  this.panel.setTitle(title);
@@ -5615,7 +5910,14 @@ define(['exports'], (function (exports) { 'use strict';
5615
5910
  this.setTitle(params.title);
5616
5911
  }
5617
5912
  focus() {
5618
- 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
+ }
5619
5921
  }
5620
5922
  toJSON() {
5621
5923
  return {
@@ -5672,20 +5974,40 @@ define(['exports'], (function (exports) { 'use strict';
5672
5974
  },
5673
5975
  });
5674
5976
  }
5675
- updateParentGroup(group, isGroupActive) {
5977
+ updateParentGroup(group, options) {
5676
5978
  this._group = group;
5677
- this.api.group = group;
5979
+ this.api.group = this._group;
5678
5980
  const isPanelVisible = this._group.model.isPanelActive(this);
5679
- this.api._onDidActiveChange.fire({
5680
- isActive: isGroupActive && isPanelVisible,
5681
- });
5682
- this.api._onDidVisibilityChange.fire({
5683
- isVisible: isPanelVisible,
5684
- });
5685
- 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
+ }
5686
6008
  }
5687
6009
  layout(width, height) {
5688
- // 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?
5689
6011
  this.api._onDidDimensionChange.fire({
5690
6012
  width,
5691
6013
  height: height,
@@ -5807,8 +6129,6 @@ define(['exports'], (function (exports) { 'use strict';
5807
6129
  this.id = id;
5808
6130
  this.contentComponent = contentComponent;
5809
6131
  this.tabComponent = tabComponent;
5810
- this._group = null;
5811
- this._isPanelVisible = null;
5812
6132
  this._content = this.createContentComponent(this.id, contentComponent);
5813
6133
  this._tab = this.createTabComponent(this.id, tabComponent);
5814
6134
  }
@@ -5816,25 +6136,8 @@ define(['exports'], (function (exports) { 'use strict';
5816
6136
  this.content.init(Object.assign(Object.assign({}, params), { tab: this.tab }));
5817
6137
  this.tab.init(params);
5818
6138
  }
5819
- updateParentGroup(group, isPanelVisible) {
5820
- if (group !== this._group) {
5821
- this._group = group;
5822
- if (this._content.onGroupChange) {
5823
- this._content.onGroupChange(group);
5824
- }
5825
- if (this._tab.onGroupChange) {
5826
- this._tab.onGroupChange(group);
5827
- }
5828
- }
5829
- if (isPanelVisible !== this._isPanelVisible) {
5830
- this._isPanelVisible = isPanelVisible;
5831
- if (this._content.onPanelVisibleChange) {
5832
- this._content.onPanelVisibleChange(isPanelVisible);
5833
- }
5834
- if (this._tab.onPanelVisibleChange) {
5835
- this._tab.onPanelVisibleChange(isPanelVisible);
5836
- }
5837
- }
6139
+ updateParentGroup(_group, _isPanelVisible) {
6140
+ // noop
5838
6141
  }
5839
6142
  layout(width, height) {
5840
6143
  var _a, _b;
@@ -6267,117 +6570,6 @@ define(['exports'], (function (exports) { 'use strict';
6267
6570
  }
6268
6571
  }
6269
6572
 
6270
- class PopoutWindow extends CompositeDisposable {
6271
- constructor(id, className, options) {
6272
- super();
6273
- this.id = id;
6274
- this.className = className;
6275
- this.options = options;
6276
- this._onDidClose = new Emitter();
6277
- this.onDidClose = this._onDidClose.event;
6278
- this._window = null;
6279
- this.addDisposables(this._onDidClose, {
6280
- dispose: () => {
6281
- this.close();
6282
- },
6283
- });
6284
- }
6285
- dimensions() {
6286
- if (!this._window) {
6287
- return null;
6288
- }
6289
- const left = this._window.value.screenX;
6290
- const top = this._window.value.screenY;
6291
- const width = this._window.value.innerWidth;
6292
- const height = this._window.value.innerHeight;
6293
- return { top, left, width, height };
6294
- }
6295
- close() {
6296
- if (this._window) {
6297
- this._window.disposable.dispose();
6298
- this._window.value.close();
6299
- this._window = null;
6300
- }
6301
- }
6302
- open(content) {
6303
- if (this._window) {
6304
- throw new Error('instance of popout window is already open');
6305
- }
6306
- const url = `${this.options.url}`;
6307
- const features = Object.entries({
6308
- top: this.options.top,
6309
- left: this.options.left,
6310
- width: this.options.width,
6311
- height: this.options.height,
6312
- })
6313
- .map(([key, value]) => `${key}=${value}`)
6314
- .join(',');
6315
- // https://developer.mozilla.org/en-US/docs/Web/API/Window/open
6316
- const externalWindow = window.open(url, this.id, features);
6317
- if (!externalWindow) {
6318
- return;
6319
- }
6320
- const disposable = new CompositeDisposable();
6321
- this._window = { value: externalWindow, disposable };
6322
- const cleanUp = () => {
6323
- this._onDidClose.fire();
6324
- this._window = null;
6325
- };
6326
- // prevent any default content from loading
6327
- // externalWindow.document.body.replaceWith(document.createElement('div'));
6328
- disposable.addDisposables(addDisposableWindowListener(window, 'beforeunload', () => {
6329
- cleanUp();
6330
- this.close();
6331
- }));
6332
- externalWindow.addEventListener('load', () => {
6333
- const externalDocument = externalWindow.document;
6334
- externalDocument.title = document.title;
6335
- const div = document.createElement('div');
6336
- div.classList.add('dv-popout-window');
6337
- div.style.position = 'absolute';
6338
- div.style.width = '100%';
6339
- div.style.height = '100%';
6340
- div.style.top = '0px';
6341
- div.style.left = '0px';
6342
- div.classList.add(this.className);
6343
- div.appendChild(content);
6344
- externalDocument.body.replaceChildren(div);
6345
- externalDocument.body.classList.add(this.className);
6346
- addStyles(externalDocument, window.document.styleSheets);
6347
- externalWindow.addEventListener('beforeunload', () => {
6348
- // TODO: indicate external window is closing
6349
- cleanUp();
6350
- });
6351
- });
6352
- }
6353
- }
6354
-
6355
- class DockviewPopoutGroupPanel extends CompositeDisposable {
6356
- constructor(id, group, options) {
6357
- var _a;
6358
- super();
6359
- this.id = id;
6360
- this.group = group;
6361
- this.options = options;
6362
- this.window = new PopoutWindow(id, (_a = options.className) !== null && _a !== void 0 ? _a : '', {
6363
- url: this.options.popoutUrl,
6364
- left: this.options.box.left,
6365
- top: this.options.box.top,
6366
- width: this.options.box.width,
6367
- height: this.options.box.height,
6368
- });
6369
- group.model.location = 'popout';
6370
- this.addDisposables(this.window, {
6371
- dispose: () => {
6372
- group.model.location = 'grid';
6373
- },
6374
- }, this.window.onDidClose(() => {
6375
- this.dispose();
6376
- }));
6377
- this.window.open(group.element);
6378
- }
6379
- }
6380
-
6381
6573
  const DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE = 100;
6382
6574
  const DEFAULT_FLOATING_GROUP_POSITION = { left: 100, top: 100 };
6383
6575
 
@@ -6391,11 +6583,13 @@ define(['exports'], (function (exports) { 'use strict';
6391
6583
  super();
6392
6584
  this.element = element;
6393
6585
  this.map = {};
6586
+ this._disposed = false;
6394
6587
  this.addDisposables(Disposable.from(() => {
6395
6588
  for (const value of Object.values(this.map)) {
6396
6589
  value.disposable.dispose();
6397
6590
  value.destroy.dispose();
6398
6591
  }
6592
+ this._disposed = true;
6399
6593
  }));
6400
6594
  }
6401
6595
  detatch(panel) {
@@ -6435,7 +6629,7 @@ define(['exports'], (function (exports) { 'use strict';
6435
6629
  focusContainer.style.top = `${box.top - box2.top}px`;
6436
6630
  focusContainer.style.width = `${box.width}px`;
6437
6631
  focusContainer.style.height = `${box.height}px`;
6438
- toggleClass(focusContainer, 'dv-render-overlay-float', panel.group.api.location === 'floating');
6632
+ toggleClass(focusContainer, 'dv-render-overlay-float', panel.group.api.location.type === 'floating');
6439
6633
  };
6440
6634
  const visibilityChanged = () => {
6441
6635
  if (panel.api.isVisible) {
@@ -6481,8 +6675,11 @@ define(['exports'], (function (exports) { 'use strict';
6481
6675
  resize();
6482
6676
  }));
6483
6677
  this.map[panel.api.id].destroy = Disposable.from(() => {
6484
- focusContainer.removeChild(panel.view.content.element);
6485
- 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);
6486
6683
  });
6487
6684
  queueMicrotask(() => {
6488
6685
  if (this.isDisposed) {
@@ -6503,11 +6700,187 @@ define(['exports'], (function (exports) { 'use strict';
6503
6700
  }
6504
6701
  }
6505
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
+
6506
6865
  const DEFAULT_ROOT_OVERLAY_MODEL = {
6507
6866
  activationSize: { type: 'pixels', value: 10 },
6508
6867
  size: { type: 'pixels', value: 20 },
6509
6868
  };
6510
- 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) {
6511
6884
  function toClassList(element) {
6512
6885
  const list = [];
6513
6886
  for (let i = 0; i < element.classList.length; i++) {
@@ -6558,6 +6931,7 @@ define(['exports'], (function (exports) { 'use strict';
6558
6931
  styles: options.styles,
6559
6932
  parentElement: options.parentElement,
6560
6933
  disableAutoResizing: options.disableAutoResizing,
6934
+ locked: options.locked,
6561
6935
  });
6562
6936
  this.nextGroupId = sequentialNumberGenerator();
6563
6937
  this._deserializer = new DefaultDockviewDeserialzier(this);
@@ -6568,6 +6942,10 @@ define(['exports'], (function (exports) { 'use strict';
6568
6942
  this.onWillDragGroup = this._onWillDragGroup.event;
6569
6943
  this._onDidDrop = new Emitter();
6570
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;
6571
6949
  this._onDidRemovePanel = new Emitter();
6572
6950
  this.onDidRemovePanel = this._onDidRemovePanel.event;
6573
6951
  this._onDidAddPanel = new Emitter();
@@ -6576,15 +6954,36 @@ define(['exports'], (function (exports) { 'use strict';
6576
6954
  this.onDidLayoutFromJSON = this._onDidLayoutFromJSON.event;
6577
6955
  this._onDidActivePanelChange = new Emitter();
6578
6956
  this.onDidActivePanelChange = this._onDidActivePanelChange.event;
6957
+ this._onDidMovePanel = new Emitter();
6579
6958
  this._floatingGroups = [];
6580
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;
6581
6968
  const gready = document.createElement('div');
6582
6969
  gready.className = 'dv-overlay-render-container';
6583
6970
  this.gridview.element.appendChild(gready);
6584
6971
  this.overlayRenderContainer = new OverlayRenderContainer(gready);
6585
6972
  toggleClass(this.gridview.element, 'dv-dockview', true);
6586
6973
  toggleClass(this.element, 'dv-debug', !!options.debug);
6587
- 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)(() => {
6588
6987
  this.updateWatermark();
6589
6988
  }), exports.DockviewEvent.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidActivePanelChange)(() => {
6590
6989
  this._bufferOnDidLayoutChange.fire();
@@ -6595,7 +6994,7 @@ define(['exports'], (function (exports) { 'use strict';
6595
6994
  }
6596
6995
  // iterate over a copy of the array since .dispose() mutates the original array
6597
6996
  for (const group of [...this._popoutGroups]) {
6598
- group.dispose();
6997
+ group.disposable.dispose();
6599
6998
  }
6600
6999
  }));
6601
7000
  this._options = options;
@@ -6641,7 +7040,7 @@ define(['exports'], (function (exports) { 'use strict';
6641
7040
  return this.options.showDndOverlay({
6642
7041
  nativeEvent: event,
6643
7042
  position: position,
6644
- target: exports.DockviewDropTargets.Edge,
7043
+ target: 'edge',
6645
7044
  getData: getPanelData,
6646
7045
  });
6647
7046
  }
@@ -6652,86 +7051,249 @@ define(['exports'], (function (exports) { 'use strict';
6652
7051
  });
6653
7052
  this.addDisposables(this._rootDropTarget.onDrop((event) => {
6654
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
+ }
6655
7067
  const data = getPanelData();
6656
7068
  if (data) {
6657
- 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
+ });
6658
7079
  }
6659
7080
  else {
6660
- 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
+ }));
6661
7089
  }
6662
7090
  }), this._rootDropTarget);
6663
7091
  this._api = new DockviewApi(this);
6664
7092
  this.updateWatermark();
6665
7093
  }
6666
- addPopoutGroup(item, options) {
6667
- var _a;
6668
- let group;
6669
- let box = options === null || options === void 0 ? void 0 : options.position;
6670
- if (item instanceof DockviewPanel) {
6671
- group = this.createGroup();
6672
- this.removePanel(item, {
6673
- removeEmptyGroup: true,
6674
- skipDispose: true,
6675
- });
6676
- group.model.openPanel(item);
6677
- if (!box) {
6678
- 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;
6679
7138
  }
6680
- }
6681
- else {
6682
- group = item;
6683
- if (!box) {
6684
- box = group.element.getBoundingClientRect();
7139
+ if (popoutContainer === null) {
7140
+ popoutWindowDisposable.dispose();
7141
+ return;
6685
7142
  }
6686
- const skip = typeof (options === null || options === void 0 ? void 0 : options.skipRemoveGroup) === 'boolean' &&
6687
- options.skipRemoveGroup;
6688
- if (!skip) {
6689
- this.doRemoveGroup(item, { skipDispose: true });
6690
- }
6691
- }
6692
- const theme = getTheme(this.gridview.element);
6693
- const popoutWindow = new DockviewPopoutGroupPanel(`${this.id}-${group.id}`, // globally unique within dockview
6694
- group, {
6695
- className: theme !== null && theme !== void 0 ? theme : '',
6696
- popoutUrl: (_a = options === null || options === void 0 ? void 0 : options.popoutUrl) !== null && _a !== void 0 ? _a : '/popout.html',
6697
- box: {
6698
- left: window.screenX + box.left,
6699
- top: window.screenY + box.top,
6700
- width: box.width,
6701
- height: box.height,
6702
- },
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);
6703
7249
  });
6704
- popoutWindow.addDisposables({
6705
- dispose: () => {
6706
- remove(this._popoutGroups, popoutWindow);
6707
- this.updateWatermark();
6708
- },
6709
- }, popoutWindow.window.onDidClose(() => {
6710
- this.doAddGroup(group, [0]);
6711
- }));
6712
- this._popoutGroups.push(popoutWindow);
6713
- this.updateWatermark();
6714
7250
  }
6715
7251
  addFloatingGroup(item, coord, options) {
6716
- var _a, _b, _c, _d, _e, _f;
7252
+ var _a, _b, _c, _d, _e, _f, _g;
6717
7253
  let group;
6718
7254
  if (item instanceof DockviewPanel) {
6719
7255
  group = this.createGroup();
6720
- this.removePanel(item, {
7256
+ this._onDidAddGroup.fire(group);
7257
+ this.movingLock(() => this.removePanel(item, {
6721
7258
  removeEmptyGroup: true,
6722
7259
  skipDispose: true,
6723
- });
6724
- group.model.openPanel(item);
7260
+ skipSetActiveGroup: true,
7261
+ }));
7262
+ group.model.openPanel(item, { skipSetGroupActive: true });
6725
7263
  }
6726
7264
  else {
6727
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;
6728
7270
  const skip = typeof (options === null || options === void 0 ? void 0 : options.skipRemoveGroup) === 'boolean' &&
6729
7271
  options.skipRemoveGroup;
6730
7272
  if (!skip) {
6731
- 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
+ }
6732
7294
  }
6733
7295
  }
6734
- group.model.location = 'floating';
7296
+ group.model.location = { type: 'floating' };
6735
7297
  const overlayLeft = typeof (coord === null || coord === void 0 ? void 0 : coord.x) === 'number'
6736
7298
  ? Math.max(coord.x, 0)
6737
7299
  : DEFAULT_FLOATING_GROUP_POSITION.left;
@@ -6741,16 +7303,16 @@ define(['exports'], (function (exports) { 'use strict';
6741
7303
  const overlay = new Overlay({
6742
7304
  container: this.gridview.element,
6743
7305
  content: group.element,
6744
- height: (_a = coord === null || coord === void 0 ? void 0 : coord.height) !== null && _a !== void 0 ? _a : 300,
6745
- 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,
6746
7308
  left: overlayLeft,
6747
7309
  top: overlayTop,
6748
7310
  minimumInViewportWidth: this.options.floatingGroupBounds === 'boundedWithinViewport'
6749
7311
  ? undefined
6750
- : (_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,
6751
7313
  minimumInViewportHeight: this.options.floatingGroupBounds === 'boundedWithinViewport'
6752
7314
  ? undefined
6753
- : (_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,
6754
7316
  });
6755
7317
  const el = group.element.querySelector('.void-container');
6756
7318
  if (!el) {
@@ -6781,12 +7343,15 @@ define(['exports'], (function (exports) { 'use strict';
6781
7343
  }), {
6782
7344
  dispose: () => {
6783
7345
  disposable.dispose();
6784
- group.model.location = 'grid';
7346
+ group.model.location = { type: 'grid' };
6785
7347
  remove(this._floatingGroups, floatingGroupPanel);
6786
7348
  this.updateWatermark();
6787
7349
  },
6788
7350
  });
6789
7351
  this._floatingGroups.push(floatingGroupPanel);
7352
+ if (!(options === null || options === void 0 ? void 0 : options.skipActiveGroup)) {
7353
+ this.doSetGroupAndPanelActive(group);
7354
+ }
6790
7355
  this.updateWatermark();
6791
7356
  }
6792
7357
  orthogonalize(position) {
@@ -6876,8 +7441,8 @@ define(['exports'], (function (exports) { 'use strict';
6876
7441
  return this.panels.find((panel) => panel.id === id);
6877
7442
  }
6878
7443
  setActivePanel(panel) {
6879
- this.doSetGroupActive(panel.group);
6880
7444
  panel.group.model.openPanel(panel);
7445
+ this.doSetGroupAndPanelActive(panel.group);
6881
7446
  }
6882
7447
  moveToNext(options = {}) {
6883
7448
  var _a;
@@ -6938,7 +7503,8 @@ define(['exports'], (function (exports) { 'use strict';
6938
7503
  });
6939
7504
  const popoutGroups = this._popoutGroups.map((group) => {
6940
7505
  return {
6941
- data: group.group.toJSON(),
7506
+ data: group.popoutGroup.toJSON(),
7507
+ gridReferenceGroup: group.referenceGroup,
6942
7508
  position: group.window.dimensions(),
6943
7509
  };
6944
7510
  });
@@ -6956,7 +7522,7 @@ define(['exports'], (function (exports) { 'use strict';
6956
7522
  return result;
6957
7523
  }
6958
7524
  fromJSON(data) {
6959
- var _a, _b;
7525
+ var _a, _b, _c;
6960
7526
  this.clear();
6961
7527
  if (typeof data !== 'object' || data === null) {
6962
7528
  throw new Error('serialized layout must be a non-null object');
@@ -6995,7 +7561,7 @@ define(['exports'], (function (exports) { 'use strict';
6995
7561
  const isActive = typeof activeView === 'string' &&
6996
7562
  activeView === panel.id;
6997
7563
  group.model.openPanel(panel, {
6998
- skipSetPanelActive: !isActive,
7564
+ skipSetActive: !isActive,
6999
7565
  skipSetGroupActive: true,
7000
7566
  });
7001
7567
  }
@@ -7025,11 +7591,16 @@ define(['exports'], (function (exports) { 'use strict';
7025
7591
  }
7026
7592
  const serializedPopoutGroups = (_b = data.popoutGroups) !== null && _b !== void 0 ? _b : [];
7027
7593
  for (const serializedPopoutGroup of serializedPopoutGroups) {
7028
- const { data, position } = serializedPopoutGroup;
7594
+ const { data, position, gridReferenceGroup } = serializedPopoutGroup;
7029
7595
  const group = createGroupFromSerializedState(data);
7030
- this.addPopoutGroup(group, {
7596
+ this.addPopoutGroup((_c = (gridReferenceGroup
7597
+ ? this.getPanel(gridReferenceGroup)
7598
+ : undefined)) !== null && _c !== void 0 ? _c : group, {
7031
7599
  skipRemoveGroup: true,
7032
7600
  position: position !== null && position !== void 0 ? position : undefined,
7601
+ overridePopoutGroup: gridReferenceGroup
7602
+ ? group
7603
+ : undefined,
7033
7604
  });
7034
7605
  }
7035
7606
  for (const floatingGroup of this._floatingGroups) {
@@ -7076,12 +7647,13 @@ define(['exports'], (function (exports) { 'use strict';
7076
7647
  */
7077
7648
  throw err;
7078
7649
  }
7650
+ this.updateWatermark();
7079
7651
  this._onDidLayoutFromJSON.fire();
7080
7652
  }
7081
7653
  clear() {
7082
7654
  const groups = Array.from(this._groups.values()).map((_) => _.value);
7083
7655
  const hasActiveGroup = !!this.activeGroup;
7084
- const hasActivePanel = !!this.activePanel;
7656
+ !!this.activePanel;
7085
7657
  for (const group of groups) {
7086
7658
  // remove the group will automatically remove the panels
7087
7659
  this.removeGroup(group, { skipActive: true });
@@ -7089,9 +7661,6 @@ define(['exports'], (function (exports) { 'use strict';
7089
7661
  if (hasActiveGroup) {
7090
7662
  this.doSetGroupAndPanelActive(undefined);
7091
7663
  }
7092
- if (hasActivePanel) {
7093
- this._onDidActivePanelChange.fire(undefined);
7094
- }
7095
7664
  this.gridview.clear();
7096
7665
  }
7097
7666
  closeAllGroups() {
@@ -7132,6 +7701,7 @@ define(['exports'], (function (exports) { 'use strict';
7132
7701
  const group = this.orthogonalize(directionToPosition(options.position.direction));
7133
7702
  const panel = this.createPanel(options, group);
7134
7703
  group.model.openPanel(panel);
7704
+ this.doSetGroupAndPanelActive(group);
7135
7705
  return panel;
7136
7706
  }
7137
7707
  }
@@ -7143,6 +7713,7 @@ define(['exports'], (function (exports) { 'use strict';
7143
7713
  const target = toTarget(((_b = options.position) === null || _b === void 0 ? void 0 : _b.direction) || 'within');
7144
7714
  if (options.floating) {
7145
7715
  const group = this.createGroup();
7716
+ this._onDidAddGroup.fire(group);
7146
7717
  const o = typeof options.floating === 'object' &&
7147
7718
  options.floating !== null
7148
7719
  ? options.floating
@@ -7150,16 +7721,16 @@ define(['exports'], (function (exports) { 'use strict';
7150
7721
  this.addFloatingGroup(group, o, {
7151
7722
  inDragMode: false,
7152
7723
  skipRemoveGroup: true,
7724
+ skipActiveGroup: true,
7153
7725
  });
7154
- this._onDidAddGroup.fire(group);
7155
7726
  panel = this.createPanel(options, group);
7156
7727
  group.model.openPanel(panel);
7157
- this.doSetGroupAndPanelActive(group);
7158
7728
  }
7159
- else if (referenceGroup.api.location === 'floating' ||
7729
+ else if (referenceGroup.api.location.type === 'floating' ||
7160
7730
  target === 'center') {
7161
7731
  panel = this.createPanel(options, referenceGroup);
7162
7732
  referenceGroup.model.openPanel(panel);
7733
+ this.doSetGroupAndPanelActive(referenceGroup);
7163
7734
  }
7164
7735
  else {
7165
7736
  const location = getGridLocation(referenceGroup.element);
@@ -7167,10 +7738,12 @@ define(['exports'], (function (exports) { 'use strict';
7167
7738
  const group = this.createGroupAtLocation(relativeLocation);
7168
7739
  panel = this.createPanel(options, group);
7169
7740
  group.model.openPanel(panel);
7741
+ this.doSetGroupAndPanelActive(group);
7170
7742
  }
7171
7743
  }
7172
7744
  else if (options.floating) {
7173
7745
  const group = this.createGroup();
7746
+ this._onDidAddGroup.fire(group);
7174
7747
  const o = typeof options.floating === 'object' &&
7175
7748
  options.floating !== null
7176
7749
  ? options.floating
@@ -7178,16 +7751,16 @@ define(['exports'], (function (exports) { 'use strict';
7178
7751
  this.addFloatingGroup(group, o, {
7179
7752
  inDragMode: false,
7180
7753
  skipRemoveGroup: true,
7754
+ skipActiveGroup: true,
7181
7755
  });
7182
- this._onDidAddGroup.fire(group);
7183
7756
  panel = this.createPanel(options, group);
7184
7757
  group.model.openPanel(panel);
7185
- this.doSetGroupAndPanelActive(group);
7186
7758
  }
7187
7759
  else {
7188
7760
  const group = this.createGroupAtLocation();
7189
7761
  panel = this.createPanel(options, group);
7190
7762
  group.model.openPanel(panel);
7763
+ this.doSetGroupAndPanelActive(group);
7191
7764
  }
7192
7765
  return panel;
7193
7766
  }
@@ -7199,13 +7772,15 @@ define(['exports'], (function (exports) { 'use strict';
7199
7772
  if (!group) {
7200
7773
  throw new Error(`cannot remove panel ${panel.id}. it's missing a group.`);
7201
7774
  }
7202
- group.model.removePanel(panel);
7775
+ group.model.removePanel(panel, {
7776
+ skipSetActiveGroup: options.skipSetActiveGroup,
7777
+ });
7203
7778
  if (!options.skipDispose) {
7204
- this.overlayRenderContainer.detatch(panel);
7779
+ panel.group.model.renderContainer.detatch(panel);
7205
7780
  panel.dispose();
7206
7781
  }
7207
7782
  if (group.size === 0 && options.removeEmptyGroup) {
7208
- this.removeGroup(group);
7783
+ this.removeGroup(group, { skipActive: options.skipSetActiveGroup });
7209
7784
  }
7210
7785
  }
7211
7786
  createWatermarkComponent() {
@@ -7218,7 +7793,7 @@ define(['exports'], (function (exports) { 'use strict';
7218
7793
  }
7219
7794
  updateWatermark() {
7220
7795
  var _a, _b;
7221
- 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) {
7222
7797
  if (!this.watermark) {
7223
7798
  this.watermark = this.createWatermarkComponent();
7224
7799
  this.watermark.init({
@@ -7264,36 +7839,42 @@ define(['exports'], (function (exports) { 'use strict';
7264
7839
  }
7265
7840
  else {
7266
7841
  const group = this.orthogonalize(directionToPosition(options.direction));
7842
+ if (!options.skipSetActive) {
7843
+ this.doSetGroupAndPanelActive(group);
7844
+ }
7267
7845
  return group;
7268
7846
  }
7269
7847
  const target = toTarget(options.direction || 'within');
7270
7848
  const location = getGridLocation(referenceGroup.element);
7271
7849
  const relativeLocation = getRelativeLocation(this.gridview.orientation, location, target);
7272
7850
  this.doAddGroup(group, relativeLocation);
7851
+ if (!options.skipSetActive) {
7852
+ this.doSetGroupAndPanelActive(group);
7853
+ }
7273
7854
  return group;
7274
7855
  }
7275
7856
  else {
7276
7857
  this.doAddGroup(group);
7858
+ this.doSetGroupAndPanelActive(group);
7277
7859
  return group;
7278
7860
  }
7279
7861
  }
7280
7862
  removeGroup(group, options) {
7863
+ this.doRemoveGroup(group, options);
7864
+ }
7865
+ doRemoveGroup(group, options) {
7281
7866
  var _a;
7282
7867
  const panels = [...group.panels]; // reassign since group panels will mutate
7283
- for (const panel of panels) {
7284
- this.removePanel(panel, {
7285
- removeEmptyGroup: false,
7286
- skipDispose: (_a = options === null || options === void 0 ? void 0 : options.skipDispose) !== null && _a !== void 0 ? _a : false,
7287
- });
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
+ }
7288
7875
  }
7289
7876
  const activePanel = this.activePanel;
7290
- this.doRemoveGroup(group, options);
7291
- if (this.activePanel !== activePanel) {
7292
- this._onDidActivePanelChange.fire(this.activePanel);
7293
- }
7294
- }
7295
- doRemoveGroup(group, options) {
7296
- if (group.api.location === 'floating') {
7877
+ if (group.api.location.type === 'floating') {
7297
7878
  const floatingGroup = this._floatingGroups.find((_) => _.group === group);
7298
7879
  if (floatingGroup) {
7299
7880
  if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
@@ -7305,60 +7886,124 @@ define(['exports'], (function (exports) { 'use strict';
7305
7886
  floatingGroup.dispose();
7306
7887
  if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
7307
7888
  const groups = Array.from(this._groups.values());
7308
- this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
7889
+ this.doSetGroupAndPanelActive(groups.length > 0 ? groups[0].value : undefined);
7309
7890
  }
7310
7891
  return floatingGroup.group;
7311
7892
  }
7312
7893
  throw new Error('failed to find floating group');
7313
7894
  }
7314
- if (group.api.location === 'popout') {
7315
- const selectedGroup = this._popoutGroups.find((_) => _.group === group);
7895
+ if (group.api.location.type === 'popout') {
7896
+ const selectedGroup = this._popoutGroups.find((_) => _.popoutGroup === group);
7316
7897
  if (selectedGroup) {
7317
7898
  if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
7318
- 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();
7319
7908
  this._groups.delete(group.id);
7320
7909
  this._onDidRemoveGroup.fire(group);
7321
7910
  }
7322
- 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
+ }
7323
7916
  if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
7324
7917
  const groups = Array.from(this._groups.values());
7325
- this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
7918
+ this.doSetGroupAndPanelActive(groups.length > 0 ? groups[0].value : undefined);
7326
7919
  }
7327
- return selectedGroup.group;
7920
+ this.updateWatermark();
7921
+ return selectedGroup.popoutGroup;
7328
7922
  }
7329
7923
  throw new Error('failed to find popout group');
7330
7924
  }
7331
- 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;
7332
7932
  }
7333
- moveGroupOrPanel(destinationGroup, sourceGroupId, sourceItemId, destinationTarget, destinationIndex) {
7334
- 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;
7335
7950
  const sourceGroup = sourceGroupId
7336
7951
  ? (_a = this._groups.get(sourceGroupId)) === null || _a === void 0 ? void 0 : _a.value
7337
7952
  : undefined;
7953
+ if (!sourceGroup) {
7954
+ throw new Error(`Failed to find group id ${sourceGroupId}`);
7955
+ }
7338
7956
  if (sourceItemId === undefined) {
7339
- if (sourceGroup) {
7340
- this.moveGroup(sourceGroup, destinationGroup, destinationTarget);
7341
- }
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
+ });
7342
7967
  return;
7343
7968
  }
7344
7969
  if (!destinationTarget || destinationTarget === 'center') {
7345
- 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);
7346
- 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) {
7347
7978
  throw new Error(`No panel with id ${sourceItemId}`);
7348
7979
  }
7349
- if ((sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.size) === 0) {
7350
- 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 });
7351
7983
  }
7352
- destinationGroup.model.openPanel(groupItem, {
7984
+ this.movingLock(() => destinationGroup.model.openPanel(removedPanel, {
7353
7985
  index: destinationIndex,
7986
+ skipSetGroupActive: true,
7987
+ }));
7988
+ this.doSetGroupAndPanelActive(destinationGroup);
7989
+ this._onDidMovePanel.fire({
7990
+ panel: removedPanel,
7354
7991
  });
7355
7992
  }
7356
7993
  else {
7994
+ /**
7995
+ * Dropping a panel to the extremities of a group which will place that panel
7996
+ * into an adjacent group
7997
+ */
7357
7998
  const referenceLocation = getGridLocation(destinationGroup.element);
7358
7999
  const targetLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, destinationTarget);
7359
- 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
+ */
7360
8005
  const [targetParentLocation, to] = tail(targetLocation);
7361
- if (sourceGroup.api.location === 'grid') {
8006
+ if (sourceGroup.api.location.type === 'grid') {
7362
8007
  const sourceLocation = getGridLocation(sourceGroup.element);
7363
8008
  const [sourceParentLocation, from] = tail(sourceLocation);
7364
8009
  if (sequenceEquals(sourceParentLocation, targetParentLocation)) {
@@ -7366,78 +8011,123 @@ define(['exports'], (function (exports) { 'use strict';
7366
8011
  // if a group has one tab - we are essentially moving the 'group'
7367
8012
  // which is equivalent to swapping two views in this case
7368
8013
  this.gridview.moveView(sourceParentLocation, from, to);
8014
+ return;
7369
8015
  }
7370
8016
  }
7371
8017
  // source group will become empty so delete the group
7372
- const targetGroup = this.doRemoveGroup(sourceGroup, {
8018
+ const targetGroup = this.movingLock(() => this.doRemoveGroup(sourceGroup, {
7373
8019
  skipActive: true,
7374
8020
  skipDispose: true,
7375
- });
8021
+ }));
7376
8022
  // after deleting the group we need to re-evaulate the ref location
7377
8023
  const updatedReferenceLocation = getGridLocation(destinationGroup.element);
7378
8024
  const location = getRelativeLocation(this.gridview.orientation, updatedReferenceLocation, destinationTarget);
7379
- this.doAddGroup(targetGroup, location);
8025
+ this.movingLock(() => this.doAddGroup(targetGroup, location));
8026
+ this.doSetGroupAndPanelActive(targetGroup);
7380
8027
  }
7381
8028
  else {
7382
- 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);
7383
- 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) {
7384
8038
  throw new Error(`No panel with id ${sourceItemId}`);
7385
8039
  }
7386
8040
  const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, destinationTarget);
7387
8041
  const group = this.createGroupAtLocation(dropLocation);
7388
- group.model.openPanel(groupItem);
8042
+ this.movingLock(() => group.model.openPanel(removedPanel, {
8043
+ skipSetGroupActive: true,
8044
+ }));
8045
+ this.doSetGroupAndPanelActive(group);
7389
8046
  }
7390
8047
  }
7391
8048
  }
7392
- moveGroup(sourceGroup, referenceGroup, target) {
7393
- if (sourceGroup) {
7394
- if (!target || target === 'center') {
7395
- const activePanel = sourceGroup.activePanel;
7396
- const panels = [...sourceGroup.panels].map((p) => sourceGroup.model.removePanel(p.id));
7397
- if ((sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.size) === 0) {
7398
- this.doRemoveGroup(sourceGroup);
7399
- }
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(() => {
7400
8062
  for (const panel of panels) {
7401
- referenceGroup.model.openPanel(panel, {
7402
- skipSetPanelActive: panel !== activePanel,
8063
+ to.model.openPanel(panel, {
8064
+ skipSetActive: panel !== activePanel,
8065
+ skipSetGroupActive: true,
7403
8066
  });
7404
8067
  }
7405
- }
7406
- else {
7407
- switch (sourceGroup.api.location) {
7408
- case 'grid':
7409
- this.gridview.removeView(getGridLocation(sourceGroup.element));
7410
- break;
7411
- case 'floating': {
7412
- const selectedFloatingGroup = this._floatingGroups.find((x) => x.group === sourceGroup);
7413
- if (!selectedFloatingGroup) {
7414
- throw new Error('failed to find floating group');
7415
- }
7416
- selectedFloatingGroup.dispose();
7417
- 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');
7418
8083
  }
7419
- case 'popout': {
7420
- const selectedPopoutGroup = this._popoutGroups.find((x) => x.group === sourceGroup);
7421
- if (!selectedPopoutGroup) {
7422
- throw new Error('failed to find popout group');
7423
- }
7424
- 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');
7425
8091
  }
8092
+ selectedPopoutGroup.disposable.dispose();
7426
8093
  }
7427
- const referenceLocation = getGridLocation(referenceGroup.element);
7428
- const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
7429
- this.gridview.addView(sourceGroup, exports.Sizing.Distribute, dropLocation);
7430
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
+ });
7431
8101
  }
7432
8102
  }
7433
- doSetGroupAndPanelActive(group, skipFocus) {
7434
- 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);
7435
8113
  const activePanel = this.activePanel;
7436
- super.doSetGroupActive(group, skipFocus);
7437
- if (((_a = this._activeGroup) === null || _a === void 0 ? void 0 : _a.activePanel) !== activePanel) {
7438
- 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);
7439
8122
  }
7440
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
+ }
7441
8131
  createGroup(options) {
7442
8132
  if (!options) {
7443
8133
  options = {};
@@ -7454,7 +8144,7 @@ define(['exports'], (function (exports) { 'use strict';
7454
8144
  }
7455
8145
  }
7456
8146
  const view = new DockviewGroupPanel(this, id, options);
7457
- view.init({ params: {}, accessor: null }); // required to initialized .part and allow for correct disposal of group
8147
+ view.init({ params: {}, accessor: this });
7458
8148
  if (!this._groups.has(view.id)) {
7459
8149
  const disposable = new CompositeDisposable(view.model.onTabDragStart((event) => {
7460
8150
  this._onWillDragPanel.fire(event);
@@ -7462,20 +8152,48 @@ define(['exports'], (function (exports) { 'use strict';
7462
8152
  this._onWillDragGroup.fire(event);
7463
8153
  }), view.model.onMove((event) => {
7464
8154
  const { groupId, itemId, target, index } = event;
7465
- 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
+ });
7466
8163
  }), view.model.onDidDrop((event) => {
7467
- 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);
7468
8173
  }), view.model.onDidAddPanel((event) => {
8174
+ if (this._moving) {
8175
+ return;
8176
+ }
7469
8177
  this._onDidAddPanel.fire(event.panel);
7470
8178
  }), view.model.onDidRemovePanel((event) => {
8179
+ if (this._moving) {
8180
+ return;
8181
+ }
7471
8182
  this._onDidRemovePanel.fire(event.panel);
7472
8183
  }), view.model.onDidActivePanelChange((event) => {
7473
- 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
+ }
7474
8193
  }));
7475
8194
  this._groups.set(view.id, { value: view, disposable });
7476
8195
  }
7477
- // TODO: must be called after the above listeners have been setup,
7478
- // not an ideal pattern
8196
+ // TODO: must be called after the above listeners have been setup, not an ideal pattern
7479
8197
  view.initialize();
7480
8198
  return view;
7481
8199
  }
@@ -7528,7 +8246,20 @@ define(['exports'], (function (exports) { 'use strict';
7528
8246
  });
7529
8247
  this._onDidLayoutfromJSON = new Emitter();
7530
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;
7531
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
+ }));
7532
8263
  if (!this.options.components) {
7533
8264
  this.options.components = {};
7534
8265
  }
@@ -7703,6 +8434,7 @@ define(['exports'], (function (exports) { 'use strict';
7703
8434
  });
7704
8435
  this.registerPanel(view);
7705
8436
  this.doAddGroup(view, relativeLocation, options.size);
8437
+ this.doSetGroupActive(view);
7706
8438
  return view;
7707
8439
  }
7708
8440
  registerPanel(panel) {
@@ -8388,10 +9120,10 @@ define(['exports'], (function (exports) { 'use strict';
8388
9120
  this._onDidChange = new Emitter();
8389
9121
  this.onDidChange = this._onDidChange.event;
8390
9122
  this.api.initialize(this);
8391
- this.addDisposables(this._onDidChange, this.api.onVisibilityChange((event) => {
8392
- const { isVisible } = event;
9123
+ this.addDisposables(this._onDidChange, this.api.onDidHiddenChange((event) => {
9124
+ const { isHidden } = event;
8393
9125
  const { accessor } = this._params;
8394
- accessor.setVisible(this, isVisible);
9126
+ accessor.setVisible(this, !isHidden);
8395
9127
  }), this.api.onActiveChange(() => {
8396
9128
  const { accessor } = this._params;
8397
9129
  accessor.setActive(this);
@@ -8457,11 +9189,13 @@ define(['exports'], (function (exports) { 'use strict';
8457
9189
  exports.DockviewApi = DockviewApi;
8458
9190
  exports.DockviewComponent = DockviewComponent;
8459
9191
  exports.DockviewCompositeDisposable = CompositeDisposable;
9192
+ exports.DockviewDidDropEvent = DockviewDidDropEvent;
8460
9193
  exports.DockviewEmitter = Emitter;
8461
9194
  exports.DockviewGroupPanel = DockviewGroupPanel;
8462
9195
  exports.DockviewGroupPanelModel = DockviewGroupPanelModel;
8463
9196
  exports.DockviewMutableDisposable = MutableDisposable;
8464
9197
  exports.DockviewPanel = DockviewPanel;
9198
+ exports.DockviewWillDropEvent = DockviewWillDropEvent;
8465
9199
  exports.DraggablePaneviewPanel = DraggablePaneviewPanel;
8466
9200
  exports.Gridview = Gridview;
8467
9201
  exports.GridviewApi = GridviewApi;
@@ -8480,6 +9214,7 @@ define(['exports'], (function (exports) { 'use strict';
8480
9214
  exports.SplitviewComponent = SplitviewComponent;
8481
9215
  exports.SplitviewPanel = SplitviewPanel;
8482
9216
  exports.Tab = Tab;
9217
+ exports.WillShowOverlayLocationEvent = WillShowOverlayLocationEvent;
8483
9218
  exports.createComponent = createComponent;
8484
9219
  exports.directionToPosition = directionToPosition;
8485
9220
  exports.getDirectionOrientation = getDirectionOrientation;