@visulima/dev-toolbar 0.0.1 → 1.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -0
- package/LICENSE.md +77 -0
- package/README.md +277 -29
- package/dist/apps/a11y/a11y-app.d.ts +5 -0
- package/dist/apps/a11y/a11y-store.d.ts +46 -0
- package/dist/apps/a11y/a11y-tooltip.d.ts +11 -0
- package/dist/apps/a11y/index.d.ts +3 -0
- package/dist/apps/a11y/index.js +21 -0
- package/dist/apps/module-graph/index.d.ts +3 -0
- package/dist/apps/module-graph/index.js +20 -0
- package/dist/apps/module-graph/module-graph-app.d.ts +5 -0
- package/dist/apps/more/index.d.ts +3 -0
- package/dist/apps/more/index.js +19 -0
- package/dist/apps/more/more-app.d.ts +5 -0
- package/dist/apps/performance/index.d.ts +3 -0
- package/dist/apps/performance/index.js +17 -0
- package/dist/apps/performance/performance-app.d.ts +5 -0
- package/dist/apps/performance/performance-tooltip.d.ts +5 -0
- package/dist/apps/seo/index.d.ts +3 -0
- package/dist/apps/seo/index.js +17 -0
- package/dist/apps/seo/seo-app.d.ts +5 -0
- package/dist/apps/settings/index.d.ts +3 -0
- package/dist/apps/settings/index.js +17 -0
- package/dist/apps/settings/settings-app.d.ts +5 -0
- package/dist/apps/timeline/index.d.ts +3 -0
- package/dist/apps/timeline/index.js +18 -0
- package/dist/apps/timeline/timeline-app.d.ts +5 -0
- package/dist/apps/vite-config/index.d.ts +3 -0
- package/dist/apps/vite-config/index.js +16 -0
- package/dist/apps/vite-config/vite-config-app.d.ts +5 -0
- package/dist/client/overlay.d.ts +1 -0
- package/dist/client/overlay.js +1 -0
- package/dist/hooks/create-hook.d.ts +10 -0
- package/dist/hooks/events.d.ts +5 -0
- package/dist/hooks/global-hook.d.ts +15 -0
- package/dist/hooks/index.d.ts +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +1 -0
- package/dist/packem_shared/TimelineStore-BgBrirKd.js +1 -0
- package/dist/packem_shared/cn-BEsR6GkP.js +1 -0
- package/dist/packem_shared/createClientRPCContext-DzKQpKTk.js +1 -0
- package/dist/packem_shared/createDevToolbarHook-DGNxqk8N.js +1 -0
- package/dist/packem_shared/createServerRPCContext-BVSesPXu.js +1 -0
- package/dist/packem_shared/icon-BUQ92HaT.js +1 -0
- package/dist/packem_shared/loadSettings-hvjR4fcS.js +1 -0
- package/dist/packem_shared/setupGlobalHook-CFuxsCyl.js +1 -0
- package/dist/packem_shared/store-BxE0w51s.js +1 -0
- package/dist/performance/monitor.d.ts +115 -0
- package/dist/rpc/client.d.ts +7 -0
- package/dist/rpc/functions/module-graph.d.ts +17 -0
- package/dist/rpc/functions/open-in-editor.d.ts +9 -0
- package/dist/rpc/functions/vite-config.d.ts +7 -0
- package/dist/rpc/index.d.ts +8 -0
- package/dist/rpc/server.d.ts +9 -0
- package/dist/timeline/index.d.ts +6 -0
- package/dist/timeline/store.d.ts +52 -0
- package/dist/toolbar/app-manager.d.ts +95 -0
- package/dist/toolbar/components/app-button.d.ts +19 -0
- package/dist/toolbar/components/app-canvas.d.ts +13 -0
- package/dist/toolbar/components/app-tooltip-overlay.d.ts +13 -0
- package/dist/toolbar/components/first-visit-hint.d.ts +16 -0
- package/dist/toolbar/components/index.d.ts +4 -0
- package/dist/toolbar/components/pinned-tooltip-card.d.ts +23 -0
- package/dist/toolbar/components/toolbar-bar.d.ts +15 -0
- package/dist/toolbar/components/toolbar-container.d.ts +55 -0
- package/dist/toolbar/components/vite-overlay-button.d.ts +15 -0
- package/dist/toolbar/context/index.d.ts +2 -0
- package/dist/toolbar/context/toolbar-context.d.ts +106 -0
- package/dist/toolbar/global-api.d.ts +23 -0
- package/dist/toolbar/helpers.d.ts +6 -0
- package/dist/toolbar/hooks/index.d.ts +10 -0
- package/dist/toolbar/hooks/use-apps.d.ts +13 -0
- package/dist/toolbar/hooks/use-frame-state.d.ts +94 -0
- package/dist/toolbar/hooks/use-panel-visible.d.ts +21 -0
- package/dist/toolbar/hooks/use-position.d.ts +22 -0
- package/dist/toolbar/hooks/use-theme.d.ts +13 -0
- package/dist/toolbar/hooks/use-toolbar.d.ts +14 -0
- package/dist/toolbar/index.d.ts +58 -0
- package/dist/toolbar/index.js +22 -0
- package/dist/toolbar/settings.d.ts +17 -0
- package/dist/toolbar/stylesheet.d.ts +1 -0
- package/dist/toolbar/utils/index.d.ts +12 -0
- package/dist/types/app.d.ts +163 -0
- package/dist/types/global-api.d.ts +95 -0
- package/dist/types/hooks.d.ts +88 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/types/messaging.d.ts +43 -0
- package/dist/types/rpc.d.ts +95 -0
- package/dist/types/timeline.d.ts +62 -0
- package/dist/types/toolbar.d.ts +56 -0
- package/dist/ui/components/icon.d.ts +21 -0
- package/dist/utils/cn.d.ts +8 -0
- package/dist/vite-plugin.d.ts +106 -0
- package/dist/vite-plugin.js +2 -0
- package/package.json +105 -7
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { DevToolbarApp } from "../types/index.d.ts";
|
|
2
|
+
import { AppManager } from "./app-manager.d.ts";
|
|
3
|
+
import { sharedToolbarStylesheet } from "./stylesheet.d.ts";
|
|
4
|
+
/**
|
|
5
|
+
* Dev Toolbar Web Component
|
|
6
|
+
*/
|
|
7
|
+
export declare class DevToolbar extends HTMLElement {
|
|
8
|
+
private appManager;
|
|
9
|
+
private hasBeenInitialized;
|
|
10
|
+
private customAppsToShow;
|
|
11
|
+
private renderRoot;
|
|
12
|
+
constructor();
|
|
13
|
+
/**
|
|
14
|
+
* Called when element is inserted into the DOM
|
|
15
|
+
* According to Preact docs, rendering should happen here or after connection
|
|
16
|
+
*/
|
|
17
|
+
connectedCallback(): void;
|
|
18
|
+
/**
|
|
19
|
+
* Called when element is removed from the DOM
|
|
20
|
+
* Clean up Preact component to prevent memory leaks
|
|
21
|
+
*/
|
|
22
|
+
disconnectedCallback(): void;
|
|
23
|
+
/**
|
|
24
|
+
* Initialize the toolbar.
|
|
25
|
+
*/
|
|
26
|
+
init(): void;
|
|
27
|
+
/**
|
|
28
|
+
* Check if toolbar is hidden.
|
|
29
|
+
*/
|
|
30
|
+
isHidden(): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Set toolbar visibility.
|
|
33
|
+
*/
|
|
34
|
+
setToolbarVisible(visible: boolean): void;
|
|
35
|
+
/**
|
|
36
|
+
* Register an app.
|
|
37
|
+
*/
|
|
38
|
+
registerApp(app: DevToolbarApp, builtIn?: boolean): void;
|
|
39
|
+
/**
|
|
40
|
+
* Get app manager (for external access).
|
|
41
|
+
*/
|
|
42
|
+
getAppManager(): AppManager;
|
|
43
|
+
/**
|
|
44
|
+
* Inject Geist font into document.head once.
|
|
45
|
+
* @font-face declared in the document is part of the global font registry and
|
|
46
|
+
* is accessible from within shadow DOM roots — no duplication needed.
|
|
47
|
+
*/
|
|
48
|
+
private static injectFont;
|
|
49
|
+
/**
|
|
50
|
+
* Render the toolbar UI using Preact
|
|
51
|
+
*/
|
|
52
|
+
private render;
|
|
53
|
+
/**
|
|
54
|
+
* Setup event listeners.
|
|
55
|
+
*/
|
|
56
|
+
private setupEventListeners;
|
|
57
|
+
}
|
|
58
|
+
export { sharedToolbarStylesheet };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
var Wr=Object.defineProperty;var S=(r,e)=>Wr(r,"name",{value:e,configurable:!0});import{createContext as Br,render as Ar}from"preact";import{createClientRPCContext as Rr}from"../packem_shared/createClientRPCContext-DzKQpKTk.js";import{updateSettings as Zr,loadSettings as _r}from"../packem_shared/loadSettings-hvjR4fcS.js";import{getGlobalHook as Gr,setupGlobalHook as Yr}from"../packem_shared/setupGlobalHook-CFuxsCyl.js";import{jsx as a,jsxs as v,Fragment as Mr}from"preact/jsx-runtime";import{g as Or}from"../packem_shared/store-BxE0w51s.js";import{addHookName as s}from"preact/devtools";import{useContext as Xr,useEffect as _,useMemo as er,useState as W,useRef as b,useCallback as sr,useLayoutEffect as Jr}from"preact/hooks";import{m as h}from"../packem_shared/cn-BEsR6GkP.js";import{u as zr,a as Nr,i as tr}from"../packem_shared/icon-BUQ92HaT.js";var Ur=Object.defineProperty,Qr=S((r,e)=>Ur(r,"name",{value:e,configurable:!0}),"t$4");const ur=Qr(()=>{const r=Rr();return{rpc:new Proxy({},{get(e,t){return(...i)=>r.callServer(t,...i)}})}},"createServerHelpers");var qr=Object.defineProperty,Kr=S((r,e)=>qr(r,"name",{value:e,configurable:!0}),"n$3");class re{static{S(this,"AppManager")}static{Kr(this,"AppManager")}apps=new Map;activeAppId=null;initializedApps=new Set;appCanvases=new Map;registerApp(e,t=!1){this.apps.has(e.id)&&(this.initializedApps.delete(e.id),this.appCanvases.delete(e.id),this.activeAppId===e.id&&(this.activeAppId=null));const i=new EventTarget,o={...e,active:!1,builtIn:t,eventTarget:i,notification:{state:!1},status:"ready"};this.apps.set(e.id,o)}async unregisterApp(e){const t=this.apps.get(e);if(t?.destroy&&this.initializedApps.has(e)){const i=this.appCanvases.get(e);if(i)try{await t.destroy(i.shadowRoot)}catch(o){console.error(`[dev-toolbar] destroy() failed for app ${e}:`,o)}}this.apps.delete(e),this.initializedApps.delete(e),this.appCanvases.delete(e),this.activeAppId===e&&(this.activeAppId=null)}getApp(e){return this.apps.get(e)}getAllApps(){return[...this.apps.values()]}getActiveApp(){if(this.activeAppId)return this.apps.get(this.activeAppId)}async toggleApp(e){const t=this.apps.get(e);return t?t.active?await this.closeApp(e):this.activeAppId&&!await this.closeApp(this.activeAppId)?!1:await this.openApp(e):!1}isAppInitialized(e){return this.initializedApps.has(e)}markAppInitialized(e){this.initializedApps.add(e)}async openApp(e){const t=this.apps.get(e);if(!t)return!1;if(t.active=!0,t.status="loading",this.activeAppId=e,t.init&&!this.isAppInitialized(e))try{const i=this.getAppCanvas(e);if(i){const o=ur(),n=t.init(i.shadowRoot,t.eventTarget,o);n&&typeof n.then=="function"&&await n,this.markAppInitialized(e),t.status="ready"}else t.status="pending"}catch(i){return console.error(`[dev-toolbar] Failed to init app ${e}:`,i),t.status="error",t.active=!1,this.activeAppId=null,!1}else t.status="ready";return!0}async closeApp(e){const t=this.apps.get(e);if(!t||!t.active)return!1;if(t.beforeTogglingOff){const i=this.getAppCanvas(e);if(i)try{const o=t.beforeTogglingOff(i.shadowRoot);if(!(o&&typeof o.then=="function"?await o:o))return!1}catch(o){console.error(`[dev-toolbar] beforeTogglingOff() threw for app ${e}:`,o)}}return t.active=!1,this.activeAppId===e&&(this.activeAppId=null),!0}setNotification(e,t,i){const o=this.apps.get(e);o&&(o.notification={level:i,state:t})}clearNotification(e){const t=this.apps.get(e);t&&(t.notification={state:!1})}getAppCanvas(e){return this.appCanvases.get(e)||null}setAppCanvas(e,t){this.appCanvases.set(e,t)}}var ee=Object.defineProperty,te=S((r,e)=>ee(r,"name",{value:e,configurable:!0}),"t$3");const Vr=Br(null),Tr=te(()=>{const r=Xr(Vr);if(!r)throw new Error("useToolbarContext must be used within ToolbarContext provider");return r},"useToolbarContext");var oe=Object.defineProperty,ae=S((r,e)=>oe(r,"name",{value:e,configurable:!0}),"t$2");const Pr=ae(()=>{const r=Tr();return{activeAppId:r.activeAppId,apps:r.apps,clearNotification:r.clearNotification,registerApp:r.registerApp,setNotification:r.setNotification,toggleApp:r.toggleApp,unregisterApp:r.unregisterApp}},"useApps");var ie=Object.defineProperty,br=S((r,e)=>ie(r,"name",{value:e,configurable:!0}),"s$4");const ne=br((r,e)=>{const t=e.split("+"),i=t.at(-1)??"",o=t.includes("Alt"),n=t.includes("Shift"),c=t.includes("Control")||t.includes("Ctrl"),g=t.includes("Meta")||t.includes("Cmd");return(r.key===i||r.code===`Key${i.toUpperCase()}`)&&r.altKey===o&&r.shiftKey===n&&r.ctrlKey===c&&r.metaKey===g},"matchesBinding"),le=br(()=>{const{state:r,updateState:e}=zr(),t=br((n,c)=>{const g=c??!r.open;e({open:g,...g?{}:{viewMode:"default"}})},"togglePanelVisible"),i=br(()=>{r.open&&e({open:!1,viewMode:"default"})},"closePanel");_(()=>{const n=r.keybindings?.toggle??"Alt+Shift+D",c=br(g=>{ne(g,n)&&t()},"handleKeyDown");return globalThis.window?.addEventListener("keydown",c),()=>{globalThis.window?.removeEventListener("keydown",c)}},[r.open,r.keybindings?.toggle]);const o=s(er(()=>r.open,[r.open]),"panelVisibleValue: boolean");return{closePanel:i,panelVisible:o,togglePanelVisible:t}},"usePanelVisible");var se=Object.defineProperty,Fr=S((r,e)=>se(r,"name",{value:e,configurable:!0}),"e");const vr=Fr((r,e,t)=>Math.min(Math.max(r,e),t),"clamp");Fr(()=>navigator.userAgent.includes("Safari")&&!navigator.userAgent.includes("Chrome"),"checkIsSafari");const fr=Fr(r=>typeof r=="string"?r.endsWith("px")?Number(r.slice(0,-2)):Number(r):r,"pixelToNumber");var ce=Object.defineProperty,or=S((r,e)=>ce(r,"name",{value:e,configurable:!0}),"g$2");const jr=or(r=>r<5?0:r>95?100:Math.abs(r-50)<2?50:r,"snapToPoints"),de=or(()=>{if(globalThis.window===void 0)return{bottom:0,left:0,right:0,top:0};const r=getComputedStyle(document.documentElement);return{bottom:fr(r.getPropertyValue("env(safe-area-inset-bottom)")||"0"),left:fr(r.getPropertyValue("env(safe-area-inset-left)")||"0"),right:fr(r.getPropertyValue("env(safe-area-inset-right)")||"0"),top:fr(r.getPropertyValue("env(safe-area-inset-top)")||"0")}},"getSafeAreaInsets"),pe=or(()=>{const[r,e]=s(W(()=>({height:globalThis.window?.innerHeight??1080,width:globalThis.window?.innerWidth??1920})),"size");return _(()=>{const t=or(()=>{e({height:globalThis.window?.innerHeight??1080,width:globalThis.window?.innerWidth??1920})},"updateSize");return t(),globalThis.window?.addEventListener("resize",t),()=>{globalThis.window?.removeEventListener("resize",t)}},[]),r},"useWindowSize"),ue=or(r=>{const{state:e,updateState:t}=zr(),{height:i,width:o}=pe(),[n,c]=s(W(!1),"isHovering"),[g,T]=s(W(!1),"isDragging"),[V,y]=s(W(!1),"isViteOverlayOpen"),B=s(b({x:0,y:0}),"draggingOffsetRef"),P=s(b({x:0,y:0}),"mousePositionRef"),k=s(b(null),"timerRef"),w=s(b(null),"capturedPointerIdRef"),$=s(b(!1),"isDraggingRef"),j=s(b(o),"windowWidthRef"),R=s(b(i),"windowHeightRef"),Z=s(b(t),"updateStateRef");_(()=>{j.current=o,R.current=i},[o,i]),_(()=>{Z.current=t},[t]);const[x,O]=s(W(()=>({bottom:10,left:10,right:10,top:10})),"panelMargins");_(()=>{const u=de();O({bottom:u.bottom+10,left:u.left+10,right:u.right+10,top:u.top+10})},[]),_(()=>{const u=or(()=>{const F=globalThis.__v_o__current;if(F?.parentNode){const l=F.shadowRoot?.querySelector("#__v_o__root");y(!!l&&!l.classList.contains("hidden"))}else y(!1)},"check"),C=setInterval(u,300);return u(),()=>clearInterval(C)},[]);const J=sr(u=>{u.preventDefault(),u.stopPropagation(),T(!0),$.current=!0;const C=r.current;if(C){const{height:F,left:l,top:d,width:p}=C.getBoundingClientRect();B.current={x:u.clientX-l-p/2,y:u.clientY-d-F/2};const D=u.target;try{D&&D.setPointerCapture?(D.setPointerCapture(u.pointerId),w.current=u.pointerId):C.setPointerCapture&&(C.setPointerCapture(u.pointerId),w.current=u.pointerId)}catch(z){console.warn("Failed to capture pointer:",z)}document.body.style.cursor="grabbing",document.body.style.userSelect="none"}},[r]),Y=sr(()=>{c(!0),!(e.minimizePanelInactive<0)&&(k.current&&clearTimeout(k.current),k.current=setTimeout(()=>{c(!1)},e.minimizePanelInactive||5e3))},[e.minimizePanelInactive]);_(()=>{Y()},[Y]),_(()=>{const u=or(d=>{if($.current&&(T(!1),$.current=!1,document.body.style.cursor="",document.body.style.userSelect="",w.current!==null)){try{const p=r.current;p&&w.current!==null&&p.releasePointerCapture(w.current)}catch{}w.current=null}},"handlePointerUp"),C=or(d=>{if($.current&&(T(!1),$.current=!1,document.body.style.cursor="",document.body.style.userSelect="",w.current!==null)){try{const p=r.current;p&&w.current!==null&&p.releasePointerCapture(w.current)}catch{}w.current=null}},"handlePointerCancel"),F=or(()=>{$.current&&(T(!1),$.current=!1,w.current=null,document.body.style.cursor="",document.body.style.userSelect="")},"handleLostPointerCapture"),l=or(d=>{if(!$.current)return;d.preventDefault();const p=j.current,D=R.current,z=p/2,G=D/2,q=d.clientX,I=d.clientY,ir=q-B.current.x,rr=I-B.current.y;P.current={x:ir,y:rr};const ar=Math.max(0,Math.min(q,p)),nr=Math.max(0,Math.min(I,D)),X=Math.atan2(nr-G,ar-z),m=70,E=Math.atan2(0-G+m,0-z),M=Math.atan2(0-G+m,p-z),K=Math.atan2(D-m-G,0-z),dr=Math.atan2(D-m-G,p-z),mr=X>=E&&X<=M?"top":X>=M&&X<=dr?"right":X>=dr&&X<=K?"bottom":"left",Hr=Math.max(0,Math.min(100,ir/p*100)),Lr=Math.max(0,Math.min(100,rr/D*100));Z.current({left:jr(Hr),position:mr,top:jr(Lr)})},"handlePointerMove");return document.addEventListener("pointermove",l,{capture:!0,passive:!1}),document.addEventListener("pointerup",u,{capture:!0}),document.addEventListener("pointercancel",C,{capture:!0}),document.addEventListener("lostpointercapture",F,{capture:!0}),()=>{document.removeEventListener("pointermove",l,{capture:!0}),document.removeEventListener("pointerup",u,{capture:!0}),document.removeEventListener("pointercancel",C,{capture:!0}),document.removeEventListener("lostpointercapture",F,{capture:!0})}},[]);const A=s(er(()=>e.position==="left"||e.position==="right",[e.position]),"isVertical"),f=s(er(()=>{if(e.minimizePanelInactive<0)return!1;if(e.minimizePanelInactive===0)return!0;const u=globalThis.window!==void 0&&("ontouchstart"in globalThis.window||(globalThis.navigator?.maxTouchPoints??0)>0);return!g&&!e.open&&!n&&!u&&e.minimizePanelInactive>0&&!V},[g,e.open,e.minimizePanelInactive,n,V]),"isHidden"),N=s(er(()=>{const u=r.current,C=(u?.clientWidth??0)/2,F=(u?.clientHeight??0)/2,l=A?F:C,d=A?C:F,p=e.left*o/100,D=e.top*i/100;switch(e.position){case"top":return{left:vr(p,l+x.left,o-l-x.right),top:x.top+d-(f?30:0)};case"right":return{left:o-x.right-l+(f?15:0)-(f?0:10),top:vr(D,d+x.top,i-d-x.bottom)};case"left":return{left:x.left+l-(f?30:0),top:vr(D,d+x.top,i-d-x.bottom)};default:return{left:vr(p,l+x.left,o-l-x.right),top:i-x.bottom-d+(f?30:0)}}},[e.left,e.open,e.position,e.top,i,o,x,r,f,A]),"anchorPos"),cr=s(er(()=>({left:`${N.left}px`,top:`${N.top}px`,transition:g?"none":"left 0.3s ease, top 0.3s ease"}),[N,g]),"anchorStyle"),U=s(er(()=>{const u=r.current,C=(u?.clientWidth??0)/2,F=(u?.clientHeight??0)/2,l=A?F:C,d=A?C:F,p={bottom:x.bottom+d,left:x.left+l,right:x.right+l,top:x.top+d},D=p.left+p.right,z=p.top+p.bottom,G=o-D,q=i-z,I={height:`min(${e.height}vh, calc(100vh - ${z}px))`,pointerEvents:g?"none":"auto",width:`min(${e.width}vw, calc(100vw - ${D}px))`,zIndex:"-1"},ir=N,rr=Math.min(G,e.width*o/100),ar=Math.min(q,e.height*i/100),nr=ir?.left??0,X=ir?.top??0;switch(e.position){case"top":case"bottom":{I.left="0",I.transform="translate(-50%, 0)",nr-p.left<rr/2?I.left=`${rr/2-nr+p.left}px`:o-nr-p.right<rr/2&&(I.left=`${o-nr-rr/2-p.right}px`);break}case"right":case"left":{I.top="0",I.transform="translate(0, -50%)",X-p.top<ar/2?I.top=`${ar/2-X+p.top}px`:i-X-p.bottom<ar/2&&(I.top=`${i-X-ar/2-p.bottom}px`);break}}switch(e.position){case"top":{I.top="0";break}case"right":{I.right="0";break}case"left":{I.left="0";break}default:{I.bottom="0";break}}return I},[N,g,x,e.height,e.position,e.width,i,o,r,A]),"iframeStyle"),Q=s(er(()=>{const u={};return A?u.transform="translate(-50%, -50%) rotate(90deg)":u.transform="translate(-50%, -50%)",g&&(u.transition="none !important"),u},[g,A]),"panelStyle");return{anchorStyle:cr,bringUp:Y,iframeStyle:U,isDragging:g,isHidden:f,isVertical:A,onPointerDown:J,panelStyle:Q}},"usePosition");var ge=Object.defineProperty,wr=S((r,e)=>ge(r,"name",{value:e,configurable:!0}),"t$1");const be=wr(({app:r})=>{const{toggleApp:e}=Pr(),{isVisible:t,setHoveredApp:i}=Tr(),o=s(b(null),"buttonRef"),n=wr(()=>{e(r.id).catch(T=>{console.error(`[dev-toolbar] Failed to toggle app ${r.id}:`,T)})},"handleClick"),c=wr(()=>{!r.tooltip||t||i(r,o.current?.getBoundingClientRect()??null)},"handleMouseEnter"),g=wr(()=>{r.tooltip&&i(null)},"handleMouseLeave");return a("button",{ref:o,"aria-label":r.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]",r.active&&"bg-primary/12 text-primary","group-data-[vertical]/panel:rotate-[-90deg]"),"data-app-id":r.id,onClick:n,onMouseEnter:c,onMouseLeave:g,title:r.tooltip?void 0:r.name,type:"button",children:v("div",{class:"relative size-6 select-none flex items-center justify-center",children:[a("div",{class:"size-6 flex items-center justify-center [&_svg]:size-4.5",dangerouslySetInnerHTML:{__html:r.icon}}),r.notification.state&&a("span",{class:h("absolute -top-1 -right-1 size-1.5 rounded-full border border-background",r.notification.level==="error"&&"bg-destructive",r.notification.level==="warning"&&"bg-warning",(!r.notification.level||r.notification.level==="info")&&"bg-info"),"data-level":r.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",me="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",ve="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",fe="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",we="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",xe="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",ye="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",ke="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 De=`/*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */
|
|
2
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-sky-500:oklch(68.5% .169 237.323);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-indigo-500:oklch(58.5% .233 277.117);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-2xl:42rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-black:900;--tracking-wide:.025em;--tracking-wider:.05em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-background:#f2f2f2;--color-foreground:#18181b;--color-card:#fff;--color-primary:#7c3aed;--color-primary-foreground:#fff;--color-muted:#e4e4e7;--color-muted-foreground:#52525b;--color-accent:#e4e4e7;--color-destructive:oklch(55% .22 25);--color-border:#d4d4d8;--color-ring:#71717a;--color-info:oklch(45% .2 240);--color-success:oklch(48% .18 155);--color-success-foreground:oklch(38% .17 155);--color-warning:oklch(58% .18 65);--color-warning-foreground:oklch(45% .16 65)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--color-border);outline-color:#71717a80}@supports (color:color-mix(in lab, red, red)){*{outline-color:color-mix(in oklab, var(--color-ring) 50%, transparent)}}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.-top-0\\.5{top:calc(var(--spacing) * -.5)}.-top-1{top:calc(var(--spacing) * -1)}.top-0{top:calc(var(--spacing) * 0)}.top-1\\.5{top:calc(var(--spacing) * 1.5)}.top-1\\/2{top:50%}.top-4{top:calc(var(--spacing) * 4)}.top-14{top:calc(var(--spacing) * 14)}.top-\\[-5px\\]{top:-5px}.-right-1{right:calc(var(--spacing) * -1)}.right-0{right:calc(var(--spacing) * 0)}.right-1\\.5{right:calc(var(--spacing) * 1.5)}.right-2\\.5{right:calc(var(--spacing) * 2.5)}.right-14{right:calc(var(--spacing) * 14)}.right-\\[-5px\\]{right:-5px}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-1\\.5{bottom:calc(var(--spacing) * 1.5)}.bottom-4{bottom:calc(var(--spacing) * 4)}.bottom-14{bottom:calc(var(--spacing) * 14)}.bottom-\\[-5px\\]{bottom:-5px}.left-0{left:calc(var(--spacing) * 0)}.left-1\\.5{left:calc(var(--spacing) * 1.5)}.left-1\\/2{left:50%}.left-14{left:calc(var(--spacing) * 14)}.left-\\[-5px\\]{left:-5px}.left-\\[calc\\(100\\%\\+0\\.5rem\\)\\]{left:calc(100% + .5rem)}.z-10{z-index:10}.z-50{z-index:50}.z-\\[2147483646\\]{z-index:2147483646}.z-\\[2147483647\\]{z-index:2147483647}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing) * 0)}.mx-0\\.5{margin-inline:calc(var(--spacing) * .5)}.-mt-1{margin-top:calc(var(--spacing) * -1)}.mt-0\\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.-mr-1{margin-right:calc(var(--spacing) * -1)}.mr-1{margin-right:calc(var(--spacing) * 1)}.mr-1\\.5{margin-right:calc(var(--spacing) * 1.5)}.-mb-1{margin-bottom:calc(var(--spacing) * -1)}.mb-0\\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-2\\.5{margin-bottom:calc(var(--spacing) * 2.5)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.-ml-1{margin-left:calc(var(--spacing) * -1)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.box-border{box-sizing:border-box}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-\\[1200\\/630\\]{aspect-ratio:1200/630}.size-1\\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-3\\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-4\\.5{width:calc(var(--spacing) * 4.5);height:calc(var(--spacing) * 4.5)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-12{width:calc(var(--spacing) * 12);height:calc(var(--spacing) * 12)}.size-14{width:calc(var(--spacing) * 14);height:calc(var(--spacing) * 14)}.h-1\\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\\.5{height:calc(var(--spacing) * 2.5)}.h-3\\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-full{height:100%}.max-h-48{max-height:calc(var(--spacing) * 48)}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-12{min-height:calc(var(--spacing) * 12)}.min-h-48{min-height:calc(var(--spacing) * 48)}.w-2\\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-9{width:calc(var(--spacing) * 9)}.w-12\\.5{width:calc(var(--spacing) * 12.5)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-36{width:calc(var(--spacing) * 36)}.w-62\\.5{width:calc(var(--spacing) * 62.5)}.w-72{width:calc(var(--spacing) * 72)}.w-80{width:calc(var(--spacing) * 80)}.w-\\[240px\\]{width:240px}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-12\\!{max-width:calc(var(--spacing) * 12)!important}.max-w-\\[220px\\]{max-width:220px}.max-w-\\[240px\\]{max-width:240px}.max-w-\\[300px\\]{max-width:300px}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-3\\.5{min-width:calc(var(--spacing) * 3.5)}.min-w-\\[200px\\]{min-width:200px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.origin-\\[bottom_center\\]{transform-origin:bottom}.origin-\\[left_center\\]{transform-origin:0}.origin-\\[right_center\\]{transform-origin:100%}.origin-\\[top_center\\]{transform-origin:top}.origin-center{transform-origin:50%}.-translate-x-1{--tw-translate-x:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-x-1\\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-x-2{--tw-translate-x:calc(var(--spacing) * -2);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-2{--tw-translate-x:calc(var(--spacing) * 2);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-4{--tw-translate-x:calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-\\[-2px\\]{--tw-translate-x:-2px;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1{--tw-translate-y:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-2{--tw-translate-y:calc(var(--spacing) * -2);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-1{--tw-translate-y:calc(var(--spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-2{--tw-translate-y:calc(var(--spacing) * 2);translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.scale-\\[0\\.97\\]{scale:.97}.scale-\\[0\\.99\\]{scale:.99}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-none\\!{animation:none!important}.animate-pulse{animation:var(--animate-pulse)}.cursor-ew-resize{cursor:ew-resize}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-not-allowed{cursor:not-allowed}.cursor-ns-resize{cursor:ns-resize}.cursor-pointer{cursor:pointer}.resize{resize:both}.list-none{list-style-type:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-start{justify-content:flex-start}.gap-0{gap:calc(var(--spacing) * 0)}.gap-0\\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-7{gap:calc(var(--spacing) * 7)}:where(.space-y-0\\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-border>:not(:last-child)){border-color:var(--color-border)}:where(.divide-border\\/30>:not(:last-child)){border-color:#d4d4d84d}@supports (color:color-mix(in lab, red, red)){:where(.divide-border\\/30>:not(:last-child)){border-color:color-mix(in oklab, var(--color-border) 30%, transparent)}}:where(.divide-border\\/50>:not(:last-child)){border-color:#d4d4d880}@supports (color:color-mix(in lab, red, red)){:where(.divide-border\\/50>:not(:last-child)){border-color:color-mix(in oklab, var(--color-border) 50%, transparent)}}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded-full{border-radius:3.40282e38px}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-background{border-color:var(--color-background)}.border-blue-500\\/30{border-color:#3080ff4d}@supports (color:color-mix(in lab, red, red)){.border-blue-500\\/30{border-color:color-mix(in oklab, var(--color-blue-500) 30%, transparent)}}.border-blue-600\\/30{border-color:#155dfc4d}@supports (color:color-mix(in lab, red, red)){.border-blue-600\\/30{border-color:color-mix(in oklab, var(--color-blue-600) 30%, transparent)}}.border-border{border-color:var(--color-border)}.border-border\\/30{border-color:#d4d4d84d}@supports (color:color-mix(in lab, red, red)){.border-border\\/30{border-color:color-mix(in oklab, var(--color-border) 30%, transparent)}}.border-border\\/40{border-color:#d4d4d866}@supports (color:color-mix(in lab, red, red)){.border-border\\/40{border-color:color-mix(in oklab, var(--color-border) 40%, transparent)}}.border-border\\/50{border-color:#d4d4d880}@supports (color:color-mix(in lab, red, red)){.border-border\\/50{border-color:color-mix(in oklab, var(--color-border) 50%, transparent)}}.border-border\\/60{border-color:#d4d4d899}@supports (color:color-mix(in lab, red, red)){.border-border\\/60{border-color:color-mix(in oklab, var(--color-border) 60%, transparent)}}.border-destructive\\/30{border-color:#d409244d}@supports (color:color-mix(in lab, red, red)){.border-destructive\\/30{border-color:color-mix(in oklab, var(--color-destructive) 30%, transparent)}}.border-emerald-500\\/30{border-color:#00bb7f4d}@supports (color:color-mix(in lab, red, red)){.border-emerald-500\\/30{border-color:color-mix(in oklab, var(--color-emerald-500) 30%, transparent)}}.border-foreground\\/20{border-color:#18181b33}@supports (color:color-mix(in lab, red, red)){.border-foreground\\/20{border-color:color-mix(in oklab, var(--color-foreground) 20%, transparent)}}.border-green-500\\/30{border-color:#00c7584d}@supports (color:color-mix(in lab, red, red)){.border-green-500\\/30{border-color:color-mix(in oklab, var(--color-green-500) 30%, transparent)}}.border-indigo-500\\/30{border-color:#625fff4d}@supports (color:color-mix(in lab, red, red)){.border-indigo-500\\/30{border-color:color-mix(in oklab, var(--color-indigo-500) 30%, transparent)}}.border-info\\/30{border-color:#005b934d}@supports (color:color-mix(in lab, red, red)){.border-info\\/30{border-color:color-mix(in oklab, var(--color-info) 30%, transparent)}}.border-orange-500\\/30{border-color:#fe6e004d}@supports (color:color-mix(in lab, red, red)){.border-orange-500\\/30{border-color:color-mix(in oklab, var(--color-orange-500) 30%, transparent)}}.border-primary{border-color:var(--color-primary)}.border-primary\\/15{border-color:#7c3aed26}@supports (color:color-mix(in lab, red, red)){.border-primary\\/15{border-color:color-mix(in oklab, var(--color-primary) 15%, transparent)}}.border-primary\\/20{border-color:#7c3aed33}@supports (color:color-mix(in lab, red, red)){.border-primary\\/20{border-color:color-mix(in oklab, var(--color-primary) 20%, transparent)}}.border-primary\\/25{border-color:#7c3aed40}@supports (color:color-mix(in lab, red, red)){.border-primary\\/25{border-color:color-mix(in oklab, var(--color-primary) 25%, transparent)}}.border-primary\\/30{border-color:#7c3aed4d}@supports (color:color-mix(in lab, red, red)){.border-primary\\/30{border-color:color-mix(in oklab, var(--color-primary) 30%, transparent)}}.border-primary\\/40{border-color:#7c3aed66}@supports (color:color-mix(in lab, red, red)){.border-primary\\/40{border-color:color-mix(in oklab, var(--color-primary) 40%, transparent)}}.border-purple-500\\/30{border-color:#ac4bff4d}@supports (color:color-mix(in lab, red, red)){.border-purple-500\\/30{border-color:color-mix(in oklab, var(--color-purple-500) 30%, transparent)}}.border-sky-500\\/30{border-color:#00a5ef4d}@supports (color:color-mix(in lab, red, red)){.border-sky-500\\/30{border-color:color-mix(in oklab, var(--color-sky-500) 30%, transparent)}}.border-success\\/30{border-color:#0073394d}@supports (color:color-mix(in lab, red, red)){.border-success\\/30{border-color:color-mix(in oklab, var(--color-success) 30%, transparent)}}.border-transparent{border-color:#0000}.border-warning\\/20{border-color:#af660033}@supports (color:color-mix(in lab, red, red)){.border-warning\\/20{border-color:color-mix(in oklab, var(--color-warning) 20%, transparent)}}.border-warning\\/30{border-color:#af66004d}@supports (color:color-mix(in lab, red, red)){.border-warning\\/30{border-color:color-mix(in oklab, var(--color-warning) 30%, transparent)}}.border-yellow-500\\/30{border-color:#edb2004d}@supports (color:color-mix(in lab, red, red)){.border-yellow-500\\/30{border-color:color-mix(in oklab, var(--color-yellow-500) 30%, transparent)}}.border-l-primary\\/20{border-left-color:#7c3aed33}@supports (color:color-mix(in lab, red, red)){.border-l-primary\\/20{border-left-color:color-mix(in oklab, var(--color-primary) 20%, transparent)}}.bg-accent{background-color:var(--color-accent)}.bg-background{background-color:var(--color-background)}.bg-blue-500\\/15{background-color:#3080ff26}@supports (color:color-mix(in lab, red, red)){.bg-blue-500\\/15{background-color:color-mix(in oklab, var(--color-blue-500) 15%, transparent)}}.bg-card{background-color:var(--color-card)}.bg-card\\/50{background-color:#ffffff80}@supports (color:color-mix(in lab, red, red)){.bg-card\\/50{background-color:color-mix(in oklab, var(--color-card) 50%, transparent)}}.bg-card\\/95{background-color:#fffffff2}@supports (color:color-mix(in lab, red, red)){.bg-card\\/95{background-color:color-mix(in oklab, var(--color-card) 95%, transparent)}}.bg-destructive{background-color:var(--color-destructive)}.bg-destructive\\/10{background-color:#d409241a}@supports (color:color-mix(in lab, red, red)){.bg-destructive\\/10{background-color:color-mix(in oklab, var(--color-destructive) 10%, transparent)}}.bg-destructive\\/15{background-color:#d4092426}@supports (color:color-mix(in lab, red, red)){.bg-destructive\\/15{background-color:color-mix(in oklab, var(--color-destructive) 15%, transparent)}}.bg-emerald-500\\/15{background-color:#00bb7f26}@supports (color:color-mix(in lab, red, red)){.bg-emerald-500\\/15{background-color:color-mix(in oklab, var(--color-emerald-500) 15%, transparent)}}.bg-foreground\\/2{background-color:#18181b05}@supports (color:color-mix(in lab, red, red)){.bg-foreground\\/2{background-color:color-mix(in oklab, var(--color-foreground) 2%, transparent)}}.bg-foreground\\/3{background-color:#18181b08}@supports (color:color-mix(in lab, red, red)){.bg-foreground\\/3{background-color:color-mix(in oklab, var(--color-foreground) 3%, transparent)}}.bg-foreground\\/4{background-color:#18181b0a}@supports (color:color-mix(in lab, red, red)){.bg-foreground\\/4{background-color:color-mix(in oklab, var(--color-foreground) 4%, transparent)}}.bg-foreground\\/5{background-color:#18181b0d}@supports (color:color-mix(in lab, red, red)){.bg-foreground\\/5{background-color:color-mix(in oklab, var(--color-foreground) 5%, transparent)}}.bg-foreground\\/6{background-color:#18181b0f}@supports (color:color-mix(in lab, red, red)){.bg-foreground\\/6{background-color:color-mix(in oklab, var(--color-foreground) 6%, transparent)}}.bg-foreground\\/8{background-color:#18181b14}@supports (color:color-mix(in lab, red, red)){.bg-foreground\\/8{background-color:color-mix(in oklab, var(--color-foreground) 8%, transparent)}}.bg-foreground\\/12{background-color:#18181b1f}@supports (color:color-mix(in lab, red, red)){.bg-foreground\\/12{background-color:color-mix(in oklab, var(--color-foreground) 12%, transparent)}}.bg-foreground\\/15{background-color:#18181b26}@supports (color:color-mix(in lab, red, red)){.bg-foreground\\/15{background-color:color-mix(in oklab, var(--color-foreground) 15%, transparent)}}.bg-green-500\\/15{background-color:#00c75826}@supports (color:color-mix(in lab, red, red)){.bg-green-500\\/15{background-color:color-mix(in oklab, var(--color-green-500) 15%, transparent)}}.bg-info{background-color:var(--color-info)}.bg-info\\/15{background-color:#005b9326}@supports (color:color-mix(in lab, red, red)){.bg-info\\/15{background-color:color-mix(in oklab, var(--color-info) 15%, transparent)}}.bg-muted{background-color:var(--color-muted)}.bg-muted-foreground\\/50{background-color:#52525b80}@supports (color:color-mix(in lab, red, red)){.bg-muted-foreground\\/50{background-color:color-mix(in oklab, var(--color-muted-foreground) 50%, transparent)}}.bg-orange-500\\/15{background-color:#fe6e0026}@supports (color:color-mix(in lab, red, red)){.bg-orange-500\\/15{background-color:color-mix(in oklab, var(--color-orange-500) 15%, transparent)}}.bg-primary{background-color:var(--color-primary)}.bg-primary-foreground{background-color:var(--color-primary-foreground)}.bg-primary\\/4{background-color:#7c3aed0a}@supports (color:color-mix(in lab, red, red)){.bg-primary\\/4{background-color:color-mix(in oklab, var(--color-primary) 4%, transparent)}}.bg-primary\\/5{background-color:#7c3aed0d}@supports (color:color-mix(in lab, red, red)){.bg-primary\\/5{background-color:color-mix(in oklab, var(--color-primary) 5%, transparent)}}.bg-primary\\/6{background-color:#7c3aed0f}@supports (color:color-mix(in lab, red, red)){.bg-primary\\/6{background-color:color-mix(in oklab, var(--color-primary) 6%, transparent)}}.bg-primary\\/8{background-color:#7c3aed14}@supports (color:color-mix(in lab, red, red)){.bg-primary\\/8{background-color:color-mix(in oklab, var(--color-primary) 8%, transparent)}}.bg-primary\\/10{background-color:#7c3aed1a}@supports (color:color-mix(in lab, red, red)){.bg-primary\\/10{background-color:color-mix(in oklab, var(--color-primary) 10%, transparent)}}.bg-primary\\/12{background-color:#7c3aed1f}@supports (color:color-mix(in lab, red, red)){.bg-primary\\/12{background-color:color-mix(in oklab, var(--color-primary) 12%, transparent)}}.bg-primary\\/20{background-color:#7c3aed33}@supports (color:color-mix(in lab, red, red)){.bg-primary\\/20{background-color:color-mix(in oklab, var(--color-primary) 20%, transparent)}}.bg-primary\\/50{background-color:#7c3aed80}@supports (color:color-mix(in lab, red, red)){.bg-primary\\/50{background-color:color-mix(in oklab, var(--color-primary) 50%, transparent)}}.bg-purple-500\\/15{background-color:#ac4bff26}@supports (color:color-mix(in lab, red, red)){.bg-purple-500\\/15{background-color:color-mix(in oklab, var(--color-purple-500) 15%, transparent)}}.bg-success{background-color:var(--color-success)}.bg-success\\/10{background-color:#0073391a}@supports (color:color-mix(in lab, red, red)){.bg-success\\/10{background-color:color-mix(in oklab, var(--color-success) 10%, transparent)}}.bg-transparent{background-color:#0000}.bg-warning{background-color:var(--color-warning)}.bg-warning\\/10{background-color:#af66001a}@supports (color:color-mix(in lab, red, red)){.bg-warning\\/10{background-color:color-mix(in oklab, var(--color-warning) 10%, transparent)}}.bg-warning\\/15{background-color:#af660026}@supports (color:color-mix(in lab, red, red)){.bg-warning\\/15{background-color:color-mix(in oklab, var(--color-warning) 15%, transparent)}}.bg-white{background-color:var(--color-white)}.bg-yellow-500\\/15{background-color:#edb20026}@supports (color:color-mix(in lab, red, red)){.bg-yellow-500\\/15{background-color:color-mix(in oklab, var(--color-yellow-500) 15%, transparent)}}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing) * 0)}.p-0\\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-0{padding-inline:calc(var(--spacing) * 0)}.px-0\\.5{padding-inline:calc(var(--spacing) * .5)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-0\\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\\.5{padding-block:calc(var(--spacing) * 3.5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pr-2{padding-right:calc(var(--spacing) * 2)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.toolbar-font{font-feature-settings:"kern" 1, "liga" 1, "calt" 1, "zero" 1;font-optical-sizing:auto;font-family:JetBrains Mono,Geist Mono,ui-monospace,Cascadia Code,Fira Code,monospace}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[0\\.5rem\\]{font-size:.5rem}.text-\\[0\\.6rem\\]{font-size:.6rem}.text-\\[0\\.7rem\\]{font-size:.7rem}.text-\\[0\\.8rem\\]{font-size:.8rem}.text-\\[0\\.9rem\\]{font-size:.9rem}.text-\\[0\\.55rem\\]{font-size:.55rem}.text-\\[0\\.58rem\\]{font-size:.58rem}.text-\\[0\\.62rem\\]{font-size:.62rem}.text-\\[0\\.65rem\\]{font-size:.65rem}.text-\\[0\\.72rem\\]{font-size:.72rem}.text-\\[0\\.75rem\\]{font-size:.75rem}.text-\\[0\\.85rem\\]{font-size:.85rem}.text-\\[0\\.725rem\\]{font-size:.725rem}.text-\\[0\\.775rem\\]{font-size:.775rem}.text-\\[0\\.8125rem\\]{font-size:.8125rem}.text-\\[9px\\]{font-size:9px}.text-\\[13px\\]\\!{font-size:13px!important}.leading-\\[1\\.6\\]\\!{--tw-leading:1.6!important;line-height:1.6!important}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\\[-0\\.01em\\]{--tw-tracking:-.01em;letter-spacing:-.01em}.tracking-\\[0\\.1em\\]{--tw-tracking:.1em;letter-spacing:.1em}.tracking-\\[0\\.06em\\]{--tw-tracking:.06em;letter-spacing:.06em}.tracking-\\[0\\.12em\\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-\\[0\\.14em\\]{--tw-tracking:.14em;letter-spacing:.14em}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-blue-400{color:var(--color-blue-400)}.text-destructive{color:var(--color-destructive)}.text-emerald-400{color:var(--color-emerald-400)}.text-foreground{color:var(--color-foreground)}.text-foreground\\/60{color:#18181b99}@supports (color:color-mix(in lab, red, red)){.text-foreground\\/60{color:color-mix(in oklab, var(--color-foreground) 60%, transparent)}}.text-foreground\\/65{color:#18181ba6}@supports (color:color-mix(in lab, red, red)){.text-foreground\\/65{color:color-mix(in oklab, var(--color-foreground) 65%, transparent)}}.text-foreground\\/70{color:#18181bb3}@supports (color:color-mix(in lab, red, red)){.text-foreground\\/70{color:color-mix(in oklab, var(--color-foreground) 70%, transparent)}}.text-foreground\\/80{color:#18181bcc}@supports (color:color-mix(in lab, red, red)){.text-foreground\\/80{color:color-mix(in oklab, var(--color-foreground) 80%, transparent)}}.text-green-400{color:var(--color-green-400)}.text-info{color:var(--color-info)}.text-muted-foreground{color:var(--color-muted-foreground)}.text-muted-foreground\\/40{color:#52525b66}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\\/40{color:color-mix(in oklab, var(--color-muted-foreground) 40%, transparent)}}.text-muted-foreground\\/50{color:#52525b80}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\\/50{color:color-mix(in oklab, var(--color-muted-foreground) 50%, transparent)}}.text-muted-foreground\\/60{color:#52525b99}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\\/60{color:color-mix(in oklab, var(--color-muted-foreground) 60%, transparent)}}.text-muted-foreground\\/70{color:#52525bb3}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\\/70{color:color-mix(in oklab, var(--color-muted-foreground) 70%, transparent)}}.text-orange-400{color:var(--color-orange-400)}.text-primary{color:var(--color-primary)}.text-primary\\/40{color:#7c3aed66}@supports (color:color-mix(in lab, red, red)){.text-primary\\/40{color:color-mix(in oklab, var(--color-primary) 40%, transparent)}}.text-primary\\/45{color:#7c3aed73}@supports (color:color-mix(in lab, red, red)){.text-primary\\/45{color:color-mix(in oklab, var(--color-primary) 45%, transparent)}}.text-primary\\/50{color:#7c3aed80}@supports (color:color-mix(in lab, red, red)){.text-primary\\/50{color:color-mix(in oklab, var(--color-primary) 50%, transparent)}}.text-primary\\/60{color:#7c3aed99}@supports (color:color-mix(in lab, red, red)){.text-primary\\/60{color:color-mix(in oklab, var(--color-primary) 60%, transparent)}}.text-primary\\/70{color:#7c3aedb3}@supports (color:color-mix(in lab, red, red)){.text-primary\\/70{color:color-mix(in oklab, var(--color-primary) 70%, transparent)}}.text-purple-400{color:var(--color-purple-400)}.text-success-foreground{color:var(--color-success-foreground)}.text-warning{color:var(--color-warning)}.text-warning-foreground{color:var(--color-warning-foreground)}.text-white{color:var(--color-white)}.text-yellow-400{color:var(--color-yellow-400)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-60{opacity:.6}.opacity-65{opacity:.65}.opacity-80{opacity:.8}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-pill{--tw-shadow:0 4px 20px var(--tw-shadow-color,#0000001f), 0 0 0 1px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-primary\\/40{--tw-ring-color:#7c3aed66}@supports (color:color-mix(in lab, red, red)){.ring-primary\\/40{--tw-ring-color:color-mix(in oklab, var(--color-primary) 40%, transparent)}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.backdrop-blur-\\[0\\.625rem\\]{--tw-backdrop-blur:blur(.625rem);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[left_0\\.3s_cubic-bezier\\(0\\.4\\,0\\,0\\.2\\,1\\)\\,top_0\\.3s_cubic-bezier\\(0\\.4\\,0\\,0\\.2\\,1\\)\\]{transition-property:left .3s cubic-bezier(.4,0,.2,1),top .3s cubic-bezier(.4,0,.2,1);transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[opacity\\,transform\\]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[width\\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-none\\!{transition-property:none!important}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-\\[cubic-bezier\\(0\\.4\\,0\\,0\\.2\\,1\\)\\]{--tw-ease:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-\\[cubic-bezier\\(0\\.23\\,1\\,0\\.32\\,1\\)\\]{--tw-ease:cubic-bezier(.23,1,.32,1);transition-timing-function:cubic-bezier(.23,1,.32,1)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.scrollbar-thin-border{scrollbar-width:thin;scrollbar-color:var(--color-border) transparent}.select-none{-webkit-user-select:none;user-select:none}.ring-inset{--tw-ring-inset:inset}.running{animation-play-state:running}.transition-panel{transition:opacity .4s cubic-bezier(.23,1,.32,1),transform .4s cubic-bezier(.23,1,.32,1),translate .4s cubic-bezier(.23,1,.32,1),scale .4s cubic-bezier(.23,1,.32,1),width .35s cubic-bezier(.4,0,.2,1),clip-path .35s cubic-bezier(.4,0,.2,1)}.transition-pill{transition:all .6s,max-width .6s,padding .5s,transform .4s,opacity .2s}@media (hover:hover){.group-hover\\/nav-item\\:translate-x-0:is(:where(.group\\/nav-item):hover *){--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.group-hover\\/nav-item\\:opacity-100:is(:where(.group\\/nav-item):hover *){opacity:1}}.group-data-\\[vertical\\]\\/panel\\:rotate-\\[-90deg\\]:is(:where(.group\\/panel)[data-vertical] *){rotate:-90deg}.placeholder\\:text-muted-foreground\\/50::placeholder{color:#52525b80}@supports (color:color-mix(in lab, red, red)){.placeholder\\:text-muted-foreground\\/50::placeholder{color:color-mix(in oklab, var(--color-muted-foreground) 50%, transparent)}}.last\\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}@media (hover:hover){.hover\\:border-foreground\\/30:hover{border-color:#18181b4d}@supports (color:color-mix(in lab, red, red)){.hover\\:border-foreground\\/30:hover{border-color:color-mix(in oklab, var(--color-foreground) 30%, transparent)}}.hover\\:border-primary\\/30:hover{border-color:#7c3aed4d}@supports (color:color-mix(in lab, red, red)){.hover\\:border-primary\\/30:hover{border-color:color-mix(in oklab, var(--color-primary) 30%, transparent)}}.hover\\:border-primary\\/50:hover{border-color:#7c3aed80}@supports (color:color-mix(in lab, red, red)){.hover\\:border-primary\\/50:hover{border-color:color-mix(in oklab, var(--color-primary) 50%, transparent)}}.hover\\:bg-destructive\\/8:hover{background-color:#d4092414}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/8:hover{background-color:color-mix(in oklab, var(--color-destructive) 8%, transparent)}}.hover\\:bg-foreground\\/3:hover{background-color:#18181b08}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-foreground\\/3:hover{background-color:color-mix(in oklab, var(--color-foreground) 3%, transparent)}}.hover\\:bg-foreground\\/4:hover{background-color:#18181b0a}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-foreground\\/4:hover{background-color:color-mix(in oklab, var(--color-foreground) 4%, transparent)}}.hover\\:bg-foreground\\/5:hover{background-color:#18181b0d}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-foreground\\/5:hover{background-color:color-mix(in oklab, var(--color-foreground) 5%, transparent)}}.hover\\:bg-foreground\\/6:hover{background-color:#18181b0f}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-foreground\\/6:hover{background-color:color-mix(in oklab, var(--color-foreground) 6%, transparent)}}.hover\\:bg-foreground\\/7:hover{background-color:#18181b12}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-foreground\\/7:hover{background-color:color-mix(in oklab, var(--color-foreground) 7%, transparent)}}.hover\\:bg-foreground\\/8:hover{background-color:#18181b14}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-foreground\\/8:hover{background-color:color-mix(in oklab, var(--color-foreground) 8%, transparent)}}.hover\\:bg-foreground\\/10:hover{background-color:#18181b1a}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-foreground\\/10:hover{background-color:color-mix(in oklab, var(--color-foreground) 10%, transparent)}}.hover\\:bg-primary\\/4:hover{background-color:#7c3aed0a}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-primary\\/4:hover{background-color:color-mix(in oklab, var(--color-primary) 4%, transparent)}}.hover\\:bg-primary\\/7:hover{background-color:#7c3aed12}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-primary\\/7:hover{background-color:color-mix(in oklab, var(--color-primary) 7%, transparent)}}.hover\\:bg-primary\\/8:hover{background-color:#7c3aed14}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-primary\\/8:hover{background-color:color-mix(in oklab, var(--color-primary) 8%, transparent)}}.hover\\:bg-primary\\/12:hover{background-color:#7c3aed1f}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-primary\\/12:hover{background-color:color-mix(in oklab, var(--color-primary) 12%, transparent)}}.hover\\:text-destructive:hover{color:var(--color-destructive)}.hover\\:text-foreground:hover{color:var(--color-foreground)}.hover\\:text-muted-foreground:hover{color:var(--color-muted-foreground)}.hover\\:text-primary:hover{color:var(--color-primary)}}.focus\\:border-primary\\/50:focus{border-color:#7c3aed80}@supports (color:color-mix(in lab, red, red)){.focus\\:border-primary\\/50:focus{border-color:color-mix(in oklab, var(--color-primary) 50%, transparent)}}.focus\\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\\:ring-ring:focus{--tw-ring-color:var(--color-ring)}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\\:ring-ring:focus-visible{--tw-ring-color:var(--color-ring)}.focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\\:scale-90:active{--tw-scale-x:90%;--tw-scale-y:90%;--tw-scale-z:90%;scale:var(--tw-scale-x) var(--tw-scale-y)}.active\\:scale-\\[0\\.94\\]:active{scale:.94}.active\\:scale-\\[0\\.95\\]:active{scale:.95}.active\\:scale-\\[0\\.98\\]:active{scale:.98}.data-\\[dragging\\]\\:transition-none\\![data-dragging]{transition-property:none!important}@media print{.print\\:hidden{display:none}}.\\[\\&_\\*\\]\\:box-border *{box-sizing:border-box}.\\[\\&_\\*\\]\\:animate-none\\! *{animation:none!important}.\\[\\&_\\*\\]\\:transition-none\\! *{transition-property:none!important}.\\[\\&_svg\\]\\:size-3\\.5 svg{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\\[\\&_svg\\]\\:size-4 svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\\[\\&_svg\\]\\:size-4\\.5 svg{width:calc(var(--spacing) * 4.5);height:calc(var(--spacing) * 4.5)}.\\[\\&_svg\\]\\:size-5 svg{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:root,:host{--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:rotateX(0);--tw-rotate-y:rotateY(0);--tw-rotate-z:rotateZ(0);--tw-skew-x:skewX(0);--tw-skew-y:skewY(0);--tw-space-x-reverse:0;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--brand-violet:#7c3aed;--brand-violet-light:#c4b5fd;--brand-white:#fff;--brand-frost:#f2f2f2;--brand-silver:#d8d8d8;--brand-graphite:#6b6b6b;--brand-iron:#3c3c3c;--brand-charcoal:#212121;--brand-black:#000}.dark{--color-background:#212121;--color-foreground:#fafafa;--color-card:#18181b;--color-card-foreground:#fafafa;--color-popover:#18181b;--color-popover-foreground:#fafafa;--color-primary:#c4b5fd;--color-primary-foreground:#09090b;--color-secondary:#27272a;--color-secondary-foreground:#fafafa;--color-muted:#27272a;--color-muted-foreground:#a1a1aa;--color-accent:#18181b;--color-accent-foreground:#fafafa;--color-destructive:oklch(65% .2 25);--color-destructive-foreground:oklch(98% .01 25);--color-border:oklch(100% 0 0/.1);--color-input:oklch(100% 0 0/.14);--color-ring:#71717a;--color-info:oklch(62% .2 240);--color-info-foreground:oklch(75% .18 240);--color-success:oklch(65% .17 155);--color-success-foreground:oklch(78% .15 155);--color-warning:oklch(78% .16 65);--color-warning-foreground:oklch(88% .15 65);--shadow-pill:0 6px 24px #000000b3, 0 2px 8px #00000080}.devtools-content-scroll::-webkit-scrollbar{width:5px;height:5px}.devtools-content-scroll::-webkit-scrollbar-track{background:0 0}.devtools-content-scroll::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:3px}.devtools-content-scroll::-webkit-scrollbar-thumb:hover{background:var(--color-muted-foreground)}.dev-toolbar-badge{border-radius:50%;width:.5rem;height:.5rem;position:absolute;top:-.25rem;right:-.375rem}.dev-toolbar-badge.info{background:var(--color-info)}.dev-toolbar-badge.warning{background:var(--color-warning)}.dev-toolbar-badge.error{background:var(--color-destructive)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}`,ze=Object.defineProperty,Ie=S((r,e)=>ze(r,"name",{value:e,configurable:!0}),"t");const Ae=De,Me=Ie(()=>{if(globalThis.window===void 0)return;const r=new CSSStyleSheet;return r.replaceSync(Ae),r},"createSharedStylesheet"),gr=Me();var Ce=Object.defineProperty,L=S((r,e)=>Ce(r,"name",{value:e,configurable:!0}),"s$2");const Te=L(({app:r})=>{const e=s(b(null),"contentRef"),t=s(b(!1),"initializedRef"),i=s(b(ur()),"helpersRef");return _(()=>{if(!e.current||t.current||r.component)return;const o=e.current;if(r.init){const n=document.createElement("div");n.style.cssText="width:100%;height:100%;",o.append(n);const c=n.attachShadow({mode:"open"});gr&&(c.adoptedStyleSheets=[gr]);const g=ur(),T=r.init(c,r.eventTarget,g);return T&&typeof T.then=="function"?T.then(()=>{t.current=!0}).catch(V=>{console.error(`[dev-toolbar] Failed to init app ${r.id}:`,V)}):t.current=!0,()=>{for(;o.firstChild;)o.removeChild(o.firstChild);t.current=!1}}},[r]),r.component?a(r.component,{eventTarget:r.eventTarget,helpers:i.current}):a("div",{class:"w-full h-full",ref:e})},"AppContent"),xr=20,yr=95,kr=L((r,e,t)=>Math.min(Math.max(r,e),t),"clamp"),Pe=L(r=>{switch(r){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"),Fe=L(r=>{switch(r){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"),Se=L((r,e)=>e?"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"}[r]??"translate-y-2"),"getVisibilityClasses"),je=L(({activeAppId:r,apps:e,onClose:t,onToggleApp:i,panelVisible:o,position:n})=>{const[c,g]=s(W(!1),"isRendered"),[T,V]=s(W(!1),"isVisible"),[y,B]=s(W(!1),"sidebarCollapsed"),[,P]=s(W(0),"rerender"),{state:k,updateState:w}=zr(),{resolvedTheme:$}=Nr(),j=s(b(null),"panelDivRef"),R=s(b(!1),"isResizingRef"),Z=s(b({height:k.height,width:k.width}),"dimensionsRef"),x=s(b(null),"enteringFromRectRef"),O=s(b(null),"lastDockedRectRef"),J=s(b(!1),"prevIsFullscreenRef"),Y=s(b(!1),"isExitAnimatingRef"),A=s(b(null),"fsTimerRef"),f=k.viewMode==="fullscreen",N=k.viewMode==="wide",cr=typeof globalThis.window?.documentPictureInPicture<"u",U=s(b(null),"pipWindowRef"),Q=s(er(()=>{if(f)return{};const l=globalThis.window?.innerWidth??1920,d=globalThis.window?.innerHeight??1080,p=`${Z.current.height/100*d}px`;switch(n){case"bottom":case"top":return{height:p,left:"50%",transform:"translateX(-50%)",width:N?"calc(100vw - 2rem)":"min(calc(100vw - 2rem), 1280px)"};case"left":case"right":return{width:`${Z.current.width/100*l}px`};default:return{height:p,left:"50%",transform:"translateX(-50%)",width:N?"calc(100vw - 2rem)":"min(calc(100vw - 2rem), 1280px)"}}},[f,N,n,P]),"panelSizeStyle");_(()=>{const l=L(p=>{if(!R.current||!j.current)return;const D=j.current.getBoundingClientRect(),z=window.innerWidth,G=window.innerHeight,q={...Z.current};if(R.current.top){const I=Math.abs(D.bottom-p.clientY);q.height=kr(I/G*100,xr,yr)}else if(R.current.bottom){const I=Math.abs(p.clientY-D.top);q.height=kr(I/G*100,xr,yr)}else if(R.current.right){const I=Math.abs(p.clientX-D.left);q.width=kr(I/z*100,xr,yr)}else if(R.current.left){const I=Math.abs(D.right-p.clientX);q.width=kr(I/z*100,xr,yr)}Z.current=q,P(I=>I+1)},"handleMouseMove"),d=L(()=>{R.current&&(w({height:Z.current.height,width:Z.current.width}),R.current=!1)},"handleMouseUp");return window.addEventListener("mousemove",l),window.addEventListener("mouseup",d),()=>{window.removeEventListener("mousemove",l),window.removeEventListener("mouseup",d)}},[w]),Jr(()=>{const l=J.current;J.current=f,A.current!==null&&(clearTimeout(A.current),A.current=null);const d=j.current;if(d)if(f&&!l&&x.current){const p=x.current;x.current=null;const D=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(${p.top}px ${D-p.right}px ${z-p.bottom}px ${p.left}px)`,requestAnimationFrame(()=>{d.style.clipPath="inset(0px 0px 0px 0px)",A.current=setTimeout(()=>{d.style.clipPath="",d.style.transition="",A.current=null},380)})}else!f&&l&&(Y.current||(d.style.transition="none",d.style.clipPath="",requestAnimationFrame(()=>{d.style.transition=""})))},[f]),_(()=>{if(o){g(!0);const d=setTimeout(()=>V(!0),16);return()=>clearTimeout(d)}V(!1);const l=setTimeout(()=>g(!1),220);return()=>clearTimeout(l)},[o]);const u=L(async()=>{const l=globalThis.window?.documentPictureInPicture;if(l)try{const d=await l.requestWindow({height:600,width:900});if(U.current=d,gr){const z=d.document.createElement("style");z.textContent=[...gr.cssRules].map(G=>G.cssText).join(`
|
|
3
|
+
`),d.document.head.append(z)}const p=d.document.createElement("div");p.style.cssText="width:100%;height:100%;overflow:auto;",$==="dark"&&(d.document.documentElement.classList.add("dark"),p.classList.add("dark")),d.document.body.style.cssText="margin:0;padding:0;",d.document.body.append(p);const D=e.find(z=>z.id===r);if(D?.component){const z=ur();Ar(a(D.component,{eventTarget:D.eventTarget,helpers:z}),p)}w({isPip:!0}),d.addEventListener("pagehide",()=>{w({isPip:!1}),U.current=null})}catch(d){console.error("[dev-toolbar] PiP activation failed:",d)}},"activatePip");_(()=>{if(!o)return;const l=L(d=>{d.key==="Escape"&&t()},"handleKeyDown");return document.addEventListener("keydown",l),()=>document.removeEventListener("keydown",l)},[o,t]);const C=s(er(()=>e.find(l=>l.id===r),[e,r]),"activeApp");if(!c)return null;const F=L(l=>d=>{d.preventDefault(),R.current=l},"startResize");return v(Mr,{children:[a("div",{"aria-hidden":"true",class:h("fixed inset-0 z-[2147483646]","transition-opacity duration-200",T&&!f?"opacity-100 pointer-events-auto":"opacity-0 pointer-events-none"),onClick:k.closeOnOutsideClick?t:void 0,role:"presentation"}),v("div",{ref:j,"aria-label":"DevTools panel","aria-modal":"true",class:h("fixed z-[2147483647] pointer-events-auto antialiased font-mono",f?"inset-0":Pe(n),"bg-background overflow-hidden",f?"rounded-none border-0":"rounded-none border border-border","shadow-2xl","transition-panel",!f&&Fe(n),Se(n,T),"flex flex-row"),role:"dialog",style:Q,children:[!f&&v(Mr,{children:[n!=="top"&&a("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:F({top:!0})}),n==="top"&&a("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:F({bottom:!0})}),n==="left"&&a("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:F({right:!0})}),n==="right"&&a("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:F({left:!0})})]}),v("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:[a("div",{class:h("flex items-center shrink-0 border-b border-border/50 h-12",y?"justify-center px-2":"px-3"),children:y?a("span",{"aria-hidden":"true",class:"text-primary font-black text-[0.8rem] select-none",children:"V"}):v("span",{class:"text-[0.6rem] font-bold uppercase tracking-[0.14em] text-muted-foreground select-none",children:[a("span",{"aria-hidden":"true",class:"text-primary/60 mr-1",children:"//"}),"DevTools"]})}),a("div",{class:"flex flex-col flex-1 overflow-y-auto p-2 gap-1 scrollbar-thin-border",children:e.map(l=>v("div",{class:"relative group/nav-item",children:[v("button",{"aria-label":l.name,"aria-pressed":r===l.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",r===l.id?"border-primary bg-primary/8 text-foreground":"border-transparent bg-transparent text-muted-foreground hover:bg-foreground/6 hover:text-foreground"),onClick:L(()=>{l.id!==r&&i(l.id).catch(console.error)},"onClick"),type:"button",children:[l.icon?a("span",{class:h("size-4 shrink-0 flex items-center justify-center [&_svg]:size-4",r===l.id?"opacity-100":"opacity-65 group-hover/nav-item:opacity-100"),dangerouslySetInnerHTML:{__html:l.icon}}):a("span",{class:"size-4.5 shrink-0 flex items-center justify-center text-[0.65rem] font-bold uppercase select-none",children:l.name.slice(0,2)}),!y&&a("span",{class:"text-[0.8125rem] font-medium truncate leading-none tracking-[-0.01em]",children:l.name})]}),l.notification.state&&a("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",l.notification.level==="error"?"bg-destructive":l.notification.level==="warning"?"bg-warning":"bg-info")}),y&&a("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:a("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:l.name})})]},l.id))}),!y&&a("div",{class:"px-3 py-2.5 border-t border-border/40 shrink-0",children:v("span",{class:"text-[0.58rem] text-muted-foreground/50 leading-none select-none",children:[k.keybindings?.toggle??"Alt+Shift+D"," to toggle"]})})]}),v("div",{class:"flex-1 flex flex-col min-w-0 overflow-hidden bg-accent",children:[v("div",{class:"flex items-center justify-between gap-2 pr-2 min-h-12 shrink-0",children:[v("div",{class:"flex items-center gap-3 min-w-0",children:[a("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:L(()=>B(l=>!l),"onClick"),type:"button",children:a(tr,{class:h("size-3.5 transition-transform duration-300",!y&&"rotate-180"),size:14,src:he})}),C?.icon&&a("span",{class:"size-5 flex items-center justify-center [&_svg]:size-5 shrink-0 text-foreground opacity-80",dangerouslySetInnerHTML:{__html:C.icon}}),v("span",{class:"flex items-center gap-1 text-[0.7rem] font-bold uppercase tracking-[0.06em] text-foreground truncate",children:[a("span",{"aria-hidden":"true",class:"text-primary/50 shrink-0",children:"["}),C?.name??"DevTools",a("span",{"aria-hidden":"true",class:"text-primary/50 shrink-0",children:"]"})]})]}),v("div",{class:"flex items-center gap-1 shrink-0",children:[(n==="bottom"||n==="top")&&!f&&a("button",{"aria-label":N?"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:L(()=>w({viewMode:N?"default":"wide"}),"onClick"),title:N?"Container width":"Full width",type:"button",children:a(tr,{size:13,src:N?we:ve})}),a("button",{"aria-label":f?"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:L(()=>{if(f){const l=j.current,d=O.current;if(l&&d){const p=globalThis.window?.innerWidth??0,D=globalThis.window?.innerHeight??0,z=`inset(${d.top}px ${p-d.right}px ${D-d.bottom}px ${d.left}px)`;A.current!==null&&(clearTimeout(A.current),A.current=null),Y.current=!0,l.style.transition="clip-path 0.35s cubic-bezier(0.4, 0, 0.2, 1)",l.style.clipPath="inset(0px 0px 0px 0px)",requestAnimationFrame(()=>{l.style.clipPath=z,A.current=setTimeout(()=>{l.style.clipPath="",l.style.transition="",Y.current=!1,A.current=null,w({viewMode:"default"})},380)})}else w({viewMode:"default"})}else{if(j.current){const l=j.current.getBoundingClientRect();x.current=l,O.current=l}w({viewMode:"fullscreen"})}},"onClick"),title:f?"Exit fullscreen":"Fullscreen",type:"button",children:a(tr,{size:13,src:f?xe:fe})}),cr&&!f&&a("button",{"aria-label":"Open in Picture-in-Picture window",class:h("flex items-center justify-center size-8","cursor-pointer border-0 bg-transparent",k.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:L(()=>{u().then(()=>t()).catch(console.error)},"onClick"),title:"Open in floating window (PiP)",type:"button",children:a(tr,{size:13,src:ye})}),a("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:t,title:"Close (Esc)",type:"button",children:a(tr,{size:12,src:ke})})]})]}),a("div",{class:"devtools-content-scroll scrollbar-thin-border flex-1 overflow-auto min-h-0 bg-background",children:C?a(Te,{app:C},C.id):v("div",{class:"flex flex-col items-center justify-center h-full gap-7 p-8 select-none",children:[v("div",{class:"flex flex-col items-center gap-3",children:[a("div",{class:"size-14 border border-primary/25 bg-primary/5 flex items-center justify-center",children:a(tr,{class:"text-primary/45",size:26,src:me})}),v("div",{class:"text-center space-y-1",children:[a("p",{class:"text-[0.8rem] font-medium text-foreground/65",children:"No tool selected"}),a("p",{class:"text-[0.7rem] text-muted-foreground",children:"Choose a tool from the sidebar to get started"})]})]}),e.length>0&&v("div",{class:"w-full max-w-[220px]",children:[v("p",{class:"text-[0.58rem] font-bold uppercase tracking-[0.12em] text-muted-foreground/60 mb-1.5",children:[a("span",{class:"text-primary/50",children:"// "}),"available"]}),a("div",{class:"flex flex-col gap-0.5",children:e.map(l=>v("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:L(()=>i(l.id).catch(console.error),"onClick"),type:"button",children:[l.icon?a("span",{class:"size-3.5 shrink-0 flex items-center justify-center [&_svg]:size-3.5 text-muted-foreground",dangerouslySetInnerHTML:{__html:l.icon}}):a("span",{class:"size-3.5 text-[0.5rem] font-bold text-muted-foreground shrink-0 text-center",children:l.name.slice(0,2).toUpperCase()}),a("span",{class:"text-[0.75rem] font-medium text-muted-foreground",children:l.name})]},l.id))})]})]})})]})]})]})},"DevPanel"),Ee="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",Re="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 _e=Object.defineProperty,Ir=S((r,e)=>_e(r,"name",{value:e,configurable:!0}),"n$1");const Ne=Ir(()=>{const[r,e]=s(W(0),"errorCount"),[t,i]=s(W(!1),"isOverlayOpen");if(_(()=>{const c=Ir(()=>{const T=globalThis.__v_o_error_history,V=Array.isArray(T)?T.length:0;e(V);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"),g=setInterval(c,300);return c(),()=>clearInterval(g)},[]),r===0)return null;const o=Ir(()=>{const c=globalThis.__v_o__current;if(!c?.parentNode)return;const g=c.shadowRoot?.querySelector("#__v_o__root");g?.classList.contains("hidden")?(g.classList.remove("hidden"),i(!0)):typeof c.close=="function"&&(c.close(),i(!1))},"handleClick"),n=`${r} error${r!==1?"s":""} – click to ${t?"hide":"show"} overlay`;return v(Mr,{children:[a("div",{"aria-hidden":"true",class:"w-px h-5 bg-primary/20 shrink-0 mx-0.5"}),a("button",{"aria-label":n,class:h("relative flex justify-center items-center size-6","border-0","whitespace-nowrap no-underline p-0 m-0","cursor-pointer","bg-transparent text-destructive","transition-all duration-150","hover:bg-destructive/8","active:scale-[0.94]","group-data-[vertical]/panel:rotate-[-90deg]"),onClick:o,title:n,type:"button",children:v("div",{class:"relative size-6 select-none flex items-center justify-center",children:[a(tr,{size:16,src:Re}),a("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:r>9?"9+":r})]})})]})},"ViteOverlayButton");var Ve=Object.defineProperty,Cr=S((r,e)=>Ve(r,"name",{value:e,configurable:!0}),"n");const $e=Cr(()=>{const{toggleApp:r}=Pr();return a("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:Cr(()=>{r("dev-toolbar:more").catch(e=>{console.error("[dev-toolbar] Failed to toggle more app:",e)})},"onClick"),title:"More apps",type:"button",children:a("div",{class:"relative size-6 flex items-center justify-center select-none",children:a(tr,{size:16,src:Ee})})})},"MoreButton"),He=Cr(({customAppsToShow:r=3})=>{const{apps:e}=Pr(),t=e.filter(c=>c.builtIn),i=e.filter(c=>!c.builtIn),o=[...t,...i.slice(0,r)],n=i.slice(r);return a("div",{class:"flex items-center pointer-events-auto",id:"__v_dt__bar",children:v("div",{class:"flex flex-row items-center justify-start gap-1",id:"__v_dt__bar_container",children:[o.map(c=>a(be,{app:c},c.id)),n.length>0&&a($e,{}),a(Ne,{})]})})},"ToolbarBar"),Le="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQ4IDI5MSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gPGRlZnM+IDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgZ3JhZGllbnRVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giIHgxPSIwIiB5MT0iMCIgeDI9IjEiIHkyPSIxIj4gPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSJyZWQiPiA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJzdG9wLWNvbG9yIiB2YWx1ZXM9InJlZDtwdXJwbGU7Ymx1ZTtyZWQ7IiBkdXI9IjIwcyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIC8+IDwvc3RvcD4gPHN0b3Agb2Zmc2V0PSIwLjUiIHN0b3AtY29sb3I9InB1cnBsZSI+IDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9InN0b3AtY29sb3IiIHZhbHVlcz0icHVycGxlO2JsdWU7cmVkO3B1cnBsZTsiIGR1cj0iMjBzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4gPC9zdG9wPiA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9ImJsdWUiPiA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJzdG9wLWNvbG9yIiB2YWx1ZXM9ImJsdWU7cmVkO3B1cnBsZTtibHVlOyIgZHVyPSIyMHMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPiA8L3N0b3A+IDxhbmltYXRlVHJhbnNmb3JtIGF0dHJpYnV0ZU5hbWU9ImdyYWRpZW50VHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIGZyb209IjAgLjUgLjUiIHRvPSIzNjAgLjUgLjUiIGR1cj0iMTBzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4gPC9saW5lYXJHcmFkaWVudD4gPGxpbmVhckdyYWRpZW50IGlkPSJvdmVybGF5R3JhZGllbnRBIiB4MT0iNjIiIHkxPSI0Mi4yMjUzIiB4Mj0iNjIiIHkyPSIyOTAuMjI1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+IDxzdG9wIG9mZnNldD0iMC4zNCIgc3RvcC1vcGFjaXR5PSIwLjUiIC8+IDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0id2hpdGUiIHN0b3Atb3BhY2l0eT0iMCIgLz4gPC9saW5lYXJHcmFkaWVudD4gPGxpbmVhckdyYWRpZW50IGlkPSJvdmVybGF5R3JhZGllbnRCIiB4MT0iMTg2IiB5MT0iMCIgeDI9IjE4NiIgeTI9IjI0OCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPiA8c3RvcCBzdG9wLWNvbG9yPSJ3aGl0ZSIgc3RvcC1vcGFjaXR5PSIwIiAvPiA8c3RvcCBvZmZzZXQ9IjAuNjk1IiBzdG9wLW9wYWNpdHk9IjAuNSIgLz4gPC9saW5lYXJHcmFkaWVudD4gPC9kZWZzPiA8cGF0aCBkPSJNMCAxNjYuMjI1QzAgMjM0LjcwOSA1NS41MTY3IDI5MC4yMjUgMTI0IDI5MC4yMjVWNDIuMjI1M0M1NS41MTY3IDQyLjIyNTMgMCA5Ny43NDIgMCAxNjYuMjI1WiBNMjQ4IDEyNEMyNDggMTkyLjQ4MyAxOTIuNDgzIDI0OCAxMjQgMjQ4VjBDMTkyLjQ4MyAwIDI0OCA1NS41MTY3IDI0OCAxMjRaIiBmaWxsPSJ1cmwoI2EpIiAvPiA8cGF0aCBkPSJNMCAxNjYuMjI1QzAgMjM0LjcwOSA1NS41MTY3IDI5MC4yMjUgMTI0IDI5MC4yMjVWNDIuMjI1M0M1NS41MTY3IDQyLjIyNTMgMCA5Ny43NDIgMCAxNjYuMjI1WiIgZmlsbD0idXJsKCNvdmVybGF5R3JhZGllbnRBKSIgLz4gPHBhdGggZD0iTTI0OCAxMjRDMjQ4IDE5Mi40ODMgMTkyLjQ4MyAyNDggMTI0IDI0OFYwQzE5Mi40ODMgMCAyNDggNTUuNTE2NyAyNDggMTI0WiIgZmlsbD0idXJsKCNvdmVybGF5R3JhZGllbnRCKSIgLz4gPGNpcmNsZSBjeD0iMTI0IiBjeT0iMTQ3IiByPSI1MCIgZmlsbD0id2hpdGUiIC8+IDwvc3ZnPg==",We="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 Be=Object.defineProperty,hr=S((r,e)=>Be(r,"name",{value:e,configurable:!0}),"o");const Ze=hr((r,e)=>{switch(e){case"top":return{left:`${r.left+r.width/2}px`,top:`${r.bottom+10}px`,transform:"translateX(-50%)"};case"left":return{left:`${r.right+10}px`,top:`${r.top+r.height/2}px`,transform:"translateY(-50%)"};case"right":return{right:`${globalThis.window?globalThis.window.innerWidth-r.left+10:0}px`,top:`${r.top+r.height/2}px`,transform:"translateY(-50%)"};default:return{bottom:`${globalThis.window?globalThis.window.innerHeight-r.top+10:0}px`,left:`${r.left+r.width/2}px`,transform:"translateX(-50%)"}}},"getTooltipStyle"),Ge=hr(({position:r})=>{const{hoveredApp:e,hoveredAppRect:t,pinTooltip:i,setHoveredApp:o}=Tr(),n=s(b(null),"overlayRef"),c=s(b(ur()),"helpersRef"),[g,T]=s(W(!1),"isRendered"),[V,y]=s(W(!1),"isVisible"),B=!!(e?.tooltip&&t);if(_(()=>{if(B){T(!0);const R=setTimeout(()=>y(!0),16);return()=>clearTimeout(R)}y(!1);const j=setTimeout(()=>T(!1),200);return()=>clearTimeout(j)},[B]),!g||!e?.tooltip||!t)return null;const P=e.tooltip,k=Ze(t,r),w=r==="left"||r==="right",$=hr(()=>{const j=n.current?.getBoundingClientRect();j&&i(e,j.left,j.top),o(null)},"handlePin");return v("div",{ref:n,"aria-label":`${e.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)]",V?"opacity-100 translate-y-0 scale-100":h("opacity-0 scale-[0.97]",r==="bottom"&&"translate-y-1",r==="top"&&"-translate-y-1",w&&"translate-x-[-2px]")),onMouseEnter:hr(()=>o(e,t),"onMouseEnter"),onMouseLeave:hr(()=>o(null),"onMouseLeave"),role:"tooltip",style:k,children:[v("div",{class:"flex items-center justify-between gap-2 px-3 py-2 border-b border-border/60 bg-foreground/3",children:[v("div",{class:"flex items-center gap-2 min-w-0",children:[a("span",{class:"size-1.5 rounded-full bg-primary shrink-0","aria-hidden":"true"}),a("span",{class:"text-[0.6rem] font-bold uppercase tracking-[0.1em] text-muted-foreground truncate",children:e.name})]}),a("button",{"aria-label":`Pin ${e.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:$,title:"Pin (keep visible)",type:"button",children:a(tr,{size:11,src:We})})]}),a("div",{class:"p-3",children:a(P,{helpers:c.current})})]})},"AppTooltipOverlay");var Ye=Object.defineProperty,Dr=S((r,e)=>Ye(r,"name",{value:e,configurable:!0}),"s$1");const Oe=Dr(r=>{switch(r){case"top":return{left:"50%",top:"0",transform:"translateX(-50%) translateY(24px)"};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%)"};default:return{left:"50%",top:"0",transform:"translateX(-50%) translateY(calc(-100% - 24px))"}}},"getHintStyle"),Xe=Dr(({position:r})=>{const e="absolute w-2.5 h-2.5 bg-card border-border";switch(r){case"top":return a("div",{"aria-hidden":"true",class:h(e,"top-[-5px] left-1/2 -translate-x-1/2 rotate-45 border-t border-l")});case"left":return a("div",{"aria-hidden":"true",class:h(e,"left-[-5px] top-1/2 -translate-y-1/2 rotate-45 border-b border-l")});case"right":return a("div",{"aria-hidden":"true",class:h(e,"right-[-5px] top-1/2 -translate-y-1/2 rotate-45 border-t border-r")});default:return a("div",{"aria-hidden":"true",class:h(e,"bottom-[-5px] left-1/2 -translate-x-1/2 rotate-45 border-b border-r")})}},"Arrow"),Je=[{icon:"⊙",text:"Click logo to open panel"},{icon:"⠿",text:"Drag pill to reposition"},{icon:"⌨",text:"Alt+Shift+D to toggle"}],Ue=Dr(({onDismiss:r,position:e})=>{const[t,i]=s(W(!1),"visible"),o=s(b(null),"dismissTimeoutRef");_(()=>{const c=setTimeout(()=>i(!0),600);return()=>clearTimeout(c)},[]),_(()=>()=>{o.current!==null&&(clearTimeout(o.current),o.current=null)},[]);const n=Dr(()=>{i(!1),o.current=setTimeout(r,180)},"handleDismiss");return v("div",{"aria-hidden":!t,"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",t?"opacity-100 scale-100":"opacity-0 scale-95 pointer-events-none"),style:Oe(e),children:[a(Xe,{position:e}),v("p",{class:"flex items-center gap-1.5 mb-2.5",children:[a("span",{"aria-hidden":"true",class:"text-primary text-[0.6rem]",children:"▶"}),a("span",{class:"text-[0.6rem] font-bold uppercase tracking-[0.12em] text-foreground",children:"Quick start"})]}),a("ul",{class:"space-y-1.5 mb-3 list-none p-0 m-0",children:Je.map(({icon:c,text:g})=>v("li",{class:"flex items-center gap-2 text-[0.7rem] text-muted-foreground",children:[a("span",{"aria-hidden":"true",class:"text-primary shrink-0 w-3 text-center leading-none",children:c}),g]},g))}),a("button",{class:h("w-full h-6 text-[0.6rem] font-bold uppercase tracking-[0.1em]","border border-primary/30 bg-primary/6","text-primary cursor-pointer","hover:bg-primary/12 hover:border-primary/50","transition-all duration-150 active:scale-[0.98]"),onClick:n,tabIndex:t?void 0:-1,type:"button",children:"Got it"})]})},"FirstVisitHint"),Qe="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 qe=Object.defineProperty,pr=S((r,e)=>qe(r,"name",{value:e,configurable:!0}),"s");const Ke=pr(({onMove:r,onUnpin:e,pinned:t})=>{const i=s(b(null),"cardRef"),o=s(b(null),"headerRef"),n=s(b({x:t.initialX,y:t.initialY}),"posRef"),c=s(b(null),"dragRef"),g=s(er(()=>ur(),[]),"helpers"),T=s(b(g),"helpersRef"),V=s(b(r),"onMoveRef"),y=s(b(t.id),"pinnedIdRef");V.current=r,y.current=t.id,_(()=>{const k="transform 110ms cubic-bezier(0.25,0.46,0.45,0.94)",w=pr(j=>{if(!c.current||!i.current)return;const R=globalThis.window?.innerWidth??9999,Z=globalThis.window?.innerHeight??9999,{cardH:x,cardW:O}=c.current,J=Math.min(80,O),Y=Math.min(36,x);let A=c.current.origX+(j.clientX-c.current.startX),f=c.current.origY+(j.clientY-c.current.startY);A=Math.max(J-O,Math.min(R-J,A)),f=Math.max(Y-x,Math.min(Z-Y,f));const N=[0,R-O,J-O,R-J],cr=[0,Z-x,Y-x,Z-Y];let U=A,Q=f;for(const u of N)if(Math.abs(A-u)<28){U=u;break}for(const u of cr)if(Math.abs(f-u)<28){Q=u;break}i.current.style.transition=U!==A||Q!==f?k:"",i.current.style.transform=`translate(${U}px, ${Q}px)`,n.current={x:U,y:Q}},"handleMove"),$=pr(()=>{c.current&&(c.current=null,i.current&&(i.current.style.transition=""),o.current&&(o.current.style.cursor=""),V.current(y.current,n.current.x,n.current.y))},"handleUp");return document.addEventListener("mousemove",w),document.addEventListener("mouseup",$),()=>{document.removeEventListener("mousemove",w),document.removeEventListener("mouseup",$)}},[]);const B=t.app.tooltip;if(!B)return null;const P=pr(k=>{k.button===0&&(c.current={cardH:i.current?.offsetHeight??200,cardW:i.current?.offsetWidth??300,origX:n.current.x,origY:n.current.y,startX:k.clientX,startY:k.clientY},o.current&&(o.current.style.cursor="grabbing"),k.preventDefault())},"handleDragStart");return v("div",{ref:i,"aria-label":`${t.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"),style:{left:0,top:0,transform:`translate(${n.current.x}px, ${n.current.y}px)`},children:[v("div",{ref:o,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,children:[v("div",{class:"flex items-center gap-2 min-w-0",children:[a("span",{"aria-hidden":"true",class:"size-1.5 rounded-full bg-primary shrink-0"}),a("span",{class:"text-[0.6rem] font-bold uppercase tracking-[0.1em] text-primary/70 truncate",children:t.app.name})]}),a("button",{"aria-label":`Unpin ${t.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"),onMouseDown:pr(k=>k.stopPropagation(),"onMouseDown"),onClick:pr(()=>e(t.id),"onClick"),title:"Unpin",type:"button",children:a(tr,{size:11,src:Qe})})]}),a("div",{class:"p-3",children:a(B,{helpers:T.current})})]})},"PinnedTooltipCard");var rt=Object.defineProperty,lr=S((r,e)=>rt(r,"name",{value:e,configurable:!0}),"p");const Er="__v_dt__pinned_tooltips",et=lr((r,e,t,i,o)=>{const n=e*i/100,c=t*o/100,g=i/4;switch(r){case"bottom":return n<g?"bottom-left":n>i-g?"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 n<g?"top-left":n>i-g?"top-right":"top-center";default:return"bottom-center"}},"computePlacement"),tt=lr(({activeAppId:r,apps:e,customAppsToShow:t=3,onClearNotification:i,onRegisterApp:o,onSetNotification:n,onToggleApp:c,onUnregisterApp:g})=>{const T=s(b(null),"anchorRef"),V=s(b(null),"panelRef"),y=s(b(null),"leaveTimerRef"),{resolvedTheme:B}=Nr(),{state:P,updateState:k}=zr(),{panelVisible:w,togglePanelVisible:$,closePanel:j}=le(),{anchorStyle:R,bringUp:Z,isDragging:x,isHidden:O,isVertical:J,onPointerDown:Y,panelStyle:A}=ue(V),[f,N]=s(W(null),"hoveredApp"),[cr,U]=s(W(null),"hoveredAppRect"),Q=s(b(new Map),"pinPositionsRef"),u=sr(m=>{try{const E=m.map(M=>{const K=Q.current.get(M.id);return{appId:M.app.id,x:K?.x??M.initialX,y:K?.y??M.initialY}});localStorage.setItem(Er,JSON.stringify(E))}catch{}},[]),[C,F]=s(W([]),"pinnedTooltips"),l=s(b([]),"pinnedTooltipsRef");l.current=C;const d=sr((m,E,M)=>{const K=`${m.id}-${Date.now()}`;F(dr=>{const mr=[...dr,{app:m,id:K,initialX:E,initialY:M}];return u(mr),mr})},[u]),p=sr(m=>{F(E=>{const M=E.filter(K=>K.id!==m);return Q.current.delete(m),u(M),M})},[u]),D=sr((m,E,M)=>{Q.current.set(m,{x:E,y:M}),u(l.current)},[u]),z=s(b(null),"storedPinsRef"),G=s(b(new Set),"restoredAppIdsRef");_(()=>{if(e.length===0)return;if(z.current===null)try{const M=localStorage.getItem(Er);z.current=M?JSON.parse(M):[]}catch{z.current=[]}const m=z.current;if(m.length===0)return;const E=[];for(const M of m){if(G.current.has(M.appId))continue;const K=e.find(dr=>dr.id===M.appId&&dr.tooltip);K&&(G.current.add(M.appId),E.push({app:K,id:`${K.id}-restored-${Date.now()}-${Math.random().toString(36).slice(2)}`,initialX:M.x,initialY:M.y}))}E.length>0&&F(M=>[...M,...E])},[e]),_(()=>()=>{y.current!==null&&clearTimeout(y.current)},[]);const q=sr((m,E)=>{y.current!==null&&(clearTimeout(y.current),y.current=null),m?(N(m),U(E??null)):y.current=setTimeout(()=>{N(null),U(null),y.current=null},180)},[]),I=s(b(w),"panelVisibleRef");I.current=w;const ir=s(b(r),"activeAppIdRef");ir.current=r;const rr=s(b(c),"onToggleAppRef");rr.current=c;const ar=s(er(()=>{const m=globalThis.window?.innerWidth??1920,E=globalThis.window?.innerHeight??1080;return et(P.position,P.left,P.top,m,E)},[P.left,P.position,P.top]),"placement"),nr=sr(async m=>{const E=I.current,M=ir.current;if(m===M&&E){await rr.current(m),k({open:!1,viewMode:"default"});return}m!==M&&await rr.current(m),E||k({open:!0})},[k]),X={activeAppId:r,apps:e,clearNotification:i,hoveredApp:f,hoveredAppRect:cr,isDragging:x,isVisible:w,pinTooltip:d,pinnedTooltips:C,placement:ar,registerApp:o,setDragging:lr(()=>{},"setDragging"),setHoveredApp:q,setNotification:n,setPlacement:lr(()=>{},"setPlacement"),setVisible:lr(m=>k({open:m}),"setVisible"),toggleApp:nr,unpinTooltip:p,unregisterApp:g};return!P.preferShowFloatingPanel&&!w?null:a(Vr.Provider,{value:X,children:v("div",{class:h(B==="dark"&&"dark"),style:{display:"contents"},children:[v("div",{ref:T,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":x?"":void 0,"data-placement":ar,id:"__v_dt__root",onMouseMove:Z,style:R,children:[v("div",{ref:V,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",x?"cursor-grabbing":"cursor-grab","bg-background border-0",J?"shadow-pill-vertical!":"shadow-pill",O?"max-w-12!":"","transition-pill"),"data-vertical":J||void 0,onPointerDown:lr(m=>{P.isFirstVisit&&k({isFirstVisit:!1}),Y(m)},"onPointerDown"),style:A,children:[a("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]",w?"opacity-100":"opacity-60"),onClick:lr(m=>{m.stopPropagation(),P.isFirstVisit&&k({isFirstVisit:!1}),$()},"onClick"),title:"Toggle devtools panel",type:"button",children:a("img",{alt:"Visulima",class:"size-6",src:Le})}),a("div",{"aria-hidden":"true",class:h("w-px h-5 bg-primary/20 shrink-0",O&&"hidden")}),a("div",{class:h("px-0.5",O&&"hidden"),children:a(He,{customAppsToShow:t})})]}),P.isFirstVisit&&a(Ue,{onDismiss:lr(()=>k({isFirstVisit:!1}),"onDismiss"),position:P.position})]}),a(je,{activeAppId:r,apps:e,onClose:j,onToggleApp:c,panelVisible:w,position:P.position}),a(Ge,{position:P.position}),C.map(m=>a(Ke,{onMove:D,onUnpin:p,pinned:m},m.id))]})})},"ToolbarContainer");var ot=Object.defineProperty,$r=S((r,e)=>ot(r,"name",{value:e,configurable:!0}),"r");const at=$r((r,e)=>{const t=Rr(),i=Gr();if(!i)throw new Error("Global hook not initialized");return{clearNotification(o){r.clearNotification(o)},async closeApp(){const o=r.getActiveApp();o&&await r.toggleApp(o.id)},getActiveApp(){return r.getActiveApp()?.id||null},getApps(){return r.getApps()},getSettings(){return _r()},hide(){e.hide()},hook:i,notify(o,n){r.setNotification(o,!0,n)},async openApp(o){await r.toggleApp(o)},registerApp(o){r.registerApp(o)},rpc:new Proxy({},{get(o,n){return(...c)=>t.callServer(n,...c)}}),show(){e.show()},toggle(){e.toggle()},unregisterApp(o){r.unregisterApp(o)},updateSettings(o){Zr(o)},version:"0.0.0"}},"createGlobalAPI"),it=$r(r=>{globalThis.window!==void 0&&(globalThis.__VISULIMA_DEVTOOLS__=r)},"setupGlobalAPI");var nt=Object.defineProperty,H=S((r,e)=>nt(r,"name",{value:e,configurable:!0}),"i");class Sr extends HTMLElement{static{S(this,"DevToolbar")}static{H(this,"DevToolbar")}appManager;hasBeenInitialized=!1;customAppsToShow=3;renderRoot=null;constructor(){super(),this.attachShadow({mode:"open"}),this.appManager=new re}connectedCallback(){this.hasBeenInitialized&&this.shadowRoot&&!this.renderRoot&&this.render()}disconnectedCallback(){this.renderRoot&&(Ar(null,this.renderRoot),this.renderRoot=null)}init(){if(this.hasBeenInitialized)return;this.hasBeenInitialized=!0,Sr.injectFont();const e=Yr(n=>{this.appManager.registerApp(n),this.render()},(n,c)=>{Or().addEvent(n,c)}),t=at({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"),setNotification:H((n,c,g)=>{this.appManager.setNotification(n,c,g),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")});it(t),e.emit("devtools:init");const i=_r(),o=this.appManager.getAllApps().find(n=>n.defaultOpen);o&&!this.appManager.getActiveApp()&&this.appManager.openApp(o.id).catch(n=>{console.error(`[dev-toolbar] Failed to auto-open defaultOpen app ${o.id}:`,n)}),this.render(),this.setupEventListeners(),i.defaultVisible&&this.setToolbarVisible(!0)}isHidden(){return this.shadowRoot.querySelector("#__v_dt__root")?.hasAttribute("data-hidden")??!0}setToolbarVisible(e){const t=this.shadowRoot.querySelector("#__v_dt__root");t&&(e?t.removeAttribute("data-hidden"):t.setAttribute("data-hidden","")),this.render()}registerApp(e,t=!1){this.appManager.registerApp(e,t),this.render()}getAppManager(){return this.appManager}static injectFont(){const e="__v_dt__font";if(document.getElementById(e))return;const t=document.createElement("link");t.rel="preconnect",t.href="https://fonts.googleapis.com",document.head.append(t);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=e,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 e=this.appManager.getAllApps(),t=this.shadowRoot;gr&&(t.adoptedStyleSheets=[gr]);let i=t.querySelector("style");i||(i=document.createElement("style"),i.textContent=`
|
|
4
|
+
:host {
|
|
5
|
+
all: initial;
|
|
6
|
+
/* Cover the full viewport so the host establishes a stacking context
|
|
7
|
+
above vite-overlay (#__v_o__root uses z-[2147483647]). display:contents
|
|
8
|
+
would suppress z-index entirely, so we use position:fixed instead.
|
|
9
|
+
pointer-events:none passes all clicks through to the page;
|
|
10
|
+
interactive toolbar children restore pointer-events:auto. */
|
|
11
|
+
position: fixed;
|
|
12
|
+
inset: 0;
|
|
13
|
+
z-index: 2147483647;
|
|
14
|
+
pointer-events: none;
|
|
15
|
+
overflow: visible;
|
|
16
|
+
}
|
|
17
|
+
@media print {
|
|
18
|
+
:host {
|
|
19
|
+
display: none;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
`,t.appendChild(i)),this.renderRoot||(this.renderRoot=document.createElement("div"),t.appendChild(this.renderRoot));const o=this.appManager.getActiveApp()?.id||null;Ar(a(tt,{activeAppId:o,apps:e,customAppsToShow:this.customAppsToShow,onClearNotification:H(n=>{this.appManager.clearNotification(n),this.render()},"onClearNotification"),onRegisterApp:H(n=>{this.render()},"onRegisterApp"),onSetNotification:H((n,c,g)=>{this.appManager.setNotification(n,c,g),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",e=>{if(e.key!=="Escape"||this.isHidden())return;const t=this.appManager.getActiveApp();t?this.appManager.toggleApp(t.id).then(()=>{this.render()}):this.setToolbarVisible(!1)})}}if(globalThis.window!==void 0&&(customElements.get("dev-toolbar")||customElements.define("dev-toolbar",Sr),!customElements.get("dev-toolbar-app-canvas"))){class r extends HTMLElement{static{S(this,"p")}static{H(this,"DevToolbarAppCanvas")}constructor(){super(),this.attachShadow({mode:"open"})}}customElements.define("dev-toolbar-app-canvas",r)}export{Sr as DevToolbar,gr as sharedToolbarStylesheet};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ToolbarSettings } from "../types/toolbar.d.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Load settings from localStorage
|
|
4
|
+
* @returns Toolbar settings
|
|
5
|
+
*/
|
|
6
|
+
export declare const loadSettings: () => ToolbarSettings;
|
|
7
|
+
/**
|
|
8
|
+
* Save settings to localStorage
|
|
9
|
+
* @param settings Toolbar settings to save
|
|
10
|
+
*/
|
|
11
|
+
export declare const saveSettings: (settings: ToolbarSettings) => void;
|
|
12
|
+
/**
|
|
13
|
+
* Update settings (merge with existing)
|
|
14
|
+
* @param updates Partial settings to update
|
|
15
|
+
* @returns Updated settings
|
|
16
|
+
*/
|
|
17
|
+
export declare const updateSettings: (updates: Partial<ToolbarSettings>) => ToolbarSettings;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const sharedToolbarStylesheet: CSSStyleSheet | undefined;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clamp a value between min and max
|
|
3
|
+
*/
|
|
4
|
+
export declare const clamp: (value: number, min: number, max: number) => number;
|
|
5
|
+
/**
|
|
6
|
+
* Check if browser is Safari
|
|
7
|
+
*/
|
|
8
|
+
export declare const checkIsSafari: () => boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Convert pixel value to number (handles "10px" -> 10)
|
|
11
|
+
*/
|
|
12
|
+
export declare const pixelToNumber: (value: string | number) => number;
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import type { ComponentType } from "preact";
|
|
2
|
+
import type { NotificationLevel } from "./toolbar.d.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Server helpers available to apps
|
|
5
|
+
*/
|
|
6
|
+
export interface ServerHelpers {
|
|
7
|
+
/**
|
|
8
|
+
* RPC client for calling server functions
|
|
9
|
+
*/
|
|
10
|
+
rpc: {
|
|
11
|
+
[K in keyof ServerFunctions]: ServerFunctions[K];
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Props passed to app tooltip (hover mini-canvas) components.
|
|
16
|
+
* Keep compact — tooltip components should be lightweight.
|
|
17
|
+
*/
|
|
18
|
+
export interface AppTooltipProps {
|
|
19
|
+
/**
|
|
20
|
+
* Server helpers (RPC, etc.)
|
|
21
|
+
*/
|
|
22
|
+
helpers: ServerHelpers;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Event target for app communication
|
|
26
|
+
*/
|
|
27
|
+
export interface ToolbarAppEventTarget extends EventTarget {
|
|
28
|
+
/**
|
|
29
|
+
* Dispatch a custom event
|
|
30
|
+
*/
|
|
31
|
+
dispatchEvent: (event: Event) => boolean;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* App view configuration
|
|
35
|
+
*/
|
|
36
|
+
export type AppView = {
|
|
37
|
+
/**
|
|
38
|
+
* Render app inline in shadow DOM (default)
|
|
39
|
+
*/
|
|
40
|
+
type: "inline";
|
|
41
|
+
} | {
|
|
42
|
+
/**
|
|
43
|
+
* URL to load in iframe
|
|
44
|
+
*/
|
|
45
|
+
src: string;
|
|
46
|
+
/**
|
|
47
|
+
* Render app in iframe for isolation
|
|
48
|
+
*/
|
|
49
|
+
type: "iframe";
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Props passed to Preact component apps
|
|
53
|
+
*/
|
|
54
|
+
export interface AppComponentProps {
|
|
55
|
+
/**
|
|
56
|
+
* Event target for app communication
|
|
57
|
+
*/
|
|
58
|
+
eventTarget: ToolbarAppEventTarget;
|
|
59
|
+
/**
|
|
60
|
+
* Server helpers (RPC, etc.)
|
|
61
|
+
*/
|
|
62
|
+
helpers: ServerHelpers;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Dev toolbar app definition
|
|
66
|
+
*/
|
|
67
|
+
export interface DevToolbarApp {
|
|
68
|
+
/**
|
|
69
|
+
* Called before app is toggled off
|
|
70
|
+
* Return false to prevent closing
|
|
71
|
+
* @param canvas Shadow root of the app
|
|
72
|
+
* @returns Whether to allow closing
|
|
73
|
+
*/
|
|
74
|
+
beforeTogglingOff?: (canvas: ShadowRoot) => boolean | Promise<boolean>;
|
|
75
|
+
/**
|
|
76
|
+
* Called when the app is unregistered / removed from the toolbar.
|
|
77
|
+
* Use this for final cleanup (event listeners, timers, subscriptions).
|
|
78
|
+
* @param canvas Shadow root of the app
|
|
79
|
+
*/
|
|
80
|
+
destroy?: (canvas: ShadowRoot) => Promise<void> | void;
|
|
81
|
+
/**
|
|
82
|
+
* When true, this app is automatically activated when the toolbar opens for
|
|
83
|
+
* the first time (or when no other app has been activated yet).
|
|
84
|
+
* Only the first registered app with defaultOpen: true is used.
|
|
85
|
+
* @default false
|
|
86
|
+
*/
|
|
87
|
+
defaultOpen?: boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Preact component for rendering (alternative to init)
|
|
90
|
+
* If provided, this will be used instead of init
|
|
91
|
+
*/
|
|
92
|
+
component?: ComponentType<AppComponentProps>;
|
|
93
|
+
/**
|
|
94
|
+
* Optional hover tooltip component — renders a compact live preview when the
|
|
95
|
+
* user hovers over this app's button in the toolbar pill.
|
|
96
|
+
* The component should be small (≤280px wide) and self-contained.
|
|
97
|
+
* If omitted, hovering shows the native title tooltip only.
|
|
98
|
+
*/
|
|
99
|
+
tooltip?: ComponentType<AppTooltipProps>;
|
|
100
|
+
/**
|
|
101
|
+
* Icon HTML string (SVG)
|
|
102
|
+
*/
|
|
103
|
+
icon: string;
|
|
104
|
+
/**
|
|
105
|
+
* Unique identifier for the app
|
|
106
|
+
*/
|
|
107
|
+
id: string;
|
|
108
|
+
/**
|
|
109
|
+
* Initialize the app when opened (vanilla JS/CSS/HTML)
|
|
110
|
+
* @param canvas Shadow root to render into
|
|
111
|
+
* @param eventTarget Event target for app communication
|
|
112
|
+
* @param helpers Server helpers (RPC, etc.)
|
|
113
|
+
*/
|
|
114
|
+
init?: (canvas: ShadowRoot, eventTarget: ToolbarAppEventTarget, helpers: ServerHelpers) => void | Promise<void>;
|
|
115
|
+
/**
|
|
116
|
+
* Display name of the app
|
|
117
|
+
*/
|
|
118
|
+
name: string;
|
|
119
|
+
/**
|
|
120
|
+
* App rendering mode
|
|
121
|
+
*/
|
|
122
|
+
view?: AppView;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Internal app state (extends DevToolbarApp)
|
|
126
|
+
*/
|
|
127
|
+
export interface DevToolbarAppState extends DevToolbarApp {
|
|
128
|
+
/**
|
|
129
|
+
* Whether the app is currently active/open
|
|
130
|
+
*/
|
|
131
|
+
active: boolean;
|
|
132
|
+
/**
|
|
133
|
+
* Whether this is a built-in app
|
|
134
|
+
*/
|
|
135
|
+
builtIn: boolean;
|
|
136
|
+
/**
|
|
137
|
+
* Event target for this app
|
|
138
|
+
*/
|
|
139
|
+
eventTarget: ToolbarAppEventTarget;
|
|
140
|
+
/**
|
|
141
|
+
* Notification state
|
|
142
|
+
*/
|
|
143
|
+
notification: {
|
|
144
|
+
/**
|
|
145
|
+
* Notification level
|
|
146
|
+
*/
|
|
147
|
+
level?: NotificationLevel;
|
|
148
|
+
/**
|
|
149
|
+
* Whether notification is active
|
|
150
|
+
*/
|
|
151
|
+
state: boolean;
|
|
152
|
+
};
|
|
153
|
+
/**
|
|
154
|
+
* App initialization status
|
|
155
|
+
*/
|
|
156
|
+
status: "ready" | "loading" | "pending" | "error";
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Placeholder for ServerFunctions (defined in rpc.ts)
|
|
160
|
+
*/
|
|
161
|
+
export interface ServerFunctions {
|
|
162
|
+
[key: string]: (...args: any[]) => Promise<any>;
|
|
163
|
+
}
|