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
  */
@@ -31,7 +31,7 @@ function styleInject(css, ref) {
31
31
  }
32
32
  }
33
33
 
34
- 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}";
34
+ 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}";
35
35
  styleInject(css_248z);
36
36
 
37
37
  class TransferObject {
@@ -260,6 +260,14 @@ var Disposable;
260
260
  // noop
261
261
  },
262
262
  };
263
+ function from(func) {
264
+ return {
265
+ dispose: () => {
266
+ func();
267
+ },
268
+ };
269
+ }
270
+ Disposable.from = from;
263
271
  })(Disposable || (Disposable = {}));
264
272
  class CompositeDisposable {
265
273
  get isDisposed() {
@@ -444,6 +452,61 @@ function quasiPreventDefault(event) {
444
452
  function quasiDefaultPrevented(event) {
445
453
  return event[QUASI_PREVENT_DEFAULT_KEY];
446
454
  }
455
+ function addStyles(document, styleSheetList) {
456
+ const styleSheets = Array.from(styleSheetList);
457
+ for (const styleSheet of styleSheets) {
458
+ if (styleSheet.href) {
459
+ const link = document.createElement('link');
460
+ link.href = styleSheet.href;
461
+ link.type = styleSheet.type;
462
+ link.rel = 'stylesheet';
463
+ document.head.appendChild(link);
464
+ }
465
+ let cssTexts = [];
466
+ try {
467
+ if (styleSheet.cssRules) {
468
+ cssTexts = Array.from(styleSheet.cssRules).map((rule) => rule.cssText);
469
+ }
470
+ }
471
+ catch (err) {
472
+ // security errors (lack of permissions), ignore
473
+ }
474
+ for (const rule of cssTexts) {
475
+ const style = document.createElement('style');
476
+ style.appendChild(document.createTextNode(rule));
477
+ document.head.appendChild(style);
478
+ }
479
+ }
480
+ }
481
+ function getDomNodePagePosition(domNode) {
482
+ const { left, top, width, height } = domNode.getBoundingClientRect();
483
+ return {
484
+ left: left + window.scrollX,
485
+ top: top + window.scrollY,
486
+ width: width,
487
+ height: height,
488
+ };
489
+ }
490
+ /**
491
+ * Check whether an element is in the DOM (including the Shadow DOM)
492
+ * @see https://terodox.tech/how-to-tell-if-an-element-is-in-the-dom-including-the-shadow-dom/
493
+ */
494
+ function isInDocument(element) {
495
+ let currentElement = element;
496
+ while (currentElement === null || currentElement === void 0 ? void 0 : currentElement.parentNode) {
497
+ if (currentElement.parentNode === document) {
498
+ return true;
499
+ }
500
+ else if (currentElement.parentNode instanceof DocumentFragment) {
501
+ // handle shadow DOMs
502
+ currentElement = currentElement.parentNode.host;
503
+ }
504
+ else {
505
+ currentElement = currentElement.parentNode;
506
+ }
507
+ }
508
+ return false;
509
+ }
447
510
 
448
511
  function tail(arr) {
449
512
  if (arr.length === 0) {
@@ -641,6 +704,9 @@ var Sizing;
641
704
  Sizing.Invisible = Invisible;
642
705
  })(Sizing || (Sizing = {}));
643
706
  class Splitview {
707
+ get contentSize() {
708
+ return this._contentSize;
709
+ }
644
710
  get size() {
645
711
  return this._size;
646
712
  }
@@ -706,7 +772,7 @@ class Splitview {
706
772
  this.sashes = [];
707
773
  this._size = 0;
708
774
  this._orthogonalSize = 0;
709
- this.contentSize = 0;
775
+ this._contentSize = 0;
710
776
  this._proportions = undefined;
711
777
  this._startSnappingEnabled = true;
712
778
  this._endSnappingEnabled = true;
@@ -825,7 +891,7 @@ class Splitview {
825
891
  );
826
892
  });
827
893
  // Initialize content size and proportions for first layout
828
- this.contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
894
+ this._contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
829
895
  this.saveProportions();
830
896
  }
831
897
  }
@@ -1099,7 +1165,7 @@ class Splitview {
1099
1165
  this.addView(view, sizing, to);
1100
1166
  }
1101
1167
  layout(size, orthogonalSize) {
1102
- const previousSize = Math.max(this.size, this.contentSize);
1168
+ const previousSize = Math.max(this.size, this._contentSize);
1103
1169
  this.size = size;
1104
1170
  this.orthogonalSize = orthogonalSize;
1105
1171
  if (!this.proportions) {
@@ -1109,9 +1175,23 @@ class Splitview {
1109
1175
  this.resize(this.viewItems.length - 1, size - previousSize, undefined, lowPriorityIndexes, highPriorityIndexes);
1110
1176
  }
1111
1177
  else {
1178
+ let total = 0;
1112
1179
  for (let i = 0; i < this.viewItems.length; i++) {
1113
1180
  const item = this.viewItems[i];
1114
- item.size = clamp(Math.round(this.proportions[i] * size), item.minimumSize, item.maximumSize);
1181
+ const proportion = this.proportions[i];
1182
+ if (typeof proportion === 'number') {
1183
+ total += proportion;
1184
+ }
1185
+ else {
1186
+ size -= item.size;
1187
+ }
1188
+ }
1189
+ for (let i = 0; i < this.viewItems.length; i++) {
1190
+ const item = this.viewItems[i];
1191
+ const proportion = this.proportions[i];
1192
+ if (typeof proportion === 'number' && total > 0) {
1193
+ item.size = clamp(Math.round((proportion * size) / total), item.minimumSize, item.maximumSize);
1194
+ }
1115
1195
  }
1116
1196
  }
1117
1197
  this.distributeEmptySpace();
@@ -1148,12 +1228,12 @@ class Splitview {
1148
1228
  }
1149
1229
  }
1150
1230
  saveProportions() {
1151
- if (this.proportionalLayout && this.contentSize > 0) {
1152
- this._proportions = this.viewItems.map((i) => i.size / this.contentSize);
1231
+ if (this.proportionalLayout && this._contentSize > 0) {
1232
+ this._proportions = this.viewItems.map((i) => i.visible ? i.size / this._contentSize : undefined);
1153
1233
  }
1154
1234
  }
1155
1235
  layoutViews() {
1156
- this.contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
1236
+ this._contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
1157
1237
  let sum = 0;
1158
1238
  const x = [];
1159
1239
  this.updateSashEnablement();
@@ -1247,7 +1327,7 @@ class Splitview {
1247
1327
  }
1248
1328
  else if (snappedAfter &&
1249
1329
  collapsesDown[index] &&
1250
- (position < this.contentSize || this.endSnappingEnabled)) {
1330
+ (position < this._contentSize || this.endSnappingEnabled)) {
1251
1331
  this.updateSash(sash, SashState.MAXIMUM);
1252
1332
  }
1253
1333
  else {
@@ -1536,7 +1616,6 @@ class LeafNode {
1536
1616
  setVisible(visible) {
1537
1617
  if (this.view.setVisible) {
1538
1618
  this.view.setVisible(visible);
1539
- this._onDidChange.fire({});
1540
1619
  }
1541
1620
  }
1542
1621
  layout(size, orthogonalSize) {
@@ -1568,10 +1647,14 @@ class BranchNode extends CompositeDisposable {
1568
1647
  get minimumSize() {
1569
1648
  return this.children.length === 0
1570
1649
  ? 0
1571
- : Math.max(...this.children.map((c) => c.minimumOrthogonalSize));
1650
+ : Math.max(...this.children.map((c, index) => this.splitview.isViewVisible(index)
1651
+ ? c.minimumOrthogonalSize
1652
+ : 0));
1572
1653
  }
1573
1654
  get maximumSize() {
1574
- return Math.min(...this.children.map((c) => c.maximumOrthogonalSize));
1655
+ return Math.min(...this.children.map((c, index) => this.splitview.isViewVisible(index)
1656
+ ? c.maximumOrthogonalSize
1657
+ : Number.POSITIVE_INFINITY));
1575
1658
  }
1576
1659
  get minimumOrthogonalSize() {
1577
1660
  return this.splitview.minimumSize;
@@ -1629,6 +1712,8 @@ class BranchNode extends CompositeDisposable {
1629
1712
  this.children = [];
1630
1713
  this._onDidChange = new Emitter();
1631
1714
  this.onDidChange = this._onDidChange.event;
1715
+ this._onDidVisibilityChange = new Emitter();
1716
+ this.onDidVisibilityChange = this._onDidVisibilityChange.event;
1632
1717
  this._orthogonalSize = orthogonalSize;
1633
1718
  this._size = size;
1634
1719
  this.element = document.createElement('div');
@@ -1663,7 +1748,7 @@ class BranchNode extends CompositeDisposable {
1663
1748
  styles,
1664
1749
  });
1665
1750
  }
1666
- this.addDisposables(this._onDidChange, this.splitview.onDidSashEnd(() => {
1751
+ this.addDisposables(this._onDidChange, this._onDidVisibilityChange, this.splitview.onDidSashEnd(() => {
1667
1752
  this._onDidChange.fire({});
1668
1753
  }));
1669
1754
  this.setupChildrenEvents();
@@ -1686,7 +1771,15 @@ class BranchNode extends CompositeDisposable {
1686
1771
  if (this.splitview.isViewVisible(index) === visible) {
1687
1772
  return;
1688
1773
  }
1774
+ const wereAllChildrenHidden = this.splitview.contentSize === 0;
1689
1775
  this.splitview.setViewVisible(index, visible);
1776
+ const areAllChildrenHidden = this.splitview.contentSize === 0;
1777
+ // If all children are hidden then the parent should hide the entire splitview
1778
+ // If the entire splitview is hidden then the parent should show the splitview when a child is shown
1779
+ if ((visible && wereAllChildrenHidden) ||
1780
+ (!visible && areAllChildrenHidden)) {
1781
+ this._onDidVisibilityChange.fire(visible);
1782
+ }
1690
1783
  }
1691
1784
  moveChild(from, to) {
1692
1785
  if (from === to) {
@@ -1750,13 +1843,20 @@ class BranchNode extends CompositeDisposable {
1750
1843
  }
1751
1844
  setupChildrenEvents() {
1752
1845
  this._childrenDisposable.dispose();
1753
- this._childrenDisposable = Event.any(...this.children.map((c) => c.onDidChange))((e) => {
1846
+ this._childrenDisposable = new CompositeDisposable(Event.any(...this.children.map((c) => c.onDidChange))((e) => {
1754
1847
  /**
1755
1848
  * indicate a change has occured to allows any re-rendering but don't bubble
1756
1849
  * event because that was specific to this branch
1757
1850
  */
1758
1851
  this._onDidChange.fire({ size: e.orthogonalSize });
1759
- });
1852
+ }), ...this.children.map((c, i) => {
1853
+ if (c instanceof BranchNode) {
1854
+ return c.onDidVisibilityChange((visible) => {
1855
+ this.setChildVisible(i, visible);
1856
+ });
1857
+ }
1858
+ return Disposable.NONE;
1859
+ }));
1760
1860
  }
1761
1861
  dispose() {
1762
1862
  this._childrenDisposable.dispose();
@@ -1917,7 +2017,69 @@ class Gridview {
1917
2017
  get maximumHeight() {
1918
2018
  return this.root.maximumHeight;
1919
2019
  }
2020
+ maximizedView() {
2021
+ var _a;
2022
+ return (_a = this._maximizedNode) === null || _a === void 0 ? void 0 : _a.view;
2023
+ }
2024
+ hasMaximizedView() {
2025
+ return this._maximizedNode !== undefined;
2026
+ }
2027
+ maximizeView(view) {
2028
+ const location = getGridLocation(view.element);
2029
+ const [_, node] = this.getNode(location);
2030
+ if (!(node instanceof LeafNode)) {
2031
+ return;
2032
+ }
2033
+ if (this._maximizedNode === node) {
2034
+ return;
2035
+ }
2036
+ if (this.hasMaximizedView()) {
2037
+ this.exitMaximizedView();
2038
+ }
2039
+ function hideAllViewsBut(parent, exclude) {
2040
+ for (let i = 0; i < parent.children.length; i++) {
2041
+ const child = parent.children[i];
2042
+ if (child instanceof LeafNode) {
2043
+ if (child !== exclude) {
2044
+ parent.setChildVisible(i, false);
2045
+ }
2046
+ }
2047
+ else {
2048
+ hideAllViewsBut(child, exclude);
2049
+ }
2050
+ }
2051
+ }
2052
+ hideAllViewsBut(this.root, node);
2053
+ this._maximizedNode = node;
2054
+ this._onDidMaxmizedNodeChange.fire();
2055
+ }
2056
+ exitMaximizedView() {
2057
+ if (!this._maximizedNode) {
2058
+ return;
2059
+ }
2060
+ function showViewsInReverseOrder(parent) {
2061
+ for (let index = parent.children.length - 1; index >= 0; index--) {
2062
+ const child = parent.children[index];
2063
+ if (child instanceof LeafNode) {
2064
+ parent.setChildVisible(index, true);
2065
+ }
2066
+ else {
2067
+ showViewsInReverseOrder(child);
2068
+ }
2069
+ }
2070
+ }
2071
+ showViewsInReverseOrder(this.root);
2072
+ this._maximizedNode = undefined;
2073
+ this._onDidMaxmizedNodeChange.fire();
2074
+ }
1920
2075
  serialize() {
2076
+ if (this.hasMaximizedView()) {
2077
+ /**
2078
+ * do not persist maximized view state but we must first exit any maximized views
2079
+ * before serialization to ensure the correct dimensions are persisted
2080
+ */
2081
+ this.exitMaximizedView();
2082
+ }
1921
2083
  const root = serializeBranchNode(this.getView(), this.orientation);
1922
2084
  return {
1923
2085
  root,
@@ -1929,7 +2091,9 @@ class Gridview {
1929
2091
  dispose() {
1930
2092
  this.disposable.dispose();
1931
2093
  this._onDidChange.dispose();
2094
+ this._onDidMaxmizedNodeChange.dispose();
1932
2095
  this.root.dispose();
2096
+ this._maximizedNode = undefined;
1933
2097
  this.element.remove();
1934
2098
  }
1935
2099
  clear() {
@@ -1970,6 +2134,7 @@ class Gridview {
1970
2134
  const oldRoot = this._root;
1971
2135
  if (oldRoot) {
1972
2136
  oldRoot.dispose();
2137
+ this._maximizedNode = undefined;
1973
2138
  this.element.removeChild(oldRoot.element);
1974
2139
  }
1975
2140
  this._root = root;
@@ -2056,9 +2221,12 @@ class Gridview {
2056
2221
  constructor(proportionalLayout, styles, orientation) {
2057
2222
  this.proportionalLayout = proportionalLayout;
2058
2223
  this.styles = styles;
2224
+ this._maximizedNode = undefined;
2059
2225
  this.disposable = new MutableDisposable();
2060
2226
  this._onDidChange = new Emitter();
2061
2227
  this.onDidChange = this._onDidChange.event;
2228
+ this._onDidMaxmizedNodeChange = new Emitter();
2229
+ this.onDidMaxmizedNodeChange = this._onDidMaxmizedNodeChange.event;
2062
2230
  this.element = document.createElement('div');
2063
2231
  this.element.className = 'grid-view';
2064
2232
  this.root = new BranchNode(orientation, proportionalLayout, styles, 0, 0);
@@ -2072,6 +2240,9 @@ class Gridview {
2072
2240
  return parent.isChildVisible(index);
2073
2241
  }
2074
2242
  setViewVisible(location, visible) {
2243
+ if (this.hasMaximizedView()) {
2244
+ this.exitMaximizedView();
2245
+ }
2075
2246
  const [rest, index] = tail(location);
2076
2247
  const [, parent] = this.getNode(rest);
2077
2248
  if (!(parent instanceof BranchNode)) {
@@ -2080,6 +2251,9 @@ class Gridview {
2080
2251
  parent.setChildVisible(index, visible);
2081
2252
  }
2082
2253
  moveView(parentLocation, from, to) {
2254
+ if (this.hasMaximizedView()) {
2255
+ this.exitMaximizedView();
2256
+ }
2083
2257
  const [, parent] = this.getNode(parentLocation);
2084
2258
  if (!(parent instanceof BranchNode)) {
2085
2259
  throw new Error('Invalid location');
@@ -2087,6 +2261,9 @@ class Gridview {
2087
2261
  parent.moveChild(from, to);
2088
2262
  }
2089
2263
  addView(view, size, location) {
2264
+ if (this.hasMaximizedView()) {
2265
+ this.exitMaximizedView();
2266
+ }
2090
2267
  const [rest, index] = tail(location);
2091
2268
  const [pathToParent, parent] = this.getNode(rest);
2092
2269
  if (parent instanceof BranchNode) {
@@ -2119,6 +2296,9 @@ class Gridview {
2119
2296
  return this.removeView(location, sizing);
2120
2297
  }
2121
2298
  removeView(location, sizing) {
2299
+ if (this.hasMaximizedView()) {
2300
+ this.exitMaximizedView();
2301
+ }
2122
2302
  const [rest, index] = tail(location);
2123
2303
  const [pathToParent, parent] = this.getNode(rest);
2124
2304
  if (!(parent instanceof BranchNode)) {
@@ -2856,6 +3036,24 @@ class DockviewApi {
2856
3036
  moveToPrevious(options) {
2857
3037
  this.component.moveToPrevious(options);
2858
3038
  }
3039
+ maximizeGroup(panel) {
3040
+ this.component.maximizeGroup(panel.group);
3041
+ }
3042
+ hasMaximizedGroup() {
3043
+ return this.component.hasMaximizedGroup();
3044
+ }
3045
+ exitMaxmizedGroup() {
3046
+ this.component.exitMaximizedGroup();
3047
+ }
3048
+ get onDidMaxmizedGroupChange() {
3049
+ return this.component.onDidMaxmizedGroupChange;
3050
+ }
3051
+ /**
3052
+ * Add a popout group in a new Window
3053
+ */
3054
+ addPopoutGroup(item, options) {
3055
+ this.component.addPopoutGroup(item, options);
3056
+ }
2859
3057
  }
2860
3058
 
2861
3059
  class DragAndDropObserver extends CompositeDisposable {
@@ -2866,36 +3064,48 @@ class DragAndDropObserver extends CompositeDisposable {
2866
3064
  this.target = null;
2867
3065
  this.registerListeners();
2868
3066
  }
3067
+ onDragEnter(e) {
3068
+ this.target = e.target;
3069
+ this.callbacks.onDragEnter(e);
3070
+ }
3071
+ onDragOver(e) {
3072
+ e.preventDefault(); // needed so that the drop event fires (https://stackoverflow.com/questions/21339924/drop-event-not-firing-in-chrome)
3073
+ if (this.callbacks.onDragOver) {
3074
+ this.callbacks.onDragOver(e);
3075
+ }
3076
+ }
3077
+ onDragLeave(e) {
3078
+ if (this.target === e.target) {
3079
+ this.target = null;
3080
+ this.callbacks.onDragLeave(e);
3081
+ }
3082
+ }
3083
+ onDragEnd(e) {
3084
+ this.target = null;
3085
+ this.callbacks.onDragEnd(e);
3086
+ }
3087
+ onDrop(e) {
3088
+ this.callbacks.onDrop(e);
3089
+ }
2869
3090
  registerListeners() {
2870
3091
  this.addDisposables(addDisposableListener(this.element, 'dragenter', (e) => {
2871
- this.target = e.target;
2872
- this.callbacks.onDragEnter(e);
3092
+ this.onDragEnter(e);
2873
3093
  }, true));
2874
3094
  this.addDisposables(addDisposableListener(this.element, 'dragover', (e) => {
2875
- e.preventDefault(); // needed so that the drop event fires (https://stackoverflow.com/questions/21339924/drop-event-not-firing-in-chrome)
2876
- if (this.callbacks.onDragOver) {
2877
- this.callbacks.onDragOver(e);
2878
- }
3095
+ this.onDragOver(e);
2879
3096
  }, true));
2880
3097
  this.addDisposables(addDisposableListener(this.element, 'dragleave', (e) => {
2881
- if (this.target === e.target) {
2882
- this.target = null;
2883
- this.callbacks.onDragLeave(e);
2884
- }
3098
+ this.onDragLeave(e);
2885
3099
  }));
2886
3100
  this.addDisposables(addDisposableListener(this.element, 'dragend', (e) => {
2887
- this.target = null;
2888
- this.callbacks.onDragEnd(e);
3101
+ this.onDragEnd(e);
2889
3102
  }));
2890
3103
  this.addDisposables(addDisposableListener(this.element, 'drop', (e) => {
2891
- this.callbacks.onDrop(e);
3104
+ this.onDrop(e);
2892
3105
  }));
2893
3106
  }
2894
3107
  }
2895
3108
 
2896
- function numberOrFallback(maybeNumber, fallback) {
2897
- return typeof maybeNumber === 'number' ? maybeNumber : fallback;
2898
- }
2899
3109
  function directionToPosition(direction) {
2900
3110
  switch (direction) {
2901
3111
  case 'above':
@@ -2928,6 +3138,16 @@ function positionToDirection(position) {
2928
3138
  throw new Error(`invalid position '${position}'`);
2929
3139
  }
2930
3140
  }
3141
+ const DEFAULT_ACTIVATION_SIZE = {
3142
+ value: 20,
3143
+ type: 'percentage',
3144
+ };
3145
+ const DEFAULT_SIZE = {
3146
+ value: 50,
3147
+ type: 'percentage',
3148
+ };
3149
+ const SMALL_WIDTH_BOUNDARY = 100;
3150
+ const SMALL_HEIGHT_BOUNDARY = 100;
2931
3151
  class Droptarget extends CompositeDisposable {
2932
3152
  get state() {
2933
3153
  return this._state;
@@ -2940,7 +3160,7 @@ class Droptarget extends CompositeDisposable {
2940
3160
  this.onDrop = this._onDrop.event;
2941
3161
  // use a set to take advantage of #<set>.has
2942
3162
  this._acceptedTargetZonesSet = new Set(this.options.acceptedTargetZones);
2943
- this.addDisposables(this._onDrop, new DragAndDropObserver(this.element, {
3163
+ this.dnd = new DragAndDropObserver(this.element, {
2944
3164
  onDragEnter: () => undefined,
2945
3165
  onDragOver: (e) => {
2946
3166
  if (this._acceptedTargetZonesSet.size === 0) {
@@ -2988,7 +3208,7 @@ class Droptarget extends CompositeDisposable {
2988
3208
  this.element.append(this.targetElement);
2989
3209
  }
2990
3210
  this.toggleClasses(quadrant, width, height);
2991
- this.setState(quadrant);
3211
+ this._state = quadrant;
2992
3212
  },
2993
3213
  onDragLeave: () => {
2994
3214
  this.removeDropTarget();
@@ -3007,11 +3227,15 @@ class Droptarget extends CompositeDisposable {
3007
3227
  this._onDrop.fire({ position: state, nativeEvent: e });
3008
3228
  }
3009
3229
  },
3010
- }));
3230
+ });
3231
+ this.addDisposables(this._onDrop, this.dnd);
3011
3232
  }
3012
3233
  setTargetZones(acceptedTargetZones) {
3013
3234
  this._acceptedTargetZonesSet = new Set(acceptedTargetZones);
3014
3235
  }
3236
+ setOverlayModel(model) {
3237
+ this.options.overlayModel = model;
3238
+ }
3015
3239
  dispose() {
3016
3240
  this.removeDropTarget();
3017
3241
  super.dispose();
@@ -3023,19 +3247,19 @@ class Droptarget extends CompositeDisposable {
3023
3247
  event[Droptarget.USED_EVENT_ID] = true;
3024
3248
  }
3025
3249
  /**
3026
- * Check is the event has already been used by another instance od DropTarget
3250
+ * Check is the event has already been used by another instance of DropTarget
3027
3251
  */
3028
3252
  isAlreadyUsed(event) {
3029
3253
  const value = event[Droptarget.USED_EVENT_ID];
3030
3254
  return typeof value === 'boolean' && value;
3031
3255
  }
3032
3256
  toggleClasses(quadrant, width, height) {
3033
- var _a, _b, _c, _d;
3257
+ var _a, _b;
3034
3258
  if (!this.overlayElement) {
3035
3259
  return;
3036
3260
  }
3037
- const isSmallX = width < 100;
3038
- const isSmallY = height < 100;
3261
+ const isSmallX = width < SMALL_WIDTH_BOUNDARY;
3262
+ const isSmallY = height < SMALL_HEIGHT_BOUNDARY;
3039
3263
  const isLeft = quadrant === 'left';
3040
3264
  const isRight = quadrant === 'right';
3041
3265
  const isTop = quadrant === 'top';
@@ -3044,20 +3268,17 @@ class Droptarget extends CompositeDisposable {
3044
3268
  const leftClass = !isSmallX && isLeft;
3045
3269
  const topClass = !isSmallY && isTop;
3046
3270
  const bottomClass = !isSmallY && isBottom;
3047
- let size = 0.5;
3048
- if (((_b = (_a = this.options.overlayModel) === null || _a === void 0 ? void 0 : _a.size) === null || _b === void 0 ? void 0 : _b.type) === 'percentage') {
3049
- size = clamp(this.options.overlayModel.size.value, 0, 100) / 100;
3271
+ let size = 1;
3272
+ const sizeOptions = (_b = (_a = this.options.overlayModel) === null || _a === void 0 ? void 0 : _a.size) !== null && _b !== void 0 ? _b : DEFAULT_SIZE;
3273
+ if (sizeOptions.type === 'percentage') {
3274
+ size = clamp(sizeOptions.value, 0, 100) / 100;
3050
3275
  }
3051
- if (((_d = (_c = this.options.overlayModel) === null || _c === void 0 ? void 0 : _c.size) === null || _d === void 0 ? void 0 : _d.type) === 'pixels') {
3276
+ else {
3052
3277
  if (rightClass || leftClass) {
3053
- size =
3054
- clamp(0, this.options.overlayModel.size.value, width) /
3055
- width;
3278
+ size = clamp(0, sizeOptions.value, width) / width;
3056
3279
  }
3057
3280
  if (topClass || bottomClass) {
3058
- size =
3059
- clamp(0, this.options.overlayModel.size.value, height) /
3060
- height;
3281
+ size = clamp(0, sizeOptions.value, height) / height;
3061
3282
  }
3062
3283
  }
3063
3284
  const translate = (1 - size) / 2;
@@ -3079,39 +3300,22 @@ class Droptarget extends CompositeDisposable {
3079
3300
  transform = '';
3080
3301
  }
3081
3302
  this.overlayElement.style.transform = transform;
3082
- toggleClass(this.overlayElement, 'small-right', isSmallX && isRight);
3083
- toggleClass(this.overlayElement, 'small-left', isSmallX && isLeft);
3084
- toggleClass(this.overlayElement, 'small-top', isSmallY && isTop);
3085
- toggleClass(this.overlayElement, 'small-bottom', isSmallY && isBottom);
3086
- }
3087
- setState(quadrant) {
3088
- switch (quadrant) {
3089
- case 'top':
3090
- this._state = 'top';
3091
- break;
3092
- case 'left':
3093
- this._state = 'left';
3094
- break;
3095
- case 'bottom':
3096
- this._state = 'bottom';
3097
- break;
3098
- case 'right':
3099
- this._state = 'right';
3100
- break;
3101
- case 'center':
3102
- this._state = 'center';
3103
- break;
3104
- }
3303
+ toggleClass(this.overlayElement, 'dv-drop-target-small-vertical', isSmallY);
3304
+ toggleClass(this.overlayElement, 'dv-drop-target-small-horizontal', isSmallX);
3305
+ toggleClass(this.overlayElement, 'dv-drop-target-left', isLeft);
3306
+ toggleClass(this.overlayElement, 'dv-drop-target-right', isRight);
3307
+ toggleClass(this.overlayElement, 'dv-drop-target-top', isTop);
3308
+ toggleClass(this.overlayElement, 'dv-drop-target-bottom', isBottom);
3309
+ toggleClass(this.overlayElement, 'dv-drop-target-center', quadrant === 'center');
3105
3310
  }
3106
3311
  calculateQuadrant(overlayType, x, y, width, height) {
3107
- var _a, _b, _c, _d, _e, _f;
3108
- const isPercentage = ((_a = this.options.overlayModel) === null || _a === void 0 ? void 0 : _a.activationSize) === undefined ||
3109
- ((_c = (_b = this.options.overlayModel) === null || _b === void 0 ? void 0 : _b.activationSize) === null || _c === void 0 ? void 0 : _c.type) === 'percentage';
3110
- 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);
3312
+ var _a, _b;
3313
+ const activationSizeOptions = (_b = (_a = this.options.overlayModel) === null || _a === void 0 ? void 0 : _a.activationSize) !== null && _b !== void 0 ? _b : DEFAULT_ACTIVATION_SIZE;
3314
+ const isPercentage = activationSizeOptions.type === 'percentage';
3111
3315
  if (isPercentage) {
3112
- return calculateQuadrantAsPercentage(overlayType, x, y, width, height, value);
3316
+ return calculateQuadrantAsPercentage(overlayType, x, y, width, height, activationSizeOptions.value);
3113
3317
  }
3114
- return calculateQuadrantAsPixels(overlayType, x, y, width, height, value);
3318
+ return calculateQuadrantAsPixels(overlayType, x, y, width, height, activationSizeOptions.value);
3115
3319
  }
3116
3320
  removeDropTarget() {
3117
3321
  if (this.targetElement) {
@@ -3163,12 +3367,22 @@ function calculateQuadrantAsPixels(overlayType, x, y, width, height, threshold)
3163
3367
  return 'center';
3164
3368
  }
3165
3369
 
3370
+ var DockviewDropTargets;
3371
+ (function (DockviewDropTargets) {
3372
+ DockviewDropTargets[DockviewDropTargets["Tab"] = 0] = "Tab";
3373
+ DockviewDropTargets[DockviewDropTargets["Panel"] = 1] = "Panel";
3374
+ DockviewDropTargets[DockviewDropTargets["TabContainer"] = 2] = "TabContainer";
3375
+ DockviewDropTargets[DockviewDropTargets["Edge"] = 3] = "Edge";
3376
+ })(DockviewDropTargets || (DockviewDropTargets = {}));
3377
+
3166
3378
  class ContentContainer extends CompositeDisposable {
3167
3379
  get element() {
3168
3380
  return this._element;
3169
3381
  }
3170
- constructor() {
3382
+ constructor(accessor, group) {
3171
3383
  super();
3384
+ this.accessor = accessor;
3385
+ this.group = group;
3172
3386
  this.disposable = new MutableDisposable();
3173
3387
  this._onDidFocus = new Emitter();
3174
3388
  this.onDidFocus = this._onDidFocus.event;
@@ -3178,11 +3392,38 @@ class ContentContainer extends CompositeDisposable {
3178
3392
  this._element.className = 'content-container';
3179
3393
  this._element.tabIndex = -1;
3180
3394
  this.addDisposables(this._onDidFocus, this._onDidBlur);
3181
- // for hosted containers
3182
- // 1) register a drop target on the host
3183
- // 2) register window dragStart events to disable pointer events
3184
- // 3) register dragEnd events
3185
- // 4) register mouseMove events (if no buttons are present we take this as a dragEnd event)
3395
+ this.dropTarget = new Droptarget(this.element, {
3396
+ acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
3397
+ canDisplayOverlay: (event, position) => {
3398
+ if (this.group.locked === 'no-drop-target' ||
3399
+ (this.group.locked && position === 'center')) {
3400
+ return false;
3401
+ }
3402
+ const data = getPanelData();
3403
+ if (!data &&
3404
+ event.shiftKey &&
3405
+ this.group.location !== 'floating') {
3406
+ return false;
3407
+ }
3408
+ if (data && data.viewId === this.accessor.id) {
3409
+ if (data.groupId === this.group.id) {
3410
+ if (position === 'center') {
3411
+ // don't allow to drop on self for center position
3412
+ return false;
3413
+ }
3414
+ if (data.panelId === null) {
3415
+ // don't allow group move to drop anywhere on self
3416
+ return false;
3417
+ }
3418
+ }
3419
+ const groupHasOnePanelAndIsActiveDragElement = this.group.panels.length === 1 &&
3420
+ data.groupId === this.group.id;
3421
+ return !groupHasOnePanelAndIsActiveDragElement;
3422
+ }
3423
+ return this.group.canDisplayOverlay(event, position, DockviewDropTargets.Panel);
3424
+ },
3425
+ });
3426
+ this.addDisposables(this.dropTarget);
3186
3427
  }
3187
3428
  show() {
3188
3429
  this.element.style.display = '';
@@ -3190,23 +3431,43 @@ class ContentContainer extends CompositeDisposable {
3190
3431
  hide() {
3191
3432
  this.element.style.display = 'none';
3192
3433
  }
3193
- openPanel(panel) {
3194
- var _a;
3195
- if (this.panel === panel) {
3196
- return;
3197
- }
3198
- if (this.panel) {
3199
- if ((_a = this.panel.view) === null || _a === void 0 ? void 0 : _a.content) {
3200
- this._element.removeChild(this.panel.view.content.element);
3201
- }
3202
- this.panel = undefined;
3434
+ renderPanel(panel, options = { asActive: true }) {
3435
+ const doRender = options.asActive ||
3436
+ (this.panel && this.group.isPanelActive(this.panel));
3437
+ if (this.panel &&
3438
+ this.panel.view.content.element.parentElement === this._element) {
3439
+ /**
3440
+ * If the currently attached panel is mounted directly to the content then remove it
3441
+ */
3442
+ this._element.removeChild(this.panel.view.content.element);
3203
3443
  }
3204
3444
  this.panel = panel;
3205
- const disposable = new CompositeDisposable();
3206
- if (this.panel.view) {
3207
- const _onDidFocus = this.panel.view.content.onDidFocus;
3208
- const _onDidBlur = this.panel.view.content.onDidBlur;
3209
- const focusTracker = trackFocus(this._element);
3445
+ let container;
3446
+ switch (panel.api.renderer) {
3447
+ case 'onlyWhenVisibile':
3448
+ this.accessor.overlayRenderContainer.detatch(panel);
3449
+ if (this.panel) {
3450
+ if (doRender) {
3451
+ this._element.appendChild(this.panel.view.content.element);
3452
+ }
3453
+ }
3454
+ container = this._element;
3455
+ break;
3456
+ case 'always':
3457
+ if (panel.view.content.element.parentElement === this._element) {
3458
+ this._element.removeChild(panel.view.content.element);
3459
+ }
3460
+ container = this.accessor.overlayRenderContainer.attach({
3461
+ panel,
3462
+ referenceContainer: this,
3463
+ });
3464
+ break;
3465
+ }
3466
+ if (doRender) {
3467
+ const _onDidFocus = panel.view.content.onDidFocus;
3468
+ const _onDidBlur = panel.view.content.onDidBlur;
3469
+ const focusTracker = trackFocus(container);
3470
+ const disposable = new CompositeDisposable();
3210
3471
  disposable.addDisposables(focusTracker, focusTracker.onDidFocus(() => this._onDidFocus.fire()), focusTracker.onDidBlur(() => this._onDidBlur.fire()));
3211
3472
  if (_onDidFocus) {
3212
3473
  disposable.addDisposables(_onDidFocus(() => this._onDidFocus.fire()));
@@ -3214,17 +3475,23 @@ class ContentContainer extends CompositeDisposable {
3214
3475
  if (_onDidBlur) {
3215
3476
  disposable.addDisposables(_onDidBlur(() => this._onDidBlur.fire()));
3216
3477
  }
3217
- this._element.appendChild(this.panel.view.content.element);
3478
+ this.disposable.value = disposable;
3479
+ }
3480
+ }
3481
+ openPanel(panel) {
3482
+ if (this.panel === panel) {
3483
+ return;
3218
3484
  }
3219
- this.disposable.value = disposable;
3485
+ this.renderPanel(panel);
3220
3486
  }
3221
3487
  layout(_width, _height) {
3222
3488
  // noop
3223
3489
  }
3224
3490
  closePanel() {
3225
- var _a, _b, _c;
3226
- 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) {
3227
- this._element.removeChild(this.panel.view.content.element);
3491
+ if (this.panel) {
3492
+ if (this.accessor.options.defaultRenderer === 'onlyWhenVisibile') {
3493
+ this._element.removeChild(this.panel.view.content.element);
3494
+ }
3228
3495
  this.panel = undefined;
3229
3496
  }
3230
3497
  }
@@ -3234,14 +3501,6 @@ class ContentContainer extends CompositeDisposable {
3234
3501
  }
3235
3502
  }
3236
3503
 
3237
- var DockviewDropTargets;
3238
- (function (DockviewDropTargets) {
3239
- DockviewDropTargets[DockviewDropTargets["Tab"] = 0] = "Tab";
3240
- DockviewDropTargets[DockviewDropTargets["Panel"] = 1] = "Panel";
3241
- DockviewDropTargets[DockviewDropTargets["TabContainer"] = 2] = "TabContainer";
3242
- DockviewDropTargets[DockviewDropTargets["Edge"] = 3] = "Edge";
3243
- })(DockviewDropTargets || (DockviewDropTargets = {}));
3244
-
3245
3504
  class DragHandler extends CompositeDisposable {
3246
3505
  constructor(el) {
3247
3506
  super();
@@ -3416,7 +3675,7 @@ class GroupDragHandler extends DragHandler {
3416
3675
  }, true));
3417
3676
  }
3418
3677
  isCancelled(_event) {
3419
- if (this.group.api.isFloating && !_event.shiftKey) {
3678
+ if (this.group.api.location === 'floating' && !_event.shiftKey) {
3420
3679
  return true;
3421
3680
  }
3422
3681
  return false;
@@ -3618,7 +3877,7 @@ class TabsContainer extends CompositeDisposable {
3618
3877
  const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
3619
3878
  if (isFloatingGroupsEnabled &&
3620
3879
  event.shiftKey &&
3621
- !this.group.api.isFloating) {
3880
+ this.group.api.location !== 'floating') {
3622
3881
  event.preventDefault();
3623
3882
  const { top, left } = this.element.getBoundingClientRect();
3624
3883
  const { top: rootTop, left: rootLeft } = this.accessor.element.getBoundingClientRect();
@@ -3683,7 +3942,7 @@ class TabsContainer extends CompositeDisposable {
3683
3942
  }), tab.onChanged((event) => {
3684
3943
  var _a;
3685
3944
  const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
3686
- const isFloatingWithOnePanel = this.group.api.isFloating && this.size === 1;
3945
+ const isFloatingWithOnePanel = this.group.api.location === 'floating' && this.size === 1;
3687
3946
  if (isFloatingGroupsEnabled &&
3688
3947
  !isFloatingWithOnePanel &&
3689
3948
  event.shiftKey) {
@@ -3766,15 +4025,37 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3766
4025
  }
3767
4026
  return isAncestor(document.activeElement, this.contentContainer.element);
3768
4027
  }
3769
- get isFloating() {
3770
- return this._isFloating;
3771
- }
3772
- set isFloating(value) {
3773
- this._isFloating = value;
3774
- this.dropTarget.setTargetZones(value ? ['center'] : ['top', 'bottom', 'left', 'right', 'center']);
3775
- toggleClass(this.container, 'dv-groupview-floating', value);
3776
- this.groupPanel.api._onDidFloatingStateChange.fire({
3777
- isFloating: this.isFloating,
4028
+ get location() {
4029
+ return this._location;
4030
+ }
4031
+ set location(value) {
4032
+ this._location = value;
4033
+ toggleClass(this.container, 'dv-groupview-floating', false);
4034
+ toggleClass(this.container, 'dv-groupview-popout', false);
4035
+ switch (value) {
4036
+ case 'grid':
4037
+ this.contentContainer.dropTarget.setTargetZones([
4038
+ 'top',
4039
+ 'bottom',
4040
+ 'left',
4041
+ 'right',
4042
+ 'center',
4043
+ ]);
4044
+ break;
4045
+ case 'floating':
4046
+ this.contentContainer.dropTarget.setTargetZones(['center']);
4047
+ this.contentContainer.dropTarget.setTargetZones(value
4048
+ ? ['center']
4049
+ : ['top', 'bottom', 'left', 'right', 'center']);
4050
+ toggleClass(this.container, 'dv-groupview-floating', true);
4051
+ break;
4052
+ case 'popout':
4053
+ this.contentContainer.dropTarget.setTargetZones(['center']);
4054
+ toggleClass(this.container, 'dv-groupview-popout', true);
4055
+ break;
4056
+ }
4057
+ this.groupPanel.api._onDidLocationChange.fire({
4058
+ location: this.location,
3778
4059
  });
3779
4060
  }
3780
4061
  constructor(container, accessor, id, options, groupPanel) {
@@ -3787,7 +4068,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3787
4068
  this.groupPanel = groupPanel;
3788
4069
  this._isGroupActive = false;
3789
4070
  this._locked = false;
3790
- this._isFloating = false;
4071
+ this._location = 'grid';
3791
4072
  this.mostRecentlyUsed = [];
3792
4073
  this._onDidChange = new Emitter();
3793
4074
  this.onDidChange = this._onDidChange.event;
@@ -3810,35 +4091,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3810
4091
  this.onDidActivePanelChange = this._onDidActivePanelChange.event;
3811
4092
  toggleClass(this.container, 'groupview', true);
3812
4093
  this.tabsContainer = new TabsContainer(this.accessor, this.groupPanel);
3813
- this.contentContainer = new ContentContainer();
3814
- this.dropTarget = new Droptarget(this.contentContainer.element, {
3815
- acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
3816
- canDisplayOverlay: (event, position) => {
3817
- if (this.locked === 'no-drop-target' ||
3818
- (this.locked && position === 'center')) {
3819
- return false;
3820
- }
3821
- const data = getPanelData();
3822
- if (!data && event.shiftKey && !this.isFloating) {
3823
- return false;
3824
- }
3825
- if (data && data.viewId === this.accessor.id) {
3826
- if (data.groupId === this.id) {
3827
- if (position === 'center') {
3828
- // don't allow to drop on self for center position
3829
- return false;
3830
- }
3831
- if (data.panelId === null) {
3832
- // don't allow group move to drop anywhere on self
3833
- return false;
3834
- }
3835
- }
3836
- const groupHasOnePanelAndIsActiveDragElement = this._panels.length === 1 && data.groupId === this.id;
3837
- return !groupHasOnePanelAndIsActiveDragElement;
3838
- }
3839
- return this.canDisplayOverlay(event, position, DockviewDropTargets.Panel);
3840
- },
3841
- });
4094
+ this.contentContainer = new ContentContainer(this.accessor, this);
3842
4095
  container.append(this.tabsContainer.element, this.contentContainer.element);
3843
4096
  this.header.hidden = !!options.hideHeader;
3844
4097
  this.locked = (_a = options.locked) !== null && _a !== void 0 ? _a : false;
@@ -3852,7 +4105,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3852
4105
  this.accessor.doSetGroupActive(this.groupPanel, true);
3853
4106
  }), this.contentContainer.onDidBlur(() => {
3854
4107
  // noop
3855
- }), this.dropTarget.onDrop((event) => {
4108
+ }), this.contentContainer.dropTarget.onDrop((event) => {
3856
4109
  this.handleDropEvent(event.nativeEvent, event.position);
3857
4110
  }), this._onMove, this._onDidChange, this._onDidDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange);
3858
4111
  }
@@ -3901,6 +4154,9 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3901
4154
  this.tabsContainer.setPrefixActionsElement(this._prefixHeaderActions.element);
3902
4155
  }
3903
4156
  }
4157
+ rerender(panel) {
4158
+ this.contentContainer.renderPanel(panel, { asActive: false });
4159
+ }
3904
4160
  indexOf(panel) {
3905
4161
  return this.tabsContainer.indexOf(panel.id);
3906
4162
  }
@@ -4092,12 +4348,12 @@ class DockviewGroupPanelModel extends CompositeDisposable {
4092
4348
  doAddPanel(panel, index = this.panels.length, skipSetActive = false) {
4093
4349
  const existingPanel = this._panels.indexOf(panel);
4094
4350
  const hasExistingPanel = existingPanel > -1;
4351
+ this.tabsContainer.show();
4352
+ this.contentContainer.show();
4095
4353
  this.tabsContainer.openPanel(panel, index);
4096
4354
  if (!skipSetActive) {
4097
4355
  this.contentContainer.openPanel(panel);
4098
4356
  }
4099
- this.tabsContainer.show();
4100
- this.contentContainer.show();
4101
4357
  if (hasExistingPanel) {
4102
4358
  // TODO - need to ensure ordering hasn't changed and if it has need to re-order this.panels
4103
4359
  return;
@@ -4213,7 +4469,6 @@ class DockviewGroupPanelModel extends CompositeDisposable {
4213
4469
  for (const panel of this.panels) {
4214
4470
  panel.dispose();
4215
4471
  }
4216
- this.dropTarget.dispose();
4217
4472
  this.tabsContainer.dispose();
4218
4473
  this.contentContainer.dispose();
4219
4474
  }
@@ -4252,7 +4507,22 @@ class Resizable extends CompositeDisposable {
4252
4507
  if (this.disableResizing) {
4253
4508
  return;
4254
4509
  }
4255
- if (!document.body.contains(this._element)) {
4510
+ if (!this._element.offsetParent) {
4511
+ /**
4512
+ * offsetParent === null is equivalent to display: none being set on the element or one
4513
+ * of it's parents. In the display: none case the size will become (0, 0) which we do
4514
+ * not want to propagate.
4515
+ *
4516
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent
4517
+ *
4518
+ * You could use checkVisibility() but at the time of writing it's not supported across
4519
+ * all Browsers
4520
+ *
4521
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/checkVisibility
4522
+ */
4523
+ return;
4524
+ }
4525
+ if (!isInDocument(this._element)) {
4256
4526
  /**
4257
4527
  * since the event is dispatched through requestAnimationFrame there is a small chance
4258
4528
  * the component is no longer attached to the DOM, if that is the case the dimensions
@@ -4344,6 +4614,21 @@ class BaseGrid extends Resizable {
4344
4614
  isVisible(panel) {
4345
4615
  return this.gridview.isViewVisible(getGridLocation(panel.element));
4346
4616
  }
4617
+ maximizeGroup(panel) {
4618
+ this.gridview.maximizeView(panel);
4619
+ }
4620
+ isMaximizedGroup(panel) {
4621
+ return this.gridview.maximizedView() === panel;
4622
+ }
4623
+ exitMaximizedGroup() {
4624
+ this.gridview.exitMaximizedView();
4625
+ }
4626
+ hasMaximizedGroup() {
4627
+ return this.gridview.hasMaximizedView();
4628
+ }
4629
+ get onDidMaxmizedGroupChange() {
4630
+ return this.gridview.onDidMaxmizedNodeChange;
4631
+ }
4347
4632
  doAddGroup(group, location = [0], size) {
4348
4633
  this.gridview.addView(group, size !== null && size !== void 0 ? size : Sizing.Distribute, location);
4349
4634
  this._onDidAddGroup.fire(group);
@@ -5120,32 +5405,63 @@ class GridviewPanel extends BasePanelView {
5120
5405
  }
5121
5406
  }
5122
5407
 
5408
+ // TODO find a better way to initialize and avoid needing null checks
5409
+ const NOT_INITIALIZED_MESSAGE = 'DockviewGroupPanelApiImpl not initialized';
5123
5410
  class DockviewGroupPanelApiImpl extends GridviewPanelApiImpl {
5124
- get isFloating() {
5411
+ get location() {
5125
5412
  if (!this._group) {
5126
- throw new Error(`DockviewGroupPanelApiImpl not initialized`);
5413
+ throw new Error(NOT_INITIALIZED_MESSAGE);
5127
5414
  }
5128
- return this._group.model.isFloating;
5415
+ return this._group.model.location;
5129
5416
  }
5130
5417
  constructor(id, accessor) {
5131
5418
  super(id);
5132
5419
  this.accessor = accessor;
5133
- this._onDidFloatingStateChange = new Emitter();
5134
- this.onDidFloatingStateChange = this._onDidFloatingStateChange.event;
5135
- this.addDisposables(this._onDidFloatingStateChange);
5420
+ this._onDidLocationChange = new Emitter();
5421
+ this.onDidLocationChange = this._onDidLocationChange.event;
5422
+ this.addDisposables(this._onDidLocationChange);
5136
5423
  }
5137
5424
  moveTo(options) {
5138
- var _a;
5425
+ var _a, _b, _c;
5426
+ if (!this._group) {
5427
+ throw new Error(NOT_INITIALIZED_MESSAGE);
5428
+ }
5429
+ const group = (_a = options.group) !== null && _a !== void 0 ? _a : this.accessor.addGroup({
5430
+ direction: positionToDirection((_b = options.position) !== null && _b !== void 0 ? _b : 'right'),
5431
+ });
5432
+ this.accessor.moveGroupOrPanel(group, this._group.id, undefined, options.group ? (_c = options.position) !== null && _c !== void 0 ? _c : 'center' : 'center');
5433
+ }
5434
+ maximize() {
5435
+ if (!this._group) {
5436
+ throw new Error(NOT_INITIALIZED_MESSAGE);
5437
+ }
5438
+ if (this.location !== 'grid') {
5439
+ // only grid groups can be maximized
5440
+ return;
5441
+ }
5442
+ this.accessor.maximizeGroup(this._group);
5443
+ }
5444
+ isMaximized() {
5139
5445
  if (!this._group) {
5140
- throw new Error(`DockviewGroupPanelApiImpl not initialized`);
5446
+ throw new Error(NOT_INITIALIZED_MESSAGE);
5447
+ }
5448
+ return this.accessor.isMaximizedGroup(this._group);
5449
+ }
5450
+ exitMaximized() {
5451
+ if (!this._group) {
5452
+ throw new Error(NOT_INITIALIZED_MESSAGE);
5453
+ }
5454
+ if (this.isMaximized()) {
5455
+ this.accessor.exitMaximizedGroup();
5141
5456
  }
5142
- this.accessor.moveGroupOrPanel(options.group, this._group.id, undefined, (_a = options.position) !== null && _a !== void 0 ? _a : 'center');
5143
5457
  }
5144
5458
  initialize(group) {
5145
5459
  this._group = group;
5146
5460
  }
5147
5461
  }
5148
5462
 
5463
+ const MINIMUM_DOCKVIEW_GROUP_PANEL_WIDTH = 100;
5464
+ const MINIMUM_DOCKVIEW_GROUP_PANEL_HEIGHT = 100;
5149
5465
  class DockviewGroupPanel extends GridviewPanel {
5150
5466
  get panels() {
5151
5467
  return this._model.panels;
@@ -5170,8 +5486,8 @@ class DockviewGroupPanel extends GridviewPanel {
5170
5486
  }
5171
5487
  constructor(accessor, id, options) {
5172
5488
  super(id, 'groupview_default', {
5173
- minimumHeight: 100,
5174
- minimumWidth: 100,
5489
+ minimumHeight: MINIMUM_DOCKVIEW_GROUP_PANEL_HEIGHT,
5490
+ minimumWidth: MINIMUM_DOCKVIEW_GROUP_PANEL_WIDTH,
5175
5491
  }, new DockviewGroupPanelApiImpl(id, accessor));
5176
5492
  this.api.initialize(this); // cannot use 'this' after after 'super' call
5177
5493
  this._model = new DockviewGroupPanelModel(this.element, accessor, id, options, this);
@@ -5225,8 +5541,10 @@ class DockviewPanelApiImpl extends GridviewPanelApiImpl {
5225
5541
  return this.panel.title;
5226
5542
  }
5227
5543
  get isGroupActive() {
5228
- var _a;
5229
- return !!((_a = this.group) === null || _a === void 0 ? void 0 : _a.isActive);
5544
+ return this.group.isActive;
5545
+ }
5546
+ get renderer() {
5547
+ return this.panel.renderer;
5230
5548
  }
5231
5549
  set group(value) {
5232
5550
  const isOldGroupActive = this.isGroupActive;
@@ -5254,10 +5572,12 @@ class DockviewPanelApiImpl extends GridviewPanelApiImpl {
5254
5572
  this.onDidActiveGroupChange = this._onDidActiveGroupChange.event;
5255
5573
  this._onDidGroupChange = new Emitter();
5256
5574
  this.onDidGroupChange = this._onDidGroupChange.event;
5575
+ this._onDidRendererChange = new Emitter();
5576
+ this.onDidRendererChange = this._onDidRendererChange.event;
5257
5577
  this.disposable = new MutableDisposable();
5258
5578
  this.initialize(panel);
5259
5579
  this._group = group;
5260
- this.addDisposables(this.disposable, this._onDidTitleChange, this._onDidGroupChange, this._onDidActiveGroupChange);
5580
+ this.addDisposables(this.disposable, this._onDidRendererChange, this._onDidTitleChange, this._onDidGroupChange, this._onDidActiveGroupChange);
5261
5581
  }
5262
5582
  moveTo(options) {
5263
5583
  var _a;
@@ -5266,9 +5586,21 @@ class DockviewPanelApiImpl extends GridviewPanelApiImpl {
5266
5586
  setTitle(title) {
5267
5587
  this.panel.setTitle(title);
5268
5588
  }
5589
+ setRenderer(renderer) {
5590
+ this.panel.setRenderer(renderer);
5591
+ }
5269
5592
  close() {
5270
5593
  this.group.model.closePanel(this.panel);
5271
5594
  }
5595
+ maximize() {
5596
+ this.group.api.maximize();
5597
+ }
5598
+ isMaximized() {
5599
+ return this.group.api.isMaximized();
5600
+ }
5601
+ exitMaximized() {
5602
+ this.group.api.exitMaximized();
5603
+ }
5272
5604
  }
5273
5605
 
5274
5606
  class DockviewPanel extends CompositeDisposable {
@@ -5281,11 +5613,17 @@ class DockviewPanel extends CompositeDisposable {
5281
5613
  get group() {
5282
5614
  return this._group;
5283
5615
  }
5284
- constructor(id, accessor, containerApi, group, view) {
5616
+ get renderer() {
5617
+ var _a;
5618
+ return (_a = this._renderer) !== null && _a !== void 0 ? _a : this.accessor.renderer;
5619
+ }
5620
+ constructor(id, accessor, containerApi, group, view, options) {
5285
5621
  super();
5286
5622
  this.id = id;
5623
+ this.accessor = accessor;
5287
5624
  this.containerApi = containerApi;
5288
5625
  this.view = view;
5626
+ this._renderer = options.renderer;
5289
5627
  this._group = group;
5290
5628
  this.api = new DockviewPanelApiImpl(this, this._group, accessor);
5291
5629
  this.addDisposables(this.api.onActiveChange(() => {
@@ -5294,6 +5632,8 @@ class DockviewPanel extends CompositeDisposable {
5294
5632
  // forward the resize event to the group since if you want to resize a panel
5295
5633
  // you are actually just resizing the panels parent which is the group
5296
5634
  this.group.api.setSize(event);
5635
+ }), this.api.onDidRendererChange((event) => {
5636
+ this.group.model.rerender(this);
5297
5637
  }));
5298
5638
  }
5299
5639
  init(params) {
@@ -5313,6 +5653,7 @@ class DockviewPanel extends CompositeDisposable {
5313
5653
  ? this._params
5314
5654
  : undefined,
5315
5655
  title: this.title,
5656
+ renderer: this._renderer,
5316
5657
  };
5317
5658
  }
5318
5659
  setTitle(title) {
@@ -5328,6 +5669,15 @@ class DockviewPanel extends CompositeDisposable {
5328
5669
  this.api._onDidTitleChange.fire({ title });
5329
5670
  }
5330
5671
  }
5672
+ setRenderer(renderer) {
5673
+ const didChange = renderer !== this.renderer;
5674
+ if (didChange) {
5675
+ this._renderer = renderer;
5676
+ this.api._onDidRendererChange.fire({
5677
+ renderer: renderer,
5678
+ });
5679
+ }
5680
+ }
5331
5681
  update(event) {
5332
5682
  var _a;
5333
5683
  // merge the new parameters with the existing parameters
@@ -5546,8 +5896,8 @@ class DockviewPanelModel {
5546
5896
  }
5547
5897
 
5548
5898
  class DefaultDockviewDeserialzier {
5549
- constructor(layout) {
5550
- this.layout = layout;
5899
+ constructor(accessor) {
5900
+ this.accessor = accessor;
5551
5901
  }
5552
5902
  fromJSON(panelData, group) {
5553
5903
  var _a, _b;
@@ -5561,8 +5911,10 @@ class DefaultDockviewDeserialzier {
5561
5911
  const tabComponent = viewData
5562
5912
  ? (_b = viewData.tab) === null || _b === void 0 ? void 0 : _b.id
5563
5913
  : panelData.tabComponent;
5564
- const view = new DockviewPanelModel(this.layout, panelId, contentComponent, tabComponent);
5565
- const panel = new DockviewPanel(panelId, this.layout, new DockviewApi(this.layout), group, view);
5914
+ const view = new DockviewPanelModel(this.accessor, panelId, contentComponent, tabComponent);
5915
+ const panel = new DockviewPanel(panelId, this.accessor, new DockviewApi(this.accessor), group, view, {
5916
+ renderer: panelData.renderer,
5917
+ });
5566
5918
  panel.init({
5567
5919
  title: title !== null && title !== void 0 ? title : panelId,
5568
5920
  params: params !== null && params !== void 0 ? params : {},
@@ -5942,7 +6294,265 @@ class DockviewFloatingGroupPanel extends CompositeDisposable {
5942
6294
  }
5943
6295
  }
5944
6296
 
6297
+ class PopoutWindow extends CompositeDisposable {
6298
+ constructor(id, className, options) {
6299
+ super();
6300
+ this.id = id;
6301
+ this.className = className;
6302
+ this.options = options;
6303
+ this._onDidClose = new Emitter();
6304
+ this.onDidClose = this._onDidClose.event;
6305
+ this._window = null;
6306
+ this.addDisposables(this._onDidClose, {
6307
+ dispose: () => {
6308
+ this.close();
6309
+ },
6310
+ });
6311
+ }
6312
+ dimensions() {
6313
+ if (!this._window) {
6314
+ return null;
6315
+ }
6316
+ const left = this._window.value.screenX;
6317
+ const top = this._window.value.screenY;
6318
+ const width = this._window.value.innerWidth;
6319
+ const height = this._window.value.innerHeight;
6320
+ return { top, left, width, height };
6321
+ }
6322
+ close() {
6323
+ if (this._window) {
6324
+ this._window.disposable.dispose();
6325
+ this._window.value.close();
6326
+ this._window = null;
6327
+ }
6328
+ }
6329
+ open(content) {
6330
+ if (this._window) {
6331
+ throw new Error('instance of popout window is already open');
6332
+ }
6333
+ const url = `${this.options.url}`;
6334
+ const features = Object.entries({
6335
+ top: this.options.top,
6336
+ left: this.options.left,
6337
+ width: this.options.width,
6338
+ height: this.options.height,
6339
+ })
6340
+ .map(([key, value]) => `${key}=${value}`)
6341
+ .join(',');
6342
+ // https://developer.mozilla.org/en-US/docs/Web/API/Window/open
6343
+ const externalWindow = window.open(url, this.id, features);
6344
+ if (!externalWindow) {
6345
+ return;
6346
+ }
6347
+ const disposable = new CompositeDisposable();
6348
+ this._window = { value: externalWindow, disposable };
6349
+ const cleanUp = () => {
6350
+ this._onDidClose.fire();
6351
+ this._window = null;
6352
+ };
6353
+ // prevent any default content from loading
6354
+ // externalWindow.document.body.replaceWith(document.createElement('div'));
6355
+ disposable.addDisposables(addDisposableWindowListener(window, 'beforeunload', () => {
6356
+ cleanUp();
6357
+ this.close();
6358
+ }));
6359
+ externalWindow.addEventListener('load', () => {
6360
+ const externalDocument = externalWindow.document;
6361
+ externalDocument.title = document.title;
6362
+ const div = document.createElement('div');
6363
+ div.classList.add('dv-popout-window');
6364
+ div.style.position = 'absolute';
6365
+ div.style.width = '100%';
6366
+ div.style.height = '100%';
6367
+ div.style.top = '0px';
6368
+ div.style.left = '0px';
6369
+ div.classList.add(this.className);
6370
+ div.appendChild(content);
6371
+ externalDocument.body.replaceChildren(div);
6372
+ externalDocument.body.classList.add(this.className);
6373
+ addStyles(externalDocument, window.document.styleSheets);
6374
+ externalWindow.addEventListener('beforeunload', () => {
6375
+ // TODO: indicate external window is closing
6376
+ cleanUp();
6377
+ });
6378
+ });
6379
+ }
6380
+ }
6381
+
6382
+ class DockviewPopoutGroupPanel extends CompositeDisposable {
6383
+ constructor(id, group, options) {
6384
+ var _a;
6385
+ super();
6386
+ this.id = id;
6387
+ this.group = group;
6388
+ this.options = options;
6389
+ this.window = new PopoutWindow(id, (_a = options.className) !== null && _a !== void 0 ? _a : '', {
6390
+ url: this.options.popoutUrl,
6391
+ left: this.options.box.left,
6392
+ top: this.options.box.top,
6393
+ width: this.options.box.width,
6394
+ height: this.options.box.height,
6395
+ });
6396
+ group.model.location = 'popout';
6397
+ this.addDisposables(this.window, {
6398
+ dispose: () => {
6399
+ group.model.location = 'grid';
6400
+ },
6401
+ }, this.window.onDidClose(() => {
6402
+ this.dispose();
6403
+ }));
6404
+ this.window.open(group.element);
6405
+ }
6406
+ }
6407
+
5945
6408
  const DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE = 100;
6409
+ const DEFAULT_FLOATING_GROUP_POSITION = { left: 100, top: 100 };
6410
+
6411
+ function createFocusableElement() {
6412
+ const element = document.createElement('div');
6413
+ element.tabIndex = -1;
6414
+ return element;
6415
+ }
6416
+ class OverlayRenderContainer extends CompositeDisposable {
6417
+ constructor(element) {
6418
+ super();
6419
+ this.element = element;
6420
+ this.map = {};
6421
+ this.addDisposables(Disposable.from(() => {
6422
+ for (const value of Object.values(this.map)) {
6423
+ value.disposable.dispose();
6424
+ value.destroy.dispose();
6425
+ }
6426
+ }));
6427
+ }
6428
+ detatch(panel) {
6429
+ if (this.map[panel.api.id]) {
6430
+ const { disposable, destroy } = this.map[panel.api.id];
6431
+ disposable.dispose();
6432
+ destroy.dispose();
6433
+ delete this.map[panel.api.id];
6434
+ return true;
6435
+ }
6436
+ return false;
6437
+ }
6438
+ attach(options) {
6439
+ const { panel, referenceContainer } = options;
6440
+ if (!this.map[panel.api.id]) {
6441
+ const element = createFocusableElement();
6442
+ element.className = 'dv-render-overlay';
6443
+ this.map[panel.api.id] = {
6444
+ panel,
6445
+ disposable: Disposable.NONE,
6446
+ destroy: Disposable.NONE,
6447
+ element,
6448
+ };
6449
+ }
6450
+ const focusContainer = this.map[panel.api.id].element;
6451
+ if (panel.view.content.element.parentElement !== focusContainer) {
6452
+ focusContainer.appendChild(panel.view.content.element);
6453
+ }
6454
+ if (focusContainer.parentElement !== this.element) {
6455
+ this.element.appendChild(focusContainer);
6456
+ }
6457
+ const resize = () => {
6458
+ // TODO propagate position to avoid getDomNodePagePosition calls, possible performance bottleneck?
6459
+ const box = getDomNodePagePosition(referenceContainer.element);
6460
+ const box2 = getDomNodePagePosition(this.element);
6461
+ focusContainer.style.left = `${box.left - box2.left}px`;
6462
+ focusContainer.style.top = `${box.top - box2.top}px`;
6463
+ focusContainer.style.width = `${box.width}px`;
6464
+ focusContainer.style.height = `${box.height}px`;
6465
+ toggleClass(focusContainer, 'dv-render-overlay-float', panel.group.api.location === 'floating');
6466
+ };
6467
+ const visibilityChanged = () => {
6468
+ if (panel.api.isVisible) {
6469
+ resize();
6470
+ }
6471
+ focusContainer.style.display = panel.api.isVisible ? '' : 'none';
6472
+ };
6473
+ const disposable = new CompositeDisposable(
6474
+ /**
6475
+ * since container is positioned absoutely we must explicitly forward
6476
+ * the dnd events for the expect behaviours to continue to occur in terms of dnd
6477
+ *
6478
+ * the dnd observer does not need to be conditional on whether the panel is visible since
6479
+ * non-visible panels are 'display: none' and in such case the dnd observer will not fire.
6480
+ */
6481
+ new DragAndDropObserver(focusContainer, {
6482
+ onDragEnd: (e) => {
6483
+ referenceContainer.dropTarget.dnd.onDragEnd(e);
6484
+ },
6485
+ onDragEnter: (e) => {
6486
+ referenceContainer.dropTarget.dnd.onDragEnter(e);
6487
+ },
6488
+ onDragLeave: (e) => {
6489
+ referenceContainer.dropTarget.dnd.onDragLeave(e);
6490
+ },
6491
+ onDrop: (e) => {
6492
+ referenceContainer.dropTarget.dnd.onDrop(e);
6493
+ },
6494
+ onDragOver: (e) => {
6495
+ referenceContainer.dropTarget.dnd.onDragOver(e);
6496
+ },
6497
+ }), panel.api.onDidVisibilityChange((event) => {
6498
+ /**
6499
+ * Control the visibility of the content, however even when not visible (display: none)
6500
+ * the content is still maintained within the DOM hence DOM specific attributes
6501
+ * such as scroll position are maintained when next made visible.
6502
+ */
6503
+ visibilityChanged();
6504
+ }), panel.api.onDidDimensionsChange(() => {
6505
+ if (!panel.api.isVisible) {
6506
+ return;
6507
+ }
6508
+ resize();
6509
+ }));
6510
+ this.map[panel.api.id].destroy = Disposable.from(() => {
6511
+ focusContainer.removeChild(panel.view.content.element);
6512
+ this.element.removeChild(focusContainer);
6513
+ });
6514
+ queueMicrotask(() => {
6515
+ if (this.isDisposed) {
6516
+ return;
6517
+ }
6518
+ /**
6519
+ * wait until everything has finished in the current stack-frame call before
6520
+ * calling the first resize as other size-altering events may still occur before
6521
+ * the end of the stack-frame.
6522
+ */
6523
+ visibilityChanged();
6524
+ });
6525
+ // dispose of logic asoccciated with previous reference-container
6526
+ this.map[panel.api.id].disposable.dispose();
6527
+ // and reset the disposable to the active reference-container
6528
+ this.map[panel.api.id].disposable = disposable;
6529
+ return focusContainer;
6530
+ }
6531
+ }
6532
+
6533
+ const DEFAULT_ROOT_OVERLAY_MODEL = {
6534
+ activationSize: { type: 'pixels', value: 10 },
6535
+ size: { type: 'pixels', value: 20 },
6536
+ };
6537
+ function getTheme(element) {
6538
+ function toClassList(element) {
6539
+ const list = [];
6540
+ for (let i = 0; i < element.classList.length; i++) {
6541
+ list.push(element.classList.item(i));
6542
+ }
6543
+ return list;
6544
+ }
6545
+ let theme = undefined;
6546
+ let parent = element;
6547
+ while (parent !== null) {
6548
+ theme = toClassList(parent).find((cls) => cls.startsWith('dockview-theme-'));
6549
+ if (typeof theme === 'string') {
6550
+ break;
6551
+ }
6552
+ parent = parent.parentElement;
6553
+ }
6554
+ return theme;
6555
+ }
5946
6556
  class DockviewComponent extends BaseGrid {
5947
6557
  get orientation() {
5948
6558
  return this.gridview.orientation;
@@ -5963,8 +6573,12 @@ class DockviewComponent extends BaseGrid {
5963
6573
  }
5964
6574
  return activeGroup.activePanel;
5965
6575
  }
5966
- constructor(options) {
6576
+ get renderer() {
5967
6577
  var _a;
6578
+ return (_a = this.options.defaultRenderer) !== null && _a !== void 0 ? _a : 'onlyWhenVisibile';
6579
+ }
6580
+ constructor(options) {
6581
+ var _a, _b;
5968
6582
  super({
5969
6583
  proportionalLayout: true,
5970
6584
  orientation: (_a = options.orientation) !== null && _a !== void 0 ? _a : Orientation.HORIZONTAL,
@@ -5989,12 +6603,27 @@ class DockviewComponent extends BaseGrid {
5989
6603
  this.onDidLayoutFromJSON = this._onDidLayoutFromJSON.event;
5990
6604
  this._onDidActivePanelChange = new Emitter();
5991
6605
  this.onDidActivePanelChange = this._onDidActivePanelChange.event;
5992
- this.floatingGroups = [];
6606
+ this._floatingGroups = [];
6607
+ this._popoutGroups = [];
6608
+ const gready = document.createElement('div');
6609
+ gready.className = 'dv-overlay-render-container';
6610
+ this.gridview.element.appendChild(gready);
6611
+ this.overlayRenderContainer = new OverlayRenderContainer(gready);
5993
6612
  toggleClass(this.gridview.element, 'dv-dockview', true);
5994
- this.addDisposables(this._onWillDragPanel, this._onWillDragGroup, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, Event.any(this.onDidAddGroup, this.onDidRemoveGroup)(() => {
6613
+ toggleClass(this.element, 'dv-debug', !!options.debug);
6614
+ this.addDisposables(this.overlayRenderContainer, this._onWillDragPanel, this._onWillDragGroup, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, Event.any(this.onDidAddGroup, this.onDidRemoveGroup)(() => {
5995
6615
  this.updateWatermark();
5996
6616
  }), Event.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidActivePanelChange)(() => {
5997
6617
  this._bufferOnDidLayoutChange.fire();
6618
+ }), Disposable.from(() => {
6619
+ // iterate over a copy of the array since .dispose() mutates the original array
6620
+ for (const group of [...this._floatingGroups]) {
6621
+ group.dispose();
6622
+ }
6623
+ // iterate over a copy of the array since .dispose() mutates the original array
6624
+ for (const group of [...this._popoutGroups]) {
6625
+ group.dispose();
6626
+ }
5998
6627
  }));
5999
6628
  this._options = options;
6000
6629
  if (!this.options.components) {
@@ -6013,7 +6642,7 @@ class DockviewComponent extends BaseGrid {
6013
6642
  !this.options.watermarkFrameworkComponent) {
6014
6643
  this.options.watermarkComponent = Watermark;
6015
6644
  }
6016
- const dropTarget = new Droptarget(this.element, {
6645
+ this._rootDropTarget = new Droptarget(this.element, {
6017
6646
  canDisplayOverlay: (event, position) => {
6018
6647
  const data = getPanelData();
6019
6648
  if (data) {
@@ -6046,12 +6675,9 @@ class DockviewComponent extends BaseGrid {
6046
6675
  return false;
6047
6676
  },
6048
6677
  acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
6049
- overlayModel: {
6050
- activationSize: { type: 'pixels', value: 10 },
6051
- size: { type: 'pixels', value: 20 },
6052
- },
6678
+ overlayModel: (_b = this.options.rootOverlayModel) !== null && _b !== void 0 ? _b : DEFAULT_ROOT_OVERLAY_MODEL,
6053
6679
  });
6054
- this.addDisposables(dropTarget.onDrop((event) => {
6680
+ this.addDisposables(this._rootDropTarget.onDrop((event) => {
6055
6681
  var _a;
6056
6682
  const data = getPanelData();
6057
6683
  if (data) {
@@ -6060,10 +6686,59 @@ class DockviewComponent extends BaseGrid {
6060
6686
  else {
6061
6687
  this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api, group: null, getData: getPanelData }));
6062
6688
  }
6063
- }), dropTarget);
6689
+ }), this._rootDropTarget);
6064
6690
  this._api = new DockviewApi(this);
6065
6691
  this.updateWatermark();
6066
6692
  }
6693
+ addPopoutGroup(item, options) {
6694
+ var _a;
6695
+ let group;
6696
+ let box = options === null || options === void 0 ? void 0 : options.position;
6697
+ if (item instanceof DockviewPanel) {
6698
+ group = this.createGroup();
6699
+ this.removePanel(item, {
6700
+ removeEmptyGroup: true,
6701
+ skipDispose: true,
6702
+ });
6703
+ group.model.openPanel(item);
6704
+ if (!box) {
6705
+ box = this.element.getBoundingClientRect();
6706
+ }
6707
+ }
6708
+ else {
6709
+ group = item;
6710
+ if (!box) {
6711
+ box = group.element.getBoundingClientRect();
6712
+ }
6713
+ const skip = typeof (options === null || options === void 0 ? void 0 : options.skipRemoveGroup) === 'boolean' &&
6714
+ options.skipRemoveGroup;
6715
+ if (!skip) {
6716
+ this.doRemoveGroup(item, { skipDispose: true });
6717
+ }
6718
+ }
6719
+ const theme = getTheme(this.gridview.element);
6720
+ const popoutWindow = new DockviewPopoutGroupPanel(`${this.id}-${group.id}`, // globally unique within dockview
6721
+ group, {
6722
+ className: theme !== null && theme !== void 0 ? theme : '',
6723
+ popoutUrl: (_a = options === null || options === void 0 ? void 0 : options.popoutUrl) !== null && _a !== void 0 ? _a : '/popout.html',
6724
+ box: {
6725
+ left: window.screenX + box.left,
6726
+ top: window.screenY + box.top,
6727
+ width: box.width,
6728
+ height: box.height,
6729
+ },
6730
+ });
6731
+ popoutWindow.addDisposables({
6732
+ dispose: () => {
6733
+ remove(this._popoutGroups, popoutWindow);
6734
+ this.updateWatermark();
6735
+ },
6736
+ }, popoutWindow.window.onDidClose(() => {
6737
+ this.doAddGroup(group, [0]);
6738
+ }));
6739
+ this._popoutGroups.push(popoutWindow);
6740
+ this.updateWatermark();
6741
+ }
6067
6742
  addFloatingGroup(item, coord, options) {
6068
6743
  var _a, _b, _c, _d, _e, _f;
6069
6744
  let group;
@@ -6083,9 +6758,13 @@ class DockviewComponent extends BaseGrid {
6083
6758
  this.doRemoveGroup(item, { skipDispose: true });
6084
6759
  }
6085
6760
  }
6086
- group.model.isFloating = true;
6087
- const overlayLeft = typeof (coord === null || coord === void 0 ? void 0 : coord.x) === 'number' ? Math.max(coord.x, 0) : 100;
6088
- const overlayTop = typeof (coord === null || coord === void 0 ? void 0 : coord.y) === 'number' ? Math.max(coord.y, 0) : 100;
6761
+ group.model.location = 'floating';
6762
+ const overlayLeft = typeof (coord === null || coord === void 0 ? void 0 : coord.x) === 'number'
6763
+ ? Math.max(coord.x, 0)
6764
+ : DEFAULT_FLOATING_GROUP_POSITION.left;
6765
+ const overlayTop = typeof (coord === null || coord === void 0 ? void 0 : coord.y) === 'number'
6766
+ ? Math.max(coord.y, 0)
6767
+ : DEFAULT_FLOATING_GROUP_POSITION.top;
6089
6768
  const overlay = new Overlay({
6090
6769
  container: this.gridview.element,
6091
6770
  content: group.element,
@@ -6129,12 +6808,12 @@ class DockviewComponent extends BaseGrid {
6129
6808
  }), {
6130
6809
  dispose: () => {
6131
6810
  disposable.dispose();
6132
- group.model.isFloating = false;
6133
- remove(this.floatingGroups, floatingGroupPanel);
6811
+ group.model.location = 'grid';
6812
+ remove(this._floatingGroups, floatingGroupPanel);
6134
6813
  this.updateWatermark();
6135
6814
  },
6136
6815
  });
6137
- this.floatingGroups.push(floatingGroupPanel);
6816
+ this._floatingGroups.push(floatingGroupPanel);
6138
6817
  this.updateWatermark();
6139
6818
  }
6140
6819
  orthogonalize(position) {
@@ -6170,16 +6849,18 @@ class DockviewComponent extends BaseGrid {
6170
6849
  }
6171
6850
  updateOptions(options) {
6172
6851
  var _a, _b;
6173
- const hasOrientationChanged = typeof options.orientation === 'string' &&
6852
+ const changed_orientation = typeof options.orientation === 'string' &&
6174
6853
  this.gridview.orientation !== options.orientation;
6175
- const hasFloatingGroupOptionsChanged = options.floatingGroupBounds !== undefined &&
6854
+ const changed_floatingGroupBounds = options.floatingGroupBounds !== undefined &&
6176
6855
  options.floatingGroupBounds !== this.options.floatingGroupBounds;
6856
+ const changed_rootOverlayOptions = options.rootOverlayModel !== undefined &&
6857
+ options.rootOverlayModel !== this.options.rootOverlayModel;
6177
6858
  this._options = Object.assign(Object.assign({}, this.options), options);
6178
- if (hasOrientationChanged) {
6859
+ if (changed_orientation) {
6179
6860
  this.gridview.orientation = options.orientation;
6180
6861
  }
6181
- if (hasFloatingGroupOptionsChanged) {
6182
- for (const group of this.floatingGroups) {
6862
+ if (changed_floatingGroupBounds) {
6863
+ for (const group of this._floatingGroups) {
6183
6864
  switch (this.options.floatingGroupBounds) {
6184
6865
  case 'boundedWithinViewport':
6185
6866
  group.overlay.minimumInViewportHeight = undefined;
@@ -6200,12 +6881,15 @@ class DockviewComponent extends BaseGrid {
6200
6881
  group.overlay.setBounds({});
6201
6882
  }
6202
6883
  }
6884
+ if (changed_rootOverlayOptions) {
6885
+ this._rootDropTarget.setOverlayModel(options.rootOverlayModel);
6886
+ }
6203
6887
  this.layout(this.gridview.width, this.gridview.height, true);
6204
6888
  }
6205
6889
  layout(width, height, forceResize) {
6206
6890
  super.layout(width, height, forceResize);
6207
- if (this.floatingGroups) {
6208
- for (const floating of this.floatingGroups) {
6891
+ if (this._floatingGroups) {
6892
+ for (const floating of this._floatingGroups) {
6209
6893
  // ensure floting groups stay within visible boundaries
6210
6894
  floating.overlay.setBounds();
6211
6895
  }
@@ -6273,10 +6957,16 @@ class DockviewComponent extends BaseGrid {
6273
6957
  collection[panel.id] = panel.toJSON();
6274
6958
  return collection;
6275
6959
  }, {});
6276
- const floats = this.floatingGroups.map((floatingGroup) => {
6960
+ const floats = this._floatingGroups.map((group) => {
6277
6961
  return {
6278
- data: floatingGroup.group.toJSON(),
6279
- position: floatingGroup.overlay.toJSON(),
6962
+ data: group.group.toJSON(),
6963
+ position: group.overlay.toJSON(),
6964
+ };
6965
+ });
6966
+ const popoutGroups = this._popoutGroups.map((group) => {
6967
+ return {
6968
+ data: group.group.toJSON(),
6969
+ position: group.window.dimensions(),
6280
6970
  };
6281
6971
  });
6282
6972
  const result = {
@@ -6287,10 +6977,13 @@ class DockviewComponent extends BaseGrid {
6287
6977
  if (floats.length > 0) {
6288
6978
  result.floatingGroups = floats;
6289
6979
  }
6980
+ if (popoutGroups.length > 0) {
6981
+ result.popoutGroups = popoutGroups;
6982
+ }
6290
6983
  return result;
6291
6984
  }
6292
6985
  fromJSON(data) {
6293
- var _a;
6986
+ var _a, _b;
6294
6987
  this.clear();
6295
6988
  if (typeof data !== 'object' || data === null) {
6296
6989
  throw new Error('serialized layout must be a non-null object');
@@ -6357,7 +7050,16 @@ class DockviewComponent extends BaseGrid {
6357
7050
  width: position.width,
6358
7051
  }, { skipRemoveGroup: true, inDragMode: false });
6359
7052
  }
6360
- for (const floatingGroup of this.floatingGroups) {
7053
+ const serializedPopoutGroups = (_b = data.popoutGroups) !== null && _b !== void 0 ? _b : [];
7054
+ for (const serializedPopoutGroup of serializedPopoutGroups) {
7055
+ const { data, position } = serializedPopoutGroup;
7056
+ const group = createGroupFromSerializedState(data);
7057
+ this.addPopoutGroup(group, {
7058
+ skipRemoveGroup: true,
7059
+ position: position !== null && position !== void 0 ? position : undefined,
7060
+ });
7061
+ }
7062
+ for (const floatingGroup of this._floatingGroups) {
6361
7063
  floatingGroup.overlay.setBounds();
6362
7064
  }
6363
7065
  if (typeof activeGroup === 'string') {
@@ -6389,7 +7091,7 @@ class DockviewComponent extends BaseGrid {
6389
7091
  this._onDidRemoveGroup.fire(group);
6390
7092
  }
6391
7093
  // iterate over a reassigned array since original array will be modified
6392
- for (const floatingGroup of [...this.floatingGroups]) {
7094
+ for (const floatingGroup of [...this._floatingGroups]) {
6393
7095
  floatingGroup.dispose();
6394
7096
  }
6395
7097
  // fires clean-up events and clears the underlying HTML gridview.
@@ -6481,7 +7183,8 @@ class DockviewComponent extends BaseGrid {
6481
7183
  group.model.openPanel(panel);
6482
7184
  this.doSetGroupAndPanelActive(group);
6483
7185
  }
6484
- else if (referenceGroup.api.isFloating || target === 'center') {
7186
+ else if (referenceGroup.api.location === 'floating' ||
7187
+ target === 'center') {
6485
7188
  panel = this.createPanel(options, referenceGroup);
6486
7189
  referenceGroup.model.openPanel(panel);
6487
7190
  }
@@ -6525,6 +7228,7 @@ class DockviewComponent extends BaseGrid {
6525
7228
  }
6526
7229
  group.model.removePanel(panel);
6527
7230
  if (!options.skipDispose) {
7231
+ this.overlayRenderContainer.detatch(panel);
6528
7232
  panel.dispose();
6529
7233
  }
6530
7234
  if (group.size === 0 && options.removeEmptyGroup) {
@@ -6541,7 +7245,7 @@ class DockviewComponent extends BaseGrid {
6541
7245
  }
6542
7246
  updateWatermark() {
6543
7247
  var _a, _b;
6544
- if (this.groups.filter((x) => !x.api.isFloating).length === 0) {
7248
+ if (this.groups.filter((x) => x.api.location === 'grid').length === 0) {
6545
7249
  if (!this.watermark) {
6546
7250
  this.watermark = this.createWatermarkComponent();
6547
7251
  this.watermark.init({
@@ -6616,19 +7320,40 @@ class DockviewComponent extends BaseGrid {
6616
7320
  }
6617
7321
  }
6618
7322
  doRemoveGroup(group, options) {
6619
- const floatingGroup = this.floatingGroups.find((_) => _.group === group);
6620
- if (floatingGroup) {
6621
- if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
6622
- floatingGroup.group.dispose();
6623
- this._groups.delete(group.id);
6624
- this._onDidRemoveGroup.fire(group);
7323
+ if (group.api.location === 'floating') {
7324
+ const floatingGroup = this._floatingGroups.find((_) => _.group === group);
7325
+ if (floatingGroup) {
7326
+ if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
7327
+ floatingGroup.group.dispose();
7328
+ this._groups.delete(group.id);
7329
+ this._onDidRemoveGroup.fire(group);
7330
+ }
7331
+ remove(this._floatingGroups, floatingGroup);
7332
+ floatingGroup.dispose();
7333
+ if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
7334
+ const groups = Array.from(this._groups.values());
7335
+ this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
7336
+ }
7337
+ return floatingGroup.group;
6625
7338
  }
6626
- floatingGroup.dispose();
6627
- if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
6628
- const groups = Array.from(this._groups.values());
6629
- this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
7339
+ throw new Error('failed to find floating group');
7340
+ }
7341
+ if (group.api.location === 'popout') {
7342
+ const selectedGroup = this._popoutGroups.find((_) => _.group === group);
7343
+ if (selectedGroup) {
7344
+ if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
7345
+ selectedGroup.group.dispose();
7346
+ this._groups.delete(group.id);
7347
+ this._onDidRemoveGroup.fire(group);
7348
+ }
7349
+ selectedGroup.dispose();
7350
+ if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
7351
+ const groups = Array.from(this._groups.values());
7352
+ this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
7353
+ }
7354
+ return selectedGroup.group;
6630
7355
  }
6631
- return floatingGroup.group;
7356
+ throw new Error('failed to find popout group');
6632
7357
  }
6633
7358
  return super.doRemoveGroup(group, options);
6634
7359
  }
@@ -6660,8 +7385,7 @@ class DockviewComponent extends BaseGrid {
6660
7385
  const targetLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, destinationTarget);
6661
7386
  if (sourceGroup && sourceGroup.size < 2) {
6662
7387
  const [targetParentLocation, to] = tail(targetLocation);
6663
- const isFloating = this.floatingGroups.find((x) => x.group === sourceGroup);
6664
- if (!isFloating) {
7388
+ if (sourceGroup.api.location === 'grid') {
6665
7389
  const sourceLocation = getGridLocation(sourceGroup.element);
6666
7390
  const [sourceParentLocation, from] = tail(sourceLocation);
6667
7391
  if (sequenceEquals(sourceParentLocation, targetParentLocation)) {
@@ -6707,12 +7431,25 @@ class DockviewComponent extends BaseGrid {
6707
7431
  }
6708
7432
  }
6709
7433
  else {
6710
- const floatingGroup = this.floatingGroups.find((x) => x.group === sourceGroup);
6711
- if (floatingGroup) {
6712
- floatingGroup.dispose();
6713
- }
6714
- else {
6715
- this.gridview.removeView(getGridLocation(sourceGroup.element));
7434
+ switch (sourceGroup.api.location) {
7435
+ case 'grid':
7436
+ this.gridview.removeView(getGridLocation(sourceGroup.element));
7437
+ break;
7438
+ case 'floating': {
7439
+ const selectedFloatingGroup = this._floatingGroups.find((x) => x.group === sourceGroup);
7440
+ if (!selectedFloatingGroup) {
7441
+ throw new Error('failed to find floating group');
7442
+ }
7443
+ selectedFloatingGroup.dispose();
7444
+ break;
7445
+ }
7446
+ case 'popout': {
7447
+ const selectedPopoutGroup = this._popoutGroups.find((x) => x.group === sourceGroup);
7448
+ if (!selectedPopoutGroup) {
7449
+ throw new Error('failed to find popout group');
7450
+ }
7451
+ selectedPopoutGroup.dispose();
7452
+ }
6716
7453
  }
6717
7454
  const referenceLocation = getGridLocation(referenceGroup.element);
6718
7455
  const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
@@ -6774,7 +7511,7 @@ class DockviewComponent extends BaseGrid {
6774
7511
  const contentComponent = options.component;
6775
7512
  const tabComponent = (_a = options.tabComponent) !== null && _a !== void 0 ? _a : this.options.defaultTabComponent;
6776
7513
  const view = new DockviewPanelModel(this, options.id, contentComponent, tabComponent);
6777
- const panel = new DockviewPanel(options.id, this, this._api, group, view);
7514
+ const panel = new DockviewPanel(options.id, this, this._api, group, view, { renderer: options.renderer });
6778
7515
  panel.init({
6779
7516
  title: (_b = options.title) !== null && _b !== void 0 ? _b : options.id,
6780
7517
  params: (_c = options === null || options === void 0 ? void 0 : options.params) !== null && _c !== void 0 ? _c : {},