dockview-core 1.8.5 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (287) 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 +2 -0
  30. package/dist/cjs/dnd/droptarget.d.ts.map +1 -1
  31. package/dist/cjs/dnd/droptarget.js +3 -2
  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 +21 -9
  53. package/dist/cjs/dockview/dockviewComponent.d.ts.map +1 -1
  54. package/dist/cjs/dockview/dockviewComponent.js +287 -103
  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 +5 -0
  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 +2 -1
  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.js +1 -1
  125. package/dist/cjs/resizable.js.map +1 -1
  126. package/dist/cjs/splitview/splitview.d.ts +5 -4
  127. package/dist/cjs/splitview/splitview.d.ts.map +1 -1
  128. package/dist/cjs/splitview/splitview.js +31 -8
  129. package/dist/cjs/splitview/splitview.js.map +1 -1
  130. package/dist/cjs/splitview/splitviewComponent.js.map +1 -1
  131. package/dist/cjs/splitview/splitviewPanel.js.map +1 -1
  132. package/dist/cjs/splitview/viewItem.js.map +1 -1
  133. package/dist/cjs/types.d.ts +6 -0
  134. package/dist/cjs/types.d.ts.map +1 -1
  135. package/dist/dockview-core.amd.js +896 -170
  136. package/dist/dockview-core.amd.js.map +1 -1
  137. package/dist/dockview-core.amd.min.js +2 -2
  138. package/dist/dockview-core.amd.min.js.map +1 -1
  139. package/dist/dockview-core.amd.min.noStyle.js +2 -2
  140. package/dist/dockview-core.amd.min.noStyle.js.map +1 -1
  141. package/dist/dockview-core.amd.noStyle.js +895 -169
  142. package/dist/dockview-core.amd.noStyle.js.map +1 -1
  143. package/dist/dockview-core.cjs.js +896 -170
  144. package/dist/dockview-core.cjs.js.map +1 -1
  145. package/dist/dockview-core.esm.js +896 -170
  146. package/dist/dockview-core.esm.js.map +1 -1
  147. package/dist/dockview-core.esm.min.js +2 -2
  148. package/dist/dockview-core.esm.min.js.map +1 -1
  149. package/dist/dockview-core.js +896 -170
  150. package/dist/dockview-core.js.map +1 -1
  151. package/dist/dockview-core.min.js +2 -2
  152. package/dist/dockview-core.min.js.map +1 -1
  153. package/dist/dockview-core.min.noStyle.js +2 -2
  154. package/dist/dockview-core.min.noStyle.js.map +1 -1
  155. package/dist/dockview-core.noStyle.js +895 -169
  156. package/dist/dockview-core.noStyle.js.map +1 -1
  157. package/dist/esm/api/component.api.d.ts +12 -0
  158. package/dist/esm/api/component.api.d.ts.map +1 -1
  159. package/dist/esm/api/component.api.js +18 -0
  160. package/dist/esm/api/component.api.js.map +1 -1
  161. package/dist/esm/api/dockviewGroupPanelApi.d.ts +15 -8
  162. package/dist/esm/api/dockviewGroupPanelApi.d.ts.map +1 -1
  163. package/dist/esm/api/dockviewGroupPanelApi.js +39 -9
  164. package/dist/esm/api/dockviewGroupPanelApi.js.map +1 -1
  165. package/dist/esm/api/dockviewPanelApi.d.ts +19 -2
  166. package/dist/esm/api/dockviewPanelApi.d.ts.map +1 -1
  167. package/dist/esm/api/dockviewPanelApi.js +19 -3
  168. package/dist/esm/api/dockviewPanelApi.js.map +1 -1
  169. package/dist/esm/api/gridviewPanelApi.js.map +1 -1
  170. package/dist/esm/array.js.map +1 -1
  171. package/dist/esm/constants.d.ts +6 -0
  172. package/dist/esm/constants.d.ts.map +1 -0
  173. package/dist/esm/constants.js +3 -0
  174. package/dist/esm/constants.js.map +1 -0
  175. package/dist/esm/dnd/abstractDragHandler.js.map +1 -1
  176. package/dist/esm/dnd/dataTransfer.js.map +1 -1
  177. package/dist/esm/dnd/dnd.d.ts +5 -0
  178. package/dist/esm/dnd/dnd.d.ts.map +1 -1
  179. package/dist/esm/dnd/dnd.js +28 -13
  180. package/dist/esm/dnd/dnd.js.map +1 -1
  181. package/dist/esm/dnd/droptarget.d.ts +2 -0
  182. package/dist/esm/dnd/droptarget.d.ts.map +1 -1
  183. package/dist/esm/dnd/droptarget.js +3 -2
  184. package/dist/esm/dnd/droptarget.js.map +1 -1
  185. package/dist/esm/dnd/groupDragHandler.js +1 -1
  186. package/dist/esm/dnd/groupDragHandler.js.map +1 -1
  187. package/dist/esm/dnd/overlay.d.ts +4 -17
  188. package/dist/esm/dnd/overlay.d.ts.map +1 -1
  189. package/dist/esm/dnd/overlay.js.map +1 -1
  190. package/dist/esm/dockview/components/panel/content.d.ts +14 -1
  191. package/dist/esm/dockview/components/panel/content.d.ts.map +1 -1
  192. package/dist/esm/dockview/components/panel/content.js +84 -26
  193. package/dist/esm/dockview/components/panel/content.js.map +1 -1
  194. package/dist/esm/dockview/components/tab/defaultTab.js.map +1 -1
  195. package/dist/esm/dockview/components/tab/tab.js.map +1 -1
  196. package/dist/esm/dockview/components/titlebar/tabsContainer.js +2 -2
  197. package/dist/esm/dockview/components/titlebar/tabsContainer.js.map +1 -1
  198. package/dist/esm/dockview/components/titlebar/voidContainer.js.map +1 -1
  199. package/dist/esm/dockview/components/watermark/watermark.js.map +1 -1
  200. package/dist/esm/dockview/deserializer.d.ts +2 -2
  201. package/dist/esm/dockview/deserializer.d.ts.map +1 -1
  202. package/dist/esm/dockview/deserializer.js +6 -4
  203. package/dist/esm/dockview/deserializer.js.map +1 -1
  204. package/dist/esm/dockview/dockviewComponent.d.ts +21 -9
  205. package/dist/esm/dockview/dockviewComponent.d.ts.map +1 -1
  206. package/dist/esm/dockview/dockviewComponent.js +188 -42
  207. package/dist/esm/dockview/dockviewComponent.js.map +1 -1
  208. package/dist/esm/dockview/dockviewGroupPanel.d.ts.map +1 -1
  209. package/dist/esm/dockview/dockviewGroupPanel.js +4 -2
  210. package/dist/esm/dockview/dockviewGroupPanel.js.map +1 -1
  211. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +5 -4
  212. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts.map +1 -1
  213. package/dist/esm/dockview/dockviewGroupPanelModel.js +39 -45
  214. package/dist/esm/dockview/dockviewGroupPanelModel.js.map +1 -1
  215. package/dist/esm/dockview/dockviewPanel.d.ts +8 -1
  216. package/dist/esm/dockview/dockviewPanel.d.ts.map +1 -1
  217. package/dist/esm/dockview/dockviewPanel.js +19 -1
  218. package/dist/esm/dockview/dockviewPanel.js.map +1 -1
  219. package/dist/esm/dockview/dockviewPanelModel.js.map +1 -1
  220. package/dist/esm/dockview/dockviewPopoutGroupPanel.d.ts +16 -0
  221. package/dist/esm/dockview/dockviewPopoutGroupPanel.d.ts.map +1 -0
  222. package/dist/esm/dockview/dockviewPopoutGroupPanel.js +28 -0
  223. package/dist/esm/dockview/dockviewPopoutGroupPanel.js.map +1 -0
  224. package/dist/esm/dockview/options.d.ts +5 -0
  225. package/dist/esm/dockview/options.d.ts.map +1 -1
  226. package/dist/esm/dockview/options.js.map +1 -1
  227. package/dist/esm/dockview/types.d.ts +2 -0
  228. package/dist/esm/dockview/types.d.ts.map +1 -1
  229. package/dist/esm/dockview/types.js.map +1 -1
  230. package/dist/esm/dom.d.ts +12 -0
  231. package/dist/esm/dom.d.ts.map +1 -1
  232. package/dist/esm/dom.js +55 -0
  233. package/dist/esm/dom.js.map +1 -1
  234. package/dist/esm/events.js.map +1 -1
  235. package/dist/esm/gridview/baseComponentGridview.d.ts +10 -0
  236. package/dist/esm/gridview/baseComponentGridview.d.ts.map +1 -1
  237. package/dist/esm/gridview/baseComponentGridview.js +15 -0
  238. package/dist/esm/gridview/baseComponentGridview.js.map +1 -1
  239. package/dist/esm/gridview/basePanelView.js.map +1 -1
  240. package/dist/esm/gridview/branchNode.d.ts +2 -0
  241. package/dist/esm/gridview/branchNode.d.ts.map +1 -1
  242. package/dist/esm/gridview/branchNode.js +26 -5
  243. package/dist/esm/gridview/branchNode.js.map +1 -1
  244. package/dist/esm/gridview/gridview.d.ts +10 -3
  245. package/dist/esm/gridview/gridview.d.ts.map +1 -1
  246. package/dist/esm/gridview/gridview.js +80 -0
  247. package/dist/esm/gridview/gridview.js.map +1 -1
  248. package/dist/esm/gridview/gridviewComponent.js.map +1 -1
  249. package/dist/esm/gridview/gridviewPanel.js.map +1 -1
  250. package/dist/esm/gridview/leafNode.d.ts.map +1 -1
  251. package/dist/esm/gridview/leafNode.js +0 -1
  252. package/dist/esm/gridview/leafNode.js.map +1 -1
  253. package/dist/esm/index.d.ts +2 -1
  254. package/dist/esm/index.d.ts.map +1 -1
  255. package/dist/esm/index.js.map +1 -1
  256. package/dist/esm/lifecycle.d.ts +1 -0
  257. package/dist/esm/lifecycle.d.ts.map +1 -1
  258. package/dist/esm/lifecycle.js +8 -0
  259. package/dist/esm/lifecycle.js.map +1 -1
  260. package/dist/esm/math.js.map +1 -1
  261. package/dist/esm/overlayRenderContainer.d.ts +19 -0
  262. package/dist/esm/overlayRenderContainer.d.ts.map +1 -0
  263. package/dist/esm/overlayRenderContainer.js +125 -0
  264. package/dist/esm/overlayRenderContainer.js.map +1 -0
  265. package/dist/esm/panel/componentFactory.js.map +1 -1
  266. package/dist/esm/paneview/defaultPaneviewHeader.js.map +1 -1
  267. package/dist/esm/paneview/draggablePaneviewPanel.js.map +1 -1
  268. package/dist/esm/paneview/paneview.js.map +1 -1
  269. package/dist/esm/paneview/paneviewComponent.js.map +1 -1
  270. package/dist/esm/paneview/paneviewPanel.js.map +1 -1
  271. package/dist/esm/popoutWindow.d.ts +18 -0
  272. package/dist/esm/popoutWindow.d.ts.map +1 -0
  273. package/dist/esm/popoutWindow.js +88 -0
  274. package/dist/esm/popoutWindow.js.map +1 -0
  275. package/dist/esm/resizable.js +2 -2
  276. package/dist/esm/resizable.js.map +1 -1
  277. package/dist/esm/splitview/splitview.d.ts +5 -4
  278. package/dist/esm/splitview/splitview.d.ts.map +1 -1
  279. package/dist/esm/splitview/splitview.js +25 -8
  280. package/dist/esm/splitview/splitview.js.map +1 -1
  281. package/dist/esm/splitview/splitviewComponent.js.map +1 -1
  282. package/dist/esm/splitview/splitviewPanel.js.map +1 -1
  283. package/dist/esm/splitview/viewItem.js.map +1 -1
  284. package/dist/esm/types.d.ts +6 -0
  285. package/dist/esm/types.d.ts.map +1 -1
  286. package/dist/styles/dockview.css +33 -2
  287. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * dockview-core
3
- * @version 1.8.5
3
+ * @version 1.9.0
4
4
  * @link https://github.com/mathuo/dockview
5
5
  * @license MIT
6
6
  */
@@ -37,7 +37,7 @@
37
37
  }
38
38
  }
39
39
 
40
- 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}";
40
+ 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.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.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 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: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}";
41
41
  styleInject(css_248z);
42
42
 
43
43
  class TransferObject {
@@ -266,6 +266,14 @@
266
266
  // noop
267
267
  },
268
268
  };
269
+ function from(func) {
270
+ return {
271
+ dispose: () => {
272
+ func();
273
+ },
274
+ };
275
+ }
276
+ Disposable.from = from;
269
277
  })(Disposable || (Disposable = {}));
270
278
  class CompositeDisposable {
271
279
  get isDisposed() {
@@ -450,6 +458,61 @@
450
458
  function quasiDefaultPrevented(event) {
451
459
  return event[QUASI_PREVENT_DEFAULT_KEY];
452
460
  }
461
+ function addStyles(document, styleSheetList) {
462
+ const styleSheets = Array.from(styleSheetList);
463
+ for (const styleSheet of styleSheets) {
464
+ if (styleSheet.href) {
465
+ const link = document.createElement('link');
466
+ link.href = styleSheet.href;
467
+ link.type = styleSheet.type;
468
+ link.rel = 'stylesheet';
469
+ document.head.appendChild(link);
470
+ }
471
+ let cssTexts = [];
472
+ try {
473
+ if (styleSheet.cssRules) {
474
+ cssTexts = Array.from(styleSheet.cssRules).map((rule) => rule.cssText);
475
+ }
476
+ }
477
+ catch (err) {
478
+ // security errors (lack of permissions), ignore
479
+ }
480
+ for (const rule of cssTexts) {
481
+ const style = document.createElement('style');
482
+ style.appendChild(document.createTextNode(rule));
483
+ document.head.appendChild(style);
484
+ }
485
+ }
486
+ }
487
+ function getDomNodePagePosition(domNode) {
488
+ const { left, top, width, height } = domNode.getBoundingClientRect();
489
+ return {
490
+ left: left + window.scrollX,
491
+ top: top + window.scrollY,
492
+ width: width,
493
+ height: height,
494
+ };
495
+ }
496
+ /**
497
+ * Check whether an element is in the DOM (including the Shadow DOM)
498
+ * @see https://terodox.tech/how-to-tell-if-an-element-is-in-the-dom-including-the-shadow-dom/
499
+ */
500
+ function isInDocument(element) {
501
+ let currentElement = element;
502
+ while (currentElement === null || currentElement === void 0 ? void 0 : currentElement.parentNode) {
503
+ if (currentElement.parentNode === document) {
504
+ return true;
505
+ }
506
+ else if (currentElement.parentNode instanceof DocumentFragment) {
507
+ // handle shadow DOMs
508
+ currentElement = currentElement.parentNode.host;
509
+ }
510
+ else {
511
+ currentElement = currentElement.parentNode;
512
+ }
513
+ }
514
+ return false;
515
+ }
453
516
 
454
517
  function tail(arr) {
455
518
  if (arr.length === 0) {
@@ -647,6 +710,9 @@
647
710
  Sizing.Invisible = Invisible;
648
711
  })(exports.Sizing || (exports.Sizing = {}));
649
712
  class Splitview {
713
+ get contentSize() {
714
+ return this._contentSize;
715
+ }
650
716
  get size() {
651
717
  return this._size;
652
718
  }
@@ -712,7 +778,7 @@
712
778
  this.sashes = [];
713
779
  this._size = 0;
714
780
  this._orthogonalSize = 0;
715
- this.contentSize = 0;
781
+ this._contentSize = 0;
716
782
  this._proportions = undefined;
717
783
  this._startSnappingEnabled = true;
718
784
  this._endSnappingEnabled = true;
@@ -831,7 +897,7 @@
831
897
  );
832
898
  });
833
899
  // Initialize content size and proportions for first layout
834
- this.contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
900
+ this._contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
835
901
  this.saveProportions();
836
902
  }
837
903
  }
@@ -1105,7 +1171,7 @@
1105
1171
  this.addView(view, sizing, to);
1106
1172
  }
1107
1173
  layout(size, orthogonalSize) {
1108
- const previousSize = Math.max(this.size, this.contentSize);
1174
+ const previousSize = Math.max(this.size, this._contentSize);
1109
1175
  this.size = size;
1110
1176
  this.orthogonalSize = orthogonalSize;
1111
1177
  if (!this.proportions) {
@@ -1115,9 +1181,23 @@
1115
1181
  this.resize(this.viewItems.length - 1, size - previousSize, undefined, lowPriorityIndexes, highPriorityIndexes);
1116
1182
  }
1117
1183
  else {
1184
+ let total = 0;
1185
+ for (let i = 0; i < this.viewItems.length; i++) {
1186
+ const item = this.viewItems[i];
1187
+ const proportion = this.proportions[i];
1188
+ if (typeof proportion === 'number') {
1189
+ total += proportion;
1190
+ }
1191
+ else {
1192
+ size -= item.size;
1193
+ }
1194
+ }
1118
1195
  for (let i = 0; i < this.viewItems.length; i++) {
1119
1196
  const item = this.viewItems[i];
1120
- item.size = clamp(Math.round(this.proportions[i] * size), item.minimumSize, item.maximumSize);
1197
+ const proportion = this.proportions[i];
1198
+ if (typeof proportion === 'number' && total > 0) {
1199
+ item.size = clamp(Math.round((proportion * size) / total), item.minimumSize, item.maximumSize);
1200
+ }
1121
1201
  }
1122
1202
  }
1123
1203
  this.distributeEmptySpace();
@@ -1154,12 +1234,12 @@
1154
1234
  }
1155
1235
  }
1156
1236
  saveProportions() {
1157
- if (this.proportionalLayout && this.contentSize > 0) {
1158
- this._proportions = this.viewItems.map((i) => i.size / this.contentSize);
1237
+ if (this.proportionalLayout && this._contentSize > 0) {
1238
+ this._proportions = this.viewItems.map((i) => i.visible ? i.size / this._contentSize : undefined);
1159
1239
  }
1160
1240
  }
1161
1241
  layoutViews() {
1162
- this.contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
1242
+ this._contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
1163
1243
  let sum = 0;
1164
1244
  const x = [];
1165
1245
  this.updateSashEnablement();
@@ -1253,7 +1333,7 @@
1253
1333
  }
1254
1334
  else if (snappedAfter &&
1255
1335
  collapsesDown[index] &&
1256
- (position < this.contentSize || this.endSnappingEnabled)) {
1336
+ (position < this._contentSize || this.endSnappingEnabled)) {
1257
1337
  this.updateSash(sash, exports.SashState.MAXIMUM);
1258
1338
  }
1259
1339
  else {
@@ -1542,7 +1622,6 @@
1542
1622
  setVisible(visible) {
1543
1623
  if (this.view.setVisible) {
1544
1624
  this.view.setVisible(visible);
1545
- this._onDidChange.fire({});
1546
1625
  }
1547
1626
  }
1548
1627
  layout(size, orthogonalSize) {
@@ -1574,10 +1653,14 @@
1574
1653
  get minimumSize() {
1575
1654
  return this.children.length === 0
1576
1655
  ? 0
1577
- : Math.max(...this.children.map((c) => c.minimumOrthogonalSize));
1656
+ : Math.max(...this.children.map((c, index) => this.splitview.isViewVisible(index)
1657
+ ? c.minimumOrthogonalSize
1658
+ : 0));
1578
1659
  }
1579
1660
  get maximumSize() {
1580
- return Math.min(...this.children.map((c) => c.maximumOrthogonalSize));
1661
+ return Math.min(...this.children.map((c, index) => this.splitview.isViewVisible(index)
1662
+ ? c.maximumOrthogonalSize
1663
+ : Number.POSITIVE_INFINITY));
1581
1664
  }
1582
1665
  get minimumOrthogonalSize() {
1583
1666
  return this.splitview.minimumSize;
@@ -1635,6 +1718,8 @@
1635
1718
  this.children = [];
1636
1719
  this._onDidChange = new Emitter();
1637
1720
  this.onDidChange = this._onDidChange.event;
1721
+ this._onDidVisibilityChange = new Emitter();
1722
+ this.onDidVisibilityChange = this._onDidVisibilityChange.event;
1638
1723
  this._orthogonalSize = orthogonalSize;
1639
1724
  this._size = size;
1640
1725
  this.element = document.createElement('div');
@@ -1669,7 +1754,7 @@
1669
1754
  styles,
1670
1755
  });
1671
1756
  }
1672
- this.addDisposables(this._onDidChange, this.splitview.onDidSashEnd(() => {
1757
+ this.addDisposables(this._onDidChange, this._onDidVisibilityChange, this.splitview.onDidSashEnd(() => {
1673
1758
  this._onDidChange.fire({});
1674
1759
  }));
1675
1760
  this.setupChildrenEvents();
@@ -1692,7 +1777,15 @@
1692
1777
  if (this.splitview.isViewVisible(index) === visible) {
1693
1778
  return;
1694
1779
  }
1780
+ const wereAllChildrenHidden = this.splitview.contentSize === 0;
1695
1781
  this.splitview.setViewVisible(index, visible);
1782
+ const areAllChildrenHidden = this.splitview.contentSize === 0;
1783
+ // If all children are hidden then the parent should hide the entire splitview
1784
+ // If the entire splitview is hidden then the parent should show the splitview when a child is shown
1785
+ if ((visible && wereAllChildrenHidden) ||
1786
+ (!visible && areAllChildrenHidden)) {
1787
+ this._onDidVisibilityChange.fire(visible);
1788
+ }
1696
1789
  }
1697
1790
  moveChild(from, to) {
1698
1791
  if (from === to) {
@@ -1756,13 +1849,20 @@
1756
1849
  }
1757
1850
  setupChildrenEvents() {
1758
1851
  this._childrenDisposable.dispose();
1759
- this._childrenDisposable = exports.DockviewEvent.any(...this.children.map((c) => c.onDidChange))((e) => {
1852
+ this._childrenDisposable = new CompositeDisposable(exports.DockviewEvent.any(...this.children.map((c) => c.onDidChange))((e) => {
1760
1853
  /**
1761
1854
  * indicate a change has occured to allows any re-rendering but don't bubble
1762
1855
  * event because that was specific to this branch
1763
1856
  */
1764
1857
  this._onDidChange.fire({ size: e.orthogonalSize });
1765
- });
1858
+ }), ...this.children.map((c, i) => {
1859
+ if (c instanceof BranchNode) {
1860
+ return c.onDidVisibilityChange((visible) => {
1861
+ this.setChildVisible(i, visible);
1862
+ });
1863
+ }
1864
+ return Disposable.NONE;
1865
+ }));
1766
1866
  }
1767
1867
  dispose() {
1768
1868
  this._childrenDisposable.dispose();
@@ -1923,7 +2023,69 @@
1923
2023
  get maximumHeight() {
1924
2024
  return this.root.maximumHeight;
1925
2025
  }
2026
+ maximizedView() {
2027
+ var _a;
2028
+ return (_a = this._maximizedNode) === null || _a === void 0 ? void 0 : _a.view;
2029
+ }
2030
+ hasMaximizedView() {
2031
+ return this._maximizedNode !== undefined;
2032
+ }
2033
+ maximizeView(view) {
2034
+ const location = getGridLocation(view.element);
2035
+ const [_, node] = this.getNode(location);
2036
+ if (!(node instanceof LeafNode)) {
2037
+ return;
2038
+ }
2039
+ if (this._maximizedNode === node) {
2040
+ return;
2041
+ }
2042
+ if (this.hasMaximizedView()) {
2043
+ this.exitMaximizedView();
2044
+ }
2045
+ function hideAllViewsBut(parent, exclude) {
2046
+ for (let i = 0; i < parent.children.length; i++) {
2047
+ const child = parent.children[i];
2048
+ if (child instanceof LeafNode) {
2049
+ if (child !== exclude) {
2050
+ parent.setChildVisible(i, false);
2051
+ }
2052
+ }
2053
+ else {
2054
+ hideAllViewsBut(child, exclude);
2055
+ }
2056
+ }
2057
+ }
2058
+ hideAllViewsBut(this.root, node);
2059
+ this._maximizedNode = node;
2060
+ this._onDidMaxmizedNodeChange.fire();
2061
+ }
2062
+ exitMaximizedView() {
2063
+ if (!this._maximizedNode) {
2064
+ return;
2065
+ }
2066
+ function showViewsInReverseOrder(parent) {
2067
+ for (let index = parent.children.length - 1; index >= 0; index--) {
2068
+ const child = parent.children[index];
2069
+ if (child instanceof LeafNode) {
2070
+ parent.setChildVisible(index, true);
2071
+ }
2072
+ else {
2073
+ showViewsInReverseOrder(child);
2074
+ }
2075
+ }
2076
+ }
2077
+ showViewsInReverseOrder(this.root);
2078
+ this._maximizedNode = undefined;
2079
+ this._onDidMaxmizedNodeChange.fire();
2080
+ }
1926
2081
  serialize() {
2082
+ if (this.hasMaximizedView()) {
2083
+ /**
2084
+ * do not persist maximized view state but we must first exit any maximized views
2085
+ * before serialization to ensure the correct dimensions are persisted
2086
+ */
2087
+ this.exitMaximizedView();
2088
+ }
1927
2089
  const root = serializeBranchNode(this.getView(), this.orientation);
1928
2090
  return {
1929
2091
  root,
@@ -1935,7 +2097,9 @@
1935
2097
  dispose() {
1936
2098
  this.disposable.dispose();
1937
2099
  this._onDidChange.dispose();
2100
+ this._onDidMaxmizedNodeChange.dispose();
1938
2101
  this.root.dispose();
2102
+ this._maximizedNode = undefined;
1939
2103
  this.element.remove();
1940
2104
  }
1941
2105
  clear() {
@@ -1976,6 +2140,7 @@
1976
2140
  const oldRoot = this._root;
1977
2141
  if (oldRoot) {
1978
2142
  oldRoot.dispose();
2143
+ this._maximizedNode = undefined;
1979
2144
  this.element.removeChild(oldRoot.element);
1980
2145
  }
1981
2146
  this._root = root;
@@ -2062,9 +2227,12 @@
2062
2227
  constructor(proportionalLayout, styles, orientation) {
2063
2228
  this.proportionalLayout = proportionalLayout;
2064
2229
  this.styles = styles;
2230
+ this._maximizedNode = undefined;
2065
2231
  this.disposable = new MutableDisposable();
2066
2232
  this._onDidChange = new Emitter();
2067
2233
  this.onDidChange = this._onDidChange.event;
2234
+ this._onDidMaxmizedNodeChange = new Emitter();
2235
+ this.onDidMaxmizedNodeChange = this._onDidMaxmizedNodeChange.event;
2068
2236
  this.element = document.createElement('div');
2069
2237
  this.element.className = 'grid-view';
2070
2238
  this.root = new BranchNode(orientation, proportionalLayout, styles, 0, 0);
@@ -2078,6 +2246,9 @@
2078
2246
  return parent.isChildVisible(index);
2079
2247
  }
2080
2248
  setViewVisible(location, visible) {
2249
+ if (this.hasMaximizedView()) {
2250
+ this.exitMaximizedView();
2251
+ }
2081
2252
  const [rest, index] = tail(location);
2082
2253
  const [, parent] = this.getNode(rest);
2083
2254
  if (!(parent instanceof BranchNode)) {
@@ -2086,6 +2257,9 @@
2086
2257
  parent.setChildVisible(index, visible);
2087
2258
  }
2088
2259
  moveView(parentLocation, from, to) {
2260
+ if (this.hasMaximizedView()) {
2261
+ this.exitMaximizedView();
2262
+ }
2089
2263
  const [, parent] = this.getNode(parentLocation);
2090
2264
  if (!(parent instanceof BranchNode)) {
2091
2265
  throw new Error('Invalid location');
@@ -2093,6 +2267,9 @@
2093
2267
  parent.moveChild(from, to);
2094
2268
  }
2095
2269
  addView(view, size, location) {
2270
+ if (this.hasMaximizedView()) {
2271
+ this.exitMaximizedView();
2272
+ }
2096
2273
  const [rest, index] = tail(location);
2097
2274
  const [pathToParent, parent] = this.getNode(rest);
2098
2275
  if (parent instanceof BranchNode) {
@@ -2125,6 +2302,9 @@
2125
2302
  return this.removeView(location, sizing);
2126
2303
  }
2127
2304
  removeView(location, sizing) {
2305
+ if (this.hasMaximizedView()) {
2306
+ this.exitMaximizedView();
2307
+ }
2128
2308
  const [rest, index] = tail(location);
2129
2309
  const [pathToParent, parent] = this.getNode(rest);
2130
2310
  if (!(parent instanceof BranchNode)) {
@@ -2862,6 +3042,24 @@
2862
3042
  moveToPrevious(options) {
2863
3043
  this.component.moveToPrevious(options);
2864
3044
  }
3045
+ maximizeGroup(panel) {
3046
+ this.component.maximizeGroup(panel.group);
3047
+ }
3048
+ hasMaximizedGroup() {
3049
+ return this.component.hasMaximizedGroup();
3050
+ }
3051
+ exitMaxmizedGroup() {
3052
+ this.component.exitMaximizedGroup();
3053
+ }
3054
+ get onDidMaxmizedGroupChange() {
3055
+ return this.component.onDidMaxmizedGroupChange;
3056
+ }
3057
+ /**
3058
+ * Add a popout group in a new Window
3059
+ */
3060
+ addPopoutGroup(item, options) {
3061
+ this.component.addPopoutGroup(item, options);
3062
+ }
2865
3063
  }
2866
3064
 
2867
3065
  class DragAndDropObserver extends CompositeDisposable {
@@ -2872,29 +3070,44 @@
2872
3070
  this.target = null;
2873
3071
  this.registerListeners();
2874
3072
  }
3073
+ onDragEnter(e) {
3074
+ this.target = e.target;
3075
+ this.callbacks.onDragEnter(e);
3076
+ }
3077
+ onDragOver(e) {
3078
+ e.preventDefault(); // needed so that the drop event fires (https://stackoverflow.com/questions/21339924/drop-event-not-firing-in-chrome)
3079
+ if (this.callbacks.onDragOver) {
3080
+ this.callbacks.onDragOver(e);
3081
+ }
3082
+ }
3083
+ onDragLeave(e) {
3084
+ if (this.target === e.target) {
3085
+ this.target = null;
3086
+ this.callbacks.onDragLeave(e);
3087
+ }
3088
+ }
3089
+ onDragEnd(e) {
3090
+ this.target = null;
3091
+ this.callbacks.onDragEnd(e);
3092
+ }
3093
+ onDrop(e) {
3094
+ this.callbacks.onDrop(e);
3095
+ }
2875
3096
  registerListeners() {
2876
3097
  this.addDisposables(addDisposableListener(this.element, 'dragenter', (e) => {
2877
- this.target = e.target;
2878
- this.callbacks.onDragEnter(e);
3098
+ this.onDragEnter(e);
2879
3099
  }, true));
2880
3100
  this.addDisposables(addDisposableListener(this.element, 'dragover', (e) => {
2881
- e.preventDefault(); // needed so that the drop event fires (https://stackoverflow.com/questions/21339924/drop-event-not-firing-in-chrome)
2882
- if (this.callbacks.onDragOver) {
2883
- this.callbacks.onDragOver(e);
2884
- }
3101
+ this.onDragOver(e);
2885
3102
  }, true));
2886
3103
  this.addDisposables(addDisposableListener(this.element, 'dragleave', (e) => {
2887
- if (this.target === e.target) {
2888
- this.target = null;
2889
- this.callbacks.onDragLeave(e);
2890
- }
3104
+ this.onDragLeave(e);
2891
3105
  }));
2892
3106
  this.addDisposables(addDisposableListener(this.element, 'dragend', (e) => {
2893
- this.target = null;
2894
- this.callbacks.onDragEnd(e);
3107
+ this.onDragEnd(e);
2895
3108
  }));
2896
3109
  this.addDisposables(addDisposableListener(this.element, 'drop', (e) => {
2897
- this.callbacks.onDrop(e);
3110
+ this.onDrop(e);
2898
3111
  }));
2899
3112
  }
2900
3113
  }
@@ -2946,7 +3159,7 @@
2946
3159
  this.onDrop = this._onDrop.event;
2947
3160
  // use a set to take advantage of #<set>.has
2948
3161
  this._acceptedTargetZonesSet = new Set(this.options.acceptedTargetZones);
2949
- this.addDisposables(this._onDrop, new DragAndDropObserver(this.element, {
3162
+ this.dnd = new DragAndDropObserver(this.element, {
2950
3163
  onDragEnter: () => undefined,
2951
3164
  onDragOver: (e) => {
2952
3165
  if (this._acceptedTargetZonesSet.size === 0) {
@@ -3013,7 +3226,8 @@
3013
3226
  this._onDrop.fire({ position: state, nativeEvent: e });
3014
3227
  }
3015
3228
  },
3016
- }));
3229
+ });
3230
+ this.addDisposables(this._onDrop, this.dnd);
3017
3231
  }
3018
3232
  setTargetZones(acceptedTargetZones) {
3019
3233
  this._acceptedTargetZonesSet = new Set(acceptedTargetZones);
@@ -3169,12 +3383,22 @@
3169
3383
  return 'center';
3170
3384
  }
3171
3385
 
3386
+ exports.DockviewDropTargets = void 0;
3387
+ (function (DockviewDropTargets) {
3388
+ DockviewDropTargets[DockviewDropTargets["Tab"] = 0] = "Tab";
3389
+ DockviewDropTargets[DockviewDropTargets["Panel"] = 1] = "Panel";
3390
+ DockviewDropTargets[DockviewDropTargets["TabContainer"] = 2] = "TabContainer";
3391
+ DockviewDropTargets[DockviewDropTargets["Edge"] = 3] = "Edge";
3392
+ })(exports.DockviewDropTargets || (exports.DockviewDropTargets = {}));
3393
+
3172
3394
  class ContentContainer extends CompositeDisposable {
3173
3395
  get element() {
3174
3396
  return this._element;
3175
3397
  }
3176
- constructor() {
3398
+ constructor(accessor, group) {
3177
3399
  super();
3400
+ this.accessor = accessor;
3401
+ this.group = group;
3178
3402
  this.disposable = new MutableDisposable();
3179
3403
  this._onDidFocus = new Emitter();
3180
3404
  this.onDidFocus = this._onDidFocus.event;
@@ -3184,11 +3408,38 @@
3184
3408
  this._element.className = 'content-container';
3185
3409
  this._element.tabIndex = -1;
3186
3410
  this.addDisposables(this._onDidFocus, this._onDidBlur);
3187
- // for hosted containers
3188
- // 1) register a drop target on the host
3189
- // 2) register window dragStart events to disable pointer events
3190
- // 3) register dragEnd events
3191
- // 4) register mouseMove events (if no buttons are present we take this as a dragEnd event)
3411
+ this.dropTarget = new Droptarget(this.element, {
3412
+ acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
3413
+ canDisplayOverlay: (event, position) => {
3414
+ if (this.group.locked === 'no-drop-target' ||
3415
+ (this.group.locked && position === 'center')) {
3416
+ return false;
3417
+ }
3418
+ const data = getPanelData();
3419
+ if (!data &&
3420
+ event.shiftKey &&
3421
+ this.group.location !== 'floating') {
3422
+ return false;
3423
+ }
3424
+ if (data && data.viewId === this.accessor.id) {
3425
+ if (data.groupId === this.group.id) {
3426
+ if (position === 'center') {
3427
+ // don't allow to drop on self for center position
3428
+ return false;
3429
+ }
3430
+ if (data.panelId === null) {
3431
+ // don't allow group move to drop anywhere on self
3432
+ return false;
3433
+ }
3434
+ }
3435
+ const groupHasOnePanelAndIsActiveDragElement = this.group.panels.length === 1 &&
3436
+ data.groupId === this.group.id;
3437
+ return !groupHasOnePanelAndIsActiveDragElement;
3438
+ }
3439
+ return this.group.canDisplayOverlay(event, position, exports.DockviewDropTargets.Panel);
3440
+ },
3441
+ });
3442
+ this.addDisposables(this.dropTarget);
3192
3443
  }
3193
3444
  show() {
3194
3445
  this.element.style.display = '';
@@ -3196,23 +3447,43 @@
3196
3447
  hide() {
3197
3448
  this.element.style.display = 'none';
3198
3449
  }
3199
- openPanel(panel) {
3200
- var _a;
3201
- if (this.panel === panel) {
3202
- return;
3203
- }
3204
- if (this.panel) {
3205
- if ((_a = this.panel.view) === null || _a === void 0 ? void 0 : _a.content) {
3206
- this._element.removeChild(this.panel.view.content.element);
3207
- }
3208
- this.panel = undefined;
3450
+ renderPanel(panel, options = { asActive: true }) {
3451
+ const doRender = options.asActive ||
3452
+ (this.panel && this.group.isPanelActive(this.panel));
3453
+ if (this.panel &&
3454
+ this.panel.view.content.element.parentElement === this._element) {
3455
+ /**
3456
+ * If the currently attached panel is mounted directly to the content then remove it
3457
+ */
3458
+ this._element.removeChild(this.panel.view.content.element);
3209
3459
  }
3210
3460
  this.panel = panel;
3211
- const disposable = new CompositeDisposable();
3212
- if (this.panel.view) {
3213
- const _onDidFocus = this.panel.view.content.onDidFocus;
3214
- const _onDidBlur = this.panel.view.content.onDidBlur;
3215
- const focusTracker = trackFocus(this._element);
3461
+ let container;
3462
+ switch (panel.api.renderer) {
3463
+ case 'onlyWhenVisibile':
3464
+ this.accessor.overlayRenderContainer.detatch(panel);
3465
+ if (this.panel) {
3466
+ if (doRender) {
3467
+ this._element.appendChild(this.panel.view.content.element);
3468
+ }
3469
+ }
3470
+ container = this._element;
3471
+ break;
3472
+ case 'always':
3473
+ if (panel.view.content.element.parentElement === this._element) {
3474
+ this._element.removeChild(panel.view.content.element);
3475
+ }
3476
+ container = this.accessor.overlayRenderContainer.attach({
3477
+ panel,
3478
+ referenceContainer: this,
3479
+ });
3480
+ break;
3481
+ }
3482
+ if (doRender) {
3483
+ const _onDidFocus = panel.view.content.onDidFocus;
3484
+ const _onDidBlur = panel.view.content.onDidBlur;
3485
+ const focusTracker = trackFocus(container);
3486
+ const disposable = new CompositeDisposable();
3216
3487
  disposable.addDisposables(focusTracker, focusTracker.onDidFocus(() => this._onDidFocus.fire()), focusTracker.onDidBlur(() => this._onDidBlur.fire()));
3217
3488
  if (_onDidFocus) {
3218
3489
  disposable.addDisposables(_onDidFocus(() => this._onDidFocus.fire()));
@@ -3220,17 +3491,23 @@
3220
3491
  if (_onDidBlur) {
3221
3492
  disposable.addDisposables(_onDidBlur(() => this._onDidBlur.fire()));
3222
3493
  }
3223
- this._element.appendChild(this.panel.view.content.element);
3494
+ this.disposable.value = disposable;
3224
3495
  }
3225
- this.disposable.value = disposable;
3496
+ }
3497
+ openPanel(panel) {
3498
+ if (this.panel === panel) {
3499
+ return;
3500
+ }
3501
+ this.renderPanel(panel);
3226
3502
  }
3227
3503
  layout(_width, _height) {
3228
3504
  // noop
3229
3505
  }
3230
3506
  closePanel() {
3231
- var _a, _b, _c;
3232
- 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) {
3233
- this._element.removeChild(this.panel.view.content.element);
3507
+ if (this.panel) {
3508
+ if (this.accessor.options.defaultRenderer === 'onlyWhenVisibile') {
3509
+ this._element.removeChild(this.panel.view.content.element);
3510
+ }
3234
3511
  this.panel = undefined;
3235
3512
  }
3236
3513
  }
@@ -3240,14 +3517,6 @@
3240
3517
  }
3241
3518
  }
3242
3519
 
3243
- exports.DockviewDropTargets = void 0;
3244
- (function (DockviewDropTargets) {
3245
- DockviewDropTargets[DockviewDropTargets["Tab"] = 0] = "Tab";
3246
- DockviewDropTargets[DockviewDropTargets["Panel"] = 1] = "Panel";
3247
- DockviewDropTargets[DockviewDropTargets["TabContainer"] = 2] = "TabContainer";
3248
- DockviewDropTargets[DockviewDropTargets["Edge"] = 3] = "Edge";
3249
- })(exports.DockviewDropTargets || (exports.DockviewDropTargets = {}));
3250
-
3251
3520
  class DragHandler extends CompositeDisposable {
3252
3521
  constructor(el) {
3253
3522
  super();
@@ -3422,7 +3691,7 @@
3422
3691
  }, true));
3423
3692
  }
3424
3693
  isCancelled(_event) {
3425
- if (this.group.api.isFloating && !_event.shiftKey) {
3694
+ if (this.group.api.location === 'floating' && !_event.shiftKey) {
3426
3695
  return true;
3427
3696
  }
3428
3697
  return false;
@@ -3624,7 +3893,7 @@
3624
3893
  const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
3625
3894
  if (isFloatingGroupsEnabled &&
3626
3895
  event.shiftKey &&
3627
- !this.group.api.isFloating) {
3896
+ this.group.api.location !== 'floating') {
3628
3897
  event.preventDefault();
3629
3898
  const { top, left } = this.element.getBoundingClientRect();
3630
3899
  const { top: rootTop, left: rootLeft } = this.accessor.element.getBoundingClientRect();
@@ -3689,7 +3958,7 @@
3689
3958
  }), tab.onChanged((event) => {
3690
3959
  var _a;
3691
3960
  const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
3692
- const isFloatingWithOnePanel = this.group.api.isFloating && this.size === 1;
3961
+ const isFloatingWithOnePanel = this.group.api.location === 'floating' && this.size === 1;
3693
3962
  if (isFloatingGroupsEnabled &&
3694
3963
  !isFloatingWithOnePanel &&
3695
3964
  event.shiftKey) {
@@ -3772,15 +4041,37 @@
3772
4041
  }
3773
4042
  return isAncestor(document.activeElement, this.contentContainer.element);
3774
4043
  }
3775
- get isFloating() {
3776
- return this._isFloating;
3777
- }
3778
- set isFloating(value) {
3779
- this._isFloating = value;
3780
- this.dropTarget.setTargetZones(value ? ['center'] : ['top', 'bottom', 'left', 'right', 'center']);
3781
- toggleClass(this.container, 'dv-groupview-floating', value);
3782
- this.groupPanel.api._onDidFloatingStateChange.fire({
3783
- isFloating: this.isFloating,
4044
+ get location() {
4045
+ return this._location;
4046
+ }
4047
+ set location(value) {
4048
+ this._location = value;
4049
+ toggleClass(this.container, 'dv-groupview-floating', false);
4050
+ toggleClass(this.container, 'dv-groupview-popout', false);
4051
+ switch (value) {
4052
+ case 'grid':
4053
+ this.contentContainer.dropTarget.setTargetZones([
4054
+ 'top',
4055
+ 'bottom',
4056
+ 'left',
4057
+ 'right',
4058
+ 'center',
4059
+ ]);
4060
+ break;
4061
+ case 'floating':
4062
+ this.contentContainer.dropTarget.setTargetZones(['center']);
4063
+ this.contentContainer.dropTarget.setTargetZones(value
4064
+ ? ['center']
4065
+ : ['top', 'bottom', 'left', 'right', 'center']);
4066
+ toggleClass(this.container, 'dv-groupview-floating', true);
4067
+ break;
4068
+ case 'popout':
4069
+ this.contentContainer.dropTarget.setTargetZones(['center']);
4070
+ toggleClass(this.container, 'dv-groupview-popout', true);
4071
+ break;
4072
+ }
4073
+ this.groupPanel.api._onDidLocationChange.fire({
4074
+ location: this.location,
3784
4075
  });
3785
4076
  }
3786
4077
  constructor(container, accessor, id, options, groupPanel) {
@@ -3793,7 +4084,7 @@
3793
4084
  this.groupPanel = groupPanel;
3794
4085
  this._isGroupActive = false;
3795
4086
  this._locked = false;
3796
- this._isFloating = false;
4087
+ this._location = 'grid';
3797
4088
  this.mostRecentlyUsed = [];
3798
4089
  this._onDidChange = new Emitter();
3799
4090
  this.onDidChange = this._onDidChange.event;
@@ -3816,35 +4107,7 @@
3816
4107
  this.onDidActivePanelChange = this._onDidActivePanelChange.event;
3817
4108
  toggleClass(this.container, 'groupview', true);
3818
4109
  this.tabsContainer = new TabsContainer(this.accessor, this.groupPanel);
3819
- this.contentContainer = new ContentContainer();
3820
- this.dropTarget = new Droptarget(this.contentContainer.element, {
3821
- acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
3822
- canDisplayOverlay: (event, position) => {
3823
- if (this.locked === 'no-drop-target' ||
3824
- (this.locked && position === 'center')) {
3825
- return false;
3826
- }
3827
- const data = getPanelData();
3828
- if (!data && event.shiftKey && !this.isFloating) {
3829
- return false;
3830
- }
3831
- if (data && data.viewId === this.accessor.id) {
3832
- if (data.groupId === this.id) {
3833
- if (position === 'center') {
3834
- // don't allow to drop on self for center position
3835
- return false;
3836
- }
3837
- if (data.panelId === null) {
3838
- // don't allow group move to drop anywhere on self
3839
- return false;
3840
- }
3841
- }
3842
- const groupHasOnePanelAndIsActiveDragElement = this._panels.length === 1 && data.groupId === this.id;
3843
- return !groupHasOnePanelAndIsActiveDragElement;
3844
- }
3845
- return this.canDisplayOverlay(event, position, exports.DockviewDropTargets.Panel);
3846
- },
3847
- });
4110
+ this.contentContainer = new ContentContainer(this.accessor, this);
3848
4111
  container.append(this.tabsContainer.element, this.contentContainer.element);
3849
4112
  this.header.hidden = !!options.hideHeader;
3850
4113
  this.locked = (_a = options.locked) !== null && _a !== void 0 ? _a : false;
@@ -3858,7 +4121,7 @@
3858
4121
  this.accessor.doSetGroupActive(this.groupPanel, true);
3859
4122
  }), this.contentContainer.onDidBlur(() => {
3860
4123
  // noop
3861
- }), this.dropTarget.onDrop((event) => {
4124
+ }), this.contentContainer.dropTarget.onDrop((event) => {
3862
4125
  this.handleDropEvent(event.nativeEvent, event.position);
3863
4126
  }), this._onMove, this._onDidChange, this._onDidDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange);
3864
4127
  }
@@ -3907,6 +4170,9 @@
3907
4170
  this.tabsContainer.setPrefixActionsElement(this._prefixHeaderActions.element);
3908
4171
  }
3909
4172
  }
4173
+ rerender(panel) {
4174
+ this.contentContainer.renderPanel(panel, { asActive: false });
4175
+ }
3910
4176
  indexOf(panel) {
3911
4177
  return this.tabsContainer.indexOf(panel.id);
3912
4178
  }
@@ -4098,12 +4364,12 @@
4098
4364
  doAddPanel(panel, index = this.panels.length, skipSetActive = false) {
4099
4365
  const existingPanel = this._panels.indexOf(panel);
4100
4366
  const hasExistingPanel = existingPanel > -1;
4367
+ this.tabsContainer.show();
4368
+ this.contentContainer.show();
4101
4369
  this.tabsContainer.openPanel(panel, index);
4102
4370
  if (!skipSetActive) {
4103
4371
  this.contentContainer.openPanel(panel);
4104
4372
  }
4105
- this.tabsContainer.show();
4106
- this.contentContainer.show();
4107
4373
  if (hasExistingPanel) {
4108
4374
  // TODO - need to ensure ordering hasn't changed and if it has need to re-order this.panels
4109
4375
  return;
@@ -4219,7 +4485,6 @@
4219
4485
  for (const panel of this.panels) {
4220
4486
  panel.dispose();
4221
4487
  }
4222
- this.dropTarget.dispose();
4223
4488
  this.tabsContainer.dispose();
4224
4489
  this.contentContainer.dispose();
4225
4490
  }
@@ -4258,7 +4523,7 @@
4258
4523
  if (this.disableResizing) {
4259
4524
  return;
4260
4525
  }
4261
- if (!document.body.contains(this._element)) {
4526
+ if (!isInDocument(this._element)) {
4262
4527
  /**
4263
4528
  * since the event is dispatched through requestAnimationFrame there is a small chance
4264
4529
  * the component is no longer attached to the DOM, if that is the case the dimensions
@@ -4350,6 +4615,21 @@
4350
4615
  isVisible(panel) {
4351
4616
  return this.gridview.isViewVisible(getGridLocation(panel.element));
4352
4617
  }
4618
+ maximizeGroup(panel) {
4619
+ this.gridview.maximizeView(panel);
4620
+ }
4621
+ isMaximizedGroup(panel) {
4622
+ return this.gridview.maximizedView() === panel;
4623
+ }
4624
+ exitMaximizedGroup() {
4625
+ this.gridview.exitMaximizedView();
4626
+ }
4627
+ hasMaximizedGroup() {
4628
+ return this.gridview.hasMaximizedView();
4629
+ }
4630
+ get onDidMaxmizedGroupChange() {
4631
+ return this.gridview.onDidMaxmizedNodeChange;
4632
+ }
4353
4633
  doAddGroup(group, location = [0], size) {
4354
4634
  this.gridview.addView(group, size !== null && size !== void 0 ? size : exports.Sizing.Distribute, location);
4355
4635
  this._onDidAddGroup.fire(group);
@@ -5126,32 +5406,63 @@
5126
5406
  }
5127
5407
  }
5128
5408
 
5409
+ // TODO find a better way to initialize and avoid needing null checks
5410
+ const NOT_INITIALIZED_MESSAGE = 'DockviewGroupPanelApiImpl not initialized';
5129
5411
  class DockviewGroupPanelApiImpl extends GridviewPanelApiImpl {
5130
- get isFloating() {
5412
+ get location() {
5131
5413
  if (!this._group) {
5132
- throw new Error(`DockviewGroupPanelApiImpl not initialized`);
5414
+ throw new Error(NOT_INITIALIZED_MESSAGE);
5133
5415
  }
5134
- return this._group.model.isFloating;
5416
+ return this._group.model.location;
5135
5417
  }
5136
5418
  constructor(id, accessor) {
5137
5419
  super(id);
5138
5420
  this.accessor = accessor;
5139
- this._onDidFloatingStateChange = new Emitter();
5140
- this.onDidFloatingStateChange = this._onDidFloatingStateChange.event;
5141
- this.addDisposables(this._onDidFloatingStateChange);
5421
+ this._onDidLocationChange = new Emitter();
5422
+ this.onDidLocationChange = this._onDidLocationChange.event;
5423
+ this.addDisposables(this._onDidLocationChange);
5142
5424
  }
5143
5425
  moveTo(options) {
5144
- var _a;
5426
+ var _a, _b, _c;
5427
+ if (!this._group) {
5428
+ throw new Error(NOT_INITIALIZED_MESSAGE);
5429
+ }
5430
+ const group = (_a = options.group) !== null && _a !== void 0 ? _a : this.accessor.addGroup({
5431
+ direction: positionToDirection((_b = options.position) !== null && _b !== void 0 ? _b : 'right'),
5432
+ });
5433
+ this.accessor.moveGroupOrPanel(group, this._group.id, undefined, options.group ? (_c = options.position) !== null && _c !== void 0 ? _c : 'center' : 'center');
5434
+ }
5435
+ maximize() {
5436
+ if (!this._group) {
5437
+ throw new Error(NOT_INITIALIZED_MESSAGE);
5438
+ }
5439
+ if (this.location !== 'grid') {
5440
+ // only grid groups can be maximized
5441
+ return;
5442
+ }
5443
+ this.accessor.maximizeGroup(this._group);
5444
+ }
5445
+ isMaximized() {
5145
5446
  if (!this._group) {
5146
- throw new Error(`DockviewGroupPanelApiImpl not initialized`);
5447
+ throw new Error(NOT_INITIALIZED_MESSAGE);
5448
+ }
5449
+ return this.accessor.isMaximizedGroup(this._group);
5450
+ }
5451
+ exitMaximized() {
5452
+ if (!this._group) {
5453
+ throw new Error(NOT_INITIALIZED_MESSAGE);
5454
+ }
5455
+ if (this.isMaximized()) {
5456
+ this.accessor.exitMaximizedGroup();
5147
5457
  }
5148
- this.accessor.moveGroupOrPanel(options.group, this._group.id, undefined, (_a = options.position) !== null && _a !== void 0 ? _a : 'center');
5149
5458
  }
5150
5459
  initialize(group) {
5151
5460
  this._group = group;
5152
5461
  }
5153
5462
  }
5154
5463
 
5464
+ const MINIMUM_DOCKVIEW_GROUP_PANEL_WIDTH = 100;
5465
+ const MINIMUM_DOCKVIEW_GROUP_PANEL_HEIGHT = 100;
5155
5466
  class DockviewGroupPanel extends GridviewPanel {
5156
5467
  get panels() {
5157
5468
  return this._model.panels;
@@ -5176,8 +5487,8 @@
5176
5487
  }
5177
5488
  constructor(accessor, id, options) {
5178
5489
  super(id, 'groupview_default', {
5179
- minimumHeight: 100,
5180
- minimumWidth: 100,
5490
+ minimumHeight: MINIMUM_DOCKVIEW_GROUP_PANEL_HEIGHT,
5491
+ minimumWidth: MINIMUM_DOCKVIEW_GROUP_PANEL_WIDTH,
5181
5492
  }, new DockviewGroupPanelApiImpl(id, accessor));
5182
5493
  this.api.initialize(this); // cannot use 'this' after after 'super' call
5183
5494
  this._model = new DockviewGroupPanelModel(this.element, accessor, id, options, this);
@@ -5231,8 +5542,10 @@
5231
5542
  return this.panel.title;
5232
5543
  }
5233
5544
  get isGroupActive() {
5234
- var _a;
5235
- return !!((_a = this.group) === null || _a === void 0 ? void 0 : _a.isActive);
5545
+ return this.group.isActive;
5546
+ }
5547
+ get renderer() {
5548
+ return this.panel.renderer;
5236
5549
  }
5237
5550
  set group(value) {
5238
5551
  const isOldGroupActive = this.isGroupActive;
@@ -5260,10 +5573,12 @@
5260
5573
  this.onDidActiveGroupChange = this._onDidActiveGroupChange.event;
5261
5574
  this._onDidGroupChange = new Emitter();
5262
5575
  this.onDidGroupChange = this._onDidGroupChange.event;
5576
+ this._onDidRendererChange = new Emitter();
5577
+ this.onDidRendererChange = this._onDidRendererChange.event;
5263
5578
  this.disposable = new MutableDisposable();
5264
5579
  this.initialize(panel);
5265
5580
  this._group = group;
5266
- this.addDisposables(this.disposable, this._onDidTitleChange, this._onDidGroupChange, this._onDidActiveGroupChange);
5581
+ this.addDisposables(this.disposable, this._onDidRendererChange, this._onDidTitleChange, this._onDidGroupChange, this._onDidActiveGroupChange);
5267
5582
  }
5268
5583
  moveTo(options) {
5269
5584
  var _a;
@@ -5272,9 +5587,21 @@
5272
5587
  setTitle(title) {
5273
5588
  this.panel.setTitle(title);
5274
5589
  }
5590
+ setRenderer(renderer) {
5591
+ this.panel.setRenderer(renderer);
5592
+ }
5275
5593
  close() {
5276
5594
  this.group.model.closePanel(this.panel);
5277
5595
  }
5596
+ maximize() {
5597
+ this.group.api.maximize();
5598
+ }
5599
+ isMaximized() {
5600
+ return this.group.api.isMaximized();
5601
+ }
5602
+ exitMaximized() {
5603
+ this.group.api.exitMaximized();
5604
+ }
5278
5605
  }
5279
5606
 
5280
5607
  class DockviewPanel extends CompositeDisposable {
@@ -5287,11 +5614,17 @@
5287
5614
  get group() {
5288
5615
  return this._group;
5289
5616
  }
5290
- constructor(id, accessor, containerApi, group, view) {
5617
+ get renderer() {
5618
+ var _a;
5619
+ return (_a = this._renderer) !== null && _a !== void 0 ? _a : this.accessor.renderer;
5620
+ }
5621
+ constructor(id, accessor, containerApi, group, view, options) {
5291
5622
  super();
5292
5623
  this.id = id;
5624
+ this.accessor = accessor;
5293
5625
  this.containerApi = containerApi;
5294
5626
  this.view = view;
5627
+ this._renderer = options.renderer;
5295
5628
  this._group = group;
5296
5629
  this.api = new DockviewPanelApiImpl(this, this._group, accessor);
5297
5630
  this.addDisposables(this.api.onActiveChange(() => {
@@ -5300,6 +5633,8 @@
5300
5633
  // forward the resize event to the group since if you want to resize a panel
5301
5634
  // you are actually just resizing the panels parent which is the group
5302
5635
  this.group.api.setSize(event);
5636
+ }), this.api.onDidRendererChange((event) => {
5637
+ this.group.model.rerender(this);
5303
5638
  }));
5304
5639
  }
5305
5640
  init(params) {
@@ -5319,6 +5654,7 @@
5319
5654
  ? this._params
5320
5655
  : undefined,
5321
5656
  title: this.title,
5657
+ renderer: this._renderer,
5322
5658
  };
5323
5659
  }
5324
5660
  setTitle(title) {
@@ -5334,6 +5670,15 @@
5334
5670
  this.api._onDidTitleChange.fire({ title });
5335
5671
  }
5336
5672
  }
5673
+ setRenderer(renderer) {
5674
+ const didChange = renderer !== this.renderer;
5675
+ if (didChange) {
5676
+ this._renderer = renderer;
5677
+ this.api._onDidRendererChange.fire({
5678
+ renderer: renderer,
5679
+ });
5680
+ }
5681
+ }
5337
5682
  update(event) {
5338
5683
  var _a;
5339
5684
  // merge the new parameters with the existing parameters
@@ -5552,8 +5897,8 @@
5552
5897
  }
5553
5898
 
5554
5899
  class DefaultDockviewDeserialzier {
5555
- constructor(layout) {
5556
- this.layout = layout;
5900
+ constructor(accessor) {
5901
+ this.accessor = accessor;
5557
5902
  }
5558
5903
  fromJSON(panelData, group) {
5559
5904
  var _a, _b;
@@ -5567,8 +5912,10 @@
5567
5912
  const tabComponent = viewData
5568
5913
  ? (_b = viewData.tab) === null || _b === void 0 ? void 0 : _b.id
5569
5914
  : panelData.tabComponent;
5570
- const view = new DockviewPanelModel(this.layout, panelId, contentComponent, tabComponent);
5571
- const panel = new DockviewPanel(panelId, this.layout, new DockviewApi(this.layout), group, view);
5915
+ const view = new DockviewPanelModel(this.accessor, panelId, contentComponent, tabComponent);
5916
+ const panel = new DockviewPanel(panelId, this.accessor, new DockviewApi(this.accessor), group, view, {
5917
+ renderer: panelData.renderer,
5918
+ });
5572
5919
  panel.init({
5573
5920
  title: title !== null && title !== void 0 ? title : panelId,
5574
5921
  params: params !== null && params !== void 0 ? params : {},
@@ -5948,7 +6295,261 @@
5948
6295
  }
5949
6296
  }
5950
6297
 
6298
+ class PopoutWindow extends CompositeDisposable {
6299
+ constructor(id, className, options) {
6300
+ super();
6301
+ this.id = id;
6302
+ this.className = className;
6303
+ this.options = options;
6304
+ this._onDidClose = new Emitter();
6305
+ this.onDidClose = this._onDidClose.event;
6306
+ this._window = null;
6307
+ this.addDisposables(this._onDidClose, {
6308
+ dispose: () => {
6309
+ this.close();
6310
+ },
6311
+ });
6312
+ }
6313
+ dimensions() {
6314
+ if (!this._window) {
6315
+ return null;
6316
+ }
6317
+ const left = this._window.value.screenX;
6318
+ const top = this._window.value.screenY;
6319
+ const width = this._window.value.innerWidth;
6320
+ const height = this._window.value.innerHeight;
6321
+ return { top, left, width, height };
6322
+ }
6323
+ close() {
6324
+ if (this._window) {
6325
+ this._window.disposable.dispose();
6326
+ this._window.value.close();
6327
+ this._window = null;
6328
+ }
6329
+ }
6330
+ open(content) {
6331
+ if (this._window) {
6332
+ throw new Error('instance of popout window is already open');
6333
+ }
6334
+ const url = `${this.options.url}`;
6335
+ const features = Object.entries({
6336
+ top: this.options.top,
6337
+ left: this.options.left,
6338
+ width: this.options.width,
6339
+ height: this.options.height,
6340
+ })
6341
+ .map(([key, value]) => `${key}=${value}`)
6342
+ .join(',');
6343
+ // https://developer.mozilla.org/en-US/docs/Web/API/Window/open
6344
+ const externalWindow = window.open(url, this.id, features);
6345
+ if (!externalWindow) {
6346
+ return;
6347
+ }
6348
+ const disposable = new CompositeDisposable();
6349
+ this._window = { value: externalWindow, disposable };
6350
+ const cleanUp = () => {
6351
+ this._onDidClose.fire();
6352
+ this._window = null;
6353
+ };
6354
+ // prevent any default content from loading
6355
+ // externalWindow.document.body.replaceWith(document.createElement('div'));
6356
+ disposable.addDisposables(addDisposableWindowListener(window, 'beforeunload', () => {
6357
+ cleanUp();
6358
+ this.close();
6359
+ }));
6360
+ externalWindow.addEventListener('load', () => {
6361
+ const externalDocument = externalWindow.document;
6362
+ externalDocument.title = document.title;
6363
+ const div = document.createElement('div');
6364
+ div.classList.add('dv-popout-window');
6365
+ div.style.position = 'absolute';
6366
+ div.style.width = '100%';
6367
+ div.style.height = '100%';
6368
+ div.style.top = '0px';
6369
+ div.style.left = '0px';
6370
+ div.classList.add(this.className);
6371
+ div.appendChild(content);
6372
+ externalDocument.body.replaceChildren(div);
6373
+ externalDocument.body.classList.add(this.className);
6374
+ addStyles(externalDocument, window.document.styleSheets);
6375
+ externalWindow.addEventListener('beforeunload', () => {
6376
+ // TODO: indicate external window is closing
6377
+ cleanUp();
6378
+ });
6379
+ });
6380
+ }
6381
+ }
6382
+
6383
+ class DockviewPopoutGroupPanel extends CompositeDisposable {
6384
+ constructor(id, group, options) {
6385
+ var _a;
6386
+ super();
6387
+ this.id = id;
6388
+ this.group = group;
6389
+ this.options = options;
6390
+ this.window = new PopoutWindow(id, (_a = options.className) !== null && _a !== void 0 ? _a : '', {
6391
+ url: this.options.popoutUrl,
6392
+ left: this.options.box.left,
6393
+ top: this.options.box.top,
6394
+ width: this.options.box.width,
6395
+ height: this.options.box.height,
6396
+ });
6397
+ group.model.location = 'popout';
6398
+ this.addDisposables(this.window, {
6399
+ dispose: () => {
6400
+ group.model.location = 'grid';
6401
+ },
6402
+ }, this.window.onDidClose(() => {
6403
+ this.dispose();
6404
+ }));
6405
+ this.window.open(group.element);
6406
+ }
6407
+ }
6408
+
5951
6409
  const DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE = 100;
6410
+ const DEFAULT_FLOATING_GROUP_POSITION = { left: 100, top: 100 };
6411
+
6412
+ function createFocusableElement() {
6413
+ const element = document.createElement('div');
6414
+ element.tabIndex = -1;
6415
+ return element;
6416
+ }
6417
+ class OverlayRenderContainer extends CompositeDisposable {
6418
+ constructor(element) {
6419
+ super();
6420
+ this.element = element;
6421
+ this.map = {};
6422
+ this.addDisposables(Disposable.from(() => {
6423
+ for (const value of Object.values(this.map)) {
6424
+ value.disposable.dispose();
6425
+ value.destroy.dispose();
6426
+ }
6427
+ }));
6428
+ }
6429
+ detatch(panel) {
6430
+ if (this.map[panel.api.id]) {
6431
+ const { disposable, destroy } = this.map[panel.api.id];
6432
+ disposable.dispose();
6433
+ destroy.dispose();
6434
+ delete this.map[panel.api.id];
6435
+ return true;
6436
+ }
6437
+ return false;
6438
+ }
6439
+ attach(options) {
6440
+ const { panel, referenceContainer } = options;
6441
+ if (!this.map[panel.api.id]) {
6442
+ const element = createFocusableElement();
6443
+ element.className = 'dv-render-overlay';
6444
+ this.map[panel.api.id] = {
6445
+ panel,
6446
+ disposable: Disposable.NONE,
6447
+ destroy: Disposable.NONE,
6448
+ element,
6449
+ };
6450
+ }
6451
+ const focusContainer = this.map[panel.api.id].element;
6452
+ if (panel.view.content.element.parentElement !== focusContainer) {
6453
+ focusContainer.appendChild(panel.view.content.element);
6454
+ }
6455
+ if (focusContainer.parentElement !== this.element) {
6456
+ this.element.appendChild(focusContainer);
6457
+ }
6458
+ const resize = () => {
6459
+ // TODO propagate position to avoid getDomNodePagePosition calls, possible performance bottleneck?
6460
+ const box = getDomNodePagePosition(referenceContainer.element);
6461
+ const box2 = getDomNodePagePosition(this.element);
6462
+ focusContainer.style.left = `${box.left - box2.left}px`;
6463
+ focusContainer.style.top = `${box.top - box2.top}px`;
6464
+ focusContainer.style.width = `${box.width}px`;
6465
+ focusContainer.style.height = `${box.height}px`;
6466
+ toggleClass(focusContainer, 'dv-render-overlay-float', panel.group.api.location === 'floating');
6467
+ };
6468
+ const visibilityChanged = () => {
6469
+ if (panel.api.isVisible) {
6470
+ resize();
6471
+ }
6472
+ focusContainer.style.display = panel.api.isVisible ? '' : 'none';
6473
+ };
6474
+ const disposable = new CompositeDisposable(
6475
+ /**
6476
+ * since container is positioned absoutely we must explicitly forward
6477
+ * the dnd events for the expect behaviours to continue to occur in terms of dnd
6478
+ *
6479
+ * the dnd observer does not need to be conditional on whether the panel is visible since
6480
+ * non-visible panels are 'display: none' and in such case the dnd observer will not fire.
6481
+ */
6482
+ new DragAndDropObserver(focusContainer, {
6483
+ onDragEnd: (e) => {
6484
+ referenceContainer.dropTarget.dnd.onDragEnd(e);
6485
+ },
6486
+ onDragEnter: (e) => {
6487
+ referenceContainer.dropTarget.dnd.onDragEnter(e);
6488
+ },
6489
+ onDragLeave: (e) => {
6490
+ referenceContainer.dropTarget.dnd.onDragLeave(e);
6491
+ },
6492
+ onDrop: (e) => {
6493
+ referenceContainer.dropTarget.dnd.onDrop(e);
6494
+ },
6495
+ onDragOver: (e) => {
6496
+ referenceContainer.dropTarget.dnd.onDragOver(e);
6497
+ },
6498
+ }), panel.api.onDidVisibilityChange((event) => {
6499
+ /**
6500
+ * Control the visibility of the content, however even when not visible (display: none)
6501
+ * the content is still maintained within the DOM hence DOM specific attributes
6502
+ * such as scroll position are maintained when next made visible.
6503
+ */
6504
+ visibilityChanged();
6505
+ }), panel.api.onDidDimensionsChange(() => {
6506
+ if (!panel.api.isVisible) {
6507
+ return;
6508
+ }
6509
+ resize();
6510
+ }));
6511
+ this.map[panel.api.id].destroy = Disposable.from(() => {
6512
+ focusContainer.removeChild(panel.view.content.element);
6513
+ this.element.removeChild(focusContainer);
6514
+ });
6515
+ queueMicrotask(() => {
6516
+ if (this.isDisposed) {
6517
+ return;
6518
+ }
6519
+ /**
6520
+ * wait until everything has finished in the current stack-frame call before
6521
+ * calling the first resize as other size-altering events may still occur before
6522
+ * the end of the stack-frame.
6523
+ */
6524
+ visibilityChanged();
6525
+ });
6526
+ // dispose of logic asoccciated with previous reference-container
6527
+ this.map[panel.api.id].disposable.dispose();
6528
+ // and reset the disposable to the active reference-container
6529
+ this.map[panel.api.id].disposable = disposable;
6530
+ return focusContainer;
6531
+ }
6532
+ }
6533
+
6534
+ function getTheme(element) {
6535
+ function toClassList(element) {
6536
+ const list = [];
6537
+ for (let i = 0; i < element.classList.length; i++) {
6538
+ list.push(element.classList.item(i));
6539
+ }
6540
+ return list;
6541
+ }
6542
+ let theme = undefined;
6543
+ let parent = element;
6544
+ while (parent !== null) {
6545
+ theme = toClassList(parent).find((cls) => cls.startsWith('dockview-theme-'));
6546
+ if (typeof theme === 'string') {
6547
+ break;
6548
+ }
6549
+ parent = parent.parentElement;
6550
+ }
6551
+ return theme;
6552
+ }
5952
6553
  class DockviewComponent extends BaseGrid {
5953
6554
  get orientation() {
5954
6555
  return this.gridview.orientation;
@@ -5969,6 +6570,10 @@
5969
6570
  }
5970
6571
  return activeGroup.activePanel;
5971
6572
  }
6573
+ get renderer() {
6574
+ var _a;
6575
+ return (_a = this.options.defaultRenderer) !== null && _a !== void 0 ? _a : 'onlyWhenVisibile';
6576
+ }
5972
6577
  constructor(options) {
5973
6578
  var _a;
5974
6579
  super({
@@ -5995,12 +6600,27 @@
5995
6600
  this.onDidLayoutFromJSON = this._onDidLayoutFromJSON.event;
5996
6601
  this._onDidActivePanelChange = new Emitter();
5997
6602
  this.onDidActivePanelChange = this._onDidActivePanelChange.event;
5998
- this.floatingGroups = [];
6603
+ this._floatingGroups = [];
6604
+ this._popoutGroups = [];
6605
+ const gready = document.createElement('div');
6606
+ gready.className = 'dv-overlay-render-container';
6607
+ this.gridview.element.appendChild(gready);
6608
+ this.overlayRenderContainer = new OverlayRenderContainer(gready);
5999
6609
  toggleClass(this.gridview.element, 'dv-dockview', true);
6000
- this.addDisposables(this._onWillDragPanel, this._onWillDragGroup, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, exports.DockviewEvent.any(this.onDidAddGroup, this.onDidRemoveGroup)(() => {
6610
+ toggleClass(this.element, 'dv-debug', !!options.debug);
6611
+ this.addDisposables(this.overlayRenderContainer, this._onWillDragPanel, this._onWillDragGroup, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, exports.DockviewEvent.any(this.onDidAddGroup, this.onDidRemoveGroup)(() => {
6001
6612
  this.updateWatermark();
6002
6613
  }), exports.DockviewEvent.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidActivePanelChange)(() => {
6003
6614
  this._bufferOnDidLayoutChange.fire();
6615
+ }), Disposable.from(() => {
6616
+ // iterate over a copy of the array since .dispose() mutates the original array
6617
+ for (const group of [...this._floatingGroups]) {
6618
+ group.dispose();
6619
+ }
6620
+ // iterate over a copy of the array since .dispose() mutates the original array
6621
+ for (const group of [...this._popoutGroups]) {
6622
+ group.dispose();
6623
+ }
6004
6624
  }));
6005
6625
  this._options = options;
6006
6626
  if (!this.options.components) {
@@ -6070,6 +6690,55 @@
6070
6690
  this._api = new DockviewApi(this);
6071
6691
  this.updateWatermark();
6072
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
+ }
6073
6742
  addFloatingGroup(item, coord, options) {
6074
6743
  var _a, _b, _c, _d, _e, _f;
6075
6744
  let group;
@@ -6089,9 +6758,13 @@
6089
6758
  this.doRemoveGroup(item, { skipDispose: true });
6090
6759
  }
6091
6760
  }
6092
- group.model.isFloating = true;
6093
- const overlayLeft = typeof (coord === null || coord === void 0 ? void 0 : coord.x) === 'number' ? Math.max(coord.x, 0) : 100;
6094
- 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;
6095
6768
  const overlay = new Overlay({
6096
6769
  container: this.gridview.element,
6097
6770
  content: group.element,
@@ -6135,12 +6808,12 @@
6135
6808
  }), {
6136
6809
  dispose: () => {
6137
6810
  disposable.dispose();
6138
- group.model.isFloating = false;
6139
- remove(this.floatingGroups, floatingGroupPanel);
6811
+ group.model.location = 'grid';
6812
+ remove(this._floatingGroups, floatingGroupPanel);
6140
6813
  this.updateWatermark();
6141
6814
  },
6142
6815
  });
6143
- this.floatingGroups.push(floatingGroupPanel);
6816
+ this._floatingGroups.push(floatingGroupPanel);
6144
6817
  this.updateWatermark();
6145
6818
  }
6146
6819
  orthogonalize(position) {
@@ -6185,7 +6858,7 @@
6185
6858
  this.gridview.orientation = options.orientation;
6186
6859
  }
6187
6860
  if (hasFloatingGroupOptionsChanged) {
6188
- for (const group of this.floatingGroups) {
6861
+ for (const group of this._floatingGroups) {
6189
6862
  switch (this.options.floatingGroupBounds) {
6190
6863
  case 'boundedWithinViewport':
6191
6864
  group.overlay.minimumInViewportHeight = undefined;
@@ -6210,8 +6883,8 @@
6210
6883
  }
6211
6884
  layout(width, height, forceResize) {
6212
6885
  super.layout(width, height, forceResize);
6213
- if (this.floatingGroups) {
6214
- for (const floating of this.floatingGroups) {
6886
+ if (this._floatingGroups) {
6887
+ for (const floating of this._floatingGroups) {
6215
6888
  // ensure floting groups stay within visible boundaries
6216
6889
  floating.overlay.setBounds();
6217
6890
  }
@@ -6279,10 +6952,16 @@
6279
6952
  collection[panel.id] = panel.toJSON();
6280
6953
  return collection;
6281
6954
  }, {});
6282
- const floats = this.floatingGroups.map((floatingGroup) => {
6955
+ const floats = this._floatingGroups.map((group) => {
6956
+ return {
6957
+ data: group.group.toJSON(),
6958
+ position: group.overlay.toJSON(),
6959
+ };
6960
+ });
6961
+ const popoutGroups = this._popoutGroups.map((group) => {
6283
6962
  return {
6284
- data: floatingGroup.group.toJSON(),
6285
- position: floatingGroup.overlay.toJSON(),
6963
+ data: group.group.toJSON(),
6964
+ position: group.window.dimensions(),
6286
6965
  };
6287
6966
  });
6288
6967
  const result = {
@@ -6293,10 +6972,13 @@
6293
6972
  if (floats.length > 0) {
6294
6973
  result.floatingGroups = floats;
6295
6974
  }
6975
+ if (popoutGroups.length > 0) {
6976
+ result.popoutGroups = popoutGroups;
6977
+ }
6296
6978
  return result;
6297
6979
  }
6298
6980
  fromJSON(data) {
6299
- var _a;
6981
+ var _a, _b;
6300
6982
  this.clear();
6301
6983
  if (typeof data !== 'object' || data === null) {
6302
6984
  throw new Error('serialized layout must be a non-null object');
@@ -6363,7 +7045,16 @@
6363
7045
  width: position.width,
6364
7046
  }, { skipRemoveGroup: true, inDragMode: false });
6365
7047
  }
6366
- for (const floatingGroup of this.floatingGroups) {
7048
+ const serializedPopoutGroups = (_b = data.popoutGroups) !== null && _b !== void 0 ? _b : [];
7049
+ for (const serializedPopoutGroup of serializedPopoutGroups) {
7050
+ const { data, position } = serializedPopoutGroup;
7051
+ const group = createGroupFromSerializedState(data);
7052
+ this.addPopoutGroup(group, {
7053
+ skipRemoveGroup: true,
7054
+ position: position !== null && position !== void 0 ? position : undefined,
7055
+ });
7056
+ }
7057
+ for (const floatingGroup of this._floatingGroups) {
6367
7058
  floatingGroup.overlay.setBounds();
6368
7059
  }
6369
7060
  if (typeof activeGroup === 'string') {
@@ -6395,7 +7086,7 @@
6395
7086
  this._onDidRemoveGroup.fire(group);
6396
7087
  }
6397
7088
  // iterate over a reassigned array since original array will be modified
6398
- for (const floatingGroup of [...this.floatingGroups]) {
7089
+ for (const floatingGroup of [...this._floatingGroups]) {
6399
7090
  floatingGroup.dispose();
6400
7091
  }
6401
7092
  // fires clean-up events and clears the underlying HTML gridview.
@@ -6487,7 +7178,8 @@
6487
7178
  group.model.openPanel(panel);
6488
7179
  this.doSetGroupAndPanelActive(group);
6489
7180
  }
6490
- else if (referenceGroup.api.isFloating || target === 'center') {
7181
+ else if (referenceGroup.api.location === 'floating' ||
7182
+ target === 'center') {
6491
7183
  panel = this.createPanel(options, referenceGroup);
6492
7184
  referenceGroup.model.openPanel(panel);
6493
7185
  }
@@ -6531,6 +7223,7 @@
6531
7223
  }
6532
7224
  group.model.removePanel(panel);
6533
7225
  if (!options.skipDispose) {
7226
+ this.overlayRenderContainer.detatch(panel);
6534
7227
  panel.dispose();
6535
7228
  }
6536
7229
  if (group.size === 0 && options.removeEmptyGroup) {
@@ -6547,7 +7240,7 @@
6547
7240
  }
6548
7241
  updateWatermark() {
6549
7242
  var _a, _b;
6550
- if (this.groups.filter((x) => !x.api.isFloating).length === 0) {
7243
+ if (this.groups.filter((x) => x.api.location === 'grid').length === 0) {
6551
7244
  if (!this.watermark) {
6552
7245
  this.watermark = this.createWatermarkComponent();
6553
7246
  this.watermark.init({
@@ -6622,19 +7315,40 @@
6622
7315
  }
6623
7316
  }
6624
7317
  doRemoveGroup(group, options) {
6625
- const floatingGroup = this.floatingGroups.find((_) => _.group === group);
6626
- if (floatingGroup) {
6627
- if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
6628
- floatingGroup.group.dispose();
6629
- this._groups.delete(group.id);
6630
- this._onDidRemoveGroup.fire(group);
7318
+ if (group.api.location === 'floating') {
7319
+ const floatingGroup = this._floatingGroups.find((_) => _.group === group);
7320
+ if (floatingGroup) {
7321
+ if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
7322
+ floatingGroup.group.dispose();
7323
+ this._groups.delete(group.id);
7324
+ this._onDidRemoveGroup.fire(group);
7325
+ }
7326
+ remove(this._floatingGroups, floatingGroup);
7327
+ floatingGroup.dispose();
7328
+ if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
7329
+ const groups = Array.from(this._groups.values());
7330
+ this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
7331
+ }
7332
+ return floatingGroup.group;
6631
7333
  }
6632
- floatingGroup.dispose();
6633
- if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
6634
- const groups = Array.from(this._groups.values());
6635
- this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
7334
+ throw new Error('failed to find floating group');
7335
+ }
7336
+ if (group.api.location === 'popout') {
7337
+ const selectedGroup = this._popoutGroups.find((_) => _.group === group);
7338
+ if (selectedGroup) {
7339
+ if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
7340
+ selectedGroup.group.dispose();
7341
+ this._groups.delete(group.id);
7342
+ this._onDidRemoveGroup.fire(group);
7343
+ }
7344
+ selectedGroup.dispose();
7345
+ if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
7346
+ const groups = Array.from(this._groups.values());
7347
+ this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
7348
+ }
7349
+ return selectedGroup.group;
6636
7350
  }
6637
- return floatingGroup.group;
7351
+ throw new Error('failed to find popout group');
6638
7352
  }
6639
7353
  return super.doRemoveGroup(group, options);
6640
7354
  }
@@ -6666,8 +7380,7 @@
6666
7380
  const targetLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, destinationTarget);
6667
7381
  if (sourceGroup && sourceGroup.size < 2) {
6668
7382
  const [targetParentLocation, to] = tail(targetLocation);
6669
- const isFloating = this.floatingGroups.find((x) => x.group === sourceGroup);
6670
- if (!isFloating) {
7383
+ if (sourceGroup.api.location === 'grid') {
6671
7384
  const sourceLocation = getGridLocation(sourceGroup.element);
6672
7385
  const [sourceParentLocation, from] = tail(sourceLocation);
6673
7386
  if (sequenceEquals(sourceParentLocation, targetParentLocation)) {
@@ -6713,12 +7426,25 @@
6713
7426
  }
6714
7427
  }
6715
7428
  else {
6716
- const floatingGroup = this.floatingGroups.find((x) => x.group === sourceGroup);
6717
- if (floatingGroup) {
6718
- floatingGroup.dispose();
6719
- }
6720
- else {
6721
- this.gridview.removeView(getGridLocation(sourceGroup.element));
7429
+ switch (sourceGroup.api.location) {
7430
+ case 'grid':
7431
+ this.gridview.removeView(getGridLocation(sourceGroup.element));
7432
+ break;
7433
+ case 'floating': {
7434
+ const selectedFloatingGroup = this._floatingGroups.find((x) => x.group === sourceGroup);
7435
+ if (!selectedFloatingGroup) {
7436
+ throw new Error('failed to find floating group');
7437
+ }
7438
+ selectedFloatingGroup.dispose();
7439
+ break;
7440
+ }
7441
+ case 'popout': {
7442
+ const selectedPopoutGroup = this._popoutGroups.find((x) => x.group === sourceGroup);
7443
+ if (!selectedPopoutGroup) {
7444
+ throw new Error('failed to find popout group');
7445
+ }
7446
+ selectedPopoutGroup.dispose();
7447
+ }
6722
7448
  }
6723
7449
  const referenceLocation = getGridLocation(referenceGroup.element);
6724
7450
  const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
@@ -6780,7 +7506,7 @@
6780
7506
  const contentComponent = options.component;
6781
7507
  const tabComponent = (_a = options.tabComponent) !== null && _a !== void 0 ? _a : this.options.defaultTabComponent;
6782
7508
  const view = new DockviewPanelModel(this, options.id, contentComponent, tabComponent);
6783
- const panel = new DockviewPanel(options.id, this, this._api, group, view);
7509
+ const panel = new DockviewPanel(options.id, this, this._api, group, view, { renderer: options.renderer });
6784
7510
  panel.init({
6785
7511
  title: (_b = options.title) !== null && _b !== void 0 ? _b : options.id,
6786
7512
  params: (_c = options === null || options === void 0 ? void 0 : options.params) !== null && _c !== void 0 ? _c : {},