@visulima/dev-toolbar 1.0.0-alpha.3 → 1.0.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/apps/a11y/a11y-store.d.ts +12 -16
  3. package/dist/apps/a11y/index.js +2 -21
  4. package/dist/apps/inspector/index.js +1 -17
  5. package/dist/apps/module-graph/index.js +1 -20
  6. package/dist/apps/more/index.js +2 -19
  7. package/dist/apps/performance/index.js +1 -17
  8. package/dist/apps/seo/index.js +1 -17
  9. package/dist/apps/settings/index.js +1 -17
  10. package/dist/apps/tailwind/index.js +6 -6
  11. package/dist/apps/timeline/index.js +1 -18
  12. package/dist/apps/vite-config/index.js +1 -16
  13. package/dist/client/overlay.js +1 -1
  14. package/dist/hooks/create-hook.d.ts +7 -5
  15. package/dist/hooks/events.d.ts +4 -2
  16. package/dist/hooks/global-hook.d.ts +6 -6
  17. package/dist/index.d.ts +2 -1
  18. package/dist/index.js +1 -1
  19. package/dist/packem_chunks/inject-source.js +1 -1
  20. package/dist/packem_shared/Popover-CLt7YhUF.js +1 -0
  21. package/dist/packem_shared/Tabs-CXERaeAp.js +1 -0
  22. package/dist/packem_shared/Tooltip-tlBN-NdK.js +1 -0
  23. package/dist/packem_shared/createClientRPCContext-DgRxrllw.js +1 -0
  24. package/dist/packem_shared/createDevToolbarHook-4bZZiHPI.js +1 -0
  25. package/dist/packem_shared/createServerRPCContext-CEm1Ymkn.js +1 -0
  26. package/dist/packem_shared/getTimelineStore-B1cfjWV8.js +1 -0
  27. package/dist/packem_shared/{setupGlobalHook-CFuxsCyl.js → setupGlobalHook-CCf9Logv.js} +1 -1
  28. package/dist/packem_shared/sharedToolbarStylesheet-DOV-Jwcm.js +2 -0
  29. package/dist/packem_shared/store-DaUtLjf3.js +1 -0
  30. package/dist/packem_shared/{use-theme-CX1gG6Sv.js → use-theme-BOw3dPpY.js} +1 -1
  31. package/dist/performance/monitor.d.ts +27 -26
  32. package/dist/rpc/client.d.ts +6 -4
  33. package/dist/rpc/functions/open-in-editor.d.ts +7 -5
  34. package/dist/rpc/functions/tailwind-config.d.ts +7 -4
  35. package/dist/rpc/functions/vite-config.d.ts +6 -4
  36. package/dist/rpc/server.d.ts +9 -6
  37. package/dist/timeline/capture.d.ts +3 -1
  38. package/dist/timeline/index.d.ts +2 -1
  39. package/dist/timeline/store.d.ts +12 -22
  40. package/dist/toolbar/app-manager.d.ts +45 -43
  41. package/dist/toolbar/components/app-canvas.d.ts +1 -1
  42. package/dist/toolbar/components/toolbar-container.d.ts +1 -1
  43. package/dist/toolbar/components/vite-overlay-button.d.ts +2 -2
  44. package/dist/toolbar/context/toolbar-context.d.ts +20 -19
  45. package/dist/toolbar/global-api.d.ts +3 -3
  46. package/dist/toolbar/helpers.d.ts +5 -3
  47. package/dist/toolbar/hooks/use-apps.d.ts +5 -3
  48. package/dist/toolbar/hooks/use-frame-state.d.ts +16 -10
  49. package/dist/toolbar/hooks/use-panel-visible.d.ts +9 -7
  50. package/dist/toolbar/hooks/use-position.d.ts +7 -5
  51. package/dist/toolbar/hooks/use-theme.d.ts +6 -4
  52. package/dist/toolbar/hooks/use-toolbar.d.ts +4 -2
  53. package/dist/toolbar/index.d.ts +8 -14
  54. package/dist/toolbar/index.js +3 -3
  55. package/dist/toolbar/settings.d.ts +7 -7
  56. package/dist/toolbar/stylesheet.d.ts +3 -1
  57. package/dist/toolbar/utils/index.d.ts +3 -3
  58. package/dist/types/global-api.d.ts +22 -33
  59. package/dist/types/hooks.d.ts +32 -34
  60. package/dist/types/messaging.d.ts +2 -2
  61. package/dist/types/rpc.d.ts +3 -6
  62. package/dist/types/timeline.d.ts +3 -3
  63. package/dist/types/toolbar.d.ts +1 -1
  64. package/dist/ui/components/icon.d.ts +3 -4
  65. package/dist/ui/components/popover.d.ts +1 -1
  66. package/dist/ui/components/tabs.d.ts +1 -1
  67. package/dist/ui/components/tooltip.d.ts +1 -1
  68. package/dist/ui/index.js +1 -1
  69. package/dist/utils/cn.d.ts +3 -3
  70. package/dist/vite/inject-source.d.ts +0 -1
  71. package/dist/vite/matcher.d.ts +2 -1
  72. package/dist/vite-plugin.d.ts +5 -5
  73. package/dist/vite-plugin.js +2 -2
  74. package/package.json +4 -3
  75. package/dist/packem_shared/Popover-o3Vkvndp.js +0 -1
  76. package/dist/packem_shared/Tabs-BBc4S-2T.js +0 -1
  77. package/dist/packem_shared/TimelineStore-BgBrirKd.js +0 -1
  78. package/dist/packem_shared/Tooltip-BwK-2I9P.js +0 -1
  79. package/dist/packem_shared/createClientRPCContext-DzKQpKTk.js +0 -1
  80. package/dist/packem_shared/createDevToolbarHook-DGNxqk8N.js +0 -1
  81. package/dist/packem_shared/createServerRPCContext-CRd6VAWp.js +0 -1
  82. package/dist/packem_shared/sharedToolbarStylesheet-DHHoFz2-.js +0 -2
  83. package/dist/packem_shared/store-BxE0w51s.js +0 -1
@@ -1,5 +1,5 @@
1
- var Ge=Object.defineProperty;var R=(e,t)=>Ge(e,"name",{value:t,configurable:!0});import{createContext as Ye,render as ke}from"preact";import{createClientRPCContext as _e}from"../packem_shared/createClientRPCContext-DzKQpKTk.js";import{updateSettings as Oe,loadSettings as Ne}from"../packem_shared/loadSettings-hvjR4fcS.js";import{getGlobalHook as Xe,setupGlobalHook as Je}from"../packem_shared/setupGlobalHook-CFuxsCyl.js";import{sharedToolbarStylesheet as he}from"../packem_shared/sharedToolbarStylesheet-DHHoFz2-.js";import{jsx as n,jsxs as m,Fragment as Te}from"preact/jsx-runtime";import{g as Ue}from"../packem_shared/store-BxE0w51s.js";import{addHookName as l}from"preact/devtools";import{useContext as Qe,useEffect as V,useMemo as ee,useState as $,useRef as b,useCallback as ce,useLayoutEffect as qe}from"preact/hooks";import h from"../packem_shared/cn-DWLJYh3h.js";import te from"../packem_shared/Icon-DWFLZkwW.js";import{u as Ce,a as Ve}from"../packem_shared/use-theme-CX1gG6Sv.js";var Ke=Object.defineProperty,et=R((e,t)=>Ke(e,"name",{value:t,configurable:!0}),"t$3");const me=et(()=>{const e=_e();return{rpc:new Proxy({},{get(t,r){return(...i)=>e.callServer(r,...i)}})}},"createServerHelpers");var tt=Object.defineProperty,rt=R((e,t)=>tt(e,"name",{value:t,configurable:!0}),"n$3");class nt{static{R(this,"AppManager")}static{rt(this,"AppManager")}apps=new Map;activeAppId=null;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=null));const i=new EventTarget,o={...t,active:!1,builtIn:r,eventTarget:i,notification:{state:!1},status:"ready"};this.apps.set(t.id,o)}async unregisterApp(t){const r=this.apps.get(t);if(r?.destroy&&this.initializedApps.has(t)){const i=this.appCanvases.get(t);if(i)try{await r.destroy(i.shadowRoot)}catch(o){console.error(`[dev-toolbar] destroy() failed for app ${t}:`,o)}}this.apps.delete(t),this.initializedApps.delete(t),this.appCanvases.delete(t),this.activeAppId===t&&(this.activeAppId=null)}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 i=r.active;return r.active=!i,!i&&r.onClick?await r.onClick():i&&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 i=this.apps.get(t);i&&(i.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 i=this.getAppCanvas(t);if(i){const o=me(),a=r.init(i.shadowRoot,r.eventTarget,o);a&&typeof a.then=="function"&&await a,this.markAppInitialized(t),r.status="ready"}else r.status="pending"}catch(i){return console.error(`[dev-toolbar] Failed to init app ${t}:`,i),r.status="error",r.active=!1,this.activeAppId=null,!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 i=this.getAppCanvas(t);if(i)try{const o=r.beforeTogglingOff(i.shadowRoot);if(!(o&&typeof o.then=="function"?await o:o))return!1}catch(o){console.error(`[dev-toolbar] beforeTogglingOff() threw for app ${t}:`,o)}}return r.active=!1,this.activeAppId===t&&(this.activeAppId=null),!0}setNotification(t,r,i){const o=this.apps.get(t);o&&(o.notification={level:i,state:r})}clearNotification(t){const r=this.apps.get(t);r&&(r.notification={state:!1})}getAppCanvas(t){return this.appCanvases.get(t)||null}setAppCanvas(t,r){this.appCanvases.set(t,r)}}var it=Object.defineProperty,ot=R((e,t)=>it(e,"name",{value:t,configurable:!0}),"t$2");const $e=Ye(null),Pe=ot(()=>{const e=Qe($e);if(!e)throw new Error("useToolbarContext must be used within ToolbarContext provider");return e},"useToolbarContext");var at=Object.defineProperty,st=R((e,t)=>at(e,"name",{value:t,configurable:!0}),"t$1");const Fe=st(()=>{const e=Pe();return{activeAppId:e.activeAppId,apps:e.apps,clearNotification:e.clearNotification,registerApp:e.registerApp,setNotification:e.setNotification,toggleApp:e.toggleApp,unregisterApp:e.unregisterApp}},"useApps");var lt=Object.defineProperty,ge=R((e,t)=>lt(e,"name",{value:t,configurable:!0}),"s$2");const ct=ge((e,t)=>{const r=t.split("+"),i=r.at(-1)??"",o=r.includes("Alt"),a=r.includes("Shift"),c=r.includes("Control")||r.includes("Ctrl"),p=r.includes("Meta")||r.includes("Cmd");return(e.key===i||e.code===`Key${i.toUpperCase()}`)&&e.altKey===o&&e.shiftKey===a&&e.ctrlKey===c&&e.metaKey===p},"matchesBinding"),dt=ge(()=>{const{state:e,updateState:t}=Ce(),r=ge((a,c)=>{const p=c??!e.open;t({open:p,...p?{}:{viewMode:"default"}})},"togglePanelVisible"),i=ge(()=>{e.open&&t({open:!1,viewMode:"default"})},"closePanel");V(()=>{const a=e.keybindings?.toggle??"Alt+Shift+D",c=ge(p=>{ct(p,a)&&r()},"handleKeyDown");return globalThis.window?.addEventListener("keydown",c),()=>{globalThis.window?.removeEventListener("keydown",c)}},[e.open,e.keybindings?.toggle]);const o=l(ee(()=>e.open,[e.open]),"panelVisibleValue: boolean");return{closePanel:i,panelVisible:o,togglePanelVisible:r}},"usePanelVisible");var pt=Object.defineProperty,Ee=R((e,t)=>pt(e,"name",{value:t,configurable:!0}),"e");const ve=Ee((e,t,r)=>Math.min(Math.max(e,t),r),"clamp");Ee(()=>navigator.userAgent.includes("Safari")&&!navigator.userAgent.includes("Chrome"),"checkIsSafari");const xe=Ee(e=>typeof e=="string"?e.endsWith("px")?Number(e.slice(0,-2)):Number(e):e,"pixelToNumber");var ut=Object.defineProperty,ie=R((e,t)=>ut(e,"name",{value:t,configurable:!0}),"g$2");const Se=ie(e=>e<5?0:e>95?100:Math.abs(e-50)<2?50:e,"snapToPoints"),ht=ie(()=>{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"),gt=ie(()=>{const[e,t]=l($(()=>({height:globalThis.window?.innerHeight??1080,width:globalThis.window?.innerWidth??1920})),"size");return V(()=>{const r=ie(()=>{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"),ft=ie(e=>{const{state:t,updateState:r}=Ce(),{height:i,width:o}=gt(),[a,c]=l($(!1),"isHovering"),[p,f]=l($(!1),"isDragging"),[L,y]=l($(!1),"isViteOverlayOpen"),B=l(b({x:0,y:0}),"draggingOffsetRef"),P=l(b({x:0,y:0}),"mousePositionRef"),D=l(b(null),"timerRef"),M=l(b(null),"capturedPointerIdRef"),F=l(b(!1),"isDraggingRef"),j=l(b(o),"windowWidthRef"),N=l(b(i),"windowHeightRef"),G=l(b(r),"updateStateRef");V(()=>{j.current=o,N.current=i},[o,i]),V(()=>{G.current=r},[r]);const[w,O]=l($(()=>({bottom:10,left:10,right:10,top:10})),"panelMargins");V(()=>{const g=ht();O({bottom:g.bottom+10,left:g.left+10,right:g.right+10,top:g.top+10})},[]),V(()=>{const g=ie(()=>{const E=globalThis.__v_o__current;if(E?.parentNode){const s=E.shadowRoot?.querySelector("#__v_o__root");y(!!s&&!s.classList.contains("hidden"))}else y(!1)},"check"),T=setInterval(g,300);return g(),()=>clearInterval(T)},[]);const U=ce(g=>{g.preventDefault(),g.stopPropagation(),f(!0),F.current=!0;const T=e.current;if(T){const{height:E,left:s,top:d,width:u}=T.getBoundingClientRect();B.current={x:g.clientX-s-u/2,y:g.clientY-d-E/2};const A=g.target;try{A&&A.setPointerCapture?(A.setPointerCapture(g.pointerId),M.current=g.pointerId):T.setPointerCapture&&(T.setPointerCapture(g.pointerId),M.current=g.pointerId)}catch(z){console.warn("Failed to capture pointer:",z)}document.body.style.cursor="grabbing",document.body.style.userSelect="none"}},[e]),Y=ce(()=>{c(!0),!(t.minimizePanelInactive<0)&&(D.current&&clearTimeout(D.current),D.current=setTimeout(()=>{c(!1)},t.minimizePanelInactive||5e3))},[t.minimizePanelInactive]);V(()=>{Y()},[Y]),V(()=>{const g=ie(d=>{if(F.current&&(f(!1),F.current=!1,document.body.style.cursor="",document.body.style.userSelect="",M.current!==null)){try{const u=e.current;u&&M.current!==null&&u.releasePointerCapture(M.current)}catch{}M.current=null}},"handlePointerUp"),T=ie(d=>{if(F.current&&(f(!1),F.current=!1,document.body.style.cursor="",document.body.style.userSelect="",M.current!==null)){try{const u=e.current;u&&M.current!==null&&u.releasePointerCapture(M.current)}catch{}M.current=null}},"handlePointerCancel"),E=ie(()=>{F.current&&(f(!1),F.current=!1,M.current=null,document.body.style.cursor="",document.body.style.userSelect="")},"handleLostPointerCapture"),s=ie(d=>{if(!F.current)return;d.preventDefault();const u=j.current,A=N.current,z=u/2,X=A/2,K=d.clientX,I=d.clientY,ae=K-B.current.x,ne=I-B.current.y;P.current={x:ae,y:ne};const re=Math.max(0,Math.min(K,u)),oe=Math.max(0,Math.min(I,A)),J=Math.atan2(oe-X,re-z),pe=70,v=Math.atan2(0-X+pe,0-z),S=Math.atan2(0-X+pe,u-z),k=Math.atan2(A-pe-X,0-z),Z=Math.atan2(A-pe-X,u-z),se=J>=v&&J<=S?"top":J>=S&&J<=Z?"right":J>=Z&&J<=k?"bottom":"left",be=Math.max(0,Math.min(100,ae/u*100)),Ze=Math.max(0,Math.min(100,ne/A*100));G.current({left:Se(be),position:se,top:Se(Ze)})},"handlePointerMove");return document.addEventListener("pointermove",s,{capture:!0,passive:!1}),document.addEventListener("pointerup",g,{capture:!0}),document.addEventListener("pointercancel",T,{capture:!0}),document.addEventListener("lostpointercapture",E,{capture:!0}),()=>{document.removeEventListener("pointermove",s,{capture:!0}),document.removeEventListener("pointerup",g,{capture:!0}),document.removeEventListener("pointercancel",T,{capture:!0}),document.removeEventListener("lostpointercapture",E,{capture:!0})}},[]);const C=l(ee(()=>t.position==="left"||t.position==="right",[t.position]),"isVertical"),x=l(ee(()=>{if(t.minimizePanelInactive<0)return!1;if(t.minimizePanelInactive===0)return!0;const g=globalThis.window!==void 0&&("ontouchstart"in globalThis.window||(globalThis.navigator?.maxTouchPoints??0)>0);return!p&&!t.open&&!a&&!g&&t.minimizePanelInactive>0&&!L},[p,t.open,t.minimizePanelInactive,a,L]),"isHidden"),H=l(ee(()=>{const g=e.current,T=(g?.clientWidth??0)/2,E=(g?.clientHeight??0)/2,s=C?E:T,d=C?T:E,u=t.left*o/100,A=t.top*i/100;switch(t.position){case"left":return{left:w.left+s-(x?30:0),top:ve(A,d+w.top,i-d-w.bottom)};case"right":return{left:o-w.right-s+(x?15:0)-(x?0:10),top:ve(A,d+w.top,i-d-w.bottom)};case"top":return{left:ve(u,s+w.left,o-s-w.right),top:w.top+d-(x?30:0)};default:return{left:ve(u,s+w.left,o-s-w.right),top:i-w.bottom-d+(x?30:0)}}},[t.left,t.open,t.position,t.top,i,o,w,e,x,C]),"anchorPos"),de=l(ee(()=>({left:`${H.left}px`,top:`${H.top}px`,transition:p?"none":"left 0.3s ease, top 0.3s ease"}),[H,p]),"anchorStyle"),Q=l(ee(()=>{const g=e.current,T=(g?.clientWidth??0)/2,E=(g?.clientHeight??0)/2,s=C?E:T,d=C?T:E,u={bottom:w.bottom+d,left:w.left+s,right:w.right+s,top:w.top+d},A=u.left+u.right,z=u.top+u.bottom,X=o-A,K=i-z,I={height:`min(${t.height}vh, calc(100vh - ${z}px))`,pointerEvents:p?"none":"auto",width:`min(${t.width}vw, calc(100vw - ${A}px))`,zIndex:"-1"},ae=H,ne=Math.min(X,t.width*o/100),re=Math.min(K,t.height*i/100),oe=ae?.left??0,J=ae?.top??0;switch(t.position){case"bottom":case"top":{I.left="0",I.transform="translate(-50%, 0)",oe-u.left<ne/2?I.left=`${ne/2-oe+u.left}px`:o-oe-u.right<ne/2&&(I.left=`${o-oe-ne/2-u.right}px`);break}case"left":case"right":{I.top="0",I.transform="translate(0, -50%)",J-u.top<re/2?I.top=`${re/2-J+u.top}px`:i-J-u.bottom<re/2&&(I.top=`${i-J-re/2-u.bottom}px`);break}}switch(t.position){case"left":{I.left="0";break}case"right":{I.right="0";break}case"top":{I.top="0";break}default:{I.bottom="0";break}}return I},[H,p,w,t.height,t.position,t.width,i,o,e,C]),"iframeStyle"),q=l(ee(()=>{const g={transform:C?"translate(-50%, -50%) rotate(90deg)":"translate(-50%, -50%)"};return p&&(g.transition="none !important"),g},[p,C]),"panelStyle");return{anchorStyle:de,bringUp:Y,iframeStyle:Q,isDragging:p,isHidden:x,isVertical:C,onPointerDown:U,panelStyle:q}},"usePosition");var mt=Object.defineProperty,we=R((e,t)=>mt(e,"name",{value:t,configurable:!0}),"t");const bt=we(({app:e})=>{const{toggleApp:t}=Fe(),{isVisible:r,setHoveredApp:i}=Pe(),o=l(b(null),"buttonRef"),a=we(()=>{i(null),t(e.id).catch(f=>{console.error(`[dev-toolbar] Failed to toggle app ${e.id}:`,f)})},"handleClick"),c=we(()=>{!e.tooltip||r||i(e,o.current?.getBoundingClientRect()??null)},"handleMouseEnter"),p=we(()=>{e.tooltip&&i(null)},"handleMouseLeave");return n("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:a,onMouseEnter:c,onMouseLeave:p,ref:o,title:e.tooltip?void 0:e.name,type:"button",children:m("div",{class:"relative size-6 select-none flex items-center justify-center",children:[n("div",{class:"size-6 flex items-center justify-center [&_svg]:size-4.5",dangerouslySetInnerHTML:{__html:e.icon}}),e.notification.state&&n("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"),He="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",vt="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",xt="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",wt="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",yt="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",Dt="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",At="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",We="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 It=Object.defineProperty,_=R((e,t)=>It(e,"name",{value:t,configurable:!0}),"a");const Le=_(({app:e})=>{const t=l(b(null),"contentRef"),r=l(b(!1),"initializedRef"),i=l(b(me()),"helpersRef");return V(()=>{if(!t.current||r.current||e.component)return;const o=t.current;if(e.init){const a=document.createElement("div");a.style.cssText="width:100%;height:100%;",o.append(a);const c=a.attachShadow({mode:"open"});he&&(c.adoptedStyleSheets=[he]);const p=me(),f=e.init(c,e.eventTarget,p);return f&&typeof f.then=="function"?f.then(()=>{r.current=!0}).catch(L=>{console.error(`[dev-toolbar] Failed to init app ${e.id}:`,L)}):r.current=!0,()=>{for(;o.firstChild;)o.firstChild.remove();r.current=!1}}},[e]),e.component?n(e.component,{eventTarget:e.eventTarget,helpers:i.current}):n("div",{class:"w-full h-full",ref:t})},"AppContent"),Ct=_(({apps:e,initialActiveAppId:t,onClose:r})=>{const[i,o]=l($(t),"activeAppId"),[a,c]=l($(!1),"sidebarCollapsed"),p=l(ee(()=>e.find(f=>f.id===i),[e,i]),"activeApp");return m("div",{class:"flex flex-row w-full h-full bg-background font-mono antialiased text-foreground",children:[m("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)]",a?"w-12.5":"w-62.5"),children:[n("div",{class:h("flex items-center shrink-0 border-b border-border/50 h-12",a?"justify-center px-2":"px-3"),children:a?n("span",{"aria-hidden":"true",class:"text-primary font-black text-[0.8rem] select-none",children:"V"}):m("span",{class:"text-[0.6rem] font-bold uppercase tracking-[0.14em] text-muted-foreground select-none",children:[n("span",{"aria-hidden":"true",class:"text-primary/60 mr-1",children:"//"}),"DevTools"]})}),n("div",{class:"flex flex-col flex-1 overflow-y-auto p-2 gap-1 scrollbar-thin-border",children:e.filter(f=>f.component??f.init).map(f=>m("div",{class:"relative group/nav-item",children:[m("button",{"aria-label":f.name,"aria-pressed":i===f.id,class:h("relative flex items-center w-full h-10","border-0 border-l-2 cursor-pointer","transition-all duration-150",a?"justify-center px-0":"gap-2.5 px-3",i===f.id?"border-primary bg-primary/8 text-foreground":"border-transparent bg-transparent text-muted-foreground hover:bg-foreground/6 hover:text-foreground"),onClick:_(()=>o(f.id),"onClick"),type:"button",children:[f.icon?n("span",{class:h("size-4 shrink-0 flex items-center justify-center [&_svg]:size-4",i===f.id?"opacity-100":"opacity-65 group-hover/nav-item:opacity-100"),dangerouslySetInnerHTML:{__html:f.icon}}):n("span",{class:"size-4.5 shrink-0 flex items-center justify-center text-[0.65rem] font-bold uppercase select-none",children:f.name.slice(0,2)}),!a&&n("span",{class:"text-[0.8125rem] font-medium truncate leading-none tracking-[-0.01em]",children:f.name})]}),f.notification.state&&n("span",{"aria-hidden":"true",class:h("pointer-events-none absolute top-1.5 rounded-full",a?"right-1.5":"right-2.5","size-1.5",f.notification.level==="error"?"bg-destructive":f.notification.level==="warning"?"bg-warning":"bg-info")}),a&&n("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:n("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:f.name})})]},f.id))})]}),m("div",{class:"flex-1 flex flex-col min-w-0 overflow-hidden bg-accent",children:[m("div",{class:"flex items-center justify-between gap-2 pr-2 min-h-12 shrink-0",children:[m("div",{class:"flex items-center gap-3 min-w-0",children:[n("button",{"aria-label":a?"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:_(()=>c(f=>!f),"onClick"),type:"button",children:n(te,{class:h("size-3.5 transition-transform duration-300",!a&&"rotate-180"),size:14,src:He})}),p?.icon&&n("span",{class:"size-5 flex items-center justify-center [&_svg]:size-5 shrink-0 text-foreground opacity-80",dangerouslySetInnerHTML:{__html:p.icon}}),m("span",{class:"flex items-center gap-1 text-[0.7rem] font-bold uppercase tracking-[0.06em] text-foreground truncate",children:[n("span",{"aria-hidden":"true",class:"text-primary/50 shrink-0",children:"["}),p?.name??"DevTools",n("span",{"aria-hidden":"true",class:"text-primary/50 shrink-0",children:"]"})]})]}),n("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:n(te,{size:12,src:We})})]}),n("div",{class:"devtools-content-scroll scrollbar-thin-border flex-1 overflow-auto min-h-0 bg-background",children:p?n(Le,{app:p},p.id):n("div",{class:"flex flex-col items-center justify-center h-full gap-3 p-8 select-none text-muted-foreground",children:n("p",{class:"text-[0.8rem]",children:"Select a tool from the sidebar"})})})]})]})},"PipPanel"),ye=20,De=95,Ae=_((e,t,r)=>Math.min(Math.max(e,t),r),"clamp"),Mt=_(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"),kt=_(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"),Tt=_((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"),zt=_(({activeAppId:e,apps:t,onClose:r,onToggleApp:i,panelVisible:o,position:a})=>{const[c,p]=l($(!1),"isRendered"),[f,L]=l($(!1),"isVisible"),[y,B]=l($(!1),"sidebarCollapsed"),[,P]=l($(0),"rerender"),{state:D,updateState:M}=Ce(),{resolvedTheme:F}=Ve(),j=l(b(null),"panelDivRef"),N=l(b(!1),"isResizingRef"),G=l(b({height:D.height,width:D.width}),"dimensionsRef"),w=l(b(null),"enteringFromRectRef"),O=l(b(null),"lastDockedRectRef"),U=l(b(!1),"previousIsFullscreenRef"),Y=l(b(!1),"isExitAnimatingRef"),C=l(b(null),"fsTimerRef"),x=D.viewMode==="fullscreen",H=D.viewMode==="wide",de=globalThis.window?.documentPictureInPicture!==void 0,Q=l(b(null),"pipWindowRef"),q=l(ee(()=>{if(x)return{};const s=globalThis.window?.innerWidth??1920,d=globalThis.window?.innerHeight??1080,u=`${G.current.height/100*d}px`;switch(a){case"bottom":case"top":return{height:u,left:"50%",transform:"translateX(-50%)",width:H?"calc(100vw - 2rem)":"min(calc(100vw - 2rem), 1280px)"};case"left":case"right":return{width:`${G.current.width/100*s}px`};default:return{height:u,left:"50%",transform:"translateX(-50%)",width:H?"calc(100vw - 2rem)":"min(calc(100vw - 2rem), 1280px)"}}},[x,H,a,P]),"panelSizeStyle");V(()=>{const s=_(u=>{if(!N.current||!j.current)return;const A=j.current.getBoundingClientRect(),z=window.innerWidth,X=window.innerHeight,K={...G.current};if(N.current.top){const I=Math.abs(A.bottom-u.clientY);K.height=Ae(I/X*100,ye,De)}else if(N.current.bottom){const I=Math.abs(u.clientY-A.top);K.height=Ae(I/X*100,ye,De)}else if(N.current.right){const I=Math.abs(u.clientX-A.left);K.width=Ae(I/z*100,ye,De)}else if(N.current.left){const I=Math.abs(A.right-u.clientX);K.width=Ae(I/z*100,ye,De)}G.current=K,P(I=>I+1)},"handleMouseMove"),d=_(()=>{N.current&&(M({height:G.current.height,width:G.current.width}),N.current=!1)},"handleMouseUp");return globalThis.addEventListener("mousemove",s),globalThis.addEventListener("mouseup",d),()=>{globalThis.removeEventListener("mousemove",s),globalThis.removeEventListener("mouseup",d)}},[M]),qe(()=>{const s=U.current;U.current=x,C.current!==null&&(clearTimeout(C.current),C.current=null);const d=j.current;if(d)if(x&&!s&&w.current){const u=w.current;w.current=null;const A=globalThis.window?.innerWidth??0,z=globalThis.window?.innerHeight??0;d.style.transition="clip-path 0.35s cubic-bezier(0.4, 0, 0.2, 1)",d.style.clipPath=`inset(${u.top}px ${A-u.right}px ${z-u.bottom}px ${u.left}px)`,requestAnimationFrame(()=>{d.style.clipPath="inset(0px 0px 0px 0px)",C.current=setTimeout(()=>{d.style.clipPath="",d.style.transition="",C.current=null},380)})}else!x&&s&&!Y.current&&(d.style.transition="none",d.style.clipPath="",requestAnimationFrame(()=>{d.style.transition=""}))},[x]),V(()=>{if(o){p(!0);const d=setTimeout(L,16,!0);return()=>clearTimeout(d)}L(!1);const s=setTimeout(p,220,!1);return()=>clearTimeout(s)},[o]);const g=_(async()=>{const s=globalThis.window?.documentPictureInPicture;if(s)try{const d=await s.requestWindow({height:600,width:900});if(Q.current=d,he){const A=d.document.createElement("style");A.textContent=Array.from(he.cssRules,z=>z.cssText).join(`
2
- `),d.document.head.append(A)}const u=d.document.createElement("div");u.style.cssText="width:100%;height:100%;display:flex;",F==="dark"&&(d.document.documentElement.classList.add("dark"),u.classList.add("dark")),d.document.body.style.cssText="margin:0;padding:0;height:100vh;",d.document.body.append(u),ke(n(Ct,{apps:t,initialActiveAppId:e,onClose:_(()=>{d.close()},"onClose")}),u),M({isPip:!0}),d.addEventListener("pagehide",()=>{M({isPip:!1}),Q.current=null})}catch(d){console.error("[dev-toolbar] PiP activation failed:",d)}},"activatePip");V(()=>{if(!o)return;const s=_(d=>{d.key==="Escape"&&r()},"handleKeyDown");return document.addEventListener("keydown",s),()=>document.removeEventListener("keydown",s)},[o,r]);const T=l(ee(()=>t.find(s=>s.id===e),[t,e]),"activeApp");if(!c)return null;const E=_(s=>d=>{d.preventDefault(),N.current=s},"startResize");return m(Te,{children:[n("div",{"aria-hidden":"true",class:h("fixed inset-0 z-[2147483646]","transition-opacity duration-200",f&&!x?"opacity-100 pointer-events-auto":"opacity-0 pointer-events-none"),onClick:D.closeOnOutsideClick?r:void 0,role:"presentation"}),m("div",{"aria-label":"DevTools panel","aria-modal":"true",class:h("fixed z-[2147483647] pointer-events-auto antialiased font-mono",x?"inset-0":Mt(a),"bg-background overflow-hidden",x?"rounded-none border-0":"rounded-none border border-border","shadow-2xl","transition-panel",!x&&kt(a),Tt(a,f),"flex flex-row"),ref:j,role:"dialog",style:q,children:[!x&&m(Te,{children:[a!=="top"&&n("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:E({top:!0})}),a==="top"&&n("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:E({bottom:!0})}),a==="left"&&n("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:E({right:!0})}),a==="right"&&n("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:E({left:!0})})]}),m("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",y?"w-12.5":"w-62.5"),children:[n("div",{class:h("flex items-center shrink-0 border-b border-border/50 h-12",y?"justify-center px-2":"px-3"),children:y?n("span",{"aria-hidden":"true",class:"text-primary font-black text-[0.8rem] select-none",children:"V"}):m("span",{class:"text-[0.6rem] font-bold uppercase tracking-[0.14em] text-muted-foreground select-none",children:[n("span",{"aria-hidden":"true",class:"text-primary/60 mr-1",children:"//"}),"DevTools"]})}),n("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=>m("div",{class:"relative group/nav-item",children:[m("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",y?"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&&i(s.id).catch(console.error)},"onClick"),type:"button",children:[s.icon?n("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}}):n("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)}),!y&&n("span",{class:"text-[0.8125rem] font-medium truncate leading-none tracking-[-0.01em]",children:s.name})]}),s.notification.state&&n("span",{"aria-hidden":"true",class:h("pointer-events-none absolute top-1.5 rounded-full",y?"right-1.5":"right-2.5","size-1.5",s.notification.level==="error"?"bg-destructive":s.notification.level==="warning"?"bg-warning":"bg-info")}),y&&n("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:n("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))}),!y&&n("div",{class:"px-3 py-2.5 border-t border-border/40 shrink-0",children:m("span",{class:"text-[0.58rem] text-muted-foreground/50 leading-none select-none",children:[D.keybindings?.toggle??"Alt+Shift+D"," to toggle"]})})]}),m("div",{class:"flex-1 flex flex-col min-w-0 overflow-hidden bg-accent",children:[m("div",{class:"flex items-center justify-between gap-2 pr-2 min-h-12 shrink-0",children:[m("div",{class:"flex items-center gap-3 min-w-0",children:[n("button",{"aria-label":y?"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:_(()=>B(s=>!s),"onClick"),type:"button",children:n(te,{class:h("size-3.5 transition-transform duration-300",!y&&"rotate-180"),size:14,src:He})}),T?.icon&&n("span",{class:"size-5 flex items-center justify-center [&_svg]:size-5 shrink-0 text-foreground opacity-80",dangerouslySetInnerHTML:{__html:T.icon}}),m("span",{class:"flex items-center gap-1 text-[0.7rem] font-bold uppercase tracking-[0.06em] text-foreground truncate",children:[n("span",{"aria-hidden":"true",class:"text-primary/50 shrink-0",children:"["}),T?.name??"DevTools",n("span",{"aria-hidden":"true",class:"text-primary/50 shrink-0",children:"]"})]})]}),m("div",{class:"flex items-center gap-1 shrink-0",children:[(a==="bottom"||a==="top")&&!x&&n("button",{"aria-label":H?"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:_(()=>M({viewMode:H?"default":"wide"}),"onClick"),title:H?"Container width":"Full width",type:"button",children:n(te,{size:13,src:H?Dt:wt})}),n("button",{"aria-label":x?"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:_(()=>{if(x){const s=j.current,d=O.current;if(s&&d){const u=globalThis.window?.innerWidth??0,A=globalThis.window?.innerHeight??0,z=`inset(${d.top}px ${u-d.right}px ${A-d.bottom}px ${d.left}px)`;C.current!==null&&(clearTimeout(C.current),C.current=null),Y.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,C.current=setTimeout(()=>{s.style.clipPath="",s.style.transition="",Y.current=!1,C.current=null,M({viewMode:"default"})},380)})}else M({viewMode:"default"})}else{if(j.current){const s=j.current.getBoundingClientRect();w.current=s,O.current=s}M({viewMode:"fullscreen"})}},"onClick"),title:x?"Exit fullscreen":"Fullscreen",type:"button",children:n(te,{size:13,src:x?yt:xt})}),de&&!x&&n("button",{"aria-label":"Open in Picture-in-Picture window",class:h("flex items-center justify-center size-8","cursor-pointer border-0 bg-transparent",D.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:_(()=>{g().then(()=>r()).catch(console.error)},"onClick"),title:"Open in floating window (PiP)",type:"button",children:n(te,{size:13,src:At})}),n("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:n(te,{size:12,src:We})})]})]}),n("div",{class:"devtools-content-scroll scrollbar-thin-border flex-1 overflow-auto min-h-0 bg-background",children:T?n(Le,{app:T},T.id):m("div",{class:"flex flex-col items-center justify-center h-full gap-7 p-8 select-none",children:[m("div",{class:"flex flex-col items-center gap-3",children:[n("div",{class:"size-14 border border-primary/25 bg-primary/5 flex items-center justify-center",children:n(te,{class:"text-primary/45",size:26,src:vt})}),m("div",{class:"text-center space-y-1",children:[n("p",{class:"text-[0.8rem] font-medium text-foreground/65",children:"No tool selected"}),n("p",{class:"text-[0.7rem] text-muted-foreground",children:"Choose a tool from the sidebar to get started"})]})]}),t.length>0&&m("div",{class:"w-full max-w-[220px]",children:[m("p",{class:"text-[0.58rem] font-bold uppercase tracking-[0.12em] text-muted-foreground/60 mb-1.5",children:[n("span",{class:"text-primary/50",children:"// "}),"available"]}),n("div",{class:"flex flex-col gap-0.5",children:t.map(s=>m("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:_(()=>i(s.id).catch(console.error),"onClick"),type:"button",children:[s.icon?n("span",{class:"size-3.5 shrink-0 flex items-center justify-center [&_svg]:size-3.5 text-muted-foreground",dangerouslySetInnerHTML:{__html:s.icon}}):n("span",{class:"size-3.5 text-[0.5rem] font-bold text-muted-foreground shrink-0 text-center",children:s.name.slice(0,2).toUpperCase()}),n("span",{class:"text-[0.75rem] font-medium text-muted-foreground",children:s.name})]},s.id))})]})]})})]})]})]})},"DevPanel"),Pt="data:image/svg+xml;charset=utf-8,%3Csvg%20class%3D%22lucide%20lucide-more-horizontal%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%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%221%22%20%2F%3E%20%3Ccircle%20cx%3D%2219%22%20cy%3D%2212%22%20r%3D%221%22%20%2F%3E%20%3Ccircle%20cx%3D%225%22%20cy%3D%2212%22%20r%3D%221%22%20%2F%3E%20%3C%2Fsvg%3E",Ft="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=R((e,t)=>Et(e,"name",{value:t,configurable:!0}),"n$1");const jt=Me(()=>{const[e,t]=l($(0),"errorCount"),[r,i]=l($(!1),"isOverlayOpen");if(V(()=>{const c=Me(()=>{const f=globalThis.__v_o_error_history,L=Array.isArray(f)?f.length:0;t(L);const y=globalThis.__v_o__current;if(y?.parentNode){const B=y.shadowRoot?.querySelector("#__v_o__root");i(!!B&&!B.classList.contains("hidden"))}else i(!1)},"sync"),p=setInterval(c,300);return c(),()=>clearInterval(p)},[]),e===0)return null;const o=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"),i(!0)):typeof c.close=="function"&&(c.close(),i(!1))},"handleClick"),a=`${e} error${e===1?"":"s"} – click to ${r?"hide":"show"} overlay`;return m(Te,{children:[n("div",{"aria-hidden":"true",class:"w-px h-5 bg-primary/20 shrink-0 mx-0.5"}),n("button",{"aria-label":a,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:o,title:a,type:"button",children:m("div",{class:"relative size-6 select-none flex items-center justify-center",children:[n(te,{size:16,src:Ft}),n("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 St=Object.defineProperty,ze=R((e,t)=>St(e,"name",{value:t,configurable:!0}),"n");const Rt=ze(()=>{const{toggleApp:e}=Fe();return n("button",{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-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:ze(()=>{e("dev-toolbar:more").catch(t=>{console.error("[dev-toolbar] Failed to toggle more app:",t)})},"onClick"),title:"More apps",type:"button",children:n("div",{class:"relative size-6 flex items-center justify-center select-none",children:n(te,{size:16,src:Pt})})})},"MoreButton"),_t=ze(({customAppsToShow:e=3})=>{const{apps:t}=Fe(),r=t.filter(c=>c.builtIn),i=t.filter(c=>!c.builtIn),o=[...r,...i.slice(0,e)],a=i.slice(e);return n("div",{class:"flex items-center pointer-events-auto",id:"__v_dt__bar",children:m("div",{class:"flex flex-row items-center justify-start gap-1",id:"__v_dt__bar_container",children:[o.map(c=>n(bt,{app:c},c.id)),a.length>0&&n(Rt,{}),n(jt,{})]})})},"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=R((e,t)=>$t(e,"name",{value:t,configurable:!0}),"o");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"),Wt=fe(({position:e})=>{const{hoveredApp:t,hoveredAppRect:r,pinTooltip:i,setHoveredApp:o}=Pe(),a=l(b(null),"overlayRef"),c=l(b(me()),"helpersRef"),[p,f]=l($(!1),"isRendered"),[L,y]=l($(!1),"isVisible"),B=!!(t?.tooltip&&r);if(V(()=>{if(B){f(!0);const N=setTimeout(y,16,!0);return()=>clearTimeout(N)}y(!1);const j=setTimeout(f,200,!1);return()=>clearTimeout(j)},[B]),!p||!t?.tooltip||!r)return null;const P=t.tooltip,D=Ht(r,e),M=e==="left"||e==="right",F=fe(()=>{const j=a.current?.getBoundingClientRect();j&&i(t,j.left,j.top),o(null)},"handlePin");return m("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)]",L?"opacity-100 translate-y-0 scale-100":h("opacity-0 scale-[0.97]",e==="bottom"&&"translate-y-1",e==="top"&&"-translate-y-1",M&&"translate-x-[-2px]")),onMouseEnter:fe(()=>o(t,r),"onMouseEnter"),onMouseLeave:fe(()=>o(null),"onMouseLeave"),ref:a,role:"tooltip",style:D,children:[m("div",{class:"flex items-center justify-between gap-2 px-3 py-2 border-b border-border/60 bg-foreground/3",children:[m("div",{class:"flex items-center gap-2 min-w-0",children:[n("span",{"aria-hidden":"true",class:"size-1.5 rounded-full bg-primary shrink-0"}),n("span",{class:"text-[0.6rem] font-bold uppercase tracking-[0.1em] text-muted-foreground truncate",children:t.name})]}),n("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:F,title:"Pin (keep visible)",type:"button",children:n(te,{size:11,src:Vt})})]}),n("div",{class:"p-3",children:n(P,{helpers:c.current})})]})},"AppTooltipOverlay");var Lt=Object.defineProperty,Ie=R((e,t)=>Lt(e,"name",{value:t,configurable:!0}),"s$1");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 n("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 n("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 n("div",{"aria-hidden":"true",class:h(t,"top-[-5px] left-1/2 -translate-x-1/2 rotate-45 border-t border-l")});default:return n("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,i]=l($(!1),"visible"),o=l(b(null),"dismissTimeoutRef");V(()=>{const c=setTimeout(i,600,!0);return()=>clearTimeout(c)},[]),V(()=>()=>{o.current!==null&&(clearTimeout(o.current),o.current=null)},[]);const a=Ie(()=>{i(!1),o.current=setTimeout(e,180)},"handleDismiss");return m("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:[n(Zt,{position:t}),m("p",{class:"flex items-center gap-1.5 mb-2.5",children:[n("span",{"aria-hidden":"true",class:"text-primary text-[0.6rem]",children:"▶"}),n("span",{class:"text-[0.6rem] font-bold uppercase tracking-[0.12em] text-foreground",children:"Quick start"})]}),n("ul",{class:"space-y-1.5 mb-3 list-none p-0 m-0",children:Gt.map(({icon:c,text:p})=>m("li",{class:"flex items-center gap-2 text-[0.7rem] text-muted-foreground",children:[n("span",{"aria-hidden":"true",class:"text-primary shrink-0 w-3 text-center leading-none",children:c}),p]},p))}),n("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:a,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,ue=R((e,t)=>Xt(e,"name",{value:t,configurable:!0}),"s");const Jt=ue(({onMove:e,onUnpin:t,pinned:r})=>{const i=l(b(null),"cardRef"),o=l(b(null),"headerRef"),a=l(b({x:r.initialX,y:r.initialY}),"posRef"),c=l(b(null),"dragRef"),p=l(ee(()=>me(),[]),"helpers"),f=l(b(p),"helpersRef"),L=l(b(e),"onMoveRef"),y=l(b(r.id),"pinnedIdRef");L.current=e,y.current=r.id,V(()=>{const D="transform 110ms cubic-bezier(0.25,0.46,0.45,0.94)",M=ue(j=>{if(!c.current||!i.current)return;const N=globalThis.window?.innerWidth??9999,G=globalThis.window?.innerHeight??9999,{cardH:w,cardW:O}=c.current,U=Math.min(80,O),Y=Math.min(36,w);let C=c.current.origX+(j.clientX-c.current.startX),x=c.current.origY+(j.clientY-c.current.startY);C=Math.max(U-O,Math.min(N-U,C)),x=Math.max(Y-w,Math.min(G-Y,x));const H=[0,N-O,U-O,N-U],de=[0,G-w,Y-w,G-Y];let Q=C,q=x;for(const g of H)if(Math.abs(C-g)<28){Q=g;break}for(const g of de)if(Math.abs(x-g)<28){q=g;break}i.current.style.transition=Q!==C||q!==x?D:"",i.current.style.transform=`translate(${Q}px, ${q}px)`,a.current={x:Q,y:q}},"handleMove"),F=ue(()=>{c.current&&(c.current=null,i.current&&(i.current.style.transition=""),o.current&&(o.current.style.cursor=""),L.current(y.current,a.current.x,a.current.y))},"handleUp");return document.addEventListener("mousemove",M),document.addEventListener("mouseup",F),()=>{document.removeEventListener("mousemove",M),document.removeEventListener("mouseup",F)}},[]);const B=r.app.tooltip;if(!B)return null;const P=ue(D=>{D.button===0&&(c.current={cardH:i.current?.offsetHeight??200,cardW:i.current?.offsetWidth??300,origX:a.current.x,origY:a.current.y,startX:D.clientX,startY:D.clientY},o.current&&(o.current.style.cursor="grabbing"),D.preventDefault())},"handleDragStart");return m("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:i,style:{left:0,top:0,transform:`translate(${a.current.x}px, ${a.current.y}px)`},children:[m("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:P,ref:o,children:[m("div",{class:"flex items-center gap-2 min-w-0",children:[n("span",{"aria-hidden":"true",class:"size-1.5 rounded-full bg-primary shrink-0"}),n("span",{class:"text-[0.6rem] font-bold uppercase tracking-[0.1em] text-primary/70 truncate",children:r.app.name})]}),n("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:ue(()=>t(r.id),"onClick"),onMouseDown:ue(D=>D.stopPropagation(),"onMouseDown"),title:"Unpin",type:"button",children:n(te,{size:11,src:Ot})})]}),n("div",{class:"p-3",children:n(B,{helpers:f.current})})]})},"PinnedTooltipCard");var Ut=Object.defineProperty,le=R((e,t)=>Ut(e,"name",{value:t,configurable:!0}),"p");const Re="__v_dt__pinned_tooltips",Qt=le((e,t,r,i,o)=>{const a=t*i/100,c=r*o/100,p=i/4;switch(e){case"bottom":return a<p?"bottom-left":a>i-p?"bottom-right":"bottom-center";case"left":return c<o/2?"top-left":"bottom-left";case"right":return c<o/2?"top-right":"bottom-right";case"top":return a<p?"top-left":a>i-p?"top-right":"top-center";default:return"bottom-center"}},"computePlacement"),qt=le(({activeAppId:e,apps:t,customAppsToShow:r=3,onClearNotification:i,onRegisterApp:o,onSetNotification:a,onToggleApp:c,onUnregisterApp:p})=>{const f=l(b(null),"anchorRef"),L=l(b(null),"panelRef"),y=l(b(null),"leaveTimerRef"),{resolvedTheme:B}=Ve(),{state:P,updateState:D}=Ce(),{closePanel:M,panelVisible:F,togglePanelVisible:j}=dt(),{anchorStyle:N,bringUp:G,isDragging:w,isHidden:O,isVertical:U,onPointerDown:Y,panelStyle:C}=ft(L),[x,H]=l($(null),"hoveredApp"),[de,Q]=l($(null),"hoveredAppRect"),q=l(b(new Map),"pinPositionsRef"),g=ce(v=>{try{const S=v.map(k=>{const Z=q.current.get(k.id);return{appId:k.app.id,x:Z?.x??k.initialX,y:Z?.y??k.initialY}});localStorage.setItem(Re,JSON.stringify(S))}catch{}},[]),[T,E]=l($([]),"pinnedTooltips"),s=l(b([]),"pinnedTooltipsRef");s.current=T;const d=ce((v,S,k)=>{const Z=`${v.id}-${Date.now()}`;E(se=>{const be=[...se,{app:v,id:Z,initialX:S,initialY:k}];return g(be),be})},[g]),u=ce(v=>{E(S=>{const k=S.filter(Z=>Z.id!==v);return q.current.delete(v),g(k),k})},[g]),A=ce((v,S,k)=>{q.current.set(v,{x:S,y:k}),g(s.current)},[g]),z=l(b(null),"storedPinsRef"),X=l(b(new Set),"restoredAppIdsRef");V(()=>{if(t.length===0)return;if(z.current===null)try{const k=localStorage.getItem(Re);z.current=k?JSON.parse(k):[]}catch{z.current=[]}const v=z.current;if(v.length===0)return;const S=[];for(const k of v){if(X.current.has(k.appId))continue;const Z=t.find(se=>se.id===k.appId&&se.tooltip);Z&&(X.current.add(k.appId),S.push({app:Z,id:`${Z.id}-restored-${Date.now()}-${Math.random().toString(36).slice(2)}`,initialX:k.x,initialY:k.y}))}S.length>0&&E(k=>[...k,...S])},[t]),V(()=>()=>{y.current!==null&&clearTimeout(y.current)},[]);const K=ce((v,S)=>{y.current!==null&&(clearTimeout(y.current),y.current=null),v?(H(v),Q(S??null)):y.current=setTimeout(()=>{H(null),Q(null),y.current=null},180)},[]),I=l(b(t),"appsRef");I.current=t;const ae=l(b(F),"panelVisibleRef");ae.current=F;const ne=l(b(e),"activeAppIdRef");ne.current=e;const re=l(b(c),"onToggleAppRef");re.current=c;const oe=l(ee(()=>{const v=globalThis.window?.innerWidth??1920,S=globalThis.window?.innerHeight??1080;return Qt(P.position,P.left,P.top,v,S)},[P.left,P.position,P.top]),"placement"),J=ce(async v=>{const S=ae.current,k=ne.current,Z=I.current.find(se=>se.id===v);if(Z?.onClick??Z?.onDeactivate){await re.current(v);return}if(v===k&&S){await re.current(v),D({open:!1,viewMode:"default"});return}v!==k&&await re.current(v),S||D({open:!0})},[D]),pe={activeAppId:e,apps:t,clearNotification:i,hoveredApp:x,hoveredAppRect:de,isDragging:w,isVisible:F,pinnedTooltips:T,pinTooltip:d,placement:oe,registerApp:o,setDragging:le(()=>{},"setDragging"),setHoveredApp:K,setNotification:a,setPlacement:le(()=>{},"setPlacement"),setVisible:le(v=>D({open:v}),"setVisible"),toggleApp:J,unpinTooltip:u,unregisterApp:p};return!P.preferShowFloatingPanel&&!F?null:n($e.Provider,{value:pe,children:m("div",{class:h(B==="dark"&&"dark"),style:{display:"contents"},children:[m("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",P.reduceMotion&&"transition-none! animate-none! [&_*]:transition-none! [&_*]:animate-none!"),"data-dragging":w?"":void 0,"data-placement":oe,id:"__v_dt__root",onMouseMove:G,ref:f,style:N,children:[m("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",w?"cursor-grabbing":"cursor-grab","bg-background border-0",U?"shadow-pill-vertical!":"shadow-pill",O?"max-w-12!":"","transition-pill"),"data-vertical":U||void 0,onPointerDown:le(v=>{P.isFirstVisit&&D({isFirstVisit:!1}),Y(v)},"onPointerDown"),ref:L,style:C,children:[n("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]",F?"opacity-100":"opacity-60"),onClick:le(v=>{v.stopPropagation(),P.isFirstVisit&&D({isFirstVisit:!1}),j()},"onClick"),title:"Toggle devtools panel",type:"button",children:n("img",{alt:"Visulima",class:"size-6",src:Nt})}),n("div",{"aria-hidden":"true",class:h("w-px h-5 bg-primary/20 shrink-0",O&&"hidden")}),n("div",{class:h("px-0.5",O&&"hidden"),children:n(_t,{customAppsToShow:r})})]}),P.isFirstVisit&&n(Yt,{onDismiss:le(()=>D({isFirstVisit:!1}),"onDismiss"),position:P.position})]}),n(zt,{activeAppId:e,apps:t,onClose:M,onToggleApp:c,panelVisible:F,position:P.position}),n(Wt,{position:P.position}),T.map(v=>n(Jt,{onMove:A,onUnpin:u,pinned:v},v.id))]})})},"ToolbarContainer");var Kt=Object.defineProperty,Be=R((e,t)=>Kt(e,"name",{value:t,configurable:!0}),"r");const er=Be((e,t)=>{const r=_e(),i=Xe();if(!i)throw new Error("Global hook not initialized");return{clearNotification(o){e.clearNotification(o)},async closeApp(){const o=e.getActiveApp();o&&await e.toggleApp(o.id)},getActiveApp(){return e.getActiveApp()?.id||null},getApps(){return e.getApps()},getSettings(){return Ne()},hide(){t.hide()},hook:i,notify(o,a){e.setNotification(o,!0,a)},async openApp(o){await e.toggleApp(o)},registerApp(o){e.registerApp(o)},rpc:new Proxy({},{get(o,a){return(...c)=>r.callServer(a,...c)}}),setAppActive(o,a){e.setAppActive(o,a)},show(){t.show()},toggle(){t.toggle()},unregisterApp(o){e.unregisterApp(o)},updateSettings(o){Oe(o)},version:"0.0.0"}},"createGlobalAPI"),tr=Be(e=>{globalThis.window!==void 0&&(globalThis.__VISULIMA_DEVTOOLS__=e)},"setupGlobalAPI");var rr=Object.defineProperty,W=R((e,t)=>rr(e,"name",{value:t,configurable:!0}),"i");class je extends HTMLElement{static{R(this,"DevToolbar")}static{W(this,"DevToolbar")}appManager;hasBeenInitialized=!1;customAppsToShow=3;renderRoot=null;constructor(){super(),this.attachShadow({mode:"open"}),this.appManager=new nt}connectedCallback(){this.hasBeenInitialized&&this.shadowRoot&&!this.renderRoot&&this.render()}disconnectedCallback(){this.renderRoot&&(ke(null,this.renderRoot),this.renderRoot=null)}init(){if(this.hasBeenInitialized)return;this.hasBeenInitialized=!0,je.injectFont();const t=Je(a=>{this.appManager.registerApp(a),this.render()},(a,c)=>{Ue().addEvent(a,c)}),r=er({clearNotification:W(a=>{this.appManager.clearNotification(a),this.render()},"clearNotification"),getActiveApp:W(()=>this.appManager.getActiveApp(),"getActiveApp"),getApps:W(()=>this.appManager.getAllApps(),"getApps"),registerApp:W(a=>{this.appManager.registerApp(a),this.render()},"registerApp"),setAppActive:W((a,c)=>{this.appManager.setAppActive(a,c),this.render()},"setAppActive"),setNotification:W((a,c,p)=>{this.appManager.setNotification(a,c,p),this.render()},"setNotification"),toggleApp:W(a=>this.appManager.toggleApp(a),"toggleApp"),unregisterApp:W(a=>{this.appManager.unregisterApp(a),this.render()},"unregisterApp")},{hide:W(()=>this.setToolbarVisible(!1),"hide"),show:W(()=>this.setToolbarVisible(!0),"show"),toggle:W(()=>{const a=this.isHidden();this.setToolbarVisible(!a)},"toggle")});tr(r),t.emit("devtools:init");const i=Ne(),o=this.appManager.getAllApps().find(a=>a.defaultOpen);o&&!this.appManager.getActiveApp()&&this.appManager.openApp(o.id).catch(a=>{console.error(`[dev-toolbar] Failed to auto-open defaultOpen app ${o.id}:`,a)}),this.render(),this.setupEventListeners(),i.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}static injectFont(){const t="__v_dt__font";if(document.getElementById(t))return;const r=document.createElement("link");r.rel="preconnect",r.href="https://fonts.googleapis.com",document.head.append(r);const i=document.createElement("link");i.rel="preconnect",i.href="https://fonts.gstatic.com",i.crossOrigin="anonymous",document.head.append(i);const o=document.createElement("link");o.id=t,o.rel="stylesheet",o.href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&display=swap",document.head.append(o)}render(){const t=this.appManager.getAllApps(),r=this.shadowRoot;he&&(r.adoptedStyleSheets=[he]);let i=r.querySelector("style");i||(i=document.createElement("style"),i.textContent=`
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=`
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 Ge=Object.defineProperty;var R=(e,t)=>Ge(e,"name",{value:t,configurable:!0})
18
18
  display: none;
19
19
  }
20
20
  }
21
- `,r.append(i)),this.renderRoot||(this.renderRoot=document.createElement("div"),r.append(this.renderRoot));const o=this.appManager.getActiveApp()?.id||null;ke(n(qt,{activeAppId:o,apps:t,customAppsToShow:this.customAppsToShow,onClearNotification:W(a=>{this.appManager.clearNotification(a),this.render()},"onClearNotification"),onRegisterApp:W(a=>{this.render()},"onRegisterApp"),onSetNotification:W((a,c,p)=>{this.appManager.setNotification(a,c,p),this.render()},"onSetNotification"),onToggleApp:W(async a=>{await this.appManager.toggleApp(a),this.render()},"onToggleApp"),onUnregisterApp:W(a=>{this.appManager.unregisterApp(a),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()}):this.setToolbarVisible(!1)})}}if(globalThis.window!==void 0&&(customElements.get("dev-toolbar")||customElements.define("dev-toolbar",je),!customElements.get("dev-toolbar-app-canvas"))){class e extends HTMLElement{static{R(this,"p")}static{W(this,"DevToolbarAppCanvas")}constructor(){super(),this.attachShadow({mode:"open"})}}customElements.define("dev-toolbar-app-canvas",e)}export{je as DevToolbar,he as sharedToolbarStylesheet};
21
+ `,r.append(o)),this.renderRoot||(this.renderRoot=document.createElement("div"),r.append(this.renderRoot));const a=this.appManager.getActiveApp()?.id;Pe(i(er,{activeAppId:a,apps:t,customAppsToShow:this.customAppsToShow,onClearNotification:H(n=>{this.appManager.clearNotification(n),this.render()},"onClearNotification"),onRegisterApp:H(n=>{this.render()},"onRegisterApp"),onSetNotification:H((n,c,d)=>{this.appManager.setNotification(n,c,d),this.render()},"onSetNotification"),onToggleApp:H(async n=>{await this.appManager.toggleApp(n),this.render()},"onToggleApp"),onUnregisterApp:H(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",or),!customElements.get("dev-toolbar-app-canvas"))){class e extends HTMLElement{static{N(this,"a")}static{H(this,"DevToolbarAppCanvas")}constructor(){super(),this.attachShadow({mode:"open"})}}customElements.define("dev-toolbar-app-canvas",e)}export{or as DevToolbar,ue as sharedToolbarStylesheet};
@@ -1,17 +1,17 @@
1
1
  import type { ToolbarSettings } from "../types/toolbar.d.ts";
2
2
  /**
3
- * Load settings from localStorage
4
- * @returns Toolbar settings
3
+ * Loads settings from localStorage, merging with defaults.
4
+ * @returns Toolbar settings.
5
5
  */
6
6
  export declare const loadSettings: () => ToolbarSettings;
7
7
  /**
8
- * Save settings to localStorage
9
- * @param settings Toolbar settings to save
8
+ * Saves settings to localStorage.
9
+ * @param settings Toolbar settings to save.
10
10
  */
11
11
  export declare const saveSettings: (settings: ToolbarSettings) => void;
12
12
  /**
13
- * Update settings (merge with existing)
14
- * @param updates Partial settings to update
15
- * @returns Updated settings
13
+ * Merges partial updates into the current settings and persists them.
14
+ * @param updates Partial settings to update.
15
+ * @returns Updated settings.
16
16
  */
17
17
  export declare const updateSettings: (updates: Partial<ToolbarSettings>) => ToolbarSettings;
@@ -1 +1,3 @@
1
- export declare const sharedToolbarStylesheet: CSSStyleSheet | undefined;
1
+ declare const sharedToolbarStylesheet: CSSStyleSheet | undefined;
2
+ export { sharedToolbarStylesheet };
3
+ export default sharedToolbarStylesheet;
@@ -1,12 +1,12 @@
1
1
  /**
2
- * Clamp a value between min and max
2
+ * Clamps a value between min and max.
3
3
  */
4
4
  export declare const clamp: (value: number, min: number, max: number) => number;
5
5
  /**
6
- * Check if browser is Safari
6
+ * Returns true when the current browser is Safari.
7
7
  */
8
8
  export declare const checkIsSafari: () => boolean;
9
9
  /**
10
- * Convert pixel value to number (handles "10px" -> 10)
10
+ * Converts a pixel string value to a number (e.g. "10px" becomes 10).
11
11
  */
12
12
  export declare const pixelToNumber: (value: string | number) => number;
@@ -3,89 +3,77 @@ import type { DevToolbarHook } from "./hooks.d.ts";
3
3
  import type { ServerFunctions } from "./rpc.d.ts";
4
4
  import type { ToolbarSettings } from "./toolbar.d.ts";
5
5
  /**
6
- * Global DevTools API interface
6
+ * Global DevTools API interface.
7
7
  * Exposed as window.__VISULIMA_DEVTOOLS__
8
8
  */
9
- export interface VisulimaDevTools {
9
+ interface VisulimaDevTools {
10
10
  /**
11
- * Clear notification for an app
12
- * @param appId App ID
11
+ * Clears notification for an app.
13
12
  */
14
13
  clearNotification: (appId: string) => void;
15
14
  /**
16
- * Close the currently active app
15
+ * Closes the currently active app.
17
16
  */
18
17
  closeApp: () => Promise<void>;
19
18
  /**
20
- * Get the currently active app ID
21
- * @returns Active app ID or null
19
+ * Gets the currently active app ID.
22
20
  */
23
- getActiveApp: () => string | null;
21
+ getActiveApp: () => string | undefined;
24
22
  /**
25
- * Get all registered apps
26
- * @returns Array of app definitions
23
+ * Gets all registered apps.
27
24
  */
28
25
  getApps: () => DevToolbarApp[];
29
26
  /**
30
- * Get current toolbar settings
31
- * @returns Toolbar settings
27
+ * Gets current toolbar settings.
32
28
  */
33
29
  getSettings: () => ToolbarSettings;
34
30
  /**
35
- * Hide the toolbar
31
+ * Hides the toolbar.
36
32
  */
37
33
  hide: () => void;
38
34
  /**
39
- * Hook instance for event subscriptions
35
+ * Hook instance for event subscriptions.
40
36
  */
41
37
  hook: DevToolbarHook;
42
38
  /**
43
- * Show a notification for an app
44
- * @param appId App ID
45
- * @param level Notification level
39
+ * Shows a notification for an app.
46
40
  */
47
41
  notify: (appId: string, level: "info" | "warning" | "error") => void;
48
42
  /**
49
- * Open an app
50
- * @param appId App ID to open
43
+ * Opens an app by ID.
51
44
  */
52
45
  openApp: (appId: string) => Promise<void>;
53
46
  /**
54
- * Register a custom app
55
- * @param app App definition
47
+ * Registers a custom app.
56
48
  */
57
49
  registerApp: (app: DevToolbarApp) => void;
58
50
  /**
59
- * RPC client for calling server functions
51
+ * RPC client for calling server functions.
60
52
  */
61
53
  rpc: ServerFunctions;
62
54
  /**
63
- * Directly set the active state of an action button without invoking callbacks.
55
+ * Directly sets the active state of an action button without invoking callbacks.
64
56
  * Useful for deactivating a button from async work running outside the toolbar.
65
- * @param appId App ID
66
- * @param active New active state
67
57
  */
68
58
  setAppActive: (appId: string, active: boolean) => void;
69
59
  /**
70
- * Show the toolbar
60
+ * Shows the toolbar.
71
61
  */
72
62
  show: () => void;
73
63
  /**
74
- * Toggle toolbar visibility
64
+ * Toggles toolbar visibility.
75
65
  */
76
66
  toggle: () => void;
77
67
  /**
78
- * Unregister an app
79
- * @param appId App ID to unregister
68
+ * Unregisters an app by ID.
80
69
  */
81
70
  unregisterApp: (appId: string) => void;
82
71
  /**
83
- * Update toolbar settings
84
- * @param settings Partial settings to update
72
+ * Updates toolbar settings.
85
73
  */
86
74
  updateSettings: (settings: Partial<ToolbarSettings>) => void;
87
75
  /**
88
- * Package version
76
+ * Package version.
89
77
  */
90
78
  version: string;
91
79
  }
@@ -95,8 +83,9 @@ export interface VisulimaDevTools {
95
83
  declare global {
96
84
  interface Window {
97
85
  /**
98
- * Visulima DevTools global API
86
+ * Visulima DevTools global API.
99
87
  */
100
88
  __VISULIMA_DEVTOOLS__?: VisulimaDevTools;
101
89
  }
102
90
  }
91
+ export type { VisulimaDevTools };