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