dockview-core 1.7.6 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +277 -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 +764 -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 +763 -132
  103. package/dist/dockview-core.amd.noStyle.js.map +1 -0
  104. package/dist/dockview-core.cjs.js +764 -133
  105. package/dist/dockview-core.cjs.js.map +1 -0
  106. package/dist/dockview-core.esm.js +765 -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 +764 -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 +763 -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 +223 -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.0
4
4
  * @link https://github.com/mathuo/dockview
5
5
  * @license MIT
6
6
  */
@@ -33,7 +33,7 @@ define(['exports'], (function (exports) { 'use strict';
33
33
  }
34
34
  }
35
35
 
36
- var css_248z = ".dockview-svg {\n display: inline-block;\n fill: currentcolor;\n line-height: 1;\n stroke: currentcolor;\n stroke-width: 0;\n}\n.dockview-theme-dark {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n}\n\n.dockview-theme-light {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-group-view-background-color: white;\n --dv-tabs-and-actions-container-background-color: #f3f3f3;\n --dv-activegroup-visiblepanel-tab-background-color: white;\n --dv-activegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-inactivegroup-visiblepanel-tab-background-color: white;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-tab-divider-color: white;\n --dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-activegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.35);\n --dv-separator-border: rgba(128, 128, 128, 0.35);\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n}\n\n.dockview-theme-vs {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n --dv-tabs-and-actions-container-background-color: #2d2d30;\n --dv-tabs-and-actions-container-height: 20px;\n --dv-tabs-and-actions-container-font-size: 11px;\n --dv-activegroup-visiblepanel-tab-background-color: #007acc;\n --dv-inactivegroup-visiblepanel-tab-background-color: #3f3f46;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: white;\n --dv-inactivegroup-visiblepanel-tab-color: white;\n --dv-inactivegroup-hiddenpanel-tab-color: white;\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-activegroup-hiddenpanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n}\n\n.dockview-theme-abyss {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-group-view-background-color: #000c18;\n --dv-tabs-and-actions-container-background-color: #1c1c2a;\n --dv-activegroup-visiblepanel-tab-background-color: #000c18;\n --dv-activegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #000c18;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-tab-divider-color: #2b2b4a;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.25);\n --dv-separator-border: #2b2b4a;\n --dv-paneview-header-border-color: #2b2b4a;\n --dv-paneview-active-outline-color: #596f99;\n}\n\n.dockview-theme-dracula {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-group-view-background-color: #282a36;\n --dv-tabs-and-actions-container-background-color: #191a21;\n --dv-activegroup-visiblepanel-tab-background-color: #282a36;\n --dv-activegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #282a36;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-tab-divider-color: #191a21;\n --dv-activegroup-visiblepanel-tab-color: rgb(248, 248, 242);\n --dv-activegroup-hiddenpanel-tab-color: rgb(98, 114, 164);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(248, 248, 242, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(98, 114, 164, 0.5);\n --dv-separator-border: #bd93f9;\n --dv-paneview-header-border-color: #bd93f9;\n --dv-paneview-active-outline-color: #6272a4;\n}\n.dockview-theme-dracula .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab::after {\n position: absolute;\n left: 0px;\n top: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #94527e;\n z-index: 999;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #5e3d5a;\n z-index: 999;\n}\n.drop-target {\n position: relative;\n}\n.drop-target > .drop-target-dropzone {\n position: absolute;\n left: 0px;\n top: 0px;\n height: 100%;\n width: 100%;\n z-index: 10000;\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection {\n position: relative;\n box-sizing: border-box;\n height: 100%;\n width: 100%;\n background-color: var(--dv-drag-over-background-color);\n transition: top 70ms ease-out, left 70ms ease-out, width 70ms ease-out, height 70ms ease-out, opacity 0.15s ease-out;\n will-change: transform;\n pointer-events: none;\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-top {\n border-top: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-bottom {\n border-bottom: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-left {\n border-left: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-right {\n border-right: 1px solid var(--dv-drag-over-border-color);\n}\n.dv-dockview {\n position: relative;\n background-color: var(--dv-group-view-background-color);\n}\n.dv-dockview .dv-watermark-container {\n position: absolute;\n top: 0px;\n left: 0px;\n height: 100%;\n width: 100%;\n}\n\n.groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.inactive-tab {\n background-color: var(--dv-activegroup-hiddenpanel-tab-background-color);\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n background-color: var(--dv-inactivegroup-visiblepanel-tab-background-color);\n color: var(--dv-inactivegroup-visiblepanel-tab-color);\n}\n.groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.inactive-tab {\n background-color: var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n color: var(--dv-inactivegroup-hiddenpanel-tab-color);\n}\n\n/**\n * when a tab is dragged we lose the above stylings because they are conditional on parent elements\n * therefore we also set some stylings for the dragging event\n **/\n.tab.dv-tab-dragging {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.groupview {\n display: flex;\n flex-direction: column;\n height: 100%;\n background-color: var(--dv-group-view-background-color);\n overflow: hidden;\n}\n.groupview:focus {\n outline: none;\n}\n.groupview.empty > .tabs-and-actions-container {\n display: none;\n}\n.groupview > .content-container {\n flex-grow: 1;\n overflow: hidden;\n outline: none;\n}\n.grid-view,\n.branch-node {\n height: 100%;\n width: 100%;\n}\n.pane-container {\n height: 100%;\n width: 100%;\n}\n.pane-container.animated .view {\n transition-duration: 0.15s;\n transition-timing-function: ease-out;\n}\n.pane-container .view {\n overflow: hidden;\n display: flex;\n flex-direction: column;\n padding: 0px !important;\n}\n.pane-container .view:not(:first-child)::before {\n background-color: transparent !important;\n}\n.pane-container .view:not(:first-child) .pane > .pane-header {\n border-top: 1px solid var(--dv-paneview-header-border-color);\n}\n.pane-container .view .default-header {\n background-color: var(--dv-group-view-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n display: flex;\n padding: 0px 8px;\n cursor: pointer;\n}\n.pane-container .view .default-header .dockview-pane-header-icon {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.pane-container .view .default-header > span {\n padding-left: 8px;\n flex-grow: 1;\n}\n.pane-container:first-of-type > .pane > .pane-header {\n border-top: none !important;\n}\n.pane-container .pane {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n height: 100%;\n}\n.pane-container .pane .pane-header {\n box-sizing: border-box;\n user-select: none;\n position: relative;\n outline: none;\n}\n.pane-container .pane .pane-header.pane-draggable {\n cursor: pointer;\n}\n.pane-container .pane .pane-header:focus:before, .pane-container .pane .pane-header:focus-within:before {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 5;\n content: \"\";\n pointer-events: none;\n outline: 1px solid;\n outline-width: -1px;\n outline-style: solid;\n outline-offset: -1px;\n outline-color: var(--dv-paneview-active-outline-color);\n}\n.pane-container .pane .pane-body {\n overflow-y: auto;\n overflow-x: hidden;\n flex-grow: 1;\n position: relative;\n outline: none;\n}\n.pane-container .pane .pane-body:focus:before, .pane-container .pane .pane-body:focus-within:before {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 5;\n content: \"\";\n pointer-events: none;\n outline: 1px solid;\n outline-width: -1px;\n outline-style: solid;\n outline-offset: -1px;\n outline-color: var(--dv-paneview-active-outline-color);\n}\n.split-view-container {\n position: relative;\n overflow: hidden;\n height: 100%;\n width: 100%;\n}\n.split-view-container.animation .view,\n.split-view-container.animation .sash {\n transition-duration: 0.15s;\n transition-timing-function: ease-out;\n}\n.split-view-container.horizontal {\n height: 100%;\n}\n.split-view-container.horizontal > .sash-container > .sash {\n height: 100%;\n width: 4px;\n}\n.split-view-container.horizontal > .sash-container > .sash.enabled {\n cursor: ew-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.horizontal > .sash-container > .sash.maximum {\n cursor: w-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.minimum {\n cursor: e-resize;\n}\n.split-view-container.horizontal > .view-container > .view:not(:first-child)::before {\n height: 100%;\n width: 1px;\n}\n.split-view-container.vertical {\n width: 100%;\n}\n.split-view-container.vertical > .sash-container > .sash {\n width: 100%;\n height: 4px;\n}\n.split-view-container.vertical > .sash-container > .sash.enabled {\n cursor: ns-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.vertical > .sash-container > .sash.maximum {\n cursor: n-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.minimum {\n cursor: s-resize;\n}\n.split-view-container.vertical > .view-container > .view {\n width: 100%;\n}\n.split-view-container.vertical > .view-container > .view:not(:first-child)::before {\n height: 1px;\n width: 100%;\n}\n.split-view-container .sash-container {\n height: 100%;\n width: 100%;\n position: absolute;\n}\n.split-view-container .sash-container .sash {\n position: absolute;\n z-index: 99;\n outline: none;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n touch-action: none;\n}\n.split-view-container .sash-container .sash:active {\n transition: background-color 0.1s ease-in-out;\n background-color: var(--dv-active-sash-color, transparent);\n}\n.split-view-container .sash-container .sash:hover {\n background-color: var(--dv-active-sash-color, transparent);\n transition: background-color 0.1s ease-in-out;\n transition-delay: 0.5s;\n}\n.split-view-container .view-container {\n position: relative;\n height: 100%;\n width: 100%;\n background-color: var(--dv-background-color);\n}\n.split-view-container .view-container .view {\n height: 100%;\n box-sizing: border-box;\n overflow: auto;\n position: absolute;\n}\n.split-view-container.separator-border .view:not(:first-child)::before {\n content: \" \";\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n background-color: var(--dv-separator-border);\n}\n.dv-dragged {\n transform: translate3d(0px, 0px, 0px); /* forces tab to be drawn on a separate layer (see https://github.com/microsoft/vscode/issues/18733) */\n}\n\n.tab {\n flex-shrink: 0;\n}\n.tab.dv-tab-dragging .tab-action {\n background-color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.tab.active-tab > .default-tab .tab-action {\n visibility: visible;\n}\n.tab.inactive-tab > .default-tab .tab-action {\n visibility: hidden;\n}\n.tab.inactive-tab > .default-tab:hover .tab-action {\n visibility: visible;\n}\n.tab .default-tab {\n position: relative;\n height: 100%;\n display: flex;\n min-width: 80px;\n align-items: center;\n padding: 0px 8px;\n white-space: nowrap;\n text-overflow: elipsis;\n}\n.tab .default-tab .tab-content {\n padding: 0px 8px;\n flex-grow: 1;\n}\n.tab .default-tab .action-container {\n text-align: right;\n display: flex;\n}\n.tab .default-tab .action-container .tab-list {\n display: flex;\n padding: 0px;\n margin: 0px;\n justify-content: flex-end;\n}\n.tab .default-tab .action-container .tab-list .tab-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n}\n.tab .default-tab .action-container .tab-list .tab-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}\n.tabs-and-actions-container {\n display: flex;\n background-color: var(--dv-tabs-and-actions-container-background-color);\n flex-shrink: 0;\n box-sizing: border-box;\n height: var(--dv-tabs-and-actions-container-height);\n font-size: var(--dv-tabs-and-actions-container-font-size);\n}\n.tabs-and-actions-container.hidden {\n display: none;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .tabs-container {\n flex-grow: 1;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .tabs-container .tab {\n flex-grow: 1;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .void-container {\n flex-grow: 0;\n}\n.tabs-and-actions-container .void-container {\n display: flex;\n flex-grow: 1;\n cursor: grab;\n}\n.tabs-and-actions-container .tabs-container {\n display: flex;\n overflow-x: overlay;\n overflow-y: hidden;\n scrollbar-width: thin;\n /* Track */\n /* Handle */\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar {\n height: 3px;\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar-track {\n background: transparent;\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar-thumb {\n background: var(--dv-tabs-container-scrollbar-color);\n}\n.tabs-and-actions-container .tabs-container .tab {\n -webkit-user-drag: element;\n outline: none;\n min-width: 75px;\n cursor: pointer;\n position: relative;\n box-sizing: border-box;\n}\n.tabs-and-actions-container .tabs-container .tab:not(:first-child)::before {\n content: \" \";\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n background-color: var(--dv-tab-divider-color);\n width: 1px;\n height: 100%;\n}\n.watermark {\n display: flex;\n width: 100%;\n}\n.watermark.has-actions .watermark-title .actions-container {\n display: none;\n}\n.watermark .watermark-title {\n height: 35px;\n width: 100%;\n display: flex;\n}\n.watermark .watermark-content {\n flex-grow: 1;\n}\n.watermark .actions-container {\n display: flex;\n align-items: center;\n padding: 0px 8px;\n}\n.watermark .actions-container .close-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n cursor: pointer;\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.watermark .actions-container .close-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}";
36
+ var css_248z = ".dockview-svg {\n display: inline-block;\n fill: currentcolor;\n line-height: 1;\n stroke: currentcolor;\n stroke-width: 0;\n}\n.dockview-theme-dark {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n}\n\n.dockview-theme-light {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: white;\n --dv-tabs-and-actions-container-background-color: #f3f3f3;\n --dv-activegroup-visiblepanel-tab-background-color: white;\n --dv-activegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-inactivegroup-visiblepanel-tab-background-color: white;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-tab-divider-color: white;\n --dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-activegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.35);\n --dv-separator-border: rgba(128, 128, 128, 0.35);\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n}\n\n.dockview-theme-vs {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n --dv-tabs-and-actions-container-background-color: #2d2d30;\n --dv-tabs-and-actions-container-height: 20px;\n --dv-tabs-and-actions-container-font-size: 11px;\n --dv-activegroup-visiblepanel-tab-background-color: #007acc;\n --dv-inactivegroup-visiblepanel-tab-background-color: #3f3f46;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: white;\n --dv-inactivegroup-visiblepanel-tab-color: white;\n --dv-inactivegroup-hiddenpanel-tab-color: white;\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-activegroup-hiddenpanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n}\n\n.dockview-theme-abyss {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #000c18;\n --dv-tabs-and-actions-container-background-color: #1c1c2a;\n --dv-activegroup-visiblepanel-tab-background-color: #000c18;\n --dv-activegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #000c18;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-tab-divider-color: #2b2b4a;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.25);\n --dv-separator-border: #2b2b4a;\n --dv-paneview-header-border-color: #2b2b4a;\n --dv-paneview-active-outline-color: #596f99;\n}\n\n.dockview-theme-dracula {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #282a36;\n --dv-tabs-and-actions-container-background-color: #191a21;\n --dv-activegroup-visiblepanel-tab-background-color: #282a36;\n --dv-activegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #282a36;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-tab-divider-color: #191a21;\n --dv-activegroup-visiblepanel-tab-color: rgb(248, 248, 242);\n --dv-activegroup-hiddenpanel-tab-color: rgb(98, 114, 164);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(248, 248, 242, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(98, 114, 164, 0.5);\n --dv-separator-border: #bd93f9;\n --dv-paneview-header-border-color: #bd93f9;\n --dv-paneview-active-outline-color: #6272a4;\n}\n.dockview-theme-dracula .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab::after {\n position: absolute;\n left: 0px;\n top: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #94527e;\n z-index: 999;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #5e3d5a;\n z-index: 999;\n}\n\n.dockview-theme-replit {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #ebeced;\n --dv-tabs-and-actions-container-background-color: #fcfcfc;\n --dv-activegroup-visiblepanel-tab-background-color: #f0f1f2;\n --dv-activegroup-hiddenpanel-tab-background-color: ##fcfcfc;\n --dv-inactivegroup-visiblepanel-tab-background-color: #f0f1f2;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #fcfcfc;\n --dv-tab-divider-color: transparent;\n --dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-activegroup-hiddenpanel-tab-color: rgb(51, 51, 51);\n --dv-inactivegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-inactivegroup-hiddenpanel-tab-color: rgb(51, 51, 51);\n --dv-separator-border: transparent;\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n --dv-background-color: #ebeced;\n --dv-separator-handle-background-color: #cfd1d3;\n --dv-separator-handle-hover-background-color: #babbbb;\n}\n.dockview-theme-replit.dv-dockview {\n padding: 3px;\n}\n.dockview-theme-replit .view:has(> .groupview) {\n padding: 3px;\n}\n.dockview-theme-replit .dv-resize-container:has(> .groupview) {\n border-radius: 8px;\n}\n.dockview-theme-replit .groupview {\n overflow: hidden;\n border-radius: 10px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container {\n border-bottom: 1px solid rgba(128, 128, 128, 0.35);\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab {\n margin: 4px;\n border-radius: 8px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab .dockview-svg {\n height: 8px;\n width: 8px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab:hover {\n background-color: #e4e5e6 !important;\n}\n.dockview-theme-replit .groupview .content-container {\n background-color: #fcfcfc;\n}\n.dockview-theme-replit .groupview.active-group {\n border: 1px solid rgba(128, 128, 128, 0.35);\n}\n.dockview-theme-replit .groupview.inactive-group {\n border: 1px solid transparent;\n}\n.dockview-theme-replit .vertical > .sash-container > .sash::after {\n content: \"\";\n height: 4px;\n width: 40px;\n border-radius: 2px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--dv-separator-handle-background-color);\n position: absolute;\n}\n.dockview-theme-replit .vertical > .sash-container > .sash:hover::after {\n background-color: var(--dv-separator-handle-hover-background-color);\n}\n.dockview-theme-replit .horizontal > .sash-container > .sash::after {\n content: \"\";\n height: 40px;\n width: 4px;\n border-radius: 2px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--dv-separator-handle-background-color);\n position: absolute;\n}\n.dockview-theme-replit .horizontal > .sash-container > .sash:hover::after {\n background-color: var(--dv-separator-handle-hover-background-color);\n}\n.drop-target {\n position: relative;\n}\n.drop-target > .drop-target-dropzone {\n position: absolute;\n left: 0px;\n top: 0px;\n height: 100%;\n width: 100%;\n z-index: 1000;\n pointer-events: none;\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection {\n position: relative;\n box-sizing: border-box;\n height: 100%;\n width: 100%;\n background-color: var(--dv-drag-over-background-color);\n transition: top 70ms ease-out, left 70ms ease-out, width 70ms ease-out, height 70ms ease-out, opacity 0.15s ease-out;\n will-change: transform;\n pointer-events: none;\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-top {\n border-top: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-bottom {\n border-bottom: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-left {\n border-left: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-right {\n border-right: 1px solid var(--dv-drag-over-border-color);\n}\n.dv-debug .dv-resize-container .dv-resize-handle-top {\n background-color: red;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-bottom {\n background-color: green;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-left {\n background-color: yellow;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-right {\n background-color: blue;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-topleft,\n.dv-debug .dv-resize-container .dv-resize-handle-topright,\n.dv-debug .dv-resize-container .dv-resize-handle-bottomleft,\n.dv-debug .dv-resize-container .dv-resize-handle-bottomright {\n background-color: cyan;\n}\n\n.dv-resize-container {\n position: absolute;\n z-index: 997;\n border: 1px solid var(--dv-tab-divider-color);\n box-shadow: var(--dv-floating-box-shadow);\n}\n.dv-resize-container.dv-bring-to-front {\n z-index: 998;\n}\n.dv-resize-container.dv-resize-container-dragging {\n opacity: 0.5;\n}\n.dv-resize-container .dv-resize-handle-top {\n height: 4px;\n width: calc(100% - 8px);\n left: 4px;\n top: -2px;\n z-index: 999;\n position: absolute;\n cursor: ns-resize;\n}\n.dv-resize-container .dv-resize-handle-bottom {\n height: 4px;\n width: calc(100% - 8px);\n left: 4px;\n bottom: -2px;\n z-index: 999;\n position: absolute;\n cursor: ns-resize;\n}\n.dv-resize-container .dv-resize-handle-left {\n height: calc(100% - 8px);\n width: 4px;\n left: -2px;\n top: 4px;\n z-index: 999;\n position: absolute;\n cursor: ew-resize;\n}\n.dv-resize-container .dv-resize-handle-right {\n height: calc(100% - 8px);\n width: 4px;\n right: -2px;\n top: 4px;\n z-index: 999;\n position: absolute;\n cursor: ew-resize;\n}\n.dv-resize-container .dv-resize-handle-topleft {\n height: 4px;\n width: 4px;\n top: -2px;\n left: -2px;\n z-index: 999;\n position: absolute;\n cursor: nw-resize;\n}\n.dv-resize-container .dv-resize-handle-topright {\n height: 4px;\n width: 4px;\n right: -2px;\n top: -2px;\n z-index: 999;\n position: absolute;\n cursor: ne-resize;\n}\n.dv-resize-container .dv-resize-handle-bottomleft {\n height: 4px;\n width: 4px;\n left: -2px;\n bottom: -2px;\n z-index: 999;\n position: absolute;\n cursor: sw-resize;\n}\n.dv-resize-container .dv-resize-handle-bottomright {\n height: 4px;\n width: 4px;\n right: -2px;\n bottom: -2px;\n z-index: 999;\n position: absolute;\n cursor: se-resize;\n}\n.dv-dockview {\n position: relative;\n background-color: var(--dv-group-view-background-color);\n}\n.dv-dockview .dv-watermark-container {\n position: absolute;\n top: 0px;\n left: 0px;\n height: 100%;\n width: 100%;\n z-index: 1;\n}\n\n.groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.inactive-tab {\n background-color: var(--dv-activegroup-hiddenpanel-tab-background-color);\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n background-color: var(--dv-inactivegroup-visiblepanel-tab-background-color);\n color: var(--dv-inactivegroup-visiblepanel-tab-color);\n}\n.groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.inactive-tab {\n background-color: var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n color: var(--dv-inactivegroup-hiddenpanel-tab-color);\n}\n\n/**\n * when a tab is dragged we lose the above stylings because they are conditional on parent elements\n * therefore we also set some stylings for the dragging event\n **/\n.tab.dv-tab-dragging {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.groupview {\n display: flex;\n flex-direction: column;\n height: 100%;\n background-color: var(--dv-group-view-background-color);\n overflow: hidden;\n}\n.groupview:focus {\n outline: none;\n}\n.groupview.empty > .tabs-and-actions-container {\n display: none;\n}\n.groupview > .content-container {\n flex-grow: 1;\n overflow: hidden;\n outline: none;\n}\n.grid-view,\n.branch-node {\n height: 100%;\n width: 100%;\n}\n.pane-container {\n height: 100%;\n width: 100%;\n}\n.pane-container.animated .view {\n transition-duration: 0.15s;\n transition-timing-function: ease-out;\n}\n.pane-container .view {\n overflow: hidden;\n display: flex;\n flex-direction: column;\n padding: 0px !important;\n}\n.pane-container .view:not(:first-child)::before {\n background-color: transparent !important;\n}\n.pane-container .view:not(:first-child) .pane > .pane-header {\n border-top: 1px solid var(--dv-paneview-header-border-color);\n}\n.pane-container .view .default-header {\n background-color: var(--dv-group-view-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n display: flex;\n padding: 0px 8px;\n cursor: pointer;\n}\n.pane-container .view .default-header .dockview-pane-header-icon {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.pane-container .view .default-header > span {\n padding-left: 8px;\n flex-grow: 1;\n}\n.pane-container:first-of-type > .pane > .pane-header {\n border-top: none !important;\n}\n.pane-container .pane {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n height: 100%;\n}\n.pane-container .pane .pane-header {\n box-sizing: border-box;\n user-select: none;\n position: relative;\n outline: none;\n}\n.pane-container .pane .pane-header.pane-draggable {\n cursor: pointer;\n}\n.pane-container .pane .pane-header:focus:before, .pane-container .pane .pane-header:focus-within:before {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 5;\n content: \"\";\n pointer-events: none;\n outline: 1px solid;\n outline-width: -1px;\n outline-style: solid;\n outline-offset: -1px;\n outline-color: var(--dv-paneview-active-outline-color);\n}\n.pane-container .pane .pane-body {\n overflow-y: auto;\n overflow-x: hidden;\n flex-grow: 1;\n position: relative;\n outline: none;\n}\n.pane-container .pane .pane-body:focus:before, .pane-container .pane .pane-body:focus-within:before {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 5;\n content: \"\";\n pointer-events: none;\n outline: 1px solid;\n outline-width: -1px;\n outline-style: solid;\n outline-offset: -1px;\n outline-color: var(--dv-paneview-active-outline-color);\n}\n.dv-debug .split-view-container .sash-container .sash.enabled {\n background-color: black;\n}\n.dv-debug .split-view-container .sash-container .sash.disabled {\n background-color: orange;\n}\n.dv-debug .split-view-container .sash-container .sash.maximum {\n background-color: green;\n}\n.dv-debug .split-view-container .sash-container .sash.minimum {\n background-color: red;\n}\n\n.split-view-container {\n position: relative;\n overflow: hidden;\n height: 100%;\n width: 100%;\n}\n.split-view-container.animation .view,\n.split-view-container.animation .sash {\n transition-duration: 0.15s;\n transition-timing-function: ease-out;\n}\n.split-view-container.horizontal {\n height: 100%;\n}\n.split-view-container.horizontal > .sash-container > .sash {\n height: 100%;\n width: 4px;\n}\n.split-view-container.horizontal > .sash-container > .sash.enabled {\n cursor: ew-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.horizontal > .sash-container > .sash.maximum {\n cursor: w-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.minimum {\n cursor: e-resize;\n}\n.split-view-container.horizontal > .view-container > .view:not(:first-child)::before {\n height: 100%;\n width: 1px;\n}\n.split-view-container.vertical {\n width: 100%;\n}\n.split-view-container.vertical > .sash-container > .sash {\n width: 100%;\n height: 4px;\n}\n.split-view-container.vertical > .sash-container > .sash.enabled {\n cursor: ns-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.vertical > .sash-container > .sash.maximum {\n cursor: n-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.minimum {\n cursor: s-resize;\n}\n.split-view-container.vertical > .view-container > .view {\n width: 100%;\n}\n.split-view-container.vertical > .view-container > .view:not(:first-child)::before {\n height: 1px;\n width: 100%;\n}\n.split-view-container .sash-container {\n height: 100%;\n width: 100%;\n position: absolute;\n}\n.split-view-container .sash-container .sash {\n position: absolute;\n z-index: 99;\n outline: none;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n touch-action: none;\n}\n.split-view-container .sash-container .sash:active {\n transition: background-color 0.1s ease-in-out;\n background-color: var(--dv-active-sash-color, transparent);\n}\n.split-view-container .sash-container .sash:hover {\n background-color: var(--dv-active-sash-color, transparent);\n transition: background-color 0.1s ease-in-out;\n transition-delay: 0.5s;\n}\n.split-view-container .view-container {\n position: relative;\n height: 100%;\n width: 100%;\n background-color: var(--dv-background-color);\n}\n.split-view-container .view-container .view {\n height: 100%;\n box-sizing: border-box;\n overflow: auto;\n position: absolute;\n}\n.split-view-container.separator-border .view:not(:first-child)::before {\n content: \" \";\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n background-color: var(--dv-separator-border);\n}\n.dv-dragged {\n transform: translate3d(0px, 0px, 0px); /* forces tab to be drawn on a separate layer (see https://github.com/microsoft/vscode/issues/18733) */\n}\n\n.tab {\n flex-shrink: 0;\n}\n.tab.dv-tab-dragging .tab-action {\n background-color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.tab.active-tab > .default-tab .tab-action {\n visibility: visible;\n}\n.tab.inactive-tab > .default-tab .tab-action {\n visibility: hidden;\n}\n.tab.inactive-tab > .default-tab:hover .tab-action {\n visibility: visible;\n}\n.tab .default-tab {\n position: relative;\n height: 100%;\n display: flex;\n min-width: 80px;\n align-items: center;\n padding: 0px 8px;\n white-space: nowrap;\n text-overflow: elipsis;\n}\n.tab .default-tab .tab-content {\n padding: 0px 8px;\n flex-grow: 1;\n}\n.tab .default-tab .action-container {\n text-align: right;\n display: flex;\n}\n.tab .default-tab .action-container .tab-list {\n display: flex;\n padding: 0px;\n margin: 0px;\n justify-content: flex-end;\n}\n.tab .default-tab .action-container .tab-list .tab-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n}\n.tab .default-tab .action-container .tab-list .tab-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}\n.tabs-and-actions-container {\n display: flex;\n background-color: var(--dv-tabs-and-actions-container-background-color);\n flex-shrink: 0;\n box-sizing: border-box;\n height: var(--dv-tabs-and-actions-container-height);\n font-size: var(--dv-tabs-and-actions-container-font-size);\n}\n.tabs-and-actions-container.hidden {\n display: none;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .tabs-container {\n flex-grow: 1;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .tabs-container .tab {\n flex-grow: 1;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .void-container {\n flex-grow: 0;\n}\n.tabs-and-actions-container .void-container {\n display: flex;\n flex-grow: 1;\n cursor: grab;\n}\n.tabs-and-actions-container .tabs-container {\n display: flex;\n overflow-x: overlay;\n overflow-y: hidden;\n scrollbar-width: thin;\n /* Track */\n /* Handle */\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar {\n height: 3px;\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar-track {\n background: transparent;\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar-thumb {\n background: var(--dv-tabs-container-scrollbar-color);\n}\n.tabs-and-actions-container .tabs-container .tab {\n -webkit-user-drag: element;\n outline: none;\n min-width: 75px;\n cursor: pointer;\n position: relative;\n box-sizing: border-box;\n}\n.tabs-and-actions-container .tabs-container .tab:not(:first-child)::before {\n content: \" \";\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n background-color: var(--dv-tab-divider-color);\n width: 1px;\n height: 100%;\n}\n.watermark {\n display: flex;\n width: 100%;\n}\n.watermark.has-actions .watermark-title .actions-container {\n display: none;\n}\n.watermark .watermark-title {\n height: 35px;\n width: 100%;\n display: flex;\n}\n.watermark .watermark-content {\n flex-grow: 1;\n}\n.watermark .actions-container {\n display: flex;\n align-items: center;\n padding: 0px 8px;\n}\n.watermark .actions-container .close-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n cursor: pointer;\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.watermark .actions-container .close-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}";
37
37
  styleInject(css_248z);
38
38
 
39
39
  class TransferObject {
@@ -303,6 +303,31 @@ define(['exports'], (function (exports) { 'use strict';
303
303
  }
304
304
  }
305
305
 
306
+ function createComponent(id, componentName, components = {}, frameworkComponents = {}, createFrameworkComponent, fallback) {
307
+ const Component = typeof componentName === 'string'
308
+ ? components[componentName]
309
+ : undefined;
310
+ const FrameworkComponent = typeof componentName === 'string'
311
+ ? frameworkComponents[componentName]
312
+ : undefined;
313
+ if (Component && FrameworkComponent) {
314
+ throw new Error(`Cannot create '${id}'. component '${componentName}' registered as both a component and frameworkComponent`);
315
+ }
316
+ if (FrameworkComponent) {
317
+ if (!createFrameworkComponent) {
318
+ throw new Error(`Cannot create '${id}' for framework component '${componentName}'. you must register a frameworkPanelWrapper to use framework components`);
319
+ }
320
+ return createFrameworkComponent.createComponent(id, componentName, FrameworkComponent);
321
+ }
322
+ if (!Component) {
323
+ if (fallback) {
324
+ return fallback();
325
+ }
326
+ throw new Error(`Cannot create '${id}', no component '${componentName}' provided`);
327
+ }
328
+ return new Component(id, componentName);
329
+ }
330
+
306
331
  function watchElementResize(element, cb) {
307
332
  const observer = new ResizeObserver((entires) => {
308
333
  /**
@@ -416,31 +441,16 @@ define(['exports'], (function (exports) { 'use strict';
416
441
  refreshState() {
417
442
  this._refreshStateHandler();
418
443
  }
419
- }
420
-
421
- function createComponent(id, componentName, components = {}, frameworkComponents = {}, createFrameworkComponent, fallback) {
422
- const Component = typeof componentName === 'string'
423
- ? components[componentName]
424
- : undefined;
425
- const FrameworkComponent = typeof componentName === 'string'
426
- ? frameworkComponents[componentName]
427
- : undefined;
428
- if (Component && FrameworkComponent) {
429
- throw new Error(`Cannot create '${id}'. component '${componentName}' registered as both a component and frameworkComponent`);
430
- }
431
- if (FrameworkComponent) {
432
- if (!createFrameworkComponent) {
433
- throw new Error(`Cannot create '${id}' for framework component '${componentName}'. you must register a frameworkPanelWrapper to use framework components`);
434
- }
435
- return createFrameworkComponent.createComponent(id, componentName, FrameworkComponent);
436
- }
437
- if (!Component) {
438
- if (fallback) {
439
- return fallback();
440
- }
441
- throw new Error(`Cannot create '${id}', no component '${componentName}' provided`);
442
- }
443
- return new Component(id, componentName);
444
+ }
445
+ // quasi: apparently, but not really; seemingly
446
+ const QUASI_PREVENT_DEFAULT_KEY = 'dv-quasiPreventDefault';
447
+ // mark an event directly for other listeners to check
448
+ function quasiPreventDefault(event) {
449
+ event[QUASI_PREVENT_DEFAULT_KEY] = true;
450
+ }
451
+ // check if this event has been marked
452
+ function quasiDefaultPrevented(event) {
453
+ return event[QUASI_PREVENT_DEFAULT_KEY];
444
454
  }
445
455
 
446
456
  function tail(arr) {
@@ -491,6 +501,14 @@ define(['exports'], (function (exports) { 'use strict';
491
501
  }
492
502
  }
493
503
  return -1;
504
+ }
505
+ function remove(array, value) {
506
+ const index = array.findIndex((t) => t === value);
507
+ if (index > -1) {
508
+ array.splice(index, 1);
509
+ return true;
510
+ }
511
+ return false;
494
512
  }
495
513
 
496
514
  const clamp = (value, min, max) => {
@@ -1633,7 +1651,7 @@ define(['exports'], (function (exports) { 'use strict';
1633
1651
  : true,
1634
1652
  };
1635
1653
  }),
1636
- size: this.size,
1654
+ size: this.orthogonalSize,
1637
1655
  };
1638
1656
  this.children = childDescriptors.map((c) => c.node);
1639
1657
  this.splitview = new Splitview(this.element, {
@@ -1696,7 +1714,7 @@ define(['exports'], (function (exports) { 'use strict';
1696
1714
  layout(size, orthogonalSize) {
1697
1715
  this._size = orthogonalSize;
1698
1716
  this._orthogonalSize = size;
1699
- this.splitview.layout(this.size, this.orthogonalSize);
1717
+ this.splitview.layout(orthogonalSize, size);
1700
1718
  }
1701
1719
  addChild(node, size, index, skipLayout) {
1702
1720
  if (index < 0 || index > this.children.length) {
@@ -1921,9 +1939,9 @@ define(['exports'], (function (exports) { 'use strict';
1921
1939
  this._deserialize(json.root, orientation, deserializer, height);
1922
1940
  }
1923
1941
  _deserialize(root, orientation, deserializer, orthogonalSize) {
1924
- this.root = this._deserializeNode(root, orientation, deserializer, orthogonalSize, true);
1942
+ this.root = this._deserializeNode(root, orientation, deserializer, orthogonalSize);
1925
1943
  }
1926
- _deserializeNode(node, orientation, deserializer, orthogonalSize, isRoot = false) {
1944
+ _deserializeNode(node, orientation, deserializer, orthogonalSize) {
1927
1945
  let result;
1928
1946
  if (node.type === 'branch') {
1929
1947
  const serializedChildren = node.data;
@@ -1933,9 +1951,9 @@ define(['exports'], (function (exports) { 'use strict';
1933
1951
  visible: serializedChild.visible,
1934
1952
  };
1935
1953
  });
1936
- // HORIZONTAL => height=orthogonalsize width=size
1937
- // VERTICAL => height=size width=orthogonalsize
1938
- result = new BranchNode(orientation, this.proportionalLayout, this.styles, isRoot ? orthogonalSize : node.size, isRoot ? node.size : orthogonalSize, children);
1954
+ result = new BranchNode(orientation, this.proportionalLayout, this.styles, node.size, // <- orthogonal size - flips at each depth
1955
+ orthogonalSize, // <- size - flips at each depth
1956
+ children);
1939
1957
  }
1940
1958
  else {
1941
1959
  result = new LeafNode(deserializer.fromJSON(node), orientation, orthogonalSize, node.size);
@@ -1968,7 +1986,8 @@ define(['exports'], (function (exports) { 'use strict';
1968
1986
  const oldRoot = this.root;
1969
1987
  oldRoot.element.remove();
1970
1988
  this._root = new BranchNode(orthogonal(oldRoot.orientation), this.proportionalLayout, this.styles, this.root.orthogonalSize, this.root.size);
1971
- if (oldRoot.children.length === 1) {
1989
+ if (oldRoot.children.length === 0) ;
1990
+ else if (oldRoot.children.length === 1) {
1972
1991
  // can remove one level of redundant branching if there is only a single child
1973
1992
  const childReference = oldRoot.children[0];
1974
1993
  const child = oldRoot.removeChild(0); // remove to prevent disposal when disposing of unwanted root
@@ -2484,6 +2503,9 @@ define(['exports'], (function (exports) { 'use strict';
2484
2503
  addPanel(options) {
2485
2504
  return this.component.addPanel(options);
2486
2505
  }
2506
+ removePanel(panel) {
2507
+ this.component.removePanel(panel);
2508
+ }
2487
2509
  addGroup(options) {
2488
2510
  return this.component.addGroup(options);
2489
2511
  }
@@ -2502,6 +2524,9 @@ define(['exports'], (function (exports) { 'use strict';
2502
2524
  getGroup(id) {
2503
2525
  return this.component.getPanel(id);
2504
2526
  }
2527
+ addFloatingGroup(item, coord) {
2528
+ return this.component.addFloatingGroup(item, coord);
2529
+ }
2505
2530
  fromJSON(data) {
2506
2531
  this.component.fromJSON(data);
2507
2532
  }
@@ -2594,10 +2619,14 @@ define(['exports'], (function (exports) { 'use strict';
2594
2619
  this._onDrop = new Emitter();
2595
2620
  this.onDrop = this._onDrop.event;
2596
2621
  // use a set to take advantage of #<set>.has
2597
- const acceptedTargetZonesSet = new Set(this.options.acceptedTargetZones);
2622
+ this._acceptedTargetZonesSet = new Set(this.options.acceptedTargetZones);
2598
2623
  this.addDisposables(this._onDrop, new DragAndDropObserver(this.element, {
2599
2624
  onDragEnter: () => undefined,
2600
2625
  onDragOver: (e) => {
2626
+ if (this._acceptedTargetZonesSet.size === 0) {
2627
+ this.removeDropTarget();
2628
+ return;
2629
+ }
2601
2630
  const width = this.element.clientWidth;
2602
2631
  const height = this.element.clientHeight;
2603
2632
  if (width === 0 || height === 0) {
@@ -2606,20 +2635,28 @@ define(['exports'], (function (exports) { 'use strict';
2606
2635
  const rect = e.currentTarget.getBoundingClientRect();
2607
2636
  const x = e.clientX - rect.left;
2608
2637
  const y = e.clientY - rect.top;
2609
- const quadrant = this.calculateQuadrant(acceptedTargetZonesSet, x, y, width, height);
2610
- if (quadrant === null) {
2638
+ const quadrant = this.calculateQuadrant(this._acceptedTargetZonesSet, x, y, width, height);
2639
+ /**
2640
+ * If the event has already been used by another DropTarget instance
2641
+ * then don't show a second drop target, only one target should be
2642
+ * active at any one time
2643
+ */
2644
+ if (this.isAlreadyUsed(e) || quadrant === null) {
2611
2645
  // no drop target should be displayed
2612
2646
  this.removeDropTarget();
2613
2647
  return;
2614
2648
  }
2615
2649
  if (typeof this.options.canDisplayOverlay === 'boolean') {
2616
2650
  if (!this.options.canDisplayOverlay) {
2651
+ this.removeDropTarget();
2617
2652
  return;
2618
2653
  }
2619
2654
  }
2620
2655
  else if (!this.options.canDisplayOverlay(e, quadrant)) {
2656
+ this.removeDropTarget();
2621
2657
  return;
2622
2658
  }
2659
+ this.markAsUsed(e);
2623
2660
  if (!this.targetElement) {
2624
2661
  this.targetElement = document.createElement('div');
2625
2662
  this.targetElement.className = 'drop-target-dropzone';
@@ -2630,12 +2667,6 @@ define(['exports'], (function (exports) { 'use strict';
2630
2667
  this.element.classList.add('drop-target');
2631
2668
  this.element.append(this.targetElement);
2632
2669
  }
2633
- if (this.options.acceptedTargetZones.length === 0) {
2634
- return;
2635
- }
2636
- if (!this.targetElement || !this.overlayElement) {
2637
- return;
2638
- }
2639
2670
  this.toggleClasses(quadrant, width, height);
2640
2671
  this.setState(quadrant);
2641
2672
  },
@@ -2658,10 +2689,26 @@ define(['exports'], (function (exports) { 'use strict';
2658
2689
  },
2659
2690
  }));
2660
2691
  }
2692
+ setTargetZones(acceptedTargetZones) {
2693
+ this._acceptedTargetZonesSet = new Set(acceptedTargetZones);
2694
+ }
2661
2695
  dispose() {
2662
2696
  this.removeDropTarget();
2663
2697
  super.dispose();
2664
2698
  }
2699
+ /**
2700
+ * Add a property to the event object for other potential listeners to check
2701
+ */
2702
+ markAsUsed(event) {
2703
+ event[Droptarget.USED_EVENT_ID] = true;
2704
+ }
2705
+ /**
2706
+ * Check is the event has already been used by another instance od DropTarget
2707
+ */
2708
+ isAlreadyUsed(event) {
2709
+ const value = event[Droptarget.USED_EVENT_ID];
2710
+ return typeof value === 'boolean' && value;
2711
+ }
2665
2712
  toggleClasses(quadrant, width, height) {
2666
2713
  var _a, _b, _c, _d;
2667
2714
  if (!this.overlayElement) {
@@ -2756,6 +2803,7 @@ define(['exports'], (function (exports) { 'use strict';
2756
2803
  }
2757
2804
  }
2758
2805
  }
2806
+ Droptarget.USED_EVENT_ID = '__dockview_droptarget_event_is_used__';
2759
2807
  function calculateQuadrantAsPercentage(overlayType, x, y, width, height, threshold) {
2760
2808
  const xp = (100 * x) / width;
2761
2809
  const yp = (100 * y) / height;
@@ -2885,8 +2933,15 @@ define(['exports'], (function (exports) { 'use strict';
2885
2933
  this.addDisposables(this._onDragStart, this.dataDisposable, this.pointerEventsDisposable);
2886
2934
  this.configure();
2887
2935
  }
2936
+ isCancelled(_event) {
2937
+ return false;
2938
+ }
2888
2939
  configure() {
2889
2940
  this.addDisposables(this._onDragStart, addDisposableListener(this.el, 'dragstart', (event) => {
2941
+ if (this.isCancelled(event)) {
2942
+ event.preventDefault();
2943
+ return;
2944
+ }
2890
2945
  const iframes = [
2891
2946
  ...getElementsByTagName('iframe'),
2892
2947
  ...getElementsByTagName('webview'),
@@ -2960,13 +3015,6 @@ define(['exports'], (function (exports) { 'use strict';
2960
3015
  if (event.defaultPrevented) {
2961
3016
  return;
2962
3017
  }
2963
- /**
2964
- * TODO: alternative to stopPropagation
2965
- *
2966
- * I need to stop the event propagation here since otherwise it'll be intercepted by event handlers
2967
- * on the tabs-container. I cannot use event.preventDefault() since I need the on DragStart event to occur
2968
- */
2969
- event.stopPropagation();
2970
3018
  this._onChanged.fire(event);
2971
3019
  }));
2972
3020
  this.droptarget = new Droptarget(this._element, {
@@ -3024,6 +3072,22 @@ define(['exports'], (function (exports) { 'use strict';
3024
3072
  this.accessorId = accessorId;
3025
3073
  this.group = group;
3026
3074
  this.panelTransfer = LocalSelectionTransfer.getInstance();
3075
+ this.addDisposables(addDisposableListener(element, 'mousedown', (e) => {
3076
+ if (e.shiftKey) {
3077
+ /**
3078
+ * You cannot call e.preventDefault() because that will prevent drag events from firing
3079
+ * but we also need to stop any group overlay drag events from occuring
3080
+ * Use a custom event marker that can be checked by the overlay drag events
3081
+ */
3082
+ quasiPreventDefault(e);
3083
+ }
3084
+ }, true));
3085
+ }
3086
+ isCancelled(_event) {
3087
+ if (this.group.api.isFloating && !_event.shiftKey) {
3088
+ return true;
3089
+ }
3090
+ return false;
3027
3091
  }
3028
3092
  getData(dataTransfer) {
3029
3093
  this.panelTransfer.setData([new PanelTransfer(this.accessorId, this.group.id, null)], PanelTransfer.prototype);
@@ -3114,17 +3178,30 @@ define(['exports'], (function (exports) { 'use strict';
3114
3178
  hide() {
3115
3179
  this._element.style.display = 'none';
3116
3180
  }
3117
- setActionElement(element) {
3118
- if (this.actions === element) {
3181
+ setRightActionsElement(element) {
3182
+ if (this.rightActions === element) {
3119
3183
  return;
3120
3184
  }
3121
- if (this.actions) {
3122
- this.actions.remove();
3123
- this.actions = undefined;
3185
+ if (this.rightActions) {
3186
+ this.rightActions.remove();
3187
+ this.rightActions = undefined;
3124
3188
  }
3125
3189
  if (element) {
3126
- this.actionContainer.appendChild(element);
3127
- this.actions = element;
3190
+ this.rightActionsContainer.appendChild(element);
3191
+ this.rightActions = element;
3192
+ }
3193
+ }
3194
+ setLeftActionsElement(element) {
3195
+ if (this.leftActions === element) {
3196
+ return;
3197
+ }
3198
+ if (this.leftActions) {
3199
+ this.leftActions.remove();
3200
+ this.leftActions = undefined;
3201
+ }
3202
+ if (element) {
3203
+ this.leftActionsContainer.appendChild(element);
3204
+ this.leftActions = element;
3128
3205
  }
3129
3206
  }
3130
3207
  get element() {
@@ -3159,19 +3236,35 @@ define(['exports'], (function (exports) { 'use strict';
3159
3236
  toggleClass(this._element, 'dv-single-tab', this.size === 1);
3160
3237
  }
3161
3238
  }));
3162
- this.actionContainer = document.createElement('div');
3163
- this.actionContainer.className = 'action-container';
3239
+ this.rightActionsContainer = document.createElement('div');
3240
+ this.rightActionsContainer.className = 'right-actions-container';
3241
+ this.leftActionsContainer = document.createElement('div');
3242
+ this.leftActionsContainer.className = 'left-actions-container';
3164
3243
  this.tabContainer = document.createElement('div');
3165
3244
  this.tabContainer.className = 'tabs-container';
3166
3245
  this.voidContainer = new VoidContainer(this.accessor, this.group);
3167
3246
  this._element.appendChild(this.tabContainer);
3247
+ this._element.appendChild(this.leftActionsContainer);
3168
3248
  this._element.appendChild(this.voidContainer.element);
3169
- this._element.appendChild(this.actionContainer);
3249
+ this._element.appendChild(this.rightActionsContainer);
3170
3250
  this.addDisposables(this.voidContainer, this.voidContainer.onDrop((event) => {
3171
3251
  this._onDrop.fire({
3172
3252
  event: event.nativeEvent,
3173
3253
  index: this.tabs.length,
3174
3254
  });
3255
+ }), addDisposableListener(this.voidContainer.element, 'mousedown', (event) => {
3256
+ const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
3257
+ if (isFloatingGroupsEnabled &&
3258
+ event.shiftKey &&
3259
+ !this.group.api.isFloating) {
3260
+ event.preventDefault();
3261
+ const { top, left } = this.element.getBoundingClientRect();
3262
+ const { top: rootTop, left: rootLeft } = this.accessor.element.getBoundingClientRect();
3263
+ this.accessor.addFloatingGroup(this.group, {
3264
+ x: left - rootLeft + 20,
3265
+ y: top - rootTop + 20,
3266
+ }, { inDragMode: true });
3267
+ }
3175
3268
  }), addDisposableListener(this.tabContainer, 'mousedown', (event) => {
3176
3269
  if (event.defaultPrevented) {
3177
3270
  return;
@@ -3225,6 +3318,21 @@ define(['exports'], (function (exports) { 'use strict';
3225
3318
  tabToAdd.setContent(panel.view.tab);
3226
3319
  const disposable = CompositeDisposable.from(tabToAdd.onChanged((event) => {
3227
3320
  var _a;
3321
+ const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
3322
+ const isFloatingWithOnePanel = this.group.api.isFloating && this.size === 1;
3323
+ if (isFloatingGroupsEnabled &&
3324
+ !isFloatingWithOnePanel &&
3325
+ event.shiftKey) {
3326
+ event.preventDefault();
3327
+ const panel = this.accessor.getGroupPanel(tabToAdd.panelId);
3328
+ const { top, left } = tabToAdd.element.getBoundingClientRect();
3329
+ const { top: rootTop, left: rootLeft } = this.accessor.element.getBoundingClientRect();
3330
+ this.accessor.addFloatingGroup(panel, {
3331
+ x: left - rootLeft,
3332
+ y: top - rootTop,
3333
+ }, { inDragMode: true });
3334
+ return;
3335
+ }
3228
3336
  const alreadyFocused = panel.id === ((_a = this.group.model.activePanel) === null || _a === void 0 ? void 0 : _a.id) &&
3229
3337
  this.group.model.isContentFocused;
3230
3338
  const isLeftClick = event.button === 0;
@@ -3294,6 +3402,17 @@ define(['exports'], (function (exports) { 'use strict';
3294
3402
  }
3295
3403
  return isAncestor(document.activeElement, this.contentContainer.element);
3296
3404
  }
3405
+ get isFloating() {
3406
+ return this._isFloating;
3407
+ }
3408
+ set isFloating(value) {
3409
+ this._isFloating = value;
3410
+ this.dropTarget.setTargetZones(value ? ['center'] : ['top', 'bottom', 'left', 'right', 'center']);
3411
+ toggleClass(this.container, 'dv-groupview-floating', value);
3412
+ this.groupPanel.api._onDidFloatingStateChange.fire({
3413
+ isFloating: this.isFloating,
3414
+ });
3415
+ }
3297
3416
  constructor(container, accessor, id, options, groupPanel) {
3298
3417
  super();
3299
3418
  this.container = container;
@@ -3303,6 +3422,7 @@ define(['exports'], (function (exports) { 'use strict';
3303
3422
  this.groupPanel = groupPanel;
3304
3423
  this._isGroupActive = false;
3305
3424
  this._locked = false;
3425
+ this._isFloating = false;
3306
3426
  this.mostRecentlyUsed = [];
3307
3427
  this._onDidChange = new Emitter();
3308
3428
  this.onDidChange = this._onDidChange.event;
@@ -3319,7 +3439,7 @@ define(['exports'], (function (exports) { 'use strict';
3319
3439
  this.onDidRemovePanel = this._onDidRemovePanel.event;
3320
3440
  this._onDidActivePanelChange = new Emitter();
3321
3441
  this.onDidActivePanelChange = this._onDidActivePanelChange.event;
3322
- this.container.classList.add('groupview');
3442
+ toggleClass(this.container, 'groupview', true);
3323
3443
  this.tabsContainer = new TabsContainer(this.accessor, this.groupPanel);
3324
3444
  this.contentContainer = new ContentContainer();
3325
3445
  this.dropTarget = new Droptarget(this.contentContainer.element, {
@@ -3329,6 +3449,9 @@ define(['exports'], (function (exports) { 'use strict';
3329
3449
  return false;
3330
3450
  }
3331
3451
  const data = getPanelData();
3452
+ if (!data && event.shiftKey && !this.isFloating) {
3453
+ return false;
3454
+ }
3332
3455
  if (data && data.viewId === this.accessor.id) {
3333
3456
  if (data.groupId === this.id) {
3334
3457
  if (position === 'center') {
@@ -3373,14 +3496,25 @@ define(['exports'], (function (exports) { 'use strict';
3373
3496
  // correctly initialized
3374
3497
  this.setActive(this.isActive, true, true);
3375
3498
  this.updateContainer();
3376
- if (this.accessor.options.createGroupControlElement) {
3377
- this._control = this.accessor.options.createGroupControlElement(this.groupPanel);
3378
- this.addDisposables(this._control);
3379
- this._control.init({
3499
+ if (this.accessor.options.createRightHeaderActionsElement) {
3500
+ this._rightHeaderActions =
3501
+ this.accessor.options.createRightHeaderActionsElement(this.groupPanel);
3502
+ this.addDisposables(this._rightHeaderActions);
3503
+ this._rightHeaderActions.init({
3504
+ containerApi: new DockviewApi(this.accessor),
3505
+ api: this.groupPanel.api,
3506
+ });
3507
+ this.tabsContainer.setRightActionsElement(this._rightHeaderActions.element);
3508
+ }
3509
+ if (this.accessor.options.createLeftHeaderActionsElement) {
3510
+ this._leftHeaderActions =
3511
+ this.accessor.options.createLeftHeaderActionsElement(this.groupPanel);
3512
+ this.addDisposables(this._leftHeaderActions);
3513
+ this._leftHeaderActions.init({
3380
3514
  containerApi: new DockviewApi(this.accessor),
3381
3515
  api: this.groupPanel.api,
3382
3516
  });
3383
- this.tabsContainer.setActionElement(this._control.element);
3517
+ this.tabsContainer.setLeftActionsElement(this._leftHeaderActions.element);
3384
3518
  }
3385
3519
  }
3386
3520
  indexOf(panel) {
@@ -3513,7 +3647,7 @@ define(['exports'], (function (exports) { 'use strict';
3513
3647
  return this._activePanel === panel;
3514
3648
  }
3515
3649
  updateActions(element) {
3516
- this.tabsContainer.setActionElement(element);
3650
+ this.tabsContainer.setRightActionsElement(element);
3517
3651
  }
3518
3652
  setActive(isGroupActive, skipFocus = false, force = false) {
3519
3653
  var _a, _b, _c, _d;
@@ -3685,9 +3819,10 @@ define(['exports'], (function (exports) { 'use strict';
3685
3819
  }
3686
3820
  }
3687
3821
  dispose() {
3688
- var _a, _b;
3822
+ var _a, _b, _c;
3689
3823
  super.dispose();
3690
- (_b = (_a = this.watermark) === null || _a === void 0 ? void 0 : _a.dispose) === null || _b === void 0 ? void 0 : _b.call(_a);
3824
+ (_a = this.watermark) === null || _a === void 0 ? void 0 : _a.element.remove();
3825
+ (_c = (_b = this.watermark) === null || _b === void 0 ? void 0 : _b.dispose) === null || _c === void 0 ? void 0 : _c.call(_b);
3691
3826
  for (const panel of this.panels) {
3692
3827
  panel.dispose();
3693
3828
  }
@@ -4481,8 +4616,8 @@ define(['exports'], (function (exports) { 'use strict';
4481
4616
  get isActive() {
4482
4617
  return this.api.isActive;
4483
4618
  }
4484
- constructor(id, component, options) {
4485
- super(id, component, new GridviewPanelApiImpl(id));
4619
+ constructor(id, component, options, api) {
4620
+ super(id, component, api !== null && api !== void 0 ? api : new GridviewPanelApiImpl(id));
4486
4621
  this._evaluatedMinimumWidth = 0;
4487
4622
  this._evaluatedMaximumWidth = Number.MAX_SAFE_INTEGER;
4488
4623
  this._evaluatedMinimumHeight = 0;
@@ -4580,6 +4715,32 @@ define(['exports'], (function (exports) { 'use strict';
4580
4715
  }
4581
4716
  }
4582
4717
 
4718
+ class DockviewGroupPanelApiImpl extends GridviewPanelApiImpl {
4719
+ get isFloating() {
4720
+ if (!this._group) {
4721
+ throw new Error(`DockviewGroupPanelApiImpl not initialized`);
4722
+ }
4723
+ return this._group.model.isFloating;
4724
+ }
4725
+ constructor(id, accessor) {
4726
+ super(id);
4727
+ this.accessor = accessor;
4728
+ this._onDidFloatingStateChange = new Emitter();
4729
+ this.onDidFloatingStateChange = this._onDidFloatingStateChange.event;
4730
+ this.addDisposables(this._onDidFloatingStateChange);
4731
+ }
4732
+ moveTo(options) {
4733
+ var _a;
4734
+ if (!this._group) {
4735
+ throw new Error(`DockviewGroupPanelApiImpl not initialized`);
4736
+ }
4737
+ this.accessor.moveGroupOrPanel(options.group, this._group.id, undefined, (_a = options.position) !== null && _a !== void 0 ? _a : 'center');
4738
+ }
4739
+ initialize(group) {
4740
+ this._group = group;
4741
+ }
4742
+ }
4743
+
4583
4744
  class DockviewGroupPanel extends GridviewPanel {
4584
4745
  get panels() {
4585
4746
  return this._model.panels;
@@ -4606,7 +4767,8 @@ define(['exports'], (function (exports) { 'use strict';
4606
4767
  super(id, 'groupview_default', {
4607
4768
  minimumHeight: 100,
4608
4769
  minimumWidth: 100,
4609
- });
4770
+ }, new DockviewGroupPanelApiImpl(id, accessor));
4771
+ this.api.initialize(this); // cannot use 'this' after after 'super' call
4610
4772
  this._model = new DockviewGroupPanelModel(this.element, accessor, id, options, this);
4611
4773
  }
4612
4774
  initialize() {
@@ -4624,7 +4786,6 @@ define(['exports'], (function (exports) { 'use strict';
4624
4786
  return this._model;
4625
4787
  }
4626
4788
  toJSON() {
4627
- // TODO fix typing
4628
4789
  return this.model.toJSON();
4629
4790
  }
4630
4791
  }
@@ -4678,9 +4839,10 @@ define(['exports'], (function (exports) { 'use strict';
4678
4839
  get group() {
4679
4840
  return this._group;
4680
4841
  }
4681
- constructor(panel, group) {
4842
+ constructor(panel, group, accessor) {
4682
4843
  super(panel.id);
4683
4844
  this.panel = panel;
4845
+ this.accessor = accessor;
4684
4846
  this._onDidTitleChange = new Emitter();
4685
4847
  this.onDidTitleChange = this._onDidTitleChange.event;
4686
4848
  this._onDidActiveGroupChange = new Emitter();
@@ -4692,6 +4854,10 @@ define(['exports'], (function (exports) { 'use strict';
4692
4854
  this._group = group;
4693
4855
  this.addDisposables(this.disposable, this._onDidTitleChange, this._onDidGroupChange, this._onDidActiveGroupChange);
4694
4856
  }
4857
+ moveTo(options) {
4858
+ var _a;
4859
+ this.accessor.moveGroupOrPanel(options.group, this._group.id, this.panel.id, (_a = options.position) !== null && _a !== void 0 ? _a : 'center', options.index);
4860
+ }
4695
4861
  setTitle(title) {
4696
4862
  this.panel.setTitle(title);
4697
4863
  }
@@ -4716,7 +4882,7 @@ define(['exports'], (function (exports) { 'use strict';
4716
4882
  this.containerApi = containerApi;
4717
4883
  this.view = view;
4718
4884
  this._group = group;
4719
- this.api = new DockviewPanelApiImpl(this, this._group);
4885
+ this.api = new DockviewPanelApiImpl(this, this._group, accessor);
4720
4886
  this.addDisposables(this.api.onActiveChange(() => {
4721
4887
  accessor.setActivePanel(this);
4722
4888
  }), this.api.onDidSizeChange((event) => {
@@ -5057,6 +5223,296 @@ define(['exports'], (function (exports) { 'use strict';
5057
5223
  }
5058
5224
  }
5059
5225
 
5226
+ const bringElementToFront = (() => {
5227
+ let previous = null;
5228
+ function pushToTop(element) {
5229
+ if (previous !== element && previous !== null) {
5230
+ toggleClass(previous, 'dv-bring-to-front', false);
5231
+ }
5232
+ toggleClass(element, 'dv-bring-to-front', true);
5233
+ previous = element;
5234
+ }
5235
+ return pushToTop;
5236
+ })();
5237
+ class Overlay extends CompositeDisposable {
5238
+ constructor(options) {
5239
+ super();
5240
+ this.options = options;
5241
+ this._element = document.createElement('div');
5242
+ this._onDidChange = new Emitter();
5243
+ this.onDidChange = this._onDidChange.event;
5244
+ this._onDidChangeEnd = new Emitter();
5245
+ this.onDidChangeEnd = this._onDidChangeEnd.event;
5246
+ this.addDisposables(this._onDidChange, this._onDidChangeEnd);
5247
+ this._element.className = 'dv-resize-container';
5248
+ this.setupResize('top');
5249
+ this.setupResize('bottom');
5250
+ this.setupResize('left');
5251
+ this.setupResize('right');
5252
+ this.setupResize('topleft');
5253
+ this.setupResize('topright');
5254
+ this.setupResize('bottomleft');
5255
+ this.setupResize('bottomright');
5256
+ this._element.appendChild(this.options.content);
5257
+ this.options.container.appendChild(this._element);
5258
+ // if input bad resize within acceptable boundaries
5259
+ this.setBounds({
5260
+ height: this.options.height,
5261
+ width: this.options.width,
5262
+ top: this.options.top,
5263
+ left: this.options.left,
5264
+ });
5265
+ }
5266
+ setBounds(bounds = {}) {
5267
+ if (typeof bounds.height === 'number') {
5268
+ this._element.style.height = `${bounds.height}px`;
5269
+ }
5270
+ if (typeof bounds.width === 'number') {
5271
+ this._element.style.width = `${bounds.width}px`;
5272
+ }
5273
+ if (typeof bounds.top === 'number') {
5274
+ this._element.style.top = `${bounds.top}px`;
5275
+ }
5276
+ if (typeof bounds.left === 'number') {
5277
+ this._element.style.left = `${bounds.left}px`;
5278
+ }
5279
+ const containerRect = this.options.container.getBoundingClientRect();
5280
+ const overlayRect = this._element.getBoundingClientRect();
5281
+ // region: ensure bounds within allowable limits
5282
+ // a minimum width of minimumViewportWidth must be inside the viewport
5283
+ const xOffset = Math.max(0, overlayRect.width - this.options.minimumInViewportWidth);
5284
+ // a minimum height of minimumViewportHeight must be inside the viewport
5285
+ const yOffset = Math.max(0, overlayRect.height - this.options.minimumInViewportHeight);
5286
+ const left = clamp(overlayRect.left - containerRect.left, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
5287
+ const top = clamp(overlayRect.top - containerRect.top, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
5288
+ this._element.style.left = `${left}px`;
5289
+ this._element.style.top = `${top}px`;
5290
+ this._onDidChange.fire();
5291
+ }
5292
+ toJSON() {
5293
+ const container = this.options.container.getBoundingClientRect();
5294
+ const element = this._element.getBoundingClientRect();
5295
+ return {
5296
+ top: element.top - container.top,
5297
+ left: element.left - container.left,
5298
+ width: element.width,
5299
+ height: element.height,
5300
+ };
5301
+ }
5302
+ setupDrag(dragTarget, options = { inDragMode: false }) {
5303
+ const move = new MutableDisposable();
5304
+ const track = () => {
5305
+ let offset = null;
5306
+ const iframes = [
5307
+ ...getElementsByTagName('iframe'),
5308
+ ...getElementsByTagName('webview'),
5309
+ ];
5310
+ for (const iframe of iframes) {
5311
+ iframe.style.pointerEvents = 'none';
5312
+ }
5313
+ move.value = new CompositeDisposable({
5314
+ dispose: () => {
5315
+ for (const iframe of iframes) {
5316
+ iframe.style.pointerEvents = 'auto';
5317
+ }
5318
+ },
5319
+ }, addDisposableWindowListener(window, 'mousemove', (e) => {
5320
+ const containerRect = this.options.container.getBoundingClientRect();
5321
+ const x = e.clientX - containerRect.left;
5322
+ const y = e.clientY - containerRect.top;
5323
+ toggleClass(this._element, 'dv-resize-container-dragging', true);
5324
+ const overlayRect = this._element.getBoundingClientRect();
5325
+ if (offset === null) {
5326
+ offset = {
5327
+ x: e.clientX - overlayRect.left,
5328
+ y: e.clientY - overlayRect.top,
5329
+ };
5330
+ }
5331
+ const xOffset = Math.max(0, overlayRect.width - this.options.minimumInViewportWidth);
5332
+ const yOffset = Math.max(0, overlayRect.height -
5333
+ this.options.minimumInViewportHeight);
5334
+ const left = clamp(x - offset.x, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
5335
+ const top = clamp(y - offset.y, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
5336
+ this.setBounds({ top, left });
5337
+ }), addDisposableWindowListener(window, 'mouseup', () => {
5338
+ toggleClass(this._element, 'dv-resize-container-dragging', false);
5339
+ move.dispose();
5340
+ this._onDidChangeEnd.fire();
5341
+ }));
5342
+ };
5343
+ this.addDisposables(move, addDisposableListener(dragTarget, 'mousedown', (event) => {
5344
+ if (event.defaultPrevented) {
5345
+ event.preventDefault();
5346
+ return;
5347
+ }
5348
+ // if somebody has marked this event then treat as a defaultPrevented
5349
+ // without actually calling event.preventDefault()
5350
+ if (quasiDefaultPrevented(event)) {
5351
+ return;
5352
+ }
5353
+ track();
5354
+ }), addDisposableListener(this.options.content, 'mousedown', (event) => {
5355
+ if (event.defaultPrevented) {
5356
+ return;
5357
+ }
5358
+ // if somebody has marked this event then treat as a defaultPrevented
5359
+ // without actually calling event.preventDefault()
5360
+ if (quasiDefaultPrevented(event)) {
5361
+ return;
5362
+ }
5363
+ if (event.shiftKey) {
5364
+ track();
5365
+ }
5366
+ }), addDisposableListener(this.options.content, 'mousedown', () => {
5367
+ bringElementToFront(this._element);
5368
+ }, true));
5369
+ bringElementToFront(this._element);
5370
+ if (options.inDragMode) {
5371
+ track();
5372
+ }
5373
+ }
5374
+ setupResize(direction) {
5375
+ const resizeHandleElement = document.createElement('div');
5376
+ resizeHandleElement.className = `dv-resize-handle-${direction}`;
5377
+ this._element.appendChild(resizeHandleElement);
5378
+ const move = new MutableDisposable();
5379
+ this.addDisposables(move, addDisposableListener(resizeHandleElement, 'mousedown', (e) => {
5380
+ e.preventDefault();
5381
+ let startPosition = null;
5382
+ const iframes = [
5383
+ ...getElementsByTagName('iframe'),
5384
+ ...getElementsByTagName('webview'),
5385
+ ];
5386
+ for (const iframe of iframes) {
5387
+ iframe.style.pointerEvents = 'none';
5388
+ }
5389
+ move.value = new CompositeDisposable(addDisposableWindowListener(window, 'mousemove', (e) => {
5390
+ const containerRect = this.options.container.getBoundingClientRect();
5391
+ const overlayRect = this._element.getBoundingClientRect();
5392
+ const y = e.clientY - containerRect.top;
5393
+ const x = e.clientX - containerRect.left;
5394
+ if (startPosition === null) {
5395
+ // record the initial dimensions since as all subsequence moves are relative to this
5396
+ startPosition = {
5397
+ originalY: y,
5398
+ originalHeight: overlayRect.height,
5399
+ originalX: x,
5400
+ originalWidth: overlayRect.width,
5401
+ };
5402
+ }
5403
+ let top = undefined;
5404
+ let height = undefined;
5405
+ let left = undefined;
5406
+ let width = undefined;
5407
+ const minimumInViewportHeight = this.options.minimumInViewportHeight;
5408
+ const minimumInViewportWidth = this.options.minimumInViewportWidth;
5409
+ function moveTop() {
5410
+ top = clamp(y, -Number.MAX_VALUE, startPosition.originalY +
5411
+ startPosition.originalHeight >
5412
+ containerRect.height
5413
+ ? containerRect.height -
5414
+ minimumInViewportHeight
5415
+ : Math.max(0, startPosition.originalY +
5416
+ startPosition.originalHeight -
5417
+ Overlay.MINIMUM_HEIGHT));
5418
+ height =
5419
+ startPosition.originalY +
5420
+ startPosition.originalHeight -
5421
+ top;
5422
+ }
5423
+ function moveBottom() {
5424
+ top =
5425
+ startPosition.originalY -
5426
+ startPosition.originalHeight;
5427
+ height = clamp(y - top, top < 0
5428
+ ? -top + minimumInViewportHeight
5429
+ : Overlay.MINIMUM_HEIGHT, Number.MAX_VALUE);
5430
+ }
5431
+ function moveLeft() {
5432
+ left = clamp(x, -Number.MAX_VALUE, startPosition.originalX +
5433
+ startPosition.originalWidth >
5434
+ containerRect.width
5435
+ ? containerRect.width -
5436
+ minimumInViewportWidth
5437
+ : Math.max(0, startPosition.originalX +
5438
+ startPosition.originalWidth -
5439
+ Overlay.MINIMUM_WIDTH));
5440
+ width =
5441
+ startPosition.originalX +
5442
+ startPosition.originalWidth -
5443
+ left;
5444
+ }
5445
+ function moveRight() {
5446
+ left =
5447
+ startPosition.originalX -
5448
+ startPosition.originalWidth;
5449
+ width = clamp(x - left, left < 0
5450
+ ? -left + minimumInViewportWidth
5451
+ : Overlay.MINIMUM_WIDTH, Number.MAX_VALUE);
5452
+ }
5453
+ switch (direction) {
5454
+ case 'top':
5455
+ moveTop();
5456
+ break;
5457
+ case 'bottom':
5458
+ moveBottom();
5459
+ break;
5460
+ case 'left':
5461
+ moveLeft();
5462
+ break;
5463
+ case 'right':
5464
+ moveRight();
5465
+ break;
5466
+ case 'topleft':
5467
+ moveTop();
5468
+ moveLeft();
5469
+ break;
5470
+ case 'topright':
5471
+ moveTop();
5472
+ moveRight();
5473
+ break;
5474
+ case 'bottomleft':
5475
+ moveBottom();
5476
+ moveLeft();
5477
+ break;
5478
+ case 'bottomright':
5479
+ moveBottom();
5480
+ moveRight();
5481
+ break;
5482
+ }
5483
+ this.setBounds({ height, width, top, left });
5484
+ }), {
5485
+ dispose: () => {
5486
+ for (const iframe of iframes) {
5487
+ iframe.style.pointerEvents = 'auto';
5488
+ }
5489
+ },
5490
+ }, addDisposableWindowListener(window, 'mouseup', () => {
5491
+ move.dispose();
5492
+ this._onDidChangeEnd.fire();
5493
+ }));
5494
+ }));
5495
+ }
5496
+ dispose() {
5497
+ this._element.remove();
5498
+ super.dispose();
5499
+ }
5500
+ }
5501
+ Overlay.MINIMUM_HEIGHT = 20;
5502
+ Overlay.MINIMUM_WIDTH = 20;
5503
+
5504
+ class DockviewFloatingGroupPanel extends CompositeDisposable {
5505
+ constructor(group, overlay) {
5506
+ super();
5507
+ this.group = group;
5508
+ this.overlay = overlay;
5509
+ this.addDisposables(overlay);
5510
+ }
5511
+ position(bounds) {
5512
+ this.overlay.setBounds(bounds);
5513
+ }
5514
+ }
5515
+
5060
5516
  class DockviewComponent extends BaseGrid {
5061
5517
  get orientation() {
5062
5518
  return this.gridview.orientation;
@@ -5097,7 +5553,8 @@ define(['exports'], (function (exports) { 'use strict';
5097
5553
  this.onDidLayoutFromJSON = this._onDidLayoutFromJSON.event;
5098
5554
  this._onDidActivePanelChange = new Emitter();
5099
5555
  this.onDidActivePanelChange = this._onDidActivePanelChange.event;
5100
- this.element.classList.add('dv-dockview');
5556
+ this.floatingGroups = [];
5557
+ toggleClass(this.gridview.element, 'dv-dockview', true);
5101
5558
  this.addDisposables(this._onDidDrop, exports.DockviewEvent.any(this.onDidAddGroup, this.onDidRemoveGroup)(() => {
5102
5559
  this.updateWatermark();
5103
5560
  }), exports.DockviewEvent.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidActivePanelChange)(() => {
@@ -5127,6 +5584,11 @@ define(['exports'], (function (exports) { 'use strict';
5127
5584
  if (data.viewId !== this.id) {
5128
5585
  return false;
5129
5586
  }
5587
+ if (position === 'center') {
5588
+ // center drop target is only allowed if there are no panels in the grid
5589
+ // floating panels are allowed
5590
+ return this.gridview.length === 0;
5591
+ }
5130
5592
  return true;
5131
5593
  }
5132
5594
  if (this.options.showDndOverlay) {
@@ -5139,7 +5601,7 @@ define(['exports'], (function (exports) { 'use strict';
5139
5601
  }
5140
5602
  return false;
5141
5603
  },
5142
- acceptedTargetZones: ['top', 'bottom', 'left', 'right'],
5604
+ acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
5143
5605
  overlayModel: {
5144
5606
  activationSize: { type: 'pixels', value: 10 },
5145
5607
  size: { type: 'pixels', value: 20 },
@@ -5157,6 +5619,75 @@ define(['exports'], (function (exports) { 'use strict';
5157
5619
  this._api = new DockviewApi(this);
5158
5620
  this.updateWatermark();
5159
5621
  }
5622
+ addFloatingGroup(item, coord, options) {
5623
+ var _a, _b;
5624
+ let group;
5625
+ if (item instanceof DockviewPanel) {
5626
+ group = this.createGroup();
5627
+ this.removePanel(item, {
5628
+ removeEmptyGroup: true,
5629
+ skipDispose: true,
5630
+ });
5631
+ group.model.openPanel(item);
5632
+ }
5633
+ else {
5634
+ group = item;
5635
+ const skip = typeof (options === null || options === void 0 ? void 0 : options.skipRemoveGroup) === 'boolean' &&
5636
+ options.skipRemoveGroup;
5637
+ if (!skip) {
5638
+ this.doRemoveGroup(item, { skipDispose: true });
5639
+ }
5640
+ }
5641
+ group.model.isFloating = true;
5642
+ const overlayLeft = typeof (coord === null || coord === void 0 ? void 0 : coord.x) === 'number' ? Math.max(coord.x, 0) : 100;
5643
+ const overlayTop = typeof (coord === null || coord === void 0 ? void 0 : coord.y) === 'number' ? Math.max(coord.y, 0) : 100;
5644
+ const overlay = new Overlay({
5645
+ container: this.gridview.element,
5646
+ content: group.element,
5647
+ height: (_a = coord === null || coord === void 0 ? void 0 : coord.height) !== null && _a !== void 0 ? _a : 300,
5648
+ width: (_b = coord === null || coord === void 0 ? void 0 : coord.width) !== null && _b !== void 0 ? _b : 300,
5649
+ left: overlayLeft,
5650
+ top: overlayTop,
5651
+ minimumInViewportWidth: 100,
5652
+ minimumInViewportHeight: 100,
5653
+ });
5654
+ const el = group.element.querySelector('.void-container');
5655
+ if (!el) {
5656
+ throw new Error('failed to find drag handle');
5657
+ }
5658
+ overlay.setupDrag(el, {
5659
+ inDragMode: typeof (options === null || options === void 0 ? void 0 : options.inDragMode) === 'boolean'
5660
+ ? options.inDragMode
5661
+ : false,
5662
+ });
5663
+ const floatingGroupPanel = new DockviewFloatingGroupPanel(group, overlay);
5664
+ const disposable = watchElementResize(group.element, (entry) => {
5665
+ const { width, height } = entry.contentRect;
5666
+ group.layout(width, height); // let the group know it's size is changing so it can fire events to the panel
5667
+ });
5668
+ floatingGroupPanel.addDisposables(overlay.onDidChange(() => {
5669
+ // this is either a resize or a move
5670
+ // to inform the panels .layout(...) the group with it's current size
5671
+ // don't care about resize since the above watcher handles that
5672
+ group.layout(group.height, group.width);
5673
+ }), overlay.onDidChangeEnd(() => {
5674
+ this._bufferOnDidLayoutChange.fire();
5675
+ }), group.onDidChange((event) => {
5676
+ overlay.setBounds({
5677
+ height: event === null || event === void 0 ? void 0 : event.height,
5678
+ width: event === null || event === void 0 ? void 0 : event.width,
5679
+ });
5680
+ }), {
5681
+ dispose: () => {
5682
+ disposable.dispose();
5683
+ group.model.isFloating = false;
5684
+ remove(this.floatingGroups, floatingGroupPanel);
5685
+ this.updateWatermark();
5686
+ },
5687
+ });
5688
+ this.floatingGroups.push(floatingGroupPanel);
5689
+ this.updateWatermark();
5690
+ }
5160
5691
  orthogonalize(position) {
5161
5692
  switch (position) {
5162
5693
  case 'top':
@@ -5179,6 +5710,7 @@ define(['exports'], (function (exports) { 'use strict';
5179
5710
  switch (position) {
5180
5711
  case 'top':
5181
5712
  case 'left':
5713
+ case 'center':
5182
5714
  return this.createGroupAtLocation([0]); // insert into first position
5183
5715
  case 'bottom':
5184
5716
  case 'right':
@@ -5196,6 +5728,15 @@ define(['exports'], (function (exports) { 'use strict';
5196
5728
  }
5197
5729
  this.layout(this.gridview.width, this.gridview.height, true);
5198
5730
  }
5731
+ layout(width, height, forceResize) {
5732
+ super.layout(width, height, forceResize);
5733
+ if (this.floatingGroups) {
5734
+ for (const floating of this.floatingGroups) {
5735
+ // ensure floting groups stay within visible boundaries
5736
+ floating.overlay.setBounds();
5737
+ }
5738
+ }
5739
+ }
5199
5740
  focus() {
5200
5741
  var _a;
5201
5742
  (_a = this.activeGroup) === null || _a === void 0 ? void 0 : _a.focus();
@@ -5258,51 +5799,81 @@ define(['exports'], (function (exports) { 'use strict';
5258
5799
  collection[panel.id] = panel.toJSON();
5259
5800
  return collection;
5260
5801
  }, {});
5261
- return {
5802
+ const floats = this.floatingGroups.map((floatingGroup) => {
5803
+ return {
5804
+ data: floatingGroup.group.toJSON(),
5805
+ position: floatingGroup.overlay.toJSON(),
5806
+ };
5807
+ });
5808
+ const result = {
5262
5809
  grid: data,
5263
5810
  panels,
5264
5811
  activeGroup: (_a = this.activeGroup) === null || _a === void 0 ? void 0 : _a.id,
5265
5812
  };
5813
+ if (floats.length > 0) {
5814
+ result.floatingGroups = floats;
5815
+ }
5816
+ return result;
5266
5817
  }
5267
5818
  fromJSON(data) {
5819
+ var _a;
5268
5820
  this.clear();
5269
5821
  const { grid, panels, activeGroup } = data;
5270
5822
  if (grid.root.type !== 'branch' || !Array.isArray(grid.root.data)) {
5271
5823
  throw new Error('root must be of type branch');
5272
5824
  }
5825
+ // take note of the existing dimensions
5826
+ const width = this.width;
5827
+ const height = this.height;
5828
+ const createGroupFromSerializedState = (data) => {
5829
+ const { id, locked, hideHeader, views, activeView } = data;
5830
+ const group = this.createGroup({
5831
+ id,
5832
+ locked: !!locked,
5833
+ hideHeader: !!hideHeader,
5834
+ });
5835
+ this._onDidAddGroup.fire(group);
5836
+ for (const child of views) {
5837
+ const panel = this._deserializer.fromJSON(panels[child], group);
5838
+ const isActive = typeof activeView === 'string' && activeView === panel.id;
5839
+ group.model.openPanel(panel, {
5840
+ skipSetPanelActive: !isActive,
5841
+ skipSetGroupActive: true,
5842
+ });
5843
+ }
5844
+ if (!group.activePanel && group.panels.length > 0) {
5845
+ group.model.openPanel(group.panels[group.panels.length - 1], {
5846
+ skipSetGroupActive: true,
5847
+ });
5848
+ }
5849
+ return group;
5850
+ };
5273
5851
  this.gridview.deserialize(grid, {
5274
5852
  fromJSON: (node) => {
5275
- const { id, locked, hideHeader, views, activeView } = node.data;
5276
- const group = this.createGroup({
5277
- id,
5278
- locked: !!locked,
5279
- hideHeader: !!hideHeader,
5280
- });
5281
- this._onDidAddGroup.fire(group);
5282
- for (const child of views) {
5283
- const panel = this._deserializer.fromJSON(panels[child], group);
5284
- const isActive = typeof activeView === 'string' &&
5285
- activeView === panel.id;
5286
- group.model.openPanel(panel, {
5287
- skipSetPanelActive: !isActive,
5288
- skipSetGroupActive: true,
5289
- });
5290
- }
5291
- if (!group.activePanel && group.panels.length > 0) {
5292
- group.model.openPanel(group.panels[group.panels.length - 1], {
5293
- skipSetGroupActive: true,
5294
- });
5295
- }
5296
- return group;
5853
+ return createGroupFromSerializedState(node.data);
5297
5854
  },
5298
5855
  });
5856
+ this.layout(width, height, true);
5857
+ const serializedFloatingGroups = (_a = data.floatingGroups) !== null && _a !== void 0 ? _a : [];
5858
+ for (const serializedFloatingGroup of serializedFloatingGroups) {
5859
+ const { data, position } = serializedFloatingGroup;
5860
+ const group = createGroupFromSerializedState(data);
5861
+ this.addFloatingGroup(group, {
5862
+ x: position.left,
5863
+ y: position.top,
5864
+ height: position.height,
5865
+ width: position.width,
5866
+ }, { skipRemoveGroup: true, inDragMode: false });
5867
+ }
5868
+ for (const floatingGroup of this.floatingGroups) {
5869
+ floatingGroup.overlay.setBounds();
5870
+ }
5299
5871
  if (typeof activeGroup === 'string') {
5300
5872
  const panel = this.getPanel(activeGroup);
5301
5873
  if (panel) {
5302
5874
  this.doSetGroupActive(panel);
5303
5875
  }
5304
5876
  }
5305
- this.gridview.layout(this.width, this.height);
5306
5877
  this._onDidLayoutFromJSON.fire();
5307
5878
  }
5308
5879
  clear() {
@@ -5311,7 +5882,7 @@ define(['exports'], (function (exports) { 'use strict';
5311
5882
  const hasActivePanel = !!this.activePanel;
5312
5883
  for (const group of groups) {
5313
5884
  // remove the group will automatically remove the panels
5314
- this.removeGroup(group, true);
5885
+ this.removeGroup(group, { skipActive: true });
5315
5886
  }
5316
5887
  if (hasActiveGroup) {
5317
5888
  this.doSetGroupActive(undefined);
@@ -5333,6 +5904,9 @@ define(['exports'], (function (exports) { 'use strict';
5333
5904
  throw new Error(`panel with id ${options.id} already exists`);
5334
5905
  }
5335
5906
  let referenceGroup;
5907
+ if (options.position && options.floating) {
5908
+ throw new Error('you can only provide one of: position, floating as arguments to .addPanel(...)');
5909
+ }
5336
5910
  if (options.position) {
5337
5911
  if (isPanelOptionsWithPanel(options.position)) {
5338
5912
  const referencePanel = typeof options.position.referencePanel === 'string'
@@ -5365,7 +5939,20 @@ define(['exports'], (function (exports) { 'use strict';
5365
5939
  let panel;
5366
5940
  if (referenceGroup) {
5367
5941
  const target = toTarget(((_b = options.position) === null || _b === void 0 ? void 0 : _b.direction) || 'within');
5368
- if (target === 'center') {
5942
+ if (options.floating) {
5943
+ const group = this.createGroup();
5944
+ panel = this.createPanel(options, group);
5945
+ group.model.openPanel(panel);
5946
+ const o = typeof options.floating === 'object' &&
5947
+ options.floating !== null
5948
+ ? options.floating
5949
+ : {};
5950
+ this.addFloatingGroup(group, o, {
5951
+ inDragMode: false,
5952
+ skipRemoveGroup: true,
5953
+ });
5954
+ }
5955
+ else if (referenceGroup.api.isFloating || target === 'center') {
5369
5956
  panel = this.createPanel(options, referenceGroup);
5370
5957
  referenceGroup.model.openPanel(panel);
5371
5958
  }
@@ -5377,6 +5964,19 @@ define(['exports'], (function (exports) { 'use strict';
5377
5964
  group.model.openPanel(panel);
5378
5965
  }
5379
5966
  }
5967
+ else if (options.floating) {
5968
+ const group = this.createGroup();
5969
+ panel = this.createPanel(options, group);
5970
+ group.model.openPanel(panel);
5971
+ const o = typeof options.floating === 'object' &&
5972
+ options.floating !== null
5973
+ ? options.floating
5974
+ : {};
5975
+ this.addFloatingGroup(group, o, {
5976
+ inDragMode: false,
5977
+ skipRemoveGroup: true,
5978
+ });
5979
+ }
5380
5980
  else {
5381
5981
  const group = this.createGroupAtLocation();
5382
5982
  panel = this.createPanel(options, group);
@@ -5393,7 +5993,9 @@ define(['exports'], (function (exports) { 'use strict';
5393
5993
  throw new Error(`cannot remove panel ${panel.id}. it's missing a group.`);
5394
5994
  }
5395
5995
  group.model.removePanel(panel);
5396
- panel.dispose();
5996
+ if (!options.skipDispose) {
5997
+ panel.dispose();
5998
+ }
5397
5999
  if (group.size === 0 && options.removeEmptyGroup) {
5398
6000
  this.removeGroup(group);
5399
6001
  }
@@ -5408,7 +6010,7 @@ define(['exports'], (function (exports) { 'use strict';
5408
6010
  }
5409
6011
  updateWatermark() {
5410
6012
  var _a, _b;
5411
- if (this.groups.length === 0) {
6013
+ if (this.groups.filter((x) => !x.api.isFloating).length === 0) {
5412
6014
  if (!this.watermark) {
5413
6015
  this.watermark = this.createWatermarkComponent();
5414
6016
  this.watermark.init({
@@ -5417,7 +6019,7 @@ define(['exports'], (function (exports) { 'use strict';
5417
6019
  const watermarkContainer = document.createElement('div');
5418
6020
  watermarkContainer.className = 'dv-watermark-container';
5419
6021
  watermarkContainer.appendChild(this.watermark.element);
5420
- this.element.appendChild(watermarkContainer);
6022
+ this.gridview.element.appendChild(watermarkContainer);
5421
6023
  }
5422
6024
  }
5423
6025
  else if (this.watermark) {
@@ -5467,15 +6069,28 @@ define(['exports'], (function (exports) { 'use strict';
5467
6069
  return group;
5468
6070
  }
5469
6071
  }
5470
- removeGroup(group, skipActive = false) {
6072
+ removeGroup(group, options) {
6073
+ var _a;
5471
6074
  const panels = [...group.panels]; // reassign since group panels will mutate
5472
6075
  for (const panel of panels) {
5473
6076
  this.removePanel(panel, {
5474
6077
  removeEmptyGroup: false,
5475
- skipDispose: false,
6078
+ skipDispose: (_a = options === null || options === void 0 ? void 0 : options.skipDispose) !== null && _a !== void 0 ? _a : false,
5476
6079
  });
5477
6080
  }
5478
- super.doRemoveGroup(group, { skipActive });
6081
+ this.doRemoveGroup(group, options);
6082
+ }
6083
+ doRemoveGroup(group, options) {
6084
+ const floatingGroup = this.floatingGroups.find((_) => _.group === group);
6085
+ if (floatingGroup) {
6086
+ if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
6087
+ floatingGroup.group.dispose();
6088
+ this._groups.delete(group.id);
6089
+ }
6090
+ floatingGroup.dispose();
6091
+ return floatingGroup.group;
6092
+ }
6093
+ return super.doRemoveGroup(group, options);
5479
6094
  }
5480
6095
  moveGroupOrPanel(destinationGroup, sourceGroupId, sourceItemId, destinationTarget, destinationIndex) {
5481
6096
  var _a;
@@ -5506,25 +6121,26 @@ define(['exports'], (function (exports) { 'use strict';
5506
6121
  const targetLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, destinationTarget);
5507
6122
  if (sourceGroup && sourceGroup.size < 2) {
5508
6123
  const [targetParentLocation, to] = tail(targetLocation);
5509
- const sourceLocation = getGridLocation(sourceGroup.element);
5510
- const [sourceParentLocation, from] = tail(sourceLocation);
5511
- if (sequenceEquals(sourceParentLocation, targetParentLocation)) {
5512
- // special case when 'swapping' two views within same grid location
5513
- // if a group has one tab - we are essentially moving the 'group'
5514
- // which is equivalent to swapping two views in this case
5515
- this.gridview.moveView(sourceParentLocation, from, to);
5516
- }
5517
- else {
5518
- // source group will become empty so delete the group
5519
- const targetGroup = this.doRemoveGroup(sourceGroup, {
5520
- skipActive: true,
5521
- skipDispose: true,
5522
- });
5523
- // after deleting the group we need to re-evaulate the ref location
5524
- const updatedReferenceLocation = getGridLocation(destinationGroup.element);
5525
- const location = getRelativeLocation(this.gridview.orientation, updatedReferenceLocation, destinationTarget);
5526
- this.doAddGroup(targetGroup, location);
6124
+ const isFloating = this.floatingGroups.find((x) => x.group === sourceGroup);
6125
+ if (!isFloating) {
6126
+ const sourceLocation = getGridLocation(sourceGroup.element);
6127
+ const [sourceParentLocation, from] = tail(sourceLocation);
6128
+ if (sequenceEquals(sourceParentLocation, targetParentLocation)) {
6129
+ // special case when 'swapping' two views within same grid location
6130
+ // if a group has one tab - we are essentially moving the 'group'
6131
+ // which is equivalent to swapping two views in this case
6132
+ this.gridview.moveView(sourceParentLocation, from, to);
6133
+ }
5527
6134
  }
6135
+ // source group will become empty so delete the group
6136
+ const targetGroup = this.doRemoveGroup(sourceGroup, {
6137
+ skipActive: true,
6138
+ skipDispose: true,
6139
+ });
6140
+ // after deleting the group we need to re-evaulate the ref location
6141
+ const updatedReferenceLocation = getGridLocation(destinationGroup.element);
6142
+ const location = getRelativeLocation(this.gridview.orientation, updatedReferenceLocation, destinationTarget);
6143
+ this.doAddGroup(targetGroup, location);
5528
6144
  }
5529
6145
  else {
5530
6146
  const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(sourceItemId)) ||
@@ -5553,7 +6169,13 @@ define(['exports'], (function (exports) { 'use strict';
5553
6169
  }
5554
6170
  }
5555
6171
  else {
5556
- this.gridview.removeView(getGridLocation(sourceGroup.element));
6172
+ const floatingGroup = this.floatingGroups.find((x) => x.group === sourceGroup);
6173
+ if (floatingGroup) {
6174
+ floatingGroup.dispose();
6175
+ }
6176
+ else {
6177
+ this.gridview.removeView(getGridLocation(sourceGroup.element));
6178
+ }
5557
6179
  const referenceLocation = getGridLocation(referenceGroup.element);
5558
6180
  const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
5559
6181
  this.gridview.addView(sourceGroup, exports.Sizing.Distribute, dropLocation);
@@ -5708,6 +6330,9 @@ define(['exports'], (function (exports) { 'use strict';
5708
6330
  this.clear();
5709
6331
  const { grid, activePanel } = serializedGridview;
5710
6332
  const queue = [];
6333
+ // take note of the existing dimensions
6334
+ const width = this.width;
6335
+ const height = this.height;
5711
6336
  this.gridview.deserialize(grid, {
5712
6337
  fromJSON: (node) => {
5713
6338
  const { data } = node;
@@ -5733,7 +6358,7 @@ define(['exports'], (function (exports) { 'use strict';
5733
6358
  return view;
5734
6359
  },
5735
6360
  });
5736
- this.layout(this.width, this.height, true);
6361
+ this.layout(width, height, true);
5737
6362
  queue.forEach((f) => f());
5738
6363
  if (typeof activePanel === 'string') {
5739
6364
  const panel = this.getPanel(activePanel);
@@ -6047,6 +6672,9 @@ define(['exports'], (function (exports) { 'use strict';
6047
6672
  this.clear();
6048
6673
  const { views, orientation, size, activeView } = serializedSplitview;
6049
6674
  const queue = [];
6675
+ // take note of the existing dimensions
6676
+ const width = this.width;
6677
+ const height = this.height;
6050
6678
  this.splitview = new Splitview(this.element, {
6051
6679
  orientation,
6052
6680
  proportionalLayout: this.options.proportionalLayout,
@@ -6083,7 +6711,7 @@ define(['exports'], (function (exports) { 'use strict';
6083
6711
  }),
6084
6712
  },
6085
6713
  });
6086
- this.layout(this.width, this.height);
6714
+ this.layout(width, height);
6087
6715
  queue.forEach((f) => f());
6088
6716
  if (typeof activeView === 'string') {
6089
6717
  const panel = this.getPanel(activeView);
@@ -6350,6 +6978,9 @@ define(['exports'], (function (exports) { 'use strict';
6350
6978
  this.clear();
6351
6979
  const { views, size } = serializedPaneview;
6352
6980
  const queue = [];
6981
+ // take note of the existing dimensions
6982
+ const width = this.width;
6983
+ const height = this.height;
6353
6984
  this.paneview = new Paneview(this.element, {
6354
6985
  orientation: exports.Orientation.VERTICAL,
6355
6986
  descriptor: {
@@ -6405,7 +7036,7 @@ define(['exports'], (function (exports) { 'use strict';
6405
7036
  }),
6406
7037
  },
6407
7038
  });
6408
- this.layout(this.width, this.height);
7039
+ this.layout(width, height);
6409
7040
  queue.forEach((f) => f());
6410
7041
  this._onDidLayoutfromJSON.fire();
6411
7042
  }
@@ -6591,6 +7222,6 @@ define(['exports'], (function (exports) { 'use strict';
6591
7222
  exports.orthogonal = orthogonal;
6592
7223
  exports.positionToDirection = positionToDirection;
6593
7224
  exports.toTarget = toTarget;
6594
- exports.watchElementResize = watchElementResize;
6595
7225
 
6596
7226
  }));
7227
+ //# sourceMappingURL=dockview-core.amd.js.map