@vitejs/devtools 0.0.0-alpha.3 → 0.0.0-alpha.30

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,20 +1,102 @@
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 withCtx, C as onUnmounted, D as useTemplateRef, E as renderSlot, G as normalizeStyle, I as reactive, K as toDisplayString, O as watch, P as markRaw, R as ref, S as onMounted, T as renderList, U as unref, V as toRefs, W as normalizeClass, a as Fragment, c as createBaseVNode, d as createElementBlock, f as createStaticVNode, g as defineComponent, h as defineAsyncComponent, i as withModifiers, j as withDirectives, k as watchEffect, l as createBlock, m as createVNode, n as vShow, o as Suspense, p as createTextVNode, r as withKeys, s as computed, t as defineCustomElement, u as createCommentVNode, v as h, w as openBlock, x as nextTick, z as shallowRef } from "../vue.runtime.esm-bundler-DL0i8o0W.js";
2
+ import { a as useScreenSafeArea, c as watchDebounced, n as useElementBounding, o as useWindowSize, r as useEventListener, s as useDebounceFn, t as onClickOutside } from "../dist-BpFPAu5f.js";
3
+ import { a as docksGroupByCategories, c as BUILTIN_ENTRY_CLIENT_AUTH_NOTICE, i as useDocksEntries, n as createDockEntryState, o as docksSplitGroupsWithCapacity, r as sharedStateToRef, t as DEFAULT_DOCK_PANEL_STORE } from "../docks-CYaKLVhQ.js";
4
+ import { n as VitePlusCore_default, t as _sfc_main$18 } from "../DockIcon-BfVdt_M0.js";
5
+ import { t as export_helper_default } from "../export-helper-DjM8b2QE.js";
6
+ import { DEFAULT_STATE_USER_SETTINGS } from "@vitejs/devtools-kit/constants";
2
7
 
3
8
  //#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}}.vite-devtools-dock-label{--un-translate-x:-50%;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));bottom:-1.75rem;left:50%}.vite-devtools-vertical .vite-devtools-dock-label{--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));bottom:-2.5rem}*{--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}.relative{position:relative}.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}.z-10{z-index:10}.h-5{height:1.25rem}.h-full{height:100%}.w-5{width:1.25rem}.w-full{width:100%}.w-max{width:max-content}.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{padding:.25rem}.p1\\.5{padding:.375rem}.px{padding-left:1rem;padding-right:1rem}.px2{padding-left:.5rem;padding-right:.5rem}.text-xs{font-size:.75rem;line-height:1rem}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.op50{opacity:.5}.opacity-0{opacity:0}.opacity-100{opacity:1}.group:hover .group-hover\\: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}";
9
+ 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-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;font-family:monospace}.xterm .xterm-accessibility-tree>div{transform-origin:0;width:fit-content}.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}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;z-index:11;background:0 0;transition:opacity .1s linear}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{display:none;position:absolute}.xterm .xterm-scrollable-element>.shadow.top{width:100%;height:3px;box-shadow:var(--vscode-scrollbar-shadow,#000) 0 6px 6px -6px inset;display:block;top:0;left:3px}.xterm .xterm-scrollable-element>.shadow.left{width:3px;height:100%;box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset;display:block;top:3px;left:0}.xterm .xterm-scrollable-element>.shadow.top-left-corner{width:3px;height:3px;display:block;top:0;left:0}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset}: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(7px);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(51,51,51,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;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{--vdt-text-opacity:1;color:rgba(255,255,255,var(--vdt-text-opacity));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-fluent-emoji-flat-warning{background:url(\"data:image/svg+xml;utf8,%3Csvg viewBox='0 0 32 32' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cg fill='none'%3E%3Cpath fill='%23FFB02E' d='m14.839 5.668l-12.66 21.93c-.51.89.13 2.01 1.16 2.01h25.32c1.03 0 1.67-1.11 1.16-2.01l-12.66-21.93c-.52-.89-1.8-.89-2.32 0'/%3E%3Cpath fill='%23000' d='M14.599 21.498a1.4 1.4 0 1 0 2.8-.01v-9.16c0-.77-.62-1.4-1.4-1.4c-.77 0-1.4.62-1.4 1.4zm2.8 3.98a1.4 1.4 0 1 1-2.8 0a1.4 1.4 0 0 1 2.8 0'/%3E%3C/g%3E%3C/svg%3E\") 0 0/100% 100% no-repeat;width:1em;height:1em}.i-ph-arrow-clockwise{--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%3Cpath fill='currentColor' d='M240 56v48a8 8 0 0 1-8 8h-48a8 8 0 0 1 0-16h27.4l-26.59-24.36l-.25-.24a80 80 0 1 0-1.67 114.78a8 8 0 0 1 11 11.63A95.44 95.44 0 0 1 128 224h-1.32a96 96 0 1 1 69.07-164L224 85.8V56a8 8 0 1 1 16 0'/%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-arrow-counter-clockwise{--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%3Cpath fill='currentColor' d='M224 128a96 96 0 0 1-94.71 96H128a95.38 95.38 0 0 1-65.9-26.2a8 8 0 0 1 11-11.63a80 80 0 1 0-1.67-114.78a3 3 0 0 1-.26.25L44.59 96H72a8 8 0 0 1 0 16H24a8 8 0 0 1-8-8V56a8 8 0 0 1 16 0v29.8L60.25 60A96 96 0 0 1 224 128'/%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-arrows-counter-clockwise-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='M216 128a88 88 0 1 1-88-88a88 88 0 0 1 88 88' opacity='.2'/%3E%3Cpath d='M88 104H40a8 8 0 0 1-8-8V48a8 8 0 0 1 16 0v28.69l14.63-14.63A95.43 95.43 0 0 1 130 33.94h.53a95.36 95.36 0 0 1 67.07 27.33a8 8 0 0 1-11.18 11.44a79.52 79.52 0 0 0-55.89-22.77h-.45a79.56 79.56 0 0 0-56.14 23.43L59.31 88H88a8 8 0 0 1 0 16m128 48h-48a8 8 0 0 0 0 16h28.69l-14.63 14.63a79.56 79.56 0 0 1-56.13 23.43h-.45a79.52 79.52 0 0 1-55.89-22.77a8 8 0 1 0-11.18 11.44a95.36 95.36 0 0 0 67.07 27.33h.52a95.43 95.43 0 0 0 67.36-28.12L208 179.31V208a8 8 0 0 0 16 0v-48a8 8 0 0 0-8-8'/%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-caret-down{--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%3Cpath fill='currentColor' d='m213.66 101.66l-80 80a8 8 0 0 1-11.32 0l-80-80a8 8 0 0 1 11.32-11.32L128 164.69l74.34-74.35a8 8 0 0 1 11.32 11.32'/%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-caret-left{--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%3Cpath fill='currentColor' d='M165.66 202.34a8 8 0 0 1-11.32 11.32l-80-80a8 8 0 0 1 0-11.32l80-80a8 8 0 0 1 11.32 11.32L91.31 128Z'/%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-caret-up{--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%3Cpath fill='currentColor' d='M213.66 165.66a8 8 0 0 1-11.32 0L128 91.31l-74.34 74.35a8 8 0 0 1-11.32-11.32l80-80a8 8 0 0 1 11.32 0l80 80a8 8 0 0 1 0 11.32'/%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-bold{--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%3Cpath fill='currentColor' d='m232.49 80.49l-128 128a12 12 0 0 1-17 0l-56-56a12 12 0 1 1 17-17L96 183L215.51 63.51a12 12 0 0 1 17 17Z'/%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-circle-notch{--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%3Cpath fill='currentColor' d='M232 128a104 104 0 0 1-208 0c0-41 23.81-78.36 60.66-95.27a8 8 0 0 1 6.68 14.54C60.15 61.59 40 93.27 40 128a88 88 0 0 0 176 0c0-34.73-20.15-66.41-51.34-80.73a8 8 0 0 1 6.68-14.54C208.19 49.64 232 87 232 128'/%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-eye-slash{--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%3Cpath fill='currentColor' d='M53.92 34.62a8 8 0 1 0-11.84 10.76l19.24 21.17C25 88.84 9.38 123.2 8.69 124.76a8 8 0 0 0 0 6.5c.35.79 8.82 19.57 27.65 38.4C61.43 194.74 93.12 208 128 208a127.1 127.1 0 0 0 52.07-10.83l22 24.21a8 8 0 1 0 11.84-10.76Zm47.33 75.84l41.67 45.85a32 32 0 0 1-41.67-45.85M128 192c-30.78 0-57.67-11.19-79.93-33.25A133.2 133.2 0 0 1 25 128c4.69-8.79 19.66-33.39 47.35-49.38l18 19.75a48 48 0 0 0 63.66 70l14.73 16.2A112 112 0 0 1 128 192m6-95.43a8 8 0 0 1 3-15.72a48.16 48.16 0 0 1 38.77 42.64a8 8 0 0 1-7.22 8.71a6 6 0 0 1-.75 0a8 8 0 0 1-8-7.26A32.09 32.09 0 0 0 134 96.57m113.28 34.69c-.42.94-10.55 23.37-33.36 43.8a8 8 0 1 1-10.67-11.92a132.8 132.8 0 0 0 27.8-35.14a133.2 133.2 0 0 0-23.12-30.77C185.67 75.19 158.78 64 128 64a118.4 118.4 0 0 0-19.36 1.57A8 8 0 1 1 106 49.79A134 134 0 0 1 128 48c34.88 0 66.57 13.26 91.66 38.35c18.83 18.83 27.3 37.62 27.65 38.41a8 8 0 0 1 0 6.5Z'/%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-gear-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='m207.86 123.18l16.78-21a99 99 0 0 0-10.07-24.29l-26.7-3a81 81 0 0 0-6.81-6.81l-3-26.71a99.4 99.4 0 0 0-24.3-10l-21 16.77a82 82 0 0 0-9.64 0l-21-16.78a99 99 0 0 0-24.21 10.07l-3 26.7a81 81 0 0 0-6.81 6.81l-26.71 3a99.4 99.4 0 0 0-10 24.3l16.77 21a82 82 0 0 0 0 9.64l-16.78 21a99 99 0 0 0 10.07 24.29l26.7 3a81 81 0 0 0 6.81 6.81l3 26.71a99.4 99.4 0 0 0 24.3 10l21-16.77a82 82 0 0 0 9.64 0l21 16.78a99 99 0 0 0 24.29-10.07l3-26.7a81 81 0 0 0 6.81-6.81l26.71-3a99.4 99.4 0 0 0 10-24.3l-16.77-21a82 82 0 0 0-.08-9.64M128 168a40 40 0 1 1 40-40a40 40 0 0 1-40 40' opacity='.2'/%3E%3Cpath d='M128 80a48 48 0 1 0 48 48a48.05 48.05 0 0 0-48-48m0 80a32 32 0 1 1 32-32a32 32 0 0 1-32 32m88-29.84q.06-2.16 0-4.32l14.92-18.64a8 8 0 0 0 1.48-7.06a107.6 107.6 0 0 0-10.88-26.25a8 8 0 0 0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186 40.54a8 8 0 0 0-3.94-6a107.3 107.3 0 0 0-26.25-10.86a8 8 0 0 0-7.06 1.48L130.16 40h-4.32L107.2 25.11a8 8 0 0 0-7.06-1.48a107.6 107.6 0 0 0-26.25 10.88a8 8 0 0 0-3.93 6l-2.64 23.76q-1.56 1.49-3 3L40.54 70a8 8 0 0 0-6 3.94a107.7 107.7 0 0 0-10.87 26.25a8 8 0 0 0 1.49 7.06L40 125.84v4.32L25.11 148.8a8 8 0 0 0-1.48 7.06a107.6 107.6 0 0 0 10.88 26.25a8 8 0 0 0 6 3.93l23.72 2.64q1.49 1.56 3 3L70 215.46a8 8 0 0 0 3.94 6a107.7 107.7 0 0 0 26.25 10.87a8 8 0 0 0 7.06-1.49L125.84 216q2.16.06 4.32 0l18.64 14.92a8 8 0 0 0 7.06 1.48a107.2 107.2 0 0 0 26.25-10.88a8 8 0 0 0 3.93-6l2.64-23.72q1.56-1.48 3-3l23.78-2.8a8 8 0 0 0 6-3.94a107.7 107.7 0 0 0 10.87-26.25a8 8 0 0 0-1.49-7.06Zm-16.1-6.5a74 74 0 0 1 0 8.68a8 8 0 0 0 1.74 5.48l14.19 17.73a91.6 91.6 0 0 1-6.23 15l-22.6 2.56a8 8 0 0 0-5.1 2.64a74 74 0 0 1-6.14 6.14a8 8 0 0 0-2.64 5.1l-2.51 22.58a91.3 91.3 0 0 1-15 6.23l-17.74-14.19a8 8 0 0 0-5-1.75h-.48a74 74 0 0 1-8.68 0a8.06 8.06 0 0 0-5.48 1.74l-17.78 14.2a91.6 91.6 0 0 1-15-6.23L82.89 187a8 8 0 0 0-2.64-5.1a74 74 0 0 1-6.14-6.14a8 8 0 0 0-5.1-2.64l-22.58-2.52a91.3 91.3 0 0 1-6.23-15l14.19-17.74a8 8 0 0 0 1.74-5.48a74 74 0 0 1 0-8.68a8 8 0 0 0-1.74-5.48L40.2 100.45a91.6 91.6 0 0 1 6.23-15L69 82.89a8 8 0 0 0 5.1-2.64a74 74 0 0 1 6.14-6.14A8 8 0 0 0 82.89 69l2.51-22.57a91.3 91.3 0 0 1 15-6.23l17.74 14.19a8 8 0 0 0 5.48 1.74a74 74 0 0 1 8.68 0a8.06 8.06 0 0 0 5.48-1.74l17.77-14.19a91.6 91.6 0 0 1 15 6.23L173.11 69a8 8 0 0 0 2.64 5.1a74 74 0 0 1 6.14 6.14a8 8 0 0 0 5.1 2.64l22.58 2.51a91.3 91.3 0 0 1 6.23 15l-14.19 17.74a8 8 0 0 0-1.74 5.53Z'/%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-globe{--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%3Cpath fill='currentColor' d='M128 24a104 104 0 1 0 104 104A104.12 104.12 0 0 0 128 24m88 104a87.6 87.6 0 0 1-3.33 24h-38.51a157.4 157.4 0 0 0 0-48h38.51a87.6 87.6 0 0 1 3.33 24m-114 40h52a115.1 115.1 0 0 1-26 45a115.3 115.3 0 0 1-26-45m-3.9-16a140.8 140.8 0 0 1 0-48h59.88a140.8 140.8 0 0 1 0 48ZM40 128a87.6 87.6 0 0 1 3.33-24h38.51a157.4 157.4 0 0 0 0 48H43.33A87.6 87.6 0 0 1 40 128m114-40h-52a115.1 115.1 0 0 1 26-45a115.3 115.3 0 0 1 26 45m52.33 0h-35.62a135.3 135.3 0 0 0-22.3-45.6A88.29 88.29 0 0 1 206.37 88Zm-98.74-45.6A135.3 135.3 0 0 0 85.29 88H49.63a88.29 88.29 0 0 1 57.96-45.6M49.63 168h35.66a135.3 135.3 0 0 0 22.3 45.6A88.29 88.29 0 0 1 49.63 168m98.78 45.6a135.3 135.3 0 0 0 22.3-45.6h35.66a88.29 88.29 0 0 1-57.96 45.6'/%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-push-pin{--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%3Cpath fill='currentColor' d='m235.32 81.37l-60.69-60.68a16 16 0 0 0-22.63 0l-53.63 53.8c-10.66-3.34-35-7.37-60.4 13.14a16 16 0 0 0-1.29 23.78L85 159.71l-42.66 42.63a8 8 0 0 0 11.32 11.32L96.29 171l48.29 48.29A16 16 0 0 0 155.9 224h1.13a15.93 15.93 0 0 0 11.64-6.33c19.64-26.1 17.75-47.32 13.19-60L235.33 104a16 16 0 0 0-.01-22.63M224 92.69l-57.27 57.46a8 8 0 0 0-1.49 9.22c9.46 18.93-1.8 38.59-9.34 48.62L48 100.08c12.08-9.74 23.64-12.31 32.48-12.31A40.1 40.1 0 0 1 96.81 91a8 8 0 0 0 9.25-1.51L163.32 32L224 92.68Z'/%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-push-pin-fill{--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%3Cpath fill='currentColor' d='m235.33 104l-53.47 53.65c4.56 12.67 6.45 33.89-13.19 60A15.93 15.93 0 0 1 157 224h-1.13a16 16 0 0 1-11.32-4.69L96.29 171l-42.63 42.66a8 8 0 0 1-11.32-11.32L85 159.71l-48.3-48.3A16 16 0 0 1 38 87.63c25.42-20.51 49.75-16.48 60.4-13.14L152 20.7a16 16 0 0 1 22.63 0l60.69 60.68a16 16 0 0 1 .01 22.62'/%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))}.hover\\:border-base:hover{--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(7px);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)}.bg-glass\\:75{--vdt-backdrop-blur:blur(7px);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,.75)}.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)}.bg-glass\\:75{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}}.pointer-events-none{pointer-events:none}.disabled\\:pointer-events-none:disabled{pointer-events:none}.visible{visibility:visible}.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}.right--1px{right:-1px}.right-0{right:0}.top-0\\.5{top:.125rem}.top-1{top:.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}.m1{margin:.25rem}.mx-auto{margin-left:auto;margin-right:auto}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.mb2{margin-bottom:.5rem}.ml-2{margin-left:.5rem}.mt8{margin-top:2rem}.hidden{display:none}.h-1\\.5{height:.375rem}.h-10{height:2.5rem}.h-20{height:5rem}.h-20px{height:20px}.h-3{height:.75rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-full{height:100%}.h-screen{height:100vh}.max-w-150{max-width:37.5rem}.max-w-200{max-width:50rem}.max-w-200px{max-width:200px}.w-1\\.5{width:.375rem}.w-10{width:2.5rem}.w-2\\.5{width:.625rem}.w-20{width:5rem}.w-3{width:.75rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.flex{display:flex}.flex-1{flex:1}.flex-auto{flex:auto}.flex-none{flex:none}.shrink-0{flex-shrink:0}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.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-x-1{--vdt-translate-x:.25rem;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-x-5{--vdt-translate-x:1.25rem;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--45{--vdt-rotate-x:0;--vdt-rotate-y:0;--vdt-rotate-z:0;--vdt-rotate:-45deg;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-0{--vdt-rotate-x:0;--vdt-rotate-y:0;--vdt-rotate-z:0;--vdt-rotate:0deg;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-110:hover{--vdt-scale-x:1.1;--vdt-scale-y:1.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))}.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))}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.animate-spin{animation:1s linear infinite spin}.cursor-pointer{cursor:pointer}.select-none{user-select:none}.resize{resize:both}.items-center{align-items:center}.justify-center{justify-content:center}.gap-0{gap:0}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.of-auto,.overflow-auto{overflow:auto}.of-hidden,.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ws-nowrap{white-space:nowrap}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0}.border-r{border-right-width:1px}.border-r-1\\.5{border-right-width:1.5px}.border-t{border-top-width:1px}.border-t-0{border-top-width:0}.border-amber\\/20{border-color:rgba(251,191,36,.2)}.border-transparent{border-color:transparent}.focus-within\\:border-gray\\/30:focus-within{border-color:rgba(156,163,175,.3)}.hover\\:border-gray\\/20:hover{border-color:rgba(156,163,175,.2)}.rounded{-webkit-border-radius:.25rem;border-radius:.25rem}.rounded-full{-webkit-border-radius:9999px;border-radius:9999px}.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}.rounded-t-md{-webkit-border-top-left-radius:.375rem;border-top-left-radius:.375rem;-webkit-border-top-right-radius:.375rem;border-top-right-radius:.375rem}.bg-amber\\/10{background-color:rgba(251,191,36,.1)}.bg-black{--vdt-bg-opacity:1;background-color:rgba(0,0,0,var(--vdt-bg-opacity))}.bg-gray-6{--vdt-bg-opacity:1;background-color:rgba(75,85,99,var(--vdt-bg-opacity))}.bg-gray\\/10{background-color:rgba(156,163,175,.1)}.bg-gray\\/20{background-color:rgba(156,163,175,.2)}.bg-gray\\/30{background-color:rgba(156,163,175,.3)}.bg-gray\\/5{background-color:rgba(156,163,175,.05)}.bg-green\\:5{background-color:rgba(74,222,128,.05)}.bg-lime{--vdt-bg-opacity:1;background-color:rgba(163,230,53,var(--vdt-bg-opacity))}.bg-lime\\/20{background-color:rgba(163,230,53,.2)}.bg-lime6{--vdt-bg-opacity:1;background-color:rgba(101,163,13,var(--vdt-bg-opacity))}.bg-red\\/10{background-color:rgba(248,113,113,.1)}.bg-transparent{background-color:transparent}.bg-white{--vdt-bg-opacity:1;background-color:rgba(255,255,255,var(--vdt-bg-opacity))}.hover\\:bg-\\[\\#8881\\]:hover{--vdt-bg-opacity:.07;background-color:rgba(136,136,136,var(--vdt-bg-opacity))}.hover\\:bg-gray\\/15:hover{background-color:rgba(156,163,175,.15)}.hover\\:bg-gray\\/20:hover{background-color:rgba(156,163,175,.2)}.hover\\:bg-gray\\/5:hover{background-color:rgba(156,163,175,.05)}.hover\\:bg-lime7:hover{--vdt-bg-opacity:1;background-color:rgba(77,124,15,var(--vdt-bg-opacity))}.hover\\:bg-red\\/20:hover{background-color:rgba(248,113,113,.2)}.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))}.fill-hex-08060D{--vdt-fill-opacity:1;fill:rgba(8,6,13,var(--vdt-fill-opacity))}.p1{padding:.25rem}.p1\\.5{padding:.375rem}.p10{padding:2.5rem}.p2{padding:.5rem}.p20{padding:5rem}.px,.px-4,.px4{padding-left:1rem;padding-right:1rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2,.px2{padding-left:.5rem;padding-right:.5rem}.px-2\\.5{padding-left:.625rem;padding-right:.625rem}.px3{padding-left:.75rem;padding-right:.75rem}.py-1,.py1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py1\\.5{padding-top:.375rem;padding-bottom:.375rem}.pt-6{padding-top:1.5rem}.text-center{text-align:center}.text-0\\.6em{font-size:.6em}.text-2xl{font-size:1.5rem;line-height:2rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.text-amber{--vdt-text-opacity:1;color:rgba(251,191,36,var(--vdt-text-opacity))}.text-green{--vdt-text-opacity:1;color:rgba(74,222,128,var(--vdt-text-opacity))}.text-lime{--vdt-text-opacity:1;color:rgba(163,230,53,var(--vdt-text-opacity))}.text-orange{--vdt-text-opacity:1;color:rgba(251,146,60,var(--vdt-text-opacity))}.text-purple{--vdt-text-opacity:1;color:rgba(192,132,252,var(--vdt-text-opacity))}.text-red{--vdt-text-opacity:1;color:rgba(248,113,113,var(--vdt-text-opacity))}.text-violet{--vdt-text-opacity:1;color:rgba(167,139,250,var(--vdt-text-opacity))}.text-white{--vdt-text-opacity:1;color:rgba(255,255,255,var(--vdt-text-opacity))}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.capitalize{text-transform:capitalize}.line-through{text-decoration-line:line-through}.tab{tab-size:4}.op0,.opacity-0{opacity:0}.op100,.opacity-100{opacity:1}.group:hover .group-hover\\:opacity-100{opacity:1}.op40{opacity:.4}.op50{opacity:.5}.op60{opacity:.6}.op60\\!{opacity:.6!important}.op75{opacity:.75}.op85{opacity:.85}.hover\\:op70:hover{opacity:.7}.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)}.outline-none{outline-offset:2px;outline:2px solid transparent}.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-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;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)}.transition-transform{transition-property:transform;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.delay-200{transition-delay:.2s}@media (prefers-color-scheme:dark){.dark-hidden{display:none}.dark\\:fill-hex-fff,.dark\\:fill-white{--vdt-fill-opacity:1;fill:rgba(255,255,255,var(--vdt-fill-opacity))}}@media (prefers-color-scheme:light){.light-hidden{display:none}}";
5
10
 
6
11
  //#endregion
7
- //#region src/client/webcomponents/components/DockEntries.vue?vue&type=script&setup=true&lang.ts
8
- const _hoisted_1$1 = { class: "vite-devtools-dock-entries 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
- const _hoisted_4 = { class: "vite-devtools-dock-label text-xs group-hover:opacity-100 opacity-0 transition-opacity duration-300 w-max bg-glass border border-base z-10 rounded px2 absolute p1" };
12
- var DockEntries_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
12
+ //#region src/client/webcomponents/state/floating-tooltip.ts
13
+ const tooltip = shallowRef(null);
14
+ const docksOverflowPanel = shallowRef(null);
15
+ function setFloatingTooltip(info) {
16
+ tooltip.value = info;
17
+ }
18
+ function useFloatingTooltip() {
19
+ return tooltip;
20
+ }
21
+ function setDocksOverflowPanel(info) {
22
+ docksOverflowPanel.value = info;
23
+ }
24
+ function useDocksOverflowPanel() {
25
+ return docksOverflowPanel;
26
+ }
27
+
28
+ //#endregion
29
+ //#region src/client/webcomponents/components/DockEntry.vue
30
+ const _hoisted_1$9 = ["title"];
31
+ const _hoisted_2$6 = {
32
+ key: 0,
33
+ class: "absolute top-0.5 right-0 bg-gray-6 text-white text-0.6em px-1 rounded-full shadow"
34
+ };
35
+ const _sfc_main$17 = /* @__PURE__ */ defineComponent({
36
+ __name: "DockEntry",
37
+ props: {
38
+ dock: {},
39
+ isSelected: { type: Boolean },
40
+ isDimmed: { type: Boolean },
41
+ isVertical: { type: Boolean },
42
+ badge: {},
43
+ tooltip: {
44
+ type: Boolean,
45
+ default: true
46
+ }
47
+ },
48
+ setup(__props) {
49
+ const props = __props;
50
+ const button = useTemplateRef("button");
51
+ function updateTooltip() {
52
+ if (!props.tooltip) return;
53
+ if (!button.value) return;
54
+ setFloatingTooltip({
55
+ content: props.dock.title,
56
+ el: button.value
57
+ });
58
+ }
59
+ function clearTitle() {
60
+ if (!props.tooltip) return;
61
+ setFloatingTooltip(null);
62
+ }
63
+ useEventListener("pointerdown", () => {
64
+ if (!props.tooltip) return;
65
+ setFloatingTooltip(null);
66
+ });
67
+ return (_ctx, _cache) => {
68
+ return openBlock(), createElementBlock("div", {
69
+ key: __props.dock.id,
70
+ class: "relative group vite-devtools-dock-entry",
71
+ onPointerenter: updateTooltip,
72
+ onPointerleave: clearTitle
73
+ }, [createBaseVNode("button", {
74
+ ref_key: "button",
75
+ ref: button,
76
+ title: __props.dock.title,
77
+ class: normalizeClass([[
78
+ __props.isVertical ? "rotate-270" : "",
79
+ __props.isDimmed ? "op50 saturate-0" : "",
80
+ __props.isSelected ? "scale-120 text-purple" : ""
81
+ ], "flex items-center justify-center p1.5 rounded-xl hover:bg-[#8881] hover:scale-110 transition-all duration-300 relative"])
82
+ }, [createVNode(_sfc_main$18, {
83
+ icon: __props.dock.icon,
84
+ title: __props.dock.title,
85
+ class: "w-5 h-5 select-none"
86
+ }, null, 8, ["icon", "title"]), __props.badge ? (openBlock(), createElementBlock("div", _hoisted_2$6, toDisplayString(__props.badge), 1)) : createCommentVNode("v-if", true)], 10, _hoisted_1$9)], 32);
87
+ };
88
+ }
89
+ });
90
+
91
+ //#endregion
92
+ //#region src/client/webcomponents/components/DockEntries.vue
93
+ const _sfc_main$16 = /* @__PURE__ */ defineComponent({
13
94
  __name: "DockEntries",
14
95
  props: {
96
+ context: {},
97
+ entries: {},
15
98
  selected: {},
16
- isVertical: { type: Boolean },
17
- entries: {}
99
+ isVertical: { type: Boolean }
18
100
  },
19
101
  emits: ["select"],
20
102
  setup(__props, { emit: __emit }) {
@@ -26,49 +108,178 @@ var DockEntries_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
26
108
  else emit("select", dock);
27
109
  }
28
110
  return (_ctx, _cache) => {
29
- return openBlock(), createElementBlock("div", _hoisted_1$1, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(entries), (dock) => {
30
- return openBlock(), createElementBlock("div", {
31
- key: dock.id,
32
- class: "relative group vite-devtools-dock-entry"
33
- }, [createBaseVNode("button", {
34
- title: dock.title,
35
- 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 relative"]),
111
+ return openBlock(true), createElementBlock(Fragment, null, renderList(unref(entries), (dock) => {
112
+ return openBlock(), createElementBlock(Fragment, { key: dock.id }, [!dock.isHidden ? (openBlock(), createBlock(_sfc_main$17, {
113
+ key: 0,
114
+ dock,
115
+ "is-selected": unref(selected)?.id === dock.id,
116
+ "is-dimmed": unref(selected) ? unref(selected).id !== dock.id : false,
117
+ "is-vertical": unref(isVertical),
36
118
  onClick: ($event) => toggleDockEntry(dock)
37
- }, [createBaseVNode("img", {
38
- src: dock.icon,
39
- alt: dock.title,
40
- class: "w-5 h-5 select-none",
41
- draggable: "false"
42
- }, null, 8, _hoisted_3)], 10, _hoisted_2), createBaseVNode("div", _hoisted_4, toDisplayString(dock.title), 1)]);
43
- }), 128))]);
119
+ }, null, 8, [
120
+ "dock",
121
+ "is-selected",
122
+ "is-dimmed",
123
+ "is-vertical",
124
+ "onClick"
125
+ ])) : createCommentVNode("v-if", true)], 64);
126
+ }), 128);
44
127
  };
45
128
  }
46
129
  });
47
130
 
48
131
  //#endregion
49
- //#region src/client/webcomponents/components/DockEntries.vue
50
- var DockEntries_default = DockEntries_vue_vue_type_script_setup_true_lang_default;
132
+ //#region src/client/webcomponents/components/DockEntriesWithCategories.vue
133
+ const _sfc_main$15 = /* @__PURE__ */ defineComponent({
134
+ __name: "DockEntriesWithCategories",
135
+ props: {
136
+ context: {},
137
+ groups: {},
138
+ selected: {},
139
+ isVertical: { type: Boolean }
140
+ },
141
+ emits: ["select"],
142
+ setup(__props, { emit: __emit }) {
143
+ const emit = __emit;
144
+ return (_ctx, _cache) => {
145
+ return openBlock(true), createElementBlock(Fragment, null, renderList(__props.groups, ([category, entries], idx) => {
146
+ return openBlock(), createElementBlock(Fragment, { key: category }, [idx > 0 ? renderSlot(_ctx.$slots, "separator", {
147
+ key: 0,
148
+ category,
149
+ index: idx,
150
+ isVertical: __props.isVertical
151
+ }, () => [_cache[1] || (_cache[1] = createBaseVNode("div", { class: "border-base m1 h-20px w-px border-r-1.5" }, null, -1))]) : createCommentVNode("v-if", true), createVNode(_sfc_main$16, {
152
+ context: __props.context,
153
+ entries,
154
+ "is-vertical": __props.isVertical,
155
+ selected: __props.selected,
156
+ onSelect: _cache[0] || (_cache[0] = (e) => emit("select", e))
157
+ }, null, 8, [
158
+ "context",
159
+ "entries",
160
+ "is-vertical",
161
+ "selected"
162
+ ])], 64);
163
+ }), 128);
164
+ };
165
+ }
166
+ });
51
167
 
52
168
  //#endregion
53
- //#region src/client/webcomponents/components/Dock.vue?vue&type=script&setup=true&lang.ts
54
- const PANEL_MARGIN = 5;
169
+ //#region src/client/webcomponents/components/DockOverflowButton.vue
170
+ const _sfc_main$14 = /* @__PURE__ */ defineComponent({
171
+ __name: "DockOverflowButton",
172
+ props: {
173
+ context: {},
174
+ isVertical: { type: Boolean },
175
+ groups: {},
176
+ selected: {}
177
+ },
178
+ emits: ["select"],
179
+ setup(__props, { emit: __emit }) {
180
+ const props = __props;
181
+ const emit = __emit;
182
+ const overflowButton = useTemplateRef("overflowButton");
183
+ const overflowBadge = computed(() => {
184
+ const count = props.groups.reduce((acc, [_, items]) => acc + items.length, 0);
185
+ if (count > 9) return "9+";
186
+ return count.toString();
187
+ });
188
+ const isOverflowPanelVisible = ref(false);
189
+ const docksOverflowPanel = useDocksOverflowPanel();
190
+ function showOverflowPanel() {
191
+ if (!overflowButton.value) return;
192
+ isOverflowPanelVisible.value = true;
193
+ setDocksOverflowPanel({
194
+ content: () => h("div", { class: "flex gap-0 flex-wrap max-w-200px" }, [h(_sfc_main$15, {
195
+ context: props.context,
196
+ groups: props.groups,
197
+ isVertical: false,
198
+ selected: props.selected,
199
+ onSelect: (e) => emit("select", e)
200
+ })]),
201
+ el: overflowButton.value
202
+ });
203
+ }
204
+ watchDebounced(() => docksOverflowPanel.value, (value) => {
205
+ isOverflowPanelVisible.value = !!value;
206
+ }, { debounce: 1e3 });
207
+ function toggleOverflowPanel() {
208
+ if (isOverflowPanelVisible.value) hideOverflowPanel();
209
+ else showOverflowPanel();
210
+ }
211
+ function hideOverflowPanel() {
212
+ isOverflowPanelVisible.value = false;
213
+ setDocksOverflowPanel(null);
214
+ }
215
+ return (_ctx, _cache) => {
216
+ return openBlock(), createElementBlock("div", {
217
+ ref_key: "overflowButton",
218
+ ref: overflowButton
219
+ }, [createVNode(_sfc_main$17, {
220
+ dock: {
221
+ id: "overflow",
222
+ title: "Overflow",
223
+ icon: "ph:dots-three-circle-duotone"
224
+ },
225
+ class: "overflow-button",
226
+ tooltip: false,
227
+ badge: overflowBadge.value,
228
+ "is-vertical": __props.isVertical,
229
+ "is-selected": false,
230
+ "is-dimmed": false,
231
+ onClick: toggleOverflowPanel
232
+ }, null, 8, ["badge", "is-vertical"])], 512);
233
+ };
234
+ }
235
+ });
236
+
237
+ //#endregion
238
+ //#region src/client/webcomponents/components/icons/BracketLeft.vue
239
+ const _sfc_main$13 = {};
240
+ const _hoisted_1$8 = {
241
+ viewBox: "0 0 9 20",
242
+ fill: "none",
243
+ xmlns: "http://www.w3.org/2000/svg"
244
+ };
245
+ function _sfc_render$2(_ctx, _cache) {
246
+ return openBlock(), createElementBlock("svg", _hoisted_1$8, [..._cache[0] || (_cache[0] = [createBaseVNode("path", {
247
+ 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",
248
+ class: "fill-black dark:fill-white"
249
+ }, null, -1)])]);
250
+ }
251
+ var BracketLeft_default = /* @__PURE__ */ export_helper_default(_sfc_main$13, [["render", _sfc_render$2]]);
252
+
253
+ //#endregion
254
+ //#region src/client/webcomponents/components/icons/BracketRight.vue
255
+ const _sfc_main$12 = {};
256
+ const _hoisted_1$7 = {
257
+ viewBox: "0 0 9 20",
258
+ fill: "none",
259
+ xmlns: "http://www.w3.org/2000/svg"
260
+ };
261
+ function _sfc_render$1(_ctx, _cache) {
262
+ return openBlock(), createElementBlock("svg", _hoisted_1$7, [..._cache[0] || (_cache[0] = [createBaseVNode("path", {
263
+ 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",
264
+ class: "fill-black dark:fill-white"
265
+ }, null, -1)])]);
266
+ }
267
+ var BracketRight_default = /* @__PURE__ */ export_helper_default(_sfc_main$12, [["render", _sfc_render$1]]);
268
+
269
+ //#endregion
270
+ //#region src/client/webcomponents/components/Dock.vue
271
+ const _hoisted_1$6 = {
272
+ key: 0,
273
+ class: "i-fluent-emoji-flat-warning absolute bottom-0 right--1px w-1.5 h-1.5"
274
+ };
275
+ const _hoisted_2$5 = { class: "flex items-center gap-1" };
276
+ const PANEL_MARGIN = 2;
55
277
  const SNAP_THRESHOLD = 2;
56
- var Dock_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
278
+ const _sfc_main$11 = /* @__PURE__ */ defineComponent({
57
279
  __name: "Dock",
58
- props: /* @__PURE__ */ mergeModels({
59
- state: {},
60
- docks: {}
61
- }, {
62
- "isDragging": {
63
- type: Boolean,
64
- default: false
65
- },
66
- "isDraggingModifiers": {}
67
- }),
68
- emits: ["update:isDragging"],
280
+ props: { context: {} },
69
281
  setup(__props) {
70
- const { state, docks } = toRefs(__props);
71
- const isDragging = useModel(__props, "isDragging");
282
+ const context = __props.context;
72
283
  const isSafari = navigator.userAgent.includes("Safari") && !navigator.userAgent.includes("Chrome");
73
284
  const panelMargins = reactive({
74
285
  left: PANEL_MARGIN,
@@ -90,6 +301,8 @@ var Dock_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
90
301
  });
91
302
  const dockEl = useTemplateRef("dockEl");
92
303
  const anchorEl = useTemplateRef("anchorEl");
304
+ const recalculateCounter = ref(0);
305
+ const isHovering = ref(false);
93
306
  const windowSize = reactive({
94
307
  width: window.innerWidth,
95
308
  height: window.innerHeight
@@ -104,12 +317,20 @@ var Dock_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
104
317
  });
105
318
  function onPointerDown(e) {
106
319
  if (!dockEl.value) return;
107
- isDragging.value = true;
320
+ context.panel.isDragging = true;
108
321
  const { left, top, width, height } = dockEl.value.getBoundingClientRect();
109
322
  draggingOffset.x = e.clientX - left - width / 2;
110
323
  draggingOffset.y = e.clientY - top - height / 2;
111
324
  }
112
- onMounted(() => {
325
+ const isRpcTrusted = ref(context.rpc.isTrusted);
326
+ context.rpc.events.on("rpc:is-trusted:updated", (isTrusted) => {
327
+ isRpcTrusted.value = isTrusted;
328
+ if (isTrusted && context.docks.selected?.id === BUILTIN_ENTRY_CLIENT_AUTH_NOTICE.id) context.docks.switchEntry(null);
329
+ });
330
+ const splitedEntries = computed(() => {
331
+ return docksSplitGroupsWithCapacity(context.docks.groupedEntries, 5);
332
+ });
333
+ onMounted(async () => {
113
334
  windowSize.width = window.innerWidth;
114
335
  windowSize.height = window.innerHeight;
115
336
  useEventListener(window, "resize", () => {
@@ -117,7 +338,8 @@ var Dock_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
117
338
  windowSize.height = window.innerHeight;
118
339
  });
119
340
  useEventListener(window, "pointermove", (e) => {
120
- if (!isDragging.value) return;
341
+ if (!context.panel.isDragging) return;
342
+ const store = context.panel.store;
121
343
  const centerX = window.innerWidth / 2;
122
344
  const centerY = window.innerHeight / 2;
123
345
  const x = e.clientX - draggingOffset.x;
@@ -131,15 +353,15 @@ var Dock_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
131
353
  const TR = Math.atan2(0 - centerY + HORIZONTAL_MARGIN, window.innerWidth - centerX);
132
354
  const BL = Math.atan2(window.innerHeight - HORIZONTAL_MARGIN - centerY, 0 - centerX);
133
355
  const BR = Math.atan2(window.innerHeight - HORIZONTAL_MARGIN - centerY, window.innerWidth - centerX);
134
- state.value.position = deg >= TL && deg <= TR ? "top" : deg >= TR && deg <= BR ? "right" : deg >= BR && deg <= BL ? "bottom" : "left";
135
- state.value.left = snapToPoints(x / window.innerWidth * 100);
136
- state.value.top = snapToPoints(y / window.innerHeight * 100);
356
+ store.position = deg >= TL && deg <= TR ? "top" : deg >= TR && deg <= BR ? "right" : deg >= BR && deg <= BL ? "bottom" : "left";
357
+ store.left = snapToPoints(x / window.innerWidth * 100);
358
+ store.top = snapToPoints(y / window.innerHeight * 100);
137
359
  });
138
360
  useEventListener(window, "pointerup", () => {
139
- isDragging.value = false;
361
+ context.panel.isDragging = false;
140
362
  });
141
363
  useEventListener(window, "pointerleave", () => {
142
- isDragging.value = false;
364
+ context.panel.isDragging = false;
143
365
  });
144
366
  });
145
367
  function snapToPoints(value) {
@@ -151,16 +373,14 @@ var Dock_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
151
373
  function clamp(value, min, max) {
152
374
  return Math.min(Math.max(value, min), max);
153
375
  }
154
- const recalculateCounter = ref(0);
155
- const isHovering = ref(false);
156
- const isVertical = computed(() => state.value.position === "left" || state.value.position === "right");
157
376
  const anchorPos = computed(() => {
158
377
  recalculateCounter.value;
378
+ const store = context.panel.store;
159
379
  const halfWidth = (dockEl.value?.clientWidth || 0) / 2;
160
380
  const halfHeight = (dockEl.value?.clientHeight || 0) / 2;
161
- const left = state.value.left * windowSize.width / 100;
162
- const top = state.value.top * windowSize.height / 100;
163
- switch (state.value.position) {
381
+ const left = store.left * windowSize.width / 100;
382
+ const top = store.top * windowSize.height / 100;
383
+ switch (store.position) {
164
384
  case "top": return {
165
385
  left: clamp(left, halfWidth + panelMargins.left, windowSize.width - halfWidth - panelMargins.right),
166
386
  top: panelMargins.top + halfHeight
@@ -173,7 +393,6 @@ var Dock_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
173
393
  left: panelMargins.left + halfHeight,
174
394
  top: clamp(top, halfWidth + panelMargins.top, windowSize.height - halfWidth - panelMargins.bottom)
175
395
  };
176
- case "bottom":
177
396
  default: return {
178
397
  left: clamp(left, halfWidth + panelMargins.left, windowSize.width - halfWidth - panelMargins.right),
179
398
  top: windowSize.height - panelMargins.bottom - halfHeight
@@ -183,18 +402,18 @@ var Dock_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
183
402
  let _timer = null;
184
403
  function bringUp() {
185
404
  isHovering.value = true;
186
- if (state.value.minimizePanelInactive < 0) return;
405
+ if (context.panel.store.inactiveTimeout < 0) return;
187
406
  if (_timer) clearTimeout(_timer);
188
407
  _timer = setTimeout(() => {
189
408
  isHovering.value = false;
190
- }, +state.value.minimizePanelInactive || 0);
409
+ }, +context.panel.store.inactiveTimeout || 0);
191
410
  }
192
411
  const isHidden = computed(() => false);
193
412
  const isMinimized = computed(() => {
194
- if (state.value.minimizePanelInactive < 0) return false;
195
- if (state.value.minimizePanelInactive === 0) return true;
413
+ if (context.panel.store.inactiveTimeout < 0) return false;
414
+ if (context.panel.store.inactiveTimeout === 0) return true;
196
415
  const isTouchDevice = "ontouchstart" in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0;
197
- return !isDragging.value && !state.value.open && !isHovering.value && !isTouchDevice && state.value.minimizePanelInactive;
416
+ return !context.panel.isDragging && !context.panel.store.open && !isHovering.value && !isTouchDevice && context.panel.store.inactiveTimeout;
198
417
  });
199
418
  const anchorStyle = computed(() => {
200
419
  return {
@@ -204,16 +423,17 @@ var Dock_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
204
423
  };
205
424
  });
206
425
  const panelStyle = computed(() => {
207
- const style = { transform: isVertical.value ? `translate(-50%, -50%) rotate(90deg)` : `translate(-50%, -50%)` };
426
+ const style = { transform: context.panel.isVertical ? `translate(-50%, -50%) rotate(90deg)` : `translate(-50%, -50%)` };
208
427
  if (isHidden.value) {
209
428
  style.opacity = 0;
210
429
  style.pointerEvents = "none";
211
430
  }
212
- if (isDragging.value) style.transition = "none !important";
431
+ if (context.panel.isDragging) style.transition = "none !important";
213
432
  return style;
214
433
  });
215
434
  onMounted(() => {
216
- bringUp();
435
+ if (context.panel.store.open && !isRpcTrusted.value) context.panel.store.open = false;
436
+ if (isRpcTrusted.value) bringUp();
217
437
  recalculateCounter.value++;
218
438
  });
219
439
  return (_ctx, _cache) => {
@@ -223,8 +443,8 @@ var Dock_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
223
443
  ref: anchorEl,
224
444
  style: normalizeStyle([anchorStyle.value]),
225
445
  class: normalizeClass({
226
- "vite-devtools-horizontal": !isVertical.value,
227
- "vite-devtools-vertical": isVertical.value,
446
+ "vite-devtools-horizontal": !unref(context).panel.isVertical,
447
+ "vite-devtools-vertical": unref(context).panel.isVertical,
228
448
  "vite-devtools-minimized": isMinimized.value
229
449
  }),
230
450
  onMousemove: bringUp
@@ -232,8 +452,14 @@ var Dock_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
232
452
  !unref(isSafari) ? (openBlock(), createElementBlock("div", {
233
453
  key: 0,
234
454
  id: "vite-devtools-glowing",
235
- style: normalizeStyle(isDragging.value ? "opacity: 0.6 !important" : "")
236
- }, null, 4)) : createCommentVNode("v-if", true),
455
+ class: normalizeClass(unref(context).panel.isDragging ? "op60!" : "")
456
+ }, null, 2)) : createCommentVNode("v-if", true),
457
+ renderSlot(_ctx.$slots, "default", {
458
+ context: unref(context),
459
+ dockEl: dockEl.value,
460
+ selected: unref(context).docks.selected,
461
+ panelMargins
462
+ }),
237
463
  createBaseVNode("div", {
238
464
  id: "vite-devtools-dock-container",
239
465
  ref_key: "dockEl",
@@ -242,74 +468,153 @@ var Dock_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
242
468
  }, [createBaseVNode("div", {
243
469
  id: "vite-devtools-dock",
244
470
  onPointerdown: onPointerDown
245
- }, [createVNode(DockEntries_default, {
246
- entries: unref(docks),
247
- class: normalizeClass(isMinimized.value ? "opacity-0" : "opacity-100"),
248
- "is-vertical": isVertical.value,
249
- selected: unref(state).dockEntry,
250
- onSelect: _cache[0] || (_cache[0] = (s) => unref(state).dockEntry = s)
251
- }, null, 8, [
252
- "entries",
253
- "class",
254
- "is-vertical",
255
- "selected"
256
- ])], 32)], 4),
257
- renderSlot(_ctx.$slots, "default", {
258
- dockEl: dockEl.value,
259
- panelMargins,
260
- state: unref(state),
261
- entry: unref(state).dockEntry
262
- })
471
+ }, [
472
+ 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" }),
473
+ 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"]),
474
+ createBaseVNode("div", { 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", unref(context).panel.isVertical ? "rotate-270" : "rotate-0"]]) }, [createVNode(VitePlusCore_default), !isRpcTrusted.value ? (openBlock(), createElementBlock("div", _hoisted_1$6)) : createCommentVNode("v-if", true)], 2),
475
+ !isRpcTrusted.value ? (openBlock(), createElementBlock("div", {
476
+ key: 0,
477
+ class: normalizeClass(["transition duration-300 delay-200", isMinimized.value ? "opacity-0 pointer-events-none ws-nowrap text-sm text-orange of-hidden" : "opacity-100"])
478
+ }, [createBaseVNode("button", {
479
+ class: "p2 transition hover:bg-active rounded-full px4",
480
+ onClick: _cache[0] || (_cache[0] = ($event) => unref(context).docks.toggleEntry(unref(BUILTIN_ENTRY_CLIENT_AUTH_NOTICE).id))
481
+ }, [createBaseVNode("div", _hoisted_2$5, [createBaseVNode("div", { class: normalizeClass(["i-fluent-emoji-flat-warning flex-none", unref(context).panel.isVertical ? "rotate-270" : "rotate-0"]) }, null, 2), _cache[3] || (_cache[3] = createBaseVNode("div", { class: "ws-nowrap text-amber" }, " Unauthorized ", -1))])])], 2)) : createCommentVNode("v-if", true),
482
+ createBaseVNode("div", { class: normalizeClass([isMinimized.value ? "opacity-0 pointer-events-none" : "opacity-100", "transition duration-200 flex items-center w-full h-full justify-center px3"]) }, [createVNode(_sfc_main$15, {
483
+ context: unref(context),
484
+ groups: splitedEntries.value.visible,
485
+ "is-vertical": unref(context).panel.isVertical,
486
+ selected: unref(context).docks.selected,
487
+ onSelect: _cache[1] || (_cache[1] = (e) => unref(context).docks.switchEntry(e?.id))
488
+ }, null, 8, [
489
+ "context",
490
+ "groups",
491
+ "is-vertical",
492
+ "selected"
493
+ ]), splitedEntries.value.overflow.length > 0 ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [_cache[4] || (_cache[4] = createBaseVNode("div", { class: "border-base m1 h-20px w-px border-r-1.5" }, null, -1)), createVNode(_sfc_main$14, {
494
+ context: unref(context),
495
+ "is-vertical": unref(context).panel.isVertical,
496
+ groups: splitedEntries.value.overflow,
497
+ selected: unref(context).docks.selected,
498
+ onSelect: _cache[2] || (_cache[2] = (e) => unref(context).docks.switchEntry(e?.id))
499
+ }, null, 8, [
500
+ "context",
501
+ "is-vertical",
502
+ "groups",
503
+ "selected"
504
+ ])], 64)) : createCommentVNode("v-if", true)], 2)
505
+ ], 32)], 4)
263
506
  ], 38);
264
507
  };
265
508
  }
266
509
  });
267
510
 
268
511
  //#endregion
269
- //#region src/client/webcomponents/components/Dock.vue
270
- var Dock_default = Dock_vue_vue_type_script_setup_true_lang_default;
512
+ //#region src/client/webcomponents/utils/PersistedDomViewsManager.ts
513
+ var PersistedDomViewsManager = class {
514
+ holders = {};
515
+ constructor(container) {
516
+ this.container = container;
517
+ }
518
+ getHolder(id, _type) {
519
+ return this.holders[id];
520
+ }
521
+ getOrCreateHolder(id, type) {
522
+ if (!this.container.value) throw new Error("[VITE DEVTOOLS] PersistedDomViewsManager: container is not set");
523
+ let holder;
524
+ if (!this.holders[id]) {
525
+ const el = document.createElement(type);
526
+ this.holders[id] = new PersistedDomHolder(id, el);
527
+ this.container.value.appendChild(el);
528
+ holder = this.holders[id];
529
+ } else holder = this.holders[id];
530
+ return holder;
531
+ }
532
+ removeHolder(id) {
533
+ const holder = this.holders[id];
534
+ if (!holder) return false;
535
+ holder.unmount();
536
+ holder.element.remove();
537
+ delete this.holders[id];
538
+ return true;
539
+ }
540
+ };
541
+ var PersistedDomHolder = class {
542
+ element;
543
+ id;
544
+ anchor;
545
+ _cleanups = [];
546
+ constructor(id, iframe) {
547
+ this.id = id;
548
+ this.element = iframe;
549
+ }
550
+ cleanup() {
551
+ this._cleanups.forEach((cleanup) => cleanup());
552
+ this._cleanups = [];
553
+ }
554
+ mount(parent) {
555
+ if (this.anchor === parent) {
556
+ this.show();
557
+ return;
558
+ }
559
+ this.cleanup();
560
+ this.anchor = parent;
561
+ const update = () => this.update();
562
+ window.addEventListener("resize", update);
563
+ this._cleanups.push(() => window.removeEventListener("resize", update));
564
+ this.show();
565
+ }
566
+ hide() {
567
+ this.element.style.display = "none";
568
+ }
569
+ show() {
570
+ this.element.style.display = "block";
571
+ this.update();
572
+ }
573
+ update() {
574
+ if (!this.anchor) return;
575
+ const rect = this.anchor.getBoundingClientRect();
576
+ this.element.style.position = "absolute";
577
+ this.element.style.width = `${rect.width}px`;
578
+ this.element.style.height = `${rect.height}px`;
579
+ }
580
+ unmount() {
581
+ this.cleanup();
582
+ this.hide();
583
+ this.anchor = void 0;
584
+ }
585
+ };
271
586
 
272
587
  //#endregion
273
- //#region src/client/webcomponents/components/DockPanelResizer.vue?vue&type=script&setup=true&lang.ts
588
+ //#region src/client/webcomponents/components/DockPanelResizer.vue
274
589
  const PANEL_MIN = 20;
275
590
  const PANEL_MAX = 100;
276
- var DockPanelResizer_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
591
+ const _sfc_main$10 = /* @__PURE__ */ defineComponent({
277
592
  __name: "DockPanelResizer",
278
- props: /* @__PURE__ */ mergeModels({
279
- state: {},
280
- isDragging: { type: Boolean }
281
- }, {
282
- "isResizing": {
283
- type: Boolean,
284
- default: false
285
- },
286
- "isResizingModifiers": {}
287
- }),
288
- emits: ["update:isResizing"],
593
+ props: { panel: {} },
289
594
  setup(__props) {
290
595
  const props = __props;
291
- const isResizing = useModel(__props, "isResizing");
292
- const { state } = toRefs$1(props);
293
- const container = ref();
596
+ const topHandle = useTemplateRef("topHandle");
597
+ const container = computed(() => topHandle.value?.parentElement);
294
598
  const resizingState = ref(false);
295
599
  function handleResize(e) {
296
600
  if (!resizingState.value) return;
297
601
  const box = container.value?.getBoundingClientRect();
298
602
  if (!box) return;
603
+ const store = props.panel.store;
299
604
  let widthPx, heightPx;
300
605
  if (resizingState.value.right) {
301
606
  widthPx = Math.abs(e instanceof MouseEvent ? e.clientX : (e.touches[0]?.clientX || 0) - (box?.left || 0));
302
- state.value.width = Math.min(PANEL_MAX, Math.max(PANEL_MIN, widthPx / window.innerWidth * 100));
607
+ store.width = Math.min(PANEL_MAX, Math.max(PANEL_MIN, widthPx / window.innerWidth * 100));
303
608
  } else if (resizingState.value.left) {
304
609
  widthPx = Math.abs((box?.right || 0) - (e instanceof MouseEvent ? e.clientX : e.touches[0]?.clientX || 0));
305
- state.value.width = Math.min(PANEL_MAX, Math.max(PANEL_MIN, widthPx / window.innerWidth * 100));
610
+ store.width = Math.min(PANEL_MAX, Math.max(PANEL_MIN, widthPx / window.innerWidth * 100));
306
611
  }
307
612
  if (resizingState.value.top) {
308
613
  heightPx = Math.abs((box?.bottom || 0) - (e instanceof MouseEvent ? e.clientY : e.touches[0]?.clientY || 0));
309
- state.value.height = Math.min(PANEL_MAX, Math.max(PANEL_MIN, heightPx / window.innerHeight * 100));
614
+ store.height = Math.min(PANEL_MAX, Math.max(PANEL_MIN, heightPx / window.innerHeight * 100));
310
615
  } else if (resizingState.value.bottom) {
311
616
  heightPx = Math.abs(e instanceof MouseEvent ? e.clientY : (e.touches[0]?.clientY || 0) - (box?.top || 0));
312
- state.value.height = Math.min(PANEL_MAX, Math.max(PANEL_MIN, heightPx / window.innerHeight * 100));
617
+ store.height = Math.min(PANEL_MAX, Math.max(PANEL_MIN, heightPx / window.innerHeight * 100));
313
618
  }
314
619
  }
315
620
  useEventListener(window, "mousemove", handleResize);
@@ -318,40 +623,37 @@ var DockPanelResizer_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
318
623
  useEventListener(window, "touchend", () => resizingState.value = false);
319
624
  useEventListener(window, "mouseleave", () => resizingState.value = false);
320
625
  watch(resizingState, (value) => {
321
- isResizing.value = !!value;
626
+ props.panel.isResizing = !!value;
322
627
  }, { flush: "sync" });
323
628
  return (_ctx, _cache) => {
324
- return openBlock(), createElementBlock("div", {
325
- id: "vite-devtools-resize-container",
326
- ref_key: "container",
327
- ref: container,
328
- class: "w-full h-full absolute left-0 right-0 bottom-0 top-0 antialiased"
329
- }, [
629
+ return openBlock(), createElementBlock(Fragment, null, [
330
630
  createCommentVNode(" Handlers "),
331
631
  withDirectives(createBaseVNode("div", {
632
+ ref_key: "topHandle",
633
+ ref: topHandle,
332
634
  class: "vite-devtools-resize-handle vite-devtools-resize-handle-horizontal",
333
635
  style: { top: 0 },
334
636
  onMousedown: _cache[0] || (_cache[0] = withModifiers(($event) => resizingState.value = { top: true }, ["prevent"])),
335
637
  onTouchstartPassive: _cache[1] || (_cache[1] = () => resizingState.value = { top: true })
336
- }, null, 544), [[vShow, unref(state).position !== "top"]]),
638
+ }, null, 544), [[vShow, __props.panel.store.position !== "top"]]),
337
639
  withDirectives(createBaseVNode("div", {
338
640
  class: "vite-devtools-resize-handle vite-devtools-resize-handle-horizontal",
339
641
  style: { bottom: 0 },
340
642
  onMousedown: _cache[2] || (_cache[2] = withModifiers(() => resizingState.value = { bottom: true }, ["prevent"])),
341
643
  onTouchstartPassive: _cache[3] || (_cache[3] = () => resizingState.value = { bottom: true })
342
- }, null, 544), [[vShow, unref(state).position !== "bottom"]]),
644
+ }, null, 544), [[vShow, __props.panel.store.position !== "bottom"]]),
343
645
  withDirectives(createBaseVNode("div", {
344
646
  class: "vite-devtools-resize-handle vite-devtools-resize-handle-vertical",
345
647
  style: { left: 0 },
346
648
  onMousedown: _cache[4] || (_cache[4] = withModifiers(() => resizingState.value = { left: true }, ["prevent"])),
347
649
  onTouchstartPassive: _cache[5] || (_cache[5] = () => resizingState.value = { left: true })
348
- }, null, 544), [[vShow, unref(state).position !== "left"]]),
650
+ }, null, 544), [[vShow, __props.panel.store.position !== "left"]]),
349
651
  withDirectives(createBaseVNode("div", {
350
652
  class: "vite-devtools-resize-handle vite-devtools-resize-handle-vertical",
351
653
  style: { right: 0 },
352
654
  onMousedown: _cache[6] || (_cache[6] = withModifiers(() => resizingState.value = { right: true }, ["prevent"])),
353
655
  onTouchstartPassive: _cache[7] || (_cache[7] = () => resizingState.value = { right: true })
354
- }, null, 544), [[vShow, unref(state).position !== "right"]]),
656
+ }, null, 544), [[vShow, __props.panel.store.position !== "right"]]),
355
657
  withDirectives(createBaseVNode("div", {
356
658
  class: "vite-devtools-resize-handle vite-devtools-resize-handle-corner",
357
659
  style: {
@@ -367,7 +669,7 @@ var DockPanelResizer_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
367
669
  top: true,
368
670
  left: true
369
671
  })
370
- }, null, 544), [[vShow, unref(state).position !== "top" && unref(state).position !== "left"]]),
672
+ }, null, 544), [[vShow, __props.panel.store.position !== "top" && __props.panel.store.position !== "left"]]),
371
673
  withDirectives(createBaseVNode("div", {
372
674
  class: "vite-devtools-resize-handle vite-devtools-resize-handle-corner",
373
675
  style: {
@@ -383,7 +685,7 @@ var DockPanelResizer_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
383
685
  top: true,
384
686
  right: true
385
687
  })
386
- }, null, 544), [[vShow, unref(state).position !== "top" && unref(state).position !== "right"]]),
688
+ }, null, 544), [[vShow, __props.panel.store.position !== "top" && __props.panel.store.position !== "right"]]),
387
689
  withDirectives(createBaseVNode("div", {
388
690
  class: "vite-devtools-resize-handle vite-devtools-resize-handle-corner",
389
691
  style: {
@@ -399,7 +701,7 @@ var DockPanelResizer_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
399
701
  bottom: true,
400
702
  left: true
401
703
  })
402
- }, null, 544), [[vShow, unref(state).position !== "bottom" && unref(state).position !== "left"]]),
704
+ }, null, 544), [[vShow, __props.panel.store.position !== "bottom" && __props.panel.store.position !== "left"]]),
403
705
  withDirectives(createBaseVNode("div", {
404
706
  class: "vite-devtools-resize-handle vite-devtools-resize-handle-corner",
405
707
  style: {
@@ -415,206 +717,632 @@ var DockPanelResizer_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
415
717
  bottom: true,
416
718
  right: true
417
719
  })
418
- }, null, 544), [[vShow, unref(state).position !== "bottom" && unref(state).position !== "right"]])
419
- ], 512);
720
+ }, null, 544), [[vShow, __props.panel.store.position !== "bottom" && __props.panel.store.position !== "right"]])
721
+ ], 64);
420
722
  };
421
723
  }
422
724
  });
423
725
 
424
726
  //#endregion
425
- //#region src/client/webcomponents/components/DockPanelResizer.vue
426
- var DockPanelResizer_default = DockPanelResizer_vue_vue_type_script_setup_true_lang_default;
727
+ //#region src/client/webcomponents/components/icons/VitePlus.vue
728
+ const _sfc_main$9 = {};
729
+ const _hoisted_1$5 = {
730
+ viewBox: "0 0 40 40",
731
+ fill: "none",
732
+ xmlns: "http://www.w3.org/2000/svg"
733
+ };
734
+ function _sfc_render(_ctx, _cache) {
735
+ return openBlock(), createElementBlock("svg", _hoisted_1$5, [..._cache[0] || (_cache[0] = [createStaticVNode("<path d=\"M21.1636 29.535C21.1017 29.6144 21.0166 29.6725 20.92 29.7012C20.8234 29.7298 20.7204 29.7276 20.6251 29.6947C20.5299 29.6619 20.4474 29.6001 20.389 29.518C20.3307 29.436 20.2994 29.3377 20.2996 29.237V24.834C20.2996 24.5775 20.1978 24.3316 20.0164 24.1502C19.8351 23.9689 19.5891 23.867 19.3326 23.867H14.4706C14.3819 23.867 14.2948 23.8426 14.219 23.7963C14.1432 23.7501 14.0816 23.6839 14.041 23.6049C14.0004 23.526 13.9823 23.4374 13.9888 23.3488C13.9952 23.2603 14.026 23.1752 14.0776 23.103L17.2746 18.628C17.3782 18.4833 17.4399 18.3129 17.4529 18.1354C17.4658 17.958 17.4296 17.7804 17.3481 17.6222C17.2666 17.464 17.1431 17.3314 16.9911 17.2389C16.8391 17.1464 16.6646 17.0977 16.4866 17.098H10.6036C10.5149 17.098 10.4278 17.0736 10.352 17.0273C10.2762 16.9811 10.2146 16.9149 10.174 16.8359C10.1334 16.757 10.1153 16.6684 10.1218 16.5798C10.1282 16.4913 10.159 16.4062 10.2106 16.334L14.3536 10.533C14.3982 10.47 14.4572 10.4186 14.5258 10.3833C14.5944 10.348 14.6705 10.3297 14.7476 10.33H27.0956C27.4886 10.33 27.7176 10.775 27.4886 11.094L24.2916 15.57C23.8346 16.21 24.2916 17.1 25.0796 17.1H29.9406C30.3446 17.1 30.5706 17.564 30.3206 17.882L21.1636 29.535Z\" fill=\"#6254FE\"></path><mask id=\"mask0_3_2\" style=\"mask-type:alpha;\" maskUnits=\"userSpaceOnUse\" x=\"10\" y=\"10\" width=\"21\" height=\"20\"><path d=\"M21.1636 29.535C21.1017 29.6144 21.0166 29.6725 20.92 29.7012C20.8234 29.7298 20.7204 29.7276 20.6251 29.6947C20.5299 29.6619 20.4474 29.6001 20.389 29.518C20.3307 29.436 20.2994 29.3377 20.2996 29.237V24.834C20.2996 24.5775 20.1978 24.3316 20.0164 24.1502C19.8351 23.9689 19.5891 23.867 19.3326 23.867H14.4706C14.3819 23.867 14.2948 23.8426 14.219 23.7963C14.1432 23.7501 14.0816 23.6839 14.041 23.6049C14.0004 23.526 13.9823 23.4374 13.9888 23.3488C13.9952 23.2603 14.026 23.1752 14.0776 23.103L17.2746 18.628C17.3782 18.4833 17.4399 18.3129 17.4529 18.1354C17.4658 17.958 17.4296 17.7804 17.3481 17.6222C17.2666 17.464 17.1431 17.3314 16.9911 17.2389C16.8391 17.1464 16.6646 17.0977 16.4866 17.098H10.6036C10.5149 17.098 10.4278 17.0736 10.352 17.0273C10.2762 16.9811 10.2146 16.9149 10.174 16.8359C10.1334 16.757 10.1153 16.6684 10.1218 16.5798C10.1282 16.4913 10.159 16.4062 10.2106 16.334L14.3536 10.533C14.3982 10.47 14.4572 10.4186 14.5258 10.3833C14.5944 10.348 14.6705 10.3297 14.7476 10.33H27.0956C27.4886 10.33 27.7176 10.775 27.4886 11.094L24.2916 15.57C23.8346 16.21 24.2916 17.1 25.0796 17.1H29.9406C30.3446 17.1 30.5706 17.564 30.3206 17.882L21.1636 29.535Z\" fill=\"#833BFF\"></path></mask><g mask=\"url(#mask0_3_2)\"><g filter=\"url(#filter0_f_3_2)\"><path d=\"M20.7408 26.1119C20.745 27.4119 17.935 28.475 14.4644 28.4863C10.9939 28.4975 8.17705 27.4527 8.17283 26.1527C8.16861 24.8526 10.9786 23.7895 14.4492 23.7783C17.9197 23.767 20.7365 24.8118 20.7408 26.1119Z\" fill=\"#EDE6FF\"></path></g><g filter=\"url(#filter1_f_3_2)\"><path d=\"M18.7973 18.0605C18.8053 20.5148 13.0998 22.523 6.05378 22.5458C-0.992227 22.5687 -6.71061 20.5976 -6.71858 18.1433C-6.72654 15.6889 -1.02108 13.6808 6.02493 13.6579C13.0709 13.635 18.7893 15.6061 18.7973 18.0605Z\" fill=\"#EDE6FF\"></path></g><g filter=\"url(#filter2_f_3_2)\"><path d=\"M18.8447 17.4381C18.8489 18.7382 13.0191 19.8111 5.82339 19.8344C-1.37229 19.8578 -7.20896 18.8228 -7.21318 17.5227C-7.2174 16.2226 -1.38757 15.1498 5.80811 15.1264C13.0038 15.1031 18.8405 16.1381 18.8447 17.4381Z\" fill=\"#4E14FF\"></path></g><g filter=\"url(#filter3_f_3_2)\"><path d=\"M20.9053 25.1293C20.9095 26.4294 15.0581 27.5022 7.83591 27.5256C0.613678 27.549 -5.24451 26.5141 -5.24872 25.214C-5.25293 23.9139 0.598424 22.841 7.82065 22.8176C15.0429 22.7942 20.9011 23.8292 20.9053 25.1293Z\" fill=\"#4E14FF\"></path></g><g filter=\"url(#filter4_f_3_2)\"><path d=\"M21.561 25.6205C21.5652 26.9206 15.7139 27.9935 8.49167 28.017C1.26948 28.0404 -4.58868 27.0055 -4.5929 25.7054C-4.59712 24.4054 1.2542 23.3324 8.47639 23.309C15.6986 23.2855 21.5567 24.3205 21.561 25.6205Z\" fill=\"#4E14FF\"></path></g><g filter=\"url(#filter5_f_3_2)\"><path d=\"M23.3606 14.7039C23.5547 11.3881 27.9295 8.94703 33.1319 9.25155C38.3344 9.55608 42.3945 12.4909 42.2004 15.8067C42.0063 19.1224 37.6315 21.5635 32.4291 21.259C27.2266 20.9545 23.1665 18.0196 23.3606 14.7039Z\" fill=\"#EDE6FF\"></path></g><g filter=\"url(#filter6_f_3_2)\"><path d=\"M24.0654 16.8853C24.0512 16.0664 28.1532 15.3313 33.2274 15.2436C38.3016 15.1558 42.4265 15.7485 42.4407 16.5674C42.4548 17.3863 38.3529 18.1214 33.2787 18.2091C28.2045 18.2969 24.0796 17.7042 24.0654 16.8853Z\" fill=\"#4E14FF\"></path></g><g filter=\"url(#filter7_f_3_2)\"><path d=\"M24.0654 16.8853C24.0512 16.0664 28.1532 15.3313 33.2274 15.2436C38.3016 15.1558 42.4265 15.7485 42.4407 16.5674C42.4548 17.3863 38.3529 18.1214 33.2787 18.2091C28.2045 18.2969 24.0796 17.7042 24.0654 16.8853Z\" fill=\"#4E14FF\"></path></g><g filter=\"url(#filter8_f_3_2)\"><path d=\"M2.32515 23.7616C3.12749 24.4233 7.32135 20.6626 11.6924 15.362C16.0635 10.0614 18.9565 5.228 18.1541 4.56637C17.3518 3.90474 13.1579 7.66538 8.78688 12.966C4.41583 18.2666 1.52282 23.1 2.32515 23.7616Z\" fill=\"#4E14FF\"></path></g><g filter=\"url(#filter9_f_3_2)\"><path d=\"M22.7441 17.5449C23.5648 18.1836 27.6508 14.306 31.8704 8.8841C36.0901 3.46217 38.8455 -1.45095 38.0248 -2.08966C37.2041 -2.72838 33.1181 1.14919 28.8984 6.57112C24.6788 11.993 21.9234 16.9062 22.7441 17.5449Z\" fill=\"#4E14FF\"></path></g><g filter=\"url(#filter10_f_3_2)\"><path d=\"M24.2638 18.7387C25.8062 19.9392 28.5247 19.0259 30.3357 16.6989C32.1467 14.372 32.3644 11.5124 30.8219 10.312C29.2795 9.11157 26.561 10.0248 24.75 12.3518C22.939 14.6788 22.7213 17.5383 24.2638 18.7387Z\" fill=\"#2BFDD2\"></path></g><g filter=\"url(#filter11_f_3_2)\"><path d=\"M1.6313 36.5293C2.452 37.168 6.53801 33.2904 10.7576 27.8685C14.9773 22.4465 17.7327 17.5334 16.912 16.8947C16.0913 16.256 12.0053 20.1336 7.78563 25.5555C3.56599 30.9774 0.810605 35.8905 1.6313 36.5293Z\" fill=\"#4E14FF\"></path></g><g filter=\"url(#filter12_f_3_2)\"><path d=\"M1.6313 36.5293C2.452 37.168 6.53801 33.2904 10.7576 27.8685C14.9773 22.4465 17.7327 17.5334 16.912 16.8947C16.0913 16.256 12.0053 20.1336 7.78563 25.5555C3.56599 30.9774 0.810605 35.8905 1.6313 36.5293Z\" fill=\"#4E14FF\"></path></g><g filter=\"url(#filter13_f_3_2)\"><path d=\"M17.5773 32.8563C18.4494 33.535 22.5771 29.6899 26.7968 24.268C31.0164 18.846 33.7301 13.9005 32.858 13.2217C31.9859 12.543 27.8582 16.3881 23.6385 21.81C19.4189 27.232 16.7052 32.1775 17.5773 32.8563Z\" fill=\"#4E14FF\"></path></g><g filter=\"url(#filter14_f_3_2)\"><path d=\"M21.6002 31.5389C23.0982 32.7047 26.7882 30.4688 29.842 26.5449C32.8958 22.621 34.1571 18.4949 32.6591 17.3291C31.1611 16.1633 27.4711 18.3991 24.4173 22.3231C21.3635 26.247 20.1022 30.3731 21.6002 31.5389Z\" fill=\"#2BFDD2\"></path></g></g><path d=\"M6.95763 10C3.02563 15.628 3.00263 24.351 6.95763 30H9.61363C5.65963 24.35 5.68363 15.627 9.61363 10H6.95763ZM33.9386 20H36.5956C36.5946 16.407 35.6056 12.816 33.6386 10H30.9826C32.9486 12.816 33.9366 16.407 33.9386 20ZM38.6276 24.907H35.9626C36.1589 24.1665 36.3102 23.4148 36.4156 22.656H33.7586C33.6531 23.4148 33.5019 24.1665 33.3056 24.907H30.6366C30.3961 25.8176 30.0804 26.7067 29.6926 27.565H32.3616C31.9785 28.4179 31.5165 29.2331 30.9816 30H33.6376C34.1725 29.2331 34.6345 28.4179 35.0176 27.565H37.6826C38.0686 26.714 38.3836 25.823 38.6276 24.907Z\" fill=\"#08060D\" class=\"fill-hex-08060D dark:fill-hex-fff\"></path><defs><filter id=\"filter0_f_3_2\" x=\"1.62683\" y=\"17.2322\" width=\"25.6599\" height=\"17.8001\" 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_3_2\"></feGaussianBlur></filter><filter id=\"filter1_f_3_2\" x=\"-13.2646\" y=\"7.11168\" 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_3_2\"></feGaussianBlur></filter><filter id=\"filter2_f_3_2\" x=\"-11.1412\" y=\"11.198\" width=\"33.9139\" 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_3_2\"></feGaussianBlur></filter><filter id=\"filter3_f_3_2\" x=\"-9.17672\" y=\"18.8893\" 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_3_2\"></feGaussianBlur></filter><filter id=\"filter4_f_3_2\" x=\"-8.5209\" y=\"19.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_3_2\"></feGaussianBlur></filter><filter id=\"filter5_f_3_2\" x=\"16.8079\" y=\"2.67989\" 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_3_2\"></feGaussianBlur></filter><filter id=\"filter6_f_3_2\" x=\"20.1374\" y=\"11.307\" 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_3_2\"></feGaussianBlur></filter><filter id=\"filter7_f_3_2\" x=\"20.1374\" y=\"11.307\" 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_3_2\"></feGaussianBlur></filter><filter id=\"filter8_f_3_2\" x=\"-1.73649\" y=\"0.562875\" width=\"23.9523\" height=\"27.2023\" 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_3_2\"></feGaussianBlur></filter><filter id=\"filter9_f_3_2\" x=\"18.6715\" y=\"-6.08651\" 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_3_2\"></feGaussianBlur></filter><filter id=\"filter10_f_3_2\" x=\"19.3075\" y=\"5.85539\" 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_3_2\"></feGaussianBlur></filter><filter id=\"filter11_f_3_2\" x=\"-2.44132\" y=\"12.8979\" 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_3_2\"></feGaussianBlur></filter><filter id=\"filter12_f_3_2\" x=\"-2.44132\" y=\"12.8979\" 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_3_2\"></feGaussianBlur></filter><filter id=\"filter13_f_3_2\" x=\"13.4863\" y=\"9.21607\" 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_3_2\"></feGaussianBlur></filter><filter id=\"filter14_f_3_2\" x=\"17.0414\" y=\"13.0922\" 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_3_2\"></feGaussianBlur></filter></defs>", 5)])]);
736
+ }
737
+ var VitePlus_default = /* @__PURE__ */ export_helper_default(_sfc_main$9, [["render", _sfc_render]]);
427
738
 
428
739
  //#endregion
429
- //#region src/client/webcomponents/components/IframeManager.ts
430
- var IframeManager = class {
431
- iframes = {};
432
- container = void 0;
433
- constructor() {}
434
- setContainer(container) {
435
- this.container = container;
436
- }
437
- getIframeHolder(id) {
438
- let iframe;
439
- if (!this.iframes[id]) {
440
- const el = document.createElement("iframe");
441
- this.iframes[id] = new IframeHolder(id, el);
442
- this.container.appendChild(el);
443
- iframe = this.iframes[id];
444
- } else iframe = this.iframes[id];
445
- return iframe;
740
+ //#region src/client/webcomponents/components/ViewBuiltinClientAuthNotice.vue
741
+ const _hoisted_1$4 = { class: "w-full h-full flex flex-col items-center justify-center p20" };
742
+ const _hoisted_2$4 = { class: "max-w-150 flex flex-col items-center justify-center gap-2" };
743
+ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
744
+ __name: "ViewBuiltinClientAuthNotice",
745
+ props: { context: {} },
746
+ setup(__props) {
747
+ return (_ctx, _cache) => {
748
+ return openBlock(), createElementBlock("div", _hoisted_1$4, [createBaseVNode("div", _hoisted_2$4, [
749
+ createVNode(VitePlus_default, { class: "w-20 h-20" }),
750
+ _cache[0] || (_cache[0] = createBaseVNode("h1", { class: "text-2xl font-bold text-violet mb2" }, " Vite DevTools is Unauthorized ", -1)),
751
+ _cache[1] || (_cache[1] = createBaseVNode("p", { class: "op75" }, " Vite DevTools offers advanced features that can access your server, view your filesystem, and execute commands. ", -1)),
752
+ _cache[2] || (_cache[2] = createBaseVNode("p", { class: "op75" }, " To protect your project from unauthorized access, please authorize your browser before proceeding. ", -1)),
753
+ _cache[3] || (_cache[3] = createBaseVNode("p", { class: "font-bold bg-green:5 p1 px3 rounded mt8 text-green" }, " Check your terminal for the authorization prompt and come back. ", -1))
754
+ ])]);
755
+ };
446
756
  }
757
+ });
758
+
759
+ //#endregion
760
+ //#region src/client/webcomponents/components/ViewBuiltinSettings.vue
761
+ const _hoisted_1$3 = { class: "h-screen w-full overflow-auto p10" };
762
+ const _hoisted_2$3 = { class: "max-w-200 mx-auto" };
763
+ const _hoisted_3$2 = { class: "mb-8" };
764
+ const _hoisted_4$1 = { class: "flex flex-col gap-4" };
765
+ const _hoisted_5$1 = { class: "flex items-center gap-2 px-4 py-3 bg-gray/5 cursor-pointer select-none border-b border-base" };
766
+ const _hoisted_6 = ["onClick"];
767
+ const _hoisted_7 = { class: "font-medium capitalize" };
768
+ const _hoisted_8 = { class: "text-xs op40" };
769
+ const _hoisted_9 = ["onClick"];
770
+ const _hoisted_10 = ["title", "onClick"];
771
+ const _hoisted_11 = {
772
+ key: 0,
773
+ class: "i-ph-check-bold text-xs"
447
774
  };
448
- var IframeHolder = class {
449
- iframe;
450
- id;
451
- parent;
452
- _cleanups = [];
453
- constructor(id, iframe) {
454
- this.id = id;
455
- this.iframe = iframe;
456
- }
457
- cleanup() {
458
- this._cleanups.forEach((cleanup) => cleanup());
459
- this._cleanups = [];
460
- }
461
- mount(parent) {
462
- if (this.parent === parent) {
463
- this.show();
464
- return;
775
+ const _hoisted_12 = { class: "flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity" };
776
+ const _hoisted_13 = ["onClick"];
777
+ const _hoisted_14 = ["onClick"];
778
+ const _hoisted_15 = ["title", "onClick"];
779
+ const _hoisted_16 = { class: "border-t border-base pt-6 mb-8" };
780
+ const _hoisted_17 = { class: "flex flex-col gap-3" };
781
+ const _hoisted_18 = { class: "flex items-center gap-3 cursor-pointer group" };
782
+ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
783
+ __name: "ViewBuiltinSettings",
784
+ props: {
785
+ context: {},
786
+ entry: {}
787
+ },
788
+ setup(__props) {
789
+ const props = __props;
790
+ const settingsStore = props.context.docks.settings;
791
+ const settings = sharedStateToRef(settingsStore);
792
+ const categories = computed(() => {
793
+ return docksGroupByCategories(props.context.docks.entries, settingsStore.value(), { includeHidden: true });
794
+ });
795
+ function getCategoryLabel(category) {
796
+ return {
797
+ "~viteplus": "Vite+",
798
+ "default": "Default",
799
+ "app": "App",
800
+ "framework": "Framework",
801
+ "web": "Web",
802
+ "advanced": "Advanced",
803
+ "~builtin": "Built-in"
804
+ }[category] || category;
465
805
  }
466
- this.cleanup();
467
- this.parent = parent;
468
- const func = () => this.update();
469
- window.addEventListener("resize", func);
470
- this._cleanups.push(() => window.removeEventListener("resize", func));
471
- this.show();
472
- }
473
- hide() {
474
- this.iframe.style.display = "none";
475
- }
476
- show() {
477
- this.iframe.style.display = "block";
478
- this.update();
479
- }
480
- update() {
481
- if (!this.parent) return;
482
- const rect = this.parent.getBoundingClientRect();
483
- this.iframe.style.position = "absolute";
484
- this.iframe.style.width = `${rect.width}px`;
485
- this.iframe.style.height = `${rect.height}px`;
486
- }
487
- unmount() {
488
- this.cleanup();
489
- this.hide();
490
- this.parent = void 0;
806
+ function toggleDock(id, visible) {
807
+ const isHidden = settings.value.docksHidden.includes(id);
808
+ if (visible ?? isHidden) settingsStore.mutate((state) => {
809
+ state.docksHidden = state.docksHidden.filter((i) => i !== id);
810
+ });
811
+ else settingsStore.mutate((state) => {
812
+ state.docksHidden = [...state.docksHidden, id];
813
+ });
814
+ }
815
+ function toggleCategory(category, visible) {
816
+ const isHidden = settings.value.docksCategoriesHidden.includes(category);
817
+ if (visible ?? isHidden) settingsStore.mutate((state) => {
818
+ state.docksCategoriesHidden = state.docksCategoriesHidden.filter((i) => i !== category);
819
+ });
820
+ else settingsStore.mutate((state) => {
821
+ state.docksCategoriesHidden = [...state.docksCategoriesHidden, category];
822
+ });
823
+ }
824
+ function togglePin(id) {
825
+ if (settings.value.docksPinned.includes(id)) settingsStore.mutate((state) => {
826
+ state.docksPinned = state.docksPinned.filter((i) => i !== id);
827
+ });
828
+ else settingsStore.mutate((state) => {
829
+ state.docksPinned = [...state.docksPinned, id];
830
+ });
831
+ }
832
+ function isInCustomOrder(id) {
833
+ return settings.value.docksCustomOrder[id] !== void 0;
834
+ }
835
+ function moveOrder(category, id, delta) {
836
+ const items = categories.value.find(([cat]) => cat === category);
837
+ if (!items) throw new Error(`Category ${category} not found`);
838
+ const array = [...items[1]];
839
+ const index = array.findIndex((item) => item.id === id);
840
+ const newIndex = index + delta;
841
+ if (newIndex < 0 || newIndex >= array.length) throw new Error(`Invalid new index ${newIndex} for category ${category}`);
842
+ array.splice(newIndex, 0, array.splice(index, 1)[0]);
843
+ items[1] = array;
844
+ settingsStore.mutate((state) => {
845
+ array.forEach((item, index) => {
846
+ state.docksCustomOrder[item.id] = index;
847
+ });
848
+ });
849
+ }
850
+ function doesCategoryHaveCustomOrder(category) {
851
+ const items = categories.value.find(([cat]) => cat === category);
852
+ if (!items) return false;
853
+ return items[1].some((item) => isInCustomOrder(item.id));
854
+ }
855
+ function resetCustomOrderForCategory(category) {
856
+ const items = categories.value.find(([cat]) => cat === category);
857
+ if (!items) return;
858
+ settingsStore.mutate((state) => {
859
+ items[1].forEach((item) => {
860
+ delete state.docksCustomOrder[item.id];
861
+ });
862
+ });
863
+ }
864
+ function resetSettings() {
865
+ if (confirm("Reset all dock settings to defaults?")) settingsStore.mutate(() => {
866
+ return DEFAULT_STATE_USER_SETTINGS();
867
+ });
868
+ }
869
+ return (_ctx, _cache) => {
870
+ return openBlock(), createElementBlock("div", _hoisted_1$3, [createBaseVNode("div", _hoisted_2$3, [
871
+ _cache[11] || (_cache[11] = createBaseVNode("h1", { class: "text-xl font-semibold mb-6 flex items-center gap-2 op85" }, [createBaseVNode("div", { class: "i-ph-gear-duotone text-2xl" }), createTextVNode(" DevTools Settings ")], -1)),
872
+ createBaseVNode("section", _hoisted_3$2, [
873
+ _cache[5] || (_cache[5] = createBaseVNode("h2", { class: "text-lg font-medium mb-4 op75" }, " Dock Entries ", -1)),
874
+ _cache[6] || (_cache[6] = createBaseVNode("p", { class: "text-sm op50 mb-4" }, " Manage visibility and order of dock entries. Hidden entries will not appear in the dock bar. ", -1)),
875
+ createBaseVNode("div", _hoisted_4$1, [(openBlock(true), createElementBlock(Fragment, null, renderList(categories.value, ([category, entries]) => {
876
+ return openBlock(), createElementBlock("div", {
877
+ key: category,
878
+ class: normalizeClass(["border border-base rounded-lg overflow-hidden transition-opacity", unref(settings).docksCategoriesHidden.includes(category) ? "op40" : ""])
879
+ }, [
880
+ createCommentVNode(" Category header "),
881
+ createBaseVNode("div", _hoisted_5$1, [
882
+ createBaseVNode("button", {
883
+ class: normalizeClass(["w-5 h-5 flex items-center justify-center rounded transition-colors", unref(settings).docksCategoriesHidden.includes(category) ? "bg-gray/20" : "bg-lime/20 text-lime"]),
884
+ onClick: ($event) => toggleCategory(category)
885
+ }, [createBaseVNode("div", { class: normalizeClass(["transition-transform", unref(settings).docksCategoriesHidden.includes(category) ? "i-ph-eye-slash text-sm op50" : "i-ph-check-bold text-xs"]) }, null, 2)], 10, _hoisted_6),
886
+ createBaseVNode("span", _hoisted_7, toDisplayString(getCategoryLabel(category)), 1),
887
+ createBaseVNode("span", _hoisted_8, "(" + toDisplayString(entries.length) + ")", 1),
888
+ _cache[2] || (_cache[2] = createBaseVNode("span", { class: "flex-auto" }, null, -1)),
889
+ doesCategoryHaveCustomOrder(category) ? (openBlock(), createElementBlock("button", {
890
+ key: 0,
891
+ class: "w-6 h-6 flex items-center justify-center rounded hover:bg-gray/20 transition-colors",
892
+ title: "Reset custom order",
893
+ onClick: ($event) => resetCustomOrderForCategory(category)
894
+ }, [..._cache[1] || (_cache[1] = [createBaseVNode("div", { class: "i-ph-arrows-counter-clockwise-duotone text-sm op60" }, null, -1)])], 8, _hoisted_9)) : createCommentVNode("v-if", true)
895
+ ]),
896
+ createCommentVNode(" Entries "),
897
+ createBaseVNode("div", null, [(openBlock(true), createElementBlock(Fragment, null, renderList(entries, (dock, index) => {
898
+ return openBlock(), createElementBlock("div", {
899
+ key: dock.id,
900
+ class: normalizeClass(["flex items-center gap-3 px-4 py-2.5 hover:bg-gray/5 transition-colors group border-b border-base border-t-0", unref(settings).docksHidden.includes(dock.id) ? "op40" : ""])
901
+ }, [
902
+ createCommentVNode(" Visibility toggle "),
903
+ createBaseVNode("button", {
904
+ class: normalizeClass(["w-6 h-6 flex items-center justify-center rounded border border-transparent hover:border-base transition-colors shrink-0", unref(settings).docksHidden.includes(dock.id) ? "op50" : ""]),
905
+ title: unref(settings).docksHidden.includes(dock.id) ? "Show" : "Hide",
906
+ onClick: ($event) => toggleDock(dock.id)
907
+ }, [createBaseVNode("div", { class: normalizeClass(["w-4 h-4 rounded flex items-center justify-center transition-colors", unref(settings).docksHidden.includes(dock.id) ? "bg-gray/30" : "bg-lime/20 text-lime"]) }, [!unref(settings).docksHidden.includes(dock.id) ? (openBlock(), createElementBlock("div", _hoisted_11)) : createCommentVNode("v-if", true)], 2)], 10, _hoisted_10),
908
+ createCommentVNode(" Icon & Title "),
909
+ createVNode(_sfc_main$18, {
910
+ icon: dock.icon,
911
+ title: dock.title,
912
+ class: normalizeClass(["w-5 h-5 shrink-0", unref(settings).docksHidden.includes(dock.id) ? "saturate-0" : ""])
913
+ }, null, 8, [
914
+ "icon",
915
+ "title",
916
+ "class"
917
+ ]),
918
+ createBaseVNode("span", { class: normalizeClass(["flex-1 truncate", unref(settings).docksHidden.includes(dock.id) ? "line-through op60" : ""]) }, toDisplayString(dock.title), 3),
919
+ createCommentVNode(" Order controls "),
920
+ createBaseVNode("div", _hoisted_12, [index > 0 ? (openBlock(), createElementBlock("button", {
921
+ key: 0,
922
+ class: "w-6 h-6 flex items-center justify-center rounded hover:bg-gray/20 transition-colors",
923
+ title: "Move up (higher priority)",
924
+ onClick: ($event) => moveOrder(category, dock.id, -1)
925
+ }, [..._cache[3] || (_cache[3] = [createBaseVNode("div", { class: "i-ph-caret-up text-sm op60" }, null, -1)])], 8, _hoisted_13)) : createCommentVNode("v-if", true), index < entries.length - 1 ? (openBlock(), createElementBlock("button", {
926
+ key: 1,
927
+ class: "w-6 h-6 flex items-center justify-center rounded hover:bg-gray/20 transition-colors",
928
+ title: "Move down (lower priority)",
929
+ onClick: ($event) => moveOrder(category, dock.id, 1)
930
+ }, [..._cache[4] || (_cache[4] = [createBaseVNode("div", { class: "i-ph-caret-down text-sm op60" }, null, -1)])], 8, _hoisted_14)) : createCommentVNode("v-if", true)]),
931
+ createCommentVNode(" Pin toggle "),
932
+ createBaseVNode("button", {
933
+ class: normalizeClass(["w-7 h-7 flex items-center justify-center rounded hover:bg-gray/20 transition-colors shrink-0", unref(settings).docksPinned.includes(dock.id) ? "text-amber" : "op40 hover:op70"]),
934
+ title: unref(settings).docksPinned.includes(dock.id) ? "Unpin" : "Pin",
935
+ onClick: ($event) => togglePin(dock.id)
936
+ }, [createBaseVNode("div", { class: normalizeClass([unref(settings).docksPinned.includes(dock.id) ? "i-ph-push-pin-fill rotate--45" : "i-ph-push-pin", "text-base"]) }, null, 2)], 10, _hoisted_15)
937
+ ], 2);
938
+ }), 128))])
939
+ ], 2);
940
+ }), 128))])
941
+ ]),
942
+ createBaseVNode("section", _hoisted_16, [_cache[8] || (_cache[8] = createBaseVNode("h2", { class: "text-lg font-medium mb-4 op75" }, " Appearance ", -1)), createBaseVNode("div", _hoisted_17, [createCommentVNode(" Show iframe address bar toggle "), createBaseVNode("label", _hoisted_18, [createBaseVNode("button", {
943
+ class: normalizeClass(["w-10 h-6 rounded-full transition-colors relative shrink-0", unref(settings).showIframeAddressBar ? "bg-lime" : "bg-gray/30"]),
944
+ onClick: _cache[0] || (_cache[0] = ($event) => unref(settingsStore).mutate((s) => {
945
+ s.showIframeAddressBar = !s.showIframeAddressBar;
946
+ }))
947
+ }, [createBaseVNode("div", { class: normalizeClass(["absolute top-1 w-4 h-4 rounded-full bg-white shadow transition-transform", unref(settings).showIframeAddressBar ? "translate-x-5" : "translate-x-1"]) }, null, 2)], 2), _cache[7] || (_cache[7] = createBaseVNode("div", { class: "flex flex-col" }, [createBaseVNode("span", { class: "text-sm" }, "Show iframe address bar"), createBaseVNode("span", { class: "text-xs op50" }, "Display navigation controls and URL bar for iframe views")], -1))])])]),
948
+ createBaseVNode("section", { class: "border-t border-base pt-6" }, [_cache[10] || (_cache[10] = createBaseVNode("h2", { class: "text-lg font-medium mb-4 op75" }, " Reset ", -1)), createBaseVNode("button", {
949
+ class: "px-4 py-2 rounded bg-red/10 text-red hover:bg-red/20 transition-colors flex items-center gap-2",
950
+ onClick: resetSettings
951
+ }, [..._cache[9] || (_cache[9] = [createBaseVNode("div", { class: "i-ph-arrow-counter-clockwise" }, null, -1), createTextVNode(" Reset Dock Settings ", -1)])])])
952
+ ])]);
953
+ };
491
954
  }
492
- };
955
+ });
493
956
 
494
957
  //#endregion
495
- //#region src/client/webcomponents/components/ViewIframe.vue?vue&type=script&setup=true&lang.ts
496
- var ViewIframe_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
497
- __name: "ViewIframe",
958
+ //#region src/client/webcomponents/components/ViewCustomRenderer.vue
959
+ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
960
+ __name: "ViewCustomRenderer",
498
961
  props: {
499
- state: {},
500
- isDragging: { type: Boolean },
501
- isResizing: { type: Boolean },
962
+ context: {},
502
963
  entry: {},
503
- iframes: {},
504
- iframeStyle: {}
964
+ persistedDoms: {},
965
+ divStyle: {}
505
966
  },
506
967
  setup(__props) {
507
968
  const props = __props;
969
+ const isLoading = ref(true);
508
970
  const viewFrame = useTemplateRef("viewFrame");
509
971
  onMounted(() => {
510
- const holder = props.iframes.getIframeHolder(props.entry.id);
511
- holder.iframe.style.boxShadow = "none";
512
- holder.iframe.style.outline = "none";
513
- Object.assign(holder.iframe.style, props.iframeStyle);
514
- if (!holder.iframe.src) holder.iframe.src = props.entry.url;
972
+ const holder = props.persistedDoms.getOrCreateHolder(props.entry.id, "div");
973
+ holder.element.style.boxShadow = "none";
974
+ holder.element.style.outline = "none";
975
+ Object.assign(holder.element.style, props.divStyle);
976
+ const entryState = props.context.docks.getStateById(props.entry.id);
977
+ if (entryState) entryState.domElements.panel = holder.element;
515
978
  holder.mount(viewFrame.value);
979
+ isLoading.value = false;
516
980
  nextTick(() => {
517
981
  holder.update();
518
982
  });
519
- watch(() => props.state, () => {
983
+ watch(() => props.context.panel, () => {
520
984
  holder.update();
521
985
  }, { deep: true });
522
986
  watchEffect(() => {
523
- holder.iframe.style.pointerEvents = props.isDragging || props.isResizing ? "none" : "auto";
987
+ holder.element.style.pointerEvents = props.context.panel.isDragging || props.context.panel.isResizing ? "none" : "auto";
524
988
  }, { flush: "sync" });
525
989
  });
526
990
  onUnmounted(() => {
527
- props.iframes.getIframeHolder(props.entry.id).unmount();
991
+ props.persistedDoms.getHolder(props.entry.id, "div")?.unmount();
528
992
  });
529
993
  return (_ctx, _cache) => {
530
994
  return openBlock(), createElementBlock("div", {
531
995
  ref_key: "viewFrame",
532
996
  ref: viewFrame,
533
- class: "vite-devtools-view-iframe w-full h-full flex items-center justify-center"
534
- }, [..._cache[0] || (_cache[0] = [createBaseVNode("div", { class: "op50" }, " Loading iframe... ", -1)])], 512);
997
+ class: "vite-devtools-view-custom-renderer w-full h-full flex items-center justify-center"
998
+ }, null, 512);
535
999
  };
536
1000
  }
537
1001
  });
538
1002
 
539
1003
  //#endregion
540
1004
  //#region src/client/webcomponents/components/ViewIframe.vue
541
- var ViewIframe_default = ViewIframe_vue_vue_type_script_setup_true_lang_default;
542
-
543
- //#endregion
544
- //#region src/client/webcomponents/components/ViewEntry.vue?vue&type=script&setup=true&lang.ts
545
- const _hoisted_1 = { key: 1 };
546
- var ViewEntry_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
547
- __name: "ViewEntry",
1005
+ const _hoisted_1$2 = { class: "w-full h-full flex flex-col" };
1006
+ const _hoisted_2$2 = { class: "flex-1 flex items-center h-8 px-2.5 rounded bg-gray/10 border border-transparent hover:border-gray/20 focus-within:border-gray/30 transition-colors" };
1007
+ const _hoisted_3$1 = ["value", "readonly"];
1008
+ const _hoisted_4 = {
1009
+ key: 0,
1010
+ class: "i-ph-circle-notch text-sm op40 ml-2 shrink-0 animate-spin"
1011
+ };
1012
+ const _hoisted_5 = {
1013
+ key: 0,
1014
+ class: "op50 z--1"
1015
+ };
1016
+ const ADDRESS_BAR_HEIGHT = 50;
1017
+ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
1018
+ __name: "ViewIframe",
548
1019
  props: {
549
- state: {},
550
- isDragging: { type: Boolean },
551
- isResizing: { type: Boolean },
1020
+ context: {},
552
1021
  entry: {},
553
- iframes: {},
1022
+ persistedDoms: {},
554
1023
  iframeStyle: {}
555
1024
  },
556
1025
  setup(__props) {
1026
+ const props = __props;
1027
+ const settings = sharedStateToRef(props.context.docks.settings);
1028
+ const showAddressBar = computed(() => settings.value.showIframeAddressBar ?? true);
1029
+ const isLoading = ref(true);
1030
+ const isIframeLoading = ref(false);
1031
+ const viewFrame = useTemplateRef("viewFrame");
1032
+ const urlInputRef = useTemplateRef("urlInput");
1033
+ const currentUrl = ref(props.entry.url);
1034
+ const editingUrl = ref(props.entry.url);
1035
+ const isEditing = ref(false);
1036
+ const iframeElement = computed(() => {
1037
+ return props.persistedDoms.getHolder(props.entry.id, "iframe")?.element;
1038
+ });
1039
+ const currentPageOrigin = computed(() => {
1040
+ try {
1041
+ return window.location.origin;
1042
+ } catch {
1043
+ return "";
1044
+ }
1045
+ });
1046
+ const isCrossOrigin = computed(() => {
1047
+ try {
1048
+ return new URL(currentUrl.value).origin !== currentPageOrigin.value;
1049
+ } catch {
1050
+ return true;
1051
+ }
1052
+ });
1053
+ const displayUrl = computed(() => {
1054
+ if (isCrossOrigin.value) return currentUrl.value;
1055
+ try {
1056
+ const url = new URL(currentUrl.value);
1057
+ return url.pathname + url.search + url.hash;
1058
+ } catch {
1059
+ return currentUrl.value;
1060
+ }
1061
+ });
1062
+ function updateCurrentUrl() {
1063
+ try {
1064
+ const iframe = iframeElement.value;
1065
+ if (iframe?.contentWindow?.location?.href) currentUrl.value = iframe.contentWindow.location.href;
1066
+ } catch {}
1067
+ }
1068
+ function navigateTo(url) {
1069
+ const iframe = iframeElement.value;
1070
+ if (!iframe) return;
1071
+ let normalizedUrl = url.trim();
1072
+ if (normalizedUrl && !normalizedUrl.match(/^https?:\/\//i)) if (normalizedUrl.startsWith("/")) normalizedUrl = `${window.location.origin}${normalizedUrl}`;
1073
+ else normalizedUrl = `http://${normalizedUrl}`;
1074
+ currentUrl.value = normalizedUrl;
1075
+ editingUrl.value = normalizedUrl;
1076
+ iframe.src = normalizedUrl;
1077
+ isIframeLoading.value = true;
1078
+ }
1079
+ function handleUrlSubmit() {
1080
+ isEditing.value = false;
1081
+ if (editingUrl.value !== currentUrl.value) navigateTo(editingUrl.value);
1082
+ }
1083
+ function handleUrlFocus() {
1084
+ isEditing.value = true;
1085
+ editingUrl.value = currentUrl.value;
1086
+ nextTick(() => {
1087
+ urlInputRef.value?.select();
1088
+ });
1089
+ }
1090
+ function handleUrlBlur() {
1091
+ isEditing.value = false;
1092
+ editingUrl.value = currentUrl.value;
1093
+ }
1094
+ function handleUrlKeydown(e) {
1095
+ if (e.key === "Escape") {
1096
+ isEditing.value = false;
1097
+ editingUrl.value = currentUrl.value;
1098
+ urlInputRef.value?.blur();
1099
+ }
1100
+ }
1101
+ function goBack() {
1102
+ try {
1103
+ iframeElement.value?.contentWindow?.history.back();
1104
+ } catch {}
1105
+ }
1106
+ function refresh() {
1107
+ const iframe = iframeElement.value;
1108
+ if (!iframe) return;
1109
+ isIframeLoading.value = true;
1110
+ const src = iframe.src;
1111
+ iframe.src = "";
1112
+ iframe.src = src;
1113
+ }
1114
+ onMounted(() => {
1115
+ if (props.persistedDoms.getHolder(props.entry.id, "iframe")) updateCurrentUrl();
1116
+ const holder = props.persistedDoms.getOrCreateHolder(props.entry.id, "iframe");
1117
+ holder.element.style.boxShadow = "none";
1118
+ holder.element.style.outline = "none";
1119
+ if (!holder.element.src) holder.element.src = props.entry.url;
1120
+ holder.element.addEventListener("load", () => {
1121
+ isIframeLoading.value = false;
1122
+ updateCurrentUrl();
1123
+ });
1124
+ const entryState = props.context.docks.getStateById(props.entry.id);
1125
+ if (entryState) entryState.domElements.iframe = holder.element;
1126
+ watchEffect(() => {
1127
+ Object.assign(holder.element.style, props.iframeStyle);
1128
+ if (showAddressBar.value) {
1129
+ holder.element.style.marginTop = `${ADDRESS_BAR_HEIGHT}px`;
1130
+ holder.element.style.borderTopLeftRadius = "0px";
1131
+ holder.element.style.borderTopRightRadius = "0px";
1132
+ } else {
1133
+ holder.element.style.marginTop = "0px";
1134
+ holder.element.style.borderTopLeftRadius = "";
1135
+ holder.element.style.borderTopRightRadius = "";
1136
+ }
1137
+ });
1138
+ watch(() => props.context.panel, () => {
1139
+ holder.update();
1140
+ }, { deep: true });
1141
+ watchEffect(() => {
1142
+ holder.element.style.pointerEvents = props.context.panel.isDragging || props.context.panel.isResizing ? "none" : "auto";
1143
+ }, { flush: "sync" });
1144
+ holder.mount(viewFrame.value);
1145
+ isLoading.value = false;
1146
+ nextTick(() => {
1147
+ holder.update();
1148
+ });
1149
+ });
1150
+ onUnmounted(() => {
1151
+ props.persistedDoms.getHolder(props.entry.id, "iframe")?.unmount();
1152
+ });
557
1153
  return (_ctx, _cache) => {
558
- return __props.entry.type === "iframe" ? (openBlock(), createBlock(ViewIframe_default, {
1154
+ return openBlock(), createElementBlock("div", _hoisted_1$2, [showAddressBar.value ? (openBlock(), createElementBlock("div", {
559
1155
  key: 0,
560
- state: __props.state,
561
- "is-dragging": __props.isDragging,
562
- "is-resizing": __props.isResizing,
563
- entry: __props.entry,
564
- iframes: __props.iframes,
565
- "iframe-style": __props.iframeStyle
566
- }, null, 8, [
567
- "state",
568
- "is-dragging",
569
- "is-resizing",
570
- "entry",
571
- "iframes",
572
- "iframe-style"
573
- ])) : (openBlock(), createElementBlock("div", _hoisted_1, " Unknown entry: " + toDisplayString(__props.entry), 1));
1156
+ class: "flex-none px-2 w-full flex items-center gap-1 border rounded-t-md border-base border-b-0 bg-gray/5",
1157
+ style: normalizeStyle({ height: `${ADDRESS_BAR_HEIGHT}px` })
1158
+ }, [
1159
+ createCommentVNode(" Navigation buttons (hidden for cross-origin) "),
1160
+ !isCrossOrigin.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
1161
+ createCommentVNode(" Back button "),
1162
+ createBaseVNode("button", {
1163
+ class: "w-7 h-7 flex items-center justify-center rounded hover:bg-gray/15 transition-colors shrink-0",
1164
+ title: "Back",
1165
+ onClick: goBack
1166
+ }, [..._cache[1] || (_cache[1] = [createBaseVNode("div", { class: "i-ph-caret-left text-base op60" }, null, -1)])]),
1167
+ createCommentVNode(" Refresh button "),
1168
+ createBaseVNode("button", {
1169
+ class: "w-7 h-7 flex items-center justify-center rounded hover:bg-gray/15 transition-colors shrink-0",
1170
+ title: "Refresh",
1171
+ onClick: refresh
1172
+ }, [..._cache[2] || (_cache[2] = [createBaseVNode("div", { class: "i-ph-arrow-clockwise text-base op60" }, null, -1)])])
1173
+ ], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createCommentVNode(" Cross-origin badge "), _cache[3] || (_cache[3] = createBaseVNode("div", {
1174
+ class: "flex items-center gap-1 px-2 py-1 rounded text-xs bg-amber/10 text-amber border border-amber/20 shrink-0",
1175
+ title: "Cross-origin iframe - navigation controls unavailable"
1176
+ }, [createBaseVNode("div", { class: "i-ph-globe text-sm" }), createBaseVNode("span", null, "Cross-Origin")], -1))], 2112)),
1177
+ createCommentVNode(" URL input "),
1178
+ createBaseVNode("div", _hoisted_2$2, [createBaseVNode("input", {
1179
+ ref: "urlInput",
1180
+ value: isEditing.value ? editingUrl.value : displayUrl.value,
1181
+ type: "text",
1182
+ class: "flex-1 bg-transparent outline-none text-sm font-mono",
1183
+ placeholder: "Enter URL...",
1184
+ readonly: isCrossOrigin.value,
1185
+ onInput: _cache[0] || (_cache[0] = ($event) => editingUrl.value = $event.target.value),
1186
+ onFocus: handleUrlFocus,
1187
+ onBlur: handleUrlBlur,
1188
+ onKeydown: [handleUrlKeydown, withKeys(handleUrlSubmit, ["enter"])]
1189
+ }, null, 40, _hoisted_3$1), isIframeLoading.value ? (openBlock(), createElementBlock("div", _hoisted_4)) : createCommentVNode("v-if", true)])
1190
+ ], 4)) : createCommentVNode("v-if", true), createBaseVNode("div", {
1191
+ ref_key: "viewFrame",
1192
+ ref: viewFrame,
1193
+ class: "vite-devtools-view-iframe w-full h-full flex-1 items-center justify-center"
1194
+ }, [isLoading.value ? (openBlock(), createElementBlock("div", _hoisted_5, " Loading iframe... ")) : createCommentVNode("v-if", true)], 512)]);
1195
+ };
1196
+ }
1197
+ });
1198
+
1199
+ //#endregion
1200
+ //#region src/client/webcomponents/components/ViewLauncher.vue
1201
+ const _hoisted_1$1 = { class: "flex flex-col gap-4 items-center justify-center h-full relative" };
1202
+ const _hoisted_2$1 = { class: "text-2xl font-bold" };
1203
+ const _hoisted_3 = ["disabled"];
1204
+ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
1205
+ __name: "ViewLauncher",
1206
+ props: {
1207
+ context: {},
1208
+ entry: {}
1209
+ },
1210
+ setup(__props) {
1211
+ const props = __props;
1212
+ function onLaunch() {
1213
+ props.context.rpc.call("devtoolskit:internal:docks:on-launch", props.entry.id);
1214
+ }
1215
+ const status = computed(() => props.entry.launcher.status || "idle");
1216
+ const iconsMap = {
1217
+ error: "i-ph-warning-duotone",
1218
+ idle: "i-ph-rocket-launch-duotone",
1219
+ loading: "i-svg-spinners-8-dots-rotate",
1220
+ success: "i-ph-check-duotone"
1221
+ };
1222
+ const buttonText = computed(() => {
1223
+ if (status.value === "idle") return props.entry.launcher.buttonStart || "Launch";
1224
+ else if (status.value === "loading") return props.entry.launcher.buttonLoading || "Loading...";
1225
+ else if (status.value === "error") return "ERROR";
1226
+ else if (status.value === "success") return "Success";
1227
+ else return `UNKNOWN STATUS: ${status.value}`;
1228
+ });
1229
+ return (_ctx, _cache) => {
1230
+ return openBlock(), createElementBlock("div", _hoisted_1$1, [
1231
+ createVNode(_sfc_main$18, {
1232
+ icon: __props.entry.launcher.icon || __props.entry.icon,
1233
+ class: "w-10 h-10"
1234
+ }, null, 8, ["icon"]),
1235
+ createBaseVNode("h1", _hoisted_2$1, toDisplayString(__props.entry.launcher.title), 1),
1236
+ createBaseVNode("p", null, toDisplayString(__props.entry.launcher.description), 1),
1237
+ createBaseVNode("button", {
1238
+ 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",
1239
+ disabled: status.value !== "idle",
1240
+ onClick: onLaunch
1241
+ }, [createBaseVNode("div", { class: normalizeClass(iconsMap[status.value]) }, null, 2), createBaseVNode("div", null, toDisplayString(buttonText.value), 1)], 8, _hoisted_3)
1242
+ ]);
574
1243
  };
575
1244
  }
576
1245
  });
577
1246
 
578
1247
  //#endregion
579
1248
  //#region src/client/webcomponents/components/ViewEntry.vue
580
- var ViewEntry_default = ViewEntry_vue_vue_type_script_setup_true_lang_default;
1249
+ const _hoisted_1 = { key: 4 };
1250
+ const _hoisted_2 = { key: 5 };
1251
+ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
1252
+ __name: "ViewEntry",
1253
+ props: {
1254
+ context: {},
1255
+ entry: {},
1256
+ persistedDoms: {},
1257
+ iframeStyle: {},
1258
+ divStyle: {}
1259
+ },
1260
+ setup(__props) {
1261
+ const ViewBuiltinTerminals = defineAsyncComponent(() => import("../ViewBuiltinTerminals-CrBOq_Ni.js"));
1262
+ const ViewBuiltinLogs = defineAsyncComponent(() => import("../ViewBuiltinLogs-C8wFxIxg.js"));
1263
+ return (_ctx, _cache) => {
1264
+ return openBlock(), createBlock(Suspense, null, {
1265
+ fallback: withCtx(() => [..._cache[0] || (_cache[0] = [createBaseVNode("div", null, " Loading... ", -1)])]),
1266
+ default: withCtx(() => [__props.entry.type === "~builtin" ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [__props.entry.id === "~terminals" ? (openBlock(), createBlock(unref(ViewBuiltinTerminals), {
1267
+ key: 0,
1268
+ context: __props.context,
1269
+ entry: __props.entry
1270
+ }, null, 8, ["context", "entry"])) : __props.entry.id === "~logs" ? (openBlock(), createBlock(unref(ViewBuiltinLogs), {
1271
+ key: 1,
1272
+ context: __props.context,
1273
+ entry: __props.entry
1274
+ }, null, 8, ["context", "entry"])) : __props.entry.id === "~settings" ? (openBlock(), createBlock(_sfc_main$7, {
1275
+ key: 2,
1276
+ context: __props.context,
1277
+ entry: __props.entry
1278
+ }, null, 8, ["context", "entry"])) : __props.entry.id === "~client-auth-notice" ? (openBlock(), createBlock(_sfc_main$8, {
1279
+ key: 3,
1280
+ context: __props.context
1281
+ }, null, 8, ["context"])) : (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(_sfc_main$5, {
1282
+ context: __props.context,
1283
+ entry: __props.entry,
1284
+ "persisted-doms": __props.persistedDoms,
1285
+ "iframe-style": __props.iframeStyle
1286
+ }, null, 8, [
1287
+ "context",
1288
+ "entry",
1289
+ "persisted-doms",
1290
+ "iframe-style"
1291
+ ])], 2112)) : __props.entry.type === "custom-render" ? (openBlock(), createBlock(_sfc_main$6, {
1292
+ key: 3,
1293
+ context: __props.context,
1294
+ entry: __props.entry,
1295
+ "persisted-doms": __props.persistedDoms,
1296
+ "div-style": __props.divStyle
1297
+ }, null, 8, [
1298
+ "context",
1299
+ "entry",
1300
+ "persisted-doms",
1301
+ "div-style"
1302
+ ])) : __props.entry.type === "launcher" ? (openBlock(), createBlock(_sfc_main$4, {
1303
+ key: 4,
1304
+ context: __props.context,
1305
+ entry: __props.entry
1306
+ }, null, 8, ["context", "entry"])) : (openBlock(), createElementBlock("div", _hoisted_2, " Unknown entry: " + toDisplayString(__props.entry), 1))]),
1307
+ _: 1
1308
+ });
1309
+ };
1310
+ }
1311
+ });
581
1312
 
582
1313
  //#endregion
583
- //#region src/client/webcomponents/components/DockPanel.vue?vue&type=script&setup=true&lang.ts
584
- var DockPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
1314
+ //#region src/client/webcomponents/components/DockPanel.vue
1315
+ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
585
1316
  __name: "DockPanel",
586
1317
  props: {
587
- state: {},
588
- entry: {},
1318
+ context: {},
1319
+ selected: {},
589
1320
  dockEl: {},
590
1321
  panelMargins: {}
591
1322
  },
592
1323
  setup(__props) {
593
1324
  const props = __props;
594
- const { state, entry, panelMargins } = toRefs(props);
595
- const dockPanel = useTemplateRef("dockPanel");
596
- const iframesContainer = useTemplateRef("iframesContainer");
597
- const iframes = markRaw(new IframeManager());
598
- watchEffect(() => {
599
- iframes.setContainer(iframesContainer.value);
600
- }, { flush: "sync" });
1325
+ const context = props.context;
1326
+ const { selected, panelMargins } = toRefs(props);
601
1327
  const windowSize = reactive(useWindowSize());
602
- const isDragging = ref(false);
603
- const isResizing = ref(false);
604
1328
  const isHovering = ref(false);
605
1329
  const mousePosition = reactive({
606
1330
  x: 0,
607
1331
  y: 0
608
1332
  });
1333
+ const dockPanel = useTemplateRef("dockPanel");
1334
+ const viewsContainer = useTemplateRef("viewsContainer");
1335
+ const persistedDoms = markRaw(new PersistedDomViewsManager(viewsContainer));
609
1336
  function clamp(value, min, max) {
610
1337
  return Math.min(Math.max(value, min), max);
611
1338
  }
612
1339
  const anchorPos = computed(() => {
613
1340
  const halfWidth = (props.dockEl?.clientWidth || 0) / 2;
614
1341
  const halfHeight = (props.dockEl?.clientHeight || 0) / 2;
615
- const left = state.value.left * windowSize.width / 100;
616
- const top = state.value.top * windowSize.height / 100;
617
- switch (state.value.position) {
1342
+ const store = context.panel.store;
1343
+ const left = store.left * windowSize.width / 100;
1344
+ const top = store.top * windowSize.height / 100;
1345
+ switch (store.position) {
618
1346
  case "top": return {
619
1347
  left: clamp(left, halfWidth + panelMargins.value.left, windowSize.width - halfWidth - panelMargins.value.right),
620
1348
  top: panelMargins.value.top + halfHeight
@@ -627,7 +1355,6 @@ var DockPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
627
1355
  left: panelMargins.value.left + halfHeight,
628
1356
  top: clamp(top, halfWidth + panelMargins.value.top, windowSize.height - halfWidth - panelMargins.value.bottom)
629
1357
  };
630
- case "bottom":
631
1358
  default: return {
632
1359
  left: clamp(left, halfWidth + panelMargins.value.left, windowSize.width - halfWidth - panelMargins.value.right),
633
1360
  top: windowSize.height - panelMargins.value.bottom - halfHeight
@@ -637,14 +1364,14 @@ var DockPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
637
1364
  let _timer = null;
638
1365
  function bringUp() {
639
1366
  isHovering.value = true;
640
- if (state.value.minimizePanelInactive < 0) return;
1367
+ if (context.panel.store.inactiveTimeout < 0) return;
641
1368
  if (_timer) clearTimeout(_timer);
642
1369
  _timer = setTimeout(() => {
643
1370
  isHovering.value = false;
644
- }, +state.value.minimizePanelInactive || 0);
1371
+ }, +context.panel.store.inactiveTimeout || 0);
645
1372
  }
646
1373
  const { width: frameWidth, height: frameHeight } = useElementBounding(dockPanel);
647
- const iframeStyle = computed(() => {
1374
+ const panelStyle = computed(() => {
648
1375
  mousePosition.x, mousePosition.y;
649
1376
  const halfHeight = (props.dockEl?.clientHeight || 0) / 2;
650
1377
  const frameMargin = {
@@ -657,19 +1384,20 @@ var DockPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
657
1384
  const marginVertical = frameMargin.top + frameMargin.bottom;
658
1385
  const maxWidth = windowSize.width - marginHorizontal;
659
1386
  const maxHeight = windowSize.height - marginVertical;
1387
+ const panel = context.panel;
1388
+ const store = panel.store;
660
1389
  const style = {
661
1390
  position: "fixed",
662
- zIndex: -1,
663
- pointerEvents: isDragging.value || isResizing.value ? "none" : "auto",
664
- width: `min(${state.value.width}vw, calc(100vw - ${marginHorizontal}px))`,
665
- height: `min(${state.value.height}vh, calc(100vh - ${marginVertical}px))`
1391
+ pointerEvents: panel.isDragging || panel.isResizing ? "none" : "auto",
1392
+ width: `min(${store.width}vw, calc(100vw - ${marginHorizontal}px))`,
1393
+ height: `min(${store.height}vh, calc(100vh - ${marginVertical}px))`
666
1394
  };
667
1395
  const anchor = anchorPos.value;
668
- const width = Math.min(maxWidth, state.value.width * windowSize.width / 100);
669
- const height = Math.min(maxHeight, state.value.height * windowSize.height / 100);
1396
+ const width = Math.min(maxWidth, store.width * windowSize.width / 100);
1397
+ const height = Math.min(maxHeight, store.height * windowSize.height / 100);
670
1398
  const anchorX = anchor?.left || 0;
671
1399
  const anchorY = anchor?.top || 0;
672
- switch (state.value.position) {
1400
+ switch (store.position) {
673
1401
  case "top":
674
1402
  case "bottom":
675
1403
  style.left = `${-frameWidth.value / 2}px`;
@@ -685,7 +1413,7 @@ var DockPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
685
1413
  else if (windowSize.height - anchorY - frameMargin.bottom < height / 2) style.top = `${windowSize.height - anchorY - height / 2 - frameMargin.bottom - frameHeight.value / 2}px`;
686
1414
  break;
687
1415
  }
688
- switch (state.value.position) {
1416
+ switch (store.position) {
689
1417
  case "top":
690
1418
  style.top = 0;
691
1419
  break;
@@ -695,7 +1423,6 @@ var DockPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
695
1423
  case "left":
696
1424
  style.left = 0;
697
1425
  break;
698
- case "bottom":
699
1426
  default:
700
1427
  style.bottom = 0;
701
1428
  break;
@@ -707,101 +1434,172 @@ var DockPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
707
1434
  });
708
1435
  return (_ctx, _cache) => {
709
1436
  return withDirectives((openBlock(), createElementBlock("div", {
710
- id: "vite-devtools-dock-panel",
711
1437
  ref_key: "dockPanel",
712
1438
  ref: dockPanel,
713
- class: "bg-glass rounded-lg border border-base shadow",
714
- style: normalizeStyle(iframeStyle.value)
1439
+ class: "bg-glass:75 rounded-lg border border-base shadow",
1440
+ style: normalizeStyle(panelStyle.value)
715
1441
  }, [
716
- createVNode(DockPanelResizer_default, {
717
- "is-resizing": isResizing.value,
718
- "onUpdate:isResizing": _cache[0] || (_cache[0] = ($event) => isResizing.value = $event),
719
- "is-dragging": isDragging.value,
720
- state: unref(state),
721
- entry: unref(entry)
722
- }, null, 8, [
723
- "is-resizing",
724
- "is-dragging",
725
- "state",
726
- "entry"
727
- ]),
728
- unref(entry) && iframesContainer.value ? (openBlock(), createBlock(ViewEntry_default, {
729
- key: unref(entry).id,
730
- state: unref(state),
731
- "is-dragging": isDragging.value,
732
- "is-resizing": isResizing.value,
733
- entry: unref(entry),
734
- iframes: unref(iframes),
1442
+ createVNode(_sfc_main$10, { panel: unref(context).panel }, null, 8, ["panel"]),
1443
+ unref(selected) && viewsContainer.value ? (openBlock(), createBlock(_sfc_main$3, {
1444
+ key: unref(selected).id,
1445
+ context: unref(context),
1446
+ entry: unref(selected),
1447
+ "persisted-doms": unref(persistedDoms),
735
1448
  "iframe-style": {
736
- border: "1px solid #8885",
737
- borderRadius: "0.5rem",
738
- zIndex: "2147483645"
739
- },
740
- rounded: ""
1449
+ border: "1px solid #8883",
1450
+ borderRadius: "0.5rem"
1451
+ }
741
1452
  }, null, 8, [
742
- "state",
743
- "is-dragging",
744
- "is-resizing",
1453
+ "context",
745
1454
  "entry",
746
- "iframes"
1455
+ "persisted-doms"
747
1456
  ])) : createCommentVNode("v-if", true),
748
1457
  createBaseVNode("div", {
749
- id: "vite-devtools-iframe-container",
750
- ref_key: "iframesContainer",
751
- ref: iframesContainer,
752
- class: "absolute inset-0"
1458
+ id: "vite-devtools-views-container",
1459
+ ref_key: "viewsContainer",
1460
+ ref: viewsContainer,
1461
+ class: "absolute inset-0 pointer-events-none"
753
1462
  }, null, 512)
754
- ], 4)), [[vShow, unref(entry)]]);
1463
+ ], 4)), [[vShow, unref(context).docks.selected && unref(context).docks.selected.type !== "action"]]);
755
1464
  };
756
1465
  }
757
1466
  });
758
1467
 
759
1468
  //#endregion
760
- //#region src/client/webcomponents/components/DockPanel.vue
761
- var DockPanel_default = DockPanel_vue_vue_type_script_setup_true_lang_default;
1469
+ //#region src/client/webcomponents/components/FloatingPopover.ts
1470
+ const DETECT_MARGIN = 100;
1471
+ const DEFAULT_GAP = 10;
1472
+ const FloatingPopoverComponent = defineComponent({
1473
+ name: "FloatingPopover",
1474
+ props: {
1475
+ item: {
1476
+ type: Object,
1477
+ required: false
1478
+ },
1479
+ dismissOnClickOutside: {
1480
+ type: Boolean,
1481
+ default: true
1482
+ }
1483
+ },
1484
+ emits: ["dismiss"],
1485
+ setup(props, { emit }) {
1486
+ const panel = useTemplateRef("panel");
1487
+ const el = ref(props.item?.el);
1488
+ const renderCounter = ref(0);
1489
+ const clearThrottled = useDebounceFn(() => {
1490
+ if (props.item?.el == null) el.value = void 0;
1491
+ }, 800);
1492
+ if (props.dismissOnClickOutside) onClickOutside(panel, () => {
1493
+ emit("dismiss");
1494
+ });
1495
+ watch(() => props.item, (value) => {
1496
+ if (value) if (el.value !== value.el) el.value = value.el;
1497
+ else renderCounter.value++;
1498
+ else clearThrottled();
1499
+ });
1500
+ let previousContent;
1501
+ return () => {
1502
+ renderCounter.value;
1503
+ if (!el.value) return null;
1504
+ const rect = el.value.getBoundingClientRect();
1505
+ let align = "bottom";
1506
+ const vw = window.innerWidth;
1507
+ const vh = window.innerHeight;
1508
+ if (rect.left < DETECT_MARGIN) align = "right";
1509
+ else if (rect.left + rect.width > vw - DETECT_MARGIN) align = "left";
1510
+ else if (rect.top < DETECT_MARGIN) align = "bottom";
1511
+ else if (rect.top + rect.height > vh - DETECT_MARGIN) align = "top";
1512
+ let style = {};
1513
+ const gap = props.item?.gap ?? DEFAULT_GAP;
1514
+ switch (align) {
1515
+ case "bottom":
1516
+ style = {
1517
+ left: `${rect.left + rect.width / 2}px`,
1518
+ top: `${rect.top + rect.height + gap}px`,
1519
+ transform: "translateX(-50%)"
1520
+ };
1521
+ break;
1522
+ case "top":
1523
+ style = {
1524
+ left: `${rect.left + rect.width / 2}px`,
1525
+ bottom: `${vh - rect.top + gap}px`,
1526
+ transform: "translateX(-50%)"
1527
+ };
1528
+ break;
1529
+ case "left":
1530
+ style = {
1531
+ right: `${vw - rect.left + gap}px`,
1532
+ top: `${rect.top + rect.height / 2}px`,
1533
+ transform: "translateY(-50%)"
1534
+ };
1535
+ break;
1536
+ case "right":
1537
+ style = {
1538
+ left: `${rect.left + rect.width + gap}px`,
1539
+ top: `${rect.top + rect.height / 2}px`,
1540
+ transform: "translateY(-50%)"
1541
+ };
1542
+ break;
1543
+ }
1544
+ const content = (typeof props.item?.content === "string" ? h("span", props.item?.content) : props.item?.content()) ?? previousContent;
1545
+ previousContent = content;
1546
+ return h("div", {
1547
+ ref: "panel",
1548
+ class: ["fixed z-floating-tooltip text-xs transition-all duration-300 w-max bg-glass border border-base rounded px2 p1", props.item ? "op100" : "op0 pointer-events-none"],
1549
+ style
1550
+ }, content);
1551
+ };
1552
+ }
1553
+ });
762
1554
 
763
1555
  //#endregion
764
- //#region src/client/webcomponents/components/DockEmbedded.vue?vue&type=script&setup=true&lang.ts
765
- var DockEmbedded_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
1556
+ //#region src/client/webcomponents/components/FloatingElements.vue
1557
+ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
1558
+ __name: "FloatingElements",
1559
+ setup(__props) {
1560
+ const tooltip = useFloatingTooltip();
1561
+ const docksOverflowPanel = useDocksOverflowPanel();
1562
+ return (_ctx, _cache) => {
1563
+ return openBlock(), createElementBlock(Fragment, null, [createVNode(unref(FloatingPopoverComponent), {
1564
+ item: unref(docksOverflowPanel),
1565
+ onDismiss: _cache[0] || (_cache[0] = () => unref(setDocksOverflowPanel)(null))
1566
+ }, null, 8, ["item"]), createVNode(unref(FloatingPopoverComponent), { item: unref(tooltip) }, null, 8, ["item"])], 64);
1567
+ };
1568
+ }
1569
+ });
1570
+
1571
+ //#endregion
1572
+ //#region src/client/webcomponents/components/DockEmbedded.vue
1573
+ const _sfc_main = /* @__PURE__ */ defineComponent({
766
1574
  __name: "DockEmbedded",
767
- props: {
768
- state: {},
769
- docks: {}
770
- },
1575
+ props: { context: {} },
771
1576
  setup(__props) {
772
1577
  return (_ctx, _cache) => {
773
- return openBlock(), createBlock(Dock_default, {
774
- state: __props.state,
775
- docks: __props.docks
776
- }, {
777
- default: withCtx(({ dockEl, entry, panelMargins }) => [createVNode(DockPanel_default, {
1578
+ return openBlock(), createElementBlock(Fragment, null, [createVNode(_sfc_main$11, { context: __props.context }, {
1579
+ default: withCtx(({ dockEl, panelMargins, selected }) => [createVNode(_sfc_main$2, {
1580
+ context: __props.context,
1581
+ selected,
778
1582
  "dock-el": dockEl,
779
- state: __props.state,
780
- "panel-margins": panelMargins,
781
- entry
1583
+ "panel-margins": panelMargins
782
1584
  }, null, 8, [
1585
+ "context",
1586
+ "selected",
783
1587
  "dock-el",
784
- "state",
785
- "panel-margins",
786
- "entry"
1588
+ "panel-margins"
787
1589
  ])]),
788
1590
  _: 1
789
- }, 8, ["state", "docks"]);
1591
+ }, 8, ["context"]), createVNode(_sfc_main$1)], 64);
790
1592
  };
791
1593
  }
792
1594
  });
793
1595
 
794
- //#endregion
795
- //#region src/client/webcomponents/components/DockEmbedded.vue
796
- var DockEmbedded_default = DockEmbedded_vue_vue_type_script_setup_true_lang_default;
797
-
798
1596
  //#endregion
799
1597
  //#region src/client/webcomponents/components/DockEmbedded.ts
800
- const DockEmbedded = defineCustomElement(DockEmbedded_default, {
1598
+ const DockEmbedded = defineCustomElement(_sfc_main, {
801
1599
  shadowRoot: true,
802
1600
  styles: [css_default]
803
1601
  });
804
1602
  customElements.define("vite-devtools-dock-embedded", DockEmbedded);
805
1603
 
806
1604
  //#endregion
807
- export { DockEmbedded, IframeHolder, IframeManager };
1605
+ export { DEFAULT_DOCK_PANEL_STORE, DockEmbedded, PersistedDomHolder, PersistedDomViewsManager, createDockEntryState, sharedStateToRef, useDocksEntries };