dockview-core 1.8.5 → 1.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/README.md +18 -11
  2. package/dist/cjs/api/component.api.d.ts +12 -0
  3. package/dist/cjs/api/component.api.d.ts.map +1 -1
  4. package/dist/cjs/api/component.api.js +22 -0
  5. package/dist/cjs/api/component.api.js.map +1 -1
  6. package/dist/cjs/api/dockviewGroupPanelApi.d.ts +15 -8
  7. package/dist/cjs/api/dockviewGroupPanelApi.d.ts.map +1 -1
  8. package/dist/cjs/api/dockviewGroupPanelApi.js +39 -9
  9. package/dist/cjs/api/dockviewGroupPanelApi.js.map +1 -1
  10. package/dist/cjs/api/dockviewPanelApi.d.ts +19 -2
  11. package/dist/cjs/api/dockviewPanelApi.d.ts.map +1 -1
  12. package/dist/cjs/api/dockviewPanelApi.js +23 -3
  13. package/dist/cjs/api/dockviewPanelApi.js.map +1 -1
  14. package/dist/cjs/api/gridviewPanelApi.js.map +1 -1
  15. package/dist/cjs/api/panelApi.js.map +1 -1
  16. package/dist/cjs/api/paneviewPanelApi.js.map +1 -1
  17. package/dist/cjs/api/splitviewPanelApi.js.map +1 -1
  18. package/dist/cjs/array.js.map +1 -1
  19. package/dist/cjs/constants.d.ts +6 -0
  20. package/dist/cjs/constants.d.ts.map +1 -0
  21. package/dist/cjs/constants.js +6 -0
  22. package/dist/cjs/constants.js.map +1 -0
  23. package/dist/cjs/dnd/abstractDragHandler.js.map +1 -1
  24. package/dist/cjs/dnd/dataTransfer.js.map +1 -1
  25. package/dist/cjs/dnd/dnd.d.ts +5 -0
  26. package/dist/cjs/dnd/dnd.d.ts.map +1 -1
  27. package/dist/cjs/dnd/dnd.js +28 -13
  28. package/dist/cjs/dnd/dnd.js.map +1 -1
  29. package/dist/cjs/dnd/droptarget.d.ts +13 -12
  30. package/dist/cjs/dnd/droptarget.d.ts.map +1 -1
  31. package/dist/cjs/dnd/droptarget.js +40 -49
  32. package/dist/cjs/dnd/droptarget.js.map +1 -1
  33. package/dist/cjs/dnd/groupDragHandler.js +1 -1
  34. package/dist/cjs/dnd/groupDragHandler.js.map +1 -1
  35. package/dist/cjs/dnd/overlay.d.ts +4 -17
  36. package/dist/cjs/dnd/overlay.d.ts.map +1 -1
  37. package/dist/cjs/dnd/overlay.js.map +1 -1
  38. package/dist/cjs/dockview/components/panel/content.d.ts +14 -1
  39. package/dist/cjs/dockview/components/panel/content.d.ts.map +1 -1
  40. package/dist/cjs/dockview/components/panel/content.js +85 -26
  41. package/dist/cjs/dockview/components/panel/content.js.map +1 -1
  42. package/dist/cjs/dockview/components/tab/defaultTab.js.map +1 -1
  43. package/dist/cjs/dockview/components/tab/tab.js.map +1 -1
  44. package/dist/cjs/dockview/components/titlebar/tabsContainer.js +2 -2
  45. package/dist/cjs/dockview/components/titlebar/tabsContainer.js.map +1 -1
  46. package/dist/cjs/dockview/components/titlebar/voidContainer.js.map +1 -1
  47. package/dist/cjs/dockview/components/watermark/watermark.js.map +1 -1
  48. package/dist/cjs/dockview/deserializer.d.ts +2 -2
  49. package/dist/cjs/dockview/deserializer.d.ts.map +1 -1
  50. package/dist/cjs/dockview/deserializer.js +6 -4
  51. package/dist/cjs/dockview/deserializer.js.map +1 -1
  52. package/dist/cjs/dockview/dockviewComponent.d.ts +23 -10
  53. package/dist/cjs/dockview/dockviewComponent.d.ts.map +1 -1
  54. package/dist/cjs/dockview/dockviewComponent.js +305 -115
  55. package/dist/cjs/dockview/dockviewComponent.js.map +1 -1
  56. package/dist/cjs/dockview/dockviewFloatingGroupPanel.js.map +1 -1
  57. package/dist/cjs/dockview/dockviewGroupPanel.d.ts.map +1 -1
  58. package/dist/cjs/dockview/dockviewGroupPanel.js +4 -2
  59. package/dist/cjs/dockview/dockviewGroupPanel.js.map +1 -1
  60. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +5 -4
  61. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts.map +1 -1
  62. package/dist/cjs/dockview/dockviewGroupPanelModel.js +37 -43
  63. package/dist/cjs/dockview/dockviewGroupPanelModel.js.map +1 -1
  64. package/dist/cjs/dockview/dockviewPanel.d.ts +8 -1
  65. package/dist/cjs/dockview/dockviewPanel.d.ts.map +1 -1
  66. package/dist/cjs/dockview/dockviewPanel.js +23 -1
  67. package/dist/cjs/dockview/dockviewPanel.js.map +1 -1
  68. package/dist/cjs/dockview/dockviewPanelModel.js.map +1 -1
  69. package/dist/cjs/dockview/dockviewPopoutGroupPanel.d.ts +16 -0
  70. package/dist/cjs/dockview/dockviewPopoutGroupPanel.d.ts.map +1 -0
  71. package/dist/cjs/dockview/dockviewPopoutGroupPanel.js +50 -0
  72. package/dist/cjs/dockview/dockviewPopoutGroupPanel.js.map +1 -0
  73. package/dist/cjs/dockview/options.d.ts +7 -1
  74. package/dist/cjs/dockview/options.d.ts.map +1 -1
  75. package/dist/cjs/dockview/options.js.map +1 -1
  76. package/dist/cjs/dockview/types.d.ts +2 -0
  77. package/dist/cjs/dockview/types.d.ts.map +1 -1
  78. package/dist/cjs/dockview/types.js.map +1 -1
  79. package/dist/cjs/dom.d.ts +12 -0
  80. package/dist/cjs/dom.d.ts.map +1 -1
  81. package/dist/cjs/dom.js +80 -1
  82. package/dist/cjs/dom.js.map +1 -1
  83. package/dist/cjs/events.js.map +1 -1
  84. package/dist/cjs/gridview/baseComponentGridview.d.ts +10 -0
  85. package/dist/cjs/gridview/baseComponentGridview.d.ts.map +1 -1
  86. package/dist/cjs/gridview/baseComponentGridview.js +19 -0
  87. package/dist/cjs/gridview/baseComponentGridview.js.map +1 -1
  88. package/dist/cjs/gridview/basePanelView.js.map +1 -1
  89. package/dist/cjs/gridview/branchNode.d.ts +2 -0
  90. package/dist/cjs/gridview/branchNode.d.ts.map +1 -1
  91. package/dist/cjs/gridview/branchNode.js +37 -10
  92. package/dist/cjs/gridview/branchNode.js.map +1 -1
  93. package/dist/cjs/gridview/gridview.d.ts +10 -3
  94. package/dist/cjs/gridview/gridview.d.ts.map +1 -1
  95. package/dist/cjs/gridview/gridview.js +80 -0
  96. package/dist/cjs/gridview/gridview.js.map +1 -1
  97. package/dist/cjs/gridview/gridviewComponent.js.map +1 -1
  98. package/dist/cjs/gridview/gridviewPanel.js.map +1 -1
  99. package/dist/cjs/gridview/leafNode.d.ts.map +1 -1
  100. package/dist/cjs/gridview/leafNode.js +1 -2
  101. package/dist/cjs/gridview/leafNode.js.map +1 -1
  102. package/dist/cjs/index.d.ts +3 -2
  103. package/dist/cjs/index.d.ts.map +1 -1
  104. package/dist/cjs/index.js.map +1 -1
  105. package/dist/cjs/lifecycle.d.ts +1 -0
  106. package/dist/cjs/lifecycle.d.ts.map +1 -1
  107. package/dist/cjs/lifecycle.js +8 -0
  108. package/dist/cjs/lifecycle.js.map +1 -1
  109. package/dist/cjs/math.js.map +1 -1
  110. package/dist/cjs/overlayRenderContainer.d.ts +19 -0
  111. package/dist/cjs/overlayRenderContainer.d.ts.map +1 -0
  112. package/dist/cjs/overlayRenderContainer.js +170 -0
  113. package/dist/cjs/overlayRenderContainer.js.map +1 -0
  114. package/dist/cjs/panel/componentFactory.js.map +1 -1
  115. package/dist/cjs/paneview/defaultPaneviewHeader.js.map +1 -1
  116. package/dist/cjs/paneview/draggablePaneviewPanel.js.map +1 -1
  117. package/dist/cjs/paneview/paneview.js.map +1 -1
  118. package/dist/cjs/paneview/paneviewComponent.js.map +1 -1
  119. package/dist/cjs/paneview/paneviewPanel.js.map +1 -1
  120. package/dist/cjs/popoutWindow.d.ts +18 -0
  121. package/dist/cjs/popoutWindow.d.ts.map +1 -0
  122. package/dist/cjs/popoutWindow.js +130 -0
  123. package/dist/cjs/popoutWindow.js.map +1 -0
  124. package/dist/cjs/resizable.d.ts.map +1 -1
  125. package/dist/cjs/resizable.js +16 -1
  126. package/dist/cjs/resizable.js.map +1 -1
  127. package/dist/cjs/splitview/splitview.d.ts +5 -4
  128. package/dist/cjs/splitview/splitview.d.ts.map +1 -1
  129. package/dist/cjs/splitview/splitview.js +31 -8
  130. package/dist/cjs/splitview/splitview.js.map +1 -1
  131. package/dist/cjs/splitview/splitviewComponent.js.map +1 -1
  132. package/dist/cjs/splitview/splitviewPanel.js.map +1 -1
  133. package/dist/cjs/splitview/viewItem.js.map +1 -1
  134. package/dist/cjs/types.d.ts +6 -0
  135. package/dist/cjs/types.d.ts.map +1 -1
  136. package/dist/dockview-core.amd.js +966 -229
  137. package/dist/dockview-core.amd.js.map +1 -1
  138. package/dist/dockview-core.amd.min.js +2 -2
  139. package/dist/dockview-core.amd.min.js.map +1 -1
  140. package/dist/dockview-core.amd.min.noStyle.js +2 -2
  141. package/dist/dockview-core.amd.min.noStyle.js.map +1 -1
  142. package/dist/dockview-core.amd.noStyle.js +965 -228
  143. package/dist/dockview-core.amd.noStyle.js.map +1 -1
  144. package/dist/dockview-core.cjs.js +966 -229
  145. package/dist/dockview-core.cjs.js.map +1 -1
  146. package/dist/dockview-core.esm.js +966 -229
  147. package/dist/dockview-core.esm.js.map +1 -1
  148. package/dist/dockview-core.esm.min.js +2 -2
  149. package/dist/dockview-core.esm.min.js.map +1 -1
  150. package/dist/dockview-core.js +966 -229
  151. package/dist/dockview-core.js.map +1 -1
  152. package/dist/dockview-core.min.js +2 -2
  153. package/dist/dockview-core.min.js.map +1 -1
  154. package/dist/dockview-core.min.noStyle.js +2 -2
  155. package/dist/dockview-core.min.noStyle.js.map +1 -1
  156. package/dist/dockview-core.noStyle.js +965 -228
  157. package/dist/dockview-core.noStyle.js.map +1 -1
  158. package/dist/esm/api/component.api.d.ts +12 -0
  159. package/dist/esm/api/component.api.d.ts.map +1 -1
  160. package/dist/esm/api/component.api.js +18 -0
  161. package/dist/esm/api/component.api.js.map +1 -1
  162. package/dist/esm/api/dockviewGroupPanelApi.d.ts +15 -8
  163. package/dist/esm/api/dockviewGroupPanelApi.d.ts.map +1 -1
  164. package/dist/esm/api/dockviewGroupPanelApi.js +39 -9
  165. package/dist/esm/api/dockviewGroupPanelApi.js.map +1 -1
  166. package/dist/esm/api/dockviewPanelApi.d.ts +19 -2
  167. package/dist/esm/api/dockviewPanelApi.d.ts.map +1 -1
  168. package/dist/esm/api/dockviewPanelApi.js +19 -3
  169. package/dist/esm/api/dockviewPanelApi.js.map +1 -1
  170. package/dist/esm/api/gridviewPanelApi.js.map +1 -1
  171. package/dist/esm/array.js.map +1 -1
  172. package/dist/esm/constants.d.ts +6 -0
  173. package/dist/esm/constants.d.ts.map +1 -0
  174. package/dist/esm/constants.js +3 -0
  175. package/dist/esm/constants.js.map +1 -0
  176. package/dist/esm/dnd/abstractDragHandler.js.map +1 -1
  177. package/dist/esm/dnd/dataTransfer.js.map +1 -1
  178. package/dist/esm/dnd/dnd.d.ts +5 -0
  179. package/dist/esm/dnd/dnd.d.ts.map +1 -1
  180. package/dist/esm/dnd/dnd.js +28 -13
  181. package/dist/esm/dnd/dnd.js.map +1 -1
  182. package/dist/esm/dnd/droptarget.d.ts +13 -12
  183. package/dist/esm/dnd/droptarget.d.ts.map +1 -1
  184. package/dist/esm/dnd/droptarget.js +40 -49
  185. package/dist/esm/dnd/droptarget.js.map +1 -1
  186. package/dist/esm/dnd/groupDragHandler.js +1 -1
  187. package/dist/esm/dnd/groupDragHandler.js.map +1 -1
  188. package/dist/esm/dnd/overlay.d.ts +4 -17
  189. package/dist/esm/dnd/overlay.d.ts.map +1 -1
  190. package/dist/esm/dnd/overlay.js.map +1 -1
  191. package/dist/esm/dockview/components/panel/content.d.ts +14 -1
  192. package/dist/esm/dockview/components/panel/content.d.ts.map +1 -1
  193. package/dist/esm/dockview/components/panel/content.js +84 -26
  194. package/dist/esm/dockview/components/panel/content.js.map +1 -1
  195. package/dist/esm/dockview/components/tab/defaultTab.js.map +1 -1
  196. package/dist/esm/dockview/components/tab/tab.js.map +1 -1
  197. package/dist/esm/dockview/components/titlebar/tabsContainer.js +2 -2
  198. package/dist/esm/dockview/components/titlebar/tabsContainer.js.map +1 -1
  199. package/dist/esm/dockview/components/titlebar/voidContainer.js.map +1 -1
  200. package/dist/esm/dockview/components/watermark/watermark.js.map +1 -1
  201. package/dist/esm/dockview/deserializer.d.ts +2 -2
  202. package/dist/esm/dockview/deserializer.d.ts.map +1 -1
  203. package/dist/esm/dockview/deserializer.js +6 -4
  204. package/dist/esm/dockview/deserializer.js.map +1 -1
  205. package/dist/esm/dockview/dockviewComponent.d.ts +23 -10
  206. package/dist/esm/dockview/dockviewComponent.d.ts.map +1 -1
  207. package/dist/esm/dockview/dockviewComponent.js +207 -55
  208. package/dist/esm/dockview/dockviewComponent.js.map +1 -1
  209. package/dist/esm/dockview/dockviewGroupPanel.d.ts.map +1 -1
  210. package/dist/esm/dockview/dockviewGroupPanel.js +4 -2
  211. package/dist/esm/dockview/dockviewGroupPanel.js.map +1 -1
  212. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +5 -4
  213. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts.map +1 -1
  214. package/dist/esm/dockview/dockviewGroupPanelModel.js +39 -45
  215. package/dist/esm/dockview/dockviewGroupPanelModel.js.map +1 -1
  216. package/dist/esm/dockview/dockviewPanel.d.ts +8 -1
  217. package/dist/esm/dockview/dockviewPanel.d.ts.map +1 -1
  218. package/dist/esm/dockview/dockviewPanel.js +19 -1
  219. package/dist/esm/dockview/dockviewPanel.js.map +1 -1
  220. package/dist/esm/dockview/dockviewPanelModel.js.map +1 -1
  221. package/dist/esm/dockview/dockviewPopoutGroupPanel.d.ts +16 -0
  222. package/dist/esm/dockview/dockviewPopoutGroupPanel.d.ts.map +1 -0
  223. package/dist/esm/dockview/dockviewPopoutGroupPanel.js +28 -0
  224. package/dist/esm/dockview/dockviewPopoutGroupPanel.js.map +1 -0
  225. package/dist/esm/dockview/options.d.ts +7 -1
  226. package/dist/esm/dockview/options.d.ts.map +1 -1
  227. package/dist/esm/dockview/options.js.map +1 -1
  228. package/dist/esm/dockview/types.d.ts +2 -0
  229. package/dist/esm/dockview/types.d.ts.map +1 -1
  230. package/dist/esm/dockview/types.js.map +1 -1
  231. package/dist/esm/dom.d.ts +12 -0
  232. package/dist/esm/dom.d.ts.map +1 -1
  233. package/dist/esm/dom.js +55 -0
  234. package/dist/esm/dom.js.map +1 -1
  235. package/dist/esm/events.js.map +1 -1
  236. package/dist/esm/gridview/baseComponentGridview.d.ts +10 -0
  237. package/dist/esm/gridview/baseComponentGridview.d.ts.map +1 -1
  238. package/dist/esm/gridview/baseComponentGridview.js +15 -0
  239. package/dist/esm/gridview/baseComponentGridview.js.map +1 -1
  240. package/dist/esm/gridview/basePanelView.js.map +1 -1
  241. package/dist/esm/gridview/branchNode.d.ts +2 -0
  242. package/dist/esm/gridview/branchNode.d.ts.map +1 -1
  243. package/dist/esm/gridview/branchNode.js +26 -5
  244. package/dist/esm/gridview/branchNode.js.map +1 -1
  245. package/dist/esm/gridview/gridview.d.ts +10 -3
  246. package/dist/esm/gridview/gridview.d.ts.map +1 -1
  247. package/dist/esm/gridview/gridview.js +80 -0
  248. package/dist/esm/gridview/gridview.js.map +1 -1
  249. package/dist/esm/gridview/gridviewComponent.js.map +1 -1
  250. package/dist/esm/gridview/gridviewPanel.js.map +1 -1
  251. package/dist/esm/gridview/leafNode.d.ts.map +1 -1
  252. package/dist/esm/gridview/leafNode.js +0 -1
  253. package/dist/esm/gridview/leafNode.js.map +1 -1
  254. package/dist/esm/index.d.ts +3 -2
  255. package/dist/esm/index.d.ts.map +1 -1
  256. package/dist/esm/index.js.map +1 -1
  257. package/dist/esm/lifecycle.d.ts +1 -0
  258. package/dist/esm/lifecycle.d.ts.map +1 -1
  259. package/dist/esm/lifecycle.js +8 -0
  260. package/dist/esm/lifecycle.js.map +1 -1
  261. package/dist/esm/math.js.map +1 -1
  262. package/dist/esm/overlayRenderContainer.d.ts +19 -0
  263. package/dist/esm/overlayRenderContainer.d.ts.map +1 -0
  264. package/dist/esm/overlayRenderContainer.js +125 -0
  265. package/dist/esm/overlayRenderContainer.js.map +1 -0
  266. package/dist/esm/panel/componentFactory.js.map +1 -1
  267. package/dist/esm/paneview/defaultPaneviewHeader.js.map +1 -1
  268. package/dist/esm/paneview/draggablePaneviewPanel.js.map +1 -1
  269. package/dist/esm/paneview/paneview.js.map +1 -1
  270. package/dist/esm/paneview/paneviewComponent.js.map +1 -1
  271. package/dist/esm/paneview/paneviewPanel.js.map +1 -1
  272. package/dist/esm/popoutWindow.d.ts +18 -0
  273. package/dist/esm/popoutWindow.d.ts.map +1 -0
  274. package/dist/esm/popoutWindow.js +88 -0
  275. package/dist/esm/popoutWindow.js.map +1 -0
  276. package/dist/esm/resizable.d.ts.map +1 -1
  277. package/dist/esm/resizable.js +17 -2
  278. package/dist/esm/resizable.js.map +1 -1
  279. package/dist/esm/splitview/splitview.d.ts +5 -4
  280. package/dist/esm/splitview/splitview.d.ts.map +1 -1
  281. package/dist/esm/splitview/splitview.js +25 -8
  282. package/dist/esm/splitview/splitview.js.map +1 -1
  283. package/dist/esm/splitview/splitviewComponent.js.map +1 -1
  284. package/dist/esm/splitview/splitviewPanel.js.map +1 -1
  285. package/dist/esm/splitview/viewItem.js.map +1 -1
  286. package/dist/esm/types.d.ts +6 -0
  287. package/dist/esm/types.d.ts.map +1 -1
  288. package/dist/styles/dockview.css +38 -7
  289. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * dockview-core
3
- * @version 1.8.5
3
+ * @version 1.9.1
4
4
  * @link https://github.com/mathuo/dockview
5
5
  * @license MIT
6
6
  */
@@ -37,7 +37,7 @@
37
37
  }
38
38
  }
39
39
 
40
- var css_248z = ".dockview-svg {\n display: inline-block;\n fill: currentcolor;\n line-height: 1;\n stroke: currentcolor;\n stroke-width: 0;\n}\n.dockview-theme-dark {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n}\n\n.dockview-theme-light {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: white;\n --dv-tabs-and-actions-container-background-color: #f3f3f3;\n --dv-activegroup-visiblepanel-tab-background-color: white;\n --dv-activegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-inactivegroup-visiblepanel-tab-background-color: white;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-tab-divider-color: white;\n --dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-activegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.35);\n --dv-separator-border: rgba(128, 128, 128, 0.35);\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n}\n\n.dockview-theme-vs {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n --dv-tabs-and-actions-container-background-color: #2d2d30;\n --dv-tabs-and-actions-container-height: 20px;\n --dv-tabs-and-actions-container-font-size: 11px;\n --dv-activegroup-visiblepanel-tab-background-color: #007acc;\n --dv-inactivegroup-visiblepanel-tab-background-color: #3f3f46;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: white;\n --dv-inactivegroup-visiblepanel-tab-color: white;\n --dv-inactivegroup-hiddenpanel-tab-color: white;\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-activegroup-hiddenpanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n}\n\n.dockview-theme-abyss {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #000c18;\n --dv-tabs-and-actions-container-background-color: #1c1c2a;\n --dv-activegroup-visiblepanel-tab-background-color: #000c18;\n --dv-activegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #000c18;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-tab-divider-color: #2b2b4a;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.25);\n --dv-separator-border: #2b2b4a;\n --dv-paneview-header-border-color: #2b2b4a;\n --dv-paneview-active-outline-color: #596f99;\n}\n\n.dockview-theme-dracula {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #282a36;\n --dv-tabs-and-actions-container-background-color: #191a21;\n --dv-activegroup-visiblepanel-tab-background-color: #282a36;\n --dv-activegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #282a36;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-tab-divider-color: #191a21;\n --dv-activegroup-visiblepanel-tab-color: rgb(248, 248, 242);\n --dv-activegroup-hiddenpanel-tab-color: rgb(98, 114, 164);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(248, 248, 242, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(98, 114, 164, 0.5);\n --dv-separator-border: #bd93f9;\n --dv-paneview-header-border-color: #bd93f9;\n --dv-paneview-active-outline-color: #6272a4;\n}\n.dockview-theme-dracula .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab::after {\n position: absolute;\n left: 0px;\n top: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #94527e;\n z-index: 999;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #5e3d5a;\n z-index: 999;\n}\n\n.dockview-theme-replit {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #ebeced;\n --dv-tabs-and-actions-container-background-color: #fcfcfc;\n --dv-activegroup-visiblepanel-tab-background-color: #f0f1f2;\n --dv-activegroup-hiddenpanel-tab-background-color: ##fcfcfc;\n --dv-inactivegroup-visiblepanel-tab-background-color: #f0f1f2;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #fcfcfc;\n --dv-tab-divider-color: transparent;\n --dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-activegroup-hiddenpanel-tab-color: rgb(51, 51, 51);\n --dv-inactivegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-inactivegroup-hiddenpanel-tab-color: rgb(51, 51, 51);\n --dv-separator-border: transparent;\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n --dv-background-color: #ebeced;\n --dv-separator-handle-background-color: #cfd1d3;\n --dv-separator-handle-hover-background-color: #babbbb;\n}\n.dockview-theme-replit.dv-dockview {\n padding: 3px;\n}\n.dockview-theme-replit .view:has(> .groupview) {\n padding: 3px;\n}\n.dockview-theme-replit .dv-resize-container:has(> .groupview) {\n border-radius: 8px;\n}\n.dockview-theme-replit .groupview {\n overflow: hidden;\n border-radius: 10px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container {\n border-bottom: 1px solid rgba(128, 128, 128, 0.35);\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab {\n margin: 4px;\n border-radius: 8px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab .dockview-svg {\n height: 8px;\n width: 8px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab:hover {\n background-color: #e4e5e6 !important;\n}\n.dockview-theme-replit .groupview .content-container {\n background-color: #fcfcfc;\n}\n.dockview-theme-replit .groupview.active-group {\n border: 1px solid rgba(128, 128, 128, 0.35);\n}\n.dockview-theme-replit .groupview.inactive-group {\n border: 1px solid transparent;\n}\n.dockview-theme-replit .vertical > .sash-container > .sash::after {\n content: \"\";\n height: 4px;\n width: 40px;\n border-radius: 2px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--dv-separator-handle-background-color);\n position: absolute;\n}\n.dockview-theme-replit .vertical > .sash-container > .sash:hover::after {\n background-color: var(--dv-separator-handle-hover-background-color);\n}\n.dockview-theme-replit .horizontal > .sash-container > .sash::after {\n content: \"\";\n height: 40px;\n width: 4px;\n border-radius: 2px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--dv-separator-handle-background-color);\n position: absolute;\n}\n.dockview-theme-replit .horizontal > .sash-container > .sash:hover::after {\n background-color: var(--dv-separator-handle-hover-background-color);\n}\n.drop-target {\n position: relative;\n}\n.drop-target > .drop-target-dropzone {\n position: absolute;\n left: 0px;\n top: 0px;\n height: 100%;\n width: 100%;\n z-index: 1000;\n pointer-events: none;\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection {\n position: relative;\n box-sizing: border-box;\n height: 100%;\n width: 100%;\n background-color: var(--dv-drag-over-background-color);\n transition: top 70ms ease-out, left 70ms ease-out, width 70ms ease-out, height 70ms ease-out, opacity 0.15s ease-out;\n will-change: transform;\n pointer-events: none;\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-top {\n border-top: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-bottom {\n border-bottom: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-left {\n border-left: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-right {\n border-right: 1px solid var(--dv-drag-over-border-color);\n}\n.dv-debug .dv-resize-container .dv-resize-handle-top {\n background-color: red;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-bottom {\n background-color: green;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-left {\n background-color: yellow;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-right {\n background-color: blue;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-topleft,\n.dv-debug .dv-resize-container .dv-resize-handle-topright,\n.dv-debug .dv-resize-container .dv-resize-handle-bottomleft,\n.dv-debug .dv-resize-container .dv-resize-handle-bottomright {\n background-color: cyan;\n}\n\n.dv-resize-container {\n position: absolute;\n z-index: 997;\n border: 1px solid var(--dv-tab-divider-color);\n box-shadow: var(--dv-floating-box-shadow);\n}\n.dv-resize-container.dv-bring-to-front {\n z-index: 998;\n}\n.dv-resize-container.dv-resize-container-dragging {\n opacity: 0.5;\n}\n.dv-resize-container .dv-resize-handle-top {\n height: 4px;\n width: calc(100% - 8px);\n left: 4px;\n top: -2px;\n z-index: 999;\n position: absolute;\n cursor: ns-resize;\n}\n.dv-resize-container .dv-resize-handle-bottom {\n height: 4px;\n width: calc(100% - 8px);\n left: 4px;\n bottom: -2px;\n z-index: 999;\n position: absolute;\n cursor: ns-resize;\n}\n.dv-resize-container .dv-resize-handle-left {\n height: calc(100% - 8px);\n width: 4px;\n left: -2px;\n top: 4px;\n z-index: 999;\n position: absolute;\n cursor: ew-resize;\n}\n.dv-resize-container .dv-resize-handle-right {\n height: calc(100% - 8px);\n width: 4px;\n right: -2px;\n top: 4px;\n z-index: 999;\n position: absolute;\n cursor: ew-resize;\n}\n.dv-resize-container .dv-resize-handle-topleft {\n height: 4px;\n width: 4px;\n top: -2px;\n left: -2px;\n z-index: 999;\n position: absolute;\n cursor: nw-resize;\n}\n.dv-resize-container .dv-resize-handle-topright {\n height: 4px;\n width: 4px;\n right: -2px;\n top: -2px;\n z-index: 999;\n position: absolute;\n cursor: ne-resize;\n}\n.dv-resize-container .dv-resize-handle-bottomleft {\n height: 4px;\n width: 4px;\n left: -2px;\n bottom: -2px;\n z-index: 999;\n position: absolute;\n cursor: sw-resize;\n}\n.dv-resize-container .dv-resize-handle-bottomright {\n height: 4px;\n width: 4px;\n right: -2px;\n bottom: -2px;\n z-index: 999;\n position: absolute;\n cursor: se-resize;\n}\n.dv-dockview {\n position: relative;\n background-color: var(--dv-group-view-background-color);\n}\n.dv-dockview .dv-watermark-container {\n position: absolute;\n top: 0px;\n left: 0px;\n height: 100%;\n width: 100%;\n z-index: 1;\n}\n\n.groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.inactive-tab {\n background-color: var(--dv-activegroup-hiddenpanel-tab-background-color);\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n background-color: var(--dv-inactivegroup-visiblepanel-tab-background-color);\n color: var(--dv-inactivegroup-visiblepanel-tab-color);\n}\n.groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.inactive-tab {\n background-color: var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n color: var(--dv-inactivegroup-hiddenpanel-tab-color);\n}\n\n/**\n * when a tab is dragged we lose the above stylings because they are conditional on parent elements\n * therefore we also set some stylings for the dragging event\n **/\n.tab.dv-tab-dragging {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.groupview {\n display: flex;\n flex-direction: column;\n height: 100%;\n background-color: var(--dv-group-view-background-color);\n overflow: hidden;\n}\n.groupview:focus {\n outline: none;\n}\n.groupview.empty > .tabs-and-actions-container {\n display: none;\n}\n.groupview > .content-container {\n flex-grow: 1;\n overflow: hidden;\n outline: none;\n}\n.grid-view,\n.branch-node {\n height: 100%;\n width: 100%;\n}\n.pane-container {\n height: 100%;\n width: 100%;\n}\n.pane-container.animated .view {\n transition-duration: 0.15s;\n transition-timing-function: ease-out;\n}\n.pane-container .view {\n overflow: hidden;\n display: flex;\n flex-direction: column;\n padding: 0px !important;\n}\n.pane-container .view:not(:first-child)::before {\n background-color: transparent !important;\n}\n.pane-container .view:not(:first-child) .pane > .pane-header {\n border-top: 1px solid var(--dv-paneview-header-border-color);\n}\n.pane-container .view .default-header {\n background-color: var(--dv-group-view-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n display: flex;\n padding: 0px 8px;\n cursor: pointer;\n}\n.pane-container .view .default-header .dockview-pane-header-icon {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.pane-container .view .default-header > span {\n padding-left: 8px;\n flex-grow: 1;\n}\n.pane-container:first-of-type > .pane > .pane-header {\n border-top: none !important;\n}\n.pane-container .pane {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n height: 100%;\n}\n.pane-container .pane .pane-header {\n box-sizing: border-box;\n user-select: none;\n position: relative;\n outline: none;\n}\n.pane-container .pane .pane-header.pane-draggable {\n cursor: pointer;\n}\n.pane-container .pane .pane-header:focus:before, .pane-container .pane .pane-header:focus-within:before {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 5;\n content: \"\";\n pointer-events: none;\n outline: 1px solid;\n outline-width: -1px;\n outline-style: solid;\n outline-offset: -1px;\n outline-color: var(--dv-paneview-active-outline-color);\n}\n.pane-container .pane .pane-body {\n overflow-y: auto;\n overflow-x: hidden;\n flex-grow: 1;\n position: relative;\n outline: none;\n}\n.pane-container .pane .pane-body:focus:before, .pane-container .pane .pane-body:focus-within:before {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 5;\n content: \"\";\n pointer-events: none;\n outline: 1px solid;\n outline-width: -1px;\n outline-style: solid;\n outline-offset: -1px;\n outline-color: var(--dv-paneview-active-outline-color);\n}\n.dv-debug .split-view-container .sash-container .sash.enabled {\n background-color: black;\n}\n.dv-debug .split-view-container .sash-container .sash.disabled {\n background-color: orange;\n}\n.dv-debug .split-view-container .sash-container .sash.maximum {\n background-color: green;\n}\n.dv-debug .split-view-container .sash-container .sash.minimum {\n background-color: red;\n}\n\n.split-view-container {\n position: relative;\n overflow: hidden;\n height: 100%;\n width: 100%;\n}\n.split-view-container.animation .view,\n.split-view-container.animation .sash {\n transition-duration: 0.15s;\n transition-timing-function: ease-out;\n}\n.split-view-container.horizontal {\n height: 100%;\n}\n.split-view-container.horizontal > .sash-container > .sash {\n height: 100%;\n width: 4px;\n}\n.split-view-container.horizontal > .sash-container > .sash.enabled {\n cursor: ew-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.horizontal > .sash-container > .sash.maximum {\n cursor: w-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.minimum {\n cursor: e-resize;\n}\n.split-view-container.horizontal > .view-container > .view:not(:first-child)::before {\n height: 100%;\n width: 1px;\n}\n.split-view-container.vertical {\n width: 100%;\n}\n.split-view-container.vertical > .sash-container > .sash {\n width: 100%;\n height: 4px;\n}\n.split-view-container.vertical > .sash-container > .sash.enabled {\n cursor: ns-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.vertical > .sash-container > .sash.maximum {\n cursor: n-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.minimum {\n cursor: s-resize;\n}\n.split-view-container.vertical > .view-container > .view {\n width: 100%;\n}\n.split-view-container.vertical > .view-container > .view:not(:first-child)::before {\n height: 1px;\n width: 100%;\n}\n.split-view-container .sash-container {\n height: 100%;\n width: 100%;\n position: absolute;\n}\n.split-view-container .sash-container .sash {\n position: absolute;\n z-index: 99;\n outline: none;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n touch-action: none;\n}\n.split-view-container .sash-container .sash:active {\n transition: background-color 0.1s ease-in-out;\n background-color: var(--dv-active-sash-color, transparent);\n}\n.split-view-container .sash-container .sash:hover {\n background-color: var(--dv-active-sash-color, transparent);\n transition: background-color 0.1s ease-in-out;\n transition-delay: 0.5s;\n}\n.split-view-container .view-container {\n position: relative;\n height: 100%;\n width: 100%;\n background-color: var(--dv-background-color);\n}\n.split-view-container .view-container .view {\n height: 100%;\n box-sizing: border-box;\n overflow: auto;\n position: absolute;\n}\n.split-view-container.separator-border .view:not(:first-child)::before {\n content: \" \";\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n background-color: var(--dv-separator-border);\n}\n.dv-dragged {\n transform: translate3d(0px, 0px, 0px); /* forces tab to be drawn on a separate layer (see https://github.com/microsoft/vscode/issues/18733) */\n}\n\n.tab {\n flex-shrink: 0;\n}\n.tab.dv-tab-dragging .tab-action {\n background-color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.tab.active-tab > .default-tab .tab-action {\n visibility: visible;\n}\n.tab.inactive-tab > .default-tab .tab-action {\n visibility: hidden;\n}\n.tab.inactive-tab > .default-tab:hover .tab-action {\n visibility: visible;\n}\n.tab .default-tab {\n position: relative;\n height: 100%;\n display: flex;\n min-width: 80px;\n align-items: center;\n padding: 0px 8px;\n white-space: nowrap;\n text-overflow: elipsis;\n}\n.tab .default-tab .tab-content {\n padding: 0px 8px;\n flex-grow: 1;\n}\n.tab .default-tab .action-container {\n text-align: right;\n display: flex;\n}\n.tab .default-tab .action-container .tab-list {\n display: flex;\n padding: 0px;\n margin: 0px;\n justify-content: flex-end;\n}\n.tab .default-tab .action-container .tab-list .tab-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n}\n.tab .default-tab .action-container .tab-list .tab-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}\n.tabs-and-actions-container {\n display: flex;\n background-color: var(--dv-tabs-and-actions-container-background-color);\n flex-shrink: 0;\n box-sizing: border-box;\n height: var(--dv-tabs-and-actions-container-height);\n font-size: var(--dv-tabs-and-actions-container-font-size);\n}\n.tabs-and-actions-container.hidden {\n display: none;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .tabs-container {\n flex-grow: 1;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .tabs-container .tab {\n flex-grow: 1;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .void-container {\n flex-grow: 0;\n}\n.tabs-and-actions-container .void-container {\n display: flex;\n flex-grow: 1;\n cursor: grab;\n}\n.tabs-and-actions-container .tabs-container {\n display: flex;\n overflow-x: overlay;\n overflow-y: hidden;\n scrollbar-width: thin;\n /* Track */\n /* Handle */\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar {\n height: 3px;\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar-track {\n background: transparent;\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar-thumb {\n background: var(--dv-tabs-container-scrollbar-color);\n}\n.tabs-and-actions-container .tabs-container .tab {\n -webkit-user-drag: element;\n outline: none;\n min-width: 75px;\n cursor: pointer;\n position: relative;\n box-sizing: border-box;\n}\n.tabs-and-actions-container .tabs-container .tab:not(:first-child)::before {\n content: \" \";\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n background-color: var(--dv-tab-divider-color);\n width: 1px;\n height: 100%;\n}\n.watermark {\n display: flex;\n width: 100%;\n}\n.watermark.has-actions .watermark-title .actions-container {\n display: none;\n}\n.watermark .watermark-title {\n height: 35px;\n width: 100%;\n display: flex;\n}\n.watermark .watermark-content {\n flex-grow: 1;\n}\n.watermark .actions-container {\n display: flex;\n align-items: center;\n padding: 0px 8px;\n}\n.watermark .actions-container .close-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n cursor: pointer;\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.watermark .actions-container .close-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}";
40
+ var css_248z = ".dv-render-overlay {\n position: absolute;\n z-index: 1;\n height: 100%;\n}\n.dv-render-overlay.dv-render-overlay-float {\n z-index: 999;\n}\n\n.dv-debug .dv-render-overlay {\n outline: 1px solid red;\n outline-offset: -1;\n}\n.dockview-svg {\n display: inline-block;\n fill: currentcolor;\n line-height: 1;\n stroke: currentcolor;\n stroke-width: 0;\n}\n.dockview-theme-dark {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n}\n\n.dockview-theme-light {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: white;\n --dv-tabs-and-actions-container-background-color: #f3f3f3;\n --dv-activegroup-visiblepanel-tab-background-color: white;\n --dv-activegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-inactivegroup-visiblepanel-tab-background-color: white;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-tab-divider-color: white;\n --dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-activegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.35);\n --dv-separator-border: rgba(128, 128, 128, 0.35);\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n}\n\n.dockview-theme-vs {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n --dv-tabs-and-actions-container-background-color: #2d2d30;\n --dv-tabs-and-actions-container-height: 20px;\n --dv-tabs-and-actions-container-font-size: 11px;\n --dv-activegroup-visiblepanel-tab-background-color: #007acc;\n --dv-inactivegroup-visiblepanel-tab-background-color: #3f3f46;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: white;\n --dv-inactivegroup-visiblepanel-tab-color: white;\n --dv-inactivegroup-hiddenpanel-tab-color: white;\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-activegroup-hiddenpanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n}\n\n.dockview-theme-abyss {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #000c18;\n --dv-tabs-and-actions-container-background-color: #1c1c2a;\n --dv-activegroup-visiblepanel-tab-background-color: #000c18;\n --dv-activegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #000c18;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-tab-divider-color: #2b2b4a;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.25);\n --dv-separator-border: #2b2b4a;\n --dv-paneview-header-border-color: #2b2b4a;\n --dv-paneview-active-outline-color: #596f99;\n}\n\n.dockview-theme-dracula {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #282a36;\n --dv-tabs-and-actions-container-background-color: #191a21;\n --dv-activegroup-visiblepanel-tab-background-color: #282a36;\n --dv-activegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #282a36;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-tab-divider-color: #191a21;\n --dv-activegroup-visiblepanel-tab-color: rgb(248, 248, 242);\n --dv-activegroup-hiddenpanel-tab-color: rgb(98, 114, 164);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(248, 248, 242, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(98, 114, 164, 0.5);\n --dv-separator-border: #bd93f9;\n --dv-paneview-header-border-color: #bd93f9;\n --dv-paneview-active-outline-color: #6272a4;\n}\n.dockview-theme-dracula .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab::after {\n position: absolute;\n left: 0px;\n top: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #94527e;\n z-index: 999;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #5e3d5a;\n z-index: 999;\n}\n\n.dockview-theme-replit {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #ebeced;\n --dv-tabs-and-actions-container-background-color: #fcfcfc;\n --dv-activegroup-visiblepanel-tab-background-color: #f0f1f2;\n --dv-activegroup-hiddenpanel-tab-background-color: ##fcfcfc;\n --dv-inactivegroup-visiblepanel-tab-background-color: #f0f1f2;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #fcfcfc;\n --dv-tab-divider-color: transparent;\n --dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-activegroup-hiddenpanel-tab-color: rgb(51, 51, 51);\n --dv-inactivegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-inactivegroup-hiddenpanel-tab-color: rgb(51, 51, 51);\n --dv-separator-border: transparent;\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n --dv-background-color: #ebeced;\n --dv-separator-handle-background-color: #cfd1d3;\n --dv-separator-handle-hover-background-color: #babbbb;\n}\n.dockview-theme-replit.dv-dockview {\n padding: 3px;\n}\n.dockview-theme-replit .view:has(> .groupview) {\n padding: 3px;\n}\n.dockview-theme-replit .dv-resize-container:has(> .groupview) {\n border-radius: 8px;\n}\n.dockview-theme-replit .groupview {\n overflow: hidden;\n border-radius: 10px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container {\n border-bottom: 1px solid rgba(128, 128, 128, 0.35);\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab {\n margin: 4px;\n border-radius: 8px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab .dockview-svg {\n height: 8px;\n width: 8px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab:hover {\n background-color: #e4e5e6 !important;\n}\n.dockview-theme-replit .groupview .content-container {\n background-color: #fcfcfc;\n}\n.dockview-theme-replit .groupview.active-group {\n border: 1px solid rgba(128, 128, 128, 0.35);\n}\n.dockview-theme-replit .groupview.inactive-group {\n border: 1px solid transparent;\n}\n.dockview-theme-replit .vertical > .sash-container > .sash::after {\n content: \"\";\n height: 4px;\n width: 40px;\n border-radius: 2px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--dv-separator-handle-background-color);\n position: absolute;\n}\n.dockview-theme-replit .vertical > .sash-container > .sash:hover::after {\n background-color: var(--dv-separator-handle-hover-background-color);\n}\n.dockview-theme-replit .horizontal > .sash-container > .sash::after {\n content: \"\";\n height: 40px;\n width: 4px;\n border-radius: 2px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--dv-separator-handle-background-color);\n position: absolute;\n}\n.dockview-theme-replit .horizontal > .sash-container > .sash:hover::after {\n background-color: var(--dv-separator-handle-hover-background-color);\n}\n.drop-target {\n position: relative;\n}\n.drop-target > .drop-target-dropzone {\n position: absolute;\n left: 0px;\n top: 0px;\n height: 100%;\n width: 100%;\n z-index: 1000;\n pointer-events: none;\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection {\n position: relative;\n box-sizing: border-box;\n height: 100%;\n width: 100%;\n background-color: var(--dv-drag-over-background-color);\n transition: top 70ms ease-out, left 70ms ease-out, width 70ms ease-out, height 70ms ease-out, opacity 0.15s ease-out;\n will-change: transform;\n pointer-events: none;\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.dv-drop-target-top.dv-drop-target-small-vertical {\n border-top: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.dv-drop-target-bottom.dv-drop-target-small-vertical {\n border-bottom: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.dv-drop-target-left.dv-drop-target-small-horizontal {\n border-left: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.dv-drop-target-right.dv-drop-target-small-horizontal {\n border-right: 1px solid var(--dv-drag-over-border-color);\n}\n.dv-debug .dv-resize-container .dv-resize-handle-top {\n background-color: red;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-bottom {\n background-color: green;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-left {\n background-color: yellow;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-right {\n background-color: blue;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-topleft,\n.dv-debug .dv-resize-container .dv-resize-handle-topright,\n.dv-debug .dv-resize-container .dv-resize-handle-bottomleft,\n.dv-debug .dv-resize-container .dv-resize-handle-bottomright {\n background-color: cyan;\n}\n\n.dv-resize-container {\n position: absolute;\n z-index: 997;\n border: 1px solid var(--dv-tab-divider-color);\n box-shadow: var(--dv-floating-box-shadow);\n}\n.dv-resize-container.dv-bring-to-front {\n z-index: 998;\n}\n.dv-resize-container.dv-resize-container-dragging {\n opacity: 0.5;\n}\n.dv-resize-container .dv-resize-handle-top {\n height: 4px;\n width: calc(100% - 8px);\n left: 4px;\n top: -2px;\n z-index: 999;\n position: absolute;\n cursor: ns-resize;\n}\n.dv-resize-container .dv-resize-handle-bottom {\n height: 4px;\n width: calc(100% - 8px);\n left: 4px;\n bottom: -2px;\n z-index: 999;\n position: absolute;\n cursor: ns-resize;\n}\n.dv-resize-container .dv-resize-handle-left {\n height: calc(100% - 8px);\n width: 4px;\n left: -2px;\n top: 4px;\n z-index: 999;\n position: absolute;\n cursor: ew-resize;\n}\n.dv-resize-container .dv-resize-handle-right {\n height: calc(100% - 8px);\n width: 4px;\n right: -2px;\n top: 4px;\n z-index: 999;\n position: absolute;\n cursor: ew-resize;\n}\n.dv-resize-container .dv-resize-handle-topleft {\n height: 4px;\n width: 4px;\n top: -2px;\n left: -2px;\n z-index: 999;\n position: absolute;\n cursor: nw-resize;\n}\n.dv-resize-container .dv-resize-handle-topright {\n height: 4px;\n width: 4px;\n right: -2px;\n top: -2px;\n z-index: 999;\n position: absolute;\n cursor: ne-resize;\n}\n.dv-resize-container .dv-resize-handle-bottomleft {\n height: 4px;\n width: 4px;\n left: -2px;\n bottom: -2px;\n z-index: 999;\n position: absolute;\n cursor: sw-resize;\n}\n.dv-resize-container .dv-resize-handle-bottomright {\n height: 4px;\n width: 4px;\n right: -2px;\n bottom: -2px;\n z-index: 999;\n position: absolute;\n cursor: se-resize;\n}\n.dv-dockview {\n position: relative;\n background-color: var(--dv-group-view-background-color);\n}\n.dv-dockview .dv-watermark-container {\n position: absolute;\n top: 0px;\n left: 0px;\n height: 100%;\n width: 100%;\n z-index: 1;\n}\n.dv-dockview .dv-overlay-render-container {\n position: relative;\n}\n\n.groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.inactive-tab {\n background-color: var(--dv-activegroup-hiddenpanel-tab-background-color);\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n background-color: var(--dv-inactivegroup-visiblepanel-tab-background-color);\n color: var(--dv-inactivegroup-visiblepanel-tab-color);\n}\n.groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.inactive-tab {\n background-color: var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n color: var(--dv-inactivegroup-hiddenpanel-tab-color);\n}\n\n/**\n * when a tab is dragged we lose the above stylings because they are conditional on parent elements\n * therefore we also set some stylings for the dragging event\n **/\n.tab.dv-tab-dragging {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.groupview {\n display: flex;\n flex-direction: column;\n height: 100%;\n background-color: var(--dv-group-view-background-color);\n overflow: hidden;\n}\n.groupview:focus {\n outline: none;\n}\n.groupview.empty > .tabs-and-actions-container {\n display: none;\n}\n.groupview > .content-container {\n flex-grow: 1;\n min-height: 0;\n outline: none;\n}\n.grid-view,\n.branch-node {\n height: 100%;\n width: 100%;\n}\n.pane-container {\n height: 100%;\n width: 100%;\n}\n.pane-container.animated .view {\n transition-duration: 0.15s;\n transition-timing-function: ease-out;\n}\n.pane-container .view {\n overflow: hidden;\n display: flex;\n flex-direction: column;\n padding: 0px !important;\n}\n.pane-container .view:not(:first-child)::before {\n background-color: transparent !important;\n}\n.pane-container .view:not(:first-child) .pane > .pane-header {\n border-top: 1px solid var(--dv-paneview-header-border-color);\n}\n.pane-container .view .default-header {\n background-color: var(--dv-group-view-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n display: flex;\n padding: 0px 8px;\n cursor: pointer;\n}\n.pane-container .view .default-header .dockview-pane-header-icon {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.pane-container .view .default-header > span {\n padding-left: 8px;\n flex-grow: 1;\n}\n.pane-container:first-of-type > .pane > .pane-header {\n border-top: none !important;\n}\n.pane-container .pane {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n height: 100%;\n}\n.pane-container .pane .pane-header {\n box-sizing: border-box;\n user-select: none;\n position: relative;\n outline: none;\n}\n.pane-container .pane .pane-header.pane-draggable {\n cursor: pointer;\n}\n.pane-container .pane .pane-header:focus:before, .pane-container .pane .pane-header:focus-within:before {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 5;\n content: \"\";\n pointer-events: none;\n outline: 1px solid;\n outline-width: -1px;\n outline-style: solid;\n outline-offset: -1px;\n outline-color: var(--dv-paneview-active-outline-color);\n}\n.pane-container .pane .pane-body {\n overflow-y: auto;\n overflow-x: hidden;\n flex-grow: 1;\n position: relative;\n outline: none;\n}\n.pane-container .pane .pane-body:focus:before, .pane-container .pane .pane-body:focus-within:before {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 5;\n content: \"\";\n pointer-events: none;\n outline: 1px solid;\n outline-width: -1px;\n outline-style: solid;\n outline-offset: -1px;\n outline-color: var(--dv-paneview-active-outline-color);\n}\n.dv-debug .split-view-container .sash-container .sash.enabled {\n background-color: black;\n}\n.dv-debug .split-view-container .sash-container .sash.disabled {\n background-color: orange;\n}\n.dv-debug .split-view-container .sash-container .sash.maximum {\n background-color: green;\n}\n.dv-debug .split-view-container .sash-container .sash.minimum {\n background-color: red;\n}\n\n.split-view-container {\n position: relative;\n overflow: hidden;\n height: 100%;\n width: 100%;\n}\n.split-view-container.animation .view,\n.split-view-container.animation .sash {\n transition-duration: 0.15s;\n transition-timing-function: ease-out;\n}\n.split-view-container.horizontal {\n height: 100%;\n}\n.split-view-container.horizontal > .sash-container > .sash {\n height: 100%;\n width: 4px;\n}\n.split-view-container.horizontal > .sash-container > .sash.enabled {\n cursor: ew-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.horizontal > .sash-container > .sash.maximum {\n cursor: w-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.minimum {\n cursor: e-resize;\n}\n.split-view-container.horizontal > .view-container > .view:not(:first-child)::before {\n height: 100%;\n width: 1px;\n}\n.split-view-container.vertical {\n width: 100%;\n}\n.split-view-container.vertical > .sash-container > .sash {\n width: 100%;\n height: 4px;\n}\n.split-view-container.vertical > .sash-container > .sash.enabled {\n cursor: ns-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.vertical > .sash-container > .sash.maximum {\n cursor: n-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.minimum {\n cursor: s-resize;\n}\n.split-view-container.vertical > .view-container > .view {\n width: 100%;\n}\n.split-view-container.vertical > .view-container > .view:not(:first-child)::before {\n height: 1px;\n width: 100%;\n}\n.split-view-container .sash-container {\n height: 100%;\n width: 100%;\n position: absolute;\n}\n.split-view-container .sash-container .sash {\n position: absolute;\n z-index: 99;\n outline: none;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n touch-action: none;\n}\n.split-view-container .sash-container .sash:not(.disabled):active {\n transition: background-color 0.1s ease-in-out;\n background-color: var(--dv-active-sash-color, transparent);\n}\n.split-view-container .sash-container .sash:not(.disabled):hover {\n background-color: var(--dv-active-sash-color, transparent);\n transition: background-color 0.1s ease-in-out;\n transition-delay: 0.5s;\n}\n.split-view-container .view-container {\n position: relative;\n height: 100%;\n width: 100%;\n background-color: var(--dv-background-color);\n}\n.split-view-container .view-container .view {\n height: 100%;\n box-sizing: border-box;\n overflow: auto;\n position: absolute;\n}\n.split-view-container.separator-border .view:not(:first-child)::before {\n content: \" \";\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n background-color: var(--dv-separator-border);\n}\n.dv-dragged {\n transform: translate3d(0px, 0px, 0px); /* forces tab to be drawn on a separate layer (see https://github.com/microsoft/vscode/issues/18733) */\n}\n\n.tab {\n flex-shrink: 0;\n}\n.tab:focus-within, .tab:focus {\n position: relative;\n}\n.tab:focus-within::after, .tab:focus::after {\n position: absolute;\n content: \"\";\n height: 100%;\n width: 100%;\n top: 0px;\n left: 0px;\n pointer-events: none;\n outline: 1px solid var(--dv-tab-divider-color) !important;\n outline-offset: -1px;\n z-index: 5;\n}\n.tab.dv-tab-dragging .tab-action {\n background-color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.tab.active-tab > .default-tab .tab-action {\n visibility: visible;\n}\n.tab.inactive-tab > .default-tab .tab-action {\n visibility: hidden;\n}\n.tab.inactive-tab > .default-tab:hover .tab-action {\n visibility: visible;\n}\n.tab .default-tab {\n position: relative;\n height: 100%;\n display: flex;\n min-width: 80px;\n align-items: center;\n padding: 0px 8px;\n white-space: nowrap;\n text-overflow: elipsis;\n}\n.tab .default-tab .tab-content {\n padding: 0px 8px;\n flex-grow: 1;\n}\n.tab .default-tab .action-container {\n text-align: right;\n display: flex;\n}\n.tab .default-tab .action-container .tab-list {\n display: flex;\n padding: 0px;\n margin: 0px;\n justify-content: flex-end;\n}\n.tab .default-tab .action-container .tab-list .tab-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n}\n.tab .default-tab .action-container .tab-list .tab-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}\n.tabs-and-actions-container {\n display: flex;\n background-color: var(--dv-tabs-and-actions-container-background-color);\n flex-shrink: 0;\n box-sizing: border-box;\n height: var(--dv-tabs-and-actions-container-height);\n font-size: var(--dv-tabs-and-actions-container-font-size);\n}\n.tabs-and-actions-container.hidden {\n display: none;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .tabs-container {\n flex-grow: 1;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .tabs-container .tab {\n flex-grow: 1;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .void-container {\n flex-grow: 0;\n}\n.tabs-and-actions-container .void-container {\n display: flex;\n flex-grow: 1;\n cursor: grab;\n}\n.tabs-and-actions-container .tabs-container {\n display: flex;\n overflow-x: overlay;\n overflow-y: hidden;\n scrollbar-width: thin;\n /* Track */\n /* Handle */\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar {\n height: 3px;\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar-track {\n background: transparent;\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar-thumb {\n background: var(--dv-tabs-container-scrollbar-color);\n}\n.tabs-and-actions-container .tabs-container .tab {\n -webkit-user-drag: element;\n outline: none;\n min-width: 75px;\n cursor: pointer;\n position: relative;\n box-sizing: border-box;\n}\n.tabs-and-actions-container .tabs-container .tab:not(:first-child)::before {\n content: \" \";\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n background-color: var(--dv-tab-divider-color);\n width: 1px;\n height: 100%;\n}\n.watermark {\n display: flex;\n width: 100%;\n}\n.watermark.has-actions .watermark-title .actions-container {\n display: none;\n}\n.watermark .watermark-title {\n height: 35px;\n width: 100%;\n display: flex;\n}\n.watermark .watermark-content {\n flex-grow: 1;\n}\n.watermark .actions-container {\n display: flex;\n align-items: center;\n padding: 0px 8px;\n}\n.watermark .actions-container .close-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n cursor: pointer;\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.watermark .actions-container .close-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}";
41
41
  styleInject(css_248z);
42
42
 
43
43
  class TransferObject {
@@ -266,6 +266,14 @@
266
266
  // noop
267
267
  },
268
268
  };
269
+ function from(func) {
270
+ return {
271
+ dispose: () => {
272
+ func();
273
+ },
274
+ };
275
+ }
276
+ Disposable.from = from;
269
277
  })(Disposable || (Disposable = {}));
270
278
  class CompositeDisposable {
271
279
  get isDisposed() {
@@ -450,6 +458,61 @@
450
458
  function quasiDefaultPrevented(event) {
451
459
  return event[QUASI_PREVENT_DEFAULT_KEY];
452
460
  }
461
+ function addStyles(document, styleSheetList) {
462
+ const styleSheets = Array.from(styleSheetList);
463
+ for (const styleSheet of styleSheets) {
464
+ if (styleSheet.href) {
465
+ const link = document.createElement('link');
466
+ link.href = styleSheet.href;
467
+ link.type = styleSheet.type;
468
+ link.rel = 'stylesheet';
469
+ document.head.appendChild(link);
470
+ }
471
+ let cssTexts = [];
472
+ try {
473
+ if (styleSheet.cssRules) {
474
+ cssTexts = Array.from(styleSheet.cssRules).map((rule) => rule.cssText);
475
+ }
476
+ }
477
+ catch (err) {
478
+ // security errors (lack of permissions), ignore
479
+ }
480
+ for (const rule of cssTexts) {
481
+ const style = document.createElement('style');
482
+ style.appendChild(document.createTextNode(rule));
483
+ document.head.appendChild(style);
484
+ }
485
+ }
486
+ }
487
+ function getDomNodePagePosition(domNode) {
488
+ const { left, top, width, height } = domNode.getBoundingClientRect();
489
+ return {
490
+ left: left + window.scrollX,
491
+ top: top + window.scrollY,
492
+ width: width,
493
+ height: height,
494
+ };
495
+ }
496
+ /**
497
+ * Check whether an element is in the DOM (including the Shadow DOM)
498
+ * @see https://terodox.tech/how-to-tell-if-an-element-is-in-the-dom-including-the-shadow-dom/
499
+ */
500
+ function isInDocument(element) {
501
+ let currentElement = element;
502
+ while (currentElement === null || currentElement === void 0 ? void 0 : currentElement.parentNode) {
503
+ if (currentElement.parentNode === document) {
504
+ return true;
505
+ }
506
+ else if (currentElement.parentNode instanceof DocumentFragment) {
507
+ // handle shadow DOMs
508
+ currentElement = currentElement.parentNode.host;
509
+ }
510
+ else {
511
+ currentElement = currentElement.parentNode;
512
+ }
513
+ }
514
+ return false;
515
+ }
453
516
 
454
517
  function tail(arr) {
455
518
  if (arr.length === 0) {
@@ -647,6 +710,9 @@
647
710
  Sizing.Invisible = Invisible;
648
711
  })(exports.Sizing || (exports.Sizing = {}));
649
712
  class Splitview {
713
+ get contentSize() {
714
+ return this._contentSize;
715
+ }
650
716
  get size() {
651
717
  return this._size;
652
718
  }
@@ -712,7 +778,7 @@
712
778
  this.sashes = [];
713
779
  this._size = 0;
714
780
  this._orthogonalSize = 0;
715
- this.contentSize = 0;
781
+ this._contentSize = 0;
716
782
  this._proportions = undefined;
717
783
  this._startSnappingEnabled = true;
718
784
  this._endSnappingEnabled = true;
@@ -831,7 +897,7 @@
831
897
  );
832
898
  });
833
899
  // Initialize content size and proportions for first layout
834
- this.contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
900
+ this._contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
835
901
  this.saveProportions();
836
902
  }
837
903
  }
@@ -1105,7 +1171,7 @@
1105
1171
  this.addView(view, sizing, to);
1106
1172
  }
1107
1173
  layout(size, orthogonalSize) {
1108
- const previousSize = Math.max(this.size, this.contentSize);
1174
+ const previousSize = Math.max(this.size, this._contentSize);
1109
1175
  this.size = size;
1110
1176
  this.orthogonalSize = orthogonalSize;
1111
1177
  if (!this.proportions) {
@@ -1115,9 +1181,23 @@
1115
1181
  this.resize(this.viewItems.length - 1, size - previousSize, undefined, lowPriorityIndexes, highPriorityIndexes);
1116
1182
  }
1117
1183
  else {
1184
+ let total = 0;
1118
1185
  for (let i = 0; i < this.viewItems.length; i++) {
1119
1186
  const item = this.viewItems[i];
1120
- item.size = clamp(Math.round(this.proportions[i] * size), item.minimumSize, item.maximumSize);
1187
+ const proportion = this.proportions[i];
1188
+ if (typeof proportion === 'number') {
1189
+ total += proportion;
1190
+ }
1191
+ else {
1192
+ size -= item.size;
1193
+ }
1194
+ }
1195
+ for (let i = 0; i < this.viewItems.length; i++) {
1196
+ const item = this.viewItems[i];
1197
+ const proportion = this.proportions[i];
1198
+ if (typeof proportion === 'number' && total > 0) {
1199
+ item.size = clamp(Math.round((proportion * size) / total), item.minimumSize, item.maximumSize);
1200
+ }
1121
1201
  }
1122
1202
  }
1123
1203
  this.distributeEmptySpace();
@@ -1154,12 +1234,12 @@
1154
1234
  }
1155
1235
  }
1156
1236
  saveProportions() {
1157
- if (this.proportionalLayout && this.contentSize > 0) {
1158
- this._proportions = this.viewItems.map((i) => i.size / this.contentSize);
1237
+ if (this.proportionalLayout && this._contentSize > 0) {
1238
+ this._proportions = this.viewItems.map((i) => i.visible ? i.size / this._contentSize : undefined);
1159
1239
  }
1160
1240
  }
1161
1241
  layoutViews() {
1162
- this.contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
1242
+ this._contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
1163
1243
  let sum = 0;
1164
1244
  const x = [];
1165
1245
  this.updateSashEnablement();
@@ -1253,7 +1333,7 @@
1253
1333
  }
1254
1334
  else if (snappedAfter &&
1255
1335
  collapsesDown[index] &&
1256
- (position < this.contentSize || this.endSnappingEnabled)) {
1336
+ (position < this._contentSize || this.endSnappingEnabled)) {
1257
1337
  this.updateSash(sash, exports.SashState.MAXIMUM);
1258
1338
  }
1259
1339
  else {
@@ -1542,7 +1622,6 @@
1542
1622
  setVisible(visible) {
1543
1623
  if (this.view.setVisible) {
1544
1624
  this.view.setVisible(visible);
1545
- this._onDidChange.fire({});
1546
1625
  }
1547
1626
  }
1548
1627
  layout(size, orthogonalSize) {
@@ -1574,10 +1653,14 @@
1574
1653
  get minimumSize() {
1575
1654
  return this.children.length === 0
1576
1655
  ? 0
1577
- : Math.max(...this.children.map((c) => c.minimumOrthogonalSize));
1656
+ : Math.max(...this.children.map((c, index) => this.splitview.isViewVisible(index)
1657
+ ? c.minimumOrthogonalSize
1658
+ : 0));
1578
1659
  }
1579
1660
  get maximumSize() {
1580
- return Math.min(...this.children.map((c) => c.maximumOrthogonalSize));
1661
+ return Math.min(...this.children.map((c, index) => this.splitview.isViewVisible(index)
1662
+ ? c.maximumOrthogonalSize
1663
+ : Number.POSITIVE_INFINITY));
1581
1664
  }
1582
1665
  get minimumOrthogonalSize() {
1583
1666
  return this.splitview.minimumSize;
@@ -1635,6 +1718,8 @@
1635
1718
  this.children = [];
1636
1719
  this._onDidChange = new Emitter();
1637
1720
  this.onDidChange = this._onDidChange.event;
1721
+ this._onDidVisibilityChange = new Emitter();
1722
+ this.onDidVisibilityChange = this._onDidVisibilityChange.event;
1638
1723
  this._orthogonalSize = orthogonalSize;
1639
1724
  this._size = size;
1640
1725
  this.element = document.createElement('div');
@@ -1669,7 +1754,7 @@
1669
1754
  styles,
1670
1755
  });
1671
1756
  }
1672
- this.addDisposables(this._onDidChange, this.splitview.onDidSashEnd(() => {
1757
+ this.addDisposables(this._onDidChange, this._onDidVisibilityChange, this.splitview.onDidSashEnd(() => {
1673
1758
  this._onDidChange.fire({});
1674
1759
  }));
1675
1760
  this.setupChildrenEvents();
@@ -1692,7 +1777,15 @@
1692
1777
  if (this.splitview.isViewVisible(index) === visible) {
1693
1778
  return;
1694
1779
  }
1780
+ const wereAllChildrenHidden = this.splitview.contentSize === 0;
1695
1781
  this.splitview.setViewVisible(index, visible);
1782
+ const areAllChildrenHidden = this.splitview.contentSize === 0;
1783
+ // If all children are hidden then the parent should hide the entire splitview
1784
+ // If the entire splitview is hidden then the parent should show the splitview when a child is shown
1785
+ if ((visible && wereAllChildrenHidden) ||
1786
+ (!visible && areAllChildrenHidden)) {
1787
+ this._onDidVisibilityChange.fire(visible);
1788
+ }
1696
1789
  }
1697
1790
  moveChild(from, to) {
1698
1791
  if (from === to) {
@@ -1756,13 +1849,20 @@
1756
1849
  }
1757
1850
  setupChildrenEvents() {
1758
1851
  this._childrenDisposable.dispose();
1759
- this._childrenDisposable = exports.DockviewEvent.any(...this.children.map((c) => c.onDidChange))((e) => {
1852
+ this._childrenDisposable = new CompositeDisposable(exports.DockviewEvent.any(...this.children.map((c) => c.onDidChange))((e) => {
1760
1853
  /**
1761
1854
  * indicate a change has occured to allows any re-rendering but don't bubble
1762
1855
  * event because that was specific to this branch
1763
1856
  */
1764
1857
  this._onDidChange.fire({ size: e.orthogonalSize });
1765
- });
1858
+ }), ...this.children.map((c, i) => {
1859
+ if (c instanceof BranchNode) {
1860
+ return c.onDidVisibilityChange((visible) => {
1861
+ this.setChildVisible(i, visible);
1862
+ });
1863
+ }
1864
+ return Disposable.NONE;
1865
+ }));
1766
1866
  }
1767
1867
  dispose() {
1768
1868
  this._childrenDisposable.dispose();
@@ -1923,7 +2023,69 @@
1923
2023
  get maximumHeight() {
1924
2024
  return this.root.maximumHeight;
1925
2025
  }
2026
+ maximizedView() {
2027
+ var _a;
2028
+ return (_a = this._maximizedNode) === null || _a === void 0 ? void 0 : _a.view;
2029
+ }
2030
+ hasMaximizedView() {
2031
+ return this._maximizedNode !== undefined;
2032
+ }
2033
+ maximizeView(view) {
2034
+ const location = getGridLocation(view.element);
2035
+ const [_, node] = this.getNode(location);
2036
+ if (!(node instanceof LeafNode)) {
2037
+ return;
2038
+ }
2039
+ if (this._maximizedNode === node) {
2040
+ return;
2041
+ }
2042
+ if (this.hasMaximizedView()) {
2043
+ this.exitMaximizedView();
2044
+ }
2045
+ function hideAllViewsBut(parent, exclude) {
2046
+ for (let i = 0; i < parent.children.length; i++) {
2047
+ const child = parent.children[i];
2048
+ if (child instanceof LeafNode) {
2049
+ if (child !== exclude) {
2050
+ parent.setChildVisible(i, false);
2051
+ }
2052
+ }
2053
+ else {
2054
+ hideAllViewsBut(child, exclude);
2055
+ }
2056
+ }
2057
+ }
2058
+ hideAllViewsBut(this.root, node);
2059
+ this._maximizedNode = node;
2060
+ this._onDidMaxmizedNodeChange.fire();
2061
+ }
2062
+ exitMaximizedView() {
2063
+ if (!this._maximizedNode) {
2064
+ return;
2065
+ }
2066
+ function showViewsInReverseOrder(parent) {
2067
+ for (let index = parent.children.length - 1; index >= 0; index--) {
2068
+ const child = parent.children[index];
2069
+ if (child instanceof LeafNode) {
2070
+ parent.setChildVisible(index, true);
2071
+ }
2072
+ else {
2073
+ showViewsInReverseOrder(child);
2074
+ }
2075
+ }
2076
+ }
2077
+ showViewsInReverseOrder(this.root);
2078
+ this._maximizedNode = undefined;
2079
+ this._onDidMaxmizedNodeChange.fire();
2080
+ }
1926
2081
  serialize() {
2082
+ if (this.hasMaximizedView()) {
2083
+ /**
2084
+ * do not persist maximized view state but we must first exit any maximized views
2085
+ * before serialization to ensure the correct dimensions are persisted
2086
+ */
2087
+ this.exitMaximizedView();
2088
+ }
1927
2089
  const root = serializeBranchNode(this.getView(), this.orientation);
1928
2090
  return {
1929
2091
  root,
@@ -1935,7 +2097,9 @@
1935
2097
  dispose() {
1936
2098
  this.disposable.dispose();
1937
2099
  this._onDidChange.dispose();
2100
+ this._onDidMaxmizedNodeChange.dispose();
1938
2101
  this.root.dispose();
2102
+ this._maximizedNode = undefined;
1939
2103
  this.element.remove();
1940
2104
  }
1941
2105
  clear() {
@@ -1976,6 +2140,7 @@
1976
2140
  const oldRoot = this._root;
1977
2141
  if (oldRoot) {
1978
2142
  oldRoot.dispose();
2143
+ this._maximizedNode = undefined;
1979
2144
  this.element.removeChild(oldRoot.element);
1980
2145
  }
1981
2146
  this._root = root;
@@ -2062,9 +2227,12 @@
2062
2227
  constructor(proportionalLayout, styles, orientation) {
2063
2228
  this.proportionalLayout = proportionalLayout;
2064
2229
  this.styles = styles;
2230
+ this._maximizedNode = undefined;
2065
2231
  this.disposable = new MutableDisposable();
2066
2232
  this._onDidChange = new Emitter();
2067
2233
  this.onDidChange = this._onDidChange.event;
2234
+ this._onDidMaxmizedNodeChange = new Emitter();
2235
+ this.onDidMaxmizedNodeChange = this._onDidMaxmizedNodeChange.event;
2068
2236
  this.element = document.createElement('div');
2069
2237
  this.element.className = 'grid-view';
2070
2238
  this.root = new BranchNode(orientation, proportionalLayout, styles, 0, 0);
@@ -2078,6 +2246,9 @@
2078
2246
  return parent.isChildVisible(index);
2079
2247
  }
2080
2248
  setViewVisible(location, visible) {
2249
+ if (this.hasMaximizedView()) {
2250
+ this.exitMaximizedView();
2251
+ }
2081
2252
  const [rest, index] = tail(location);
2082
2253
  const [, parent] = this.getNode(rest);
2083
2254
  if (!(parent instanceof BranchNode)) {
@@ -2086,6 +2257,9 @@
2086
2257
  parent.setChildVisible(index, visible);
2087
2258
  }
2088
2259
  moveView(parentLocation, from, to) {
2260
+ if (this.hasMaximizedView()) {
2261
+ this.exitMaximizedView();
2262
+ }
2089
2263
  const [, parent] = this.getNode(parentLocation);
2090
2264
  if (!(parent instanceof BranchNode)) {
2091
2265
  throw new Error('Invalid location');
@@ -2093,6 +2267,9 @@
2093
2267
  parent.moveChild(from, to);
2094
2268
  }
2095
2269
  addView(view, size, location) {
2270
+ if (this.hasMaximizedView()) {
2271
+ this.exitMaximizedView();
2272
+ }
2096
2273
  const [rest, index] = tail(location);
2097
2274
  const [pathToParent, parent] = this.getNode(rest);
2098
2275
  if (parent instanceof BranchNode) {
@@ -2125,6 +2302,9 @@
2125
2302
  return this.removeView(location, sizing);
2126
2303
  }
2127
2304
  removeView(location, sizing) {
2305
+ if (this.hasMaximizedView()) {
2306
+ this.exitMaximizedView();
2307
+ }
2128
2308
  const [rest, index] = tail(location);
2129
2309
  const [pathToParent, parent] = this.getNode(rest);
2130
2310
  if (!(parent instanceof BranchNode)) {
@@ -2862,6 +3042,24 @@
2862
3042
  moveToPrevious(options) {
2863
3043
  this.component.moveToPrevious(options);
2864
3044
  }
3045
+ maximizeGroup(panel) {
3046
+ this.component.maximizeGroup(panel.group);
3047
+ }
3048
+ hasMaximizedGroup() {
3049
+ return this.component.hasMaximizedGroup();
3050
+ }
3051
+ exitMaxmizedGroup() {
3052
+ this.component.exitMaximizedGroup();
3053
+ }
3054
+ get onDidMaxmizedGroupChange() {
3055
+ return this.component.onDidMaxmizedGroupChange;
3056
+ }
3057
+ /**
3058
+ * Add a popout group in a new Window
3059
+ */
3060
+ addPopoutGroup(item, options) {
3061
+ this.component.addPopoutGroup(item, options);
3062
+ }
2865
3063
  }
2866
3064
 
2867
3065
  class DragAndDropObserver extends CompositeDisposable {
@@ -2872,36 +3070,48 @@
2872
3070
  this.target = null;
2873
3071
  this.registerListeners();
2874
3072
  }
3073
+ onDragEnter(e) {
3074
+ this.target = e.target;
3075
+ this.callbacks.onDragEnter(e);
3076
+ }
3077
+ onDragOver(e) {
3078
+ e.preventDefault(); // needed so that the drop event fires (https://stackoverflow.com/questions/21339924/drop-event-not-firing-in-chrome)
3079
+ if (this.callbacks.onDragOver) {
3080
+ this.callbacks.onDragOver(e);
3081
+ }
3082
+ }
3083
+ onDragLeave(e) {
3084
+ if (this.target === e.target) {
3085
+ this.target = null;
3086
+ this.callbacks.onDragLeave(e);
3087
+ }
3088
+ }
3089
+ onDragEnd(e) {
3090
+ this.target = null;
3091
+ this.callbacks.onDragEnd(e);
3092
+ }
3093
+ onDrop(e) {
3094
+ this.callbacks.onDrop(e);
3095
+ }
2875
3096
  registerListeners() {
2876
3097
  this.addDisposables(addDisposableListener(this.element, 'dragenter', (e) => {
2877
- this.target = e.target;
2878
- this.callbacks.onDragEnter(e);
3098
+ this.onDragEnter(e);
2879
3099
  }, true));
2880
3100
  this.addDisposables(addDisposableListener(this.element, 'dragover', (e) => {
2881
- e.preventDefault(); // needed so that the drop event fires (https://stackoverflow.com/questions/21339924/drop-event-not-firing-in-chrome)
2882
- if (this.callbacks.onDragOver) {
2883
- this.callbacks.onDragOver(e);
2884
- }
3101
+ this.onDragOver(e);
2885
3102
  }, true));
2886
3103
  this.addDisposables(addDisposableListener(this.element, 'dragleave', (e) => {
2887
- if (this.target === e.target) {
2888
- this.target = null;
2889
- this.callbacks.onDragLeave(e);
2890
- }
3104
+ this.onDragLeave(e);
2891
3105
  }));
2892
3106
  this.addDisposables(addDisposableListener(this.element, 'dragend', (e) => {
2893
- this.target = null;
2894
- this.callbacks.onDragEnd(e);
3107
+ this.onDragEnd(e);
2895
3108
  }));
2896
3109
  this.addDisposables(addDisposableListener(this.element, 'drop', (e) => {
2897
- this.callbacks.onDrop(e);
3110
+ this.onDrop(e);
2898
3111
  }));
2899
3112
  }
2900
3113
  }
2901
3114
 
2902
- function numberOrFallback(maybeNumber, fallback) {
2903
- return typeof maybeNumber === 'number' ? maybeNumber : fallback;
2904
- }
2905
3115
  function directionToPosition(direction) {
2906
3116
  switch (direction) {
2907
3117
  case 'above':
@@ -2934,6 +3144,16 @@
2934
3144
  throw new Error(`invalid position '${position}'`);
2935
3145
  }
2936
3146
  }
3147
+ const DEFAULT_ACTIVATION_SIZE = {
3148
+ value: 20,
3149
+ type: 'percentage',
3150
+ };
3151
+ const DEFAULT_SIZE = {
3152
+ value: 50,
3153
+ type: 'percentage',
3154
+ };
3155
+ const SMALL_WIDTH_BOUNDARY = 100;
3156
+ const SMALL_HEIGHT_BOUNDARY = 100;
2937
3157
  class Droptarget extends CompositeDisposable {
2938
3158
  get state() {
2939
3159
  return this._state;
@@ -2946,7 +3166,7 @@
2946
3166
  this.onDrop = this._onDrop.event;
2947
3167
  // use a set to take advantage of #<set>.has
2948
3168
  this._acceptedTargetZonesSet = new Set(this.options.acceptedTargetZones);
2949
- this.addDisposables(this._onDrop, new DragAndDropObserver(this.element, {
3169
+ this.dnd = new DragAndDropObserver(this.element, {
2950
3170
  onDragEnter: () => undefined,
2951
3171
  onDragOver: (e) => {
2952
3172
  if (this._acceptedTargetZonesSet.size === 0) {
@@ -2994,7 +3214,7 @@
2994
3214
  this.element.append(this.targetElement);
2995
3215
  }
2996
3216
  this.toggleClasses(quadrant, width, height);
2997
- this.setState(quadrant);
3217
+ this._state = quadrant;
2998
3218
  },
2999
3219
  onDragLeave: () => {
3000
3220
  this.removeDropTarget();
@@ -3013,11 +3233,15 @@
3013
3233
  this._onDrop.fire({ position: state, nativeEvent: e });
3014
3234
  }
3015
3235
  },
3016
- }));
3236
+ });
3237
+ this.addDisposables(this._onDrop, this.dnd);
3017
3238
  }
3018
3239
  setTargetZones(acceptedTargetZones) {
3019
3240
  this._acceptedTargetZonesSet = new Set(acceptedTargetZones);
3020
3241
  }
3242
+ setOverlayModel(model) {
3243
+ this.options.overlayModel = model;
3244
+ }
3021
3245
  dispose() {
3022
3246
  this.removeDropTarget();
3023
3247
  super.dispose();
@@ -3029,19 +3253,19 @@
3029
3253
  event[Droptarget.USED_EVENT_ID] = true;
3030
3254
  }
3031
3255
  /**
3032
- * Check is the event has already been used by another instance od DropTarget
3256
+ * Check is the event has already been used by another instance of DropTarget
3033
3257
  */
3034
3258
  isAlreadyUsed(event) {
3035
3259
  const value = event[Droptarget.USED_EVENT_ID];
3036
3260
  return typeof value === 'boolean' && value;
3037
3261
  }
3038
3262
  toggleClasses(quadrant, width, height) {
3039
- var _a, _b, _c, _d;
3263
+ var _a, _b;
3040
3264
  if (!this.overlayElement) {
3041
3265
  return;
3042
3266
  }
3043
- const isSmallX = width < 100;
3044
- const isSmallY = height < 100;
3267
+ const isSmallX = width < SMALL_WIDTH_BOUNDARY;
3268
+ const isSmallY = height < SMALL_HEIGHT_BOUNDARY;
3045
3269
  const isLeft = quadrant === 'left';
3046
3270
  const isRight = quadrant === 'right';
3047
3271
  const isTop = quadrant === 'top';
@@ -3050,20 +3274,17 @@
3050
3274
  const leftClass = !isSmallX && isLeft;
3051
3275
  const topClass = !isSmallY && isTop;
3052
3276
  const bottomClass = !isSmallY && isBottom;
3053
- let size = 0.5;
3054
- if (((_b = (_a = this.options.overlayModel) === null || _a === void 0 ? void 0 : _a.size) === null || _b === void 0 ? void 0 : _b.type) === 'percentage') {
3055
- size = clamp(this.options.overlayModel.size.value, 0, 100) / 100;
3277
+ let size = 1;
3278
+ const sizeOptions = (_b = (_a = this.options.overlayModel) === null || _a === void 0 ? void 0 : _a.size) !== null && _b !== void 0 ? _b : DEFAULT_SIZE;
3279
+ if (sizeOptions.type === 'percentage') {
3280
+ size = clamp(sizeOptions.value, 0, 100) / 100;
3056
3281
  }
3057
- if (((_d = (_c = this.options.overlayModel) === null || _c === void 0 ? void 0 : _c.size) === null || _d === void 0 ? void 0 : _d.type) === 'pixels') {
3282
+ else {
3058
3283
  if (rightClass || leftClass) {
3059
- size =
3060
- clamp(0, this.options.overlayModel.size.value, width) /
3061
- width;
3284
+ size = clamp(0, sizeOptions.value, width) / width;
3062
3285
  }
3063
3286
  if (topClass || bottomClass) {
3064
- size =
3065
- clamp(0, this.options.overlayModel.size.value, height) /
3066
- height;
3287
+ size = clamp(0, sizeOptions.value, height) / height;
3067
3288
  }
3068
3289
  }
3069
3290
  const translate = (1 - size) / 2;
@@ -3085,39 +3306,22 @@
3085
3306
  transform = '';
3086
3307
  }
3087
3308
  this.overlayElement.style.transform = transform;
3088
- toggleClass(this.overlayElement, 'small-right', isSmallX && isRight);
3089
- toggleClass(this.overlayElement, 'small-left', isSmallX && isLeft);
3090
- toggleClass(this.overlayElement, 'small-top', isSmallY && isTop);
3091
- toggleClass(this.overlayElement, 'small-bottom', isSmallY && isBottom);
3092
- }
3093
- setState(quadrant) {
3094
- switch (quadrant) {
3095
- case 'top':
3096
- this._state = 'top';
3097
- break;
3098
- case 'left':
3099
- this._state = 'left';
3100
- break;
3101
- case 'bottom':
3102
- this._state = 'bottom';
3103
- break;
3104
- case 'right':
3105
- this._state = 'right';
3106
- break;
3107
- case 'center':
3108
- this._state = 'center';
3109
- break;
3110
- }
3309
+ toggleClass(this.overlayElement, 'dv-drop-target-small-vertical', isSmallY);
3310
+ toggleClass(this.overlayElement, 'dv-drop-target-small-horizontal', isSmallX);
3311
+ toggleClass(this.overlayElement, 'dv-drop-target-left', isLeft);
3312
+ toggleClass(this.overlayElement, 'dv-drop-target-right', isRight);
3313
+ toggleClass(this.overlayElement, 'dv-drop-target-top', isTop);
3314
+ toggleClass(this.overlayElement, 'dv-drop-target-bottom', isBottom);
3315
+ toggleClass(this.overlayElement, 'dv-drop-target-center', quadrant === 'center');
3111
3316
  }
3112
3317
  calculateQuadrant(overlayType, x, y, width, height) {
3113
- var _a, _b, _c, _d, _e, _f;
3114
- const isPercentage = ((_a = this.options.overlayModel) === null || _a === void 0 ? void 0 : _a.activationSize) === undefined ||
3115
- ((_c = (_b = this.options.overlayModel) === null || _b === void 0 ? void 0 : _b.activationSize) === null || _c === void 0 ? void 0 : _c.type) === 'percentage';
3116
- const value = numberOrFallback((_f = (_e = (_d = this.options) === null || _d === void 0 ? void 0 : _d.overlayModel) === null || _e === void 0 ? void 0 : _e.activationSize) === null || _f === void 0 ? void 0 : _f.value, 20);
3318
+ var _a, _b;
3319
+ const activationSizeOptions = (_b = (_a = this.options.overlayModel) === null || _a === void 0 ? void 0 : _a.activationSize) !== null && _b !== void 0 ? _b : DEFAULT_ACTIVATION_SIZE;
3320
+ const isPercentage = activationSizeOptions.type === 'percentage';
3117
3321
  if (isPercentage) {
3118
- return calculateQuadrantAsPercentage(overlayType, x, y, width, height, value);
3322
+ return calculateQuadrantAsPercentage(overlayType, x, y, width, height, activationSizeOptions.value);
3119
3323
  }
3120
- return calculateQuadrantAsPixels(overlayType, x, y, width, height, value);
3324
+ return calculateQuadrantAsPixels(overlayType, x, y, width, height, activationSizeOptions.value);
3121
3325
  }
3122
3326
  removeDropTarget() {
3123
3327
  if (this.targetElement) {
@@ -3169,12 +3373,22 @@
3169
3373
  return 'center';
3170
3374
  }
3171
3375
 
3376
+ exports.DockviewDropTargets = void 0;
3377
+ (function (DockviewDropTargets) {
3378
+ DockviewDropTargets[DockviewDropTargets["Tab"] = 0] = "Tab";
3379
+ DockviewDropTargets[DockviewDropTargets["Panel"] = 1] = "Panel";
3380
+ DockviewDropTargets[DockviewDropTargets["TabContainer"] = 2] = "TabContainer";
3381
+ DockviewDropTargets[DockviewDropTargets["Edge"] = 3] = "Edge";
3382
+ })(exports.DockviewDropTargets || (exports.DockviewDropTargets = {}));
3383
+
3172
3384
  class ContentContainer extends CompositeDisposable {
3173
3385
  get element() {
3174
3386
  return this._element;
3175
3387
  }
3176
- constructor() {
3388
+ constructor(accessor, group) {
3177
3389
  super();
3390
+ this.accessor = accessor;
3391
+ this.group = group;
3178
3392
  this.disposable = new MutableDisposable();
3179
3393
  this._onDidFocus = new Emitter();
3180
3394
  this.onDidFocus = this._onDidFocus.event;
@@ -3184,11 +3398,38 @@
3184
3398
  this._element.className = 'content-container';
3185
3399
  this._element.tabIndex = -1;
3186
3400
  this.addDisposables(this._onDidFocus, this._onDidBlur);
3187
- // for hosted containers
3188
- // 1) register a drop target on the host
3189
- // 2) register window dragStart events to disable pointer events
3190
- // 3) register dragEnd events
3191
- // 4) register mouseMove events (if no buttons are present we take this as a dragEnd event)
3401
+ this.dropTarget = new Droptarget(this.element, {
3402
+ acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
3403
+ canDisplayOverlay: (event, position) => {
3404
+ if (this.group.locked === 'no-drop-target' ||
3405
+ (this.group.locked && position === 'center')) {
3406
+ return false;
3407
+ }
3408
+ const data = getPanelData();
3409
+ if (!data &&
3410
+ event.shiftKey &&
3411
+ this.group.location !== 'floating') {
3412
+ return false;
3413
+ }
3414
+ if (data && data.viewId === this.accessor.id) {
3415
+ if (data.groupId === this.group.id) {
3416
+ if (position === 'center') {
3417
+ // don't allow to drop on self for center position
3418
+ return false;
3419
+ }
3420
+ if (data.panelId === null) {
3421
+ // don't allow group move to drop anywhere on self
3422
+ return false;
3423
+ }
3424
+ }
3425
+ const groupHasOnePanelAndIsActiveDragElement = this.group.panels.length === 1 &&
3426
+ data.groupId === this.group.id;
3427
+ return !groupHasOnePanelAndIsActiveDragElement;
3428
+ }
3429
+ return this.group.canDisplayOverlay(event, position, exports.DockviewDropTargets.Panel);
3430
+ },
3431
+ });
3432
+ this.addDisposables(this.dropTarget);
3192
3433
  }
3193
3434
  show() {
3194
3435
  this.element.style.display = '';
@@ -3196,23 +3437,43 @@
3196
3437
  hide() {
3197
3438
  this.element.style.display = 'none';
3198
3439
  }
3199
- openPanel(panel) {
3200
- var _a;
3201
- if (this.panel === panel) {
3202
- return;
3203
- }
3204
- if (this.panel) {
3205
- if ((_a = this.panel.view) === null || _a === void 0 ? void 0 : _a.content) {
3206
- this._element.removeChild(this.panel.view.content.element);
3207
- }
3208
- this.panel = undefined;
3440
+ renderPanel(panel, options = { asActive: true }) {
3441
+ const doRender = options.asActive ||
3442
+ (this.panel && this.group.isPanelActive(this.panel));
3443
+ if (this.panel &&
3444
+ this.panel.view.content.element.parentElement === this._element) {
3445
+ /**
3446
+ * If the currently attached panel is mounted directly to the content then remove it
3447
+ */
3448
+ this._element.removeChild(this.panel.view.content.element);
3209
3449
  }
3210
3450
  this.panel = panel;
3211
- const disposable = new CompositeDisposable();
3212
- if (this.panel.view) {
3213
- const _onDidFocus = this.panel.view.content.onDidFocus;
3214
- const _onDidBlur = this.panel.view.content.onDidBlur;
3215
- const focusTracker = trackFocus(this._element);
3451
+ let container;
3452
+ switch (panel.api.renderer) {
3453
+ case 'onlyWhenVisibile':
3454
+ this.accessor.overlayRenderContainer.detatch(panel);
3455
+ if (this.panel) {
3456
+ if (doRender) {
3457
+ this._element.appendChild(this.panel.view.content.element);
3458
+ }
3459
+ }
3460
+ container = this._element;
3461
+ break;
3462
+ case 'always':
3463
+ if (panel.view.content.element.parentElement === this._element) {
3464
+ this._element.removeChild(panel.view.content.element);
3465
+ }
3466
+ container = this.accessor.overlayRenderContainer.attach({
3467
+ panel,
3468
+ referenceContainer: this,
3469
+ });
3470
+ break;
3471
+ }
3472
+ if (doRender) {
3473
+ const _onDidFocus = panel.view.content.onDidFocus;
3474
+ const _onDidBlur = panel.view.content.onDidBlur;
3475
+ const focusTracker = trackFocus(container);
3476
+ const disposable = new CompositeDisposable();
3216
3477
  disposable.addDisposables(focusTracker, focusTracker.onDidFocus(() => this._onDidFocus.fire()), focusTracker.onDidBlur(() => this._onDidBlur.fire()));
3217
3478
  if (_onDidFocus) {
3218
3479
  disposable.addDisposables(_onDidFocus(() => this._onDidFocus.fire()));
@@ -3220,17 +3481,23 @@
3220
3481
  if (_onDidBlur) {
3221
3482
  disposable.addDisposables(_onDidBlur(() => this._onDidBlur.fire()));
3222
3483
  }
3223
- this._element.appendChild(this.panel.view.content.element);
3484
+ this.disposable.value = disposable;
3485
+ }
3486
+ }
3487
+ openPanel(panel) {
3488
+ if (this.panel === panel) {
3489
+ return;
3224
3490
  }
3225
- this.disposable.value = disposable;
3491
+ this.renderPanel(panel);
3226
3492
  }
3227
3493
  layout(_width, _height) {
3228
3494
  // noop
3229
3495
  }
3230
3496
  closePanel() {
3231
- var _a, _b, _c;
3232
- if ((_c = (_b = (_a = this.panel) === null || _a === void 0 ? void 0 : _a.view) === null || _b === void 0 ? void 0 : _b.content) === null || _c === void 0 ? void 0 : _c.element) {
3233
- this._element.removeChild(this.panel.view.content.element);
3497
+ if (this.panel) {
3498
+ if (this.accessor.options.defaultRenderer === 'onlyWhenVisibile') {
3499
+ this._element.removeChild(this.panel.view.content.element);
3500
+ }
3234
3501
  this.panel = undefined;
3235
3502
  }
3236
3503
  }
@@ -3240,14 +3507,6 @@
3240
3507
  }
3241
3508
  }
3242
3509
 
3243
- exports.DockviewDropTargets = void 0;
3244
- (function (DockviewDropTargets) {
3245
- DockviewDropTargets[DockviewDropTargets["Tab"] = 0] = "Tab";
3246
- DockviewDropTargets[DockviewDropTargets["Panel"] = 1] = "Panel";
3247
- DockviewDropTargets[DockviewDropTargets["TabContainer"] = 2] = "TabContainer";
3248
- DockviewDropTargets[DockviewDropTargets["Edge"] = 3] = "Edge";
3249
- })(exports.DockviewDropTargets || (exports.DockviewDropTargets = {}));
3250
-
3251
3510
  class DragHandler extends CompositeDisposable {
3252
3511
  constructor(el) {
3253
3512
  super();
@@ -3422,7 +3681,7 @@
3422
3681
  }, true));
3423
3682
  }
3424
3683
  isCancelled(_event) {
3425
- if (this.group.api.isFloating && !_event.shiftKey) {
3684
+ if (this.group.api.location === 'floating' && !_event.shiftKey) {
3426
3685
  return true;
3427
3686
  }
3428
3687
  return false;
@@ -3624,7 +3883,7 @@
3624
3883
  const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
3625
3884
  if (isFloatingGroupsEnabled &&
3626
3885
  event.shiftKey &&
3627
- !this.group.api.isFloating) {
3886
+ this.group.api.location !== 'floating') {
3628
3887
  event.preventDefault();
3629
3888
  const { top, left } = this.element.getBoundingClientRect();
3630
3889
  const { top: rootTop, left: rootLeft } = this.accessor.element.getBoundingClientRect();
@@ -3689,7 +3948,7 @@
3689
3948
  }), tab.onChanged((event) => {
3690
3949
  var _a;
3691
3950
  const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
3692
- const isFloatingWithOnePanel = this.group.api.isFloating && this.size === 1;
3951
+ const isFloatingWithOnePanel = this.group.api.location === 'floating' && this.size === 1;
3693
3952
  if (isFloatingGroupsEnabled &&
3694
3953
  !isFloatingWithOnePanel &&
3695
3954
  event.shiftKey) {
@@ -3772,15 +4031,37 @@
3772
4031
  }
3773
4032
  return isAncestor(document.activeElement, this.contentContainer.element);
3774
4033
  }
3775
- get isFloating() {
3776
- return this._isFloating;
3777
- }
3778
- set isFloating(value) {
3779
- this._isFloating = value;
3780
- this.dropTarget.setTargetZones(value ? ['center'] : ['top', 'bottom', 'left', 'right', 'center']);
3781
- toggleClass(this.container, 'dv-groupview-floating', value);
3782
- this.groupPanel.api._onDidFloatingStateChange.fire({
3783
- isFloating: this.isFloating,
4034
+ get location() {
4035
+ return this._location;
4036
+ }
4037
+ set location(value) {
4038
+ this._location = value;
4039
+ toggleClass(this.container, 'dv-groupview-floating', false);
4040
+ toggleClass(this.container, 'dv-groupview-popout', false);
4041
+ switch (value) {
4042
+ case 'grid':
4043
+ this.contentContainer.dropTarget.setTargetZones([
4044
+ 'top',
4045
+ 'bottom',
4046
+ 'left',
4047
+ 'right',
4048
+ 'center',
4049
+ ]);
4050
+ break;
4051
+ case 'floating':
4052
+ this.contentContainer.dropTarget.setTargetZones(['center']);
4053
+ this.contentContainer.dropTarget.setTargetZones(value
4054
+ ? ['center']
4055
+ : ['top', 'bottom', 'left', 'right', 'center']);
4056
+ toggleClass(this.container, 'dv-groupview-floating', true);
4057
+ break;
4058
+ case 'popout':
4059
+ this.contentContainer.dropTarget.setTargetZones(['center']);
4060
+ toggleClass(this.container, 'dv-groupview-popout', true);
4061
+ break;
4062
+ }
4063
+ this.groupPanel.api._onDidLocationChange.fire({
4064
+ location: this.location,
3784
4065
  });
3785
4066
  }
3786
4067
  constructor(container, accessor, id, options, groupPanel) {
@@ -3793,7 +4074,7 @@
3793
4074
  this.groupPanel = groupPanel;
3794
4075
  this._isGroupActive = false;
3795
4076
  this._locked = false;
3796
- this._isFloating = false;
4077
+ this._location = 'grid';
3797
4078
  this.mostRecentlyUsed = [];
3798
4079
  this._onDidChange = new Emitter();
3799
4080
  this.onDidChange = this._onDidChange.event;
@@ -3816,35 +4097,7 @@
3816
4097
  this.onDidActivePanelChange = this._onDidActivePanelChange.event;
3817
4098
  toggleClass(this.container, 'groupview', true);
3818
4099
  this.tabsContainer = new TabsContainer(this.accessor, this.groupPanel);
3819
- this.contentContainer = new ContentContainer();
3820
- this.dropTarget = new Droptarget(this.contentContainer.element, {
3821
- acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
3822
- canDisplayOverlay: (event, position) => {
3823
- if (this.locked === 'no-drop-target' ||
3824
- (this.locked && position === 'center')) {
3825
- return false;
3826
- }
3827
- const data = getPanelData();
3828
- if (!data && event.shiftKey && !this.isFloating) {
3829
- return false;
3830
- }
3831
- if (data && data.viewId === this.accessor.id) {
3832
- if (data.groupId === this.id) {
3833
- if (position === 'center') {
3834
- // don't allow to drop on self for center position
3835
- return false;
3836
- }
3837
- if (data.panelId === null) {
3838
- // don't allow group move to drop anywhere on self
3839
- return false;
3840
- }
3841
- }
3842
- const groupHasOnePanelAndIsActiveDragElement = this._panels.length === 1 && data.groupId === this.id;
3843
- return !groupHasOnePanelAndIsActiveDragElement;
3844
- }
3845
- return this.canDisplayOverlay(event, position, exports.DockviewDropTargets.Panel);
3846
- },
3847
- });
4100
+ this.contentContainer = new ContentContainer(this.accessor, this);
3848
4101
  container.append(this.tabsContainer.element, this.contentContainer.element);
3849
4102
  this.header.hidden = !!options.hideHeader;
3850
4103
  this.locked = (_a = options.locked) !== null && _a !== void 0 ? _a : false;
@@ -3858,7 +4111,7 @@
3858
4111
  this.accessor.doSetGroupActive(this.groupPanel, true);
3859
4112
  }), this.contentContainer.onDidBlur(() => {
3860
4113
  // noop
3861
- }), this.dropTarget.onDrop((event) => {
4114
+ }), this.contentContainer.dropTarget.onDrop((event) => {
3862
4115
  this.handleDropEvent(event.nativeEvent, event.position);
3863
4116
  }), this._onMove, this._onDidChange, this._onDidDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange);
3864
4117
  }
@@ -3907,6 +4160,9 @@
3907
4160
  this.tabsContainer.setPrefixActionsElement(this._prefixHeaderActions.element);
3908
4161
  }
3909
4162
  }
4163
+ rerender(panel) {
4164
+ this.contentContainer.renderPanel(panel, { asActive: false });
4165
+ }
3910
4166
  indexOf(panel) {
3911
4167
  return this.tabsContainer.indexOf(panel.id);
3912
4168
  }
@@ -4098,12 +4354,12 @@
4098
4354
  doAddPanel(panel, index = this.panels.length, skipSetActive = false) {
4099
4355
  const existingPanel = this._panels.indexOf(panel);
4100
4356
  const hasExistingPanel = existingPanel > -1;
4357
+ this.tabsContainer.show();
4358
+ this.contentContainer.show();
4101
4359
  this.tabsContainer.openPanel(panel, index);
4102
4360
  if (!skipSetActive) {
4103
4361
  this.contentContainer.openPanel(panel);
4104
4362
  }
4105
- this.tabsContainer.show();
4106
- this.contentContainer.show();
4107
4363
  if (hasExistingPanel) {
4108
4364
  // TODO - need to ensure ordering hasn't changed and if it has need to re-order this.panels
4109
4365
  return;
@@ -4219,7 +4475,6 @@
4219
4475
  for (const panel of this.panels) {
4220
4476
  panel.dispose();
4221
4477
  }
4222
- this.dropTarget.dispose();
4223
4478
  this.tabsContainer.dispose();
4224
4479
  this.contentContainer.dispose();
4225
4480
  }
@@ -4258,7 +4513,22 @@
4258
4513
  if (this.disableResizing) {
4259
4514
  return;
4260
4515
  }
4261
- if (!document.body.contains(this._element)) {
4516
+ if (!this._element.offsetParent) {
4517
+ /**
4518
+ * offsetParent === null is equivalent to display: none being set on the element or one
4519
+ * of it's parents. In the display: none case the size will become (0, 0) which we do
4520
+ * not want to propagate.
4521
+ *
4522
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent
4523
+ *
4524
+ * You could use checkVisibility() but at the time of writing it's not supported across
4525
+ * all Browsers
4526
+ *
4527
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/checkVisibility
4528
+ */
4529
+ return;
4530
+ }
4531
+ if (!isInDocument(this._element)) {
4262
4532
  /**
4263
4533
  * since the event is dispatched through requestAnimationFrame there is a small chance
4264
4534
  * the component is no longer attached to the DOM, if that is the case the dimensions
@@ -4350,6 +4620,21 @@
4350
4620
  isVisible(panel) {
4351
4621
  return this.gridview.isViewVisible(getGridLocation(panel.element));
4352
4622
  }
4623
+ maximizeGroup(panel) {
4624
+ this.gridview.maximizeView(panel);
4625
+ }
4626
+ isMaximizedGroup(panel) {
4627
+ return this.gridview.maximizedView() === panel;
4628
+ }
4629
+ exitMaximizedGroup() {
4630
+ this.gridview.exitMaximizedView();
4631
+ }
4632
+ hasMaximizedGroup() {
4633
+ return this.gridview.hasMaximizedView();
4634
+ }
4635
+ get onDidMaxmizedGroupChange() {
4636
+ return this.gridview.onDidMaxmizedNodeChange;
4637
+ }
4353
4638
  doAddGroup(group, location = [0], size) {
4354
4639
  this.gridview.addView(group, size !== null && size !== void 0 ? size : exports.Sizing.Distribute, location);
4355
4640
  this._onDidAddGroup.fire(group);
@@ -5126,32 +5411,63 @@
5126
5411
  }
5127
5412
  }
5128
5413
 
5414
+ // TODO find a better way to initialize and avoid needing null checks
5415
+ const NOT_INITIALIZED_MESSAGE = 'DockviewGroupPanelApiImpl not initialized';
5129
5416
  class DockviewGroupPanelApiImpl extends GridviewPanelApiImpl {
5130
- get isFloating() {
5417
+ get location() {
5131
5418
  if (!this._group) {
5132
- throw new Error(`DockviewGroupPanelApiImpl not initialized`);
5419
+ throw new Error(NOT_INITIALIZED_MESSAGE);
5133
5420
  }
5134
- return this._group.model.isFloating;
5421
+ return this._group.model.location;
5135
5422
  }
5136
5423
  constructor(id, accessor) {
5137
5424
  super(id);
5138
5425
  this.accessor = accessor;
5139
- this._onDidFloatingStateChange = new Emitter();
5140
- this.onDidFloatingStateChange = this._onDidFloatingStateChange.event;
5141
- this.addDisposables(this._onDidFloatingStateChange);
5426
+ this._onDidLocationChange = new Emitter();
5427
+ this.onDidLocationChange = this._onDidLocationChange.event;
5428
+ this.addDisposables(this._onDidLocationChange);
5142
5429
  }
5143
5430
  moveTo(options) {
5144
- var _a;
5431
+ var _a, _b, _c;
5432
+ if (!this._group) {
5433
+ throw new Error(NOT_INITIALIZED_MESSAGE);
5434
+ }
5435
+ const group = (_a = options.group) !== null && _a !== void 0 ? _a : this.accessor.addGroup({
5436
+ direction: positionToDirection((_b = options.position) !== null && _b !== void 0 ? _b : 'right'),
5437
+ });
5438
+ this.accessor.moveGroupOrPanel(group, this._group.id, undefined, options.group ? (_c = options.position) !== null && _c !== void 0 ? _c : 'center' : 'center');
5439
+ }
5440
+ maximize() {
5441
+ if (!this._group) {
5442
+ throw new Error(NOT_INITIALIZED_MESSAGE);
5443
+ }
5444
+ if (this.location !== 'grid') {
5445
+ // only grid groups can be maximized
5446
+ return;
5447
+ }
5448
+ this.accessor.maximizeGroup(this._group);
5449
+ }
5450
+ isMaximized() {
5145
5451
  if (!this._group) {
5146
- throw new Error(`DockviewGroupPanelApiImpl not initialized`);
5452
+ throw new Error(NOT_INITIALIZED_MESSAGE);
5453
+ }
5454
+ return this.accessor.isMaximizedGroup(this._group);
5455
+ }
5456
+ exitMaximized() {
5457
+ if (!this._group) {
5458
+ throw new Error(NOT_INITIALIZED_MESSAGE);
5459
+ }
5460
+ if (this.isMaximized()) {
5461
+ this.accessor.exitMaximizedGroup();
5147
5462
  }
5148
- this.accessor.moveGroupOrPanel(options.group, this._group.id, undefined, (_a = options.position) !== null && _a !== void 0 ? _a : 'center');
5149
5463
  }
5150
5464
  initialize(group) {
5151
5465
  this._group = group;
5152
5466
  }
5153
5467
  }
5154
5468
 
5469
+ const MINIMUM_DOCKVIEW_GROUP_PANEL_WIDTH = 100;
5470
+ const MINIMUM_DOCKVIEW_GROUP_PANEL_HEIGHT = 100;
5155
5471
  class DockviewGroupPanel extends GridviewPanel {
5156
5472
  get panels() {
5157
5473
  return this._model.panels;
@@ -5176,8 +5492,8 @@
5176
5492
  }
5177
5493
  constructor(accessor, id, options) {
5178
5494
  super(id, 'groupview_default', {
5179
- minimumHeight: 100,
5180
- minimumWidth: 100,
5495
+ minimumHeight: MINIMUM_DOCKVIEW_GROUP_PANEL_HEIGHT,
5496
+ minimumWidth: MINIMUM_DOCKVIEW_GROUP_PANEL_WIDTH,
5181
5497
  }, new DockviewGroupPanelApiImpl(id, accessor));
5182
5498
  this.api.initialize(this); // cannot use 'this' after after 'super' call
5183
5499
  this._model = new DockviewGroupPanelModel(this.element, accessor, id, options, this);
@@ -5231,8 +5547,10 @@
5231
5547
  return this.panel.title;
5232
5548
  }
5233
5549
  get isGroupActive() {
5234
- var _a;
5235
- return !!((_a = this.group) === null || _a === void 0 ? void 0 : _a.isActive);
5550
+ return this.group.isActive;
5551
+ }
5552
+ get renderer() {
5553
+ return this.panel.renderer;
5236
5554
  }
5237
5555
  set group(value) {
5238
5556
  const isOldGroupActive = this.isGroupActive;
@@ -5260,10 +5578,12 @@
5260
5578
  this.onDidActiveGroupChange = this._onDidActiveGroupChange.event;
5261
5579
  this._onDidGroupChange = new Emitter();
5262
5580
  this.onDidGroupChange = this._onDidGroupChange.event;
5581
+ this._onDidRendererChange = new Emitter();
5582
+ this.onDidRendererChange = this._onDidRendererChange.event;
5263
5583
  this.disposable = new MutableDisposable();
5264
5584
  this.initialize(panel);
5265
5585
  this._group = group;
5266
- this.addDisposables(this.disposable, this._onDidTitleChange, this._onDidGroupChange, this._onDidActiveGroupChange);
5586
+ this.addDisposables(this.disposable, this._onDidRendererChange, this._onDidTitleChange, this._onDidGroupChange, this._onDidActiveGroupChange);
5267
5587
  }
5268
5588
  moveTo(options) {
5269
5589
  var _a;
@@ -5272,9 +5592,21 @@
5272
5592
  setTitle(title) {
5273
5593
  this.panel.setTitle(title);
5274
5594
  }
5595
+ setRenderer(renderer) {
5596
+ this.panel.setRenderer(renderer);
5597
+ }
5275
5598
  close() {
5276
5599
  this.group.model.closePanel(this.panel);
5277
5600
  }
5601
+ maximize() {
5602
+ this.group.api.maximize();
5603
+ }
5604
+ isMaximized() {
5605
+ return this.group.api.isMaximized();
5606
+ }
5607
+ exitMaximized() {
5608
+ this.group.api.exitMaximized();
5609
+ }
5278
5610
  }
5279
5611
 
5280
5612
  class DockviewPanel extends CompositeDisposable {
@@ -5287,11 +5619,17 @@
5287
5619
  get group() {
5288
5620
  return this._group;
5289
5621
  }
5290
- constructor(id, accessor, containerApi, group, view) {
5622
+ get renderer() {
5623
+ var _a;
5624
+ return (_a = this._renderer) !== null && _a !== void 0 ? _a : this.accessor.renderer;
5625
+ }
5626
+ constructor(id, accessor, containerApi, group, view, options) {
5291
5627
  super();
5292
5628
  this.id = id;
5629
+ this.accessor = accessor;
5293
5630
  this.containerApi = containerApi;
5294
5631
  this.view = view;
5632
+ this._renderer = options.renderer;
5295
5633
  this._group = group;
5296
5634
  this.api = new DockviewPanelApiImpl(this, this._group, accessor);
5297
5635
  this.addDisposables(this.api.onActiveChange(() => {
@@ -5300,6 +5638,8 @@
5300
5638
  // forward the resize event to the group since if you want to resize a panel
5301
5639
  // you are actually just resizing the panels parent which is the group
5302
5640
  this.group.api.setSize(event);
5641
+ }), this.api.onDidRendererChange((event) => {
5642
+ this.group.model.rerender(this);
5303
5643
  }));
5304
5644
  }
5305
5645
  init(params) {
@@ -5319,6 +5659,7 @@
5319
5659
  ? this._params
5320
5660
  : undefined,
5321
5661
  title: this.title,
5662
+ renderer: this._renderer,
5322
5663
  };
5323
5664
  }
5324
5665
  setTitle(title) {
@@ -5334,6 +5675,15 @@
5334
5675
  this.api._onDidTitleChange.fire({ title });
5335
5676
  }
5336
5677
  }
5678
+ setRenderer(renderer) {
5679
+ const didChange = renderer !== this.renderer;
5680
+ if (didChange) {
5681
+ this._renderer = renderer;
5682
+ this.api._onDidRendererChange.fire({
5683
+ renderer: renderer,
5684
+ });
5685
+ }
5686
+ }
5337
5687
  update(event) {
5338
5688
  var _a;
5339
5689
  // merge the new parameters with the existing parameters
@@ -5552,8 +5902,8 @@
5552
5902
  }
5553
5903
 
5554
5904
  class DefaultDockviewDeserialzier {
5555
- constructor(layout) {
5556
- this.layout = layout;
5905
+ constructor(accessor) {
5906
+ this.accessor = accessor;
5557
5907
  }
5558
5908
  fromJSON(panelData, group) {
5559
5909
  var _a, _b;
@@ -5567,8 +5917,10 @@
5567
5917
  const tabComponent = viewData
5568
5918
  ? (_b = viewData.tab) === null || _b === void 0 ? void 0 : _b.id
5569
5919
  : panelData.tabComponent;
5570
- const view = new DockviewPanelModel(this.layout, panelId, contentComponent, tabComponent);
5571
- const panel = new DockviewPanel(panelId, this.layout, new DockviewApi(this.layout), group, view);
5920
+ const view = new DockviewPanelModel(this.accessor, panelId, contentComponent, tabComponent);
5921
+ const panel = new DockviewPanel(panelId, this.accessor, new DockviewApi(this.accessor), group, view, {
5922
+ renderer: panelData.renderer,
5923
+ });
5572
5924
  panel.init({
5573
5925
  title: title !== null && title !== void 0 ? title : panelId,
5574
5926
  params: params !== null && params !== void 0 ? params : {},
@@ -5948,7 +6300,265 @@
5948
6300
  }
5949
6301
  }
5950
6302
 
6303
+ class PopoutWindow extends CompositeDisposable {
6304
+ constructor(id, className, options) {
6305
+ super();
6306
+ this.id = id;
6307
+ this.className = className;
6308
+ this.options = options;
6309
+ this._onDidClose = new Emitter();
6310
+ this.onDidClose = this._onDidClose.event;
6311
+ this._window = null;
6312
+ this.addDisposables(this._onDidClose, {
6313
+ dispose: () => {
6314
+ this.close();
6315
+ },
6316
+ });
6317
+ }
6318
+ dimensions() {
6319
+ if (!this._window) {
6320
+ return null;
6321
+ }
6322
+ const left = this._window.value.screenX;
6323
+ const top = this._window.value.screenY;
6324
+ const width = this._window.value.innerWidth;
6325
+ const height = this._window.value.innerHeight;
6326
+ return { top, left, width, height };
6327
+ }
6328
+ close() {
6329
+ if (this._window) {
6330
+ this._window.disposable.dispose();
6331
+ this._window.value.close();
6332
+ this._window = null;
6333
+ }
6334
+ }
6335
+ open(content) {
6336
+ if (this._window) {
6337
+ throw new Error('instance of popout window is already open');
6338
+ }
6339
+ const url = `${this.options.url}`;
6340
+ const features = Object.entries({
6341
+ top: this.options.top,
6342
+ left: this.options.left,
6343
+ width: this.options.width,
6344
+ height: this.options.height,
6345
+ })
6346
+ .map(([key, value]) => `${key}=${value}`)
6347
+ .join(',');
6348
+ // https://developer.mozilla.org/en-US/docs/Web/API/Window/open
6349
+ const externalWindow = window.open(url, this.id, features);
6350
+ if (!externalWindow) {
6351
+ return;
6352
+ }
6353
+ const disposable = new CompositeDisposable();
6354
+ this._window = { value: externalWindow, disposable };
6355
+ const cleanUp = () => {
6356
+ this._onDidClose.fire();
6357
+ this._window = null;
6358
+ };
6359
+ // prevent any default content from loading
6360
+ // externalWindow.document.body.replaceWith(document.createElement('div'));
6361
+ disposable.addDisposables(addDisposableWindowListener(window, 'beforeunload', () => {
6362
+ cleanUp();
6363
+ this.close();
6364
+ }));
6365
+ externalWindow.addEventListener('load', () => {
6366
+ const externalDocument = externalWindow.document;
6367
+ externalDocument.title = document.title;
6368
+ const div = document.createElement('div');
6369
+ div.classList.add('dv-popout-window');
6370
+ div.style.position = 'absolute';
6371
+ div.style.width = '100%';
6372
+ div.style.height = '100%';
6373
+ div.style.top = '0px';
6374
+ div.style.left = '0px';
6375
+ div.classList.add(this.className);
6376
+ div.appendChild(content);
6377
+ externalDocument.body.replaceChildren(div);
6378
+ externalDocument.body.classList.add(this.className);
6379
+ addStyles(externalDocument, window.document.styleSheets);
6380
+ externalWindow.addEventListener('beforeunload', () => {
6381
+ // TODO: indicate external window is closing
6382
+ cleanUp();
6383
+ });
6384
+ });
6385
+ }
6386
+ }
6387
+
6388
+ class DockviewPopoutGroupPanel extends CompositeDisposable {
6389
+ constructor(id, group, options) {
6390
+ var _a;
6391
+ super();
6392
+ this.id = id;
6393
+ this.group = group;
6394
+ this.options = options;
6395
+ this.window = new PopoutWindow(id, (_a = options.className) !== null && _a !== void 0 ? _a : '', {
6396
+ url: this.options.popoutUrl,
6397
+ left: this.options.box.left,
6398
+ top: this.options.box.top,
6399
+ width: this.options.box.width,
6400
+ height: this.options.box.height,
6401
+ });
6402
+ group.model.location = 'popout';
6403
+ this.addDisposables(this.window, {
6404
+ dispose: () => {
6405
+ group.model.location = 'grid';
6406
+ },
6407
+ }, this.window.onDidClose(() => {
6408
+ this.dispose();
6409
+ }));
6410
+ this.window.open(group.element);
6411
+ }
6412
+ }
6413
+
5951
6414
  const DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE = 100;
6415
+ const DEFAULT_FLOATING_GROUP_POSITION = { left: 100, top: 100 };
6416
+
6417
+ function createFocusableElement() {
6418
+ const element = document.createElement('div');
6419
+ element.tabIndex = -1;
6420
+ return element;
6421
+ }
6422
+ class OverlayRenderContainer extends CompositeDisposable {
6423
+ constructor(element) {
6424
+ super();
6425
+ this.element = element;
6426
+ this.map = {};
6427
+ this.addDisposables(Disposable.from(() => {
6428
+ for (const value of Object.values(this.map)) {
6429
+ value.disposable.dispose();
6430
+ value.destroy.dispose();
6431
+ }
6432
+ }));
6433
+ }
6434
+ detatch(panel) {
6435
+ if (this.map[panel.api.id]) {
6436
+ const { disposable, destroy } = this.map[panel.api.id];
6437
+ disposable.dispose();
6438
+ destroy.dispose();
6439
+ delete this.map[panel.api.id];
6440
+ return true;
6441
+ }
6442
+ return false;
6443
+ }
6444
+ attach(options) {
6445
+ const { panel, referenceContainer } = options;
6446
+ if (!this.map[panel.api.id]) {
6447
+ const element = createFocusableElement();
6448
+ element.className = 'dv-render-overlay';
6449
+ this.map[panel.api.id] = {
6450
+ panel,
6451
+ disposable: Disposable.NONE,
6452
+ destroy: Disposable.NONE,
6453
+ element,
6454
+ };
6455
+ }
6456
+ const focusContainer = this.map[panel.api.id].element;
6457
+ if (panel.view.content.element.parentElement !== focusContainer) {
6458
+ focusContainer.appendChild(panel.view.content.element);
6459
+ }
6460
+ if (focusContainer.parentElement !== this.element) {
6461
+ this.element.appendChild(focusContainer);
6462
+ }
6463
+ const resize = () => {
6464
+ // TODO propagate position to avoid getDomNodePagePosition calls, possible performance bottleneck?
6465
+ const box = getDomNodePagePosition(referenceContainer.element);
6466
+ const box2 = getDomNodePagePosition(this.element);
6467
+ focusContainer.style.left = `${box.left - box2.left}px`;
6468
+ focusContainer.style.top = `${box.top - box2.top}px`;
6469
+ focusContainer.style.width = `${box.width}px`;
6470
+ focusContainer.style.height = `${box.height}px`;
6471
+ toggleClass(focusContainer, 'dv-render-overlay-float', panel.group.api.location === 'floating');
6472
+ };
6473
+ const visibilityChanged = () => {
6474
+ if (panel.api.isVisible) {
6475
+ resize();
6476
+ }
6477
+ focusContainer.style.display = panel.api.isVisible ? '' : 'none';
6478
+ };
6479
+ const disposable = new CompositeDisposable(
6480
+ /**
6481
+ * since container is positioned absoutely we must explicitly forward
6482
+ * the dnd events for the expect behaviours to continue to occur in terms of dnd
6483
+ *
6484
+ * the dnd observer does not need to be conditional on whether the panel is visible since
6485
+ * non-visible panels are 'display: none' and in such case the dnd observer will not fire.
6486
+ */
6487
+ new DragAndDropObserver(focusContainer, {
6488
+ onDragEnd: (e) => {
6489
+ referenceContainer.dropTarget.dnd.onDragEnd(e);
6490
+ },
6491
+ onDragEnter: (e) => {
6492
+ referenceContainer.dropTarget.dnd.onDragEnter(e);
6493
+ },
6494
+ onDragLeave: (e) => {
6495
+ referenceContainer.dropTarget.dnd.onDragLeave(e);
6496
+ },
6497
+ onDrop: (e) => {
6498
+ referenceContainer.dropTarget.dnd.onDrop(e);
6499
+ },
6500
+ onDragOver: (e) => {
6501
+ referenceContainer.dropTarget.dnd.onDragOver(e);
6502
+ },
6503
+ }), panel.api.onDidVisibilityChange((event) => {
6504
+ /**
6505
+ * Control the visibility of the content, however even when not visible (display: none)
6506
+ * the content is still maintained within the DOM hence DOM specific attributes
6507
+ * such as scroll position are maintained when next made visible.
6508
+ */
6509
+ visibilityChanged();
6510
+ }), panel.api.onDidDimensionsChange(() => {
6511
+ if (!panel.api.isVisible) {
6512
+ return;
6513
+ }
6514
+ resize();
6515
+ }));
6516
+ this.map[panel.api.id].destroy = Disposable.from(() => {
6517
+ focusContainer.removeChild(panel.view.content.element);
6518
+ this.element.removeChild(focusContainer);
6519
+ });
6520
+ queueMicrotask(() => {
6521
+ if (this.isDisposed) {
6522
+ return;
6523
+ }
6524
+ /**
6525
+ * wait until everything has finished in the current stack-frame call before
6526
+ * calling the first resize as other size-altering events may still occur before
6527
+ * the end of the stack-frame.
6528
+ */
6529
+ visibilityChanged();
6530
+ });
6531
+ // dispose of logic asoccciated with previous reference-container
6532
+ this.map[panel.api.id].disposable.dispose();
6533
+ // and reset the disposable to the active reference-container
6534
+ this.map[panel.api.id].disposable = disposable;
6535
+ return focusContainer;
6536
+ }
6537
+ }
6538
+
6539
+ const DEFAULT_ROOT_OVERLAY_MODEL = {
6540
+ activationSize: { type: 'pixels', value: 10 },
6541
+ size: { type: 'pixels', value: 20 },
6542
+ };
6543
+ function getTheme(element) {
6544
+ function toClassList(element) {
6545
+ const list = [];
6546
+ for (let i = 0; i < element.classList.length; i++) {
6547
+ list.push(element.classList.item(i));
6548
+ }
6549
+ return list;
6550
+ }
6551
+ let theme = undefined;
6552
+ let parent = element;
6553
+ while (parent !== null) {
6554
+ theme = toClassList(parent).find((cls) => cls.startsWith('dockview-theme-'));
6555
+ if (typeof theme === 'string') {
6556
+ break;
6557
+ }
6558
+ parent = parent.parentElement;
6559
+ }
6560
+ return theme;
6561
+ }
5952
6562
  class DockviewComponent extends BaseGrid {
5953
6563
  get orientation() {
5954
6564
  return this.gridview.orientation;
@@ -5969,8 +6579,12 @@
5969
6579
  }
5970
6580
  return activeGroup.activePanel;
5971
6581
  }
5972
- constructor(options) {
6582
+ get renderer() {
5973
6583
  var _a;
6584
+ return (_a = this.options.defaultRenderer) !== null && _a !== void 0 ? _a : 'onlyWhenVisibile';
6585
+ }
6586
+ constructor(options) {
6587
+ var _a, _b;
5974
6588
  super({
5975
6589
  proportionalLayout: true,
5976
6590
  orientation: (_a = options.orientation) !== null && _a !== void 0 ? _a : exports.Orientation.HORIZONTAL,
@@ -5995,12 +6609,27 @@
5995
6609
  this.onDidLayoutFromJSON = this._onDidLayoutFromJSON.event;
5996
6610
  this._onDidActivePanelChange = new Emitter();
5997
6611
  this.onDidActivePanelChange = this._onDidActivePanelChange.event;
5998
- this.floatingGroups = [];
6612
+ this._floatingGroups = [];
6613
+ this._popoutGroups = [];
6614
+ const gready = document.createElement('div');
6615
+ gready.className = 'dv-overlay-render-container';
6616
+ this.gridview.element.appendChild(gready);
6617
+ this.overlayRenderContainer = new OverlayRenderContainer(gready);
5999
6618
  toggleClass(this.gridview.element, 'dv-dockview', true);
6000
- this.addDisposables(this._onWillDragPanel, this._onWillDragGroup, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, exports.DockviewEvent.any(this.onDidAddGroup, this.onDidRemoveGroup)(() => {
6619
+ toggleClass(this.element, 'dv-debug', !!options.debug);
6620
+ this.addDisposables(this.overlayRenderContainer, this._onWillDragPanel, this._onWillDragGroup, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, exports.DockviewEvent.any(this.onDidAddGroup, this.onDidRemoveGroup)(() => {
6001
6621
  this.updateWatermark();
6002
6622
  }), exports.DockviewEvent.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidActivePanelChange)(() => {
6003
6623
  this._bufferOnDidLayoutChange.fire();
6624
+ }), Disposable.from(() => {
6625
+ // iterate over a copy of the array since .dispose() mutates the original array
6626
+ for (const group of [...this._floatingGroups]) {
6627
+ group.dispose();
6628
+ }
6629
+ // iterate over a copy of the array since .dispose() mutates the original array
6630
+ for (const group of [...this._popoutGroups]) {
6631
+ group.dispose();
6632
+ }
6004
6633
  }));
6005
6634
  this._options = options;
6006
6635
  if (!this.options.components) {
@@ -6019,7 +6648,7 @@
6019
6648
  !this.options.watermarkFrameworkComponent) {
6020
6649
  this.options.watermarkComponent = Watermark;
6021
6650
  }
6022
- const dropTarget = new Droptarget(this.element, {
6651
+ this._rootDropTarget = new Droptarget(this.element, {
6023
6652
  canDisplayOverlay: (event, position) => {
6024
6653
  const data = getPanelData();
6025
6654
  if (data) {
@@ -6052,12 +6681,9 @@
6052
6681
  return false;
6053
6682
  },
6054
6683
  acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
6055
- overlayModel: {
6056
- activationSize: { type: 'pixels', value: 10 },
6057
- size: { type: 'pixels', value: 20 },
6058
- },
6684
+ overlayModel: (_b = this.options.rootOverlayModel) !== null && _b !== void 0 ? _b : DEFAULT_ROOT_OVERLAY_MODEL,
6059
6685
  });
6060
- this.addDisposables(dropTarget.onDrop((event) => {
6686
+ this.addDisposables(this._rootDropTarget.onDrop((event) => {
6061
6687
  var _a;
6062
6688
  const data = getPanelData();
6063
6689
  if (data) {
@@ -6066,10 +6692,59 @@
6066
6692
  else {
6067
6693
  this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api, group: null, getData: getPanelData }));
6068
6694
  }
6069
- }), dropTarget);
6695
+ }), this._rootDropTarget);
6070
6696
  this._api = new DockviewApi(this);
6071
6697
  this.updateWatermark();
6072
6698
  }
6699
+ addPopoutGroup(item, options) {
6700
+ var _a;
6701
+ let group;
6702
+ let box = options === null || options === void 0 ? void 0 : options.position;
6703
+ if (item instanceof DockviewPanel) {
6704
+ group = this.createGroup();
6705
+ this.removePanel(item, {
6706
+ removeEmptyGroup: true,
6707
+ skipDispose: true,
6708
+ });
6709
+ group.model.openPanel(item);
6710
+ if (!box) {
6711
+ box = this.element.getBoundingClientRect();
6712
+ }
6713
+ }
6714
+ else {
6715
+ group = item;
6716
+ if (!box) {
6717
+ box = group.element.getBoundingClientRect();
6718
+ }
6719
+ const skip = typeof (options === null || options === void 0 ? void 0 : options.skipRemoveGroup) === 'boolean' &&
6720
+ options.skipRemoveGroup;
6721
+ if (!skip) {
6722
+ this.doRemoveGroup(item, { skipDispose: true });
6723
+ }
6724
+ }
6725
+ const theme = getTheme(this.gridview.element);
6726
+ const popoutWindow = new DockviewPopoutGroupPanel(`${this.id}-${group.id}`, // globally unique within dockview
6727
+ group, {
6728
+ className: theme !== null && theme !== void 0 ? theme : '',
6729
+ popoutUrl: (_a = options === null || options === void 0 ? void 0 : options.popoutUrl) !== null && _a !== void 0 ? _a : '/popout.html',
6730
+ box: {
6731
+ left: window.screenX + box.left,
6732
+ top: window.screenY + box.top,
6733
+ width: box.width,
6734
+ height: box.height,
6735
+ },
6736
+ });
6737
+ popoutWindow.addDisposables({
6738
+ dispose: () => {
6739
+ remove(this._popoutGroups, popoutWindow);
6740
+ this.updateWatermark();
6741
+ },
6742
+ }, popoutWindow.window.onDidClose(() => {
6743
+ this.doAddGroup(group, [0]);
6744
+ }));
6745
+ this._popoutGroups.push(popoutWindow);
6746
+ this.updateWatermark();
6747
+ }
6073
6748
  addFloatingGroup(item, coord, options) {
6074
6749
  var _a, _b, _c, _d, _e, _f;
6075
6750
  let group;
@@ -6089,9 +6764,13 @@
6089
6764
  this.doRemoveGroup(item, { skipDispose: true });
6090
6765
  }
6091
6766
  }
6092
- group.model.isFloating = true;
6093
- const overlayLeft = typeof (coord === null || coord === void 0 ? void 0 : coord.x) === 'number' ? Math.max(coord.x, 0) : 100;
6094
- const overlayTop = typeof (coord === null || coord === void 0 ? void 0 : coord.y) === 'number' ? Math.max(coord.y, 0) : 100;
6767
+ group.model.location = 'floating';
6768
+ const overlayLeft = typeof (coord === null || coord === void 0 ? void 0 : coord.x) === 'number'
6769
+ ? Math.max(coord.x, 0)
6770
+ : DEFAULT_FLOATING_GROUP_POSITION.left;
6771
+ const overlayTop = typeof (coord === null || coord === void 0 ? void 0 : coord.y) === 'number'
6772
+ ? Math.max(coord.y, 0)
6773
+ : DEFAULT_FLOATING_GROUP_POSITION.top;
6095
6774
  const overlay = new Overlay({
6096
6775
  container: this.gridview.element,
6097
6776
  content: group.element,
@@ -6135,12 +6814,12 @@
6135
6814
  }), {
6136
6815
  dispose: () => {
6137
6816
  disposable.dispose();
6138
- group.model.isFloating = false;
6139
- remove(this.floatingGroups, floatingGroupPanel);
6817
+ group.model.location = 'grid';
6818
+ remove(this._floatingGroups, floatingGroupPanel);
6140
6819
  this.updateWatermark();
6141
6820
  },
6142
6821
  });
6143
- this.floatingGroups.push(floatingGroupPanel);
6822
+ this._floatingGroups.push(floatingGroupPanel);
6144
6823
  this.updateWatermark();
6145
6824
  }
6146
6825
  orthogonalize(position) {
@@ -6176,16 +6855,18 @@
6176
6855
  }
6177
6856
  updateOptions(options) {
6178
6857
  var _a, _b;
6179
- const hasOrientationChanged = typeof options.orientation === 'string' &&
6858
+ const changed_orientation = typeof options.orientation === 'string' &&
6180
6859
  this.gridview.orientation !== options.orientation;
6181
- const hasFloatingGroupOptionsChanged = options.floatingGroupBounds !== undefined &&
6860
+ const changed_floatingGroupBounds = options.floatingGroupBounds !== undefined &&
6182
6861
  options.floatingGroupBounds !== this.options.floatingGroupBounds;
6862
+ const changed_rootOverlayOptions = options.rootOverlayModel !== undefined &&
6863
+ options.rootOverlayModel !== this.options.rootOverlayModel;
6183
6864
  this._options = Object.assign(Object.assign({}, this.options), options);
6184
- if (hasOrientationChanged) {
6865
+ if (changed_orientation) {
6185
6866
  this.gridview.orientation = options.orientation;
6186
6867
  }
6187
- if (hasFloatingGroupOptionsChanged) {
6188
- for (const group of this.floatingGroups) {
6868
+ if (changed_floatingGroupBounds) {
6869
+ for (const group of this._floatingGroups) {
6189
6870
  switch (this.options.floatingGroupBounds) {
6190
6871
  case 'boundedWithinViewport':
6191
6872
  group.overlay.minimumInViewportHeight = undefined;
@@ -6206,12 +6887,15 @@
6206
6887
  group.overlay.setBounds({});
6207
6888
  }
6208
6889
  }
6890
+ if (changed_rootOverlayOptions) {
6891
+ this._rootDropTarget.setOverlayModel(options.rootOverlayModel);
6892
+ }
6209
6893
  this.layout(this.gridview.width, this.gridview.height, true);
6210
6894
  }
6211
6895
  layout(width, height, forceResize) {
6212
6896
  super.layout(width, height, forceResize);
6213
- if (this.floatingGroups) {
6214
- for (const floating of this.floatingGroups) {
6897
+ if (this._floatingGroups) {
6898
+ for (const floating of this._floatingGroups) {
6215
6899
  // ensure floting groups stay within visible boundaries
6216
6900
  floating.overlay.setBounds();
6217
6901
  }
@@ -6279,10 +6963,16 @@
6279
6963
  collection[panel.id] = panel.toJSON();
6280
6964
  return collection;
6281
6965
  }, {});
6282
- const floats = this.floatingGroups.map((floatingGroup) => {
6966
+ const floats = this._floatingGroups.map((group) => {
6283
6967
  return {
6284
- data: floatingGroup.group.toJSON(),
6285
- position: floatingGroup.overlay.toJSON(),
6968
+ data: group.group.toJSON(),
6969
+ position: group.overlay.toJSON(),
6970
+ };
6971
+ });
6972
+ const popoutGroups = this._popoutGroups.map((group) => {
6973
+ return {
6974
+ data: group.group.toJSON(),
6975
+ position: group.window.dimensions(),
6286
6976
  };
6287
6977
  });
6288
6978
  const result = {
@@ -6293,10 +6983,13 @@
6293
6983
  if (floats.length > 0) {
6294
6984
  result.floatingGroups = floats;
6295
6985
  }
6986
+ if (popoutGroups.length > 0) {
6987
+ result.popoutGroups = popoutGroups;
6988
+ }
6296
6989
  return result;
6297
6990
  }
6298
6991
  fromJSON(data) {
6299
- var _a;
6992
+ var _a, _b;
6300
6993
  this.clear();
6301
6994
  if (typeof data !== 'object' || data === null) {
6302
6995
  throw new Error('serialized layout must be a non-null object');
@@ -6363,7 +7056,16 @@
6363
7056
  width: position.width,
6364
7057
  }, { skipRemoveGroup: true, inDragMode: false });
6365
7058
  }
6366
- for (const floatingGroup of this.floatingGroups) {
7059
+ const serializedPopoutGroups = (_b = data.popoutGroups) !== null && _b !== void 0 ? _b : [];
7060
+ for (const serializedPopoutGroup of serializedPopoutGroups) {
7061
+ const { data, position } = serializedPopoutGroup;
7062
+ const group = createGroupFromSerializedState(data);
7063
+ this.addPopoutGroup(group, {
7064
+ skipRemoveGroup: true,
7065
+ position: position !== null && position !== void 0 ? position : undefined,
7066
+ });
7067
+ }
7068
+ for (const floatingGroup of this._floatingGroups) {
6367
7069
  floatingGroup.overlay.setBounds();
6368
7070
  }
6369
7071
  if (typeof activeGroup === 'string') {
@@ -6395,7 +7097,7 @@
6395
7097
  this._onDidRemoveGroup.fire(group);
6396
7098
  }
6397
7099
  // iterate over a reassigned array since original array will be modified
6398
- for (const floatingGroup of [...this.floatingGroups]) {
7100
+ for (const floatingGroup of [...this._floatingGroups]) {
6399
7101
  floatingGroup.dispose();
6400
7102
  }
6401
7103
  // fires clean-up events and clears the underlying HTML gridview.
@@ -6487,7 +7189,8 @@
6487
7189
  group.model.openPanel(panel);
6488
7190
  this.doSetGroupAndPanelActive(group);
6489
7191
  }
6490
- else if (referenceGroup.api.isFloating || target === 'center') {
7192
+ else if (referenceGroup.api.location === 'floating' ||
7193
+ target === 'center') {
6491
7194
  panel = this.createPanel(options, referenceGroup);
6492
7195
  referenceGroup.model.openPanel(panel);
6493
7196
  }
@@ -6531,6 +7234,7 @@
6531
7234
  }
6532
7235
  group.model.removePanel(panel);
6533
7236
  if (!options.skipDispose) {
7237
+ this.overlayRenderContainer.detatch(panel);
6534
7238
  panel.dispose();
6535
7239
  }
6536
7240
  if (group.size === 0 && options.removeEmptyGroup) {
@@ -6547,7 +7251,7 @@
6547
7251
  }
6548
7252
  updateWatermark() {
6549
7253
  var _a, _b;
6550
- if (this.groups.filter((x) => !x.api.isFloating).length === 0) {
7254
+ if (this.groups.filter((x) => x.api.location === 'grid').length === 0) {
6551
7255
  if (!this.watermark) {
6552
7256
  this.watermark = this.createWatermarkComponent();
6553
7257
  this.watermark.init({
@@ -6622,19 +7326,40 @@
6622
7326
  }
6623
7327
  }
6624
7328
  doRemoveGroup(group, options) {
6625
- const floatingGroup = this.floatingGroups.find((_) => _.group === group);
6626
- if (floatingGroup) {
6627
- if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
6628
- floatingGroup.group.dispose();
6629
- this._groups.delete(group.id);
6630
- this._onDidRemoveGroup.fire(group);
7329
+ if (group.api.location === 'floating') {
7330
+ const floatingGroup = this._floatingGroups.find((_) => _.group === group);
7331
+ if (floatingGroup) {
7332
+ if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
7333
+ floatingGroup.group.dispose();
7334
+ this._groups.delete(group.id);
7335
+ this._onDidRemoveGroup.fire(group);
7336
+ }
7337
+ remove(this._floatingGroups, floatingGroup);
7338
+ floatingGroup.dispose();
7339
+ if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
7340
+ const groups = Array.from(this._groups.values());
7341
+ this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
7342
+ }
7343
+ return floatingGroup.group;
6631
7344
  }
6632
- floatingGroup.dispose();
6633
- if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
6634
- const groups = Array.from(this._groups.values());
6635
- this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
7345
+ throw new Error('failed to find floating group');
7346
+ }
7347
+ if (group.api.location === 'popout') {
7348
+ const selectedGroup = this._popoutGroups.find((_) => _.group === group);
7349
+ if (selectedGroup) {
7350
+ if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
7351
+ selectedGroup.group.dispose();
7352
+ this._groups.delete(group.id);
7353
+ this._onDidRemoveGroup.fire(group);
7354
+ }
7355
+ selectedGroup.dispose();
7356
+ if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
7357
+ const groups = Array.from(this._groups.values());
7358
+ this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
7359
+ }
7360
+ return selectedGroup.group;
6636
7361
  }
6637
- return floatingGroup.group;
7362
+ throw new Error('failed to find popout group');
6638
7363
  }
6639
7364
  return super.doRemoveGroup(group, options);
6640
7365
  }
@@ -6666,8 +7391,7 @@
6666
7391
  const targetLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, destinationTarget);
6667
7392
  if (sourceGroup && sourceGroup.size < 2) {
6668
7393
  const [targetParentLocation, to] = tail(targetLocation);
6669
- const isFloating = this.floatingGroups.find((x) => x.group === sourceGroup);
6670
- if (!isFloating) {
7394
+ if (sourceGroup.api.location === 'grid') {
6671
7395
  const sourceLocation = getGridLocation(sourceGroup.element);
6672
7396
  const [sourceParentLocation, from] = tail(sourceLocation);
6673
7397
  if (sequenceEquals(sourceParentLocation, targetParentLocation)) {
@@ -6713,12 +7437,25 @@
6713
7437
  }
6714
7438
  }
6715
7439
  else {
6716
- const floatingGroup = this.floatingGroups.find((x) => x.group === sourceGroup);
6717
- if (floatingGroup) {
6718
- floatingGroup.dispose();
6719
- }
6720
- else {
6721
- this.gridview.removeView(getGridLocation(sourceGroup.element));
7440
+ switch (sourceGroup.api.location) {
7441
+ case 'grid':
7442
+ this.gridview.removeView(getGridLocation(sourceGroup.element));
7443
+ break;
7444
+ case 'floating': {
7445
+ const selectedFloatingGroup = this._floatingGroups.find((x) => x.group === sourceGroup);
7446
+ if (!selectedFloatingGroup) {
7447
+ throw new Error('failed to find floating group');
7448
+ }
7449
+ selectedFloatingGroup.dispose();
7450
+ break;
7451
+ }
7452
+ case 'popout': {
7453
+ const selectedPopoutGroup = this._popoutGroups.find((x) => x.group === sourceGroup);
7454
+ if (!selectedPopoutGroup) {
7455
+ throw new Error('failed to find popout group');
7456
+ }
7457
+ selectedPopoutGroup.dispose();
7458
+ }
6722
7459
  }
6723
7460
  const referenceLocation = getGridLocation(referenceGroup.element);
6724
7461
  const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
@@ -6780,7 +7517,7 @@
6780
7517
  const contentComponent = options.component;
6781
7518
  const tabComponent = (_a = options.tabComponent) !== null && _a !== void 0 ? _a : this.options.defaultTabComponent;
6782
7519
  const view = new DockviewPanelModel(this, options.id, contentComponent, tabComponent);
6783
- const panel = new DockviewPanel(options.id, this, this._api, group, view);
7520
+ const panel = new DockviewPanel(options.id, this, this._api, group, view, { renderer: options.renderer });
6784
7521
  panel.init({
6785
7522
  title: (_b = options.title) !== null && _b !== void 0 ? _b : options.id,
6786
7523
  params: (_c = options === null || options === void 0 ? void 0 : options.params) !== null && _c !== void 0 ? _c : {},