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
  */
@@ -31,7 +31,7 @@ function styleInject(css, ref) {
31
31
  }
32
32
  }
33
33
 
34
- var css_248z = ".dockview-svg {\n display: inline-block;\n fill: currentcolor;\n line-height: 1;\n stroke: currentcolor;\n stroke-width: 0;\n}\n.dockview-theme-dark {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-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}";
34
+ var css_248z = ".dockview-svg {\n display: inline-block;\n fill: currentcolor;\n line-height: 1;\n stroke: currentcolor;\n stroke-width: 0;\n}\n.dockview-theme-dark {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n}\n\n.dockview-theme-light {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: white;\n --dv-tabs-and-actions-container-background-color: #f3f3f3;\n --dv-activegroup-visiblepanel-tab-background-color: white;\n --dv-activegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-inactivegroup-visiblepanel-tab-background-color: white;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-tab-divider-color: white;\n --dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-activegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.35);\n --dv-separator-border: rgba(128, 128, 128, 0.35);\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n}\n\n.dockview-theme-vs {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n --dv-tabs-and-actions-container-background-color: #2d2d30;\n --dv-tabs-and-actions-container-height: 20px;\n --dv-tabs-and-actions-container-font-size: 11px;\n --dv-activegroup-visiblepanel-tab-background-color: #007acc;\n --dv-inactivegroup-visiblepanel-tab-background-color: #3f3f46;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: white;\n --dv-inactivegroup-visiblepanel-tab-color: white;\n --dv-inactivegroup-hiddenpanel-tab-color: white;\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-activegroup-hiddenpanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n}\n\n.dockview-theme-abyss {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #000c18;\n --dv-tabs-and-actions-container-background-color: #1c1c2a;\n --dv-activegroup-visiblepanel-tab-background-color: #000c18;\n --dv-activegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #000c18;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-tab-divider-color: #2b2b4a;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.25);\n --dv-separator-border: #2b2b4a;\n --dv-paneview-header-border-color: #2b2b4a;\n --dv-paneview-active-outline-color: #596f99;\n}\n\n.dockview-theme-dracula {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #282a36;\n --dv-tabs-and-actions-container-background-color: #191a21;\n --dv-activegroup-visiblepanel-tab-background-color: #282a36;\n --dv-activegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #282a36;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-tab-divider-color: #191a21;\n --dv-activegroup-visiblepanel-tab-color: rgb(248, 248, 242);\n --dv-activegroup-hiddenpanel-tab-color: rgb(98, 114, 164);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(248, 248, 242, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(98, 114, 164, 0.5);\n --dv-separator-border: #bd93f9;\n --dv-paneview-header-border-color: #bd93f9;\n --dv-paneview-active-outline-color: #6272a4;\n}\n.dockview-theme-dracula .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab::after {\n position: absolute;\n left: 0px;\n top: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #94527e;\n z-index: 999;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #5e3d5a;\n z-index: 999;\n}\n\n.dockview-theme-replit {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #ebeced;\n --dv-tabs-and-actions-container-background-color: #fcfcfc;\n --dv-activegroup-visiblepanel-tab-background-color: #f0f1f2;\n --dv-activegroup-hiddenpanel-tab-background-color: ##fcfcfc;\n --dv-inactivegroup-visiblepanel-tab-background-color: #f0f1f2;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #fcfcfc;\n --dv-tab-divider-color: transparent;\n --dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-activegroup-hiddenpanel-tab-color: rgb(51, 51, 51);\n --dv-inactivegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-inactivegroup-hiddenpanel-tab-color: rgb(51, 51, 51);\n --dv-separator-border: transparent;\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n --dv-background-color: #ebeced;\n --dv-separator-handle-background-color: #cfd1d3;\n --dv-separator-handle-hover-background-color: #babbbb;\n}\n.dockview-theme-replit.dv-dockview {\n padding: 3px;\n}\n.dockview-theme-replit .view:has(> .groupview) {\n padding: 3px;\n}\n.dockview-theme-replit .dv-resize-container:has(> .groupview) {\n border-radius: 8px;\n}\n.dockview-theme-replit .groupview {\n overflow: hidden;\n border-radius: 10px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container {\n border-bottom: 1px solid rgba(128, 128, 128, 0.35);\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab {\n margin: 4px;\n border-radius: 8px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab .dockview-svg {\n height: 8px;\n width: 8px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab:hover {\n background-color: #e4e5e6 !important;\n}\n.dockview-theme-replit .groupview .content-container {\n background-color: #fcfcfc;\n}\n.dockview-theme-replit .groupview.active-group {\n border: 1px solid rgba(128, 128, 128, 0.35);\n}\n.dockview-theme-replit .groupview.inactive-group {\n border: 1px solid transparent;\n}\n.dockview-theme-replit .vertical > .sash-container > .sash::after {\n content: \"\";\n height: 4px;\n width: 40px;\n border-radius: 2px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--dv-separator-handle-background-color);\n position: absolute;\n}\n.dockview-theme-replit .vertical > .sash-container > .sash:hover::after {\n background-color: var(--dv-separator-handle-hover-background-color);\n}\n.dockview-theme-replit .horizontal > .sash-container > .sash::after {\n content: \"\";\n height: 40px;\n width: 4px;\n border-radius: 2px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--dv-separator-handle-background-color);\n position: absolute;\n}\n.dockview-theme-replit .horizontal > .sash-container > .sash:hover::after {\n background-color: var(--dv-separator-handle-hover-background-color);\n}\n.drop-target {\n position: relative;\n}\n.drop-target > .drop-target-dropzone {\n position: absolute;\n left: 0px;\n top: 0px;\n height: 100%;\n width: 100%;\n z-index: 1000;\n pointer-events: none;\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection {\n position: relative;\n box-sizing: border-box;\n height: 100%;\n width: 100%;\n background-color: var(--dv-drag-over-background-color);\n transition: top 70ms ease-out, left 70ms ease-out, width 70ms ease-out, height 70ms ease-out, opacity 0.15s ease-out;\n will-change: transform;\n pointer-events: none;\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-top {\n border-top: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-bottom {\n border-bottom: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-left {\n border-left: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-right {\n border-right: 1px solid var(--dv-drag-over-border-color);\n}\n.dv-debug .dv-resize-container .dv-resize-handle-top {\n background-color: red;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-bottom {\n background-color: green;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-left {\n background-color: yellow;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-right {\n background-color: blue;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-topleft,\n.dv-debug .dv-resize-container .dv-resize-handle-topright,\n.dv-debug .dv-resize-container .dv-resize-handle-bottomleft,\n.dv-debug .dv-resize-container .dv-resize-handle-bottomright {\n background-color: cyan;\n}\n\n.dv-resize-container {\n position: absolute;\n z-index: 997;\n border: 1px solid var(--dv-tab-divider-color);\n box-shadow: var(--dv-floating-box-shadow);\n}\n.dv-resize-container.dv-bring-to-front {\n z-index: 998;\n}\n.dv-resize-container.dv-resize-container-dragging {\n opacity: 0.5;\n}\n.dv-resize-container .dv-resize-handle-top {\n height: 4px;\n width: calc(100% - 8px);\n left: 4px;\n top: -2px;\n z-index: 999;\n position: absolute;\n cursor: ns-resize;\n}\n.dv-resize-container .dv-resize-handle-bottom {\n height: 4px;\n width: calc(100% - 8px);\n left: 4px;\n bottom: -2px;\n z-index: 999;\n position: absolute;\n cursor: ns-resize;\n}\n.dv-resize-container .dv-resize-handle-left {\n height: calc(100% - 8px);\n width: 4px;\n left: -2px;\n top: 4px;\n z-index: 999;\n position: absolute;\n cursor: ew-resize;\n}\n.dv-resize-container .dv-resize-handle-right {\n height: calc(100% - 8px);\n width: 4px;\n right: -2px;\n top: 4px;\n z-index: 999;\n position: absolute;\n cursor: ew-resize;\n}\n.dv-resize-container .dv-resize-handle-topleft {\n height: 4px;\n width: 4px;\n top: -2px;\n left: -2px;\n z-index: 999;\n position: absolute;\n cursor: nw-resize;\n}\n.dv-resize-container .dv-resize-handle-topright {\n height: 4px;\n width: 4px;\n right: -2px;\n top: -2px;\n z-index: 999;\n position: absolute;\n cursor: ne-resize;\n}\n.dv-resize-container .dv-resize-handle-bottomleft {\n height: 4px;\n width: 4px;\n left: -2px;\n bottom: -2px;\n z-index: 999;\n position: absolute;\n cursor: sw-resize;\n}\n.dv-resize-container .dv-resize-handle-bottomright {\n height: 4px;\n width: 4px;\n right: -2px;\n bottom: -2px;\n z-index: 999;\n position: absolute;\n cursor: se-resize;\n}\n.dv-dockview {\n position: relative;\n background-color: var(--dv-group-view-background-color);\n}\n.dv-dockview .dv-watermark-container {\n position: absolute;\n top: 0px;\n left: 0px;\n height: 100%;\n width: 100%;\n z-index: 1;\n}\n\n.groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.inactive-tab {\n background-color: var(--dv-activegroup-hiddenpanel-tab-background-color);\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n background-color: var(--dv-inactivegroup-visiblepanel-tab-background-color);\n color: var(--dv-inactivegroup-visiblepanel-tab-color);\n}\n.groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.inactive-tab {\n background-color: var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n color: var(--dv-inactivegroup-hiddenpanel-tab-color);\n}\n\n/**\n * when a tab is dragged we lose the above stylings because they are conditional on parent elements\n * therefore we also set some stylings for the dragging event\n **/\n.tab.dv-tab-dragging {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.groupview {\n display: flex;\n flex-direction: column;\n height: 100%;\n background-color: var(--dv-group-view-background-color);\n overflow: hidden;\n}\n.groupview:focus {\n outline: none;\n}\n.groupview.empty > .tabs-and-actions-container {\n display: none;\n}\n.groupview > .content-container {\n flex-grow: 1;\n overflow: hidden;\n outline: none;\n}\n.grid-view,\n.branch-node {\n height: 100%;\n width: 100%;\n}\n.pane-container {\n height: 100%;\n width: 100%;\n}\n.pane-container.animated .view {\n transition-duration: 0.15s;\n transition-timing-function: ease-out;\n}\n.pane-container .view {\n overflow: hidden;\n display: flex;\n flex-direction: column;\n padding: 0px !important;\n}\n.pane-container .view:not(:first-child)::before {\n background-color: transparent !important;\n}\n.pane-container .view:not(:first-child) .pane > .pane-header {\n border-top: 1px solid var(--dv-paneview-header-border-color);\n}\n.pane-container .view .default-header {\n background-color: var(--dv-group-view-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n display: flex;\n padding: 0px 8px;\n cursor: pointer;\n}\n.pane-container .view .default-header .dockview-pane-header-icon {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.pane-container .view .default-header > span {\n padding-left: 8px;\n flex-grow: 1;\n}\n.pane-container:first-of-type > .pane > .pane-header {\n border-top: none !important;\n}\n.pane-container .pane {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n height: 100%;\n}\n.pane-container .pane .pane-header {\n box-sizing: border-box;\n user-select: none;\n position: relative;\n outline: none;\n}\n.pane-container .pane .pane-header.pane-draggable {\n cursor: pointer;\n}\n.pane-container .pane .pane-header:focus:before, .pane-container .pane .pane-header:focus-within:before {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 5;\n content: \"\";\n pointer-events: none;\n outline: 1px solid;\n outline-width: -1px;\n outline-style: solid;\n outline-offset: -1px;\n outline-color: var(--dv-paneview-active-outline-color);\n}\n.pane-container .pane .pane-body {\n overflow-y: auto;\n overflow-x: hidden;\n flex-grow: 1;\n position: relative;\n outline: none;\n}\n.pane-container .pane .pane-body:focus:before, .pane-container .pane .pane-body:focus-within:before {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 5;\n content: \"\";\n pointer-events: none;\n outline: 1px solid;\n outline-width: -1px;\n outline-style: solid;\n outline-offset: -1px;\n outline-color: var(--dv-paneview-active-outline-color);\n}\n.dv-debug .split-view-container .sash-container .sash.enabled {\n background-color: black;\n}\n.dv-debug .split-view-container .sash-container .sash.disabled {\n background-color: orange;\n}\n.dv-debug .split-view-container .sash-container .sash.maximum {\n background-color: green;\n}\n.dv-debug .split-view-container .sash-container .sash.minimum {\n background-color: red;\n}\n\n.split-view-container {\n position: relative;\n overflow: hidden;\n height: 100%;\n width: 100%;\n}\n.split-view-container.animation .view,\n.split-view-container.animation .sash {\n transition-duration: 0.15s;\n transition-timing-function: ease-out;\n}\n.split-view-container.horizontal {\n height: 100%;\n}\n.split-view-container.horizontal > .sash-container > .sash {\n height: 100%;\n width: 4px;\n}\n.split-view-container.horizontal > .sash-container > .sash.enabled {\n cursor: ew-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.horizontal > .sash-container > .sash.maximum {\n cursor: w-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.minimum {\n cursor: e-resize;\n}\n.split-view-container.horizontal > .view-container > .view:not(:first-child)::before {\n height: 100%;\n width: 1px;\n}\n.split-view-container.vertical {\n width: 100%;\n}\n.split-view-container.vertical > .sash-container > .sash {\n width: 100%;\n height: 4px;\n}\n.split-view-container.vertical > .sash-container > .sash.enabled {\n cursor: ns-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.vertical > .sash-container > .sash.maximum {\n cursor: n-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.minimum {\n cursor: s-resize;\n}\n.split-view-container.vertical > .view-container > .view {\n width: 100%;\n}\n.split-view-container.vertical > .view-container > .view:not(:first-child)::before {\n height: 1px;\n width: 100%;\n}\n.split-view-container .sash-container {\n height: 100%;\n width: 100%;\n position: absolute;\n}\n.split-view-container .sash-container .sash {\n position: absolute;\n z-index: 99;\n outline: none;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n touch-action: none;\n}\n.split-view-container .sash-container .sash:active {\n transition: background-color 0.1s ease-in-out;\n background-color: var(--dv-active-sash-color, transparent);\n}\n.split-view-container .sash-container .sash:hover {\n background-color: var(--dv-active-sash-color, transparent);\n transition: background-color 0.1s ease-in-out;\n transition-delay: 0.5s;\n}\n.split-view-container .view-container {\n position: relative;\n height: 100%;\n width: 100%;\n background-color: var(--dv-background-color);\n}\n.split-view-container .view-container .view {\n height: 100%;\n box-sizing: border-box;\n overflow: auto;\n position: absolute;\n}\n.split-view-container.separator-border .view:not(:first-child)::before {\n content: \" \";\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n background-color: var(--dv-separator-border);\n}\n.dv-dragged {\n transform: translate3d(0px, 0px, 0px); /* forces tab to be drawn on a separate layer (see https://github.com/microsoft/vscode/issues/18733) */\n}\n\n.tab {\n flex-shrink: 0;\n}\n.tab.dv-tab-dragging .tab-action {\n background-color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.tab.active-tab > .default-tab .tab-action {\n visibility: visible;\n}\n.tab.inactive-tab > .default-tab .tab-action {\n visibility: hidden;\n}\n.tab.inactive-tab > .default-tab:hover .tab-action {\n visibility: visible;\n}\n.tab .default-tab {\n position: relative;\n height: 100%;\n display: flex;\n min-width: 80px;\n align-items: center;\n padding: 0px 8px;\n white-space: nowrap;\n text-overflow: elipsis;\n}\n.tab .default-tab .tab-content {\n padding: 0px 8px;\n flex-grow: 1;\n}\n.tab .default-tab .action-container {\n text-align: right;\n display: flex;\n}\n.tab .default-tab .action-container .tab-list {\n display: flex;\n padding: 0px;\n margin: 0px;\n justify-content: flex-end;\n}\n.tab .default-tab .action-container .tab-list .tab-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n}\n.tab .default-tab .action-container .tab-list .tab-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}\n.tabs-and-actions-container {\n display: flex;\n background-color: var(--dv-tabs-and-actions-container-background-color);\n flex-shrink: 0;\n box-sizing: border-box;\n height: var(--dv-tabs-and-actions-container-height);\n font-size: var(--dv-tabs-and-actions-container-font-size);\n}\n.tabs-and-actions-container.hidden {\n display: none;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .tabs-container {\n flex-grow: 1;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .tabs-container .tab {\n flex-grow: 1;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .void-container {\n flex-grow: 0;\n}\n.tabs-and-actions-container .void-container {\n display: flex;\n flex-grow: 1;\n cursor: grab;\n}\n.tabs-and-actions-container .tabs-container {\n display: flex;\n overflow-x: overlay;\n overflow-y: hidden;\n scrollbar-width: thin;\n /* Track */\n /* Handle */\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar {\n height: 3px;\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar-track {\n background: transparent;\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar-thumb {\n background: var(--dv-tabs-container-scrollbar-color);\n}\n.tabs-and-actions-container .tabs-container .tab {\n -webkit-user-drag: element;\n outline: none;\n min-width: 75px;\n cursor: pointer;\n position: relative;\n box-sizing: border-box;\n}\n.tabs-and-actions-container .tabs-container .tab:not(:first-child)::before {\n content: \" \";\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n background-color: var(--dv-tab-divider-color);\n width: 1px;\n height: 100%;\n}\n.watermark {\n display: flex;\n width: 100%;\n}\n.watermark.has-actions .watermark-title .actions-container {\n display: none;\n}\n.watermark .watermark-title {\n height: 35px;\n width: 100%;\n display: flex;\n}\n.watermark .watermark-content {\n flex-grow: 1;\n}\n.watermark .actions-container {\n display: flex;\n align-items: center;\n padding: 0px 8px;\n}\n.watermark .actions-container .close-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n cursor: pointer;\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.watermark .actions-container .close-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}";
35
35
  styleInject(css_248z);
36
36
 
37
37
  class TransferObject {
@@ -301,6 +301,31 @@ class MutableDisposable {
301
301
  }
302
302
  }
303
303
 
304
+ function createComponent(id, componentName, components = {}, frameworkComponents = {}, createFrameworkComponent, fallback) {
305
+ const Component = typeof componentName === 'string'
306
+ ? components[componentName]
307
+ : undefined;
308
+ const FrameworkComponent = typeof componentName === 'string'
309
+ ? frameworkComponents[componentName]
310
+ : undefined;
311
+ if (Component && FrameworkComponent) {
312
+ throw new Error(`Cannot create '${id}'. component '${componentName}' registered as both a component and frameworkComponent`);
313
+ }
314
+ if (FrameworkComponent) {
315
+ if (!createFrameworkComponent) {
316
+ throw new Error(`Cannot create '${id}' for framework component '${componentName}'. you must register a frameworkPanelWrapper to use framework components`);
317
+ }
318
+ return createFrameworkComponent.createComponent(id, componentName, FrameworkComponent);
319
+ }
320
+ if (!Component) {
321
+ if (fallback) {
322
+ return fallback();
323
+ }
324
+ throw new Error(`Cannot create '${id}', no component '${componentName}' provided`);
325
+ }
326
+ return new Component(id, componentName);
327
+ }
328
+
304
329
  function watchElementResize(element, cb) {
305
330
  const observer = new ResizeObserver((entires) => {
306
331
  /**
@@ -414,31 +439,16 @@ class FocusTracker extends CompositeDisposable {
414
439
  refreshState() {
415
440
  this._refreshStateHandler();
416
441
  }
417
- }
418
-
419
- function createComponent(id, componentName, components = {}, frameworkComponents = {}, createFrameworkComponent, fallback) {
420
- const Component = typeof componentName === 'string'
421
- ? components[componentName]
422
- : undefined;
423
- const FrameworkComponent = typeof componentName === 'string'
424
- ? frameworkComponents[componentName]
425
- : undefined;
426
- if (Component && FrameworkComponent) {
427
- throw new Error(`Cannot create '${id}'. component '${componentName}' registered as both a component and frameworkComponent`);
428
- }
429
- if (FrameworkComponent) {
430
- if (!createFrameworkComponent) {
431
- throw new Error(`Cannot create '${id}' for framework component '${componentName}'. you must register a frameworkPanelWrapper to use framework components`);
432
- }
433
- return createFrameworkComponent.createComponent(id, componentName, FrameworkComponent);
434
- }
435
- if (!Component) {
436
- if (fallback) {
437
- return fallback();
438
- }
439
- throw new Error(`Cannot create '${id}', no component '${componentName}' provided`);
440
- }
441
- return new Component(id, componentName);
442
+ }
443
+ // quasi: apparently, but not really; seemingly
444
+ const QUASI_PREVENT_DEFAULT_KEY = 'dv-quasiPreventDefault';
445
+ // mark an event directly for other listeners to check
446
+ function quasiPreventDefault(event) {
447
+ event[QUASI_PREVENT_DEFAULT_KEY] = true;
448
+ }
449
+ // check if this event has been marked
450
+ function quasiDefaultPrevented(event) {
451
+ return event[QUASI_PREVENT_DEFAULT_KEY];
442
452
  }
443
453
 
444
454
  function tail(arr) {
@@ -489,6 +499,14 @@ function firstIndex(array, fn) {
489
499
  }
490
500
  }
491
501
  return -1;
502
+ }
503
+ function remove(array, value) {
504
+ const index = array.findIndex((t) => t === value);
505
+ if (index > -1) {
506
+ array.splice(index, 1);
507
+ return true;
508
+ }
509
+ return false;
492
510
  }
493
511
 
494
512
  const clamp = (value, min, max) => {
@@ -1631,7 +1649,7 @@ class BranchNode extends CompositeDisposable {
1631
1649
  : true,
1632
1650
  };
1633
1651
  }),
1634
- size: this.size,
1652
+ size: this.orthogonalSize,
1635
1653
  };
1636
1654
  this.children = childDescriptors.map((c) => c.node);
1637
1655
  this.splitview = new Splitview(this.element, {
@@ -1694,7 +1712,7 @@ class BranchNode extends CompositeDisposable {
1694
1712
  layout(size, orthogonalSize) {
1695
1713
  this._size = orthogonalSize;
1696
1714
  this._orthogonalSize = size;
1697
- this.splitview.layout(this.size, this.orthogonalSize);
1715
+ this.splitview.layout(orthogonalSize, size);
1698
1716
  }
1699
1717
  addChild(node, size, index, skipLayout) {
1700
1718
  if (index < 0 || index > this.children.length) {
@@ -1919,9 +1937,9 @@ class Gridview {
1919
1937
  this._deserialize(json.root, orientation, deserializer, height);
1920
1938
  }
1921
1939
  _deserialize(root, orientation, deserializer, orthogonalSize) {
1922
- this.root = this._deserializeNode(root, orientation, deserializer, orthogonalSize, true);
1940
+ this.root = this._deserializeNode(root, orientation, deserializer, orthogonalSize);
1923
1941
  }
1924
- _deserializeNode(node, orientation, deserializer, orthogonalSize, isRoot = false) {
1942
+ _deserializeNode(node, orientation, deserializer, orthogonalSize) {
1925
1943
  let result;
1926
1944
  if (node.type === 'branch') {
1927
1945
  const serializedChildren = node.data;
@@ -1931,9 +1949,9 @@ class Gridview {
1931
1949
  visible: serializedChild.visible,
1932
1950
  };
1933
1951
  });
1934
- // HORIZONTAL => height=orthogonalsize width=size
1935
- // VERTICAL => height=size width=orthogonalsize
1936
- result = new BranchNode(orientation, this.proportionalLayout, this.styles, isRoot ? orthogonalSize : node.size, isRoot ? node.size : orthogonalSize, children);
1952
+ result = new BranchNode(orientation, this.proportionalLayout, this.styles, node.size, // <- orthogonal size - flips at each depth
1953
+ orthogonalSize, // <- size - flips at each depth
1954
+ children);
1937
1955
  }
1938
1956
  else {
1939
1957
  result = new LeafNode(deserializer.fromJSON(node), orientation, orthogonalSize, node.size);
@@ -1966,7 +1984,8 @@ class Gridview {
1966
1984
  const oldRoot = this.root;
1967
1985
  oldRoot.element.remove();
1968
1986
  this._root = new BranchNode(orthogonal(oldRoot.orientation), this.proportionalLayout, this.styles, this.root.orthogonalSize, this.root.size);
1969
- if (oldRoot.children.length === 1) {
1987
+ if (oldRoot.children.length === 0) ;
1988
+ else if (oldRoot.children.length === 1) {
1970
1989
  // can remove one level of redundant branching if there is only a single child
1971
1990
  const childReference = oldRoot.children[0];
1972
1991
  const child = oldRoot.removeChild(0); // remove to prevent disposal when disposing of unwanted root
@@ -2482,6 +2501,9 @@ class DockviewApi {
2482
2501
  addPanel(options) {
2483
2502
  return this.component.addPanel(options);
2484
2503
  }
2504
+ removePanel(panel) {
2505
+ this.component.removePanel(panel);
2506
+ }
2485
2507
  addGroup(options) {
2486
2508
  return this.component.addGroup(options);
2487
2509
  }
@@ -2500,6 +2522,9 @@ class DockviewApi {
2500
2522
  getGroup(id) {
2501
2523
  return this.component.getPanel(id);
2502
2524
  }
2525
+ addFloatingGroup(item, coord) {
2526
+ return this.component.addFloatingGroup(item, coord);
2527
+ }
2503
2528
  fromJSON(data) {
2504
2529
  this.component.fromJSON(data);
2505
2530
  }
@@ -2592,10 +2617,14 @@ class Droptarget extends CompositeDisposable {
2592
2617
  this._onDrop = new Emitter();
2593
2618
  this.onDrop = this._onDrop.event;
2594
2619
  // use a set to take advantage of #<set>.has
2595
- const acceptedTargetZonesSet = new Set(this.options.acceptedTargetZones);
2620
+ this._acceptedTargetZonesSet = new Set(this.options.acceptedTargetZones);
2596
2621
  this.addDisposables(this._onDrop, new DragAndDropObserver(this.element, {
2597
2622
  onDragEnter: () => undefined,
2598
2623
  onDragOver: (e) => {
2624
+ if (this._acceptedTargetZonesSet.size === 0) {
2625
+ this.removeDropTarget();
2626
+ return;
2627
+ }
2599
2628
  const width = this.element.clientWidth;
2600
2629
  const height = this.element.clientHeight;
2601
2630
  if (width === 0 || height === 0) {
@@ -2604,20 +2633,28 @@ class Droptarget extends CompositeDisposable {
2604
2633
  const rect = e.currentTarget.getBoundingClientRect();
2605
2634
  const x = e.clientX - rect.left;
2606
2635
  const y = e.clientY - rect.top;
2607
- const quadrant = this.calculateQuadrant(acceptedTargetZonesSet, x, y, width, height);
2608
- if (quadrant === null) {
2636
+ const quadrant = this.calculateQuadrant(this._acceptedTargetZonesSet, x, y, width, height);
2637
+ /**
2638
+ * If the event has already been used by another DropTarget instance
2639
+ * then don't show a second drop target, only one target should be
2640
+ * active at any one time
2641
+ */
2642
+ if (this.isAlreadyUsed(e) || quadrant === null) {
2609
2643
  // no drop target should be displayed
2610
2644
  this.removeDropTarget();
2611
2645
  return;
2612
2646
  }
2613
2647
  if (typeof this.options.canDisplayOverlay === 'boolean') {
2614
2648
  if (!this.options.canDisplayOverlay) {
2649
+ this.removeDropTarget();
2615
2650
  return;
2616
2651
  }
2617
2652
  }
2618
2653
  else if (!this.options.canDisplayOverlay(e, quadrant)) {
2654
+ this.removeDropTarget();
2619
2655
  return;
2620
2656
  }
2657
+ this.markAsUsed(e);
2621
2658
  if (!this.targetElement) {
2622
2659
  this.targetElement = document.createElement('div');
2623
2660
  this.targetElement.className = 'drop-target-dropzone';
@@ -2628,12 +2665,6 @@ class Droptarget extends CompositeDisposable {
2628
2665
  this.element.classList.add('drop-target');
2629
2666
  this.element.append(this.targetElement);
2630
2667
  }
2631
- if (this.options.acceptedTargetZones.length === 0) {
2632
- return;
2633
- }
2634
- if (!this.targetElement || !this.overlayElement) {
2635
- return;
2636
- }
2637
2668
  this.toggleClasses(quadrant, width, height);
2638
2669
  this.setState(quadrant);
2639
2670
  },
@@ -2656,10 +2687,26 @@ class Droptarget extends CompositeDisposable {
2656
2687
  },
2657
2688
  }));
2658
2689
  }
2690
+ setTargetZones(acceptedTargetZones) {
2691
+ this._acceptedTargetZonesSet = new Set(acceptedTargetZones);
2692
+ }
2659
2693
  dispose() {
2660
2694
  this.removeDropTarget();
2661
2695
  super.dispose();
2662
2696
  }
2697
+ /**
2698
+ * Add a property to the event object for other potential listeners to check
2699
+ */
2700
+ markAsUsed(event) {
2701
+ event[Droptarget.USED_EVENT_ID] = true;
2702
+ }
2703
+ /**
2704
+ * Check is the event has already been used by another instance od DropTarget
2705
+ */
2706
+ isAlreadyUsed(event) {
2707
+ const value = event[Droptarget.USED_EVENT_ID];
2708
+ return typeof value === 'boolean' && value;
2709
+ }
2663
2710
  toggleClasses(quadrant, width, height) {
2664
2711
  var _a, _b, _c, _d;
2665
2712
  if (!this.overlayElement) {
@@ -2754,6 +2801,7 @@ class Droptarget extends CompositeDisposable {
2754
2801
  }
2755
2802
  }
2756
2803
  }
2804
+ Droptarget.USED_EVENT_ID = '__dockview_droptarget_event_is_used__';
2757
2805
  function calculateQuadrantAsPercentage(overlayType, x, y, width, height, threshold) {
2758
2806
  const xp = (100 * x) / width;
2759
2807
  const yp = (100 * y) / height;
@@ -2883,8 +2931,15 @@ class DragHandler extends CompositeDisposable {
2883
2931
  this.addDisposables(this._onDragStart, this.dataDisposable, this.pointerEventsDisposable);
2884
2932
  this.configure();
2885
2933
  }
2934
+ isCancelled(_event) {
2935
+ return false;
2936
+ }
2886
2937
  configure() {
2887
2938
  this.addDisposables(this._onDragStart, addDisposableListener(this.el, 'dragstart', (event) => {
2939
+ if (this.isCancelled(event)) {
2940
+ event.preventDefault();
2941
+ return;
2942
+ }
2888
2943
  const iframes = [
2889
2944
  ...getElementsByTagName('iframe'),
2890
2945
  ...getElementsByTagName('webview'),
@@ -2958,13 +3013,6 @@ class Tab extends CompositeDisposable {
2958
3013
  if (event.defaultPrevented) {
2959
3014
  return;
2960
3015
  }
2961
- /**
2962
- * TODO: alternative to stopPropagation
2963
- *
2964
- * I need to stop the event propagation here since otherwise it'll be intercepted by event handlers
2965
- * on the tabs-container. I cannot use event.preventDefault() since I need the on DragStart event to occur
2966
- */
2967
- event.stopPropagation();
2968
3016
  this._onChanged.fire(event);
2969
3017
  }));
2970
3018
  this.droptarget = new Droptarget(this._element, {
@@ -3022,6 +3070,22 @@ class GroupDragHandler extends DragHandler {
3022
3070
  this.accessorId = accessorId;
3023
3071
  this.group = group;
3024
3072
  this.panelTransfer = LocalSelectionTransfer.getInstance();
3073
+ this.addDisposables(addDisposableListener(element, 'mousedown', (e) => {
3074
+ if (e.shiftKey) {
3075
+ /**
3076
+ * You cannot call e.preventDefault() because that will prevent drag events from firing
3077
+ * but we also need to stop any group overlay drag events from occuring
3078
+ * Use a custom event marker that can be checked by the overlay drag events
3079
+ */
3080
+ quasiPreventDefault(e);
3081
+ }
3082
+ }, true));
3083
+ }
3084
+ isCancelled(_event) {
3085
+ if (this.group.api.isFloating && !_event.shiftKey) {
3086
+ return true;
3087
+ }
3088
+ return false;
3025
3089
  }
3026
3090
  getData(dataTransfer) {
3027
3091
  this.panelTransfer.setData([new PanelTransfer(this.accessorId, this.group.id, null)], PanelTransfer.prototype);
@@ -3112,17 +3176,30 @@ class TabsContainer extends CompositeDisposable {
3112
3176
  hide() {
3113
3177
  this._element.style.display = 'none';
3114
3178
  }
3115
- setActionElement(element) {
3116
- if (this.actions === element) {
3179
+ setRightActionsElement(element) {
3180
+ if (this.rightActions === element) {
3117
3181
  return;
3118
3182
  }
3119
- if (this.actions) {
3120
- this.actions.remove();
3121
- this.actions = undefined;
3183
+ if (this.rightActions) {
3184
+ this.rightActions.remove();
3185
+ this.rightActions = undefined;
3122
3186
  }
3123
3187
  if (element) {
3124
- this.actionContainer.appendChild(element);
3125
- this.actions = element;
3188
+ this.rightActionsContainer.appendChild(element);
3189
+ this.rightActions = element;
3190
+ }
3191
+ }
3192
+ setLeftActionsElement(element) {
3193
+ if (this.leftActions === element) {
3194
+ return;
3195
+ }
3196
+ if (this.leftActions) {
3197
+ this.leftActions.remove();
3198
+ this.leftActions = undefined;
3199
+ }
3200
+ if (element) {
3201
+ this.leftActionsContainer.appendChild(element);
3202
+ this.leftActions = element;
3126
3203
  }
3127
3204
  }
3128
3205
  get element() {
@@ -3157,19 +3234,35 @@ class TabsContainer extends CompositeDisposable {
3157
3234
  toggleClass(this._element, 'dv-single-tab', this.size === 1);
3158
3235
  }
3159
3236
  }));
3160
- this.actionContainer = document.createElement('div');
3161
- this.actionContainer.className = 'action-container';
3237
+ this.rightActionsContainer = document.createElement('div');
3238
+ this.rightActionsContainer.className = 'right-actions-container';
3239
+ this.leftActionsContainer = document.createElement('div');
3240
+ this.leftActionsContainer.className = 'left-actions-container';
3162
3241
  this.tabContainer = document.createElement('div');
3163
3242
  this.tabContainer.className = 'tabs-container';
3164
3243
  this.voidContainer = new VoidContainer(this.accessor, this.group);
3165
3244
  this._element.appendChild(this.tabContainer);
3245
+ this._element.appendChild(this.leftActionsContainer);
3166
3246
  this._element.appendChild(this.voidContainer.element);
3167
- this._element.appendChild(this.actionContainer);
3247
+ this._element.appendChild(this.rightActionsContainer);
3168
3248
  this.addDisposables(this.voidContainer, this.voidContainer.onDrop((event) => {
3169
3249
  this._onDrop.fire({
3170
3250
  event: event.nativeEvent,
3171
3251
  index: this.tabs.length,
3172
3252
  });
3253
+ }), addDisposableListener(this.voidContainer.element, 'mousedown', (event) => {
3254
+ const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
3255
+ if (isFloatingGroupsEnabled &&
3256
+ event.shiftKey &&
3257
+ !this.group.api.isFloating) {
3258
+ event.preventDefault();
3259
+ const { top, left } = this.element.getBoundingClientRect();
3260
+ const { top: rootTop, left: rootLeft } = this.accessor.element.getBoundingClientRect();
3261
+ this.accessor.addFloatingGroup(this.group, {
3262
+ x: left - rootLeft + 20,
3263
+ y: top - rootTop + 20,
3264
+ }, { inDragMode: true });
3265
+ }
3173
3266
  }), addDisposableListener(this.tabContainer, 'mousedown', (event) => {
3174
3267
  if (event.defaultPrevented) {
3175
3268
  return;
@@ -3223,6 +3316,21 @@ class TabsContainer extends CompositeDisposable {
3223
3316
  tabToAdd.setContent(panel.view.tab);
3224
3317
  const disposable = CompositeDisposable.from(tabToAdd.onChanged((event) => {
3225
3318
  var _a;
3319
+ const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
3320
+ const isFloatingWithOnePanel = this.group.api.isFloating && this.size === 1;
3321
+ if (isFloatingGroupsEnabled &&
3322
+ !isFloatingWithOnePanel &&
3323
+ event.shiftKey) {
3324
+ event.preventDefault();
3325
+ const panel = this.accessor.getGroupPanel(tabToAdd.panelId);
3326
+ const { top, left } = tabToAdd.element.getBoundingClientRect();
3327
+ const { top: rootTop, left: rootLeft } = this.accessor.element.getBoundingClientRect();
3328
+ this.accessor.addFloatingGroup(panel, {
3329
+ x: left - rootLeft,
3330
+ y: top - rootTop,
3331
+ }, { inDragMode: true });
3332
+ return;
3333
+ }
3226
3334
  const alreadyFocused = panel.id === ((_a = this.group.model.activePanel) === null || _a === void 0 ? void 0 : _a.id) &&
3227
3335
  this.group.model.isContentFocused;
3228
3336
  const isLeftClick = event.button === 0;
@@ -3292,6 +3400,17 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3292
3400
  }
3293
3401
  return isAncestor(document.activeElement, this.contentContainer.element);
3294
3402
  }
3403
+ get isFloating() {
3404
+ return this._isFloating;
3405
+ }
3406
+ set isFloating(value) {
3407
+ this._isFloating = value;
3408
+ this.dropTarget.setTargetZones(value ? ['center'] : ['top', 'bottom', 'left', 'right', 'center']);
3409
+ toggleClass(this.container, 'dv-groupview-floating', value);
3410
+ this.groupPanel.api._onDidFloatingStateChange.fire({
3411
+ isFloating: this.isFloating,
3412
+ });
3413
+ }
3295
3414
  constructor(container, accessor, id, options, groupPanel) {
3296
3415
  super();
3297
3416
  this.container = container;
@@ -3301,6 +3420,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3301
3420
  this.groupPanel = groupPanel;
3302
3421
  this._isGroupActive = false;
3303
3422
  this._locked = false;
3423
+ this._isFloating = false;
3304
3424
  this.mostRecentlyUsed = [];
3305
3425
  this._onDidChange = new Emitter();
3306
3426
  this.onDidChange = this._onDidChange.event;
@@ -3317,7 +3437,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3317
3437
  this.onDidRemovePanel = this._onDidRemovePanel.event;
3318
3438
  this._onDidActivePanelChange = new Emitter();
3319
3439
  this.onDidActivePanelChange = this._onDidActivePanelChange.event;
3320
- this.container.classList.add('groupview');
3440
+ toggleClass(this.container, 'groupview', true);
3321
3441
  this.tabsContainer = new TabsContainer(this.accessor, this.groupPanel);
3322
3442
  this.contentContainer = new ContentContainer();
3323
3443
  this.dropTarget = new Droptarget(this.contentContainer.element, {
@@ -3327,6 +3447,9 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3327
3447
  return false;
3328
3448
  }
3329
3449
  const data = getPanelData();
3450
+ if (!data && event.shiftKey && !this.isFloating) {
3451
+ return false;
3452
+ }
3330
3453
  if (data && data.viewId === this.accessor.id) {
3331
3454
  if (data.groupId === this.id) {
3332
3455
  if (position === 'center') {
@@ -3371,14 +3494,25 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3371
3494
  // correctly initialized
3372
3495
  this.setActive(this.isActive, true, true);
3373
3496
  this.updateContainer();
3374
- if (this.accessor.options.createGroupControlElement) {
3375
- this._control = this.accessor.options.createGroupControlElement(this.groupPanel);
3376
- this.addDisposables(this._control);
3377
- this._control.init({
3497
+ if (this.accessor.options.createRightHeaderActionsElement) {
3498
+ this._rightHeaderActions =
3499
+ this.accessor.options.createRightHeaderActionsElement(this.groupPanel);
3500
+ this.addDisposables(this._rightHeaderActions);
3501
+ this._rightHeaderActions.init({
3502
+ containerApi: new DockviewApi(this.accessor),
3503
+ api: this.groupPanel.api,
3504
+ });
3505
+ this.tabsContainer.setRightActionsElement(this._rightHeaderActions.element);
3506
+ }
3507
+ if (this.accessor.options.createLeftHeaderActionsElement) {
3508
+ this._leftHeaderActions =
3509
+ this.accessor.options.createLeftHeaderActionsElement(this.groupPanel);
3510
+ this.addDisposables(this._leftHeaderActions);
3511
+ this._leftHeaderActions.init({
3378
3512
  containerApi: new DockviewApi(this.accessor),
3379
3513
  api: this.groupPanel.api,
3380
3514
  });
3381
- this.tabsContainer.setActionElement(this._control.element);
3515
+ this.tabsContainer.setLeftActionsElement(this._leftHeaderActions.element);
3382
3516
  }
3383
3517
  }
3384
3518
  indexOf(panel) {
@@ -3511,7 +3645,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3511
3645
  return this._activePanel === panel;
3512
3646
  }
3513
3647
  updateActions(element) {
3514
- this.tabsContainer.setActionElement(element);
3648
+ this.tabsContainer.setRightActionsElement(element);
3515
3649
  }
3516
3650
  setActive(isGroupActive, skipFocus = false, force = false) {
3517
3651
  var _a, _b, _c, _d;
@@ -3683,9 +3817,10 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3683
3817
  }
3684
3818
  }
3685
3819
  dispose() {
3686
- var _a, _b;
3820
+ var _a, _b, _c;
3687
3821
  super.dispose();
3688
- (_b = (_a = this.watermark) === null || _a === void 0 ? void 0 : _a.dispose) === null || _b === void 0 ? void 0 : _b.call(_a);
3822
+ (_a = this.watermark) === null || _a === void 0 ? void 0 : _a.element.remove();
3823
+ (_c = (_b = this.watermark) === null || _b === void 0 ? void 0 : _b.dispose) === null || _c === void 0 ? void 0 : _c.call(_b);
3689
3824
  for (const panel of this.panels) {
3690
3825
  panel.dispose();
3691
3826
  }
@@ -4479,8 +4614,8 @@ class GridviewPanel extends BasePanelView {
4479
4614
  get isActive() {
4480
4615
  return this.api.isActive;
4481
4616
  }
4482
- constructor(id, component, options) {
4483
- super(id, component, new GridviewPanelApiImpl(id));
4617
+ constructor(id, component, options, api) {
4618
+ super(id, component, api !== null && api !== void 0 ? api : new GridviewPanelApiImpl(id));
4484
4619
  this._evaluatedMinimumWidth = 0;
4485
4620
  this._evaluatedMaximumWidth = Number.MAX_SAFE_INTEGER;
4486
4621
  this._evaluatedMinimumHeight = 0;
@@ -4578,6 +4713,32 @@ class GridviewPanel extends BasePanelView {
4578
4713
  }
4579
4714
  }
4580
4715
 
4716
+ class DockviewGroupPanelApiImpl extends GridviewPanelApiImpl {
4717
+ get isFloating() {
4718
+ if (!this._group) {
4719
+ throw new Error(`DockviewGroupPanelApiImpl not initialized`);
4720
+ }
4721
+ return this._group.model.isFloating;
4722
+ }
4723
+ constructor(id, accessor) {
4724
+ super(id);
4725
+ this.accessor = accessor;
4726
+ this._onDidFloatingStateChange = new Emitter();
4727
+ this.onDidFloatingStateChange = this._onDidFloatingStateChange.event;
4728
+ this.addDisposables(this._onDidFloatingStateChange);
4729
+ }
4730
+ moveTo(options) {
4731
+ var _a;
4732
+ if (!this._group) {
4733
+ throw new Error(`DockviewGroupPanelApiImpl not initialized`);
4734
+ }
4735
+ this.accessor.moveGroupOrPanel(options.group, this._group.id, undefined, (_a = options.position) !== null && _a !== void 0 ? _a : 'center');
4736
+ }
4737
+ initialize(group) {
4738
+ this._group = group;
4739
+ }
4740
+ }
4741
+
4581
4742
  class DockviewGroupPanel extends GridviewPanel {
4582
4743
  get panels() {
4583
4744
  return this._model.panels;
@@ -4604,7 +4765,8 @@ class DockviewGroupPanel extends GridviewPanel {
4604
4765
  super(id, 'groupview_default', {
4605
4766
  minimumHeight: 100,
4606
4767
  minimumWidth: 100,
4607
- });
4768
+ }, new DockviewGroupPanelApiImpl(id, accessor));
4769
+ this.api.initialize(this); // cannot use 'this' after after 'super' call
4608
4770
  this._model = new DockviewGroupPanelModel(this.element, accessor, id, options, this);
4609
4771
  }
4610
4772
  initialize() {
@@ -4622,7 +4784,6 @@ class DockviewGroupPanel extends GridviewPanel {
4622
4784
  return this._model;
4623
4785
  }
4624
4786
  toJSON() {
4625
- // TODO fix typing
4626
4787
  return this.model.toJSON();
4627
4788
  }
4628
4789
  }
@@ -4676,9 +4837,10 @@ class DockviewPanelApiImpl extends GridviewPanelApiImpl {
4676
4837
  get group() {
4677
4838
  return this._group;
4678
4839
  }
4679
- constructor(panel, group) {
4840
+ constructor(panel, group, accessor) {
4680
4841
  super(panel.id);
4681
4842
  this.panel = panel;
4843
+ this.accessor = accessor;
4682
4844
  this._onDidTitleChange = new Emitter();
4683
4845
  this.onDidTitleChange = this._onDidTitleChange.event;
4684
4846
  this._onDidActiveGroupChange = new Emitter();
@@ -4690,6 +4852,10 @@ class DockviewPanelApiImpl extends GridviewPanelApiImpl {
4690
4852
  this._group = group;
4691
4853
  this.addDisposables(this.disposable, this._onDidTitleChange, this._onDidGroupChange, this._onDidActiveGroupChange);
4692
4854
  }
4855
+ moveTo(options) {
4856
+ var _a;
4857
+ this.accessor.moveGroupOrPanel(options.group, this._group.id, this.panel.id, (_a = options.position) !== null && _a !== void 0 ? _a : 'center', options.index);
4858
+ }
4693
4859
  setTitle(title) {
4694
4860
  this.panel.setTitle(title);
4695
4861
  }
@@ -4714,7 +4880,7 @@ class DockviewPanel extends CompositeDisposable {
4714
4880
  this.containerApi = containerApi;
4715
4881
  this.view = view;
4716
4882
  this._group = group;
4717
- this.api = new DockviewPanelApiImpl(this, this._group);
4883
+ this.api = new DockviewPanelApiImpl(this, this._group, accessor);
4718
4884
  this.addDisposables(this.api.onActiveChange(() => {
4719
4885
  accessor.setActivePanel(this);
4720
4886
  }), this.api.onDidSizeChange((event) => {
@@ -5055,6 +5221,296 @@ class Watermark extends CompositeDisposable {
5055
5221
  }
5056
5222
  }
5057
5223
 
5224
+ const bringElementToFront = (() => {
5225
+ let previous = null;
5226
+ function pushToTop(element) {
5227
+ if (previous !== element && previous !== null) {
5228
+ toggleClass(previous, 'dv-bring-to-front', false);
5229
+ }
5230
+ toggleClass(element, 'dv-bring-to-front', true);
5231
+ previous = element;
5232
+ }
5233
+ return pushToTop;
5234
+ })();
5235
+ class Overlay extends CompositeDisposable {
5236
+ constructor(options) {
5237
+ super();
5238
+ this.options = options;
5239
+ this._element = document.createElement('div');
5240
+ this._onDidChange = new Emitter();
5241
+ this.onDidChange = this._onDidChange.event;
5242
+ this._onDidChangeEnd = new Emitter();
5243
+ this.onDidChangeEnd = this._onDidChangeEnd.event;
5244
+ this.addDisposables(this._onDidChange, this._onDidChangeEnd);
5245
+ this._element.className = 'dv-resize-container';
5246
+ this.setupResize('top');
5247
+ this.setupResize('bottom');
5248
+ this.setupResize('left');
5249
+ this.setupResize('right');
5250
+ this.setupResize('topleft');
5251
+ this.setupResize('topright');
5252
+ this.setupResize('bottomleft');
5253
+ this.setupResize('bottomright');
5254
+ this._element.appendChild(this.options.content);
5255
+ this.options.container.appendChild(this._element);
5256
+ // if input bad resize within acceptable boundaries
5257
+ this.setBounds({
5258
+ height: this.options.height,
5259
+ width: this.options.width,
5260
+ top: this.options.top,
5261
+ left: this.options.left,
5262
+ });
5263
+ }
5264
+ setBounds(bounds = {}) {
5265
+ if (typeof bounds.height === 'number') {
5266
+ this._element.style.height = `${bounds.height}px`;
5267
+ }
5268
+ if (typeof bounds.width === 'number') {
5269
+ this._element.style.width = `${bounds.width}px`;
5270
+ }
5271
+ if (typeof bounds.top === 'number') {
5272
+ this._element.style.top = `${bounds.top}px`;
5273
+ }
5274
+ if (typeof bounds.left === 'number') {
5275
+ this._element.style.left = `${bounds.left}px`;
5276
+ }
5277
+ const containerRect = this.options.container.getBoundingClientRect();
5278
+ const overlayRect = this._element.getBoundingClientRect();
5279
+ // region: ensure bounds within allowable limits
5280
+ // a minimum width of minimumViewportWidth must be inside the viewport
5281
+ const xOffset = Math.max(0, overlayRect.width - this.options.minimumInViewportWidth);
5282
+ // a minimum height of minimumViewportHeight must be inside the viewport
5283
+ const yOffset = Math.max(0, overlayRect.height - this.options.minimumInViewportHeight);
5284
+ const left = clamp(overlayRect.left - containerRect.left, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
5285
+ const top = clamp(overlayRect.top - containerRect.top, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
5286
+ this._element.style.left = `${left}px`;
5287
+ this._element.style.top = `${top}px`;
5288
+ this._onDidChange.fire();
5289
+ }
5290
+ toJSON() {
5291
+ const container = this.options.container.getBoundingClientRect();
5292
+ const element = this._element.getBoundingClientRect();
5293
+ return {
5294
+ top: element.top - container.top,
5295
+ left: element.left - container.left,
5296
+ width: element.width,
5297
+ height: element.height,
5298
+ };
5299
+ }
5300
+ setupDrag(dragTarget, options = { inDragMode: false }) {
5301
+ const move = new MutableDisposable();
5302
+ const track = () => {
5303
+ let offset = null;
5304
+ const iframes = [
5305
+ ...getElementsByTagName('iframe'),
5306
+ ...getElementsByTagName('webview'),
5307
+ ];
5308
+ for (const iframe of iframes) {
5309
+ iframe.style.pointerEvents = 'none';
5310
+ }
5311
+ move.value = new CompositeDisposable({
5312
+ dispose: () => {
5313
+ for (const iframe of iframes) {
5314
+ iframe.style.pointerEvents = 'auto';
5315
+ }
5316
+ },
5317
+ }, addDisposableWindowListener(window, 'mousemove', (e) => {
5318
+ const containerRect = this.options.container.getBoundingClientRect();
5319
+ const x = e.clientX - containerRect.left;
5320
+ const y = e.clientY - containerRect.top;
5321
+ toggleClass(this._element, 'dv-resize-container-dragging', true);
5322
+ const overlayRect = this._element.getBoundingClientRect();
5323
+ if (offset === null) {
5324
+ offset = {
5325
+ x: e.clientX - overlayRect.left,
5326
+ y: e.clientY - overlayRect.top,
5327
+ };
5328
+ }
5329
+ const xOffset = Math.max(0, overlayRect.width - this.options.minimumInViewportWidth);
5330
+ const yOffset = Math.max(0, overlayRect.height -
5331
+ this.options.minimumInViewportHeight);
5332
+ const left = clamp(x - offset.x, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
5333
+ const top = clamp(y - offset.y, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
5334
+ this.setBounds({ top, left });
5335
+ }), addDisposableWindowListener(window, 'mouseup', () => {
5336
+ toggleClass(this._element, 'dv-resize-container-dragging', false);
5337
+ move.dispose();
5338
+ this._onDidChangeEnd.fire();
5339
+ }));
5340
+ };
5341
+ this.addDisposables(move, addDisposableListener(dragTarget, 'mousedown', (event) => {
5342
+ if (event.defaultPrevented) {
5343
+ event.preventDefault();
5344
+ return;
5345
+ }
5346
+ // if somebody has marked this event then treat as a defaultPrevented
5347
+ // without actually calling event.preventDefault()
5348
+ if (quasiDefaultPrevented(event)) {
5349
+ return;
5350
+ }
5351
+ track();
5352
+ }), addDisposableListener(this.options.content, 'mousedown', (event) => {
5353
+ if (event.defaultPrevented) {
5354
+ return;
5355
+ }
5356
+ // if somebody has marked this event then treat as a defaultPrevented
5357
+ // without actually calling event.preventDefault()
5358
+ if (quasiDefaultPrevented(event)) {
5359
+ return;
5360
+ }
5361
+ if (event.shiftKey) {
5362
+ track();
5363
+ }
5364
+ }), addDisposableListener(this.options.content, 'mousedown', () => {
5365
+ bringElementToFront(this._element);
5366
+ }, true));
5367
+ bringElementToFront(this._element);
5368
+ if (options.inDragMode) {
5369
+ track();
5370
+ }
5371
+ }
5372
+ setupResize(direction) {
5373
+ const resizeHandleElement = document.createElement('div');
5374
+ resizeHandleElement.className = `dv-resize-handle-${direction}`;
5375
+ this._element.appendChild(resizeHandleElement);
5376
+ const move = new MutableDisposable();
5377
+ this.addDisposables(move, addDisposableListener(resizeHandleElement, 'mousedown', (e) => {
5378
+ e.preventDefault();
5379
+ let startPosition = null;
5380
+ const iframes = [
5381
+ ...getElementsByTagName('iframe'),
5382
+ ...getElementsByTagName('webview'),
5383
+ ];
5384
+ for (const iframe of iframes) {
5385
+ iframe.style.pointerEvents = 'none';
5386
+ }
5387
+ move.value = new CompositeDisposable(addDisposableWindowListener(window, 'mousemove', (e) => {
5388
+ const containerRect = this.options.container.getBoundingClientRect();
5389
+ const overlayRect = this._element.getBoundingClientRect();
5390
+ const y = e.clientY - containerRect.top;
5391
+ const x = e.clientX - containerRect.left;
5392
+ if (startPosition === null) {
5393
+ // record the initial dimensions since as all subsequence moves are relative to this
5394
+ startPosition = {
5395
+ originalY: y,
5396
+ originalHeight: overlayRect.height,
5397
+ originalX: x,
5398
+ originalWidth: overlayRect.width,
5399
+ };
5400
+ }
5401
+ let top = undefined;
5402
+ let height = undefined;
5403
+ let left = undefined;
5404
+ let width = undefined;
5405
+ const minimumInViewportHeight = this.options.minimumInViewportHeight;
5406
+ const minimumInViewportWidth = this.options.minimumInViewportWidth;
5407
+ function moveTop() {
5408
+ top = clamp(y, -Number.MAX_VALUE, startPosition.originalY +
5409
+ startPosition.originalHeight >
5410
+ containerRect.height
5411
+ ? containerRect.height -
5412
+ minimumInViewportHeight
5413
+ : Math.max(0, startPosition.originalY +
5414
+ startPosition.originalHeight -
5415
+ Overlay.MINIMUM_HEIGHT));
5416
+ height =
5417
+ startPosition.originalY +
5418
+ startPosition.originalHeight -
5419
+ top;
5420
+ }
5421
+ function moveBottom() {
5422
+ top =
5423
+ startPosition.originalY -
5424
+ startPosition.originalHeight;
5425
+ height = clamp(y - top, top < 0
5426
+ ? -top + minimumInViewportHeight
5427
+ : Overlay.MINIMUM_HEIGHT, Number.MAX_VALUE);
5428
+ }
5429
+ function moveLeft() {
5430
+ left = clamp(x, -Number.MAX_VALUE, startPosition.originalX +
5431
+ startPosition.originalWidth >
5432
+ containerRect.width
5433
+ ? containerRect.width -
5434
+ minimumInViewportWidth
5435
+ : Math.max(0, startPosition.originalX +
5436
+ startPosition.originalWidth -
5437
+ Overlay.MINIMUM_WIDTH));
5438
+ width =
5439
+ startPosition.originalX +
5440
+ startPosition.originalWidth -
5441
+ left;
5442
+ }
5443
+ function moveRight() {
5444
+ left =
5445
+ startPosition.originalX -
5446
+ startPosition.originalWidth;
5447
+ width = clamp(x - left, left < 0
5448
+ ? -left + minimumInViewportWidth
5449
+ : Overlay.MINIMUM_WIDTH, Number.MAX_VALUE);
5450
+ }
5451
+ switch (direction) {
5452
+ case 'top':
5453
+ moveTop();
5454
+ break;
5455
+ case 'bottom':
5456
+ moveBottom();
5457
+ break;
5458
+ case 'left':
5459
+ moveLeft();
5460
+ break;
5461
+ case 'right':
5462
+ moveRight();
5463
+ break;
5464
+ case 'topleft':
5465
+ moveTop();
5466
+ moveLeft();
5467
+ break;
5468
+ case 'topright':
5469
+ moveTop();
5470
+ moveRight();
5471
+ break;
5472
+ case 'bottomleft':
5473
+ moveBottom();
5474
+ moveLeft();
5475
+ break;
5476
+ case 'bottomright':
5477
+ moveBottom();
5478
+ moveRight();
5479
+ break;
5480
+ }
5481
+ this.setBounds({ height, width, top, left });
5482
+ }), {
5483
+ dispose: () => {
5484
+ for (const iframe of iframes) {
5485
+ iframe.style.pointerEvents = 'auto';
5486
+ }
5487
+ },
5488
+ }, addDisposableWindowListener(window, 'mouseup', () => {
5489
+ move.dispose();
5490
+ this._onDidChangeEnd.fire();
5491
+ }));
5492
+ }));
5493
+ }
5494
+ dispose() {
5495
+ this._element.remove();
5496
+ super.dispose();
5497
+ }
5498
+ }
5499
+ Overlay.MINIMUM_HEIGHT = 20;
5500
+ Overlay.MINIMUM_WIDTH = 20;
5501
+
5502
+ class DockviewFloatingGroupPanel extends CompositeDisposable {
5503
+ constructor(group, overlay) {
5504
+ super();
5505
+ this.group = group;
5506
+ this.overlay = overlay;
5507
+ this.addDisposables(overlay);
5508
+ }
5509
+ position(bounds) {
5510
+ this.overlay.setBounds(bounds);
5511
+ }
5512
+ }
5513
+
5058
5514
  class DockviewComponent extends BaseGrid {
5059
5515
  get orientation() {
5060
5516
  return this.gridview.orientation;
@@ -5095,7 +5551,8 @@ class DockviewComponent extends BaseGrid {
5095
5551
  this.onDidLayoutFromJSON = this._onDidLayoutFromJSON.event;
5096
5552
  this._onDidActivePanelChange = new Emitter();
5097
5553
  this.onDidActivePanelChange = this._onDidActivePanelChange.event;
5098
- this.element.classList.add('dv-dockview');
5554
+ this.floatingGroups = [];
5555
+ toggleClass(this.gridview.element, 'dv-dockview', true);
5099
5556
  this.addDisposables(this._onDidDrop, Event.any(this.onDidAddGroup, this.onDidRemoveGroup)(() => {
5100
5557
  this.updateWatermark();
5101
5558
  }), Event.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidActivePanelChange)(() => {
@@ -5125,9 +5582,22 @@ class DockviewComponent extends BaseGrid {
5125
5582
  if (data.viewId !== this.id) {
5126
5583
  return false;
5127
5584
  }
5585
+ if (position === 'center') {
5586
+ // center drop target is only allowed if there are no panels in the grid
5587
+ // floating panels are allowed
5588
+ return this.gridview.length === 0;
5589
+ }
5128
5590
  return true;
5129
5591
  }
5130
5592
  if (this.options.showDndOverlay) {
5593
+ if (position === 'center') {
5594
+ /**
5595
+ * for external events only show the four-corner drag overlays, disable
5596
+ * the center position so that external drag events can fall through to the group
5597
+ * and panel drop target handlers
5598
+ */
5599
+ return false;
5600
+ }
5131
5601
  return this.options.showDndOverlay({
5132
5602
  nativeEvent: event,
5133
5603
  position: position,
@@ -5137,7 +5607,7 @@ class DockviewComponent extends BaseGrid {
5137
5607
  }
5138
5608
  return false;
5139
5609
  },
5140
- acceptedTargetZones: ['top', 'bottom', 'left', 'right'],
5610
+ acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
5141
5611
  overlayModel: {
5142
5612
  activationSize: { type: 'pixels', value: 10 },
5143
5613
  size: { type: 'pixels', value: 20 },
@@ -5155,6 +5625,75 @@ class DockviewComponent extends BaseGrid {
5155
5625
  this._api = new DockviewApi(this);
5156
5626
  this.updateWatermark();
5157
5627
  }
5628
+ addFloatingGroup(item, coord, options) {
5629
+ var _a, _b;
5630
+ let group;
5631
+ if (item instanceof DockviewPanel) {
5632
+ group = this.createGroup();
5633
+ this.removePanel(item, {
5634
+ removeEmptyGroup: true,
5635
+ skipDispose: true,
5636
+ });
5637
+ group.model.openPanel(item);
5638
+ }
5639
+ else {
5640
+ group = item;
5641
+ const skip = typeof (options === null || options === void 0 ? void 0 : options.skipRemoveGroup) === 'boolean' &&
5642
+ options.skipRemoveGroup;
5643
+ if (!skip) {
5644
+ this.doRemoveGroup(item, { skipDispose: true });
5645
+ }
5646
+ }
5647
+ group.model.isFloating = true;
5648
+ const overlayLeft = typeof (coord === null || coord === void 0 ? void 0 : coord.x) === 'number' ? Math.max(coord.x, 0) : 100;
5649
+ const overlayTop = typeof (coord === null || coord === void 0 ? void 0 : coord.y) === 'number' ? Math.max(coord.y, 0) : 100;
5650
+ const overlay = new Overlay({
5651
+ container: this.gridview.element,
5652
+ content: group.element,
5653
+ height: (_a = coord === null || coord === void 0 ? void 0 : coord.height) !== null && _a !== void 0 ? _a : 300,
5654
+ width: (_b = coord === null || coord === void 0 ? void 0 : coord.width) !== null && _b !== void 0 ? _b : 300,
5655
+ left: overlayLeft,
5656
+ top: overlayTop,
5657
+ minimumInViewportWidth: 100,
5658
+ minimumInViewportHeight: 100,
5659
+ });
5660
+ const el = group.element.querySelector('.void-container');
5661
+ if (!el) {
5662
+ throw new Error('failed to find drag handle');
5663
+ }
5664
+ overlay.setupDrag(el, {
5665
+ inDragMode: typeof (options === null || options === void 0 ? void 0 : options.inDragMode) === 'boolean'
5666
+ ? options.inDragMode
5667
+ : false,
5668
+ });
5669
+ const floatingGroupPanel = new DockviewFloatingGroupPanel(group, overlay);
5670
+ const disposable = watchElementResize(group.element, (entry) => {
5671
+ const { width, height } = entry.contentRect;
5672
+ group.layout(width, height); // let the group know it's size is changing so it can fire events to the panel
5673
+ });
5674
+ floatingGroupPanel.addDisposables(overlay.onDidChange(() => {
5675
+ // this is either a resize or a move
5676
+ // to inform the panels .layout(...) the group with it's current size
5677
+ // don't care about resize since the above watcher handles that
5678
+ group.layout(group.height, group.width);
5679
+ }), overlay.onDidChangeEnd(() => {
5680
+ this._bufferOnDidLayoutChange.fire();
5681
+ }), group.onDidChange((event) => {
5682
+ overlay.setBounds({
5683
+ height: event === null || event === void 0 ? void 0 : event.height,
5684
+ width: event === null || event === void 0 ? void 0 : event.width,
5685
+ });
5686
+ }), {
5687
+ dispose: () => {
5688
+ disposable.dispose();
5689
+ group.model.isFloating = false;
5690
+ remove(this.floatingGroups, floatingGroupPanel);
5691
+ this.updateWatermark();
5692
+ },
5693
+ });
5694
+ this.floatingGroups.push(floatingGroupPanel);
5695
+ this.updateWatermark();
5696
+ }
5158
5697
  orthogonalize(position) {
5159
5698
  switch (position) {
5160
5699
  case 'top':
@@ -5177,6 +5716,7 @@ class DockviewComponent extends BaseGrid {
5177
5716
  switch (position) {
5178
5717
  case 'top':
5179
5718
  case 'left':
5719
+ case 'center':
5180
5720
  return this.createGroupAtLocation([0]); // insert into first position
5181
5721
  case 'bottom':
5182
5722
  case 'right':
@@ -5194,6 +5734,15 @@ class DockviewComponent extends BaseGrid {
5194
5734
  }
5195
5735
  this.layout(this.gridview.width, this.gridview.height, true);
5196
5736
  }
5737
+ layout(width, height, forceResize) {
5738
+ super.layout(width, height, forceResize);
5739
+ if (this.floatingGroups) {
5740
+ for (const floating of this.floatingGroups) {
5741
+ // ensure floting groups stay within visible boundaries
5742
+ floating.overlay.setBounds();
5743
+ }
5744
+ }
5745
+ }
5197
5746
  focus() {
5198
5747
  var _a;
5199
5748
  (_a = this.activeGroup) === null || _a === void 0 ? void 0 : _a.focus();
@@ -5256,51 +5805,81 @@ class DockviewComponent extends BaseGrid {
5256
5805
  collection[panel.id] = panel.toJSON();
5257
5806
  return collection;
5258
5807
  }, {});
5259
- return {
5808
+ const floats = this.floatingGroups.map((floatingGroup) => {
5809
+ return {
5810
+ data: floatingGroup.group.toJSON(),
5811
+ position: floatingGroup.overlay.toJSON(),
5812
+ };
5813
+ });
5814
+ const result = {
5260
5815
  grid: data,
5261
5816
  panels,
5262
5817
  activeGroup: (_a = this.activeGroup) === null || _a === void 0 ? void 0 : _a.id,
5263
5818
  };
5819
+ if (floats.length > 0) {
5820
+ result.floatingGroups = floats;
5821
+ }
5822
+ return result;
5264
5823
  }
5265
5824
  fromJSON(data) {
5825
+ var _a;
5266
5826
  this.clear();
5267
5827
  const { grid, panels, activeGroup } = data;
5268
5828
  if (grid.root.type !== 'branch' || !Array.isArray(grid.root.data)) {
5269
5829
  throw new Error('root must be of type branch');
5270
5830
  }
5831
+ // take note of the existing dimensions
5832
+ const width = this.width;
5833
+ const height = this.height;
5834
+ const createGroupFromSerializedState = (data) => {
5835
+ const { id, locked, hideHeader, views, activeView } = data;
5836
+ const group = this.createGroup({
5837
+ id,
5838
+ locked: !!locked,
5839
+ hideHeader: !!hideHeader,
5840
+ });
5841
+ this._onDidAddGroup.fire(group);
5842
+ for (const child of views) {
5843
+ const panel = this._deserializer.fromJSON(panels[child], group);
5844
+ const isActive = typeof activeView === 'string' && activeView === panel.id;
5845
+ group.model.openPanel(panel, {
5846
+ skipSetPanelActive: !isActive,
5847
+ skipSetGroupActive: true,
5848
+ });
5849
+ }
5850
+ if (!group.activePanel && group.panels.length > 0) {
5851
+ group.model.openPanel(group.panels[group.panels.length - 1], {
5852
+ skipSetGroupActive: true,
5853
+ });
5854
+ }
5855
+ return group;
5856
+ };
5271
5857
  this.gridview.deserialize(grid, {
5272
5858
  fromJSON: (node) => {
5273
- const { id, locked, hideHeader, views, activeView } = node.data;
5274
- const group = this.createGroup({
5275
- id,
5276
- locked: !!locked,
5277
- hideHeader: !!hideHeader,
5278
- });
5279
- this._onDidAddGroup.fire(group);
5280
- for (const child of views) {
5281
- const panel = this._deserializer.fromJSON(panels[child], group);
5282
- const isActive = typeof activeView === 'string' &&
5283
- activeView === panel.id;
5284
- group.model.openPanel(panel, {
5285
- skipSetPanelActive: !isActive,
5286
- skipSetGroupActive: true,
5287
- });
5288
- }
5289
- if (!group.activePanel && group.panels.length > 0) {
5290
- group.model.openPanel(group.panels[group.panels.length - 1], {
5291
- skipSetGroupActive: true,
5292
- });
5293
- }
5294
- return group;
5859
+ return createGroupFromSerializedState(node.data);
5295
5860
  },
5296
5861
  });
5862
+ this.layout(width, height, true);
5863
+ const serializedFloatingGroups = (_a = data.floatingGroups) !== null && _a !== void 0 ? _a : [];
5864
+ for (const serializedFloatingGroup of serializedFloatingGroups) {
5865
+ const { data, position } = serializedFloatingGroup;
5866
+ const group = createGroupFromSerializedState(data);
5867
+ this.addFloatingGroup(group, {
5868
+ x: position.left,
5869
+ y: position.top,
5870
+ height: position.height,
5871
+ width: position.width,
5872
+ }, { skipRemoveGroup: true, inDragMode: false });
5873
+ }
5874
+ for (const floatingGroup of this.floatingGroups) {
5875
+ floatingGroup.overlay.setBounds();
5876
+ }
5297
5877
  if (typeof activeGroup === 'string') {
5298
5878
  const panel = this.getPanel(activeGroup);
5299
5879
  if (panel) {
5300
5880
  this.doSetGroupActive(panel);
5301
5881
  }
5302
5882
  }
5303
- this.gridview.layout(this.width, this.height);
5304
5883
  this._onDidLayoutFromJSON.fire();
5305
5884
  }
5306
5885
  clear() {
@@ -5309,7 +5888,7 @@ class DockviewComponent extends BaseGrid {
5309
5888
  const hasActivePanel = !!this.activePanel;
5310
5889
  for (const group of groups) {
5311
5890
  // remove the group will automatically remove the panels
5312
- this.removeGroup(group, true);
5891
+ this.removeGroup(group, { skipActive: true });
5313
5892
  }
5314
5893
  if (hasActiveGroup) {
5315
5894
  this.doSetGroupActive(undefined);
@@ -5331,6 +5910,9 @@ class DockviewComponent extends BaseGrid {
5331
5910
  throw new Error(`panel with id ${options.id} already exists`);
5332
5911
  }
5333
5912
  let referenceGroup;
5913
+ if (options.position && options.floating) {
5914
+ throw new Error('you can only provide one of: position, floating as arguments to .addPanel(...)');
5915
+ }
5334
5916
  if (options.position) {
5335
5917
  if (isPanelOptionsWithPanel(options.position)) {
5336
5918
  const referencePanel = typeof options.position.referencePanel === 'string'
@@ -5363,7 +5945,20 @@ class DockviewComponent extends BaseGrid {
5363
5945
  let panel;
5364
5946
  if (referenceGroup) {
5365
5947
  const target = toTarget(((_b = options.position) === null || _b === void 0 ? void 0 : _b.direction) || 'within');
5366
- if (target === 'center') {
5948
+ if (options.floating) {
5949
+ const group = this.createGroup();
5950
+ panel = this.createPanel(options, group);
5951
+ group.model.openPanel(panel);
5952
+ const o = typeof options.floating === 'object' &&
5953
+ options.floating !== null
5954
+ ? options.floating
5955
+ : {};
5956
+ this.addFloatingGroup(group, o, {
5957
+ inDragMode: false,
5958
+ skipRemoveGroup: true,
5959
+ });
5960
+ }
5961
+ else if (referenceGroup.api.isFloating || target === 'center') {
5367
5962
  panel = this.createPanel(options, referenceGroup);
5368
5963
  referenceGroup.model.openPanel(panel);
5369
5964
  }
@@ -5375,6 +5970,19 @@ class DockviewComponent extends BaseGrid {
5375
5970
  group.model.openPanel(panel);
5376
5971
  }
5377
5972
  }
5973
+ else if (options.floating) {
5974
+ const group = this.createGroup();
5975
+ panel = this.createPanel(options, group);
5976
+ group.model.openPanel(panel);
5977
+ const o = typeof options.floating === 'object' &&
5978
+ options.floating !== null
5979
+ ? options.floating
5980
+ : {};
5981
+ this.addFloatingGroup(group, o, {
5982
+ inDragMode: false,
5983
+ skipRemoveGroup: true,
5984
+ });
5985
+ }
5378
5986
  else {
5379
5987
  const group = this.createGroupAtLocation();
5380
5988
  panel = this.createPanel(options, group);
@@ -5391,7 +5999,9 @@ class DockviewComponent extends BaseGrid {
5391
5999
  throw new Error(`cannot remove panel ${panel.id}. it's missing a group.`);
5392
6000
  }
5393
6001
  group.model.removePanel(panel);
5394
- panel.dispose();
6002
+ if (!options.skipDispose) {
6003
+ panel.dispose();
6004
+ }
5395
6005
  if (group.size === 0 && options.removeEmptyGroup) {
5396
6006
  this.removeGroup(group);
5397
6007
  }
@@ -5406,7 +6016,7 @@ class DockviewComponent extends BaseGrid {
5406
6016
  }
5407
6017
  updateWatermark() {
5408
6018
  var _a, _b;
5409
- if (this.groups.length === 0) {
6019
+ if (this.groups.filter((x) => !x.api.isFloating).length === 0) {
5410
6020
  if (!this.watermark) {
5411
6021
  this.watermark = this.createWatermarkComponent();
5412
6022
  this.watermark.init({
@@ -5415,7 +6025,7 @@ class DockviewComponent extends BaseGrid {
5415
6025
  const watermarkContainer = document.createElement('div');
5416
6026
  watermarkContainer.className = 'dv-watermark-container';
5417
6027
  watermarkContainer.appendChild(this.watermark.element);
5418
- this.element.appendChild(watermarkContainer);
6028
+ this.gridview.element.appendChild(watermarkContainer);
5419
6029
  }
5420
6030
  }
5421
6031
  else if (this.watermark) {
@@ -5465,15 +6075,28 @@ class DockviewComponent extends BaseGrid {
5465
6075
  return group;
5466
6076
  }
5467
6077
  }
5468
- removeGroup(group, skipActive = false) {
6078
+ removeGroup(group, options) {
6079
+ var _a;
5469
6080
  const panels = [...group.panels]; // reassign since group panels will mutate
5470
6081
  for (const panel of panels) {
5471
6082
  this.removePanel(panel, {
5472
6083
  removeEmptyGroup: false,
5473
- skipDispose: false,
6084
+ skipDispose: (_a = options === null || options === void 0 ? void 0 : options.skipDispose) !== null && _a !== void 0 ? _a : false,
5474
6085
  });
5475
6086
  }
5476
- super.doRemoveGroup(group, { skipActive });
6087
+ this.doRemoveGroup(group, options);
6088
+ }
6089
+ doRemoveGroup(group, options) {
6090
+ const floatingGroup = this.floatingGroups.find((_) => _.group === group);
6091
+ if (floatingGroup) {
6092
+ if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
6093
+ floatingGroup.group.dispose();
6094
+ this._groups.delete(group.id);
6095
+ }
6096
+ floatingGroup.dispose();
6097
+ return floatingGroup.group;
6098
+ }
6099
+ return super.doRemoveGroup(group, options);
5477
6100
  }
5478
6101
  moveGroupOrPanel(destinationGroup, sourceGroupId, sourceItemId, destinationTarget, destinationIndex) {
5479
6102
  var _a;
@@ -5504,25 +6127,26 @@ class DockviewComponent extends BaseGrid {
5504
6127
  const targetLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, destinationTarget);
5505
6128
  if (sourceGroup && sourceGroup.size < 2) {
5506
6129
  const [targetParentLocation, to] = tail(targetLocation);
5507
- const sourceLocation = getGridLocation(sourceGroup.element);
5508
- const [sourceParentLocation, from] = tail(sourceLocation);
5509
- if (sequenceEquals(sourceParentLocation, targetParentLocation)) {
5510
- // special case when 'swapping' two views within same grid location
5511
- // if a group has one tab - we are essentially moving the 'group'
5512
- // which is equivalent to swapping two views in this case
5513
- this.gridview.moveView(sourceParentLocation, from, to);
5514
- }
5515
- else {
5516
- // source group will become empty so delete the group
5517
- const targetGroup = this.doRemoveGroup(sourceGroup, {
5518
- skipActive: true,
5519
- skipDispose: true,
5520
- });
5521
- // after deleting the group we need to re-evaulate the ref location
5522
- const updatedReferenceLocation = getGridLocation(destinationGroup.element);
5523
- const location = getRelativeLocation(this.gridview.orientation, updatedReferenceLocation, destinationTarget);
5524
- this.doAddGroup(targetGroup, location);
6130
+ const isFloating = this.floatingGroups.find((x) => x.group === sourceGroup);
6131
+ if (!isFloating) {
6132
+ const sourceLocation = getGridLocation(sourceGroup.element);
6133
+ const [sourceParentLocation, from] = tail(sourceLocation);
6134
+ if (sequenceEquals(sourceParentLocation, targetParentLocation)) {
6135
+ // special case when 'swapping' two views within same grid location
6136
+ // if a group has one tab - we are essentially moving the 'group'
6137
+ // which is equivalent to swapping two views in this case
6138
+ this.gridview.moveView(sourceParentLocation, from, to);
6139
+ }
5525
6140
  }
6141
+ // source group will become empty so delete the group
6142
+ const targetGroup = this.doRemoveGroup(sourceGroup, {
6143
+ skipActive: true,
6144
+ skipDispose: true,
6145
+ });
6146
+ // after deleting the group we need to re-evaulate the ref location
6147
+ const updatedReferenceLocation = getGridLocation(destinationGroup.element);
6148
+ const location = getRelativeLocation(this.gridview.orientation, updatedReferenceLocation, destinationTarget);
6149
+ this.doAddGroup(targetGroup, location);
5526
6150
  }
5527
6151
  else {
5528
6152
  const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(sourceItemId)) ||
@@ -5551,7 +6175,13 @@ class DockviewComponent extends BaseGrid {
5551
6175
  }
5552
6176
  }
5553
6177
  else {
5554
- this.gridview.removeView(getGridLocation(sourceGroup.element));
6178
+ const floatingGroup = this.floatingGroups.find((x) => x.group === sourceGroup);
6179
+ if (floatingGroup) {
6180
+ floatingGroup.dispose();
6181
+ }
6182
+ else {
6183
+ this.gridview.removeView(getGridLocation(sourceGroup.element));
6184
+ }
5555
6185
  const referenceLocation = getGridLocation(referenceGroup.element);
5556
6186
  const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
5557
6187
  this.gridview.addView(sourceGroup, Sizing.Distribute, dropLocation);
@@ -5706,6 +6336,9 @@ class GridviewComponent extends BaseGrid {
5706
6336
  this.clear();
5707
6337
  const { grid, activePanel } = serializedGridview;
5708
6338
  const queue = [];
6339
+ // take note of the existing dimensions
6340
+ const width = this.width;
6341
+ const height = this.height;
5709
6342
  this.gridview.deserialize(grid, {
5710
6343
  fromJSON: (node) => {
5711
6344
  const { data } = node;
@@ -5731,7 +6364,7 @@ class GridviewComponent extends BaseGrid {
5731
6364
  return view;
5732
6365
  },
5733
6366
  });
5734
- this.layout(this.width, this.height, true);
6367
+ this.layout(width, height, true);
5735
6368
  queue.forEach((f) => f());
5736
6369
  if (typeof activePanel === 'string') {
5737
6370
  const panel = this.getPanel(activePanel);
@@ -6045,6 +6678,9 @@ class SplitviewComponent extends Resizable {
6045
6678
  this.clear();
6046
6679
  const { views, orientation, size, activeView } = serializedSplitview;
6047
6680
  const queue = [];
6681
+ // take note of the existing dimensions
6682
+ const width = this.width;
6683
+ const height = this.height;
6048
6684
  this.splitview = new Splitview(this.element, {
6049
6685
  orientation,
6050
6686
  proportionalLayout: this.options.proportionalLayout,
@@ -6081,7 +6717,7 @@ class SplitviewComponent extends Resizable {
6081
6717
  }),
6082
6718
  },
6083
6719
  });
6084
- this.layout(this.width, this.height);
6720
+ this.layout(width, height);
6085
6721
  queue.forEach((f) => f());
6086
6722
  if (typeof activeView === 'string') {
6087
6723
  const panel = this.getPanel(activeView);
@@ -6348,6 +6984,9 @@ class PaneviewComponent extends Resizable {
6348
6984
  this.clear();
6349
6985
  const { views, size } = serializedPaneview;
6350
6986
  const queue = [];
6987
+ // take note of the existing dimensions
6988
+ const width = this.width;
6989
+ const height = this.height;
6351
6990
  this.paneview = new Paneview(this.element, {
6352
6991
  orientation: Orientation.VERTICAL,
6353
6992
  descriptor: {
@@ -6403,7 +7042,7 @@ class PaneviewComponent extends Resizable {
6403
7042
  }),
6404
7043
  },
6405
7044
  });
6406
- this.layout(this.width, this.height);
7045
+ this.layout(width, height);
6407
7046
  queue.forEach((f) => f());
6408
7047
  this._onDidLayoutfromJSON.fire();
6409
7048
  }
@@ -6542,4 +7181,5 @@ class SplitviewPanel extends BasePanelView {
6542
7181
  }
6543
7182
  }
6544
7183
 
6545
- export { BaseGrid, ContentContainer, DefaultDockviewDeserialzier, DefaultTab, DockviewApi, DockviewComponent, CompositeDisposable as DockviewCompositeDisposable, DockviewDropTargets, Emitter as DockviewEmitter, Event as DockviewEvent, DockviewGroupPanel, DockviewGroupPanelModel, MutableDisposable as DockviewMutableDisposable, DockviewPanel, DraggablePaneviewPanel, Gridview, GridviewApi, GridviewComponent, GridviewPanel, LayoutPriority, LocalSelectionTransfer, Orientation, PaneFramework, PaneTransfer, PanelTransfer, Paneview, PaneviewApi, PaneviewComponent, PaneviewPanel, SashState, Sizing, Splitview, SplitviewApi, SplitviewComponent, SplitviewPanel, Tab, createComponent, directionToPosition, getDirectionOrientation, getGridLocation, getLocationOrientation, getPaneData, getPanelData, getRelativeLocation, indexInParent, isGridBranchNode, isGroupOptionsWithGroup, isGroupOptionsWithPanel, isPanelOptionsWithGroup, isPanelOptionsWithPanel, orthogonal, positionToDirection, toTarget, watchElementResize };
7184
+ export { BaseGrid, ContentContainer, DefaultDockviewDeserialzier, DefaultTab, DockviewApi, DockviewComponent, CompositeDisposable as DockviewCompositeDisposable, DockviewDropTargets, Emitter as DockviewEmitter, Event as DockviewEvent, DockviewGroupPanel, DockviewGroupPanelModel, MutableDisposable as DockviewMutableDisposable, DockviewPanel, DraggablePaneviewPanel, Gridview, GridviewApi, GridviewComponent, GridviewPanel, LayoutPriority, LocalSelectionTransfer, Orientation, PaneFramework, PaneTransfer, PanelTransfer, Paneview, PaneviewApi, PaneviewComponent, PaneviewPanel, SashState, Sizing, Splitview, SplitviewApi, SplitviewComponent, SplitviewPanel, Tab, createComponent, directionToPosition, getDirectionOrientation, getGridLocation, getLocationOrientation, getPaneData, getPanelData, getRelativeLocation, indexInParent, isGridBranchNode, isGroupOptionsWithGroup, isGroupOptionsWithPanel, isPanelOptionsWithGroup, isPanelOptionsWithPanel, orthogonal, positionToDirection, toTarget };
7185
+ //# sourceMappingURL=dockview-core.esm.js.map