dockview-core 1.8.5 → 1.9.1

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 (289) hide show
  1. package/README.md +18 -11
  2. package/dist/cjs/api/component.api.d.ts +12 -0
  3. package/dist/cjs/api/component.api.d.ts.map +1 -1
  4. package/dist/cjs/api/component.api.js +22 -0
  5. package/dist/cjs/api/component.api.js.map +1 -1
  6. package/dist/cjs/api/dockviewGroupPanelApi.d.ts +15 -8
  7. package/dist/cjs/api/dockviewGroupPanelApi.d.ts.map +1 -1
  8. package/dist/cjs/api/dockviewGroupPanelApi.js +39 -9
  9. package/dist/cjs/api/dockviewGroupPanelApi.js.map +1 -1
  10. package/dist/cjs/api/dockviewPanelApi.d.ts +19 -2
  11. package/dist/cjs/api/dockviewPanelApi.d.ts.map +1 -1
  12. package/dist/cjs/api/dockviewPanelApi.js +23 -3
  13. package/dist/cjs/api/dockviewPanelApi.js.map +1 -1
  14. package/dist/cjs/api/gridviewPanelApi.js.map +1 -1
  15. package/dist/cjs/api/panelApi.js.map +1 -1
  16. package/dist/cjs/api/paneviewPanelApi.js.map +1 -1
  17. package/dist/cjs/api/splitviewPanelApi.js.map +1 -1
  18. package/dist/cjs/array.js.map +1 -1
  19. package/dist/cjs/constants.d.ts +6 -0
  20. package/dist/cjs/constants.d.ts.map +1 -0
  21. package/dist/cjs/constants.js +6 -0
  22. package/dist/cjs/constants.js.map +1 -0
  23. package/dist/cjs/dnd/abstractDragHandler.js.map +1 -1
  24. package/dist/cjs/dnd/dataTransfer.js.map +1 -1
  25. package/dist/cjs/dnd/dnd.d.ts +5 -0
  26. package/dist/cjs/dnd/dnd.d.ts.map +1 -1
  27. package/dist/cjs/dnd/dnd.js +28 -13
  28. package/dist/cjs/dnd/dnd.js.map +1 -1
  29. package/dist/cjs/dnd/droptarget.d.ts +13 -12
  30. package/dist/cjs/dnd/droptarget.d.ts.map +1 -1
  31. package/dist/cjs/dnd/droptarget.js +40 -49
  32. package/dist/cjs/dnd/droptarget.js.map +1 -1
  33. package/dist/cjs/dnd/groupDragHandler.js +1 -1
  34. package/dist/cjs/dnd/groupDragHandler.js.map +1 -1
  35. package/dist/cjs/dnd/overlay.d.ts +4 -17
  36. package/dist/cjs/dnd/overlay.d.ts.map +1 -1
  37. package/dist/cjs/dnd/overlay.js.map +1 -1
  38. package/dist/cjs/dockview/components/panel/content.d.ts +14 -1
  39. package/dist/cjs/dockview/components/panel/content.d.ts.map +1 -1
  40. package/dist/cjs/dockview/components/panel/content.js +85 -26
  41. package/dist/cjs/dockview/components/panel/content.js.map +1 -1
  42. package/dist/cjs/dockview/components/tab/defaultTab.js.map +1 -1
  43. package/dist/cjs/dockview/components/tab/tab.js.map +1 -1
  44. package/dist/cjs/dockview/components/titlebar/tabsContainer.js +2 -2
  45. package/dist/cjs/dockview/components/titlebar/tabsContainer.js.map +1 -1
  46. package/dist/cjs/dockview/components/titlebar/voidContainer.js.map +1 -1
  47. package/dist/cjs/dockview/components/watermark/watermark.js.map +1 -1
  48. package/dist/cjs/dockview/deserializer.d.ts +2 -2
  49. package/dist/cjs/dockview/deserializer.d.ts.map +1 -1
  50. package/dist/cjs/dockview/deserializer.js +6 -4
  51. package/dist/cjs/dockview/deserializer.js.map +1 -1
  52. package/dist/cjs/dockview/dockviewComponent.d.ts +23 -10
  53. package/dist/cjs/dockview/dockviewComponent.d.ts.map +1 -1
  54. package/dist/cjs/dockview/dockviewComponent.js +305 -115
  55. package/dist/cjs/dockview/dockviewComponent.js.map +1 -1
  56. package/dist/cjs/dockview/dockviewFloatingGroupPanel.js.map +1 -1
  57. package/dist/cjs/dockview/dockviewGroupPanel.d.ts.map +1 -1
  58. package/dist/cjs/dockview/dockviewGroupPanel.js +4 -2
  59. package/dist/cjs/dockview/dockviewGroupPanel.js.map +1 -1
  60. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +5 -4
  61. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts.map +1 -1
  62. package/dist/cjs/dockview/dockviewGroupPanelModel.js +37 -43
  63. package/dist/cjs/dockview/dockviewGroupPanelModel.js.map +1 -1
  64. package/dist/cjs/dockview/dockviewPanel.d.ts +8 -1
  65. package/dist/cjs/dockview/dockviewPanel.d.ts.map +1 -1
  66. package/dist/cjs/dockview/dockviewPanel.js +23 -1
  67. package/dist/cjs/dockview/dockviewPanel.js.map +1 -1
  68. package/dist/cjs/dockview/dockviewPanelModel.js.map +1 -1
  69. package/dist/cjs/dockview/dockviewPopoutGroupPanel.d.ts +16 -0
  70. package/dist/cjs/dockview/dockviewPopoutGroupPanel.d.ts.map +1 -0
  71. package/dist/cjs/dockview/dockviewPopoutGroupPanel.js +50 -0
  72. package/dist/cjs/dockview/dockviewPopoutGroupPanel.js.map +1 -0
  73. package/dist/cjs/dockview/options.d.ts +7 -1
  74. package/dist/cjs/dockview/options.d.ts.map +1 -1
  75. package/dist/cjs/dockview/options.js.map +1 -1
  76. package/dist/cjs/dockview/types.d.ts +2 -0
  77. package/dist/cjs/dockview/types.d.ts.map +1 -1
  78. package/dist/cjs/dockview/types.js.map +1 -1
  79. package/dist/cjs/dom.d.ts +12 -0
  80. package/dist/cjs/dom.d.ts.map +1 -1
  81. package/dist/cjs/dom.js +80 -1
  82. package/dist/cjs/dom.js.map +1 -1
  83. package/dist/cjs/events.js.map +1 -1
  84. package/dist/cjs/gridview/baseComponentGridview.d.ts +10 -0
  85. package/dist/cjs/gridview/baseComponentGridview.d.ts.map +1 -1
  86. package/dist/cjs/gridview/baseComponentGridview.js +19 -0
  87. package/dist/cjs/gridview/baseComponentGridview.js.map +1 -1
  88. package/dist/cjs/gridview/basePanelView.js.map +1 -1
  89. package/dist/cjs/gridview/branchNode.d.ts +2 -0
  90. package/dist/cjs/gridview/branchNode.d.ts.map +1 -1
  91. package/dist/cjs/gridview/branchNode.js +37 -10
  92. package/dist/cjs/gridview/branchNode.js.map +1 -1
  93. package/dist/cjs/gridview/gridview.d.ts +10 -3
  94. package/dist/cjs/gridview/gridview.d.ts.map +1 -1
  95. package/dist/cjs/gridview/gridview.js +80 -0
  96. package/dist/cjs/gridview/gridview.js.map +1 -1
  97. package/dist/cjs/gridview/gridviewComponent.js.map +1 -1
  98. package/dist/cjs/gridview/gridviewPanel.js.map +1 -1
  99. package/dist/cjs/gridview/leafNode.d.ts.map +1 -1
  100. package/dist/cjs/gridview/leafNode.js +1 -2
  101. package/dist/cjs/gridview/leafNode.js.map +1 -1
  102. package/dist/cjs/index.d.ts +3 -2
  103. package/dist/cjs/index.d.ts.map +1 -1
  104. package/dist/cjs/index.js.map +1 -1
  105. package/dist/cjs/lifecycle.d.ts +1 -0
  106. package/dist/cjs/lifecycle.d.ts.map +1 -1
  107. package/dist/cjs/lifecycle.js +8 -0
  108. package/dist/cjs/lifecycle.js.map +1 -1
  109. package/dist/cjs/math.js.map +1 -1
  110. package/dist/cjs/overlayRenderContainer.d.ts +19 -0
  111. package/dist/cjs/overlayRenderContainer.d.ts.map +1 -0
  112. package/dist/cjs/overlayRenderContainer.js +170 -0
  113. package/dist/cjs/overlayRenderContainer.js.map +1 -0
  114. package/dist/cjs/panel/componentFactory.js.map +1 -1
  115. package/dist/cjs/paneview/defaultPaneviewHeader.js.map +1 -1
  116. package/dist/cjs/paneview/draggablePaneviewPanel.js.map +1 -1
  117. package/dist/cjs/paneview/paneview.js.map +1 -1
  118. package/dist/cjs/paneview/paneviewComponent.js.map +1 -1
  119. package/dist/cjs/paneview/paneviewPanel.js.map +1 -1
  120. package/dist/cjs/popoutWindow.d.ts +18 -0
  121. package/dist/cjs/popoutWindow.d.ts.map +1 -0
  122. package/dist/cjs/popoutWindow.js +130 -0
  123. package/dist/cjs/popoutWindow.js.map +1 -0
  124. package/dist/cjs/resizable.d.ts.map +1 -1
  125. package/dist/cjs/resizable.js +16 -1
  126. package/dist/cjs/resizable.js.map +1 -1
  127. package/dist/cjs/splitview/splitview.d.ts +5 -4
  128. package/dist/cjs/splitview/splitview.d.ts.map +1 -1
  129. package/dist/cjs/splitview/splitview.js +31 -8
  130. package/dist/cjs/splitview/splitview.js.map +1 -1
  131. package/dist/cjs/splitview/splitviewComponent.js.map +1 -1
  132. package/dist/cjs/splitview/splitviewPanel.js.map +1 -1
  133. package/dist/cjs/splitview/viewItem.js.map +1 -1
  134. package/dist/cjs/types.d.ts +6 -0
  135. package/dist/cjs/types.d.ts.map +1 -1
  136. package/dist/dockview-core.amd.js +966 -229
  137. package/dist/dockview-core.amd.js.map +1 -1
  138. package/dist/dockview-core.amd.min.js +2 -2
  139. package/dist/dockview-core.amd.min.js.map +1 -1
  140. package/dist/dockview-core.amd.min.noStyle.js +2 -2
  141. package/dist/dockview-core.amd.min.noStyle.js.map +1 -1
  142. package/dist/dockview-core.amd.noStyle.js +965 -228
  143. package/dist/dockview-core.amd.noStyle.js.map +1 -1
  144. package/dist/dockview-core.cjs.js +966 -229
  145. package/dist/dockview-core.cjs.js.map +1 -1
  146. package/dist/dockview-core.esm.js +966 -229
  147. package/dist/dockview-core.esm.js.map +1 -1
  148. package/dist/dockview-core.esm.min.js +2 -2
  149. package/dist/dockview-core.esm.min.js.map +1 -1
  150. package/dist/dockview-core.js +966 -229
  151. package/dist/dockview-core.js.map +1 -1
  152. package/dist/dockview-core.min.js +2 -2
  153. package/dist/dockview-core.min.js.map +1 -1
  154. package/dist/dockview-core.min.noStyle.js +2 -2
  155. package/dist/dockview-core.min.noStyle.js.map +1 -1
  156. package/dist/dockview-core.noStyle.js +965 -228
  157. package/dist/dockview-core.noStyle.js.map +1 -1
  158. package/dist/esm/api/component.api.d.ts +12 -0
  159. package/dist/esm/api/component.api.d.ts.map +1 -1
  160. package/dist/esm/api/component.api.js +18 -0
  161. package/dist/esm/api/component.api.js.map +1 -1
  162. package/dist/esm/api/dockviewGroupPanelApi.d.ts +15 -8
  163. package/dist/esm/api/dockviewGroupPanelApi.d.ts.map +1 -1
  164. package/dist/esm/api/dockviewGroupPanelApi.js +39 -9
  165. package/dist/esm/api/dockviewGroupPanelApi.js.map +1 -1
  166. package/dist/esm/api/dockviewPanelApi.d.ts +19 -2
  167. package/dist/esm/api/dockviewPanelApi.d.ts.map +1 -1
  168. package/dist/esm/api/dockviewPanelApi.js +19 -3
  169. package/dist/esm/api/dockviewPanelApi.js.map +1 -1
  170. package/dist/esm/api/gridviewPanelApi.js.map +1 -1
  171. package/dist/esm/array.js.map +1 -1
  172. package/dist/esm/constants.d.ts +6 -0
  173. package/dist/esm/constants.d.ts.map +1 -0
  174. package/dist/esm/constants.js +3 -0
  175. package/dist/esm/constants.js.map +1 -0
  176. package/dist/esm/dnd/abstractDragHandler.js.map +1 -1
  177. package/dist/esm/dnd/dataTransfer.js.map +1 -1
  178. package/dist/esm/dnd/dnd.d.ts +5 -0
  179. package/dist/esm/dnd/dnd.d.ts.map +1 -1
  180. package/dist/esm/dnd/dnd.js +28 -13
  181. package/dist/esm/dnd/dnd.js.map +1 -1
  182. package/dist/esm/dnd/droptarget.d.ts +13 -12
  183. package/dist/esm/dnd/droptarget.d.ts.map +1 -1
  184. package/dist/esm/dnd/droptarget.js +40 -49
  185. package/dist/esm/dnd/droptarget.js.map +1 -1
  186. package/dist/esm/dnd/groupDragHandler.js +1 -1
  187. package/dist/esm/dnd/groupDragHandler.js.map +1 -1
  188. package/dist/esm/dnd/overlay.d.ts +4 -17
  189. package/dist/esm/dnd/overlay.d.ts.map +1 -1
  190. package/dist/esm/dnd/overlay.js.map +1 -1
  191. package/dist/esm/dockview/components/panel/content.d.ts +14 -1
  192. package/dist/esm/dockview/components/panel/content.d.ts.map +1 -1
  193. package/dist/esm/dockview/components/panel/content.js +84 -26
  194. package/dist/esm/dockview/components/panel/content.js.map +1 -1
  195. package/dist/esm/dockview/components/tab/defaultTab.js.map +1 -1
  196. package/dist/esm/dockview/components/tab/tab.js.map +1 -1
  197. package/dist/esm/dockview/components/titlebar/tabsContainer.js +2 -2
  198. package/dist/esm/dockview/components/titlebar/tabsContainer.js.map +1 -1
  199. package/dist/esm/dockview/components/titlebar/voidContainer.js.map +1 -1
  200. package/dist/esm/dockview/components/watermark/watermark.js.map +1 -1
  201. package/dist/esm/dockview/deserializer.d.ts +2 -2
  202. package/dist/esm/dockview/deserializer.d.ts.map +1 -1
  203. package/dist/esm/dockview/deserializer.js +6 -4
  204. package/dist/esm/dockview/deserializer.js.map +1 -1
  205. package/dist/esm/dockview/dockviewComponent.d.ts +23 -10
  206. package/dist/esm/dockview/dockviewComponent.d.ts.map +1 -1
  207. package/dist/esm/dockview/dockviewComponent.js +207 -55
  208. package/dist/esm/dockview/dockviewComponent.js.map +1 -1
  209. package/dist/esm/dockview/dockviewGroupPanel.d.ts.map +1 -1
  210. package/dist/esm/dockview/dockviewGroupPanel.js +4 -2
  211. package/dist/esm/dockview/dockviewGroupPanel.js.map +1 -1
  212. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +5 -4
  213. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts.map +1 -1
  214. package/dist/esm/dockview/dockviewGroupPanelModel.js +39 -45
  215. package/dist/esm/dockview/dockviewGroupPanelModel.js.map +1 -1
  216. package/dist/esm/dockview/dockviewPanel.d.ts +8 -1
  217. package/dist/esm/dockview/dockviewPanel.d.ts.map +1 -1
  218. package/dist/esm/dockview/dockviewPanel.js +19 -1
  219. package/dist/esm/dockview/dockviewPanel.js.map +1 -1
  220. package/dist/esm/dockview/dockviewPanelModel.js.map +1 -1
  221. package/dist/esm/dockview/dockviewPopoutGroupPanel.d.ts +16 -0
  222. package/dist/esm/dockview/dockviewPopoutGroupPanel.d.ts.map +1 -0
  223. package/dist/esm/dockview/dockviewPopoutGroupPanel.js +28 -0
  224. package/dist/esm/dockview/dockviewPopoutGroupPanel.js.map +1 -0
  225. package/dist/esm/dockview/options.d.ts +7 -1
  226. package/dist/esm/dockview/options.d.ts.map +1 -1
  227. package/dist/esm/dockview/options.js.map +1 -1
  228. package/dist/esm/dockview/types.d.ts +2 -0
  229. package/dist/esm/dockview/types.d.ts.map +1 -1
  230. package/dist/esm/dockview/types.js.map +1 -1
  231. package/dist/esm/dom.d.ts +12 -0
  232. package/dist/esm/dom.d.ts.map +1 -1
  233. package/dist/esm/dom.js +55 -0
  234. package/dist/esm/dom.js.map +1 -1
  235. package/dist/esm/events.js.map +1 -1
  236. package/dist/esm/gridview/baseComponentGridview.d.ts +10 -0
  237. package/dist/esm/gridview/baseComponentGridview.d.ts.map +1 -1
  238. package/dist/esm/gridview/baseComponentGridview.js +15 -0
  239. package/dist/esm/gridview/baseComponentGridview.js.map +1 -1
  240. package/dist/esm/gridview/basePanelView.js.map +1 -1
  241. package/dist/esm/gridview/branchNode.d.ts +2 -0
  242. package/dist/esm/gridview/branchNode.d.ts.map +1 -1
  243. package/dist/esm/gridview/branchNode.js +26 -5
  244. package/dist/esm/gridview/branchNode.js.map +1 -1
  245. package/dist/esm/gridview/gridview.d.ts +10 -3
  246. package/dist/esm/gridview/gridview.d.ts.map +1 -1
  247. package/dist/esm/gridview/gridview.js +80 -0
  248. package/dist/esm/gridview/gridview.js.map +1 -1
  249. package/dist/esm/gridview/gridviewComponent.js.map +1 -1
  250. package/dist/esm/gridview/gridviewPanel.js.map +1 -1
  251. package/dist/esm/gridview/leafNode.d.ts.map +1 -1
  252. package/dist/esm/gridview/leafNode.js +0 -1
  253. package/dist/esm/gridview/leafNode.js.map +1 -1
  254. package/dist/esm/index.d.ts +3 -2
  255. package/dist/esm/index.d.ts.map +1 -1
  256. package/dist/esm/index.js.map +1 -1
  257. package/dist/esm/lifecycle.d.ts +1 -0
  258. package/dist/esm/lifecycle.d.ts.map +1 -1
  259. package/dist/esm/lifecycle.js +8 -0
  260. package/dist/esm/lifecycle.js.map +1 -1
  261. package/dist/esm/math.js.map +1 -1
  262. package/dist/esm/overlayRenderContainer.d.ts +19 -0
  263. package/dist/esm/overlayRenderContainer.d.ts.map +1 -0
  264. package/dist/esm/overlayRenderContainer.js +125 -0
  265. package/dist/esm/overlayRenderContainer.js.map +1 -0
  266. package/dist/esm/panel/componentFactory.js.map +1 -1
  267. package/dist/esm/paneview/defaultPaneviewHeader.js.map +1 -1
  268. package/dist/esm/paneview/draggablePaneviewPanel.js.map +1 -1
  269. package/dist/esm/paneview/paneview.js.map +1 -1
  270. package/dist/esm/paneview/paneviewComponent.js.map +1 -1
  271. package/dist/esm/paneview/paneviewPanel.js.map +1 -1
  272. package/dist/esm/popoutWindow.d.ts +18 -0
  273. package/dist/esm/popoutWindow.d.ts.map +1 -0
  274. package/dist/esm/popoutWindow.js +88 -0
  275. package/dist/esm/popoutWindow.js.map +1 -0
  276. package/dist/esm/resizable.d.ts.map +1 -1
  277. package/dist/esm/resizable.js +17 -2
  278. package/dist/esm/resizable.js.map +1 -1
  279. package/dist/esm/splitview/splitview.d.ts +5 -4
  280. package/dist/esm/splitview/splitview.d.ts.map +1 -1
  281. package/dist/esm/splitview/splitview.js +25 -8
  282. package/dist/esm/splitview/splitview.js.map +1 -1
  283. package/dist/esm/splitview/splitviewComponent.js.map +1 -1
  284. package/dist/esm/splitview/splitviewPanel.js.map +1 -1
  285. package/dist/esm/splitview/viewItem.js.map +1 -1
  286. package/dist/esm/types.d.ts +6 -0
  287. package/dist/esm/types.d.ts.map +1 -1
  288. package/dist/styles/dockview.css +38 -7
  289. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * dockview-core
3
- * @version 1.8.5
3
+ * @version 1.9.1
4
4
  * @link https://github.com/mathuo/dockview
5
5
  * @license MIT
6
6
  */
@@ -33,7 +33,7 @@ function styleInject(css, ref) {
33
33
  }
34
34
  }
35
35
 
36
- var css_248z = ".dockview-svg {\n display: inline-block;\n fill: currentcolor;\n line-height: 1;\n stroke: currentcolor;\n stroke-width: 0;\n}\n.dockview-theme-dark {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n}\n\n.dockview-theme-light {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: white;\n --dv-tabs-and-actions-container-background-color: #f3f3f3;\n --dv-activegroup-visiblepanel-tab-background-color: white;\n --dv-activegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-inactivegroup-visiblepanel-tab-background-color: white;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-tab-divider-color: white;\n --dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-activegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.35);\n --dv-separator-border: rgba(128, 128, 128, 0.35);\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n}\n\n.dockview-theme-vs {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n --dv-tabs-and-actions-container-background-color: #2d2d30;\n --dv-tabs-and-actions-container-height: 20px;\n --dv-tabs-and-actions-container-font-size: 11px;\n --dv-activegroup-visiblepanel-tab-background-color: #007acc;\n --dv-inactivegroup-visiblepanel-tab-background-color: #3f3f46;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: white;\n --dv-inactivegroup-visiblepanel-tab-color: white;\n --dv-inactivegroup-hiddenpanel-tab-color: white;\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-activegroup-hiddenpanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n}\n\n.dockview-theme-abyss {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #000c18;\n --dv-tabs-and-actions-container-background-color: #1c1c2a;\n --dv-activegroup-visiblepanel-tab-background-color: #000c18;\n --dv-activegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #000c18;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-tab-divider-color: #2b2b4a;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.25);\n --dv-separator-border: #2b2b4a;\n --dv-paneview-header-border-color: #2b2b4a;\n --dv-paneview-active-outline-color: #596f99;\n}\n\n.dockview-theme-dracula {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #282a36;\n --dv-tabs-and-actions-container-background-color: #191a21;\n --dv-activegroup-visiblepanel-tab-background-color: #282a36;\n --dv-activegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #282a36;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-tab-divider-color: #191a21;\n --dv-activegroup-visiblepanel-tab-color: rgb(248, 248, 242);\n --dv-activegroup-hiddenpanel-tab-color: rgb(98, 114, 164);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(248, 248, 242, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(98, 114, 164, 0.5);\n --dv-separator-border: #bd93f9;\n --dv-paneview-header-border-color: #bd93f9;\n --dv-paneview-active-outline-color: #6272a4;\n}\n.dockview-theme-dracula .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab::after {\n position: absolute;\n left: 0px;\n top: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #94527e;\n z-index: 999;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #5e3d5a;\n z-index: 999;\n}\n\n.dockview-theme-replit {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #ebeced;\n --dv-tabs-and-actions-container-background-color: #fcfcfc;\n --dv-activegroup-visiblepanel-tab-background-color: #f0f1f2;\n --dv-activegroup-hiddenpanel-tab-background-color: ##fcfcfc;\n --dv-inactivegroup-visiblepanel-tab-background-color: #f0f1f2;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #fcfcfc;\n --dv-tab-divider-color: transparent;\n --dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-activegroup-hiddenpanel-tab-color: rgb(51, 51, 51);\n --dv-inactivegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-inactivegroup-hiddenpanel-tab-color: rgb(51, 51, 51);\n --dv-separator-border: transparent;\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n --dv-background-color: #ebeced;\n --dv-separator-handle-background-color: #cfd1d3;\n --dv-separator-handle-hover-background-color: #babbbb;\n}\n.dockview-theme-replit.dv-dockview {\n padding: 3px;\n}\n.dockview-theme-replit .view:has(> .groupview) {\n padding: 3px;\n}\n.dockview-theme-replit .dv-resize-container:has(> .groupview) {\n border-radius: 8px;\n}\n.dockview-theme-replit .groupview {\n overflow: hidden;\n border-radius: 10px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container {\n border-bottom: 1px solid rgba(128, 128, 128, 0.35);\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab {\n margin: 4px;\n border-radius: 8px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab .dockview-svg {\n height: 8px;\n width: 8px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab:hover {\n background-color: #e4e5e6 !important;\n}\n.dockview-theme-replit .groupview .content-container {\n background-color: #fcfcfc;\n}\n.dockview-theme-replit .groupview.active-group {\n border: 1px solid rgba(128, 128, 128, 0.35);\n}\n.dockview-theme-replit .groupview.inactive-group {\n border: 1px solid transparent;\n}\n.dockview-theme-replit .vertical > .sash-container > .sash::after {\n content: \"\";\n height: 4px;\n width: 40px;\n border-radius: 2px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--dv-separator-handle-background-color);\n position: absolute;\n}\n.dockview-theme-replit .vertical > .sash-container > .sash:hover::after {\n background-color: var(--dv-separator-handle-hover-background-color);\n}\n.dockview-theme-replit .horizontal > .sash-container > .sash::after {\n content: \"\";\n height: 40px;\n width: 4px;\n border-radius: 2px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--dv-separator-handle-background-color);\n position: absolute;\n}\n.dockview-theme-replit .horizontal > .sash-container > .sash:hover::after {\n background-color: var(--dv-separator-handle-hover-background-color);\n}\n.drop-target {\n position: relative;\n}\n.drop-target > .drop-target-dropzone {\n position: absolute;\n left: 0px;\n top: 0px;\n height: 100%;\n width: 100%;\n z-index: 1000;\n pointer-events: none;\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection {\n position: relative;\n box-sizing: border-box;\n height: 100%;\n width: 100%;\n background-color: var(--dv-drag-over-background-color);\n transition: top 70ms ease-out, left 70ms ease-out, width 70ms ease-out, height 70ms ease-out, opacity 0.15s ease-out;\n will-change: transform;\n pointer-events: none;\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-top {\n border-top: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-bottom {\n border-bottom: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-left {\n border-left: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-right {\n border-right: 1px solid var(--dv-drag-over-border-color);\n}\n.dv-debug .dv-resize-container .dv-resize-handle-top {\n background-color: red;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-bottom {\n background-color: green;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-left {\n background-color: yellow;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-right {\n background-color: blue;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-topleft,\n.dv-debug .dv-resize-container .dv-resize-handle-topright,\n.dv-debug .dv-resize-container .dv-resize-handle-bottomleft,\n.dv-debug .dv-resize-container .dv-resize-handle-bottomright {\n background-color: cyan;\n}\n\n.dv-resize-container {\n position: absolute;\n z-index: 997;\n border: 1px solid var(--dv-tab-divider-color);\n box-shadow: var(--dv-floating-box-shadow);\n}\n.dv-resize-container.dv-bring-to-front {\n z-index: 998;\n}\n.dv-resize-container.dv-resize-container-dragging {\n opacity: 0.5;\n}\n.dv-resize-container .dv-resize-handle-top {\n height: 4px;\n width: calc(100% - 8px);\n left: 4px;\n top: -2px;\n z-index: 999;\n position: absolute;\n cursor: ns-resize;\n}\n.dv-resize-container .dv-resize-handle-bottom {\n height: 4px;\n width: calc(100% - 8px);\n left: 4px;\n bottom: -2px;\n z-index: 999;\n position: absolute;\n cursor: ns-resize;\n}\n.dv-resize-container .dv-resize-handle-left {\n height: calc(100% - 8px);\n width: 4px;\n left: -2px;\n top: 4px;\n z-index: 999;\n position: absolute;\n cursor: ew-resize;\n}\n.dv-resize-container .dv-resize-handle-right {\n height: calc(100% - 8px);\n width: 4px;\n right: -2px;\n top: 4px;\n z-index: 999;\n position: absolute;\n cursor: ew-resize;\n}\n.dv-resize-container .dv-resize-handle-topleft {\n height: 4px;\n width: 4px;\n top: -2px;\n left: -2px;\n z-index: 999;\n position: absolute;\n cursor: nw-resize;\n}\n.dv-resize-container .dv-resize-handle-topright {\n height: 4px;\n width: 4px;\n right: -2px;\n top: -2px;\n z-index: 999;\n position: absolute;\n cursor: ne-resize;\n}\n.dv-resize-container .dv-resize-handle-bottomleft {\n height: 4px;\n width: 4px;\n left: -2px;\n bottom: -2px;\n z-index: 999;\n position: absolute;\n cursor: sw-resize;\n}\n.dv-resize-container .dv-resize-handle-bottomright {\n height: 4px;\n width: 4px;\n right: -2px;\n bottom: -2px;\n z-index: 999;\n position: absolute;\n cursor: se-resize;\n}\n.dv-dockview {\n position: relative;\n background-color: var(--dv-group-view-background-color);\n}\n.dv-dockview .dv-watermark-container {\n position: absolute;\n top: 0px;\n left: 0px;\n height: 100%;\n width: 100%;\n z-index: 1;\n}\n\n.groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.inactive-tab {\n background-color: var(--dv-activegroup-hiddenpanel-tab-background-color);\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n background-color: var(--dv-inactivegroup-visiblepanel-tab-background-color);\n color: var(--dv-inactivegroup-visiblepanel-tab-color);\n}\n.groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.inactive-tab {\n background-color: var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n color: var(--dv-inactivegroup-hiddenpanel-tab-color);\n}\n\n/**\n * when a tab is dragged we lose the above stylings because they are conditional on parent elements\n * therefore we also set some stylings for the dragging event\n **/\n.tab.dv-tab-dragging {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.groupview {\n display: flex;\n flex-direction: column;\n height: 100%;\n background-color: var(--dv-group-view-background-color);\n overflow: hidden;\n}\n.groupview:focus {\n outline: none;\n}\n.groupview.empty > .tabs-and-actions-container {\n display: none;\n}\n.groupview > .content-container {\n flex-grow: 1;\n overflow: hidden;\n outline: none;\n}\n.grid-view,\n.branch-node {\n height: 100%;\n width: 100%;\n}\n.pane-container {\n height: 100%;\n width: 100%;\n}\n.pane-container.animated .view {\n transition-duration: 0.15s;\n transition-timing-function: ease-out;\n}\n.pane-container .view {\n overflow: hidden;\n display: flex;\n flex-direction: column;\n padding: 0px !important;\n}\n.pane-container .view:not(:first-child)::before {\n background-color: transparent !important;\n}\n.pane-container .view:not(:first-child) .pane > .pane-header {\n border-top: 1px solid var(--dv-paneview-header-border-color);\n}\n.pane-container .view .default-header {\n background-color: var(--dv-group-view-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n display: flex;\n padding: 0px 8px;\n cursor: pointer;\n}\n.pane-container .view .default-header .dockview-pane-header-icon {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.pane-container .view .default-header > span {\n padding-left: 8px;\n flex-grow: 1;\n}\n.pane-container:first-of-type > .pane > .pane-header {\n border-top: none !important;\n}\n.pane-container .pane {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n height: 100%;\n}\n.pane-container .pane .pane-header {\n box-sizing: border-box;\n user-select: none;\n position: relative;\n outline: none;\n}\n.pane-container .pane .pane-header.pane-draggable {\n cursor: pointer;\n}\n.pane-container .pane .pane-header:focus:before, .pane-container .pane .pane-header:focus-within:before {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 5;\n content: \"\";\n pointer-events: none;\n outline: 1px solid;\n outline-width: -1px;\n outline-style: solid;\n outline-offset: -1px;\n outline-color: var(--dv-paneview-active-outline-color);\n}\n.pane-container .pane .pane-body {\n overflow-y: auto;\n overflow-x: hidden;\n flex-grow: 1;\n position: relative;\n outline: none;\n}\n.pane-container .pane .pane-body:focus:before, .pane-container .pane .pane-body:focus-within:before {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 5;\n content: \"\";\n pointer-events: none;\n outline: 1px solid;\n outline-width: -1px;\n outline-style: solid;\n outline-offset: -1px;\n outline-color: var(--dv-paneview-active-outline-color);\n}\n.dv-debug .split-view-container .sash-container .sash.enabled {\n background-color: black;\n}\n.dv-debug .split-view-container .sash-container .sash.disabled {\n background-color: orange;\n}\n.dv-debug .split-view-container .sash-container .sash.maximum {\n background-color: green;\n}\n.dv-debug .split-view-container .sash-container .sash.minimum {\n background-color: red;\n}\n\n.split-view-container {\n position: relative;\n overflow: hidden;\n height: 100%;\n width: 100%;\n}\n.split-view-container.animation .view,\n.split-view-container.animation .sash {\n transition-duration: 0.15s;\n transition-timing-function: ease-out;\n}\n.split-view-container.horizontal {\n height: 100%;\n}\n.split-view-container.horizontal > .sash-container > .sash {\n height: 100%;\n width: 4px;\n}\n.split-view-container.horizontal > .sash-container > .sash.enabled {\n cursor: ew-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.horizontal > .sash-container > .sash.maximum {\n cursor: w-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.minimum {\n cursor: e-resize;\n}\n.split-view-container.horizontal > .view-container > .view:not(:first-child)::before {\n height: 100%;\n width: 1px;\n}\n.split-view-container.vertical {\n width: 100%;\n}\n.split-view-container.vertical > .sash-container > .sash {\n width: 100%;\n height: 4px;\n}\n.split-view-container.vertical > .sash-container > .sash.enabled {\n cursor: ns-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.vertical > .sash-container > .sash.maximum {\n cursor: n-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.minimum {\n cursor: s-resize;\n}\n.split-view-container.vertical > .view-container > .view {\n width: 100%;\n}\n.split-view-container.vertical > .view-container > .view:not(:first-child)::before {\n height: 1px;\n width: 100%;\n}\n.split-view-container .sash-container {\n height: 100%;\n width: 100%;\n position: absolute;\n}\n.split-view-container .sash-container .sash {\n position: absolute;\n z-index: 99;\n outline: none;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n touch-action: none;\n}\n.split-view-container .sash-container .sash:active {\n transition: background-color 0.1s ease-in-out;\n background-color: var(--dv-active-sash-color, transparent);\n}\n.split-view-container .sash-container .sash:hover {\n background-color: var(--dv-active-sash-color, transparent);\n transition: background-color 0.1s ease-in-out;\n transition-delay: 0.5s;\n}\n.split-view-container .view-container {\n position: relative;\n height: 100%;\n width: 100%;\n background-color: var(--dv-background-color);\n}\n.split-view-container .view-container .view {\n height: 100%;\n box-sizing: border-box;\n overflow: auto;\n position: absolute;\n}\n.split-view-container.separator-border .view:not(:first-child)::before {\n content: \" \";\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n background-color: var(--dv-separator-border);\n}\n.dv-dragged {\n transform: translate3d(0px, 0px, 0px); /* forces tab to be drawn on a separate layer (see https://github.com/microsoft/vscode/issues/18733) */\n}\n\n.tab {\n flex-shrink: 0;\n}\n.tab.dv-tab-dragging .tab-action {\n background-color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.tab.active-tab > .default-tab .tab-action {\n visibility: visible;\n}\n.tab.inactive-tab > .default-tab .tab-action {\n visibility: hidden;\n}\n.tab.inactive-tab > .default-tab:hover .tab-action {\n visibility: visible;\n}\n.tab .default-tab {\n position: relative;\n height: 100%;\n display: flex;\n min-width: 80px;\n align-items: center;\n padding: 0px 8px;\n white-space: nowrap;\n text-overflow: elipsis;\n}\n.tab .default-tab .tab-content {\n padding: 0px 8px;\n flex-grow: 1;\n}\n.tab .default-tab .action-container {\n text-align: right;\n display: flex;\n}\n.tab .default-tab .action-container .tab-list {\n display: flex;\n padding: 0px;\n margin: 0px;\n justify-content: flex-end;\n}\n.tab .default-tab .action-container .tab-list .tab-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n}\n.tab .default-tab .action-container .tab-list .tab-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}\n.tabs-and-actions-container {\n display: flex;\n background-color: var(--dv-tabs-and-actions-container-background-color);\n flex-shrink: 0;\n box-sizing: border-box;\n height: var(--dv-tabs-and-actions-container-height);\n font-size: var(--dv-tabs-and-actions-container-font-size);\n}\n.tabs-and-actions-container.hidden {\n display: none;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .tabs-container {\n flex-grow: 1;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .tabs-container .tab {\n flex-grow: 1;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .void-container {\n flex-grow: 0;\n}\n.tabs-and-actions-container .void-container {\n display: flex;\n flex-grow: 1;\n cursor: grab;\n}\n.tabs-and-actions-container .tabs-container {\n display: flex;\n overflow-x: overlay;\n overflow-y: hidden;\n scrollbar-width: thin;\n /* Track */\n /* Handle */\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar {\n height: 3px;\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar-track {\n background: transparent;\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar-thumb {\n background: var(--dv-tabs-container-scrollbar-color);\n}\n.tabs-and-actions-container .tabs-container .tab {\n -webkit-user-drag: element;\n outline: none;\n min-width: 75px;\n cursor: pointer;\n position: relative;\n box-sizing: border-box;\n}\n.tabs-and-actions-container .tabs-container .tab:not(:first-child)::before {\n content: \" \";\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n background-color: var(--dv-tab-divider-color);\n width: 1px;\n height: 100%;\n}\n.watermark {\n display: flex;\n width: 100%;\n}\n.watermark.has-actions .watermark-title .actions-container {\n display: none;\n}\n.watermark .watermark-title {\n height: 35px;\n width: 100%;\n display: flex;\n}\n.watermark .watermark-content {\n flex-grow: 1;\n}\n.watermark .actions-container {\n display: flex;\n align-items: center;\n padding: 0px 8px;\n}\n.watermark .actions-container .close-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n cursor: pointer;\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.watermark .actions-container .close-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}";
36
+ var css_248z = ".dv-render-overlay {\n position: absolute;\n z-index: 1;\n height: 100%;\n}\n.dv-render-overlay.dv-render-overlay-float {\n z-index: 999;\n}\n\n.dv-debug .dv-render-overlay {\n outline: 1px solid red;\n outline-offset: -1;\n}\n.dockview-svg {\n display: inline-block;\n fill: currentcolor;\n line-height: 1;\n stroke: currentcolor;\n stroke-width: 0;\n}\n.dockview-theme-dark {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n}\n\n.dockview-theme-light {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: white;\n --dv-tabs-and-actions-container-background-color: #f3f3f3;\n --dv-activegroup-visiblepanel-tab-background-color: white;\n --dv-activegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-inactivegroup-visiblepanel-tab-background-color: white;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-tab-divider-color: white;\n --dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-activegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.35);\n --dv-separator-border: rgba(128, 128, 128, 0.35);\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n}\n\n.dockview-theme-vs {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n --dv-tabs-and-actions-container-background-color: #2d2d30;\n --dv-tabs-and-actions-container-height: 20px;\n --dv-tabs-and-actions-container-font-size: 11px;\n --dv-activegroup-visiblepanel-tab-background-color: #007acc;\n --dv-inactivegroup-visiblepanel-tab-background-color: #3f3f46;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: white;\n --dv-inactivegroup-visiblepanel-tab-color: white;\n --dv-inactivegroup-hiddenpanel-tab-color: white;\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-activegroup-hiddenpanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n}\n\n.dockview-theme-abyss {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #000c18;\n --dv-tabs-and-actions-container-background-color: #1c1c2a;\n --dv-activegroup-visiblepanel-tab-background-color: #000c18;\n --dv-activegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #000c18;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-tab-divider-color: #2b2b4a;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.25);\n --dv-separator-border: #2b2b4a;\n --dv-paneview-header-border-color: #2b2b4a;\n --dv-paneview-active-outline-color: #596f99;\n}\n\n.dockview-theme-dracula {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #282a36;\n --dv-tabs-and-actions-container-background-color: #191a21;\n --dv-activegroup-visiblepanel-tab-background-color: #282a36;\n --dv-activegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #282a36;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-tab-divider-color: #191a21;\n --dv-activegroup-visiblepanel-tab-color: rgb(248, 248, 242);\n --dv-activegroup-hiddenpanel-tab-color: rgb(98, 114, 164);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(248, 248, 242, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(98, 114, 164, 0.5);\n --dv-separator-border: #bd93f9;\n --dv-paneview-header-border-color: #bd93f9;\n --dv-paneview-active-outline-color: #6272a4;\n}\n.dockview-theme-dracula .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab::after {\n position: absolute;\n left: 0px;\n top: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #94527e;\n z-index: 999;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #5e3d5a;\n z-index: 999;\n}\n\n.dockview-theme-replit {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #ebeced;\n --dv-tabs-and-actions-container-background-color: #fcfcfc;\n --dv-activegroup-visiblepanel-tab-background-color: #f0f1f2;\n --dv-activegroup-hiddenpanel-tab-background-color: ##fcfcfc;\n --dv-inactivegroup-visiblepanel-tab-background-color: #f0f1f2;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #fcfcfc;\n --dv-tab-divider-color: transparent;\n --dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-activegroup-hiddenpanel-tab-color: rgb(51, 51, 51);\n --dv-inactivegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-inactivegroup-hiddenpanel-tab-color: rgb(51, 51, 51);\n --dv-separator-border: transparent;\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n --dv-background-color: #ebeced;\n --dv-separator-handle-background-color: #cfd1d3;\n --dv-separator-handle-hover-background-color: #babbbb;\n}\n.dockview-theme-replit.dv-dockview {\n padding: 3px;\n}\n.dockview-theme-replit .view:has(> .groupview) {\n padding: 3px;\n}\n.dockview-theme-replit .dv-resize-container:has(> .groupview) {\n border-radius: 8px;\n}\n.dockview-theme-replit .groupview {\n overflow: hidden;\n border-radius: 10px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container {\n border-bottom: 1px solid rgba(128, 128, 128, 0.35);\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab {\n margin: 4px;\n border-radius: 8px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab .dockview-svg {\n height: 8px;\n width: 8px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab:hover {\n background-color: #e4e5e6 !important;\n}\n.dockview-theme-replit .groupview .content-container {\n background-color: #fcfcfc;\n}\n.dockview-theme-replit .groupview.active-group {\n border: 1px solid rgba(128, 128, 128, 0.35);\n}\n.dockview-theme-replit .groupview.inactive-group {\n border: 1px solid transparent;\n}\n.dockview-theme-replit .vertical > .sash-container > .sash::after {\n content: \"\";\n height: 4px;\n width: 40px;\n border-radius: 2px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--dv-separator-handle-background-color);\n position: absolute;\n}\n.dockview-theme-replit .vertical > .sash-container > .sash:hover::after {\n background-color: var(--dv-separator-handle-hover-background-color);\n}\n.dockview-theme-replit .horizontal > .sash-container > .sash::after {\n content: \"\";\n height: 40px;\n width: 4px;\n border-radius: 2px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--dv-separator-handle-background-color);\n position: absolute;\n}\n.dockview-theme-replit .horizontal > .sash-container > .sash:hover::after {\n background-color: var(--dv-separator-handle-hover-background-color);\n}\n.drop-target {\n position: relative;\n}\n.drop-target > .drop-target-dropzone {\n position: absolute;\n left: 0px;\n top: 0px;\n height: 100%;\n width: 100%;\n z-index: 1000;\n pointer-events: none;\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection {\n position: relative;\n box-sizing: border-box;\n height: 100%;\n width: 100%;\n background-color: var(--dv-drag-over-background-color);\n transition: top 70ms ease-out, left 70ms ease-out, width 70ms ease-out, height 70ms ease-out, opacity 0.15s ease-out;\n will-change: transform;\n pointer-events: none;\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.dv-drop-target-top.dv-drop-target-small-vertical {\n border-top: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.dv-drop-target-bottom.dv-drop-target-small-vertical {\n border-bottom: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.dv-drop-target-left.dv-drop-target-small-horizontal {\n border-left: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.dv-drop-target-right.dv-drop-target-small-horizontal {\n border-right: 1px solid var(--dv-drag-over-border-color);\n}\n.dv-debug .dv-resize-container .dv-resize-handle-top {\n background-color: red;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-bottom {\n background-color: green;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-left {\n background-color: yellow;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-right {\n background-color: blue;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-topleft,\n.dv-debug .dv-resize-container .dv-resize-handle-topright,\n.dv-debug .dv-resize-container .dv-resize-handle-bottomleft,\n.dv-debug .dv-resize-container .dv-resize-handle-bottomright {\n background-color: cyan;\n}\n\n.dv-resize-container {\n position: absolute;\n z-index: 997;\n border: 1px solid var(--dv-tab-divider-color);\n box-shadow: var(--dv-floating-box-shadow);\n}\n.dv-resize-container.dv-bring-to-front {\n z-index: 998;\n}\n.dv-resize-container.dv-resize-container-dragging {\n opacity: 0.5;\n}\n.dv-resize-container .dv-resize-handle-top {\n height: 4px;\n width: calc(100% - 8px);\n left: 4px;\n top: -2px;\n z-index: 999;\n position: absolute;\n cursor: ns-resize;\n}\n.dv-resize-container .dv-resize-handle-bottom {\n height: 4px;\n width: calc(100% - 8px);\n left: 4px;\n bottom: -2px;\n z-index: 999;\n position: absolute;\n cursor: ns-resize;\n}\n.dv-resize-container .dv-resize-handle-left {\n height: calc(100% - 8px);\n width: 4px;\n left: -2px;\n top: 4px;\n z-index: 999;\n position: absolute;\n cursor: ew-resize;\n}\n.dv-resize-container .dv-resize-handle-right {\n height: calc(100% - 8px);\n width: 4px;\n right: -2px;\n top: 4px;\n z-index: 999;\n position: absolute;\n cursor: ew-resize;\n}\n.dv-resize-container .dv-resize-handle-topleft {\n height: 4px;\n width: 4px;\n top: -2px;\n left: -2px;\n z-index: 999;\n position: absolute;\n cursor: nw-resize;\n}\n.dv-resize-container .dv-resize-handle-topright {\n height: 4px;\n width: 4px;\n right: -2px;\n top: -2px;\n z-index: 999;\n position: absolute;\n cursor: ne-resize;\n}\n.dv-resize-container .dv-resize-handle-bottomleft {\n height: 4px;\n width: 4px;\n left: -2px;\n bottom: -2px;\n z-index: 999;\n position: absolute;\n cursor: sw-resize;\n}\n.dv-resize-container .dv-resize-handle-bottomright {\n height: 4px;\n width: 4px;\n right: -2px;\n bottom: -2px;\n z-index: 999;\n position: absolute;\n cursor: se-resize;\n}\n.dv-dockview {\n position: relative;\n background-color: var(--dv-group-view-background-color);\n}\n.dv-dockview .dv-watermark-container {\n position: absolute;\n top: 0px;\n left: 0px;\n height: 100%;\n width: 100%;\n z-index: 1;\n}\n.dv-dockview .dv-overlay-render-container {\n position: relative;\n}\n\n.groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.inactive-tab {\n background-color: var(--dv-activegroup-hiddenpanel-tab-background-color);\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n background-color: var(--dv-inactivegroup-visiblepanel-tab-background-color);\n color: var(--dv-inactivegroup-visiblepanel-tab-color);\n}\n.groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.inactive-tab {\n background-color: var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n color: var(--dv-inactivegroup-hiddenpanel-tab-color);\n}\n\n/**\n * when a tab is dragged we lose the above stylings because they are conditional on parent elements\n * therefore we also set some stylings for the dragging event\n **/\n.tab.dv-tab-dragging {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.groupview {\n display: flex;\n flex-direction: column;\n height: 100%;\n background-color: var(--dv-group-view-background-color);\n overflow: hidden;\n}\n.groupview:focus {\n outline: none;\n}\n.groupview.empty > .tabs-and-actions-container {\n display: none;\n}\n.groupview > .content-container {\n flex-grow: 1;\n min-height: 0;\n outline: none;\n}\n.grid-view,\n.branch-node {\n height: 100%;\n width: 100%;\n}\n.pane-container {\n height: 100%;\n width: 100%;\n}\n.pane-container.animated .view {\n transition-duration: 0.15s;\n transition-timing-function: ease-out;\n}\n.pane-container .view {\n overflow: hidden;\n display: flex;\n flex-direction: column;\n padding: 0px !important;\n}\n.pane-container .view:not(:first-child)::before {\n background-color: transparent !important;\n}\n.pane-container .view:not(:first-child) .pane > .pane-header {\n border-top: 1px solid var(--dv-paneview-header-border-color);\n}\n.pane-container .view .default-header {\n background-color: var(--dv-group-view-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n display: flex;\n padding: 0px 8px;\n cursor: pointer;\n}\n.pane-container .view .default-header .dockview-pane-header-icon {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.pane-container .view .default-header > span {\n padding-left: 8px;\n flex-grow: 1;\n}\n.pane-container:first-of-type > .pane > .pane-header {\n border-top: none !important;\n}\n.pane-container .pane {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n height: 100%;\n}\n.pane-container .pane .pane-header {\n box-sizing: border-box;\n user-select: none;\n position: relative;\n outline: none;\n}\n.pane-container .pane .pane-header.pane-draggable {\n cursor: pointer;\n}\n.pane-container .pane .pane-header:focus:before, .pane-container .pane .pane-header:focus-within:before {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 5;\n content: \"\";\n pointer-events: none;\n outline: 1px solid;\n outline-width: -1px;\n outline-style: solid;\n outline-offset: -1px;\n outline-color: var(--dv-paneview-active-outline-color);\n}\n.pane-container .pane .pane-body {\n overflow-y: auto;\n overflow-x: hidden;\n flex-grow: 1;\n position: relative;\n outline: none;\n}\n.pane-container .pane .pane-body:focus:before, .pane-container .pane .pane-body:focus-within:before {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 5;\n content: \"\";\n pointer-events: none;\n outline: 1px solid;\n outline-width: -1px;\n outline-style: solid;\n outline-offset: -1px;\n outline-color: var(--dv-paneview-active-outline-color);\n}\n.dv-debug .split-view-container .sash-container .sash.enabled {\n background-color: black;\n}\n.dv-debug .split-view-container .sash-container .sash.disabled {\n background-color: orange;\n}\n.dv-debug .split-view-container .sash-container .sash.maximum {\n background-color: green;\n}\n.dv-debug .split-view-container .sash-container .sash.minimum {\n background-color: red;\n}\n\n.split-view-container {\n position: relative;\n overflow: hidden;\n height: 100%;\n width: 100%;\n}\n.split-view-container.animation .view,\n.split-view-container.animation .sash {\n transition-duration: 0.15s;\n transition-timing-function: ease-out;\n}\n.split-view-container.horizontal {\n height: 100%;\n}\n.split-view-container.horizontal > .sash-container > .sash {\n height: 100%;\n width: 4px;\n}\n.split-view-container.horizontal > .sash-container > .sash.enabled {\n cursor: ew-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.horizontal > .sash-container > .sash.maximum {\n cursor: w-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.minimum {\n cursor: e-resize;\n}\n.split-view-container.horizontal > .view-container > .view:not(:first-child)::before {\n height: 100%;\n width: 1px;\n}\n.split-view-container.vertical {\n width: 100%;\n}\n.split-view-container.vertical > .sash-container > .sash {\n width: 100%;\n height: 4px;\n}\n.split-view-container.vertical > .sash-container > .sash.enabled {\n cursor: ns-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.vertical > .sash-container > .sash.maximum {\n cursor: n-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.minimum {\n cursor: s-resize;\n}\n.split-view-container.vertical > .view-container > .view {\n width: 100%;\n}\n.split-view-container.vertical > .view-container > .view:not(:first-child)::before {\n height: 1px;\n width: 100%;\n}\n.split-view-container .sash-container {\n height: 100%;\n width: 100%;\n position: absolute;\n}\n.split-view-container .sash-container .sash {\n position: absolute;\n z-index: 99;\n outline: none;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n touch-action: none;\n}\n.split-view-container .sash-container .sash:not(.disabled):active {\n transition: background-color 0.1s ease-in-out;\n background-color: var(--dv-active-sash-color, transparent);\n}\n.split-view-container .sash-container .sash:not(.disabled):hover {\n background-color: var(--dv-active-sash-color, transparent);\n transition: background-color 0.1s ease-in-out;\n transition-delay: 0.5s;\n}\n.split-view-container .view-container {\n position: relative;\n height: 100%;\n width: 100%;\n background-color: var(--dv-background-color);\n}\n.split-view-container .view-container .view {\n height: 100%;\n box-sizing: border-box;\n overflow: auto;\n position: absolute;\n}\n.split-view-container.separator-border .view:not(:first-child)::before {\n content: \" \";\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n background-color: var(--dv-separator-border);\n}\n.dv-dragged {\n transform: translate3d(0px, 0px, 0px); /* forces tab to be drawn on a separate layer (see https://github.com/microsoft/vscode/issues/18733) */\n}\n\n.tab {\n flex-shrink: 0;\n}\n.tab:focus-within, .tab:focus {\n position: relative;\n}\n.tab:focus-within::after, .tab:focus::after {\n position: absolute;\n content: \"\";\n height: 100%;\n width: 100%;\n top: 0px;\n left: 0px;\n pointer-events: none;\n outline: 1px solid var(--dv-tab-divider-color) !important;\n outline-offset: -1px;\n z-index: 5;\n}\n.tab.dv-tab-dragging .tab-action {\n background-color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.tab.active-tab > .default-tab .tab-action {\n visibility: visible;\n}\n.tab.inactive-tab > .default-tab .tab-action {\n visibility: hidden;\n}\n.tab.inactive-tab > .default-tab:hover .tab-action {\n visibility: visible;\n}\n.tab .default-tab {\n position: relative;\n height: 100%;\n display: flex;\n min-width: 80px;\n align-items: center;\n padding: 0px 8px;\n white-space: nowrap;\n text-overflow: elipsis;\n}\n.tab .default-tab .tab-content {\n padding: 0px 8px;\n flex-grow: 1;\n}\n.tab .default-tab .action-container {\n text-align: right;\n display: flex;\n}\n.tab .default-tab .action-container .tab-list {\n display: flex;\n padding: 0px;\n margin: 0px;\n justify-content: flex-end;\n}\n.tab .default-tab .action-container .tab-list .tab-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n}\n.tab .default-tab .action-container .tab-list .tab-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}\n.tabs-and-actions-container {\n display: flex;\n background-color: var(--dv-tabs-and-actions-container-background-color);\n flex-shrink: 0;\n box-sizing: border-box;\n height: var(--dv-tabs-and-actions-container-height);\n font-size: var(--dv-tabs-and-actions-container-font-size);\n}\n.tabs-and-actions-container.hidden {\n display: none;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .tabs-container {\n flex-grow: 1;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .tabs-container .tab {\n flex-grow: 1;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .void-container {\n flex-grow: 0;\n}\n.tabs-and-actions-container .void-container {\n display: flex;\n flex-grow: 1;\n cursor: grab;\n}\n.tabs-and-actions-container .tabs-container {\n display: flex;\n overflow-x: overlay;\n overflow-y: hidden;\n scrollbar-width: thin;\n /* Track */\n /* Handle */\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar {\n height: 3px;\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar-track {\n background: transparent;\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar-thumb {\n background: var(--dv-tabs-container-scrollbar-color);\n}\n.tabs-and-actions-container .tabs-container .tab {\n -webkit-user-drag: element;\n outline: none;\n min-width: 75px;\n cursor: pointer;\n position: relative;\n box-sizing: border-box;\n}\n.tabs-and-actions-container .tabs-container .tab:not(:first-child)::before {\n content: \" \";\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n background-color: var(--dv-tab-divider-color);\n width: 1px;\n height: 100%;\n}\n.watermark {\n display: flex;\n width: 100%;\n}\n.watermark.has-actions .watermark-title .actions-container {\n display: none;\n}\n.watermark .watermark-title {\n height: 35px;\n width: 100%;\n display: flex;\n}\n.watermark .watermark-content {\n flex-grow: 1;\n}\n.watermark .actions-container {\n display: flex;\n align-items: center;\n padding: 0px 8px;\n}\n.watermark .actions-container .close-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n cursor: pointer;\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.watermark .actions-container .close-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}";
37
37
  styleInject(css_248z);
38
38
 
39
39
  class TransferObject {
@@ -262,6 +262,14 @@ var Disposable;
262
262
  // noop
263
263
  },
264
264
  };
265
+ function from(func) {
266
+ return {
267
+ dispose: () => {
268
+ func();
269
+ },
270
+ };
271
+ }
272
+ Disposable.from = from;
265
273
  })(Disposable || (Disposable = {}));
266
274
  class CompositeDisposable {
267
275
  get isDisposed() {
@@ -446,6 +454,61 @@ function quasiPreventDefault(event) {
446
454
  function quasiDefaultPrevented(event) {
447
455
  return event[QUASI_PREVENT_DEFAULT_KEY];
448
456
  }
457
+ function addStyles(document, styleSheetList) {
458
+ const styleSheets = Array.from(styleSheetList);
459
+ for (const styleSheet of styleSheets) {
460
+ if (styleSheet.href) {
461
+ const link = document.createElement('link');
462
+ link.href = styleSheet.href;
463
+ link.type = styleSheet.type;
464
+ link.rel = 'stylesheet';
465
+ document.head.appendChild(link);
466
+ }
467
+ let cssTexts = [];
468
+ try {
469
+ if (styleSheet.cssRules) {
470
+ cssTexts = Array.from(styleSheet.cssRules).map((rule) => rule.cssText);
471
+ }
472
+ }
473
+ catch (err) {
474
+ // security errors (lack of permissions), ignore
475
+ }
476
+ for (const rule of cssTexts) {
477
+ const style = document.createElement('style');
478
+ style.appendChild(document.createTextNode(rule));
479
+ document.head.appendChild(style);
480
+ }
481
+ }
482
+ }
483
+ function getDomNodePagePosition(domNode) {
484
+ const { left, top, width, height } = domNode.getBoundingClientRect();
485
+ return {
486
+ left: left + window.scrollX,
487
+ top: top + window.scrollY,
488
+ width: width,
489
+ height: height,
490
+ };
491
+ }
492
+ /**
493
+ * Check whether an element is in the DOM (including the Shadow DOM)
494
+ * @see https://terodox.tech/how-to-tell-if-an-element-is-in-the-dom-including-the-shadow-dom/
495
+ */
496
+ function isInDocument(element) {
497
+ let currentElement = element;
498
+ while (currentElement === null || currentElement === void 0 ? void 0 : currentElement.parentNode) {
499
+ if (currentElement.parentNode === document) {
500
+ return true;
501
+ }
502
+ else if (currentElement.parentNode instanceof DocumentFragment) {
503
+ // handle shadow DOMs
504
+ currentElement = currentElement.parentNode.host;
505
+ }
506
+ else {
507
+ currentElement = currentElement.parentNode;
508
+ }
509
+ }
510
+ return false;
511
+ }
449
512
 
450
513
  function tail(arr) {
451
514
  if (arr.length === 0) {
@@ -643,6 +706,9 @@ exports.Sizing = void 0;
643
706
  Sizing.Invisible = Invisible;
644
707
  })(exports.Sizing || (exports.Sizing = {}));
645
708
  class Splitview {
709
+ get contentSize() {
710
+ return this._contentSize;
711
+ }
646
712
  get size() {
647
713
  return this._size;
648
714
  }
@@ -708,7 +774,7 @@ class Splitview {
708
774
  this.sashes = [];
709
775
  this._size = 0;
710
776
  this._orthogonalSize = 0;
711
- this.contentSize = 0;
777
+ this._contentSize = 0;
712
778
  this._proportions = undefined;
713
779
  this._startSnappingEnabled = true;
714
780
  this._endSnappingEnabled = true;
@@ -827,7 +893,7 @@ class Splitview {
827
893
  );
828
894
  });
829
895
  // Initialize content size and proportions for first layout
830
- this.contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
896
+ this._contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
831
897
  this.saveProportions();
832
898
  }
833
899
  }
@@ -1101,7 +1167,7 @@ class Splitview {
1101
1167
  this.addView(view, sizing, to);
1102
1168
  }
1103
1169
  layout(size, orthogonalSize) {
1104
- const previousSize = Math.max(this.size, this.contentSize);
1170
+ const previousSize = Math.max(this.size, this._contentSize);
1105
1171
  this.size = size;
1106
1172
  this.orthogonalSize = orthogonalSize;
1107
1173
  if (!this.proportions) {
@@ -1111,9 +1177,23 @@ class Splitview {
1111
1177
  this.resize(this.viewItems.length - 1, size - previousSize, undefined, lowPriorityIndexes, highPriorityIndexes);
1112
1178
  }
1113
1179
  else {
1180
+ let total = 0;
1114
1181
  for (let i = 0; i < this.viewItems.length; i++) {
1115
1182
  const item = this.viewItems[i];
1116
- item.size = clamp(Math.round(this.proportions[i] * size), item.minimumSize, item.maximumSize);
1183
+ const proportion = this.proportions[i];
1184
+ if (typeof proportion === 'number') {
1185
+ total += proportion;
1186
+ }
1187
+ else {
1188
+ size -= item.size;
1189
+ }
1190
+ }
1191
+ for (let i = 0; i < this.viewItems.length; i++) {
1192
+ const item = this.viewItems[i];
1193
+ const proportion = this.proportions[i];
1194
+ if (typeof proportion === 'number' && total > 0) {
1195
+ item.size = clamp(Math.round((proportion * size) / total), item.minimumSize, item.maximumSize);
1196
+ }
1117
1197
  }
1118
1198
  }
1119
1199
  this.distributeEmptySpace();
@@ -1150,12 +1230,12 @@ class Splitview {
1150
1230
  }
1151
1231
  }
1152
1232
  saveProportions() {
1153
- if (this.proportionalLayout && this.contentSize > 0) {
1154
- this._proportions = this.viewItems.map((i) => i.size / this.contentSize);
1233
+ if (this.proportionalLayout && this._contentSize > 0) {
1234
+ this._proportions = this.viewItems.map((i) => i.visible ? i.size / this._contentSize : undefined);
1155
1235
  }
1156
1236
  }
1157
1237
  layoutViews() {
1158
- this.contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
1238
+ this._contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
1159
1239
  let sum = 0;
1160
1240
  const x = [];
1161
1241
  this.updateSashEnablement();
@@ -1249,7 +1329,7 @@ class Splitview {
1249
1329
  }
1250
1330
  else if (snappedAfter &&
1251
1331
  collapsesDown[index] &&
1252
- (position < this.contentSize || this.endSnappingEnabled)) {
1332
+ (position < this._contentSize || this.endSnappingEnabled)) {
1253
1333
  this.updateSash(sash, exports.SashState.MAXIMUM);
1254
1334
  }
1255
1335
  else {
@@ -1538,7 +1618,6 @@ class LeafNode {
1538
1618
  setVisible(visible) {
1539
1619
  if (this.view.setVisible) {
1540
1620
  this.view.setVisible(visible);
1541
- this._onDidChange.fire({});
1542
1621
  }
1543
1622
  }
1544
1623
  layout(size, orthogonalSize) {
@@ -1570,10 +1649,14 @@ class BranchNode extends CompositeDisposable {
1570
1649
  get minimumSize() {
1571
1650
  return this.children.length === 0
1572
1651
  ? 0
1573
- : Math.max(...this.children.map((c) => c.minimumOrthogonalSize));
1652
+ : Math.max(...this.children.map((c, index) => this.splitview.isViewVisible(index)
1653
+ ? c.minimumOrthogonalSize
1654
+ : 0));
1574
1655
  }
1575
1656
  get maximumSize() {
1576
- return Math.min(...this.children.map((c) => c.maximumOrthogonalSize));
1657
+ return Math.min(...this.children.map((c, index) => this.splitview.isViewVisible(index)
1658
+ ? c.maximumOrthogonalSize
1659
+ : Number.POSITIVE_INFINITY));
1577
1660
  }
1578
1661
  get minimumOrthogonalSize() {
1579
1662
  return this.splitview.minimumSize;
@@ -1631,6 +1714,8 @@ class BranchNode extends CompositeDisposable {
1631
1714
  this.children = [];
1632
1715
  this._onDidChange = new Emitter();
1633
1716
  this.onDidChange = this._onDidChange.event;
1717
+ this._onDidVisibilityChange = new Emitter();
1718
+ this.onDidVisibilityChange = this._onDidVisibilityChange.event;
1634
1719
  this._orthogonalSize = orthogonalSize;
1635
1720
  this._size = size;
1636
1721
  this.element = document.createElement('div');
@@ -1665,7 +1750,7 @@ class BranchNode extends CompositeDisposable {
1665
1750
  styles,
1666
1751
  });
1667
1752
  }
1668
- this.addDisposables(this._onDidChange, this.splitview.onDidSashEnd(() => {
1753
+ this.addDisposables(this._onDidChange, this._onDidVisibilityChange, this.splitview.onDidSashEnd(() => {
1669
1754
  this._onDidChange.fire({});
1670
1755
  }));
1671
1756
  this.setupChildrenEvents();
@@ -1688,7 +1773,15 @@ class BranchNode extends CompositeDisposable {
1688
1773
  if (this.splitview.isViewVisible(index) === visible) {
1689
1774
  return;
1690
1775
  }
1776
+ const wereAllChildrenHidden = this.splitview.contentSize === 0;
1691
1777
  this.splitview.setViewVisible(index, visible);
1778
+ const areAllChildrenHidden = this.splitview.contentSize === 0;
1779
+ // If all children are hidden then the parent should hide the entire splitview
1780
+ // If the entire splitview is hidden then the parent should show the splitview when a child is shown
1781
+ if ((visible && wereAllChildrenHidden) ||
1782
+ (!visible && areAllChildrenHidden)) {
1783
+ this._onDidVisibilityChange.fire(visible);
1784
+ }
1692
1785
  }
1693
1786
  moveChild(from, to) {
1694
1787
  if (from === to) {
@@ -1752,13 +1845,20 @@ class BranchNode extends CompositeDisposable {
1752
1845
  }
1753
1846
  setupChildrenEvents() {
1754
1847
  this._childrenDisposable.dispose();
1755
- this._childrenDisposable = exports.DockviewEvent.any(...this.children.map((c) => c.onDidChange))((e) => {
1848
+ this._childrenDisposable = new CompositeDisposable(exports.DockviewEvent.any(...this.children.map((c) => c.onDidChange))((e) => {
1756
1849
  /**
1757
1850
  * indicate a change has occured to allows any re-rendering but don't bubble
1758
1851
  * event because that was specific to this branch
1759
1852
  */
1760
1853
  this._onDidChange.fire({ size: e.orthogonalSize });
1761
- });
1854
+ }), ...this.children.map((c, i) => {
1855
+ if (c instanceof BranchNode) {
1856
+ return c.onDidVisibilityChange((visible) => {
1857
+ this.setChildVisible(i, visible);
1858
+ });
1859
+ }
1860
+ return Disposable.NONE;
1861
+ }));
1762
1862
  }
1763
1863
  dispose() {
1764
1864
  this._childrenDisposable.dispose();
@@ -1919,7 +2019,69 @@ class Gridview {
1919
2019
  get maximumHeight() {
1920
2020
  return this.root.maximumHeight;
1921
2021
  }
2022
+ maximizedView() {
2023
+ var _a;
2024
+ return (_a = this._maximizedNode) === null || _a === void 0 ? void 0 : _a.view;
2025
+ }
2026
+ hasMaximizedView() {
2027
+ return this._maximizedNode !== undefined;
2028
+ }
2029
+ maximizeView(view) {
2030
+ const location = getGridLocation(view.element);
2031
+ const [_, node] = this.getNode(location);
2032
+ if (!(node instanceof LeafNode)) {
2033
+ return;
2034
+ }
2035
+ if (this._maximizedNode === node) {
2036
+ return;
2037
+ }
2038
+ if (this.hasMaximizedView()) {
2039
+ this.exitMaximizedView();
2040
+ }
2041
+ function hideAllViewsBut(parent, exclude) {
2042
+ for (let i = 0; i < parent.children.length; i++) {
2043
+ const child = parent.children[i];
2044
+ if (child instanceof LeafNode) {
2045
+ if (child !== exclude) {
2046
+ parent.setChildVisible(i, false);
2047
+ }
2048
+ }
2049
+ else {
2050
+ hideAllViewsBut(child, exclude);
2051
+ }
2052
+ }
2053
+ }
2054
+ hideAllViewsBut(this.root, node);
2055
+ this._maximizedNode = node;
2056
+ this._onDidMaxmizedNodeChange.fire();
2057
+ }
2058
+ exitMaximizedView() {
2059
+ if (!this._maximizedNode) {
2060
+ return;
2061
+ }
2062
+ function showViewsInReverseOrder(parent) {
2063
+ for (let index = parent.children.length - 1; index >= 0; index--) {
2064
+ const child = parent.children[index];
2065
+ if (child instanceof LeafNode) {
2066
+ parent.setChildVisible(index, true);
2067
+ }
2068
+ else {
2069
+ showViewsInReverseOrder(child);
2070
+ }
2071
+ }
2072
+ }
2073
+ showViewsInReverseOrder(this.root);
2074
+ this._maximizedNode = undefined;
2075
+ this._onDidMaxmizedNodeChange.fire();
2076
+ }
1922
2077
  serialize() {
2078
+ if (this.hasMaximizedView()) {
2079
+ /**
2080
+ * do not persist maximized view state but we must first exit any maximized views
2081
+ * before serialization to ensure the correct dimensions are persisted
2082
+ */
2083
+ this.exitMaximizedView();
2084
+ }
1923
2085
  const root = serializeBranchNode(this.getView(), this.orientation);
1924
2086
  return {
1925
2087
  root,
@@ -1931,7 +2093,9 @@ class Gridview {
1931
2093
  dispose() {
1932
2094
  this.disposable.dispose();
1933
2095
  this._onDidChange.dispose();
2096
+ this._onDidMaxmizedNodeChange.dispose();
1934
2097
  this.root.dispose();
2098
+ this._maximizedNode = undefined;
1935
2099
  this.element.remove();
1936
2100
  }
1937
2101
  clear() {
@@ -1972,6 +2136,7 @@ class Gridview {
1972
2136
  const oldRoot = this._root;
1973
2137
  if (oldRoot) {
1974
2138
  oldRoot.dispose();
2139
+ this._maximizedNode = undefined;
1975
2140
  this.element.removeChild(oldRoot.element);
1976
2141
  }
1977
2142
  this._root = root;
@@ -2058,9 +2223,12 @@ class Gridview {
2058
2223
  constructor(proportionalLayout, styles, orientation) {
2059
2224
  this.proportionalLayout = proportionalLayout;
2060
2225
  this.styles = styles;
2226
+ this._maximizedNode = undefined;
2061
2227
  this.disposable = new MutableDisposable();
2062
2228
  this._onDidChange = new Emitter();
2063
2229
  this.onDidChange = this._onDidChange.event;
2230
+ this._onDidMaxmizedNodeChange = new Emitter();
2231
+ this.onDidMaxmizedNodeChange = this._onDidMaxmizedNodeChange.event;
2064
2232
  this.element = document.createElement('div');
2065
2233
  this.element.className = 'grid-view';
2066
2234
  this.root = new BranchNode(orientation, proportionalLayout, styles, 0, 0);
@@ -2074,6 +2242,9 @@ class Gridview {
2074
2242
  return parent.isChildVisible(index);
2075
2243
  }
2076
2244
  setViewVisible(location, visible) {
2245
+ if (this.hasMaximizedView()) {
2246
+ this.exitMaximizedView();
2247
+ }
2077
2248
  const [rest, index] = tail(location);
2078
2249
  const [, parent] = this.getNode(rest);
2079
2250
  if (!(parent instanceof BranchNode)) {
@@ -2082,6 +2253,9 @@ class Gridview {
2082
2253
  parent.setChildVisible(index, visible);
2083
2254
  }
2084
2255
  moveView(parentLocation, from, to) {
2256
+ if (this.hasMaximizedView()) {
2257
+ this.exitMaximizedView();
2258
+ }
2085
2259
  const [, parent] = this.getNode(parentLocation);
2086
2260
  if (!(parent instanceof BranchNode)) {
2087
2261
  throw new Error('Invalid location');
@@ -2089,6 +2263,9 @@ class Gridview {
2089
2263
  parent.moveChild(from, to);
2090
2264
  }
2091
2265
  addView(view, size, location) {
2266
+ if (this.hasMaximizedView()) {
2267
+ this.exitMaximizedView();
2268
+ }
2092
2269
  const [rest, index] = tail(location);
2093
2270
  const [pathToParent, parent] = this.getNode(rest);
2094
2271
  if (parent instanceof BranchNode) {
@@ -2121,6 +2298,9 @@ class Gridview {
2121
2298
  return this.removeView(location, sizing);
2122
2299
  }
2123
2300
  removeView(location, sizing) {
2301
+ if (this.hasMaximizedView()) {
2302
+ this.exitMaximizedView();
2303
+ }
2124
2304
  const [rest, index] = tail(location);
2125
2305
  const [pathToParent, parent] = this.getNode(rest);
2126
2306
  if (!(parent instanceof BranchNode)) {
@@ -2858,6 +3038,24 @@ class DockviewApi {
2858
3038
  moveToPrevious(options) {
2859
3039
  this.component.moveToPrevious(options);
2860
3040
  }
3041
+ maximizeGroup(panel) {
3042
+ this.component.maximizeGroup(panel.group);
3043
+ }
3044
+ hasMaximizedGroup() {
3045
+ return this.component.hasMaximizedGroup();
3046
+ }
3047
+ exitMaxmizedGroup() {
3048
+ this.component.exitMaximizedGroup();
3049
+ }
3050
+ get onDidMaxmizedGroupChange() {
3051
+ return this.component.onDidMaxmizedGroupChange;
3052
+ }
3053
+ /**
3054
+ * Add a popout group in a new Window
3055
+ */
3056
+ addPopoutGroup(item, options) {
3057
+ this.component.addPopoutGroup(item, options);
3058
+ }
2861
3059
  }
2862
3060
 
2863
3061
  class DragAndDropObserver extends CompositeDisposable {
@@ -2868,36 +3066,48 @@ class DragAndDropObserver extends CompositeDisposable {
2868
3066
  this.target = null;
2869
3067
  this.registerListeners();
2870
3068
  }
3069
+ onDragEnter(e) {
3070
+ this.target = e.target;
3071
+ this.callbacks.onDragEnter(e);
3072
+ }
3073
+ onDragOver(e) {
3074
+ e.preventDefault(); // needed so that the drop event fires (https://stackoverflow.com/questions/21339924/drop-event-not-firing-in-chrome)
3075
+ if (this.callbacks.onDragOver) {
3076
+ this.callbacks.onDragOver(e);
3077
+ }
3078
+ }
3079
+ onDragLeave(e) {
3080
+ if (this.target === e.target) {
3081
+ this.target = null;
3082
+ this.callbacks.onDragLeave(e);
3083
+ }
3084
+ }
3085
+ onDragEnd(e) {
3086
+ this.target = null;
3087
+ this.callbacks.onDragEnd(e);
3088
+ }
3089
+ onDrop(e) {
3090
+ this.callbacks.onDrop(e);
3091
+ }
2871
3092
  registerListeners() {
2872
3093
  this.addDisposables(addDisposableListener(this.element, 'dragenter', (e) => {
2873
- this.target = e.target;
2874
- this.callbacks.onDragEnter(e);
3094
+ this.onDragEnter(e);
2875
3095
  }, true));
2876
3096
  this.addDisposables(addDisposableListener(this.element, 'dragover', (e) => {
2877
- e.preventDefault(); // needed so that the drop event fires (https://stackoverflow.com/questions/21339924/drop-event-not-firing-in-chrome)
2878
- if (this.callbacks.onDragOver) {
2879
- this.callbacks.onDragOver(e);
2880
- }
3097
+ this.onDragOver(e);
2881
3098
  }, true));
2882
3099
  this.addDisposables(addDisposableListener(this.element, 'dragleave', (e) => {
2883
- if (this.target === e.target) {
2884
- this.target = null;
2885
- this.callbacks.onDragLeave(e);
2886
- }
3100
+ this.onDragLeave(e);
2887
3101
  }));
2888
3102
  this.addDisposables(addDisposableListener(this.element, 'dragend', (e) => {
2889
- this.target = null;
2890
- this.callbacks.onDragEnd(e);
3103
+ this.onDragEnd(e);
2891
3104
  }));
2892
3105
  this.addDisposables(addDisposableListener(this.element, 'drop', (e) => {
2893
- this.callbacks.onDrop(e);
3106
+ this.onDrop(e);
2894
3107
  }));
2895
3108
  }
2896
3109
  }
2897
3110
 
2898
- function numberOrFallback(maybeNumber, fallback) {
2899
- return typeof maybeNumber === 'number' ? maybeNumber : fallback;
2900
- }
2901
3111
  function directionToPosition(direction) {
2902
3112
  switch (direction) {
2903
3113
  case 'above':
@@ -2930,6 +3140,16 @@ function positionToDirection(position) {
2930
3140
  throw new Error(`invalid position '${position}'`);
2931
3141
  }
2932
3142
  }
3143
+ const DEFAULT_ACTIVATION_SIZE = {
3144
+ value: 20,
3145
+ type: 'percentage',
3146
+ };
3147
+ const DEFAULT_SIZE = {
3148
+ value: 50,
3149
+ type: 'percentage',
3150
+ };
3151
+ const SMALL_WIDTH_BOUNDARY = 100;
3152
+ const SMALL_HEIGHT_BOUNDARY = 100;
2933
3153
  class Droptarget extends CompositeDisposable {
2934
3154
  get state() {
2935
3155
  return this._state;
@@ -2942,7 +3162,7 @@ class Droptarget extends CompositeDisposable {
2942
3162
  this.onDrop = this._onDrop.event;
2943
3163
  // use a set to take advantage of #<set>.has
2944
3164
  this._acceptedTargetZonesSet = new Set(this.options.acceptedTargetZones);
2945
- this.addDisposables(this._onDrop, new DragAndDropObserver(this.element, {
3165
+ this.dnd = new DragAndDropObserver(this.element, {
2946
3166
  onDragEnter: () => undefined,
2947
3167
  onDragOver: (e) => {
2948
3168
  if (this._acceptedTargetZonesSet.size === 0) {
@@ -2990,7 +3210,7 @@ class Droptarget extends CompositeDisposable {
2990
3210
  this.element.append(this.targetElement);
2991
3211
  }
2992
3212
  this.toggleClasses(quadrant, width, height);
2993
- this.setState(quadrant);
3213
+ this._state = quadrant;
2994
3214
  },
2995
3215
  onDragLeave: () => {
2996
3216
  this.removeDropTarget();
@@ -3009,11 +3229,15 @@ class Droptarget extends CompositeDisposable {
3009
3229
  this._onDrop.fire({ position: state, nativeEvent: e });
3010
3230
  }
3011
3231
  },
3012
- }));
3232
+ });
3233
+ this.addDisposables(this._onDrop, this.dnd);
3013
3234
  }
3014
3235
  setTargetZones(acceptedTargetZones) {
3015
3236
  this._acceptedTargetZonesSet = new Set(acceptedTargetZones);
3016
3237
  }
3238
+ setOverlayModel(model) {
3239
+ this.options.overlayModel = model;
3240
+ }
3017
3241
  dispose() {
3018
3242
  this.removeDropTarget();
3019
3243
  super.dispose();
@@ -3025,19 +3249,19 @@ class Droptarget extends CompositeDisposable {
3025
3249
  event[Droptarget.USED_EVENT_ID] = true;
3026
3250
  }
3027
3251
  /**
3028
- * Check is the event has already been used by another instance od DropTarget
3252
+ * Check is the event has already been used by another instance of DropTarget
3029
3253
  */
3030
3254
  isAlreadyUsed(event) {
3031
3255
  const value = event[Droptarget.USED_EVENT_ID];
3032
3256
  return typeof value === 'boolean' && value;
3033
3257
  }
3034
3258
  toggleClasses(quadrant, width, height) {
3035
- var _a, _b, _c, _d;
3259
+ var _a, _b;
3036
3260
  if (!this.overlayElement) {
3037
3261
  return;
3038
3262
  }
3039
- const isSmallX = width < 100;
3040
- const isSmallY = height < 100;
3263
+ const isSmallX = width < SMALL_WIDTH_BOUNDARY;
3264
+ const isSmallY = height < SMALL_HEIGHT_BOUNDARY;
3041
3265
  const isLeft = quadrant === 'left';
3042
3266
  const isRight = quadrant === 'right';
3043
3267
  const isTop = quadrant === 'top';
@@ -3046,20 +3270,17 @@ class Droptarget extends CompositeDisposable {
3046
3270
  const leftClass = !isSmallX && isLeft;
3047
3271
  const topClass = !isSmallY && isTop;
3048
3272
  const bottomClass = !isSmallY && isBottom;
3049
- let size = 0.5;
3050
- if (((_b = (_a = this.options.overlayModel) === null || _a === void 0 ? void 0 : _a.size) === null || _b === void 0 ? void 0 : _b.type) === 'percentage') {
3051
- size = clamp(this.options.overlayModel.size.value, 0, 100) / 100;
3273
+ let size = 1;
3274
+ const sizeOptions = (_b = (_a = this.options.overlayModel) === null || _a === void 0 ? void 0 : _a.size) !== null && _b !== void 0 ? _b : DEFAULT_SIZE;
3275
+ if (sizeOptions.type === 'percentage') {
3276
+ size = clamp(sizeOptions.value, 0, 100) / 100;
3052
3277
  }
3053
- if (((_d = (_c = this.options.overlayModel) === null || _c === void 0 ? void 0 : _c.size) === null || _d === void 0 ? void 0 : _d.type) === 'pixels') {
3278
+ else {
3054
3279
  if (rightClass || leftClass) {
3055
- size =
3056
- clamp(0, this.options.overlayModel.size.value, width) /
3057
- width;
3280
+ size = clamp(0, sizeOptions.value, width) / width;
3058
3281
  }
3059
3282
  if (topClass || bottomClass) {
3060
- size =
3061
- clamp(0, this.options.overlayModel.size.value, height) /
3062
- height;
3283
+ size = clamp(0, sizeOptions.value, height) / height;
3063
3284
  }
3064
3285
  }
3065
3286
  const translate = (1 - size) / 2;
@@ -3081,39 +3302,22 @@ class Droptarget extends CompositeDisposable {
3081
3302
  transform = '';
3082
3303
  }
3083
3304
  this.overlayElement.style.transform = transform;
3084
- toggleClass(this.overlayElement, 'small-right', isSmallX && isRight);
3085
- toggleClass(this.overlayElement, 'small-left', isSmallX && isLeft);
3086
- toggleClass(this.overlayElement, 'small-top', isSmallY && isTop);
3087
- toggleClass(this.overlayElement, 'small-bottom', isSmallY && isBottom);
3088
- }
3089
- setState(quadrant) {
3090
- switch (quadrant) {
3091
- case 'top':
3092
- this._state = 'top';
3093
- break;
3094
- case 'left':
3095
- this._state = 'left';
3096
- break;
3097
- case 'bottom':
3098
- this._state = 'bottom';
3099
- break;
3100
- case 'right':
3101
- this._state = 'right';
3102
- break;
3103
- case 'center':
3104
- this._state = 'center';
3105
- break;
3106
- }
3305
+ toggleClass(this.overlayElement, 'dv-drop-target-small-vertical', isSmallY);
3306
+ toggleClass(this.overlayElement, 'dv-drop-target-small-horizontal', isSmallX);
3307
+ toggleClass(this.overlayElement, 'dv-drop-target-left', isLeft);
3308
+ toggleClass(this.overlayElement, 'dv-drop-target-right', isRight);
3309
+ toggleClass(this.overlayElement, 'dv-drop-target-top', isTop);
3310
+ toggleClass(this.overlayElement, 'dv-drop-target-bottom', isBottom);
3311
+ toggleClass(this.overlayElement, 'dv-drop-target-center', quadrant === 'center');
3107
3312
  }
3108
3313
  calculateQuadrant(overlayType, x, y, width, height) {
3109
- var _a, _b, _c, _d, _e, _f;
3110
- const isPercentage = ((_a = this.options.overlayModel) === null || _a === void 0 ? void 0 : _a.activationSize) === undefined ||
3111
- ((_c = (_b = this.options.overlayModel) === null || _b === void 0 ? void 0 : _b.activationSize) === null || _c === void 0 ? void 0 : _c.type) === 'percentage';
3112
- const value = numberOrFallback((_f = (_e = (_d = this.options) === null || _d === void 0 ? void 0 : _d.overlayModel) === null || _e === void 0 ? void 0 : _e.activationSize) === null || _f === void 0 ? void 0 : _f.value, 20);
3314
+ var _a, _b;
3315
+ const activationSizeOptions = (_b = (_a = this.options.overlayModel) === null || _a === void 0 ? void 0 : _a.activationSize) !== null && _b !== void 0 ? _b : DEFAULT_ACTIVATION_SIZE;
3316
+ const isPercentage = activationSizeOptions.type === 'percentage';
3113
3317
  if (isPercentage) {
3114
- return calculateQuadrantAsPercentage(overlayType, x, y, width, height, value);
3318
+ return calculateQuadrantAsPercentage(overlayType, x, y, width, height, activationSizeOptions.value);
3115
3319
  }
3116
- return calculateQuadrantAsPixels(overlayType, x, y, width, height, value);
3320
+ return calculateQuadrantAsPixels(overlayType, x, y, width, height, activationSizeOptions.value);
3117
3321
  }
3118
3322
  removeDropTarget() {
3119
3323
  if (this.targetElement) {
@@ -3165,12 +3369,22 @@ function calculateQuadrantAsPixels(overlayType, x, y, width, height, threshold)
3165
3369
  return 'center';
3166
3370
  }
3167
3371
 
3372
+ exports.DockviewDropTargets = void 0;
3373
+ (function (DockviewDropTargets) {
3374
+ DockviewDropTargets[DockviewDropTargets["Tab"] = 0] = "Tab";
3375
+ DockviewDropTargets[DockviewDropTargets["Panel"] = 1] = "Panel";
3376
+ DockviewDropTargets[DockviewDropTargets["TabContainer"] = 2] = "TabContainer";
3377
+ DockviewDropTargets[DockviewDropTargets["Edge"] = 3] = "Edge";
3378
+ })(exports.DockviewDropTargets || (exports.DockviewDropTargets = {}));
3379
+
3168
3380
  class ContentContainer extends CompositeDisposable {
3169
3381
  get element() {
3170
3382
  return this._element;
3171
3383
  }
3172
- constructor() {
3384
+ constructor(accessor, group) {
3173
3385
  super();
3386
+ this.accessor = accessor;
3387
+ this.group = group;
3174
3388
  this.disposable = new MutableDisposable();
3175
3389
  this._onDidFocus = new Emitter();
3176
3390
  this.onDidFocus = this._onDidFocus.event;
@@ -3180,11 +3394,38 @@ class ContentContainer extends CompositeDisposable {
3180
3394
  this._element.className = 'content-container';
3181
3395
  this._element.tabIndex = -1;
3182
3396
  this.addDisposables(this._onDidFocus, this._onDidBlur);
3183
- // for hosted containers
3184
- // 1) register a drop target on the host
3185
- // 2) register window dragStart events to disable pointer events
3186
- // 3) register dragEnd events
3187
- // 4) register mouseMove events (if no buttons are present we take this as a dragEnd event)
3397
+ this.dropTarget = new Droptarget(this.element, {
3398
+ acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
3399
+ canDisplayOverlay: (event, position) => {
3400
+ if (this.group.locked === 'no-drop-target' ||
3401
+ (this.group.locked && position === 'center')) {
3402
+ return false;
3403
+ }
3404
+ const data = getPanelData();
3405
+ if (!data &&
3406
+ event.shiftKey &&
3407
+ this.group.location !== 'floating') {
3408
+ return false;
3409
+ }
3410
+ if (data && data.viewId === this.accessor.id) {
3411
+ if (data.groupId === this.group.id) {
3412
+ if (position === 'center') {
3413
+ // don't allow to drop on self for center position
3414
+ return false;
3415
+ }
3416
+ if (data.panelId === null) {
3417
+ // don't allow group move to drop anywhere on self
3418
+ return false;
3419
+ }
3420
+ }
3421
+ const groupHasOnePanelAndIsActiveDragElement = this.group.panels.length === 1 &&
3422
+ data.groupId === this.group.id;
3423
+ return !groupHasOnePanelAndIsActiveDragElement;
3424
+ }
3425
+ return this.group.canDisplayOverlay(event, position, exports.DockviewDropTargets.Panel);
3426
+ },
3427
+ });
3428
+ this.addDisposables(this.dropTarget);
3188
3429
  }
3189
3430
  show() {
3190
3431
  this.element.style.display = '';
@@ -3192,23 +3433,43 @@ class ContentContainer extends CompositeDisposable {
3192
3433
  hide() {
3193
3434
  this.element.style.display = 'none';
3194
3435
  }
3195
- openPanel(panel) {
3196
- var _a;
3197
- if (this.panel === panel) {
3198
- return;
3199
- }
3200
- if (this.panel) {
3201
- if ((_a = this.panel.view) === null || _a === void 0 ? void 0 : _a.content) {
3202
- this._element.removeChild(this.panel.view.content.element);
3203
- }
3204
- this.panel = undefined;
3436
+ renderPanel(panel, options = { asActive: true }) {
3437
+ const doRender = options.asActive ||
3438
+ (this.panel && this.group.isPanelActive(this.panel));
3439
+ if (this.panel &&
3440
+ this.panel.view.content.element.parentElement === this._element) {
3441
+ /**
3442
+ * If the currently attached panel is mounted directly to the content then remove it
3443
+ */
3444
+ this._element.removeChild(this.panel.view.content.element);
3205
3445
  }
3206
3446
  this.panel = panel;
3207
- const disposable = new CompositeDisposable();
3208
- if (this.panel.view) {
3209
- const _onDidFocus = this.panel.view.content.onDidFocus;
3210
- const _onDidBlur = this.panel.view.content.onDidBlur;
3211
- const focusTracker = trackFocus(this._element);
3447
+ let container;
3448
+ switch (panel.api.renderer) {
3449
+ case 'onlyWhenVisibile':
3450
+ this.accessor.overlayRenderContainer.detatch(panel);
3451
+ if (this.panel) {
3452
+ if (doRender) {
3453
+ this._element.appendChild(this.panel.view.content.element);
3454
+ }
3455
+ }
3456
+ container = this._element;
3457
+ break;
3458
+ case 'always':
3459
+ if (panel.view.content.element.parentElement === this._element) {
3460
+ this._element.removeChild(panel.view.content.element);
3461
+ }
3462
+ container = this.accessor.overlayRenderContainer.attach({
3463
+ panel,
3464
+ referenceContainer: this,
3465
+ });
3466
+ break;
3467
+ }
3468
+ if (doRender) {
3469
+ const _onDidFocus = panel.view.content.onDidFocus;
3470
+ const _onDidBlur = panel.view.content.onDidBlur;
3471
+ const focusTracker = trackFocus(container);
3472
+ const disposable = new CompositeDisposable();
3212
3473
  disposable.addDisposables(focusTracker, focusTracker.onDidFocus(() => this._onDidFocus.fire()), focusTracker.onDidBlur(() => this._onDidBlur.fire()));
3213
3474
  if (_onDidFocus) {
3214
3475
  disposable.addDisposables(_onDidFocus(() => this._onDidFocus.fire()));
@@ -3216,17 +3477,23 @@ class ContentContainer extends CompositeDisposable {
3216
3477
  if (_onDidBlur) {
3217
3478
  disposable.addDisposables(_onDidBlur(() => this._onDidBlur.fire()));
3218
3479
  }
3219
- this._element.appendChild(this.panel.view.content.element);
3480
+ this.disposable.value = disposable;
3481
+ }
3482
+ }
3483
+ openPanel(panel) {
3484
+ if (this.panel === panel) {
3485
+ return;
3220
3486
  }
3221
- this.disposable.value = disposable;
3487
+ this.renderPanel(panel);
3222
3488
  }
3223
3489
  layout(_width, _height) {
3224
3490
  // noop
3225
3491
  }
3226
3492
  closePanel() {
3227
- var _a, _b, _c;
3228
- if ((_c = (_b = (_a = this.panel) === null || _a === void 0 ? void 0 : _a.view) === null || _b === void 0 ? void 0 : _b.content) === null || _c === void 0 ? void 0 : _c.element) {
3229
- this._element.removeChild(this.panel.view.content.element);
3493
+ if (this.panel) {
3494
+ if (this.accessor.options.defaultRenderer === 'onlyWhenVisibile') {
3495
+ this._element.removeChild(this.panel.view.content.element);
3496
+ }
3230
3497
  this.panel = undefined;
3231
3498
  }
3232
3499
  }
@@ -3236,14 +3503,6 @@ class ContentContainer extends CompositeDisposable {
3236
3503
  }
3237
3504
  }
3238
3505
 
3239
- exports.DockviewDropTargets = void 0;
3240
- (function (DockviewDropTargets) {
3241
- DockviewDropTargets[DockviewDropTargets["Tab"] = 0] = "Tab";
3242
- DockviewDropTargets[DockviewDropTargets["Panel"] = 1] = "Panel";
3243
- DockviewDropTargets[DockviewDropTargets["TabContainer"] = 2] = "TabContainer";
3244
- DockviewDropTargets[DockviewDropTargets["Edge"] = 3] = "Edge";
3245
- })(exports.DockviewDropTargets || (exports.DockviewDropTargets = {}));
3246
-
3247
3506
  class DragHandler extends CompositeDisposable {
3248
3507
  constructor(el) {
3249
3508
  super();
@@ -3418,7 +3677,7 @@ class GroupDragHandler extends DragHandler {
3418
3677
  }, true));
3419
3678
  }
3420
3679
  isCancelled(_event) {
3421
- if (this.group.api.isFloating && !_event.shiftKey) {
3680
+ if (this.group.api.location === 'floating' && !_event.shiftKey) {
3422
3681
  return true;
3423
3682
  }
3424
3683
  return false;
@@ -3620,7 +3879,7 @@ class TabsContainer extends CompositeDisposable {
3620
3879
  const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
3621
3880
  if (isFloatingGroupsEnabled &&
3622
3881
  event.shiftKey &&
3623
- !this.group.api.isFloating) {
3882
+ this.group.api.location !== 'floating') {
3624
3883
  event.preventDefault();
3625
3884
  const { top, left } = this.element.getBoundingClientRect();
3626
3885
  const { top: rootTop, left: rootLeft } = this.accessor.element.getBoundingClientRect();
@@ -3685,7 +3944,7 @@ class TabsContainer extends CompositeDisposable {
3685
3944
  }), tab.onChanged((event) => {
3686
3945
  var _a;
3687
3946
  const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
3688
- const isFloatingWithOnePanel = this.group.api.isFloating && this.size === 1;
3947
+ const isFloatingWithOnePanel = this.group.api.location === 'floating' && this.size === 1;
3689
3948
  if (isFloatingGroupsEnabled &&
3690
3949
  !isFloatingWithOnePanel &&
3691
3950
  event.shiftKey) {
@@ -3768,15 +4027,37 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3768
4027
  }
3769
4028
  return isAncestor(document.activeElement, this.contentContainer.element);
3770
4029
  }
3771
- get isFloating() {
3772
- return this._isFloating;
3773
- }
3774
- set isFloating(value) {
3775
- this._isFloating = value;
3776
- this.dropTarget.setTargetZones(value ? ['center'] : ['top', 'bottom', 'left', 'right', 'center']);
3777
- toggleClass(this.container, 'dv-groupview-floating', value);
3778
- this.groupPanel.api._onDidFloatingStateChange.fire({
3779
- isFloating: this.isFloating,
4030
+ get location() {
4031
+ return this._location;
4032
+ }
4033
+ set location(value) {
4034
+ this._location = value;
4035
+ toggleClass(this.container, 'dv-groupview-floating', false);
4036
+ toggleClass(this.container, 'dv-groupview-popout', false);
4037
+ switch (value) {
4038
+ case 'grid':
4039
+ this.contentContainer.dropTarget.setTargetZones([
4040
+ 'top',
4041
+ 'bottom',
4042
+ 'left',
4043
+ 'right',
4044
+ 'center',
4045
+ ]);
4046
+ break;
4047
+ case 'floating':
4048
+ this.contentContainer.dropTarget.setTargetZones(['center']);
4049
+ this.contentContainer.dropTarget.setTargetZones(value
4050
+ ? ['center']
4051
+ : ['top', 'bottom', 'left', 'right', 'center']);
4052
+ toggleClass(this.container, 'dv-groupview-floating', true);
4053
+ break;
4054
+ case 'popout':
4055
+ this.contentContainer.dropTarget.setTargetZones(['center']);
4056
+ toggleClass(this.container, 'dv-groupview-popout', true);
4057
+ break;
4058
+ }
4059
+ this.groupPanel.api._onDidLocationChange.fire({
4060
+ location: this.location,
3780
4061
  });
3781
4062
  }
3782
4063
  constructor(container, accessor, id, options, groupPanel) {
@@ -3789,7 +4070,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3789
4070
  this.groupPanel = groupPanel;
3790
4071
  this._isGroupActive = false;
3791
4072
  this._locked = false;
3792
- this._isFloating = false;
4073
+ this._location = 'grid';
3793
4074
  this.mostRecentlyUsed = [];
3794
4075
  this._onDidChange = new Emitter();
3795
4076
  this.onDidChange = this._onDidChange.event;
@@ -3812,35 +4093,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3812
4093
  this.onDidActivePanelChange = this._onDidActivePanelChange.event;
3813
4094
  toggleClass(this.container, 'groupview', true);
3814
4095
  this.tabsContainer = new TabsContainer(this.accessor, this.groupPanel);
3815
- this.contentContainer = new ContentContainer();
3816
- this.dropTarget = new Droptarget(this.contentContainer.element, {
3817
- acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
3818
- canDisplayOverlay: (event, position) => {
3819
- if (this.locked === 'no-drop-target' ||
3820
- (this.locked && position === 'center')) {
3821
- return false;
3822
- }
3823
- const data = getPanelData();
3824
- if (!data && event.shiftKey && !this.isFloating) {
3825
- return false;
3826
- }
3827
- if (data && data.viewId === this.accessor.id) {
3828
- if (data.groupId === this.id) {
3829
- if (position === 'center') {
3830
- // don't allow to drop on self for center position
3831
- return false;
3832
- }
3833
- if (data.panelId === null) {
3834
- // don't allow group move to drop anywhere on self
3835
- return false;
3836
- }
3837
- }
3838
- const groupHasOnePanelAndIsActiveDragElement = this._panels.length === 1 && data.groupId === this.id;
3839
- return !groupHasOnePanelAndIsActiveDragElement;
3840
- }
3841
- return this.canDisplayOverlay(event, position, exports.DockviewDropTargets.Panel);
3842
- },
3843
- });
4096
+ this.contentContainer = new ContentContainer(this.accessor, this);
3844
4097
  container.append(this.tabsContainer.element, this.contentContainer.element);
3845
4098
  this.header.hidden = !!options.hideHeader;
3846
4099
  this.locked = (_a = options.locked) !== null && _a !== void 0 ? _a : false;
@@ -3854,7 +4107,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3854
4107
  this.accessor.doSetGroupActive(this.groupPanel, true);
3855
4108
  }), this.contentContainer.onDidBlur(() => {
3856
4109
  // noop
3857
- }), this.dropTarget.onDrop((event) => {
4110
+ }), this.contentContainer.dropTarget.onDrop((event) => {
3858
4111
  this.handleDropEvent(event.nativeEvent, event.position);
3859
4112
  }), this._onMove, this._onDidChange, this._onDidDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange);
3860
4113
  }
@@ -3903,6 +4156,9 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3903
4156
  this.tabsContainer.setPrefixActionsElement(this._prefixHeaderActions.element);
3904
4157
  }
3905
4158
  }
4159
+ rerender(panel) {
4160
+ this.contentContainer.renderPanel(panel, { asActive: false });
4161
+ }
3906
4162
  indexOf(panel) {
3907
4163
  return this.tabsContainer.indexOf(panel.id);
3908
4164
  }
@@ -4094,12 +4350,12 @@ class DockviewGroupPanelModel extends CompositeDisposable {
4094
4350
  doAddPanel(panel, index = this.panels.length, skipSetActive = false) {
4095
4351
  const existingPanel = this._panels.indexOf(panel);
4096
4352
  const hasExistingPanel = existingPanel > -1;
4353
+ this.tabsContainer.show();
4354
+ this.contentContainer.show();
4097
4355
  this.tabsContainer.openPanel(panel, index);
4098
4356
  if (!skipSetActive) {
4099
4357
  this.contentContainer.openPanel(panel);
4100
4358
  }
4101
- this.tabsContainer.show();
4102
- this.contentContainer.show();
4103
4359
  if (hasExistingPanel) {
4104
4360
  // TODO - need to ensure ordering hasn't changed and if it has need to re-order this.panels
4105
4361
  return;
@@ -4215,7 +4471,6 @@ class DockviewGroupPanelModel extends CompositeDisposable {
4215
4471
  for (const panel of this.panels) {
4216
4472
  panel.dispose();
4217
4473
  }
4218
- this.dropTarget.dispose();
4219
4474
  this.tabsContainer.dispose();
4220
4475
  this.contentContainer.dispose();
4221
4476
  }
@@ -4254,7 +4509,22 @@ class Resizable extends CompositeDisposable {
4254
4509
  if (this.disableResizing) {
4255
4510
  return;
4256
4511
  }
4257
- if (!document.body.contains(this._element)) {
4512
+ if (!this._element.offsetParent) {
4513
+ /**
4514
+ * offsetParent === null is equivalent to display: none being set on the element or one
4515
+ * of it's parents. In the display: none case the size will become (0, 0) which we do
4516
+ * not want to propagate.
4517
+ *
4518
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent
4519
+ *
4520
+ * You could use checkVisibility() but at the time of writing it's not supported across
4521
+ * all Browsers
4522
+ *
4523
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/checkVisibility
4524
+ */
4525
+ return;
4526
+ }
4527
+ if (!isInDocument(this._element)) {
4258
4528
  /**
4259
4529
  * since the event is dispatched through requestAnimationFrame there is a small chance
4260
4530
  * the component is no longer attached to the DOM, if that is the case the dimensions
@@ -4346,6 +4616,21 @@ class BaseGrid extends Resizable {
4346
4616
  isVisible(panel) {
4347
4617
  return this.gridview.isViewVisible(getGridLocation(panel.element));
4348
4618
  }
4619
+ maximizeGroup(panel) {
4620
+ this.gridview.maximizeView(panel);
4621
+ }
4622
+ isMaximizedGroup(panel) {
4623
+ return this.gridview.maximizedView() === panel;
4624
+ }
4625
+ exitMaximizedGroup() {
4626
+ this.gridview.exitMaximizedView();
4627
+ }
4628
+ hasMaximizedGroup() {
4629
+ return this.gridview.hasMaximizedView();
4630
+ }
4631
+ get onDidMaxmizedGroupChange() {
4632
+ return this.gridview.onDidMaxmizedNodeChange;
4633
+ }
4349
4634
  doAddGroup(group, location = [0], size) {
4350
4635
  this.gridview.addView(group, size !== null && size !== void 0 ? size : exports.Sizing.Distribute, location);
4351
4636
  this._onDidAddGroup.fire(group);
@@ -5122,32 +5407,63 @@ class GridviewPanel extends BasePanelView {
5122
5407
  }
5123
5408
  }
5124
5409
 
5410
+ // TODO find a better way to initialize and avoid needing null checks
5411
+ const NOT_INITIALIZED_MESSAGE = 'DockviewGroupPanelApiImpl not initialized';
5125
5412
  class DockviewGroupPanelApiImpl extends GridviewPanelApiImpl {
5126
- get isFloating() {
5413
+ get location() {
5127
5414
  if (!this._group) {
5128
- throw new Error(`DockviewGroupPanelApiImpl not initialized`);
5415
+ throw new Error(NOT_INITIALIZED_MESSAGE);
5129
5416
  }
5130
- return this._group.model.isFloating;
5417
+ return this._group.model.location;
5131
5418
  }
5132
5419
  constructor(id, accessor) {
5133
5420
  super(id);
5134
5421
  this.accessor = accessor;
5135
- this._onDidFloatingStateChange = new Emitter();
5136
- this.onDidFloatingStateChange = this._onDidFloatingStateChange.event;
5137
- this.addDisposables(this._onDidFloatingStateChange);
5422
+ this._onDidLocationChange = new Emitter();
5423
+ this.onDidLocationChange = this._onDidLocationChange.event;
5424
+ this.addDisposables(this._onDidLocationChange);
5138
5425
  }
5139
5426
  moveTo(options) {
5140
- var _a;
5427
+ var _a, _b, _c;
5428
+ if (!this._group) {
5429
+ throw new Error(NOT_INITIALIZED_MESSAGE);
5430
+ }
5431
+ const group = (_a = options.group) !== null && _a !== void 0 ? _a : this.accessor.addGroup({
5432
+ direction: positionToDirection((_b = options.position) !== null && _b !== void 0 ? _b : 'right'),
5433
+ });
5434
+ this.accessor.moveGroupOrPanel(group, this._group.id, undefined, options.group ? (_c = options.position) !== null && _c !== void 0 ? _c : 'center' : 'center');
5435
+ }
5436
+ maximize() {
5437
+ if (!this._group) {
5438
+ throw new Error(NOT_INITIALIZED_MESSAGE);
5439
+ }
5440
+ if (this.location !== 'grid') {
5441
+ // only grid groups can be maximized
5442
+ return;
5443
+ }
5444
+ this.accessor.maximizeGroup(this._group);
5445
+ }
5446
+ isMaximized() {
5141
5447
  if (!this._group) {
5142
- throw new Error(`DockviewGroupPanelApiImpl not initialized`);
5448
+ throw new Error(NOT_INITIALIZED_MESSAGE);
5449
+ }
5450
+ return this.accessor.isMaximizedGroup(this._group);
5451
+ }
5452
+ exitMaximized() {
5453
+ if (!this._group) {
5454
+ throw new Error(NOT_INITIALIZED_MESSAGE);
5455
+ }
5456
+ if (this.isMaximized()) {
5457
+ this.accessor.exitMaximizedGroup();
5143
5458
  }
5144
- this.accessor.moveGroupOrPanel(options.group, this._group.id, undefined, (_a = options.position) !== null && _a !== void 0 ? _a : 'center');
5145
5459
  }
5146
5460
  initialize(group) {
5147
5461
  this._group = group;
5148
5462
  }
5149
5463
  }
5150
5464
 
5465
+ const MINIMUM_DOCKVIEW_GROUP_PANEL_WIDTH = 100;
5466
+ const MINIMUM_DOCKVIEW_GROUP_PANEL_HEIGHT = 100;
5151
5467
  class DockviewGroupPanel extends GridviewPanel {
5152
5468
  get panels() {
5153
5469
  return this._model.panels;
@@ -5172,8 +5488,8 @@ class DockviewGroupPanel extends GridviewPanel {
5172
5488
  }
5173
5489
  constructor(accessor, id, options) {
5174
5490
  super(id, 'groupview_default', {
5175
- minimumHeight: 100,
5176
- minimumWidth: 100,
5491
+ minimumHeight: MINIMUM_DOCKVIEW_GROUP_PANEL_HEIGHT,
5492
+ minimumWidth: MINIMUM_DOCKVIEW_GROUP_PANEL_WIDTH,
5177
5493
  }, new DockviewGroupPanelApiImpl(id, accessor));
5178
5494
  this.api.initialize(this); // cannot use 'this' after after 'super' call
5179
5495
  this._model = new DockviewGroupPanelModel(this.element, accessor, id, options, this);
@@ -5227,8 +5543,10 @@ class DockviewPanelApiImpl extends GridviewPanelApiImpl {
5227
5543
  return this.panel.title;
5228
5544
  }
5229
5545
  get isGroupActive() {
5230
- var _a;
5231
- return !!((_a = this.group) === null || _a === void 0 ? void 0 : _a.isActive);
5546
+ return this.group.isActive;
5547
+ }
5548
+ get renderer() {
5549
+ return this.panel.renderer;
5232
5550
  }
5233
5551
  set group(value) {
5234
5552
  const isOldGroupActive = this.isGroupActive;
@@ -5256,10 +5574,12 @@ class DockviewPanelApiImpl extends GridviewPanelApiImpl {
5256
5574
  this.onDidActiveGroupChange = this._onDidActiveGroupChange.event;
5257
5575
  this._onDidGroupChange = new Emitter();
5258
5576
  this.onDidGroupChange = this._onDidGroupChange.event;
5577
+ this._onDidRendererChange = new Emitter();
5578
+ this.onDidRendererChange = this._onDidRendererChange.event;
5259
5579
  this.disposable = new MutableDisposable();
5260
5580
  this.initialize(panel);
5261
5581
  this._group = group;
5262
- this.addDisposables(this.disposable, this._onDidTitleChange, this._onDidGroupChange, this._onDidActiveGroupChange);
5582
+ this.addDisposables(this.disposable, this._onDidRendererChange, this._onDidTitleChange, this._onDidGroupChange, this._onDidActiveGroupChange);
5263
5583
  }
5264
5584
  moveTo(options) {
5265
5585
  var _a;
@@ -5268,9 +5588,21 @@ class DockviewPanelApiImpl extends GridviewPanelApiImpl {
5268
5588
  setTitle(title) {
5269
5589
  this.panel.setTitle(title);
5270
5590
  }
5591
+ setRenderer(renderer) {
5592
+ this.panel.setRenderer(renderer);
5593
+ }
5271
5594
  close() {
5272
5595
  this.group.model.closePanel(this.panel);
5273
5596
  }
5597
+ maximize() {
5598
+ this.group.api.maximize();
5599
+ }
5600
+ isMaximized() {
5601
+ return this.group.api.isMaximized();
5602
+ }
5603
+ exitMaximized() {
5604
+ this.group.api.exitMaximized();
5605
+ }
5274
5606
  }
5275
5607
 
5276
5608
  class DockviewPanel extends CompositeDisposable {
@@ -5283,11 +5615,17 @@ class DockviewPanel extends CompositeDisposable {
5283
5615
  get group() {
5284
5616
  return this._group;
5285
5617
  }
5286
- constructor(id, accessor, containerApi, group, view) {
5618
+ get renderer() {
5619
+ var _a;
5620
+ return (_a = this._renderer) !== null && _a !== void 0 ? _a : this.accessor.renderer;
5621
+ }
5622
+ constructor(id, accessor, containerApi, group, view, options) {
5287
5623
  super();
5288
5624
  this.id = id;
5625
+ this.accessor = accessor;
5289
5626
  this.containerApi = containerApi;
5290
5627
  this.view = view;
5628
+ this._renderer = options.renderer;
5291
5629
  this._group = group;
5292
5630
  this.api = new DockviewPanelApiImpl(this, this._group, accessor);
5293
5631
  this.addDisposables(this.api.onActiveChange(() => {
@@ -5296,6 +5634,8 @@ class DockviewPanel extends CompositeDisposable {
5296
5634
  // forward the resize event to the group since if you want to resize a panel
5297
5635
  // you are actually just resizing the panels parent which is the group
5298
5636
  this.group.api.setSize(event);
5637
+ }), this.api.onDidRendererChange((event) => {
5638
+ this.group.model.rerender(this);
5299
5639
  }));
5300
5640
  }
5301
5641
  init(params) {
@@ -5315,6 +5655,7 @@ class DockviewPanel extends CompositeDisposable {
5315
5655
  ? this._params
5316
5656
  : undefined,
5317
5657
  title: this.title,
5658
+ renderer: this._renderer,
5318
5659
  };
5319
5660
  }
5320
5661
  setTitle(title) {
@@ -5330,6 +5671,15 @@ class DockviewPanel extends CompositeDisposable {
5330
5671
  this.api._onDidTitleChange.fire({ title });
5331
5672
  }
5332
5673
  }
5674
+ setRenderer(renderer) {
5675
+ const didChange = renderer !== this.renderer;
5676
+ if (didChange) {
5677
+ this._renderer = renderer;
5678
+ this.api._onDidRendererChange.fire({
5679
+ renderer: renderer,
5680
+ });
5681
+ }
5682
+ }
5333
5683
  update(event) {
5334
5684
  var _a;
5335
5685
  // merge the new parameters with the existing parameters
@@ -5548,8 +5898,8 @@ class DockviewPanelModel {
5548
5898
  }
5549
5899
 
5550
5900
  class DefaultDockviewDeserialzier {
5551
- constructor(layout) {
5552
- this.layout = layout;
5901
+ constructor(accessor) {
5902
+ this.accessor = accessor;
5553
5903
  }
5554
5904
  fromJSON(panelData, group) {
5555
5905
  var _a, _b;
@@ -5563,8 +5913,10 @@ class DefaultDockviewDeserialzier {
5563
5913
  const tabComponent = viewData
5564
5914
  ? (_b = viewData.tab) === null || _b === void 0 ? void 0 : _b.id
5565
5915
  : panelData.tabComponent;
5566
- const view = new DockviewPanelModel(this.layout, panelId, contentComponent, tabComponent);
5567
- const panel = new DockviewPanel(panelId, this.layout, new DockviewApi(this.layout), group, view);
5916
+ const view = new DockviewPanelModel(this.accessor, panelId, contentComponent, tabComponent);
5917
+ const panel = new DockviewPanel(panelId, this.accessor, new DockviewApi(this.accessor), group, view, {
5918
+ renderer: panelData.renderer,
5919
+ });
5568
5920
  panel.init({
5569
5921
  title: title !== null && title !== void 0 ? title : panelId,
5570
5922
  params: params !== null && params !== void 0 ? params : {},
@@ -5944,7 +6296,265 @@ class DockviewFloatingGroupPanel extends CompositeDisposable {
5944
6296
  }
5945
6297
  }
5946
6298
 
6299
+ class PopoutWindow extends CompositeDisposable {
6300
+ constructor(id, className, options) {
6301
+ super();
6302
+ this.id = id;
6303
+ this.className = className;
6304
+ this.options = options;
6305
+ this._onDidClose = new Emitter();
6306
+ this.onDidClose = this._onDidClose.event;
6307
+ this._window = null;
6308
+ this.addDisposables(this._onDidClose, {
6309
+ dispose: () => {
6310
+ this.close();
6311
+ },
6312
+ });
6313
+ }
6314
+ dimensions() {
6315
+ if (!this._window) {
6316
+ return null;
6317
+ }
6318
+ const left = this._window.value.screenX;
6319
+ const top = this._window.value.screenY;
6320
+ const width = this._window.value.innerWidth;
6321
+ const height = this._window.value.innerHeight;
6322
+ return { top, left, width, height };
6323
+ }
6324
+ close() {
6325
+ if (this._window) {
6326
+ this._window.disposable.dispose();
6327
+ this._window.value.close();
6328
+ this._window = null;
6329
+ }
6330
+ }
6331
+ open(content) {
6332
+ if (this._window) {
6333
+ throw new Error('instance of popout window is already open');
6334
+ }
6335
+ const url = `${this.options.url}`;
6336
+ const features = Object.entries({
6337
+ top: this.options.top,
6338
+ left: this.options.left,
6339
+ width: this.options.width,
6340
+ height: this.options.height,
6341
+ })
6342
+ .map(([key, value]) => `${key}=${value}`)
6343
+ .join(',');
6344
+ // https://developer.mozilla.org/en-US/docs/Web/API/Window/open
6345
+ const externalWindow = window.open(url, this.id, features);
6346
+ if (!externalWindow) {
6347
+ return;
6348
+ }
6349
+ const disposable = new CompositeDisposable();
6350
+ this._window = { value: externalWindow, disposable };
6351
+ const cleanUp = () => {
6352
+ this._onDidClose.fire();
6353
+ this._window = null;
6354
+ };
6355
+ // prevent any default content from loading
6356
+ // externalWindow.document.body.replaceWith(document.createElement('div'));
6357
+ disposable.addDisposables(addDisposableWindowListener(window, 'beforeunload', () => {
6358
+ cleanUp();
6359
+ this.close();
6360
+ }));
6361
+ externalWindow.addEventListener('load', () => {
6362
+ const externalDocument = externalWindow.document;
6363
+ externalDocument.title = document.title;
6364
+ const div = document.createElement('div');
6365
+ div.classList.add('dv-popout-window');
6366
+ div.style.position = 'absolute';
6367
+ div.style.width = '100%';
6368
+ div.style.height = '100%';
6369
+ div.style.top = '0px';
6370
+ div.style.left = '0px';
6371
+ div.classList.add(this.className);
6372
+ div.appendChild(content);
6373
+ externalDocument.body.replaceChildren(div);
6374
+ externalDocument.body.classList.add(this.className);
6375
+ addStyles(externalDocument, window.document.styleSheets);
6376
+ externalWindow.addEventListener('beforeunload', () => {
6377
+ // TODO: indicate external window is closing
6378
+ cleanUp();
6379
+ });
6380
+ });
6381
+ }
6382
+ }
6383
+
6384
+ class DockviewPopoutGroupPanel extends CompositeDisposable {
6385
+ constructor(id, group, options) {
6386
+ var _a;
6387
+ super();
6388
+ this.id = id;
6389
+ this.group = group;
6390
+ this.options = options;
6391
+ this.window = new PopoutWindow(id, (_a = options.className) !== null && _a !== void 0 ? _a : '', {
6392
+ url: this.options.popoutUrl,
6393
+ left: this.options.box.left,
6394
+ top: this.options.box.top,
6395
+ width: this.options.box.width,
6396
+ height: this.options.box.height,
6397
+ });
6398
+ group.model.location = 'popout';
6399
+ this.addDisposables(this.window, {
6400
+ dispose: () => {
6401
+ group.model.location = 'grid';
6402
+ },
6403
+ }, this.window.onDidClose(() => {
6404
+ this.dispose();
6405
+ }));
6406
+ this.window.open(group.element);
6407
+ }
6408
+ }
6409
+
5947
6410
  const DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE = 100;
6411
+ const DEFAULT_FLOATING_GROUP_POSITION = { left: 100, top: 100 };
6412
+
6413
+ function createFocusableElement() {
6414
+ const element = document.createElement('div');
6415
+ element.tabIndex = -1;
6416
+ return element;
6417
+ }
6418
+ class OverlayRenderContainer extends CompositeDisposable {
6419
+ constructor(element) {
6420
+ super();
6421
+ this.element = element;
6422
+ this.map = {};
6423
+ this.addDisposables(Disposable.from(() => {
6424
+ for (const value of Object.values(this.map)) {
6425
+ value.disposable.dispose();
6426
+ value.destroy.dispose();
6427
+ }
6428
+ }));
6429
+ }
6430
+ detatch(panel) {
6431
+ if (this.map[panel.api.id]) {
6432
+ const { disposable, destroy } = this.map[panel.api.id];
6433
+ disposable.dispose();
6434
+ destroy.dispose();
6435
+ delete this.map[panel.api.id];
6436
+ return true;
6437
+ }
6438
+ return false;
6439
+ }
6440
+ attach(options) {
6441
+ const { panel, referenceContainer } = options;
6442
+ if (!this.map[panel.api.id]) {
6443
+ const element = createFocusableElement();
6444
+ element.className = 'dv-render-overlay';
6445
+ this.map[panel.api.id] = {
6446
+ panel,
6447
+ disposable: Disposable.NONE,
6448
+ destroy: Disposable.NONE,
6449
+ element,
6450
+ };
6451
+ }
6452
+ const focusContainer = this.map[panel.api.id].element;
6453
+ if (panel.view.content.element.parentElement !== focusContainer) {
6454
+ focusContainer.appendChild(panel.view.content.element);
6455
+ }
6456
+ if (focusContainer.parentElement !== this.element) {
6457
+ this.element.appendChild(focusContainer);
6458
+ }
6459
+ const resize = () => {
6460
+ // TODO propagate position to avoid getDomNodePagePosition calls, possible performance bottleneck?
6461
+ const box = getDomNodePagePosition(referenceContainer.element);
6462
+ const box2 = getDomNodePagePosition(this.element);
6463
+ focusContainer.style.left = `${box.left - box2.left}px`;
6464
+ focusContainer.style.top = `${box.top - box2.top}px`;
6465
+ focusContainer.style.width = `${box.width}px`;
6466
+ focusContainer.style.height = `${box.height}px`;
6467
+ toggleClass(focusContainer, 'dv-render-overlay-float', panel.group.api.location === 'floating');
6468
+ };
6469
+ const visibilityChanged = () => {
6470
+ if (panel.api.isVisible) {
6471
+ resize();
6472
+ }
6473
+ focusContainer.style.display = panel.api.isVisible ? '' : 'none';
6474
+ };
6475
+ const disposable = new CompositeDisposable(
6476
+ /**
6477
+ * since container is positioned absoutely we must explicitly forward
6478
+ * the dnd events for the expect behaviours to continue to occur in terms of dnd
6479
+ *
6480
+ * the dnd observer does not need to be conditional on whether the panel is visible since
6481
+ * non-visible panels are 'display: none' and in such case the dnd observer will not fire.
6482
+ */
6483
+ new DragAndDropObserver(focusContainer, {
6484
+ onDragEnd: (e) => {
6485
+ referenceContainer.dropTarget.dnd.onDragEnd(e);
6486
+ },
6487
+ onDragEnter: (e) => {
6488
+ referenceContainer.dropTarget.dnd.onDragEnter(e);
6489
+ },
6490
+ onDragLeave: (e) => {
6491
+ referenceContainer.dropTarget.dnd.onDragLeave(e);
6492
+ },
6493
+ onDrop: (e) => {
6494
+ referenceContainer.dropTarget.dnd.onDrop(e);
6495
+ },
6496
+ onDragOver: (e) => {
6497
+ referenceContainer.dropTarget.dnd.onDragOver(e);
6498
+ },
6499
+ }), panel.api.onDidVisibilityChange((event) => {
6500
+ /**
6501
+ * Control the visibility of the content, however even when not visible (display: none)
6502
+ * the content is still maintained within the DOM hence DOM specific attributes
6503
+ * such as scroll position are maintained when next made visible.
6504
+ */
6505
+ visibilityChanged();
6506
+ }), panel.api.onDidDimensionsChange(() => {
6507
+ if (!panel.api.isVisible) {
6508
+ return;
6509
+ }
6510
+ resize();
6511
+ }));
6512
+ this.map[panel.api.id].destroy = Disposable.from(() => {
6513
+ focusContainer.removeChild(panel.view.content.element);
6514
+ this.element.removeChild(focusContainer);
6515
+ });
6516
+ queueMicrotask(() => {
6517
+ if (this.isDisposed) {
6518
+ return;
6519
+ }
6520
+ /**
6521
+ * wait until everything has finished in the current stack-frame call before
6522
+ * calling the first resize as other size-altering events may still occur before
6523
+ * the end of the stack-frame.
6524
+ */
6525
+ visibilityChanged();
6526
+ });
6527
+ // dispose of logic asoccciated with previous reference-container
6528
+ this.map[panel.api.id].disposable.dispose();
6529
+ // and reset the disposable to the active reference-container
6530
+ this.map[panel.api.id].disposable = disposable;
6531
+ return focusContainer;
6532
+ }
6533
+ }
6534
+
6535
+ const DEFAULT_ROOT_OVERLAY_MODEL = {
6536
+ activationSize: { type: 'pixels', value: 10 },
6537
+ size: { type: 'pixels', value: 20 },
6538
+ };
6539
+ function getTheme(element) {
6540
+ function toClassList(element) {
6541
+ const list = [];
6542
+ for (let i = 0; i < element.classList.length; i++) {
6543
+ list.push(element.classList.item(i));
6544
+ }
6545
+ return list;
6546
+ }
6547
+ let theme = undefined;
6548
+ let parent = element;
6549
+ while (parent !== null) {
6550
+ theme = toClassList(parent).find((cls) => cls.startsWith('dockview-theme-'));
6551
+ if (typeof theme === 'string') {
6552
+ break;
6553
+ }
6554
+ parent = parent.parentElement;
6555
+ }
6556
+ return theme;
6557
+ }
5948
6558
  class DockviewComponent extends BaseGrid {
5949
6559
  get orientation() {
5950
6560
  return this.gridview.orientation;
@@ -5965,8 +6575,12 @@ class DockviewComponent extends BaseGrid {
5965
6575
  }
5966
6576
  return activeGroup.activePanel;
5967
6577
  }
5968
- constructor(options) {
6578
+ get renderer() {
5969
6579
  var _a;
6580
+ return (_a = this.options.defaultRenderer) !== null && _a !== void 0 ? _a : 'onlyWhenVisibile';
6581
+ }
6582
+ constructor(options) {
6583
+ var _a, _b;
5970
6584
  super({
5971
6585
  proportionalLayout: true,
5972
6586
  orientation: (_a = options.orientation) !== null && _a !== void 0 ? _a : exports.Orientation.HORIZONTAL,
@@ -5991,12 +6605,27 @@ class DockviewComponent extends BaseGrid {
5991
6605
  this.onDidLayoutFromJSON = this._onDidLayoutFromJSON.event;
5992
6606
  this._onDidActivePanelChange = new Emitter();
5993
6607
  this.onDidActivePanelChange = this._onDidActivePanelChange.event;
5994
- this.floatingGroups = [];
6608
+ this._floatingGroups = [];
6609
+ this._popoutGroups = [];
6610
+ const gready = document.createElement('div');
6611
+ gready.className = 'dv-overlay-render-container';
6612
+ this.gridview.element.appendChild(gready);
6613
+ this.overlayRenderContainer = new OverlayRenderContainer(gready);
5995
6614
  toggleClass(this.gridview.element, 'dv-dockview', true);
5996
- this.addDisposables(this._onWillDragPanel, this._onWillDragGroup, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, exports.DockviewEvent.any(this.onDidAddGroup, this.onDidRemoveGroup)(() => {
6615
+ toggleClass(this.element, 'dv-debug', !!options.debug);
6616
+ 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)(() => {
5997
6617
  this.updateWatermark();
5998
6618
  }), exports.DockviewEvent.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidActivePanelChange)(() => {
5999
6619
  this._bufferOnDidLayoutChange.fire();
6620
+ }), Disposable.from(() => {
6621
+ // iterate over a copy of the array since .dispose() mutates the original array
6622
+ for (const group of [...this._floatingGroups]) {
6623
+ group.dispose();
6624
+ }
6625
+ // iterate over a copy of the array since .dispose() mutates the original array
6626
+ for (const group of [...this._popoutGroups]) {
6627
+ group.dispose();
6628
+ }
6000
6629
  }));
6001
6630
  this._options = options;
6002
6631
  if (!this.options.components) {
@@ -6015,7 +6644,7 @@ class DockviewComponent extends BaseGrid {
6015
6644
  !this.options.watermarkFrameworkComponent) {
6016
6645
  this.options.watermarkComponent = Watermark;
6017
6646
  }
6018
- const dropTarget = new Droptarget(this.element, {
6647
+ this._rootDropTarget = new Droptarget(this.element, {
6019
6648
  canDisplayOverlay: (event, position) => {
6020
6649
  const data = getPanelData();
6021
6650
  if (data) {
@@ -6048,12 +6677,9 @@ class DockviewComponent extends BaseGrid {
6048
6677
  return false;
6049
6678
  },
6050
6679
  acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
6051
- overlayModel: {
6052
- activationSize: { type: 'pixels', value: 10 },
6053
- size: { type: 'pixels', value: 20 },
6054
- },
6680
+ overlayModel: (_b = this.options.rootOverlayModel) !== null && _b !== void 0 ? _b : DEFAULT_ROOT_OVERLAY_MODEL,
6055
6681
  });
6056
- this.addDisposables(dropTarget.onDrop((event) => {
6682
+ this.addDisposables(this._rootDropTarget.onDrop((event) => {
6057
6683
  var _a;
6058
6684
  const data = getPanelData();
6059
6685
  if (data) {
@@ -6062,10 +6688,59 @@ class DockviewComponent extends BaseGrid {
6062
6688
  else {
6063
6689
  this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api, group: null, getData: getPanelData }));
6064
6690
  }
6065
- }), dropTarget);
6691
+ }), this._rootDropTarget);
6066
6692
  this._api = new DockviewApi(this);
6067
6693
  this.updateWatermark();
6068
6694
  }
6695
+ addPopoutGroup(item, options) {
6696
+ var _a;
6697
+ let group;
6698
+ let box = options === null || options === void 0 ? void 0 : options.position;
6699
+ if (item instanceof DockviewPanel) {
6700
+ group = this.createGroup();
6701
+ this.removePanel(item, {
6702
+ removeEmptyGroup: true,
6703
+ skipDispose: true,
6704
+ });
6705
+ group.model.openPanel(item);
6706
+ if (!box) {
6707
+ box = this.element.getBoundingClientRect();
6708
+ }
6709
+ }
6710
+ else {
6711
+ group = item;
6712
+ if (!box) {
6713
+ box = group.element.getBoundingClientRect();
6714
+ }
6715
+ const skip = typeof (options === null || options === void 0 ? void 0 : options.skipRemoveGroup) === 'boolean' &&
6716
+ options.skipRemoveGroup;
6717
+ if (!skip) {
6718
+ this.doRemoveGroup(item, { skipDispose: true });
6719
+ }
6720
+ }
6721
+ const theme = getTheme(this.gridview.element);
6722
+ const popoutWindow = new DockviewPopoutGroupPanel(`${this.id}-${group.id}`, // globally unique within dockview
6723
+ group, {
6724
+ className: theme !== null && theme !== void 0 ? theme : '',
6725
+ popoutUrl: (_a = options === null || options === void 0 ? void 0 : options.popoutUrl) !== null && _a !== void 0 ? _a : '/popout.html',
6726
+ box: {
6727
+ left: window.screenX + box.left,
6728
+ top: window.screenY + box.top,
6729
+ width: box.width,
6730
+ height: box.height,
6731
+ },
6732
+ });
6733
+ popoutWindow.addDisposables({
6734
+ dispose: () => {
6735
+ remove(this._popoutGroups, popoutWindow);
6736
+ this.updateWatermark();
6737
+ },
6738
+ }, popoutWindow.window.onDidClose(() => {
6739
+ this.doAddGroup(group, [0]);
6740
+ }));
6741
+ this._popoutGroups.push(popoutWindow);
6742
+ this.updateWatermark();
6743
+ }
6069
6744
  addFloatingGroup(item, coord, options) {
6070
6745
  var _a, _b, _c, _d, _e, _f;
6071
6746
  let group;
@@ -6085,9 +6760,13 @@ class DockviewComponent extends BaseGrid {
6085
6760
  this.doRemoveGroup(item, { skipDispose: true });
6086
6761
  }
6087
6762
  }
6088
- group.model.isFloating = true;
6089
- const overlayLeft = typeof (coord === null || coord === void 0 ? void 0 : coord.x) === 'number' ? Math.max(coord.x, 0) : 100;
6090
- const overlayTop = typeof (coord === null || coord === void 0 ? void 0 : coord.y) === 'number' ? Math.max(coord.y, 0) : 100;
6763
+ group.model.location = 'floating';
6764
+ const overlayLeft = typeof (coord === null || coord === void 0 ? void 0 : coord.x) === 'number'
6765
+ ? Math.max(coord.x, 0)
6766
+ : DEFAULT_FLOATING_GROUP_POSITION.left;
6767
+ const overlayTop = typeof (coord === null || coord === void 0 ? void 0 : coord.y) === 'number'
6768
+ ? Math.max(coord.y, 0)
6769
+ : DEFAULT_FLOATING_GROUP_POSITION.top;
6091
6770
  const overlay = new Overlay({
6092
6771
  container: this.gridview.element,
6093
6772
  content: group.element,
@@ -6131,12 +6810,12 @@ class DockviewComponent extends BaseGrid {
6131
6810
  }), {
6132
6811
  dispose: () => {
6133
6812
  disposable.dispose();
6134
- group.model.isFloating = false;
6135
- remove(this.floatingGroups, floatingGroupPanel);
6813
+ group.model.location = 'grid';
6814
+ remove(this._floatingGroups, floatingGroupPanel);
6136
6815
  this.updateWatermark();
6137
6816
  },
6138
6817
  });
6139
- this.floatingGroups.push(floatingGroupPanel);
6818
+ this._floatingGroups.push(floatingGroupPanel);
6140
6819
  this.updateWatermark();
6141
6820
  }
6142
6821
  orthogonalize(position) {
@@ -6172,16 +6851,18 @@ class DockviewComponent extends BaseGrid {
6172
6851
  }
6173
6852
  updateOptions(options) {
6174
6853
  var _a, _b;
6175
- const hasOrientationChanged = typeof options.orientation === 'string' &&
6854
+ const changed_orientation = typeof options.orientation === 'string' &&
6176
6855
  this.gridview.orientation !== options.orientation;
6177
- const hasFloatingGroupOptionsChanged = options.floatingGroupBounds !== undefined &&
6856
+ const changed_floatingGroupBounds = options.floatingGroupBounds !== undefined &&
6178
6857
  options.floatingGroupBounds !== this.options.floatingGroupBounds;
6858
+ const changed_rootOverlayOptions = options.rootOverlayModel !== undefined &&
6859
+ options.rootOverlayModel !== this.options.rootOverlayModel;
6179
6860
  this._options = Object.assign(Object.assign({}, this.options), options);
6180
- if (hasOrientationChanged) {
6861
+ if (changed_orientation) {
6181
6862
  this.gridview.orientation = options.orientation;
6182
6863
  }
6183
- if (hasFloatingGroupOptionsChanged) {
6184
- for (const group of this.floatingGroups) {
6864
+ if (changed_floatingGroupBounds) {
6865
+ for (const group of this._floatingGroups) {
6185
6866
  switch (this.options.floatingGroupBounds) {
6186
6867
  case 'boundedWithinViewport':
6187
6868
  group.overlay.minimumInViewportHeight = undefined;
@@ -6202,12 +6883,15 @@ class DockviewComponent extends BaseGrid {
6202
6883
  group.overlay.setBounds({});
6203
6884
  }
6204
6885
  }
6886
+ if (changed_rootOverlayOptions) {
6887
+ this._rootDropTarget.setOverlayModel(options.rootOverlayModel);
6888
+ }
6205
6889
  this.layout(this.gridview.width, this.gridview.height, true);
6206
6890
  }
6207
6891
  layout(width, height, forceResize) {
6208
6892
  super.layout(width, height, forceResize);
6209
- if (this.floatingGroups) {
6210
- for (const floating of this.floatingGroups) {
6893
+ if (this._floatingGroups) {
6894
+ for (const floating of this._floatingGroups) {
6211
6895
  // ensure floting groups stay within visible boundaries
6212
6896
  floating.overlay.setBounds();
6213
6897
  }
@@ -6275,10 +6959,16 @@ class DockviewComponent extends BaseGrid {
6275
6959
  collection[panel.id] = panel.toJSON();
6276
6960
  return collection;
6277
6961
  }, {});
6278
- const floats = this.floatingGroups.map((floatingGroup) => {
6962
+ const floats = this._floatingGroups.map((group) => {
6279
6963
  return {
6280
- data: floatingGroup.group.toJSON(),
6281
- position: floatingGroup.overlay.toJSON(),
6964
+ data: group.group.toJSON(),
6965
+ position: group.overlay.toJSON(),
6966
+ };
6967
+ });
6968
+ const popoutGroups = this._popoutGroups.map((group) => {
6969
+ return {
6970
+ data: group.group.toJSON(),
6971
+ position: group.window.dimensions(),
6282
6972
  };
6283
6973
  });
6284
6974
  const result = {
@@ -6289,10 +6979,13 @@ class DockviewComponent extends BaseGrid {
6289
6979
  if (floats.length > 0) {
6290
6980
  result.floatingGroups = floats;
6291
6981
  }
6982
+ if (popoutGroups.length > 0) {
6983
+ result.popoutGroups = popoutGroups;
6984
+ }
6292
6985
  return result;
6293
6986
  }
6294
6987
  fromJSON(data) {
6295
- var _a;
6988
+ var _a, _b;
6296
6989
  this.clear();
6297
6990
  if (typeof data !== 'object' || data === null) {
6298
6991
  throw new Error('serialized layout must be a non-null object');
@@ -6359,7 +7052,16 @@ class DockviewComponent extends BaseGrid {
6359
7052
  width: position.width,
6360
7053
  }, { skipRemoveGroup: true, inDragMode: false });
6361
7054
  }
6362
- for (const floatingGroup of this.floatingGroups) {
7055
+ const serializedPopoutGroups = (_b = data.popoutGroups) !== null && _b !== void 0 ? _b : [];
7056
+ for (const serializedPopoutGroup of serializedPopoutGroups) {
7057
+ const { data, position } = serializedPopoutGroup;
7058
+ const group = createGroupFromSerializedState(data);
7059
+ this.addPopoutGroup(group, {
7060
+ skipRemoveGroup: true,
7061
+ position: position !== null && position !== void 0 ? position : undefined,
7062
+ });
7063
+ }
7064
+ for (const floatingGroup of this._floatingGroups) {
6363
7065
  floatingGroup.overlay.setBounds();
6364
7066
  }
6365
7067
  if (typeof activeGroup === 'string') {
@@ -6391,7 +7093,7 @@ class DockviewComponent extends BaseGrid {
6391
7093
  this._onDidRemoveGroup.fire(group);
6392
7094
  }
6393
7095
  // iterate over a reassigned array since original array will be modified
6394
- for (const floatingGroup of [...this.floatingGroups]) {
7096
+ for (const floatingGroup of [...this._floatingGroups]) {
6395
7097
  floatingGroup.dispose();
6396
7098
  }
6397
7099
  // fires clean-up events and clears the underlying HTML gridview.
@@ -6483,7 +7185,8 @@ class DockviewComponent extends BaseGrid {
6483
7185
  group.model.openPanel(panel);
6484
7186
  this.doSetGroupAndPanelActive(group);
6485
7187
  }
6486
- else if (referenceGroup.api.isFloating || target === 'center') {
7188
+ else if (referenceGroup.api.location === 'floating' ||
7189
+ target === 'center') {
6487
7190
  panel = this.createPanel(options, referenceGroup);
6488
7191
  referenceGroup.model.openPanel(panel);
6489
7192
  }
@@ -6527,6 +7230,7 @@ class DockviewComponent extends BaseGrid {
6527
7230
  }
6528
7231
  group.model.removePanel(panel);
6529
7232
  if (!options.skipDispose) {
7233
+ this.overlayRenderContainer.detatch(panel);
6530
7234
  panel.dispose();
6531
7235
  }
6532
7236
  if (group.size === 0 && options.removeEmptyGroup) {
@@ -6543,7 +7247,7 @@ class DockviewComponent extends BaseGrid {
6543
7247
  }
6544
7248
  updateWatermark() {
6545
7249
  var _a, _b;
6546
- if (this.groups.filter((x) => !x.api.isFloating).length === 0) {
7250
+ if (this.groups.filter((x) => x.api.location === 'grid').length === 0) {
6547
7251
  if (!this.watermark) {
6548
7252
  this.watermark = this.createWatermarkComponent();
6549
7253
  this.watermark.init({
@@ -6618,19 +7322,40 @@ class DockviewComponent extends BaseGrid {
6618
7322
  }
6619
7323
  }
6620
7324
  doRemoveGroup(group, options) {
6621
- const floatingGroup = this.floatingGroups.find((_) => _.group === group);
6622
- if (floatingGroup) {
6623
- if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
6624
- floatingGroup.group.dispose();
6625
- this._groups.delete(group.id);
6626
- this._onDidRemoveGroup.fire(group);
7325
+ if (group.api.location === 'floating') {
7326
+ const floatingGroup = this._floatingGroups.find((_) => _.group === group);
7327
+ if (floatingGroup) {
7328
+ if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
7329
+ floatingGroup.group.dispose();
7330
+ this._groups.delete(group.id);
7331
+ this._onDidRemoveGroup.fire(group);
7332
+ }
7333
+ remove(this._floatingGroups, floatingGroup);
7334
+ floatingGroup.dispose();
7335
+ if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
7336
+ const groups = Array.from(this._groups.values());
7337
+ this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
7338
+ }
7339
+ return floatingGroup.group;
6627
7340
  }
6628
- floatingGroup.dispose();
6629
- if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
6630
- const groups = Array.from(this._groups.values());
6631
- this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
7341
+ throw new Error('failed to find floating group');
7342
+ }
7343
+ if (group.api.location === 'popout') {
7344
+ const selectedGroup = this._popoutGroups.find((_) => _.group === group);
7345
+ if (selectedGroup) {
7346
+ if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
7347
+ selectedGroup.group.dispose();
7348
+ this._groups.delete(group.id);
7349
+ this._onDidRemoveGroup.fire(group);
7350
+ }
7351
+ selectedGroup.dispose();
7352
+ if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
7353
+ const groups = Array.from(this._groups.values());
7354
+ this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
7355
+ }
7356
+ return selectedGroup.group;
6632
7357
  }
6633
- return floatingGroup.group;
7358
+ throw new Error('failed to find popout group');
6634
7359
  }
6635
7360
  return super.doRemoveGroup(group, options);
6636
7361
  }
@@ -6662,8 +7387,7 @@ class DockviewComponent extends BaseGrid {
6662
7387
  const targetLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, destinationTarget);
6663
7388
  if (sourceGroup && sourceGroup.size < 2) {
6664
7389
  const [targetParentLocation, to] = tail(targetLocation);
6665
- const isFloating = this.floatingGroups.find((x) => x.group === sourceGroup);
6666
- if (!isFloating) {
7390
+ if (sourceGroup.api.location === 'grid') {
6667
7391
  const sourceLocation = getGridLocation(sourceGroup.element);
6668
7392
  const [sourceParentLocation, from] = tail(sourceLocation);
6669
7393
  if (sequenceEquals(sourceParentLocation, targetParentLocation)) {
@@ -6709,12 +7433,25 @@ class DockviewComponent extends BaseGrid {
6709
7433
  }
6710
7434
  }
6711
7435
  else {
6712
- const floatingGroup = this.floatingGroups.find((x) => x.group === sourceGroup);
6713
- if (floatingGroup) {
6714
- floatingGroup.dispose();
6715
- }
6716
- else {
6717
- this.gridview.removeView(getGridLocation(sourceGroup.element));
7436
+ switch (sourceGroup.api.location) {
7437
+ case 'grid':
7438
+ this.gridview.removeView(getGridLocation(sourceGroup.element));
7439
+ break;
7440
+ case 'floating': {
7441
+ const selectedFloatingGroup = this._floatingGroups.find((x) => x.group === sourceGroup);
7442
+ if (!selectedFloatingGroup) {
7443
+ throw new Error('failed to find floating group');
7444
+ }
7445
+ selectedFloatingGroup.dispose();
7446
+ break;
7447
+ }
7448
+ case 'popout': {
7449
+ const selectedPopoutGroup = this._popoutGroups.find((x) => x.group === sourceGroup);
7450
+ if (!selectedPopoutGroup) {
7451
+ throw new Error('failed to find popout group');
7452
+ }
7453
+ selectedPopoutGroup.dispose();
7454
+ }
6718
7455
  }
6719
7456
  const referenceLocation = getGridLocation(referenceGroup.element);
6720
7457
  const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
@@ -6776,7 +7513,7 @@ class DockviewComponent extends BaseGrid {
6776
7513
  const contentComponent = options.component;
6777
7514
  const tabComponent = (_a = options.tabComponent) !== null && _a !== void 0 ? _a : this.options.defaultTabComponent;
6778
7515
  const view = new DockviewPanelModel(this, options.id, contentComponent, tabComponent);
6779
- const panel = new DockviewPanel(options.id, this, this._api, group, view);
7516
+ const panel = new DockviewPanel(options.id, this, this._api, group, view, { renderer: options.renderer });
6780
7517
  panel.init({
6781
7518
  title: (_b = options.title) !== null && _b !== void 0 ? _b : options.id,
6782
7519
  params: (_c = options === null || options === void 0 ? void 0 : options.params) !== null && _c !== void 0 ? _c : {},