dockview 4.13.1 → 5.0.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.
@@ -0,0 +1,945 @@
1
+ /**
2
+ * dockview
3
+ * @version 5.0.0
4
+ * @link https://github.com/mathuo/dockview
5
+ * @license MIT
6
+ */
7
+ 'use strict';
8
+
9
+ var dockviewCore = require('dockview-core');
10
+ var React = require('react');
11
+ var ReactDOM = require('react-dom');
12
+
13
+ function styleInject(css, ref) {
14
+ if ( ref === void 0 ) ref = {};
15
+ var insertAt = ref.insertAt;
16
+
17
+ if (!css || typeof document === 'undefined') { return; }
18
+
19
+ var head = document.head || document.getElementsByTagName('head')[0];
20
+ var style = document.createElement('style');
21
+ style.type = 'text/css';
22
+
23
+ if (insertAt === 'top') {
24
+ if (head.firstChild) {
25
+ head.insertBefore(style, head.firstChild);
26
+ } else {
27
+ head.appendChild(style);
28
+ }
29
+ } else {
30
+ head.appendChild(style);
31
+ }
32
+
33
+ if (style.styleSheet) {
34
+ style.styleSheet.cssText = css;
35
+ } else {
36
+ style.appendChild(document.createTextNode(css));
37
+ }
38
+ }
39
+
40
+ var css_248z = ".dv-scrollable {\n position: relative;\n overflow: hidden;\n}\n.dv-scrollable .dv-scrollbar {\n position: absolute;\n border-radius: 2px;\n background-color: transparent;\n /* GPU optimizations */\n will-change: background-color, transform;\n transform: translate3d(0, 0, 0);\n backface-visibility: hidden;\n transition-property: background-color;\n transition-timing-function: ease-in-out;\n transition-duration: 1s;\n transition-delay: 0s;\n}\n.dv-scrollable .dv-scrollbar-horizontal {\n bottom: 0px;\n left: 0px;\n height: 4px;\n}\n.dv-scrollable .dv-scrollbar-vertical {\n right: 0px;\n top: 0px;\n width: 4px;\n}\n.dv-scrollable:hover .dv-scrollbar, .dv-scrollable.dv-scrollable-resizing .dv-scrollbar, .dv-scrollable.dv-scrollable-scrolling .dv-scrollbar {\n background-color: var(--dv-scrollbar-background-color, rgba(255, 255, 255, 0.25));\n}\n.dv-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: transparent;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\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.dockview-theme-dark .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\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: transparent;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\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 --dv-scrollbar-background-color: rgba(0, 0, 0, 0.25);\n}\n.dockview-theme-light .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\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: transparent;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\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 .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\n}\n.dockview-theme-vs .dv-groupview.dv-active-group > .dv-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 .dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tab.dv-active-tab {\n border-top: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tab.dv-inactive-tab {\n border-top: 2px solid var(--dv-activegroup-hiddenpanel-tab-background-color);\n}\n.dockview-theme-vs .dv-groupview.dv-inactive-group > .dv-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 .dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tab.dv-active-tab {\n border-top: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tab.dv-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: transparent;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-color-abyss-dark: #000c18;\n --dv-color-abyss: #10192c;\n --dv-color-abyss-light: #1c1c2a;\n --dv-color-abyss-lighter: #2b2b4a;\n --dv-color-abyss-accent: rgb(91, 30, 207);\n --dv-color-abyss-primary-text: white;\n --dv-color-abyss-secondary-text: rgb(148, 151, 169);\n --dv-group-view-background-color: var(--dv-color-abyss-dark);\n --dv-tabs-and-actions-container-background-color: var(\n --dv-color-abyss-light\n );\n --dv-activegroup-visiblepanel-tab-background-color: var(\n --dv-color-abyss-dark\n );\n --dv-activegroup-hiddenpanel-tab-background-color: var(--dv-color-abyss);\n --dv-inactivegroup-visiblepanel-tab-background-color: var(\n --dv-color-abyss-dark\n );\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(--dv-color-abyss);\n --dv-tab-divider-color: var(--dv-color-abyss-lighter);\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: var(--dv-color-abyss-lighter);\n --dv-paneview-header-border-color: var(--dv-color-abyss-lighter);\n --dv-paneview-active-outline-color: #596f99;\n}\n.dockview-theme-abyss .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\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: transparent;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\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 .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\n}\n.dockview-theme-dracula .dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n position: relative;\n}\n.dockview-theme-dracula .dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-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 .dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n position: relative;\n}\n.dockview-theme-dracula .dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #5e3d5a;\n z-index: 999;\n}\n\n.dockview-theme-replit {\n --dv-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: transparent;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n box-sizing: border-box;\n padding: 10px;\n background-color: #ebeced;\n --dv-group-view-background-color: #ebeced;\n --dv-tabs-and-actions-container-background-color: #fcfcfc;\n --dv-activegroup-visiblepanel-tab-background-color: #f0f1f2;\n --dv-activegroup-hiddenpanel-tab-background-color: #fcfcfc;\n --dv-inactivegroup-visiblepanel-tab-background-color: #f0f1f2;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #fcfcfc;\n --dv-tab-divider-color: transparent;\n --dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-activegroup-hiddenpanel-tab-color: rgb(51, 51, 51);\n --dv-inactivegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-inactivegroup-hiddenpanel-tab-color: rgb(51, 51, 51);\n --dv-separator-border: transparent;\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n --dv-sash-color: #cfd1d3;\n --dv-active-sash-color: #babbbb;\n}\n.dockview-theme-replit .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\n}\n.dockview-theme-replit .dv-resize-container:has(> .dv-groupview) {\n border-radius: 8px;\n}\n.dockview-theme-replit .dv-resize-container {\n border-radius: 10px !important;\n border: none;\n}\n.dockview-theme-replit .dv-groupview {\n overflow: hidden;\n border-radius: 10px;\n}\n.dockview-theme-replit .dv-groupview .dv-tabs-and-actions-container {\n border-bottom: 1px solid rgba(128, 128, 128, 0.35);\n}\n.dockview-theme-replit .dv-groupview .dv-tabs-and-actions-container .dv-tab {\n margin: 4px;\n border-radius: 8px;\n}\n.dockview-theme-replit .dv-groupview .dv-tabs-and-actions-container .dv-tab .dv-svg {\n height: 8px;\n width: 8px;\n}\n.dockview-theme-replit .dv-groupview .dv-tabs-and-actions-container .dv-tab:hover {\n background-color: #e4e5e6 !important;\n}\n.dockview-theme-replit .dv-groupview .dv-content-container {\n background-color: #fcfcfc;\n}\n.dockview-theme-replit .dv-groupview.dv-active-group {\n border: 1px solid rgba(128, 128, 128, 0.35);\n}\n.dockview-theme-replit .dv-groupview.dv-inactive-group {\n border: 1px solid transparent;\n}\n.dockview-theme-replit .dv-vertical > .dv-sash-container > .dv-sash {\n background-color: transparent;\n}\n.dockview-theme-replit .dv-vertical > .dv-sash-container > .dv-sash:not(.disabled)::after {\n content: \"\";\n height: 4px;\n width: 40px;\n border-radius: 2px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--dv-sash-color);\n position: absolute;\n}\n.dockview-theme-replit .dv-vertical > .dv-sash-container > .dv-sash:not(.disabled):hover, .dockview-theme-replit .dv-vertical > .dv-sash-container > .dv-sash:not(.disabled):active {\n background-color: transparent;\n}\n.dockview-theme-replit .dv-vertical > .dv-sash-container > .dv-sash:not(.disabled):hover::after, .dockview-theme-replit .dv-vertical > .dv-sash-container > .dv-sash:not(.disabled):active::after {\n background-color: var(--dv-active-sash-color);\n}\n.dockview-theme-replit .dv-horizontal > .dv-sash-container > .dv-sash {\n background-color: transparent;\n}\n.dockview-theme-replit .dv-horizontal > .dv-sash-container > .dv-sash:not(.disabled)::after {\n content: \"\";\n height: 40px;\n width: 4px;\n border-radius: 2px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--dv-sash-color);\n position: absolute;\n}\n.dockview-theme-replit .dv-horizontal > .dv-sash-container > .dv-sash:not(.disabled):hover, .dockview-theme-replit .dv-horizontal > .dv-sash-container > .dv-sash:not(.disabled):active {\n background-color: transparent;\n}\n.dockview-theme-replit .dv-horizontal > .dv-sash-container > .dv-sash:not(.disabled):hover::after, .dockview-theme-replit .dv-horizontal > .dv-sash-container > .dv-sash:not(.disabled):active::after {\n background-color: var(--dv-active-sash-color);\n}\n\n.dockview-theme-abyss-spaced {\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: transparent;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-tab-font-size: 12px;\n --dv-border-radius: 20px;\n --dv-tab-margin: 0.5rem 0.25rem;\n --dv-tabs-and-actions-container-height: 44px;\n --dv-border-radius: 20px;\n box-sizing: border-box;\n --dv-color-abyss-dark: rgb(11, 6, 17);\n --dv-color-abyss: #16121f;\n --dv-color-abyss-light: #201d2b;\n --dv-color-abyss-lighter: #2a2837;\n --dv-color-abyss-accent: rgb(91, 30, 207);\n --dv-color-abyss-primary-text: white;\n --dv-color-abyss-secondary-text: rgb(148, 151, 169);\n --dv-drag-over-border: 2px solid var(--dv-color-abyss-accent);\n --dv-drag-over-background-color: \"\";\n --dv-group-view-background-color: var(--dv-color-abyss-dark);\n --dv-tabs-and-actions-container-background-color: var(--dv-color-abyss);\n --dv-activegroup-visiblepanel-tab-background-color: var(\n --dv-color-abyss-lighter\n );\n --dv-activegroup-hiddenpanel-tab-background-color: var(\n --dv-color-abyss-light\n );\n --dv-inactivegroup-visiblepanel-tab-background-color: var(\n --dv-color-abyss-lighter\n );\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(\n --dv-color-abyss-light\n );\n --dv-tab-divider-color: transparent;\n --dv-activegroup-visiblepanel-tab-color: var(--dv-color-abyss-primary-text);\n --dv-activegroup-hiddenpanel-tab-color: var(\n --dv-color-abyss-secondary-text\n );\n --dv-inactivegroup-visiblepanel-tab-color: var(\n --dv-color-abyss-primary-text\n );\n --dv-inactivegroup-hiddenpanel-tab-color: var(\n --dv-color-abyss-secondary-text\n );\n --dv-separator-border: transparent;\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n --dv-active-sash-color: var(--dv-color-abyss-accent);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(0, 0, 0, 0.5);\n padding: 10px;\n background-color: var(--dv-color-abyss-dark);\n}\n.dockview-theme-abyss-spaced .dv-resize-container:has(> .dv-groupview) {\n border-radius: 8px;\n}\n.dockview-theme-abyss-spaced .dv-sash {\n border-radius: 4px;\n}\n.dockview-theme-abyss-spaced .dv-drop-target-anchor {\n border-radius: calc(var(--dv-border-radius) / 4);\n}\n.dockview-theme-abyss-spaced .dv-drop-target-anchor.dv-drop-target-content {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-abyss-spaced .dv-resize-container {\n border-radius: var(--dv-border-radius) !important;\n border: none;\n}\n.dockview-theme-abyss-spaced .dv-tabs-overflow-container,\n.dockview-theme-abyss-spaced .dv-tabs-overflow-dropdown-default {\n border-radius: 8px;\n height: unset !important;\n}\n.dockview-theme-abyss-spaced .dv-tab {\n border-radius: 8px;\n}\n.dockview-theme-abyss-spaced .dv-tab .dv-svg {\n height: 8px;\n width: 8px;\n}\n.dockview-theme-abyss-spaced .dv-groupview {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-abyss-spaced .dv-groupview .dv-tabs-and-actions-container {\n padding: 0px calc(var(--dv-border-radius) / 2);\n}\n.dockview-theme-abyss-spaced .dv-groupview .dv-content-container {\n background-color: var(--dv-tabs-and-actions-container-background-color);\n}\n.dockview-theme-abyss-spaced .dv-resize-container .dv-groupview {\n border: 2px solid var(--dv-color-abyss-dark);\n}\n\n.dockview-theme-light-spaced {\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: transparent;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-tab-font-size: 12px;\n --dv-border-radius: 20px;\n --dv-tab-margin: 0.5rem 0.25rem;\n --dv-tabs-and-actions-container-height: 44px;\n --dv-border-radius: 20px;\n box-sizing: border-box;\n --dv-drag-over-border: 2px solid rgb(91, 30, 207);\n --dv-drag-over-background-color: \"\";\n --dv-group-view-background-color: #f6f5f9;\n --dv-tabs-and-actions-container-background-color: white;\n --dv-activegroup-visiblepanel-tab-background-color: #ededf0;\n --dv-activegroup-hiddenpanel-tab-background-color: #f9f9fa;\n --dv-inactivegroup-visiblepanel-tab-background-color: #ededf0;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #f9f9fa;\n --dv-tab-divider-color: transparent;\n --dv-activegroup-visiblepanel-tab-color: rgb(104, 107, 130);\n --dv-activegroup-hiddenpanel-tab-color: rgb(148, 151, 169);\n --dv-inactivegroup-visiblepanel-tab-color: rgb(104, 107, 130);\n --dv-inactivegroup-hiddenpanel-tab-color: rgb(148, 151, 169);\n --dv-separator-border: transparent;\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n --dv-active-sash-color: rgb(91, 30, 207);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(0, 0, 0, 0.1);\n padding: 10px;\n background-color: #f6f5f9;\n --dv-scrollbar-background-color: rgba(0, 0, 0, 0.25);\n}\n.dockview-theme-light-spaced .dv-resize-container:has(> .dv-groupview) {\n border-radius: 8px;\n}\n.dockview-theme-light-spaced .dv-sash {\n border-radius: 4px;\n}\n.dockview-theme-light-spaced .dv-drop-target-anchor {\n border-radius: calc(var(--dv-border-radius) / 4);\n}\n.dockview-theme-light-spaced .dv-drop-target-anchor.dv-drop-target-content {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-light-spaced .dv-resize-container {\n border-radius: var(--dv-border-radius) !important;\n border: none;\n}\n.dockview-theme-light-spaced .dv-tabs-overflow-container,\n.dockview-theme-light-spaced .dv-tabs-overflow-dropdown-default {\n border-radius: 8px;\n height: unset !important;\n}\n.dockview-theme-light-spaced .dv-tab {\n border-radius: 8px;\n}\n.dockview-theme-light-spaced .dv-tab .dv-svg {\n height: 8px;\n width: 8px;\n}\n.dockview-theme-light-spaced .dv-groupview {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-light-spaced .dv-groupview .dv-tabs-and-actions-container {\n padding: 0px calc(var(--dv-border-radius) / 2);\n}\n.dockview-theme-light-spaced .dv-groupview .dv-content-container {\n background-color: var(--dv-tabs-and-actions-container-background-color);\n}\n.dockview-theme-light-spaced .dv-resize-container .dv-groupview {\n border: 2px solid rgba(255, 255, 255, 0.1);\n}\n.dv-drop-target-container {\n position: absolute;\n z-index: 9999;\n top: 0px;\n left: 0px;\n height: 100%;\n width: 100%;\n pointer-events: none;\n overflow: hidden;\n --dv-transition-duration: 300ms;\n}\n.dv-drop-target-container .dv-drop-target-anchor {\n position: relative;\n border: var(--dv-drag-over-border);\n background-color: var(--dv-drag-over-background-color);\n opacity: 1;\n /* GPU optimizations */\n will-change: transform, opacity;\n transform: translate3d(0, 0, 0);\n backface-visibility: hidden;\n contain: layout paint;\n transition: opacity var(--dv-transition-duration) ease-in, transform var(--dv-transition-duration) ease-out;\n}\n.dv-drop-target {\n position: relative;\n --dv-transition-duration: 70ms;\n}\n.dv-drop-target > .dv-drop-target-dropzone {\n position: absolute;\n left: 0px;\n top: 0px;\n height: 100%;\n width: 100%;\n z-index: 1000;\n pointer-events: none;\n}\n.dv-drop-target > .dv-drop-target-dropzone > .dv-drop-target-selection {\n position: relative;\n box-sizing: border-box;\n height: 100%;\n width: 100%;\n border: var(--dv-drag-over-border);\n background-color: var(--dv-drag-over-background-color);\n transition: top var(--dv-transition-duration) ease-out, left var(--dv-transition-duration) ease-out, width var(--dv-transition-duration) ease-out, height var(--dv-transition-duration) ease-out, opacity var(--dv-transition-duration) ease-out;\n will-change: transform;\n pointer-events: none;\n}\n.dv-drop-target > .dv-drop-target-dropzone > .dv-drop-target-selection.dv-drop-target-top.dv-drop-target-small-vertical {\n border-top: 1px solid var(--dv-drag-over-border-color);\n}\n.dv-drop-target > .dv-drop-target-dropzone > .dv-drop-target-selection.dv-drop-target-bottom.dv-drop-target-small-vertical {\n border-bottom: 1px solid var(--dv-drag-over-border-color);\n}\n.dv-drop-target > .dv-drop-target-dropzone > .dv-drop-target-selection.dv-drop-target-left.dv-drop-target-small-horizontal {\n border-left: 1px solid var(--dv-drag-over-border-color);\n}\n.dv-drop-target > .dv-drop-target-dropzone > .dv-drop-target-selection.dv-drop-target-right.dv-drop-target-small-horizontal {\n border-right: 1px solid var(--dv-drag-over-border-color);\n}\n.dv-dockview {\n position: relative;\n background-color: var(--dv-group-view-background-color);\n contain: layout;\n}\n.dv-dockview .dv-watermark-container {\n position: absolute;\n top: 0px;\n left: 0px;\n height: 100%;\n width: 100%;\n z-index: 1;\n}\n.dv-dockview .dv-overlay-render-container {\n position: relative;\n}\n\n.dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-inactive-tab {\n background-color: var(--dv-activegroup-hiddenpanel-tab-background-color);\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n background-color: var(--dv-inactivegroup-visiblepanel-tab-background-color);\n color: var(--dv-inactivegroup-visiblepanel-tab-color);\n}\n.dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-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.dv-tab.dv-tab-dragging {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.dv-groupview {\n display: flex;\n height: 100%;\n background-color: var(--dv-group-view-background-color);\n overflow: hidden;\n flex-direction: column;\n}\n.dv-groupview:focus {\n outline: none;\n}\n.dv-groupview > .dv-content-container {\n flex-grow: 1;\n min-height: 0;\n outline: none;\n}\n.dv-groupview.dv-groupview-header-bottom {\n flex-direction: column-reverse;\n}\n.dv-groupview.dv-groupview-header-left {\n flex-direction: row;\n}\n.dv-groupview.dv-groupview-header-right {\n flex-direction: row-reverse;\n}\n.dv-root-wrapper {\n height: 100%;\n width: 100%;\n}\n.dv-grid-view,\n.dv-branch-node {\n height: 100%;\n width: 100%;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-top {\n background-color: red;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-bottom {\n background-color: green;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-left {\n background-color: yellow;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-right {\n background-color: blue;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-topleft,\n.dv-debug .dv-resize-container .dv-resize-handle-topright,\n.dv-debug .dv-resize-container .dv-resize-handle-bottomleft,\n.dv-debug .dv-resize-container .dv-resize-handle-bottomright {\n background-color: cyan;\n}\n\n.dv-resize-container {\n --dv-overlay-z-index: var(--dv-overlay-z-index, 999);\n position: absolute;\n z-index: calc(var(--dv-overlay-z-index) - 2);\n border: 1px solid var(--dv-tab-divider-color);\n box-shadow: var(--dv-floating-box-shadow);\n /* GPU optimizations for floating group movement */\n will-change: transform, opacity;\n transform: translate3d(0, 0, 0);\n backface-visibility: hidden;\n}\n.dv-resize-container.dv-hidden {\n display: none;\n}\n.dv-resize-container.dv-resize-container-dragging {\n opacity: 0.5;\n /* Enhanced GPU acceleration during drag */\n will-change: transform, opacity;\n}\n.dv-resize-container .dv-resize-handle-top {\n height: 4px;\n width: calc(100% - 8px);\n left: 4px;\n top: -2px;\n z-index: var(--dv-overlay-z-index);\n position: absolute;\n cursor: ns-resize;\n}\n.dv-resize-container .dv-resize-handle-bottom {\n height: 4px;\n width: calc(100% - 8px);\n left: 4px;\n bottom: -2px;\n z-index: var(--dv-overlay-z-index);\n position: absolute;\n cursor: ns-resize;\n}\n.dv-resize-container .dv-resize-handle-left {\n height: calc(100% - 8px);\n width: 4px;\n left: -2px;\n top: 4px;\n z-index: var(--dv-overlay-z-index);\n position: absolute;\n cursor: ew-resize;\n}\n.dv-resize-container .dv-resize-handle-right {\n height: calc(100% - 8px);\n width: 4px;\n right: -2px;\n top: 4px;\n z-index: var(--dv-overlay-z-index);\n position: absolute;\n cursor: ew-resize;\n}\n.dv-resize-container .dv-resize-handle-topleft {\n height: 4px;\n width: 4px;\n top: -2px;\n left: -2px;\n z-index: var(--dv-overlay-z-index);\n position: absolute;\n cursor: nw-resize;\n}\n.dv-resize-container .dv-resize-handle-topright {\n height: 4px;\n width: 4px;\n right: -2px;\n top: -2px;\n z-index: var(--dv-overlay-z-index);\n position: absolute;\n cursor: ne-resize;\n}\n.dv-resize-container .dv-resize-handle-bottomleft {\n height: 4px;\n width: 4px;\n left: -2px;\n bottom: -2px;\n z-index: var(--dv-overlay-z-index);\n position: absolute;\n cursor: sw-resize;\n}\n.dv-resize-container .dv-resize-handle-bottomright {\n height: 4px;\n width: 4px;\n right: -2px;\n bottom: -2px;\n z-index: var(--dv-overlay-z-index);\n position: absolute;\n cursor: se-resize;\n}\n.dv-render-overlay {\n --dv-overlay-z-index: var(--dv-overlay-z-index, 999);\n position: absolute;\n z-index: 1;\n width: 100%;\n height: 100%;\n contain: layout paint;\n isolation: isolate;\n /* GPU optimizations */\n will-change: transform;\n transform: translate3d(0, 0, 0);\n backface-visibility: hidden;\n}\n.dv-render-overlay.dv-render-overlay-float {\n z-index: calc(var(--dv-overlay-z-index) - 1);\n}\n\n.dv-debug .dv-render-overlay {\n outline: 1px solid red;\n outline-offset: -1;\n}\n.dv-pane-container {\n height: 100%;\n width: 100%;\n}\n.dv-pane-container.dv-animated .dv-view {\n /* GPU optimizations for smooth pane animations */\n will-change: transform;\n transform: translate3d(0, 0, 0);\n backface-visibility: hidden;\n transition: transform 0.15s ease-out;\n}\n.dv-pane-container .dv-view {\n overflow: hidden;\n display: flex;\n flex-direction: column;\n padding: 0px !important;\n}\n.dv-pane-container .dv-view:not(:first-child)::before {\n background-color: transparent !important;\n}\n.dv-pane-container .dv-view:not(:first-child) .dv-pane > .dv-pane-header {\n border-top: 1px solid var(--dv-paneview-header-border-color);\n}\n.dv-pane-container .dv-view .dv-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.dv-pane-container .dv-view .dv-default-header .dv-pane-header-icon {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.dv-pane-container .dv-view .dv-default-header > span {\n padding-left: 8px;\n flex-grow: 1;\n}\n.dv-pane-container:first-of-type > .dv-pane > .dv-pane-header {\n border-top: none !important;\n}\n.dv-pane-container .dv-pane {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n height: 100%;\n}\n.dv-pane-container .dv-pane .dv-pane-header {\n box-sizing: border-box;\n user-select: none;\n position: relative;\n outline: none;\n}\n.dv-pane-container .dv-pane .dv-pane-header.dv-pane-draggable {\n cursor: pointer;\n}\n.dv-pane-container .dv-pane .dv-pane-header:focus:before, .dv-pane-container .dv-pane .dv-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.dv-pane-container .dv-pane .dv-pane-body {\n overflow-y: auto;\n overflow-x: hidden;\n flex-grow: 1;\n position: relative;\n outline: none;\n}\n.dv-pane-container .dv-pane .dv-pane-body:focus:before, .dv-pane-container .dv-pane .dv-pane-body:focus-within:before {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 5;\n content: \"\";\n pointer-events: none;\n outline: 1px solid;\n outline-width: -1px;\n outline-style: solid;\n outline-offset: -1px;\n outline-color: var(--dv-paneview-active-outline-color);\n}\n.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-enabled {\n background-color: black;\n}\n.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-disabled {\n background-color: orange;\n}\n.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-maximum {\n background-color: green;\n}\n.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-minimum {\n background-color: red;\n}\n\n.dv-split-view-container {\n position: relative;\n overflow: hidden;\n height: 100%;\n width: 100%;\n}\n.dv-split-view-container.dv-splitview-disabled > .dv-sash-container > .dv-sash {\n pointer-events: none;\n}\n.dv-split-view-container.dv-animation .dv-view,\n.dv-split-view-container.dv-animation .dv-sash {\n /* GPU optimizations for smooth animations */\n will-change: transform;\n transform: translate3d(0, 0, 0);\n backface-visibility: hidden;\n transition: transform 0.15s ease-out;\n}\n.dv-split-view-container.dv-horizontal {\n height: 100%;\n}\n.dv-split-view-container.dv-horizontal > .dv-sash-container > .dv-sash {\n height: 100%;\n width: 4px;\n}\n.dv-split-view-container.dv-horizontal > .dv-sash-container > .dv-sash.dv-enabled {\n cursor: ew-resize;\n}\n.dv-split-view-container.dv-horizontal > .dv-sash-container > .dv-sash.dv-disabled {\n cursor: default;\n}\n.dv-split-view-container.dv-horizontal > .dv-sash-container > .dv-sash.dv-maximum {\n cursor: w-resize;\n}\n.dv-split-view-container.dv-horizontal > .dv-sash-container > .dv-sash.dv-minimum {\n cursor: e-resize;\n}\n.dv-split-view-container.dv-horizontal > .dv-view-container > .dv-view:not(:first-child)::before {\n height: 100%;\n width: 1px;\n}\n.dv-split-view-container.dv-vertical {\n width: 100%;\n}\n.dv-split-view-container.dv-vertical > .dv-sash-container > .dv-sash {\n width: 100%;\n height: 4px;\n}\n.dv-split-view-container.dv-vertical > .dv-sash-container > .dv-sash.dv-enabled {\n cursor: ns-resize;\n}\n.dv-split-view-container.dv-vertical > .dv-sash-container > .dv-sash.dv-disabled {\n cursor: default;\n}\n.dv-split-view-container.dv-vertical > .dv-sash-container > .dv-sash.dv-maximum {\n cursor: n-resize;\n}\n.dv-split-view-container.dv-vertical > .dv-sash-container > .dv-sash.dv-minimum {\n cursor: s-resize;\n}\n.dv-split-view-container.dv-vertical > .dv-view-container > .dv-view {\n width: 100%;\n}\n.dv-split-view-container.dv-vertical > .dv-view-container > .dv-view:not(:first-child)::before {\n height: 1px;\n width: 100%;\n}\n.dv-split-view-container .dv-sash-container {\n height: 100%;\n width: 100%;\n position: absolute;\n}\n.dv-split-view-container .dv-sash-container .dv-sash {\n position: absolute;\n z-index: 99;\n outline: none;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n touch-action: none;\n background-color: var(--dv-sash-color, transparent);\n}\n.dv-split-view-container .dv-sash-container .dv-sash:not(.disabled):active, .dv-split-view-container .dv-sash-container .dv-sash:not(.disabled):hover {\n background-color: var(--dv-active-sash-color, transparent);\n transition-property: background-color;\n transition-timing-function: ease-in-out;\n transition-duration: var(--dv-active-sash-transition-duration, 0.1s);\n transition-delay: var(--dv-active-sash-transition-delay, 0.5s);\n}\n.dv-split-view-container .dv-view-container {\n position: relative;\n height: 100%;\n width: 100%;\n}\n.dv-split-view-container .dv-view-container .dv-view {\n height: 100%;\n box-sizing: border-box;\n overflow: auto;\n position: absolute;\n}\n.dv-split-view-container.dv-separator-border .dv-view:not(:first-child)::before {\n content: \" \";\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n background-color: var(--dv-separator-border);\n}\n.dv-dragged {\n transform: translate3d(0px, 0px, 0px); /* forces tab to be drawn on a separate layer (see https://github.com/microsoft/vscode/issues/18733) */\n}\n\n.dv-tab {\n flex-shrink: 0;\n}\n.dv-tab:focus-within, .dv-tab:focus {\n position: relative;\n}\n.dv-tab:focus-within::after, .dv-tab:focus::after {\n position: absolute;\n content: \"\";\n height: 100%;\n width: 100%;\n top: 0px;\n left: 0px;\n pointer-events: none;\n outline: 1px solid var(--dv-tab-divider-color) !important;\n outline-offset: -1px;\n z-index: 5;\n}\n.dv-tab.dv-tab-dragging .dv-default-tab-action {\n background-color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.dv-tab.dv-active-tab .dv-default-tab .dv-default-tab-action {\n visibility: visible;\n}\n.dv-tab.dv-inactive-tab .dv-default-tab .dv-default-tab-action {\n visibility: hidden;\n}\n.dv-tab.dv-inactive-tab .dv-default-tab:hover .dv-default-tab-action {\n visibility: visible;\n}\n.dv-tab .dv-default-tab {\n position: relative;\n height: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.dv-tab .dv-default-tab .dv-default-tab-content {\n flex-grow: 1;\n margin-right: 4px;\n}\n.dv-tab .dv-default-tab .dv-default-tab-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n}\n.dv-tab .dv-default-tab .dv-default-tab-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}\n.dv-tabs-overflow-dropdown-default {\n height: 100%;\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n margin: var(--dv-tab-margin);\n display: flex;\n align-items: center;\n flex-shrink: 0;\n padding: 0.25rem 0.5rem;\n cursor: pointer;\n}\n.dv-tabs-overflow-dropdown-default > span {\n padding-left: 0.25rem;\n}\n.dv-tabs-overflow-dropdown-default > svg {\n transform: rotate(90deg);\n}\n.dv-tabs-container {\n display: flex;\n height: 100%;\n overflow: auto;\n scrollbar-width: thin;\n /* GPU optimizations for smooth scrolling */\n will-change: scroll-position;\n transform: translate3d(0, 0, 0);\n /* Track */\n /* Handle */\n}\n.dv-tabs-container.dv-tabs-container-vertical {\n width: 100%;\n height: fit-content;\n max-height: 100%;\n writing-mode: vertical-rl;\n}\n.dv-tabs-container.dv-horizontal .dv-tab:not(:first-child)::before, .dv-tabs-container.dv-vertical .dv-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}\n.dv-tabs-container.dv-horizontal .dv-tab:not(:first-child)::before {\n width: 1px;\n height: 100%;\n}\n.dv-tabs-container.dv-vertical .dv-tab:not(:first-child)::before {\n width: 100%;\n height: 1px;\n}\n.dv-tabs-container::-webkit-scrollbar {\n height: 3px;\n}\n.dv-tabs-container::-webkit-scrollbar-track {\n background: transparent;\n}\n.dv-tabs-container::-webkit-scrollbar-thumb {\n background: var(--dv-tabs-container-scrollbar-color);\n}\n\n.dv-scrollable > .dv-tabs-container {\n overflow: hidden;\n}\n\n.dv-tab {\n -webkit-user-drag: element;\n outline: none;\n padding: 0.25rem 0.5rem;\n cursor: pointer;\n position: relative;\n box-sizing: border-box;\n font-size: var(--dv-tab-font-size);\n margin: var(--dv-tab-margin);\n}\n\n.dv-tabs-container-vertical .dv-tab {\n padding: 0.5rem 0.25rem;\n}\n\n.dv-tabs-overflow-container {\n flex-direction: column;\n height: unset;\n max-height: min(50vh, 400px);\n overflow-y: auto;\n border: 1px solid var(--dv-tab-divider-color);\n background-color: var(--dv-group-view-background-color);\n /* Scrollbar styling for webkit browsers */\n /* Firefox scrollbar */\n scrollbar-width: thin;\n}\n.dv-tabs-overflow-container::-webkit-scrollbar {\n width: 6px;\n}\n.dv-tabs-overflow-container::-webkit-scrollbar-track {\n background: transparent;\n}\n.dv-tabs-overflow-container::-webkit-scrollbar-thumb {\n background: var(--dv-tabs-container-scrollbar-color);\n border-radius: 3px;\n}\n.dv-tabs-overflow-container .dv-tab:not(:last-child) {\n border-bottom: 1px solid var(--dv-tab-divider-color);\n}\n.dv-tabs-overflow-container .dv-active-tab {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.dv-tabs-overflow-container .dv-inactive-tab {\n background-color: var(--dv-activegroup-hiddenpanel-tab-background-color);\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.dv-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.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-scrollable {\n flex-grow: 1;\n}\n.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-tabs-container {\n flex-grow: 1;\n}\n.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-tabs-container .dv-tab {\n flex-grow: 1;\n padding: 0px;\n}\n.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-void-container {\n flex-grow: 0;\n}\n.dv-tabs-and-actions-container .dv-void-container {\n display: flex;\n flex-grow: 1;\n}\n.dv-tabs-and-actions-container .dv-void-container.dv-draggable {\n cursor: grab;\n}\n.dv-tabs-and-actions-container .dv-right-actions-container {\n display: flex;\n}\n.dv-tabs-and-actions-container .dv-right-actions-container.dv-right-actions-container-vertical {\n flex-direction: column;\n}\n.dv-tabs-and-actions-container.dv-groupview-header-vertical {\n flex-direction: column;\n height: auto;\n width: var(--dv-tabs-and-actions-container-height);\n}\n.dv-watermark {\n display: flex;\n height: 100%;\n}";
41
+ styleInject(css_248z);
42
+
43
+ /**
44
+ * This component is intended to interface between vanilla-js and React hence we need to be
45
+ * creative in how we update props.
46
+ * A ref of the component is exposed with an update method; which when called stores the props
47
+ * as a ref within this component and forcefully triggers a re-render of the component using
48
+ * the ref of props we just set on the renderered component as the props passed to the inner
49
+ * component
50
+ */
51
+ const ReactComponentBridge = (props, ref) => {
52
+ const [_, triggerRender] = React.useState();
53
+ const _props = React.useRef(props.componentProps);
54
+ React.useImperativeHandle(ref, () => ({
55
+ update: (componentProps) => {
56
+ _props.current = Object.assign(Object.assign({}, _props.current), componentProps);
57
+ /**
58
+ * setting a arbitrary piece of state within this component will
59
+ * trigger a re-render.
60
+ * we use this rather than updating through a prop since we can
61
+ * pass a ref into the vanilla-js world.
62
+ */
63
+ triggerRender(Date.now());
64
+ },
65
+ }), []);
66
+ return React.createElement(props.component, _props.current);
67
+ };
68
+ ReactComponentBridge.displayName = 'DockviewReactJsBridge';
69
+ /**
70
+ * Since we are storing the React.Portal references in a rendered array they
71
+ * require a key property like any other React element rendered in an array
72
+ * to prevent excessive re-rendering
73
+ */
74
+ const uniquePortalKeyGenerator = (() => {
75
+ let value = 1;
76
+ return { next: () => `dockview_react_portal_key_${(value++).toString()}` };
77
+ })();
78
+ const ReactPartContext = React.createContext({});
79
+ class ReactPart {
80
+ constructor(parent, portalStore, component, parameters, context) {
81
+ this.parent = parent;
82
+ this.portalStore = portalStore;
83
+ this.component = component;
84
+ this.parameters = parameters;
85
+ this.context = context;
86
+ this._initialProps = {};
87
+ this.disposed = false;
88
+ this.createPortal();
89
+ }
90
+ update(props) {
91
+ if (this.disposed) {
92
+ throw new Error('invalid operation: resource is already disposed');
93
+ }
94
+ if (!this.componentInstance) {
95
+ // if the component is yet to be mounted store the props
96
+ this._initialProps = Object.assign(Object.assign({}, this._initialProps), props);
97
+ }
98
+ else {
99
+ this.componentInstance.update(props);
100
+ }
101
+ }
102
+ createPortal() {
103
+ if (this.disposed) {
104
+ throw new Error('invalid operation: resource is already disposed');
105
+ }
106
+ if (!isReactComponent(this.component)) {
107
+ /**
108
+ * we know this isn't a React.FunctionComponent so throw an error here.
109
+ * if we do not intercept then React library will throw a very obsure error
110
+ * for the same reason... at least at this point we will emit a sensible stacktrace.
111
+ */
112
+ throw new Error('Dockview: Only React.memo(...), React.ForwardRef(...) and functional components are accepted as components');
113
+ }
114
+ const bridgeComponent = React.createElement(React.forwardRef(ReactComponentBridge), {
115
+ component: this
116
+ .component,
117
+ componentProps: this.parameters,
118
+ ref: (element) => {
119
+ this.componentInstance = element;
120
+ if (Object.keys(this._initialProps).length > 0) {
121
+ this.componentInstance.update(this._initialProps);
122
+ this._initialProps = {}; // don't keep a reference to the users object once no longer required
123
+ }
124
+ },
125
+ });
126
+ const node = this.context
127
+ ? React.createElement(ReactPartContext.Provider, { value: this.context }, bridgeComponent)
128
+ : bridgeComponent;
129
+ const portal = ReactDOM.createPortal(node, this.parent, uniquePortalKeyGenerator.next());
130
+ this.ref = {
131
+ portal,
132
+ disposable: this.portalStore.addPortal(portal),
133
+ };
134
+ }
135
+ dispose() {
136
+ var _a;
137
+ (_a = this.ref) === null || _a === void 0 ? void 0 : _a.disposable.dispose();
138
+ this.disposed = true;
139
+ }
140
+ }
141
+ /**
142
+ * A React Hook that returns an array of portals to be rendered by the user of this hook
143
+ * and a disposable function to add a portal. Calling dispose removes this portal from the
144
+ * portal array
145
+ */
146
+ const usePortalsLifecycle = () => {
147
+ const [portals, setPortals] = React.useState([]);
148
+ React.useDebugValue(`Portal count: ${portals.length}`);
149
+ const addPortal = React.useCallback((portal) => {
150
+ setPortals((existingPortals) => [...existingPortals, portal]);
151
+ let disposed = false;
152
+ return dockviewCore.DockviewDisposable.from(() => {
153
+ if (disposed) {
154
+ throw new Error('invalid operation: resource already disposed');
155
+ }
156
+ disposed = true;
157
+ setPortals((existingPortals) => existingPortals.filter((p) => p !== portal));
158
+ });
159
+ }, []);
160
+ return [portals, addPortal];
161
+ };
162
+ function isReactComponent(component) {
163
+ /**
164
+ * Yes, we could use "react-is" but that would introduce an unwanted peer dependency
165
+ * so for now we will check in a rather crude fashion...
166
+ */
167
+ return (typeof component === 'function' /** Functional Componnts */ ||
168
+ !!(component === null || component === void 0 ? void 0 : component.$$typeof) /** React.memo(...) Components */);
169
+ }
170
+
171
+ class ReactPanelContentPart {
172
+ get element() {
173
+ return this._element;
174
+ }
175
+ constructor(id, component, reactPortalStore) {
176
+ this.id = id;
177
+ this.component = component;
178
+ this.reactPortalStore = reactPortalStore;
179
+ this._onDidFocus = new dockviewCore.DockviewEmitter();
180
+ this.onDidFocus = this._onDidFocus.event;
181
+ this._onDidBlur = new dockviewCore.DockviewEmitter();
182
+ this.onDidBlur = this._onDidBlur.event;
183
+ this._element = document.createElement('div');
184
+ this._element.className = 'dv-react-part';
185
+ this._element.style.height = '100%';
186
+ this._element.style.width = '100%';
187
+ }
188
+ focus() {
189
+ // TODO
190
+ }
191
+ init(parameters) {
192
+ this.part = new ReactPart(this.element, this.reactPortalStore, this.component, {
193
+ params: parameters.params,
194
+ api: parameters.api,
195
+ containerApi: parameters.containerApi,
196
+ });
197
+ }
198
+ update(event) {
199
+ var _a;
200
+ (_a = this.part) === null || _a === void 0 ? void 0 : _a.update({ params: event.params });
201
+ }
202
+ layout(_width, _height) {
203
+ // noop
204
+ }
205
+ dispose() {
206
+ var _a;
207
+ this._onDidFocus.dispose();
208
+ this._onDidBlur.dispose();
209
+ (_a = this.part) === null || _a === void 0 ? void 0 : _a.dispose();
210
+ }
211
+ }
212
+
213
+ class ReactPanelHeaderPart {
214
+ get element() {
215
+ return this._element;
216
+ }
217
+ constructor(id, component, reactPortalStore) {
218
+ this.id = id;
219
+ this.component = component;
220
+ this.reactPortalStore = reactPortalStore;
221
+ this._element = document.createElement('div');
222
+ this._element.className = 'dv-react-part';
223
+ this._element.style.height = '100%';
224
+ this._element.style.width = '100%';
225
+ }
226
+ focus() {
227
+ //noop
228
+ }
229
+ init(parameters) {
230
+ this.part = new ReactPart(this.element, this.reactPortalStore, this.component, {
231
+ params: parameters.params,
232
+ api: parameters.api,
233
+ containerApi: parameters.containerApi,
234
+ tabLocation: parameters.tabLocation,
235
+ });
236
+ }
237
+ update(event) {
238
+ var _a;
239
+ (_a = this.part) === null || _a === void 0 ? void 0 : _a.update({ params: event.params });
240
+ }
241
+ layout(_width, _height) {
242
+ // noop - retrieval from api
243
+ }
244
+ dispose() {
245
+ var _a;
246
+ (_a = this.part) === null || _a === void 0 ? void 0 : _a.dispose();
247
+ }
248
+ }
249
+
250
+ class ReactWatermarkPart {
251
+ get element() {
252
+ return this._element;
253
+ }
254
+ constructor(id, component, reactPortalStore) {
255
+ this.id = id;
256
+ this.component = component;
257
+ this.reactPortalStore = reactPortalStore;
258
+ this._element = document.createElement('div');
259
+ this._element.className = 'dv-react-part';
260
+ this._element.style.height = '100%';
261
+ this._element.style.width = '100%';
262
+ }
263
+ init(parameters) {
264
+ this.part = new ReactPart(this.element, this.reactPortalStore, this.component, {
265
+ group: parameters.group,
266
+ containerApi: parameters.containerApi,
267
+ });
268
+ }
269
+ focus() {
270
+ // noop
271
+ }
272
+ update(params) {
273
+ var _a, _b, _c;
274
+ if (this.parameters) {
275
+ this.parameters.params = params.params;
276
+ }
277
+ (_a = this.part) === null || _a === void 0 ? void 0 : _a.update({ params: (_c = (_b = this.parameters) === null || _b === void 0 ? void 0 : _b.params) !== null && _c !== void 0 ? _c : {} });
278
+ }
279
+ layout(_width, _height) {
280
+ // noop - retrieval from api
281
+ }
282
+ dispose() {
283
+ var _a;
284
+ (_a = this.part) === null || _a === void 0 ? void 0 : _a.dispose();
285
+ }
286
+ }
287
+
288
+ class ReactHeaderActionsRendererPart {
289
+ get element() {
290
+ return this._element;
291
+ }
292
+ get part() {
293
+ return this._part;
294
+ }
295
+ constructor(component, reactPortalStore, _group) {
296
+ this.component = component;
297
+ this.reactPortalStore = reactPortalStore;
298
+ this._group = _group;
299
+ this.mutableDisposable = new dockviewCore.DockviewMutableDisposable();
300
+ this._element = document.createElement('div');
301
+ this._element.className = 'dv-react-part';
302
+ this._element.style.height = '100%';
303
+ this._element.style.width = '100%';
304
+ }
305
+ init(parameters) {
306
+ this.mutableDisposable.value = new dockviewCore.DockviewCompositeDisposable(this._group.model.onDidAddPanel(() => {
307
+ this.updatePanels();
308
+ }), this._group.model.onDidRemovePanel(() => {
309
+ this.updatePanels();
310
+ }), this._group.model.onDidActivePanelChange(() => {
311
+ this.updateActivePanel();
312
+ }), parameters.api.onDidActiveChange(() => {
313
+ this.updateGroupActive();
314
+ }));
315
+ this._part = new ReactPart(this.element, this.reactPortalStore, this.component, {
316
+ api: parameters.api,
317
+ containerApi: parameters.containerApi,
318
+ panels: this._group.model.panels,
319
+ activePanel: this._group.model.activePanel,
320
+ isGroupActive: this._group.api.isActive,
321
+ group: this._group,
322
+ headerPosition: this._group.model.headerPosition,
323
+ });
324
+ }
325
+ dispose() {
326
+ var _a;
327
+ this.mutableDisposable.dispose();
328
+ (_a = this._part) === null || _a === void 0 ? void 0 : _a.dispose();
329
+ }
330
+ update(event) {
331
+ var _a;
332
+ (_a = this._part) === null || _a === void 0 ? void 0 : _a.update(event.params);
333
+ }
334
+ updatePanels() {
335
+ this.update({ params: { panels: this._group.model.panels } });
336
+ }
337
+ updateActivePanel() {
338
+ this.update({
339
+ params: {
340
+ activePanel: this._group.model.activePanel,
341
+ },
342
+ });
343
+ }
344
+ updateGroupActive() {
345
+ this.update({
346
+ params: {
347
+ isGroupActive: this._group.api.isActive,
348
+ },
349
+ });
350
+ }
351
+ }
352
+
353
+ function createGroupControlElement(component, store) {
354
+ return component
355
+ ? (groupPanel) => {
356
+ return new ReactHeaderActionsRendererPart(component, store, groupPanel);
357
+ }
358
+ : undefined;
359
+ }
360
+ const DEFAULT_REACT_TAB = 'props.defaultTabComponent';
361
+ function extractCoreOptions$3(props) {
362
+ const coreOptions = dockviewCore.PROPERTY_KEYS_DOCKVIEW.reduce((obj, key) => {
363
+ if (key in props) {
364
+ obj[key] = props[key];
365
+ }
366
+ return obj;
367
+ }, {});
368
+ return coreOptions;
369
+ }
370
+ const DockviewReact = React.forwardRef((props, ref) => {
371
+ const domRef = React.useRef(null);
372
+ const dockviewRef = React.useRef();
373
+ const [portals, addPortal] = usePortalsLifecycle();
374
+ React.useImperativeHandle(ref, () => domRef.current, []);
375
+ const prevProps = React.useRef({});
376
+ React.useEffect(() => {
377
+ const changes = {};
378
+ dockviewCore.PROPERTY_KEYS_DOCKVIEW.forEach((propKey) => {
379
+ const key = propKey;
380
+ const propValue = props[key];
381
+ if (key in props && propValue !== prevProps.current[key]) {
382
+ changes[key] = propValue;
383
+ }
384
+ });
385
+ if (dockviewRef.current) {
386
+ dockviewRef.current.updateOptions(changes);
387
+ }
388
+ prevProps.current = props;
389
+ }, dockviewCore.PROPERTY_KEYS_DOCKVIEW.map((key) => props[key]));
390
+ React.useEffect(() => {
391
+ var _a;
392
+ if (!domRef.current) {
393
+ return;
394
+ }
395
+ const frameworkTabComponents = (_a = props.tabComponents) !== null && _a !== void 0 ? _a : {};
396
+ if (props.defaultTabComponent) {
397
+ frameworkTabComponents[DEFAULT_REACT_TAB] =
398
+ props.defaultTabComponent;
399
+ }
400
+ const frameworkOptions = {
401
+ createLeftHeaderActionComponent: createGroupControlElement(props.leftHeaderActionsComponent, { addPortal }),
402
+ createRightHeaderActionComponent: createGroupControlElement(props.rightHeaderActionsComponent, { addPortal }),
403
+ createPrefixHeaderActionComponent: createGroupControlElement(props.prefixHeaderActionsComponent, { addPortal }),
404
+ createComponent: (options) => {
405
+ return new ReactPanelContentPart(options.id, props.components[options.name], {
406
+ addPortal,
407
+ });
408
+ },
409
+ createTabComponent(options) {
410
+ return new ReactPanelHeaderPart(options.id, frameworkTabComponents[options.name], {
411
+ addPortal,
412
+ });
413
+ },
414
+ createWatermarkComponent: props.watermarkComponent
415
+ ? () => {
416
+ return new ReactWatermarkPart('watermark', props.watermarkComponent, {
417
+ addPortal,
418
+ });
419
+ }
420
+ : undefined,
421
+ defaultTabComponent: props.defaultTabComponent
422
+ ? DEFAULT_REACT_TAB
423
+ : undefined,
424
+ };
425
+ const api = dockviewCore.createDockview(domRef.current, Object.assign(Object.assign({}, extractCoreOptions$3(props)), frameworkOptions));
426
+ const { clientWidth, clientHeight } = domRef.current;
427
+ api.layout(clientWidth, clientHeight);
428
+ if (props.onReady) {
429
+ props.onReady({ api });
430
+ }
431
+ dockviewRef.current = api;
432
+ return () => {
433
+ dockviewRef.current = undefined;
434
+ api.dispose();
435
+ };
436
+ }, []);
437
+ React.useEffect(() => {
438
+ if (!dockviewRef.current) {
439
+ return () => {
440
+ // noop
441
+ };
442
+ }
443
+ const disposable = dockviewRef.current.onDidDrop((event) => {
444
+ if (props.onDidDrop) {
445
+ props.onDidDrop(event);
446
+ }
447
+ });
448
+ return () => {
449
+ disposable.dispose();
450
+ };
451
+ }, [props.onDidDrop]);
452
+ React.useEffect(() => {
453
+ if (!dockviewRef.current) {
454
+ return () => {
455
+ // noop
456
+ };
457
+ }
458
+ const disposable = dockviewRef.current.onWillDrop((event) => {
459
+ if (props.onWillDrop) {
460
+ props.onWillDrop(event);
461
+ }
462
+ });
463
+ return () => {
464
+ disposable.dispose();
465
+ };
466
+ }, [props.onWillDrop]);
467
+ React.useEffect(() => {
468
+ if (!dockviewRef.current) {
469
+ return;
470
+ }
471
+ dockviewRef.current.updateOptions({
472
+ createComponent: (options) => {
473
+ return new ReactPanelContentPart(options.id, props.components[options.name], {
474
+ addPortal,
475
+ });
476
+ },
477
+ });
478
+ }, [props.components]);
479
+ React.useEffect(() => {
480
+ var _a;
481
+ if (!dockviewRef.current) {
482
+ return;
483
+ }
484
+ const frameworkTabComponents = (_a = props.tabComponents) !== null && _a !== void 0 ? _a : {};
485
+ if (props.defaultTabComponent) {
486
+ frameworkTabComponents[DEFAULT_REACT_TAB] =
487
+ props.defaultTabComponent;
488
+ }
489
+ dockviewRef.current.updateOptions({
490
+ defaultTabComponent: props.defaultTabComponent
491
+ ? DEFAULT_REACT_TAB
492
+ : undefined,
493
+ createTabComponent(options) {
494
+ return new ReactPanelHeaderPart(options.id, frameworkTabComponents[options.name], {
495
+ addPortal,
496
+ });
497
+ },
498
+ });
499
+ }, [props.tabComponents, props.defaultTabComponent]);
500
+ React.useEffect(() => {
501
+ if (!dockviewRef.current) {
502
+ return;
503
+ }
504
+ dockviewRef.current.updateOptions({
505
+ createWatermarkComponent: props.watermarkComponent
506
+ ? () => {
507
+ return new ReactWatermarkPart('watermark', props.watermarkComponent, {
508
+ addPortal,
509
+ });
510
+ }
511
+ : undefined,
512
+ });
513
+ }, [props.watermarkComponent]);
514
+ React.useEffect(() => {
515
+ if (!dockviewRef.current) {
516
+ return;
517
+ }
518
+ dockviewRef.current.updateOptions({
519
+ createRightHeaderActionComponent: createGroupControlElement(props.rightHeaderActionsComponent, { addPortal }),
520
+ });
521
+ }, [props.rightHeaderActionsComponent]);
522
+ React.useEffect(() => {
523
+ if (!dockviewRef.current) {
524
+ return;
525
+ }
526
+ dockviewRef.current.updateOptions({
527
+ createLeftHeaderActionComponent: createGroupControlElement(props.leftHeaderActionsComponent, { addPortal }),
528
+ });
529
+ }, [props.leftHeaderActionsComponent]);
530
+ React.useEffect(() => {
531
+ if (!dockviewRef.current) {
532
+ return;
533
+ }
534
+ dockviewRef.current.updateOptions({
535
+ createPrefixHeaderActionComponent: createGroupControlElement(props.prefixHeaderActionsComponent, { addPortal }),
536
+ });
537
+ }, [props.prefixHeaderActionsComponent]);
538
+ return (React.createElement("div", { style: { height: '100%', width: '100%' }, ref: domRef }, portals));
539
+ });
540
+ DockviewReact.displayName = 'DockviewComponent';
541
+
542
+ /******************************************************************************
543
+ Copyright (c) Microsoft Corporation.
544
+
545
+ Permission to use, copy, modify, and/or distribute this software for any
546
+ purpose with or without fee is hereby granted.
547
+
548
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
549
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
550
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
551
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
552
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
553
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
554
+ PERFORMANCE OF THIS SOFTWARE.
555
+ ***************************************************************************** */
556
+ /* global Reflect, Promise, SuppressedError, Symbol */
557
+
558
+
559
+ function __rest(s, e) {
560
+ var t = {};
561
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
562
+ t[p] = s[p];
563
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
564
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
565
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
566
+ t[p[i]] = s[p[i]];
567
+ }
568
+ return t;
569
+ }
570
+
571
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
572
+ var e = new Error(message);
573
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
574
+ };
575
+
576
+ const CloseButton = () => (React.createElement("svg", { height: "11", width: "11", viewBox: "0 0 28 28", "aria-hidden": 'false', focusable: false, className: "dv-svg" },
577
+ React.createElement("path", { d: "M2.1 27.3L0 25.2L11.55 13.65L0 2.1L2.1 0L13.65 11.55L25.2 0L27.3 2.1L15.75 13.65L27.3 25.2L25.2 27.3L13.65 15.75L2.1 27.3Z" })));
578
+
579
+ function useTitle(api) {
580
+ const [title, setTitle] = React.useState(api.title);
581
+ React.useEffect(() => {
582
+ const disposable = api.onDidTitleChange((event) => {
583
+ setTitle(event.title);
584
+ });
585
+ // Depending on the order in which React effects are run, the title may already be out of sync (cf. issue #1003).
586
+ if (title !== api.title) {
587
+ setTitle(api.title);
588
+ }
589
+ return () => {
590
+ disposable.dispose();
591
+ };
592
+ }, [api]);
593
+ return title;
594
+ }
595
+ const DockviewDefaultTab = (_a) => {
596
+ var { api, containerApi: _containerApi, params: _params, hideClose, closeActionOverride, onPointerDown, onPointerUp, onPointerLeave, tabLocation } = _a, rest = __rest(_a, ["api", "containerApi", "params", "hideClose", "closeActionOverride", "onPointerDown", "onPointerUp", "onPointerLeave", "tabLocation"]);
597
+ const title = useTitle(api);
598
+ const isMiddleMouseButton = React.useRef(false);
599
+ const onClose = React.useCallback((event) => {
600
+ event.preventDefault();
601
+ if (closeActionOverride) {
602
+ closeActionOverride();
603
+ }
604
+ else {
605
+ api.close();
606
+ }
607
+ }, [api, closeActionOverride]);
608
+ const onBtnPointerDown = React.useCallback((event) => {
609
+ event.preventDefault();
610
+ }, []);
611
+ const _onPointerDown = React.useCallback((event) => {
612
+ isMiddleMouseButton.current = event.button === 1;
613
+ onPointerDown === null || onPointerDown === void 0 ? void 0 : onPointerDown(event);
614
+ }, [onPointerDown]);
615
+ const _onPointerUp = React.useCallback((event) => {
616
+ if (isMiddleMouseButton && event.button === 1 && !hideClose) {
617
+ isMiddleMouseButton.current = false;
618
+ onClose(event);
619
+ }
620
+ onPointerUp === null || onPointerUp === void 0 ? void 0 : onPointerUp(event);
621
+ }, [onPointerUp, onClose, hideClose]);
622
+ const _onPointerLeave = React.useCallback((event) => {
623
+ isMiddleMouseButton.current = false;
624
+ onPointerLeave === null || onPointerLeave === void 0 ? void 0 : onPointerLeave(event);
625
+ }, [onPointerLeave]);
626
+ return (React.createElement("div", Object.assign({ "data-testid": "dockview-dv-default-tab" }, rest, { onPointerDown: _onPointerDown, onPointerUp: _onPointerUp, onPointerLeave: _onPointerLeave, className: "dv-default-tab" }),
627
+ React.createElement("span", { className: "dv-default-tab-content" }, title),
628
+ !hideClose && (React.createElement("div", { className: "dv-default-tab-action", onPointerDown: onBtnPointerDown, onClick: onClose },
629
+ React.createElement(CloseButton, null)))));
630
+ };
631
+
632
+ class ReactPanelView extends dockviewCore.SplitviewPanel {
633
+ constructor(id, component, reactComponent, reactPortalStore) {
634
+ super(id, component);
635
+ this.reactComponent = reactComponent;
636
+ this.reactPortalStore = reactPortalStore;
637
+ }
638
+ getComponent() {
639
+ var _a, _b;
640
+ return new ReactPart(this.element, this.reactPortalStore, this.reactComponent, {
641
+ params: (_b = (_a = this._params) === null || _a === void 0 ? void 0 : _a.params) !== null && _b !== void 0 ? _b : {},
642
+ api: this.api,
643
+ containerApi: new dockviewCore.SplitviewApi(this._params.accessor),
644
+ });
645
+ }
646
+ }
647
+
648
+ function extractCoreOptions$2(props) {
649
+ const coreOptions = dockviewCore.PROPERTY_KEYS_SPLITVIEW.reduce((obj, key) => {
650
+ if (key in props) {
651
+ obj[key] = props[key];
652
+ }
653
+ return obj;
654
+ }, {});
655
+ return coreOptions;
656
+ }
657
+ const SplitviewReact = React.forwardRef((props, ref) => {
658
+ const domRef = React.useRef(null);
659
+ const splitviewRef = React.useRef();
660
+ const [portals, addPortal] = usePortalsLifecycle();
661
+ React.useImperativeHandle(ref, () => domRef.current, []);
662
+ const prevProps = React.useRef({});
663
+ React.useEffect(() => {
664
+ const changes = {};
665
+ dockviewCore.PROPERTY_KEYS_SPLITVIEW.forEach((propKey) => {
666
+ const key = propKey;
667
+ const propValue = props[key];
668
+ if (key in props && propValue !== prevProps.current[key]) {
669
+ changes[key] = propValue;
670
+ }
671
+ });
672
+ if (splitviewRef.current) {
673
+ splitviewRef.current.updateOptions(changes);
674
+ }
675
+ prevProps.current = props;
676
+ }, dockviewCore.PROPERTY_KEYS_SPLITVIEW.map((key) => props[key]));
677
+ React.useEffect(() => {
678
+ if (!domRef.current) {
679
+ return () => {
680
+ // noop
681
+ };
682
+ }
683
+ const frameworkOptions = {
684
+ createComponent: (options) => {
685
+ return new ReactPanelView(options.id, options.name, props.components[options.name], { addPortal });
686
+ },
687
+ };
688
+ const api = dockviewCore.createSplitview(domRef.current, Object.assign(Object.assign({}, extractCoreOptions$2(props)), frameworkOptions));
689
+ const { clientWidth, clientHeight } = domRef.current;
690
+ api.layout(clientWidth, clientHeight);
691
+ if (props.onReady) {
692
+ props.onReady({ api });
693
+ }
694
+ splitviewRef.current = api;
695
+ return () => {
696
+ splitviewRef.current = undefined;
697
+ api.dispose();
698
+ };
699
+ }, []);
700
+ React.useEffect(() => {
701
+ if (!splitviewRef.current) {
702
+ return;
703
+ }
704
+ splitviewRef.current.updateOptions({
705
+ createComponent: (options) => {
706
+ return new ReactPanelView(options.id, options.name, props.components[options.name], { addPortal });
707
+ },
708
+ });
709
+ }, [props.components]);
710
+ return (React.createElement("div", { style: { height: '100%', width: '100%' }, ref: domRef }, portals));
711
+ });
712
+ SplitviewReact.displayName = 'SplitviewComponent';
713
+
714
+ class ReactGridPanelView extends dockviewCore.GridviewPanel {
715
+ constructor(id, component, reactComponent, reactPortalStore) {
716
+ super(id, component);
717
+ this.reactComponent = reactComponent;
718
+ this.reactPortalStore = reactPortalStore;
719
+ }
720
+ getComponent() {
721
+ var _a, _b;
722
+ return new ReactPart(this.element, this.reactPortalStore, this.reactComponent, {
723
+ params: (_b = (_a = this._params) === null || _a === void 0 ? void 0 : _a.params) !== null && _b !== void 0 ? _b : {},
724
+ api: this.api,
725
+ // TODO: fix casting hack
726
+ containerApi: new dockviewCore.GridviewApi(this._params
727
+ .accessor),
728
+ });
729
+ }
730
+ }
731
+
732
+ function extractCoreOptions$1(props) {
733
+ const coreOptions = dockviewCore.PROPERTY_KEYS_GRIDVIEW.reduce((obj, key) => {
734
+ if (key in props) {
735
+ obj[key] = props[key];
736
+ }
737
+ return obj;
738
+ }, {});
739
+ return coreOptions;
740
+ }
741
+ const GridviewReact = React.forwardRef((props, ref) => {
742
+ const domRef = React.useRef(null);
743
+ const gridviewRef = React.useRef();
744
+ const [portals, addPortal] = usePortalsLifecycle();
745
+ React.useImperativeHandle(ref, () => domRef.current, []);
746
+ const prevProps = React.useRef({});
747
+ React.useEffect(() => {
748
+ const changes = {};
749
+ dockviewCore.PROPERTY_KEYS_GRIDVIEW.forEach((propKey) => {
750
+ const key = propKey;
751
+ const propValue = props[key];
752
+ if (key in props && propValue !== prevProps.current[key]) {
753
+ changes[key] = propValue;
754
+ }
755
+ });
756
+ if (gridviewRef.current) {
757
+ gridviewRef.current.updateOptions(changes);
758
+ }
759
+ prevProps.current = props;
760
+ }, dockviewCore.PROPERTY_KEYS_GRIDVIEW.map((key) => props[key]));
761
+ React.useEffect(() => {
762
+ if (!domRef.current) {
763
+ return () => {
764
+ // noop
765
+ };
766
+ }
767
+ const frameworkOptions = {
768
+ createComponent: (options) => {
769
+ return new ReactGridPanelView(options.id, options.name, props.components[options.name], { addPortal });
770
+ },
771
+ };
772
+ const api = dockviewCore.createGridview(domRef.current, Object.assign(Object.assign({}, extractCoreOptions$1(props)), frameworkOptions));
773
+ const { clientWidth, clientHeight } = domRef.current;
774
+ api.layout(clientWidth, clientHeight);
775
+ if (props.onReady) {
776
+ props.onReady({ api });
777
+ }
778
+ gridviewRef.current = api;
779
+ return () => {
780
+ gridviewRef.current = undefined;
781
+ api.dispose();
782
+ };
783
+ }, []);
784
+ React.useEffect(() => {
785
+ if (!gridviewRef.current) {
786
+ return;
787
+ }
788
+ gridviewRef.current.updateOptions({
789
+ createComponent: (options) => {
790
+ return new ReactGridPanelView(options.id, options.name, props.components[options.name], { addPortal });
791
+ },
792
+ });
793
+ }, [props.components]);
794
+ return (React.createElement("div", { style: { height: '100%', width: '100%' }, ref: domRef }, portals));
795
+ });
796
+ GridviewReact.displayName = 'GridviewComponent';
797
+
798
+ class PanePanelSection {
799
+ get element() {
800
+ return this._element;
801
+ }
802
+ constructor(id, component, reactPortalStore) {
803
+ this.id = id;
804
+ this.component = component;
805
+ this.reactPortalStore = reactPortalStore;
806
+ this._element = document.createElement('div');
807
+ this._element.style.height = '100%';
808
+ this._element.style.width = '100%';
809
+ }
810
+ init(parameters) {
811
+ this.part = new ReactPart(this.element, this.reactPortalStore, this.component, {
812
+ params: parameters.params,
813
+ api: parameters.api,
814
+ title: parameters.title,
815
+ containerApi: parameters.containerApi,
816
+ });
817
+ }
818
+ toJSON() {
819
+ return {
820
+ id: this.id,
821
+ };
822
+ }
823
+ update(params) {
824
+ var _a;
825
+ (_a = this.part) === null || _a === void 0 ? void 0 : _a.update(params.params);
826
+ }
827
+ dispose() {
828
+ var _a;
829
+ (_a = this.part) === null || _a === void 0 ? void 0 : _a.dispose();
830
+ }
831
+ }
832
+
833
+ function extractCoreOptions(props) {
834
+ const coreOptions = dockviewCore.PROPERTY_KEYS_PANEVIEW.reduce((obj, key) => {
835
+ if (key in props) {
836
+ obj[key] = props[key];
837
+ }
838
+ return obj;
839
+ }, {});
840
+ return coreOptions;
841
+ }
842
+ const PaneviewReact = React.forwardRef((props, ref) => {
843
+ const domRef = React.useRef(null);
844
+ const paneviewRef = React.useRef();
845
+ const [portals, addPortal] = usePortalsLifecycle();
846
+ React.useImperativeHandle(ref, () => domRef.current, []);
847
+ const prevProps = React.useRef({});
848
+ React.useEffect(() => {
849
+ const changes = {};
850
+ dockviewCore.PROPERTY_KEYS_PANEVIEW.forEach((propKey) => {
851
+ const key = propKey;
852
+ const propValue = props[key];
853
+ if (key in props && propValue !== prevProps.current[key]) {
854
+ changes[key] = propValue;
855
+ }
856
+ });
857
+ if (paneviewRef.current) {
858
+ paneviewRef.current.updateOptions(changes);
859
+ }
860
+ prevProps.current = props;
861
+ }, dockviewCore.PROPERTY_KEYS_PANEVIEW.map((key) => props[key]));
862
+ React.useEffect(() => {
863
+ var _a;
864
+ if (!domRef.current) {
865
+ return () => {
866
+ // noop
867
+ };
868
+ }
869
+ const headerComponents = (_a = props.headerComponents) !== null && _a !== void 0 ? _a : {};
870
+ const frameworkOptions = {
871
+ createComponent: (options) => {
872
+ return new PanePanelSection(options.id, props.components[options.name], { addPortal });
873
+ },
874
+ createHeaderComponent: (options) => {
875
+ return new PanePanelSection(options.id, headerComponents[options.name], { addPortal });
876
+ },
877
+ };
878
+ const api = dockviewCore.createPaneview(domRef.current, Object.assign(Object.assign({}, extractCoreOptions(props)), frameworkOptions));
879
+ const { clientWidth, clientHeight } = domRef.current;
880
+ api.layout(clientWidth, clientHeight);
881
+ if (props.onReady) {
882
+ props.onReady({ api });
883
+ }
884
+ paneviewRef.current = api;
885
+ return () => {
886
+ paneviewRef.current = undefined;
887
+ api.dispose();
888
+ };
889
+ }, []);
890
+ React.useEffect(() => {
891
+ if (!paneviewRef.current) {
892
+ return;
893
+ }
894
+ paneviewRef.current.updateOptions({
895
+ createComponent: (options) => {
896
+ return new PanePanelSection(options.id, props.components[options.name], { addPortal });
897
+ },
898
+ });
899
+ }, [props.components]);
900
+ React.useEffect(() => {
901
+ var _a;
902
+ if (!paneviewRef.current) {
903
+ return;
904
+ }
905
+ const headerComponents = (_a = props.headerComponents) !== null && _a !== void 0 ? _a : {};
906
+ paneviewRef.current.updateOptions({
907
+ createHeaderComponent: (options) => {
908
+ return new PanePanelSection(options.id, headerComponents[options.name], { addPortal });
909
+ },
910
+ });
911
+ }, [props.headerComponents]);
912
+ React.useEffect(() => {
913
+ if (!paneviewRef.current) {
914
+ return () => {
915
+ // noop
916
+ };
917
+ }
918
+ const disposable = paneviewRef.current.onDidDrop((event) => {
919
+ if (props.onDidDrop) {
920
+ props.onDidDrop(event);
921
+ }
922
+ });
923
+ return () => {
924
+ disposable.dispose();
925
+ };
926
+ }, [props.onDidDrop]);
927
+ return (React.createElement("div", { style: { height: '100%', width: '100%' }, ref: domRef }, portals));
928
+ });
929
+ PaneviewReact.displayName = 'PaneviewComponent';
930
+
931
+ exports.DockviewDefaultTab = DockviewDefaultTab;
932
+ exports.DockviewReact = DockviewReact;
933
+ exports.GridviewReact = GridviewReact;
934
+ exports.PaneviewReact = PaneviewReact;
935
+ exports.ReactPart = ReactPart;
936
+ exports.ReactPartContext = ReactPartContext;
937
+ exports.SplitviewReact = SplitviewReact;
938
+ exports.isReactComponent = isReactComponent;
939
+ exports.usePortalsLifecycle = usePortalsLifecycle;
940
+ Object.keys(dockviewCore).forEach(function (k) {
941
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
942
+ enumerable: true,
943
+ get: function () { return dockviewCore[k]; }
944
+ });
945
+ });