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
  */
@@ -31,7 +31,7 @@ function styleInject(css, ref) {
31
31
  }
32
32
  }
33
33
 
34
- var css_248z = ".dockview-svg {\n display: inline-block;\n fill: currentcolor;\n line-height: 1;\n stroke: currentcolor;\n stroke-width: 0;\n}\n.dockview-theme-dark {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n}\n\n.dockview-theme-light {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: white;\n --dv-tabs-and-actions-container-background-color: #f3f3f3;\n --dv-activegroup-visiblepanel-tab-background-color: white;\n --dv-activegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-inactivegroup-visiblepanel-tab-background-color: white;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-tab-divider-color: white;\n --dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-activegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.35);\n --dv-separator-border: rgba(128, 128, 128, 0.35);\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n}\n\n.dockview-theme-vs {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n --dv-tabs-and-actions-container-background-color: #2d2d30;\n --dv-tabs-and-actions-container-height: 20px;\n --dv-tabs-and-actions-container-font-size: 11px;\n --dv-activegroup-visiblepanel-tab-background-color: #007acc;\n --dv-inactivegroup-visiblepanel-tab-background-color: #3f3f46;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: white;\n --dv-inactivegroup-visiblepanel-tab-color: white;\n --dv-inactivegroup-hiddenpanel-tab-color: white;\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-activegroup-hiddenpanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n}\n\n.dockview-theme-abyss {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #000c18;\n --dv-tabs-and-actions-container-background-color: #1c1c2a;\n --dv-activegroup-visiblepanel-tab-background-color: #000c18;\n --dv-activegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #000c18;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-tab-divider-color: #2b2b4a;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.25);\n --dv-separator-border: #2b2b4a;\n --dv-paneview-header-border-color: #2b2b4a;\n --dv-paneview-active-outline-color: #596f99;\n}\n\n.dockview-theme-dracula {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #282a36;\n --dv-tabs-and-actions-container-background-color: #191a21;\n --dv-activegroup-visiblepanel-tab-background-color: #282a36;\n --dv-activegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #282a36;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-tab-divider-color: #191a21;\n --dv-activegroup-visiblepanel-tab-color: rgb(248, 248, 242);\n --dv-activegroup-hiddenpanel-tab-color: rgb(98, 114, 164);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(248, 248, 242, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(98, 114, 164, 0.5);\n --dv-separator-border: #bd93f9;\n --dv-paneview-header-border-color: #bd93f9;\n --dv-paneview-active-outline-color: #6272a4;\n}\n.dockview-theme-dracula .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab::after {\n position: absolute;\n left: 0px;\n top: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #94527e;\n z-index: 999;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #5e3d5a;\n z-index: 999;\n}\n\n.dockview-theme-replit {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #ebeced;\n --dv-tabs-and-actions-container-background-color: #fcfcfc;\n --dv-activegroup-visiblepanel-tab-background-color: #f0f1f2;\n --dv-activegroup-hiddenpanel-tab-background-color: ##fcfcfc;\n --dv-inactivegroup-visiblepanel-tab-background-color: #f0f1f2;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #fcfcfc;\n --dv-tab-divider-color: transparent;\n --dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-activegroup-hiddenpanel-tab-color: rgb(51, 51, 51);\n --dv-inactivegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-inactivegroup-hiddenpanel-tab-color: rgb(51, 51, 51);\n --dv-separator-border: transparent;\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n --dv-background-color: #ebeced;\n --dv-separator-handle-background-color: #cfd1d3;\n --dv-separator-handle-hover-background-color: #babbbb;\n}\n.dockview-theme-replit.dv-dockview {\n padding: 3px;\n}\n.dockview-theme-replit .view:has(> .groupview) {\n padding: 3px;\n}\n.dockview-theme-replit .dv-resize-container:has(> .groupview) {\n border-radius: 8px;\n}\n.dockview-theme-replit .groupview {\n overflow: hidden;\n border-radius: 10px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container {\n border-bottom: 1px solid rgba(128, 128, 128, 0.35);\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab {\n margin: 4px;\n border-radius: 8px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab .dockview-svg {\n height: 8px;\n width: 8px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab:hover {\n background-color: #e4e5e6 !important;\n}\n.dockview-theme-replit .groupview .content-container {\n background-color: #fcfcfc;\n}\n.dockview-theme-replit .groupview.active-group {\n border: 1px solid rgba(128, 128, 128, 0.35);\n}\n.dockview-theme-replit .groupview.inactive-group {\n border: 1px solid transparent;\n}\n.dockview-theme-replit .vertical > .sash-container > .sash::after {\n content: \"\";\n height: 4px;\n width: 40px;\n border-radius: 2px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--dv-separator-handle-background-color);\n position: absolute;\n}\n.dockview-theme-replit .vertical > .sash-container > .sash:hover::after {\n background-color: var(--dv-separator-handle-hover-background-color);\n}\n.dockview-theme-replit .horizontal > .sash-container > .sash::after {\n content: \"\";\n height: 40px;\n width: 4px;\n border-radius: 2px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--dv-separator-handle-background-color);\n position: absolute;\n}\n.dockview-theme-replit .horizontal > .sash-container > .sash:hover::after {\n background-color: var(--dv-separator-handle-hover-background-color);\n}\n.drop-target {\n position: relative;\n}\n.drop-target > .drop-target-dropzone {\n position: absolute;\n left: 0px;\n top: 0px;\n height: 100%;\n width: 100%;\n z-index: 1000;\n pointer-events: none;\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection {\n position: relative;\n box-sizing: border-box;\n height: 100%;\n width: 100%;\n background-color: var(--dv-drag-over-background-color);\n transition: top 70ms ease-out, left 70ms ease-out, width 70ms ease-out, height 70ms ease-out, opacity 0.15s ease-out;\n will-change: transform;\n pointer-events: none;\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-top {\n border-top: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-bottom {\n border-bottom: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-left {\n border-left: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-right {\n border-right: 1px solid var(--dv-drag-over-border-color);\n}\n.dv-debug .dv-resize-container .dv-resize-handle-top {\n background-color: red;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-bottom {\n background-color: green;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-left {\n background-color: yellow;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-right {\n background-color: blue;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-topleft,\n.dv-debug .dv-resize-container .dv-resize-handle-topright,\n.dv-debug .dv-resize-container .dv-resize-handle-bottomleft,\n.dv-debug .dv-resize-container .dv-resize-handle-bottomright {\n background-color: cyan;\n}\n\n.dv-resize-container {\n position: absolute;\n z-index: 997;\n border: 1px solid var(--dv-tab-divider-color);\n box-shadow: var(--dv-floating-box-shadow);\n}\n.dv-resize-container.dv-bring-to-front {\n z-index: 998;\n}\n.dv-resize-container.dv-resize-container-dragging {\n opacity: 0.5;\n}\n.dv-resize-container .dv-resize-handle-top {\n height: 4px;\n width: calc(100% - 8px);\n left: 4px;\n top: -2px;\n z-index: 999;\n position: absolute;\n cursor: ns-resize;\n}\n.dv-resize-container .dv-resize-handle-bottom {\n height: 4px;\n width: calc(100% - 8px);\n left: 4px;\n bottom: -2px;\n z-index: 999;\n position: absolute;\n cursor: ns-resize;\n}\n.dv-resize-container .dv-resize-handle-left {\n height: calc(100% - 8px);\n width: 4px;\n left: -2px;\n top: 4px;\n z-index: 999;\n position: absolute;\n cursor: ew-resize;\n}\n.dv-resize-container .dv-resize-handle-right {\n height: calc(100% - 8px);\n width: 4px;\n right: -2px;\n top: 4px;\n z-index: 999;\n position: absolute;\n cursor: ew-resize;\n}\n.dv-resize-container .dv-resize-handle-topleft {\n height: 4px;\n width: 4px;\n top: -2px;\n left: -2px;\n z-index: 999;\n position: absolute;\n cursor: nw-resize;\n}\n.dv-resize-container .dv-resize-handle-topright {\n height: 4px;\n width: 4px;\n right: -2px;\n top: -2px;\n z-index: 999;\n position: absolute;\n cursor: ne-resize;\n}\n.dv-resize-container .dv-resize-handle-bottomleft {\n height: 4px;\n width: 4px;\n left: -2px;\n bottom: -2px;\n z-index: 999;\n position: absolute;\n cursor: sw-resize;\n}\n.dv-resize-container .dv-resize-handle-bottomright {\n height: 4px;\n width: 4px;\n right: -2px;\n bottom: -2px;\n z-index: 999;\n position: absolute;\n cursor: se-resize;\n}\n.dv-dockview {\n position: relative;\n background-color: var(--dv-group-view-background-color);\n}\n.dv-dockview .dv-watermark-container {\n position: absolute;\n top: 0px;\n left: 0px;\n height: 100%;\n width: 100%;\n z-index: 1;\n}\n\n.groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.inactive-tab {\n background-color: var(--dv-activegroup-hiddenpanel-tab-background-color);\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n background-color: var(--dv-inactivegroup-visiblepanel-tab-background-color);\n color: var(--dv-inactivegroup-visiblepanel-tab-color);\n}\n.groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.inactive-tab {\n background-color: var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n color: var(--dv-inactivegroup-hiddenpanel-tab-color);\n}\n\n/**\n * when a tab is dragged we lose the above stylings because they are conditional on parent elements\n * therefore we also set some stylings for the dragging event\n **/\n.tab.dv-tab-dragging {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.groupview {\n display: flex;\n flex-direction: column;\n height: 100%;\n background-color: var(--dv-group-view-background-color);\n overflow: hidden;\n}\n.groupview:focus {\n outline: none;\n}\n.groupview.empty > .tabs-and-actions-container {\n display: none;\n}\n.groupview > .content-container {\n flex-grow: 1;\n overflow: hidden;\n outline: none;\n}\n.grid-view,\n.branch-node {\n height: 100%;\n width: 100%;\n}\n.pane-container {\n height: 100%;\n width: 100%;\n}\n.pane-container.animated .view {\n transition-duration: 0.15s;\n transition-timing-function: ease-out;\n}\n.pane-container .view {\n overflow: hidden;\n display: flex;\n flex-direction: column;\n padding: 0px !important;\n}\n.pane-container .view:not(:first-child)::before {\n background-color: transparent !important;\n}\n.pane-container .view:not(:first-child) .pane > .pane-header {\n border-top: 1px solid var(--dv-paneview-header-border-color);\n}\n.pane-container .view .default-header {\n background-color: var(--dv-group-view-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n display: flex;\n padding: 0px 8px;\n cursor: pointer;\n}\n.pane-container .view .default-header .dockview-pane-header-icon {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.pane-container .view .default-header > span {\n padding-left: 8px;\n flex-grow: 1;\n}\n.pane-container:first-of-type > .pane > .pane-header {\n border-top: none !important;\n}\n.pane-container .pane {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n height: 100%;\n}\n.pane-container .pane .pane-header {\n box-sizing: border-box;\n user-select: none;\n position: relative;\n outline: none;\n}\n.pane-container .pane .pane-header.pane-draggable {\n cursor: pointer;\n}\n.pane-container .pane .pane-header:focus:before, .pane-container .pane .pane-header:focus-within:before {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 5;\n content: \"\";\n pointer-events: none;\n outline: 1px solid;\n outline-width: -1px;\n outline-style: solid;\n outline-offset: -1px;\n outline-color: var(--dv-paneview-active-outline-color);\n}\n.pane-container .pane .pane-body {\n overflow-y: auto;\n overflow-x: hidden;\n flex-grow: 1;\n position: relative;\n outline: none;\n}\n.pane-container .pane .pane-body:focus:before, .pane-container .pane .pane-body:focus-within:before {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 5;\n content: \"\";\n pointer-events: none;\n outline: 1px solid;\n outline-width: -1px;\n outline-style: solid;\n outline-offset: -1px;\n outline-color: var(--dv-paneview-active-outline-color);\n}\n.dv-debug .split-view-container .sash-container .sash.enabled {\n background-color: black;\n}\n.dv-debug .split-view-container .sash-container .sash.disabled {\n background-color: orange;\n}\n.dv-debug .split-view-container .sash-container .sash.maximum {\n background-color: green;\n}\n.dv-debug .split-view-container .sash-container .sash.minimum {\n background-color: red;\n}\n\n.split-view-container {\n position: relative;\n overflow: hidden;\n height: 100%;\n width: 100%;\n}\n.split-view-container.animation .view,\n.split-view-container.animation .sash {\n transition-duration: 0.15s;\n transition-timing-function: ease-out;\n}\n.split-view-container.horizontal {\n height: 100%;\n}\n.split-view-container.horizontal > .sash-container > .sash {\n height: 100%;\n width: 4px;\n}\n.split-view-container.horizontal > .sash-container > .sash.enabled {\n cursor: ew-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.horizontal > .sash-container > .sash.maximum {\n cursor: w-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.minimum {\n cursor: e-resize;\n}\n.split-view-container.horizontal > .view-container > .view:not(:first-child)::before {\n height: 100%;\n width: 1px;\n}\n.split-view-container.vertical {\n width: 100%;\n}\n.split-view-container.vertical > .sash-container > .sash {\n width: 100%;\n height: 4px;\n}\n.split-view-container.vertical > .sash-container > .sash.enabled {\n cursor: ns-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.vertical > .sash-container > .sash.maximum {\n cursor: n-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.minimum {\n cursor: s-resize;\n}\n.split-view-container.vertical > .view-container > .view {\n width: 100%;\n}\n.split-view-container.vertical > .view-container > .view:not(:first-child)::before {\n height: 1px;\n width: 100%;\n}\n.split-view-container .sash-container {\n height: 100%;\n width: 100%;\n position: absolute;\n}\n.split-view-container .sash-container .sash {\n position: absolute;\n z-index: 99;\n outline: none;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n touch-action: none;\n}\n.split-view-container .sash-container .sash:active {\n transition: background-color 0.1s ease-in-out;\n background-color: var(--dv-active-sash-color, transparent);\n}\n.split-view-container .sash-container .sash:hover {\n background-color: var(--dv-active-sash-color, transparent);\n transition: background-color 0.1s ease-in-out;\n transition-delay: 0.5s;\n}\n.split-view-container .view-container {\n position: relative;\n height: 100%;\n width: 100%;\n background-color: var(--dv-background-color);\n}\n.split-view-container .view-container .view {\n height: 100%;\n box-sizing: border-box;\n overflow: auto;\n position: absolute;\n}\n.split-view-container.separator-border .view:not(:first-child)::before {\n content: \" \";\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n background-color: var(--dv-separator-border);\n}\n.dv-dragged {\n transform: translate3d(0px, 0px, 0px); /* forces tab to be drawn on a separate layer (see https://github.com/microsoft/vscode/issues/18733) */\n}\n\n.tab {\n flex-shrink: 0;\n}\n.tab.dv-tab-dragging .tab-action {\n background-color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.tab.active-tab > .default-tab .tab-action {\n visibility: visible;\n}\n.tab.inactive-tab > .default-tab .tab-action {\n visibility: hidden;\n}\n.tab.inactive-tab > .default-tab:hover .tab-action {\n visibility: visible;\n}\n.tab .default-tab {\n position: relative;\n height: 100%;\n display: flex;\n min-width: 80px;\n align-items: center;\n padding: 0px 8px;\n white-space: nowrap;\n text-overflow: elipsis;\n}\n.tab .default-tab .tab-content {\n padding: 0px 8px;\n flex-grow: 1;\n}\n.tab .default-tab .action-container {\n text-align: right;\n display: flex;\n}\n.tab .default-tab .action-container .tab-list {\n display: flex;\n padding: 0px;\n margin: 0px;\n justify-content: flex-end;\n}\n.tab .default-tab .action-container .tab-list .tab-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n}\n.tab .default-tab .action-container .tab-list .tab-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}\n.tabs-and-actions-container {\n display: flex;\n background-color: var(--dv-tabs-and-actions-container-background-color);\n flex-shrink: 0;\n box-sizing: border-box;\n height: var(--dv-tabs-and-actions-container-height);\n font-size: var(--dv-tabs-and-actions-container-font-size);\n}\n.tabs-and-actions-container.hidden {\n display: none;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .tabs-container {\n flex-grow: 1;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .tabs-container .tab {\n flex-grow: 1;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .void-container {\n flex-grow: 0;\n}\n.tabs-and-actions-container .void-container {\n display: flex;\n flex-grow: 1;\n cursor: grab;\n}\n.tabs-and-actions-container .tabs-container {\n display: flex;\n overflow-x: overlay;\n overflow-y: hidden;\n scrollbar-width: thin;\n /* Track */\n /* Handle */\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar {\n height: 3px;\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar-track {\n background: transparent;\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar-thumb {\n background: var(--dv-tabs-container-scrollbar-color);\n}\n.tabs-and-actions-container .tabs-container .tab {\n -webkit-user-drag: element;\n outline: none;\n min-width: 75px;\n cursor: pointer;\n position: relative;\n box-sizing: border-box;\n}\n.tabs-and-actions-container .tabs-container .tab:not(:first-child)::before {\n content: \" \";\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n background-color: var(--dv-tab-divider-color);\n width: 1px;\n height: 100%;\n}\n.watermark {\n display: flex;\n width: 100%;\n}\n.watermark.has-actions .watermark-title .actions-container {\n display: none;\n}\n.watermark .watermark-title {\n height: 35px;\n width: 100%;\n display: flex;\n}\n.watermark .watermark-content {\n flex-grow: 1;\n}\n.watermark .actions-container {\n display: flex;\n align-items: center;\n padding: 0px 8px;\n}\n.watermark .actions-container .close-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n cursor: pointer;\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.watermark .actions-container .close-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}";
34
+ var css_248z = ".dv-render-overlay {\n position: absolute;\n z-index: 1;\n height: 100%;\n}\n.dv-render-overlay.dv-render-overlay-float {\n z-index: 999;\n}\n\n.dv-debug .dv-render-overlay {\n outline: 1px solid red;\n outline-offset: -1;\n}\n.dockview-svg {\n display: inline-block;\n fill: currentcolor;\n line-height: 1;\n stroke: currentcolor;\n stroke-width: 0;\n}\n.dockview-theme-dark {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n}\n\n.dockview-theme-light {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: white;\n --dv-tabs-and-actions-container-background-color: #f3f3f3;\n --dv-activegroup-visiblepanel-tab-background-color: white;\n --dv-activegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-inactivegroup-visiblepanel-tab-background-color: white;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-tab-divider-color: white;\n --dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-activegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.35);\n --dv-separator-border: rgba(128, 128, 128, 0.35);\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n}\n\n.dockview-theme-vs {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n --dv-tabs-and-actions-container-background-color: #2d2d30;\n --dv-tabs-and-actions-container-height: 20px;\n --dv-tabs-and-actions-container-font-size: 11px;\n --dv-activegroup-visiblepanel-tab-background-color: #007acc;\n --dv-inactivegroup-visiblepanel-tab-background-color: #3f3f46;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: white;\n --dv-inactivegroup-visiblepanel-tab-color: white;\n --dv-inactivegroup-hiddenpanel-tab-color: white;\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-activegroup-hiddenpanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n}\n\n.dockview-theme-abyss {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #000c18;\n --dv-tabs-and-actions-container-background-color: #1c1c2a;\n --dv-activegroup-visiblepanel-tab-background-color: #000c18;\n --dv-activegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #000c18;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-tab-divider-color: #2b2b4a;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.25);\n --dv-separator-border: #2b2b4a;\n --dv-paneview-header-border-color: #2b2b4a;\n --dv-paneview-active-outline-color: #596f99;\n}\n\n.dockview-theme-dracula {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #282a36;\n --dv-tabs-and-actions-container-background-color: #191a21;\n --dv-activegroup-visiblepanel-tab-background-color: #282a36;\n --dv-activegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #282a36;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-tab-divider-color: #191a21;\n --dv-activegroup-visiblepanel-tab-color: rgb(248, 248, 242);\n --dv-activegroup-hiddenpanel-tab-color: rgb(98, 114, 164);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(248, 248, 242, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(98, 114, 164, 0.5);\n --dv-separator-border: #bd93f9;\n --dv-paneview-header-border-color: #bd93f9;\n --dv-paneview-active-outline-color: #6272a4;\n}\n.dockview-theme-dracula .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab::after {\n position: absolute;\n left: 0px;\n top: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #94527e;\n z-index: 999;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #5e3d5a;\n z-index: 999;\n}\n\n.dockview-theme-replit {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #ebeced;\n --dv-tabs-and-actions-container-background-color: #fcfcfc;\n --dv-activegroup-visiblepanel-tab-background-color: #f0f1f2;\n --dv-activegroup-hiddenpanel-tab-background-color: ##fcfcfc;\n --dv-inactivegroup-visiblepanel-tab-background-color: #f0f1f2;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #fcfcfc;\n --dv-tab-divider-color: transparent;\n --dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-activegroup-hiddenpanel-tab-color: rgb(51, 51, 51);\n --dv-inactivegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-inactivegroup-hiddenpanel-tab-color: rgb(51, 51, 51);\n --dv-separator-border: transparent;\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n --dv-background-color: #ebeced;\n --dv-separator-handle-background-color: #cfd1d3;\n --dv-separator-handle-hover-background-color: #babbbb;\n}\n.dockview-theme-replit.dv-dockview {\n padding: 3px;\n}\n.dockview-theme-replit .view:has(> .groupview) {\n padding: 3px;\n}\n.dockview-theme-replit .dv-resize-container:has(> .groupview) {\n border-radius: 8px;\n}\n.dockview-theme-replit .groupview {\n overflow: hidden;\n border-radius: 10px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container {\n border-bottom: 1px solid rgba(128, 128, 128, 0.35);\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab {\n margin: 4px;\n border-radius: 8px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab .dockview-svg {\n height: 8px;\n width: 8px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab:hover {\n background-color: #e4e5e6 !important;\n}\n.dockview-theme-replit .groupview .content-container {\n background-color: #fcfcfc;\n}\n.dockview-theme-replit .groupview.active-group {\n border: 1px solid rgba(128, 128, 128, 0.35);\n}\n.dockview-theme-replit .groupview.inactive-group {\n border: 1px solid transparent;\n}\n.dockview-theme-replit .vertical > .sash-container > .sash::after {\n content: \"\";\n height: 4px;\n width: 40px;\n border-radius: 2px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--dv-separator-handle-background-color);\n position: absolute;\n}\n.dockview-theme-replit .vertical > .sash-container > .sash:hover::after {\n background-color: var(--dv-separator-handle-hover-background-color);\n}\n.dockview-theme-replit .horizontal > .sash-container > .sash::after {\n content: \"\";\n height: 40px;\n width: 4px;\n border-radius: 2px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--dv-separator-handle-background-color);\n position: absolute;\n}\n.dockview-theme-replit .horizontal > .sash-container > .sash:hover::after {\n background-color: var(--dv-separator-handle-hover-background-color);\n}\n.drop-target {\n position: relative;\n}\n.drop-target > .drop-target-dropzone {\n position: absolute;\n left: 0px;\n top: 0px;\n height: 100%;\n width: 100%;\n z-index: 1000;\n pointer-events: none;\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection {\n position: relative;\n box-sizing: border-box;\n height: 100%;\n width: 100%;\n background-color: var(--dv-drag-over-background-color);\n transition: top 70ms ease-out, left 70ms ease-out, width 70ms ease-out, height 70ms ease-out, opacity 0.15s ease-out;\n will-change: transform;\n pointer-events: none;\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.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}";
35
35
  styleInject(css_248z);
36
36
 
37
37
  class TransferObject {
@@ -260,6 +260,14 @@ var Disposable;
260
260
  // noop
261
261
  },
262
262
  };
263
+ function from(func) {
264
+ return {
265
+ dispose: () => {
266
+ func();
267
+ },
268
+ };
269
+ }
270
+ Disposable.from = from;
263
271
  })(Disposable || (Disposable = {}));
264
272
  class CompositeDisposable {
265
273
  get isDisposed() {
@@ -444,6 +452,61 @@ function quasiPreventDefault(event) {
444
452
  function quasiDefaultPrevented(event) {
445
453
  return event[QUASI_PREVENT_DEFAULT_KEY];
446
454
  }
455
+ function addStyles(document, styleSheetList) {
456
+ const styleSheets = Array.from(styleSheetList);
457
+ for (const styleSheet of styleSheets) {
458
+ if (styleSheet.href) {
459
+ const link = document.createElement('link');
460
+ link.href = styleSheet.href;
461
+ link.type = styleSheet.type;
462
+ link.rel = 'stylesheet';
463
+ document.head.appendChild(link);
464
+ }
465
+ let cssTexts = [];
466
+ try {
467
+ if (styleSheet.cssRules) {
468
+ cssTexts = Array.from(styleSheet.cssRules).map((rule) => rule.cssText);
469
+ }
470
+ }
471
+ catch (err) {
472
+ // security errors (lack of permissions), ignore
473
+ }
474
+ for (const rule of cssTexts) {
475
+ const style = document.createElement('style');
476
+ style.appendChild(document.createTextNode(rule));
477
+ document.head.appendChild(style);
478
+ }
479
+ }
480
+ }
481
+ function getDomNodePagePosition(domNode) {
482
+ const { left, top, width, height } = domNode.getBoundingClientRect();
483
+ return {
484
+ left: left + window.scrollX,
485
+ top: top + window.scrollY,
486
+ width: width,
487
+ height: height,
488
+ };
489
+ }
490
+ /**
491
+ * Check whether an element is in the DOM (including the Shadow DOM)
492
+ * @see https://terodox.tech/how-to-tell-if-an-element-is-in-the-dom-including-the-shadow-dom/
493
+ */
494
+ function isInDocument(element) {
495
+ let currentElement = element;
496
+ while (currentElement === null || currentElement === void 0 ? void 0 : currentElement.parentNode) {
497
+ if (currentElement.parentNode === document) {
498
+ return true;
499
+ }
500
+ else if (currentElement.parentNode instanceof DocumentFragment) {
501
+ // handle shadow DOMs
502
+ currentElement = currentElement.parentNode.host;
503
+ }
504
+ else {
505
+ currentElement = currentElement.parentNode;
506
+ }
507
+ }
508
+ return false;
509
+ }
447
510
 
448
511
  function tail(arr) {
449
512
  if (arr.length === 0) {
@@ -641,6 +704,9 @@ var Sizing;
641
704
  Sizing.Invisible = Invisible;
642
705
  })(Sizing || (Sizing = {}));
643
706
  class Splitview {
707
+ get contentSize() {
708
+ return this._contentSize;
709
+ }
644
710
  get size() {
645
711
  return this._size;
646
712
  }
@@ -706,7 +772,7 @@ class Splitview {
706
772
  this.sashes = [];
707
773
  this._size = 0;
708
774
  this._orthogonalSize = 0;
709
- this.contentSize = 0;
775
+ this._contentSize = 0;
710
776
  this._proportions = undefined;
711
777
  this._startSnappingEnabled = true;
712
778
  this._endSnappingEnabled = true;
@@ -825,7 +891,7 @@ class Splitview {
825
891
  );
826
892
  });
827
893
  // Initialize content size and proportions for first layout
828
- this.contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
894
+ this._contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
829
895
  this.saveProportions();
830
896
  }
831
897
  }
@@ -1099,7 +1165,7 @@ class Splitview {
1099
1165
  this.addView(view, sizing, to);
1100
1166
  }
1101
1167
  layout(size, orthogonalSize) {
1102
- const previousSize = Math.max(this.size, this.contentSize);
1168
+ const previousSize = Math.max(this.size, this._contentSize);
1103
1169
  this.size = size;
1104
1170
  this.orthogonalSize = orthogonalSize;
1105
1171
  if (!this.proportions) {
@@ -1109,9 +1175,23 @@ class Splitview {
1109
1175
  this.resize(this.viewItems.length - 1, size - previousSize, undefined, lowPriorityIndexes, highPriorityIndexes);
1110
1176
  }
1111
1177
  else {
1178
+ let total = 0;
1179
+ for (let i = 0; i < this.viewItems.length; i++) {
1180
+ const item = this.viewItems[i];
1181
+ const proportion = this.proportions[i];
1182
+ if (typeof proportion === 'number') {
1183
+ total += proportion;
1184
+ }
1185
+ else {
1186
+ size -= item.size;
1187
+ }
1188
+ }
1112
1189
  for (let i = 0; i < this.viewItems.length; i++) {
1113
1190
  const item = this.viewItems[i];
1114
- item.size = clamp(Math.round(this.proportions[i] * size), item.minimumSize, item.maximumSize);
1191
+ const proportion = this.proportions[i];
1192
+ if (typeof proportion === 'number' && total > 0) {
1193
+ item.size = clamp(Math.round((proportion * size) / total), item.minimumSize, item.maximumSize);
1194
+ }
1115
1195
  }
1116
1196
  }
1117
1197
  this.distributeEmptySpace();
@@ -1148,12 +1228,12 @@ class Splitview {
1148
1228
  }
1149
1229
  }
1150
1230
  saveProportions() {
1151
- if (this.proportionalLayout && this.contentSize > 0) {
1152
- this._proportions = this.viewItems.map((i) => i.size / this.contentSize);
1231
+ if (this.proportionalLayout && this._contentSize > 0) {
1232
+ this._proportions = this.viewItems.map((i) => i.visible ? i.size / this._contentSize : undefined);
1153
1233
  }
1154
1234
  }
1155
1235
  layoutViews() {
1156
- this.contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
1236
+ this._contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
1157
1237
  let sum = 0;
1158
1238
  const x = [];
1159
1239
  this.updateSashEnablement();
@@ -1247,7 +1327,7 @@ class Splitview {
1247
1327
  }
1248
1328
  else if (snappedAfter &&
1249
1329
  collapsesDown[index] &&
1250
- (position < this.contentSize || this.endSnappingEnabled)) {
1330
+ (position < this._contentSize || this.endSnappingEnabled)) {
1251
1331
  this.updateSash(sash, SashState.MAXIMUM);
1252
1332
  }
1253
1333
  else {
@@ -1536,7 +1616,6 @@ class LeafNode {
1536
1616
  setVisible(visible) {
1537
1617
  if (this.view.setVisible) {
1538
1618
  this.view.setVisible(visible);
1539
- this._onDidChange.fire({});
1540
1619
  }
1541
1620
  }
1542
1621
  layout(size, orthogonalSize) {
@@ -1568,10 +1647,14 @@ class BranchNode extends CompositeDisposable {
1568
1647
  get minimumSize() {
1569
1648
  return this.children.length === 0
1570
1649
  ? 0
1571
- : Math.max(...this.children.map((c) => c.minimumOrthogonalSize));
1650
+ : Math.max(...this.children.map((c, index) => this.splitview.isViewVisible(index)
1651
+ ? c.minimumOrthogonalSize
1652
+ : 0));
1572
1653
  }
1573
1654
  get maximumSize() {
1574
- return Math.min(...this.children.map((c) => c.maximumOrthogonalSize));
1655
+ return Math.min(...this.children.map((c, index) => this.splitview.isViewVisible(index)
1656
+ ? c.maximumOrthogonalSize
1657
+ : Number.POSITIVE_INFINITY));
1575
1658
  }
1576
1659
  get minimumOrthogonalSize() {
1577
1660
  return this.splitview.minimumSize;
@@ -1629,6 +1712,8 @@ class BranchNode extends CompositeDisposable {
1629
1712
  this.children = [];
1630
1713
  this._onDidChange = new Emitter();
1631
1714
  this.onDidChange = this._onDidChange.event;
1715
+ this._onDidVisibilityChange = new Emitter();
1716
+ this.onDidVisibilityChange = this._onDidVisibilityChange.event;
1632
1717
  this._orthogonalSize = orthogonalSize;
1633
1718
  this._size = size;
1634
1719
  this.element = document.createElement('div');
@@ -1663,7 +1748,7 @@ class BranchNode extends CompositeDisposable {
1663
1748
  styles,
1664
1749
  });
1665
1750
  }
1666
- this.addDisposables(this._onDidChange, this.splitview.onDidSashEnd(() => {
1751
+ this.addDisposables(this._onDidChange, this._onDidVisibilityChange, this.splitview.onDidSashEnd(() => {
1667
1752
  this._onDidChange.fire({});
1668
1753
  }));
1669
1754
  this.setupChildrenEvents();
@@ -1686,7 +1771,15 @@ class BranchNode extends CompositeDisposable {
1686
1771
  if (this.splitview.isViewVisible(index) === visible) {
1687
1772
  return;
1688
1773
  }
1774
+ const wereAllChildrenHidden = this.splitview.contentSize === 0;
1689
1775
  this.splitview.setViewVisible(index, visible);
1776
+ const areAllChildrenHidden = this.splitview.contentSize === 0;
1777
+ // If all children are hidden then the parent should hide the entire splitview
1778
+ // If the entire splitview is hidden then the parent should show the splitview when a child is shown
1779
+ if ((visible && wereAllChildrenHidden) ||
1780
+ (!visible && areAllChildrenHidden)) {
1781
+ this._onDidVisibilityChange.fire(visible);
1782
+ }
1690
1783
  }
1691
1784
  moveChild(from, to) {
1692
1785
  if (from === to) {
@@ -1750,13 +1843,20 @@ class BranchNode extends CompositeDisposable {
1750
1843
  }
1751
1844
  setupChildrenEvents() {
1752
1845
  this._childrenDisposable.dispose();
1753
- this._childrenDisposable = Event.any(...this.children.map((c) => c.onDidChange))((e) => {
1846
+ this._childrenDisposable = new CompositeDisposable(Event.any(...this.children.map((c) => c.onDidChange))((e) => {
1754
1847
  /**
1755
1848
  * indicate a change has occured to allows any re-rendering but don't bubble
1756
1849
  * event because that was specific to this branch
1757
1850
  */
1758
1851
  this._onDidChange.fire({ size: e.orthogonalSize });
1759
- });
1852
+ }), ...this.children.map((c, i) => {
1853
+ if (c instanceof BranchNode) {
1854
+ return c.onDidVisibilityChange((visible) => {
1855
+ this.setChildVisible(i, visible);
1856
+ });
1857
+ }
1858
+ return Disposable.NONE;
1859
+ }));
1760
1860
  }
1761
1861
  dispose() {
1762
1862
  this._childrenDisposable.dispose();
@@ -1917,7 +2017,69 @@ class Gridview {
1917
2017
  get maximumHeight() {
1918
2018
  return this.root.maximumHeight;
1919
2019
  }
2020
+ maximizedView() {
2021
+ var _a;
2022
+ return (_a = this._maximizedNode) === null || _a === void 0 ? void 0 : _a.view;
2023
+ }
2024
+ hasMaximizedView() {
2025
+ return this._maximizedNode !== undefined;
2026
+ }
2027
+ maximizeView(view) {
2028
+ const location = getGridLocation(view.element);
2029
+ const [_, node] = this.getNode(location);
2030
+ if (!(node instanceof LeafNode)) {
2031
+ return;
2032
+ }
2033
+ if (this._maximizedNode === node) {
2034
+ return;
2035
+ }
2036
+ if (this.hasMaximizedView()) {
2037
+ this.exitMaximizedView();
2038
+ }
2039
+ function hideAllViewsBut(parent, exclude) {
2040
+ for (let i = 0; i < parent.children.length; i++) {
2041
+ const child = parent.children[i];
2042
+ if (child instanceof LeafNode) {
2043
+ if (child !== exclude) {
2044
+ parent.setChildVisible(i, false);
2045
+ }
2046
+ }
2047
+ else {
2048
+ hideAllViewsBut(child, exclude);
2049
+ }
2050
+ }
2051
+ }
2052
+ hideAllViewsBut(this.root, node);
2053
+ this._maximizedNode = node;
2054
+ this._onDidMaxmizedNodeChange.fire();
2055
+ }
2056
+ exitMaximizedView() {
2057
+ if (!this._maximizedNode) {
2058
+ return;
2059
+ }
2060
+ function showViewsInReverseOrder(parent) {
2061
+ for (let index = parent.children.length - 1; index >= 0; index--) {
2062
+ const child = parent.children[index];
2063
+ if (child instanceof LeafNode) {
2064
+ parent.setChildVisible(index, true);
2065
+ }
2066
+ else {
2067
+ showViewsInReverseOrder(child);
2068
+ }
2069
+ }
2070
+ }
2071
+ showViewsInReverseOrder(this.root);
2072
+ this._maximizedNode = undefined;
2073
+ this._onDidMaxmizedNodeChange.fire();
2074
+ }
1920
2075
  serialize() {
2076
+ if (this.hasMaximizedView()) {
2077
+ /**
2078
+ * do not persist maximized view state but we must first exit any maximized views
2079
+ * before serialization to ensure the correct dimensions are persisted
2080
+ */
2081
+ this.exitMaximizedView();
2082
+ }
1921
2083
  const root = serializeBranchNode(this.getView(), this.orientation);
1922
2084
  return {
1923
2085
  root,
@@ -1929,7 +2091,9 @@ class Gridview {
1929
2091
  dispose() {
1930
2092
  this.disposable.dispose();
1931
2093
  this._onDidChange.dispose();
2094
+ this._onDidMaxmizedNodeChange.dispose();
1932
2095
  this.root.dispose();
2096
+ this._maximizedNode = undefined;
1933
2097
  this.element.remove();
1934
2098
  }
1935
2099
  clear() {
@@ -1970,6 +2134,7 @@ class Gridview {
1970
2134
  const oldRoot = this._root;
1971
2135
  if (oldRoot) {
1972
2136
  oldRoot.dispose();
2137
+ this._maximizedNode = undefined;
1973
2138
  this.element.removeChild(oldRoot.element);
1974
2139
  }
1975
2140
  this._root = root;
@@ -2056,9 +2221,12 @@ class Gridview {
2056
2221
  constructor(proportionalLayout, styles, orientation) {
2057
2222
  this.proportionalLayout = proportionalLayout;
2058
2223
  this.styles = styles;
2224
+ this._maximizedNode = undefined;
2059
2225
  this.disposable = new MutableDisposable();
2060
2226
  this._onDidChange = new Emitter();
2061
2227
  this.onDidChange = this._onDidChange.event;
2228
+ this._onDidMaxmizedNodeChange = new Emitter();
2229
+ this.onDidMaxmizedNodeChange = this._onDidMaxmizedNodeChange.event;
2062
2230
  this.element = document.createElement('div');
2063
2231
  this.element.className = 'grid-view';
2064
2232
  this.root = new BranchNode(orientation, proportionalLayout, styles, 0, 0);
@@ -2072,6 +2240,9 @@ class Gridview {
2072
2240
  return parent.isChildVisible(index);
2073
2241
  }
2074
2242
  setViewVisible(location, visible) {
2243
+ if (this.hasMaximizedView()) {
2244
+ this.exitMaximizedView();
2245
+ }
2075
2246
  const [rest, index] = tail(location);
2076
2247
  const [, parent] = this.getNode(rest);
2077
2248
  if (!(parent instanceof BranchNode)) {
@@ -2080,6 +2251,9 @@ class Gridview {
2080
2251
  parent.setChildVisible(index, visible);
2081
2252
  }
2082
2253
  moveView(parentLocation, from, to) {
2254
+ if (this.hasMaximizedView()) {
2255
+ this.exitMaximizedView();
2256
+ }
2083
2257
  const [, parent] = this.getNode(parentLocation);
2084
2258
  if (!(parent instanceof BranchNode)) {
2085
2259
  throw new Error('Invalid location');
@@ -2087,6 +2261,9 @@ class Gridview {
2087
2261
  parent.moveChild(from, to);
2088
2262
  }
2089
2263
  addView(view, size, location) {
2264
+ if (this.hasMaximizedView()) {
2265
+ this.exitMaximizedView();
2266
+ }
2090
2267
  const [rest, index] = tail(location);
2091
2268
  const [pathToParent, parent] = this.getNode(rest);
2092
2269
  if (parent instanceof BranchNode) {
@@ -2119,6 +2296,9 @@ class Gridview {
2119
2296
  return this.removeView(location, sizing);
2120
2297
  }
2121
2298
  removeView(location, sizing) {
2299
+ if (this.hasMaximizedView()) {
2300
+ this.exitMaximizedView();
2301
+ }
2122
2302
  const [rest, index] = tail(location);
2123
2303
  const [pathToParent, parent] = this.getNode(rest);
2124
2304
  if (!(parent instanceof BranchNode)) {
@@ -2856,6 +3036,24 @@ class DockviewApi {
2856
3036
  moveToPrevious(options) {
2857
3037
  this.component.moveToPrevious(options);
2858
3038
  }
3039
+ maximizeGroup(panel) {
3040
+ this.component.maximizeGroup(panel.group);
3041
+ }
3042
+ hasMaximizedGroup() {
3043
+ return this.component.hasMaximizedGroup();
3044
+ }
3045
+ exitMaxmizedGroup() {
3046
+ this.component.exitMaximizedGroup();
3047
+ }
3048
+ get onDidMaxmizedGroupChange() {
3049
+ return this.component.onDidMaxmizedGroupChange;
3050
+ }
3051
+ /**
3052
+ * Add a popout group in a new Window
3053
+ */
3054
+ addPopoutGroup(item, options) {
3055
+ this.component.addPopoutGroup(item, options);
3056
+ }
2859
3057
  }
2860
3058
 
2861
3059
  class DragAndDropObserver extends CompositeDisposable {
@@ -2866,29 +3064,44 @@ class DragAndDropObserver extends CompositeDisposable {
2866
3064
  this.target = null;
2867
3065
  this.registerListeners();
2868
3066
  }
3067
+ onDragEnter(e) {
3068
+ this.target = e.target;
3069
+ this.callbacks.onDragEnter(e);
3070
+ }
3071
+ onDragOver(e) {
3072
+ e.preventDefault(); // needed so that the drop event fires (https://stackoverflow.com/questions/21339924/drop-event-not-firing-in-chrome)
3073
+ if (this.callbacks.onDragOver) {
3074
+ this.callbacks.onDragOver(e);
3075
+ }
3076
+ }
3077
+ onDragLeave(e) {
3078
+ if (this.target === e.target) {
3079
+ this.target = null;
3080
+ this.callbacks.onDragLeave(e);
3081
+ }
3082
+ }
3083
+ onDragEnd(e) {
3084
+ this.target = null;
3085
+ this.callbacks.onDragEnd(e);
3086
+ }
3087
+ onDrop(e) {
3088
+ this.callbacks.onDrop(e);
3089
+ }
2869
3090
  registerListeners() {
2870
3091
  this.addDisposables(addDisposableListener(this.element, 'dragenter', (e) => {
2871
- this.target = e.target;
2872
- this.callbacks.onDragEnter(e);
3092
+ this.onDragEnter(e);
2873
3093
  }, true));
2874
3094
  this.addDisposables(addDisposableListener(this.element, 'dragover', (e) => {
2875
- e.preventDefault(); // needed so that the drop event fires (https://stackoverflow.com/questions/21339924/drop-event-not-firing-in-chrome)
2876
- if (this.callbacks.onDragOver) {
2877
- this.callbacks.onDragOver(e);
2878
- }
3095
+ this.onDragOver(e);
2879
3096
  }, true));
2880
3097
  this.addDisposables(addDisposableListener(this.element, 'dragleave', (e) => {
2881
- if (this.target === e.target) {
2882
- this.target = null;
2883
- this.callbacks.onDragLeave(e);
2884
- }
3098
+ this.onDragLeave(e);
2885
3099
  }));
2886
3100
  this.addDisposables(addDisposableListener(this.element, 'dragend', (e) => {
2887
- this.target = null;
2888
- this.callbacks.onDragEnd(e);
3101
+ this.onDragEnd(e);
2889
3102
  }));
2890
3103
  this.addDisposables(addDisposableListener(this.element, 'drop', (e) => {
2891
- this.callbacks.onDrop(e);
3104
+ this.onDrop(e);
2892
3105
  }));
2893
3106
  }
2894
3107
  }
@@ -2940,7 +3153,7 @@ class Droptarget extends CompositeDisposable {
2940
3153
  this.onDrop = this._onDrop.event;
2941
3154
  // use a set to take advantage of #<set>.has
2942
3155
  this._acceptedTargetZonesSet = new Set(this.options.acceptedTargetZones);
2943
- this.addDisposables(this._onDrop, new DragAndDropObserver(this.element, {
3156
+ this.dnd = new DragAndDropObserver(this.element, {
2944
3157
  onDragEnter: () => undefined,
2945
3158
  onDragOver: (e) => {
2946
3159
  if (this._acceptedTargetZonesSet.size === 0) {
@@ -3007,7 +3220,8 @@ class Droptarget extends CompositeDisposable {
3007
3220
  this._onDrop.fire({ position: state, nativeEvent: e });
3008
3221
  }
3009
3222
  },
3010
- }));
3223
+ });
3224
+ this.addDisposables(this._onDrop, this.dnd);
3011
3225
  }
3012
3226
  setTargetZones(acceptedTargetZones) {
3013
3227
  this._acceptedTargetZonesSet = new Set(acceptedTargetZones);
@@ -3163,12 +3377,22 @@ function calculateQuadrantAsPixels(overlayType, x, y, width, height, threshold)
3163
3377
  return 'center';
3164
3378
  }
3165
3379
 
3380
+ var DockviewDropTargets;
3381
+ (function (DockviewDropTargets) {
3382
+ DockviewDropTargets[DockviewDropTargets["Tab"] = 0] = "Tab";
3383
+ DockviewDropTargets[DockviewDropTargets["Panel"] = 1] = "Panel";
3384
+ DockviewDropTargets[DockviewDropTargets["TabContainer"] = 2] = "TabContainer";
3385
+ DockviewDropTargets[DockviewDropTargets["Edge"] = 3] = "Edge";
3386
+ })(DockviewDropTargets || (DockviewDropTargets = {}));
3387
+
3166
3388
  class ContentContainer extends CompositeDisposable {
3167
3389
  get element() {
3168
3390
  return this._element;
3169
3391
  }
3170
- constructor() {
3392
+ constructor(accessor, group) {
3171
3393
  super();
3394
+ this.accessor = accessor;
3395
+ this.group = group;
3172
3396
  this.disposable = new MutableDisposable();
3173
3397
  this._onDidFocus = new Emitter();
3174
3398
  this.onDidFocus = this._onDidFocus.event;
@@ -3178,11 +3402,38 @@ class ContentContainer extends CompositeDisposable {
3178
3402
  this._element.className = 'content-container';
3179
3403
  this._element.tabIndex = -1;
3180
3404
  this.addDisposables(this._onDidFocus, this._onDidBlur);
3181
- // for hosted containers
3182
- // 1) register a drop target on the host
3183
- // 2) register window dragStart events to disable pointer events
3184
- // 3) register dragEnd events
3185
- // 4) register mouseMove events (if no buttons are present we take this as a dragEnd event)
3405
+ this.dropTarget = new Droptarget(this.element, {
3406
+ acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
3407
+ canDisplayOverlay: (event, position) => {
3408
+ if (this.group.locked === 'no-drop-target' ||
3409
+ (this.group.locked && position === 'center')) {
3410
+ return false;
3411
+ }
3412
+ const data = getPanelData();
3413
+ if (!data &&
3414
+ event.shiftKey &&
3415
+ this.group.location !== 'floating') {
3416
+ return false;
3417
+ }
3418
+ if (data && data.viewId === this.accessor.id) {
3419
+ if (data.groupId === this.group.id) {
3420
+ if (position === 'center') {
3421
+ // don't allow to drop on self for center position
3422
+ return false;
3423
+ }
3424
+ if (data.panelId === null) {
3425
+ // don't allow group move to drop anywhere on self
3426
+ return false;
3427
+ }
3428
+ }
3429
+ const groupHasOnePanelAndIsActiveDragElement = this.group.panels.length === 1 &&
3430
+ data.groupId === this.group.id;
3431
+ return !groupHasOnePanelAndIsActiveDragElement;
3432
+ }
3433
+ return this.group.canDisplayOverlay(event, position, DockviewDropTargets.Panel);
3434
+ },
3435
+ });
3436
+ this.addDisposables(this.dropTarget);
3186
3437
  }
3187
3438
  show() {
3188
3439
  this.element.style.display = '';
@@ -3190,23 +3441,43 @@ class ContentContainer extends CompositeDisposable {
3190
3441
  hide() {
3191
3442
  this.element.style.display = 'none';
3192
3443
  }
3193
- openPanel(panel) {
3194
- var _a;
3195
- if (this.panel === panel) {
3196
- return;
3197
- }
3198
- if (this.panel) {
3199
- if ((_a = this.panel.view) === null || _a === void 0 ? void 0 : _a.content) {
3200
- this._element.removeChild(this.panel.view.content.element);
3201
- }
3202
- this.panel = undefined;
3444
+ renderPanel(panel, options = { asActive: true }) {
3445
+ const doRender = options.asActive ||
3446
+ (this.panel && this.group.isPanelActive(this.panel));
3447
+ if (this.panel &&
3448
+ this.panel.view.content.element.parentElement === this._element) {
3449
+ /**
3450
+ * If the currently attached panel is mounted directly to the content then remove it
3451
+ */
3452
+ this._element.removeChild(this.panel.view.content.element);
3203
3453
  }
3204
3454
  this.panel = panel;
3205
- const disposable = new CompositeDisposable();
3206
- if (this.panel.view) {
3207
- const _onDidFocus = this.panel.view.content.onDidFocus;
3208
- const _onDidBlur = this.panel.view.content.onDidBlur;
3209
- const focusTracker = trackFocus(this._element);
3455
+ let container;
3456
+ switch (panel.api.renderer) {
3457
+ case 'onlyWhenVisibile':
3458
+ this.accessor.overlayRenderContainer.detatch(panel);
3459
+ if (this.panel) {
3460
+ if (doRender) {
3461
+ this._element.appendChild(this.panel.view.content.element);
3462
+ }
3463
+ }
3464
+ container = this._element;
3465
+ break;
3466
+ case 'always':
3467
+ if (panel.view.content.element.parentElement === this._element) {
3468
+ this._element.removeChild(panel.view.content.element);
3469
+ }
3470
+ container = this.accessor.overlayRenderContainer.attach({
3471
+ panel,
3472
+ referenceContainer: this,
3473
+ });
3474
+ break;
3475
+ }
3476
+ if (doRender) {
3477
+ const _onDidFocus = panel.view.content.onDidFocus;
3478
+ const _onDidBlur = panel.view.content.onDidBlur;
3479
+ const focusTracker = trackFocus(container);
3480
+ const disposable = new CompositeDisposable();
3210
3481
  disposable.addDisposables(focusTracker, focusTracker.onDidFocus(() => this._onDidFocus.fire()), focusTracker.onDidBlur(() => this._onDidBlur.fire()));
3211
3482
  if (_onDidFocus) {
3212
3483
  disposable.addDisposables(_onDidFocus(() => this._onDidFocus.fire()));
@@ -3214,17 +3485,23 @@ class ContentContainer extends CompositeDisposable {
3214
3485
  if (_onDidBlur) {
3215
3486
  disposable.addDisposables(_onDidBlur(() => this._onDidBlur.fire()));
3216
3487
  }
3217
- this._element.appendChild(this.panel.view.content.element);
3488
+ this.disposable.value = disposable;
3218
3489
  }
3219
- this.disposable.value = disposable;
3490
+ }
3491
+ openPanel(panel) {
3492
+ if (this.panel === panel) {
3493
+ return;
3494
+ }
3495
+ this.renderPanel(panel);
3220
3496
  }
3221
3497
  layout(_width, _height) {
3222
3498
  // noop
3223
3499
  }
3224
3500
  closePanel() {
3225
- var _a, _b, _c;
3226
- if ((_c = (_b = (_a = this.panel) === null || _a === void 0 ? void 0 : _a.view) === null || _b === void 0 ? void 0 : _b.content) === null || _c === void 0 ? void 0 : _c.element) {
3227
- this._element.removeChild(this.panel.view.content.element);
3501
+ if (this.panel) {
3502
+ if (this.accessor.options.defaultRenderer === 'onlyWhenVisibile') {
3503
+ this._element.removeChild(this.panel.view.content.element);
3504
+ }
3228
3505
  this.panel = undefined;
3229
3506
  }
3230
3507
  }
@@ -3234,14 +3511,6 @@ class ContentContainer extends CompositeDisposable {
3234
3511
  }
3235
3512
  }
3236
3513
 
3237
- var DockviewDropTargets;
3238
- (function (DockviewDropTargets) {
3239
- DockviewDropTargets[DockviewDropTargets["Tab"] = 0] = "Tab";
3240
- DockviewDropTargets[DockviewDropTargets["Panel"] = 1] = "Panel";
3241
- DockviewDropTargets[DockviewDropTargets["TabContainer"] = 2] = "TabContainer";
3242
- DockviewDropTargets[DockviewDropTargets["Edge"] = 3] = "Edge";
3243
- })(DockviewDropTargets || (DockviewDropTargets = {}));
3244
-
3245
3514
  class DragHandler extends CompositeDisposable {
3246
3515
  constructor(el) {
3247
3516
  super();
@@ -3416,7 +3685,7 @@ class GroupDragHandler extends DragHandler {
3416
3685
  }, true));
3417
3686
  }
3418
3687
  isCancelled(_event) {
3419
- if (this.group.api.isFloating && !_event.shiftKey) {
3688
+ if (this.group.api.location === 'floating' && !_event.shiftKey) {
3420
3689
  return true;
3421
3690
  }
3422
3691
  return false;
@@ -3618,7 +3887,7 @@ class TabsContainer extends CompositeDisposable {
3618
3887
  const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
3619
3888
  if (isFloatingGroupsEnabled &&
3620
3889
  event.shiftKey &&
3621
- !this.group.api.isFloating) {
3890
+ this.group.api.location !== 'floating') {
3622
3891
  event.preventDefault();
3623
3892
  const { top, left } = this.element.getBoundingClientRect();
3624
3893
  const { top: rootTop, left: rootLeft } = this.accessor.element.getBoundingClientRect();
@@ -3683,7 +3952,7 @@ class TabsContainer extends CompositeDisposable {
3683
3952
  }), tab.onChanged((event) => {
3684
3953
  var _a;
3685
3954
  const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
3686
- const isFloatingWithOnePanel = this.group.api.isFloating && this.size === 1;
3955
+ const isFloatingWithOnePanel = this.group.api.location === 'floating' && this.size === 1;
3687
3956
  if (isFloatingGroupsEnabled &&
3688
3957
  !isFloatingWithOnePanel &&
3689
3958
  event.shiftKey) {
@@ -3766,15 +4035,37 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3766
4035
  }
3767
4036
  return isAncestor(document.activeElement, this.contentContainer.element);
3768
4037
  }
3769
- get isFloating() {
3770
- return this._isFloating;
3771
- }
3772
- set isFloating(value) {
3773
- this._isFloating = value;
3774
- this.dropTarget.setTargetZones(value ? ['center'] : ['top', 'bottom', 'left', 'right', 'center']);
3775
- toggleClass(this.container, 'dv-groupview-floating', value);
3776
- this.groupPanel.api._onDidFloatingStateChange.fire({
3777
- isFloating: this.isFloating,
4038
+ get location() {
4039
+ return this._location;
4040
+ }
4041
+ set location(value) {
4042
+ this._location = value;
4043
+ toggleClass(this.container, 'dv-groupview-floating', false);
4044
+ toggleClass(this.container, 'dv-groupview-popout', false);
4045
+ switch (value) {
4046
+ case 'grid':
4047
+ this.contentContainer.dropTarget.setTargetZones([
4048
+ 'top',
4049
+ 'bottom',
4050
+ 'left',
4051
+ 'right',
4052
+ 'center',
4053
+ ]);
4054
+ break;
4055
+ case 'floating':
4056
+ this.contentContainer.dropTarget.setTargetZones(['center']);
4057
+ this.contentContainer.dropTarget.setTargetZones(value
4058
+ ? ['center']
4059
+ : ['top', 'bottom', 'left', 'right', 'center']);
4060
+ toggleClass(this.container, 'dv-groupview-floating', true);
4061
+ break;
4062
+ case 'popout':
4063
+ this.contentContainer.dropTarget.setTargetZones(['center']);
4064
+ toggleClass(this.container, 'dv-groupview-popout', true);
4065
+ break;
4066
+ }
4067
+ this.groupPanel.api._onDidLocationChange.fire({
4068
+ location: this.location,
3778
4069
  });
3779
4070
  }
3780
4071
  constructor(container, accessor, id, options, groupPanel) {
@@ -3787,7 +4078,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3787
4078
  this.groupPanel = groupPanel;
3788
4079
  this._isGroupActive = false;
3789
4080
  this._locked = false;
3790
- this._isFloating = false;
4081
+ this._location = 'grid';
3791
4082
  this.mostRecentlyUsed = [];
3792
4083
  this._onDidChange = new Emitter();
3793
4084
  this.onDidChange = this._onDidChange.event;
@@ -3810,35 +4101,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3810
4101
  this.onDidActivePanelChange = this._onDidActivePanelChange.event;
3811
4102
  toggleClass(this.container, 'groupview', true);
3812
4103
  this.tabsContainer = new TabsContainer(this.accessor, this.groupPanel);
3813
- this.contentContainer = new ContentContainer();
3814
- this.dropTarget = new Droptarget(this.contentContainer.element, {
3815
- acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
3816
- canDisplayOverlay: (event, position) => {
3817
- if (this.locked === 'no-drop-target' ||
3818
- (this.locked && position === 'center')) {
3819
- return false;
3820
- }
3821
- const data = getPanelData();
3822
- if (!data && event.shiftKey && !this.isFloating) {
3823
- return false;
3824
- }
3825
- if (data && data.viewId === this.accessor.id) {
3826
- if (data.groupId === this.id) {
3827
- if (position === 'center') {
3828
- // don't allow to drop on self for center position
3829
- return false;
3830
- }
3831
- if (data.panelId === null) {
3832
- // don't allow group move to drop anywhere on self
3833
- return false;
3834
- }
3835
- }
3836
- const groupHasOnePanelAndIsActiveDragElement = this._panels.length === 1 && data.groupId === this.id;
3837
- return !groupHasOnePanelAndIsActiveDragElement;
3838
- }
3839
- return this.canDisplayOverlay(event, position, DockviewDropTargets.Panel);
3840
- },
3841
- });
4104
+ this.contentContainer = new ContentContainer(this.accessor, this);
3842
4105
  container.append(this.tabsContainer.element, this.contentContainer.element);
3843
4106
  this.header.hidden = !!options.hideHeader;
3844
4107
  this.locked = (_a = options.locked) !== null && _a !== void 0 ? _a : false;
@@ -3852,7 +4115,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3852
4115
  this.accessor.doSetGroupActive(this.groupPanel, true);
3853
4116
  }), this.contentContainer.onDidBlur(() => {
3854
4117
  // noop
3855
- }), this.dropTarget.onDrop((event) => {
4118
+ }), this.contentContainer.dropTarget.onDrop((event) => {
3856
4119
  this.handleDropEvent(event.nativeEvent, event.position);
3857
4120
  }), this._onMove, this._onDidChange, this._onDidDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange);
3858
4121
  }
@@ -3901,6 +4164,9 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3901
4164
  this.tabsContainer.setPrefixActionsElement(this._prefixHeaderActions.element);
3902
4165
  }
3903
4166
  }
4167
+ rerender(panel) {
4168
+ this.contentContainer.renderPanel(panel, { asActive: false });
4169
+ }
3904
4170
  indexOf(panel) {
3905
4171
  return this.tabsContainer.indexOf(panel.id);
3906
4172
  }
@@ -4092,12 +4358,12 @@ class DockviewGroupPanelModel extends CompositeDisposable {
4092
4358
  doAddPanel(panel, index = this.panels.length, skipSetActive = false) {
4093
4359
  const existingPanel = this._panels.indexOf(panel);
4094
4360
  const hasExistingPanel = existingPanel > -1;
4361
+ this.tabsContainer.show();
4362
+ this.contentContainer.show();
4095
4363
  this.tabsContainer.openPanel(panel, index);
4096
4364
  if (!skipSetActive) {
4097
4365
  this.contentContainer.openPanel(panel);
4098
4366
  }
4099
- this.tabsContainer.show();
4100
- this.contentContainer.show();
4101
4367
  if (hasExistingPanel) {
4102
4368
  // TODO - need to ensure ordering hasn't changed and if it has need to re-order this.panels
4103
4369
  return;
@@ -4213,7 +4479,6 @@ class DockviewGroupPanelModel extends CompositeDisposable {
4213
4479
  for (const panel of this.panels) {
4214
4480
  panel.dispose();
4215
4481
  }
4216
- this.dropTarget.dispose();
4217
4482
  this.tabsContainer.dispose();
4218
4483
  this.contentContainer.dispose();
4219
4484
  }
@@ -4252,7 +4517,7 @@ class Resizable extends CompositeDisposable {
4252
4517
  if (this.disableResizing) {
4253
4518
  return;
4254
4519
  }
4255
- if (!document.body.contains(this._element)) {
4520
+ if (!isInDocument(this._element)) {
4256
4521
  /**
4257
4522
  * since the event is dispatched through requestAnimationFrame there is a small chance
4258
4523
  * the component is no longer attached to the DOM, if that is the case the dimensions
@@ -4344,6 +4609,21 @@ class BaseGrid extends Resizable {
4344
4609
  isVisible(panel) {
4345
4610
  return this.gridview.isViewVisible(getGridLocation(panel.element));
4346
4611
  }
4612
+ maximizeGroup(panel) {
4613
+ this.gridview.maximizeView(panel);
4614
+ }
4615
+ isMaximizedGroup(panel) {
4616
+ return this.gridview.maximizedView() === panel;
4617
+ }
4618
+ exitMaximizedGroup() {
4619
+ this.gridview.exitMaximizedView();
4620
+ }
4621
+ hasMaximizedGroup() {
4622
+ return this.gridview.hasMaximizedView();
4623
+ }
4624
+ get onDidMaxmizedGroupChange() {
4625
+ return this.gridview.onDidMaxmizedNodeChange;
4626
+ }
4347
4627
  doAddGroup(group, location = [0], size) {
4348
4628
  this.gridview.addView(group, size !== null && size !== void 0 ? size : Sizing.Distribute, location);
4349
4629
  this._onDidAddGroup.fire(group);
@@ -5120,32 +5400,63 @@ class GridviewPanel extends BasePanelView {
5120
5400
  }
5121
5401
  }
5122
5402
 
5403
+ // TODO find a better way to initialize and avoid needing null checks
5404
+ const NOT_INITIALIZED_MESSAGE = 'DockviewGroupPanelApiImpl not initialized';
5123
5405
  class DockviewGroupPanelApiImpl extends GridviewPanelApiImpl {
5124
- get isFloating() {
5406
+ get location() {
5125
5407
  if (!this._group) {
5126
- throw new Error(`DockviewGroupPanelApiImpl not initialized`);
5408
+ throw new Error(NOT_INITIALIZED_MESSAGE);
5127
5409
  }
5128
- return this._group.model.isFloating;
5410
+ return this._group.model.location;
5129
5411
  }
5130
5412
  constructor(id, accessor) {
5131
5413
  super(id);
5132
5414
  this.accessor = accessor;
5133
- this._onDidFloatingStateChange = new Emitter();
5134
- this.onDidFloatingStateChange = this._onDidFloatingStateChange.event;
5135
- this.addDisposables(this._onDidFloatingStateChange);
5415
+ this._onDidLocationChange = new Emitter();
5416
+ this.onDidLocationChange = this._onDidLocationChange.event;
5417
+ this.addDisposables(this._onDidLocationChange);
5136
5418
  }
5137
5419
  moveTo(options) {
5138
- var _a;
5420
+ var _a, _b, _c;
5421
+ if (!this._group) {
5422
+ throw new Error(NOT_INITIALIZED_MESSAGE);
5423
+ }
5424
+ const group = (_a = options.group) !== null && _a !== void 0 ? _a : this.accessor.addGroup({
5425
+ direction: positionToDirection((_b = options.position) !== null && _b !== void 0 ? _b : 'right'),
5426
+ });
5427
+ this.accessor.moveGroupOrPanel(group, this._group.id, undefined, options.group ? (_c = options.position) !== null && _c !== void 0 ? _c : 'center' : 'center');
5428
+ }
5429
+ maximize() {
5430
+ if (!this._group) {
5431
+ throw new Error(NOT_INITIALIZED_MESSAGE);
5432
+ }
5433
+ if (this.location !== 'grid') {
5434
+ // only grid groups can be maximized
5435
+ return;
5436
+ }
5437
+ this.accessor.maximizeGroup(this._group);
5438
+ }
5439
+ isMaximized() {
5139
5440
  if (!this._group) {
5140
- throw new Error(`DockviewGroupPanelApiImpl not initialized`);
5441
+ throw new Error(NOT_INITIALIZED_MESSAGE);
5442
+ }
5443
+ return this.accessor.isMaximizedGroup(this._group);
5444
+ }
5445
+ exitMaximized() {
5446
+ if (!this._group) {
5447
+ throw new Error(NOT_INITIALIZED_MESSAGE);
5448
+ }
5449
+ if (this.isMaximized()) {
5450
+ this.accessor.exitMaximizedGroup();
5141
5451
  }
5142
- this.accessor.moveGroupOrPanel(options.group, this._group.id, undefined, (_a = options.position) !== null && _a !== void 0 ? _a : 'center');
5143
5452
  }
5144
5453
  initialize(group) {
5145
5454
  this._group = group;
5146
5455
  }
5147
5456
  }
5148
5457
 
5458
+ const MINIMUM_DOCKVIEW_GROUP_PANEL_WIDTH = 100;
5459
+ const MINIMUM_DOCKVIEW_GROUP_PANEL_HEIGHT = 100;
5149
5460
  class DockviewGroupPanel extends GridviewPanel {
5150
5461
  get panels() {
5151
5462
  return this._model.panels;
@@ -5170,8 +5481,8 @@ class DockviewGroupPanel extends GridviewPanel {
5170
5481
  }
5171
5482
  constructor(accessor, id, options) {
5172
5483
  super(id, 'groupview_default', {
5173
- minimumHeight: 100,
5174
- minimumWidth: 100,
5484
+ minimumHeight: MINIMUM_DOCKVIEW_GROUP_PANEL_HEIGHT,
5485
+ minimumWidth: MINIMUM_DOCKVIEW_GROUP_PANEL_WIDTH,
5175
5486
  }, new DockviewGroupPanelApiImpl(id, accessor));
5176
5487
  this.api.initialize(this); // cannot use 'this' after after 'super' call
5177
5488
  this._model = new DockviewGroupPanelModel(this.element, accessor, id, options, this);
@@ -5225,8 +5536,10 @@ class DockviewPanelApiImpl extends GridviewPanelApiImpl {
5225
5536
  return this.panel.title;
5226
5537
  }
5227
5538
  get isGroupActive() {
5228
- var _a;
5229
- return !!((_a = this.group) === null || _a === void 0 ? void 0 : _a.isActive);
5539
+ return this.group.isActive;
5540
+ }
5541
+ get renderer() {
5542
+ return this.panel.renderer;
5230
5543
  }
5231
5544
  set group(value) {
5232
5545
  const isOldGroupActive = this.isGroupActive;
@@ -5254,10 +5567,12 @@ class DockviewPanelApiImpl extends GridviewPanelApiImpl {
5254
5567
  this.onDidActiveGroupChange = this._onDidActiveGroupChange.event;
5255
5568
  this._onDidGroupChange = new Emitter();
5256
5569
  this.onDidGroupChange = this._onDidGroupChange.event;
5570
+ this._onDidRendererChange = new Emitter();
5571
+ this.onDidRendererChange = this._onDidRendererChange.event;
5257
5572
  this.disposable = new MutableDisposable();
5258
5573
  this.initialize(panel);
5259
5574
  this._group = group;
5260
- this.addDisposables(this.disposable, this._onDidTitleChange, this._onDidGroupChange, this._onDidActiveGroupChange);
5575
+ this.addDisposables(this.disposable, this._onDidRendererChange, this._onDidTitleChange, this._onDidGroupChange, this._onDidActiveGroupChange);
5261
5576
  }
5262
5577
  moveTo(options) {
5263
5578
  var _a;
@@ -5266,9 +5581,21 @@ class DockviewPanelApiImpl extends GridviewPanelApiImpl {
5266
5581
  setTitle(title) {
5267
5582
  this.panel.setTitle(title);
5268
5583
  }
5584
+ setRenderer(renderer) {
5585
+ this.panel.setRenderer(renderer);
5586
+ }
5269
5587
  close() {
5270
5588
  this.group.model.closePanel(this.panel);
5271
5589
  }
5590
+ maximize() {
5591
+ this.group.api.maximize();
5592
+ }
5593
+ isMaximized() {
5594
+ return this.group.api.isMaximized();
5595
+ }
5596
+ exitMaximized() {
5597
+ this.group.api.exitMaximized();
5598
+ }
5272
5599
  }
5273
5600
 
5274
5601
  class DockviewPanel extends CompositeDisposable {
@@ -5281,11 +5608,17 @@ class DockviewPanel extends CompositeDisposable {
5281
5608
  get group() {
5282
5609
  return this._group;
5283
5610
  }
5284
- constructor(id, accessor, containerApi, group, view) {
5611
+ get renderer() {
5612
+ var _a;
5613
+ return (_a = this._renderer) !== null && _a !== void 0 ? _a : this.accessor.renderer;
5614
+ }
5615
+ constructor(id, accessor, containerApi, group, view, options) {
5285
5616
  super();
5286
5617
  this.id = id;
5618
+ this.accessor = accessor;
5287
5619
  this.containerApi = containerApi;
5288
5620
  this.view = view;
5621
+ this._renderer = options.renderer;
5289
5622
  this._group = group;
5290
5623
  this.api = new DockviewPanelApiImpl(this, this._group, accessor);
5291
5624
  this.addDisposables(this.api.onActiveChange(() => {
@@ -5294,6 +5627,8 @@ class DockviewPanel extends CompositeDisposable {
5294
5627
  // forward the resize event to the group since if you want to resize a panel
5295
5628
  // you are actually just resizing the panels parent which is the group
5296
5629
  this.group.api.setSize(event);
5630
+ }), this.api.onDidRendererChange((event) => {
5631
+ this.group.model.rerender(this);
5297
5632
  }));
5298
5633
  }
5299
5634
  init(params) {
@@ -5313,6 +5648,7 @@ class DockviewPanel extends CompositeDisposable {
5313
5648
  ? this._params
5314
5649
  : undefined,
5315
5650
  title: this.title,
5651
+ renderer: this._renderer,
5316
5652
  };
5317
5653
  }
5318
5654
  setTitle(title) {
@@ -5328,6 +5664,15 @@ class DockviewPanel extends CompositeDisposable {
5328
5664
  this.api._onDidTitleChange.fire({ title });
5329
5665
  }
5330
5666
  }
5667
+ setRenderer(renderer) {
5668
+ const didChange = renderer !== this.renderer;
5669
+ if (didChange) {
5670
+ this._renderer = renderer;
5671
+ this.api._onDidRendererChange.fire({
5672
+ renderer: renderer,
5673
+ });
5674
+ }
5675
+ }
5331
5676
  update(event) {
5332
5677
  var _a;
5333
5678
  // merge the new parameters with the existing parameters
@@ -5546,8 +5891,8 @@ class DockviewPanelModel {
5546
5891
  }
5547
5892
 
5548
5893
  class DefaultDockviewDeserialzier {
5549
- constructor(layout) {
5550
- this.layout = layout;
5894
+ constructor(accessor) {
5895
+ this.accessor = accessor;
5551
5896
  }
5552
5897
  fromJSON(panelData, group) {
5553
5898
  var _a, _b;
@@ -5561,8 +5906,10 @@ class DefaultDockviewDeserialzier {
5561
5906
  const tabComponent = viewData
5562
5907
  ? (_b = viewData.tab) === null || _b === void 0 ? void 0 : _b.id
5563
5908
  : panelData.tabComponent;
5564
- const view = new DockviewPanelModel(this.layout, panelId, contentComponent, tabComponent);
5565
- const panel = new DockviewPanel(panelId, this.layout, new DockviewApi(this.layout), group, view);
5909
+ const view = new DockviewPanelModel(this.accessor, panelId, contentComponent, tabComponent);
5910
+ const panel = new DockviewPanel(panelId, this.accessor, new DockviewApi(this.accessor), group, view, {
5911
+ renderer: panelData.renderer,
5912
+ });
5566
5913
  panel.init({
5567
5914
  title: title !== null && title !== void 0 ? title : panelId,
5568
5915
  params: params !== null && params !== void 0 ? params : {},
@@ -5942,7 +6289,261 @@ class DockviewFloatingGroupPanel extends CompositeDisposable {
5942
6289
  }
5943
6290
  }
5944
6291
 
6292
+ class PopoutWindow extends CompositeDisposable {
6293
+ constructor(id, className, options) {
6294
+ super();
6295
+ this.id = id;
6296
+ this.className = className;
6297
+ this.options = options;
6298
+ this._onDidClose = new Emitter();
6299
+ this.onDidClose = this._onDidClose.event;
6300
+ this._window = null;
6301
+ this.addDisposables(this._onDidClose, {
6302
+ dispose: () => {
6303
+ this.close();
6304
+ },
6305
+ });
6306
+ }
6307
+ dimensions() {
6308
+ if (!this._window) {
6309
+ return null;
6310
+ }
6311
+ const left = this._window.value.screenX;
6312
+ const top = this._window.value.screenY;
6313
+ const width = this._window.value.innerWidth;
6314
+ const height = this._window.value.innerHeight;
6315
+ return { top, left, width, height };
6316
+ }
6317
+ close() {
6318
+ if (this._window) {
6319
+ this._window.disposable.dispose();
6320
+ this._window.value.close();
6321
+ this._window = null;
6322
+ }
6323
+ }
6324
+ open(content) {
6325
+ if (this._window) {
6326
+ throw new Error('instance of popout window is already open');
6327
+ }
6328
+ const url = `${this.options.url}`;
6329
+ const features = Object.entries({
6330
+ top: this.options.top,
6331
+ left: this.options.left,
6332
+ width: this.options.width,
6333
+ height: this.options.height,
6334
+ })
6335
+ .map(([key, value]) => `${key}=${value}`)
6336
+ .join(',');
6337
+ // https://developer.mozilla.org/en-US/docs/Web/API/Window/open
6338
+ const externalWindow = window.open(url, this.id, features);
6339
+ if (!externalWindow) {
6340
+ return;
6341
+ }
6342
+ const disposable = new CompositeDisposable();
6343
+ this._window = { value: externalWindow, disposable };
6344
+ const cleanUp = () => {
6345
+ this._onDidClose.fire();
6346
+ this._window = null;
6347
+ };
6348
+ // prevent any default content from loading
6349
+ // externalWindow.document.body.replaceWith(document.createElement('div'));
6350
+ disposable.addDisposables(addDisposableWindowListener(window, 'beforeunload', () => {
6351
+ cleanUp();
6352
+ this.close();
6353
+ }));
6354
+ externalWindow.addEventListener('load', () => {
6355
+ const externalDocument = externalWindow.document;
6356
+ externalDocument.title = document.title;
6357
+ const div = document.createElement('div');
6358
+ div.classList.add('dv-popout-window');
6359
+ div.style.position = 'absolute';
6360
+ div.style.width = '100%';
6361
+ div.style.height = '100%';
6362
+ div.style.top = '0px';
6363
+ div.style.left = '0px';
6364
+ div.classList.add(this.className);
6365
+ div.appendChild(content);
6366
+ externalDocument.body.replaceChildren(div);
6367
+ externalDocument.body.classList.add(this.className);
6368
+ addStyles(externalDocument, window.document.styleSheets);
6369
+ externalWindow.addEventListener('beforeunload', () => {
6370
+ // TODO: indicate external window is closing
6371
+ cleanUp();
6372
+ });
6373
+ });
6374
+ }
6375
+ }
6376
+
6377
+ class DockviewPopoutGroupPanel extends CompositeDisposable {
6378
+ constructor(id, group, options) {
6379
+ var _a;
6380
+ super();
6381
+ this.id = id;
6382
+ this.group = group;
6383
+ this.options = options;
6384
+ this.window = new PopoutWindow(id, (_a = options.className) !== null && _a !== void 0 ? _a : '', {
6385
+ url: this.options.popoutUrl,
6386
+ left: this.options.box.left,
6387
+ top: this.options.box.top,
6388
+ width: this.options.box.width,
6389
+ height: this.options.box.height,
6390
+ });
6391
+ group.model.location = 'popout';
6392
+ this.addDisposables(this.window, {
6393
+ dispose: () => {
6394
+ group.model.location = 'grid';
6395
+ },
6396
+ }, this.window.onDidClose(() => {
6397
+ this.dispose();
6398
+ }));
6399
+ this.window.open(group.element);
6400
+ }
6401
+ }
6402
+
5945
6403
  const DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE = 100;
6404
+ const DEFAULT_FLOATING_GROUP_POSITION = { left: 100, top: 100 };
6405
+
6406
+ function createFocusableElement() {
6407
+ const element = document.createElement('div');
6408
+ element.tabIndex = -1;
6409
+ return element;
6410
+ }
6411
+ class OverlayRenderContainer extends CompositeDisposable {
6412
+ constructor(element) {
6413
+ super();
6414
+ this.element = element;
6415
+ this.map = {};
6416
+ this.addDisposables(Disposable.from(() => {
6417
+ for (const value of Object.values(this.map)) {
6418
+ value.disposable.dispose();
6419
+ value.destroy.dispose();
6420
+ }
6421
+ }));
6422
+ }
6423
+ detatch(panel) {
6424
+ if (this.map[panel.api.id]) {
6425
+ const { disposable, destroy } = this.map[panel.api.id];
6426
+ disposable.dispose();
6427
+ destroy.dispose();
6428
+ delete this.map[panel.api.id];
6429
+ return true;
6430
+ }
6431
+ return false;
6432
+ }
6433
+ attach(options) {
6434
+ const { panel, referenceContainer } = options;
6435
+ if (!this.map[panel.api.id]) {
6436
+ const element = createFocusableElement();
6437
+ element.className = 'dv-render-overlay';
6438
+ this.map[panel.api.id] = {
6439
+ panel,
6440
+ disposable: Disposable.NONE,
6441
+ destroy: Disposable.NONE,
6442
+ element,
6443
+ };
6444
+ }
6445
+ const focusContainer = this.map[panel.api.id].element;
6446
+ if (panel.view.content.element.parentElement !== focusContainer) {
6447
+ focusContainer.appendChild(panel.view.content.element);
6448
+ }
6449
+ if (focusContainer.parentElement !== this.element) {
6450
+ this.element.appendChild(focusContainer);
6451
+ }
6452
+ const resize = () => {
6453
+ // TODO propagate position to avoid getDomNodePagePosition calls, possible performance bottleneck?
6454
+ const box = getDomNodePagePosition(referenceContainer.element);
6455
+ const box2 = getDomNodePagePosition(this.element);
6456
+ focusContainer.style.left = `${box.left - box2.left}px`;
6457
+ focusContainer.style.top = `${box.top - box2.top}px`;
6458
+ focusContainer.style.width = `${box.width}px`;
6459
+ focusContainer.style.height = `${box.height}px`;
6460
+ toggleClass(focusContainer, 'dv-render-overlay-float', panel.group.api.location === 'floating');
6461
+ };
6462
+ const visibilityChanged = () => {
6463
+ if (panel.api.isVisible) {
6464
+ resize();
6465
+ }
6466
+ focusContainer.style.display = panel.api.isVisible ? '' : 'none';
6467
+ };
6468
+ const disposable = new CompositeDisposable(
6469
+ /**
6470
+ * since container is positioned absoutely we must explicitly forward
6471
+ * the dnd events for the expect behaviours to continue to occur in terms of dnd
6472
+ *
6473
+ * the dnd observer does not need to be conditional on whether the panel is visible since
6474
+ * non-visible panels are 'display: none' and in such case the dnd observer will not fire.
6475
+ */
6476
+ new DragAndDropObserver(focusContainer, {
6477
+ onDragEnd: (e) => {
6478
+ referenceContainer.dropTarget.dnd.onDragEnd(e);
6479
+ },
6480
+ onDragEnter: (e) => {
6481
+ referenceContainer.dropTarget.dnd.onDragEnter(e);
6482
+ },
6483
+ onDragLeave: (e) => {
6484
+ referenceContainer.dropTarget.dnd.onDragLeave(e);
6485
+ },
6486
+ onDrop: (e) => {
6487
+ referenceContainer.dropTarget.dnd.onDrop(e);
6488
+ },
6489
+ onDragOver: (e) => {
6490
+ referenceContainer.dropTarget.dnd.onDragOver(e);
6491
+ },
6492
+ }), panel.api.onDidVisibilityChange((event) => {
6493
+ /**
6494
+ * Control the visibility of the content, however even when not visible (display: none)
6495
+ * the content is still maintained within the DOM hence DOM specific attributes
6496
+ * such as scroll position are maintained when next made visible.
6497
+ */
6498
+ visibilityChanged();
6499
+ }), panel.api.onDidDimensionsChange(() => {
6500
+ if (!panel.api.isVisible) {
6501
+ return;
6502
+ }
6503
+ resize();
6504
+ }));
6505
+ this.map[panel.api.id].destroy = Disposable.from(() => {
6506
+ focusContainer.removeChild(panel.view.content.element);
6507
+ this.element.removeChild(focusContainer);
6508
+ });
6509
+ queueMicrotask(() => {
6510
+ if (this.isDisposed) {
6511
+ return;
6512
+ }
6513
+ /**
6514
+ * wait until everything has finished in the current stack-frame call before
6515
+ * calling the first resize as other size-altering events may still occur before
6516
+ * the end of the stack-frame.
6517
+ */
6518
+ visibilityChanged();
6519
+ });
6520
+ // dispose of logic asoccciated with previous reference-container
6521
+ this.map[panel.api.id].disposable.dispose();
6522
+ // and reset the disposable to the active reference-container
6523
+ this.map[panel.api.id].disposable = disposable;
6524
+ return focusContainer;
6525
+ }
6526
+ }
6527
+
6528
+ function getTheme(element) {
6529
+ function toClassList(element) {
6530
+ const list = [];
6531
+ for (let i = 0; i < element.classList.length; i++) {
6532
+ list.push(element.classList.item(i));
6533
+ }
6534
+ return list;
6535
+ }
6536
+ let theme = undefined;
6537
+ let parent = element;
6538
+ while (parent !== null) {
6539
+ theme = toClassList(parent).find((cls) => cls.startsWith('dockview-theme-'));
6540
+ if (typeof theme === 'string') {
6541
+ break;
6542
+ }
6543
+ parent = parent.parentElement;
6544
+ }
6545
+ return theme;
6546
+ }
5946
6547
  class DockviewComponent extends BaseGrid {
5947
6548
  get orientation() {
5948
6549
  return this.gridview.orientation;
@@ -5963,6 +6564,10 @@ class DockviewComponent extends BaseGrid {
5963
6564
  }
5964
6565
  return activeGroup.activePanel;
5965
6566
  }
6567
+ get renderer() {
6568
+ var _a;
6569
+ return (_a = this.options.defaultRenderer) !== null && _a !== void 0 ? _a : 'onlyWhenVisibile';
6570
+ }
5966
6571
  constructor(options) {
5967
6572
  var _a;
5968
6573
  super({
@@ -5989,12 +6594,27 @@ class DockviewComponent extends BaseGrid {
5989
6594
  this.onDidLayoutFromJSON = this._onDidLayoutFromJSON.event;
5990
6595
  this._onDidActivePanelChange = new Emitter();
5991
6596
  this.onDidActivePanelChange = this._onDidActivePanelChange.event;
5992
- this.floatingGroups = [];
6597
+ this._floatingGroups = [];
6598
+ this._popoutGroups = [];
6599
+ const gready = document.createElement('div');
6600
+ gready.className = 'dv-overlay-render-container';
6601
+ this.gridview.element.appendChild(gready);
6602
+ this.overlayRenderContainer = new OverlayRenderContainer(gready);
5993
6603
  toggleClass(this.gridview.element, 'dv-dockview', true);
5994
- this.addDisposables(this._onWillDragPanel, this._onWillDragGroup, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, Event.any(this.onDidAddGroup, this.onDidRemoveGroup)(() => {
6604
+ toggleClass(this.element, 'dv-debug', !!options.debug);
6605
+ this.addDisposables(this.overlayRenderContainer, this._onWillDragPanel, this._onWillDragGroup, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, Event.any(this.onDidAddGroup, this.onDidRemoveGroup)(() => {
5995
6606
  this.updateWatermark();
5996
6607
  }), Event.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidActivePanelChange)(() => {
5997
6608
  this._bufferOnDidLayoutChange.fire();
6609
+ }), Disposable.from(() => {
6610
+ // iterate over a copy of the array since .dispose() mutates the original array
6611
+ for (const group of [...this._floatingGroups]) {
6612
+ group.dispose();
6613
+ }
6614
+ // iterate over a copy of the array since .dispose() mutates the original array
6615
+ for (const group of [...this._popoutGroups]) {
6616
+ group.dispose();
6617
+ }
5998
6618
  }));
5999
6619
  this._options = options;
6000
6620
  if (!this.options.components) {
@@ -6064,6 +6684,55 @@ class DockviewComponent extends BaseGrid {
6064
6684
  this._api = new DockviewApi(this);
6065
6685
  this.updateWatermark();
6066
6686
  }
6687
+ addPopoutGroup(item, options) {
6688
+ var _a;
6689
+ let group;
6690
+ let box = options === null || options === void 0 ? void 0 : options.position;
6691
+ if (item instanceof DockviewPanel) {
6692
+ group = this.createGroup();
6693
+ this.removePanel(item, {
6694
+ removeEmptyGroup: true,
6695
+ skipDispose: true,
6696
+ });
6697
+ group.model.openPanel(item);
6698
+ if (!box) {
6699
+ box = this.element.getBoundingClientRect();
6700
+ }
6701
+ }
6702
+ else {
6703
+ group = item;
6704
+ if (!box) {
6705
+ box = group.element.getBoundingClientRect();
6706
+ }
6707
+ const skip = typeof (options === null || options === void 0 ? void 0 : options.skipRemoveGroup) === 'boolean' &&
6708
+ options.skipRemoveGroup;
6709
+ if (!skip) {
6710
+ this.doRemoveGroup(item, { skipDispose: true });
6711
+ }
6712
+ }
6713
+ const theme = getTheme(this.gridview.element);
6714
+ const popoutWindow = new DockviewPopoutGroupPanel(`${this.id}-${group.id}`, // globally unique within dockview
6715
+ group, {
6716
+ className: theme !== null && theme !== void 0 ? theme : '',
6717
+ popoutUrl: (_a = options === null || options === void 0 ? void 0 : options.popoutUrl) !== null && _a !== void 0 ? _a : '/popout.html',
6718
+ box: {
6719
+ left: window.screenX + box.left,
6720
+ top: window.screenY + box.top,
6721
+ width: box.width,
6722
+ height: box.height,
6723
+ },
6724
+ });
6725
+ popoutWindow.addDisposables({
6726
+ dispose: () => {
6727
+ remove(this._popoutGroups, popoutWindow);
6728
+ this.updateWatermark();
6729
+ },
6730
+ }, popoutWindow.window.onDidClose(() => {
6731
+ this.doAddGroup(group, [0]);
6732
+ }));
6733
+ this._popoutGroups.push(popoutWindow);
6734
+ this.updateWatermark();
6735
+ }
6067
6736
  addFloatingGroup(item, coord, options) {
6068
6737
  var _a, _b, _c, _d, _e, _f;
6069
6738
  let group;
@@ -6083,9 +6752,13 @@ class DockviewComponent extends BaseGrid {
6083
6752
  this.doRemoveGroup(item, { skipDispose: true });
6084
6753
  }
6085
6754
  }
6086
- group.model.isFloating = true;
6087
- const overlayLeft = typeof (coord === null || coord === void 0 ? void 0 : coord.x) === 'number' ? Math.max(coord.x, 0) : 100;
6088
- const overlayTop = typeof (coord === null || coord === void 0 ? void 0 : coord.y) === 'number' ? Math.max(coord.y, 0) : 100;
6755
+ group.model.location = 'floating';
6756
+ const overlayLeft = typeof (coord === null || coord === void 0 ? void 0 : coord.x) === 'number'
6757
+ ? Math.max(coord.x, 0)
6758
+ : DEFAULT_FLOATING_GROUP_POSITION.left;
6759
+ const overlayTop = typeof (coord === null || coord === void 0 ? void 0 : coord.y) === 'number'
6760
+ ? Math.max(coord.y, 0)
6761
+ : DEFAULT_FLOATING_GROUP_POSITION.top;
6089
6762
  const overlay = new Overlay({
6090
6763
  container: this.gridview.element,
6091
6764
  content: group.element,
@@ -6129,12 +6802,12 @@ class DockviewComponent extends BaseGrid {
6129
6802
  }), {
6130
6803
  dispose: () => {
6131
6804
  disposable.dispose();
6132
- group.model.isFloating = false;
6133
- remove(this.floatingGroups, floatingGroupPanel);
6805
+ group.model.location = 'grid';
6806
+ remove(this._floatingGroups, floatingGroupPanel);
6134
6807
  this.updateWatermark();
6135
6808
  },
6136
6809
  });
6137
- this.floatingGroups.push(floatingGroupPanel);
6810
+ this._floatingGroups.push(floatingGroupPanel);
6138
6811
  this.updateWatermark();
6139
6812
  }
6140
6813
  orthogonalize(position) {
@@ -6179,7 +6852,7 @@ class DockviewComponent extends BaseGrid {
6179
6852
  this.gridview.orientation = options.orientation;
6180
6853
  }
6181
6854
  if (hasFloatingGroupOptionsChanged) {
6182
- for (const group of this.floatingGroups) {
6855
+ for (const group of this._floatingGroups) {
6183
6856
  switch (this.options.floatingGroupBounds) {
6184
6857
  case 'boundedWithinViewport':
6185
6858
  group.overlay.minimumInViewportHeight = undefined;
@@ -6204,8 +6877,8 @@ class DockviewComponent extends BaseGrid {
6204
6877
  }
6205
6878
  layout(width, height, forceResize) {
6206
6879
  super.layout(width, height, forceResize);
6207
- if (this.floatingGroups) {
6208
- for (const floating of this.floatingGroups) {
6880
+ if (this._floatingGroups) {
6881
+ for (const floating of this._floatingGroups) {
6209
6882
  // ensure floting groups stay within visible boundaries
6210
6883
  floating.overlay.setBounds();
6211
6884
  }
@@ -6273,10 +6946,16 @@ class DockviewComponent extends BaseGrid {
6273
6946
  collection[panel.id] = panel.toJSON();
6274
6947
  return collection;
6275
6948
  }, {});
6276
- const floats = this.floatingGroups.map((floatingGroup) => {
6949
+ const floats = this._floatingGroups.map((group) => {
6950
+ return {
6951
+ data: group.group.toJSON(),
6952
+ position: group.overlay.toJSON(),
6953
+ };
6954
+ });
6955
+ const popoutGroups = this._popoutGroups.map((group) => {
6277
6956
  return {
6278
- data: floatingGroup.group.toJSON(),
6279
- position: floatingGroup.overlay.toJSON(),
6957
+ data: group.group.toJSON(),
6958
+ position: group.window.dimensions(),
6280
6959
  };
6281
6960
  });
6282
6961
  const result = {
@@ -6287,10 +6966,13 @@ class DockviewComponent extends BaseGrid {
6287
6966
  if (floats.length > 0) {
6288
6967
  result.floatingGroups = floats;
6289
6968
  }
6969
+ if (popoutGroups.length > 0) {
6970
+ result.popoutGroups = popoutGroups;
6971
+ }
6290
6972
  return result;
6291
6973
  }
6292
6974
  fromJSON(data) {
6293
- var _a;
6975
+ var _a, _b;
6294
6976
  this.clear();
6295
6977
  if (typeof data !== 'object' || data === null) {
6296
6978
  throw new Error('serialized layout must be a non-null object');
@@ -6357,7 +7039,16 @@ class DockviewComponent extends BaseGrid {
6357
7039
  width: position.width,
6358
7040
  }, { skipRemoveGroup: true, inDragMode: false });
6359
7041
  }
6360
- for (const floatingGroup of this.floatingGroups) {
7042
+ const serializedPopoutGroups = (_b = data.popoutGroups) !== null && _b !== void 0 ? _b : [];
7043
+ for (const serializedPopoutGroup of serializedPopoutGroups) {
7044
+ const { data, position } = serializedPopoutGroup;
7045
+ const group = createGroupFromSerializedState(data);
7046
+ this.addPopoutGroup(group, {
7047
+ skipRemoveGroup: true,
7048
+ position: position !== null && position !== void 0 ? position : undefined,
7049
+ });
7050
+ }
7051
+ for (const floatingGroup of this._floatingGroups) {
6361
7052
  floatingGroup.overlay.setBounds();
6362
7053
  }
6363
7054
  if (typeof activeGroup === 'string') {
@@ -6389,7 +7080,7 @@ class DockviewComponent extends BaseGrid {
6389
7080
  this._onDidRemoveGroup.fire(group);
6390
7081
  }
6391
7082
  // iterate over a reassigned array since original array will be modified
6392
- for (const floatingGroup of [...this.floatingGroups]) {
7083
+ for (const floatingGroup of [...this._floatingGroups]) {
6393
7084
  floatingGroup.dispose();
6394
7085
  }
6395
7086
  // fires clean-up events and clears the underlying HTML gridview.
@@ -6481,7 +7172,8 @@ class DockviewComponent extends BaseGrid {
6481
7172
  group.model.openPanel(panel);
6482
7173
  this.doSetGroupAndPanelActive(group);
6483
7174
  }
6484
- else if (referenceGroup.api.isFloating || target === 'center') {
7175
+ else if (referenceGroup.api.location === 'floating' ||
7176
+ target === 'center') {
6485
7177
  panel = this.createPanel(options, referenceGroup);
6486
7178
  referenceGroup.model.openPanel(panel);
6487
7179
  }
@@ -6525,6 +7217,7 @@ class DockviewComponent extends BaseGrid {
6525
7217
  }
6526
7218
  group.model.removePanel(panel);
6527
7219
  if (!options.skipDispose) {
7220
+ this.overlayRenderContainer.detatch(panel);
6528
7221
  panel.dispose();
6529
7222
  }
6530
7223
  if (group.size === 0 && options.removeEmptyGroup) {
@@ -6541,7 +7234,7 @@ class DockviewComponent extends BaseGrid {
6541
7234
  }
6542
7235
  updateWatermark() {
6543
7236
  var _a, _b;
6544
- if (this.groups.filter((x) => !x.api.isFloating).length === 0) {
7237
+ if (this.groups.filter((x) => x.api.location === 'grid').length === 0) {
6545
7238
  if (!this.watermark) {
6546
7239
  this.watermark = this.createWatermarkComponent();
6547
7240
  this.watermark.init({
@@ -6616,19 +7309,40 @@ class DockviewComponent extends BaseGrid {
6616
7309
  }
6617
7310
  }
6618
7311
  doRemoveGroup(group, options) {
6619
- const floatingGroup = this.floatingGroups.find((_) => _.group === group);
6620
- if (floatingGroup) {
6621
- if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
6622
- floatingGroup.group.dispose();
6623
- this._groups.delete(group.id);
6624
- this._onDidRemoveGroup.fire(group);
7312
+ if (group.api.location === 'floating') {
7313
+ const floatingGroup = this._floatingGroups.find((_) => _.group === group);
7314
+ if (floatingGroup) {
7315
+ if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
7316
+ floatingGroup.group.dispose();
7317
+ this._groups.delete(group.id);
7318
+ this._onDidRemoveGroup.fire(group);
7319
+ }
7320
+ remove(this._floatingGroups, floatingGroup);
7321
+ floatingGroup.dispose();
7322
+ if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
7323
+ const groups = Array.from(this._groups.values());
7324
+ this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
7325
+ }
7326
+ return floatingGroup.group;
6625
7327
  }
6626
- floatingGroup.dispose();
6627
- if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
6628
- const groups = Array.from(this._groups.values());
6629
- this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
7328
+ throw new Error('failed to find floating group');
7329
+ }
7330
+ if (group.api.location === 'popout') {
7331
+ const selectedGroup = this._popoutGroups.find((_) => _.group === group);
7332
+ if (selectedGroup) {
7333
+ if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
7334
+ selectedGroup.group.dispose();
7335
+ this._groups.delete(group.id);
7336
+ this._onDidRemoveGroup.fire(group);
7337
+ }
7338
+ selectedGroup.dispose();
7339
+ if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
7340
+ const groups = Array.from(this._groups.values());
7341
+ this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
7342
+ }
7343
+ return selectedGroup.group;
6630
7344
  }
6631
- return floatingGroup.group;
7345
+ throw new Error('failed to find popout group');
6632
7346
  }
6633
7347
  return super.doRemoveGroup(group, options);
6634
7348
  }
@@ -6660,8 +7374,7 @@ class DockviewComponent extends BaseGrid {
6660
7374
  const targetLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, destinationTarget);
6661
7375
  if (sourceGroup && sourceGroup.size < 2) {
6662
7376
  const [targetParentLocation, to] = tail(targetLocation);
6663
- const isFloating = this.floatingGroups.find((x) => x.group === sourceGroup);
6664
- if (!isFloating) {
7377
+ if (sourceGroup.api.location === 'grid') {
6665
7378
  const sourceLocation = getGridLocation(sourceGroup.element);
6666
7379
  const [sourceParentLocation, from] = tail(sourceLocation);
6667
7380
  if (sequenceEquals(sourceParentLocation, targetParentLocation)) {
@@ -6707,12 +7420,25 @@ class DockviewComponent extends BaseGrid {
6707
7420
  }
6708
7421
  }
6709
7422
  else {
6710
- const floatingGroup = this.floatingGroups.find((x) => x.group === sourceGroup);
6711
- if (floatingGroup) {
6712
- floatingGroup.dispose();
6713
- }
6714
- else {
6715
- this.gridview.removeView(getGridLocation(sourceGroup.element));
7423
+ switch (sourceGroup.api.location) {
7424
+ case 'grid':
7425
+ this.gridview.removeView(getGridLocation(sourceGroup.element));
7426
+ break;
7427
+ case 'floating': {
7428
+ const selectedFloatingGroup = this._floatingGroups.find((x) => x.group === sourceGroup);
7429
+ if (!selectedFloatingGroup) {
7430
+ throw new Error('failed to find floating group');
7431
+ }
7432
+ selectedFloatingGroup.dispose();
7433
+ break;
7434
+ }
7435
+ case 'popout': {
7436
+ const selectedPopoutGroup = this._popoutGroups.find((x) => x.group === sourceGroup);
7437
+ if (!selectedPopoutGroup) {
7438
+ throw new Error('failed to find popout group');
7439
+ }
7440
+ selectedPopoutGroup.dispose();
7441
+ }
6716
7442
  }
6717
7443
  const referenceLocation = getGridLocation(referenceGroup.element);
6718
7444
  const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
@@ -6774,7 +7500,7 @@ class DockviewComponent extends BaseGrid {
6774
7500
  const contentComponent = options.component;
6775
7501
  const tabComponent = (_a = options.tabComponent) !== null && _a !== void 0 ? _a : this.options.defaultTabComponent;
6776
7502
  const view = new DockviewPanelModel(this, options.id, contentComponent, tabComponent);
6777
- const panel = new DockviewPanel(options.id, this, this._api, group, view);
7503
+ const panel = new DockviewPanel(options.id, this, this._api, group, view, { renderer: options.renderer });
6778
7504
  panel.init({
6779
7505
  title: (_b = options.title) !== null && _b !== void 0 ? _b : options.id,
6780
7506
  params: (_c = options === null || options === void 0 ? void 0 : options.params) !== null && _c !== void 0 ? _c : {},