dockview-core 1.7.6 → 1.8.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 (214) hide show
  1. package/README.md +2 -1
  2. package/dist/cjs/api/component.api.d.ts +6 -1
  3. package/dist/cjs/api/component.api.d.ts.map +1 -1
  4. package/dist/cjs/api/component.api.js +6 -0
  5. package/dist/cjs/api/component.api.js.map +1 -1
  6. package/dist/cjs/api/dockviewGroupPanelApi.d.ts +30 -0
  7. package/dist/cjs/api/dockviewGroupPanelApi.d.ts.map +1 -0
  8. package/dist/cjs/api/dockviewGroupPanelApi.js +54 -0
  9. package/dist/cjs/api/dockviewGroupPanelApi.js.map +1 -0
  10. package/dist/cjs/api/dockviewPanelApi.d.ts +14 -1
  11. package/dist/cjs/api/dockviewPanelApi.d.ts.map +1 -1
  12. package/dist/cjs/api/dockviewPanelApi.js +6 -1
  13. package/dist/cjs/api/dockviewPanelApi.js.map +1 -1
  14. package/dist/cjs/array.d.ts +1 -0
  15. package/dist/cjs/array.d.ts.map +1 -1
  16. package/dist/cjs/array.js +10 -1
  17. package/dist/cjs/array.js.map +1 -1
  18. package/dist/cjs/dnd/abstractDragHandler.d.ts +1 -0
  19. package/dist/cjs/dnd/abstractDragHandler.d.ts.map +1 -1
  20. package/dist/cjs/dnd/abstractDragHandler.js +7 -0
  21. package/dist/cjs/dnd/abstractDragHandler.js.map +1 -1
  22. package/dist/cjs/dnd/droptarget.d.ts +11 -0
  23. package/dist/cjs/dnd/droptarget.d.ts.map +1 -1
  24. package/dist/cjs/dnd/droptarget.js +32 -9
  25. package/dist/cjs/dnd/droptarget.js.map +1 -1
  26. package/dist/cjs/dnd/groupDragHandler.d.ts +1 -0
  27. package/dist/cjs/dnd/groupDragHandler.d.ts.map +1 -1
  28. package/dist/cjs/dnd/groupDragHandler.js +18 -0
  29. package/dist/cjs/dnd/groupDragHandler.js.map +1 -1
  30. package/dist/cjs/dnd/overlay.d.ts +40 -0
  31. package/dist/cjs/dnd/overlay.d.ts.map +1 -0
  32. package/dist/cjs/dnd/overlay.js +382 -0
  33. package/dist/cjs/dnd/overlay.js.map +1 -0
  34. package/dist/cjs/dockview/components/tab/tab.d.ts +2 -2
  35. package/dist/cjs/dockview/components/tab/tab.d.ts.map +1 -1
  36. package/dist/cjs/dockview/components/tab/tab.js +0 -7
  37. package/dist/cjs/dockview/components/tab/tab.js.map +1 -1
  38. package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts +8 -4
  39. package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts.map +1 -1
  40. package/dist/cjs/dockview/components/titlebar/tabsContainer.js +54 -10
  41. package/dist/cjs/dockview/components/titlebar/tabsContainer.js.map +1 -1
  42. package/dist/cjs/dockview/deserializer.d.ts +2 -2
  43. package/dist/cjs/dockview/deserializer.d.ts.map +1 -1
  44. package/dist/cjs/dockview/deserializer.js.map +1 -1
  45. package/dist/cjs/dockview/dockviewComponent.d.ts +41 -9
  46. package/dist/cjs/dockview/dockviewComponent.d.ts.map +1 -1
  47. package/dist/cjs/dockview/dockviewComponent.js +285 -76
  48. package/dist/cjs/dockview/dockviewComponent.js.map +1 -1
  49. package/dist/cjs/dockview/dockviewFloatingGroupPanel.d.ts +24 -0
  50. package/dist/cjs/dockview/dockviewFloatingGroupPanel.d.ts.map +1 -0
  51. package/dist/cjs/dockview/dockviewFloatingGroupPanel.js +35 -0
  52. package/dist/cjs/dockview/dockviewFloatingGroupPanel.js.map +1 -0
  53. package/dist/cjs/dockview/dockviewGroupPanel.d.ts +5 -6
  54. package/dist/cjs/dockview/dockviewGroupPanel.d.ts.map +1 -1
  55. package/dist/cjs/dockview/dockviewGroupPanel.js +3 -2
  56. package/dist/cjs/dockview/dockviewGroupPanel.js.map +1 -1
  57. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +5 -1
  58. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts.map +1 -1
  59. package/dist/cjs/dockview/dockviewGroupPanelModel.js +43 -12
  60. package/dist/cjs/dockview/dockviewGroupPanelModel.js.map +1 -1
  61. package/dist/cjs/dockview/dockviewPanel.d.ts +2 -2
  62. package/dist/cjs/dockview/dockviewPanel.d.ts.map +1 -1
  63. package/dist/cjs/dockview/dockviewPanel.js +1 -1
  64. package/dist/cjs/dockview/dockviewPanel.js.map +1 -1
  65. package/dist/cjs/dockview/options.d.ts +22 -6
  66. package/dist/cjs/dockview/options.d.ts.map +1 -1
  67. package/dist/cjs/dockview/options.js.map +1 -1
  68. package/dist/cjs/dom.d.ts +5 -3
  69. package/dist/cjs/dom.d.ts.map +1 -1
  70. package/dist/cjs/dom.js +13 -1
  71. package/dist/cjs/dom.js.map +1 -1
  72. package/dist/cjs/events.d.ts.map +1 -1
  73. package/dist/cjs/gridview/branchNode.js +2 -2
  74. package/dist/cjs/gridview/branchNode.js.map +1 -1
  75. package/dist/cjs/gridview/gridview.d.ts.map +1 -1
  76. package/dist/cjs/gridview/gridview.js +9 -7
  77. package/dist/cjs/gridview/gridview.js.map +1 -1
  78. package/dist/cjs/gridview/gridviewComponent.d.ts.map +1 -1
  79. package/dist/cjs/gridview/gridviewComponent.js +4 -1
  80. package/dist/cjs/gridview/gridviewComponent.js.map +1 -1
  81. package/dist/cjs/gridview/gridviewPanel.d.ts +3 -3
  82. package/dist/cjs/gridview/gridviewPanel.d.ts.map +1 -1
  83. package/dist/cjs/gridview/gridviewPanel.js +2 -2
  84. package/dist/cjs/gridview/gridviewPanel.js.map +1 -1
  85. package/dist/cjs/index.d.ts +1 -1
  86. package/dist/cjs/index.d.ts.map +1 -1
  87. package/dist/cjs/index.js +1 -3
  88. package/dist/cjs/index.js.map +1 -1
  89. package/dist/cjs/math.d.ts.map +1 -1
  90. package/dist/cjs/paneview/paneviewComponent.d.ts.map +1 -1
  91. package/dist/cjs/paneview/paneviewComponent.js +4 -1
  92. package/dist/cjs/paneview/paneviewComponent.js.map +1 -1
  93. package/dist/cjs/splitview/splitviewComponent.d.ts.map +1 -1
  94. package/dist/cjs/splitview/splitviewComponent.js +4 -1
  95. package/dist/cjs/splitview/splitviewComponent.js.map +1 -1
  96. package/dist/dockview-core.amd.js +772 -133
  97. package/dist/dockview-core.amd.js.map +1 -0
  98. package/dist/dockview-core.amd.min.js +3 -2
  99. package/dist/dockview-core.amd.min.js.map +1 -0
  100. package/dist/dockview-core.amd.min.noStyle.js +3 -2
  101. package/dist/dockview-core.amd.min.noStyle.js.map +1 -0
  102. package/dist/dockview-core.amd.noStyle.js +771 -132
  103. package/dist/dockview-core.amd.noStyle.js.map +1 -0
  104. package/dist/dockview-core.cjs.js +772 -133
  105. package/dist/dockview-core.cjs.js.map +1 -0
  106. package/dist/dockview-core.esm.js +773 -133
  107. package/dist/dockview-core.esm.js.map +1 -0
  108. package/dist/dockview-core.esm.min.js +3 -2
  109. package/dist/dockview-core.esm.min.js.map +1 -0
  110. package/dist/dockview-core.js +772 -133
  111. package/dist/dockview-core.js.map +1 -0
  112. package/dist/dockview-core.min.js +3 -2
  113. package/dist/dockview-core.min.js.map +1 -0
  114. package/dist/dockview-core.min.noStyle.js +3 -2
  115. package/dist/dockview-core.min.noStyle.js.map +1 -0
  116. package/dist/dockview-core.noStyle.js +771 -132
  117. package/dist/dockview-core.noStyle.js.map +1 -0
  118. package/dist/esm/api/component.api.d.ts +6 -1
  119. package/dist/esm/api/component.api.d.ts.map +1 -1
  120. package/dist/esm/api/component.api.js +6 -0
  121. package/dist/esm/api/component.api.js.map +1 -1
  122. package/dist/esm/api/dockviewGroupPanelApi.d.ts +30 -0
  123. package/dist/esm/api/dockviewGroupPanelApi.d.ts.map +1 -0
  124. package/dist/esm/api/dockviewGroupPanelApi.js +28 -0
  125. package/dist/esm/api/dockviewGroupPanelApi.js.map +1 -0
  126. package/dist/esm/api/dockviewPanelApi.d.ts +14 -1
  127. package/dist/esm/api/dockviewPanelApi.d.ts.map +1 -1
  128. package/dist/esm/api/dockviewPanelApi.js +6 -1
  129. package/dist/esm/api/dockviewPanelApi.js.map +1 -1
  130. package/dist/esm/array.d.ts +1 -0
  131. package/dist/esm/array.d.ts.map +1 -1
  132. package/dist/esm/array.js +8 -0
  133. package/dist/esm/array.js.map +1 -1
  134. package/dist/esm/dnd/abstractDragHandler.d.ts +1 -0
  135. package/dist/esm/dnd/abstractDragHandler.d.ts.map +1 -1
  136. package/dist/esm/dnd/abstractDragHandler.js +7 -0
  137. package/dist/esm/dnd/abstractDragHandler.js.map +1 -1
  138. package/dist/esm/dnd/droptarget.d.ts +11 -0
  139. package/dist/esm/dnd/droptarget.d.ts.map +1 -1
  140. package/dist/esm/dnd/droptarget.js +32 -9
  141. package/dist/esm/dnd/droptarget.js.map +1 -1
  142. package/dist/esm/dnd/groupDragHandler.d.ts +1 -0
  143. package/dist/esm/dnd/groupDragHandler.d.ts.map +1 -1
  144. package/dist/esm/dnd/groupDragHandler.js +18 -0
  145. package/dist/esm/dnd/groupDragHandler.js.map +1 -1
  146. package/dist/esm/dnd/overlay.d.ts +40 -0
  147. package/dist/esm/dnd/overlay.d.ts.map +1 -0
  148. package/dist/esm/dnd/overlay.js +282 -0
  149. package/dist/esm/dnd/overlay.js.map +1 -0
  150. package/dist/esm/dockview/components/tab/tab.d.ts +2 -2
  151. package/dist/esm/dockview/components/tab/tab.d.ts.map +1 -1
  152. package/dist/esm/dockview/components/tab/tab.js +0 -7
  153. package/dist/esm/dockview/components/tab/tab.js.map +1 -1
  154. package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts +8 -4
  155. package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts.map +1 -1
  156. package/dist/esm/dockview/components/titlebar/tabsContainer.js +54 -10
  157. package/dist/esm/dockview/components/titlebar/tabsContainer.js.map +1 -1
  158. package/dist/esm/dockview/deserializer.d.ts +2 -2
  159. package/dist/esm/dockview/deserializer.d.ts.map +1 -1
  160. package/dist/esm/dockview/deserializer.js.map +1 -1
  161. package/dist/esm/dockview/dockviewComponent.d.ts +41 -9
  162. package/dist/esm/dockview/dockviewComponent.d.ts.map +1 -1
  163. package/dist/esm/dockview/dockviewComponent.js +231 -54
  164. package/dist/esm/dockview/dockviewComponent.js.map +1 -1
  165. package/dist/esm/dockview/dockviewFloatingGroupPanel.d.ts +24 -0
  166. package/dist/esm/dockview/dockviewFloatingGroupPanel.d.ts.map +1 -0
  167. package/dist/esm/dockview/dockviewFloatingGroupPanel.js +13 -0
  168. package/dist/esm/dockview/dockviewFloatingGroupPanel.js.map +1 -0
  169. package/dist/esm/dockview/dockviewGroupPanel.d.ts +5 -6
  170. package/dist/esm/dockview/dockviewGroupPanel.d.ts.map +1 -1
  171. package/dist/esm/dockview/dockviewGroupPanel.js +3 -2
  172. package/dist/esm/dockview/dockviewGroupPanel.js.map +1 -1
  173. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +5 -1
  174. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts.map +1 -1
  175. package/dist/esm/dockview/dockviewGroupPanelModel.js +36 -9
  176. package/dist/esm/dockview/dockviewGroupPanelModel.js.map +1 -1
  177. package/dist/esm/dockview/dockviewPanel.d.ts +2 -2
  178. package/dist/esm/dockview/dockviewPanel.d.ts.map +1 -1
  179. package/dist/esm/dockview/dockviewPanel.js +1 -1
  180. package/dist/esm/dockview/dockviewPanel.js.map +1 -1
  181. package/dist/esm/dockview/options.d.ts +22 -6
  182. package/dist/esm/dockview/options.d.ts.map +1 -1
  183. package/dist/esm/dockview/options.js.map +1 -1
  184. package/dist/esm/dom.d.ts +5 -3
  185. package/dist/esm/dom.d.ts.map +1 -1
  186. package/dist/esm/dom.js +10 -0
  187. package/dist/esm/dom.js.map +1 -1
  188. package/dist/esm/events.d.ts.map +1 -1
  189. package/dist/esm/gridview/branchNode.js +2 -2
  190. package/dist/esm/gridview/branchNode.js.map +1 -1
  191. package/dist/esm/gridview/gridview.d.ts.map +1 -1
  192. package/dist/esm/gridview/gridview.js +9 -6
  193. package/dist/esm/gridview/gridview.js.map +1 -1
  194. package/dist/esm/gridview/gridviewComponent.d.ts.map +1 -1
  195. package/dist/esm/gridview/gridviewComponent.js +4 -1
  196. package/dist/esm/gridview/gridviewComponent.js.map +1 -1
  197. package/dist/esm/gridview/gridviewPanel.d.ts +3 -3
  198. package/dist/esm/gridview/gridviewPanel.d.ts.map +1 -1
  199. package/dist/esm/gridview/gridviewPanel.js +2 -2
  200. package/dist/esm/gridview/gridviewPanel.js.map +1 -1
  201. package/dist/esm/index.d.ts +1 -1
  202. package/dist/esm/index.d.ts.map +1 -1
  203. package/dist/esm/index.js +0 -1
  204. package/dist/esm/index.js.map +1 -1
  205. package/dist/esm/math.d.ts.map +1 -1
  206. package/dist/esm/math.js.map +1 -1
  207. package/dist/esm/paneview/paneviewComponent.d.ts.map +1 -1
  208. package/dist/esm/paneview/paneviewComponent.js +4 -1
  209. package/dist/esm/paneview/paneviewComponent.js.map +1 -1
  210. package/dist/esm/splitview/splitviewComponent.d.ts.map +1 -1
  211. package/dist/esm/splitview/splitviewComponent.js +4 -1
  212. package/dist/esm/splitview/splitviewComponent.js.map +1 -1
  213. package/dist/styles/dockview.css +216 -1
  214. package/package.json +5 -5
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * dockview-core
3
- * @version 1.7.6
3
+ * @version 1.8.1
4
4
  * @link https://github.com/mathuo/dockview
5
5
  * @license MIT
6
6
  */
@@ -33,7 +33,7 @@ function styleInject(css, ref) {
33
33
  }
34
34
  }
35
35
 
36
- var css_248z = ".dockview-svg {\n display: inline-block;\n fill: currentcolor;\n line-height: 1;\n stroke: currentcolor;\n stroke-width: 0;\n}\n.dockview-theme-dark {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-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-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-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-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-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.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: 10000;\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-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}\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.split-view-container {\n position: relative;\n overflow: hidden;\n height: 100%;\n width: 100%;\n}\n.split-view-container.animation .view,\n.split-view-container.animation .sash {\n transition-duration: 0.15s;\n transition-timing-function: ease-out;\n}\n.split-view-container.horizontal {\n height: 100%;\n}\n.split-view-container.horizontal > .sash-container > .sash {\n height: 100%;\n width: 4px;\n}\n.split-view-container.horizontal > .sash-container > .sash.enabled {\n cursor: ew-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.horizontal > .sash-container > .sash.maximum {\n cursor: w-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.minimum {\n cursor: e-resize;\n}\n.split-view-container.horizontal > .view-container > .view:not(:first-child)::before {\n height: 100%;\n width: 1px;\n}\n.split-view-container.vertical {\n width: 100%;\n}\n.split-view-container.vertical > .sash-container > .sash {\n width: 100%;\n height: 4px;\n}\n.split-view-container.vertical > .sash-container > .sash.enabled {\n cursor: ns-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.vertical > .sash-container > .sash.maximum {\n cursor: n-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.minimum {\n cursor: s-resize;\n}\n.split-view-container.vertical > .view-container > .view {\n width: 100%;\n}\n.split-view-container.vertical > .view-container > .view:not(:first-child)::before {\n height: 1px;\n width: 100%;\n}\n.split-view-container .sash-container {\n height: 100%;\n width: 100%;\n position: absolute;\n}\n.split-view-container .sash-container .sash {\n position: absolute;\n z-index: 99;\n outline: none;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n touch-action: none;\n}\n.split-view-container .sash-container .sash:active {\n transition: background-color 0.1s ease-in-out;\n background-color: var(--dv-active-sash-color, transparent);\n}\n.split-view-container .sash-container .sash:hover {\n background-color: var(--dv-active-sash-color, transparent);\n transition: background-color 0.1s ease-in-out;\n transition-delay: 0.5s;\n}\n.split-view-container .view-container {\n position: relative;\n height: 100%;\n width: 100%;\n background-color: var(--dv-background-color);\n}\n.split-view-container .view-container .view {\n height: 100%;\n box-sizing: border-box;\n overflow: auto;\n position: absolute;\n}\n.split-view-container.separator-border .view:not(:first-child)::before {\n content: \" \";\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n background-color: var(--dv-separator-border);\n}\n.dv-dragged {\n transform: translate3d(0px, 0px, 0px); /* forces tab to be drawn on a separate layer (see https://github.com/microsoft/vscode/issues/18733) */\n}\n\n.tab {\n flex-shrink: 0;\n}\n.tab.dv-tab-dragging .tab-action {\n background-color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.tab.active-tab > .default-tab .tab-action {\n visibility: visible;\n}\n.tab.inactive-tab > .default-tab .tab-action {\n visibility: hidden;\n}\n.tab.inactive-tab > .default-tab:hover .tab-action {\n visibility: visible;\n}\n.tab .default-tab {\n position: relative;\n height: 100%;\n display: flex;\n min-width: 80px;\n align-items: center;\n padding: 0px 8px;\n white-space: nowrap;\n text-overflow: elipsis;\n}\n.tab .default-tab .tab-content {\n padding: 0px 8px;\n flex-grow: 1;\n}\n.tab .default-tab .action-container {\n text-align: right;\n display: flex;\n}\n.tab .default-tab .action-container .tab-list {\n display: flex;\n padding: 0px;\n margin: 0px;\n justify-content: flex-end;\n}\n.tab .default-tab .action-container .tab-list .tab-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n}\n.tab .default-tab .action-container .tab-list .tab-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}\n.tabs-and-actions-container {\n display: flex;\n background-color: var(--dv-tabs-and-actions-container-background-color);\n flex-shrink: 0;\n box-sizing: border-box;\n height: var(--dv-tabs-and-actions-container-height);\n font-size: var(--dv-tabs-and-actions-container-font-size);\n}\n.tabs-and-actions-container.hidden {\n display: none;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .tabs-container {\n flex-grow: 1;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .tabs-container .tab {\n flex-grow: 1;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .void-container {\n flex-grow: 0;\n}\n.tabs-and-actions-container .void-container {\n display: flex;\n flex-grow: 1;\n cursor: grab;\n}\n.tabs-and-actions-container .tabs-container {\n display: flex;\n overflow-x: overlay;\n overflow-y: hidden;\n scrollbar-width: thin;\n /* Track */\n /* Handle */\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar {\n height: 3px;\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar-track {\n background: transparent;\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar-thumb {\n background: var(--dv-tabs-container-scrollbar-color);\n}\n.tabs-and-actions-container .tabs-container .tab {\n -webkit-user-drag: element;\n outline: none;\n min-width: 75px;\n cursor: pointer;\n position: relative;\n box-sizing: border-box;\n}\n.tabs-and-actions-container .tabs-container .tab:not(:first-child)::before {\n content: \" \";\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n background-color: var(--dv-tab-divider-color);\n width: 1px;\n height: 100%;\n}\n.watermark {\n display: flex;\n width: 100%;\n}\n.watermark.has-actions .watermark-title .actions-container {\n display: none;\n}\n.watermark .watermark-title {\n height: 35px;\n width: 100%;\n display: flex;\n}\n.watermark .watermark-content {\n flex-grow: 1;\n}\n.watermark .actions-container {\n display: flex;\n align-items: center;\n padding: 0px 8px;\n}\n.watermark .actions-container .close-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n cursor: pointer;\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.watermark .actions-container .close-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}";
36
+ var css_248z = ".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}";
37
37
  styleInject(css_248z);
38
38
 
39
39
  class TransferObject {
@@ -303,6 +303,31 @@ class MutableDisposable {
303
303
  }
304
304
  }
305
305
 
306
+ function createComponent(id, componentName, components = {}, frameworkComponents = {}, createFrameworkComponent, fallback) {
307
+ const Component = typeof componentName === 'string'
308
+ ? components[componentName]
309
+ : undefined;
310
+ const FrameworkComponent = typeof componentName === 'string'
311
+ ? frameworkComponents[componentName]
312
+ : undefined;
313
+ if (Component && FrameworkComponent) {
314
+ throw new Error(`Cannot create '${id}'. component '${componentName}' registered as both a component and frameworkComponent`);
315
+ }
316
+ if (FrameworkComponent) {
317
+ if (!createFrameworkComponent) {
318
+ throw new Error(`Cannot create '${id}' for framework component '${componentName}'. you must register a frameworkPanelWrapper to use framework components`);
319
+ }
320
+ return createFrameworkComponent.createComponent(id, componentName, FrameworkComponent);
321
+ }
322
+ if (!Component) {
323
+ if (fallback) {
324
+ return fallback();
325
+ }
326
+ throw new Error(`Cannot create '${id}', no component '${componentName}' provided`);
327
+ }
328
+ return new Component(id, componentName);
329
+ }
330
+
306
331
  function watchElementResize(element, cb) {
307
332
  const observer = new ResizeObserver((entires) => {
308
333
  /**
@@ -416,31 +441,16 @@ class FocusTracker extends CompositeDisposable {
416
441
  refreshState() {
417
442
  this._refreshStateHandler();
418
443
  }
419
- }
420
-
421
- function createComponent(id, componentName, components = {}, frameworkComponents = {}, createFrameworkComponent, fallback) {
422
- const Component = typeof componentName === 'string'
423
- ? components[componentName]
424
- : undefined;
425
- const FrameworkComponent = typeof componentName === 'string'
426
- ? frameworkComponents[componentName]
427
- : undefined;
428
- if (Component && FrameworkComponent) {
429
- throw new Error(`Cannot create '${id}'. component '${componentName}' registered as both a component and frameworkComponent`);
430
- }
431
- if (FrameworkComponent) {
432
- if (!createFrameworkComponent) {
433
- throw new Error(`Cannot create '${id}' for framework component '${componentName}'. you must register a frameworkPanelWrapper to use framework components`);
434
- }
435
- return createFrameworkComponent.createComponent(id, componentName, FrameworkComponent);
436
- }
437
- if (!Component) {
438
- if (fallback) {
439
- return fallback();
440
- }
441
- throw new Error(`Cannot create '${id}', no component '${componentName}' provided`);
442
- }
443
- return new Component(id, componentName);
444
+ }
445
+ // quasi: apparently, but not really; seemingly
446
+ const QUASI_PREVENT_DEFAULT_KEY = 'dv-quasiPreventDefault';
447
+ // mark an event directly for other listeners to check
448
+ function quasiPreventDefault(event) {
449
+ event[QUASI_PREVENT_DEFAULT_KEY] = true;
450
+ }
451
+ // check if this event has been marked
452
+ function quasiDefaultPrevented(event) {
453
+ return event[QUASI_PREVENT_DEFAULT_KEY];
444
454
  }
445
455
 
446
456
  function tail(arr) {
@@ -491,6 +501,14 @@ function firstIndex(array, fn) {
491
501
  }
492
502
  }
493
503
  return -1;
504
+ }
505
+ function remove(array, value) {
506
+ const index = array.findIndex((t) => t === value);
507
+ if (index > -1) {
508
+ array.splice(index, 1);
509
+ return true;
510
+ }
511
+ return false;
494
512
  }
495
513
 
496
514
  const clamp = (value, min, max) => {
@@ -1633,7 +1651,7 @@ class BranchNode extends CompositeDisposable {
1633
1651
  : true,
1634
1652
  };
1635
1653
  }),
1636
- size: this.size,
1654
+ size: this.orthogonalSize,
1637
1655
  };
1638
1656
  this.children = childDescriptors.map((c) => c.node);
1639
1657
  this.splitview = new Splitview(this.element, {
@@ -1696,7 +1714,7 @@ class BranchNode extends CompositeDisposable {
1696
1714
  layout(size, orthogonalSize) {
1697
1715
  this._size = orthogonalSize;
1698
1716
  this._orthogonalSize = size;
1699
- this.splitview.layout(this.size, this.orthogonalSize);
1717
+ this.splitview.layout(orthogonalSize, size);
1700
1718
  }
1701
1719
  addChild(node, size, index, skipLayout) {
1702
1720
  if (index < 0 || index > this.children.length) {
@@ -1921,9 +1939,9 @@ class Gridview {
1921
1939
  this._deserialize(json.root, orientation, deserializer, height);
1922
1940
  }
1923
1941
  _deserialize(root, orientation, deserializer, orthogonalSize) {
1924
- this.root = this._deserializeNode(root, orientation, deserializer, orthogonalSize, true);
1942
+ this.root = this._deserializeNode(root, orientation, deserializer, orthogonalSize);
1925
1943
  }
1926
- _deserializeNode(node, orientation, deserializer, orthogonalSize, isRoot = false) {
1944
+ _deserializeNode(node, orientation, deserializer, orthogonalSize) {
1927
1945
  let result;
1928
1946
  if (node.type === 'branch') {
1929
1947
  const serializedChildren = node.data;
@@ -1933,9 +1951,9 @@ class Gridview {
1933
1951
  visible: serializedChild.visible,
1934
1952
  };
1935
1953
  });
1936
- // HORIZONTAL => height=orthogonalsize width=size
1937
- // VERTICAL => height=size width=orthogonalsize
1938
- result = new BranchNode(orientation, this.proportionalLayout, this.styles, isRoot ? orthogonalSize : node.size, isRoot ? node.size : orthogonalSize, children);
1954
+ result = new BranchNode(orientation, this.proportionalLayout, this.styles, node.size, // <- orthogonal size - flips at each depth
1955
+ orthogonalSize, // <- size - flips at each depth
1956
+ children);
1939
1957
  }
1940
1958
  else {
1941
1959
  result = new LeafNode(deserializer.fromJSON(node), orientation, orthogonalSize, node.size);
@@ -1968,7 +1986,8 @@ class Gridview {
1968
1986
  const oldRoot = this.root;
1969
1987
  oldRoot.element.remove();
1970
1988
  this._root = new BranchNode(orthogonal(oldRoot.orientation), this.proportionalLayout, this.styles, this.root.orthogonalSize, this.root.size);
1971
- if (oldRoot.children.length === 1) {
1989
+ if (oldRoot.children.length === 0) ;
1990
+ else if (oldRoot.children.length === 1) {
1972
1991
  // can remove one level of redundant branching if there is only a single child
1973
1992
  const childReference = oldRoot.children[0];
1974
1993
  const child = oldRoot.removeChild(0); // remove to prevent disposal when disposing of unwanted root
@@ -2484,6 +2503,9 @@ class DockviewApi {
2484
2503
  addPanel(options) {
2485
2504
  return this.component.addPanel(options);
2486
2505
  }
2506
+ removePanel(panel) {
2507
+ this.component.removePanel(panel);
2508
+ }
2487
2509
  addGroup(options) {
2488
2510
  return this.component.addGroup(options);
2489
2511
  }
@@ -2502,6 +2524,9 @@ class DockviewApi {
2502
2524
  getGroup(id) {
2503
2525
  return this.component.getPanel(id);
2504
2526
  }
2527
+ addFloatingGroup(item, coord) {
2528
+ return this.component.addFloatingGroup(item, coord);
2529
+ }
2505
2530
  fromJSON(data) {
2506
2531
  this.component.fromJSON(data);
2507
2532
  }
@@ -2594,10 +2619,14 @@ class Droptarget extends CompositeDisposable {
2594
2619
  this._onDrop = new Emitter();
2595
2620
  this.onDrop = this._onDrop.event;
2596
2621
  // use a set to take advantage of #<set>.has
2597
- const acceptedTargetZonesSet = new Set(this.options.acceptedTargetZones);
2622
+ this._acceptedTargetZonesSet = new Set(this.options.acceptedTargetZones);
2598
2623
  this.addDisposables(this._onDrop, new DragAndDropObserver(this.element, {
2599
2624
  onDragEnter: () => undefined,
2600
2625
  onDragOver: (e) => {
2626
+ if (this._acceptedTargetZonesSet.size === 0) {
2627
+ this.removeDropTarget();
2628
+ return;
2629
+ }
2601
2630
  const width = this.element.clientWidth;
2602
2631
  const height = this.element.clientHeight;
2603
2632
  if (width === 0 || height === 0) {
@@ -2606,20 +2635,28 @@ class Droptarget extends CompositeDisposable {
2606
2635
  const rect = e.currentTarget.getBoundingClientRect();
2607
2636
  const x = e.clientX - rect.left;
2608
2637
  const y = e.clientY - rect.top;
2609
- const quadrant = this.calculateQuadrant(acceptedTargetZonesSet, x, y, width, height);
2610
- if (quadrant === null) {
2638
+ const quadrant = this.calculateQuadrant(this._acceptedTargetZonesSet, x, y, width, height);
2639
+ /**
2640
+ * If the event has already been used by another DropTarget instance
2641
+ * then don't show a second drop target, only one target should be
2642
+ * active at any one time
2643
+ */
2644
+ if (this.isAlreadyUsed(e) || quadrant === null) {
2611
2645
  // no drop target should be displayed
2612
2646
  this.removeDropTarget();
2613
2647
  return;
2614
2648
  }
2615
2649
  if (typeof this.options.canDisplayOverlay === 'boolean') {
2616
2650
  if (!this.options.canDisplayOverlay) {
2651
+ this.removeDropTarget();
2617
2652
  return;
2618
2653
  }
2619
2654
  }
2620
2655
  else if (!this.options.canDisplayOverlay(e, quadrant)) {
2656
+ this.removeDropTarget();
2621
2657
  return;
2622
2658
  }
2659
+ this.markAsUsed(e);
2623
2660
  if (!this.targetElement) {
2624
2661
  this.targetElement = document.createElement('div');
2625
2662
  this.targetElement.className = 'drop-target-dropzone';
@@ -2630,12 +2667,6 @@ class Droptarget extends CompositeDisposable {
2630
2667
  this.element.classList.add('drop-target');
2631
2668
  this.element.append(this.targetElement);
2632
2669
  }
2633
- if (this.options.acceptedTargetZones.length === 0) {
2634
- return;
2635
- }
2636
- if (!this.targetElement || !this.overlayElement) {
2637
- return;
2638
- }
2639
2670
  this.toggleClasses(quadrant, width, height);
2640
2671
  this.setState(quadrant);
2641
2672
  },
@@ -2658,10 +2689,26 @@ class Droptarget extends CompositeDisposable {
2658
2689
  },
2659
2690
  }));
2660
2691
  }
2692
+ setTargetZones(acceptedTargetZones) {
2693
+ this._acceptedTargetZonesSet = new Set(acceptedTargetZones);
2694
+ }
2661
2695
  dispose() {
2662
2696
  this.removeDropTarget();
2663
2697
  super.dispose();
2664
2698
  }
2699
+ /**
2700
+ * Add a property to the event object for other potential listeners to check
2701
+ */
2702
+ markAsUsed(event) {
2703
+ event[Droptarget.USED_EVENT_ID] = true;
2704
+ }
2705
+ /**
2706
+ * Check is the event has already been used by another instance od DropTarget
2707
+ */
2708
+ isAlreadyUsed(event) {
2709
+ const value = event[Droptarget.USED_EVENT_ID];
2710
+ return typeof value === 'boolean' && value;
2711
+ }
2665
2712
  toggleClasses(quadrant, width, height) {
2666
2713
  var _a, _b, _c, _d;
2667
2714
  if (!this.overlayElement) {
@@ -2756,6 +2803,7 @@ class Droptarget extends CompositeDisposable {
2756
2803
  }
2757
2804
  }
2758
2805
  }
2806
+ Droptarget.USED_EVENT_ID = '__dockview_droptarget_event_is_used__';
2759
2807
  function calculateQuadrantAsPercentage(overlayType, x, y, width, height, threshold) {
2760
2808
  const xp = (100 * x) / width;
2761
2809
  const yp = (100 * y) / height;
@@ -2885,8 +2933,15 @@ class DragHandler extends CompositeDisposable {
2885
2933
  this.addDisposables(this._onDragStart, this.dataDisposable, this.pointerEventsDisposable);
2886
2934
  this.configure();
2887
2935
  }
2936
+ isCancelled(_event) {
2937
+ return false;
2938
+ }
2888
2939
  configure() {
2889
2940
  this.addDisposables(this._onDragStart, addDisposableListener(this.el, 'dragstart', (event) => {
2941
+ if (this.isCancelled(event)) {
2942
+ event.preventDefault();
2943
+ return;
2944
+ }
2890
2945
  const iframes = [
2891
2946
  ...getElementsByTagName('iframe'),
2892
2947
  ...getElementsByTagName('webview'),
@@ -2960,13 +3015,6 @@ class Tab extends CompositeDisposable {
2960
3015
  if (event.defaultPrevented) {
2961
3016
  return;
2962
3017
  }
2963
- /**
2964
- * TODO: alternative to stopPropagation
2965
- *
2966
- * I need to stop the event propagation here since otherwise it'll be intercepted by event handlers
2967
- * on the tabs-container. I cannot use event.preventDefault() since I need the on DragStart event to occur
2968
- */
2969
- event.stopPropagation();
2970
3018
  this._onChanged.fire(event);
2971
3019
  }));
2972
3020
  this.droptarget = new Droptarget(this._element, {
@@ -3024,6 +3072,22 @@ class GroupDragHandler extends DragHandler {
3024
3072
  this.accessorId = accessorId;
3025
3073
  this.group = group;
3026
3074
  this.panelTransfer = LocalSelectionTransfer.getInstance();
3075
+ this.addDisposables(addDisposableListener(element, 'mousedown', (e) => {
3076
+ if (e.shiftKey) {
3077
+ /**
3078
+ * You cannot call e.preventDefault() because that will prevent drag events from firing
3079
+ * but we also need to stop any group overlay drag events from occuring
3080
+ * Use a custom event marker that can be checked by the overlay drag events
3081
+ */
3082
+ quasiPreventDefault(e);
3083
+ }
3084
+ }, true));
3085
+ }
3086
+ isCancelled(_event) {
3087
+ if (this.group.api.isFloating && !_event.shiftKey) {
3088
+ return true;
3089
+ }
3090
+ return false;
3027
3091
  }
3028
3092
  getData(dataTransfer) {
3029
3093
  this.panelTransfer.setData([new PanelTransfer(this.accessorId, this.group.id, null)], PanelTransfer.prototype);
@@ -3114,17 +3178,30 @@ class TabsContainer extends CompositeDisposable {
3114
3178
  hide() {
3115
3179
  this._element.style.display = 'none';
3116
3180
  }
3117
- setActionElement(element) {
3118
- if (this.actions === element) {
3181
+ setRightActionsElement(element) {
3182
+ if (this.rightActions === element) {
3119
3183
  return;
3120
3184
  }
3121
- if (this.actions) {
3122
- this.actions.remove();
3123
- this.actions = undefined;
3185
+ if (this.rightActions) {
3186
+ this.rightActions.remove();
3187
+ this.rightActions = undefined;
3124
3188
  }
3125
3189
  if (element) {
3126
- this.actionContainer.appendChild(element);
3127
- this.actions = element;
3190
+ this.rightActionsContainer.appendChild(element);
3191
+ this.rightActions = element;
3192
+ }
3193
+ }
3194
+ setLeftActionsElement(element) {
3195
+ if (this.leftActions === element) {
3196
+ return;
3197
+ }
3198
+ if (this.leftActions) {
3199
+ this.leftActions.remove();
3200
+ this.leftActions = undefined;
3201
+ }
3202
+ if (element) {
3203
+ this.leftActionsContainer.appendChild(element);
3204
+ this.leftActions = element;
3128
3205
  }
3129
3206
  }
3130
3207
  get element() {
@@ -3159,19 +3236,35 @@ class TabsContainer extends CompositeDisposable {
3159
3236
  toggleClass(this._element, 'dv-single-tab', this.size === 1);
3160
3237
  }
3161
3238
  }));
3162
- this.actionContainer = document.createElement('div');
3163
- this.actionContainer.className = 'action-container';
3239
+ this.rightActionsContainer = document.createElement('div');
3240
+ this.rightActionsContainer.className = 'right-actions-container';
3241
+ this.leftActionsContainer = document.createElement('div');
3242
+ this.leftActionsContainer.className = 'left-actions-container';
3164
3243
  this.tabContainer = document.createElement('div');
3165
3244
  this.tabContainer.className = 'tabs-container';
3166
3245
  this.voidContainer = new VoidContainer(this.accessor, this.group);
3167
3246
  this._element.appendChild(this.tabContainer);
3247
+ this._element.appendChild(this.leftActionsContainer);
3168
3248
  this._element.appendChild(this.voidContainer.element);
3169
- this._element.appendChild(this.actionContainer);
3249
+ this._element.appendChild(this.rightActionsContainer);
3170
3250
  this.addDisposables(this.voidContainer, this.voidContainer.onDrop((event) => {
3171
3251
  this._onDrop.fire({
3172
3252
  event: event.nativeEvent,
3173
3253
  index: this.tabs.length,
3174
3254
  });
3255
+ }), addDisposableListener(this.voidContainer.element, 'mousedown', (event) => {
3256
+ const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
3257
+ if (isFloatingGroupsEnabled &&
3258
+ event.shiftKey &&
3259
+ !this.group.api.isFloating) {
3260
+ event.preventDefault();
3261
+ const { top, left } = this.element.getBoundingClientRect();
3262
+ const { top: rootTop, left: rootLeft } = this.accessor.element.getBoundingClientRect();
3263
+ this.accessor.addFloatingGroup(this.group, {
3264
+ x: left - rootLeft + 20,
3265
+ y: top - rootTop + 20,
3266
+ }, { inDragMode: true });
3267
+ }
3175
3268
  }), addDisposableListener(this.tabContainer, 'mousedown', (event) => {
3176
3269
  if (event.defaultPrevented) {
3177
3270
  return;
@@ -3225,6 +3318,21 @@ class TabsContainer extends CompositeDisposable {
3225
3318
  tabToAdd.setContent(panel.view.tab);
3226
3319
  const disposable = CompositeDisposable.from(tabToAdd.onChanged((event) => {
3227
3320
  var _a;
3321
+ const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
3322
+ const isFloatingWithOnePanel = this.group.api.isFloating && this.size === 1;
3323
+ if (isFloatingGroupsEnabled &&
3324
+ !isFloatingWithOnePanel &&
3325
+ event.shiftKey) {
3326
+ event.preventDefault();
3327
+ const panel = this.accessor.getGroupPanel(tabToAdd.panelId);
3328
+ const { top, left } = tabToAdd.element.getBoundingClientRect();
3329
+ const { top: rootTop, left: rootLeft } = this.accessor.element.getBoundingClientRect();
3330
+ this.accessor.addFloatingGroup(panel, {
3331
+ x: left - rootLeft,
3332
+ y: top - rootTop,
3333
+ }, { inDragMode: true });
3334
+ return;
3335
+ }
3228
3336
  const alreadyFocused = panel.id === ((_a = this.group.model.activePanel) === null || _a === void 0 ? void 0 : _a.id) &&
3229
3337
  this.group.model.isContentFocused;
3230
3338
  const isLeftClick = event.button === 0;
@@ -3294,6 +3402,17 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3294
3402
  }
3295
3403
  return isAncestor(document.activeElement, this.contentContainer.element);
3296
3404
  }
3405
+ get isFloating() {
3406
+ return this._isFloating;
3407
+ }
3408
+ set isFloating(value) {
3409
+ this._isFloating = value;
3410
+ this.dropTarget.setTargetZones(value ? ['center'] : ['top', 'bottom', 'left', 'right', 'center']);
3411
+ toggleClass(this.container, 'dv-groupview-floating', value);
3412
+ this.groupPanel.api._onDidFloatingStateChange.fire({
3413
+ isFloating: this.isFloating,
3414
+ });
3415
+ }
3297
3416
  constructor(container, accessor, id, options, groupPanel) {
3298
3417
  super();
3299
3418
  this.container = container;
@@ -3303,6 +3422,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3303
3422
  this.groupPanel = groupPanel;
3304
3423
  this._isGroupActive = false;
3305
3424
  this._locked = false;
3425
+ this._isFloating = false;
3306
3426
  this.mostRecentlyUsed = [];
3307
3427
  this._onDidChange = new Emitter();
3308
3428
  this.onDidChange = this._onDidChange.event;
@@ -3319,7 +3439,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3319
3439
  this.onDidRemovePanel = this._onDidRemovePanel.event;
3320
3440
  this._onDidActivePanelChange = new Emitter();
3321
3441
  this.onDidActivePanelChange = this._onDidActivePanelChange.event;
3322
- this.container.classList.add('groupview');
3442
+ toggleClass(this.container, 'groupview', true);
3323
3443
  this.tabsContainer = new TabsContainer(this.accessor, this.groupPanel);
3324
3444
  this.contentContainer = new ContentContainer();
3325
3445
  this.dropTarget = new Droptarget(this.contentContainer.element, {
@@ -3329,6 +3449,9 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3329
3449
  return false;
3330
3450
  }
3331
3451
  const data = getPanelData();
3452
+ if (!data && event.shiftKey && !this.isFloating) {
3453
+ return false;
3454
+ }
3332
3455
  if (data && data.viewId === this.accessor.id) {
3333
3456
  if (data.groupId === this.id) {
3334
3457
  if (position === 'center') {
@@ -3373,14 +3496,25 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3373
3496
  // correctly initialized
3374
3497
  this.setActive(this.isActive, true, true);
3375
3498
  this.updateContainer();
3376
- if (this.accessor.options.createGroupControlElement) {
3377
- this._control = this.accessor.options.createGroupControlElement(this.groupPanel);
3378
- this.addDisposables(this._control);
3379
- this._control.init({
3499
+ if (this.accessor.options.createRightHeaderActionsElement) {
3500
+ this._rightHeaderActions =
3501
+ this.accessor.options.createRightHeaderActionsElement(this.groupPanel);
3502
+ this.addDisposables(this._rightHeaderActions);
3503
+ this._rightHeaderActions.init({
3504
+ containerApi: new DockviewApi(this.accessor),
3505
+ api: this.groupPanel.api,
3506
+ });
3507
+ this.tabsContainer.setRightActionsElement(this._rightHeaderActions.element);
3508
+ }
3509
+ if (this.accessor.options.createLeftHeaderActionsElement) {
3510
+ this._leftHeaderActions =
3511
+ this.accessor.options.createLeftHeaderActionsElement(this.groupPanel);
3512
+ this.addDisposables(this._leftHeaderActions);
3513
+ this._leftHeaderActions.init({
3380
3514
  containerApi: new DockviewApi(this.accessor),
3381
3515
  api: this.groupPanel.api,
3382
3516
  });
3383
- this.tabsContainer.setActionElement(this._control.element);
3517
+ this.tabsContainer.setLeftActionsElement(this._leftHeaderActions.element);
3384
3518
  }
3385
3519
  }
3386
3520
  indexOf(panel) {
@@ -3513,7 +3647,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3513
3647
  return this._activePanel === panel;
3514
3648
  }
3515
3649
  updateActions(element) {
3516
- this.tabsContainer.setActionElement(element);
3650
+ this.tabsContainer.setRightActionsElement(element);
3517
3651
  }
3518
3652
  setActive(isGroupActive, skipFocus = false, force = false) {
3519
3653
  var _a, _b, _c, _d;
@@ -3685,9 +3819,10 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3685
3819
  }
3686
3820
  }
3687
3821
  dispose() {
3688
- var _a, _b;
3822
+ var _a, _b, _c;
3689
3823
  super.dispose();
3690
- (_b = (_a = this.watermark) === null || _a === void 0 ? void 0 : _a.dispose) === null || _b === void 0 ? void 0 : _b.call(_a);
3824
+ (_a = this.watermark) === null || _a === void 0 ? void 0 : _a.element.remove();
3825
+ (_c = (_b = this.watermark) === null || _b === void 0 ? void 0 : _b.dispose) === null || _c === void 0 ? void 0 : _c.call(_b);
3691
3826
  for (const panel of this.panels) {
3692
3827
  panel.dispose();
3693
3828
  }
@@ -4481,8 +4616,8 @@ class GridviewPanel extends BasePanelView {
4481
4616
  get isActive() {
4482
4617
  return this.api.isActive;
4483
4618
  }
4484
- constructor(id, component, options) {
4485
- super(id, component, new GridviewPanelApiImpl(id));
4619
+ constructor(id, component, options, api) {
4620
+ super(id, component, api !== null && api !== void 0 ? api : new GridviewPanelApiImpl(id));
4486
4621
  this._evaluatedMinimumWidth = 0;
4487
4622
  this._evaluatedMaximumWidth = Number.MAX_SAFE_INTEGER;
4488
4623
  this._evaluatedMinimumHeight = 0;
@@ -4580,6 +4715,32 @@ class GridviewPanel extends BasePanelView {
4580
4715
  }
4581
4716
  }
4582
4717
 
4718
+ class DockviewGroupPanelApiImpl extends GridviewPanelApiImpl {
4719
+ get isFloating() {
4720
+ if (!this._group) {
4721
+ throw new Error(`DockviewGroupPanelApiImpl not initialized`);
4722
+ }
4723
+ return this._group.model.isFloating;
4724
+ }
4725
+ constructor(id, accessor) {
4726
+ super(id);
4727
+ this.accessor = accessor;
4728
+ this._onDidFloatingStateChange = new Emitter();
4729
+ this.onDidFloatingStateChange = this._onDidFloatingStateChange.event;
4730
+ this.addDisposables(this._onDidFloatingStateChange);
4731
+ }
4732
+ moveTo(options) {
4733
+ var _a;
4734
+ if (!this._group) {
4735
+ throw new Error(`DockviewGroupPanelApiImpl not initialized`);
4736
+ }
4737
+ this.accessor.moveGroupOrPanel(options.group, this._group.id, undefined, (_a = options.position) !== null && _a !== void 0 ? _a : 'center');
4738
+ }
4739
+ initialize(group) {
4740
+ this._group = group;
4741
+ }
4742
+ }
4743
+
4583
4744
  class DockviewGroupPanel extends GridviewPanel {
4584
4745
  get panels() {
4585
4746
  return this._model.panels;
@@ -4606,7 +4767,8 @@ class DockviewGroupPanel extends GridviewPanel {
4606
4767
  super(id, 'groupview_default', {
4607
4768
  minimumHeight: 100,
4608
4769
  minimumWidth: 100,
4609
- });
4770
+ }, new DockviewGroupPanelApiImpl(id, accessor));
4771
+ this.api.initialize(this); // cannot use 'this' after after 'super' call
4610
4772
  this._model = new DockviewGroupPanelModel(this.element, accessor, id, options, this);
4611
4773
  }
4612
4774
  initialize() {
@@ -4624,7 +4786,6 @@ class DockviewGroupPanel extends GridviewPanel {
4624
4786
  return this._model;
4625
4787
  }
4626
4788
  toJSON() {
4627
- // TODO fix typing
4628
4789
  return this.model.toJSON();
4629
4790
  }
4630
4791
  }
@@ -4678,9 +4839,10 @@ class DockviewPanelApiImpl extends GridviewPanelApiImpl {
4678
4839
  get group() {
4679
4840
  return this._group;
4680
4841
  }
4681
- constructor(panel, group) {
4842
+ constructor(panel, group, accessor) {
4682
4843
  super(panel.id);
4683
4844
  this.panel = panel;
4845
+ this.accessor = accessor;
4684
4846
  this._onDidTitleChange = new Emitter();
4685
4847
  this.onDidTitleChange = this._onDidTitleChange.event;
4686
4848
  this._onDidActiveGroupChange = new Emitter();
@@ -4692,6 +4854,10 @@ class DockviewPanelApiImpl extends GridviewPanelApiImpl {
4692
4854
  this._group = group;
4693
4855
  this.addDisposables(this.disposable, this._onDidTitleChange, this._onDidGroupChange, this._onDidActiveGroupChange);
4694
4856
  }
4857
+ moveTo(options) {
4858
+ var _a;
4859
+ this.accessor.moveGroupOrPanel(options.group, this._group.id, this.panel.id, (_a = options.position) !== null && _a !== void 0 ? _a : 'center', options.index);
4860
+ }
4695
4861
  setTitle(title) {
4696
4862
  this.panel.setTitle(title);
4697
4863
  }
@@ -4716,7 +4882,7 @@ class DockviewPanel extends CompositeDisposable {
4716
4882
  this.containerApi = containerApi;
4717
4883
  this.view = view;
4718
4884
  this._group = group;
4719
- this.api = new DockviewPanelApiImpl(this, this._group);
4885
+ this.api = new DockviewPanelApiImpl(this, this._group, accessor);
4720
4886
  this.addDisposables(this.api.onActiveChange(() => {
4721
4887
  accessor.setActivePanel(this);
4722
4888
  }), this.api.onDidSizeChange((event) => {
@@ -5057,6 +5223,296 @@ class Watermark extends CompositeDisposable {
5057
5223
  }
5058
5224
  }
5059
5225
 
5226
+ const bringElementToFront = (() => {
5227
+ let previous = null;
5228
+ function pushToTop(element) {
5229
+ if (previous !== element && previous !== null) {
5230
+ toggleClass(previous, 'dv-bring-to-front', false);
5231
+ }
5232
+ toggleClass(element, 'dv-bring-to-front', true);
5233
+ previous = element;
5234
+ }
5235
+ return pushToTop;
5236
+ })();
5237
+ class Overlay extends CompositeDisposable {
5238
+ constructor(options) {
5239
+ super();
5240
+ this.options = options;
5241
+ this._element = document.createElement('div');
5242
+ this._onDidChange = new Emitter();
5243
+ this.onDidChange = this._onDidChange.event;
5244
+ this._onDidChangeEnd = new Emitter();
5245
+ this.onDidChangeEnd = this._onDidChangeEnd.event;
5246
+ this.addDisposables(this._onDidChange, this._onDidChangeEnd);
5247
+ this._element.className = 'dv-resize-container';
5248
+ this.setupResize('top');
5249
+ this.setupResize('bottom');
5250
+ this.setupResize('left');
5251
+ this.setupResize('right');
5252
+ this.setupResize('topleft');
5253
+ this.setupResize('topright');
5254
+ this.setupResize('bottomleft');
5255
+ this.setupResize('bottomright');
5256
+ this._element.appendChild(this.options.content);
5257
+ this.options.container.appendChild(this._element);
5258
+ // if input bad resize within acceptable boundaries
5259
+ this.setBounds({
5260
+ height: this.options.height,
5261
+ width: this.options.width,
5262
+ top: this.options.top,
5263
+ left: this.options.left,
5264
+ });
5265
+ }
5266
+ setBounds(bounds = {}) {
5267
+ if (typeof bounds.height === 'number') {
5268
+ this._element.style.height = `${bounds.height}px`;
5269
+ }
5270
+ if (typeof bounds.width === 'number') {
5271
+ this._element.style.width = `${bounds.width}px`;
5272
+ }
5273
+ if (typeof bounds.top === 'number') {
5274
+ this._element.style.top = `${bounds.top}px`;
5275
+ }
5276
+ if (typeof bounds.left === 'number') {
5277
+ this._element.style.left = `${bounds.left}px`;
5278
+ }
5279
+ const containerRect = this.options.container.getBoundingClientRect();
5280
+ const overlayRect = this._element.getBoundingClientRect();
5281
+ // region: ensure bounds within allowable limits
5282
+ // a minimum width of minimumViewportWidth must be inside the viewport
5283
+ const xOffset = Math.max(0, overlayRect.width - this.options.minimumInViewportWidth);
5284
+ // a minimum height of minimumViewportHeight must be inside the viewport
5285
+ const yOffset = Math.max(0, overlayRect.height - this.options.minimumInViewportHeight);
5286
+ const left = clamp(overlayRect.left - containerRect.left, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
5287
+ const top = clamp(overlayRect.top - containerRect.top, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
5288
+ this._element.style.left = `${left}px`;
5289
+ this._element.style.top = `${top}px`;
5290
+ this._onDidChange.fire();
5291
+ }
5292
+ toJSON() {
5293
+ const container = this.options.container.getBoundingClientRect();
5294
+ const element = this._element.getBoundingClientRect();
5295
+ return {
5296
+ top: element.top - container.top,
5297
+ left: element.left - container.left,
5298
+ width: element.width,
5299
+ height: element.height,
5300
+ };
5301
+ }
5302
+ setupDrag(dragTarget, options = { inDragMode: false }) {
5303
+ const move = new MutableDisposable();
5304
+ const track = () => {
5305
+ let offset = null;
5306
+ const iframes = [
5307
+ ...getElementsByTagName('iframe'),
5308
+ ...getElementsByTagName('webview'),
5309
+ ];
5310
+ for (const iframe of iframes) {
5311
+ iframe.style.pointerEvents = 'none';
5312
+ }
5313
+ move.value = new CompositeDisposable({
5314
+ dispose: () => {
5315
+ for (const iframe of iframes) {
5316
+ iframe.style.pointerEvents = 'auto';
5317
+ }
5318
+ },
5319
+ }, addDisposableWindowListener(window, 'mousemove', (e) => {
5320
+ const containerRect = this.options.container.getBoundingClientRect();
5321
+ const x = e.clientX - containerRect.left;
5322
+ const y = e.clientY - containerRect.top;
5323
+ toggleClass(this._element, 'dv-resize-container-dragging', true);
5324
+ const overlayRect = this._element.getBoundingClientRect();
5325
+ if (offset === null) {
5326
+ offset = {
5327
+ x: e.clientX - overlayRect.left,
5328
+ y: e.clientY - overlayRect.top,
5329
+ };
5330
+ }
5331
+ const xOffset = Math.max(0, overlayRect.width - this.options.minimumInViewportWidth);
5332
+ const yOffset = Math.max(0, overlayRect.height -
5333
+ this.options.minimumInViewportHeight);
5334
+ const left = clamp(x - offset.x, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
5335
+ const top = clamp(y - offset.y, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
5336
+ this.setBounds({ top, left });
5337
+ }), addDisposableWindowListener(window, 'mouseup', () => {
5338
+ toggleClass(this._element, 'dv-resize-container-dragging', false);
5339
+ move.dispose();
5340
+ this._onDidChangeEnd.fire();
5341
+ }));
5342
+ };
5343
+ this.addDisposables(move, addDisposableListener(dragTarget, 'mousedown', (event) => {
5344
+ if (event.defaultPrevented) {
5345
+ event.preventDefault();
5346
+ return;
5347
+ }
5348
+ // if somebody has marked this event then treat as a defaultPrevented
5349
+ // without actually calling event.preventDefault()
5350
+ if (quasiDefaultPrevented(event)) {
5351
+ return;
5352
+ }
5353
+ track();
5354
+ }), addDisposableListener(this.options.content, 'mousedown', (event) => {
5355
+ if (event.defaultPrevented) {
5356
+ return;
5357
+ }
5358
+ // if somebody has marked this event then treat as a defaultPrevented
5359
+ // without actually calling event.preventDefault()
5360
+ if (quasiDefaultPrevented(event)) {
5361
+ return;
5362
+ }
5363
+ if (event.shiftKey) {
5364
+ track();
5365
+ }
5366
+ }), addDisposableListener(this.options.content, 'mousedown', () => {
5367
+ bringElementToFront(this._element);
5368
+ }, true));
5369
+ bringElementToFront(this._element);
5370
+ if (options.inDragMode) {
5371
+ track();
5372
+ }
5373
+ }
5374
+ setupResize(direction) {
5375
+ const resizeHandleElement = document.createElement('div');
5376
+ resizeHandleElement.className = `dv-resize-handle-${direction}`;
5377
+ this._element.appendChild(resizeHandleElement);
5378
+ const move = new MutableDisposable();
5379
+ this.addDisposables(move, addDisposableListener(resizeHandleElement, 'mousedown', (e) => {
5380
+ e.preventDefault();
5381
+ let startPosition = null;
5382
+ const iframes = [
5383
+ ...getElementsByTagName('iframe'),
5384
+ ...getElementsByTagName('webview'),
5385
+ ];
5386
+ for (const iframe of iframes) {
5387
+ iframe.style.pointerEvents = 'none';
5388
+ }
5389
+ move.value = new CompositeDisposable(addDisposableWindowListener(window, 'mousemove', (e) => {
5390
+ const containerRect = this.options.container.getBoundingClientRect();
5391
+ const overlayRect = this._element.getBoundingClientRect();
5392
+ const y = e.clientY - containerRect.top;
5393
+ const x = e.clientX - containerRect.left;
5394
+ if (startPosition === null) {
5395
+ // record the initial dimensions since as all subsequence moves are relative to this
5396
+ startPosition = {
5397
+ originalY: y,
5398
+ originalHeight: overlayRect.height,
5399
+ originalX: x,
5400
+ originalWidth: overlayRect.width,
5401
+ };
5402
+ }
5403
+ let top = undefined;
5404
+ let height = undefined;
5405
+ let left = undefined;
5406
+ let width = undefined;
5407
+ const minimumInViewportHeight = this.options.minimumInViewportHeight;
5408
+ const minimumInViewportWidth = this.options.minimumInViewportWidth;
5409
+ function moveTop() {
5410
+ top = clamp(y, -Number.MAX_VALUE, startPosition.originalY +
5411
+ startPosition.originalHeight >
5412
+ containerRect.height
5413
+ ? containerRect.height -
5414
+ minimumInViewportHeight
5415
+ : Math.max(0, startPosition.originalY +
5416
+ startPosition.originalHeight -
5417
+ Overlay.MINIMUM_HEIGHT));
5418
+ height =
5419
+ startPosition.originalY +
5420
+ startPosition.originalHeight -
5421
+ top;
5422
+ }
5423
+ function moveBottom() {
5424
+ top =
5425
+ startPosition.originalY -
5426
+ startPosition.originalHeight;
5427
+ height = clamp(y - top, top < 0
5428
+ ? -top + minimumInViewportHeight
5429
+ : Overlay.MINIMUM_HEIGHT, Number.MAX_VALUE);
5430
+ }
5431
+ function moveLeft() {
5432
+ left = clamp(x, -Number.MAX_VALUE, startPosition.originalX +
5433
+ startPosition.originalWidth >
5434
+ containerRect.width
5435
+ ? containerRect.width -
5436
+ minimumInViewportWidth
5437
+ : Math.max(0, startPosition.originalX +
5438
+ startPosition.originalWidth -
5439
+ Overlay.MINIMUM_WIDTH));
5440
+ width =
5441
+ startPosition.originalX +
5442
+ startPosition.originalWidth -
5443
+ left;
5444
+ }
5445
+ function moveRight() {
5446
+ left =
5447
+ startPosition.originalX -
5448
+ startPosition.originalWidth;
5449
+ width = clamp(x - left, left < 0
5450
+ ? -left + minimumInViewportWidth
5451
+ : Overlay.MINIMUM_WIDTH, Number.MAX_VALUE);
5452
+ }
5453
+ switch (direction) {
5454
+ case 'top':
5455
+ moveTop();
5456
+ break;
5457
+ case 'bottom':
5458
+ moveBottom();
5459
+ break;
5460
+ case 'left':
5461
+ moveLeft();
5462
+ break;
5463
+ case 'right':
5464
+ moveRight();
5465
+ break;
5466
+ case 'topleft':
5467
+ moveTop();
5468
+ moveLeft();
5469
+ break;
5470
+ case 'topright':
5471
+ moveTop();
5472
+ moveRight();
5473
+ break;
5474
+ case 'bottomleft':
5475
+ moveBottom();
5476
+ moveLeft();
5477
+ break;
5478
+ case 'bottomright':
5479
+ moveBottom();
5480
+ moveRight();
5481
+ break;
5482
+ }
5483
+ this.setBounds({ height, width, top, left });
5484
+ }), {
5485
+ dispose: () => {
5486
+ for (const iframe of iframes) {
5487
+ iframe.style.pointerEvents = 'auto';
5488
+ }
5489
+ },
5490
+ }, addDisposableWindowListener(window, 'mouseup', () => {
5491
+ move.dispose();
5492
+ this._onDidChangeEnd.fire();
5493
+ }));
5494
+ }));
5495
+ }
5496
+ dispose() {
5497
+ this._element.remove();
5498
+ super.dispose();
5499
+ }
5500
+ }
5501
+ Overlay.MINIMUM_HEIGHT = 20;
5502
+ Overlay.MINIMUM_WIDTH = 20;
5503
+
5504
+ class DockviewFloatingGroupPanel extends CompositeDisposable {
5505
+ constructor(group, overlay) {
5506
+ super();
5507
+ this.group = group;
5508
+ this.overlay = overlay;
5509
+ this.addDisposables(overlay);
5510
+ }
5511
+ position(bounds) {
5512
+ this.overlay.setBounds(bounds);
5513
+ }
5514
+ }
5515
+
5060
5516
  class DockviewComponent extends BaseGrid {
5061
5517
  get orientation() {
5062
5518
  return this.gridview.orientation;
@@ -5097,7 +5553,8 @@ class DockviewComponent extends BaseGrid {
5097
5553
  this.onDidLayoutFromJSON = this._onDidLayoutFromJSON.event;
5098
5554
  this._onDidActivePanelChange = new Emitter();
5099
5555
  this.onDidActivePanelChange = this._onDidActivePanelChange.event;
5100
- this.element.classList.add('dv-dockview');
5556
+ this.floatingGroups = [];
5557
+ toggleClass(this.gridview.element, 'dv-dockview', true);
5101
5558
  this.addDisposables(this._onDidDrop, exports.DockviewEvent.any(this.onDidAddGroup, this.onDidRemoveGroup)(() => {
5102
5559
  this.updateWatermark();
5103
5560
  }), exports.DockviewEvent.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidActivePanelChange)(() => {
@@ -5127,9 +5584,22 @@ class DockviewComponent extends BaseGrid {
5127
5584
  if (data.viewId !== this.id) {
5128
5585
  return false;
5129
5586
  }
5587
+ if (position === 'center') {
5588
+ // center drop target is only allowed if there are no panels in the grid
5589
+ // floating panels are allowed
5590
+ return this.gridview.length === 0;
5591
+ }
5130
5592
  return true;
5131
5593
  }
5132
5594
  if (this.options.showDndOverlay) {
5595
+ if (position === 'center') {
5596
+ /**
5597
+ * for external events only show the four-corner drag overlays, disable
5598
+ * the center position so that external drag events can fall through to the group
5599
+ * and panel drop target handlers
5600
+ */
5601
+ return false;
5602
+ }
5133
5603
  return this.options.showDndOverlay({
5134
5604
  nativeEvent: event,
5135
5605
  position: position,
@@ -5139,7 +5609,7 @@ class DockviewComponent extends BaseGrid {
5139
5609
  }
5140
5610
  return false;
5141
5611
  },
5142
- acceptedTargetZones: ['top', 'bottom', 'left', 'right'],
5612
+ acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
5143
5613
  overlayModel: {
5144
5614
  activationSize: { type: 'pixels', value: 10 },
5145
5615
  size: { type: 'pixels', value: 20 },
@@ -5157,6 +5627,75 @@ class DockviewComponent extends BaseGrid {
5157
5627
  this._api = new DockviewApi(this);
5158
5628
  this.updateWatermark();
5159
5629
  }
5630
+ addFloatingGroup(item, coord, options) {
5631
+ var _a, _b;
5632
+ let group;
5633
+ if (item instanceof DockviewPanel) {
5634
+ group = this.createGroup();
5635
+ this.removePanel(item, {
5636
+ removeEmptyGroup: true,
5637
+ skipDispose: true,
5638
+ });
5639
+ group.model.openPanel(item);
5640
+ }
5641
+ else {
5642
+ group = item;
5643
+ const skip = typeof (options === null || options === void 0 ? void 0 : options.skipRemoveGroup) === 'boolean' &&
5644
+ options.skipRemoveGroup;
5645
+ if (!skip) {
5646
+ this.doRemoveGroup(item, { skipDispose: true });
5647
+ }
5648
+ }
5649
+ group.model.isFloating = true;
5650
+ const overlayLeft = typeof (coord === null || coord === void 0 ? void 0 : coord.x) === 'number' ? Math.max(coord.x, 0) : 100;
5651
+ const overlayTop = typeof (coord === null || coord === void 0 ? void 0 : coord.y) === 'number' ? Math.max(coord.y, 0) : 100;
5652
+ const overlay = new Overlay({
5653
+ container: this.gridview.element,
5654
+ content: group.element,
5655
+ height: (_a = coord === null || coord === void 0 ? void 0 : coord.height) !== null && _a !== void 0 ? _a : 300,
5656
+ width: (_b = coord === null || coord === void 0 ? void 0 : coord.width) !== null && _b !== void 0 ? _b : 300,
5657
+ left: overlayLeft,
5658
+ top: overlayTop,
5659
+ minimumInViewportWidth: 100,
5660
+ minimumInViewportHeight: 100,
5661
+ });
5662
+ const el = group.element.querySelector('.void-container');
5663
+ if (!el) {
5664
+ throw new Error('failed to find drag handle');
5665
+ }
5666
+ overlay.setupDrag(el, {
5667
+ inDragMode: typeof (options === null || options === void 0 ? void 0 : options.inDragMode) === 'boolean'
5668
+ ? options.inDragMode
5669
+ : false,
5670
+ });
5671
+ const floatingGroupPanel = new DockviewFloatingGroupPanel(group, overlay);
5672
+ const disposable = watchElementResize(group.element, (entry) => {
5673
+ const { width, height } = entry.contentRect;
5674
+ group.layout(width, height); // let the group know it's size is changing so it can fire events to the panel
5675
+ });
5676
+ floatingGroupPanel.addDisposables(overlay.onDidChange(() => {
5677
+ // this is either a resize or a move
5678
+ // to inform the panels .layout(...) the group with it's current size
5679
+ // don't care about resize since the above watcher handles that
5680
+ group.layout(group.height, group.width);
5681
+ }), overlay.onDidChangeEnd(() => {
5682
+ this._bufferOnDidLayoutChange.fire();
5683
+ }), group.onDidChange((event) => {
5684
+ overlay.setBounds({
5685
+ height: event === null || event === void 0 ? void 0 : event.height,
5686
+ width: event === null || event === void 0 ? void 0 : event.width,
5687
+ });
5688
+ }), {
5689
+ dispose: () => {
5690
+ disposable.dispose();
5691
+ group.model.isFloating = false;
5692
+ remove(this.floatingGroups, floatingGroupPanel);
5693
+ this.updateWatermark();
5694
+ },
5695
+ });
5696
+ this.floatingGroups.push(floatingGroupPanel);
5697
+ this.updateWatermark();
5698
+ }
5160
5699
  orthogonalize(position) {
5161
5700
  switch (position) {
5162
5701
  case 'top':
@@ -5179,6 +5718,7 @@ class DockviewComponent extends BaseGrid {
5179
5718
  switch (position) {
5180
5719
  case 'top':
5181
5720
  case 'left':
5721
+ case 'center':
5182
5722
  return this.createGroupAtLocation([0]); // insert into first position
5183
5723
  case 'bottom':
5184
5724
  case 'right':
@@ -5196,6 +5736,15 @@ class DockviewComponent extends BaseGrid {
5196
5736
  }
5197
5737
  this.layout(this.gridview.width, this.gridview.height, true);
5198
5738
  }
5739
+ layout(width, height, forceResize) {
5740
+ super.layout(width, height, forceResize);
5741
+ if (this.floatingGroups) {
5742
+ for (const floating of this.floatingGroups) {
5743
+ // ensure floting groups stay within visible boundaries
5744
+ floating.overlay.setBounds();
5745
+ }
5746
+ }
5747
+ }
5199
5748
  focus() {
5200
5749
  var _a;
5201
5750
  (_a = this.activeGroup) === null || _a === void 0 ? void 0 : _a.focus();
@@ -5258,51 +5807,81 @@ class DockviewComponent extends BaseGrid {
5258
5807
  collection[panel.id] = panel.toJSON();
5259
5808
  return collection;
5260
5809
  }, {});
5261
- return {
5810
+ const floats = this.floatingGroups.map((floatingGroup) => {
5811
+ return {
5812
+ data: floatingGroup.group.toJSON(),
5813
+ position: floatingGroup.overlay.toJSON(),
5814
+ };
5815
+ });
5816
+ const result = {
5262
5817
  grid: data,
5263
5818
  panels,
5264
5819
  activeGroup: (_a = this.activeGroup) === null || _a === void 0 ? void 0 : _a.id,
5265
5820
  };
5821
+ if (floats.length > 0) {
5822
+ result.floatingGroups = floats;
5823
+ }
5824
+ return result;
5266
5825
  }
5267
5826
  fromJSON(data) {
5827
+ var _a;
5268
5828
  this.clear();
5269
5829
  const { grid, panels, activeGroup } = data;
5270
5830
  if (grid.root.type !== 'branch' || !Array.isArray(grid.root.data)) {
5271
5831
  throw new Error('root must be of type branch');
5272
5832
  }
5833
+ // take note of the existing dimensions
5834
+ const width = this.width;
5835
+ const height = this.height;
5836
+ const createGroupFromSerializedState = (data) => {
5837
+ const { id, locked, hideHeader, views, activeView } = data;
5838
+ const group = this.createGroup({
5839
+ id,
5840
+ locked: !!locked,
5841
+ hideHeader: !!hideHeader,
5842
+ });
5843
+ this._onDidAddGroup.fire(group);
5844
+ for (const child of views) {
5845
+ const panel = this._deserializer.fromJSON(panels[child], group);
5846
+ const isActive = typeof activeView === 'string' && activeView === panel.id;
5847
+ group.model.openPanel(panel, {
5848
+ skipSetPanelActive: !isActive,
5849
+ skipSetGroupActive: true,
5850
+ });
5851
+ }
5852
+ if (!group.activePanel && group.panels.length > 0) {
5853
+ group.model.openPanel(group.panels[group.panels.length - 1], {
5854
+ skipSetGroupActive: true,
5855
+ });
5856
+ }
5857
+ return group;
5858
+ };
5273
5859
  this.gridview.deserialize(grid, {
5274
5860
  fromJSON: (node) => {
5275
- const { id, locked, hideHeader, views, activeView } = node.data;
5276
- const group = this.createGroup({
5277
- id,
5278
- locked: !!locked,
5279
- hideHeader: !!hideHeader,
5280
- });
5281
- this._onDidAddGroup.fire(group);
5282
- for (const child of views) {
5283
- const panel = this._deserializer.fromJSON(panels[child], group);
5284
- const isActive = typeof activeView === 'string' &&
5285
- activeView === panel.id;
5286
- group.model.openPanel(panel, {
5287
- skipSetPanelActive: !isActive,
5288
- skipSetGroupActive: true,
5289
- });
5290
- }
5291
- if (!group.activePanel && group.panels.length > 0) {
5292
- group.model.openPanel(group.panels[group.panels.length - 1], {
5293
- skipSetGroupActive: true,
5294
- });
5295
- }
5296
- return group;
5861
+ return createGroupFromSerializedState(node.data);
5297
5862
  },
5298
5863
  });
5864
+ this.layout(width, height, true);
5865
+ const serializedFloatingGroups = (_a = data.floatingGroups) !== null && _a !== void 0 ? _a : [];
5866
+ for (const serializedFloatingGroup of serializedFloatingGroups) {
5867
+ const { data, position } = serializedFloatingGroup;
5868
+ const group = createGroupFromSerializedState(data);
5869
+ this.addFloatingGroup(group, {
5870
+ x: position.left,
5871
+ y: position.top,
5872
+ height: position.height,
5873
+ width: position.width,
5874
+ }, { skipRemoveGroup: true, inDragMode: false });
5875
+ }
5876
+ for (const floatingGroup of this.floatingGroups) {
5877
+ floatingGroup.overlay.setBounds();
5878
+ }
5299
5879
  if (typeof activeGroup === 'string') {
5300
5880
  const panel = this.getPanel(activeGroup);
5301
5881
  if (panel) {
5302
5882
  this.doSetGroupActive(panel);
5303
5883
  }
5304
5884
  }
5305
- this.gridview.layout(this.width, this.height);
5306
5885
  this._onDidLayoutFromJSON.fire();
5307
5886
  }
5308
5887
  clear() {
@@ -5311,7 +5890,7 @@ class DockviewComponent extends BaseGrid {
5311
5890
  const hasActivePanel = !!this.activePanel;
5312
5891
  for (const group of groups) {
5313
5892
  // remove the group will automatically remove the panels
5314
- this.removeGroup(group, true);
5893
+ this.removeGroup(group, { skipActive: true });
5315
5894
  }
5316
5895
  if (hasActiveGroup) {
5317
5896
  this.doSetGroupActive(undefined);
@@ -5333,6 +5912,9 @@ class DockviewComponent extends BaseGrid {
5333
5912
  throw new Error(`panel with id ${options.id} already exists`);
5334
5913
  }
5335
5914
  let referenceGroup;
5915
+ if (options.position && options.floating) {
5916
+ throw new Error('you can only provide one of: position, floating as arguments to .addPanel(...)');
5917
+ }
5336
5918
  if (options.position) {
5337
5919
  if (isPanelOptionsWithPanel(options.position)) {
5338
5920
  const referencePanel = typeof options.position.referencePanel === 'string'
@@ -5365,7 +5947,20 @@ class DockviewComponent extends BaseGrid {
5365
5947
  let panel;
5366
5948
  if (referenceGroup) {
5367
5949
  const target = toTarget(((_b = options.position) === null || _b === void 0 ? void 0 : _b.direction) || 'within');
5368
- if (target === 'center') {
5950
+ if (options.floating) {
5951
+ const group = this.createGroup();
5952
+ panel = this.createPanel(options, group);
5953
+ group.model.openPanel(panel);
5954
+ const o = typeof options.floating === 'object' &&
5955
+ options.floating !== null
5956
+ ? options.floating
5957
+ : {};
5958
+ this.addFloatingGroup(group, o, {
5959
+ inDragMode: false,
5960
+ skipRemoveGroup: true,
5961
+ });
5962
+ }
5963
+ else if (referenceGroup.api.isFloating || target === 'center') {
5369
5964
  panel = this.createPanel(options, referenceGroup);
5370
5965
  referenceGroup.model.openPanel(panel);
5371
5966
  }
@@ -5377,6 +5972,19 @@ class DockviewComponent extends BaseGrid {
5377
5972
  group.model.openPanel(panel);
5378
5973
  }
5379
5974
  }
5975
+ else if (options.floating) {
5976
+ const group = this.createGroup();
5977
+ panel = this.createPanel(options, group);
5978
+ group.model.openPanel(panel);
5979
+ const o = typeof options.floating === 'object' &&
5980
+ options.floating !== null
5981
+ ? options.floating
5982
+ : {};
5983
+ this.addFloatingGroup(group, o, {
5984
+ inDragMode: false,
5985
+ skipRemoveGroup: true,
5986
+ });
5987
+ }
5380
5988
  else {
5381
5989
  const group = this.createGroupAtLocation();
5382
5990
  panel = this.createPanel(options, group);
@@ -5393,7 +6001,9 @@ class DockviewComponent extends BaseGrid {
5393
6001
  throw new Error(`cannot remove panel ${panel.id}. it's missing a group.`);
5394
6002
  }
5395
6003
  group.model.removePanel(panel);
5396
- panel.dispose();
6004
+ if (!options.skipDispose) {
6005
+ panel.dispose();
6006
+ }
5397
6007
  if (group.size === 0 && options.removeEmptyGroup) {
5398
6008
  this.removeGroup(group);
5399
6009
  }
@@ -5408,7 +6018,7 @@ class DockviewComponent extends BaseGrid {
5408
6018
  }
5409
6019
  updateWatermark() {
5410
6020
  var _a, _b;
5411
- if (this.groups.length === 0) {
6021
+ if (this.groups.filter((x) => !x.api.isFloating).length === 0) {
5412
6022
  if (!this.watermark) {
5413
6023
  this.watermark = this.createWatermarkComponent();
5414
6024
  this.watermark.init({
@@ -5417,7 +6027,7 @@ class DockviewComponent extends BaseGrid {
5417
6027
  const watermarkContainer = document.createElement('div');
5418
6028
  watermarkContainer.className = 'dv-watermark-container';
5419
6029
  watermarkContainer.appendChild(this.watermark.element);
5420
- this.element.appendChild(watermarkContainer);
6030
+ this.gridview.element.appendChild(watermarkContainer);
5421
6031
  }
5422
6032
  }
5423
6033
  else if (this.watermark) {
@@ -5467,15 +6077,28 @@ class DockviewComponent extends BaseGrid {
5467
6077
  return group;
5468
6078
  }
5469
6079
  }
5470
- removeGroup(group, skipActive = false) {
6080
+ removeGroup(group, options) {
6081
+ var _a;
5471
6082
  const panels = [...group.panels]; // reassign since group panels will mutate
5472
6083
  for (const panel of panels) {
5473
6084
  this.removePanel(panel, {
5474
6085
  removeEmptyGroup: false,
5475
- skipDispose: false,
6086
+ skipDispose: (_a = options === null || options === void 0 ? void 0 : options.skipDispose) !== null && _a !== void 0 ? _a : false,
5476
6087
  });
5477
6088
  }
5478
- super.doRemoveGroup(group, { skipActive });
6089
+ this.doRemoveGroup(group, options);
6090
+ }
6091
+ doRemoveGroup(group, options) {
6092
+ const floatingGroup = this.floatingGroups.find((_) => _.group === group);
6093
+ if (floatingGroup) {
6094
+ if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
6095
+ floatingGroup.group.dispose();
6096
+ this._groups.delete(group.id);
6097
+ }
6098
+ floatingGroup.dispose();
6099
+ return floatingGroup.group;
6100
+ }
6101
+ return super.doRemoveGroup(group, options);
5479
6102
  }
5480
6103
  moveGroupOrPanel(destinationGroup, sourceGroupId, sourceItemId, destinationTarget, destinationIndex) {
5481
6104
  var _a;
@@ -5506,25 +6129,26 @@ class DockviewComponent extends BaseGrid {
5506
6129
  const targetLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, destinationTarget);
5507
6130
  if (sourceGroup && sourceGroup.size < 2) {
5508
6131
  const [targetParentLocation, to] = tail(targetLocation);
5509
- const sourceLocation = getGridLocation(sourceGroup.element);
5510
- const [sourceParentLocation, from] = tail(sourceLocation);
5511
- if (sequenceEquals(sourceParentLocation, targetParentLocation)) {
5512
- // special case when 'swapping' two views within same grid location
5513
- // if a group has one tab - we are essentially moving the 'group'
5514
- // which is equivalent to swapping two views in this case
5515
- this.gridview.moveView(sourceParentLocation, from, to);
5516
- }
5517
- else {
5518
- // source group will become empty so delete the group
5519
- const targetGroup = this.doRemoveGroup(sourceGroup, {
5520
- skipActive: true,
5521
- skipDispose: true,
5522
- });
5523
- // after deleting the group we need to re-evaulate the ref location
5524
- const updatedReferenceLocation = getGridLocation(destinationGroup.element);
5525
- const location = getRelativeLocation(this.gridview.orientation, updatedReferenceLocation, destinationTarget);
5526
- this.doAddGroup(targetGroup, location);
6132
+ const isFloating = this.floatingGroups.find((x) => x.group === sourceGroup);
6133
+ if (!isFloating) {
6134
+ const sourceLocation = getGridLocation(sourceGroup.element);
6135
+ const [sourceParentLocation, from] = tail(sourceLocation);
6136
+ if (sequenceEquals(sourceParentLocation, targetParentLocation)) {
6137
+ // special case when 'swapping' two views within same grid location
6138
+ // if a group has one tab - we are essentially moving the 'group'
6139
+ // which is equivalent to swapping two views in this case
6140
+ this.gridview.moveView(sourceParentLocation, from, to);
6141
+ }
5527
6142
  }
6143
+ // source group will become empty so delete the group
6144
+ const targetGroup = this.doRemoveGroup(sourceGroup, {
6145
+ skipActive: true,
6146
+ skipDispose: true,
6147
+ });
6148
+ // after deleting the group we need to re-evaulate the ref location
6149
+ const updatedReferenceLocation = getGridLocation(destinationGroup.element);
6150
+ const location = getRelativeLocation(this.gridview.orientation, updatedReferenceLocation, destinationTarget);
6151
+ this.doAddGroup(targetGroup, location);
5528
6152
  }
5529
6153
  else {
5530
6154
  const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(sourceItemId)) ||
@@ -5553,7 +6177,13 @@ class DockviewComponent extends BaseGrid {
5553
6177
  }
5554
6178
  }
5555
6179
  else {
5556
- this.gridview.removeView(getGridLocation(sourceGroup.element));
6180
+ const floatingGroup = this.floatingGroups.find((x) => x.group === sourceGroup);
6181
+ if (floatingGroup) {
6182
+ floatingGroup.dispose();
6183
+ }
6184
+ else {
6185
+ this.gridview.removeView(getGridLocation(sourceGroup.element));
6186
+ }
5557
6187
  const referenceLocation = getGridLocation(referenceGroup.element);
5558
6188
  const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
5559
6189
  this.gridview.addView(sourceGroup, exports.Sizing.Distribute, dropLocation);
@@ -5708,6 +6338,9 @@ class GridviewComponent extends BaseGrid {
5708
6338
  this.clear();
5709
6339
  const { grid, activePanel } = serializedGridview;
5710
6340
  const queue = [];
6341
+ // take note of the existing dimensions
6342
+ const width = this.width;
6343
+ const height = this.height;
5711
6344
  this.gridview.deserialize(grid, {
5712
6345
  fromJSON: (node) => {
5713
6346
  const { data } = node;
@@ -5733,7 +6366,7 @@ class GridviewComponent extends BaseGrid {
5733
6366
  return view;
5734
6367
  },
5735
6368
  });
5736
- this.layout(this.width, this.height, true);
6369
+ this.layout(width, height, true);
5737
6370
  queue.forEach((f) => f());
5738
6371
  if (typeof activePanel === 'string') {
5739
6372
  const panel = this.getPanel(activePanel);
@@ -6047,6 +6680,9 @@ class SplitviewComponent extends Resizable {
6047
6680
  this.clear();
6048
6681
  const { views, orientation, size, activeView } = serializedSplitview;
6049
6682
  const queue = [];
6683
+ // take note of the existing dimensions
6684
+ const width = this.width;
6685
+ const height = this.height;
6050
6686
  this.splitview = new Splitview(this.element, {
6051
6687
  orientation,
6052
6688
  proportionalLayout: this.options.proportionalLayout,
@@ -6083,7 +6719,7 @@ class SplitviewComponent extends Resizable {
6083
6719
  }),
6084
6720
  },
6085
6721
  });
6086
- this.layout(this.width, this.height);
6722
+ this.layout(width, height);
6087
6723
  queue.forEach((f) => f());
6088
6724
  if (typeof activeView === 'string') {
6089
6725
  const panel = this.getPanel(activeView);
@@ -6350,6 +6986,9 @@ class PaneviewComponent extends Resizable {
6350
6986
  this.clear();
6351
6987
  const { views, size } = serializedPaneview;
6352
6988
  const queue = [];
6989
+ // take note of the existing dimensions
6990
+ const width = this.width;
6991
+ const height = this.height;
6353
6992
  this.paneview = new Paneview(this.element, {
6354
6993
  orientation: exports.Orientation.VERTICAL,
6355
6994
  descriptor: {
@@ -6405,7 +7044,7 @@ class PaneviewComponent extends Resizable {
6405
7044
  }),
6406
7045
  },
6407
7046
  });
6408
- this.layout(this.width, this.height);
7047
+ this.layout(width, height);
6409
7048
  queue.forEach((f) => f());
6410
7049
  this._onDidLayoutfromJSON.fire();
6411
7050
  }
@@ -6591,4 +7230,4 @@ exports.isPanelOptionsWithPanel = isPanelOptionsWithPanel;
6591
7230
  exports.orthogonal = orthogonal;
6592
7231
  exports.positionToDirection = positionToDirection;
6593
7232
  exports.toTarget = toTarget;
6594
- exports.watchElementResize = watchElementResize;
7233
+ //# sourceMappingURL=dockview-core.cjs.js.map