dockview 1.4.1 → 1.5.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 (156) hide show
  1. package/README.md +4 -195
  2. package/dist/cjs/api/component.api.d.ts +8 -3
  3. package/dist/cjs/api/component.api.js +16 -4
  4. package/dist/cjs/api/component.api.js.map +1 -1
  5. package/dist/cjs/dnd/droptarget.d.ts +1 -2
  6. package/dist/cjs/dockview/components/tab/defaultTab.d.ts +1 -0
  7. package/dist/cjs/dockview/components/tab/defaultTab.js +6 -3
  8. package/dist/cjs/dockview/components/tab/defaultTab.js.map +1 -1
  9. package/dist/cjs/dockview/components/watermark/watermark.js +3 -1
  10. package/dist/cjs/dockview/components/watermark/watermark.js.map +1 -1
  11. package/dist/cjs/dockview/defaultGroupPanelView.d.ts +1 -5
  12. package/dist/cjs/dockview/defaultGroupPanelView.js +5 -20
  13. package/dist/cjs/dockview/defaultGroupPanelView.js.map +1 -1
  14. package/dist/cjs/dockview/deserializer.d.ts +0 -12
  15. package/dist/cjs/dockview/deserializer.js +0 -52
  16. package/dist/cjs/dockview/deserializer.js.map +1 -1
  17. package/dist/cjs/dockview/dockviewComponent.d.ts +6 -8
  18. package/dist/cjs/dockview/dockviewComponent.js +84 -58
  19. package/dist/cjs/dockview/dockviewComponent.js.map +1 -1
  20. package/dist/cjs/dockview/options.d.ts +11 -1
  21. package/dist/cjs/gridview/baseComponentGridview.d.ts +4 -2
  22. package/dist/cjs/gridview/baseComponentGridview.js +1 -1
  23. package/dist/cjs/gridview/baseComponentGridview.js.map +1 -1
  24. package/dist/cjs/gridview/gridviewComponent.d.ts +1 -0
  25. package/dist/cjs/gridview/gridviewComponent.js +26 -18
  26. package/dist/cjs/gridview/gridviewComponent.js.map +1 -1
  27. package/dist/cjs/groupview/groupview.d.ts +20 -18
  28. package/dist/cjs/groupview/groupview.js +44 -41
  29. package/dist/cjs/groupview/groupview.js.map +1 -1
  30. package/dist/cjs/groupview/groupviewPanel.d.ts +2 -2
  31. package/dist/cjs/groupview/groupviewPanel.js.map +1 -1
  32. package/dist/cjs/groupview/tab.d.ts +1 -0
  33. package/dist/cjs/groupview/tab.js +3 -1
  34. package/dist/cjs/groupview/tab.js.map +1 -1
  35. package/dist/cjs/groupview/titlebar/tabsContainer.d.ts +3 -5
  36. package/dist/cjs/groupview/titlebar/tabsContainer.js +3 -5
  37. package/dist/cjs/groupview/titlebar/tabsContainer.js.map +1 -1
  38. package/dist/cjs/groupview/types.d.ts +0 -4
  39. package/dist/cjs/index.d.ts +2 -0
  40. package/dist/cjs/index.js +1 -0
  41. package/dist/cjs/index.js.map +1 -1
  42. package/dist/cjs/paneview/defaultPaneviewHeader.d.ts +3 -0
  43. package/dist/cjs/paneview/defaultPaneviewHeader.js +32 -6
  44. package/dist/cjs/paneview/defaultPaneviewHeader.js.map +1 -1
  45. package/dist/cjs/paneview/draggablePaneviewPanel.d.ts +3 -1
  46. package/dist/cjs/paneview/draggablePaneviewPanel.js +24 -9
  47. package/dist/cjs/paneview/draggablePaneviewPanel.js.map +1 -1
  48. package/dist/cjs/paneview/options.d.ts +2 -0
  49. package/dist/cjs/paneview/paneviewComponent.d.ts +14 -1
  50. package/dist/cjs/paneview/paneviewComponent.js +32 -17
  51. package/dist/cjs/paneview/paneviewComponent.js.map +1 -1
  52. package/dist/cjs/react/deserializer.js +13 -5
  53. package/dist/cjs/react/deserializer.js.map +1 -1
  54. package/dist/cjs/react/dockview/defaultTab.d.ts +4 -0
  55. package/dist/cjs/react/dockview/defaultTab.js +73 -0
  56. package/dist/cjs/react/dockview/defaultTab.js.map +1 -0
  57. package/dist/cjs/react/dockview/dockview.d.ts +5 -3
  58. package/dist/cjs/react/dockview/dockview.js +45 -3
  59. package/dist/cjs/react/dockview/dockview.js.map +1 -1
  60. package/dist/cjs/react/dockview/groupControlsRenderer.d.ts +43 -0
  61. package/dist/cjs/react/dockview/groupControlsRenderer.js +87 -0
  62. package/dist/cjs/react/dockview/groupControlsRenderer.js.map +1 -0
  63. package/dist/cjs/react/dockview/reactContentPart.d.ts +1 -16
  64. package/dist/cjs/react/dockview/reactContentPart.js +2 -18
  65. package/dist/cjs/react/dockview/reactContentPart.js.map +1 -1
  66. package/dist/cjs/react/dockview/reactHeaderPart.d.ts +2 -0
  67. package/dist/cjs/react/dockview/reactHeaderPart.js +4 -0
  68. package/dist/cjs/react/dockview/reactHeaderPart.js.map +1 -1
  69. package/dist/cjs/react/index.d.ts +2 -2
  70. package/dist/cjs/react/index.js +1 -2
  71. package/dist/cjs/react/index.js.map +1 -1
  72. package/dist/cjs/react/paneview/paneview.d.ts +2 -0
  73. package/dist/cjs/react/paneview/paneview.js +9 -0
  74. package/dist/cjs/react/paneview/paneview.js.map +1 -1
  75. package/dist/cjs/react/react.d.ts +1 -0
  76. package/dist/cjs/react/react.js +12 -2
  77. package/dist/cjs/react/react.js.map +1 -1
  78. package/dist/cjs/react/svg.d.ts +3 -0
  79. package/dist/cjs/react/svg.js +36 -0
  80. package/dist/cjs/react/svg.js.map +1 -0
  81. package/dist/cjs/splitview/splitviewComponent.d.ts +2 -0
  82. package/dist/cjs/splitview/splitviewComponent.js +20 -17
  83. package/dist/cjs/splitview/splitviewComponent.js.map +1 -1
  84. package/dist/cjs/svg.d.ts +3 -0
  85. package/dist/cjs/svg.js +44 -0
  86. package/dist/cjs/svg.js.map +1 -0
  87. package/dist/dockview.amd.js +454 -204
  88. package/dist/dockview.amd.min.js +2 -2
  89. package/dist/dockview.amd.min.noStyle.js +2 -2
  90. package/dist/dockview.amd.noStyle.js +453 -203
  91. package/dist/dockview.cjs.js +454 -204
  92. package/dist/dockview.esm.js +449 -198
  93. package/dist/dockview.esm.min.js +2 -2
  94. package/dist/dockview.js +454 -204
  95. package/dist/dockview.min.js +2 -2
  96. package/dist/dockview.min.noStyle.js +2 -2
  97. package/dist/dockview.noStyle.js +453 -203
  98. package/dist/esm/api/component.api.d.ts +8 -3
  99. package/dist/esm/api/component.api.js +16 -4
  100. package/dist/esm/dnd/droptarget.d.ts +1 -2
  101. package/dist/esm/dockview/components/tab/defaultTab.d.ts +1 -0
  102. package/dist/esm/dockview/components/tab/defaultTab.js +5 -2
  103. package/dist/esm/dockview/components/watermark/watermark.js +3 -1
  104. package/dist/esm/dockview/defaultGroupPanelView.d.ts +1 -5
  105. package/dist/esm/dockview/defaultGroupPanelView.js +5 -16
  106. package/dist/esm/dockview/deserializer.d.ts +0 -12
  107. package/dist/esm/dockview/deserializer.js +1 -27
  108. package/dist/esm/dockview/dockviewComponent.d.ts +6 -8
  109. package/dist/esm/dockview/dockviewComponent.js +56 -41
  110. package/dist/esm/dockview/options.d.ts +11 -1
  111. package/dist/esm/gridview/baseComponentGridview.d.ts +4 -2
  112. package/dist/esm/gridview/baseComponentGridview.js +1 -1
  113. package/dist/esm/gridview/gridviewComponent.d.ts +1 -0
  114. package/dist/esm/gridview/gridviewComponent.js +15 -7
  115. package/dist/esm/groupview/groupview.d.ts +20 -18
  116. package/dist/esm/groupview/groupview.js +42 -40
  117. package/dist/esm/groupview/groupviewPanel.d.ts +2 -2
  118. package/dist/esm/groupview/tab.d.ts +1 -0
  119. package/dist/esm/groupview/tab.js +3 -1
  120. package/dist/esm/groupview/titlebar/tabsContainer.d.ts +3 -5
  121. package/dist/esm/groupview/titlebar/tabsContainer.js +3 -5
  122. package/dist/esm/groupview/types.d.ts +0 -4
  123. package/dist/esm/index.d.ts +2 -0
  124. package/dist/esm/index.js +1 -0
  125. package/dist/esm/paneview/defaultPaneviewHeader.d.ts +3 -0
  126. package/dist/esm/paneview/defaultPaneviewHeader.js +32 -6
  127. package/dist/esm/paneview/draggablePaneviewPanel.d.ts +3 -1
  128. package/dist/esm/paneview/draggablePaneviewPanel.js +24 -9
  129. package/dist/esm/paneview/options.d.ts +2 -0
  130. package/dist/esm/paneview/paneviewComponent.d.ts +14 -1
  131. package/dist/esm/paneview/paneviewComponent.js +17 -6
  132. package/dist/esm/react/deserializer.js +13 -5
  133. package/dist/esm/react/dockview/defaultTab.d.ts +4 -0
  134. package/dist/esm/react/dockview/defaultTab.js +34 -0
  135. package/dist/esm/react/dockview/dockview.d.ts +5 -3
  136. package/dist/esm/react/dockview/dockview.js +30 -1
  137. package/dist/esm/react/dockview/groupControlsRenderer.d.ts +43 -0
  138. package/dist/esm/react/dockview/groupControlsRenderer.js +68 -0
  139. package/dist/esm/react/dockview/reactContentPart.d.ts +1 -16
  140. package/dist/esm/react/dockview/reactContentPart.js +2 -14
  141. package/dist/esm/react/dockview/reactHeaderPart.d.ts +2 -0
  142. package/dist/esm/react/dockview/reactHeaderPart.js +4 -0
  143. package/dist/esm/react/index.d.ts +2 -2
  144. package/dist/esm/react/index.js +1 -2
  145. package/dist/esm/react/paneview/paneview.d.ts +2 -0
  146. package/dist/esm/react/paneview/paneview.js +9 -0
  147. package/dist/esm/react/react.d.ts +1 -0
  148. package/dist/esm/react/react.js +12 -2
  149. package/dist/esm/react/svg.d.ts +3 -0
  150. package/dist/esm/react/svg.js +7 -0
  151. package/dist/esm/splitview/splitviewComponent.d.ts +2 -0
  152. package/dist/esm/splitview/splitviewComponent.js +9 -6
  153. package/dist/esm/svg.d.ts +3 -0
  154. package/dist/esm/svg.js +31 -0
  155. package/dist/styles/dockview.css +158 -40
  156. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * dockview
3
- * @version 1.4.1
3
+ * @version 1.5.0
4
4
  * @link https://github.com/mathuo/dockview
5
5
  * @license MIT
6
6
  */
@@ -34,7 +34,7 @@ function styleInject(css, ref) {
34
34
  }
35
35
  }
36
36
 
37
- var css_248z = ".dockview-theme-dark {\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-tab-close-icon: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/></svg>');\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-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-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-tab-close-icon: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/></svg>');\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-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-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-tab-close-icon: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/></svg>');\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-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-activegroup-visiblepanel-tab-background-color: dodgerblue;\n --dv-tabs-and-actions-container-height: 18px;\n --dv-tabs-and-actions-container-font-size: 11px;\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container {\n border-bottom: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container {\n border-bottom: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.actions-bar {\n text-align: right;\n width: 28px;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n}\n.actions-bar .actions-container {\n display: flex;\n padding: 0px;\n margin: 0px;\n justify-content: flex-end;\n}\n.actions-bar .actions-container a:active {\n -webkit-mask-size: 100% 100% !important;\n mask-size: 100% 100% !important;\n}\n.actions-bar .actions-container .close-action {\n background-color: white;\n height: 16px;\n width: 16px;\n display: block;\n -webkit-mask: var(--dv-tab-close-icon) 50% 50%/90% 90% no-repeat;\n mask: var(--dv-tab-close-icon) 50% 50%/90% 90% no-repeat;\n margin-right: \"0.5em\";\n cursor: pointer;\n}\n.drop-target {\n position: relative;\n}\n.drop-target > .drop-target-dropzone {\n position: absolute;\n left: 0px;\n top: 0px;\n height: 100%;\n width: 100%;\n z-index: 10000;\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection {\n position: relative;\n box-sizing: border-box;\n height: 100%;\n width: 100%;\n background-color: var(--dv-drag-over-background-color);\n transition: top 70ms ease-out, left 70ms ease-out, width 70ms ease-out, height 70ms ease-out, opacity 0.15s ease-out;\n will-change: transform;\n pointer-events: none;\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.left {\n transform: translateX(-25%) scaleX(0.5);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.right {\n transform: translateX(25%) scaleX(0.5);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.top {\n transform: translateY(-25%) scaleY(0.5);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.bottom {\n transform: translateY(25%) scaleY(0.5);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-top {\n border-top: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-bottom {\n border-bottom: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-left {\n border-left: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-right {\n border-right: 1px solid var(--dv-drag-over-border-color);\n}\n.custom-dragging {\n height: 24px;\n line-height: 24px;\n font-size: 11px;\n width: 100px;\n background-color: dodgerblue;\n color: ghostwhite;\n border-radius: 11px;\n position: absolute;\n padding-left: 10px;\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.active-tab .tab-action {\n background-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.active-group > .tabs-and-actions-container > .tabs-container > .tab.inactive-tab .tab-action {\n background-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.active-tab .tab-action {\n background-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.groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.inactive-tab .tab-action {\n background-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.dragging {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.grid-view,\n.branch-node {\n height: 100%;\n width: 100%;\n}\n.groupview {\n display: flex;\n flex-direction: column;\n height: 100%;\n background-color: var(--dv-group-view-background-color);\n overflow: hidden;\n}\n.groupview:focus {\n outline: none;\n}\n.groupview.empty > .tabs-and-actions-container {\n display: none;\n}\n.groupview > .content-container {\n flex-grow: 1;\n overflow: hidden;\n outline: none;\n}\n.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}\n.pane-container .view .default-header > span {\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.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 .void-container {\n display: flex;\n flex-grow: 1;\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.dockview-react-part {\n height: 100%;\n width: 100%;\n}\n.split-view-container {\n position: relative;\n overflow: hidden;\n height: 100%;\n width: 100%;\n}\n.split-view-container.animation .view,\n.split-view-container.animation .sash {\n transition-duration: 0.15s;\n transition-timing-function: ease-out;\n}\n.split-view-container.horizontal {\n height: 100%;\n}\n.split-view-container.horizontal > .sash-container > .sash {\n height: 100%;\n width: 4px;\n}\n.split-view-container.horizontal > .sash-container > .sash.enabled {\n cursor: ew-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.horizontal > .sash-container > .sash.maximum {\n cursor: w-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.minimum {\n cursor: e-resize;\n}\n.split-view-container.horizontal > .view-container > .view:not(:first-child)::before {\n height: 100%;\n width: 1px;\n}\n.split-view-container.vertical {\n width: 100%;\n}\n.split-view-container.vertical > .sash-container > .sash {\n width: 100%;\n height: 4px;\n}\n.split-view-container.vertical > .sash-container > .sash.enabled {\n cursor: ns-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.vertical > .sash-container > .sash.maximum {\n cursor: n-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.minimum {\n cursor: s-resize;\n}\n.split-view-container.vertical > .view-container > .view {\n width: 100%;\n}\n.split-view-container.vertical > .view-container > .view:not(:first-child)::before {\n height: 1px;\n width: 100%;\n}\n.split-view-container .sash-container {\n height: 100%;\n width: 100%;\n position: absolute;\n}\n.split-view-container .sash-container .sash {\n position: absolute;\n z-index: 99;\n outline: none;\n}\n.split-view-container .sash-container .sash:active {\n transition: background-color 0.1s ease-in-out;\n background-color: var(--dv-active-sash-color, transparent);\n}\n.split-view-container .sash-container .sash:hover {\n background-color: var(--dv-active-sash-color, transparent);\n transition: background-color 0.1s ease-in-out;\n transition-delay: 0.5s;\n}\n.split-view-container .view-container {\n position: relative;\n height: 100%;\n width: 100%;\n}\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.dragged {\n transform: translate3d(0px, 0px, 0px);\n /* 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.dragging .tab-action {\n background-color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.tab.active-tab > .default-tab .tab-action {\n visibility: visible;\n}\n.tab.inactive-tab > .default-tab .tab-action {\n visibility: hidden;\n}\n.tab.inactive-tab > .default-tab:hover .tab-action {\n visibility: visible;\n}\n.tab .default-tab {\n position: relative;\n height: 100%;\n display: flex;\n min-width: 80px;\n align-items: center;\n padding-left: 10px;\n white-space: nowrap;\n text-overflow: elipsis;\n}\n.tab .default-tab .tab-content {\n flex-grow: 1;\n}\n.tab .default-tab .action-container {\n text-align: right;\n width: 28px;\n display: flex;\n}\n.tab .default-tab .action-container .tab-list {\n display: flex;\n padding: 0px;\n margin: 0px;\n justify-content: flex-end;\n}\n.tab .default-tab .action-container .tab-list a:active:hover {\n -webkit-mask-size: 100% 100% !important;\n mask-size: 100% 100% !important;\n}\n.tab .default-tab .action-container .tab-list .tab-action {\n height: 16px;\n width: 16px;\n display: block;\n -webkit-mask: var(--dv-tab-close-icon) 50% 50%/90% 90% no-repeat;\n mask: var(--dv-tab-close-icon) 50% 50%/90% 90% no-repeat;\n margin-right: \"0.5em\";\n}\n.tab .default-tab .action-container .tab-list .tab-action.disable-close {\n display: none;\n}\n.watermark {\n display: flex;\n width: 100%;\n}\n.watermark.has-actions .watermark-title .actions-bar {\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}";
37
+ var css_248z = ".dockview-svg {\n display: inline-block;\n fill: currentcolor;\n line-height: 1;\n stroke: currentcolor;\n stroke-width: 0;\n}\n.dockview-theme-dark {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n}\n\n.dockview-theme-light {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-group-view-background-color: white;\n --dv-tabs-and-actions-container-background-color: #f3f3f3;\n --dv-activegroup-visiblepanel-tab-background-color: white;\n --dv-activegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-inactivegroup-visiblepanel-tab-background-color: white;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-tab-divider-color: white;\n --dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-activegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.35);\n --dv-separator-border: rgba(128, 128, 128, 0.35);\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n}\n\n.dockview-theme-vs {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n --dv-tabs-and-actions-container-background-color: #2d2d30;\n --dv-tabs-and-actions-container-height: 20px;\n --dv-tabs-and-actions-container-font-size: 11px;\n --dv-activegroup-visiblepanel-tab-background-color: #007acc;\n --dv-inactivegroup-visiblepanel-tab-background-color: #3f3f46;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: white;\n --dv-inactivegroup-visiblepanel-tab-color: white;\n --dv-inactivegroup-hiddenpanel-tab-color: white;\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-activegroup-hiddenpanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n}\n\n.dockview-theme-abyss {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-group-view-background-color: #000c18;\n --dv-tabs-and-actions-container-background-color: #1c1c2a;\n --dv-activegroup-visiblepanel-tab-background-color: #000c18;\n --dv-activegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #000c18;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-tab-divider-color: #2b2b4a;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.25);\n --dv-separator-border: #2b2b4a;\n --dv-paneview-header-border-color: #2b2b4a;\n --dv-paneview-active-outline-color: #596f99;\n}\n\n.dockview-theme-dracula {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-group-view-background-color: #282a36;\n --dv-tabs-and-actions-container-background-color: #191a21;\n --dv-activegroup-visiblepanel-tab-background-color: #282a36;\n --dv-activegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #282a36;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-tab-divider-color: #191a21;\n --dv-activegroup-visiblepanel-tab-color: rgb(248, 248, 242);\n --dv-activegroup-hiddenpanel-tab-color: rgb(98, 114, 164);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(248, 248, 242, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(98, 114, 164, 0.5);\n --dv-separator-border: #bd93f9;\n --dv-paneview-header-border-color: #bd93f9;\n --dv-paneview-active-outline-color: #6272a4;\n}\n.dockview-theme-dracula .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab::after {\n position: absolute;\n left: 0px;\n top: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #94527e;\n z-index: 999;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #5e3d5a;\n z-index: 999;\n}\n.actions-bar {\n text-align: right;\n width: 28px;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n}\n.actions-bar .actions-container {\n display: flex;\n padding: 0px;\n margin: 0px;\n justify-content: flex-end;\n}\n.actions-bar .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.actions-bar .actions-container .close-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-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: 10000;\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection {\n position: relative;\n box-sizing: border-box;\n height: 100%;\n width: 100%;\n background-color: var(--dv-drag-over-background-color);\n transition: top 70ms ease-out, left 70ms ease-out, width 70ms ease-out, height 70ms ease-out, opacity 0.15s ease-out;\n will-change: transform;\n pointer-events: none;\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.left {\n transform: translateX(-25%) scaleX(0.5);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.right {\n transform: translateX(25%) scaleX(0.5);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.top {\n transform: translateY(-25%) scaleY(0.5);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.bottom {\n transform: translateY(25%) scaleY(0.5);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-top {\n border-top: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-bottom {\n border-bottom: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-left {\n border-left: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-right {\n border-right: 1px solid var(--dv-drag-over-border-color);\n}\n.custom-dragging {\n height: 24px;\n line-height: 24px;\n font-size: 11px;\n width: 100px;\n background-color: dodgerblue;\n color: ghostwhite;\n border-radius: 11px;\n position: absolute;\n padding-left: 10px;\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.dragging {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.grid-view,\n.branch-node {\n height: 100%;\n width: 100%;\n}\n.groupview {\n display: flex;\n flex-direction: column;\n height: 100%;\n background-color: var(--dv-group-view-background-color);\n overflow: hidden;\n}\n.groupview:focus {\n outline: none;\n}\n.groupview.empty > .tabs-and-actions-container {\n display: none;\n}\n.groupview > .content-container {\n flex-grow: 1;\n overflow: hidden;\n outline: none;\n}\n.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.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 .void-container {\n display: flex;\n flex-grow: 1;\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.tab .dockview-react-tab {\n display: flex;\n padding: 0px 8px;\n align-items: center;\n height: 100%;\n}\n.tab .dockview-react-tab .dockview-react-tab-title {\n padding: 0px 8px;\n flex-grow: 1;\n}\n.tab .dockview-react-tab .dockview-react-tab-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n}\n.tab .dockview-react-tab .dockview-react-tab-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}\n.tab.inactive-tab:not(:hover) .dockview-react-tab-action {\n visibility: hidden;\n}\n.dockview-react-part {\n height: 100%;\n width: 100%;\n}\n.split-view-container {\n position: relative;\n overflow: hidden;\n height: 100%;\n width: 100%;\n}\n.split-view-container.animation .view,\n.split-view-container.animation .sash {\n transition-duration: 0.15s;\n transition-timing-function: ease-out;\n}\n.split-view-container.horizontal {\n height: 100%;\n}\n.split-view-container.horizontal > .sash-container > .sash {\n height: 100%;\n width: 4px;\n}\n.split-view-container.horizontal > .sash-container > .sash.enabled {\n cursor: ew-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.horizontal > .sash-container > .sash.maximum {\n cursor: w-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.minimum {\n cursor: e-resize;\n}\n.split-view-container.horizontal > .view-container > .view:not(:first-child)::before {\n height: 100%;\n width: 1px;\n}\n.split-view-container.vertical {\n width: 100%;\n}\n.split-view-container.vertical > .sash-container > .sash {\n width: 100%;\n height: 4px;\n}\n.split-view-container.vertical > .sash-container > .sash.enabled {\n cursor: ns-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.vertical > .sash-container > .sash.maximum {\n cursor: n-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.minimum {\n cursor: s-resize;\n}\n.split-view-container.vertical > .view-container > .view {\n width: 100%;\n}\n.split-view-container.vertical > .view-container > .view:not(:first-child)::before {\n height: 1px;\n width: 100%;\n}\n.split-view-container .sash-container {\n height: 100%;\n width: 100%;\n position: absolute;\n}\n.split-view-container .sash-container .sash {\n position: absolute;\n z-index: 99;\n outline: none;\n}\n.split-view-container .sash-container .sash:active {\n transition: background-color 0.1s ease-in-out;\n background-color: var(--dv-active-sash-color, transparent);\n}\n.split-view-container .sash-container .sash:hover {\n background-color: var(--dv-active-sash-color, transparent);\n transition: background-color 0.1s ease-in-out;\n transition-delay: 0.5s;\n}\n.split-view-container .view-container {\n position: relative;\n height: 100%;\n width: 100%;\n}\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.dragged {\n transform: translate3d(0px, 0px, 0px);\n /* 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.dragging .tab-action {\n background-color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.tab.active-tab > .default-tab .tab-action {\n visibility: visible;\n}\n.tab.inactive-tab > .default-tab .tab-action {\n visibility: hidden;\n}\n.tab.inactive-tab > .default-tab:hover .tab-action {\n visibility: visible;\n}\n.tab .default-tab {\n position: relative;\n height: 100%;\n display: flex;\n min-width: 80px;\n align-items: center;\n padding: 0px 8px;\n white-space: nowrap;\n text-overflow: elipsis;\n}\n.tab .default-tab .tab-content {\n padding: 0px 8px;\n flex-grow: 1;\n}\n.tab .default-tab .action-container {\n text-align: right;\n display: flex;\n}\n.tab .default-tab .action-container .tab-list {\n display: flex;\n padding: 0px;\n margin: 0px;\n justify-content: flex-end;\n}\n.tab .default-tab .action-container .tab-list .tab-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n}\n.tab .default-tab .action-container .tab-list .tab-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}\n.tab .default-tab .action-container .tab-list .tab-action.disable-close {\n display: none;\n}\n.watermark {\n display: flex;\n width: 100%;\n}\n.watermark.has-actions .watermark-title .actions-bar {\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}";
38
38
  styleInject(css_248z);
39
39
 
40
40
  class TransferObject {
@@ -2304,6 +2304,9 @@ class SplitviewApi {
2304
2304
  toJSON() {
2305
2305
  return this.component.toJSON();
2306
2306
  }
2307
+ clear() {
2308
+ this.component.clear();
2309
+ }
2307
2310
  }
2308
2311
  class PaneviewApi {
2309
2312
  constructor(component) {
@@ -2371,6 +2374,9 @@ class PaneviewApi {
2371
2374
  toJSON() {
2372
2375
  return this.component.toJSON();
2373
2376
  }
2377
+ clear() {
2378
+ this.component.clear();
2379
+ }
2374
2380
  }
2375
2381
  class GridviewApi {
2376
2382
  constructor(component) {
@@ -2397,13 +2403,13 @@ class GridviewApi {
2397
2403
  get onDidLayoutChange() {
2398
2404
  return this.component.onDidLayoutChange;
2399
2405
  }
2400
- get onDidAddGroup() {
2406
+ get onDidAddPanel() {
2401
2407
  return this.component.onDidAddGroup;
2402
2408
  }
2403
- get onDidRemoveGroup() {
2409
+ get onDidRemovePanel() {
2404
2410
  return this.component.onDidRemoveGroup;
2405
2411
  }
2406
- get onDidActiveGroupChange() {
2412
+ get onDidActivePanelChange() {
2407
2413
  return this.component.onDidActiveGroupChange;
2408
2414
  }
2409
2415
  get onDidLayoutFromJSON() {
@@ -2442,6 +2448,9 @@ class GridviewApi {
2442
2448
  toJSON() {
2443
2449
  return this.component.toJSON();
2444
2450
  }
2451
+ clear() {
2452
+ this.component.clear();
2453
+ }
2445
2454
  }
2446
2455
  class DockviewApi {
2447
2456
  constructor(component) {
@@ -2490,7 +2499,7 @@ class DockviewApi {
2490
2499
  return this.component.onDidRemovePanel;
2491
2500
  }
2492
2501
  get onDidLayoutFromJSON() {
2493
- return this.component.onDidLayoutfromJSON;
2502
+ return this.component.onDidLayoutFromJSON;
2494
2503
  }
2495
2504
  get onDidLayoutChange() {
2496
2505
  return this.component.onDidLayoutChange;
@@ -2552,6 +2561,9 @@ class DockviewApi {
2552
2561
  toJSON() {
2553
2562
  return this.component.toJSON();
2554
2563
  }
2564
+ clear() {
2565
+ this.component.clear();
2566
+ }
2555
2567
  }
2556
2568
 
2557
2569
  class ContentContainer extends CompositeDisposable {
@@ -2676,6 +2688,7 @@ class Tab extends CompositeDisposable {
2676
2688
  constructor(panelId, accessor, group) {
2677
2689
  super();
2678
2690
  this.panelId = panelId;
2691
+ this.accessor = accessor;
2679
2692
  this.group = group;
2680
2693
  this._onChanged = new Emitter();
2681
2694
  this.onChanged = this._onChanged.event;
@@ -2686,6 +2699,7 @@ class Tab extends CompositeDisposable {
2686
2699
  this._element.className = 'tab';
2687
2700
  this._element.tabIndex = 0;
2688
2701
  this._element.draggable = true;
2702
+ toggleClass(this.element, 'inactive-tab', true);
2689
2703
  this.addDisposables(new (class Handler extends DragHandler {
2690
2704
  constructor() {
2691
2705
  super(...arguments);
@@ -2725,7 +2739,7 @@ class Tab extends CompositeDisposable {
2725
2739
  validOverlays: 'none',
2726
2740
  canDisplayOverlay: (event) => {
2727
2741
  const data = getPanelData();
2728
- if (data) {
2742
+ if (data && this.accessor.id === data.viewId) {
2729
2743
  return this.panelId !== data.panelId;
2730
2744
  }
2731
2745
  return this.group.model.canDisplayOverlay(event, DockviewDropTargets.Tab);
@@ -2762,7 +2776,6 @@ class TabsContainer extends CompositeDisposable {
2762
2776
  this.group = group;
2763
2777
  this.tabs = [];
2764
2778
  this.selectedIndex = -1;
2765
- this.active = false;
2766
2779
  this._hidden = false;
2767
2780
  this._onDrop = new Emitter();
2768
2781
  this.onDrop = this._onDrop.event;
@@ -2784,7 +2797,7 @@ class TabsContainer extends CompositeDisposable {
2784
2797
  canDisplayOverlay: (event) => {
2785
2798
  var _a;
2786
2799
  const data = getPanelData();
2787
- if (data) {
2800
+ if (data && this.accessor.id === data.viewId) {
2788
2801
  // don't show the overlay if the tab being dragged is the last panel of this group
2789
2802
  return ((_a = last(this.tabs)) === null || _a === void 0 ? void 0 : _a.value.panelId) !== data.panelId;
2790
2803
  }
@@ -2866,8 +2879,8 @@ class TabsContainer extends CompositeDisposable {
2866
2879
  indexOf(id) {
2867
2880
  return this.tabs.findIndex((tab) => tab.value.panelId === id);
2868
2881
  }
2869
- setActive(isGroupActive) {
2870
- this.active = isGroupActive;
2882
+ setActive(_isGroupActive) {
2883
+ // noop
2871
2884
  }
2872
2885
  addTab(tab, index = this.tabs.length) {
2873
2886
  if (index < 0 || index > this.tabs.length) {
@@ -2928,7 +2941,6 @@ class TabsContainer extends CompositeDisposable {
2928
2941
  }));
2929
2942
  const value = { value: tabToAdd, disposable };
2930
2943
  this.addTab(value, index);
2931
- this.activePanel = panel;
2932
2944
  }
2933
2945
  closePanel(panel) {
2934
2946
  this.delete(panel.id);
@@ -2942,12 +2954,6 @@ class TabsContainer extends CompositeDisposable {
2942
2954
  }
2943
2955
  }
2944
2956
 
2945
- var GroupChangeKind2;
2946
- (function (GroupChangeKind2) {
2947
- GroupChangeKind2["ADD_PANEL"] = "ADD_PANEL";
2948
- GroupChangeKind2["REMOVE_PANEL"] = "REMOVE_PANEL";
2949
- GroupChangeKind2["PANEL_ACTIVE"] = "PANEL_ACTIVE";
2950
- })(GroupChangeKind2 || (GroupChangeKind2 = {}));
2951
2957
  class Groupview extends CompositeDisposable {
2952
2958
  constructor(container, accessor, id, options, parent) {
2953
2959
  super();
@@ -2966,12 +2972,15 @@ class Groupview extends CompositeDisposable {
2966
2972
  this._panels = [];
2967
2973
  this._onMove = new Emitter();
2968
2974
  this.onMove = this._onMove.event;
2969
- this._onDidGroupChange = new Emitter();
2970
- this.onDidGroupChange = this._onDidGroupChange.event;
2971
2975
  this._onDidDrop = new Emitter();
2972
2976
  this.onDidDrop = this._onDidDrop.event;
2977
+ this._onDidAddPanel = new Emitter();
2978
+ this.onDidAddPanel = this._onDidAddPanel.event;
2979
+ this._onDidRemovePanel = new Emitter();
2980
+ this.onDidRemovePanel = this._onDidRemovePanel.event;
2981
+ this._onDidActivePanelChange = new Emitter();
2982
+ this.onDidActivePanelChange = this._onDidActivePanelChange.event;
2973
2983
  this.container.classList.add('groupview');
2974
- this.addDisposables(this._onMove, this._onDidGroupChange, this._onDidChange, this._onDidDrop);
2975
2984
  this.tabsContainer = new TabsContainer(this.accessor, this.parent, {
2976
2985
  tabHeight: options.tabHeight,
2977
2986
  });
@@ -2983,7 +2992,7 @@ class Groupview extends CompositeDisposable {
2983
2992
  return false;
2984
2993
  }
2985
2994
  const data = getPanelData();
2986
- if (data) {
2995
+ if (data && data.viewId === this.accessor.id) {
2987
2996
  const groupHasOnePanelAndIsActiveDragElement = this._panels.length === 1 && data.groupId === this.id;
2988
2997
  return !groupHasOnePanelAndIsActiveDragElement;
2989
2998
  }
@@ -2993,7 +3002,7 @@ class Groupview extends CompositeDisposable {
2993
3002
  container.append(this.tabsContainer.element, this.contentContainer.element);
2994
3003
  this.header.hidden = !!options.hideHeader;
2995
3004
  this.locked = !!options.locked;
2996
- this.addDisposables(this._onMove, this._onDidGroupChange, this.tabsContainer.onDrop((event) => {
3005
+ this.addDisposables(this._onMove, this._onDidChange, this._onDidDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange, this.tabsContainer.onDrop((event) => {
2997
3006
  this.handleDropEvent(event.event, Position.Center, event.index);
2998
3007
  }), this.contentContainer.onDidFocus(() => {
2999
3008
  this.accessor.doSetGroupActive(this.parent, true);
@@ -3065,6 +3074,15 @@ class Groupview extends CompositeDisposable {
3065
3074
  // correctly initialized
3066
3075
  this.setActive(this.isActive, true, true);
3067
3076
  this.updateContainer();
3077
+ if (this.accessor.options.createGroupControlElement) {
3078
+ this._control = this.accessor.options.createGroupControlElement(this.parent);
3079
+ this.addDisposables(this._control);
3080
+ this._control.init({
3081
+ containerApi: new DockviewApi(this.accessor),
3082
+ api: this.parent.api,
3083
+ });
3084
+ this.tabsContainer.setActionElement(this._control.element);
3085
+ }
3068
3086
  }
3069
3087
  indexOf(panel) {
3070
3088
  return this.tabsContainer.indexOf(panel.id);
@@ -3145,16 +3163,21 @@ class Groupview extends CompositeDisposable {
3145
3163
  options.index > this.panels.length) {
3146
3164
  options.index = this.panels.length;
3147
3165
  }
3148
- const skipSetActive = !!options.skipSetActive;
3166
+ const skipSetPanelActive = !!options.skipSetPanelActive;
3167
+ const skipSetGroupActive = !!options.skipSetGroupActive;
3149
3168
  // ensure the group is updated before we fire any events
3150
3169
  panel.updateParentGroup(this.parent, true);
3151
- if (!skipSetActive && this._activePanel === panel) {
3152
- this.accessor.doSetGroupActive(this.parent);
3170
+ if (this._activePanel === panel) {
3171
+ if (!skipSetGroupActive) {
3172
+ this.accessor.doSetGroupActive(this.parent);
3173
+ }
3153
3174
  return;
3154
3175
  }
3155
- this.doAddPanel(panel, options.index);
3156
- if (!skipSetActive) {
3176
+ this.doAddPanel(panel, options.index, skipSetPanelActive);
3177
+ if (!skipSetPanelActive) {
3157
3178
  this.doSetActivePanel(panel);
3179
+ }
3180
+ if (!skipSetGroupActive) {
3158
3181
  this.accessor.doSetGroupActive(this.parent, !!options.skipFocus);
3159
3182
  }
3160
3183
  this.updateContainer();
@@ -3190,14 +3213,8 @@ class Groupview extends CompositeDisposable {
3190
3213
  isPanelActive(panel) {
3191
3214
  return this._activePanel === panel;
3192
3215
  }
3193
- updateActions() {
3194
- var _a, _b;
3195
- if (this.isActive && ((_b = (_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.view) === null || _b === void 0 ? void 0 : _b.actions)) {
3196
- this.tabsContainer.setActionElement(this._activePanel.view.actions.element);
3197
- }
3198
- else {
3199
- this.tabsContainer.setActionElement(undefined);
3200
- }
3216
+ updateActions(element) {
3217
+ this.tabsContainer.setActionElement(element);
3201
3218
  }
3202
3219
  setActive(isGroupActive, skipFocus = false, force = false) {
3203
3220
  var _a, _b;
@@ -3253,16 +3270,15 @@ class Groupview extends CompositeDisposable {
3253
3270
  if (this.mostRecentlyUsed.includes(panel)) {
3254
3271
  this.mostRecentlyUsed.splice(this.mostRecentlyUsed.indexOf(panel), 1);
3255
3272
  }
3256
- this._onDidGroupChange.fire({
3257
- kind: GroupChangeKind2.REMOVE_PANEL,
3258
- panel,
3259
- });
3273
+ this._onDidRemovePanel.fire({ panel });
3260
3274
  }
3261
- doAddPanel(panel, index = this.panels.length) {
3275
+ doAddPanel(panel, index = this.panels.length, skipSetActive = false) {
3262
3276
  const existingPanel = this._panels.indexOf(panel);
3263
3277
  const hasExistingPanel = existingPanel > -1;
3264
3278
  this.tabsContainer.openPanel(panel, index);
3265
- this.contentContainer.openPanel(panel);
3279
+ if (!skipSetActive) {
3280
+ this.contentContainer.openPanel(panel);
3281
+ }
3266
3282
  this.tabsContainer.show();
3267
3283
  this.contentContainer.show();
3268
3284
  if (hasExistingPanel) {
@@ -3271,10 +3287,7 @@ class Groupview extends CompositeDisposable {
3271
3287
  }
3272
3288
  this.updateMru(panel);
3273
3289
  this.panels.splice(index, 0, panel);
3274
- this._onDidGroupChange.fire({
3275
- kind: GroupChangeKind2.ADD_PANEL,
3276
- panel,
3277
- });
3290
+ this._onDidAddPanel.fire({ panel });
3278
3291
  }
3279
3292
  doSetActivePanel(panel) {
3280
3293
  this._activePanel = panel;
@@ -3282,10 +3295,7 @@ class Groupview extends CompositeDisposable {
3282
3295
  this.tabsContainer.setActivePanel(panel);
3283
3296
  panel.layout(this._width, this._height);
3284
3297
  this.updateMru(panel);
3285
- this._onDidGroupChange.fire({
3286
- kind: GroupChangeKind2.PANEL_ACTIVE,
3287
- panel,
3288
- });
3298
+ this._onDidActivePanelChange.fire({ panel });
3289
3299
  }
3290
3300
  }
3291
3301
  updateMru(panel) {
@@ -3295,7 +3305,6 @@ class Groupview extends CompositeDisposable {
3295
3305
  this.mostRecentlyUsed = [panel, ...this.mostRecentlyUsed];
3296
3306
  }
3297
3307
  updateContainer() {
3298
- this.updateActions();
3299
3308
  toggleClass(this.container, 'empty', this.isEmpty);
3300
3309
  this.panels.forEach((panel) => panel.updateParentGroup(this.parent, this.isActive));
3301
3310
  if (this.isEmpty && !this.watermark) {
@@ -3328,7 +3337,12 @@ class Groupview extends CompositeDisposable {
3328
3337
  canDisplayOverlay(event, target) {
3329
3338
  // custom overlay handler
3330
3339
  if (this.accessor.options.showDndOverlay) {
3331
- return this.accessor.options.showDndOverlay(event, target);
3340
+ return this.accessor.options.showDndOverlay({
3341
+ nativeEvent: event,
3342
+ target,
3343
+ group: this.accessor.getPanel(this.id),
3344
+ getData: getPanelData,
3345
+ });
3332
3346
  }
3333
3347
  return false;
3334
3348
  }
@@ -3376,7 +3390,7 @@ class Groupview extends CompositeDisposable {
3376
3390
  }
3377
3391
  }
3378
3392
 
3379
- const nextLayoutId = sequentialNumberGenerator();
3393
+ const nextLayoutId$1 = sequentialNumberGenerator();
3380
3394
  function toTarget(direction) {
3381
3395
  switch (direction) {
3382
3396
  case 'left':
@@ -3396,7 +3410,7 @@ class BaseGrid extends CompositeDisposable {
3396
3410
  constructor(_element, options) {
3397
3411
  super();
3398
3412
  this._element = _element;
3399
- this._id = nextLayoutId.next();
3413
+ this._id = nextLayoutId$1.next();
3400
3414
  this._groups = new Map();
3401
3415
  this._onDidLayoutChange = new Emitter();
3402
3416
  this.onDidLayoutChange = this._onDidLayoutChange.event;
@@ -3411,7 +3425,7 @@ class BaseGrid extends CompositeDisposable {
3411
3425
  this.element.appendChild(this.gridview.element);
3412
3426
  this.layout(0, 0, true); // set some elements height/widths
3413
3427
  this.addDisposables(this.gridview.onDidChange(() => {
3414
- this._onDidLayoutChange.fire();
3428
+ this._bufferOnDidLayoutChange.fire();
3415
3429
  }));
3416
3430
  this.addDisposables(Event.any(this.onDidAddGroup, this.onDidRemoveGroup, this.onDidActiveGroupChange)(() => {
3417
3431
  this._bufferOnDidLayoutChange.fire();
@@ -3856,6 +3870,38 @@ class ActionContainer {
3856
3870
  }
3857
3871
  }
3858
3872
 
3873
+ const createSvgElementFromPath = (params) => {
3874
+ const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
3875
+ svg.setAttributeNS(null, 'height', params.height);
3876
+ svg.setAttributeNS(null, 'width', params.width);
3877
+ svg.setAttributeNS(null, 'viewBox', params.viewbox);
3878
+ svg.setAttributeNS(null, 'aria-hidden', 'false');
3879
+ svg.setAttributeNS(null, 'focusable', 'false');
3880
+ svg.classList.add('dockview-svg');
3881
+ const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
3882
+ path.setAttributeNS(null, 'd', params.path);
3883
+ svg.appendChild(path);
3884
+ return svg;
3885
+ };
3886
+ const createCloseButton = () => createSvgElementFromPath({
3887
+ width: '11',
3888
+ height: '11',
3889
+ viewbox: '0 0 28 28',
3890
+ path: 'M2.1 27.3L0 25.2L11.55 13.65L0 2.1L2.1 0L13.65 11.55L25.2 0L27.3 2.1L15.75 13.65L27.3 25.2L25.2 27.3L13.65 15.75L2.1 27.3Z',
3891
+ });
3892
+ const createExpandMoreButton = () => createSvgElementFromPath({
3893
+ width: '11',
3894
+ height: '11',
3895
+ viewbox: '0 0 24 15',
3896
+ path: 'M12 14.15L0 2.15L2.15 0L12 9.9L21.85 0.0499992L24 2.2L12 14.15Z',
3897
+ });
3898
+ const createChevronRightButton = () => createSvgElementFromPath({
3899
+ width: '11',
3900
+ height: '11',
3901
+ viewbox: '0 0 15 25',
3902
+ path: 'M2.15 24.1L0 21.95L9.9 12.05L0 2.15L2.15 0L14.2 12.05L2.15 24.1Z',
3903
+ });
3904
+
3859
3905
  class Watermark extends CompositeDisposable {
3860
3906
  constructor() {
3861
3907
  super();
@@ -3872,8 +3918,9 @@ class Watermark extends CompositeDisposable {
3872
3918
  const actions = new ActionContainer();
3873
3919
  title.appendChild(emptySpace);
3874
3920
  title.appendChild(actions.element);
3875
- const closeAnchor = document.createElement('a');
3921
+ const closeAnchor = document.createElement('div');
3876
3922
  closeAnchor.className = 'close-action';
3923
+ closeAnchor.appendChild(createCloseButton());
3877
3924
  actions.add(closeAnchor);
3878
3925
  this.addDisposables(addDisposableListener(closeAnchor, 'click', (ev) => {
3879
3926
  var _a;
@@ -3921,34 +3968,6 @@ class Watermark extends CompositeDisposable {
3921
3968
  }
3922
3969
  }
3923
3970
 
3924
- class DefaultDeserializer {
3925
- constructor(layout, panelDeserializer) {
3926
- this.layout = layout;
3927
- this.panelDeserializer = panelDeserializer;
3928
- }
3929
- fromJSON(node) {
3930
- const data = node.data;
3931
- const children = data.views;
3932
- const active = data.activeView;
3933
- const group = this.layout.createGroup({
3934
- id: data.id,
3935
- locked: !!data.locked,
3936
- hideHeader: !!data.hideHeader,
3937
- });
3938
- for (const child of children) {
3939
- const panel = this.panelDeserializer.createPanel(child, group);
3940
- const isActive = typeof active === 'string' && active === panel.id;
3941
- group.model.openPanel(panel, {
3942
- skipSetActive: !isActive,
3943
- });
3944
- }
3945
- if (!group.activePanel && group.panels.length > 0) {
3946
- group.model.openPanel(group.panels[group.panels.length - 1]);
3947
- }
3948
- return group;
3949
- }
3950
- }
3951
-
3952
3971
  function createComponent(id, componentName, components = {}, frameworkComponents = {}, createFrameworkComponent, fallback) {
3953
3972
  const Component = typeof componentName === 'string'
3954
3973
  ? components[componentName]
@@ -3974,6 +3993,7 @@ function createComponent(id, componentName, components = {}, frameworkComponents
3974
3993
  return new Component(id, componentName);
3975
3994
  }
3976
3995
 
3996
+ const DEFAULT_TAB_IDENTIFIER = '__default__tab__';
3977
3997
  class DefaultTab extends CompositeDisposable {
3978
3998
  constructor() {
3979
3999
  super();
@@ -3993,8 +4013,9 @@ class DefaultTab extends CompositeDisposable {
3993
4013
  this._list = document.createElement('ul');
3994
4014
  this._list.className = 'tab-list';
3995
4015
  //
3996
- this.action = document.createElement('a');
4016
+ this.action = document.createElement('div');
3997
4017
  this.action.className = 'tab-action';
4018
+ this.action.appendChild(createCloseButton());
3998
4019
  //
3999
4020
  this._element.appendChild(this._content);
4000
4021
  this._element.appendChild(this._actionContainer);
@@ -4010,7 +4031,7 @@ class DefaultTab extends CompositeDisposable {
4010
4031
  return this._element;
4011
4032
  }
4012
4033
  get id() {
4013
- return '__DEFAULT_TAB__';
4034
+ return DEFAULT_TAB_IDENTIFIER;
4014
4035
  }
4015
4036
  update(event) {
4016
4037
  this.params = Object.assign(Object.assign({}, this.params), event.params);
@@ -4327,16 +4348,6 @@ class DefaultGroupPanelView {
4327
4348
  var _a;
4328
4349
  this._content = renderers.content;
4329
4350
  this._tab = (_a = renderers.tab) !== null && _a !== void 0 ? _a : new DefaultTab();
4330
- this._actions =
4331
- renderers.actions ||
4332
- (this.content.actions
4333
- ? {
4334
- element: this.content.actions,
4335
- dispose: () => {
4336
- //
4337
- },
4338
- }
4339
- : undefined);
4340
4351
  }
4341
4352
  get content() {
4342
4353
  return this._content;
@@ -4344,9 +4355,6 @@ class DefaultGroupPanelView {
4344
4355
  get tab() {
4345
4356
  return this._tab;
4346
4357
  }
4347
- get actions() {
4348
- return this._actions;
4349
- }
4350
4358
  init(params) {
4351
4359
  this.content.init(Object.assign(Object.assign({}, params), { tab: this.tab }));
4352
4360
  this.tab.init(params);
@@ -4364,16 +4372,18 @@ class DefaultGroupPanelView {
4364
4372
  this.tab.update(event);
4365
4373
  }
4366
4374
  toJSON() {
4375
+ let tab = this.tab instanceof DefaultTab ? undefined : this.tab.toJSON();
4376
+ if (tab && Object.keys(tab).length === 0) {
4377
+ tab = undefined;
4378
+ }
4367
4379
  return {
4368
4380
  content: this.content.toJSON(),
4369
- tab: this.tab instanceof DefaultTab ? undefined : this.tab.toJSON(),
4381
+ tab,
4370
4382
  };
4371
4383
  }
4372
4384
  dispose() {
4373
- var _a;
4374
4385
  this.content.dispose();
4375
4386
  this.tab.dispose();
4376
- (_a = this.actions) === null || _a === void 0 ? void 0 : _a.dispose();
4377
4387
  }
4378
4388
  }
4379
4389
 
@@ -4385,9 +4395,6 @@ class DockviewComponent extends BaseGrid {
4385
4395
  orientation: options.orientation || Orientation.HORIZONTAL,
4386
4396
  styles: options.styles,
4387
4397
  });
4388
- // events
4389
- this._onTabInteractionEvent = new Emitter();
4390
- this.onTabInteractionEvent = this._onTabInteractionEvent.event;
4391
4398
  this._onTabContextMenu = new Emitter();
4392
4399
  this.onTabContextMenu = this._onTabContextMenu.event;
4393
4400
  this._onDidDrop = new Emitter();
@@ -4396,11 +4403,11 @@ class DockviewComponent extends BaseGrid {
4396
4403
  this.onDidRemovePanel = this._onDidRemovePanel.event;
4397
4404
  this._onDidAddPanel = new Emitter();
4398
4405
  this.onDidAddPanel = this._onDidAddPanel.event;
4399
- this._onDidLayoutfromJSON = new Emitter();
4400
- this.onDidLayoutfromJSON = this._onDidLayoutfromJSON.event;
4406
+ this._onDidLayoutFromJSON = new Emitter();
4407
+ this.onDidLayoutFromJSON = this._onDidLayoutFromJSON.event;
4401
4408
  this._onDidActivePanelChange = new Emitter();
4402
4409
  this.onDidActivePanelChange = this._onDidActivePanelChange.event;
4403
- this.addDisposables(this._onTabInteractionEvent, this._onTabContextMenu, this._onDidDrop, Event.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidActivePanelChange)(() => {
4410
+ this.addDisposables(this._onTabContextMenu, this._onDidDrop, Event.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidActivePanelChange)(() => {
4404
4411
  this._bufferOnDidLayoutChange.fire();
4405
4412
  }));
4406
4413
  this._options = options;
@@ -4455,7 +4462,7 @@ class DockviewComponent extends BaseGrid {
4455
4462
  }
4456
4463
  updateOptions(options) {
4457
4464
  const hasOrientationChanged = typeof options.orientation === 'string' &&
4458
- this.options.orientation !== options.orientation;
4465
+ this.gridview.orientation !== options.orientation;
4459
4466
  this._options = Object.assign(Object.assign({}, this.options), options);
4460
4467
  if (hasOrientationChanged) {
4461
4468
  this.gridview.orientation = options.orientation;
@@ -4533,12 +4540,7 @@ class DockviewComponent extends BaseGrid {
4533
4540
  };
4534
4541
  }
4535
4542
  fromJSON(data) {
4536
- const groups = Array.from(this._groups.values()).map((_) => _.value);
4537
- for (const group of groups) {
4538
- // remove the group will automatically remove the panels
4539
- this.removeGroup(group, true);
4540
- }
4541
- this.gridview.clear();
4543
+ this.clear();
4542
4544
  if (!this.deserializer) {
4543
4545
  throw new Error('invalid deserializer');
4544
4546
  }
@@ -4549,12 +4551,31 @@ class DockviewComponent extends BaseGrid {
4549
4551
  if (!this.deserializer) {
4550
4552
  throw new Error('no deserializer provided');
4551
4553
  }
4552
- this.gridview.deserialize(grid, new DefaultDeserializer(this, {
4553
- createPanel: (id, group) => {
4554
- const panelData = panels[id];
4555
- return this.deserializer.fromJSON(panelData, group);
4556
- },
4557
- }));
4554
+ this.gridview.deserialize(grid, {
4555
+ fromJSON: (node) => {
4556
+ const { id, locked, hideHeader, views, activeView } = node.data;
4557
+ const group = this.createGroup({
4558
+ id,
4559
+ locked: !!locked,
4560
+ hideHeader: !!hideHeader,
4561
+ });
4562
+ this._onDidAddGroup.fire(group);
4563
+ for (const child of views) {
4564
+ const panel = this.deserializer.fromJSON(panels[child], group);
4565
+ const isActive = typeof activeView === 'string' && activeView === panel.id;
4566
+ group.model.openPanel(panel, {
4567
+ skipSetPanelActive: !isActive,
4568
+ skipSetGroupActive: true
4569
+ });
4570
+ }
4571
+ if (!group.activePanel && group.panels.length > 0) {
4572
+ group.model.openPanel(group.panels[group.panels.length - 1], {
4573
+ skipSetGroupActive: true
4574
+ });
4575
+ }
4576
+ return group;
4577
+ }
4578
+ });
4558
4579
  if (typeof activeGroup === 'string') {
4559
4580
  const panel = this.getPanel(activeGroup);
4560
4581
  if (panel) {
@@ -4562,7 +4583,23 @@ class DockviewComponent extends BaseGrid {
4562
4583
  }
4563
4584
  }
4564
4585
  this.gridview.layout(this.width, this.height);
4565
- this._onDidLayoutfromJSON.fire();
4586
+ this._onDidLayoutFromJSON.fire();
4587
+ }
4588
+ clear() {
4589
+ const groups = Array.from(this._groups.values()).map((_) => _.value);
4590
+ const hasActiveGroup = !!this.activeGroup;
4591
+ const hasActivePanel = !!this.activePanel;
4592
+ for (const group of groups) {
4593
+ // remove the group will automatically remove the panels
4594
+ this.removeGroup(group, true);
4595
+ }
4596
+ if (hasActiveGroup) {
4597
+ this.doSetGroupActive(undefined);
4598
+ }
4599
+ if (hasActivePanel) {
4600
+ this._onDidActivePanelChange.fire(undefined);
4601
+ }
4602
+ this.gridview.clear();
4566
4603
  }
4567
4604
  closeAllGroups() {
4568
4605
  for (const entry of this._groups.entries()) {
@@ -4760,23 +4797,13 @@ class DockviewComponent extends BaseGrid {
4760
4797
  const { groupId, itemId, target, index } = event;
4761
4798
  this.moveGroupOrPanel(view, groupId, itemId, target, index);
4762
4799
  }), view.model.onDidDrop((event) => {
4763
- this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api }));
4764
- }), view.model.onDidGroupChange((event) => {
4765
- switch (event.kind) {
4766
- case GroupChangeKind2.ADD_PANEL:
4767
- if (event.panel) {
4768
- this._onDidAddPanel.fire(event.panel);
4769
- }
4770
- break;
4771
- case GroupChangeKind2.REMOVE_PANEL:
4772
- if (event.panel) {
4773
- this._onDidRemovePanel.fire(event.panel);
4774
- }
4775
- break;
4776
- case GroupChangeKind2.PANEL_ACTIVE:
4777
- this._onDidActivePanelChange.fire(event.panel);
4778
- break;
4779
- }
4800
+ this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api, group: view }));
4801
+ }), view.model.onDidAddPanel((event) => {
4802
+ this._onDidAddPanel.fire(event.panel);
4803
+ }), view.model.onDidRemovePanel((event) => {
4804
+ this._onDidRemovePanel.fire(event.panel);
4805
+ }), view.model.onDidActivePanelChange((event) => {
4806
+ this._onDidActivePanelChange.fire(event.panel);
4780
4807
  }));
4781
4808
  this._groups.set(view.id, { value: view, disposable });
4782
4809
  }
@@ -4791,7 +4818,7 @@ class DockviewComponent extends BaseGrid {
4791
4818
  createPanel(options, group) {
4792
4819
  const view = new DefaultGroupPanelView({
4793
4820
  content: this.createContentComponent(options.id, options.component),
4794
- tab: this.createTabComponent(options.id, options.tabComponent),
4821
+ tab: this.createTabComponent(options.id, options.tabComponent || this.options.defaultTabComponent),
4795
4822
  });
4796
4823
  const panel = new DockviewGroupPanel(options.id, this, this._api, group);
4797
4824
  panel.init({
@@ -4824,7 +4851,7 @@ class DockviewComponent extends BaseGrid {
4824
4851
  this._onDidActivePanelChange.dispose();
4825
4852
  this._onDidAddPanel.dispose();
4826
4853
  this._onDidRemovePanel.dispose();
4827
- this._onDidLayoutfromJSON.dispose();
4854
+ this._onDidLayoutFromJSON.dispose();
4828
4855
  }
4829
4856
  }
4830
4857
 
@@ -4862,7 +4889,7 @@ class GridviewComponent extends BaseGrid {
4862
4889
  }
4863
4890
  updateOptions(options) {
4864
4891
  const hasOrientationChanged = typeof options.orientation === 'string' &&
4865
- this.options.orientation !== options.orientation;
4892
+ this.gridview.orientation !== options.orientation;
4866
4893
  this._options = Object.assign(Object.assign({}, this.options), options);
4867
4894
  if (hasOrientationChanged) {
4868
4895
  this.gridview.orientation = options.orientation;
@@ -4898,13 +4925,8 @@ class GridviewComponent extends BaseGrid {
4898
4925
  (_a = this.activeGroup) === null || _a === void 0 ? void 0 : _a.focus();
4899
4926
  }
4900
4927
  fromJSON(serializedGridview) {
4928
+ this.clear();
4901
4929
  const { grid, activePanel } = serializedGridview;
4902
- const groups = Array.from(this._groups.values()); // reassign since group panels will mutate
4903
- for (const group of groups) {
4904
- group.disposable.dispose();
4905
- this.doRemoveGroup(group.value, { skipActive: true });
4906
- }
4907
- this.gridview.clear();
4908
4930
  const queue = [];
4909
4931
  this.gridview.deserialize(grid, {
4910
4932
  fromJSON: (node) => {
@@ -4926,6 +4948,7 @@ class GridviewComponent extends BaseGrid {
4926
4948
  accessor: this,
4927
4949
  isVisible: node.visible,
4928
4950
  }));
4951
+ this._onDidAddGroup.fire(view);
4929
4952
  this.registerPanel(view);
4930
4953
  return view;
4931
4954
  },
@@ -4940,6 +4963,18 @@ class GridviewComponent extends BaseGrid {
4940
4963
  }
4941
4964
  this._onDidLayoutfromJSON.fire();
4942
4965
  }
4966
+ clear() {
4967
+ const hasActiveGroup = this.activeGroup;
4968
+ const groups = Array.from(this._groups.values()); // reassign since group panels will mutate
4969
+ for (const group of groups) {
4970
+ group.disposable.dispose();
4971
+ this.doRemoveGroup(group.value, { skipActive: true });
4972
+ }
4973
+ if (hasActiveGroup) {
4974
+ this.doSetGroupActive(undefined);
4975
+ }
4976
+ this.gridview.clear();
4977
+ }
4943
4978
  movePanel(panel, options) {
4944
4979
  var _a;
4945
4980
  let relativeLocation;
@@ -5230,13 +5265,8 @@ class SplitviewComponent extends CompositeDisposable {
5230
5265
  };
5231
5266
  }
5232
5267
  fromJSON(serializedSplitview) {
5268
+ this.clear();
5233
5269
  const { views, orientation, size, activeView } = serializedSplitview;
5234
- for (const [_, value] of this._panels.entries()) {
5235
- value.disposable.dispose();
5236
- value.value.dispose();
5237
- }
5238
- this._panels.clear();
5239
- this.splitview.dispose();
5240
5270
  const queue = [];
5241
5271
  this.splitview = new Splitview(this.element, {
5242
5272
  orientation,
@@ -5284,6 +5314,14 @@ class SplitviewComponent extends CompositeDisposable {
5284
5314
  }
5285
5315
  this._onDidLayoutfromJSON.fire();
5286
5316
  }
5317
+ clear() {
5318
+ for (const [_, value] of this._panels.entries()) {
5319
+ value.disposable.dispose();
5320
+ value.value.dispose();
5321
+ }
5322
+ this._panels.clear();
5323
+ this.splitview.dispose();
5324
+ }
5287
5325
  dispose() {
5288
5326
  for (const [_, value] of this._panels.entries()) {
5289
5327
  value.disposable.dispose();
@@ -5533,8 +5571,9 @@ class PaneviewPanel extends BasePanelView {
5533
5571
  }
5534
5572
 
5535
5573
  class DraggablePaneviewPanel extends PaneviewPanel {
5536
- constructor(id, component, headerComponent, orientation, isExpanded, disableDnd) {
5574
+ constructor(accessor, id, component, headerComponent, orientation, isExpanded, disableDnd) {
5537
5575
  super(id, component, headerComponent, orientation, isExpanded, true);
5576
+ this.accessor = accessor;
5538
5577
  this._onDidDrop = new Emitter();
5539
5578
  this.onDidDrop = this._onDidDrop.event;
5540
5579
  if (!disableDnd) {
@@ -5546,10 +5585,11 @@ class DraggablePaneviewPanel extends PaneviewPanel {
5546
5585
  return;
5547
5586
  }
5548
5587
  const id = this.id;
5588
+ const accessorId = this.accessor.id;
5549
5589
  this.header.draggable = true;
5550
5590
  this.handler = new (class PaneDragHandler extends DragHandler {
5551
5591
  getData() {
5552
- LocalSelectionTransfer.getInstance().setData([new PaneTransfer('paneview', id)], PaneTransfer.prototype);
5592
+ LocalSelectionTransfer.getInstance().setData([new PaneTransfer(accessorId, id)], PaneTransfer.prototype);
5553
5593
  return {
5554
5594
  dispose: () => {
5555
5595
  LocalSelectionTransfer.getInstance().clearData(PaneTransfer.prototype);
@@ -5559,12 +5599,22 @@ class DraggablePaneviewPanel extends PaneviewPanel {
5559
5599
  })(this.header);
5560
5600
  this.target = new Droptarget(this.element, {
5561
5601
  validOverlays: 'vertical',
5562
- canDisplayOverlay: () => {
5602
+ canDisplayOverlay: (event) => {
5563
5603
  const data = getPaneData();
5564
- if (!data) {
5565
- return true;
5604
+ if (data) {
5605
+ if (data.paneId !== this.id &&
5606
+ data.viewId === this.accessor.id) {
5607
+ return true;
5608
+ }
5566
5609
  }
5567
- return data.paneId !== this.id;
5610
+ if (this.accessor.options.showDndOverlay) {
5611
+ return this.accessor.options.showDndOverlay({
5612
+ nativeEvent: event,
5613
+ getData: getPaneData,
5614
+ panel: this,
5615
+ });
5616
+ }
5617
+ return false;
5568
5618
  },
5569
5619
  });
5570
5620
  this.addDisposables(this._onDidDrop, this.handler, this.target, this.target.onDrop((event) => {
@@ -5573,8 +5623,10 @@ class DraggablePaneviewPanel extends PaneviewPanel {
5573
5623
  }
5574
5624
  onDrop(event) {
5575
5625
  const data = getPaneData();
5576
- if (!data) {
5577
- this._onDidDrop.fire(Object.assign(Object.assign({}, event), { panel: this, getData: () => getPaneData() }));
5626
+ if (!data || data.viewId !== this.accessor.id) {
5627
+ // if there is no local drag event for this panel
5628
+ // or if the drag event was creating by another Paneview instance
5629
+ this._onDidDrop.fire(Object.assign(Object.assign({}, event), { panel: this, getData: getPaneData }));
5578
5630
  return;
5579
5631
  }
5580
5632
  const containerApi = this._params
@@ -5582,7 +5634,8 @@ class DraggablePaneviewPanel extends PaneviewPanel {
5582
5634
  const panelId = data.paneId;
5583
5635
  const existingPanel = containerApi.getPanel(panelId);
5584
5636
  if (!existingPanel) {
5585
- this._onDidDrop.fire(Object.assign(Object.assign({}, event), { panel: this, getData: () => getPaneData() }));
5637
+ // if the panel doesn't exist
5638
+ this._onDidDrop.fire(Object.assign(Object.assign({}, event), { panel: this, getData: getPaneData }));
5586
5639
  return;
5587
5640
  }
5588
5641
  const allPanels = containerApi.panels;
@@ -5606,15 +5659,18 @@ class DraggablePaneviewPanel extends PaneviewPanel {
5606
5659
  class DefaultHeader extends CompositeDisposable {
5607
5660
  constructor() {
5608
5661
  super();
5662
+ this._expandedIcon = createExpandMoreButton();
5663
+ this._collapsedIcon = createChevronRightButton();
5609
5664
  this.disposable = new MutableDisposable();
5610
5665
  this.apiRef = { api: null };
5611
5666
  this._element = document.createElement('div');
5612
5667
  this.element.className = 'default-header';
5613
5668
  this._content = document.createElement('span');
5614
- this._expander = document.createElement('a');
5615
- this.element.appendChild(this._content);
5669
+ this._expander = document.createElement('div');
5670
+ this._expander.className = 'dockview-pane-header-icon';
5616
5671
  this.element.appendChild(this._expander);
5617
- this.addDisposables(addDisposableListener(this._expander, 'click', () => {
5672
+ this.element.appendChild(this._content);
5673
+ this.addDisposables(addDisposableListener(this._element, 'click', () => {
5618
5674
  var _a;
5619
5675
  (_a = this.apiRef.api) === null || _a === void 0 ? void 0 : _a.setExpanded(!this.apiRef.api.isExpanded);
5620
5676
  }));
@@ -5625,11 +5681,32 @@ class DefaultHeader extends CompositeDisposable {
5625
5681
  init(params) {
5626
5682
  this.apiRef.api = params.api;
5627
5683
  this._content.textContent = params.title;
5628
- this._expander.textContent = params.api.isExpanded ? '<' : '>';
5629
- this.disposable.value = params.api.onDidExpansionChange((e) => {
5630
- this._expander.textContent = e.isExpanded ? '<' : '>';
5684
+ this.updateIcon();
5685
+ this.disposable.value = params.api.onDidExpansionChange(() => {
5686
+ this.updateIcon();
5631
5687
  });
5632
5688
  }
5689
+ updateIcon() {
5690
+ var _a;
5691
+ const isExpanded = !!((_a = this.apiRef.api) === null || _a === void 0 ? void 0 : _a.isExpanded);
5692
+ toggleClass(this._expander, 'collapsed', !isExpanded);
5693
+ if (isExpanded) {
5694
+ if (this._expander.contains(this._collapsedIcon)) {
5695
+ this._collapsedIcon.remove();
5696
+ }
5697
+ if (!this._expander.contains(this._expandedIcon)) {
5698
+ this._expander.appendChild(this._expandedIcon);
5699
+ }
5700
+ }
5701
+ else {
5702
+ if (this._expander.contains(this._expandedIcon)) {
5703
+ this._expandedIcon.remove();
5704
+ }
5705
+ if (!this._expander.contains(this._collapsedIcon)) {
5706
+ this._expander.appendChild(this._collapsedIcon);
5707
+ }
5708
+ }
5709
+ }
5633
5710
  update(_params) {
5634
5711
  //
5635
5712
  }
@@ -5639,9 +5716,10 @@ class DefaultHeader extends CompositeDisposable {
5639
5716
  }
5640
5717
  }
5641
5718
 
5719
+ const nextLayoutId = sequentialNumberGenerator();
5642
5720
  class PaneFramework extends DraggablePaneviewPanel {
5643
5721
  constructor(options) {
5644
- super(options.id, options.component, options.headerComponent, options.orientation, options.isExpanded, options.disableDnd);
5722
+ super(options.accessor, options.id, options.component, options.headerComponent, options.orientation, options.isExpanded, options.disableDnd);
5645
5723
  this.options = options;
5646
5724
  }
5647
5725
  getBodyComponent() {
@@ -5655,6 +5733,7 @@ class PaneviewComponent extends CompositeDisposable {
5655
5733
  constructor(element, options) {
5656
5734
  super();
5657
5735
  this.element = element;
5736
+ this._id = nextLayoutId.next();
5658
5737
  this._disposable = new MutableDisposable();
5659
5738
  this._viewDisposables = new Map();
5660
5739
  this._onDidLayoutfromJSON = new Emitter();
@@ -5681,6 +5760,9 @@ class PaneviewComponent extends CompositeDisposable {
5681
5760
  });
5682
5761
  this.addDisposables(this._disposable);
5683
5762
  }
5763
+ get id() {
5764
+ return this._id;
5765
+ }
5684
5766
  get panels() {
5685
5767
  return this.paneview.getPanes();
5686
5768
  }
@@ -5745,6 +5827,7 @@ class PaneviewComponent extends CompositeDisposable {
5745
5827
  orientation: Orientation.VERTICAL,
5746
5828
  isExpanded: !!options.isExpanded,
5747
5829
  disableDnd: !!this.options.disableDnd,
5830
+ accessor: this,
5748
5831
  });
5749
5832
  this.doAddPanel(view);
5750
5833
  const size = typeof options.size === 'number' ? options.size : Sizing.Distribute;
@@ -5803,13 +5886,9 @@ class PaneviewComponent extends CompositeDisposable {
5803
5886
  };
5804
5887
  }
5805
5888
  fromJSON(serializedPaneview) {
5889
+ this.clear();
5806
5890
  const { views, size } = serializedPaneview;
5807
5891
  const queue = [];
5808
- for (const [_, value] of this._viewDisposables.entries()) {
5809
- value.dispose();
5810
- }
5811
- this._viewDisposables.clear();
5812
- this.paneview.dispose();
5813
5892
  this.paneview = new Paneview(this.element, {
5814
5893
  orientation: Orientation.VERTICAL,
5815
5894
  descriptor: {
@@ -5843,6 +5922,7 @@ class PaneviewComponent extends CompositeDisposable {
5843
5922
  orientation: Orientation.VERTICAL,
5844
5923
  isExpanded: !!view.expanded,
5845
5924
  disableDnd: !!this.options.disableDnd,
5925
+ accessor: this,
5846
5926
  });
5847
5927
  this.doAddPanel(panel);
5848
5928
  queue.push(() => {
@@ -5868,6 +5948,13 @@ class PaneviewComponent extends CompositeDisposable {
5868
5948
  queue.forEach((f) => f());
5869
5949
  this._onDidLayoutfromJSON.fire();
5870
5950
  }
5951
+ clear() {
5952
+ for (const [_, value] of this._viewDisposables.entries()) {
5953
+ value.dispose();
5954
+ }
5955
+ this._viewDisposables.clear();
5956
+ this.paneview.dispose();
5957
+ }
5871
5958
  doAddPanel(panel) {
5872
5959
  const disposable = panel.onDidDrop((event) => {
5873
5960
  this._onDidDrop.fire(event);
@@ -6035,15 +6122,21 @@ class ReactPart {
6035
6122
  this.component = component;
6036
6123
  this.parameters = parameters;
6037
6124
  this.context = context;
6125
+ this._initialProps = {};
6038
6126
  this.disposed = false;
6039
6127
  this.createPortal();
6040
6128
  }
6041
6129
  update(props) {
6042
- var _a;
6043
6130
  if (this.disposed) {
6044
6131
  throw new Error('invalid operation: resource is already disposed');
6045
6132
  }
6046
- (_a = this.componentInstance) === null || _a === void 0 ? void 0 : _a.update(props);
6133
+ if (!this.componentInstance) {
6134
+ // if the component is yet to be mounted store the props
6135
+ this._initialProps = Object.assign(Object.assign({}, this._initialProps), props);
6136
+ }
6137
+ else {
6138
+ this.componentInstance.update(props);
6139
+ }
6047
6140
  }
6048
6141
  createPortal() {
6049
6142
  if (this.disposed) {
@@ -6063,6 +6156,10 @@ class ReactPart {
6063
6156
  componentProps: this.parameters,
6064
6157
  ref: (element) => {
6065
6158
  this.componentInstance = element;
6159
+ if (Object.keys(this._initialProps).length > 0) {
6160
+ this.componentInstance.update(this._initialProps);
6161
+ this._initialProps = {}; // don't keep a reference to the users object once no longer required
6162
+ }
6066
6163
  },
6067
6164
  });
6068
6165
  const node = this.context
@@ -6119,30 +6216,19 @@ class ReactPanelContentPart {
6119
6216
  this.onDidBlur = this._onDidBlur.event;
6120
6217
  this._element = document.createElement('div');
6121
6218
  this._element.className = 'dockview-react-part';
6122
- this._actionsElement = document.createElement('div');
6123
- this._actionsElement.className = 'dockview-react-part';
6124
6219
  }
6125
6220
  get element() {
6126
6221
  return this._element;
6127
6222
  }
6128
- get actions() {
6129
- return this._actionsElement;
6130
- }
6131
6223
  focus() {
6132
6224
  // TODO
6133
6225
  }
6134
6226
  init(parameters) {
6135
- const context = {
6136
- api: parameters.api,
6137
- containerApi: parameters.containerApi,
6138
- actionsPortalElement: this._actionsElement,
6139
- tabPortalElement: parameters.tab,
6140
- };
6141
6227
  this.part = new ReactPart(this.element, this.reactPortalStore, this.component, {
6142
6228
  params: parameters.params,
6143
6229
  api: parameters.api,
6144
6230
  containerApi: parameters.containerApi,
6145
- }, context);
6231
+ });
6146
6232
  }
6147
6233
  toJSON() {
6148
6234
  return {
@@ -6160,11 +6246,10 @@ class ReactPanelContentPart {
6160
6246
  // noop
6161
6247
  }
6162
6248
  dispose() {
6163
- var _a, _b;
6249
+ var _a;
6164
6250
  this._onDidFocus.dispose();
6165
6251
  this._onDidBlur.dispose();
6166
6252
  (_a = this.part) === null || _a === void 0 ? void 0 : _a.dispose();
6167
- (_b = this.actionsPart) === null || _b === void 0 ? void 0 : _b.dispose();
6168
6253
  }
6169
6254
  }
6170
6255
 
@@ -6194,6 +6279,9 @@ class ReactPanelHeaderPart {
6194
6279
  (_a = this.part) === null || _a === void 0 ? void 0 : _a.update(event.params);
6195
6280
  }
6196
6281
  toJSON() {
6282
+ if (this.id === DEFAULT_TAB_IDENTIFIER) {
6283
+ return {};
6284
+ }
6197
6285
  return {
6198
6286
  id: this.id,
6199
6287
  };
@@ -6215,17 +6303,25 @@ class ReactPanelDeserialzier {
6215
6303
  this.layout = layout;
6216
6304
  }
6217
6305
  fromJSON(panelData, group) {
6218
- var _a, _b, _c;
6306
+ var _a, _b, _c, _d;
6219
6307
  const panelId = panelData.id;
6220
6308
  const params = panelData.params;
6221
6309
  const title = panelData.title;
6222
6310
  const suppressClosable = panelData.suppressClosable;
6223
6311
  const viewData = panelData.view;
6312
+ let tab;
6313
+ if ((_a = viewData.tab) === null || _a === void 0 ? void 0 : _a.id) {
6314
+ tab = createComponent(viewData.tab.id, viewData.tab.id, this.layout.options.tabComponents, this.layout.options.frameworkTabComponents, (_b = this.layout.options.frameworkComponentFactory) === null || _b === void 0 ? void 0 : _b.tab, () => new DefaultTab());
6315
+ }
6316
+ else if (this.layout.options.defaultTabComponent) {
6317
+ tab = createComponent(this.layout.options.defaultTabComponent, this.layout.options.defaultTabComponent, this.layout.options.tabComponents, this.layout.options.frameworkTabComponents, (_c = this.layout.options.frameworkComponentFactory) === null || _c === void 0 ? void 0 : _c.tab, () => new DefaultTab());
6318
+ }
6319
+ else {
6320
+ tab = new DefaultTab();
6321
+ }
6224
6322
  const view = new DefaultGroupPanelView({
6225
- content: createComponent(viewData.content.id, viewData.content.id, this.layout.options.components, this.layout.options.frameworkComponents, (_a = this.layout.options.frameworkComponentFactory) === null || _a === void 0 ? void 0 : _a.content),
6226
- tab: ((_b = viewData.tab) === null || _b === void 0 ? void 0 : _b.id)
6227
- ? createComponent(viewData.tab.id, viewData.tab.id, this.layout.options.tabComponents, this.layout.options.frameworkTabComponents, (_c = this.layout.options.frameworkComponentFactory) === null || _c === void 0 ? void 0 : _c.tab)
6228
- : new DefaultTab(),
6323
+ content: createComponent(viewData.content.id, viewData.content.id, this.layout.options.components, this.layout.options.frameworkComponents, (_d = this.layout.options.frameworkComponentFactory) === null || _d === void 0 ? void 0 : _d.content),
6324
+ tab,
6229
6325
  });
6230
6326
  const panel = new DockviewGroupPanel(panelId, this.layout, new DockviewApi(this.layout), group);
6231
6327
  panel.init({
@@ -6293,6 +6389,80 @@ class ReactWatermarkPart {
6293
6389
  }
6294
6390
  }
6295
6391
 
6392
+ class ReactGroupControlsRendererPart {
6393
+ constructor(component, reactPortalStore, _group) {
6394
+ this.component = component;
6395
+ this.reactPortalStore = reactPortalStore;
6396
+ this._group = _group;
6397
+ this.mutableDisposable = new MutableDisposable();
6398
+ this._element = document.createElement('div');
6399
+ this._element.className = 'dockview-react-part';
6400
+ }
6401
+ get element() {
6402
+ return this._element;
6403
+ }
6404
+ get part() {
6405
+ return this._part;
6406
+ }
6407
+ get group() {
6408
+ return this._group;
6409
+ }
6410
+ focus() {
6411
+ // TODO
6412
+ }
6413
+ init(parameters) {
6414
+ this.mutableDisposable.value = new CompositeDisposable(this._group.model.onDidAddPanel(() => {
6415
+ this.updatePanels();
6416
+ }), this._group.model.onDidRemovePanel(() => {
6417
+ this.updatePanels();
6418
+ }), this._group.model.onDidActivePanelChange(() => {
6419
+ this.updateActivePanel();
6420
+ }), parameters.api.onDidActiveChange(() => {
6421
+ this.updateGroupActive();
6422
+ }));
6423
+ this._part = new ReactPart(this.element, this.reactPortalStore, this.component, {
6424
+ api: parameters.api,
6425
+ containerApi: parameters.containerApi,
6426
+ panels: this._group.model.panels,
6427
+ activePanel: this._group.model.activePanel,
6428
+ isGroupActive: this._group.api.isActive,
6429
+ });
6430
+ }
6431
+ update(event) {
6432
+ var _a;
6433
+ (_a = this._part) === null || _a === void 0 ? void 0 : _a.update(event.params);
6434
+ }
6435
+ dispose() {
6436
+ var _a;
6437
+ this.mutableDisposable.dispose();
6438
+ (_a = this._part) === null || _a === void 0 ? void 0 : _a.dispose();
6439
+ }
6440
+ updatePanels() {
6441
+ this.update({ params: { panels: this._group.model.panels } });
6442
+ }
6443
+ updateActivePanel() {
6444
+ this.update({
6445
+ params: {
6446
+ activePanel: this._group.model.activePanel,
6447
+ },
6448
+ });
6449
+ }
6450
+ updateGroupActive() {
6451
+ this.update({
6452
+ params: {
6453
+ isGroupActive: this._group.api.isActive,
6454
+ },
6455
+ });
6456
+ }
6457
+ }
6458
+
6459
+ function createGroupControlElement(component, store) {
6460
+ return component
6461
+ ? (groupPanel) => {
6462
+ return new ReactGroupControlsRendererPart(component, store, groupPanel);
6463
+ }
6464
+ : undefined;
6465
+ }
6296
6466
  const DockviewReact = React.forwardRef((props, ref) => {
6297
6467
  const domRef = React.useRef(null);
6298
6468
  const dockviewRef = React.useRef();
@@ -6342,12 +6512,15 @@ const DockviewReact = React.forwardRef((props, ref) => {
6342
6512
  const dockview = new DockviewComponent(element, {
6343
6513
  frameworkComponentFactory: factory,
6344
6514
  frameworkComponents: props.components,
6345
- frameworkTabComponents: props.tabComponents,
6515
+ frameworkTabComponents: Object.assign(Object.assign({}, (props.tabComponents || {})), { [DEFAULT_TAB_IDENTIFIER]: props.defaultTabComponent }),
6346
6516
  tabHeight: props.tabHeight,
6347
6517
  watermarkFrameworkComponent: props.watermarkComponent,
6518
+ defaultTabComponent: DEFAULT_TAB_IDENTIFIER,
6348
6519
  styles: props.hideBorders
6349
6520
  ? { separatorBorder: 'transparent' }
6350
6521
  : undefined,
6522
+ showDndOverlay: props.showDndOverlay,
6523
+ createGroupControlElement: createGroupControlElement(props.groupControlComponent, { addPortal }),
6351
6524
  });
6352
6525
  (_a = domRef.current) === null || _a === void 0 ? void 0 : _a.appendChild(dockview.element);
6353
6526
  dockview.deserializer = new ReactPanelDeserialzier(dockview);
@@ -6424,10 +6597,79 @@ const DockviewReact = React.forwardRef((props, ref) => {
6424
6597
  disposable.dispose();
6425
6598
  };
6426
6599
  }, [props.onTabContextMenu]);
6600
+ React.useEffect(() => {
6601
+ if (!dockviewRef.current) {
6602
+ return;
6603
+ }
6604
+ dockviewRef.current.updateOptions({
6605
+ defaultTabComponent: DEFAULT_TAB_IDENTIFIER,
6606
+ frameworkTabComponents: Object.assign(Object.assign({}, (props.tabComponents || {})), { [DEFAULT_TAB_IDENTIFIER]: props.defaultTabComponent }),
6607
+ });
6608
+ }, [props.defaultTabComponent]);
6609
+ React.useEffect(() => {
6610
+ if (!dockviewRef.current) {
6611
+ return;
6612
+ }
6613
+ dockviewRef.current.updateOptions({
6614
+ createGroupControlElement: createGroupControlElement(props.groupControlComponent, { addPortal }),
6615
+ });
6616
+ }, [props.groupControlComponent]);
6427
6617
  return (React.createElement("div", { className: props.className, style: { height: '100%', width: '100%' }, ref: domRef }, portals));
6428
6618
  });
6429
6619
  DockviewReact.displayName = 'DockviewComponent';
6430
6620
 
6621
+ /******************************************************************************
6622
+ Copyright (c) Microsoft Corporation.
6623
+
6624
+ Permission to use, copy, modify, and/or distribute this software for any
6625
+ purpose with or without fee is hereby granted.
6626
+
6627
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
6628
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
6629
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
6630
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
6631
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
6632
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
6633
+ PERFORMANCE OF THIS SOFTWARE.
6634
+ ***************************************************************************** */
6635
+
6636
+ function __rest(s, e) {
6637
+ var t = {};
6638
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
6639
+ t[p] = s[p];
6640
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6641
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
6642
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
6643
+ t[p[i]] = s[p[i]];
6644
+ }
6645
+ return t;
6646
+ }
6647
+
6648
+ const CloseButton = () => (React.createElement("svg", { height: "11", width: "11", viewBox: "0 0 28 28", "aria-hidden": 'false', focusable: false, className: "dockview-svg" },
6649
+ React.createElement("path", { d: "M2.1 27.3L0 25.2L11.55 13.65L0 2.1L2.1 0L13.65 11.55L25.2 0L27.3 2.1L15.75 13.65L27.3 25.2L25.2 27.3L13.65 15.75L2.1 27.3Z" })));
6650
+
6651
+ const DockviewDefaultTab = (_a) => {
6652
+ var { api, containerApi: _containerApi, params: _params } = _a, rest = __rest(_a, ["api", "containerApi", "params"]);
6653
+ const onClose = React.useCallback((event) => {
6654
+ event.stopPropagation();
6655
+ api.close();
6656
+ }, [api]);
6657
+ const onClick = React.useCallback((event) => {
6658
+ api.setActive();
6659
+ if (rest.onClick) {
6660
+ rest.onClick(event);
6661
+ }
6662
+ }, [api, rest.onClick]);
6663
+ const iconClassname = React.useMemo(() => {
6664
+ const cn = ['dockview-react-tab-action'];
6665
+ return cn.join(',');
6666
+ }, [api.suppressClosable]);
6667
+ return (React.createElement("div", Object.assign({}, rest, { onClick: onClick, className: "dockview-react-tab" }),
6668
+ React.createElement("span", { className: "dockview-react-tab-title" }, api.title),
6669
+ React.createElement("div", { className: iconClassname, onClick: onClose },
6670
+ React.createElement(CloseButton, null))));
6671
+ };
6672
+
6431
6673
  class ReactPanelView extends SplitviewPanel {
6432
6674
  constructor(id, component, reactComponent, reactPortalStore) {
6433
6675
  super(id, component);
@@ -6657,6 +6899,7 @@ const PaneviewReact = React.forwardRef((props, ref) => {
6657
6899
  createComponent,
6658
6900
  },
6659
6901
  },
6902
+ showDndOverlay: props.showDndOverlay,
6660
6903
  });
6661
6904
  const api = new PaneviewApi(paneview);
6662
6905
  const { clientWidth, clientHeight } = domRef.current;
@@ -6701,8 +6944,16 @@ const PaneviewReact = React.forwardRef((props, ref) => {
6701
6944
  disposable.dispose();
6702
6945
  };
6703
6946
  }, [props.onDidDrop]);
6947
+ React.useEffect(() => {
6948
+ if (!paneviewRef.current) {
6949
+ return;
6950
+ }
6951
+ paneviewRef.current.updateOptions({
6952
+ showDndOverlay: props.showDndOverlay,
6953
+ });
6954
+ }, [props.showDndOverlay]);
6704
6955
  return (React.createElement("div", { className: props.className, style: { height: '100%', width: '100%' }, ref: domRef }, portals));
6705
6956
  });
6706
6957
  PaneviewReact.displayName = 'PaneviewComponent';
6707
6958
 
6708
- export { BaseGrid, ContentContainer, DockviewApi, DockviewComponent, DockviewReact, Event, Gridview, GridviewApi, GridviewComponent, GridviewPanel, GridviewReact, GroupChangeKind2, Groupview, LayoutPriority, LocalSelectionTransfer, MouseEventKind, Orientation, PaneFramework, PaneTransfer, PanelTransfer, Paneview, PaneviewApi, PaneviewComponent, PaneviewPanel, PaneviewReact, Position, ReactPanelContentPart, ReactPanelHeaderPart, ReactPart, ReactPartContext, SashState, Sizing, Splitview, SplitviewApi, SplitviewComponent, SplitviewPanel, SplitviewReact, Tab, getDirectionOrientation, getGridLocation, getLocationOrientation, getPaneData, getPanelData, getRelativeLocation, indexInParent, isGridBranchNode, isReactElement, orthogonal, toTarget, usePortalsLifecycle };
6959
+ export { BaseGrid, ContentContainer, DockviewApi, DockviewComponent, DockviewDefaultTab, DockviewDropTargets, DockviewReact, Event, Gridview, GridviewApi, GridviewComponent, GridviewPanel, GridviewReact, Groupview, LayoutPriority, LocalSelectionTransfer, MouseEventKind, Orientation, PaneFramework, PaneTransfer, PanelTransfer, Paneview, PaneviewApi, PaneviewComponent, PaneviewPanel, PaneviewReact, Position, ReactPart, ReactPartContext, SashState, Sizing, Splitview, SplitviewApi, SplitviewComponent, SplitviewPanel, SplitviewReact, Tab, getDirectionOrientation, getGridLocation, getLocationOrientation, getPaneData, getPanelData, getRelativeLocation, indexInParent, isGridBranchNode, isReactElement, orthogonal, toTarget, usePortalsLifecycle };