dockview-core 1.14.1 → 1.15.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 (80) hide show
  1. package/dist/cjs/api/component.api.d.ts +4 -5
  2. package/dist/cjs/api/component.api.js +12 -2
  3. package/dist/cjs/constants.d.ts +2 -0
  4. package/dist/cjs/constants.js +1 -1
  5. package/dist/cjs/dnd/overlay.d.ts +6 -4
  6. package/dist/cjs/dnd/overlay.js +119 -28
  7. package/dist/cjs/dockview/components/tab/defaultTab.d.ts +1 -8
  8. package/dist/cjs/dockview/components/tab/defaultTab.js +16 -39
  9. package/dist/cjs/dockview/components/titlebar/tabsContainer.js +4 -2
  10. package/dist/cjs/dockview/dockviewComponent.d.ts +20 -17
  11. package/dist/cjs/dockview/dockviewComponent.js +92 -45
  12. package/dist/cjs/dockview/dockviewFloatingGroupPanel.d.ts +3 -12
  13. package/dist/cjs/dockview/options.d.ts +10 -6
  14. package/dist/cjs/dockview/options.js +1 -0
  15. package/dist/cjs/dom.d.ts +1 -0
  16. package/dist/cjs/dom.js +5 -1
  17. package/dist/cjs/gridview/baseComponentGridview.d.ts +3 -0
  18. package/dist/cjs/gridview/baseComponentGridview.js +8 -2
  19. package/dist/cjs/gridview/branchNode.d.ts +7 -3
  20. package/dist/cjs/gridview/branchNode.js +24 -29
  21. package/dist/cjs/gridview/gridview.d.ts +7 -1
  22. package/dist/cjs/gridview/gridview.js +31 -8
  23. package/dist/cjs/gridview/gridviewPanel.d.ts +1 -0
  24. package/dist/cjs/gridview/gridviewPanel.js +7 -0
  25. package/dist/cjs/math.js +5 -1
  26. package/dist/cjs/splitview/splitview.d.ts +13 -0
  27. package/dist/cjs/splitview/splitview.js +42 -12
  28. package/dist/cjs/types.d.ts +23 -0
  29. package/dist/dockview-core.amd.js +333 -138
  30. package/dist/dockview-core.amd.js.map +1 -1
  31. package/dist/dockview-core.amd.min.js +2 -2
  32. package/dist/dockview-core.amd.min.js.map +1 -1
  33. package/dist/dockview-core.amd.min.noStyle.js +2 -2
  34. package/dist/dockview-core.amd.min.noStyle.js.map +1 -1
  35. package/dist/dockview-core.amd.noStyle.js +332 -137
  36. package/dist/dockview-core.amd.noStyle.js.map +1 -1
  37. package/dist/dockview-core.cjs.js +333 -138
  38. package/dist/dockview-core.cjs.js.map +1 -1
  39. package/dist/dockview-core.esm.js +333 -138
  40. package/dist/dockview-core.esm.js.map +1 -1
  41. package/dist/dockview-core.esm.min.js +2 -2
  42. package/dist/dockview-core.esm.min.js.map +1 -1
  43. package/dist/dockview-core.js +333 -138
  44. package/dist/dockview-core.js.map +1 -1
  45. package/dist/dockview-core.min.js +2 -2
  46. package/dist/dockview-core.min.js.map +1 -1
  47. package/dist/dockview-core.min.noStyle.js +2 -2
  48. package/dist/dockview-core.min.noStyle.js.map +1 -1
  49. package/dist/dockview-core.noStyle.js +332 -137
  50. package/dist/dockview-core.noStyle.js.map +1 -1
  51. package/dist/esm/api/component.api.d.ts +4 -5
  52. package/dist/esm/api/component.api.js +8 -2
  53. package/dist/esm/constants.d.ts +2 -0
  54. package/dist/esm/constants.js +1 -1
  55. package/dist/esm/dnd/overlay.d.ts +6 -4
  56. package/dist/esm/dnd/overlay.js +108 -28
  57. package/dist/esm/dockview/components/tab/defaultTab.d.ts +1 -8
  58. package/dist/esm/dockview/components/tab/defaultTab.js +16 -28
  59. package/dist/esm/dockview/components/titlebar/tabsContainer.js +4 -2
  60. package/dist/esm/dockview/dockviewComponent.d.ts +20 -17
  61. package/dist/esm/dockview/dockviewComponent.js +93 -46
  62. package/dist/esm/dockview/dockviewFloatingGroupPanel.d.ts +3 -12
  63. package/dist/esm/dockview/options.d.ts +10 -6
  64. package/dist/esm/dockview/options.js +1 -0
  65. package/dist/esm/dom.d.ts +1 -0
  66. package/dist/esm/dom.js +3 -0
  67. package/dist/esm/gridview/baseComponentGridview.d.ts +3 -0
  68. package/dist/esm/gridview/baseComponentGridview.js +6 -2
  69. package/dist/esm/gridview/branchNode.d.ts +7 -3
  70. package/dist/esm/gridview/branchNode.js +19 -7
  71. package/dist/esm/gridview/gridview.d.ts +7 -1
  72. package/dist/esm/gridview/gridview.js +27 -8
  73. package/dist/esm/gridview/gridviewPanel.d.ts +1 -0
  74. package/dist/esm/gridview/gridviewPanel.js +3 -0
  75. package/dist/esm/math.js +5 -1
  76. package/dist/esm/splitview/splitview.d.ts +13 -0
  77. package/dist/esm/splitview/splitview.js +38 -12
  78. package/dist/esm/types.d.ts +23 -0
  79. package/dist/styles/dockview.css +0 -13
  80. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * dockview-core
3
- * @version 1.14.1
3
+ * @version 1.15.0
4
4
  * @link https://github.com/mathuo/dockview
5
5
  * @license MIT
6
6
  */
@@ -31,7 +31,7 @@ function styleInject(css, ref) {
31
31
  }
32
32
  }
33
33
 
34
- var css_248z = ".dv-render-overlay {\n position: absolute;\n z-index: 1;\n height: 100%;\n}\n.dv-render-overlay.dv-render-overlay-float {\n z-index: 999;\n}\n\n.dv-debug .dv-render-overlay {\n outline: 1px solid red;\n outline-offset: -1;\n}\n.dockview-svg {\n display: inline-block;\n fill: currentcolor;\n line-height: 1;\n stroke: currentcolor;\n stroke-width: 0;\n}\n.dockview-theme-dark {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n}\n\n.dockview-theme-light {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: white;\n --dv-tabs-and-actions-container-background-color: #f3f3f3;\n --dv-activegroup-visiblepanel-tab-background-color: white;\n --dv-activegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-inactivegroup-visiblepanel-tab-background-color: white;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-tab-divider-color: white;\n --dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-activegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.35);\n --dv-separator-border: rgba(128, 128, 128, 0.35);\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n}\n\n.dockview-theme-vs {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n --dv-tabs-and-actions-container-background-color: #2d2d30;\n --dv-tabs-and-actions-container-height: 20px;\n --dv-tabs-and-actions-container-font-size: 11px;\n --dv-activegroup-visiblepanel-tab-background-color: #007acc;\n --dv-inactivegroup-visiblepanel-tab-background-color: #3f3f46;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: white;\n --dv-inactivegroup-visiblepanel-tab-color: white;\n --dv-inactivegroup-hiddenpanel-tab-color: white;\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-activegroup-hiddenpanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n}\n\n.dockview-theme-abyss {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #000c18;\n --dv-tabs-and-actions-container-background-color: #1c1c2a;\n --dv-activegroup-visiblepanel-tab-background-color: #000c18;\n --dv-activegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #000c18;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-tab-divider-color: #2b2b4a;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.25);\n --dv-separator-border: #2b2b4a;\n --dv-paneview-header-border-color: #2b2b4a;\n --dv-paneview-active-outline-color: #596f99;\n}\n\n.dockview-theme-dracula {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #282a36;\n --dv-tabs-and-actions-container-background-color: #191a21;\n --dv-activegroup-visiblepanel-tab-background-color: #282a36;\n --dv-activegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #282a36;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-tab-divider-color: #191a21;\n --dv-activegroup-visiblepanel-tab-color: rgb(248, 248, 242);\n --dv-activegroup-hiddenpanel-tab-color: rgb(98, 114, 164);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(248, 248, 242, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(98, 114, 164, 0.5);\n --dv-separator-border: #bd93f9;\n --dv-paneview-header-border-color: #bd93f9;\n --dv-paneview-active-outline-color: #6272a4;\n}\n.dockview-theme-dracula .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab::after {\n position: absolute;\n left: 0px;\n top: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #94527e;\n z-index: 999;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #5e3d5a;\n z-index: 999;\n}\n\n.dockview-theme-replit {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-gap-size: 3px;\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-resize-container:has(> .groupview) {\n border-radius: 8px;\n}\n.dockview-theme-replit .groupview {\n overflow: hidden;\n border-radius: 10px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container {\n border-bottom: 1px solid rgba(128, 128, 128, 0.35);\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab {\n margin: 4px;\n border-radius: 8px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab .dockview-svg {\n height: 8px;\n width: 8px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab:hover {\n background-color: #e4e5e6 !important;\n}\n.dockview-theme-replit .groupview .content-container {\n background-color: #fcfcfc;\n}\n.dockview-theme-replit .groupview.active-group {\n border: 1px solid rgba(128, 128, 128, 0.35);\n}\n.dockview-theme-replit .groupview.inactive-group {\n border: 1px solid transparent;\n}\n.dockview-theme-replit .vertical > .sash-container > .sash::after {\n content: \"\";\n height: 4px;\n width: 40px;\n border-radius: 2px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--dv-separator-handle-background-color);\n position: absolute;\n}\n.dockview-theme-replit .vertical > .sash-container > .sash:hover::after {\n background-color: var(--dv-separator-handle-hover-background-color);\n}\n.dockview-theme-replit .horizontal > .sash-container > .sash::after {\n content: \"\";\n height: 40px;\n width: 4px;\n border-radius: 2px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--dv-separator-handle-background-color);\n position: absolute;\n}\n.dockview-theme-replit .horizontal > .sash-container > .sash:hover::after {\n background-color: var(--dv-separator-handle-hover-background-color);\n}\n.drop-target {\n position: relative;\n}\n.drop-target > .drop-target-dropzone {\n position: absolute;\n left: 0px;\n top: 0px;\n height: 100%;\n width: 100%;\n z-index: 1000;\n pointer-events: none;\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection {\n position: relative;\n box-sizing: border-box;\n height: 100%;\n width: 100%;\n background-color: var(--dv-drag-over-background-color);\n transition: top 70ms ease-out, left 70ms ease-out, width 70ms ease-out, height 70ms ease-out, opacity 0.15s ease-out;\n will-change: transform;\n pointer-events: none;\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.dv-drop-target-top.dv-drop-target-small-vertical {\n border-top: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.dv-drop-target-bottom.dv-drop-target-small-vertical {\n border-bottom: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.dv-drop-target-left.dv-drop-target-small-horizontal {\n border-left: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.dv-drop-target-right.dv-drop-target-small-horizontal {\n border-right: 1px solid var(--dv-drag-over-border-color);\n}\n.dv-debug .dv-resize-container .dv-resize-handle-top {\n background-color: red;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-bottom {\n background-color: green;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-left {\n background-color: yellow;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-right {\n background-color: blue;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-topleft,\n.dv-debug .dv-resize-container .dv-resize-handle-topright,\n.dv-debug .dv-resize-container .dv-resize-handle-bottomleft,\n.dv-debug .dv-resize-container .dv-resize-handle-bottomright {\n background-color: cyan;\n}\n\n.dv-resize-container {\n position: absolute;\n z-index: 997;\n border: 1px solid var(--dv-tab-divider-color);\n box-shadow: var(--dv-floating-box-shadow);\n}\n.dv-resize-container.dv-bring-to-front {\n z-index: 998;\n}\n.dv-resize-container.dv-resize-container-dragging {\n opacity: 0.5;\n}\n.dv-resize-container .dv-resize-handle-top {\n height: 4px;\n width: calc(100% - 8px);\n left: 4px;\n top: -2px;\n z-index: 999;\n position: absolute;\n cursor: ns-resize;\n}\n.dv-resize-container .dv-resize-handle-bottom {\n height: 4px;\n width: calc(100% - 8px);\n left: 4px;\n bottom: -2px;\n z-index: 999;\n position: absolute;\n cursor: ns-resize;\n}\n.dv-resize-container .dv-resize-handle-left {\n height: calc(100% - 8px);\n width: 4px;\n left: -2px;\n top: 4px;\n z-index: 999;\n position: absolute;\n cursor: ew-resize;\n}\n.dv-resize-container .dv-resize-handle-right {\n height: calc(100% - 8px);\n width: 4px;\n right: -2px;\n top: 4px;\n z-index: 999;\n position: absolute;\n cursor: ew-resize;\n}\n.dv-resize-container .dv-resize-handle-topleft {\n height: 4px;\n width: 4px;\n top: -2px;\n left: -2px;\n z-index: 999;\n position: absolute;\n cursor: nw-resize;\n}\n.dv-resize-container .dv-resize-handle-topright {\n height: 4px;\n width: 4px;\n right: -2px;\n top: -2px;\n z-index: 999;\n position: absolute;\n cursor: ne-resize;\n}\n.dv-resize-container .dv-resize-handle-bottomleft {\n height: 4px;\n width: 4px;\n left: -2px;\n bottom: -2px;\n z-index: 999;\n position: absolute;\n cursor: sw-resize;\n}\n.dv-resize-container .dv-resize-handle-bottomright {\n height: 4px;\n width: 4px;\n right: -2px;\n bottom: -2px;\n z-index: 999;\n position: absolute;\n cursor: se-resize;\n}\n.dv-dockview {\n position: relative;\n background-color: var(--dv-group-view-background-color);\n}\n.dv-dockview .dv-watermark-container {\n position: absolute;\n top: 0px;\n left: 0px;\n height: 100%;\n width: 100%;\n z-index: 1;\n}\n.dv-dockview .dv-overlay-render-container {\n position: relative;\n}\n.dv-dockview .split-view-container.horizontal > .view-container > .view:not(:last-child) .groupview {\n border-right: var(--dv-group-gap-size) solid transparent;\n}\n.dv-dockview .split-view-container.horizontal > .view-container > .view:not(:first-child) .groupview {\n border-left: var(--dv-group-gap-size) solid transparent;\n}\n.dv-dockview .split-view-container.vertical > .view-container > .view:not(:last-child) .groupview {\n border-bottom: var(--dv-group-gap-size) solid transparent;\n}\n.dv-dockview .split-view-container.vertical > .view-container > .view:not(:first-child) .groupview {\n border-top: var(--dv-group-gap-size) solid transparent;\n}\n\n.groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.inactive-tab {\n background-color: var(--dv-activegroup-hiddenpanel-tab-background-color);\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n background-color: var(--dv-inactivegroup-visiblepanel-tab-background-color);\n color: var(--dv-inactivegroup-visiblepanel-tab-color);\n}\n.groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.inactive-tab {\n background-color: var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n color: var(--dv-inactivegroup-hiddenpanel-tab-color);\n}\n\n/**\n * when a tab is dragged we lose the above stylings because they are conditional on parent elements\n * therefore we also set some stylings for the dragging event\n **/\n.tab.dv-tab-dragging {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.groupview {\n display: flex;\n flex-direction: column;\n height: 100%;\n background-color: var(--dv-group-view-background-color);\n overflow: hidden;\n}\n.groupview:focus {\n outline: none;\n}\n.groupview.empty > .tabs-and-actions-container {\n display: none;\n}\n.groupview > .content-container {\n flex-grow: 1;\n min-height: 0;\n outline: none;\n}\n.dv-root-wrapper {\n height: 100%;\n width: 100%;\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.dv-splitview-disabled > .sash-container > .sash {\n pointer-events: none;\n}\n.split-view-container.animation .view,\n.split-view-container.animation .sash {\n transition-duration: 0.15s;\n transition-timing-function: ease-out;\n}\n.split-view-container.horizontal {\n height: 100%;\n}\n.split-view-container.horizontal > .sash-container > .sash {\n height: 100%;\n width: 4px;\n}\n.split-view-container.horizontal > .sash-container > .sash.enabled {\n cursor: ew-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.horizontal > .sash-container > .sash.maximum {\n cursor: w-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.minimum {\n cursor: e-resize;\n}\n.split-view-container.horizontal > .view-container > .view:not(:first-child)::before {\n height: 100%;\n width: 1px;\n}\n.split-view-container.vertical {\n width: 100%;\n}\n.split-view-container.vertical > .sash-container > .sash {\n width: 100%;\n height: 4px;\n}\n.split-view-container.vertical > .sash-container > .sash.enabled {\n cursor: ns-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.vertical > .sash-container > .sash.maximum {\n cursor: n-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.minimum {\n cursor: s-resize;\n}\n.split-view-container.vertical > .view-container > .view {\n width: 100%;\n}\n.split-view-container.vertical > .view-container > .view:not(:first-child)::before {\n height: 1px;\n width: 100%;\n}\n.split-view-container .sash-container {\n height: 100%;\n width: 100%;\n position: absolute;\n}\n.split-view-container .sash-container .sash {\n position: absolute;\n z-index: 99;\n outline: none;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n touch-action: none;\n}\n.split-view-container .sash-container .sash:not(.disabled):active {\n transition: background-color 0.1s ease-in-out;\n background-color: var(--dv-active-sash-color, transparent);\n}\n.split-view-container .sash-container .sash:not(.disabled):hover {\n background-color: var(--dv-active-sash-color, transparent);\n transition: background-color 0.1s ease-in-out;\n transition-delay: 0.5s;\n}\n.split-view-container .view-container {\n position: relative;\n height: 100%;\n width: 100%;\n background-color: var(--dv-background-color);\n}\n.split-view-container .view-container .view {\n height: 100%;\n box-sizing: border-box;\n overflow: auto;\n position: absolute;\n}\n.split-view-container.separator-border .view:not(:first-child)::before {\n content: \" \";\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n background-color: var(--dv-separator-border);\n}\n.dv-dragged {\n transform: translate3d(0px, 0px, 0px); /* forces tab to be drawn on a separate layer (see https://github.com/microsoft/vscode/issues/18733) */\n}\n\n.tab {\n flex-shrink: 0;\n}\n.tab:focus-within, .tab:focus {\n position: relative;\n}\n.tab:focus-within::after, .tab:focus::after {\n position: absolute;\n content: \"\";\n height: 100%;\n width: 100%;\n top: 0px;\n left: 0px;\n pointer-events: none;\n outline: 1px solid var(--dv-tab-divider-color) !important;\n outline-offset: -1px;\n z-index: 5;\n}\n.tab.dv-tab-dragging .dv-default-tab-action {\n background-color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.tab.active-tab .dv-default-tab .dv-default-tab-action {\n visibility: visible;\n}\n.tab.inactive-tab .dv-default-tab .dv-default-tab-action {\n visibility: hidden;\n}\n.tab.inactive-tab .dv-default-tab:hover .dv-default-tab-action {\n visibility: visible;\n}\n.tab .dv-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 .dv-default-tab .dv-default-tab-content {\n padding: 0px 8px;\n flex-grow: 1;\n}\n.tab .dv-default-tab .dv-default-tab-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n}\n.tab .dv-default-tab .dv-default-tab-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}\n.tabs-and-actions-container {\n display: flex;\n background-color: var(--dv-tabs-and-actions-container-background-color);\n flex-shrink: 0;\n box-sizing: border-box;\n height: var(--dv-tabs-and-actions-container-height);\n font-size: var(--dv-tabs-and-actions-container-font-size);\n}\n.tabs-and-actions-container.hidden {\n display: none;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .tabs-container {\n flex-grow: 1;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .tabs-container .tab {\n flex-grow: 1;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .void-container {\n flex-grow: 0;\n}\n.tabs-and-actions-container .void-container {\n display: flex;\n flex-grow: 1;\n cursor: grab;\n}\n.tabs-and-actions-container .tabs-container {\n display: flex;\n overflow-x: overlay;\n overflow-y: hidden;\n scrollbar-width: thin;\n /* Track */\n /* Handle */\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar {\n height: 3px;\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar-track {\n background: transparent;\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar-thumb {\n background: var(--dv-tabs-container-scrollbar-color);\n}\n.tabs-and-actions-container .tabs-container .tab {\n -webkit-user-drag: element;\n outline: none;\n min-width: 75px;\n cursor: pointer;\n position: relative;\n box-sizing: border-box;\n}\n.tabs-and-actions-container .tabs-container .tab:not(:first-child)::before {\n content: \" \";\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n background-color: var(--dv-tab-divider-color);\n width: 1px;\n height: 100%;\n}\n.watermark {\n display: flex;\n width: 100%;\n}\n.watermark.has-actions .watermark-title .actions-container {\n display: none;\n}\n.watermark .watermark-title {\n height: 35px;\n width: 100%;\n display: flex;\n}\n.watermark .watermark-content {\n flex-grow: 1;\n}\n.watermark .actions-container {\n display: flex;\n align-items: center;\n padding: 0px 8px;\n}\n.watermark .actions-container .close-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n cursor: pointer;\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.watermark .actions-container .close-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}";
34
+ var css_248z = ".dv-render-overlay {\n position: absolute;\n z-index: 1;\n height: 100%;\n}\n.dv-render-overlay.dv-render-overlay-float {\n z-index: 999;\n}\n\n.dv-debug .dv-render-overlay {\n outline: 1px solid red;\n outline-offset: -1;\n}\n.dockview-svg {\n display: inline-block;\n fill: currentcolor;\n line-height: 1;\n stroke: currentcolor;\n stroke-width: 0;\n}\n.dockview-theme-dark {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n}\n\n.dockview-theme-light {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: white;\n --dv-tabs-and-actions-container-background-color: #f3f3f3;\n --dv-activegroup-visiblepanel-tab-background-color: white;\n --dv-activegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-inactivegroup-visiblepanel-tab-background-color: white;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-tab-divider-color: white;\n --dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-activegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.35);\n --dv-separator-border: rgba(128, 128, 128, 0.35);\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n}\n\n.dockview-theme-vs {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n --dv-tabs-and-actions-container-background-color: #2d2d30;\n --dv-tabs-and-actions-container-height: 20px;\n --dv-tabs-and-actions-container-font-size: 11px;\n --dv-activegroup-visiblepanel-tab-background-color: #007acc;\n --dv-inactivegroup-visiblepanel-tab-background-color: #3f3f46;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: white;\n --dv-inactivegroup-visiblepanel-tab-color: white;\n --dv-inactivegroup-hiddenpanel-tab-color: white;\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-activegroup-hiddenpanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n}\n\n.dockview-theme-abyss {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #000c18;\n --dv-tabs-and-actions-container-background-color: #1c1c2a;\n --dv-activegroup-visiblepanel-tab-background-color: #000c18;\n --dv-activegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #000c18;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-tab-divider-color: #2b2b4a;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.25);\n --dv-separator-border: #2b2b4a;\n --dv-paneview-header-border-color: #2b2b4a;\n --dv-paneview-active-outline-color: #596f99;\n}\n\n.dockview-theme-dracula {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #282a36;\n --dv-tabs-and-actions-container-background-color: #191a21;\n --dv-activegroup-visiblepanel-tab-background-color: #282a36;\n --dv-activegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #282a36;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-tab-divider-color: #191a21;\n --dv-activegroup-visiblepanel-tab-color: rgb(248, 248, 242);\n --dv-activegroup-hiddenpanel-tab-color: rgb(98, 114, 164);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(248, 248, 242, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(98, 114, 164, 0.5);\n --dv-separator-border: #bd93f9;\n --dv-paneview-header-border-color: #bd93f9;\n --dv-paneview-active-outline-color: #6272a4;\n}\n.dockview-theme-dracula .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab::after {\n position: absolute;\n left: 0px;\n top: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #94527e;\n z-index: 999;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #5e3d5a;\n z-index: 999;\n}\n\n.dockview-theme-replit {\n --dv-background-color: black;\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #ebeced;\n --dv-tabs-and-actions-container-background-color: #fcfcfc;\n --dv-activegroup-visiblepanel-tab-background-color: #f0f1f2;\n --dv-activegroup-hiddenpanel-tab-background-color: ##fcfcfc;\n --dv-inactivegroup-visiblepanel-tab-background-color: #f0f1f2;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #fcfcfc;\n --dv-tab-divider-color: transparent;\n --dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-activegroup-hiddenpanel-tab-color: rgb(51, 51, 51);\n --dv-inactivegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-inactivegroup-hiddenpanel-tab-color: rgb(51, 51, 51);\n --dv-separator-border: transparent;\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n --dv-background-color: #ebeced;\n --dv-separator-handle-background-color: #cfd1d3;\n --dv-separator-handle-hover-background-color: #babbbb;\n}\n.dockview-theme-replit .dv-resize-container:has(> .groupview) {\n border-radius: 8px;\n}\n.dockview-theme-replit .groupview {\n overflow: hidden;\n border-radius: 10px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container {\n border-bottom: 1px solid rgba(128, 128, 128, 0.35);\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab {\n margin: 4px;\n border-radius: 8px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab .dockview-svg {\n height: 8px;\n width: 8px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab:hover {\n background-color: #e4e5e6 !important;\n}\n.dockview-theme-replit .groupview .content-container {\n background-color: #fcfcfc;\n}\n.dockview-theme-replit .groupview.active-group {\n border: 1px solid rgba(128, 128, 128, 0.35);\n}\n.dockview-theme-replit .groupview.inactive-group {\n border: 1px solid transparent;\n}\n.dockview-theme-replit .vertical > .sash-container > .sash::after {\n content: \"\";\n height: 4px;\n width: 40px;\n border-radius: 2px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--dv-separator-handle-background-color);\n position: absolute;\n}\n.dockview-theme-replit .vertical > .sash-container > .sash:hover::after {\n background-color: var(--dv-separator-handle-hover-background-color);\n}\n.dockview-theme-replit .horizontal > .sash-container > .sash::after {\n content: \"\";\n height: 40px;\n width: 4px;\n border-radius: 2px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--dv-separator-handle-background-color);\n position: absolute;\n}\n.dockview-theme-replit .horizontal > .sash-container > .sash:hover::after {\n background-color: var(--dv-separator-handle-hover-background-color);\n}\n.drop-target {\n position: relative;\n}\n.drop-target > .drop-target-dropzone {\n position: absolute;\n left: 0px;\n top: 0px;\n height: 100%;\n width: 100%;\n z-index: 1000;\n pointer-events: none;\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection {\n position: relative;\n box-sizing: border-box;\n height: 100%;\n width: 100%;\n background-color: var(--dv-drag-over-background-color);\n transition: top 70ms ease-out, left 70ms ease-out, width 70ms ease-out, height 70ms ease-out, opacity 0.15s ease-out;\n will-change: transform;\n pointer-events: none;\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.dv-drop-target-top.dv-drop-target-small-vertical {\n border-top: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.dv-drop-target-bottom.dv-drop-target-small-vertical {\n border-bottom: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.dv-drop-target-left.dv-drop-target-small-horizontal {\n border-left: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.dv-drop-target-right.dv-drop-target-small-horizontal {\n border-right: 1px solid var(--dv-drag-over-border-color);\n}\n.dv-debug .dv-resize-container .dv-resize-handle-top {\n background-color: red;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-bottom {\n background-color: green;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-left {\n background-color: yellow;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-right {\n background-color: blue;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-topleft,\n.dv-debug .dv-resize-container .dv-resize-handle-topright,\n.dv-debug .dv-resize-container .dv-resize-handle-bottomleft,\n.dv-debug .dv-resize-container .dv-resize-handle-bottomright {\n background-color: cyan;\n}\n\n.dv-resize-container {\n position: absolute;\n z-index: 997;\n border: 1px solid var(--dv-tab-divider-color);\n box-shadow: var(--dv-floating-box-shadow);\n}\n.dv-resize-container.dv-bring-to-front {\n z-index: 998;\n}\n.dv-resize-container.dv-resize-container-dragging {\n opacity: 0.5;\n}\n.dv-resize-container .dv-resize-handle-top {\n height: 4px;\n width: calc(100% - 8px);\n left: 4px;\n top: -2px;\n z-index: 999;\n position: absolute;\n cursor: ns-resize;\n}\n.dv-resize-container .dv-resize-handle-bottom {\n height: 4px;\n width: calc(100% - 8px);\n left: 4px;\n bottom: -2px;\n z-index: 999;\n position: absolute;\n cursor: ns-resize;\n}\n.dv-resize-container .dv-resize-handle-left {\n height: calc(100% - 8px);\n width: 4px;\n left: -2px;\n top: 4px;\n z-index: 999;\n position: absolute;\n cursor: ew-resize;\n}\n.dv-resize-container .dv-resize-handle-right {\n height: calc(100% - 8px);\n width: 4px;\n right: -2px;\n top: 4px;\n z-index: 999;\n position: absolute;\n cursor: ew-resize;\n}\n.dv-resize-container .dv-resize-handle-topleft {\n height: 4px;\n width: 4px;\n top: -2px;\n left: -2px;\n z-index: 999;\n position: absolute;\n cursor: nw-resize;\n}\n.dv-resize-container .dv-resize-handle-topright {\n height: 4px;\n width: 4px;\n right: -2px;\n top: -2px;\n z-index: 999;\n position: absolute;\n cursor: ne-resize;\n}\n.dv-resize-container .dv-resize-handle-bottomleft {\n height: 4px;\n width: 4px;\n left: -2px;\n bottom: -2px;\n z-index: 999;\n position: absolute;\n cursor: sw-resize;\n}\n.dv-resize-container .dv-resize-handle-bottomright {\n height: 4px;\n width: 4px;\n right: -2px;\n bottom: -2px;\n z-index: 999;\n position: absolute;\n cursor: se-resize;\n}\n.dv-dockview {\n position: relative;\n background-color: var(--dv-group-view-background-color);\n}\n.dv-dockview .dv-watermark-container {\n position: absolute;\n top: 0px;\n left: 0px;\n height: 100%;\n width: 100%;\n z-index: 1;\n}\n.dv-dockview .dv-overlay-render-container {\n position: relative;\n}\n\n.groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.inactive-tab {\n background-color: var(--dv-activegroup-hiddenpanel-tab-background-color);\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n background-color: var(--dv-inactivegroup-visiblepanel-tab-background-color);\n color: var(--dv-inactivegroup-visiblepanel-tab-color);\n}\n.groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.inactive-tab {\n background-color: var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n color: var(--dv-inactivegroup-hiddenpanel-tab-color);\n}\n\n/**\n * when a tab is dragged we lose the above stylings because they are conditional on parent elements\n * therefore we also set some stylings for the dragging event\n **/\n.tab.dv-tab-dragging {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.groupview {\n display: flex;\n flex-direction: column;\n height: 100%;\n background-color: var(--dv-group-view-background-color);\n overflow: hidden;\n}\n.groupview:focus {\n outline: none;\n}\n.groupview.empty > .tabs-and-actions-container {\n display: none;\n}\n.groupview > .content-container {\n flex-grow: 1;\n min-height: 0;\n outline: none;\n}\n.dv-root-wrapper {\n height: 100%;\n width: 100%;\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.dv-splitview-disabled > .sash-container > .sash {\n pointer-events: none;\n}\n.split-view-container.animation .view,\n.split-view-container.animation .sash {\n transition-duration: 0.15s;\n transition-timing-function: ease-out;\n}\n.split-view-container.horizontal {\n height: 100%;\n}\n.split-view-container.horizontal > .sash-container > .sash {\n height: 100%;\n width: 4px;\n}\n.split-view-container.horizontal > .sash-container > .sash.enabled {\n cursor: ew-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.horizontal > .sash-container > .sash.maximum {\n cursor: w-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.minimum {\n cursor: e-resize;\n}\n.split-view-container.horizontal > .view-container > .view:not(:first-child)::before {\n height: 100%;\n width: 1px;\n}\n.split-view-container.vertical {\n width: 100%;\n}\n.split-view-container.vertical > .sash-container > .sash {\n width: 100%;\n height: 4px;\n}\n.split-view-container.vertical > .sash-container > .sash.enabled {\n cursor: ns-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.vertical > .sash-container > .sash.maximum {\n cursor: n-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.minimum {\n cursor: s-resize;\n}\n.split-view-container.vertical > .view-container > .view {\n width: 100%;\n}\n.split-view-container.vertical > .view-container > .view:not(:first-child)::before {\n height: 1px;\n width: 100%;\n}\n.split-view-container .sash-container {\n height: 100%;\n width: 100%;\n position: absolute;\n}\n.split-view-container .sash-container .sash {\n position: absolute;\n z-index: 99;\n outline: none;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n touch-action: none;\n}\n.split-view-container .sash-container .sash:not(.disabled):active {\n transition: background-color 0.1s ease-in-out;\n background-color: var(--dv-active-sash-color, transparent);\n}\n.split-view-container .sash-container .sash:not(.disabled):hover {\n background-color: var(--dv-active-sash-color, transparent);\n transition: background-color 0.1s ease-in-out;\n transition-delay: 0.5s;\n}\n.split-view-container .view-container {\n position: relative;\n height: 100%;\n width: 100%;\n background-color: var(--dv-background-color);\n}\n.split-view-container .view-container .view {\n height: 100%;\n box-sizing: border-box;\n overflow: auto;\n position: absolute;\n}\n.split-view-container.separator-border .view:not(:first-child)::before {\n content: \" \";\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n background-color: var(--dv-separator-border);\n}\n.dv-dragged {\n transform: translate3d(0px, 0px, 0px); /* forces tab to be drawn on a separate layer (see https://github.com/microsoft/vscode/issues/18733) */\n}\n\n.tab {\n flex-shrink: 0;\n}\n.tab:focus-within, .tab:focus {\n position: relative;\n}\n.tab:focus-within::after, .tab:focus::after {\n position: absolute;\n content: \"\";\n height: 100%;\n width: 100%;\n top: 0px;\n left: 0px;\n pointer-events: none;\n outline: 1px solid var(--dv-tab-divider-color) !important;\n outline-offset: -1px;\n z-index: 5;\n}\n.tab.dv-tab-dragging .dv-default-tab-action {\n background-color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.tab.active-tab .dv-default-tab .dv-default-tab-action {\n visibility: visible;\n}\n.tab.inactive-tab .dv-default-tab .dv-default-tab-action {\n visibility: hidden;\n}\n.tab.inactive-tab .dv-default-tab:hover .dv-default-tab-action {\n visibility: visible;\n}\n.tab .dv-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 .dv-default-tab .dv-default-tab-content {\n padding: 0px 8px;\n flex-grow: 1;\n}\n.tab .dv-default-tab .dv-default-tab-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n}\n.tab .dv-default-tab .dv-default-tab-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}\n.tabs-and-actions-container {\n display: flex;\n background-color: var(--dv-tabs-and-actions-container-background-color);\n flex-shrink: 0;\n box-sizing: border-box;\n height: var(--dv-tabs-and-actions-container-height);\n font-size: var(--dv-tabs-and-actions-container-font-size);\n}\n.tabs-and-actions-container.hidden {\n display: none;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .tabs-container {\n flex-grow: 1;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .tabs-container .tab {\n flex-grow: 1;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .void-container {\n flex-grow: 0;\n}\n.tabs-and-actions-container .void-container {\n display: flex;\n flex-grow: 1;\n cursor: grab;\n}\n.tabs-and-actions-container .tabs-container {\n display: flex;\n overflow-x: overlay;\n overflow-y: hidden;\n scrollbar-width: thin;\n /* Track */\n /* Handle */\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar {\n height: 3px;\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar-track {\n background: transparent;\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar-thumb {\n background: var(--dv-tabs-container-scrollbar-color);\n}\n.tabs-and-actions-container .tabs-container .tab {\n -webkit-user-drag: element;\n outline: none;\n min-width: 75px;\n cursor: pointer;\n position: relative;\n box-sizing: border-box;\n}\n.tabs-and-actions-container .tabs-container .tab:not(:first-child)::before {\n content: \" \";\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n background-color: var(--dv-tab-divider-color);\n width: 1px;\n height: 100%;\n}\n.watermark {\n display: flex;\n width: 100%;\n}\n.watermark.has-actions .watermark-title .actions-container {\n display: none;\n}\n.watermark .watermark-title {\n height: 35px;\n width: 100%;\n display: flex;\n}\n.watermark .watermark-content {\n flex-grow: 1;\n}\n.watermark .actions-container {\n display: flex;\n align-items: center;\n padding: 0px 8px;\n}\n.watermark .actions-container .close-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n cursor: pointer;\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.watermark .actions-container .close-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}";
35
35
  styleInject(css_248z);
36
36
 
37
37
  class TransferObject {
@@ -556,6 +556,9 @@ function isInDocument(element) {
556
556
  }
557
557
  return false;
558
558
  }
559
+ function addTestId(element, id) {
560
+ element.setAttribute('data-testid', id);
561
+ }
559
562
 
560
563
  function tail(arr) {
561
564
  if (arr.length === 0) {
@@ -617,7 +620,11 @@ function remove(array, value) {
617
620
 
618
621
  const clamp = (value, min, max) => {
619
622
  if (min > max) {
620
- throw new Error(`${min} > ${max} is an invalid condition`);
623
+ /**
624
+ * caveat: an error should be thrown here if this was a proper `clamp` function but we need to handle
625
+ * cases where `min` > `max` and in those cases return `min`.
626
+ */
627
+ return min;
621
628
  }
622
629
  return Math.min(max, Math.max(value, min));
623
630
  };
@@ -822,7 +829,14 @@ class Splitview {
822
829
  this._disabled = value;
823
830
  toggleClass(this.element, 'dv-splitview-disabled', value);
824
831
  }
832
+ get margin() {
833
+ return this._margin;
834
+ }
835
+ set margin(value) {
836
+ this._margin = value;
837
+ }
825
838
  constructor(container, options) {
839
+ var _a;
826
840
  this.container = container;
827
841
  this.viewItems = [];
828
842
  this.sashes = [];
@@ -833,6 +847,7 @@ class Splitview {
833
847
  this._startSnappingEnabled = true;
834
848
  this._endSnappingEnabled = true;
835
849
  this._disabled = false;
850
+ this._margin = 0;
836
851
  this._onDidSashEnd = new Emitter();
837
852
  this.onDidSashEnd = this._onDidSashEnd.event;
838
853
  this._onDidAddView = new Emitter();
@@ -921,6 +936,7 @@ class Splitview {
921
936
  };
922
937
  this._orientation = options.orientation;
923
938
  this.element = this.createContainer();
939
+ this.margin = (_a = options.margin) !== null && _a !== void 0 ? _a : 0;
924
940
  this.proportionalLayout =
925
941
  options.proportionalLayout === undefined
926
942
  ? true
@@ -975,9 +991,7 @@ class Splitview {
975
991
  if (index < 0 || index >= this.viewItems.length) {
976
992
  throw new Error('Index out of bounds');
977
993
  }
978
- toggleClass(this.container, 'visible', visible);
979
994
  const viewItem = this.viewItems[index];
980
- toggleClass(this.container, 'visible', visible);
981
995
  viewItem.setVisible(visible, viewItem.size);
982
996
  this.distributeEmptySpace(index);
983
997
  this.layoutViews();
@@ -1289,15 +1303,29 @@ class Splitview {
1289
1303
  this._proportions = this.viewItems.map((i) => i.visible ? i.size / this._contentSize : undefined);
1290
1304
  }
1291
1305
  }
1306
+ /**
1307
+ * Margin explain:
1308
+ *
1309
+ * For `n` views in a splitview there will be `n-1` margins `m`.
1310
+ *
1311
+ * To fit the margins each view must reduce in size by `(m * (n - 1)) / n`.
1312
+ *
1313
+ * For each view `i` the offet must be adjusted by `m * i/(n - 1)`.
1314
+ */
1292
1315
  layoutViews() {
1293
1316
  this._contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
1294
- let sum = 0;
1295
- const x = [];
1296
1317
  this.updateSashEnablement();
1318
+ if (this.viewItems.length === 0) {
1319
+ return;
1320
+ }
1321
+ const sashCount = this.viewItems.length - 1;
1322
+ const marginReducedSize = (this.margin * sashCount) / this.viewItems.length;
1323
+ let totalLeftOffset = 0;
1324
+ const viewLeftOffsets = [];
1297
1325
  for (let i = 0; i < this.viewItems.length - 1; i++) {
1298
- sum += this.viewItems[i].size;
1299
- x.push(sum);
1300
- const offset = Math.min(Math.max(0, sum - 2), this.size - 4);
1326
+ totalLeftOffset += this.viewItems[i].size;
1327
+ viewLeftOffsets.push(totalLeftOffset);
1328
+ const offset = Math.min(Math.max(0, totalLeftOffset - 2), this.size - this.margin);
1301
1329
  if (this._orientation === Orientation.HORIZONTAL) {
1302
1330
  this.sashes[i].container.style.left = `${offset}px`;
1303
1331
  this.sashes[i].container.style.top = `0px`;
@@ -1308,19 +1336,24 @@ class Splitview {
1308
1336
  }
1309
1337
  }
1310
1338
  this.viewItems.forEach((view, i) => {
1339
+ const size = view.size - marginReducedSize;
1340
+ const offset = i === 0
1341
+ ? 0
1342
+ : viewLeftOffsets[i - 1] +
1343
+ (i / sashCount) * marginReducedSize;
1311
1344
  if (this._orientation === Orientation.HORIZONTAL) {
1312
- view.container.style.width = `${view.size}px`;
1313
- view.container.style.left = i == 0 ? '0px' : `${x[i - 1]}px`;
1345
+ view.container.style.width = `${size}px`;
1346
+ view.container.style.left = `${offset}px`;
1314
1347
  view.container.style.top = '';
1315
1348
  view.container.style.height = '';
1316
1349
  }
1317
1350
  if (this._orientation === Orientation.VERTICAL) {
1318
- view.container.style.height = `${view.size}px`;
1319
- view.container.style.top = i == 0 ? '0px' : `${x[i - 1]}px`;
1351
+ view.container.style.height = `${size}px`;
1352
+ view.container.style.top = `${offset}px`;
1320
1353
  view.container.style.width = '';
1321
1354
  view.container.style.left = '';
1322
1355
  }
1323
- view.view.layout(view.size, this._orthogonalSize);
1356
+ view.view.layout(view.size - marginReducedSize, this._orthogonalSize);
1324
1357
  });
1325
1358
  }
1326
1359
  findFirstSnapIndex(indexes) {
@@ -1769,7 +1802,18 @@ class BranchNode extends CompositeDisposable {
1769
1802
  set disabled(value) {
1770
1803
  this.splitview.disabled = value;
1771
1804
  }
1772
- constructor(orientation, proportionalLayout, styles, size, orthogonalSize, disabled, childDescriptors) {
1805
+ get margin() {
1806
+ return this.splitview.margin;
1807
+ }
1808
+ set margin(value) {
1809
+ this.splitview.margin = value;
1810
+ this.children.forEach((child) => {
1811
+ if (child instanceof BranchNode) {
1812
+ child.margin = value;
1813
+ }
1814
+ });
1815
+ }
1816
+ constructor(orientation, proportionalLayout, styles, size, orthogonalSize, disabled, margin, childDescriptors) {
1773
1817
  super();
1774
1818
  this.orientation = orientation;
1775
1819
  this.proportionalLayout = proportionalLayout;
@@ -1789,6 +1833,7 @@ class BranchNode extends CompositeDisposable {
1789
1833
  orientation: this.orientation,
1790
1834
  proportionalLayout,
1791
1835
  styles,
1836
+ margin,
1792
1837
  });
1793
1838
  this.splitview.layout(this.size, this.orthogonalSize);
1794
1839
  }
@@ -1812,6 +1857,7 @@ class BranchNode extends CompositeDisposable {
1812
1857
  descriptor,
1813
1858
  proportionalLayout,
1814
1859
  styles,
1860
+ margin,
1815
1861
  });
1816
1862
  }
1817
1863
  this.disabled = disabled;
@@ -1820,10 +1866,8 @@ class BranchNode extends CompositeDisposable {
1820
1866
  }));
1821
1867
  this.setupChildrenEvents();
1822
1868
  }
1823
- setVisible(visible) {
1824
- for (const child of this.children) {
1825
- child.setVisible(visible);
1826
- }
1869
+ setVisible(_visible) {
1870
+ // noop
1827
1871
  }
1828
1872
  isChildVisible(index) {
1829
1873
  if (index < 0 || index >= this.children.length) {
@@ -1840,12 +1884,13 @@ class BranchNode extends CompositeDisposable {
1840
1884
  }
1841
1885
  const wereAllChildrenHidden = this.splitview.contentSize === 0;
1842
1886
  this.splitview.setViewVisible(index, visible);
1887
+ // }
1843
1888
  const areAllChildrenHidden = this.splitview.contentSize === 0;
1844
1889
  // If all children are hidden then the parent should hide the entire splitview
1845
1890
  // If the entire splitview is hidden then the parent should show the splitview when a child is shown
1846
1891
  if ((visible && wereAllChildrenHidden) ||
1847
1892
  (!visible && areAllChildrenHidden)) {
1848
- this._onDidVisibilityChange.fire(visible);
1893
+ this._onDidVisibilityChange.fire({ visible });
1849
1894
  }
1850
1895
  }
1851
1896
  moveChild(from, to) {
@@ -1918,7 +1963,7 @@ class BranchNode extends CompositeDisposable {
1918
1963
  this._onDidChange.fire({ size: e.orthogonalSize });
1919
1964
  }), ...this.children.map((c, i) => {
1920
1965
  if (c instanceof BranchNode) {
1921
- return c.onDidVisibilityChange((visible) => {
1966
+ return c.onDidVisibilityChange(({ visible }) => {
1922
1967
  this.setChildVisible(i, visible);
1923
1968
  });
1924
1969
  }
@@ -1948,7 +1993,7 @@ function findLeaf(candiateNode, last) {
1948
1993
  }
1949
1994
  function flipNode(node, size, orthogonalSize) {
1950
1995
  if (node instanceof BranchNode) {
1951
- const result = new BranchNode(orthogonal(node.orientation), node.proportionalLayout, node.styles, size, orthogonalSize, node.disabled);
1996
+ const result = new BranchNode(orthogonal(node.orientation), node.proportionalLayout, node.styles, size, orthogonalSize, node.disabled, node.margin);
1952
1997
  let totalSize = 0;
1953
1998
  for (let i = node.children.length - 1; i >= 0; i--) {
1954
1999
  const child = node.children[i];
@@ -2103,6 +2148,13 @@ class Gridview {
2103
2148
  }
2104
2149
  }
2105
2150
  }
2151
+ get margin() {
2152
+ return this._margin;
2153
+ }
2154
+ set margin(value) {
2155
+ this._margin = value;
2156
+ this.root.margin = value;
2157
+ }
2106
2158
  maximizedView() {
2107
2159
  var _a;
2108
2160
  return (_a = this._maximizedNode) === null || _a === void 0 ? void 0 : _a.leaf.view;
@@ -2188,13 +2240,14 @@ class Gridview {
2188
2240
  this.disposable.dispose();
2189
2241
  this._onDidChange.dispose();
2190
2242
  this._onDidMaximizedNodeChange.dispose();
2243
+ this._onDidViewVisibilityChange.dispose();
2191
2244
  this.root.dispose();
2192
2245
  this._maximizedNode = undefined;
2193
2246
  this.element.remove();
2194
2247
  }
2195
2248
  clear() {
2196
2249
  const orientation = this.root.orientation;
2197
- this.root = new BranchNode(orientation, this.proportionalLayout, this.styles, this.root.size, this.root.orthogonalSize, this._locked);
2250
+ this.root = new BranchNode(orientation, this.proportionalLayout, this.styles, this.root.size, this.root.orthogonalSize, this.locked, this.margin);
2198
2251
  }
2199
2252
  deserialize(json, deserializer) {
2200
2253
  const orientation = json.orientation;
@@ -2205,6 +2258,7 @@ class Gridview {
2205
2258
  this.root = this._deserializeNode(root, orientation, deserializer, orthogonalSize);
2206
2259
  }
2207
2260
  _deserializeNode(node, orientation, deserializer, orthogonalSize) {
2261
+ var _a;
2208
2262
  let result;
2209
2263
  if (node.type === 'branch') {
2210
2264
  const serializedChildren = node.data;
@@ -2216,10 +2270,14 @@ class Gridview {
2216
2270
  });
2217
2271
  result = new BranchNode(orientation, this.proportionalLayout, this.styles, node.size, // <- orthogonal size - flips at each depth
2218
2272
  orthogonalSize, // <- size - flips at each depth,
2219
- this._locked, children);
2273
+ this.locked, this.margin, children);
2220
2274
  }
2221
2275
  else {
2222
- result = new LeafNode(deserializer.fromJSON(node), orientation, orthogonalSize, node.size);
2276
+ const view = deserializer.fromJSON(node);
2277
+ if (typeof node.visible === 'boolean') {
2278
+ (_a = view.setVisible) === null || _a === void 0 ? void 0 : _a.call(view, node.visible);
2279
+ }
2280
+ result = new LeafNode(view, orientation, orthogonalSize, node.size);
2223
2281
  }
2224
2282
  return result;
2225
2283
  }
@@ -2249,7 +2307,7 @@ class Gridview {
2249
2307
  }
2250
2308
  const oldRoot = this.root;
2251
2309
  oldRoot.element.remove();
2252
- this._root = new BranchNode(orthogonal(oldRoot.orientation), this.proportionalLayout, this.styles, this.root.orthogonalSize, this.root.size, this._locked);
2310
+ this._root = new BranchNode(orthogonal(oldRoot.orientation), this.proportionalLayout, this.styles, this.root.orthogonalSize, this.root.size, this.locked, this.margin);
2253
2311
  if (oldRoot.children.length === 0) ;
2254
2312
  else if (oldRoot.children.length === 1) {
2255
2313
  // can remove one level of redundant branching if there is only a single child
@@ -2314,19 +2372,24 @@ class Gridview {
2314
2372
  }
2315
2373
  return findLeaf(this.root, reverse);
2316
2374
  }
2317
- constructor(proportionalLayout, styles, orientation) {
2375
+ constructor(proportionalLayout, styles, orientation, locked, margin) {
2318
2376
  this.proportionalLayout = proportionalLayout;
2319
2377
  this.styles = styles;
2320
2378
  this._locked = false;
2379
+ this._margin = 0;
2321
2380
  this._maximizedNode = undefined;
2322
2381
  this.disposable = new MutableDisposable();
2323
2382
  this._onDidChange = new Emitter();
2324
2383
  this.onDidChange = this._onDidChange.event;
2384
+ this._onDidViewVisibilityChange = new Emitter();
2385
+ this.onDidViewVisibilityChange = this._onDidViewVisibilityChange.event;
2325
2386
  this._onDidMaximizedNodeChange = new Emitter();
2326
2387
  this.onDidMaximizedNodeChange = this._onDidMaximizedNodeChange.event;
2327
2388
  this.element = document.createElement('div');
2328
2389
  this.element.className = 'grid-view';
2329
- this.root = new BranchNode(orientation, proportionalLayout, styles, 0, 0, this._locked);
2390
+ this._locked = locked !== null && locked !== void 0 ? locked : false;
2391
+ this._margin = margin !== null && margin !== void 0 ? margin : 0;
2392
+ this.root = new BranchNode(orientation, proportionalLayout, styles, 0, 0, this.locked, this.margin);
2330
2393
  }
2331
2394
  isViewVisible(location) {
2332
2395
  const [rest, index] = tail(location);
@@ -2345,6 +2408,7 @@ class Gridview {
2345
2408
  if (!(parent instanceof BranchNode)) {
2346
2409
  throw new Error('Invalid from location');
2347
2410
  }
2411
+ this._onDidViewVisibilityChange.fire();
2348
2412
  parent.setChildVisible(index, visible);
2349
2413
  }
2350
2414
  moveView(parentLocation, from, to) {
@@ -2377,7 +2441,7 @@ class Gridview {
2377
2441
  }
2378
2442
  const child = grandParent.removeChild(parentIndex);
2379
2443
  child.dispose();
2380
- const newParent = new BranchNode(parent.orientation, this.proportionalLayout, this.styles, parent.size, parent.orthogonalSize, this._locked);
2444
+ const newParent = new BranchNode(parent.orientation, this.proportionalLayout, this.styles, parent.size, parent.orthogonalSize, this.locked, this.margin);
2381
2445
  grandParent.addChild(newParent, parent.size, parentIndex);
2382
2446
  const newSibling = new LeafNode(parent.view, grandParent.orientation, parent.size);
2383
2447
  newParent.addChild(newSibling, newSiblingSize, 0);
@@ -2616,14 +2680,18 @@ class BaseGrid extends Resizable {
2616
2680
  this.onDidActiveChange = this._onDidActiveChange.event;
2617
2681
  this._bufferOnDidLayoutChange = new AsapEvent();
2618
2682
  this.onDidLayoutChange = this._bufferOnDidLayoutChange.onEvent;
2683
+ this._onDidViewVisibilityChangeMicroTaskQueue = new AsapEvent();
2684
+ this.onDidViewVisibilityChangeMicroTaskQueue = this._onDidViewVisibilityChangeMicroTaskQueue.onEvent;
2619
2685
  this.element.style.height = '100%';
2620
2686
  this.element.style.width = '100%';
2621
2687
  options.parentElement.appendChild(this.element);
2622
- this.gridview = new Gridview(!!options.proportionalLayout, options.styles, options.orientation);
2688
+ this.gridview = new Gridview(!!options.proportionalLayout, options.styles, options.orientation, options.locked, options.margin);
2623
2689
  this.gridview.locked = !!options.locked;
2624
2690
  this.element.appendChild(this.gridview.element);
2625
2691
  this.layout(0, 0, true); // set some elements height/widths
2626
- this.addDisposables(Disposable.from(() => {
2692
+ this.addDisposables(this.gridview.onDidViewVisibilityChange(() => this._onDidViewVisibilityChangeMicroTaskQueue.fire()), this.onDidViewVisibilityChangeMicroTaskQueue(() => {
2693
+ this.layout(this.width, this.height, true);
2694
+ }), Disposable.from(() => {
2627
2695
  var _a;
2628
2696
  (_a = this.element.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(this.element);
2629
2697
  }), this.gridview.onDidChange(() => {
@@ -3237,6 +3305,9 @@ class DockviewApi {
3237
3305
  get onDidRemovePanel() {
3238
3306
  return this.component.onDidRemovePanel;
3239
3307
  }
3308
+ get onDidMovePanel() {
3309
+ return this.component.onDidMovePanel;
3310
+ }
3240
3311
  /**
3241
3312
  * Invoked after a layout is deserialzied using the `fromJSON` method.
3242
3313
  */
@@ -3377,8 +3448,8 @@ class DockviewApi {
3377
3448
  /**
3378
3449
  * Add a floating group
3379
3450
  */
3380
- addFloatingGroup(item, coord) {
3381
- return this.component.addFloatingGroup(item, coord);
3451
+ addFloatingGroup(item, options) {
3452
+ return this.component.addFloatingGroup(item, options);
3382
3453
  }
3383
3454
  /**
3384
3455
  * Create a component from a serialized object.
@@ -3428,6 +3499,9 @@ class DockviewApi {
3428
3499
  addPopoutGroup(item, options) {
3429
3500
  return this.component.addPopoutGroup(item, options);
3430
3501
  }
3502
+ setGap(gap) {
3503
+ this.component.updateOptions({ gap });
3504
+ }
3431
3505
  }
3432
3506
 
3433
3507
  class DragHandler extends CompositeDisposable {
@@ -4797,7 +4871,8 @@ class TabsContainer extends CompositeDisposable {
4797
4871
  this.accessor.addFloatingGroup(this.group, {
4798
4872
  x: left - rootLeft + 20,
4799
4873
  y: top - rootTop + 20,
4800
- }, { inDragMode: true });
4874
+ inDragMode: true,
4875
+ });
4801
4876
  }
4802
4877
  }), addDisposableListener(this.tabContainer, 'mousedown', (event) => {
4803
4878
  if (event.defaultPrevented) {
@@ -4866,7 +4941,8 @@ class TabsContainer extends CompositeDisposable {
4866
4941
  this.accessor.addFloatingGroup(panel, {
4867
4942
  x: left - rootLeft,
4868
4943
  y: top - rootTop,
4869
- }, { inDragMode: true });
4944
+ inDragMode: true,
4945
+ });
4870
4946
  return;
4871
4947
  }
4872
4948
  const isLeftClick = event.button === 0;
@@ -4939,6 +5015,7 @@ const PROPERTY_KEYS = (() => {
4939
5015
  rootOverlayModel: undefined,
4940
5016
  locked: undefined,
4941
5017
  disableDnd: undefined,
5018
+ gap: undefined,
4942
5019
  };
4943
5020
  return Object.keys(properties);
4944
5021
  })();
@@ -5669,6 +5746,9 @@ class GridviewPanel extends BasePanelView {
5669
5746
  get isActive() {
5670
5747
  return this.api.isActive;
5671
5748
  }
5749
+ get isVisible() {
5750
+ return this.api.isVisible;
5751
+ }
5672
5752
  constructor(id, component, options, api) {
5673
5753
  super(id, component, api !== null && api !== void 0 ? api : new GridviewPanelApiImpl(id, component));
5674
5754
  this._evaluatedMinimumWidth = 0;
@@ -6205,52 +6285,40 @@ class DefaultTab extends CompositeDisposable {
6205
6285
  }
6206
6286
  constructor() {
6207
6287
  super();
6208
- //
6209
- this.params = {};
6210
6288
  this._element = document.createElement('div');
6211
6289
  this._element.className = 'dv-default-tab';
6212
- //
6213
6290
  this._content = document.createElement('div');
6214
6291
  this._content.className = 'dv-default-tab-content';
6215
6292
  this.action = document.createElement('div');
6216
6293
  this.action.className = 'dv-default-tab-action';
6217
6294
  this.action.appendChild(createCloseButton());
6218
- //
6219
6295
  this._element.appendChild(this._content);
6220
6296
  this._element.appendChild(this.action);
6221
- //
6222
6297
  this.addDisposables(addDisposableListener(this.action, 'mousedown', (ev) => {
6223
6298
  ev.preventDefault();
6224
6299
  }));
6225
6300
  this.render();
6226
6301
  }
6227
- update(event) {
6228
- this.params = Object.assign(Object.assign({}, this.params), event.params);
6229
- this.render();
6230
- }
6231
- focus() {
6232
- //noop
6233
- }
6234
6302
  init(params) {
6235
- this.params = params;
6236
- this._content.textContent = params.title;
6237
- addDisposableListener(this.action, 'click', (ev) => {
6238
- ev.preventDefault(); //
6239
- this.params.api.close();
6240
- });
6241
- }
6242
- onGroupChange(_group) {
6243
- this.render();
6244
- }
6245
- onPanelVisibleChange(_isPanelVisible) {
6303
+ this._title = params.title;
6304
+ this.addDisposables(params.api.onDidTitleChange((event) => {
6305
+ this._title = event.title;
6306
+ this.render();
6307
+ }), addDisposableListener(this.action, 'mousedown', (ev) => {
6308
+ ev.preventDefault();
6309
+ }), addDisposableListener(this.action, 'click', (ev) => {
6310
+ if (ev.defaultPrevented) {
6311
+ return;
6312
+ }
6313
+ ev.preventDefault();
6314
+ params.api.close();
6315
+ }));
6246
6316
  this.render();
6247
6317
  }
6248
- layout(_width, _height) {
6249
- // noop
6250
- }
6251
6318
  render() {
6252
- if (this._content.textContent !== this.params.title) {
6253
- this._content.textContent = this.params.title;
6319
+ var _a;
6320
+ if (this._content.textContent !== this._title) {
6321
+ this._content.textContent = (_a = this._title) !== null && _a !== void 0 ? _a : '';
6254
6322
  }
6255
6323
  }
6256
6324
  }
@@ -6443,12 +6511,7 @@ class Overlay extends CompositeDisposable {
6443
6511
  this._element.appendChild(this.options.content);
6444
6512
  this.options.container.appendChild(this._element);
6445
6513
  // if input bad resize within acceptable boundaries
6446
- this.setBounds({
6447
- height: this.options.height,
6448
- width: this.options.width,
6449
- top: this.options.top,
6450
- left: this.options.left,
6451
- });
6514
+ this.setBounds(Object.assign(Object.assign(Object.assign(Object.assign({ height: this.options.height, width: this.options.width }, ('top' in this.options && { top: this.options.top })), ('bottom' in this.options && { bottom: this.options.bottom })), ('left' in this.options && { left: this.options.left })), ('right' in this.options && { right: this.options.right })));
6452
6515
  }
6453
6516
  setBounds(bounds = {}) {
6454
6517
  if (typeof bounds.height === 'number') {
@@ -6457,11 +6520,25 @@ class Overlay extends CompositeDisposable {
6457
6520
  if (typeof bounds.width === 'number') {
6458
6521
  this._element.style.width = `${bounds.width}px`;
6459
6522
  }
6460
- if (typeof bounds.top === 'number') {
6523
+ if ('top' in bounds && typeof bounds.top === 'number') {
6461
6524
  this._element.style.top = `${bounds.top}px`;
6525
+ this._element.style.bottom = 'auto';
6526
+ this.verticalAlignment = 'top';
6527
+ }
6528
+ if ('bottom' in bounds && typeof bounds.bottom === 'number') {
6529
+ this._element.style.bottom = `${bounds.bottom}px`;
6530
+ this._element.style.top = 'auto';
6531
+ this.verticalAlignment = 'bottom';
6462
6532
  }
6463
- if (typeof bounds.left === 'number') {
6533
+ if ('left' in bounds && typeof bounds.left === 'number') {
6464
6534
  this._element.style.left = `${bounds.left}px`;
6535
+ this._element.style.right = 'auto';
6536
+ this.horiziontalAlignment = 'left';
6537
+ }
6538
+ if ('right' in bounds && typeof bounds.right === 'number') {
6539
+ this._element.style.right = `${bounds.right}px`;
6540
+ this._element.style.left = 'auto';
6541
+ this.horiziontalAlignment = 'right';
6465
6542
  }
6466
6543
  const containerRect = this.options.container.getBoundingClientRect();
6467
6544
  const overlayRect = this._element.getBoundingClientRect();
@@ -6469,24 +6546,54 @@ class Overlay extends CompositeDisposable {
6469
6546
  // a minimum width of minimumViewportWidth must be inside the viewport
6470
6547
  const xOffset = Math.max(0, this.getMinimumWidth(overlayRect.width));
6471
6548
  // a minimum height of minimumViewportHeight must be inside the viewport
6472
- const yOffset = typeof this.options.minimumInViewportHeight === 'number'
6473
- ? Math.max(0, this.getMinimumHeight(overlayRect.height))
6474
- : 0;
6475
- const left = clamp(overlayRect.left - containerRect.left, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
6476
- const top = clamp(overlayRect.top - containerRect.top, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
6477
- this._element.style.left = `${left}px`;
6478
- this._element.style.top = `${top}px`;
6549
+ const yOffset = Math.max(0, this.getMinimumHeight(overlayRect.height));
6550
+ if (this.verticalAlignment === 'top') {
6551
+ const top = clamp(overlayRect.top - containerRect.top, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
6552
+ this._element.style.top = `${top}px`;
6553
+ this._element.style.bottom = 'auto';
6554
+ }
6555
+ if (this.verticalAlignment === 'bottom') {
6556
+ const bottom = clamp(containerRect.bottom - overlayRect.bottom, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
6557
+ this._element.style.bottom = `${bottom}px`;
6558
+ this._element.style.top = 'auto';
6559
+ }
6560
+ if (this.horiziontalAlignment === 'left') {
6561
+ const left = clamp(overlayRect.left - containerRect.left, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
6562
+ this._element.style.left = `${left}px`;
6563
+ this._element.style.right = 'auto';
6564
+ }
6565
+ if (this.horiziontalAlignment === 'right') {
6566
+ const right = clamp(containerRect.right - overlayRect.right, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
6567
+ this._element.style.right = `${right}px`;
6568
+ this._element.style.left = 'auto';
6569
+ }
6479
6570
  this._onDidChange.fire();
6480
6571
  }
6481
6572
  toJSON() {
6482
6573
  const container = this.options.container.getBoundingClientRect();
6483
6574
  const element = this._element.getBoundingClientRect();
6484
- return {
6485
- top: element.top - container.top,
6486
- left: element.left - container.left,
6487
- width: element.width,
6488
- height: element.height,
6489
- };
6575
+ const result = {};
6576
+ if (this.verticalAlignment === 'top') {
6577
+ result.top = parseFloat(this._element.style.top);
6578
+ }
6579
+ else if (this.verticalAlignment === 'bottom') {
6580
+ result.bottom = parseFloat(this._element.style.bottom);
6581
+ }
6582
+ else {
6583
+ result.top = element.top - container.top;
6584
+ }
6585
+ if (this.horiziontalAlignment === 'left') {
6586
+ result.left = parseFloat(this._element.style.left);
6587
+ }
6588
+ else if (this.horiziontalAlignment === 'right') {
6589
+ result.right = parseFloat(this._element.style.right);
6590
+ }
6591
+ else {
6592
+ result.left = element.left - container.left;
6593
+ }
6594
+ result.width = element.width;
6595
+ result.height = element.height;
6596
+ return result;
6490
6597
  }
6491
6598
  setupDrag(dragTarget, options = { inDragMode: false }) {
6492
6599
  const move = new MutableDisposable();
@@ -6518,12 +6625,30 @@ class Overlay extends CompositeDisposable {
6518
6625
  };
6519
6626
  }
6520
6627
  const xOffset = Math.max(0, this.getMinimumWidth(overlayRect.width));
6521
- const yOffset = Math.max(0, this.options.minimumInViewportHeight
6522
- ? this.getMinimumHeight(overlayRect.height)
6523
- : 0);
6524
- const left = clamp(x - offset.x, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
6628
+ const yOffset = Math.max(0, this.getMinimumHeight(overlayRect.height));
6525
6629
  const top = clamp(y - offset.y, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
6526
- this.setBounds({ top, left });
6630
+ const bottom = clamp(offset.y -
6631
+ y +
6632
+ containerRect.height -
6633
+ overlayRect.height, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
6634
+ const left = clamp(x - offset.x, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
6635
+ const right = clamp(offset.x - x + containerRect.width - overlayRect.width, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
6636
+ const bounds = {};
6637
+ // Anchor to top or to bottom depending on which one is closer
6638
+ if (top <= bottom) {
6639
+ bounds.top = top;
6640
+ }
6641
+ else {
6642
+ bounds.bottom = bottom;
6643
+ }
6644
+ // Anchor to left or to right depending on which one is closer
6645
+ if (left <= right) {
6646
+ bounds.left = left;
6647
+ }
6648
+ else {
6649
+ bounds.right = right;
6650
+ }
6651
+ this.setBounds(bounds);
6527
6652
  }), addDisposableWindowListener(window, 'mouseup', () => {
6528
6653
  toggleClass(this._element, 'dv-resize-container-dragging', false);
6529
6654
  move.dispose();
@@ -6591,8 +6716,10 @@ class Overlay extends CompositeDisposable {
6591
6716
  };
6592
6717
  }
6593
6718
  let top = undefined;
6719
+ let bottom = undefined;
6594
6720
  let height = undefined;
6595
6721
  let left = undefined;
6722
+ let right = undefined;
6596
6723
  let width = undefined;
6597
6724
  const moveTop = () => {
6598
6725
  top = clamp(y, -Number.MAX_VALUE, startPosition.originalY +
@@ -6606,6 +6733,7 @@ class Overlay extends CompositeDisposable {
6606
6733
  startPosition.originalY +
6607
6734
  startPosition.originalHeight -
6608
6735
  top;
6736
+ bottom = containerRect.height - top - height;
6609
6737
  };
6610
6738
  const moveBottom = () => {
6611
6739
  top =
@@ -6617,6 +6745,7 @@ class Overlay extends CompositeDisposable {
6617
6745
  ? -top +
6618
6746
  this.options.minimumInViewportHeight
6619
6747
  : Overlay.MINIMUM_HEIGHT, Number.MAX_VALUE);
6748
+ bottom = containerRect.height - top - height;
6620
6749
  };
6621
6750
  const moveLeft = () => {
6622
6751
  left = clamp(x, -Number.MAX_VALUE, startPosition.originalX +
@@ -6630,6 +6759,7 @@ class Overlay extends CompositeDisposable {
6630
6759
  startPosition.originalX +
6631
6760
  startPosition.originalWidth -
6632
6761
  left;
6762
+ right = containerRect.width - left - width;
6633
6763
  };
6634
6764
  const moveRight = () => {
6635
6765
  left =
@@ -6641,6 +6771,7 @@ class Overlay extends CompositeDisposable {
6641
6771
  ? -left +
6642
6772
  this.options.minimumInViewportWidth
6643
6773
  : Overlay.MINIMUM_WIDTH, Number.MAX_VALUE);
6774
+ right = containerRect.width - left - width;
6644
6775
  };
6645
6776
  switch (direction) {
6646
6777
  case 'top':
@@ -6672,7 +6803,24 @@ class Overlay extends CompositeDisposable {
6672
6803
  moveRight();
6673
6804
  break;
6674
6805
  }
6675
- this.setBounds({ height, width, top, left });
6806
+ const bounds = {};
6807
+ // Anchor to top or to bottom depending on which one is closer
6808
+ if (top <= bottom) {
6809
+ bounds.top = top;
6810
+ }
6811
+ else {
6812
+ bounds.bottom = bottom;
6813
+ }
6814
+ // Anchor to left or to right depending on which one is closer
6815
+ if (left <= right) {
6816
+ bounds.left = left;
6817
+ }
6818
+ else {
6819
+ bounds.right = right;
6820
+ }
6821
+ bounds.height = height;
6822
+ bounds.width = width;
6823
+ this.setBounds(bounds);
6676
6824
  }), {
6677
6825
  dispose: () => {
6678
6826
  for (const iframe of iframes) {
@@ -6695,7 +6843,7 @@ class Overlay extends CompositeDisposable {
6695
6843
  if (typeof this.options.minimumInViewportHeight === 'number') {
6696
6844
  return height - this.options.minimumInViewportHeight;
6697
6845
  }
6698
- return height;
6846
+ return 0;
6699
6847
  }
6700
6848
  dispose() {
6701
6849
  this._element.remove();
@@ -6718,7 +6866,7 @@ class DockviewFloatingGroupPanel extends CompositeDisposable {
6718
6866
  }
6719
6867
 
6720
6868
  const DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE = 100;
6721
- const DEFAULT_FLOATING_GROUP_POSITION = { left: 100, top: 100 };
6869
+ const DEFAULT_FLOATING_GROUP_POSITION = { left: 100, top: 100, width: 300, height: 300 };
6722
6870
 
6723
6871
  function createFocusableElement() {
6724
6872
  const element = document.createElement('div');
@@ -7084,6 +7232,7 @@ class DockviewComponent extends BaseGrid {
7084
7232
  parentElement: options.parentElement,
7085
7233
  disableAutoResizing: options.disableAutoResizing,
7086
7234
  locked: options.locked,
7235
+ margin: options.gap,
7087
7236
  });
7088
7237
  this.nextGroupId = sequentialNumberGenerator();
7089
7238
  this._deserializer = new DefaultDockviewDeserialzier(this);
@@ -7109,9 +7258,9 @@ class DockviewComponent extends BaseGrid {
7109
7258
  this._onDidActivePanelChange = new Emitter();
7110
7259
  this.onDidActivePanelChange = this._onDidActivePanelChange.event;
7111
7260
  this._onDidMovePanel = new Emitter();
7261
+ this.onDidMovePanel = this._onDidMovePanel.event;
7112
7262
  this._floatingGroups = [];
7113
7263
  this._popoutGroups = [];
7114
- this._ignoreEvents = 0;
7115
7264
  this._onDidRemoveGroup = new Emitter();
7116
7265
  this.onDidRemoveGroup = this._onDidRemoveGroup.event;
7117
7266
  this._onDidAddGroup = new Emitter();
@@ -7125,7 +7274,9 @@ class DockviewComponent extends BaseGrid {
7125
7274
  this.overlayRenderContainer = new OverlayRenderContainer(gready);
7126
7275
  toggleClass(this.gridview.element, 'dv-dockview', true);
7127
7276
  toggleClass(this.element, 'dv-debug', !!options.debug);
7128
- this.addDisposables(this.overlayRenderContainer, this._onWillDragPanel, this._onWillDragGroup, this._onWillShowOverlay, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, this._onWillDrop, this._onDidMovePanel, this._onDidAddGroup, this._onDidRemoveGroup, this._onDidActiveGroupChange, this._onUnhandledDragOverEvent, this.onDidAdd((event) => {
7277
+ this.addDisposables(this.overlayRenderContainer, this._onWillDragPanel, this._onWillDragGroup, this._onWillShowOverlay, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, this._onWillDrop, this._onDidMovePanel, this._onDidAddGroup, this._onDidRemoveGroup, this._onDidActiveGroupChange, this._onUnhandledDragOverEvent, this.onDidViewVisibilityChangeMicroTaskQueue(() => {
7278
+ this.updateWatermark();
7279
+ }), this.onDidAdd((event) => {
7129
7280
  if (!this._moving) {
7130
7281
  this._onDidAddGroup.fire(event);
7131
7282
  }
@@ -7139,7 +7290,7 @@ class DockviewComponent extends BaseGrid {
7139
7290
  }
7140
7291
  }), Event.any(this.onDidAdd, this.onDidRemove)(() => {
7141
7292
  this.updateWatermark();
7142
- }), Event.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidActivePanelChange)(() => {
7293
+ }), Event.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidAddGroup, this.onDidRemove, this.onDidMovePanel, this.onDidActivePanelChange)(() => {
7143
7294
  this._bufferOnDidLayoutChange.fire();
7144
7295
  }), Disposable.from(() => {
7145
7296
  // iterate over a copy of the array since .dispose() mutates the original array
@@ -7390,8 +7541,8 @@ class DockviewComponent extends BaseGrid {
7390
7541
  console.error('dockview: failed to create popout window', err);
7391
7542
  });
7392
7543
  }
7393
- addFloatingGroup(item, coord, options) {
7394
- var _a, _b, _c, _d, _e, _f, _g;
7544
+ addFloatingGroup(item, options) {
7545
+ var _a, _b, _c, _d, _e;
7395
7546
  let group;
7396
7547
  if (item instanceof DockviewPanel) {
7397
7548
  group = this.createGroup();
@@ -7436,26 +7587,62 @@ class DockviewComponent extends BaseGrid {
7436
7587
  }
7437
7588
  }
7438
7589
  group.model.location = { type: 'floating' };
7439
- const overlayLeft = typeof (coord === null || coord === void 0 ? void 0 : coord.x) === 'number'
7440
- ? Math.max(coord.x, 0)
7441
- : DEFAULT_FLOATING_GROUP_POSITION.left;
7442
- const overlayTop = typeof (coord === null || coord === void 0 ? void 0 : coord.y) === 'number'
7443
- ? Math.max(coord.y, 0)
7444
- : DEFAULT_FLOATING_GROUP_POSITION.top;
7445
- const overlay = new Overlay({
7446
- container: this.gridview.element,
7447
- content: group.element,
7448
- height: (_b = coord === null || coord === void 0 ? void 0 : coord.height) !== null && _b !== void 0 ? _b : 300,
7449
- width: (_c = coord === null || coord === void 0 ? void 0 : coord.width) !== null && _c !== void 0 ? _c : 300,
7450
- left: overlayLeft,
7451
- top: overlayTop,
7452
- minimumInViewportWidth: this.options.floatingGroupBounds === 'boundedWithinViewport'
7590
+ function getAnchoredBox() {
7591
+ if (options === null || options === void 0 ? void 0 : options.position) {
7592
+ const result = {};
7593
+ if ('left' in options.position) {
7594
+ result.left = Math.max(options.position.left, 0);
7595
+ }
7596
+ else if ('right' in options.position) {
7597
+ result.right = Math.max(options.position.right, 0);
7598
+ }
7599
+ else {
7600
+ result.left = DEFAULT_FLOATING_GROUP_POSITION.left;
7601
+ }
7602
+ if ('top' in options.position) {
7603
+ result.top = Math.max(options.position.top, 0);
7604
+ }
7605
+ else if ('bottom' in options.position) {
7606
+ result.bottom = Math.max(options.position.bottom, 0);
7607
+ }
7608
+ else {
7609
+ result.top = DEFAULT_FLOATING_GROUP_POSITION.top;
7610
+ }
7611
+ if ('width' in options.position) {
7612
+ result.width = Math.max(options.position.width, 0);
7613
+ }
7614
+ else {
7615
+ result.width = DEFAULT_FLOATING_GROUP_POSITION.width;
7616
+ }
7617
+ if ('height' in options.position) {
7618
+ result.height = Math.max(options.position.height, 0);
7619
+ }
7620
+ else {
7621
+ result.height = DEFAULT_FLOATING_GROUP_POSITION.height;
7622
+ }
7623
+ return result;
7624
+ }
7625
+ return {
7626
+ left: typeof (options === null || options === void 0 ? void 0 : options.x) === 'number'
7627
+ ? Math.max(options.x, 0)
7628
+ : DEFAULT_FLOATING_GROUP_POSITION.left,
7629
+ top: typeof (options === null || options === void 0 ? void 0 : options.y) === 'number'
7630
+ ? Math.max(options.y, 0)
7631
+ : DEFAULT_FLOATING_GROUP_POSITION.top,
7632
+ width: typeof (options === null || options === void 0 ? void 0 : options.width) === 'number'
7633
+ ? Math.max(options.width, 0)
7634
+ : DEFAULT_FLOATING_GROUP_POSITION.width,
7635
+ height: typeof (options === null || options === void 0 ? void 0 : options.height) === 'number'
7636
+ ? Math.max(options.height, 0)
7637
+ : DEFAULT_FLOATING_GROUP_POSITION.height,
7638
+ };
7639
+ }
7640
+ const anchoredBox = getAnchoredBox();
7641
+ const overlay = new Overlay(Object.assign(Object.assign({ container: this.gridview.element, content: group.element }, anchoredBox), { minimumInViewportWidth: this.options.floatingGroupBounds === 'boundedWithinViewport'
7453
7642
  ? undefined
7454
- : (_e = (_d = this.options.floatingGroupBounds) === null || _d === void 0 ? void 0 : _d.minimumWidthWithinViewport) !== null && _e !== void 0 ? _e : DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE,
7455
- minimumInViewportHeight: this.options.floatingGroupBounds === 'boundedWithinViewport'
7643
+ : (_c = (_b = this.options.floatingGroupBounds) === null || _b === void 0 ? void 0 : _b.minimumWidthWithinViewport) !== null && _c !== void 0 ? _c : DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE, minimumInViewportHeight: this.options.floatingGroupBounds === 'boundedWithinViewport'
7456
7644
  ? undefined
7457
- : (_g = (_f = this.options.floatingGroupBounds) === null || _f === void 0 ? void 0 : _f.minimumHeightWithinViewport) !== null && _g !== void 0 ? _g : DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE,
7458
- });
7645
+ : (_e = (_d = this.options.floatingGroupBounds) === null || _d === void 0 ? void 0 : _d.minimumHeightWithinViewport) !== null && _e !== void 0 ? _e : DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE }));
7459
7646
  const el = group.element.querySelector('.void-container');
7460
7647
  if (!el) {
7461
7648
  throw new Error('failed to find drag handle');
@@ -7553,12 +7740,18 @@ class DockviewComponent extends BaseGrid {
7553
7740
  group.overlay.minimumInViewportWidth =
7554
7741
  (_b = this.options.floatingGroupBounds) === null || _b === void 0 ? void 0 : _b.minimumWidthWithinViewport;
7555
7742
  }
7556
- group.overlay.setBounds({});
7743
+ group.overlay.setBounds();
7557
7744
  }
7558
7745
  }
7559
7746
  if (changed_rootOverlayOptions) {
7560
7747
  this._rootDropTarget.setOverlayModel(options.rootOverlayModel);
7561
7748
  }
7749
+ if (this.gridview.margin !== 0 && options.gap === undefined) {
7750
+ this.gridview.margin = 0;
7751
+ }
7752
+ if (typeof options.gap === 'number') {
7753
+ this.gridview.margin = options.gap;
7754
+ }
7562
7755
  this.layout(this.gridview.width, this.gridview.height, true);
7563
7756
  }
7564
7757
  layout(width, height, forceResize) {
@@ -7720,11 +7913,10 @@ class DockviewComponent extends BaseGrid {
7720
7913
  const { data, position } = serializedFloatingGroup;
7721
7914
  const group = createGroupFromSerializedState(data);
7722
7915
  this.addFloatingGroup(group, {
7723
- x: position.left,
7724
- y: position.top,
7725
- height: position.height,
7726
- width: position.width,
7727
- }, { skipRemoveGroup: true, inDragMode: false });
7916
+ position: position,
7917
+ skipRemoveGroup: true,
7918
+ inDragMode: false,
7919
+ });
7728
7920
  }
7729
7921
  const serializedPopoutGroups = (_b = data.popoutGroups) !== null && _b !== void 0 ? _b : [];
7730
7922
  for (const serializedPopoutGroup of serializedPopoutGroups) {
@@ -7859,11 +8051,7 @@ class DockviewComponent extends BaseGrid {
7859
8051
  options.floating !== null
7860
8052
  ? options.floating
7861
8053
  : {};
7862
- this.addFloatingGroup(group, o, {
7863
- inDragMode: false,
7864
- skipRemoveGroup: true,
7865
- skipActiveGroup: true,
7866
- });
8054
+ this.addFloatingGroup(group, Object.assign(Object.assign({}, o), { inDragMode: false, skipRemoveGroup: true, skipActiveGroup: true }));
7867
8055
  panel = this.createPanel(options, group);
7868
8056
  group.model.openPanel(panel, {
7869
8057
  skipSetActive: options.inactive,
@@ -7902,11 +8090,7 @@ class DockviewComponent extends BaseGrid {
7902
8090
  options.floating !== null
7903
8091
  ? options.floating
7904
8092
  : {};
7905
- this.addFloatingGroup(group, coordinates, {
7906
- inDragMode: false,
7907
- skipRemoveGroup: true,
7908
- skipActiveGroup: true,
7909
- });
8093
+ this.addFloatingGroup(group, Object.assign(Object.assign({}, coordinates), { inDragMode: false, skipRemoveGroup: true, skipActiveGroup: true }));
7910
8094
  panel = this.createPanel(options, group);
7911
8095
  group.model.openPanel(panel, {
7912
8096
  skipSetActive: options.inactive,
@@ -7961,6 +8145,7 @@ class DockviewComponent extends BaseGrid {
7961
8145
  });
7962
8146
  const watermarkContainer = document.createElement('div');
7963
8147
  watermarkContainer.className = 'dv-watermark-container';
8148
+ addTestId(watermarkContainer, 'watermark-component');
7964
8149
  watermarkContainer.appendChild(this.watermark.element);
7965
8150
  this.gridview.element.appendChild(watermarkContainer);
7966
8151
  }
@@ -8149,6 +8334,7 @@ class DockviewComponent extends BaseGrid {
8149
8334
  this.doSetGroupAndPanelActive(destinationGroup);
8150
8335
  this._onDidMovePanel.fire({
8151
8336
  panel: removedPanel,
8337
+ from: sourceGroup,
8152
8338
  });
8153
8339
  }
8154
8340
  else {
@@ -8172,6 +8358,10 @@ class DockviewComponent extends BaseGrid {
8172
8358
  // if a group has one tab - we are essentially moving the 'group'
8173
8359
  // which is equivalent to swapping two views in this case
8174
8360
  this.gridview.moveView(sourceParentLocation, from, to);
8361
+ this._onDidMovePanel.fire({
8362
+ panel: this.getGroupPanel(sourceItemId),
8363
+ from: sourceGroup,
8364
+ });
8175
8365
  return;
8176
8366
  }
8177
8367
  }
@@ -8185,6 +8375,10 @@ class DockviewComponent extends BaseGrid {
8185
8375
  const location = getRelativeLocation(this.gridview.orientation, updatedReferenceLocation, destinationTarget);
8186
8376
  this.movingLock(() => this.doAddGroup(targetGroup, location));
8187
8377
  this.doSetGroupAndPanelActive(targetGroup);
8378
+ this._onDidMovePanel.fire({
8379
+ panel: this.getGroupPanel(sourceItemId),
8380
+ from: sourceGroup,
8381
+ });
8188
8382
  }
8189
8383
  else {
8190
8384
  /**
@@ -8204,6 +8398,10 @@ class DockviewComponent extends BaseGrid {
8204
8398
  skipSetGroupActive: true,
8205
8399
  }));
8206
8400
  this.doSetGroupAndPanelActive(group);
8401
+ this._onDidMovePanel.fire({
8402
+ panel: removedPanel,
8403
+ from: sourceGroup,
8404
+ });
8207
8405
  }
8208
8406
  }
8209
8407
  }
@@ -8228,9 +8426,6 @@ class DockviewComponent extends BaseGrid {
8228
8426
  }
8229
8427
  });
8230
8428
  this.doSetGroupAndPanelActive(to);
8231
- panels.forEach((panel) => {
8232
- this._onDidMovePanel.fire({ panel });
8233
- });
8234
8429
  }
8235
8430
  else {
8236
8431
  switch (from.api.location.type) {
@@ -8256,10 +8451,10 @@ class DockviewComponent extends BaseGrid {
8256
8451
  const referenceLocation = getGridLocation(to.element);
8257
8452
  const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
8258
8453
  this.gridview.addView(from, Sizing.Distribute, dropLocation);
8259
- from.panels.forEach((panel) => {
8260
- this._onDidMovePanel.fire({ panel });
8261
- });
8262
8454
  }
8455
+ from.panels.forEach((panel) => {
8456
+ this._onDidMovePanel.fire({ panel, from });
8457
+ });
8263
8458
  }
8264
8459
  doSetGroupActive(group) {
8265
8460
  super.doSetGroupActive(group);