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
  */
@@ -59,7 +59,7 @@ function styleInject(css, ref) {
59
59
  }
60
60
  }
61
61
 
62
- 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}";
62
+ 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}";
63
63
  styleInject(css_248z);
64
64
 
65
65
  class TransferObject {
@@ -2329,6 +2329,9 @@ class SplitviewApi {
2329
2329
  toJSON() {
2330
2330
  return this.component.toJSON();
2331
2331
  }
2332
+ clear() {
2333
+ this.component.clear();
2334
+ }
2332
2335
  }
2333
2336
  class PaneviewApi {
2334
2337
  constructor(component) {
@@ -2396,6 +2399,9 @@ class PaneviewApi {
2396
2399
  toJSON() {
2397
2400
  return this.component.toJSON();
2398
2401
  }
2402
+ clear() {
2403
+ this.component.clear();
2404
+ }
2399
2405
  }
2400
2406
  class GridviewApi {
2401
2407
  constructor(component) {
@@ -2422,13 +2428,13 @@ class GridviewApi {
2422
2428
  get onDidLayoutChange() {
2423
2429
  return this.component.onDidLayoutChange;
2424
2430
  }
2425
- get onDidAddGroup() {
2431
+ get onDidAddPanel() {
2426
2432
  return this.component.onDidAddGroup;
2427
2433
  }
2428
- get onDidRemoveGroup() {
2434
+ get onDidRemovePanel() {
2429
2435
  return this.component.onDidRemoveGroup;
2430
2436
  }
2431
- get onDidActiveGroupChange() {
2437
+ get onDidActivePanelChange() {
2432
2438
  return this.component.onDidActiveGroupChange;
2433
2439
  }
2434
2440
  get onDidLayoutFromJSON() {
@@ -2467,6 +2473,9 @@ class GridviewApi {
2467
2473
  toJSON() {
2468
2474
  return this.component.toJSON();
2469
2475
  }
2476
+ clear() {
2477
+ this.component.clear();
2478
+ }
2470
2479
  }
2471
2480
  class DockviewApi {
2472
2481
  constructor(component) {
@@ -2515,7 +2524,7 @@ class DockviewApi {
2515
2524
  return this.component.onDidRemovePanel;
2516
2525
  }
2517
2526
  get onDidLayoutFromJSON() {
2518
- return this.component.onDidLayoutfromJSON;
2527
+ return this.component.onDidLayoutFromJSON;
2519
2528
  }
2520
2529
  get onDidLayoutChange() {
2521
2530
  return this.component.onDidLayoutChange;
@@ -2577,6 +2586,9 @@ class DockviewApi {
2577
2586
  toJSON() {
2578
2587
  return this.component.toJSON();
2579
2588
  }
2589
+ clear() {
2590
+ this.component.clear();
2591
+ }
2580
2592
  }
2581
2593
 
2582
2594
  class ContentContainer extends CompositeDisposable {
@@ -2650,12 +2662,12 @@ class ContentContainer extends CompositeDisposable {
2650
2662
  }
2651
2663
  }
2652
2664
 
2653
- var DockviewDropTargets;
2665
+ exports.DockviewDropTargets = void 0;
2654
2666
  (function (DockviewDropTargets) {
2655
2667
  DockviewDropTargets[DockviewDropTargets["Tab"] = 0] = "Tab";
2656
2668
  DockviewDropTargets[DockviewDropTargets["Panel"] = 1] = "Panel";
2657
2669
  DockviewDropTargets[DockviewDropTargets["TabContainer"] = 2] = "TabContainer";
2658
- })(DockviewDropTargets || (DockviewDropTargets = {}));
2670
+ })(exports.DockviewDropTargets || (exports.DockviewDropTargets = {}));
2659
2671
 
2660
2672
  class DragHandler extends CompositeDisposable {
2661
2673
  constructor(el) {
@@ -2701,6 +2713,7 @@ class Tab extends CompositeDisposable {
2701
2713
  constructor(panelId, accessor, group) {
2702
2714
  super();
2703
2715
  this.panelId = panelId;
2716
+ this.accessor = accessor;
2704
2717
  this.group = group;
2705
2718
  this._onChanged = new Emitter();
2706
2719
  this.onChanged = this._onChanged.event;
@@ -2711,6 +2724,7 @@ class Tab extends CompositeDisposable {
2711
2724
  this._element.className = 'tab';
2712
2725
  this._element.tabIndex = 0;
2713
2726
  this._element.draggable = true;
2727
+ toggleClass(this.element, 'inactive-tab', true);
2714
2728
  this.addDisposables(new (class Handler extends DragHandler {
2715
2729
  constructor() {
2716
2730
  super(...arguments);
@@ -2750,10 +2764,10 @@ class Tab extends CompositeDisposable {
2750
2764
  validOverlays: 'none',
2751
2765
  canDisplayOverlay: (event) => {
2752
2766
  const data = getPanelData();
2753
- if (data) {
2767
+ if (data && this.accessor.id === data.viewId) {
2754
2768
  return this.panelId !== data.panelId;
2755
2769
  }
2756
- return this.group.model.canDisplayOverlay(event, DockviewDropTargets.Tab);
2770
+ return this.group.model.canDisplayOverlay(event, exports.DockviewDropTargets.Tab);
2757
2771
  },
2758
2772
  });
2759
2773
  this.addDisposables(this.droptarget.onDrop((event) => {
@@ -2787,7 +2801,6 @@ class TabsContainer extends CompositeDisposable {
2787
2801
  this.group = group;
2788
2802
  this.tabs = [];
2789
2803
  this.selectedIndex = -1;
2790
- this.active = false;
2791
2804
  this._hidden = false;
2792
2805
  this._onDrop = new Emitter();
2793
2806
  this.onDrop = this._onDrop.event;
@@ -2809,11 +2822,11 @@ class TabsContainer extends CompositeDisposable {
2809
2822
  canDisplayOverlay: (event) => {
2810
2823
  var _a;
2811
2824
  const data = getPanelData();
2812
- if (data) {
2825
+ if (data && this.accessor.id === data.viewId) {
2813
2826
  // don't show the overlay if the tab being dragged is the last panel of this group
2814
2827
  return ((_a = last(this.tabs)) === null || _a === void 0 ? void 0 : _a.value.panelId) !== data.panelId;
2815
2828
  }
2816
- return group.model.canDisplayOverlay(event, DockviewDropTargets.Panel);
2829
+ return group.model.canDisplayOverlay(event, exports.DockviewDropTargets.Panel);
2817
2830
  },
2818
2831
  });
2819
2832
  this.addDisposables(this.voidDropTarget.onDrop((event) => {
@@ -2891,8 +2904,8 @@ class TabsContainer extends CompositeDisposable {
2891
2904
  indexOf(id) {
2892
2905
  return this.tabs.findIndex((tab) => tab.value.panelId === id);
2893
2906
  }
2894
- setActive(isGroupActive) {
2895
- this.active = isGroupActive;
2907
+ setActive(_isGroupActive) {
2908
+ // noop
2896
2909
  }
2897
2910
  addTab(tab, index = this.tabs.length) {
2898
2911
  if (index < 0 || index > this.tabs.length) {
@@ -2953,7 +2966,6 @@ class TabsContainer extends CompositeDisposable {
2953
2966
  }));
2954
2967
  const value = { value: tabToAdd, disposable };
2955
2968
  this.addTab(value, index);
2956
- this.activePanel = panel;
2957
2969
  }
2958
2970
  closePanel(panel) {
2959
2971
  this.delete(panel.id);
@@ -2967,12 +2979,6 @@ class TabsContainer extends CompositeDisposable {
2967
2979
  }
2968
2980
  }
2969
2981
 
2970
- exports.GroupChangeKind2 = void 0;
2971
- (function (GroupChangeKind2) {
2972
- GroupChangeKind2["ADD_PANEL"] = "ADD_PANEL";
2973
- GroupChangeKind2["REMOVE_PANEL"] = "REMOVE_PANEL";
2974
- GroupChangeKind2["PANEL_ACTIVE"] = "PANEL_ACTIVE";
2975
- })(exports.GroupChangeKind2 || (exports.GroupChangeKind2 = {}));
2976
2982
  class Groupview extends CompositeDisposable {
2977
2983
  constructor(container, accessor, id, options, parent) {
2978
2984
  super();
@@ -2991,12 +2997,15 @@ class Groupview extends CompositeDisposable {
2991
2997
  this._panels = [];
2992
2998
  this._onMove = new Emitter();
2993
2999
  this.onMove = this._onMove.event;
2994
- this._onDidGroupChange = new Emitter();
2995
- this.onDidGroupChange = this._onDidGroupChange.event;
2996
3000
  this._onDidDrop = new Emitter();
2997
3001
  this.onDidDrop = this._onDidDrop.event;
3002
+ this._onDidAddPanel = new Emitter();
3003
+ this.onDidAddPanel = this._onDidAddPanel.event;
3004
+ this._onDidRemovePanel = new Emitter();
3005
+ this.onDidRemovePanel = this._onDidRemovePanel.event;
3006
+ this._onDidActivePanelChange = new Emitter();
3007
+ this.onDidActivePanelChange = this._onDidActivePanelChange.event;
2998
3008
  this.container.classList.add('groupview');
2999
- this.addDisposables(this._onMove, this._onDidGroupChange, this._onDidChange, this._onDidDrop);
3000
3009
  this.tabsContainer = new TabsContainer(this.accessor, this.parent, {
3001
3010
  tabHeight: options.tabHeight,
3002
3011
  });
@@ -3008,17 +3017,17 @@ class Groupview extends CompositeDisposable {
3008
3017
  return false;
3009
3018
  }
3010
3019
  const data = getPanelData();
3011
- if (data) {
3020
+ if (data && data.viewId === this.accessor.id) {
3012
3021
  const groupHasOnePanelAndIsActiveDragElement = this._panels.length === 1 && data.groupId === this.id;
3013
3022
  return !groupHasOnePanelAndIsActiveDragElement;
3014
3023
  }
3015
- return this.canDisplayOverlay(event, DockviewDropTargets.Panel);
3024
+ return this.canDisplayOverlay(event, exports.DockviewDropTargets.Panel);
3016
3025
  },
3017
3026
  });
3018
3027
  container.append(this.tabsContainer.element, this.contentContainer.element);
3019
3028
  this.header.hidden = !!options.hideHeader;
3020
3029
  this.locked = !!options.locked;
3021
- this.addDisposables(this._onMove, this._onDidGroupChange, this.tabsContainer.onDrop((event) => {
3030
+ this.addDisposables(this._onMove, this._onDidChange, this._onDidDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange, this.tabsContainer.onDrop((event) => {
3022
3031
  this.handleDropEvent(event.event, exports.Position.Center, event.index);
3023
3032
  }), this.contentContainer.onDidFocus(() => {
3024
3033
  this.accessor.doSetGroupActive(this.parent, true);
@@ -3090,6 +3099,15 @@ class Groupview extends CompositeDisposable {
3090
3099
  // correctly initialized
3091
3100
  this.setActive(this.isActive, true, true);
3092
3101
  this.updateContainer();
3102
+ if (this.accessor.options.createGroupControlElement) {
3103
+ this._control = this.accessor.options.createGroupControlElement(this.parent);
3104
+ this.addDisposables(this._control);
3105
+ this._control.init({
3106
+ containerApi: new DockviewApi(this.accessor),
3107
+ api: this.parent.api,
3108
+ });
3109
+ this.tabsContainer.setActionElement(this._control.element);
3110
+ }
3093
3111
  }
3094
3112
  indexOf(panel) {
3095
3113
  return this.tabsContainer.indexOf(panel.id);
@@ -3170,16 +3188,21 @@ class Groupview extends CompositeDisposable {
3170
3188
  options.index > this.panels.length) {
3171
3189
  options.index = this.panels.length;
3172
3190
  }
3173
- const skipSetActive = !!options.skipSetActive;
3191
+ const skipSetPanelActive = !!options.skipSetPanelActive;
3192
+ const skipSetGroupActive = !!options.skipSetGroupActive;
3174
3193
  // ensure the group is updated before we fire any events
3175
3194
  panel.updateParentGroup(this.parent, true);
3176
- if (!skipSetActive && this._activePanel === panel) {
3177
- this.accessor.doSetGroupActive(this.parent);
3195
+ if (this._activePanel === panel) {
3196
+ if (!skipSetGroupActive) {
3197
+ this.accessor.doSetGroupActive(this.parent);
3198
+ }
3178
3199
  return;
3179
3200
  }
3180
- this.doAddPanel(panel, options.index);
3181
- if (!skipSetActive) {
3201
+ this.doAddPanel(panel, options.index, skipSetPanelActive);
3202
+ if (!skipSetPanelActive) {
3182
3203
  this.doSetActivePanel(panel);
3204
+ }
3205
+ if (!skipSetGroupActive) {
3183
3206
  this.accessor.doSetGroupActive(this.parent, !!options.skipFocus);
3184
3207
  }
3185
3208
  this.updateContainer();
@@ -3215,14 +3238,8 @@ class Groupview extends CompositeDisposable {
3215
3238
  isPanelActive(panel) {
3216
3239
  return this._activePanel === panel;
3217
3240
  }
3218
- updateActions() {
3219
- var _a, _b;
3220
- if (this.isActive && ((_b = (_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.view) === null || _b === void 0 ? void 0 : _b.actions)) {
3221
- this.tabsContainer.setActionElement(this._activePanel.view.actions.element);
3222
- }
3223
- else {
3224
- this.tabsContainer.setActionElement(undefined);
3225
- }
3241
+ updateActions(element) {
3242
+ this.tabsContainer.setActionElement(element);
3226
3243
  }
3227
3244
  setActive(isGroupActive, skipFocus = false, force = false) {
3228
3245
  var _a, _b;
@@ -3278,16 +3295,15 @@ class Groupview extends CompositeDisposable {
3278
3295
  if (this.mostRecentlyUsed.includes(panel)) {
3279
3296
  this.mostRecentlyUsed.splice(this.mostRecentlyUsed.indexOf(panel), 1);
3280
3297
  }
3281
- this._onDidGroupChange.fire({
3282
- kind: exports.GroupChangeKind2.REMOVE_PANEL,
3283
- panel,
3284
- });
3298
+ this._onDidRemovePanel.fire({ panel });
3285
3299
  }
3286
- doAddPanel(panel, index = this.panels.length) {
3300
+ doAddPanel(panel, index = this.panels.length, skipSetActive = false) {
3287
3301
  const existingPanel = this._panels.indexOf(panel);
3288
3302
  const hasExistingPanel = existingPanel > -1;
3289
3303
  this.tabsContainer.openPanel(panel, index);
3290
- this.contentContainer.openPanel(panel);
3304
+ if (!skipSetActive) {
3305
+ this.contentContainer.openPanel(panel);
3306
+ }
3291
3307
  this.tabsContainer.show();
3292
3308
  this.contentContainer.show();
3293
3309
  if (hasExistingPanel) {
@@ -3296,10 +3312,7 @@ class Groupview extends CompositeDisposable {
3296
3312
  }
3297
3313
  this.updateMru(panel);
3298
3314
  this.panels.splice(index, 0, panel);
3299
- this._onDidGroupChange.fire({
3300
- kind: exports.GroupChangeKind2.ADD_PANEL,
3301
- panel,
3302
- });
3315
+ this._onDidAddPanel.fire({ panel });
3303
3316
  }
3304
3317
  doSetActivePanel(panel) {
3305
3318
  this._activePanel = panel;
@@ -3307,10 +3320,7 @@ class Groupview extends CompositeDisposable {
3307
3320
  this.tabsContainer.setActivePanel(panel);
3308
3321
  panel.layout(this._width, this._height);
3309
3322
  this.updateMru(panel);
3310
- this._onDidGroupChange.fire({
3311
- kind: exports.GroupChangeKind2.PANEL_ACTIVE,
3312
- panel,
3313
- });
3323
+ this._onDidActivePanelChange.fire({ panel });
3314
3324
  }
3315
3325
  }
3316
3326
  updateMru(panel) {
@@ -3320,7 +3330,6 @@ class Groupview extends CompositeDisposable {
3320
3330
  this.mostRecentlyUsed = [panel, ...this.mostRecentlyUsed];
3321
3331
  }
3322
3332
  updateContainer() {
3323
- this.updateActions();
3324
3333
  toggleClass(this.container, 'empty', this.isEmpty);
3325
3334
  this.panels.forEach((panel) => panel.updateParentGroup(this.parent, this.isActive));
3326
3335
  if (this.isEmpty && !this.watermark) {
@@ -3353,7 +3362,12 @@ class Groupview extends CompositeDisposable {
3353
3362
  canDisplayOverlay(event, target) {
3354
3363
  // custom overlay handler
3355
3364
  if (this.accessor.options.showDndOverlay) {
3356
- return this.accessor.options.showDndOverlay(event, target);
3365
+ return this.accessor.options.showDndOverlay({
3366
+ nativeEvent: event,
3367
+ target,
3368
+ group: this.accessor.getPanel(this.id),
3369
+ getData: getPanelData,
3370
+ });
3357
3371
  }
3358
3372
  return false;
3359
3373
  }
@@ -3401,7 +3415,7 @@ class Groupview extends CompositeDisposable {
3401
3415
  }
3402
3416
  }
3403
3417
 
3404
- const nextLayoutId = sequentialNumberGenerator();
3418
+ const nextLayoutId$1 = sequentialNumberGenerator();
3405
3419
  function toTarget(direction) {
3406
3420
  switch (direction) {
3407
3421
  case 'left':
@@ -3421,7 +3435,7 @@ class BaseGrid extends CompositeDisposable {
3421
3435
  constructor(_element, options) {
3422
3436
  super();
3423
3437
  this._element = _element;
3424
- this._id = nextLayoutId.next();
3438
+ this._id = nextLayoutId$1.next();
3425
3439
  this._groups = new Map();
3426
3440
  this._onDidLayoutChange = new Emitter();
3427
3441
  this.onDidLayoutChange = this._onDidLayoutChange.event;
@@ -3436,7 +3450,7 @@ class BaseGrid extends CompositeDisposable {
3436
3450
  this.element.appendChild(this.gridview.element);
3437
3451
  this.layout(0, 0, true); // set some elements height/widths
3438
3452
  this.addDisposables(this.gridview.onDidChange(() => {
3439
- this._onDidLayoutChange.fire();
3453
+ this._bufferOnDidLayoutChange.fire();
3440
3454
  }));
3441
3455
  this.addDisposables(exports.Event.any(this.onDidAddGroup, this.onDidRemoveGroup, this.onDidActiveGroupChange)(() => {
3442
3456
  this._bufferOnDidLayoutChange.fire();
@@ -3881,6 +3895,38 @@ class ActionContainer {
3881
3895
  }
3882
3896
  }
3883
3897
 
3898
+ const createSvgElementFromPath = (params) => {
3899
+ const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
3900
+ svg.setAttributeNS(null, 'height', params.height);
3901
+ svg.setAttributeNS(null, 'width', params.width);
3902
+ svg.setAttributeNS(null, 'viewBox', params.viewbox);
3903
+ svg.setAttributeNS(null, 'aria-hidden', 'false');
3904
+ svg.setAttributeNS(null, 'focusable', 'false');
3905
+ svg.classList.add('dockview-svg');
3906
+ const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
3907
+ path.setAttributeNS(null, 'd', params.path);
3908
+ svg.appendChild(path);
3909
+ return svg;
3910
+ };
3911
+ const createCloseButton = () => createSvgElementFromPath({
3912
+ width: '11',
3913
+ height: '11',
3914
+ viewbox: '0 0 28 28',
3915
+ 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',
3916
+ });
3917
+ const createExpandMoreButton = () => createSvgElementFromPath({
3918
+ width: '11',
3919
+ height: '11',
3920
+ viewbox: '0 0 24 15',
3921
+ path: 'M12 14.15L0 2.15L2.15 0L12 9.9L21.85 0.0499992L24 2.2L12 14.15Z',
3922
+ });
3923
+ const createChevronRightButton = () => createSvgElementFromPath({
3924
+ width: '11',
3925
+ height: '11',
3926
+ viewbox: '0 0 15 25',
3927
+ path: 'M2.15 24.1L0 21.95L9.9 12.05L0 2.15L2.15 0L14.2 12.05L2.15 24.1Z',
3928
+ });
3929
+
3884
3930
  class Watermark extends CompositeDisposable {
3885
3931
  constructor() {
3886
3932
  super();
@@ -3897,8 +3943,9 @@ class Watermark extends CompositeDisposable {
3897
3943
  const actions = new ActionContainer();
3898
3944
  title.appendChild(emptySpace);
3899
3945
  title.appendChild(actions.element);
3900
- const closeAnchor = document.createElement('a');
3946
+ const closeAnchor = document.createElement('div');
3901
3947
  closeAnchor.className = 'close-action';
3948
+ closeAnchor.appendChild(createCloseButton());
3902
3949
  actions.add(closeAnchor);
3903
3950
  this.addDisposables(addDisposableListener(closeAnchor, 'click', (ev) => {
3904
3951
  var _a;
@@ -3946,34 +3993,6 @@ class Watermark extends CompositeDisposable {
3946
3993
  }
3947
3994
  }
3948
3995
 
3949
- class DefaultDeserializer {
3950
- constructor(layout, panelDeserializer) {
3951
- this.layout = layout;
3952
- this.panelDeserializer = panelDeserializer;
3953
- }
3954
- fromJSON(node) {
3955
- const data = node.data;
3956
- const children = data.views;
3957
- const active = data.activeView;
3958
- const group = this.layout.createGroup({
3959
- id: data.id,
3960
- locked: !!data.locked,
3961
- hideHeader: !!data.hideHeader,
3962
- });
3963
- for (const child of children) {
3964
- const panel = this.panelDeserializer.createPanel(child, group);
3965
- const isActive = typeof active === 'string' && active === panel.id;
3966
- group.model.openPanel(panel, {
3967
- skipSetActive: !isActive,
3968
- });
3969
- }
3970
- if (!group.activePanel && group.panels.length > 0) {
3971
- group.model.openPanel(group.panels[group.panels.length - 1]);
3972
- }
3973
- return group;
3974
- }
3975
- }
3976
-
3977
3996
  function createComponent(id, componentName, components = {}, frameworkComponents = {}, createFrameworkComponent, fallback) {
3978
3997
  const Component = typeof componentName === 'string'
3979
3998
  ? components[componentName]
@@ -3999,6 +4018,7 @@ function createComponent(id, componentName, components = {}, frameworkComponents
3999
4018
  return new Component(id, componentName);
4000
4019
  }
4001
4020
 
4021
+ const DEFAULT_TAB_IDENTIFIER = '__default__tab__';
4002
4022
  class DefaultTab extends CompositeDisposable {
4003
4023
  constructor() {
4004
4024
  super();
@@ -4018,8 +4038,9 @@ class DefaultTab extends CompositeDisposable {
4018
4038
  this._list = document.createElement('ul');
4019
4039
  this._list.className = 'tab-list';
4020
4040
  //
4021
- this.action = document.createElement('a');
4041
+ this.action = document.createElement('div');
4022
4042
  this.action.className = 'tab-action';
4043
+ this.action.appendChild(createCloseButton());
4023
4044
  //
4024
4045
  this._element.appendChild(this._content);
4025
4046
  this._element.appendChild(this._actionContainer);
@@ -4035,7 +4056,7 @@ class DefaultTab extends CompositeDisposable {
4035
4056
  return this._element;
4036
4057
  }
4037
4058
  get id() {
4038
- return '__DEFAULT_TAB__';
4059
+ return DEFAULT_TAB_IDENTIFIER;
4039
4060
  }
4040
4061
  update(event) {
4041
4062
  this.params = Object.assign(Object.assign({}, this.params), event.params);
@@ -4352,16 +4373,6 @@ class DefaultGroupPanelView {
4352
4373
  var _a;
4353
4374
  this._content = renderers.content;
4354
4375
  this._tab = (_a = renderers.tab) !== null && _a !== void 0 ? _a : new DefaultTab();
4355
- this._actions =
4356
- renderers.actions ||
4357
- (this.content.actions
4358
- ? {
4359
- element: this.content.actions,
4360
- dispose: () => {
4361
- //
4362
- },
4363
- }
4364
- : undefined);
4365
4376
  }
4366
4377
  get content() {
4367
4378
  return this._content;
@@ -4369,9 +4380,6 @@ class DefaultGroupPanelView {
4369
4380
  get tab() {
4370
4381
  return this._tab;
4371
4382
  }
4372
- get actions() {
4373
- return this._actions;
4374
- }
4375
4383
  init(params) {
4376
4384
  this.content.init(Object.assign(Object.assign({}, params), { tab: this.tab }));
4377
4385
  this.tab.init(params);
@@ -4389,16 +4397,18 @@ class DefaultGroupPanelView {
4389
4397
  this.tab.update(event);
4390
4398
  }
4391
4399
  toJSON() {
4400
+ let tab = this.tab instanceof DefaultTab ? undefined : this.tab.toJSON();
4401
+ if (tab && Object.keys(tab).length === 0) {
4402
+ tab = undefined;
4403
+ }
4392
4404
  return {
4393
4405
  content: this.content.toJSON(),
4394
- tab: this.tab instanceof DefaultTab ? undefined : this.tab.toJSON(),
4406
+ tab,
4395
4407
  };
4396
4408
  }
4397
4409
  dispose() {
4398
- var _a;
4399
4410
  this.content.dispose();
4400
4411
  this.tab.dispose();
4401
- (_a = this.actions) === null || _a === void 0 ? void 0 : _a.dispose();
4402
4412
  }
4403
4413
  }
4404
4414
 
@@ -4410,9 +4420,6 @@ class DockviewComponent extends BaseGrid {
4410
4420
  orientation: options.orientation || exports.Orientation.HORIZONTAL,
4411
4421
  styles: options.styles,
4412
4422
  });
4413
- // events
4414
- this._onTabInteractionEvent = new Emitter();
4415
- this.onTabInteractionEvent = this._onTabInteractionEvent.event;
4416
4423
  this._onTabContextMenu = new Emitter();
4417
4424
  this.onTabContextMenu = this._onTabContextMenu.event;
4418
4425
  this._onDidDrop = new Emitter();
@@ -4421,11 +4428,11 @@ class DockviewComponent extends BaseGrid {
4421
4428
  this.onDidRemovePanel = this._onDidRemovePanel.event;
4422
4429
  this._onDidAddPanel = new Emitter();
4423
4430
  this.onDidAddPanel = this._onDidAddPanel.event;
4424
- this._onDidLayoutfromJSON = new Emitter();
4425
- this.onDidLayoutfromJSON = this._onDidLayoutfromJSON.event;
4431
+ this._onDidLayoutFromJSON = new Emitter();
4432
+ this.onDidLayoutFromJSON = this._onDidLayoutFromJSON.event;
4426
4433
  this._onDidActivePanelChange = new Emitter();
4427
4434
  this.onDidActivePanelChange = this._onDidActivePanelChange.event;
4428
- this.addDisposables(this._onTabInteractionEvent, this._onTabContextMenu, this._onDidDrop, exports.Event.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidActivePanelChange)(() => {
4435
+ this.addDisposables(this._onTabContextMenu, this._onDidDrop, exports.Event.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidActivePanelChange)(() => {
4429
4436
  this._bufferOnDidLayoutChange.fire();
4430
4437
  }));
4431
4438
  this._options = options;
@@ -4480,7 +4487,7 @@ class DockviewComponent extends BaseGrid {
4480
4487
  }
4481
4488
  updateOptions(options) {
4482
4489
  const hasOrientationChanged = typeof options.orientation === 'string' &&
4483
- this.options.orientation !== options.orientation;
4490
+ this.gridview.orientation !== options.orientation;
4484
4491
  this._options = Object.assign(Object.assign({}, this.options), options);
4485
4492
  if (hasOrientationChanged) {
4486
4493
  this.gridview.orientation = options.orientation;
@@ -4558,12 +4565,7 @@ class DockviewComponent extends BaseGrid {
4558
4565
  };
4559
4566
  }
4560
4567
  fromJSON(data) {
4561
- const groups = Array.from(this._groups.values()).map((_) => _.value);
4562
- for (const group of groups) {
4563
- // remove the group will automatically remove the panels
4564
- this.removeGroup(group, true);
4565
- }
4566
- this.gridview.clear();
4568
+ this.clear();
4567
4569
  if (!this.deserializer) {
4568
4570
  throw new Error('invalid deserializer');
4569
4571
  }
@@ -4574,12 +4576,31 @@ class DockviewComponent extends BaseGrid {
4574
4576
  if (!this.deserializer) {
4575
4577
  throw new Error('no deserializer provided');
4576
4578
  }
4577
- this.gridview.deserialize(grid, new DefaultDeserializer(this, {
4578
- createPanel: (id, group) => {
4579
- const panelData = panels[id];
4580
- return this.deserializer.fromJSON(panelData, group);
4581
- },
4582
- }));
4579
+ this.gridview.deserialize(grid, {
4580
+ fromJSON: (node) => {
4581
+ const { id, locked, hideHeader, views, activeView } = node.data;
4582
+ const group = this.createGroup({
4583
+ id,
4584
+ locked: !!locked,
4585
+ hideHeader: !!hideHeader,
4586
+ });
4587
+ this._onDidAddGroup.fire(group);
4588
+ for (const child of views) {
4589
+ const panel = this.deserializer.fromJSON(panels[child], group);
4590
+ const isActive = typeof activeView === 'string' && activeView === panel.id;
4591
+ group.model.openPanel(panel, {
4592
+ skipSetPanelActive: !isActive,
4593
+ skipSetGroupActive: true
4594
+ });
4595
+ }
4596
+ if (!group.activePanel && group.panels.length > 0) {
4597
+ group.model.openPanel(group.panels[group.panels.length - 1], {
4598
+ skipSetGroupActive: true
4599
+ });
4600
+ }
4601
+ return group;
4602
+ }
4603
+ });
4583
4604
  if (typeof activeGroup === 'string') {
4584
4605
  const panel = this.getPanel(activeGroup);
4585
4606
  if (panel) {
@@ -4587,7 +4608,23 @@ class DockviewComponent extends BaseGrid {
4587
4608
  }
4588
4609
  }
4589
4610
  this.gridview.layout(this.width, this.height);
4590
- this._onDidLayoutfromJSON.fire();
4611
+ this._onDidLayoutFromJSON.fire();
4612
+ }
4613
+ clear() {
4614
+ const groups = Array.from(this._groups.values()).map((_) => _.value);
4615
+ const hasActiveGroup = !!this.activeGroup;
4616
+ const hasActivePanel = !!this.activePanel;
4617
+ for (const group of groups) {
4618
+ // remove the group will automatically remove the panels
4619
+ this.removeGroup(group, true);
4620
+ }
4621
+ if (hasActiveGroup) {
4622
+ this.doSetGroupActive(undefined);
4623
+ }
4624
+ if (hasActivePanel) {
4625
+ this._onDidActivePanelChange.fire(undefined);
4626
+ }
4627
+ this.gridview.clear();
4591
4628
  }
4592
4629
  closeAllGroups() {
4593
4630
  for (const entry of this._groups.entries()) {
@@ -4785,23 +4822,13 @@ class DockviewComponent extends BaseGrid {
4785
4822
  const { groupId, itemId, target, index } = event;
4786
4823
  this.moveGroupOrPanel(view, groupId, itemId, target, index);
4787
4824
  }), view.model.onDidDrop((event) => {
4788
- this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api }));
4789
- }), view.model.onDidGroupChange((event) => {
4790
- switch (event.kind) {
4791
- case exports.GroupChangeKind2.ADD_PANEL:
4792
- if (event.panel) {
4793
- this._onDidAddPanel.fire(event.panel);
4794
- }
4795
- break;
4796
- case exports.GroupChangeKind2.REMOVE_PANEL:
4797
- if (event.panel) {
4798
- this._onDidRemovePanel.fire(event.panel);
4799
- }
4800
- break;
4801
- case exports.GroupChangeKind2.PANEL_ACTIVE:
4802
- this._onDidActivePanelChange.fire(event.panel);
4803
- break;
4804
- }
4825
+ this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api, group: view }));
4826
+ }), view.model.onDidAddPanel((event) => {
4827
+ this._onDidAddPanel.fire(event.panel);
4828
+ }), view.model.onDidRemovePanel((event) => {
4829
+ this._onDidRemovePanel.fire(event.panel);
4830
+ }), view.model.onDidActivePanelChange((event) => {
4831
+ this._onDidActivePanelChange.fire(event.panel);
4805
4832
  }));
4806
4833
  this._groups.set(view.id, { value: view, disposable });
4807
4834
  }
@@ -4816,7 +4843,7 @@ class DockviewComponent extends BaseGrid {
4816
4843
  createPanel(options, group) {
4817
4844
  const view = new DefaultGroupPanelView({
4818
4845
  content: this.createContentComponent(options.id, options.component),
4819
- tab: this.createTabComponent(options.id, options.tabComponent),
4846
+ tab: this.createTabComponent(options.id, options.tabComponent || this.options.defaultTabComponent),
4820
4847
  });
4821
4848
  const panel = new DockviewGroupPanel(options.id, this, this._api, group);
4822
4849
  panel.init({
@@ -4849,7 +4876,7 @@ class DockviewComponent extends BaseGrid {
4849
4876
  this._onDidActivePanelChange.dispose();
4850
4877
  this._onDidAddPanel.dispose();
4851
4878
  this._onDidRemovePanel.dispose();
4852
- this._onDidLayoutfromJSON.dispose();
4879
+ this._onDidLayoutFromJSON.dispose();
4853
4880
  }
4854
4881
  }
4855
4882
 
@@ -4887,7 +4914,7 @@ class GridviewComponent extends BaseGrid {
4887
4914
  }
4888
4915
  updateOptions(options) {
4889
4916
  const hasOrientationChanged = typeof options.orientation === 'string' &&
4890
- this.options.orientation !== options.orientation;
4917
+ this.gridview.orientation !== options.orientation;
4891
4918
  this._options = Object.assign(Object.assign({}, this.options), options);
4892
4919
  if (hasOrientationChanged) {
4893
4920
  this.gridview.orientation = options.orientation;
@@ -4923,13 +4950,8 @@ class GridviewComponent extends BaseGrid {
4923
4950
  (_a = this.activeGroup) === null || _a === void 0 ? void 0 : _a.focus();
4924
4951
  }
4925
4952
  fromJSON(serializedGridview) {
4953
+ this.clear();
4926
4954
  const { grid, activePanel } = serializedGridview;
4927
- const groups = Array.from(this._groups.values()); // reassign since group panels will mutate
4928
- for (const group of groups) {
4929
- group.disposable.dispose();
4930
- this.doRemoveGroup(group.value, { skipActive: true });
4931
- }
4932
- this.gridview.clear();
4933
4955
  const queue = [];
4934
4956
  this.gridview.deserialize(grid, {
4935
4957
  fromJSON: (node) => {
@@ -4951,6 +4973,7 @@ class GridviewComponent extends BaseGrid {
4951
4973
  accessor: this,
4952
4974
  isVisible: node.visible,
4953
4975
  }));
4976
+ this._onDidAddGroup.fire(view);
4954
4977
  this.registerPanel(view);
4955
4978
  return view;
4956
4979
  },
@@ -4965,6 +4988,18 @@ class GridviewComponent extends BaseGrid {
4965
4988
  }
4966
4989
  this._onDidLayoutfromJSON.fire();
4967
4990
  }
4991
+ clear() {
4992
+ const hasActiveGroup = this.activeGroup;
4993
+ const groups = Array.from(this._groups.values()); // reassign since group panels will mutate
4994
+ for (const group of groups) {
4995
+ group.disposable.dispose();
4996
+ this.doRemoveGroup(group.value, { skipActive: true });
4997
+ }
4998
+ if (hasActiveGroup) {
4999
+ this.doSetGroupActive(undefined);
5000
+ }
5001
+ this.gridview.clear();
5002
+ }
4968
5003
  movePanel(panel, options) {
4969
5004
  var _a;
4970
5005
  let relativeLocation;
@@ -5255,13 +5290,8 @@ class SplitviewComponent extends CompositeDisposable {
5255
5290
  };
5256
5291
  }
5257
5292
  fromJSON(serializedSplitview) {
5293
+ this.clear();
5258
5294
  const { views, orientation, size, activeView } = serializedSplitview;
5259
- for (const [_, value] of this._panels.entries()) {
5260
- value.disposable.dispose();
5261
- value.value.dispose();
5262
- }
5263
- this._panels.clear();
5264
- this.splitview.dispose();
5265
5295
  const queue = [];
5266
5296
  this.splitview = new Splitview(this.element, {
5267
5297
  orientation,
@@ -5309,6 +5339,14 @@ class SplitviewComponent extends CompositeDisposable {
5309
5339
  }
5310
5340
  this._onDidLayoutfromJSON.fire();
5311
5341
  }
5342
+ clear() {
5343
+ for (const [_, value] of this._panels.entries()) {
5344
+ value.disposable.dispose();
5345
+ value.value.dispose();
5346
+ }
5347
+ this._panels.clear();
5348
+ this.splitview.dispose();
5349
+ }
5312
5350
  dispose() {
5313
5351
  for (const [_, value] of this._panels.entries()) {
5314
5352
  value.disposable.dispose();
@@ -5558,8 +5596,9 @@ class PaneviewPanel extends BasePanelView {
5558
5596
  }
5559
5597
 
5560
5598
  class DraggablePaneviewPanel extends PaneviewPanel {
5561
- constructor(id, component, headerComponent, orientation, isExpanded, disableDnd) {
5599
+ constructor(accessor, id, component, headerComponent, orientation, isExpanded, disableDnd) {
5562
5600
  super(id, component, headerComponent, orientation, isExpanded, true);
5601
+ this.accessor = accessor;
5563
5602
  this._onDidDrop = new Emitter();
5564
5603
  this.onDidDrop = this._onDidDrop.event;
5565
5604
  if (!disableDnd) {
@@ -5571,10 +5610,11 @@ class DraggablePaneviewPanel extends PaneviewPanel {
5571
5610
  return;
5572
5611
  }
5573
5612
  const id = this.id;
5613
+ const accessorId = this.accessor.id;
5574
5614
  this.header.draggable = true;
5575
5615
  this.handler = new (class PaneDragHandler extends DragHandler {
5576
5616
  getData() {
5577
- LocalSelectionTransfer.getInstance().setData([new PaneTransfer('paneview', id)], PaneTransfer.prototype);
5617
+ LocalSelectionTransfer.getInstance().setData([new PaneTransfer(accessorId, id)], PaneTransfer.prototype);
5578
5618
  return {
5579
5619
  dispose: () => {
5580
5620
  LocalSelectionTransfer.getInstance().clearData(PaneTransfer.prototype);
@@ -5584,12 +5624,22 @@ class DraggablePaneviewPanel extends PaneviewPanel {
5584
5624
  })(this.header);
5585
5625
  this.target = new Droptarget(this.element, {
5586
5626
  validOverlays: 'vertical',
5587
- canDisplayOverlay: () => {
5627
+ canDisplayOverlay: (event) => {
5588
5628
  const data = getPaneData();
5589
- if (!data) {
5590
- return true;
5629
+ if (data) {
5630
+ if (data.paneId !== this.id &&
5631
+ data.viewId === this.accessor.id) {
5632
+ return true;
5633
+ }
5591
5634
  }
5592
- return data.paneId !== this.id;
5635
+ if (this.accessor.options.showDndOverlay) {
5636
+ return this.accessor.options.showDndOverlay({
5637
+ nativeEvent: event,
5638
+ getData: getPaneData,
5639
+ panel: this,
5640
+ });
5641
+ }
5642
+ return false;
5593
5643
  },
5594
5644
  });
5595
5645
  this.addDisposables(this._onDidDrop, this.handler, this.target, this.target.onDrop((event) => {
@@ -5598,8 +5648,10 @@ class DraggablePaneviewPanel extends PaneviewPanel {
5598
5648
  }
5599
5649
  onDrop(event) {
5600
5650
  const data = getPaneData();
5601
- if (!data) {
5602
- this._onDidDrop.fire(Object.assign(Object.assign({}, event), { panel: this, getData: () => getPaneData() }));
5651
+ if (!data || data.viewId !== this.accessor.id) {
5652
+ // if there is no local drag event for this panel
5653
+ // or if the drag event was creating by another Paneview instance
5654
+ this._onDidDrop.fire(Object.assign(Object.assign({}, event), { panel: this, getData: getPaneData }));
5603
5655
  return;
5604
5656
  }
5605
5657
  const containerApi = this._params
@@ -5607,7 +5659,8 @@ class DraggablePaneviewPanel extends PaneviewPanel {
5607
5659
  const panelId = data.paneId;
5608
5660
  const existingPanel = containerApi.getPanel(panelId);
5609
5661
  if (!existingPanel) {
5610
- this._onDidDrop.fire(Object.assign(Object.assign({}, event), { panel: this, getData: () => getPaneData() }));
5662
+ // if the panel doesn't exist
5663
+ this._onDidDrop.fire(Object.assign(Object.assign({}, event), { panel: this, getData: getPaneData }));
5611
5664
  return;
5612
5665
  }
5613
5666
  const allPanels = containerApi.panels;
@@ -5631,15 +5684,18 @@ class DraggablePaneviewPanel extends PaneviewPanel {
5631
5684
  class DefaultHeader extends CompositeDisposable {
5632
5685
  constructor() {
5633
5686
  super();
5687
+ this._expandedIcon = createExpandMoreButton();
5688
+ this._collapsedIcon = createChevronRightButton();
5634
5689
  this.disposable = new MutableDisposable();
5635
5690
  this.apiRef = { api: null };
5636
5691
  this._element = document.createElement('div');
5637
5692
  this.element.className = 'default-header';
5638
5693
  this._content = document.createElement('span');
5639
- this._expander = document.createElement('a');
5640
- this.element.appendChild(this._content);
5694
+ this._expander = document.createElement('div');
5695
+ this._expander.className = 'dockview-pane-header-icon';
5641
5696
  this.element.appendChild(this._expander);
5642
- this.addDisposables(addDisposableListener(this._expander, 'click', () => {
5697
+ this.element.appendChild(this._content);
5698
+ this.addDisposables(addDisposableListener(this._element, 'click', () => {
5643
5699
  var _a;
5644
5700
  (_a = this.apiRef.api) === null || _a === void 0 ? void 0 : _a.setExpanded(!this.apiRef.api.isExpanded);
5645
5701
  }));
@@ -5650,11 +5706,32 @@ class DefaultHeader extends CompositeDisposable {
5650
5706
  init(params) {
5651
5707
  this.apiRef.api = params.api;
5652
5708
  this._content.textContent = params.title;
5653
- this._expander.textContent = params.api.isExpanded ? '<' : '>';
5654
- this.disposable.value = params.api.onDidExpansionChange((e) => {
5655
- this._expander.textContent = e.isExpanded ? '<' : '>';
5709
+ this.updateIcon();
5710
+ this.disposable.value = params.api.onDidExpansionChange(() => {
5711
+ this.updateIcon();
5656
5712
  });
5657
5713
  }
5714
+ updateIcon() {
5715
+ var _a;
5716
+ const isExpanded = !!((_a = this.apiRef.api) === null || _a === void 0 ? void 0 : _a.isExpanded);
5717
+ toggleClass(this._expander, 'collapsed', !isExpanded);
5718
+ if (isExpanded) {
5719
+ if (this._expander.contains(this._collapsedIcon)) {
5720
+ this._collapsedIcon.remove();
5721
+ }
5722
+ if (!this._expander.contains(this._expandedIcon)) {
5723
+ this._expander.appendChild(this._expandedIcon);
5724
+ }
5725
+ }
5726
+ else {
5727
+ if (this._expander.contains(this._expandedIcon)) {
5728
+ this._expandedIcon.remove();
5729
+ }
5730
+ if (!this._expander.contains(this._collapsedIcon)) {
5731
+ this._expander.appendChild(this._collapsedIcon);
5732
+ }
5733
+ }
5734
+ }
5658
5735
  update(_params) {
5659
5736
  //
5660
5737
  }
@@ -5664,9 +5741,10 @@ class DefaultHeader extends CompositeDisposable {
5664
5741
  }
5665
5742
  }
5666
5743
 
5744
+ const nextLayoutId = sequentialNumberGenerator();
5667
5745
  class PaneFramework extends DraggablePaneviewPanel {
5668
5746
  constructor(options) {
5669
- super(options.id, options.component, options.headerComponent, options.orientation, options.isExpanded, options.disableDnd);
5747
+ super(options.accessor, options.id, options.component, options.headerComponent, options.orientation, options.isExpanded, options.disableDnd);
5670
5748
  this.options = options;
5671
5749
  }
5672
5750
  getBodyComponent() {
@@ -5680,6 +5758,7 @@ class PaneviewComponent extends CompositeDisposable {
5680
5758
  constructor(element, options) {
5681
5759
  super();
5682
5760
  this.element = element;
5761
+ this._id = nextLayoutId.next();
5683
5762
  this._disposable = new MutableDisposable();
5684
5763
  this._viewDisposables = new Map();
5685
5764
  this._onDidLayoutfromJSON = new Emitter();
@@ -5706,6 +5785,9 @@ class PaneviewComponent extends CompositeDisposable {
5706
5785
  });
5707
5786
  this.addDisposables(this._disposable);
5708
5787
  }
5788
+ get id() {
5789
+ return this._id;
5790
+ }
5709
5791
  get panels() {
5710
5792
  return this.paneview.getPanes();
5711
5793
  }
@@ -5770,6 +5852,7 @@ class PaneviewComponent extends CompositeDisposable {
5770
5852
  orientation: exports.Orientation.VERTICAL,
5771
5853
  isExpanded: !!options.isExpanded,
5772
5854
  disableDnd: !!this.options.disableDnd,
5855
+ accessor: this,
5773
5856
  });
5774
5857
  this.doAddPanel(view);
5775
5858
  const size = typeof options.size === 'number' ? options.size : exports.Sizing.Distribute;
@@ -5828,13 +5911,9 @@ class PaneviewComponent extends CompositeDisposable {
5828
5911
  };
5829
5912
  }
5830
5913
  fromJSON(serializedPaneview) {
5914
+ this.clear();
5831
5915
  const { views, size } = serializedPaneview;
5832
5916
  const queue = [];
5833
- for (const [_, value] of this._viewDisposables.entries()) {
5834
- value.dispose();
5835
- }
5836
- this._viewDisposables.clear();
5837
- this.paneview.dispose();
5838
5917
  this.paneview = new Paneview(this.element, {
5839
5918
  orientation: exports.Orientation.VERTICAL,
5840
5919
  descriptor: {
@@ -5868,6 +5947,7 @@ class PaneviewComponent extends CompositeDisposable {
5868
5947
  orientation: exports.Orientation.VERTICAL,
5869
5948
  isExpanded: !!view.expanded,
5870
5949
  disableDnd: !!this.options.disableDnd,
5950
+ accessor: this,
5871
5951
  });
5872
5952
  this.doAddPanel(panel);
5873
5953
  queue.push(() => {
@@ -5893,6 +5973,13 @@ class PaneviewComponent extends CompositeDisposable {
5893
5973
  queue.forEach((f) => f());
5894
5974
  this._onDidLayoutfromJSON.fire();
5895
5975
  }
5976
+ clear() {
5977
+ for (const [_, value] of this._viewDisposables.entries()) {
5978
+ value.dispose();
5979
+ }
5980
+ this._viewDisposables.clear();
5981
+ this.paneview.dispose();
5982
+ }
5896
5983
  doAddPanel(panel) {
5897
5984
  const disposable = panel.onDidDrop((event) => {
5898
5985
  this._onDidDrop.fire(event);
@@ -6060,15 +6147,21 @@ class ReactPart {
6060
6147
  this.component = component;
6061
6148
  this.parameters = parameters;
6062
6149
  this.context = context;
6150
+ this._initialProps = {};
6063
6151
  this.disposed = false;
6064
6152
  this.createPortal();
6065
6153
  }
6066
6154
  update(props) {
6067
- var _a;
6068
6155
  if (this.disposed) {
6069
6156
  throw new Error('invalid operation: resource is already disposed');
6070
6157
  }
6071
- (_a = this.componentInstance) === null || _a === void 0 ? void 0 : _a.update(props);
6158
+ if (!this.componentInstance) {
6159
+ // if the component is yet to be mounted store the props
6160
+ this._initialProps = Object.assign(Object.assign({}, this._initialProps), props);
6161
+ }
6162
+ else {
6163
+ this.componentInstance.update(props);
6164
+ }
6072
6165
  }
6073
6166
  createPortal() {
6074
6167
  if (this.disposed) {
@@ -6088,6 +6181,10 @@ class ReactPart {
6088
6181
  componentProps: this.parameters,
6089
6182
  ref: (element) => {
6090
6183
  this.componentInstance = element;
6184
+ if (Object.keys(this._initialProps).length > 0) {
6185
+ this.componentInstance.update(this._initialProps);
6186
+ this._initialProps = {}; // don't keep a reference to the users object once no longer required
6187
+ }
6091
6188
  },
6092
6189
  });
6093
6190
  const node = this.context
@@ -6144,30 +6241,19 @@ class ReactPanelContentPart {
6144
6241
  this.onDidBlur = this._onDidBlur.event;
6145
6242
  this._element = document.createElement('div');
6146
6243
  this._element.className = 'dockview-react-part';
6147
- this._actionsElement = document.createElement('div');
6148
- this._actionsElement.className = 'dockview-react-part';
6149
6244
  }
6150
6245
  get element() {
6151
6246
  return this._element;
6152
6247
  }
6153
- get actions() {
6154
- return this._actionsElement;
6155
- }
6156
6248
  focus() {
6157
6249
  // TODO
6158
6250
  }
6159
6251
  init(parameters) {
6160
- const context = {
6161
- api: parameters.api,
6162
- containerApi: parameters.containerApi,
6163
- actionsPortalElement: this._actionsElement,
6164
- tabPortalElement: parameters.tab,
6165
- };
6166
6252
  this.part = new ReactPart(this.element, this.reactPortalStore, this.component, {
6167
6253
  params: parameters.params,
6168
6254
  api: parameters.api,
6169
6255
  containerApi: parameters.containerApi,
6170
- }, context);
6256
+ });
6171
6257
  }
6172
6258
  toJSON() {
6173
6259
  return {
@@ -6185,11 +6271,10 @@ class ReactPanelContentPart {
6185
6271
  // noop
6186
6272
  }
6187
6273
  dispose() {
6188
- var _a, _b;
6274
+ var _a;
6189
6275
  this._onDidFocus.dispose();
6190
6276
  this._onDidBlur.dispose();
6191
6277
  (_a = this.part) === null || _a === void 0 ? void 0 : _a.dispose();
6192
- (_b = this.actionsPart) === null || _b === void 0 ? void 0 : _b.dispose();
6193
6278
  }
6194
6279
  }
6195
6280
 
@@ -6219,6 +6304,9 @@ class ReactPanelHeaderPart {
6219
6304
  (_a = this.part) === null || _a === void 0 ? void 0 : _a.update(event.params);
6220
6305
  }
6221
6306
  toJSON() {
6307
+ if (this.id === DEFAULT_TAB_IDENTIFIER) {
6308
+ return {};
6309
+ }
6222
6310
  return {
6223
6311
  id: this.id,
6224
6312
  };
@@ -6240,17 +6328,25 @@ class ReactPanelDeserialzier {
6240
6328
  this.layout = layout;
6241
6329
  }
6242
6330
  fromJSON(panelData, group) {
6243
- var _a, _b, _c;
6331
+ var _a, _b, _c, _d;
6244
6332
  const panelId = panelData.id;
6245
6333
  const params = panelData.params;
6246
6334
  const title = panelData.title;
6247
6335
  const suppressClosable = panelData.suppressClosable;
6248
6336
  const viewData = panelData.view;
6337
+ let tab;
6338
+ if ((_a = viewData.tab) === null || _a === void 0 ? void 0 : _a.id) {
6339
+ 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());
6340
+ }
6341
+ else if (this.layout.options.defaultTabComponent) {
6342
+ 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());
6343
+ }
6344
+ else {
6345
+ tab = new DefaultTab();
6346
+ }
6249
6347
  const view = new DefaultGroupPanelView({
6250
- 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),
6251
- tab: ((_b = viewData.tab) === null || _b === void 0 ? void 0 : _b.id)
6252
- ? 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)
6253
- : new DefaultTab(),
6348
+ 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),
6349
+ tab,
6254
6350
  });
6255
6351
  const panel = new DockviewGroupPanel(panelId, this.layout, new DockviewApi(this.layout), group);
6256
6352
  panel.init({
@@ -6318,6 +6414,80 @@ class ReactWatermarkPart {
6318
6414
  }
6319
6415
  }
6320
6416
 
6417
+ class ReactGroupControlsRendererPart {
6418
+ constructor(component, reactPortalStore, _group) {
6419
+ this.component = component;
6420
+ this.reactPortalStore = reactPortalStore;
6421
+ this._group = _group;
6422
+ this.mutableDisposable = new MutableDisposable();
6423
+ this._element = document.createElement('div');
6424
+ this._element.className = 'dockview-react-part';
6425
+ }
6426
+ get element() {
6427
+ return this._element;
6428
+ }
6429
+ get part() {
6430
+ return this._part;
6431
+ }
6432
+ get group() {
6433
+ return this._group;
6434
+ }
6435
+ focus() {
6436
+ // TODO
6437
+ }
6438
+ init(parameters) {
6439
+ this.mutableDisposable.value = new CompositeDisposable(this._group.model.onDidAddPanel(() => {
6440
+ this.updatePanels();
6441
+ }), this._group.model.onDidRemovePanel(() => {
6442
+ this.updatePanels();
6443
+ }), this._group.model.onDidActivePanelChange(() => {
6444
+ this.updateActivePanel();
6445
+ }), parameters.api.onDidActiveChange(() => {
6446
+ this.updateGroupActive();
6447
+ }));
6448
+ this._part = new ReactPart(this.element, this.reactPortalStore, this.component, {
6449
+ api: parameters.api,
6450
+ containerApi: parameters.containerApi,
6451
+ panels: this._group.model.panels,
6452
+ activePanel: this._group.model.activePanel,
6453
+ isGroupActive: this._group.api.isActive,
6454
+ });
6455
+ }
6456
+ update(event) {
6457
+ var _a;
6458
+ (_a = this._part) === null || _a === void 0 ? void 0 : _a.update(event.params);
6459
+ }
6460
+ dispose() {
6461
+ var _a;
6462
+ this.mutableDisposable.dispose();
6463
+ (_a = this._part) === null || _a === void 0 ? void 0 : _a.dispose();
6464
+ }
6465
+ updatePanels() {
6466
+ this.update({ params: { panels: this._group.model.panels } });
6467
+ }
6468
+ updateActivePanel() {
6469
+ this.update({
6470
+ params: {
6471
+ activePanel: this._group.model.activePanel,
6472
+ },
6473
+ });
6474
+ }
6475
+ updateGroupActive() {
6476
+ this.update({
6477
+ params: {
6478
+ isGroupActive: this._group.api.isActive,
6479
+ },
6480
+ });
6481
+ }
6482
+ }
6483
+
6484
+ function createGroupControlElement(component, store) {
6485
+ return component
6486
+ ? (groupPanel) => {
6487
+ return new ReactGroupControlsRendererPart(component, store, groupPanel);
6488
+ }
6489
+ : undefined;
6490
+ }
6321
6491
  const DockviewReact = React__namespace.forwardRef((props, ref) => {
6322
6492
  const domRef = React__namespace.useRef(null);
6323
6493
  const dockviewRef = React__namespace.useRef();
@@ -6367,12 +6537,15 @@ const DockviewReact = React__namespace.forwardRef((props, ref) => {
6367
6537
  const dockview = new DockviewComponent(element, {
6368
6538
  frameworkComponentFactory: factory,
6369
6539
  frameworkComponents: props.components,
6370
- frameworkTabComponents: props.tabComponents,
6540
+ frameworkTabComponents: Object.assign(Object.assign({}, (props.tabComponents || {})), { [DEFAULT_TAB_IDENTIFIER]: props.defaultTabComponent }),
6371
6541
  tabHeight: props.tabHeight,
6372
6542
  watermarkFrameworkComponent: props.watermarkComponent,
6543
+ defaultTabComponent: DEFAULT_TAB_IDENTIFIER,
6373
6544
  styles: props.hideBorders
6374
6545
  ? { separatorBorder: 'transparent' }
6375
6546
  : undefined,
6547
+ showDndOverlay: props.showDndOverlay,
6548
+ createGroupControlElement: createGroupControlElement(props.groupControlComponent, { addPortal }),
6376
6549
  });
6377
6550
  (_a = domRef.current) === null || _a === void 0 ? void 0 : _a.appendChild(dockview.element);
6378
6551
  dockview.deserializer = new ReactPanelDeserialzier(dockview);
@@ -6449,10 +6622,79 @@ const DockviewReact = React__namespace.forwardRef((props, ref) => {
6449
6622
  disposable.dispose();
6450
6623
  };
6451
6624
  }, [props.onTabContextMenu]);
6625
+ React__namespace.useEffect(() => {
6626
+ if (!dockviewRef.current) {
6627
+ return;
6628
+ }
6629
+ dockviewRef.current.updateOptions({
6630
+ defaultTabComponent: DEFAULT_TAB_IDENTIFIER,
6631
+ frameworkTabComponents: Object.assign(Object.assign({}, (props.tabComponents || {})), { [DEFAULT_TAB_IDENTIFIER]: props.defaultTabComponent }),
6632
+ });
6633
+ }, [props.defaultTabComponent]);
6634
+ React__namespace.useEffect(() => {
6635
+ if (!dockviewRef.current) {
6636
+ return;
6637
+ }
6638
+ dockviewRef.current.updateOptions({
6639
+ createGroupControlElement: createGroupControlElement(props.groupControlComponent, { addPortal }),
6640
+ });
6641
+ }, [props.groupControlComponent]);
6452
6642
  return (React__namespace.createElement("div", { className: props.className, style: { height: '100%', width: '100%' }, ref: domRef }, portals));
6453
6643
  });
6454
6644
  DockviewReact.displayName = 'DockviewComponent';
6455
6645
 
6646
+ /******************************************************************************
6647
+ Copyright (c) Microsoft Corporation.
6648
+
6649
+ Permission to use, copy, modify, and/or distribute this software for any
6650
+ purpose with or without fee is hereby granted.
6651
+
6652
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
6653
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
6654
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
6655
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
6656
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
6657
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
6658
+ PERFORMANCE OF THIS SOFTWARE.
6659
+ ***************************************************************************** */
6660
+
6661
+ function __rest(s, e) {
6662
+ var t = {};
6663
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
6664
+ t[p] = s[p];
6665
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6666
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
6667
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
6668
+ t[p[i]] = s[p[i]];
6669
+ }
6670
+ return t;
6671
+ }
6672
+
6673
+ const CloseButton = () => (React__namespace.createElement("svg", { height: "11", width: "11", viewBox: "0 0 28 28", "aria-hidden": 'false', focusable: false, className: "dockview-svg" },
6674
+ React__namespace.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" })));
6675
+
6676
+ const DockviewDefaultTab = (_a) => {
6677
+ var { api, containerApi: _containerApi, params: _params } = _a, rest = __rest(_a, ["api", "containerApi", "params"]);
6678
+ const onClose = React__namespace.useCallback((event) => {
6679
+ event.stopPropagation();
6680
+ api.close();
6681
+ }, [api]);
6682
+ const onClick = React__namespace.useCallback((event) => {
6683
+ api.setActive();
6684
+ if (rest.onClick) {
6685
+ rest.onClick(event);
6686
+ }
6687
+ }, [api, rest.onClick]);
6688
+ const iconClassname = React__namespace.useMemo(() => {
6689
+ const cn = ['dockview-react-tab-action'];
6690
+ return cn.join(',');
6691
+ }, [api.suppressClosable]);
6692
+ return (React__namespace.createElement("div", Object.assign({}, rest, { onClick: onClick, className: "dockview-react-tab" }),
6693
+ React__namespace.createElement("span", { className: "dockview-react-tab-title" }, api.title),
6694
+ React__namespace.createElement("div", { className: iconClassname, onClick: onClose },
6695
+ React__namespace.createElement(CloseButton, null))));
6696
+ };
6697
+
6456
6698
  class ReactPanelView extends SplitviewPanel {
6457
6699
  constructor(id, component, reactComponent, reactPortalStore) {
6458
6700
  super(id, component);
@@ -6682,6 +6924,7 @@ const PaneviewReact = React__namespace.forwardRef((props, ref) => {
6682
6924
  createComponent,
6683
6925
  },
6684
6926
  },
6927
+ showDndOverlay: props.showDndOverlay,
6685
6928
  });
6686
6929
  const api = new PaneviewApi(paneview);
6687
6930
  const { clientWidth, clientHeight } = domRef.current;
@@ -6726,6 +6969,14 @@ const PaneviewReact = React__namespace.forwardRef((props, ref) => {
6726
6969
  disposable.dispose();
6727
6970
  };
6728
6971
  }, [props.onDidDrop]);
6972
+ React__namespace.useEffect(() => {
6973
+ if (!paneviewRef.current) {
6974
+ return;
6975
+ }
6976
+ paneviewRef.current.updateOptions({
6977
+ showDndOverlay: props.showDndOverlay,
6978
+ });
6979
+ }, [props.showDndOverlay]);
6729
6980
  return (React__namespace.createElement("div", { className: props.className, style: { height: '100%', width: '100%' }, ref: domRef }, portals));
6730
6981
  });
6731
6982
  PaneviewReact.displayName = 'PaneviewComponent';
@@ -6734,6 +6985,7 @@ exports.BaseGrid = BaseGrid;
6734
6985
  exports.ContentContainer = ContentContainer;
6735
6986
  exports.DockviewApi = DockviewApi;
6736
6987
  exports.DockviewComponent = DockviewComponent;
6988
+ exports.DockviewDefaultTab = DockviewDefaultTab;
6737
6989
  exports.DockviewReact = DockviewReact;
6738
6990
  exports.Gridview = Gridview;
6739
6991
  exports.GridviewApi = GridviewApi;
@@ -6750,8 +7002,6 @@ exports.PaneviewApi = PaneviewApi;
6750
7002
  exports.PaneviewComponent = PaneviewComponent;
6751
7003
  exports.PaneviewPanel = PaneviewPanel;
6752
7004
  exports.PaneviewReact = PaneviewReact;
6753
- exports.ReactPanelContentPart = ReactPanelContentPart;
6754
- exports.ReactPanelHeaderPart = ReactPanelHeaderPart;
6755
7005
  exports.ReactPart = ReactPart;
6756
7006
  exports.ReactPartContext = ReactPartContext;
6757
7007
  exports.Splitview = Splitview;