@vitejs/devtools 0.0.0-alpha.2 → 0.0.0-alpha.20

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.
@@ -1,19 +1,162 @@
1
- import { Fragment, computed, createBaseVNode, createBlock, createCommentVNode, createElementBlock, createVNode, defineComponent, defineCustomElement, markRaw, mergeModels, nextTick, normalizeClass, normalizeStyle, onMounted, onUnmounted, openBlock, reactive, ref, renderList, renderSlot, toDisplayString, toRefs as toRefs$1, toRefs$1 as toRefs, unref, useElementBounding, useEventListener, useModel, useScreenSafeArea, useTemplateRef, useWindowSize, vShow, watch, watchEffect, withCtx, withDirectives, withModifiers } from "../core-uTAXYiA1.js";
1
+ import { A as watchEffect, B as normalizeStyle, C as onMounted, D as renderSlot, E as renderList, F as ref, I as shallowRef, L as toRefs, M as withDirectives, N as markRaw, O as useTemplateRef, P as reactive, R as unref, S as nextTick, T as openBlock, V as toDisplayString, _ as createCommentVNode, a as useEventListener, b as createVNode, c as useWindowSize, d as vShow, f as withModifiers, g as createBlock, h as createBaseVNode, i as useElementBounding, j as withCtx, k as watch, l as watchImmediate, m as computed, n as createDockEntryState, p as Fragment, r as useDocksEntries, s as useScreenSafeArea, t as DEFAULT_DOCK_PANEL_STORE, u as defineCustomElement, v as createElementBlock, w as onUnmounted, x as defineComponent, y as createStaticVNode, z as normalizeClass } from "../docks-B3cDUs1u.js";
2
+ import { FitAddon } from "@xterm/addon-fit";
3
+ import { Terminal } from "@xterm/xterm";
2
4
 
3
5
  //#region src/client/webcomponents/.generated/css.ts
4
- var css_default = "*{box-sizing:border-box;border-style:solid;border-width:0;border-color:var(--un-default-border-color,#e5e7eb)}:before{box-sizing:border-box;border-style:solid;border-width:0;border-color:var(--un-default-border-color,#e5e7eb)}:after{box-sizing:border-box;border-style:solid;border-width:0;border-color:var(--un-default-border-color,#e5e7eb)}:before{--un-content:\"\"}:after{--un-content:\"\"}html{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}:host{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button{-webkit-appearance:button;background-color:transparent;background-image:none}[type=button]{-webkit-appearance:button;background-color:transparent;background-image:none}[type=reset]{-webkit-appearance:button;background-color:transparent;background-image:none}[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::placeholder{opacity:1;color:#9ca3af}textarea::placeholder{opacity:1;color:#9ca3af}button{cursor:pointer}[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--un-text-opacity:100%}.vite-devtools-resize-handle-horizontal{cursor:ns-resize;-webkit-border-radius:.375rem;border-radius:.375rem;height:10px;margin-top:-5px;margin-bottom:-5px;position:absolute;left:6px;right:6px}.vite-devtools-resize-handle-vertical{cursor:ew-resize;-webkit-border-radius:.375rem;border-radius:.375rem;width:10px;margin-left:-5px;margin-right:-5px;position:absolute;top:6px;bottom:0}.vite-devtools-resize-handle-corner{-webkit-border-radius:.375rem;border-radius:.375rem;width:14px;height:14px;margin:-6px;position:absolute}.vite-devtools-resize-handle{z-index:2147483645}.vite-devtools-resize-handle:hover{background-color:rgba(156,163,175,.1)}#vite-devtools-anchor{z-index:2147483645;box-sizing:border-box;transform-origin:50%;width:0;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:15px;position:fixed;transform:translate(-50%,-50%)rotate(0)}#vite-devtools-anchor #vite-devtools-dock-container{min-width:100px;height:44px;position:absolute;top:0;left:0;transform:translate(-50%,-50%)}#vite-devtools-anchor.vite-devtools-vertical #vite-devtools-dock-container{transition:all .6s,max-width .6s,padding .5s,transform .4s,opacity .2s;transform:translate(-50%,-50%)rotate(90deg)}#vite-devtools-anchor #vite-devtools-dock{touch-action:none;user-select:none;--un-border-opacity:.13;border-width:1px;border-color:rgba(136,136,136,var(--un-border-opacity));--un-backdrop-blur:blur(5px);min-width:100%;height:100%;backdrop-filter:var(--un-backdrop-blur)var(--un-backdrop-brightness)var(--un-backdrop-contrast)var(--un-backdrop-grayscale)var(--un-backdrop-hue-rotate)var(--un-backdrop-invert)var(--un-backdrop-opacity)var(--un-backdrop-saturate)var(--un-backdrop-sepia);--un-text-opacity:1;color:rgba(255,255,255,var(--un-text-opacity));--un-shadow:var(--un-shadow-inset)0 1px 3px 0 var(--un-shadow-color,rgba(0,0,0,.1)),var(--un-shadow-inset)0 1px 2px -1px var(--un-shadow-color,rgba(0,0,0,.1));box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow);background-color:rgba(255,255,255,.75);-webkit-border-radius:9999px;border-radius:9999px;transition:all .6s,max-width .6s,padding .5s,transform .4s,opacity .2s}@media (prefers-color-scheme:dark){#vite-devtools-anchor #vite-devtools-dock{background-color:rgba(17,17,17,.75)}}#vite-devtools-anchor.vite-devtools-minimized #vite-devtools-dock{width:52px;height:8px;padding:2px 0}#vite-devtools-anchor:hover #vite-devtools-glowing{opacity:.6}#vite-devtools-anchor #vite-devtools-glowing{pointer-events:none;z-index:-1;opacity:0;--un-blur:blur(60px);width:160px;height:160px;filter:var(--un-blur)var(--un-brightness)var(--un-contrast)var(--un-drop-shadow)var(--un-grayscale)var(--un-hue-rotate)var(--un-invert)var(--un-saturate)var(--un-sepia);background-image:linear-gradient(45deg,#00dc82,#00dc82,#00dc82);-webkit-border-radius:9999px;border-radius:9999px;transition-property:all;transition-duration:1s;transition-timing-function:cubic-bezier(0,0,.2,1);position:absolute;top:0;left:0;transform:translate(-50%,-50%)}@media print{#vite-devtools-anchor{display:none}}*{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }:after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }.container{width:100%}.border-base{--un-border-opacity:.13;border-color:rgba(136,136,136,var(--un-border-opacity))}.bg-glass{--un-backdrop-blur:blur(5px);backdrop-filter:var(--un-backdrop-blur)var(--un-backdrop-brightness)var(--un-backdrop-contrast)var(--un-backdrop-grayscale)var(--un-backdrop-hue-rotate)var(--un-backdrop-invert)var(--un-backdrop-opacity)var(--un-backdrop-saturate)var(--un-backdrop-sepia);background-color:rgba(255,255,255,.75)}@media (prefers-color-scheme:dark){.bg-glass{background-color:rgba(17,17,17,.75)}}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.absolute{position:absolute}.fixed{position:fixed}.inset-0{top:0;bottom:0;left:0;right:0}.bottom-0{bottom:0}.left-0{left:0}.right-0{right:0}.top-0{top:0}.h-5{height:1.25rem}.h-full{height:100%}.w-5{width:1.25rem}.w-full{width:100%}.flex{display:flex}.rotate-270{--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-rotate:270deg;transform:translateX(var(--un-translate-x))translateY(var(--un-translate-y))translateZ(var(--un-translate-z))rotate(var(--un-rotate))rotateX(var(--un-rotate-x))rotateY(var(--un-rotate-y))rotateZ(var(--un-rotate-z))skewX(var(--un-skew-x))skewY(var(--un-skew-y))scaleX(var(--un-scale-x))scaleY(var(--un-scale-y))scaleZ(var(--un-scale-z))}.scale-120{--un-scale-x:1.2;--un-scale-y:1.2;transform:translateX(var(--un-translate-x))translateY(var(--un-translate-y))translateZ(var(--un-translate-z))rotate(var(--un-rotate))rotateX(var(--un-rotate-x))rotateY(var(--un-rotate-y))rotateZ(var(--un-rotate-z))skewX(var(--un-skew-x))skewY(var(--un-skew-y))scaleX(var(--un-scale-x))scaleY(var(--un-scale-y))scaleZ(var(--un-scale-z))}.hover\\:scale-120:hover{--un-scale-x:1.2;--un-scale-y:1.2;transform:translateX(var(--un-translate-x))translateY(var(--un-translate-y))translateZ(var(--un-translate-z))rotate(var(--un-rotate))rotateX(var(--un-rotate-x))rotateY(var(--un-rotate-y))rotateZ(var(--un-rotate-z))skewX(var(--un-skew-x))skewY(var(--un-skew-y))scaleX(var(--un-scale-x))scaleY(var(--un-scale-y))scaleZ(var(--un-scale-z))}.transform{transform:translateX(var(--un-translate-x))translateY(var(--un-translate-y))translateZ(var(--un-translate-z))rotate(var(--un-rotate))rotateX(var(--un-rotate-x))rotateY(var(--un-rotate-y))rotateZ(var(--un-rotate-z))skewX(var(--un-skew-x))skewY(var(--un-skew-y))scaleX(var(--un-scale-x))scaleY(var(--un-scale-y))scaleZ(var(--un-scale-z))}.select-none{user-select:none}.resize{resize:both}.items-center{align-items:center}.justify-center{justify-content:center}.border{border-width:1px}.rounded{-webkit-border-radius:.25rem;border-radius:.25rem}.rounded-lg{-webkit-border-radius:.5rem;border-radius:.5rem}.rounded-xl{-webkit-border-radius:.75rem;border-radius:.75rem}.hover\\:bg-\\[\\#8881\\]:hover{--un-bg-opacity:.07;background-color:rgba(136,136,136,var(--un-bg-opacity))}.p1\\.5{padding:.375rem}.px{padding-left:1rem;padding-right:1rem}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.op50{opacity:.5}.opacity-0{opacity:0}.opacity-100{opacity:1}.shadow{--un-shadow:var(--un-shadow-inset)0 1px 3px 0 var(--un-shadow-color,rgba(0,0,0,.1)),var(--un-shadow-inset)0 1px 2px -1px var(--un-shadow-color,rgba(0,0,0,.1));box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.saturate-0{--un-saturate:saturate(0);filter:var(--un-blur)var(--un-brightness)var(--un-contrast)var(--un-drop-shadow)var(--un-grayscale)var(--un-hue-rotate)var(--un-invert)var(--un-saturate)var(--un-sepia)}.transition-all{transition-property:all;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-property:opacity;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-300{transition-duration:.3s}";
6
+ var css_default = "*{box-sizing:border-box;border-style:solid;border-width:0;border-color:var(--un-default-border-color,#e5e7eb)}:before{box-sizing:border-box;border-style:solid;border-width:0;border-color:var(--un-default-border-color,#e5e7eb)}:after{box-sizing:border-box;border-style:solid;border-width:0;border-color:var(--un-default-border-color,#e5e7eb)}:before{--un-content:\"\"}:after{--un-content:\"\"}html{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}:host{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button{-webkit-appearance:button;background-color:transparent;background-image:none}[type=button]{-webkit-appearance:button;background-color:transparent;background-image:none}[type=reset]{-webkit-appearance:button;background-color:transparent;background-image:none}[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::placeholder{opacity:1;color:#9ca3af}textarea::placeholder{opacity:1;color:#9ca3af}button{cursor:pointer}[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.xterm{cursor:text;user-select:none;position:relative}.xterm.focus{outline:none}.xterm:focus{outline:none}.xterm .xterm-helpers{z-index:5;position:absolute;top:0}.xterm .xterm-helper-textarea{opacity:0;z-index:-5;white-space:nowrap;resize:none;border:0;width:0;height:0;margin:0;padding:0;position:absolute;top:0;left:-9999em;overflow:hidden}.xterm .composition-view{color:#fff;white-space:nowrap;z-index:1;background:#000;display:none;position:absolute}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{cursor:default;background-color:#000;position:absolute;top:0;bottom:0;left:0;right:0;overflow-y:scroll}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;top:0;left:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{visibility:hidden;line-height:normal;display:inline-block;position:absolute;top:0;left:-9999em}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-message{z-index:10;color:transparent;pointer-events:none;position:absolute;top:0;bottom:0;left:0;right:0}.xterm .xterm-accessibility:not(.debug){z-index:10;color:transparent;pointer-events:none;position:absolute;top:0;bottom:0;left:0;right:0}.xterm .xterm-accessibility-tree:not(.debug) ::selection{color:transparent}.xterm .xterm-accessibility-tree{user-select:text;white-space:pre}.xterm .live-region{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{text-decoration:underline double}.xterm-underline-3{text-decoration:underline wavy}.xterm-underline-4{text-decoration:underline dotted}.xterm-underline-5{text-decoration:underline dashed}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:underline overline}.xterm-overline.xterm-underline-2{text-decoration:overline double underline}.xterm-overline.xterm-underline-3{text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;pointer-events:none;position:absolute;top:0;right:0}.xterm-decoration-top{z-index:2;position:relative}:root{--un-text-opacity:100%}#vite-devtools-anchor{z-index:2147483644;box-sizing:border-box;transform-origin:50%;width:0;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:15px;position:fixed;transform:translate(-50%,-50%)rotate(0)}#vite-devtools-anchor #vite-devtools-dock-container{width:max-content;min-width:100px;height:40px;display:flex;position:absolute;top:0;left:0;transform:translate(-50%,-50%)}#vite-devtools-anchor.vite-devtools-vertical #vite-devtools-dock-container{transition-property:all;transition-duration:.5s;transition-timing-function:cubic-bezier(.4,0,.2,1);transform:translate(-50%,-50%)rotate(90deg)}#vite-devtools-anchor #vite-devtools-dock{touch-action:none;user-select:none;--vdt-backdrop-blur:blur(5px);height:40px;backdrop-filter:var(--vdt-backdrop-blur)var(--vdt-backdrop-brightness)var(--vdt-backdrop-contrast)var(--vdt-backdrop-grayscale)var(--vdt-backdrop-hue-rotate)var(--vdt-backdrop-invert)var(--vdt-backdrop-opacity)var(--vdt-backdrop-saturate)var(--vdt-backdrop-sepia);--vdt-text-opacity:1;color:rgba(255,255,255,var(--vdt-text-opacity));--vdt-shadow:var(--vdt-shadow-inset)0 1px 3px 0 var(--vdt-shadow-color,rgba(0,0,0,.1)),var(--vdt-shadow-inset)0 1px 2px -1px var(--vdt-shadow-color,rgba(0,0,0,.1));box-shadow:var(--vdt-ring-offset-shadow),var(--vdt-ring-shadow),var(--vdt-shadow);width:calc-size(max-content,size);background-color:rgba(255,255,255,.5);-webkit-border-radius:9999px;border-radius:9999px;margin:auto;padding-left:1rem;padding-right:1rem;transition-property:all;transition-duration:.5s;transition-timing-function:cubic-bezier(.4,0,.2,1)}@media (prefers-color-scheme:dark){#vite-devtools-anchor #vite-devtools-dock{background-color:rgba(17,17,17,.5)}}#vite-devtools-anchor.vite-devtools-minimized #vite-devtools-dock{width:22px;height:22px;padding:2px 0}#vite-devtools-anchor.vite-devtools-minimized .vite-devtools-dock-bracket{opacity:.5;width:.375rem}#vite-devtools-anchor:hover #vite-devtools-glowing{opacity:.6}#vite-devtools-anchor #vite-devtools-glowing{pointer-events:none;z-index:-1;opacity:0;--vdt-blur:blur(60px);width:160px;height:160px;filter:var(--vdt-blur)var(--vdt-brightness)var(--vdt-contrast)var(--vdt-drop-shadow)var(--vdt-grayscale)var(--vdt-hue-rotate)var(--vdt-invert)var(--vdt-saturate)var(--vdt-sepia);background-image:linear-gradient(45deg,#61d9ff,#7a23a1,#715ebd);-webkit-border-radius:9999px;border-radius:9999px;transition-property:all;transition-duration:1s;transition-timing-function:cubic-bezier(0,0,.2,1);position:absolute;top:0;left:0;transform:translate(-50%,-50%)}@media print{#vite-devtools-anchor{display:none}}.vite-devtools-resize-handle-horizontal{cursor:ns-resize;-webkit-border-radius:.375rem;border-radius:.375rem;height:10px;margin-top:-5px;margin-bottom:-5px;position:absolute;left:6px;right:6px}.vite-devtools-resize-handle-vertical{cursor:ew-resize;-webkit-border-radius:.375rem;border-radius:.375rem;width:10px;margin-left:-5px;margin-right:-5px;position:absolute;top:6px;bottom:0}.vite-devtools-resize-handle-corner{-webkit-border-radius:.375rem;border-radius:.375rem;width:14px;height:14px;margin:-6px;position:absolute}.vite-devtools-resize-handle{z-index:30}.vite-devtools-resize-handle:hover{background-color:rgba(156,163,175,.1)}*{--vdt-rotate:0;--vdt-rotate-x:0;--vdt-rotate-y:0;--vdt-rotate-z:0;--vdt-scale-x:1;--vdt-scale-y:1;--vdt-scale-z:1;--vdt-skew-x:0;--vdt-skew-y:0;--vdt-translate-x:0;--vdt-translate-y:0;--vdt-translate-z:0;--vdt-pan-x: ;--vdt-pan-y: ;--vdt-pinch-zoom: ;--vdt-scroll-snap-strictness:proximity;--vdt-ordinal: ;--vdt-slashed-zero: ;--vdt-numeric-figure: ;--vdt-numeric-spacing: ;--vdt-numeric-fraction: ;--vdt-border-spacing-x:0;--vdt-border-spacing-y:0;--vdt-ring-offset-shadow:0 0 transparent;--vdt-ring-shadow:0 0 transparent;--vdt-shadow-inset: ;--vdt-shadow:0 0 transparent;--vdt-ring-inset: ;--vdt-ring-offset-width:0px;--vdt-ring-offset-color:#fff;--vdt-ring-width:0px;--vdt-ring-color:rgba(147,197,253,.5);--vdt-blur: ;--vdt-brightness: ;--vdt-contrast: ;--vdt-drop-shadow: ;--vdt-grayscale: ;--vdt-hue-rotate: ;--vdt-invert: ;--vdt-saturate: ;--vdt-sepia: ;--vdt-backdrop-blur: ;--vdt-backdrop-brightness: ;--vdt-backdrop-contrast: ;--vdt-backdrop-grayscale: ;--vdt-backdrop-hue-rotate: ;--vdt-backdrop-invert: ;--vdt-backdrop-opacity: ;--vdt-backdrop-saturate: ;--vdt-backdrop-sepia: }:before{--vdt-rotate:0;--vdt-rotate-x:0;--vdt-rotate-y:0;--vdt-rotate-z:0;--vdt-scale-x:1;--vdt-scale-y:1;--vdt-scale-z:1;--vdt-skew-x:0;--vdt-skew-y:0;--vdt-translate-x:0;--vdt-translate-y:0;--vdt-translate-z:0;--vdt-pan-x: ;--vdt-pan-y: ;--vdt-pinch-zoom: ;--vdt-scroll-snap-strictness:proximity;--vdt-ordinal: ;--vdt-slashed-zero: ;--vdt-numeric-figure: ;--vdt-numeric-spacing: ;--vdt-numeric-fraction: ;--vdt-border-spacing-x:0;--vdt-border-spacing-y:0;--vdt-ring-offset-shadow:0 0 transparent;--vdt-ring-shadow:0 0 transparent;--vdt-shadow-inset: ;--vdt-shadow:0 0 transparent;--vdt-ring-inset: ;--vdt-ring-offset-width:0px;--vdt-ring-offset-color:#fff;--vdt-ring-width:0px;--vdt-ring-color:rgba(147,197,253,.5);--vdt-blur: ;--vdt-brightness: ;--vdt-contrast: ;--vdt-drop-shadow: ;--vdt-grayscale: ;--vdt-hue-rotate: ;--vdt-invert: ;--vdt-saturate: ;--vdt-sepia: ;--vdt-backdrop-blur: ;--vdt-backdrop-brightness: ;--vdt-backdrop-contrast: ;--vdt-backdrop-grayscale: ;--vdt-backdrop-hue-rotate: ;--vdt-backdrop-invert: ;--vdt-backdrop-opacity: ;--vdt-backdrop-saturate: ;--vdt-backdrop-sepia: }:after{--vdt-rotate:0;--vdt-rotate-x:0;--vdt-rotate-y:0;--vdt-rotate-z:0;--vdt-scale-x:1;--vdt-scale-y:1;--vdt-scale-z:1;--vdt-skew-x:0;--vdt-skew-y:0;--vdt-translate-x:0;--vdt-translate-y:0;--vdt-translate-z:0;--vdt-pan-x: ;--vdt-pan-y: ;--vdt-pinch-zoom: ;--vdt-scroll-snap-strictness:proximity;--vdt-ordinal: ;--vdt-slashed-zero: ;--vdt-numeric-figure: ;--vdt-numeric-spacing: ;--vdt-numeric-fraction: ;--vdt-border-spacing-x:0;--vdt-border-spacing-y:0;--vdt-ring-offset-shadow:0 0 transparent;--vdt-ring-shadow:0 0 transparent;--vdt-shadow-inset: ;--vdt-shadow:0 0 transparent;--vdt-ring-inset: ;--vdt-ring-offset-width:0px;--vdt-ring-offset-color:#fff;--vdt-ring-width:0px;--vdt-ring-color:rgba(147,197,253,.5);--vdt-blur: ;--vdt-brightness: ;--vdt-contrast: ;--vdt-drop-shadow: ;--vdt-grayscale: ;--vdt-hue-rotate: ;--vdt-invert: ;--vdt-saturate: ;--vdt-sepia: ;--vdt-backdrop-blur: ;--vdt-backdrop-brightness: ;--vdt-backdrop-contrast: ;--vdt-backdrop-grayscale: ;--vdt-backdrop-hue-rotate: ;--vdt-backdrop-invert: ;--vdt-backdrop-opacity: ;--vdt-backdrop-saturate: ;--vdt-backdrop-sepia: }::backdrop{--vdt-rotate:0;--vdt-rotate-x:0;--vdt-rotate-y:0;--vdt-rotate-z:0;--vdt-scale-x:1;--vdt-scale-y:1;--vdt-scale-z:1;--vdt-skew-x:0;--vdt-skew-y:0;--vdt-translate-x:0;--vdt-translate-y:0;--vdt-translate-z:0;--vdt-pan-x: ;--vdt-pan-y: ;--vdt-pinch-zoom: ;--vdt-scroll-snap-strictness:proximity;--vdt-ordinal: ;--vdt-slashed-zero: ;--vdt-numeric-figure: ;--vdt-numeric-spacing: ;--vdt-numeric-fraction: ;--vdt-border-spacing-x:0;--vdt-border-spacing-y:0;--vdt-ring-offset-shadow:0 0 transparent;--vdt-ring-shadow:0 0 transparent;--vdt-shadow-inset: ;--vdt-shadow:0 0 transparent;--vdt-ring-inset: ;--vdt-ring-offset-width:0px;--vdt-ring-offset-color:#fff;--vdt-ring-width:0px;--vdt-ring-color:rgba(147,197,253,.5);--vdt-blur: ;--vdt-brightness: ;--vdt-contrast: ;--vdt-drop-shadow: ;--vdt-grayscale: ;--vdt-hue-rotate: ;--vdt-invert: ;--vdt-saturate: ;--vdt-sepia: ;--vdt-backdrop-blur: ;--vdt-backdrop-brightness: ;--vdt-backdrop-contrast: ;--vdt-backdrop-grayscale: ;--vdt-backdrop-hue-rotate: ;--vdt-backdrop-invert: ;--vdt-backdrop-opacity: ;--vdt-backdrop-saturate: ;--vdt-backdrop-sepia: }.i-carbon-clean{--vdt-icon:url(\"data:image/svg+xml;utf8,%3Csvg viewBox='0 0 32 32' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M26 20h-6v-2h6zm4 8h-6v-2h6zm-2-4h-6v-2h6z'/%3E%3Cpath fill='currentColor' d='M17.003 20a4.9 4.9 0 0 0-2.404-4.173L22 3l-1.73-1l-7.577 13.126a5.7 5.7 0 0 0-5.243 1.503C3.706 20.24 3.996 28.682 4.01 29.04a1 1 0 0 0 1 .96h14.991a1 1 0 0 0 .6-1.8c-3.54-2.656-3.598-8.146-3.598-8.2m-5.073-3.003A3.11 3.11 0 0 1 15.004 20c0 .038.002.208.017.469l-5.9-2.624a3.8 3.8 0 0 1 2.809-.848M15.45 28A5.2 5.2 0 0 1 14 25h-2a6.5 6.5 0 0 0 .968 3h-2.223A16.6 16.6 0 0 1 10 24H8a17.3 17.3 0 0 0 .665 4H6c.031-1.836.29-5.892 1.803-8.553l7.533 3.35A13 13 0 0 0 17.596 28Z'/%3E%3C/svg%3E\");-webkit-mask:var(--vdt-icon)no-repeat;mask:var(--vdt-icon)no-repeat;color:inherit;background-color:currentColor;width:1em;height:1em;mask-size:100% 100%}.i-ph-check-duotone{--vdt-icon:url(\"data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cg fill='currentColor'%3E%3Cpath d='M232 56v144a16 16 0 0 1-16 16H40a16 16 0 0 1-16-16V56a16 16 0 0 1 16-16h176a16 16 0 0 1 16 16' opacity='.2'/%3E%3Cpath d='m205.66 85.66l-96 96a8 8 0 0 1-11.32 0l-40-40a8 8 0 0 1 11.32-11.32L104 164.69l90.34-90.35a8 8 0 0 1 11.32 11.32'/%3E%3C/g%3E%3C/svg%3E\");-webkit-mask:var(--vdt-icon)no-repeat;mask:var(--vdt-icon)no-repeat;color:inherit;background-color:currentColor;width:1em;height:1em;mask-size:100% 100%}.i-ph-rocket-launch-duotone{--vdt-icon:url(\"data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cg fill='currentColor'%3E%3Cpath d='M184 120v61.65a8 8 0 0 1-2.34 5.65l-34.35 34.35a8 8 0 0 1-13.57-4.53L128 176Zm-48-48H74.35a8 8 0 0 0-5.65 2.34l-34.35 34.35a8 8 0 0 0 4.53 13.57L80 128ZM40 216c37.65 0 50.69-19.69 54.56-28.18l-26.38-26.38C59.69 165.31 40 178.35 40 216' opacity='.2'/%3E%3Cpath d='M223.85 47.12a16 16 0 0 0-15-15c-12.58-.75-44.73.4-71.41 27.07L132.69 64H74.36A15.9 15.9 0 0 0 63 68.68L28.7 103a16 16 0 0 0 9.07 27.16l38.47 5.37l44.21 44.21l5.37 38.49a15.94 15.94 0 0 0 10.78 12.92a16.1 16.1 0 0 0 5.1.83a15.9 15.9 0 0 0 11.3-4.68l34.32-34.3a15.9 15.9 0 0 0 4.68-11.36v-58.33l4.77-4.77c26.68-26.68 27.83-58.83 27.08-71.42M74.36 80h42.33l-39.53 39.52L40 114.34Zm74.41-9.45a76.65 76.65 0 0 1 59.11-22.47a76.46 76.46 0 0 1-22.42 59.16L128 164.68L91.32 128ZM176 181.64L141.67 216l-5.19-37.17L176 139.31Zm-74.16 9.5C97.34 201 82.29 224 40 224a8 8 0 0 1-8-8c0-42.29 23-57.34 32.86-61.85a8 8 0 0 1 6.64 14.56c-6.43 2.93-20.62 12.36-23.12 38.91c26.55-2.5 36-16.69 38.91-23.12a8 8 0 1 1 14.56 6.64Z'/%3E%3C/g%3E%3C/svg%3E\");-webkit-mask:var(--vdt-icon)no-repeat;mask:var(--vdt-icon)no-repeat;color:inherit;background-color:currentColor;width:1em;height:1em;mask-size:100% 100%}.i-ph-warning-duotone{--vdt-icon:url(\"data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cg fill='currentColor'%3E%3Cpath d='M215.46 216H40.54c-12.62 0-20.54-13.21-14.41-23.91l87.46-151.87c6.3-11 22.52-11 28.82 0l87.46 151.87c6.13 10.7-1.79 23.91-14.41 23.91' opacity='.2'/%3E%3Cpath d='M236.8 188.09L149.35 36.22a24.76 24.76 0 0 0-42.7 0L19.2 188.09a23.51 23.51 0 0 0 0 23.72A24.35 24.35 0 0 0 40.55 224h174.9a24.35 24.35 0 0 0 21.33-12.19a23.51 23.51 0 0 0 .02-23.72m-13.87 15.71a8.5 8.5 0 0 1-7.48 4.2H40.55a8.5 8.5 0 0 1-7.48-4.2a7.59 7.59 0 0 1 0-7.72l87.45-151.87a8.75 8.75 0 0 1 15 0l87.45 151.87a7.59 7.59 0 0 1-.04 7.72M120 144v-40a8 8 0 0 1 16 0v40a8 8 0 0 1-16 0m20 36a12 12 0 1 1-12-12a12 12 0 0 1 12 12'/%3E%3C/g%3E%3C/svg%3E\");-webkit-mask:var(--vdt-icon)no-repeat;mask:var(--vdt-icon)no-repeat;color:inherit;background-color:currentColor;width:1em;height:1em;mask-size:100% 100%}.i-svg-spinners-8-dots-rotate{--vdt-icon:url(\"data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cg%3E%3Ccircle cx='3' cy='12' r='2' fill='currentColor'/%3E%3Ccircle cx='21' cy='12' r='2' fill='currentColor'/%3E%3Ccircle cx='12' cy='21' r='2' fill='currentColor'/%3E%3Ccircle cx='12' cy='3' r='2' fill='currentColor'/%3E%3Ccircle cx='5.64' cy='5.64' r='2' fill='currentColor'/%3E%3Ccircle cx='18.36' cy='18.36' r='2' fill='currentColor'/%3E%3Ccircle cx='5.64' cy='18.36' r='2' fill='currentColor'/%3E%3Ccircle cx='18.36' cy='5.64' r='2' fill='currentColor'/%3E%3CanimateTransform attributeName='transform' dur='1.5s' repeatCount='indefinite' type='rotate' values='0 12 12;360 12 12'/%3E%3C/g%3E%3C/svg%3E\");-webkit-mask:var(--vdt-icon)no-repeat;mask:var(--vdt-icon)no-repeat;color:inherit;background-color:currentColor;width:1em;height:1em;mask-size:100% 100%}.container{width:100%}.z-floating-tooltip{z-index:2147483645}.border-base{--vdt-border-opacity:.13;border-color:rgba(136,136,136,var(--vdt-border-opacity))}.bg-active{--vdt-bg-opacity:.07;background-color:rgba(136,136,136,var(--vdt-bg-opacity))}.bg-glass{--vdt-backdrop-blur:blur(5px);backdrop-filter:var(--vdt-backdrop-blur)var(--vdt-backdrop-brightness)var(--vdt-backdrop-contrast)var(--vdt-backdrop-grayscale)var(--vdt-backdrop-hue-rotate)var(--vdt-backdrop-invert)var(--vdt-backdrop-opacity)var(--vdt-backdrop-saturate)var(--vdt-backdrop-sepia);background-color:rgba(255,255,255,.5)}.hover\\:bg-active:hover{--vdt-bg-opacity:.07;background-color:rgba(136,136,136,var(--vdt-bg-opacity))}@media (prefers-color-scheme:dark){.bg-glass{background-color:rgba(17,17,17,.5)}}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.pointer-events-none{pointer-events:none}.disabled\\:pointer-events-none:disabled{pointer-events:none}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{top:0;bottom:0;left:0;right:0}.bottom-0{bottom:0}.left--1{left:-.25rem}.left-1\\/2{left:50%}.right--1{right:-.25rem}.top-1\\/2{top:50%}.z--1{z-index:-1}.grid{display:grid}.grid-rows-\\[max-content_1fr\\]{grid-template-rows:max-content 1fr}.m-auto{margin:auto}.h-10{height:2.5rem}.h-3{height:.75rem}.h-5{height:1.25rem}.h-full{height:100%}.w-10{width:2.5rem}.w-2\\.5{width:.625rem}.w-3{width:.75rem}.w-5{width:1.25rem}.w-full{width:100%}.w-max{width:max-content}.flex{display:flex}.flex-col{flex-direction:column}.translate-x--1\\/2{--vdt-translate-x:-50%;transform:translateX(var(--vdt-translate-x))translateY(var(--vdt-translate-y))translateZ(var(--vdt-translate-z))rotate(var(--vdt-rotate))rotateX(var(--vdt-rotate-x))rotateY(var(--vdt-rotate-y))rotateZ(var(--vdt-rotate-z))skewX(var(--vdt-skew-x))skewY(var(--vdt-skew-y))scaleX(var(--vdt-scale-x))scaleY(var(--vdt-scale-y))scaleZ(var(--vdt-scale-z))}.translate-y--1\\/2{--vdt-translate-y:-50%;transform:translateX(var(--vdt-translate-x))translateY(var(--vdt-translate-y))translateZ(var(--vdt-translate-z))rotate(var(--vdt-rotate))rotateX(var(--vdt-rotate-x))rotateY(var(--vdt-rotate-y))rotateZ(var(--vdt-rotate-z))skewX(var(--vdt-skew-x))skewY(var(--vdt-skew-y))scaleX(var(--vdt-scale-x))scaleY(var(--vdt-scale-y))scaleZ(var(--vdt-scale-z))}.rotate-270{--vdt-rotate-x:0;--vdt-rotate-y:0;--vdt-rotate-z:0;--vdt-rotate:270deg;transform:translateX(var(--vdt-translate-x))translateY(var(--vdt-translate-y))translateZ(var(--vdt-translate-z))rotate(var(--vdt-rotate))rotateX(var(--vdt-rotate-x))rotateY(var(--vdt-rotate-y))rotateZ(var(--vdt-rotate-z))skewX(var(--vdt-skew-x))skewY(var(--vdt-skew-y))scaleX(var(--vdt-scale-x))scaleY(var(--vdt-scale-y))scaleZ(var(--vdt-scale-z))}.scale-120{--vdt-scale-x:1.2;--vdt-scale-y:1.2;transform:translateX(var(--vdt-translate-x))translateY(var(--vdt-translate-y))translateZ(var(--vdt-translate-z))rotate(var(--vdt-rotate))rotateX(var(--vdt-rotate-x))rotateY(var(--vdt-rotate-y))rotateZ(var(--vdt-rotate-z))skewX(var(--vdt-skew-x))skewY(var(--vdt-skew-y))scaleX(var(--vdt-scale-x))scaleY(var(--vdt-scale-y))scaleZ(var(--vdt-scale-z))}.hover\\:scale-120:hover{--vdt-scale-x:1.2;--vdt-scale-y:1.2;transform:translateX(var(--vdt-translate-x))translateY(var(--vdt-translate-y))translateZ(var(--vdt-translate-z))rotate(var(--vdt-rotate))rotateX(var(--vdt-rotate-x))rotateY(var(--vdt-rotate-y))rotateZ(var(--vdt-rotate-z))skewX(var(--vdt-skew-x))skewY(var(--vdt-skew-y))scaleX(var(--vdt-scale-x))scaleY(var(--vdt-scale-y))scaleZ(var(--vdt-scale-z))}.scale-y--100{--vdt-scale-y:-1;transform:translateX(var(--vdt-translate-x))translateY(var(--vdt-translate-y))translateZ(var(--vdt-translate-z))rotate(var(--vdt-rotate))rotateX(var(--vdt-rotate-x))rotateY(var(--vdt-rotate-y))rotateZ(var(--vdt-rotate-z))skewX(var(--vdt-skew-x))skewY(var(--vdt-skew-y))scaleX(var(--vdt-scale-x))scaleY(var(--vdt-scale-y))scaleZ(var(--vdt-scale-z))}.transform{transform:translateX(var(--vdt-translate-x))translateY(var(--vdt-translate-y))translateZ(var(--vdt-translate-z))rotate(var(--vdt-rotate))rotateX(var(--vdt-rotate-x))rotateY(var(--vdt-rotate-y))rotateZ(var(--vdt-rotate-z))skewX(var(--vdt-skew-x))skewY(var(--vdt-skew-y))scaleX(var(--vdt-scale-x))scaleY(var(--vdt-scale-y))scaleZ(var(--vdt-scale-z))}.select-none{user-select:none}.resize{resize:both}.items-center{align-items:center}.justify-center{justify-content:center}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.of-auto{overflow:auto}.overflow-x-auto{overflow-x:auto}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.rounded{-webkit-border-radius:.25rem;border-radius:.25rem}.rounded-lg{-webkit-border-radius:.5rem;border-radius:.5rem}.rounded-xl{-webkit-border-radius:.75rem;border-radius:.75rem}.rounded-t{-webkit-border-top-left-radius:.25rem;border-top-left-radius:.25rem;-webkit-border-top-right-radius:.25rem;border-top-right-radius:.25rem}.bg-black{--vdt-bg-opacity:1;background-color:rgba(0,0,0,var(--vdt-bg-opacity))}.bg-lime6{--vdt-bg-opacity:1;background-color:rgba(101,163,13,var(--vdt-bg-opacity))}.hover\\:bg-\\[\\#8881\\]:hover{--vdt-bg-opacity:.07;background-color:rgba(136,136,136,var(--vdt-bg-opacity))}.hover\\:bg-lime7:hover{--vdt-bg-opacity:1;background-color:rgba(77,124,15,var(--vdt-bg-opacity))}.disabled\\:bg-gray6\\!:disabled{--vdt-bg-opacity:1!important;background-color:rgba(75,85,99,var(--vdt-bg-opacity))!important}.fill-black{--vdt-fill-opacity:1;fill:rgba(0,0,0,var(--vdt-fill-opacity))}.p1{padding:.25rem}.p1\\.5{padding:.375rem}.px,.px4{padding-left:1rem;padding-right:1rem}.px2{padding-left:.5rem;padding-right:.5rem}.px3{padding-left:.75rem;padding-right:.75rem}.py1{padding-top:.25rem;padding-bottom:.25rem}.py1\\.5{padding-top:.375rem;padding-bottom:.375rem}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.text-purple{--vdt-text-opacity:1;color:rgba(192,132,252,var(--vdt-text-opacity))}.font-bold{font-weight:700}.tab{tab-size:4}.op0,.opacity-0{opacity:0}.op100,.opacity-100{opacity:1}.op50{opacity:.5}.op60\\!{opacity:.6!important}.op75{opacity:.75}.shadow{--vdt-shadow:var(--vdt-shadow-inset)0 1px 3px 0 var(--vdt-shadow-color,rgba(0,0,0,.1)),var(--vdt-shadow-inset)0 1px 2px -1px var(--vdt-shadow-color,rgba(0,0,0,.1));box-shadow:var(--vdt-ring-offset-shadow),var(--vdt-ring-shadow),var(--vdt-shadow)}.saturate-0{--vdt-saturate:saturate(0);filter:var(--vdt-blur)var(--vdt-brightness)var(--vdt-contrast)var(--vdt-drop-shadow)var(--vdt-grayscale)var(--vdt-hue-rotate)var(--vdt-invert)var(--vdt-saturate)var(--vdt-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-property:all;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-property:opacity;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}@media (prefers-color-scheme:dark){.dark\\:fill-white{--vdt-fill-opacity:1;fill:rgba(255,255,255,var(--vdt-fill-opacity))}}";
5
7
 
6
8
  //#endregion
7
- //#region src/client/webcomponents/components/DockEntries.vue?vue&type=script&setup=true&lang.ts
8
- const _hoisted_1$1 = { class: "flex items-center w-full h-full justify-center transition-opacity duration-300" };
9
- const _hoisted_2 = ["title", "onClick"];
10
- const _hoisted_3 = ["src", "alt"];
11
- var DockEntries_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
9
+ //#region src/client/webcomponents/state/floating-tooltip.ts
10
+ const state = shallowRef(null);
11
+ function setFloatingTooltip(info) {
12
+ state.value = info;
13
+ }
14
+ function useFloatingTooltip() {
15
+ return state;
16
+ }
17
+
18
+ //#endregion
19
+ //#region \0/plugin-vue/export-helper
20
+ var export_helper_default = (sfc, props) => {
21
+ const target = sfc.__vccOpts || sfc;
22
+ for (const [key, val] of props) target[key] = val;
23
+ return target;
24
+ };
25
+
26
+ //#endregion
27
+ //#region src/client/webcomponents/components/icons/VitePlusCore.vue
28
+ const _sfc_main$16 = {};
29
+ const _hoisted_1$8 = {
30
+ viewBox: "0 0 22 22",
31
+ fill: "none",
32
+ xmlns: "http://www.w3.org/2000/svg"
33
+ };
34
+ function _sfc_render$2(_ctx, _cache) {
35
+ return openBlock(), createElementBlock("svg", _hoisted_1$8, [..._cache[0] || (_cache[0] = [createStaticVNode("<g clip-path=\"url(#clip0_2_2)\"><path d=\"M11.85 20.535C11.7881 20.6144 11.7029 20.6726 11.6064 20.7012C11.5098 20.7298 11.4067 20.7276 11.3115 20.6947C11.2163 20.6619 11.1337 20.6001 11.0754 20.5181C11.017 20.436 10.9858 20.3377 10.986 20.237V15.834C10.986 15.5775 10.8841 15.3316 10.7028 15.1502C10.5214 14.9689 10.2755 14.867 10.019 14.867H5.157C5.06821 14.867 4.98114 14.8426 4.90534 14.7964C4.82954 14.7501 4.76795 14.6839 4.72734 14.6049C4.68673 14.526 4.66866 14.4374 4.67513 14.3488C4.6816 14.2603 4.71235 14.1752 4.764 14.103L7.961 9.62801C8.06459 9.48335 8.12626 9.31291 8.13923 9.13546C8.15219 8.95801 8.11594 8.78042 8.03448 8.62224C7.95301 8.46406 7.82948 8.33143 7.67749 8.23893C7.52549 8.14644 7.35093 8.09768 7.173 8.09801H1.29C1.20122 8.09803 1.11414 8.07359 1.03834 8.02736C0.962542 7.98113 0.900953 7.91489 0.86034 7.83594C0.819727 7.75699 0.801662 7.66837 0.80813 7.57982C0.814597 7.49127 0.845347 7.40622 0.897 7.33401L5.04 1.53301C5.08452 1.46999 5.14358 1.41864 5.21217 1.38331C5.28075 1.34797 5.35685 1.32969 5.434 1.33001H17.782C18.175 1.33001 18.404 1.77501 18.175 2.09401L14.978 6.57001C14.521 7.21001 14.978 8.10001 15.766 8.10001H20.627C21.031 8.10001 21.257 8.56401 21.007 8.88201L11.85 20.535Z\" fill=\"#6254FE\"></path><mask id=\"mask0_2_2\" style=\"mask-type:alpha;\" maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"1\" width=\"22\" height=\"20\"><path d=\"M11.85 20.535C11.7881 20.6144 11.7029 20.6726 11.6064 20.7012C11.5098 20.7298 11.4067 20.7276 11.3115 20.6947C11.2163 20.6619 11.1337 20.6001 11.0754 20.5181C11.017 20.436 10.9858 20.3377 10.986 20.237V15.834C10.986 15.5775 10.8841 15.3316 10.7028 15.1502C10.5214 14.9689 10.2755 14.867 10.019 14.867H5.157C5.06821 14.867 4.98114 14.8426 4.90534 14.7964C4.82954 14.7501 4.76795 14.6839 4.72734 14.6049C4.68673 14.526 4.66866 14.4374 4.67513 14.3488C4.6816 14.2603 4.71235 14.1752 4.764 14.103L7.961 9.62801C8.06459 9.48335 8.12626 9.31291 8.13923 9.13546C8.15219 8.95801 8.11594 8.78042 8.03448 8.62224C7.95301 8.46406 7.82948 8.33143 7.67749 8.23893C7.52549 8.14644 7.35093 8.09768 7.173 8.09801H1.29C1.20122 8.09803 1.11414 8.07359 1.03834 8.02736C0.962542 7.98113 0.900953 7.91489 0.86034 7.83594C0.819727 7.75699 0.801662 7.66837 0.80813 7.57982C0.814597 7.49127 0.845347 7.40622 0.897 7.33401L5.04 1.53301C5.08452 1.46999 5.14358 1.41864 5.21217 1.38331C5.28075 1.34797 5.35685 1.32969 5.434 1.33001H17.782C18.175 1.33001 18.404 1.77501 18.175 2.09401L14.978 6.57001C14.521 7.21001 14.978 8.10001 15.766 8.10001H20.627C21.031 8.10001 21.257 8.56401 21.007 8.88201L11.85 20.535Z\" fill=\"#833BFF\"></path></mask><g mask=\"url(#mask0_2_2)\"><g filter=\"url(#filter0_f_2_2)\"><path d=\"M11.4271 17.1119C11.4313 18.412 8.62134 19.475 5.1508 19.4863C1.68026 19.4975 -1.13659 18.4528 -1.14081 17.1527C-1.14503 15.8526 1.66497 14.7896 5.13551 14.7783C8.60605 14.767 11.4229 15.8118 11.4271 17.1119Z\" fill=\"#EDE6FF\"></path></g><g filter=\"url(#filter1_f_2_2)\"><path d=\"M9.48364 9.06048C9.49161 11.5148 3.78614 13.523 -3.25987 13.5459C-10.3059 13.5688 -16.0243 11.5977 -16.0322 9.14332C-16.0402 6.68898 -10.3347 4.6808 -3.28872 4.65792C3.75729 4.63505 9.47567 6.60614 9.48364 9.06048Z\" fill=\"#EDE6FF\"></path></g><g filter=\"url(#filter2_f_2_2)\"><path d=\"M9.53104 8.43813C9.53526 9.7382 3.70543 10.8111 -3.49025 10.8344C-10.6859 10.8578 -16.5226 9.82279 -16.5268 8.52272C-16.531 7.22265 -10.7012 6.1498 -3.50554 6.12644C3.69014 6.10308 9.52682 7.13806 9.53104 8.43813Z\" fill=\"#4E14FF\"></path></g><g filter=\"url(#filter3_f_2_2)\"><path d=\"M11.5916 16.1293C11.5958 17.4293 5.74448 18.5022 -1.47775 18.5256C-8.69997 18.549 -14.5582 17.5141 -14.5624 16.214C-14.5666 14.9139 -8.71523 13.841 -1.493 13.8176C5.72923 13.7942 11.5874 14.8292 11.5916 16.1293Z\" fill=\"#4E14FF\"></path></g><g filter=\"url(#filter4_f_2_2)\"><path d=\"M12.2473 16.6206C12.2515 17.9206 6.40021 18.9935 -0.821978 19.017C-8.04417 19.0404 -13.9023 18.0055 -13.9066 16.7055C-13.9108 15.4054 -8.05945 14.3325 -0.837261 14.309C6.38493 14.2856 12.2431 15.3205 12.2473 16.6206Z\" fill=\"#4E14FF\"></path></g><g filter=\"url(#filter5_f_2_2)\"><path d=\"M14.047 5.7039C14.2411 2.38813 18.6158 -0.0529585 23.8183 0.251568C29.0207 0.556095 33.0808 3.49092 32.8867 6.80669C32.6926 10.1225 28.3179 12.5635 23.1154 12.259C17.913 11.9545 13.8529 9.01966 14.047 5.7039Z\" fill=\"#EDE6FF\"></path></g><g filter=\"url(#filter6_f_2_2)\"><path d=\"M14.7518 7.88531C14.7376 7.06639 18.8396 6.33138 23.9137 6.2436C28.9879 6.15583 33.1129 6.74854 33.127 7.56745C33.1412 8.38637 29.0392 9.12139 23.965 9.20916C18.8909 9.29693 14.7659 8.70422 14.7518 7.88531Z\" fill=\"#4E14FF\"></path></g><g filter=\"url(#filter7_f_2_2)\"><path d=\"M14.7518 7.88531C14.7376 7.06639 18.8396 6.33138 23.9137 6.2436C28.9879 6.15583 33.1129 6.74854 33.127 7.56745C33.1412 8.38637 29.0392 9.12139 23.965 9.20916C18.8909 9.29693 14.7659 8.70422 14.7518 7.88531Z\" fill=\"#4E14FF\"></path></g><g filter=\"url(#filter8_f_2_2)\"><path d=\"M-6.98848 14.7616C-6.18615 15.4233 -1.99229 11.6626 2.37876 6.362C6.74982 1.06138 9.64283 -3.77199 8.84049 -4.43362C8.03816 -5.09525 3.8443 -1.3346 -0.526755 3.96602C-4.89781 9.26665 -7.79082 14.1 -6.98848 14.7616Z\" fill=\"#4E14FF\"></path></g><g filter=\"url(#filter9_f_2_2)\"><path d=\"M13.4305 8.5449C14.2512 9.18361 18.3372 5.30605 22.5568 -0.115883C26.7764 -5.53781 29.5318 -10.4509 28.7111 -11.0896C27.8904 -11.7284 23.8044 -7.8508 19.5848 -2.42887C15.3651 2.99306 12.6098 7.90619 13.4305 8.5449Z\" fill=\"#4E14FF\"></path></g><g filter=\"url(#filter10_f_2_2)\"><path d=\"M14.9501 9.73878C16.4926 10.9392 19.2111 10.026 21.0221 7.69897C22.8331 5.37198 23.0507 2.51245 21.5083 1.31202C19.9658 0.111596 17.2473 1.02485 15.4363 3.35184C13.6253 5.67882 13.4077 8.53835 14.9501 9.73878Z\" fill=\"#2BFDD2\"></path></g><g filter=\"url(#filter11_f_2_2)\"><path d=\"M-7.68233 27.5293C-6.86163 28.168 -2.77563 24.2904 1.44401 18.8685C5.66365 13.4466 8.41904 8.53346 7.59834 7.89474C6.77764 7.25603 2.69164 11.1336 -1.528 16.5555C-5.74764 21.9775 -8.50303 26.8906 -7.68233 27.5293Z\" fill=\"#4E14FF\"></path></g><g filter=\"url(#filter12_f_2_2)\"><path d=\"M-7.68233 27.5293C-6.86163 28.168 -2.77563 24.2904 1.44401 18.8685C5.66365 13.4466 8.41904 8.53346 7.59834 7.89474C6.77764 7.25603 2.69164 11.1336 -1.528 16.5555C-5.74764 21.9775 -8.50303 26.8906 -7.68233 27.5293Z\" fill=\"#4E14FF\"></path></g><g filter=\"url(#filter13_f_2_2)\"><path d=\"M8.26366 23.8563C9.13579 24.535 13.2635 20.6899 17.4831 15.268C21.7028 9.84604 24.4165 4.90047 23.5443 4.22173C22.6722 3.54299 18.5445 7.38811 14.3249 12.81C10.1052 18.232 7.39153 23.1775 8.26366 23.8563Z\" fill=\"#4E14FF\"></path></g><g filter=\"url(#filter14_f_2_2)\"><path d=\"M12.2866 22.5389C13.7846 23.7047 17.4746 21.4689 20.5284 17.5449C23.5822 13.621 24.8434 9.49495 23.3454 8.32912C21.8474 7.16329 18.1574 9.39917 15.1036 13.3231C12.0498 17.247 10.7886 21.3731 12.2866 22.5389Z\" fill=\"#2BFDD2\"></path></g></g></g><defs><filter id=\"filter0_f_2_2\" x=\"-7.68682\" y=\"8.2322\" width=\"25.6599\" height=\"17.8002\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\"><feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood><feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"></feBlend><feGaussianBlur stdDeviation=\"3.273\" result=\"effect1_foregroundBlur_2_2\"></feGaussianBlur></filter><filter id=\"filter1_f_2_2\" x=\"-22.5782\" y=\"-1.88827\" width=\"38.6079\" height=\"21.9804\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\"><feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood><feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"></feBlend><feGaussianBlur stdDeviation=\"3.273\" result=\"effect1_foregroundBlur_2_2\"></feGaussianBlur></filter><filter id=\"filter2_f_2_2\" x=\"-20.4548\" y=\"2.19805\" width=\"33.9139\" height=\"12.5647\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\"><feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood><feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"></feBlend><feGaussianBlur stdDeviation=\"1.964\" result=\"effect1_foregroundBlur_2_2\"></feGaussianBlur></filter><filter id=\"filter3_f_2_2\" x=\"-18.4904\" y=\"9.88925\" width=\"34.01\" height=\"12.5648\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\"><feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood><feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"></feBlend><feGaussianBlur stdDeviation=\"1.964\" result=\"effect1_foregroundBlur_2_2\"></feGaussianBlur></filter><filter id=\"filter4_f_2_2\" x=\"-17.8346\" y=\"10.3806\" width=\"34.0099\" height=\"12.5648\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\"><feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood><feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"></feBlend><feGaussianBlur stdDeviation=\"1.964\" result=\"effect1_foregroundBlur_2_2\"></feGaussianBlur></filter><filter id=\"filter5_f_2_2\" x=\"7.4943\" y=\"-6.32009\" width=\"31.9451\" height=\"25.1508\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\"><feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood><feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"></feBlend><feGaussianBlur stdDeviation=\"3.273\" result=\"effect1_foregroundBlur_2_2\"></feGaussianBlur></filter><filter id=\"filter6_f_2_2\" x=\"10.8237\" y=\"2.30699\" width=\"26.2313\" height=\"10.8388\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\"><feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood><feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"></feBlend><feGaussianBlur stdDeviation=\"1.964\" result=\"effect1_foregroundBlur_2_2\"></feGaussianBlur></filter><filter id=\"filter7_f_2_2\" x=\"10.8237\" y=\"2.30699\" width=\"26.2313\" height=\"10.8388\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\"><feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood><feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"></feBlend><feGaussianBlur stdDeviation=\"1.964\" result=\"effect1_foregroundBlur_2_2\"></feGaussianBlur></filter><filter id=\"filter8_f_2_2\" x=\"-11.0501\" y=\"-8.43711\" width=\"23.9523\" height=\"27.2022\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\"><feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood><feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"></feBlend><feGaussianBlur stdDeviation=\"1.964\" result=\"effect1_foregroundBlur_2_2\"></feGaussianBlur></filter><filter id=\"filter9_f_2_2\" x=\"9.35783\" y=\"-15.0865\" width=\"23.4259\" height=\"27.6282\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\"><feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood><feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"></feBlend><feGaussianBlur stdDeviation=\"1.964\" result=\"effect1_foregroundBlur_2_2\"></feGaussianBlur></filter><filter id=\"filter10_f_2_2\" x=\"9.99386\" y=\"-3.14457\" width=\"16.4707\" height=\"17.3399\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\"><feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood><feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"></feBlend><feGaussianBlur stdDeviation=\"1.964\" result=\"effect1_foregroundBlur_2_2\"></feGaussianBlur></filter><filter id=\"filter11_f_2_2\" x=\"-11.755\" y=\"3.89791\" width=\"23.4259\" height=\"27.6282\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\"><feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood><feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"></feBlend><feGaussianBlur stdDeviation=\"1.964\" result=\"effect1_foregroundBlur_2_2\"></feGaussianBlur></filter><filter id=\"filter12_f_2_2\" x=\"-11.755\" y=\"3.89791\" width=\"23.4259\" height=\"27.6282\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\"><feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood><feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"></feBlend><feGaussianBlur stdDeviation=\"1.964\" result=\"effect1_foregroundBlur_2_2\"></feGaussianBlur></filter><filter id=\"filter13_f_2_2\" x=\"4.17262\" y=\"0.216058\" width=\"23.4628\" height=\"27.6459\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\"><feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood><feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"></feBlend><feGaussianBlur stdDeviation=\"1.964\" result=\"effect1_foregroundBlur_2_2\"></feGaussianBlur></filter><filter id=\"filter14_f_2_2\" x=\"7.72776\" y=\"4.09222\" width=\"20.1765\" height=\"22.6836\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\"><feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood><feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"></feBlend><feGaussianBlur stdDeviation=\"1.964\" result=\"effect1_foregroundBlur_2_2\"></feGaussianBlur></filter><clipPath id=\"clip0_2_2\"><rect width=\"22\" height=\"22\" fill=\"white\"></rect></clipPath></defs>", 2)])]);
36
+ }
37
+ var VitePlusCore_default = /* @__PURE__ */ export_helper_default(_sfc_main$16, [["render", _sfc_render$2]]);
38
+
39
+ //#endregion
40
+ //#region src/client/webcomponents/components/DockIcon.vue
41
+ const _hoisted_1$7 = { key: 1 };
42
+ const _hoisted_2$3 = ["srcset"];
43
+ const _hoisted_3$2 = ["srcset"];
44
+ const _hoisted_4$1 = ["src", "alt"];
45
+ const _sfc_main$15 = /* @__PURE__ */ defineComponent({
46
+ __name: "DockIcon",
47
+ props: {
48
+ icon: {},
49
+ title: {}
50
+ },
51
+ setup(__props) {
52
+ const props = __props;
53
+ function getIconUrl(str, color) {
54
+ if (str.includes("/") || str.startsWith("data:") || str.startsWith("builtin:")) return str;
55
+ const match = str.match(/^([\w-]+):([\w-]+)$/);
56
+ if (match) {
57
+ const [, collection, icon$1] = match;
58
+ return `https://api.iconify.design/${collection}/${icon$1}.svg${color === "dark" ? "?color=%23eee" : "?color=%23111"}`;
59
+ }
60
+ return str;
61
+ }
62
+ const icon = computed(() => {
63
+ if (typeof props.icon === "string") return {
64
+ dark: getIconUrl(props.icon, "dark"),
65
+ light: getIconUrl(props.icon, "light")
66
+ };
67
+ return {
68
+ dark: getIconUrl(props.icon.dark, "dark"),
69
+ light: getIconUrl(props.icon.light, "light")
70
+ };
71
+ });
72
+ return (_ctx, _cache) => {
73
+ return icon.value.light === "builtin:vite-plus-core" ? (openBlock(), createBlock(VitePlusCore_default, { key: 0 })) : (openBlock(), createElementBlock("picture", _hoisted_1$7, [
74
+ createBaseVNode("source", {
75
+ srcset: icon.value.dark,
76
+ media: "(prefers-color-scheme: dark)"
77
+ }, null, 8, _hoisted_2$3),
78
+ createBaseVNode("source", {
79
+ srcset: icon.value.light,
80
+ media: "(prefers-color-scheme: light)"
81
+ }, null, 8, _hoisted_3$2),
82
+ createBaseVNode("img", {
83
+ src: icon.value.light,
84
+ alt: __props.title,
85
+ class: "w-full h-full m-auto",
86
+ draggable: "false"
87
+ }, null, 8, _hoisted_4$1)
88
+ ]));
89
+ };
90
+ }
91
+ });
92
+ var DockIcon_default = _sfc_main$15;
93
+
94
+ //#endregion
95
+ //#region src/client/webcomponents/components/DockEntry.vue
96
+ const _hoisted_1$6 = ["title"];
97
+ const _sfc_main$14 = /* @__PURE__ */ defineComponent({
98
+ __name: "DockEntry",
99
+ props: {
100
+ dock: {},
101
+ isSelected: { type: Boolean },
102
+ isDimmed: { type: Boolean },
103
+ isVertical: { type: Boolean }
104
+ },
105
+ setup(__props) {
106
+ const props = __props;
107
+ const button = useTemplateRef("button");
108
+ function updatePos() {
109
+ const rect = button.value?.getBoundingClientRect();
110
+ if (rect) setFloatingTooltip({
111
+ text: props.dock.title,
112
+ width: rect.width,
113
+ height: rect.height,
114
+ left: rect.left,
115
+ top: rect.top
116
+ });
117
+ }
118
+ function showTitle() {
119
+ updatePos();
120
+ }
121
+ function clearTitle() {
122
+ setFloatingTooltip(null);
123
+ }
124
+ useEventListener("pointerdown", () => {
125
+ setFloatingTooltip(null);
126
+ });
127
+ return (_ctx, _cache) => {
128
+ return openBlock(), createElementBlock("div", {
129
+ key: __props.dock.id,
130
+ class: "relative group vite-devtools-dock-entry",
131
+ onPointerenter: showTitle,
132
+ onPointerleave: clearTitle
133
+ }, [createBaseVNode("button", {
134
+ ref_key: "button",
135
+ ref: button,
136
+ title: __props.dock.title,
137
+ class: normalizeClass([[
138
+ __props.isVertical ? "rotate-270" : "",
139
+ __props.isDimmed ? "op50 saturate-0" : "",
140
+ __props.isSelected ? "scale-120 text-purple" : ""
141
+ ], "flex items-center justify-center p1.5 rounded-xl hover:bg-[#8881] hover:scale-120 transition-all duration-300 relative"])
142
+ }, [createVNode(DockIcon_default, {
143
+ icon: __props.dock.icon,
144
+ title: __props.dock.title,
145
+ class: "w-5 h-5 select-none"
146
+ }, null, 8, ["icon", "title"])], 10, _hoisted_1$6)], 32);
147
+ };
148
+ }
149
+ });
150
+ var DockEntry_default = _sfc_main$14;
151
+
152
+ //#endregion
153
+ //#region src/client/webcomponents/components/DockEntries.vue
154
+ const _sfc_main$13 = /* @__PURE__ */ defineComponent({
12
155
  __name: "DockEntries",
13
156
  props: {
157
+ entries: {},
14
158
  selected: {},
15
- isVertical: { type: Boolean },
16
- entries: {}
159
+ isVertical: { type: Boolean }
17
160
  },
18
161
  emits: ["select"],
19
162
  setup(__props, { emit: __emit }) {
@@ -25,47 +168,68 @@ var DockEntries_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
25
168
  else emit("select", dock);
26
169
  }
27
170
  return (_ctx, _cache) => {
28
- return openBlock(), createElementBlock("div", _hoisted_1$1, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(entries), (dock) => {
29
- return openBlock(), createElementBlock("button", {
30
- key: dock.id,
31
- title: dock.title,
32
- class: normalizeClass([[unref(isVertical) ? "rotate-270" : "", unref(selected) ? unref(selected).id !== dock.id ? "op50 saturate-0" : "scale-120" : ""], "flex items-center justify-center p1.5 rounded-xl hover:bg-[#8881] hover:scale-120 transition-all duration-300"]),
171
+ return openBlock(), createElementBlock("div", null, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(entries), (dock) => {
172
+ return openBlock(), createElementBlock(Fragment, { key: dock.id }, [!dock.isHidden ? (openBlock(), createBlock(DockEntry_default, {
173
+ key: 0,
174
+ dock,
175
+ "is-selected": unref(selected)?.id === dock.id,
176
+ "is-dimmed": unref(selected) ? unref(selected).id !== dock.id : false,
177
+ "is-vertical": unref(isVertical),
33
178
  onClick: ($event) => toggleDockEntry(dock)
34
- }, [createBaseVNode("img", {
35
- src: dock.icon,
36
- alt: dock.title,
37
- class: "w-5 h-5 select-none",
38
- draggable: "false"
39
- }, null, 8, _hoisted_3)], 10, _hoisted_2);
179
+ }, null, 8, [
180
+ "dock",
181
+ "is-selected",
182
+ "is-dimmed",
183
+ "is-vertical",
184
+ "onClick"
185
+ ])) : createCommentVNode("v-if", true)], 64);
40
186
  }), 128))]);
41
187
  };
42
188
  }
43
189
  });
190
+ var DockEntries_default = _sfc_main$13;
44
191
 
45
192
  //#endregion
46
- //#region src/client/webcomponents/components/DockEntries.vue
47
- var DockEntries_default = DockEntries_vue_vue_type_script_setup_true_lang_default;
193
+ //#region src/client/webcomponents/components/icons/BracketLeft.vue
194
+ const _sfc_main$12 = {};
195
+ const _hoisted_1$5 = {
196
+ viewBox: "0 0 9 20",
197
+ fill: "none",
198
+ xmlns: "http://www.w3.org/2000/svg"
199
+ };
200
+ function _sfc_render$1(_ctx, _cache) {
201
+ return openBlock(), createElementBlock("svg", _hoisted_1$5, [..._cache[0] || (_cache[0] = [createBaseVNode("path", {
202
+ d: "M4.95763 0C1.02563 5.628 1.00263 14.351 4.95763 20H7.61363C3.65963 14.35 3.68363 5.627 7.61363 0H4.95763Z",
203
+ class: "fill-black dark:fill-white"
204
+ }, null, -1)])]);
205
+ }
206
+ var BracketLeft_default = /* @__PURE__ */ export_helper_default(_sfc_main$12, [["render", _sfc_render$1]]);
48
207
 
49
208
  //#endregion
50
- //#region src/client/webcomponents/components/Dock.vue?vue&type=script&setup=true&lang.ts
51
- const PANEL_MARGIN = 5;
209
+ //#region src/client/webcomponents/components/icons/BracketRight.vue
210
+ const _sfc_main$11 = {};
211
+ const _hoisted_1$4 = {
212
+ viewBox: "0 0 9 20",
213
+ fill: "none",
214
+ xmlns: "http://www.w3.org/2000/svg"
215
+ };
216
+ function _sfc_render(_ctx, _cache) {
217
+ return openBlock(), createElementBlock("svg", _hoisted_1$4, [..._cache[0] || (_cache[0] = [createBaseVNode("path", {
218
+ d: "M4.246 10H6.903C6.902 6.407 5.913 2.816 3.946 0H1.29C3.256 2.816 4.244 6.407 4.246 10ZM8.935 14.907H6.27C6.46624 14.1665 6.61752 13.4148 6.723 12.656H4.066C3.96052 13.4148 3.80924 14.1665 3.613 14.907H0.944C0.703507 15.8176 0.387753 16.7067 0 17.565H2.669C2.2859 18.4179 1.82388 19.2331 1.289 20H3.945C4.47988 19.2331 4.9419 18.4179 5.325 17.565H7.99C8.376 16.714 8.691 15.823 8.935 14.907Z",
219
+ class: "fill-black dark:fill-white"
220
+ }, null, -1)])]);
221
+ }
222
+ var BracketRight_default = /* @__PURE__ */ export_helper_default(_sfc_main$11, [["render", _sfc_render]]);
223
+
224
+ //#endregion
225
+ //#region src/client/webcomponents/components/Dock.vue
226
+ const PANEL_MARGIN = 2;
52
227
  const SNAP_THRESHOLD = 2;
53
- var Dock_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
228
+ const _sfc_main$10 = /* @__PURE__ */ defineComponent({
54
229
  __name: "Dock",
55
- props: /* @__PURE__ */ mergeModels({
56
- state: {},
57
- docks: {}
58
- }, {
59
- "isDragging": {
60
- type: Boolean,
61
- default: false
62
- },
63
- "isDraggingModifiers": {}
64
- }),
65
- emits: ["update:isDragging"],
230
+ props: { context: {} },
66
231
  setup(__props) {
67
- const { state, docks } = toRefs(__props);
68
- const isDragging = useModel(__props, "isDragging");
232
+ const context = __props.context;
69
233
  const isSafari = navigator.userAgent.includes("Safari") && !navigator.userAgent.includes("Chrome");
70
234
  const panelMargins = reactive({
71
235
  left: PANEL_MARGIN,
@@ -87,6 +251,8 @@ var Dock_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
87
251
  });
88
252
  const dockEl = useTemplateRef("dockEl");
89
253
  const anchorEl = useTemplateRef("anchorEl");
254
+ const recalculateCounter = ref(0);
255
+ const isHovering = ref(false);
90
256
  const windowSize = reactive({
91
257
  width: window.innerWidth,
92
258
  height: window.innerHeight
@@ -101,7 +267,7 @@ var Dock_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
101
267
  });
102
268
  function onPointerDown(e) {
103
269
  if (!dockEl.value) return;
104
- isDragging.value = true;
270
+ context.panel.isDragging = true;
105
271
  const { left, top, width, height } = dockEl.value.getBoundingClientRect();
106
272
  draggingOffset.x = e.clientX - left - width / 2;
107
273
  draggingOffset.y = e.clientY - top - height / 2;
@@ -114,7 +280,8 @@ var Dock_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
114
280
  windowSize.height = window.innerHeight;
115
281
  });
116
282
  useEventListener(window, "pointermove", (e) => {
117
- if (!isDragging.value) return;
283
+ if (!context.panel.isDragging) return;
284
+ const store = context.panel.store;
118
285
  const centerX = window.innerWidth / 2;
119
286
  const centerY = window.innerHeight / 2;
120
287
  const x = e.clientX - draggingOffset.x;
@@ -128,15 +295,15 @@ var Dock_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
128
295
  const TR = Math.atan2(0 - centerY + HORIZONTAL_MARGIN, window.innerWidth - centerX);
129
296
  const BL = Math.atan2(window.innerHeight - HORIZONTAL_MARGIN - centerY, 0 - centerX);
130
297
  const BR = Math.atan2(window.innerHeight - HORIZONTAL_MARGIN - centerY, window.innerWidth - centerX);
131
- state.value.position = deg >= TL && deg <= TR ? "top" : deg >= TR && deg <= BR ? "right" : deg >= BR && deg <= BL ? "bottom" : "left";
132
- state.value.left = snapToPoints(x / window.innerWidth * 100);
133
- state.value.top = snapToPoints(y / window.innerHeight * 100);
298
+ store.position = deg >= TL && deg <= TR ? "top" : deg >= TR && deg <= BR ? "right" : deg >= BR && deg <= BL ? "bottom" : "left";
299
+ store.left = snapToPoints(x / window.innerWidth * 100);
300
+ store.top = snapToPoints(y / window.innerHeight * 100);
134
301
  });
135
302
  useEventListener(window, "pointerup", () => {
136
- isDragging.value = false;
303
+ context.panel.isDragging = false;
137
304
  });
138
305
  useEventListener(window, "pointerleave", () => {
139
- isDragging.value = false;
306
+ context.panel.isDragging = false;
140
307
  });
141
308
  });
142
309
  function snapToPoints(value) {
@@ -148,16 +315,14 @@ var Dock_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
148
315
  function clamp(value, min, max) {
149
316
  return Math.min(Math.max(value, min), max);
150
317
  }
151
- const recalculateCounter = ref(0);
152
- const isHovering = ref(false);
153
- const isVertical = computed(() => state.value.position === "left" || state.value.position === "right");
154
318
  const anchorPos = computed(() => {
155
319
  recalculateCounter.value;
320
+ const store = context.panel.store;
156
321
  const halfWidth = (dockEl.value?.clientWidth || 0) / 2;
157
322
  const halfHeight = (dockEl.value?.clientHeight || 0) / 2;
158
- const left = state.value.left * windowSize.width / 100;
159
- const top = state.value.top * windowSize.height / 100;
160
- switch (state.value.position) {
323
+ const left = store.left * windowSize.width / 100;
324
+ const top = store.top * windowSize.height / 100;
325
+ switch (store.position) {
161
326
  case "top": return {
162
327
  left: clamp(left, halfWidth + panelMargins.left, windowSize.width - halfWidth - panelMargins.right),
163
328
  top: panelMargins.top + halfHeight
@@ -180,18 +345,18 @@ var Dock_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
180
345
  let _timer = null;
181
346
  function bringUp() {
182
347
  isHovering.value = true;
183
- if (state.value.minimizePanelInactive < 0) return;
348
+ if (context.panel.store.inactiveTimeout < 0) return;
184
349
  if (_timer) clearTimeout(_timer);
185
350
  _timer = setTimeout(() => {
186
351
  isHovering.value = false;
187
- }, +state.value.minimizePanelInactive || 0);
352
+ }, +context.panel.store.inactiveTimeout || 0);
188
353
  }
189
354
  const isHidden = computed(() => false);
190
355
  const isMinimized = computed(() => {
191
- if (state.value.minimizePanelInactive < 0) return false;
192
- if (state.value.minimizePanelInactive === 0) return true;
356
+ if (context.panel.store.inactiveTimeout < 0) return false;
357
+ if (context.panel.store.inactiveTimeout === 0) return true;
193
358
  const isTouchDevice = "ontouchstart" in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0;
194
- return !isDragging.value && !state.value.open && !isHovering.value && !isTouchDevice && state.value.minimizePanelInactive;
359
+ return !context.panel.isDragging && !context.panel.store.open && !isHovering.value && !isTouchDevice && context.panel.store.inactiveTimeout;
195
360
  });
196
361
  const anchorStyle = computed(() => {
197
362
  return {
@@ -201,12 +366,12 @@ var Dock_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
201
366
  };
202
367
  });
203
368
  const panelStyle = computed(() => {
204
- const style = { transform: isVertical.value ? `translate(-50%, -50%) rotate(90deg)` : `translate(-50%, -50%)` };
369
+ const style = { transform: context.panel.isVertical ? `translate(-50%, -50%) rotate(90deg)` : `translate(-50%, -50%)` };
205
370
  if (isHidden.value) {
206
371
  style.opacity = 0;
207
372
  style.pointerEvents = "none";
208
373
  }
209
- if (isDragging.value) style.transition = "none !important";
374
+ if (context.panel.isDragging) style.transition = "none !important";
210
375
  return style;
211
376
  });
212
377
  onMounted(() => {
@@ -220,7 +385,8 @@ var Dock_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
220
385
  ref: anchorEl,
221
386
  style: normalizeStyle([anchorStyle.value]),
222
387
  class: normalizeClass({
223
- "vite-devtools-vertical": isVertical.value,
388
+ "vite-devtools-horizontal": !unref(context).panel.isVertical,
389
+ "vite-devtools-vertical": unref(context).panel.isVertical,
224
390
  "vite-devtools-minimized": isMinimized.value
225
391
  }),
226
392
  onMousemove: bringUp
@@ -228,8 +394,14 @@ var Dock_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
228
394
  !unref(isSafari) ? (openBlock(), createElementBlock("div", {
229
395
  key: 0,
230
396
  id: "vite-devtools-glowing",
231
- style: normalizeStyle(isDragging.value ? "opacity: 0.6 !important" : "")
232
- }, null, 4)) : createCommentVNode("v-if", true),
397
+ class: normalizeClass(unref(context).panel.isDragging ? "op60!" : "")
398
+ }, null, 2)) : createCommentVNode("v-if", true),
399
+ renderSlot(_ctx.$slots, "default", {
400
+ context: unref(context),
401
+ dockEl: dockEl.value,
402
+ selected: unref(context).docks.selected,
403
+ panelMargins
404
+ }),
233
405
  createBaseVNode("div", {
234
406
  id: "vite-devtools-dock-container",
235
407
  ref_key: "dockEl",
@@ -238,74 +410,136 @@ var Dock_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
238
410
  }, [createBaseVNode("div", {
239
411
  id: "vite-devtools-dock",
240
412
  onPointerdown: onPointerDown
241
- }, [createVNode(DockEntries_default, {
242
- entries: unref(docks),
243
- class: normalizeClass(isMinimized.value ? "opacity-0" : "opacity-100"),
244
- "is-vertical": isVertical.value,
245
- selected: unref(state).dockEntry,
246
- onSelect: _cache[0] || (_cache[0] = (s) => unref(state).dockEntry = s)
247
- }, null, 8, [
248
- "entries",
249
- "class",
250
- "is-vertical",
251
- "selected"
252
- ])], 32)], 4),
253
- renderSlot(_ctx.$slots, "default", {
254
- dockEl: dockEl.value,
255
- panelMargins,
256
- state: unref(state),
257
- entry: unref(state).dockEntry
258
- })
413
+ }, [
414
+ createVNode(BracketLeft_default, { class: "vite-devtools-dock-bracket absolute left--1 top-1/2 translate-y--1/2 bottom-0 w-2.5 op75 transition-opacity duration-300" }),
415
+ createVNode(BracketRight_default, { class: normalizeClass(["vite-devtools-dock-bracket absolute right--1 top-1/2 translate-y--1/2 bottom-0 w-2.5 op75 transition-opacity duration-300", unref(context).panel.isVertical ? "scale-y--100" : ""]) }, null, 8, ["class"]),
416
+ createVNode(VitePlusCore_default, { class: normalizeClass(["w-3 h-3 absolute left-1/2 top-1/2 translate-x--1/2 translate-y--1/2 transition-opacity duration-300", isMinimized.value ? "op100" : "op0"]) }, null, 8, ["class"]),
417
+ createVNode(DockEntries_default, {
418
+ entries: unref(context).docks.entries,
419
+ class: normalizeClass(["transition duration-200 flex items-center w-full h-full justify-center", isMinimized.value ? "opacity-0 pointer-events-none" : "opacity-100"]),
420
+ "is-vertical": unref(context).panel.isVertical,
421
+ selected: unref(context).docks.selected,
422
+ onSelect: _cache[0] || (_cache[0] = (e) => unref(context).docks.switchEntry(e?.id))
423
+ }, null, 8, [
424
+ "entries",
425
+ "class",
426
+ "is-vertical",
427
+ "selected"
428
+ ])
429
+ ], 32)], 4)
259
430
  ], 38);
260
431
  };
261
432
  }
262
433
  });
434
+ var Dock_default = _sfc_main$10;
263
435
 
264
436
  //#endregion
265
- //#region src/client/webcomponents/components/Dock.vue
266
- var Dock_default = Dock_vue_vue_type_script_setup_true_lang_default;
437
+ //#region src/client/webcomponents/utils/PersistedDomViewsManager.ts
438
+ var PersistedDomViewsManager = class {
439
+ holders = {};
440
+ constructor(container) {
441
+ this.container = container;
442
+ }
443
+ getHolder(id, _type) {
444
+ return this.holders[id];
445
+ }
446
+ getOrCreateHolder(id, type) {
447
+ if (!this.container.value) throw new Error("[VITE DEVTOOLS] PersistedDomViewsManager: container is not set");
448
+ let holder;
449
+ if (!this.holders[id]) {
450
+ const el = document.createElement(type);
451
+ this.holders[id] = new PersistedDomHolder(id, el);
452
+ this.container.value.appendChild(el);
453
+ holder = this.holders[id];
454
+ } else holder = this.holders[id];
455
+ return holder;
456
+ }
457
+ removeHolder(id) {
458
+ const holder = this.holders[id];
459
+ if (!holder) return false;
460
+ holder.unmount();
461
+ holder.element.remove();
462
+ delete this.holders[id];
463
+ return true;
464
+ }
465
+ };
466
+ var PersistedDomHolder = class {
467
+ element;
468
+ id;
469
+ parent;
470
+ _cleanups = [];
471
+ constructor(id, iframe) {
472
+ this.id = id;
473
+ this.element = iframe;
474
+ }
475
+ cleanup() {
476
+ this._cleanups.forEach((cleanup) => cleanup());
477
+ this._cleanups = [];
478
+ }
479
+ mount(parent) {
480
+ if (this.parent === parent) {
481
+ this.show();
482
+ return;
483
+ }
484
+ this.cleanup();
485
+ this.parent = parent;
486
+ const func = () => this.update();
487
+ window.addEventListener("resize", func);
488
+ this._cleanups.push(() => window.removeEventListener("resize", func));
489
+ this.show();
490
+ }
491
+ hide() {
492
+ this.element.style.display = "none";
493
+ }
494
+ show() {
495
+ this.element.style.display = "block";
496
+ this.update();
497
+ }
498
+ update() {
499
+ if (!this.parent) return;
500
+ const rect = this.parent.getBoundingClientRect();
501
+ this.element.style.position = "absolute";
502
+ this.element.style.width = `${rect.width}px`;
503
+ this.element.style.height = `${rect.height}px`;
504
+ }
505
+ unmount() {
506
+ this.cleanup();
507
+ this.hide();
508
+ this.parent = void 0;
509
+ }
510
+ };
267
511
 
268
512
  //#endregion
269
- //#region src/client/webcomponents/components/DockPanelResizer.vue?vue&type=script&setup=true&lang.ts
513
+ //#region src/client/webcomponents/components/DockPanelResizer.vue
270
514
  const PANEL_MIN = 20;
271
515
  const PANEL_MAX = 100;
272
- var DockPanelResizer_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
516
+ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
273
517
  __name: "DockPanelResizer",
274
- props: /* @__PURE__ */ mergeModels({
275
- state: {},
276
- isDragging: { type: Boolean }
277
- }, {
278
- "isResizing": {
279
- type: Boolean,
280
- default: false
281
- },
282
- "isResizingModifiers": {}
283
- }),
284
- emits: ["update:isResizing"],
518
+ props: { panel: {} },
285
519
  setup(__props) {
286
520
  const props = __props;
287
- const isResizing = useModel(__props, "isResizing");
288
- const { state } = toRefs$1(props);
289
- const container = ref();
521
+ const topHandle = useTemplateRef("topHandle");
522
+ const container = computed(() => topHandle.value?.parentElement);
290
523
  const resizingState = ref(false);
291
524
  function handleResize(e) {
292
525
  if (!resizingState.value) return;
293
526
  const box = container.value?.getBoundingClientRect();
294
527
  if (!box) return;
528
+ const store = props.panel.store;
295
529
  let widthPx, heightPx;
296
530
  if (resizingState.value.right) {
297
531
  widthPx = Math.abs(e instanceof MouseEvent ? e.clientX : (e.touches[0]?.clientX || 0) - (box?.left || 0));
298
- state.value.width = Math.min(PANEL_MAX, Math.max(PANEL_MIN, widthPx / window.innerWidth * 100));
532
+ store.width = Math.min(PANEL_MAX, Math.max(PANEL_MIN, widthPx / window.innerWidth * 100));
299
533
  } else if (resizingState.value.left) {
300
534
  widthPx = Math.abs((box?.right || 0) - (e instanceof MouseEvent ? e.clientX : e.touches[0]?.clientX || 0));
301
- state.value.width = Math.min(PANEL_MAX, Math.max(PANEL_MIN, widthPx / window.innerWidth * 100));
535
+ store.width = Math.min(PANEL_MAX, Math.max(PANEL_MIN, widthPx / window.innerWidth * 100));
302
536
  }
303
537
  if (resizingState.value.top) {
304
538
  heightPx = Math.abs((box?.bottom || 0) - (e instanceof MouseEvent ? e.clientY : e.touches[0]?.clientY || 0));
305
- state.value.height = Math.min(PANEL_MAX, Math.max(PANEL_MIN, heightPx / window.innerHeight * 100));
539
+ store.height = Math.min(PANEL_MAX, Math.max(PANEL_MIN, heightPx / window.innerHeight * 100));
306
540
  } else if (resizingState.value.bottom) {
307
541
  heightPx = Math.abs(e instanceof MouseEvent ? e.clientY : (e.touches[0]?.clientY || 0) - (box?.top || 0));
308
- state.value.height = Math.min(PANEL_MAX, Math.max(PANEL_MIN, heightPx / window.innerHeight * 100));
542
+ store.height = Math.min(PANEL_MAX, Math.max(PANEL_MIN, heightPx / window.innerHeight * 100));
309
543
  }
310
544
  }
311
545
  useEventListener(window, "mousemove", handleResize);
@@ -314,40 +548,37 @@ var DockPanelResizer_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
314
548
  useEventListener(window, "touchend", () => resizingState.value = false);
315
549
  useEventListener(window, "mouseleave", () => resizingState.value = false);
316
550
  watch(resizingState, (value) => {
317
- isResizing.value = !!value;
551
+ props.panel.isResizing = !!value;
318
552
  }, { flush: "sync" });
319
553
  return (_ctx, _cache) => {
320
- return openBlock(), createElementBlock("div", {
321
- id: "vite-devtools-resize-container",
322
- ref_key: "container",
323
- ref: container,
324
- class: "w-full h-full absolute left-0 right-0 bottom-0 top-0 antialiased"
325
- }, [
554
+ return openBlock(), createElementBlock(Fragment, null, [
326
555
  createCommentVNode(" Handlers "),
327
556
  withDirectives(createBaseVNode("div", {
557
+ ref_key: "topHandle",
558
+ ref: topHandle,
328
559
  class: "vite-devtools-resize-handle vite-devtools-resize-handle-horizontal",
329
560
  style: { top: 0 },
330
561
  onMousedown: _cache[0] || (_cache[0] = withModifiers(($event) => resizingState.value = { top: true }, ["prevent"])),
331
562
  onTouchstartPassive: _cache[1] || (_cache[1] = () => resizingState.value = { top: true })
332
- }, null, 544), [[vShow, unref(state).position !== "top"]]),
563
+ }, null, 544), [[vShow, __props.panel.store.position !== "top"]]),
333
564
  withDirectives(createBaseVNode("div", {
334
565
  class: "vite-devtools-resize-handle vite-devtools-resize-handle-horizontal",
335
566
  style: { bottom: 0 },
336
567
  onMousedown: _cache[2] || (_cache[2] = withModifiers(() => resizingState.value = { bottom: true }, ["prevent"])),
337
568
  onTouchstartPassive: _cache[3] || (_cache[3] = () => resizingState.value = { bottom: true })
338
- }, null, 544), [[vShow, unref(state).position !== "bottom"]]),
569
+ }, null, 544), [[vShow, __props.panel.store.position !== "bottom"]]),
339
570
  withDirectives(createBaseVNode("div", {
340
571
  class: "vite-devtools-resize-handle vite-devtools-resize-handle-vertical",
341
572
  style: { left: 0 },
342
573
  onMousedown: _cache[4] || (_cache[4] = withModifiers(() => resizingState.value = { left: true }, ["prevent"])),
343
574
  onTouchstartPassive: _cache[5] || (_cache[5] = () => resizingState.value = { left: true })
344
- }, null, 544), [[vShow, unref(state).position !== "left"]]),
575
+ }, null, 544), [[vShow, __props.panel.store.position !== "left"]]),
345
576
  withDirectives(createBaseVNode("div", {
346
577
  class: "vite-devtools-resize-handle vite-devtools-resize-handle-vertical",
347
578
  style: { right: 0 },
348
579
  onMousedown: _cache[6] || (_cache[6] = withModifiers(() => resizingState.value = { right: true }, ["prevent"])),
349
580
  onTouchstartPassive: _cache[7] || (_cache[7] = () => resizingState.value = { right: true })
350
- }, null, 544), [[vShow, unref(state).position !== "right"]]),
581
+ }, null, 544), [[vShow, __props.panel.store.position !== "right"]]),
351
582
  withDirectives(createBaseVNode("div", {
352
583
  class: "vite-devtools-resize-handle vite-devtools-resize-handle-corner",
353
584
  style: {
@@ -363,7 +594,7 @@ var DockPanelResizer_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
363
594
  top: true,
364
595
  left: true
365
596
  })
366
- }, null, 544), [[vShow, unref(state).position !== "top" && unref(state).position !== "left"]]),
597
+ }, null, 544), [[vShow, __props.panel.store.position !== "top" && __props.panel.store.position !== "left"]]),
367
598
  withDirectives(createBaseVNode("div", {
368
599
  class: "vite-devtools-resize-handle vite-devtools-resize-handle-corner",
369
600
  style: {
@@ -379,7 +610,7 @@ var DockPanelResizer_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
379
610
  top: true,
380
611
  right: true
381
612
  })
382
- }, null, 544), [[vShow, unref(state).position !== "top" && unref(state).position !== "right"]]),
613
+ }, null, 544), [[vShow, __props.panel.store.position !== "top" && __props.panel.store.position !== "right"]]),
383
614
  withDirectives(createBaseVNode("div", {
384
615
  class: "vite-devtools-resize-handle vite-devtools-resize-handle-corner",
385
616
  style: {
@@ -395,7 +626,7 @@ var DockPanelResizer_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
395
626
  bottom: true,
396
627
  left: true
397
628
  })
398
- }, null, 544), [[vShow, unref(state).position !== "bottom" && unref(state).position !== "left"]]),
629
+ }, null, 544), [[vShow, __props.panel.store.position !== "bottom" && __props.panel.store.position !== "left"]]),
399
630
  withDirectives(createBaseVNode("div", {
400
631
  class: "vite-devtools-resize-handle vite-devtools-resize-handle-corner",
401
632
  style: {
@@ -411,204 +642,373 @@ var DockPanelResizer_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
411
642
  bottom: true,
412
643
  right: true
413
644
  })
414
- }, null, 544), [[vShow, unref(state).position !== "bottom" && unref(state).position !== "right"]])
415
- ], 512);
645
+ }, null, 544), [[vShow, __props.panel.store.position !== "bottom" && __props.panel.store.position !== "right"]])
646
+ ], 64);
416
647
  };
417
648
  }
418
649
  });
650
+ var DockPanelResizer_default = _sfc_main$9;
419
651
 
420
652
  //#endregion
421
- //#region src/client/webcomponents/components/DockPanelResizer.vue
422
- var DockPanelResizer_default = DockPanelResizer_vue_vue_type_script_setup_true_lang_default;
653
+ //#region src/client/webcomponents/state/terminals.ts
654
+ let _terminalsMap;
655
+ function useTerminals(context) {
656
+ if (_terminalsMap) return _terminalsMap;
657
+ const map = _terminalsMap = reactive(/* @__PURE__ */ new Map());
658
+ async function updateTerminals() {
659
+ const terminals = await context.rpc.call("vite:internal:terminals:list");
660
+ for (const terminal of terminals) {
661
+ if (map.has(terminal.id)) {
662
+ map.get(terminal.id).info = Object.freeze(terminal);
663
+ continue;
664
+ }
665
+ map.set(terminal.id, {
666
+ info: Object.freeze(terminal),
667
+ buffer: null,
668
+ terminal: null
669
+ });
670
+ }
671
+ console.log("[VITE DEVTOOLS] Terminals Updated", [...map.values()]);
672
+ }
673
+ context.rpc.client.register({
674
+ name: "vite:internal:terminals:updated",
675
+ type: "action",
676
+ handler: () => updateTerminals()
677
+ });
678
+ context.rpc.client.register({
679
+ name: "vite:internal:terminals:stream-chunk",
680
+ type: "action",
681
+ handler: (data) => {
682
+ const terminal = map.get(data.id);
683
+ if (!terminal) {
684
+ console.warn(`[VITE DEVTOOLS] Terminal with id "${data.id}" not found`);
685
+ return;
686
+ }
687
+ terminal.buffer?.push(...data.chunks);
688
+ for (const chunk of data.chunks) terminal.terminal?.writeln(chunk);
689
+ }
690
+ });
691
+ updateTerminals();
692
+ return map;
693
+ }
423
694
 
424
695
  //#endregion
425
- //#region src/client/webcomponents/components/IframeManager.ts
426
- var IframeManager = class {
427
- iframes = {};
428
- container = void 0;
429
- constructor() {}
430
- setContainer(container) {
431
- this.container = container;
432
- }
433
- getIframeHolder(id) {
434
- let iframe;
435
- if (!this.iframes[id]) {
436
- const el = document.createElement("iframe");
437
- this.iframes[id] = new IframeHolder(id, el);
438
- this.container.appendChild(el);
439
- iframe = this.iframes[id];
440
- } else iframe = this.iframes[id];
441
- return iframe;
696
+ //#region src/client/webcomponents/components/ViewBuiltinTerminalPanel.vue
697
+ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
698
+ __name: "ViewBuiltinTerminalPanel",
699
+ props: {
700
+ context: {},
701
+ terminal: {}
702
+ },
703
+ setup(__props) {
704
+ const props = __props;
705
+ const container = ref();
706
+ let term;
707
+ onMounted(async () => {
708
+ term = markRaw(new Terminal({
709
+ convertEol: true,
710
+ cols: 80,
711
+ screenReaderMode: true
712
+ }));
713
+ const fitAddon = new FitAddon();
714
+ term.loadAddon(fitAddon);
715
+ term.open(container.value);
716
+ fitAddon.fit();
717
+ useEventListener(window, "resize", () => {
718
+ fitAddon.fit();
719
+ });
720
+ nextTick(() => {
721
+ fitAddon.fit();
722
+ });
723
+ props.terminal.terminal = term;
724
+ if (props.terminal.buffer == null) {
725
+ const { buffer } = await props.context.rpc.call("vite:internal:terminals:read", props.terminal.info.id);
726
+ props.terminal.buffer = markRaw(buffer);
727
+ }
728
+ for (const chunk of props.terminal.buffer) term.writeln(chunk);
729
+ });
730
+ onUnmounted(() => {
731
+ term.dispose();
732
+ props.terminal.terminal = null;
733
+ });
734
+ return (_ctx, _cache) => {
735
+ return openBlock(), createElementBlock(Fragment, null, [createBaseVNode("div", {
736
+ ref_key: "container",
737
+ ref: container,
738
+ class: "h-full w-full of-auto bg-black"
739
+ }, null, 512), createCommentVNode(" <div border=\"t base\" flex=\"~ gap-2\" items-center p2>\n <button title=\"Clear\" icon=\"i-carbon-clean\" :border=\"false\" @click=\"clear()\" />\n <button v-if=\"info?.restartable\" title=\"Restart\" icon=\"carbon-renew\" :border=\"false\" @click=\"restart()\" />\n <button v-if=\"info?.terminatable\" title=\"Terminate\" icon=\"carbon-delete\" :border=\"false\" @click=\"terminate()\" />\n <span text-sm op50>{{ info?.description }}</span>\n </div> ")], 2112);
740
+ };
442
741
  }
742
+ });
743
+ var ViewBuiltinTerminalPanel_default = _sfc_main$8;
744
+
745
+ //#endregion
746
+ //#region src/client/webcomponents/components/ViewBuiltinTerminals.vue
747
+ const _hoisted_1$3 = { class: "w-full h-full grid grid-rows-[max-content_1fr]" };
748
+ const _hoisted_2$2 = { class: "border-base border-b rounded-t overflow-x-auto" };
749
+ const _hoisted_3$1 = ["onClick"];
750
+ const _hoisted_4 = { class: "h-full w-full flex relative" };
751
+ const _hoisted_5 = {
752
+ key: 1,
753
+ class: "flex items-center justify-center h-full w-full text-center"
443
754
  };
444
- var IframeHolder = class {
445
- iframe;
446
- id;
447
- parent;
448
- _cleanups = [];
449
- constructor(id, iframe) {
450
- this.id = id;
451
- this.iframe = iframe;
452
- }
453
- cleanup() {
454
- this._cleanups.forEach((cleanup) => cleanup());
455
- this._cleanups = [];
456
- }
457
- mount(parent) {
458
- if (this.parent === parent) {
459
- this.show();
460
- return;
461
- }
462
- this.cleanup();
463
- this.parent = parent;
464
- const func = () => this.update();
465
- window.addEventListener("resize", func);
466
- this._cleanups.push(() => window.removeEventListener("resize", func));
467
- this.show();
468
- }
469
- hide() {
470
- this.iframe.style.display = "none";
471
- }
472
- show() {
473
- this.iframe.style.display = "block";
474
- this.update();
475
- }
476
- update() {
477
- if (!this.parent) return;
478
- const rect = this.parent.getBoundingClientRect();
479
- this.iframe.style.position = "absolute";
480
- this.iframe.style.width = `${rect.width}px`;
481
- this.iframe.style.height = `${rect.height}px`;
755
+ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
756
+ __name: "ViewBuiltinTerminals",
757
+ props: { context: {} },
758
+ setup(__props) {
759
+ const terminals = useTerminals(__props.context);
760
+ const selectedTerminal = shallowRef(null);
761
+ watchImmediate(terminals, () => {
762
+ if (selectedTerminal.value == null && terminals.size > 0) selectedTerminal.value = terminals.values().next().value;
763
+ });
764
+ return (_ctx, _cache) => {
765
+ return openBlock(), createElementBlock("div", _hoisted_1$3, [createBaseVNode("div", _hoisted_2$2, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(terminals).values(), (terminal) => {
766
+ return openBlock(), createElementBlock("button", {
767
+ key: terminal.info.id,
768
+ class: normalizeClass(["px3 py1.5 border-r border-base hover:bg-active text-sm flex items-center gap-1", { "bg-active": selectedTerminal.value?.info.id === terminal.info.id }]),
769
+ onClick: ($event) => selectedTerminal.value = terminal
770
+ }, [createVNode(DockIcon_default, { icon: terminal.info.icon || "ph:terminal-duotone" }, null, 8, ["icon"]), createBaseVNode("span", null, toDisplayString(terminal.info.title), 1)], 10, _hoisted_3$1);
771
+ }), 128))]), createBaseVNode("div", _hoisted_4, [selectedTerminal.value ? (openBlock(), createBlock(ViewBuiltinTerminalPanel_default, {
772
+ key: selectedTerminal.value.info.id,
773
+ context: __props.context,
774
+ terminal: selectedTerminal.value
775
+ }, null, 8, ["context", "terminal"])) : (openBlock(), createElementBlock("div", _hoisted_5, [..._cache[0] || (_cache[0] = [createBaseVNode("div", null, "Select a terminal tab to start", -1)])]))])]);
776
+ };
482
777
  }
483
- unmount() {
484
- this.cleanup();
485
- this.hide();
486
- this.parent = void 0;
778
+ });
779
+ var ViewBuiltinTerminals_default = _sfc_main$7;
780
+
781
+ //#endregion
782
+ //#region src/client/webcomponents/components/ViewCustomRenderer.vue
783
+ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
784
+ __name: "ViewCustomRenderer",
785
+ props: {
786
+ context: {},
787
+ entry: {},
788
+ persistedDoms: {},
789
+ divStyle: {}
790
+ },
791
+ setup(__props) {
792
+ const props = __props;
793
+ const isLoading = ref(true);
794
+ const viewFrame = useTemplateRef("viewFrame");
795
+ onMounted(() => {
796
+ const holder = props.persistedDoms.getOrCreateHolder(props.entry.id, "div");
797
+ holder.element.style.boxShadow = "none";
798
+ holder.element.style.outline = "none";
799
+ Object.assign(holder.element.style, props.divStyle);
800
+ const entryState = props.context.docks.getStateById(props.entry.id);
801
+ if (entryState) entryState.domElements.panel = holder.element;
802
+ holder.mount(viewFrame.value);
803
+ isLoading.value = false;
804
+ nextTick(() => {
805
+ holder.update();
806
+ });
807
+ watch(() => props.context.panel, () => {
808
+ holder.update();
809
+ }, { deep: true });
810
+ watchEffect(() => {
811
+ holder.element.style.pointerEvents = props.context.panel.isDragging || props.context.panel.isResizing ? "none" : "auto";
812
+ }, { flush: "sync" });
813
+ });
814
+ onUnmounted(() => {
815
+ props.persistedDoms.getHolder(props.entry.id, "div")?.unmount();
816
+ });
817
+ return (_ctx, _cache) => {
818
+ return openBlock(), createElementBlock("div", {
819
+ ref_key: "viewFrame",
820
+ ref: viewFrame,
821
+ class: "vite-devtools-view-custom-renderer w-full h-full flex items-center justify-center"
822
+ }, null, 512);
823
+ };
487
824
  }
488
- };
825
+ });
826
+ var ViewCustomRenderer_default = _sfc_main$6;
489
827
 
490
828
  //#endregion
491
- //#region src/client/webcomponents/components/ViewIframe.vue?vue&type=script&setup=true&lang.ts
492
- var ViewIframe_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
829
+ //#region src/client/webcomponents/components/ViewIframe.vue
830
+ const _hoisted_1$2 = {
831
+ key: 0,
832
+ class: "op50 z--1"
833
+ };
834
+ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
493
835
  __name: "ViewIframe",
494
836
  props: {
495
- state: {},
496
- isDragging: { type: Boolean },
497
- isResizing: { type: Boolean },
837
+ context: {},
498
838
  entry: {},
499
- iframes: {}
839
+ persistedDoms: {},
840
+ iframeStyle: {}
500
841
  },
501
842
  setup(__props) {
502
843
  const props = __props;
844
+ const isLoading = ref(true);
503
845
  const viewFrame = useTemplateRef("viewFrame");
504
846
  onMounted(() => {
505
- const holder = props.iframes.getIframeHolder(props.entry.id);
506
- holder.iframe.style.border = "1px solid #8885";
507
- holder.iframe.style.borderRadius = "0.5rem";
508
- holder.iframe.style.boxShadow = "none";
509
- holder.iframe.style.outline = "none";
510
- holder.iframe.style.zIndex = "2147483645";
511
- if (!holder.iframe.src) holder.iframe.src = props.entry.url;
847
+ const holder = props.persistedDoms.getOrCreateHolder(props.entry.id, "iframe");
848
+ holder.element.style.boxShadow = "none";
849
+ holder.element.style.outline = "none";
850
+ Object.assign(holder.element.style, props.iframeStyle);
851
+ if (!holder.element.src) holder.element.src = props.entry.url;
852
+ const entryState = props.context.docks.getStateById(props.entry.id);
853
+ if (entryState) entryState.domElements.iframe = holder.element;
512
854
  holder.mount(viewFrame.value);
855
+ isLoading.value = false;
513
856
  nextTick(() => {
514
857
  holder.update();
515
858
  });
516
- watch(() => props.state, () => {
859
+ watch(() => props.context.panel, () => {
517
860
  holder.update();
518
861
  }, { deep: true });
519
862
  watchEffect(() => {
520
- holder.iframe.style.pointerEvents = props.isDragging || props.isResizing ? "none" : "auto";
521
- });
863
+ holder.element.style.pointerEvents = props.context.panel.isDragging || props.context.panel.isResizing ? "none" : "auto";
864
+ }, { flush: "sync" });
522
865
  });
523
866
  onUnmounted(() => {
524
- props.iframes.getIframeHolder(props.entry.id).unmount();
867
+ props.persistedDoms.getHolder(props.entry.id, "iframe")?.unmount();
525
868
  });
526
869
  return (_ctx, _cache) => {
527
870
  return openBlock(), createElementBlock("div", {
528
871
  ref_key: "viewFrame",
529
872
  ref: viewFrame,
530
873
  class: "vite-devtools-view-iframe w-full h-full flex items-center justify-center"
531
- }, [..._cache[0] || (_cache[0] = [createBaseVNode("div", { class: "op50" }, " Loading iframe... ", -1)])], 512);
874
+ }, [isLoading.value ? (openBlock(), createElementBlock("div", _hoisted_1$2, " Loading iframe... ")) : createCommentVNode("v-if", true)], 512);
532
875
  };
533
876
  }
534
877
  });
878
+ var ViewIframe_default = _sfc_main$5;
535
879
 
536
880
  //#endregion
537
- //#region src/client/webcomponents/components/ViewIframe.vue
538
- var ViewIframe_default = ViewIframe_vue_vue_type_script_setup_true_lang_default;
881
+ //#region src/client/webcomponents/components/ViewLauncher.vue
882
+ const _hoisted_1$1 = { class: "flex flex-col gap-4 items-center justify-center h-full relative" };
883
+ const _hoisted_2$1 = { class: "text-2xl font-bold" };
884
+ const _hoisted_3 = ["disabled"];
885
+ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
886
+ __name: "ViewLauncher",
887
+ props: {
888
+ context: {},
889
+ entry: {}
890
+ },
891
+ setup(__props) {
892
+ const props = __props;
893
+ function onLaunch() {
894
+ props.context.rpc.call("vite:internal:docks:on-launch", props.entry.id);
895
+ }
896
+ const status = computed(() => props.entry.launcher.status || "idle");
897
+ const iconsMap = {
898
+ error: "i-ph-warning-duotone",
899
+ idle: "i-ph-rocket-launch-duotone",
900
+ loading: "i-svg-spinners-8-dots-rotate",
901
+ success: "i-ph-check-duotone"
902
+ };
903
+ const buttonText = computed(() => {
904
+ if (status.value === "idle") return props.entry.launcher.buttonStart || "Launch";
905
+ else if (status.value === "loading") return props.entry.launcher.buttonLoading || "Loading...";
906
+ else if (status.value === "error") return "ERROR";
907
+ else if (status.value === "success") return "Success";
908
+ else return `UNKNOWN STATUS: ${status.value}`;
909
+ });
910
+ return (_ctx, _cache) => {
911
+ return openBlock(), createElementBlock("div", _hoisted_1$1, [
912
+ createVNode(DockIcon_default, {
913
+ icon: __props.entry.launcher.icon || __props.entry.icon,
914
+ class: "w-10 h-10"
915
+ }, null, 8, ["icon"]),
916
+ createBaseVNode("h1", _hoisted_2$1, toDisplayString(__props.entry.launcher.title), 1),
917
+ createBaseVNode("p", null, toDisplayString(__props.entry.launcher.description), 1),
918
+ createBaseVNode("button", {
919
+ class: "bg-lime6 px4 py1 rounded hover:bg-lime7 transition-all duration-300 flex gap-2 items-center disabled:bg-gray6! disabled:pointer-events-none",
920
+ disabled: status.value !== "idle",
921
+ onClick: onLaunch
922
+ }, [createBaseVNode("div", { class: normalizeClass(iconsMap[status.value]) }, null, 2), createBaseVNode("div", null, toDisplayString(buttonText.value), 1)], 8, _hoisted_3)
923
+ ]);
924
+ };
925
+ }
926
+ });
927
+ var ViewLauncher_default = _sfc_main$4;
539
928
 
540
929
  //#endregion
541
- //#region src/client/webcomponents/components/ViewEntry.vue?vue&type=script&setup=true&lang.ts
930
+ //#region src/client/webcomponents/components/ViewEntry.vue
542
931
  const _hoisted_1 = { key: 1 };
543
- var ViewEntry_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
932
+ const _hoisted_2 = { key: 5 };
933
+ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
544
934
  __name: "ViewEntry",
545
935
  props: {
546
- state: {},
547
- isDragging: { type: Boolean },
548
- isResizing: { type: Boolean },
936
+ context: {},
549
937
  entry: {},
550
- iframes: {}
938
+ persistedDoms: {},
939
+ iframeStyle: {},
940
+ divStyle: {}
551
941
  },
552
942
  setup(__props) {
553
943
  return (_ctx, _cache) => {
554
- return __props.entry.type === "iframe" ? (openBlock(), createBlock(ViewIframe_default, {
944
+ return __props.entry.type === "~builtin" ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [__props.entry.id === "~terminals" ? (openBlock(), createBlock(ViewBuiltinTerminals_default, {
555
945
  key: 0,
556
- state: __props.state,
557
- "is-dragging": __props.isDragging,
558
- "is-resizing": __props.isResizing,
946
+ context: __props.context,
947
+ entry: __props.entry
948
+ }, null, 8, ["context", "entry"])) : (openBlock(), createElementBlock("div", _hoisted_1, " Unknown builtin entry: " + toDisplayString(__props.entry), 1))], 64)) : __props.entry.type === "action" ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [createCommentVNode(" Entry for Actions ")], 64)) : __props.entry.type === "iframe" ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [createCommentVNode(" User-defined entries "), createVNode(ViewIframe_default, {
949
+ context: __props.context,
559
950
  entry: __props.entry,
560
- iframes: __props.iframes
951
+ "persisted-doms": __props.persistedDoms,
952
+ "iframe-style": __props.iframeStyle
561
953
  }, null, 8, [
562
- "state",
563
- "is-dragging",
564
- "is-resizing",
954
+ "context",
565
955
  "entry",
566
- "iframes"
567
- ])) : (openBlock(), createElementBlock("div", _hoisted_1, " Unknown entry: " + toDisplayString(__props.entry), 1));
956
+ "persisted-doms",
957
+ "iframe-style"
958
+ ])], 2112)) : __props.entry.type === "custom-render" ? (openBlock(), createBlock(ViewCustomRenderer_default, {
959
+ key: 3,
960
+ context: __props.context,
961
+ entry: __props.entry,
962
+ "persisted-doms": __props.persistedDoms,
963
+ "div-style": __props.divStyle
964
+ }, null, 8, [
965
+ "context",
966
+ "entry",
967
+ "persisted-doms",
968
+ "div-style"
969
+ ])) : __props.entry.type === "launcher" ? (openBlock(), createBlock(ViewLauncher_default, {
970
+ key: 4,
971
+ context: __props.context,
972
+ entry: __props.entry
973
+ }, null, 8, ["context", "entry"])) : (openBlock(), createElementBlock("div", _hoisted_2, " Unknown entry: " + toDisplayString(__props.entry), 1));
568
974
  };
569
975
  }
570
976
  });
977
+ var ViewEntry_default = _sfc_main$3;
571
978
 
572
979
  //#endregion
573
- //#region src/client/webcomponents/components/ViewEntry.vue
574
- var ViewEntry_default = ViewEntry_vue_vue_type_script_setup_true_lang_default;
575
-
576
- //#endregion
577
- //#region src/client/webcomponents/components/DockPanel.vue?vue&type=script&setup=true&lang.ts
578
- var DockPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
980
+ //#region src/client/webcomponents/components/DockPanel.vue
981
+ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
579
982
  __name: "DockPanel",
580
983
  props: {
581
- state: {},
582
- entry: {},
984
+ context: {},
985
+ selected: {},
583
986
  dockEl: {},
584
987
  panelMargins: {}
585
988
  },
586
989
  setup(__props) {
587
990
  const props = __props;
588
- const { state, entry, panelMargins } = toRefs(props);
589
- const dockPanel = useTemplateRef("dockPanel");
590
- const iframesContainer = useTemplateRef("iframesContainer");
591
- const iframes = markRaw(new IframeManager());
592
- watchEffect(() => {
593
- iframes.setContainer(iframesContainer.value);
594
- }, { flush: "sync" });
991
+ const context = props.context;
992
+ const { selected, panelMargins } = toRefs(props);
595
993
  const windowSize = reactive(useWindowSize());
596
- const isDragging = ref(false);
597
- const isResizing = ref(false);
598
994
  const isHovering = ref(false);
599
995
  const mousePosition = reactive({
600
996
  x: 0,
601
997
  y: 0
602
998
  });
999
+ const dockPanel = useTemplateRef("dockPanel");
1000
+ const viewsContainer = useTemplateRef("viewsContainer");
1001
+ const persistedDoms = markRaw(new PersistedDomViewsManager(viewsContainer));
603
1002
  function clamp(value, min, max) {
604
1003
  return Math.min(Math.max(value, min), max);
605
1004
  }
606
1005
  const anchorPos = computed(() => {
607
1006
  const halfWidth = (props.dockEl?.clientWidth || 0) / 2;
608
1007
  const halfHeight = (props.dockEl?.clientHeight || 0) / 2;
609
- const left = state.value.left * windowSize.width / 100;
610
- const top = state.value.top * windowSize.height / 100;
611
- switch (state.value.position) {
1008
+ const store = context.panel.store;
1009
+ const left = store.left * windowSize.width / 100;
1010
+ const top = store.top * windowSize.height / 100;
1011
+ switch (store.position) {
612
1012
  case "top": return {
613
1013
  left: clamp(left, halfWidth + panelMargins.value.left, windowSize.width - halfWidth - panelMargins.value.right),
614
1014
  top: panelMargins.value.top + halfHeight
@@ -631,14 +1031,14 @@ var DockPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
631
1031
  let _timer = null;
632
1032
  function bringUp() {
633
1033
  isHovering.value = true;
634
- if (state.value.minimizePanelInactive < 0) return;
1034
+ if (context.panel.store.inactiveTimeout < 0) return;
635
1035
  if (_timer) clearTimeout(_timer);
636
1036
  _timer = setTimeout(() => {
637
1037
  isHovering.value = false;
638
- }, +state.value.minimizePanelInactive || 0);
1038
+ }, +context.panel.store.inactiveTimeout || 0);
639
1039
  }
640
1040
  const { width: frameWidth, height: frameHeight } = useElementBounding(dockPanel);
641
- const iframeStyle = computed(() => {
1041
+ const panelStyle = computed(() => {
642
1042
  mousePosition.x, mousePosition.y;
643
1043
  const halfHeight = (props.dockEl?.clientHeight || 0) / 2;
644
1044
  const frameMargin = {
@@ -651,19 +1051,20 @@ var DockPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
651
1051
  const marginVertical = frameMargin.top + frameMargin.bottom;
652
1052
  const maxWidth = windowSize.width - marginHorizontal;
653
1053
  const maxHeight = windowSize.height - marginVertical;
1054
+ const panel = context.panel;
1055
+ const store = panel.store;
654
1056
  const style = {
655
1057
  position: "fixed",
656
- zIndex: -1,
657
- pointerEvents: isDragging.value || isResizing.value ? "none" : "auto",
658
- width: `min(${state.value.width}vw, calc(100vw - ${marginHorizontal}px))`,
659
- height: `min(${state.value.height}vh, calc(100vh - ${marginVertical}px))`
1058
+ pointerEvents: panel.isDragging || panel.isResizing ? "none" : "auto",
1059
+ width: `min(${store.width}vw, calc(100vw - ${marginHorizontal}px))`,
1060
+ height: `min(${store.height}vh, calc(100vh - ${marginVertical}px))`
660
1061
  };
661
1062
  const anchor = anchorPos.value;
662
- const width = Math.min(maxWidth, state.value.width * windowSize.width / 100);
663
- const height = Math.min(maxHeight, state.value.height * windowSize.height / 100);
1063
+ const width = Math.min(maxWidth, store.width * windowSize.width / 100);
1064
+ const height = Math.min(maxHeight, store.height * windowSize.height / 100);
664
1065
  const anchorX = anchor?.left || 0;
665
1066
  const anchorY = anchor?.top || 0;
666
- switch (state.value.position) {
1067
+ switch (store.position) {
667
1068
  case "top":
668
1069
  case "bottom":
669
1070
  style.left = `${-frameWidth.value / 2}px`;
@@ -679,7 +1080,7 @@ var DockPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
679
1080
  else if (windowSize.height - anchorY - frameMargin.bottom < height / 2) style.top = `${windowSize.height - anchorY - height / 2 - frameMargin.bottom - frameHeight.value / 2}px`;
680
1081
  break;
681
1082
  }
682
- switch (state.value.position) {
1083
+ switch (store.position) {
683
1084
  case "top":
684
1085
  style.top = 0;
685
1086
  break;
@@ -701,88 +1102,126 @@ var DockPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
701
1102
  });
702
1103
  return (_ctx, _cache) => {
703
1104
  return withDirectives((openBlock(), createElementBlock("div", {
704
- id: "vite-devtools-dock-panel",
705
1105
  ref_key: "dockPanel",
706
1106
  ref: dockPanel,
707
1107
  class: "bg-glass rounded-lg border border-base shadow",
708
- style: normalizeStyle(iframeStyle.value)
1108
+ style: normalizeStyle(panelStyle.value)
709
1109
  }, [
710
- createVNode(DockPanelResizer_default, {
711
- "is-resizing": isResizing.value,
712
- "onUpdate:isResizing": _cache[0] || (_cache[0] = ($event) => isResizing.value = $event),
713
- "is-dragging": isDragging.value,
714
- state: unref(state),
715
- entry: unref(entry)
716
- }, null, 8, [
717
- "is-resizing",
718
- "is-dragging",
719
- "state",
720
- "entry"
721
- ]),
722
- unref(entry) && iframesContainer.value ? (openBlock(), createBlock(ViewEntry_default, {
723
- key: unref(entry).id,
724
- state: unref(state),
725
- "is-dragging": isDragging.value,
726
- "is-resizing": isResizing.value,
727
- entry: unref(entry),
728
- iframes: unref(iframes),
729
- rounded: ""
1110
+ createVNode(DockPanelResizer_default, { panel: unref(context).panel }, null, 8, ["panel"]),
1111
+ unref(selected) && viewsContainer.value ? (openBlock(), createBlock(ViewEntry_default, {
1112
+ key: unref(selected).id,
1113
+ context: unref(context),
1114
+ entry: unref(selected),
1115
+ "persisted-doms": unref(persistedDoms),
1116
+ "iframe-style": {
1117
+ border: "1px solid #8883",
1118
+ borderRadius: "0.5rem"
1119
+ }
730
1120
  }, null, 8, [
731
- "state",
732
- "is-dragging",
733
- "is-resizing",
1121
+ "context",
734
1122
  "entry",
735
- "iframes"
1123
+ "persisted-doms"
736
1124
  ])) : createCommentVNode("v-if", true),
737
1125
  createBaseVNode("div", {
738
- id: "vite-devtools-iframe-container",
739
- ref_key: "iframesContainer",
740
- ref: iframesContainer,
741
- class: "absolute inset-0"
1126
+ id: "vite-devtools-views-container",
1127
+ ref_key: "viewsContainer",
1128
+ ref: viewsContainer,
1129
+ class: "absolute inset-0 pointer-events-none"
742
1130
  }, null, 512)
743
- ], 4)), [[vShow, unref(entry)]]);
1131
+ ], 4)), [[vShow, unref(context).docks.selected && unref(context).docks.selected.type !== "action"]]);
744
1132
  };
745
1133
  }
746
1134
  });
1135
+ var DockPanel_default = _sfc_main$2;
747
1136
 
748
1137
  //#endregion
749
- //#region src/client/webcomponents/components/DockPanel.vue
750
- var DockPanel_default = DockPanel_vue_vue_type_script_setup_true_lang_default;
1138
+ //#region src/client/webcomponents/components/FloatingTooltip.vue
1139
+ const DETECT_MARGIN = 100;
1140
+ const GAP = 10;
1141
+ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
1142
+ __name: "FloatingTooltip",
1143
+ setup(__props) {
1144
+ const current = useFloatingTooltip();
1145
+ const box = ref({
1146
+ text: "",
1147
+ width: 0,
1148
+ height: 0,
1149
+ left: 0,
1150
+ top: 0
1151
+ });
1152
+ const align = computed(() => {
1153
+ const vw = window.innerWidth;
1154
+ const vh = window.innerHeight;
1155
+ if (box.value.left < DETECT_MARGIN) return "right";
1156
+ if (box.value.left + box.value.width > vw - DETECT_MARGIN) return "left";
1157
+ if (box.value.top < DETECT_MARGIN) return "bottom";
1158
+ if (box.value.top + box.value.height > vh - DETECT_MARGIN) return "top";
1159
+ return "bottom";
1160
+ });
1161
+ const style = computed(() => {
1162
+ switch (align.value) {
1163
+ case "bottom": return {
1164
+ left: `${box.value.left + box.value.width / 2}px`,
1165
+ top: `${box.value.top + box.value.height + GAP}px`,
1166
+ transform: "translateX(-50%)"
1167
+ };
1168
+ case "top": return {
1169
+ left: `${box.value.left + box.value.width / 2}px`,
1170
+ bottom: `${window.innerHeight - box.value.top + GAP}px`,
1171
+ transform: "translateX(-50%)"
1172
+ };
1173
+ case "left": return {
1174
+ right: `${window.innerWidth - box.value.left + GAP}px`,
1175
+ top: `${box.value.top + box.value.height / 2}px`,
1176
+ transform: "translateY(-50%)"
1177
+ };
1178
+ case "right": return {
1179
+ left: `${box.value.left + box.value.width + GAP}px`,
1180
+ top: `${box.value.top + box.value.height / 2}px`,
1181
+ transform: "translateY(-50%)"
1182
+ };
1183
+ default: throw new Error("Unreachable");
1184
+ }
1185
+ });
1186
+ watchEffect(() => {
1187
+ if (current.value) box.value = { ...current.value };
1188
+ });
1189
+ return (_ctx, _cache) => {
1190
+ return box.value.text ? (openBlock(), createElementBlock("div", {
1191
+ key: 0,
1192
+ class: normalizeClass(["z-floating-tooltip text-xs transition-all duration-300 w-max bg-glass border border-base rounded px2 fixed p1", unref(current) ? "op100" : "op0 pointer-events-none"]),
1193
+ style: normalizeStyle(style.value)
1194
+ }, toDisplayString(box.value.text), 7)) : createCommentVNode("v-if", true);
1195
+ };
1196
+ }
1197
+ });
1198
+ var FloatingTooltip_default = _sfc_main$1;
751
1199
 
752
1200
  //#endregion
753
- //#region src/client/webcomponents/components/DockEmbedded.vue?vue&type=script&setup=true&lang.ts
754
- var DockEmbedded_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
1201
+ //#region src/client/webcomponents/components/DockEmbedded.vue
1202
+ const _sfc_main = /* @__PURE__ */ defineComponent({
755
1203
  __name: "DockEmbedded",
756
- props: {
757
- state: {},
758
- docks: {}
759
- },
1204
+ props: { context: {} },
760
1205
  setup(__props) {
761
1206
  return (_ctx, _cache) => {
762
- return openBlock(), createBlock(Dock_default, {
763
- state: __props.state,
764
- docks: __props.docks
765
- }, {
766
- default: withCtx(({ dockEl, entry, panelMargins }) => [createVNode(DockPanel_default, {
1207
+ return openBlock(), createElementBlock(Fragment, null, [createVNode(Dock_default, { context: __props.context }, {
1208
+ default: withCtx(({ dockEl, panelMargins, selected }) => [createVNode(DockPanel_default, {
1209
+ context: __props.context,
1210
+ selected,
767
1211
  "dock-el": dockEl,
768
- state: __props.state,
769
- "panel-margins": panelMargins,
770
- entry
1212
+ "panel-margins": panelMargins
771
1213
  }, null, 8, [
1214
+ "context",
1215
+ "selected",
772
1216
  "dock-el",
773
- "state",
774
- "panel-margins",
775
- "entry"
1217
+ "panel-margins"
776
1218
  ])]),
777
1219
  _: 1
778
- }, 8, ["state", "docks"]);
1220
+ }, 8, ["context"]), createVNode(FloatingTooltip_default)], 64);
779
1221
  };
780
1222
  }
781
1223
  });
782
-
783
- //#endregion
784
- //#region src/client/webcomponents/components/DockEmbedded.vue
785
- var DockEmbedded_default = DockEmbedded_vue_vue_type_script_setup_true_lang_default;
1224
+ var DockEmbedded_default = _sfc_main;
786
1225
 
787
1226
  //#endregion
788
1227
  //#region src/client/webcomponents/components/DockEmbedded.ts
@@ -793,4 +1232,4 @@ const DockEmbedded = defineCustomElement(DockEmbedded_default, {
793
1232
  customElements.define("vite-devtools-dock-embedded", DockEmbedded);
794
1233
 
795
1234
  //#endregion
796
- export { DockEmbedded, IframeHolder, IframeManager };
1235
+ export { DEFAULT_DOCK_PANEL_STORE, DockEmbedded, PersistedDomHolder, PersistedDomViewsManager, createDockEntryState, useDocksEntries };