@visulima/dev-toolbar 1.0.0-alpha.4 → 1.0.0-alpha.6
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.
- package/CHANGELOG.md +89 -0
- package/LICENSE.md +109 -2
- package/bin/mcp.js +29 -0
- package/dist/apps/a11y/a11y-app.d.ts +0 -1
- package/dist/apps/a11y/a11y-tooltip.d.ts +0 -1
- package/dist/apps/a11y/index.js +21 -2
- package/dist/apps/annotations/annotations-app.d.ts +4 -0
- package/dist/apps/annotations/index.d.ts +3 -0
- package/dist/apps/annotations/index.js +18 -0
- package/dist/apps/assets/assets-app.d.ts +4 -0
- package/dist/apps/assets/index.d.ts +3 -0
- package/dist/apps/assets/index.js +16 -0
- package/dist/apps/inspector/a11y-capture.d.ts +12 -0
- package/dist/apps/inspector/annotation-overlay.d.ts +55 -0
- package/dist/apps/inspector/annotation-settings.d.ts +33 -0
- package/dist/apps/inspector/element-utils.d.ts +115 -0
- package/dist/apps/inspector/freeze-animations.d.ts +22 -0
- package/dist/apps/inspector/index.js +30 -1
- package/dist/apps/inspector/inspector-app.d.ts +4 -2
- package/dist/apps/inspector/rulers.d.ts +14 -0
- package/dist/apps/inspector/theme-palette.d.ts +34 -0
- package/dist/apps/module-graph/index.js +20 -1
- package/dist/apps/module-graph/module-graph-app.d.ts +0 -1
- package/dist/apps/performance/index.js +17 -1
- package/dist/apps/performance/performance-app.d.ts +0 -1
- package/dist/apps/performance/performance-tooltip.d.ts +0 -1
- package/dist/apps/seo/index.js +17 -1
- package/dist/apps/seo/seo-app.d.ts +0 -1
- package/dist/apps/settings/index.js +17 -1
- package/dist/apps/tailwind/index.js +2 -2
- package/dist/apps/tailwind/tailwind-app.d.ts +0 -1
- package/dist/apps/timeline/index.js +18 -1
- package/dist/apps/timeline/timeline-app.d.ts +0 -1
- package/dist/apps/vite-config/index.js +16 -1
- package/dist/apps/vite-config/vite-config-app.d.ts +0 -1
- package/dist/client/overlay.js +1 -1
- package/dist/index.js +1 -1
- package/dist/mcp/server.d.ts +12 -0
- package/dist/mcp/server.js +1 -0
- package/dist/packem_chunks/inject-source.js +9 -1
- package/dist/packem_shared/Alert-D2CvX4fw.js +1 -0
- package/dist/packem_shared/Badge-BEgU04nl.js +1 -0
- package/dist/packem_shared/Button-Bkx66Co7.js +1 -0
- package/dist/packem_shared/Card-CJa4vHVc.js +1 -0
- package/dist/packem_shared/Icon-B6UHkC0o.js +1 -0
- package/dist/packem_shared/Input-Cs6aduTi.js +1 -0
- package/dist/packem_shared/Label-CgCFOMDc.js +1 -0
- package/dist/packem_shared/Popover-DzH5lAc9.js +1 -0
- package/dist/packem_shared/Progress-DN6zn-0l.js +1 -0
- package/dist/packem_shared/Select-C0CQOOqZ.js +1 -0
- package/dist/packem_shared/Separator-D38mKeZv.js +1 -0
- package/dist/packem_shared/Skeleton-Dv-tcA1P.js +1 -0
- package/dist/packem_shared/Switch-C3NTpeoR.js +1 -0
- package/dist/packem_shared/Tabs-SuFWbB6d.js +1 -0
- package/dist/packem_shared/Textarea-Yfg3dLZi.js +1 -0
- package/dist/packem_shared/Tooltip-BHmzUaxu.js +1 -0
- package/dist/packem_shared/annotation-settings-DOyUbJ_T.js +1 -0
- package/dist/packem_shared/annotation-store-bLQRYMaI.js +1 -0
- package/dist/packem_shared/clsx-wGlvpUfw.js +1 -0
- package/dist/packem_shared/createServerRPCContext-CJ6F87o_.js +1 -0
- package/dist/packem_shared/sharedToolbarStylesheet-CaTdYhVe.js +2 -0
- package/dist/packem_shared/use-frame-state-CxrlPUM5.js +1 -0
- package/dist/packem_shared/use-theme-zpm4zmqP.js +1 -0
- package/dist/rpc/functions/annotations.d.ts +28 -0
- package/dist/rpc/functions/assets.d.ts +16 -0
- package/dist/rpc/functions/vite-config.d.ts +76 -2
- package/dist/store/annotation-store.d.ts +41 -0
- package/dist/toolbar/components/app-button.d.ts +0 -1
- package/dist/toolbar/components/first-visit-hint.d.ts +0 -1
- package/dist/toolbar/components/toolbar-bar.d.ts +2 -7
- package/dist/toolbar/components/toolbar-container.d.ts +1 -7
- package/dist/toolbar/hooks/use-frame-state.d.ts +11 -1
- package/dist/toolbar/index.d.ts +0 -1
- package/dist/toolbar/index.js +3 -3
- package/dist/types/annotations.d.ts +156 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/rpc.d.ts +41 -1
- package/dist/ui/components/alert.d.ts +0 -1
- package/dist/ui/components/badge.d.ts +0 -1
- package/dist/ui/components/button.d.ts +0 -1
- package/dist/ui/components/card.d.ts +0 -1
- package/dist/ui/components/icon.d.ts +0 -1
- package/dist/ui/components/input.d.ts +0 -1
- package/dist/ui/components/label.d.ts +0 -1
- package/dist/ui/components/progress.d.ts +0 -1
- package/dist/ui/components/select.d.ts +54 -0
- package/dist/ui/components/separator.d.ts +0 -1
- package/dist/ui/components/skeleton.d.ts +0 -1
- package/dist/ui/components/switch.d.ts +0 -1
- package/dist/ui/components/tabs.d.ts +0 -1
- package/dist/ui/components/textarea.d.ts +0 -1
- package/dist/ui/index.d.ts +2 -1
- package/dist/ui/index.js +1 -1
- package/dist/vite-plugin.d.ts +6 -1
- package/dist/vite-plugin.js +5 -2
- package/package.json +36 -14
- package/dist/apps/more/index.d.ts +0 -3
- package/dist/apps/more/index.js +0 -2
- package/dist/apps/more/more-app.d.ts +0 -5
- package/dist/packem_shared/Alert-H-x1JuZ0.js +0 -1
- package/dist/packem_shared/Badge-C30mDKKG.js +0 -1
- package/dist/packem_shared/Button-DODNCTPZ.js +0 -1
- package/dist/packem_shared/Card-DdI7Wn3t.js +0 -1
- package/dist/packem_shared/Icon-DWFLZkwW.js +0 -1
- package/dist/packem_shared/Input-GfbOwAkK.js +0 -1
- package/dist/packem_shared/Label-Bzi47aUf.js +0 -1
- package/dist/packem_shared/Popover-CLt7YhUF.js +0 -1
- package/dist/packem_shared/Progress-vGfFpxRn.js +0 -1
- package/dist/packem_shared/Separator-DQGeJPQg.js +0 -1
- package/dist/packem_shared/Skeleton-BYXau6jM.js +0 -1
- package/dist/packem_shared/Switch-BeC78S_T.js +0 -1
- package/dist/packem_shared/Tabs-CXERaeAp.js +0 -1
- package/dist/packem_shared/Textarea-DvbSX13V.js +0 -1
- package/dist/packem_shared/Tooltip-tlBN-NdK.js +0 -1
- package/dist/packem_shared/cn-DWLJYh3h.js +0 -1
- package/dist/packem_shared/createServerRPCContext-CEm1Ymkn.js +0 -1
- package/dist/packem_shared/sharedToolbarStylesheet-DOV-Jwcm.js +0 -2
- package/dist/packem_shared/use-theme-BOw3dPpY.js +0 -1
- package/dist/utils/cn.d.ts +0 -8
|
@@ -16,6 +16,10 @@ interface DevToolsFrameState {
|
|
|
16
16
|
* Close panel on outside click
|
|
17
17
|
*/
|
|
18
18
|
closeOnOutsideClick: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Preferred editor for "Open in editor" (empty string = auto-detect)
|
|
21
|
+
*/
|
|
22
|
+
editor: string;
|
|
19
23
|
/**
|
|
20
24
|
* Panel height as viewport height percentage
|
|
21
25
|
*/
|
|
@@ -96,5 +100,11 @@ interface UseFrameStateReturn {
|
|
|
96
100
|
* fields stay in sync regardless of how many times the hook is called.
|
|
97
101
|
*/
|
|
98
102
|
declare const useFrameState: () => UseFrameStateReturn;
|
|
103
|
+
/**
|
|
104
|
+
* Returns the currently selected editor preference (empty string = auto-detect).
|
|
105
|
+
* Reads from the singleton shared state, so always reflects the latest value
|
|
106
|
+
* without re-reading localStorage.
|
|
107
|
+
*/
|
|
108
|
+
declare const getEditorPreference: () => string | undefined;
|
|
99
109
|
export type { DevToolsFrameState, KeyBindings, UseFrameStateReturn };
|
|
100
|
-
export { DEFAULT_KEYBINDINGS, DEFAULT_STATE, useFrameState };
|
|
110
|
+
export { DEFAULT_KEYBINDINGS, DEFAULT_STATE, getEditorPreference, useFrameState };
|
package/dist/toolbar/index.d.ts
CHANGED
package/dist/toolbar/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
var Xe=Object.defineProperty;var N=(e,t)=>Xe(e,"name",{value:t,configurable:!0});import{createContext as Fe,render as Pe}from"preact";import{createClientRPCContext as $e}from"../packem_shared/createClientRPCContext-DgRxrllw.js";import{updateSettings as Je,loadSettings as Ve}from"../packem_shared/loadSettings-hvjR4fcS.js";import{getGlobalHook as Ue,setupGlobalHook as Qe}from"../packem_shared/setupGlobalHook-CCf9Logv.js";import ue from"../packem_shared/sharedToolbarStylesheet-DOV-Jwcm.js";import{jsx as i,jsxs as g,Fragment as ze}from"preact/jsx-runtime";import{m as qe}from"../packem_shared/store-DaUtLjf3.js";import{addHookName as l}from"preact/devtools";import{useContext as Ke,useEffect as L,useMemo as re,useState as E,useRef as m,useCallback as pe,useLayoutEffect as et}from"preact/hooks";import u from"../packem_shared/cn-DWLJYh3h.js";import Le from"lucide-static/icons/chevron-right.svg?data-uri&encoding=css";import tt from"lucide-static/icons/layers.svg?data-uri&encoding=css";import rt from"lucide-static/icons/maximize.svg?data-uri&encoding=css";import it from"lucide-static/icons/maximize-2.svg?data-uri&encoding=css";import nt from"lucide-static/icons/minimize.svg?data-uri&encoding=css";import ot from"lucide-static/icons/minimize-2.svg?data-uri&encoding=css";import at from"lucide-static/icons/picture-in-picture-2.svg?data-uri&encoding=css";import Ee from"lucide-static/icons/x.svg?data-uri&encoding=css";import te from"../packem_shared/Icon-DWFLZkwW.js";import{h as Te,_ as He}from"../packem_shared/use-theme-BOw3dPpY.js";import st from"lucide-static/icons/pin.svg?data-uri&encoding=css";import lt from"lucide-static/icons/pin-off.svg?data-uri&encoding=css";import ct from"lucide-static/icons/more-horizontal.svg?data-uri&encoding=css";import pt from"lucide-static/icons/alert-triangle.svg?data-uri&encoding=css";var dt=Object.defineProperty,ut=N((e,t)=>dt(e,"name",{value:t,configurable:!0}),"t$4");const be=ut(()=>{const e=$e();return{rpc:new Proxy({},{get(t,r){return(...o)=>e.callServer(r,...o)}})}},"createServerHelpers");var ht=Object.defineProperty,gt=N((e,t)=>ht(e,"name",{value:t,configurable:!0}),"n$3");let ft=class{static{N(this,"p")}static{gt(this,"AppManager")}apps=new Map;activeAppId=void 0;initializedApps=new Set;appCanvases=new Map;registerApp(t,r=!1){this.apps.has(t.id)&&(this.initializedApps.delete(t.id),this.appCanvases.delete(t.id),this.activeAppId===t.id&&(this.activeAppId=void 0));const o=new EventTarget,a={...t,active:!1,builtIn:r,eventTarget:o,notification:{state:!1},status:"ready"};this.apps.set(t.id,a)}async unregisterApp(t){const r=this.apps.get(t);if(r?.destroy&&this.initializedApps.has(t)){const o=this.appCanvases.get(t);if(o)try{await r.destroy(o.shadowRoot)}catch(a){console.error(`[dev-toolbar] destroy() failed for app ${t}:`,a)}}this.apps.delete(t),this.initializedApps.delete(t),this.appCanvases.delete(t),this.activeAppId===t&&(this.activeAppId=void 0)}getApp(t){return this.apps.get(t)}getAllApps(){return[...this.apps.values()]}getActiveApp(){if(this.activeAppId)return this.apps.get(this.activeAppId)}async toggleApp(t){const r=this.apps.get(t);if(!r)return!1;if(r.onClick??r.onDeactivate){const o=r.active;return r.active=!o,!o&&r.onClick?await r.onClick():o&&r.onDeactivate&&await r.onDeactivate(),!0}return r.active?await this.closeApp(t):this.activeAppId&&!await this.closeApp(this.activeAppId)?!1:await this.openApp(t)}setAppActive(t,r){const o=this.apps.get(t);o&&(o.active=r)}isAppInitialized(t){return this.initializedApps.has(t)}markAppInitialized(t){this.initializedApps.add(t)}async openApp(t){const r=this.apps.get(t);if(!r)return!1;if(r.active=!0,r.status="loading",this.activeAppId=t,r.init&&!this.isAppInitialized(t))try{const o=this.getAppCanvas(t);if(o){const a=be(),n=r.init(o.shadowRoot,r.eventTarget,a);n&&typeof n.then=="function"&&await n,this.markAppInitialized(t),r.status="ready"}else r.status="pending"}catch(o){return console.error(`[dev-toolbar] Failed to init app ${t}:`,o),r.status="error",r.active=!1,this.activeAppId=void 0,!1}else r.status="ready";return!0}async closeApp(t){const r=this.apps.get(t);if(!r||!r.active)return!1;if(r.beforeTogglingOff){const o=this.getAppCanvas(t);if(o)try{const a=r.beforeTogglingOff(o.shadowRoot);if(!(a&&typeof a.then=="function"?await a:a))return!1}catch(a){console.error(`[dev-toolbar] beforeTogglingOff() threw for app ${t}:`,a)}}return r.active=!1,this.activeAppId===t&&(this.activeAppId=void 0),!0}setNotification(t,r,o){const a=this.apps.get(t);a&&(a.notification={level:o,state:r})}clearNotification(t){const r=this.apps.get(t);r&&(r.notification={state:!1})}getAppCanvas(t){return this.appCanvases.get(t)}setAppCanvas(t,r){this.appCanvases.set(t,r)}};var mt=Object.defineProperty,bt=N((e,t)=>mt(e,"name",{value:t,configurable:!0}),"t$3");const We=Fe(void 0),Re=bt(()=>{const e=Ke(We);if(!e)throw new Error("useToolbarContext must be used within ToolbarContext provider");return e},"useToolbarContext");var vt=Object.defineProperty,yt=N((e,t)=>vt(e,"name",{value:t,configurable:!0}),"t$2");const je=yt(()=>{const e=Re();return{activeAppId:e.activeAppId,apps:e.apps,clearNotification:e.clearNotification,registerApp:e.registerApp,setNotification:e.setNotification,toggleApp:e.toggleApp,unregisterApp:e.unregisterApp}},"useApps");var xt=Object.defineProperty,fe=N((e,t)=>xt(e,"name",{value:t,configurable:!0}),"s");const wt=fe((e,t)=>{const r=t.split("+"),o=r.at(-1)??"",a=r.includes("Alt"),n=r.includes("Shift"),c=r.includes("Control")||r.includes("Ctrl"),d=r.includes("Meta")||r.includes("Cmd");return(e.key===o||e.code===`Key${o.toUpperCase()}`)&&e.altKey===a&&e.shiftKey===n&&e.ctrlKey===c&&e.metaKey===d},"matchesBinding"),It=fe(()=>{const{state:e,updateState:t}=Te(),r=fe((n,c)=>{const d=c??!e.open;t({open:d,...d?{}:{viewMode:"default"}})},"togglePanelVisible"),o=fe(()=>{e.open&&t({open:!1,viewMode:"default"})},"closePanel");L(()=>{const n=e.keybindings?.toggle??"Alt+Shift+D",c=fe(d=>{wt(d,n)&&r()},"handleKeyDown");return globalThis.window?.addEventListener("keydown",c),()=>{globalThis.window?.removeEventListener("keydown",c)}},[e.open,e.keybindings?.toggle]);const a=l(re(()=>e.open,[e.open]),"panelVisibleValue: boolean");return{closePanel:o,panelVisible:a,togglePanelVisible:r}},"usePanelVisible");var At=Object.defineProperty,De=N((e,t)=>At(e,"name",{value:t,configurable:!0}),"e");const ve=De((e,t,r)=>Math.min(Math.max(e,t),r),"clamp");De(()=>navigator.userAgent.includes("Safari")&&!navigator.userAgent.includes("Chrome"),"checkIsSafari");const ye=De(e=>typeof e=="string"?e.endsWith("px")?Number(e.slice(0,-2)):Number(e):e,"pixelToNumber");var Mt=Object.defineProperty,ee=N((e,t)=>Mt(e,"name",{value:t,configurable:!0}),"h$1");const _e=ee(e=>e<5?0:e>95?100:Math.abs(e-50)<2?50:e,"snapToPoints"),Tt=ee(()=>{if(globalThis.window===void 0)return{bottom:0,left:0,right:0,top:0};const e=getComputedStyle(document.documentElement);return{bottom:ye(e.getPropertyValue("env(safe-area-inset-bottom)")||"0"),left:ye(e.getPropertyValue("env(safe-area-inset-left)")||"0"),right:ye(e.getPropertyValue("env(safe-area-inset-right)")||"0"),top:ye(e.getPropertyValue("env(safe-area-inset-top)")||"0")}},"getSafeAreaInsets"),kt=ee(()=>{const[e,t]=l(E(()=>({height:globalThis.window?.innerHeight??1080,width:globalThis.window?.innerWidth??1920})),"size");return L(()=>{const r=ee(()=>{t({height:globalThis.window?.innerHeight??1080,width:globalThis.window?.innerWidth??1920})},"updateSize");return r(),globalThis.window?.addEventListener("resize",r),()=>{globalThis.window?.removeEventListener("resize",r)}},[]),e},"useWindowSize"),Ct=ee(e=>{const{state:t,updateState:r}=Te(),{height:o,width:a}=kt(),[n,c]=l(E(!1),"isHovering"),[d,h]=l(E(!1),"isDragging"),[W,I]=l(E(!1),"isViteOverlayOpen"),Y=l(m({x:0,y:0}),"draggingOffsetRef"),A=l(m({x:0,y:0}),"mousePositionRef"),P=l(m(void 0),"timerRef"),S=l(m(void 0),"capturedPointerIdRef"),$=l(m(!1),"isDraggingRef"),j=l(m(a),"windowWidthRef"),V=l(m(o),"windowHeightRef"),G=l(m(r),"updateStateRef");L(()=>{j.current=a,V.current=o},[a,o]),L(()=>{G.current=r},[r]);const[y,F]=l(E(()=>({bottom:10,left:10,right:10,top:10})),"panelMargins");L(()=>{const v=Tt();F({bottom:v.bottom+10,left:v.left+10,right:v.right+10,top:v.top+10})},[]),L(()=>{const v=ee(()=>{const D=globalThis.__v_o__current;if(D?.parentNode){const s=D.shadowRoot?.querySelector("#__v_o__root");I(!!s&&!s.classList.contains("hidden"))}else I(!1)},"check"),C=setInterval(v,300);return v(),()=>clearInterval(C)},[]);const Q=pe(v=>{v.preventDefault(),v.stopPropagation(),h(!0),$.current=!0;const C=e.current;if(C){const{height:D,left:s,top:p,width:f}=C.getBoundingClientRect();Y.current={x:v.clientX-s-f/2,y:v.clientY-p-D/2};const x=v.target;try{x&&x.setPointerCapture?(x.setPointerCapture(v.pointerId),S.current=v.pointerId):C.setPointerCapture&&(C.setPointerCapture(v.pointerId),S.current=v.pointerId)}catch(z){console.warn("Failed to capture pointer:",z)}document.body.style.cursor="grabbing",document.body.style.userSelect="none"}},[e]),O=pe(()=>{c(!0),!(t.minimizePanelInactive<0)&&(P.current&&clearTimeout(P.current),P.current=setTimeout(()=>{c(!1)},t.minimizePanelInactive||5e3))},[t.minimizePanelInactive]);L(()=>{O()},[O]),L(()=>{const v=ee(()=>{if(S.current!==void 0){try{const x=e.current;x&&S.current!==void 0&&x.releasePointerCapture(S.current)}catch{}S.current=void 0}},"releaseCapture"),C=ee(()=>{$.current&&(h(!1),$.current=!1,document.body.style.cursor="",document.body.style.userSelect="",v())},"finishDrag"),D=ee(x=>{C()},"handlePointerUp"),s=ee(x=>{C()},"handlePointerCancel"),p=ee(()=>{$.current&&(h(!1),$.current=!1,S.current=void 0,document.body.style.cursor="",document.body.style.userSelect="")},"handleLostPointerCapture"),f=ee(x=>{if(!$.current)return;x.preventDefault();const z=j.current,U=V.current,X=z/2,w=U/2,ae=x.clientX,ne=x.clientY,K=ae-Y.current.x,oe=ne-Y.current.y;A.current={x:K,y:oe};const se=Math.max(0,Math.min(ae,z)),ke=Math.max(0,Math.min(ne,U)),b=Math.atan2(ke-w,se-X),R=70,k=Math.atan2(0-w+R,0-X),B=Math.atan2(0-w+R,z-X),le=Math.atan2(U-R-w,0-X),he=Math.atan2(U-R-w,z-X);let ge;b>=k&&b<=B?ge="top":b>=B&&b<=he?ge="right":b>=he&&b<=le?ge="bottom":ge="left";const Ye=Math.max(0,Math.min(100,K/z*100)),Oe=Math.max(0,Math.min(100,oe/U*100));G.current({left:_e(Ye),position:ge,top:_e(Oe)})},"handlePointerMove");return document.addEventListener("pointermove",f,{capture:!0,passive:!1}),document.addEventListener("pointerup",D,{capture:!0}),document.addEventListener("pointercancel",s,{capture:!0}),document.addEventListener("lostpointercapture",p,{capture:!0}),()=>{document.removeEventListener("pointermove",f,{capture:!0}),document.removeEventListener("pointerup",D,{capture:!0}),document.removeEventListener("pointercancel",s,{capture:!0}),document.removeEventListener("lostpointercapture",p,{capture:!0})}},[]);const T=l(re(()=>t.position==="left"||t.position==="right",[t.position]),"isVertical"),M=l(re(()=>{if(t.minimizePanelInactive<0)return!1;if(t.minimizePanelInactive===0)return!0;const v=globalThis.window!==void 0&&("ontouchstart"in globalThis.window||(globalThis.navigator?.maxTouchPoints??0)>0);return!d&&!t.open&&!n&&!v&&t.minimizePanelInactive>0&&!W},[d,t.open,t.minimizePanelInactive,n,W]),"isHidden"),Z=l(re(()=>{const v=e.current,C=(v?.clientWidth??0)/2,D=(v?.clientHeight??0)/2,s=T?D:C,p=T?C:D,f=t.left*a/100,x=t.top*o/100;switch(t.position){case"left":return{left:y.left+s-(M?30:0),top:ve(x,p+y.top,o-p-y.bottom)};case"right":return{left:a-y.right-s+(M?15:0)-(M?0:10),top:ve(x,p+y.top,o-p-y.bottom)};case"top":return{left:ve(f,s+y.left,a-s-y.right),top:y.top+p-(M?30:0)};default:return{left:ve(f,s+y.left,a-s-y.right),top:o-y.bottom-p+(M?30:0)}}},[t.left,t.open,t.position,t.top,o,a,y,e,M,T]),"anchorPos"),ie=l(re(()=>({left:`${Z.left}px`,top:`${Z.top}px`,transition:d?"none":"left 0.3s ease, top 0.3s ease"}),[Z,d]),"anchorStyle"),q=l(re(()=>{const v=e.current,C=(v?.clientWidth??0)/2,D=(v?.clientHeight??0)/2,s=T?D:C,p=T?C:D,f={bottom:y.bottom+p,left:y.left+s,right:y.right+s,top:y.top+p},x=f.left+f.right,z=f.top+f.bottom,U=a-x,X=o-z,w={height:`min(${t.height}vh, calc(100vh - ${z}px))`,pointerEvents:d?"none":"auto",width:`min(${t.width}vw, calc(100vw - ${x}px))`,zIndex:"-1"},ae=Z,ne=Math.min(U,t.width*a/100),K=Math.min(X,t.height*o/100),oe=ae?.left??0,se=ae?.top??0;switch(t.position){case"bottom":case"top":{w.left="0",w.transform="translate(-50%, 0)",oe-f.left<ne/2?w.left=`${ne/2-oe+f.left}px`:a-oe-f.right<ne/2&&(w.left=`${a-oe-ne/2-f.right}px`);break}default:{w.top="0",w.transform="translate(0, -50%)",se-f.top<K/2?w.top=`${K/2-se+f.top}px`:o-se-f.bottom<K/2&&(w.top=`${o-se-K/2-f.bottom}px`);break}}switch(t.position){case"left":{w.left="0";break}case"right":{w.right="0";break}case"top":{w.top="0";break}default:{w.bottom="0";break}}return w},[Z,d,y,t.height,t.position,t.width,o,a,e,T]),"iframeStyle"),J=l(re(()=>{const v={transform:T?"translate(-50%, -50%) rotate(90deg)":"translate(-50%, -50%)"};return d&&(v.transition="none !important"),v},[d,T]),"panelStyle");return{anchorStyle:ie,bringUp:O,iframeStyle:q,isDragging:d,isHidden:M,isVertical:T,onPointerDown:Q,panelStyle:J}},"usePosition");var Pt=Object.defineProperty,xe=N((e,t)=>Pt(e,"name",{value:t,configurable:!0}),"t$1");const zt=xe(({app:e})=>{const{toggleApp:t}=je(),{isVisible:r,setHoveredApp:o}=Re(),a=l(m(null),"buttonRef"),n=xe(()=>{o(void 0),t(e.id).catch(h=>{console.error(`[dev-toolbar] Failed to toggle app ${e.id}:`,h)})},"handleClick"),c=xe(()=>{!e.tooltip||r||o(e,a.current?.getBoundingClientRect())},"handleMouseEnter"),d=xe(()=>{e.tooltip&&o(void 0)},"handleMouseLeave");return i("button",{"aria-label":e.name,class:u("relative flex justify-center items-center","border-0","whitespace-nowrap no-underline p-0 m-0","cursor-pointer","bg-transparent text-muted-foreground","transition-all duration-150","hover:bg-primary/8 hover:text-primary","active:scale-[0.94]",e.active&&"bg-primary/12 text-primary","group-data-[vertical]/panel:rotate-[-90deg]"),"data-app-id":e.id,onClick:n,onMouseEnter:c,onMouseLeave:d,ref:a,title:e.tooltip?void 0:e.name,type:"button",children:g("div",{class:"relative size-6 select-none flex items-center justify-center",children:[i("div",{class:"size-6 flex items-center justify-center [&_svg]:size-4.5",dangerouslySetInnerHTML:{__html:e.icon}}),e.notification.state&&i("span",{class:u("absolute -top-1 -right-1 size-1.5 rounded-full border border-background",e.notification.level==="error"&&"bg-destructive",e.notification.level==="warning"&&"bg-warning",(!e.notification.level||e.notification.level==="info")&&"bg-info"),"data-level":e.notification.level||"info"})]})})},"AppButton");var St=Object.defineProperty,_=N((e,t)=>St(e,"name",{value:t,configurable:!0}),"a");const Ze=_(({app:e})=>{const t=l(m(null),"contentRef"),r=l(m(!1),"initializedRef"),o=l(m(be()),"helpersRef");return L(()=>{if(!t.current||r.current||e.component)return;const a=t.current;if(e.init){const n=document.createElement("div");n.style.cssText="width:100%;height:100%;",a.append(n);const c=n.attachShadow({mode:"open"});ue&&(c.adoptedStyleSheets=[ue]);const d=be(),h=e.init(c,e.eventTarget,d);return h&&typeof h.then=="function"?h.then(()=>{r.current=!0}).catch(W=>{console.error(`[dev-toolbar] Failed to init app ${e.id}:`,W)}):r.current=!0,()=>{for(;a.firstChild;)a.firstChild.remove();r.current=!1}}},[e]),e.component?i(e.component,{eventTarget:e.eventTarget,helpers:o.current}):i("div",{class:"w-full h-full",ref:t})},"AppContent"),Ge=_(e=>e==="error"?"bg-destructive":e==="warning"?"bg-warning":"bg-info","getNotificationColor"),Rt=_(({apps:e,initialActiveAppId:t,onClose:r})=>{const[o,a]=l(E(t),"activeAppId"),[n,c]=l(E(!1),"sidebarCollapsed"),d=l(re(()=>e.find(h=>h.id===o),[e,o]),"activeApp");return g("div",{class:"flex flex-row w-full h-full bg-background font-mono antialiased text-foreground",children:[g("nav",{"aria-label":"DevTools apps",class:u("flex flex-col shrink-0 bg-accent border-r border-border/60","transition-[width] duration-300 ease-[cubic-bezier(0.4,0,0.2,1)]",n?"w-12.5":"w-62.5"),children:[i("div",{class:u("flex items-center shrink-0 border-b border-border/50 h-12",n?"justify-center px-2":"px-3"),children:n?i("span",{"aria-hidden":"true",class:"text-primary font-black text-[0.8rem] select-none",children:"V"}):g("span",{class:"text-[0.6rem] font-bold uppercase tracking-[0.14em] text-muted-foreground select-none",children:[i("span",{"aria-hidden":"true",class:"text-primary/60 mr-1",children:"//"}),"DevTools"]})}),i("div",{class:"flex flex-col flex-1 overflow-y-auto p-2 gap-1 scrollbar-thin-border",children:e.filter(h=>h.component??h.init).map(h=>g("div",{class:"relative group/nav-item",children:[g("button",{"aria-label":h.name,"aria-pressed":o===h.id,class:u("relative flex items-center w-full h-10","border-0 border-l-2 cursor-pointer","transition-all duration-150",n?"justify-center px-0":"gap-2.5 px-3",o===h.id?"border-primary bg-primary/8 text-foreground":"border-transparent bg-transparent text-muted-foreground hover:bg-foreground/6 hover:text-foreground"),onClick:_(()=>a(h.id),"onClick"),type:"button",children:[h.icon?i("span",{class:u("size-4 shrink-0 flex items-center justify-center [&_svg]:size-4",o===h.id?"opacity-100":"opacity-65 group-hover/nav-item:opacity-100"),dangerouslySetInnerHTML:{__html:h.icon}}):i("span",{class:"size-4.5 shrink-0 flex items-center justify-center text-[0.65rem] font-bold uppercase select-none",children:h.name.slice(0,2)}),!n&&i("span",{class:"text-[0.8125rem] font-medium truncate leading-none tracking-[-0.01em]",children:h.name})]}),h.notification.state&&i("span",{"aria-hidden":"true",class:u("pointer-events-none absolute top-1.5 rounded-full",n?"right-1.5":"right-2.5","size-1.5",Ge(h.notification.level))}),n&&i("div",{class:u("absolute left-[calc(100%+0.5rem)] top-1/2 -translate-y-1/2","pointer-events-none z-50 whitespace-nowrap","opacity-0 -translate-x-1 group-hover/nav-item:opacity-100 group-hover/nav-item:translate-x-0","transition-all duration-200 ease-[cubic-bezier(0.23,1,0.32,1)]"),children:i("div",{class:"text-[0.7rem] font-medium bg-card/95 backdrop-blur-[0.625rem] text-foreground/80 px-2.5 py-1 border border-border shadow-md",children:h.name})})]},h.id))})]}),g("div",{class:"flex-1 flex flex-col min-w-0 overflow-hidden bg-accent",children:[g("div",{class:"flex items-center justify-between gap-2 pr-2 min-h-12 shrink-0",children:[g("div",{class:"flex items-center gap-3 min-w-0",children:[i("button",{"aria-label":n?"Expand sidebar":"Collapse sidebar",class:u("flex items-center justify-center size-7 shrink-0","border-0 cursor-pointer bg-transparent","text-muted-foreground hover:text-foreground hover:bg-foreground/7","transition-colors duration-150"),onClick:_(()=>c(h=>!h),"onClick"),type:"button",children:i(te,{class:u("size-3.5 transition-transform duration-300",!n&&"rotate-180"),size:14,src:Le})}),d?.icon&&i("span",{class:"size-5 flex items-center justify-center [&_svg]:size-5 shrink-0 text-foreground opacity-80",dangerouslySetInnerHTML:{__html:d.icon}}),g("span",{class:"flex items-center gap-1 text-[0.7rem] font-bold uppercase tracking-[0.06em] text-foreground truncate",children:[i("span",{"aria-hidden":"true",class:"text-primary/50 shrink-0",children:"["}),d?.name??"DevTools",i("span",{"aria-hidden":"true",class:"text-primary/50 shrink-0",children:"]"})]})]}),i("button",{"aria-label":"Close floating window",class:u("flex items-center justify-center size-8","cursor-pointer border-0 bg-transparent","text-muted-foreground hover:text-foreground hover:bg-foreground/7","transition-all duration-200 active:scale-90"),onClick:r,title:"Close floating window",type:"button",children:i(te,{size:12,src:Ee})})]}),i("div",{class:"devtools-content-scroll scrollbar-thin-border flex-1 overflow-auto min-h-0 bg-background",children:d?i(Ze,{app:d},d.id):i("div",{class:"flex flex-col items-center justify-center h-full gap-3 p-8 select-none text-muted-foreground",children:i("p",{class:"text-[0.8rem]",children:"Select a tool from the sidebar"})})})]})]})},"PipPanel"),we=20,Ie=95,Ae=_((e,t,r)=>Math.min(Math.max(e,t),r),"clamp"),jt=_(e=>{switch(e){case"bottom":return"bottom-14";case"left":return"left-14 top-4 bottom-4";case"right":return"right-14 top-4 bottom-4";case"top":return"top-14";default:return"bottom-14"}},"getPanelPositionClasses"),Dt=_(e=>{switch(e){case"bottom":return"origin-[bottom_center]";case"left":return"origin-[left_center]";case"right":return"origin-[right_center]";case"top":return"origin-[top_center]";default:return"origin-[bottom_center]"}},"getOriginClass"),_t=_((e,t)=>t?"opacity-100 scale-100":u("opacity-0 pointer-events-none scale-[0.99]",{bottom:"translate-y-2",left:"-translate-x-2",right:"translate-x-2",top:"-translate-y-2"}[e]??"translate-y-2"),"getVisibilityClasses"),Nt=_(({activeAppId:e,apps:t,onClose:r,onToggleApp:o,panelVisible:a,position:n})=>{const[c,d]=l(E(!1),"isRendered"),[h,W]=l(E(!1),"isVisible"),[I,Y]=l(E(!1),"sidebarCollapsed"),[,A]=l(E(0),"rerender"),{state:P,updateState:S}=Te(),{resolvedTheme:$}=He(),j=l(m(null),"panelDivRef"),V=l(m(!1),"isResizingRef"),G=l(m({height:P.height,width:P.width}),"dimensionsRef"),y=l(m(void 0),"enteringFromRectRef"),F=l(m(void 0),"lastDockedRectRef"),Q=l(m(!1),"previousIsFullscreenRef"),O=l(m(!1),"isExitAnimatingRef"),T=l(m(void 0),"fsTimerRef"),M=P.viewMode==="fullscreen",Z=P.viewMode==="wide",ie=globalThis.window?.documentPictureInPicture!==void 0,q=l(m(void 0),"pipWindowRef"),J=l(re(()=>{if(M)return{};const s=globalThis.window?.innerWidth??1920,p=globalThis.window?.innerHeight??1080,f=`${G.current.height/100*p}px`;return n==="left"||n==="right"?{width:`${G.current.width/100*s}px`}:{height:f,left:"50%",transform:"translateX(-50%)",width:Z?"calc(100vw - 2rem)":"min(calc(100vw - 2rem), 1280px)"}},[M,Z,n,A]),"panelSizeStyle");L(()=>{const s=_(f=>{if(!V.current||!j.current)return;const x=j.current.getBoundingClientRect(),z=window.innerWidth,U=window.innerHeight,X={...G.current};if(V.current.top){const w=Math.abs(x.bottom-f.clientY);X.height=Ae(w/U*100,we,Ie)}else if(V.current.bottom){const w=Math.abs(f.clientY-x.top);X.height=Ae(w/U*100,we,Ie)}else if(V.current.right){const w=Math.abs(f.clientX-x.left);X.width=Ae(w/z*100,we,Ie)}else if(V.current.left){const w=Math.abs(x.right-f.clientX);X.width=Ae(w/z*100,we,Ie)}G.current=X,A(w=>w+1)},"handleMouseMove"),p=_(()=>{V.current&&(S({height:G.current.height,width:G.current.width}),V.current=!1)},"handleMouseUp");return globalThis.addEventListener("mousemove",s),globalThis.addEventListener("mouseup",p),()=>{globalThis.removeEventListener("mousemove",s),globalThis.removeEventListener("mouseup",p)}},[S]),et(()=>{const s=Q.current;Q.current=M,T.current!==void 0&&(clearTimeout(T.current),T.current=void 0);const p=j.current;if(p)if(M&&!s&&y.current){const f=y.current;y.current=void 0;const x=globalThis.window?.innerWidth??0,z=globalThis.window?.innerHeight??0;p.style.transition="clip-path 0.35s cubic-bezier(0.4, 0, 0.2, 1)",p.style.clipPath=`inset(${f.top}px ${x-f.right}px ${z-f.bottom}px ${f.left}px)`,requestAnimationFrame(()=>{p.style.clipPath="inset(0px 0px 0px 0px)",T.current=setTimeout(()=>{p.style.clipPath="",p.style.transition="",T.current=void 0},380)})}else!M&&s&&!O.current&&(p.style.transition="none",p.style.clipPath="",requestAnimationFrame(()=>{p.style.transition=""}))},[M]),L(()=>{if(a){d(!0);const p=setTimeout(W,16,!0);return()=>clearTimeout(p)}W(!1);const s=setTimeout(d,220,!1);return()=>clearTimeout(s)},[a]);const v=_(async()=>{const s=globalThis.window?.documentPictureInPicture;if(s)try{const p=await s.requestWindow({height:600,width:900});if(q.current=p,ue){const x=p.document.createElement("style");x.textContent=Array.from(ue.cssRules,z=>z.cssText).join(`
|
|
2
|
-
`),p.document.head.append(x)}const f=p.document.createElement("div");f.style.cssText="width:100%;height:100%;display:flex;",$==="dark"&&(p.document.documentElement.classList.add("dark"),f.classList.add("dark")),p.document.body.style.cssText="margin:0;padding:0;height:100vh;",p.document.body.append(f),Pe(i(Rt,{apps:t,initialActiveAppId:e,onClose:_(()=>{p.close()},"onClose")}),f),S({isPip:!0}),p.addEventListener("pagehide",()=>{S({isPip:!1}),q.current=void 0})}catch(p){console.error("[dev-toolbar] PiP activation failed:",p)}},"activatePip");L(()=>{if(!a)return;const s=_(p=>{p.key==="Escape"&&r()},"handleKeyDown");return document.addEventListener("keydown",s),()=>document.removeEventListener("keydown",s)},[a,r]);const C=l(re(()=>t.find(s=>s.id===e),[t,e]),"activeApp");if(!c)return;const D=_(s=>p=>{p.preventDefault(),V.current=s},"startResize");return g(ze,{children:[i("div",{"aria-hidden":"true",class:u("fixed inset-0 z-[2147483646]","transition-opacity duration-200",h&&!M?"opacity-100 pointer-events-auto":"opacity-0 pointer-events-none"),onClick:P.closeOnOutsideClick?r:void 0,role:"presentation"}),g("div",{"aria-label":"DevTools panel","aria-modal":"true",class:u("fixed z-[2147483647] pointer-events-auto antialiased font-mono",M?"inset-0":jt(n),"bg-background overflow-hidden",M?"rounded-none border-0":"rounded-none border border-border","shadow-2xl","transition-panel",!M&&Dt(n),_t(n,h),"flex flex-row"),ref:j,role:"dialog",style:J,children:[!M&&g(ze,{children:[n!=="top"&&i("div",{"aria-hidden":"true",class:"absolute left-1.5 right-1.5 top-0 h-2.5 -mt-1 cursor-ns-resize z-10 hover:bg-foreground/10 transition-colors",onMouseDown:D({top:!0})}),n==="top"&&i("div",{"aria-hidden":"true",class:"absolute left-1.5 right-1.5 bottom-0 h-2.5 -mb-1 cursor-ns-resize z-10 hover:bg-foreground/10 transition-colors",onMouseDown:D({bottom:!0})}),n==="left"&&i("div",{"aria-hidden":"true",class:"absolute top-1.5 bottom-1.5 right-0 w-2.5 -mr-1 cursor-ew-resize z-10 hover:bg-foreground/10 transition-colors",onMouseDown:D({right:!0})}),n==="right"&&i("div",{"aria-hidden":"true",class:"absolute top-1.5 bottom-1.5 left-0 w-2.5 -ml-1 cursor-ew-resize z-10 hover:bg-foreground/10 transition-colors",onMouseDown:D({left:!0})})]}),g("nav",{"aria-label":"DevTools apps",class:u("flex flex-col shrink-0 overflow-hidden","transition-[width] duration-300 ease-[cubic-bezier(0.4,0,0.2,1)]","bg-accent border-r border-border/60",I?"w-12.5":"w-62.5"),children:[i("div",{class:u("flex items-center shrink-0 border-b border-border/50 h-12",I?"justify-center px-2":"px-3"),children:I?i("span",{"aria-hidden":"true",class:"text-primary font-black text-[0.8rem] select-none",children:"V"}):g("span",{class:"text-[0.6rem] font-bold uppercase tracking-[0.14em] text-muted-foreground select-none",children:[i("span",{"aria-hidden":"true",class:"text-primary/60 mr-1",children:"//"}),"DevTools"]})}),i("div",{class:"flex flex-col flex-1 overflow-y-auto p-2 gap-1 scrollbar-thin-border",children:t.filter(s=>s.component??s.init).map(s=>g("div",{class:"relative group/nav-item",children:[g("button",{"aria-label":s.name,"aria-pressed":e===s.id,class:u("relative flex items-center w-full h-10","border-0 border-l-2 cursor-pointer","transition-all duration-150",I?"justify-center px-0":"gap-2.5 px-3",e===s.id?"border-primary bg-primary/8 text-foreground":"border-transparent bg-transparent text-muted-foreground hover:bg-foreground/6 hover:text-foreground"),onClick:_(()=>{s.id!==e&&o(s.id).catch(console.error)},"onClick"),type:"button",children:[s.icon?i("span",{class:u("size-4 shrink-0 flex items-center justify-center [&_svg]:size-4",e===s.id?"opacity-100":"opacity-65 group-hover/nav-item:opacity-100"),dangerouslySetInnerHTML:{__html:s.icon}}):i("span",{class:"size-4.5 shrink-0 flex items-center justify-center text-[0.65rem] font-bold uppercase select-none",children:s.name.slice(0,2)}),!I&&i("span",{class:"text-[0.8125rem] font-medium truncate leading-none tracking-[-0.01em]",children:s.name})]}),s.notification.state&&i("span",{"aria-hidden":"true",class:u("pointer-events-none absolute top-1.5 rounded-full",I?"right-1.5":"right-2.5","size-1.5",Ge(s.notification.level))}),I&&i("div",{class:u("absolute left-[calc(100%+0.5rem)] top-1/2 -translate-y-1/2","pointer-events-none z-50 whitespace-nowrap","opacity-0 -translate-x-1 group-hover/nav-item:opacity-100 group-hover/nav-item:translate-x-0","transition-all duration-200 ease-[cubic-bezier(0.23,1,0.32,1)]"),children:i("div",{class:"text-[0.7rem] font-medium bg-card/95 backdrop-blur-[0.625rem] text-foreground/80 px-2.5 py-1 border border-border shadow-md",children:s.name})})]},s.id))}),!I&&i("div",{class:"px-3 py-2.5 border-t border-border/40 shrink-0",children:g("span",{class:"text-[0.58rem] text-muted-foreground/50 leading-none select-none",children:[P.keybindings?.toggle??"Alt+Shift+D"," to toggle"]})})]}),g("div",{class:"flex-1 flex flex-col min-w-0 overflow-hidden bg-accent",children:[g("div",{class:"flex items-center justify-between gap-2 pr-2 min-h-12 shrink-0",children:[g("div",{class:"flex items-center gap-3 min-w-0",children:[i("button",{"aria-label":I?"Expand sidebar":"Collapse sidebar",class:u("flex items-center justify-center size-7 shrink-0","border-0 cursor-pointer bg-transparent","text-muted-foreground hover:text-foreground hover:bg-foreground/7","transition-colors duration-150"),onClick:_(()=>Y(s=>!s),"onClick"),type:"button",children:i(te,{class:u("size-3.5 transition-transform duration-300",!I&&"rotate-180"),size:14,src:Le})}),C?.icon&&i("span",{class:"size-5 flex items-center justify-center [&_svg]:size-5 shrink-0 text-foreground opacity-80",dangerouslySetInnerHTML:{__html:C.icon}}),g("span",{class:"flex items-center gap-1 text-[0.7rem] font-bold uppercase tracking-[0.06em] text-foreground truncate",children:[i("span",{"aria-hidden":"true",class:"text-primary/50 shrink-0",children:"["}),C?.name??"DevTools",i("span",{"aria-hidden":"true",class:"text-primary/50 shrink-0",children:"]"})]})]}),g("div",{class:"flex items-center gap-1 shrink-0",children:[(n==="bottom"||n==="top")&&!M&&i("button",{"aria-label":Z?"Switch to container width":"Expand to full width",class:u("flex items-center justify-center size-8","cursor-pointer border-0 bg-transparent","text-muted-foreground hover:text-foreground hover:bg-foreground/7","transition-all duration-200 active:scale-90"),onClick:_(()=>S({viewMode:Z?"default":"wide"}),"onClick"),title:Z?"Container width":"Full width",type:"button",children:i(te,{size:13,src:Z?ot:it})}),i("button",{"aria-label":M?"Exit fullscreen":"Enter fullscreen",class:u("flex items-center justify-center size-8","cursor-pointer border-0 bg-transparent","text-muted-foreground hover:text-foreground hover:bg-foreground/7","transition-all duration-200 active:scale-90"),onClick:_(()=>{if(M){const s=j.current,p=F.current;if(s&&p){const f=globalThis.window?.innerWidth??0,x=globalThis.window?.innerHeight??0,z=`inset(${p.top}px ${f-p.right}px ${x-p.bottom}px ${p.left}px)`;T.current!==void 0&&(clearTimeout(T.current),T.current=void 0),O.current=!0,s.style.transition="clip-path 0.35s cubic-bezier(0.4, 0, 0.2, 1)",s.style.clipPath="inset(0px 0px 0px 0px)",requestAnimationFrame(()=>{s.style.clipPath=z,T.current=setTimeout(()=>{s.style.clipPath="",s.style.transition="",O.current=!1,T.current=void 0,S({viewMode:"default"})},380)})}else S({viewMode:"default"})}else{if(j.current){const s=j.current.getBoundingClientRect();y.current=s,F.current=s}S({viewMode:"fullscreen"})}},"onClick"),title:M?"Exit fullscreen":"Fullscreen",type:"button",children:i(te,{size:13,src:M?nt:rt})}),ie&&!M&&i("button",{"aria-label":"Open in Picture-in-Picture window",class:u("flex items-center justify-center size-8","cursor-pointer border-0 bg-transparent",P.isPip?"text-primary hover:bg-primary/7":"text-muted-foreground hover:text-foreground hover:bg-foreground/7","transition-all duration-200 active:scale-90"),onClick:_(()=>{v().then(()=>r()).catch(console.error)},"onClick"),title:"Open in floating window (PiP)",type:"button",children:i(te,{size:13,src:at})}),i("button",{"aria-label":"Close DevTools panel",class:u("flex items-center justify-center size-8","cursor-pointer border-0 bg-transparent","text-muted-foreground hover:text-foreground hover:bg-foreground/7","transition-all duration-200 active:scale-90"),onClick:r,title:"Close (Esc)",type:"button",children:i(te,{size:12,src:Ee})})]})]}),i("div",{class:"devtools-content-scroll scrollbar-thin-border flex-1 overflow-auto min-h-0 bg-background",children:C?i(Ze,{app:C},C.id):g("div",{class:"flex flex-col items-center justify-center h-full gap-7 p-8 select-none",children:[g("div",{class:"flex flex-col items-center gap-3",children:[i("div",{class:"size-14 border border-primary/25 bg-primary/5 flex items-center justify-center",children:i(te,{class:"text-primary/45",size:26,src:tt})}),g("div",{class:"text-center space-y-1",children:[i("p",{class:"text-[0.8rem] font-medium text-foreground/65",children:"No tool selected"}),i("p",{class:"text-[0.7rem] text-muted-foreground",children:"Choose a tool from the sidebar to get started"})]})]}),t.length>0&&g("div",{class:"w-full max-w-[220px]",children:[g("p",{class:"text-[0.58rem] font-bold uppercase tracking-[0.12em] text-muted-foreground/60 mb-1.5",children:[i("span",{class:"text-primary/50",children:"// "}),"available"]}),i("div",{class:"flex flex-col gap-0.5",children:t.map(s=>g("button",{class:u("flex items-center gap-2.5 px-3 py-2","border border-border/40 bg-card/50","hover:border-primary/30 hover:bg-primary/4","cursor-pointer transition-all duration-150 text-left"),onClick:_(()=>o(s.id).catch(console.error),"onClick"),type:"button",children:[s.icon?i("span",{class:"size-3.5 shrink-0 flex items-center justify-center [&_svg]:size-3.5 text-muted-foreground",dangerouslySetInnerHTML:{__html:s.icon}}):i("span",{class:"size-3.5 text-[0.5rem] font-bold text-muted-foreground shrink-0 text-center",children:s.name.slice(0,2).toUpperCase()}),i("span",{class:"text-[0.75rem] font-medium text-muted-foreground",children:s.name})]},s.id))})]})]})})]})]})]})},"DevPanel");var $t=Object.defineProperty,Ce=N((e,t)=>$t(e,"name",{value:t,configurable:!0}),"n$1");const Vt=Ce(()=>{const[e,t]=l(E(0),"errorCount"),[r,o]=l(E(!1),"isOverlayOpen");if(L(()=>{const c=Ce(()=>{const h=globalThis.__v_o_error_history,W=Array.isArray(h)?h.length:0;t(W);const I=globalThis.__v_o__current;if(I?.parentNode){const Y=I.shadowRoot?.querySelector("#__v_o__root");o(!!Y&&!Y.classList.contains("hidden"))}else o(!1)},"sync"),d=setInterval(c,300);return c(),()=>clearInterval(d)},[]),e===0)return;const a=Ce(()=>{const c=globalThis.__v_o__current;if(!c?.parentNode)return;const d=c.shadowRoot?.querySelector("#__v_o__root");d?.classList.contains("hidden")?(d.classList.remove("hidden"),o(!0)):typeof c.close=="function"&&(c.close(),o(!1))},"handleClick"),n=`${e} error${e===1?"":"s"} – click to ${r?"hide":"show"} overlay`;return g(ze,{children:[i("div",{"aria-hidden":"true",class:"w-px h-5 bg-primary/20 shrink-0 mx-0.5"}),i("button",{"aria-label":n,class:u("relative flex justify-center items-center size-6","border-0","whitespace-nowrap no-underline p-0 m-0","cursor-pointer","bg-transparent text-destructive","transition-all duration-150","hover:bg-destructive/8","active:scale-[0.94]","group-data-[vertical]/panel:rotate-[-90deg]"),onClick:a,title:n,type:"button",children:g("div",{class:"relative size-6 select-none flex items-center justify-center",children:[i(te,{size:16,src:pt}),i("span",{class:"absolute -top-0.5 -right-1 min-w-3.5 h-3.5 px-0.5 rounded-full bg-destructive text-white text-[9px] font-bold leading-none flex items-center justify-center border border-background",children:e>9?"9+":e})]})})]})},"ViteOverlayButton");var Lt=Object.defineProperty,Se=N((e,t)=>Lt(e,"name",{value:t,configurable:!0}),"n");const Et=Se(()=>{const{toggleApp:e}=je();return i("button",{class:u("relative flex justify-center items-center size-6","border-0","whitespace-nowrap no-underline p-0 m-0","cursor-pointer","bg-transparent text-muted-foreground","transition-all duration-150","hover:bg-foreground/8 hover:text-foreground","active:scale-[0.94]","group-data-[vertical]/panel:rotate-[-90deg]"),"data-app-id":"dev-toolbar:more",onClick:Se(()=>{e("dev-toolbar:more").catch(t=>{console.error("[dev-toolbar] Failed to toggle more app:",t)})},"onClick"),title:"More apps",type:"button",children:i("div",{class:"relative size-6 flex items-center justify-center select-none",children:i(te,{size:16,src:ct})})})},"MoreButton"),Ht=Se(({customAppsToShow:e=3})=>{const{apps:t}=je(),r=t.filter(c=>c.builtIn),o=t.filter(c=>!c.builtIn),a=[...r,...o.slice(0,e)],n=o.slice(e);return i("div",{class:"flex items-center pointer-events-auto",id:"__v_dt__bar",children:g("div",{class:"flex flex-row items-center justify-start gap-1",id:"__v_dt__bar_container",children:[a.map(c=>i(zt,{app:c},c.id)),n.length>0&&i(Et,{}),i(Vt,{})]})})},"ToolbarBar"),Wt="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQ4IDI5MSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gPGRlZnM+IDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgZ3JhZGllbnRVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giIHgxPSIwIiB5MT0iMCIgeDI9IjEiIHkyPSIxIj4gPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSJyZWQiPiA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJzdG9wLWNvbG9yIiB2YWx1ZXM9InJlZDtwdXJwbGU7Ymx1ZTtyZWQ7IiBkdXI9IjIwcyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIC8+IDwvc3RvcD4gPHN0b3Agb2Zmc2V0PSIwLjUiIHN0b3AtY29sb3I9InB1cnBsZSI+IDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9InN0b3AtY29sb3IiIHZhbHVlcz0icHVycGxlO2JsdWU7cmVkO3B1cnBsZTsiIGR1cj0iMjBzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4gPC9zdG9wPiA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9ImJsdWUiPiA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJzdG9wLWNvbG9yIiB2YWx1ZXM9ImJsdWU7cmVkO3B1cnBsZTtibHVlOyIgZHVyPSIyMHMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPiA8L3N0b3A+IDxhbmltYXRlVHJhbnNmb3JtIGF0dHJpYnV0ZU5hbWU9ImdyYWRpZW50VHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIGZyb209IjAgLjUgLjUiIHRvPSIzNjAgLjUgLjUiIGR1cj0iMTBzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4gPC9saW5lYXJHcmFkaWVudD4gPGxpbmVhckdyYWRpZW50IGlkPSJvdmVybGF5R3JhZGllbnRBIiB4MT0iNjIiIHkxPSI0Mi4yMjUzIiB4Mj0iNjIiIHkyPSIyOTAuMjI1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+IDxzdG9wIG9mZnNldD0iMC4zNCIgc3RvcC1vcGFjaXR5PSIwLjUiIC8+IDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0id2hpdGUiIHN0b3Atb3BhY2l0eT0iMCIgLz4gPC9saW5lYXJHcmFkaWVudD4gPGxpbmVhckdyYWRpZW50IGlkPSJvdmVybGF5R3JhZGllbnRCIiB4MT0iMTg2IiB5MT0iMCIgeDI9IjE4NiIgeTI9IjI0OCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPiA8c3RvcCBzdG9wLWNvbG9yPSJ3aGl0ZSIgc3RvcC1vcGFjaXR5PSIwIiAvPiA8c3RvcCBvZmZzZXQ9IjAuNjk1IiBzdG9wLW9wYWNpdHk9IjAuNSIgLz4gPC9saW5lYXJHcmFkaWVudD4gPC9kZWZzPiA8cGF0aCBkPSJNMCAxNjYuMjI1QzAgMjM0LjcwOSA1NS41MTY3IDI5MC4yMjUgMTI0IDI5MC4yMjVWNDIuMjI1M0M1NS41MTY3IDQyLjIyNTMgMCA5Ny43NDIgMCAxNjYuMjI1WiBNMjQ4IDEyNEMyNDggMTkyLjQ4MyAxOTIuNDgzIDI0OCAxMjQgMjQ4VjBDMTkyLjQ4MyAwIDI0OCA1NS41MTY3IDI0OCAxMjRaIiBmaWxsPSJ1cmwoI2EpIiAvPiA8cGF0aCBkPSJNMCAxNjYuMjI1QzAgMjM0LjcwOSA1NS41MTY3IDI5MC4yMjUgMTI0IDI5MC4yMjVWNDIuMjI1M0M1NS41MTY3IDQyLjIyNTMgMCA5Ny43NDIgMCAxNjYuMjI1WiIgZmlsbD0idXJsKCNvdmVybGF5R3JhZGllbnRBKSIgLz4gPHBhdGggZD0iTTI0OCAxMjRDMjQ4IDE5Mi40ODMgMTkyLjQ4MyAyNDggMTI0IDI0OFYwQzE5Mi40ODMgMCAyNDggNTUuNTE2NyAyNDggMTI0WiIgZmlsbD0idXJsKCNvdmVybGF5R3JhZGllbnRCKSIgLz4gPGNpcmNsZSBjeD0iMTI0IiBjeT0iMTQ3IiByPSI1MCIgZmlsbD0id2hpdGUiIC8+IDwvc3ZnPg==";var Zt=Object.defineProperty,me=N((e,t)=>Zt(e,"name",{value:t,configurable:!0}),"o$1");const Gt=me((e,t)=>{switch(t){case"left":return{left:`${e.right+10}px`,top:`${e.top+e.height/2}px`,transform:"translateY(-50%)"};case"right":return{right:`${globalThis.window?globalThis.window.innerWidth-e.left+10:0}px`,top:`${e.top+e.height/2}px`,transform:"translateY(-50%)"};case"top":return{left:`${e.left+e.width/2}px`,top:`${e.bottom+10}px`,transform:"translateX(-50%)"};default:return{bottom:`${globalThis.window?globalThis.window.innerHeight-e.top+10:0}px`,left:`${e.left+e.width/2}px`,transform:"translateX(-50%)"}}},"getTooltipStyle"),Bt=me(({position:e})=>{const{hoveredApp:t,hoveredAppRect:r,pinTooltip:o,setHoveredApp:a}=Re(),n=l(m(null),"overlayRef"),c=l(m(be()),"helpersRef"),[d,h]=l(E(!1),"isRendered"),[W,I]=l(E(!1),"isVisible"),Y=!!(t?.tooltip&&r);if(L(()=>{if(Y){h(!0);const V=setTimeout(I,16,!0);return()=>clearTimeout(V)}I(!1);const j=setTimeout(h,200,!1);return()=>clearTimeout(j)},[Y]),!d||!t?.tooltip||!r)return;const A=t.tooltip,P=Gt(r,e),S=e==="left"||e==="right",$=me(()=>{const j=n.current?.getBoundingClientRect();j&&o(t,j.left,j.top),a(void 0)},"handlePin");return g("div",{"aria-label":`${t.name} quick preview`,class:u("fixed z-[2147483647] pointer-events-auto","antialiased toolbar-font","w-auto max-w-[300px]","bg-background border border-border shadow-2xl","transition-[opacity,transform] duration-200 ease-[cubic-bezier(0.23,1,0.32,1)]",W?"opacity-100 translate-y-0 scale-100":u("opacity-0 scale-[0.97]",e==="bottom"&&"translate-y-1",e==="top"&&"-translate-y-1",S&&"translate-x-[-2px]")),onMouseEnter:me(()=>a(t,r),"onMouseEnter"),onMouseLeave:me(()=>a(void 0),"onMouseLeave"),ref:n,role:"tooltip",style:P,children:[g("div",{class:"flex items-center justify-between gap-2 px-3 py-2 border-b border-border/60 bg-foreground/3",children:[g("div",{class:"flex items-center gap-2 min-w-0",children:[i("span",{"aria-hidden":"true",class:"size-1.5 rounded-full bg-primary shrink-0"}),i("span",{class:"text-[0.6rem] font-bold uppercase tracking-[0.1em] text-muted-foreground truncate",children:t.name})]}),i("button",{"aria-label":`Pin ${t.name} tooltip`,class:u("size-5 flex items-center justify-center shrink-0","border-0 bg-transparent cursor-pointer p-0","text-muted-foreground/60 hover:text-primary","transition-colors duration-150"),onClick:$,title:"Pin (keep visible)",type:"button",children:i(te,{size:11,src:st})})]}),i("div",{class:"p-3",children:i(A,{helpers:c.current})})]})},"AppTooltipOverlay");var Yt=Object.defineProperty,Me=N((e,t)=>Yt(e,"name",{value:t,configurable:!0}),"o");const Ot=Me(e=>{switch(e){case"left":return{left:"0",top:"50%",transform:"translateX(24px) translateY(-50%)"};case"right":return{left:"0",top:"50%",transform:"translateX(calc(-100% - 24px)) translateY(-50%)"};case"top":return{left:"50%",top:"0",transform:"translateX(-50%) translateY(24px)"};default:return{left:"50%",top:"0",transform:"translateX(-50%) translateY(calc(-100% - 24px))"}}},"getHintStyle"),Xt=Me(({position:e})=>{const t="absolute w-2.5 h-2.5 bg-card border-border";switch(e){case"left":return i("div",{"aria-hidden":"true",class:u(t,"left-[-5px] top-1/2 -translate-y-1/2 rotate-45 border-b border-l")});case"right":return i("div",{"aria-hidden":"true",class:u(t,"right-[-5px] top-1/2 -translate-y-1/2 rotate-45 border-t border-r")});case"top":return i("div",{"aria-hidden":"true",class:u(t,"top-[-5px] left-1/2 -translate-x-1/2 rotate-45 border-t border-l")});default:return i("div",{"aria-hidden":"true",class:u(t,"bottom-[-5px] left-1/2 -translate-x-1/2 rotate-45 border-b border-r")})}},"Arrow"),Ft=[{icon:"⊙",text:"Click logo to open panel"},{icon:"⠿",text:"Drag pill to reposition"},{icon:"⌨",text:"Alt+Shift+D to toggle"}],Jt=Me(({onDismiss:e,position:t})=>{const[r,o]=l(E(!1),"visible"),a=l(m(void 0),"dismissTimeoutRef");L(()=>{const c=setTimeout(o,600,!0);return()=>clearTimeout(c)},[]),L(()=>()=>{a.current!==void 0&&(clearTimeout(a.current),a.current=void 0)},[]);const n=Me(()=>{o(!1),a.current=setTimeout(e,180)},"handleDismiss");return g("div",{"aria-hidden":!r,"aria-label":"DevTools quick start",class:u("absolute pointer-events-auto","w-[240px]","bg-card border border-border","shadow-xl","p-3","font-mono","transition-all duration-200",r?"opacity-100 scale-100":"opacity-0 scale-95 pointer-events-none"),style:Ot(t),children:[i(Xt,{position:t}),g("p",{class:"flex items-center gap-1.5 mb-2.5",children:[i("span",{"aria-hidden":"true",class:"text-primary text-[0.6rem]",children:"▶"}),i("span",{class:"text-[0.6rem] font-bold uppercase tracking-[0.12em] text-foreground",children:"Quick start"})]}),i("ul",{class:"space-y-1.5 mb-3 list-none p-0 m-0",children:Ft.map(({icon:c,text:d})=>g("li",{class:"flex items-center gap-2 text-[0.7rem] text-muted-foreground",children:[i("span",{"aria-hidden":"true",class:"text-primary shrink-0 w-3 text-center leading-none",children:c}),d]},d))}),i("button",{class:u("w-full h-6 text-[0.6rem] font-bold uppercase tracking-[0.1em]","border border-primary/30 bg-primary/6","text-primary cursor-pointer","hover:bg-primary/12 hover:border-primary/50","transition-all duration-150 active:scale-[0.98]"),onClick:n,tabIndex:r?void 0:-1,type:"button",children:"Got it"})]})},"FirstVisitHint");var Ut=Object.defineProperty,de=N((e,t)=>Ut(e,"name",{value:t,configurable:!0}),"i");const Qt=de(({onMove:e,onUnpin:t,pinned:r})=>{const o=l(m(null),"cardRef"),a=l(m(null),"headerRef"),n=l(m({x:r.initialX,y:r.initialY}),"posRef"),c=l(m(void 0),"dragRef"),d=l(m(be()),"helpersRef"),h=l(m(e),"onMoveRef"),W=l(m(r.id),"pinnedIdRef");h.current=e,W.current=r.id,L(()=>{const A="transform 110ms cubic-bezier(0.25,0.46,0.45,0.94)",P=de($=>{if(!c.current||!o.current)return;const j=globalThis.window?.innerWidth??9999,V=globalThis.window?.innerHeight??9999,{cardH:G,cardW:y}=c.current,F=Math.min(80,y),Q=Math.min(36,G);let O=c.current.origX+($.clientX-c.current.startX),T=c.current.origY+($.clientY-c.current.startY);O=Math.max(F-y,Math.min(j-F,O)),T=Math.max(Q-G,Math.min(V-Q,T));const M=[0,j-y,F-y,j-F],Z=[0,V-G,Q-G,V-Q];let ie=O,q=T;for(const J of M)if(Math.abs(O-J)<28){ie=J;break}for(const J of Z)if(Math.abs(T-J)<28){q=J;break}o.current.style.transition=ie!==O||q!==T?A:"",o.current.style.transform=`translate(${ie}px, ${q}px)`,n.current={x:ie,y:q}},"handleMove"),S=de(()=>{c.current&&(c.current=void 0,o.current&&(o.current.style.transition=""),a.current&&(a.current.style.cursor=""),h.current(W.current,n.current.x,n.current.y))},"handleUp");return document.addEventListener("mousemove",P),document.addEventListener("mouseup",S),()=>{document.removeEventListener("mousemove",P),document.removeEventListener("mouseup",S)}},[]);const I=r.app.tooltip;if(!I)return;const Y=de(A=>{A.button===0&&(c.current={cardH:o.current?.offsetHeight??200,cardW:o.current?.offsetWidth??300,origX:n.current.x,origY:n.current.y,startX:A.clientX,startY:A.clientY},a.current&&(a.current.style.cursor="grabbing"),A.preventDefault())},"handleDragStart");return g("div",{"aria-label":`${r.app.name} pinned tooltip`,class:u("fixed z-[2147483647] pointer-events-auto antialiased toolbar-font","w-auto max-w-[300px]","bg-background border border-primary/40 shadow-2xl"),ref:o,style:{left:0,top:0,transform:`translate(${n.current.x}px, ${n.current.y}px)`},children:[g("div",{class:u("flex items-center justify-between gap-2 px-3 py-2","border-b border-primary/20 bg-primary/4","select-none cursor-grab"),onMouseDown:Y,ref:a,children:[g("div",{class:"flex items-center gap-2 min-w-0",children:[i("span",{"aria-hidden":"true",class:"size-1.5 rounded-full bg-primary shrink-0"}),i("span",{class:"text-[0.6rem] font-bold uppercase tracking-[0.1em] text-primary/70 truncate",children:r.app.name})]}),i("button",{"aria-label":`Unpin ${r.app.name}`,class:u("size-5 flex items-center justify-center shrink-0","border-0 bg-transparent cursor-pointer p-0","text-muted-foreground/50 hover:text-destructive","transition-colors duration-150"),onClick:de(()=>t(r.id),"onClick"),onMouseDown:de(A=>A.stopPropagation(),"onMouseDown"),title:"Unpin",type:"button",children:i(te,{size:11,src:lt})})]}),i("div",{class:"p-3",children:i(I,{helpers:d.current})})]})},"PinnedTooltipCard");var qt=Object.defineProperty,ce=N((e,t)=>qt(e,"name",{value:t,configurable:!0}),"p");const Ne="__v_dt__pinned_tooltips",Kt=ce((e,t,r,o,a)=>{const n=t*o/100,c=r*a/100,d=o/4;switch(e){case"bottom":return n<d?"bottom-left":n>o-d?"bottom-right":"bottom-center";case"left":return c<a/2?"top-left":"bottom-left";case"right":return c<a/2?"top-right":"bottom-right";case"top":return n<d?"top-left":n>o-d?"top-right":"top-center";default:return"bottom-center"}},"computePlacement"),er=ce(({activeAppId:e,apps:t,customAppsToShow:r=3,onClearNotification:o,onRegisterApp:a,onSetNotification:n,onToggleApp:c,onUnregisterApp:d})=>{const h=l(m(null),"anchorRef"),W=l(m(null),"panelRef"),I=l(m(void 0),"leaveTimerRef"),{resolvedTheme:Y}=He(),{state:A,updateState:P}=Te(),{closePanel:S,panelVisible:$,togglePanelVisible:j}=It(),{anchorStyle:V,bringUp:G,isDragging:y,isHidden:F,isVertical:Q,onPointerDown:O,panelStyle:T}=Ct(W),[M,Z]=l(E(void 0),"hoveredApp"),[ie,q]=l(E(void 0),"hoveredAppRect"),J=l(m(new Map),"pinPositionsRef"),v=pe(b=>{try{const R=b.map(k=>{const B=J.current.get(k.id);return{appId:k.app.id,x:B?.x??k.initialX,y:B?.y??k.initialY}});localStorage.setItem(Ne,JSON.stringify(R))}catch{}},[]),[C,D]=l(E([]),"pinnedTooltips"),s=l(m([]),"pinnedTooltipsRef");s.current=C;const p=pe((b,R,k)=>{const B=`${b.id}-${Date.now()}`;D(le=>{const he=[...le,{app:b,id:B,initialX:R,initialY:k}];return v(he),he})},[v]),f=pe(b=>{D(R=>{const k=R.filter(B=>B.id!==b);return J.current.delete(b),v(k),k})},[v]),x=pe((b,R,k)=>{J.current.set(b,{x:R,y:k}),v(s.current)},[v]),z=l(m(void 0),"storedPinsRef"),U=l(m(new Set),"restoredAppIdsRef");L(()=>{if(t.length===0)return;if(z.current===void 0)try{const k=localStorage.getItem(Ne);z.current=k?JSON.parse(k):[]}catch{z.current=[]}const b=z.current;if(b.length===0)return;const R=[];for(const k of b){if(U.current.has(k.appId))continue;const B=t.find(le=>le.id===k.appId&&le.tooltip);B&&(U.current.add(k.appId),R.push({app:B,id:`${B.id}-restored-${Date.now()}-${Math.random().toString(36).slice(2)}`,initialX:k.x,initialY:k.y}))}R.length>0&&D(k=>[...k,...R])},[t]),L(()=>()=>{I.current!==void 0&&clearTimeout(I.current)},[]);const X=pe((b,R)=>{I.current!==void 0&&(clearTimeout(I.current),I.current=void 0),b?(Z(b),q(R)):I.current=setTimeout(()=>{Z(void 0),q(void 0),I.current=void 0},180)},[]),w=l(m(t),"appsRef");w.current=t;const ae=l(m($),"panelVisibleRef");ae.current=$;const ne=l(m(e),"activeAppIdRef");ne.current=e;const K=l(m(c),"onToggleAppRef");K.current=c;const oe=l(re(()=>{const b=globalThis.window?.innerWidth??1920,R=globalThis.window?.innerHeight??1080;return Kt(A.position,A.left,A.top,b,R)},[A.left,A.position,A.top]),"placement"),se=pe(async b=>{const R=ae.current,k=ne.current,B=w.current.find(le=>le.id===b);if(B?.onClick??B?.onDeactivate){await K.current(b);return}if(b===k&&R){await K.current(b),P({open:!1,viewMode:"default"});return}b!==k&&await K.current(b),R||P({open:!0})},[P]),ke={activeAppId:e,apps:t,clearNotification:o,hoveredApp:M,hoveredAppRect:ie,isDragging:y,isVisible:$,pinnedTooltips:C,pinTooltip:p,placement:oe,registerApp:a,setDragging:ce(()=>{},"setDragging"),setHoveredApp:X,setNotification:n,setPlacement:ce(()=>{},"setPlacement"),setVisible:ce(b=>P({open:b}),"setVisible"),toggleApp:se,unpinTooltip:f,unregisterApp:d};if(!(!A.preferShowFloatingPanel&&!$))return i(We.Provider,{value:ke,children:g("div",{class:u(Y==="dark"&&"dark"),style:{display:"contents"},children:[g("div",{class:u("fixed z-[2147483647]","pointer-events-auto","origin-center","transition-[left_0.3s_cubic-bezier(0.4,0,0.2,1),top_0.3s_cubic-bezier(0.4,0,0.2,1)]","data-[dragging]:transition-none!","group","toolbar-font text-[13px]! leading-[1.6]! antialiased box-border [&_*]:box-border print:hidden",A.reduceMotion&&"transition-none! animate-none! [&_*]:transition-none! [&_*]:animate-none!"),"data-dragging":y?"":void 0,"data-placement":oe,id:"__v_dt__root",onMouseMove:G,ref:h,style:V,children:[g("div",{class:u("group/panel","absolute left-0 top-0","flex flex-row justify-start items-center","gap-1 p-1","box-border","overflow-hidden","rounded-none","text-foreground select-none",y?"cursor-grabbing":"cursor-grab","bg-background border-0",Q?"shadow-pill-vertical!":"shadow-pill",F?"max-w-12!":"","transition-pill"),"data-vertical":Q||void 0,onPointerDown:ce(b=>{A.isFirstVisit&&P({isFirstVisit:!1}),O(b)},"onPointerDown"),ref:W,style:T,children:[i("button",{"aria-label":"Toggle devtools panel",class:u("size-8 flex justify-center items-center shrink-0","cursor-pointer p-0 m-0 border-0","bg-transparent","transition-all duration-150","hover:bg-primary/8 active:scale-[0.95]","group-data-[vertical]/panel:rotate-[-90deg]",$?"opacity-100":"opacity-60"),onClick:ce(b=>{b.stopPropagation(),A.isFirstVisit&&P({isFirstVisit:!1}),j()},"onClick"),title:"Toggle devtools panel",type:"button",children:i("img",{alt:"Visulima",class:"size-6",src:Wt})}),i("div",{"aria-hidden":"true",class:u("w-px h-5 bg-primary/20 shrink-0",F&&"hidden")}),i("div",{class:u("px-0.5",F&&"hidden"),children:i(Ht,{customAppsToShow:r})})]}),A.isFirstVisit&&i(Jt,{onDismiss:ce(()=>P({isFirstVisit:!1}),"onDismiss"),position:A.position})]}),i(Nt,{activeAppId:e,apps:t,onClose:S,onToggleApp:c,panelVisible:$,position:A.position}),i(Bt,{position:A.position}),C.map(b=>i(Qt,{onMove:x,onUnpin:f,pinned:b},b.id))]})})},"ToolbarContainer");var tr=Object.defineProperty,Be=N((e,t)=>tr(e,"name",{value:t,configurable:!0}),"r");const rr=Be((e,t)=>{const r=$e(),o=Ue();if(!o)throw new Error("Global hook not initialized");return{clearNotification(a){e.clearNotification(a)},async closeApp(){const a=e.getActiveApp();a&&await e.toggleApp(a.id)},getActiveApp(){return e.getActiveApp()?.id},getApps(){return e.getApps()},getSettings(){return Ve()},hide(){t.hide()},hook:o,notify(a,n){e.setNotification(a,!0,n)},async openApp(a){await e.toggleApp(a)},registerApp(a){e.registerApp(a)},rpc:new Proxy({},{get(a,n){return(...c)=>r.callServer(n,...c)}}),setAppActive(a,n){e.setAppActive(a,n)},show(){t.show()},toggle(){t.toggle()},unregisterApp(a){e.unregisterApp(a)},updateSettings(a){Je(a)},version:"0.0.0"}},"createGlobalAPI"),ir=Be(e=>{globalThis.window!==void 0&&(globalThis.__VISULIMA_DEVTOOLS__=e)},"setupGlobalAPI");var nr=Object.defineProperty,H=N((e,t)=>nr(e,"name",{value:t,configurable:!0}),"t");class or extends HTMLElement{static{N(this,"DevToolbar")}static{H(this,"DevToolbar")}appManager;hasBeenInitialized=!1;customAppsToShow=3;renderRoot=void 0;constructor(){super(),this.attachShadow({mode:"open"}),this.appManager=new ft}connectedCallback(){this.hasBeenInitialized&&this.shadowRoot&&!this.renderRoot&&this.render()}disconnectedCallback(){this.renderRoot&&(Pe(null,this.renderRoot),this.renderRoot=void 0)}init(){if(this.hasBeenInitialized)return;this.hasBeenInitialized=!0;const t=Qe(n=>{this.appManager.registerApp(n),this.render()},(n,c)=>{qe().addEvent(n,c)}),r=rr({clearNotification:H(n=>{this.appManager.clearNotification(n),this.render()},"clearNotification"),getActiveApp:H(()=>this.appManager.getActiveApp(),"getActiveApp"),getApps:H(()=>this.appManager.getAllApps(),"getApps"),registerApp:H(n=>{this.appManager.registerApp(n),this.render()},"registerApp"),setAppActive:H((n,c)=>{this.appManager.setAppActive(n,c),this.render()},"setAppActive"),setNotification:H((n,c,d)=>{this.appManager.setNotification(n,c,d),this.render()},"setNotification"),toggleApp:H(n=>this.appManager.toggleApp(n),"toggleApp"),unregisterApp:H(n=>{this.appManager.unregisterApp(n),this.render()},"unregisterApp")},{hide:H(()=>this.setToolbarVisible(!1),"hide"),show:H(()=>this.setToolbarVisible(!0),"show"),toggle:H(()=>{const n=this.isHidden();this.setToolbarVisible(!n)},"toggle")});ir(r),t.emit("devtools:init");const o=Ve(),a=this.appManager.getAllApps().find(n=>n.defaultOpen);a&&!this.appManager.getActiveApp()&&this.appManager.openApp(a.id).catch(n=>{console.error(`[dev-toolbar] Failed to auto-open defaultOpen app ${a.id}:`,n)}),this.render(),this.setupEventListeners(),o.defaultVisible&&this.setToolbarVisible(!0)}isHidden(){return this.shadowRoot.querySelector("#__v_dt__root")?.hasAttribute("data-hidden")??!0}setToolbarVisible(t){const r=this.shadowRoot.querySelector("#__v_dt__root");r&&(t?delete r.dataset.hidden:r.dataset.hidden=""),this.render()}registerApp(t,r=!1){this.appManager.registerApp(t,r),this.render()}getAppManager(){return this.appManager}render(){const t=this.appManager.getAllApps(),r=this.shadowRoot;ue&&(r.adoptedStyleSheets=[ue]);let o=r.querySelector("style");o||(o=document.createElement("style"),o.textContent=`
|
|
1
|
+
var Ye=Object.defineProperty;var _=(e,t)=>Ye(e,"name",{value:t,configurable:!0});import{createContext as Oe,render as ke}from"preact";import{createClientRPCContext as Re}from"../packem_shared/createClientRPCContext-DgRxrllw.js";import{updateSettings as Xe,loadSettings as Se}from"../packem_shared/loadSettings-hvjR4fcS.js";import{getGlobalHook as Je,setupGlobalHook as Ue}from"../packem_shared/setupGlobalHook-CCf9Logv.js";import ue from"../packem_shared/sharedToolbarStylesheet-CaTdYhVe.js";import{jsx as i,jsxs as g,Fragment as Te}from"preact/jsx-runtime";import{m as Qe}from"../packem_shared/store-DaUtLjf3.js";import{addHookName as l}from"preact/devtools";import{clsx as h}from"../packem_shared/clsx-wGlvpUfw.js";import{useContext as qe,useEffect as V,useMemo as re,useState as $,useRef as f,useCallback as de,useLayoutEffect as Ke}from"preact/hooks";import ie from"../packem_shared/Icon-B6UHkC0o.js";import{h as Ce}from"../packem_shared/use-frame-state-CxrlPUM5.js";import{_ as _e}from"../packem_shared/use-theme-zpm4zmqP.js";var et=Object.defineProperty,tt=_((e,t)=>et(e,"name",{value:t,configurable:!0}),"t$4");const me=tt(()=>{const e=Re();return{rpc:new Proxy({},{get(t,r){return(...o)=>e.callServer(r,...o)}})}},"createServerHelpers");var rt=Object.defineProperty,it=_((e,t)=>rt(e,"name",{value:t,configurable:!0}),"n$2");let nt=class{static{_(this,"p")}static{it(this,"AppManager")}apps=new Map;activeAppId=void 0;initializedApps=new Set;appCanvases=new Map;registerApp(t,r=!1){this.apps.has(t.id)&&(this.initializedApps.delete(t.id),this.appCanvases.delete(t.id),this.activeAppId===t.id&&(this.activeAppId=void 0));const o=new EventTarget,a={...t,active:!1,builtIn:r,eventTarget:o,notification:{state:!1},status:"ready"};this.apps.set(t.id,a)}async unregisterApp(t){const r=this.apps.get(t);if(r?.destroy&&this.initializedApps.has(t)){const o=this.appCanvases.get(t);if(o)try{await r.destroy(o.shadowRoot)}catch(a){console.error(`[dev-toolbar] destroy() failed for app ${t}:`,a)}}this.apps.delete(t),this.initializedApps.delete(t),this.appCanvases.delete(t),this.activeAppId===t&&(this.activeAppId=void 0)}getApp(t){return this.apps.get(t)}getAllApps(){return[...this.apps.values()]}getActiveApp(){if(this.activeAppId)return this.apps.get(this.activeAppId)}async toggleApp(t){const r=this.apps.get(t);if(!r)return!1;if(r.onClick??r.onDeactivate){const o=r.active;return r.active=!o,!o&&r.onClick?await r.onClick():o&&r.onDeactivate&&await r.onDeactivate(),!0}return r.active?await this.closeApp(t):this.activeAppId&&!await this.closeApp(this.activeAppId)?!1:await this.openApp(t)}setAppActive(t,r){const o=this.apps.get(t);o&&(o.active=r)}isAppInitialized(t){return this.initializedApps.has(t)}markAppInitialized(t){this.initializedApps.add(t)}async openApp(t){const r=this.apps.get(t);if(!r)return!1;if(r.active=!0,r.status="loading",this.activeAppId=t,r.init&&!this.isAppInitialized(t))try{const o=this.getAppCanvas(t);if(o){const a=me(),n=r.init(o.shadowRoot,r.eventTarget,a);n&&typeof n.then=="function"&&await n,this.markAppInitialized(t),r.status="ready"}else r.status="pending"}catch(o){return console.error(`[dev-toolbar] Failed to init app ${t}:`,o),r.status="error",r.active=!1,this.activeAppId=void 0,!1}else r.status="ready";return!0}async closeApp(t){const r=this.apps.get(t);if(!r||!r.active)return!1;if(r.beforeTogglingOff){const o=this.getAppCanvas(t);if(o)try{const a=r.beforeTogglingOff(o.shadowRoot);if(!(a&&typeof a.then=="function"?await a:a))return!1}catch(a){console.error(`[dev-toolbar] beforeTogglingOff() threw for app ${t}:`,a)}}return r.active=!1,this.activeAppId===t&&(this.activeAppId=void 0),!0}setNotification(t,r,o){const a=this.apps.get(t);a&&(a.notification={level:o,state:r})}clearNotification(t){const r=this.apps.get(t);r&&(r.notification={state:!1})}getAppCanvas(t){return this.appCanvases.get(t)}setAppCanvas(t,r){this.appCanvases.set(t,r)}};var ot=Object.defineProperty,at=_((e,t)=>ot(e,"name",{value:t,configurable:!0}),"t$3");const Ne=Oe(void 0),ze=at(()=>{const e=qe(Ne);if(!e)throw new Error("useToolbarContext must be used within ToolbarContext provider");return e},"useToolbarContext");var st=Object.defineProperty,lt=_((e,t)=>st(e,"name",{value:t,configurable:!0}),"t$2");const Ve=lt(()=>{const e=ze();return{activeAppId:e.activeAppId,apps:e.apps,clearNotification:e.clearNotification,registerApp:e.registerApp,setNotification:e.setNotification,toggleApp:e.toggleApp,unregisterApp:e.unregisterApp}},"useApps");var ct=Object.defineProperty,ge=_((e,t)=>ct(e,"name",{value:t,configurable:!0}),"s$1");const dt=ge((e,t)=>{const r=t.split("+"),o=r.at(-1)??"",a=r.includes("Alt"),n=r.includes("Shift"),c=r.includes("Control")||r.includes("Ctrl"),p=r.includes("Meta")||r.includes("Cmd");return(e.key===o||e.code===`Key${o.toUpperCase()}`)&&e.altKey===a&&e.shiftKey===n&&e.ctrlKey===c&&e.metaKey===p},"matchesBinding"),pt=ge(()=>{const{state:e,updateState:t}=Ce(),r=ge((n,c)=>{const p=c??!e.open;t({open:p,...p?{}:{viewMode:"default"}})},"togglePanelVisible"),o=ge(()=>{e.open&&t({open:!1,viewMode:"default"})},"closePanel");V(()=>{const n=e.keybindings?.toggle??"Alt+Shift+D",c=ge(p=>{dt(p,n)&&r()},"handleKeyDown");return globalThis.window?.addEventListener("keydown",c),()=>{globalThis.window?.removeEventListener("keydown",c)}},[e.open,e.keybindings?.toggle]);const a=l(re(()=>e.open,[e.open]),"panelVisibleValue: boolean");return{closePanel:o,panelVisible:a,togglePanelVisible:r}},"usePanelVisible");var ut=Object.defineProperty,Pe=_((e,t)=>ut(e,"name",{value:t,configurable:!0}),"e");const be=Pe((e,t,r)=>Math.min(Math.max(e,t),r),"clamp");Pe(()=>navigator.userAgent.includes("Safari")&&!navigator.userAgent.includes("Chrome"),"checkIsSafari");const xe=Pe(e=>typeof e=="string"?e.endsWith("px")?Number(e.slice(0,-2)):Number(e):e,"pixelToNumber");var ht=Object.defineProperty,K=_((e,t)=>ht(e,"name",{value:t,configurable:!0}),"h$1");const Ee=K(e=>e<5?0:e>95?100:Math.abs(e-50)<2?50:e,"snapToPoints"),gt=K(()=>{if(globalThis.window===void 0)return{bottom:0,left:0,right:0,top:0};const e=getComputedStyle(document.documentElement);return{bottom:xe(e.getPropertyValue("env(safe-area-inset-bottom)")||"0"),left:xe(e.getPropertyValue("env(safe-area-inset-left)")||"0"),right:xe(e.getPropertyValue("env(safe-area-inset-right)")||"0"),top:xe(e.getPropertyValue("env(safe-area-inset-top)")||"0")}},"getSafeAreaInsets"),ft=K(()=>{const[e,t]=l($(()=>({height:globalThis.window?.innerHeight??1080,width:globalThis.window?.innerWidth??1920})),"size");return V(()=>{const r=K(()=>{t({height:globalThis.window?.innerHeight??1080,width:globalThis.window?.innerWidth??1920})},"updateSize");return r(),globalThis.window?.addEventListener("resize",r),()=>{globalThis.window?.removeEventListener("resize",r)}},[]),e},"useWindowSize"),mt=K(e=>{const{state:t,updateState:r}=Ce(),{height:o,width:a}=ft(),[n,c]=l($(!1),"isHovering"),[p,u]=l($(!1),"isDragging"),[j,z]=l($(!1),"isViteOverlayOpen"),I=l(f({x:0,y:0}),"draggingOffsetRef"),P=l(f({x:0,y:0}),"mousePositionRef"),H=l(f(void 0),"timerRef"),C=l(f(void 0),"capturedPointerIdRef"),Y=l(f(!1),"isDraggingRef"),E=l(f(a),"windowWidthRef"),N=l(f(o),"windowHeightRef"),L=l(f(r),"updateStateRef");V(()=>{E.current=a,N.current=o},[a,o]),V(()=>{L.current=r},[r]);const[w,U]=l($(()=>({bottom:10,left:10,right:10,top:10})),"panelMargins");V(()=>{const v=gt();U({bottom:v.bottom+10,left:v.left+10,right:v.right+10,top:v.top+10})},[]),V(()=>{const v=K(()=>{const S=globalThis.__v_o__current;if(S?.parentNode){const s=S.shadowRoot?.querySelector("#__v_o__root");z(!!s&&!s.classList.contains("hidden"))}else z(!1)},"check"),k=setInterval(v,300);return v(),()=>clearInterval(k)},[]);const ee=de(v=>{v.preventDefault(),v.stopPropagation(),u(!0),Y.current=!0;const k=e.current;if(k){const{height:S,left:s,top:d,width:m}=k.getBoundingClientRect();I.current={x:v.clientX-s-m/2,y:v.clientY-d-S/2};const b=v.target;try{b&&b.setPointerCapture?(b.setPointerCapture(v.pointerId),C.current=v.pointerId):k.setPointerCapture&&(k.setPointerCapture(v.pointerId),C.current=v.pointerId)}catch(F){console.warn("Failed to capture pointer:",F)}document.body.style.cursor="grabbing",document.body.style.userSelect="none"}},[e]),O=de(()=>{c(!0),!(t.minimizePanelInactive<0)&&(H.current&&clearTimeout(H.current),H.current=setTimeout(()=>{c(!1)},t.minimizePanelInactive||5e3))},[t.minimizePanelInactive]);V(()=>{O()},[O]),V(()=>{const v=K(()=>{if(C.current!==void 0){try{const b=e.current;b&&C.current!==void 0&&b.releasePointerCapture(C.current)}catch{}C.current=void 0}},"releaseCapture"),k=K(()=>{Y.current&&(u(!1),Y.current=!1,document.body.style.cursor="",document.body.style.userSelect="",v())},"finishDrag"),S=K(b=>{k()},"handlePointerUp"),s=K(b=>{k()},"handlePointerCancel"),d=K(()=>{Y.current&&(u(!1),Y.current=!1,C.current=void 0,document.body.style.cursor="",document.body.style.userSelect="")},"handleLostPointerCapture"),m=K(b=>{if(!Y.current)return;b.preventDefault();const F=E.current,Q=N.current,G=F/2,y=Q/2,se=b.clientX,q=b.clientY,ne=se-I.current.x,oe=q-I.current.y;P.current={x:ne,y:oe};const le=Math.max(0,Math.min(se,F)),x=Math.max(0,Math.min(q,Q)),T=Math.atan2(x-y,le-G),A=70,X=Math.atan2(0-y+A,0-G),ae=Math.atan2(0-y+A,F-G),ve=Math.atan2(Q-A-y,0-G),je=Math.atan2(Q-A-y,F-G);let he;T>=X&&T<=ae?he="top":T>=ae&&T<=je?he="right":T>=je&&T<=ve?he="bottom":he="left";const Ze=Math.max(0,Math.min(100,ne/F*100)),Ge=Math.max(0,Math.min(100,oe/Q*100));L.current({left:Ee(Ze),position:he,top:Ee(Ge)})},"handlePointerMove");return document.addEventListener("pointermove",m,{capture:!0,passive:!1}),document.addEventListener("pointerup",S,{capture:!0}),document.addEventListener("pointercancel",s,{capture:!0}),document.addEventListener("lostpointercapture",d,{capture:!0}),()=>{document.removeEventListener("pointermove",m,{capture:!0}),document.removeEventListener("pointerup",S,{capture:!0}),document.removeEventListener("pointercancel",s,{capture:!0}),document.removeEventListener("lostpointercapture",d,{capture:!0})}},[]);const M=l(re(()=>t.position==="left"||t.position==="right",[t.position]),"isVertical"),D=l(re(()=>{if(t.minimizePanelInactive<0)return!1;if(t.minimizePanelInactive===0)return!0;const v=globalThis.window!==void 0&&("ontouchstart"in globalThis.window||(globalThis.navigator?.maxTouchPoints??0)>0);return!p&&!t.open&&!n&&!v&&t.minimizePanelInactive>0&&!j},[p,t.open,t.minimizePanelInactive,n,j]),"isHidden"),B=l(re(()=>{const v=e.current,k=(v?.clientWidth??0)/2,S=(v?.clientHeight??0)/2,s=M?S:k,d=M?k:S,m=t.left*a/100,b=t.top*o/100;switch(t.position){case"left":return{left:w.left+s-(D?30:0),top:be(b,d+w.top,o-d-w.bottom)};case"right":return{left:a-w.right-s+(D?15:0)-(D?0:10),top:be(b,d+w.top,o-d-w.bottom)};case"top":return{left:be(m,s+w.left,a-s-w.right),top:w.top+d-(D?30:0)};default:return{left:be(m,s+w.left,a-s-w.right),top:o-w.bottom-d+(D?30:0)}}},[t.left,t.open,t.position,t.top,o,a,w,e,D,M]),"anchorPos"),te=l(re(()=>({left:`${B.left}px`,top:`${B.top}px`,transition:p?"none":"left 0.3s ease, top 0.3s ease"}),[B,p]),"anchorStyle"),J=l(re(()=>{const v=e.current,k=(v?.clientWidth??0)/2,S=(v?.clientHeight??0)/2,s=M?S:k,d=M?k:S,m={bottom:w.bottom+d,left:w.left+s,right:w.right+s,top:w.top+d},b=m.left+m.right,F=m.top+m.bottom,Q=a-b,G=o-F,y={height:`min(${t.height}vh, calc(100vh - ${F}px))`,pointerEvents:p?"none":"auto",width:`min(${t.width}vw, calc(100vw - ${b}px))`,zIndex:"-1"},se=B,q=Math.min(Q,t.width*a/100),ne=Math.min(G,t.height*o/100),oe=se?.left??0,le=se?.top??0;switch(t.position){case"bottom":case"top":{y.left="0",y.transform="translate(-50%, 0)",oe-m.left<q/2?y.left=`${q/2-oe+m.left}px`:a-oe-m.right<q/2&&(y.left=`${a-oe-q/2-m.right}px`);break}default:{y.top="0",y.transform="translate(0, -50%)",le-m.top<ne/2?y.top=`${ne/2-le+m.top}px`:o-le-m.bottom<ne/2&&(y.top=`${o-le-ne/2-m.bottom}px`);break}}switch(t.position){case"left":{y.left="0";break}case"right":{y.right="0";break}case"top":{y.top="0";break}default:{y.bottom="0";break}}return y},[B,p,w,t.height,t.position,t.width,o,a,e,M]),"iframeStyle"),Z=l(re(()=>{const v={transform:M?"translate(-50%, -50%) rotate(90deg)":"translate(-50%, -50%)"};return p&&(v.transition="none !important"),v},[p,M]),"panelStyle");return{anchorStyle:te,bringUp:O,iframeStyle:J,isDragging:p,isHidden:D,isVertical:M,onPointerDown:ee,panelStyle:Z}},"usePosition");var vt=Object.defineProperty,we=_((e,t)=>vt(e,"name",{value:t,configurable:!0}),"t$1");const bt=we(({app:e})=>{const{toggleApp:t}=Ve(),{isVisible:r,setHoveredApp:o}=ze(),a=l(f(null),"buttonRef"),n=we(()=>{o(void 0),t(e.id).catch(u=>{console.error(`[dev-toolbar] Failed to toggle app ${e.id}:`,u)})},"handleClick"),c=we(()=>{!e.tooltip||r||o(e,a.current?.getBoundingClientRect())},"handleMouseEnter"),p=we(()=>{e.tooltip&&o(void 0)},"handleMouseLeave");return i("button",{"aria-label":e.name,class:h("relative flex justify-center items-center","border-0","whitespace-nowrap no-underline p-0 m-0","cursor-pointer","bg-transparent text-muted-foreground","transition-all duration-150","hover:bg-primary/8 hover:text-primary","active:scale-[0.94]",e.active&&"bg-primary/12 text-primary","group-data-[vertical]/panel:rotate-[-90deg]"),"data-app-id":e.id,onClick:n,onMouseEnter:c,onMouseLeave:p,ref:a,title:e.tooltip?void 0:e.name,type:"button",children:g("div",{class:"relative size-6 select-none flex items-center justify-center",children:[i("div",{class:"size-6 flex items-center justify-center [&_svg]:size-4.5",dangerouslySetInnerHTML:{__html:e.icon}}),e.notification.state&&i("span",{class:h("absolute -top-1 -right-1 size-1.5 rounded-full border border-background",e.notification.level==="error"&&"bg-destructive",e.notification.level==="warning"&&"bg-warning",(!e.notification.level||e.notification.level==="info")&&"bg-info"),"data-level":e.notification.level||"info"})]})})},"AppButton"),$e="data:image/svg+xml;charset=utf-8,%3Csvg%20class%3D%22lucide%20lucide-chevron-right%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22m9%2018%206-6-6-6%22%20%2F%3E%20%3C%2Fsvg%3E",xt="data:image/svg+xml;charset=utf-8,%3Csvg%20class%3D%22lucide%20lucide-layers%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12.83%202.18a2%202%200%200%200-1.66%200L2.6%206.08a1%201%200%200%200%200%201.83l8.58%203.91a2%202%200%200%200%201.66%200l8.58-3.9a1%201%200%200%200%200-1.83z%22%20%2F%3E%20%3Cpath%20d%3D%22M2%2012a1%201%200%200%200%20.58.91l8.6%203.91a2%202%200%200%200%201.65%200l8.58-3.9A1%201%200%200%200%2022%2012%22%20%2F%3E%20%3Cpath%20d%3D%22M2%2017a1%201%200%200%200%20.58.91l8.6%203.91a2%202%200%200%200%201.65%200l8.58-3.9A1%201%200%200%200%2022%2017%22%20%2F%3E%20%3C%2Fsvg%3E",wt="data:image/svg+xml;charset=utf-8,%3Csvg%20class%3D%22lucide%20lucide-maximize%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M8%203H5a2%202%200%200%200-2%202v3%22%20%2F%3E%20%3Cpath%20d%3D%22M21%208V5a2%202%200%200%200-2-2h-3%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2016v3a2%202%200%200%200%202%202h3%22%20%2F%3E%20%3Cpath%20d%3D%22M16%2021h3a2%202%200%200%200%202-2v-3%22%20%2F%3E%20%3C%2Fsvg%3E",yt="data:image/svg+xml;charset=utf-8,%3Csvg%20class%3D%22lucide%20lucide-maximize-2%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M15%203h6v6%22%20%2F%3E%20%3Cpath%20d%3D%22m21%203-7%207%22%20%2F%3E%20%3Cpath%20d%3D%22m3%2021%207-7%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2021H3v-6%22%20%2F%3E%20%3C%2Fsvg%3E",Dt="data:image/svg+xml;charset=utf-8,%3Csvg%20class%3D%22lucide%20lucide-minimize%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M8%203v3a2%202%200%200%201-2%202H3%22%20%2F%3E%20%3Cpath%20d%3D%22M21%208h-3a2%202%200%200%201-2-2V3%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2016h3a2%202%200%200%201%202%202v3%22%20%2F%3E%20%3Cpath%20d%3D%22M16%2021v-3a2%202%200%200%201%202-2h3%22%20%2F%3E%20%3C%2Fsvg%3E",At="data:image/svg+xml;charset=utf-8,%3Csvg%20class%3D%22lucide%20lucide-minimize-2%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22m14%2010%207-7%22%20%2F%3E%20%3Cpath%20d%3D%22M20%2010h-6V4%22%20%2F%3E%20%3Cpath%20d%3D%22m3%2021%207-7%22%20%2F%3E%20%3Cpath%20d%3D%22M4%2014h6v6%22%20%2F%3E%20%3C%2Fsvg%3E",It="data:image/svg+xml;charset=utf-8,%3Csvg%20class%3D%22lucide%20lucide-picture-in-picture-2%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M21%209V6a2%202%200%200%200-2-2H4a2%202%200%200%200-2%202v10c0%201.1.9%202%202%202h4%22%20%2F%3E%20%3Crect%20width%3D%2210%22%20height%3D%227%22%20x%3D%2212%22%20y%3D%2213%22%20rx%3D%222%22%20%2F%3E%20%3C%2Fsvg%3E",He="data:image/svg+xml;charset=utf-8,%3Csvg%20class%3D%22lucide%20lucide-x%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M18%206%206%2018%22%20%2F%3E%20%3Cpath%20d%3D%22m6%206%2012%2012%22%20%2F%3E%20%3C%2Fsvg%3E";var Ct=Object.defineProperty,R=_((e,t)=>Ct(e,"name",{value:t,configurable:!0}),"a");const Le=R(({app:e})=>{const t=l(f(null),"contentRef"),r=l(f(!1),"initializedRef"),o=l(f(me()),"helpersRef");return V(()=>{if(!t.current||r.current||e.component||e.view?.type==="iframe")return;const a=t.current;if(e.init){const n=document.createElement("div");n.style.cssText="width:100%;height:100%;",a.append(n);const c=n.attachShadow({mode:"open"});ue&&(c.adoptedStyleSheets=[ue]);const p=me(),u=e.init(c,e.eventTarget,p);return u&&typeof u.then=="function"?u.then(()=>{r.current=!0}).catch(j=>{console.error(`[dev-toolbar] Failed to init app ${e.id}:`,j)}):r.current=!0,()=>{for(;a.firstChild;)a.firstChild.remove();r.current=!1}}},[e]),e.view?.type==="iframe"?i("iframe",{class:"w-full h-full block border-0",src:e.view.src,title:e.name}):e.component?i(e.component,{eventTarget:e.eventTarget,helpers:o.current}):i("div",{class:"w-full h-full",ref:t})},"AppContent"),We=R(e=>e==="error"?"bg-destructive":e==="warning"?"bg-warning":"bg-info","getNotificationColor"),Mt=R(({apps:e,initialActiveAppId:t,onClose:r})=>{const[o,a]=l($(t),"activeAppId"),[n,c]=l($(!1),"sidebarCollapsed"),p=l(re(()=>e.find(u=>u.id===o),[e,o]),"activeApp");return g("div",{class:"flex flex-row w-full h-full bg-background font-mono antialiased text-foreground",children:[g("nav",{"aria-label":"DevTools apps",class:h("flex flex-col shrink-0 bg-accent border-r border-border/60","transition-[width] duration-300 ease-[cubic-bezier(0.4,0,0.2,1)]",n?"w-12.5":"w-62.5"),children:[i("div",{class:h("flex items-center shrink-0 border-b border-border/50 h-12",n?"justify-center px-2":"px-3"),children:n?i("span",{"aria-hidden":"true",class:"text-primary font-black text-[0.8rem] select-none",children:"V"}):g("span",{class:"text-[0.6rem] font-bold uppercase tracking-[0.14em] text-muted-foreground select-none",children:[i("span",{"aria-hidden":"true",class:"text-primary/60 mr-1",children:"//"}),"DevTools"]})}),i("div",{class:"flex flex-col flex-1 overflow-y-auto p-2 gap-1 scrollbar-thin-border",children:e.filter(u=>u.component||u.init||u.view?.type==="iframe").map(u=>g("div",{class:"relative group/nav-item",children:[g("button",{"aria-label":u.name,"aria-pressed":o===u.id,class:h("relative flex items-center w-full h-10","border-0 border-l-2 cursor-pointer","transition-all duration-150",n?"justify-center px-0":"gap-2.5 px-3",o===u.id?"border-primary bg-primary/8 text-foreground":"border-transparent bg-transparent text-muted-foreground hover:bg-foreground/6 hover:text-foreground"),onClick:R(()=>a(u.id),"onClick"),type:"button",children:[u.icon?i("span",{class:h("size-4 shrink-0 flex items-center justify-center [&_svg]:size-4",o===u.id?"opacity-100":"opacity-65 group-hover/nav-item:opacity-100"),dangerouslySetInnerHTML:{__html:u.icon}}):i("span",{class:"size-4.5 shrink-0 flex items-center justify-center text-[0.65rem] font-bold uppercase select-none",children:u.name.slice(0,2)}),!n&&i("span",{class:"text-[0.8125rem] font-medium truncate leading-none tracking-[-0.01em]",children:u.name})]}),u.notification.state&&i("span",{"aria-hidden":"true",class:h("pointer-events-none absolute top-1.5 rounded-full",n?"right-1.5":"right-2.5","size-1.5",We(u.notification.level))}),n&&i("div",{class:h("absolute left-[calc(100%+0.5rem)] top-1/2 -translate-y-1/2","pointer-events-none z-50 whitespace-nowrap","opacity-0 -translate-x-1 group-hover/nav-item:opacity-100 group-hover/nav-item:translate-x-0","transition-all duration-200 ease-[cubic-bezier(0.23,1,0.32,1)]"),children:i("div",{class:"text-[0.7rem] font-medium bg-card/95 backdrop-blur-[0.625rem] text-foreground/80 px-2.5 py-1 border border-border shadow-md",children:u.name})})]},u.id))})]}),g("div",{class:"flex-1 flex flex-col min-w-0 overflow-hidden bg-accent",children:[g("div",{class:"flex items-center justify-between gap-2 pr-2 min-h-12 shrink-0",children:[g("div",{class:"flex items-center gap-3 min-w-0",children:[i("button",{"aria-label":n?"Expand sidebar":"Collapse sidebar",class:h("flex items-center justify-center size-7 shrink-0","border-0 cursor-pointer bg-transparent","text-muted-foreground hover:text-foreground hover:bg-foreground/7","transition-colors duration-150"),onClick:R(()=>c(u=>!u),"onClick"),type:"button",children:i(ie,{class:h("size-3.5 transition-transform duration-300",!n&&"rotate-180"),size:14,src:$e})}),p?.icon&&i("span",{class:"size-5 flex items-center justify-center [&_svg]:size-5 shrink-0 text-foreground opacity-80",dangerouslySetInnerHTML:{__html:p.icon}}),g("span",{class:"flex items-center gap-1 text-[0.7rem] font-bold uppercase tracking-[0.06em] text-foreground truncate",children:[i("span",{"aria-hidden":"true",class:"text-primary/50 shrink-0",children:"["}),p?.name??"DevTools",i("span",{"aria-hidden":"true",class:"text-primary/50 shrink-0",children:"]"})]})]}),i("button",{"aria-label":"Close floating window",class:h("flex items-center justify-center size-8","cursor-pointer border-0 bg-transparent","text-muted-foreground hover:text-foreground hover:bg-foreground/7","transition-all duration-200 active:scale-90"),onClick:r,title:"Close floating window",type:"button",children:i(ie,{size:12,src:He})})]}),i("div",{class:"devtools-content-scroll scrollbar-thin-border flex-1 overflow-auto min-h-0 bg-background",children:p?i(Le,{app:p},p.id):i("div",{class:"flex flex-col items-center justify-center h-full gap-3 p-8 select-none text-muted-foreground",children:i("p",{class:"text-[0.8rem]",children:"Select a tool from the sidebar"})})})]})]})},"PipPanel"),ye=20,De=95,Ae=R((e,t,r)=>Math.min(Math.max(e,t),r),"clamp"),kt=R(e=>{switch(e){case"bottom":return"bottom-14";case"left":return"left-14 top-4 bottom-4";case"right":return"right-14 top-4 bottom-4";case"top":return"top-14";default:return"bottom-14"}},"getPanelPositionClasses"),Tt=R(e=>{switch(e){case"bottom":return"origin-[bottom_center]";case"left":return"origin-[left_center]";case"right":return"origin-[right_center]";case"top":return"origin-[top_center]";default:return"origin-[bottom_center]"}},"getOriginClass"),zt=R((e,t)=>t?"opacity-100 scale-100":h("opacity-0 pointer-events-none scale-[0.99]",{bottom:"translate-y-2",left:"-translate-x-2",right:"translate-x-2",top:"-translate-y-2"}[e]??"translate-y-2"),"getVisibilityClasses"),Pt=R(({activeAppId:e,apps:t,onClose:r,onToggleApp:o,panelVisible:a,position:n})=>{const[c,p]=l($(!1),"isRendered"),[u,j]=l($(!1),"isVisible"),[z,I]=l($(!1),"sidebarCollapsed"),[,P]=l($(0),"rerender"),{state:H,updateState:C}=Ce(),{resolvedTheme:Y}=_e(),E=l(f(null),"panelDivRef"),N=l(f(!1),"isResizingRef"),L=l(f({height:H.height,width:H.width}),"dimensionsRef"),w=l(f(void 0),"enteringFromRectRef"),U=l(f(void 0),"lastDockedRectRef"),ee=l(f(!1),"previousIsFullscreenRef"),O=l(f(!1),"isExitAnimatingRef"),M=l(f(void 0),"fsTimerRef"),D=H.viewMode==="fullscreen",B=H.viewMode==="wide",te=globalThis.window?.documentPictureInPicture!==void 0,J=l(f(void 0),"pipWindowRef"),Z=l(re(()=>{if(D)return{};const s=globalThis.window?.innerWidth??1920,d=globalThis.window?.innerHeight??1080,m=`${L.current.height/100*d}px`;return n==="left"||n==="right"?{width:`${L.current.width/100*s}px`}:{height:m,left:"50%",transform:"translateX(-50%)",width:B?"calc(100vw - 2rem)":"min(calc(100vw - 2rem), 1280px)"}},[D,B,n,P]),"panelSizeStyle");V(()=>{const s=R(m=>{if(!N.current||!E.current)return;const b=E.current.getBoundingClientRect(),F=window.innerWidth,Q=window.innerHeight,G={...L.current};if(N.current.top){const y=Math.abs(b.bottom-m.clientY);G.height=Ae(y/Q*100,ye,De)}else if(N.current.bottom){const y=Math.abs(m.clientY-b.top);G.height=Ae(y/Q*100,ye,De)}else if(N.current.right){const y=Math.abs(m.clientX-b.left);G.width=Ae(y/F*100,ye,De)}else if(N.current.left){const y=Math.abs(b.right-m.clientX);G.width=Ae(y/F*100,ye,De)}L.current=G,P(y=>y+1)},"handleMouseMove"),d=R(()=>{N.current&&(C({height:L.current.height,width:L.current.width}),N.current=!1)},"handleMouseUp");return globalThis.addEventListener("mousemove",s),globalThis.addEventListener("mouseup",d),()=>{globalThis.removeEventListener("mousemove",s),globalThis.removeEventListener("mouseup",d)}},[C]),Ke(()=>{const s=ee.current;ee.current=D,M.current!==void 0&&(clearTimeout(M.current),M.current=void 0);const d=E.current;if(d)if(D&&!s&&w.current){const m=w.current;w.current=void 0;const b=globalThis.window?.innerWidth??0,F=globalThis.window?.innerHeight??0;d.style.transition="clip-path 0.35s cubic-bezier(0.4, 0, 0.2, 1)",d.style.clipPath=`inset(${m.top}px ${b-m.right}px ${F-m.bottom}px ${m.left}px)`,requestAnimationFrame(()=>{d.style.clipPath="inset(0px 0px 0px 0px)",M.current=setTimeout(()=>{d.style.clipPath="",d.style.transition="",M.current=void 0},380)})}else!D&&s&&!O.current&&(d.style.transition="none",d.style.clipPath="",requestAnimationFrame(()=>{d.style.transition=""}))},[D]),V(()=>{if(a){p(!0);const d=setTimeout(j,16,!0);return()=>clearTimeout(d)}j(!1);const s=setTimeout(p,220,!1);return()=>clearTimeout(s)},[a]);const v=R(async()=>{const s=globalThis.window?.documentPictureInPicture;if(s)try{const d=await s.requestWindow({height:600,width:900});if(J.current=d,ue){const b=d.document.createElement("style");b.textContent=Array.from(ue.cssRules,F=>F.cssText).join(`
|
|
2
|
+
`),d.document.head.append(b)}const m=d.document.createElement("div");m.style.cssText="width:100%;height:100%;display:flex;",Y==="dark"&&(d.document.documentElement.classList.add("dark"),m.classList.add("dark")),d.document.body.style.cssText="margin:0;padding:0;height:100vh;",d.document.body.append(m),ke(i(Mt,{apps:t,initialActiveAppId:e,onClose:R(()=>{d.close()},"onClose")}),m),C({isPip:!0}),d.addEventListener("pagehide",()=>{C({isPip:!1}),J.current=void 0})}catch(d){console.error("[dev-toolbar] PiP activation failed:",d)}},"activatePip");V(()=>{if(!a)return;const s=R(d=>{d.key==="Escape"&&r()},"handleKeyDown");return document.addEventListener("keydown",s),()=>document.removeEventListener("keydown",s)},[a,r]);const k=l(re(()=>t.find(s=>s.id===e),[t,e]),"activeApp");if(!c)return;const S=R(s=>d=>{d.preventDefault(),N.current=s},"startResize");return g(Te,{children:[i("div",{"aria-hidden":"true",class:h("fixed inset-0 z-[2147483646]","transition-opacity duration-200",u&&!D?"opacity-100 pointer-events-auto":"opacity-0 pointer-events-none"),onClick:H.closeOnOutsideClick?r:void 0,role:"presentation"}),g("div",{"aria-label":"DevTools panel","aria-modal":"true",class:h("fixed z-[2147483647] pointer-events-auto antialiased font-mono",D?"inset-0":kt(n),"bg-background overflow-hidden",D?"rounded-none border-0":"rounded-none border border-border","shadow-2xl","transition-panel",!D&&Tt(n),zt(n,u),"flex flex-row"),ref:E,role:"dialog",style:Z,children:[!D&&g(Te,{children:[n!=="top"&&i("div",{"aria-hidden":"true",class:"absolute left-1.5 right-1.5 top-0 h-2.5 -mt-1 cursor-ns-resize z-10 hover:bg-foreground/10 transition-colors",onMouseDown:S({top:!0})}),n==="top"&&i("div",{"aria-hidden":"true",class:"absolute left-1.5 right-1.5 bottom-0 h-2.5 -mb-1 cursor-ns-resize z-10 hover:bg-foreground/10 transition-colors",onMouseDown:S({bottom:!0})}),n==="left"&&i("div",{"aria-hidden":"true",class:"absolute top-1.5 bottom-1.5 right-0 w-2.5 -mr-1 cursor-ew-resize z-10 hover:bg-foreground/10 transition-colors",onMouseDown:S({right:!0})}),n==="right"&&i("div",{"aria-hidden":"true",class:"absolute top-1.5 bottom-1.5 left-0 w-2.5 -ml-1 cursor-ew-resize z-10 hover:bg-foreground/10 transition-colors",onMouseDown:S({left:!0})})]}),g("nav",{"aria-label":"DevTools apps",class:h("flex flex-col shrink-0 overflow-hidden","transition-[width] duration-300 ease-[cubic-bezier(0.4,0,0.2,1)]","bg-accent border-r border-border/60",z?"w-12.5":"w-62.5"),children:[i("div",{class:h("flex items-center shrink-0 border-b border-border/50 h-12",z?"justify-center px-2":"px-3"),children:z?i("span",{"aria-hidden":"true",class:"text-primary font-black text-[0.8rem] select-none",children:"V"}):g("span",{class:"text-[0.6rem] font-bold uppercase tracking-[0.14em] text-muted-foreground select-none",children:[i("span",{"aria-hidden":"true",class:"text-primary/60 mr-1",children:"//"}),"DevTools"]})}),i("div",{class:"flex flex-col flex-1 overflow-y-auto p-2 gap-1 scrollbar-thin-border",children:t.filter(s=>s.component||s.init||s.view?.type==="iframe").map(s=>g("div",{class:"relative group/nav-item",children:[g("button",{"aria-label":s.name,"aria-pressed":e===s.id,class:h("relative flex items-center w-full h-10","border-0 border-l-2 cursor-pointer","transition-all duration-150",z?"justify-center px-0":"gap-2.5 px-3",e===s.id?"border-primary bg-primary/8 text-foreground":"border-transparent bg-transparent text-muted-foreground hover:bg-foreground/6 hover:text-foreground"),onClick:R(()=>{s.id!==e&&o(s.id).catch(console.error)},"onClick"),type:"button",children:[s.icon?i("span",{class:h("size-4 shrink-0 flex items-center justify-center [&_svg]:size-4",e===s.id?"opacity-100":"opacity-65 group-hover/nav-item:opacity-100"),dangerouslySetInnerHTML:{__html:s.icon}}):i("span",{class:"size-4.5 shrink-0 flex items-center justify-center text-[0.65rem] font-bold uppercase select-none",children:s.name.slice(0,2)}),!z&&i("span",{class:"text-[0.8125rem] font-medium truncate leading-none tracking-[-0.01em]",children:s.name})]}),s.notification.state&&i("span",{"aria-hidden":"true",class:h("pointer-events-none absolute top-1.5 rounded-full",z?"right-1.5":"right-2.5","size-1.5",We(s.notification.level))}),z&&i("div",{class:h("absolute left-[calc(100%+0.5rem)] top-1/2 -translate-y-1/2","pointer-events-none z-50 whitespace-nowrap","opacity-0 -translate-x-1 group-hover/nav-item:opacity-100 group-hover/nav-item:translate-x-0","transition-all duration-200 ease-[cubic-bezier(0.23,1,0.32,1)]"),children:i("div",{class:"text-[0.7rem] font-medium bg-card/95 backdrop-blur-[0.625rem] text-foreground/80 px-2.5 py-1 border border-border shadow-md",children:s.name})})]},s.id))}),!z&&i("div",{class:"px-3 py-2.5 border-t border-border/40 shrink-0",children:g("span",{class:"text-[0.58rem] text-muted-foreground/50 leading-none select-none",children:[H.keybindings?.toggle??"Alt+Shift+D"," to toggle"]})})]}),g("div",{class:"flex-1 flex flex-col min-w-0 overflow-hidden bg-accent",children:[g("div",{class:"flex items-center justify-between gap-2 pr-2 min-h-12 shrink-0",children:[g("div",{class:"flex items-center gap-3 min-w-0",children:[i("button",{"aria-label":z?"Expand sidebar":"Collapse sidebar",class:h("flex items-center justify-center size-7 shrink-0","border-0 cursor-pointer bg-transparent","text-muted-foreground hover:text-foreground hover:bg-foreground/7","transition-colors duration-150"),onClick:R(()=>I(s=>!s),"onClick"),type:"button",children:i(ie,{class:h("size-3.5 transition-transform duration-300",!z&&"rotate-180"),size:14,src:$e})}),k?.icon&&i("span",{class:"size-5 flex items-center justify-center [&_svg]:size-5 shrink-0 text-foreground opacity-80",dangerouslySetInnerHTML:{__html:k.icon}}),g("span",{class:"flex items-center gap-1 text-[0.7rem] font-bold uppercase tracking-[0.06em] text-foreground truncate",children:[i("span",{"aria-hidden":"true",class:"text-primary/50 shrink-0",children:"["}),k?.name??"DevTools",i("span",{"aria-hidden":"true",class:"text-primary/50 shrink-0",children:"]"})]})]}),g("div",{class:"flex items-center gap-1 shrink-0",children:[(n==="bottom"||n==="top")&&!D&&i("button",{"aria-label":B?"Switch to container width":"Expand to full width",class:h("flex items-center justify-center size-8","cursor-pointer border-0 bg-transparent","text-muted-foreground hover:text-foreground hover:bg-foreground/7","transition-all duration-200 active:scale-90"),onClick:R(()=>C({viewMode:B?"default":"wide"}),"onClick"),title:B?"Container width":"Full width",type:"button",children:i(ie,{size:13,src:B?At:yt})}),i("button",{"aria-label":D?"Exit fullscreen":"Enter fullscreen",class:h("flex items-center justify-center size-8","cursor-pointer border-0 bg-transparent","text-muted-foreground hover:text-foreground hover:bg-foreground/7","transition-all duration-200 active:scale-90"),onClick:R(()=>{if(D){const s=E.current,d=U.current;if(s&&d){const m=globalThis.window?.innerWidth??0,b=globalThis.window?.innerHeight??0,F=`inset(${d.top}px ${m-d.right}px ${b-d.bottom}px ${d.left}px)`;M.current!==void 0&&(clearTimeout(M.current),M.current=void 0),O.current=!0,s.style.transition="clip-path 0.35s cubic-bezier(0.4, 0, 0.2, 1)",s.style.clipPath="inset(0px 0px 0px 0px)",requestAnimationFrame(()=>{s.style.clipPath=F,M.current=setTimeout(()=>{s.style.clipPath="",s.style.transition="",O.current=!1,M.current=void 0,C({viewMode:"default"})},380)})}else C({viewMode:"default"})}else{if(E.current){const s=E.current.getBoundingClientRect();w.current=s,U.current=s}C({viewMode:"fullscreen"})}},"onClick"),title:D?"Exit fullscreen":"Fullscreen",type:"button",children:i(ie,{size:13,src:D?Dt:wt})}),te&&!D&&i("button",{"aria-label":"Open in Picture-in-Picture window",class:h("flex items-center justify-center size-8","cursor-pointer border-0 bg-transparent",H.isPip?"text-primary hover:bg-primary/7":"text-muted-foreground hover:text-foreground hover:bg-foreground/7","transition-all duration-200 active:scale-90"),onClick:R(()=>{v().then(()=>r()).catch(console.error)},"onClick"),title:"Open in floating window (PiP)",type:"button",children:i(ie,{size:13,src:It})}),i("button",{"aria-label":"Close DevTools panel",class:h("flex items-center justify-center size-8","cursor-pointer border-0 bg-transparent","text-muted-foreground hover:text-foreground hover:bg-foreground/7","transition-all duration-200 active:scale-90"),onClick:r,title:"Close (Esc)",type:"button",children:i(ie,{size:12,src:He})})]})]}),i("div",{class:"devtools-content-scroll scrollbar-thin-border flex-1 overflow-auto min-h-0 bg-background",children:k?i(Le,{app:k},k.id):g("div",{class:"flex flex-col items-center justify-center h-full gap-7 p-8 select-none",children:[g("div",{class:"flex flex-col items-center gap-3",children:[i("div",{class:"size-14 border border-primary/25 bg-primary/5 flex items-center justify-center",children:i(ie,{class:"text-primary/45",size:26,src:xt})}),g("div",{class:"text-center space-y-1",children:[i("p",{class:"text-[0.8rem] font-medium text-foreground/65",children:"No tool selected"}),i("p",{class:"text-[0.7rem] text-muted-foreground",children:"Choose a tool from the sidebar to get started"})]})]}),t.length>0&&g("div",{class:"w-full max-w-[220px]",children:[g("p",{class:"text-[0.58rem] font-bold uppercase tracking-[0.12em] text-muted-foreground/60 mb-1.5",children:[i("span",{class:"text-primary/50",children:"// "}),"available"]}),i("div",{class:"flex flex-col gap-0.5",children:t.map(s=>g("button",{class:h("flex items-center gap-2.5 px-3 py-2","border border-border/40 bg-card/50","hover:border-primary/30 hover:bg-primary/4","cursor-pointer transition-all duration-150 text-left"),onClick:R(()=>o(s.id).catch(console.error),"onClick"),type:"button",children:[s.icon?i("span",{class:"size-3.5 shrink-0 flex items-center justify-center [&_svg]:size-3.5 text-muted-foreground",dangerouslySetInnerHTML:{__html:s.icon}}):i("span",{class:"size-3.5 text-[0.5rem] font-bold text-muted-foreground shrink-0 text-center",children:s.name.slice(0,2).toUpperCase()}),i("span",{class:"text-[0.75rem] font-medium text-muted-foreground",children:s.name})]},s.id))})]})]})})]})]})]})},"DevPanel"),jt="data:image/svg+xml;charset=utf-8,%3Csvg%20class%3D%22lucide%20lucide-alert-triangle%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22m21.73%2018-8-14a2%202%200%200%200-3.48%200l-8%2014A2%202%200%200%200%204%2021h16a2%202%200%200%200%201.73-3%22%20%2F%3E%20%3Cpath%20d%3D%22M12%209v4%22%20%2F%3E%20%3Cpath%20d%3D%22M12%2017h.01%22%20%2F%3E%20%3C%2Fsvg%3E";var Et=Object.defineProperty,Me=_((e,t)=>Et(e,"name",{value:t,configurable:!0}),"n");const Ft=Me(()=>{const[e,t]=l($(0),"errorCount"),[r,o]=l($(!1),"isOverlayOpen");if(V(()=>{const c=Me(()=>{const u=globalThis.__v_o_error_history,j=Array.isArray(u)?u.length:0;t(j);const z=globalThis.__v_o__current;if(z?.parentNode){const I=z.shadowRoot?.querySelector("#__v_o__root");o(!!I&&!I.classList.contains("hidden"))}else o(!1)},"sync"),p=setInterval(c,300);return c(),()=>clearInterval(p)},[]),e===0)return;const a=Me(()=>{const c=globalThis.__v_o__current;if(!c?.parentNode)return;const p=c.shadowRoot?.querySelector("#__v_o__root");p?.classList.contains("hidden")?(p.classList.remove("hidden"),o(!0)):typeof c.close=="function"&&(c.close(),o(!1))},"handleClick"),n=`${e} error${e===1?"":"s"} – click to ${r?"hide":"show"} overlay`;return g(Te,{children:[i("div",{"aria-hidden":"true",class:"w-px h-5 bg-primary/20 shrink-0 mx-0.5"}),i("button",{"aria-label":n,class:h("relative flex justify-center items-center size-6","border-0","whitespace-nowrap no-underline p-0 m-0","cursor-pointer","bg-transparent text-destructive","transition-all duration-150","hover:bg-destructive/8","active:scale-[0.94]","group-data-[vertical]/panel:rotate-[-90deg]"),onClick:a,title:n,type:"button",children:g("div",{class:"relative size-6 select-none flex items-center justify-center",children:[i(ie,{size:16,src:jt}),i("span",{class:"absolute -top-0.5 -right-1 min-w-3.5 h-3.5 px-0.5 rounded-full bg-destructive text-white text-[9px] font-bold leading-none flex items-center justify-center border border-background",children:e>9?"9+":e})]})})]})},"ViteOverlayButton");var Rt=Object.defineProperty,St=_((e,t)=>Rt(e,"name",{value:t,configurable:!0}),"o$2");const _t=St(()=>{const{apps:e}=Ve();return i("div",{class:"flex items-center pointer-events-auto",id:"__v_dt__bar",children:g("div",{class:"flex flex-row items-center justify-start gap-1",id:"__v_dt__bar_container",children:[e.map(t=>i(bt,{app:t},t.id)),i(Ft,{})]})})},"ToolbarBar"),Nt="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQ4IDI5MSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gPGRlZnM+IDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgZ3JhZGllbnRVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giIHgxPSIwIiB5MT0iMCIgeDI9IjEiIHkyPSIxIj4gPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSJyZWQiPiA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJzdG9wLWNvbG9yIiB2YWx1ZXM9InJlZDtwdXJwbGU7Ymx1ZTtyZWQ7IiBkdXI9IjIwcyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIC8+IDwvc3RvcD4gPHN0b3Agb2Zmc2V0PSIwLjUiIHN0b3AtY29sb3I9InB1cnBsZSI+IDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9InN0b3AtY29sb3IiIHZhbHVlcz0icHVycGxlO2JsdWU7cmVkO3B1cnBsZTsiIGR1cj0iMjBzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4gPC9zdG9wPiA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9ImJsdWUiPiA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJzdG9wLWNvbG9yIiB2YWx1ZXM9ImJsdWU7cmVkO3B1cnBsZTtibHVlOyIgZHVyPSIyMHMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPiA8L3N0b3A+IDxhbmltYXRlVHJhbnNmb3JtIGF0dHJpYnV0ZU5hbWU9ImdyYWRpZW50VHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIGZyb209IjAgLjUgLjUiIHRvPSIzNjAgLjUgLjUiIGR1cj0iMTBzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4gPC9saW5lYXJHcmFkaWVudD4gPGxpbmVhckdyYWRpZW50IGlkPSJvdmVybGF5R3JhZGllbnRBIiB4MT0iNjIiIHkxPSI0Mi4yMjUzIiB4Mj0iNjIiIHkyPSIyOTAuMjI1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+IDxzdG9wIG9mZnNldD0iMC4zNCIgc3RvcC1vcGFjaXR5PSIwLjUiIC8+IDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0id2hpdGUiIHN0b3Atb3BhY2l0eT0iMCIgLz4gPC9saW5lYXJHcmFkaWVudD4gPGxpbmVhckdyYWRpZW50IGlkPSJvdmVybGF5R3JhZGllbnRCIiB4MT0iMTg2IiB5MT0iMCIgeDI9IjE4NiIgeTI9IjI0OCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPiA8c3RvcCBzdG9wLWNvbG9yPSJ3aGl0ZSIgc3RvcC1vcGFjaXR5PSIwIiAvPiA8c3RvcCBvZmZzZXQ9IjAuNjk1IiBzdG9wLW9wYWNpdHk9IjAuNSIgLz4gPC9saW5lYXJHcmFkaWVudD4gPC9kZWZzPiA8cGF0aCBkPSJNMCAxNjYuMjI1QzAgMjM0LjcwOSA1NS41MTY3IDI5MC4yMjUgMTI0IDI5MC4yMjVWNDIuMjI1M0M1NS41MTY3IDQyLjIyNTMgMCA5Ny43NDIgMCAxNjYuMjI1WiBNMjQ4IDEyNEMyNDggMTkyLjQ4MyAxOTIuNDgzIDI0OCAxMjQgMjQ4VjBDMTkyLjQ4MyAwIDI0OCA1NS41MTY3IDI0OCAxMjRaIiBmaWxsPSJ1cmwoI2EpIiAvPiA8cGF0aCBkPSJNMCAxNjYuMjI1QzAgMjM0LjcwOSA1NS41MTY3IDI5MC4yMjUgMTI0IDI5MC4yMjVWNDIuMjI1M0M1NS41MTY3IDQyLjIyNTMgMCA5Ny43NDIgMCAxNjYuMjI1WiIgZmlsbD0idXJsKCNvdmVybGF5R3JhZGllbnRBKSIgLz4gPHBhdGggZD0iTTI0OCAxMjRDMjQ4IDE5Mi40ODMgMTkyLjQ4MyAyNDggMTI0IDI0OFYwQzE5Mi40ODMgMCAyNDggNTUuNTE2NyAyNDggMTI0WiIgZmlsbD0idXJsKCNvdmVybGF5R3JhZGllbnRCKSIgLz4gPGNpcmNsZSBjeD0iMTI0IiBjeT0iMTQ3IiByPSI1MCIgZmlsbD0id2hpdGUiIC8+IDwvc3ZnPg==",Vt="data:image/svg+xml;charset=utf-8,%3Csvg%20class%3D%22lucide%20lucide-pin%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2017v5%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2010.76a2%202%200%200%201-1.11%201.79l-1.78.9A2%202%200%200%200%205%2015.24V16a1%201%200%200%200%201%201h12a1%201%200%200%200%201-1v-.76a2%202%200%200%200-1.11-1.79l-1.78-.9A2%202%200%200%201%2015%2010.76V7a1%201%200%200%201%201-1%202%202%200%200%200%200-4H8a2%202%200%200%200%200%204%201%201%200%200%201%201%201z%22%20%2F%3E%20%3C%2Fsvg%3E";var $t=Object.defineProperty,fe=_((e,t)=>$t(e,"name",{value:t,configurable:!0}),"o$1");const Ht=fe((e,t)=>{switch(t){case"left":return{left:`${e.right+10}px`,top:`${e.top+e.height/2}px`,transform:"translateY(-50%)"};case"right":return{right:`${globalThis.window?globalThis.window.innerWidth-e.left+10:0}px`,top:`${e.top+e.height/2}px`,transform:"translateY(-50%)"};case"top":return{left:`${e.left+e.width/2}px`,top:`${e.bottom+10}px`,transform:"translateX(-50%)"};default:return{bottom:`${globalThis.window?globalThis.window.innerHeight-e.top+10:0}px`,left:`${e.left+e.width/2}px`,transform:"translateX(-50%)"}}},"getTooltipStyle"),Lt=fe(({position:e})=>{const{hoveredApp:t,hoveredAppRect:r,pinTooltip:o,setHoveredApp:a}=ze(),n=l(f(null),"overlayRef"),c=l(f(me()),"helpersRef"),[p,u]=l($(!1),"isRendered"),[j,z]=l($(!1),"isVisible"),I=!!(t?.tooltip&&r);if(V(()=>{if(I){u(!0);const N=setTimeout(z,16,!0);return()=>clearTimeout(N)}z(!1);const E=setTimeout(u,200,!1);return()=>clearTimeout(E)},[I]),!p||!t?.tooltip||!r)return;const P=t.tooltip,H=Ht(r,e),C=e==="left"||e==="right",Y=fe(()=>{const E=n.current?.getBoundingClientRect();E&&o(t,E.left,E.top),a(void 0)},"handlePin");return g("div",{"aria-label":`${t.name} quick preview`,class:h("fixed z-[2147483647] pointer-events-auto","antialiased toolbar-font","w-auto max-w-[300px]","bg-background border border-border shadow-2xl","transition-[opacity,transform] duration-200 ease-[cubic-bezier(0.23,1,0.32,1)]",j?"opacity-100 translate-y-0 scale-100":h("opacity-0 scale-[0.97]",e==="bottom"&&"translate-y-1",e==="top"&&"-translate-y-1",C&&"translate-x-[-2px]")),onMouseEnter:fe(()=>a(t,r),"onMouseEnter"),onMouseLeave:fe(()=>a(void 0),"onMouseLeave"),ref:n,role:"tooltip",style:H,children:[g("div",{class:"flex items-center justify-between gap-2 px-3 py-2 border-b border-border/60 bg-foreground/3",children:[g("div",{class:"flex items-center gap-2 min-w-0",children:[i("span",{"aria-hidden":"true",class:"size-1.5 rounded-full bg-primary shrink-0"}),i("span",{class:"text-[0.6rem] font-bold uppercase tracking-[0.1em] text-muted-foreground truncate",children:t.name})]}),i("button",{"aria-label":`Pin ${t.name} tooltip`,class:h("size-5 flex items-center justify-center shrink-0","border-0 bg-transparent cursor-pointer p-0","text-muted-foreground/60 hover:text-primary","transition-colors duration-150"),onClick:Y,title:"Pin (keep visible)",type:"button",children:i(ie,{size:11,src:Vt})})]}),i("div",{class:"p-3",children:i(P,{helpers:c.current})})]})},"AppTooltipOverlay");var Wt=Object.defineProperty,Ie=_((e,t)=>Wt(e,"name",{value:t,configurable:!0}),"o");const Bt=Ie(e=>{switch(e){case"left":return{left:"0",top:"50%",transform:"translateX(24px) translateY(-50%)"};case"right":return{left:"0",top:"50%",transform:"translateX(calc(-100% - 24px)) translateY(-50%)"};case"top":return{left:"50%",top:"0",transform:"translateX(-50%) translateY(24px)"};default:return{left:"50%",top:"0",transform:"translateX(-50%) translateY(calc(-100% - 24px))"}}},"getHintStyle"),Zt=Ie(({position:e})=>{const t="absolute w-2.5 h-2.5 bg-card border-border";switch(e){case"left":return i("div",{"aria-hidden":"true",class:h(t,"left-[-5px] top-1/2 -translate-y-1/2 rotate-45 border-b border-l")});case"right":return i("div",{"aria-hidden":"true",class:h(t,"right-[-5px] top-1/2 -translate-y-1/2 rotate-45 border-t border-r")});case"top":return i("div",{"aria-hidden":"true",class:h(t,"top-[-5px] left-1/2 -translate-x-1/2 rotate-45 border-t border-l")});default:return i("div",{"aria-hidden":"true",class:h(t,"bottom-[-5px] left-1/2 -translate-x-1/2 rotate-45 border-b border-r")})}},"Arrow"),Gt=[{icon:"⊙",text:"Click logo to open panel"},{icon:"⠿",text:"Drag pill to reposition"},{icon:"⌨",text:"Alt+Shift+D to toggle"}],Yt=Ie(({onDismiss:e,position:t})=>{const[r,o]=l($(!1),"visible"),a=l(f(void 0),"dismissTimeoutRef");V(()=>{const c=setTimeout(o,600,!0);return()=>clearTimeout(c)},[]),V(()=>()=>{a.current!==void 0&&(clearTimeout(a.current),a.current=void 0)},[]);const n=Ie(()=>{o(!1),a.current=setTimeout(e,180)},"handleDismiss");return g("div",{"aria-hidden":!r,"aria-label":"DevTools quick start",class:h("absolute pointer-events-auto","w-[240px]","bg-card border border-border","shadow-xl","p-3","font-mono","transition-all duration-200",r?"opacity-100 scale-100":"opacity-0 scale-95 pointer-events-none"),style:Bt(t),children:[i(Zt,{position:t}),g("p",{class:"flex items-center gap-1.5 mb-2.5",children:[i("span",{"aria-hidden":"true",class:"text-primary text-[0.6rem]",children:"▶"}),i("span",{class:"text-[0.6rem] font-bold uppercase tracking-[0.12em] text-foreground",children:"Quick start"})]}),i("ul",{class:"space-y-1.5 mb-3 list-none p-0 m-0",children:Gt.map(({icon:c,text:p})=>g("li",{class:"flex items-center gap-2 text-[0.7rem] text-muted-foreground",children:[i("span",{"aria-hidden":"true",class:"text-primary shrink-0 w-3 text-center leading-none",children:c}),p]},p))}),i("button",{class:h("w-full h-6 text-[0.6rem] font-bold uppercase tracking-[0.1em]","border border-primary/30 bg-primary/6","text-primary cursor-pointer","hover:bg-primary/12 hover:border-primary/50","transition-all duration-150 active:scale-[0.98]"),onClick:n,tabIndex:r?void 0:-1,type:"button",children:"Got it"})]})},"FirstVisitHint"),Ot="data:image/svg+xml;charset=utf-8,%3Csvg%20class%3D%22lucide%20lucide-pin-off%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2017v5%22%20%2F%3E%20%3Cpath%20d%3D%22M15%209.34V7a1%201%200%200%201%201-1%202%202%200%200%200%200-4H7.89%22%20%2F%3E%20%3Cpath%20d%3D%22m2%202%2020%2020%22%20%2F%3E%20%3Cpath%20d%3D%22M9%209v1.76a2%202%200%200%201-1.11%201.79l-1.78.9A2%202%200%200%200%205%2015.24V16a1%201%200%200%200%201%201h11%22%20%2F%3E%20%3C%2Fsvg%3E";var Xt=Object.defineProperty,pe=_((e,t)=>Xt(e,"name",{value:t,configurable:!0}),"i");const Jt=pe(({onMove:e,onUnpin:t,pinned:r})=>{const o=l(f(null),"cardRef"),a=l(f(null),"headerRef"),n=l(f({x:r.initialX,y:r.initialY}),"posRef"),c=l(f(void 0),"dragRef"),p=l(f(me()),"helpersRef"),u=l(f(e),"onMoveRef"),j=l(f(r.id),"pinnedIdRef");u.current=e,j.current=r.id,V(()=>{const P="transform 110ms cubic-bezier(0.25,0.46,0.45,0.94)",H=pe(Y=>{if(!c.current||!o.current)return;const E=globalThis.window?.innerWidth??9999,N=globalThis.window?.innerHeight??9999,{cardH:L,cardW:w}=c.current,U=Math.min(80,w),ee=Math.min(36,L);let O=c.current.origX+(Y.clientX-c.current.startX),M=c.current.origY+(Y.clientY-c.current.startY);O=Math.max(U-w,Math.min(E-U,O)),M=Math.max(ee-L,Math.min(N-ee,M));const D=[0,E-w,U-w,E-U],B=[0,N-L,ee-L,N-ee];let te=O,J=M;for(const Z of D)if(Math.abs(O-Z)<28){te=Z;break}for(const Z of B)if(Math.abs(M-Z)<28){J=Z;break}o.current.style.transition=te!==O||J!==M?P:"",o.current.style.transform=`translate(${te}px, ${J}px)`,n.current={x:te,y:J}},"handleMove"),C=pe(()=>{c.current&&(c.current=void 0,o.current&&(o.current.style.transition=""),a.current&&(a.current.style.cursor=""),u.current(j.current,n.current.x,n.current.y))},"handleUp");return document.addEventListener("mousemove",H),document.addEventListener("mouseup",C),()=>{document.removeEventListener("mousemove",H),document.removeEventListener("mouseup",C)}},[]);const z=r.app.tooltip;if(!z)return;const I=pe(P=>{P.button===0&&(c.current={cardH:o.current?.offsetHeight??200,cardW:o.current?.offsetWidth??300,origX:n.current.x,origY:n.current.y,startX:P.clientX,startY:P.clientY},a.current&&(a.current.style.cursor="grabbing"),P.preventDefault())},"handleDragStart");return g("div",{"aria-label":`${r.app.name} pinned tooltip`,class:h("fixed z-[2147483647] pointer-events-auto antialiased toolbar-font","w-auto max-w-[300px]","bg-background border border-primary/40 shadow-2xl"),ref:o,style:{left:0,top:0,transform:`translate(${n.current.x}px, ${n.current.y}px)`},children:[g("div",{class:h("flex items-center justify-between gap-2 px-3 py-2","border-b border-primary/20 bg-primary/4","select-none cursor-grab"),onMouseDown:I,ref:a,children:[g("div",{class:"flex items-center gap-2 min-w-0",children:[i("span",{"aria-hidden":"true",class:"size-1.5 rounded-full bg-primary shrink-0"}),i("span",{class:"text-[0.6rem] font-bold uppercase tracking-[0.1em] text-primary/70 truncate",children:r.app.name})]}),i("button",{"aria-label":`Unpin ${r.app.name}`,class:h("size-5 flex items-center justify-center shrink-0","border-0 bg-transparent cursor-pointer p-0","text-muted-foreground/50 hover:text-destructive","transition-colors duration-150"),onClick:pe(()=>t(r.id),"onClick"),onMouseDown:pe(P=>P.stopPropagation(),"onMouseDown"),title:"Unpin",type:"button",children:i(ie,{size:11,src:Ot})})]}),i("div",{class:"p-3",children:i(z,{helpers:p.current})})]})},"PinnedTooltipCard");var Ut=Object.defineProperty,ce=_((e,t)=>Ut(e,"name",{value:t,configurable:!0}),"p");const Fe="__v_dt__pinned_tooltips",Qt=ce((e,t,r,o,a)=>{const n=t*o/100,c=r*a/100,p=o/4;switch(e){case"bottom":return n<p?"bottom-left":n>o-p?"bottom-right":"bottom-center";case"left":return c<a/2?"top-left":"bottom-left";case"right":return c<a/2?"top-right":"bottom-right";case"top":return n<p?"top-left":n>o-p?"top-right":"top-center";default:return"bottom-center"}},"computePlacement"),qt=ce(({activeAppId:e,apps:t,onClearNotification:r,onRegisterApp:o,onSetNotification:a,onToggleApp:n,onUnregisterApp:c})=>{const p=l(f(null),"anchorRef"),u=l(f(null),"panelRef"),j=l(f(void 0),"leaveTimerRef"),{resolvedTheme:z}=_e(),{state:I,updateState:P}=Ce(),{closePanel:H,panelVisible:C,togglePanelVisible:Y}=pt(),{anchorStyle:E,bringUp:N,isDragging:L,isHidden:w,isVertical:U,onPointerDown:ee,panelStyle:O}=mt(u),[M,D]=l($(void 0),"hoveredApp"),[B,te]=l($(void 0),"hoveredAppRect"),J=l(f(new Map),"pinPositionsRef"),Z=de(x=>{try{const T=x.map(A=>{const X=J.current.get(A.id);return{appId:A.app.id,x:X?.x??A.initialX,y:X?.y??A.initialY}});localStorage.setItem(Fe,JSON.stringify(T))}catch{}},[]),[v,k]=l($([]),"pinnedTooltips"),S=l(f([]),"pinnedTooltipsRef");S.current=v;const s=de((x,T,A)=>{const X=`${x.id}-${Date.now()}`;k(ae=>{const ve=[...ae,{app:x,id:X,initialX:T,initialY:A}];return Z(ve),ve})},[Z]),d=de(x=>{k(T=>{const A=T.filter(X=>X.id!==x);return J.current.delete(x),Z(A),A})},[Z]),m=de((x,T,A)=>{J.current.set(x,{x:T,y:A}),Z(S.current)},[Z]),b=l(f(void 0),"storedPinsRef"),F=l(f(new Set),"restoredAppIdsRef");V(()=>{if(t.length===0)return;if(b.current===void 0)try{const A=localStorage.getItem(Fe);b.current=A?JSON.parse(A):[]}catch{b.current=[]}const x=b.current;if(x.length===0)return;const T=[];for(const A of x){if(F.current.has(A.appId))continue;const X=t.find(ae=>ae.id===A.appId&&ae.tooltip);X&&(F.current.add(A.appId),T.push({app:X,id:`${X.id}-restored-${Date.now()}-${Math.random().toString(36).slice(2)}`,initialX:A.x,initialY:A.y}))}T.length>0&&k(A=>[...A,...T])},[t]),V(()=>()=>{j.current!==void 0&&clearTimeout(j.current)},[]);const Q=de((x,T)=>{j.current!==void 0&&(clearTimeout(j.current),j.current=void 0),x?(D(x),te(T)):j.current=setTimeout(()=>{D(void 0),te(void 0),j.current=void 0},180)},[]),G=l(f(t),"appsRef");G.current=t;const y=l(f(C),"panelVisibleRef");y.current=C;const se=l(f(e),"activeAppIdRef");se.current=e;const q=l(f(n),"onToggleAppRef");q.current=n;const ne=l(re(()=>{const x=globalThis.window?.innerWidth??1920,T=globalThis.window?.innerHeight??1080;return Qt(I.position,I.left,I.top,x,T)},[I.left,I.position,I.top]),"placement"),oe=de(async x=>{const T=y.current,A=se.current,X=G.current.find(ae=>ae.id===x);if(X?.onClick??X?.onDeactivate){await q.current(x);return}if(x===A&&T){await q.current(x),P({open:!1,viewMode:"default"});return}x!==A&&await q.current(x),T||P({open:!0})},[P]),le={activeAppId:e,apps:t,clearNotification:r,hoveredApp:M,hoveredAppRect:B,isDragging:L,isVisible:C,pinnedTooltips:v,pinTooltip:s,placement:ne,registerApp:o,setDragging:ce(()=>{},"setDragging"),setHoveredApp:Q,setNotification:a,setPlacement:ce(()=>{},"setPlacement"),setVisible:ce(x=>P({open:x}),"setVisible"),toggleApp:oe,unpinTooltip:d,unregisterApp:c};if(!(!I.preferShowFloatingPanel&&!C))return i(Ne.Provider,{value:le,children:g("div",{class:h(z==="dark"&&"dark"),style:{display:"contents"},children:[g("div",{class:h("fixed z-[2147483647]","pointer-events-auto","origin-center","transition-[left_0.3s_cubic-bezier(0.4,0,0.2,1),top_0.3s_cubic-bezier(0.4,0,0.2,1)]","data-[dragging]:transition-none!","group","toolbar-font text-[13px]! leading-[1.6]! antialiased box-border [&_*]:box-border print:hidden",I.reduceMotion&&"transition-none! animate-none! [&_*]:transition-none! [&_*]:animate-none!"),"data-dragging":L?"":void 0,"data-placement":ne,id:"__v_dt__root",onMouseMove:N,ref:p,style:E,children:[g("div",{class:h("group/panel","absolute left-0 top-0","flex flex-row justify-start items-center","gap-1 p-1","box-border","overflow-hidden","rounded-none","text-foreground select-none",L?"cursor-grabbing":"cursor-grab","bg-background border-0",U?"shadow-pill-vertical!":"shadow-pill",w?"max-w-12!":"","transition-pill"),"data-vertical":U||void 0,onPointerDown:ce(x=>{I.isFirstVisit&&P({isFirstVisit:!1}),ee(x)},"onPointerDown"),ref:u,style:O,children:[i("button",{"aria-label":"Toggle devtools panel",class:h("size-8 flex justify-center items-center shrink-0","cursor-pointer p-0 m-0 border-0","bg-transparent","transition-all duration-150","hover:bg-primary/8 active:scale-[0.95]","group-data-[vertical]/panel:rotate-[-90deg]",C?"opacity-100":"opacity-60"),onClick:ce(x=>{x.stopPropagation(),I.isFirstVisit&&P({isFirstVisit:!1}),Y()},"onClick"),title:"Toggle devtools panel",type:"button",children:i("img",{alt:"Visulima",class:"size-6",src:Nt})}),i("div",{"aria-hidden":"true",class:h("w-px h-5 bg-primary/20 shrink-0",w&&"hidden")}),i("div",{class:h("px-0.5",w&&"hidden"),children:i(_t,{})})]}),I.isFirstVisit&&i(Yt,{onDismiss:ce(()=>P({isFirstVisit:!1}),"onDismiss"),position:I.position})]}),i(Pt,{activeAppId:e,apps:t,onClose:H,onToggleApp:n,panelVisible:C,position:I.position}),i(Lt,{position:I.position}),v.map(x=>i(Jt,{onMove:m,onUnpin:d,pinned:x},x.id))]})})},"ToolbarContainer");var Kt=Object.defineProperty,Be=_((e,t)=>Kt(e,"name",{value:t,configurable:!0}),"r");const er=Be((e,t)=>{const r=Re(),o=Je();if(!o)throw new Error("Global hook not initialized");return{clearNotification(a){e.clearNotification(a)},async closeApp(){const a=e.getActiveApp();a&&await e.toggleApp(a.id)},getActiveApp(){return e.getActiveApp()?.id},getApps(){return e.getApps()},getSettings(){return Se()},hide(){t.hide()},hook:o,notify(a,n){e.setNotification(a,!0,n)},async openApp(a){await e.toggleApp(a)},registerApp(a){e.registerApp(a)},rpc:new Proxy({},{get(a,n){return(...c)=>r.callServer(n,...c)}}),setAppActive(a,n){e.setAppActive(a,n)},show(){t.show()},toggle(){t.toggle()},unregisterApp(a){e.unregisterApp(a)},updateSettings(a){Xe(a)},version:"0.0.0"}},"createGlobalAPI"),tr=Be(e=>{globalThis.window!==void 0&&(globalThis.__VISULIMA_DEVTOOLS__=e)},"setupGlobalAPI");var rr=Object.defineProperty,W=_((e,t)=>rr(e,"name",{value:t,configurable:!0}),"t");class ir extends HTMLElement{static{_(this,"DevToolbar")}static{W(this,"DevToolbar")}appManager;hasBeenInitialized=!1;renderRoot=void 0;constructor(){super(),this.attachShadow({mode:"open"}),this.appManager=new nt}connectedCallback(){if(document.querySelectorAll("dev-toolbar").length>1){console.warn("[dev-toolbar] Only one instance is allowed. Removing duplicate."),this.remove();return}this.hasBeenInitialized&&this.shadowRoot&&!this.renderRoot&&this.render()}disconnectedCallback(){this.renderRoot&&(ke(null,this.renderRoot),this.renderRoot=void 0)}init(){if(this.hasBeenInitialized)return;this.hasBeenInitialized=!0;const t=Ue(n=>{this.appManager.registerApp(n),this.render()},(n,c)=>{Qe().addEvent(n,c)}),r=er({clearNotification:W(n=>{this.appManager.clearNotification(n),this.render()},"clearNotification"),getActiveApp:W(()=>this.appManager.getActiveApp(),"getActiveApp"),getApps:W(()=>this.appManager.getAllApps(),"getApps"),registerApp:W(n=>{this.appManager.registerApp(n),this.render()},"registerApp"),setAppActive:W((n,c)=>{this.appManager.setAppActive(n,c),this.render()},"setAppActive"),setNotification:W((n,c,p)=>{this.appManager.setNotification(n,c,p),this.render()},"setNotification"),toggleApp:W(n=>this.appManager.toggleApp(n),"toggleApp"),unregisterApp:W(n=>{this.appManager.unregisterApp(n),this.render()},"unregisterApp")},{hide:W(()=>this.setToolbarVisible(!1),"hide"),show:W(()=>this.setToolbarVisible(!0),"show"),toggle:W(()=>{const n=this.isHidden();this.setToolbarVisible(!n)},"toggle")});tr(r),t.emit("devtools:init");const o=Se(),a=this.appManager.getAllApps().find(n=>n.defaultOpen);a&&!this.appManager.getActiveApp()&&this.appManager.openApp(a.id).catch(n=>{console.error(`[dev-toolbar] Failed to auto-open defaultOpen app ${a.id}:`,n)}),this.render(),this.setupEventListeners(),o.defaultVisible&&this.setToolbarVisible(!0)}isHidden(){return this.shadowRoot.querySelector("#__v_dt__root")?.hasAttribute("data-hidden")??!0}setToolbarVisible(t){const r=this.shadowRoot.querySelector("#__v_dt__root");r&&(t?delete r.dataset.hidden:r.dataset.hidden=""),this.render()}registerApp(t,r=!1){this.appManager.registerApp(t,r),this.render()}getAppManager(){return this.appManager}render(){const t=this.appManager.getAllApps(),r=this.shadowRoot;ue&&(r.adoptedStyleSheets=[ue]);let o=r.querySelector("style");o||(o=document.createElement("style"),o.textContent=`
|
|
3
3
|
:host {
|
|
4
4
|
all: initial;
|
|
5
5
|
/* Cover the full viewport so the host establishes a stacking context
|
|
@@ -18,4 +18,4 @@ var Xe=Object.defineProperty;var N=(e,t)=>Xe(e,"name",{value:t,configurable:!0})
|
|
|
18
18
|
display: none;
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
-
`,r.append(o)),this.renderRoot||(this.renderRoot=document.createElement("div"),r.append(this.renderRoot));const a=this.appManager.getActiveApp()?.id;
|
|
21
|
+
`,r.append(o)),this.renderRoot||(this.renderRoot=document.createElement("div"),r.append(this.renderRoot));const a=this.appManager.getActiveApp()?.id;ke(i(qt,{activeAppId:a,apps:t,onClearNotification:W(n=>{this.appManager.clearNotification(n),this.render()},"onClearNotification"),onRegisterApp:W(n=>{this.render()},"onRegisterApp"),onSetNotification:W((n,c,p)=>{this.appManager.setNotification(n,c,p),this.render()},"onSetNotification"),onToggleApp:W(async n=>{await this.appManager.toggleApp(n),this.render()},"onToggleApp"),onUnregisterApp:W(n=>{this.appManager.unregisterApp(n),this.render()},"onUnregisterApp")}),this.renderRoot)}setupEventListeners(){document.addEventListener("keyup",t=>{if(t.key!=="Escape"||this.isHidden())return;const r=this.appManager.getActiveApp();r?this.appManager.toggleApp(r.id).then(()=>{this.render()}).catch(o=>{console.error("[dev-toolbar] Error toggling app:",o)}):this.setToolbarVisible(!1)})}}if(globalThis.window!==void 0&&(customElements.get("dev-toolbar")||customElements.define("dev-toolbar",ir),!customElements.get("dev-toolbar-app-canvas"))){class e extends HTMLElement{static{_(this,"n")}static{W(this,"DevToolbarAppCanvas")}constructor(){super(),this.attachShadow({mode:"open"})}}customElements.define("dev-toolbar-app-canvas",e)}export{ir as DevToolbar,ue as sharedToolbarStylesheet};
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Annotation intent — describes what the user wants to communicate.
|
|
3
|
+
*/
|
|
4
|
+
export type AnnotationIntent = "approve" | "change" | "fix" | "question";
|
|
5
|
+
/**
|
|
6
|
+
* Annotation severity — how urgent or important the annotation is.
|
|
7
|
+
*/
|
|
8
|
+
export type AnnotationSeverity = "blocking" | "important" | "suggestion";
|
|
9
|
+
/**
|
|
10
|
+
* Annotation status — lifecycle state.
|
|
11
|
+
*/
|
|
12
|
+
export type AnnotationStatus = "acknowledged" | "dismissed" | "pending" | "resolved";
|
|
13
|
+
/**
|
|
14
|
+
* A single message in a conversation thread attached to an annotation.
|
|
15
|
+
*/
|
|
16
|
+
export interface ThreadMessage {
|
|
17
|
+
/** Message text */
|
|
18
|
+
content: string;
|
|
19
|
+
/** Unique message identifier */
|
|
20
|
+
id?: string;
|
|
21
|
+
/** Who wrote it — e.g. "human", "agent", or a specific agent name */
|
|
22
|
+
role: string;
|
|
23
|
+
/** ISO 8601 timestamp */
|
|
24
|
+
timestamp: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Bounding box of the annotated element relative to the viewport.
|
|
28
|
+
*/
|
|
29
|
+
export interface BoundingBox {
|
|
30
|
+
height: number;
|
|
31
|
+
width: number;
|
|
32
|
+
x: number;
|
|
33
|
+
y: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Detected framework component information.
|
|
37
|
+
*/
|
|
38
|
+
export interface FrameworkContext {
|
|
39
|
+
/** Component name */
|
|
40
|
+
componentName?: string;
|
|
41
|
+
/** Full component stack (e.g. ["App", "Layout", "Header", "Button"]) */
|
|
42
|
+
componentStack?: string[];
|
|
43
|
+
/** Additional framework-specific data (e.g. props) */
|
|
44
|
+
data?: Record<string, unknown>;
|
|
45
|
+
/** Framework identifier (react, vue, svelte, etc.) */
|
|
46
|
+
framework: string;
|
|
47
|
+
/** Source file path */
|
|
48
|
+
sourceFile?: string;
|
|
49
|
+
/** Source line number */
|
|
50
|
+
sourceLine?: number;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Captured accessibility attributes for an element.
|
|
54
|
+
*/
|
|
55
|
+
export interface AccessibilityInfo {
|
|
56
|
+
/** aria-describedby content */
|
|
57
|
+
ariaDescribedBy?: string;
|
|
58
|
+
/** aria-label value */
|
|
59
|
+
ariaLabel?: string;
|
|
60
|
+
/** Whether the element is focusable */
|
|
61
|
+
focusable: boolean;
|
|
62
|
+
/** ARIA role (explicit or implicit) */
|
|
63
|
+
role?: string;
|
|
64
|
+
/** tabindex value */
|
|
65
|
+
tabindex?: number;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* A visual annotation placed on a page element during development.
|
|
69
|
+
* Stored in `.devtoolbar/annotations.json`.
|
|
70
|
+
*/
|
|
71
|
+
export interface Annotation {
|
|
72
|
+
/** Captured accessibility attributes */
|
|
73
|
+
accessibility?: AccessibilityInfo;
|
|
74
|
+
/** Element bounding box at annotation time */
|
|
75
|
+
boundingBox?: BoundingBox;
|
|
76
|
+
/** User feedback / description */
|
|
77
|
+
comment: string;
|
|
78
|
+
/** Key computed CSS properties for forensic context */
|
|
79
|
+
computedStyles?: string;
|
|
80
|
+
/** ISO 8601 creation timestamp */
|
|
81
|
+
createdAt: string;
|
|
82
|
+
/** CSS classes on the annotated element (module hashes cleaned) */
|
|
83
|
+
cssClasses?: string;
|
|
84
|
+
/** Bounding boxes for multi-select annotations */
|
|
85
|
+
elementBoundingBoxes?: BoundingBox[];
|
|
86
|
+
/** Human-readable element label (e.g. 'button "Submit"') */
|
|
87
|
+
elementLabel?: string;
|
|
88
|
+
/** CSS selector path to the element */
|
|
89
|
+
elementPath?: string;
|
|
90
|
+
/** HTML tag name of the annotated element */
|
|
91
|
+
elementTag: string;
|
|
92
|
+
/** Detected framework component context */
|
|
93
|
+
frameworkContext?: FrameworkContext;
|
|
94
|
+
/** Full DOM ancestry path (e.g. "body > main > article > p") */
|
|
95
|
+
fullPath?: string;
|
|
96
|
+
/** Unique identifier (crypto.randomUUID) */
|
|
97
|
+
id: string;
|
|
98
|
+
/** What the user wants — fix, change, question, or approve */
|
|
99
|
+
intent: AnnotationIntent;
|
|
100
|
+
/** Whether the element has fixed/sticky positioning */
|
|
101
|
+
isFixed?: boolean;
|
|
102
|
+
/** Whether this is a multi-select (drag) annotation */
|
|
103
|
+
isMultiSelect?: boolean;
|
|
104
|
+
/** Sibling elements for spatial context */
|
|
105
|
+
nearbyElements?: string;
|
|
106
|
+
/** Text near the annotated element for additional context */
|
|
107
|
+
nearbyText?: string;
|
|
108
|
+
/** ISO 8601 resolution timestamp */
|
|
109
|
+
resolvedAt?: string;
|
|
110
|
+
/** Who resolved it — "human" or "agent" (or a specific agent name) */
|
|
111
|
+
resolvedBy?: string;
|
|
112
|
+
/** Path to screenshot file relative to .devtoolbar/ (e.g. "screenshots/<id>.png") */
|
|
113
|
+
screenshot?: string;
|
|
114
|
+
/** Text the user had selected when annotating */
|
|
115
|
+
selectedText?: string;
|
|
116
|
+
/** Severity level */
|
|
117
|
+
severity: AnnotationSeverity;
|
|
118
|
+
/** Source file location from data-vdt-source (file:line:col) */
|
|
119
|
+
source?: string;
|
|
120
|
+
/** Lifecycle status */
|
|
121
|
+
status: AnnotationStatus;
|
|
122
|
+
/** Conversation thread (human ↔ AI agent) */
|
|
123
|
+
thread?: ThreadMessage[];
|
|
124
|
+
/** ISO 8601 last-updated timestamp */
|
|
125
|
+
updatedAt: string;
|
|
126
|
+
/** Page URL where the annotation was created */
|
|
127
|
+
url: string;
|
|
128
|
+
/** Click X as percentage of viewport width (0-100) — survives resize */
|
|
129
|
+
x: number;
|
|
130
|
+
/**
|
|
131
|
+
* Click Y as absolute page position (pixels from document top) — survives scroll.
|
|
132
|
+
* For fixed/sticky elements, Y is viewport-relative instead.
|
|
133
|
+
*/
|
|
134
|
+
y: number;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Data required to create a new annotation (server-generated fields omitted).
|
|
138
|
+
*/
|
|
139
|
+
export type CreateAnnotationData = Omit<Annotation, "createdAt" | "id" | "resolvedAt" | "resolvedBy" | "status" | "thread" | "updatedAt">;
|
|
140
|
+
/**
|
|
141
|
+
* Fields that can be updated on an existing annotation.
|
|
142
|
+
*/
|
|
143
|
+
export interface UpdateAnnotationData {
|
|
144
|
+
/** Updated comment text */
|
|
145
|
+
comment?: string;
|
|
146
|
+
/** Updated intent */
|
|
147
|
+
intent?: AnnotationIntent;
|
|
148
|
+
/** Who resolved the annotation */
|
|
149
|
+
resolvedBy?: string;
|
|
150
|
+
/** Updated severity */
|
|
151
|
+
severity?: AnnotationSeverity;
|
|
152
|
+
/** New status */
|
|
153
|
+
status?: AnnotationStatus;
|
|
154
|
+
/** Append a thread message */
|
|
155
|
+
threadMessage?: ThreadMessage;
|
|
156
|
+
}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Public type exports
|
|
3
3
|
*/
|
|
4
|
+
export type { AccessibilityInfo, Annotation, AnnotationIntent, AnnotationSeverity, AnnotationStatus, BoundingBox, CreateAnnotationData, FrameworkContext, ThreadMessage, UpdateAnnotationData, } from "./annotations.d.ts";
|
|
4
5
|
export type { AppView, DevToolbarApp, DevToolbarAppState, ServerFunctions, ServerHelpers, ToolbarAppEventTarget } from "./app.d.ts";
|
|
5
6
|
export type { VisulimaDevTools } from "./global-api.d.ts";
|
|
6
7
|
export type { DevToolbarHook, HookEvents } from "./hooks.d.ts";
|
package/dist/types/rpc.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { ViteDevServer } from "vite";
|
|
2
|
+
import type { StaticAsset } from "../rpc/functions/assets.d.ts";
|
|
2
3
|
import type { SerializableModuleNode } from "../rpc/functions/module-graph.d.ts";
|
|
3
4
|
import type { TailwindConfigResult } from "../rpc/functions/tailwind-config.d.ts";
|
|
5
|
+
import type { Annotation, CreateAnnotationData, UpdateAnnotationData } from "./annotations.d.ts";
|
|
4
6
|
/**
|
|
5
7
|
* Server-side RPC functions
|
|
6
8
|
* These can be called from the client
|
|
@@ -10,10 +12,33 @@ export interface ServerFunctions {
|
|
|
10
12
|
* Extension point for custom server functions
|
|
11
13
|
*/
|
|
12
14
|
[key: string]: (...args: any[]) => Promise<any>;
|
|
15
|
+
/**
|
|
16
|
+
* Create a new annotation
|
|
17
|
+
* @param data Annotation data (id, timestamps, status are generated server-side)
|
|
18
|
+
*/
|
|
19
|
+
createAnnotation: (data: CreateAnnotationData) => Promise<Annotation>;
|
|
20
|
+
/**
|
|
21
|
+
* Delete an annotation and its screenshot
|
|
22
|
+
* @param id Annotation ID
|
|
23
|
+
*/
|
|
24
|
+
deleteAnnotation: (id: string) => Promise<boolean>;
|
|
25
|
+
/**
|
|
26
|
+
* Get all annotations
|
|
27
|
+
*/
|
|
28
|
+
getAnnotations: () => Promise<Annotation[]>;
|
|
13
29
|
/**
|
|
14
30
|
* Get module dependency graph
|
|
15
31
|
*/
|
|
16
32
|
getModuleGraph: () => Promise<SerializableModuleNode[]>;
|
|
33
|
+
/**
|
|
34
|
+
* Get a screenshot as a base64 data URL
|
|
35
|
+
* @param annotationId Annotation ID
|
|
36
|
+
*/
|
|
37
|
+
getScreenshot: (annotationId: string) => Promise<string | null>;
|
|
38
|
+
/**
|
|
39
|
+
* Get all static assets from the public directory
|
|
40
|
+
*/
|
|
41
|
+
getStaticAssets: () => Promise<StaticAsset[]>;
|
|
17
42
|
/**
|
|
18
43
|
* Get full Tailwind CSS theme (default + user overrides)
|
|
19
44
|
*/
|
|
@@ -27,13 +52,27 @@ export interface ServerFunctions {
|
|
|
27
52
|
* @param file File path
|
|
28
53
|
* @param line Line number (1-based)
|
|
29
54
|
* @param column Column number (1-based)
|
|
55
|
+
* @param editor Editor override (e.g. "code", "webstorm") — empty string means auto-detect
|
|
30
56
|
*/
|
|
31
|
-
openInEditor: (file: string, line?: number, column?: number) => Promise<void>;
|
|
57
|
+
openInEditor: (file: string, line?: number, column?: number, editor?: string) => Promise<void>;
|
|
32
58
|
/**
|
|
33
59
|
* Read file contents
|
|
34
60
|
* @param path File path
|
|
35
61
|
*/
|
|
36
62
|
readFile: (path: string) => Promise<string>;
|
|
63
|
+
/**
|
|
64
|
+
* Save a screenshot for an annotation
|
|
65
|
+
* @param annotationId Annotation ID
|
|
66
|
+
* @param dataUrl Base64 data URL (PNG, JPEG, WebP, or SVG)
|
|
67
|
+
* @returns Relative path within .devtoolbar/
|
|
68
|
+
*/
|
|
69
|
+
saveScreenshot: (annotationId: string, dataUrl: string) => Promise<string>;
|
|
70
|
+
/**
|
|
71
|
+
* Update an existing annotation
|
|
72
|
+
* @param id Annotation ID
|
|
73
|
+
* @param data Fields to update
|
|
74
|
+
*/
|
|
75
|
+
updateAnnotation: (id: string, data: UpdateAnnotationData) => Promise<Annotation | null>;
|
|
37
76
|
}
|
|
38
77
|
/**
|
|
39
78
|
* Client-side RPC functions
|
|
@@ -95,3 +134,4 @@ export interface ClientRPCContext {
|
|
|
95
134
|
*/
|
|
96
135
|
registerFunction: <K extends keyof ClientFunctions>(name: K, function_: ClientFunctions[K]) => void;
|
|
97
136
|
}
|
|
137
|
+
export { type StaticAsset } from "../rpc/functions/assets.d.ts";
|