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