nuxt-devtools-observatory 0.1.15 → 0.1.16

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/LICENSE CHANGED
@@ -1,9 +1,21 @@
1
- MIT License
1
+ The MIT License (MIT)
2
2
 
3
- Copyright (c) 2025 Victor Neves
3
+ Copyright (c) 2026, Victor Neves
4
4
 
5
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
6
11
 
7
- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
8
14
 
9
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
package/README.md CHANGED
@@ -305,4 +305,6 @@ playground/
305
305
 
306
306
  ## License
307
307
 
308
- MIT
308
+ [MIT](https://opensource.org/licenses/MIT)
309
+
310
+ Copyright (c) 2026, Victor Neves
@@ -14,4 +14,4 @@
14
14
  * @vue/runtime-dom v3.5.30
15
15
  * (c) 2018-present Yuxi (Evan) You and Vue contributors
16
16
  * @license MIT
17
- **/let En;const vo=typeof window<"u"&&window.trustedTypes;if(vo)try{En=vo.createPolicy("vue",{createHTML:e=>e})}catch{}const Jl=En?e=>En.createHTML(e):e=>e,Qr="http://www.w3.org/2000/svg",Xr="http://www.w3.org/1998/Math/MathML",ct=typeof document<"u"?document:null,mo=ct&&ct.createElement("template"),Zr={insert:(e,t,s)=>{t.insertBefore(e,s||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,s,n)=>{const o=t==="svg"?ct.createElementNS(Qr,e):t==="mathml"?ct.createElementNS(Xr,e):s?ct.createElement(e,{is:s}):ct.createElement(e);return e==="select"&&n&&n.multiple!=null&&o.setAttribute("multiple",n.multiple),o},createText:e=>ct.createTextNode(e),createComment:e=>ct.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>ct.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,s,n,o,l){const r=s?s.previousSibling:t.lastChild;if(o&&(o===l||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),s),!(o===l||!(o=o.nextSibling)););else{mo.innerHTML=Jl(n==="svg"?`<svg>${e}</svg>`:n==="mathml"?`<math>${e}</math>`:e);const a=mo.content;if(n==="svg"||n==="mathml"){const c=a.firstChild;for(;c.firstChild;)a.appendChild(c.firstChild);a.removeChild(c)}t.insertBefore(a,s)}return[r?r.nextSibling:t.firstChild,s?s.previousSibling:t.lastChild]}},_t="transition",ns="animation",xs=Symbol("_vtc"),Gl={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},ea=$e({},ml,Gl),ta=e=>(e.displayName="Transition",e.props=ea,e),On=ta((e,{slots:t})=>Se(Zi,sa(e),t)),Tt=(e,t=[])=>{Z(e)?e.forEach(s=>s(...t)):e&&e(...t)},go=e=>e?Z(e)?e.some(t=>t.length>1):e.length>1:!1;function sa(e){const t={};for(const m in e)m in Gl||(t[m]=e[m]);if(e.css===!1)return t;const{name:s="v",type:n,duration:o,enterFromClass:l=`${s}-enter-from`,enterActiveClass:r=`${s}-enter-active`,enterToClass:a=`${s}-enter-to`,appearFromClass:c=l,appearActiveClass:v=r,appearToClass:d=a,leaveFromClass:g=`${s}-leave-from`,leaveActiveClass:M=`${s}-leave-active`,leaveToClass:y=`${s}-leave-to`}=e,x=na(o),N=x&&x[0],J=x&&x[1],{onBeforeEnter:Y,onEnter:B,onEnterCancelled:I,onLeave:E,onLeaveCancelled:R,onBeforeAppear:ue=Y,onAppear:H=B,onAppearCancelled:O=I}=t,C=(m,_,G,le)=>{m._enterCancelled=le,Mt(m,_?d:a),Mt(m,_?v:r),G&&G()},oe=(m,_)=>{m._isLeaving=!1,Mt(m,g),Mt(m,y),Mt(m,M),_&&_()},w=m=>(_,G)=>{const le=m?H:B,ce=()=>C(_,m,G);Tt(le,[_,ce]),_o(()=>{Mt(_,m?c:l),at(_,m?d:a),go(le)||bo(_,n,N,ce)})};return $e(t,{onBeforeEnter(m){Tt(Y,[m]),at(m,l),at(m,r)},onBeforeAppear(m){Tt(ue,[m]),at(m,c),at(m,v)},onEnter:w(!1),onAppear:w(!0),onLeave(m,_){m._isLeaving=!0;const G=()=>oe(m,_);at(m,g),m._enterCancelled?(at(m,M),wo(m)):(wo(m),at(m,M)),_o(()=>{m._isLeaving&&(Mt(m,g),at(m,y),go(E)||bo(m,n,J,G))}),Tt(E,[m,G])},onEnterCancelled(m){C(m,!1,void 0,!0),Tt(I,[m])},onAppearCancelled(m){C(m,!0,void 0,!0),Tt(O,[m])},onLeaveCancelled(m){oe(m),Tt(R,[m])}})}function na(e){if(e==null)return null;if(he(e))return[vn(e.enter),vn(e.leave)];{const t=vn(e);return[t,t]}}function vn(e){return li(e)}function at(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.add(s)),(e[xs]||(e[xs]=new Set)).add(t)}function Mt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.remove(n));const s=e[xs];s&&(s.delete(t),s.size||(e[xs]=void 0))}function _o(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let oa=0;function bo(e,t,s,n){const o=e._endId=++oa,l=()=>{o===e._endId&&n()};if(s!=null)return setTimeout(l,s);const{type:r,timeout:a,propCount:c}=la(e,t);if(!r)return n();const v=r+"end";let d=0;const g=()=>{e.removeEventListener(v,M),l()},M=y=>{y.target===e&&++d>=c&&g()};setTimeout(()=>{d<c&&g()},a+1),e.addEventListener(v,M)}function la(e,t){const s=window.getComputedStyle(e),n=x=>(s[x]||"").split(", "),o=n(`${_t}Delay`),l=n(`${_t}Duration`),r=yo(o,l),a=n(`${ns}Delay`),c=n(`${ns}Duration`),v=yo(a,c);let d=null,g=0,M=0;t===_t?r>0&&(d=_t,g=r,M=l.length):t===ns?v>0&&(d=ns,g=v,M=c.length):(g=Math.max(r,v),d=g>0?r>v?_t:ns:null,M=d?d===_t?l.length:c.length:0);const y=d===_t&&/\b(?:transform|all)(?:,|$)/.test(n(`${_t}Property`).toString());return{type:d,timeout:g,propCount:M,hasTransform:y}}function yo(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max(...t.map((s,n)=>xo(s)+xo(e[n])))}function xo(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function wo(e){return(e?e.ownerDocument:document).body.offsetHeight}function ia(e,t,s){const n=e[xs];n&&(t=(t?[t,...n]:[...n]).join(" ")),t==null?e.removeAttribute("class"):s?e.setAttribute("class",t):e.className=t}const $o=Symbol("_vod"),ra=Symbol("_vsh"),aa=Symbol(""),ca=/(?:^|;)\s*display\s*:/;function ua(e,t,s){const n=e.style,o=ye(s);let l=!1;if(s&&!o){if(t)if(ye(t))for(const r of t.split(";")){const a=r.slice(0,r.indexOf(":")).trim();s[a]==null&&Ls(n,a,"")}else for(const r in t)s[r]==null&&Ls(n,r,"");for(const r in s)r==="display"&&(l=!0),Ls(n,r,s[r])}else if(o){if(t!==s){const r=n[aa];r&&(s+=";"+r),n.cssText=s,l=ca.test(s)}}else t&&e.removeAttribute("style");$o in e&&(e[$o]=l?n.display:"",e[ra]&&(n.display="none"))}const Co=/\s*!important$/;function Ls(e,t,s){if(Z(s))s.forEach(n=>Ls(e,t,n));else if(s==null&&(s=""),t.startsWith("--"))e.setProperty(t,s);else{const n=da(e,t);Co.test(s)?e.setProperty(Rt(n),s.replace(Co,""),"important"):e[n]=s}}const ko=["Webkit","Moz","ms"],mn={};function da(e,t){const s=mn[t];if(s)return s;let n=Je(t);if(n!=="filter"&&n in e)return mn[t]=n;n=Vo(n);for(let o=0;o<ko.length;o++){const l=ko[o]+n;if(l in e)return mn[t]=l}return t}const So="http://www.w3.org/1999/xlink";function To(e,t,s,n,o,l=di(t)){n&&t.startsWith("xlink:")?s==null?e.removeAttributeNS(So,t.slice(6,t.length)):e.setAttributeNS(So,t,s):s==null||l&&!Bo(s)?e.removeAttribute(t):e.setAttribute(t,l?"":it(s)?String(s):s)}function Mo(e,t,s,n,o){if(t==="innerHTML"||t==="textContent"){s!=null&&(e[t]=t==="innerHTML"?Jl(s):s);return}const l=e.tagName;if(t==="value"&&l!=="PROGRESS"&&!l.includes("-")){const a=l==="OPTION"?e.getAttribute("value")||"":e.value,c=s==null?e.type==="checkbox"?"on":"":String(s);(a!==c||!("_value"in e))&&(e.value=c),s==null&&e.removeAttribute(t),e._value=s;return}let r=!1;if(s===""||s==null){const a=typeof e[t];a==="boolean"?s=Bo(s):s==null&&a==="string"?(s="",r=!0):a==="number"&&(s=0,r=!0)}try{e[t]=s}catch{}r&&e.removeAttribute(o||t)}function It(e,t,s,n){e.addEventListener(t,s,n)}function fa(e,t,s,n){e.removeEventListener(t,s,n)}const Eo=Symbol("_vei");function pa(e,t,s,n,o=null){const l=e[Eo]||(e[Eo]={}),r=l[t];if(n&&r)r.value=n;else{const[a,c]=ha(t);if(n){const v=l[t]=ga(n,o);It(e,a,v,c)}else r&&(fa(e,a,r,c),l[t]=void 0)}}const Oo=/(?:Once|Passive|Capture)$/;function ha(e){let t;if(Oo.test(e)){t={};let n;for(;n=e.match(Oo);)e=e.slice(0,e.length-n[0].length),t[n[0].toLowerCase()]=!0}return[e[2]===":"?e.slice(3):Rt(e.slice(2)),t]}let gn=0;const va=Promise.resolve(),ma=()=>gn||(va.then(()=>gn=0),gn=Date.now());function ga(e,t){const s=n=>{if(!n._vts)n._vts=Date.now();else if(n._vts<=s.attached)return;Qe(_a(n,s.value),t,5,[n])};return s.value=e,s.attached=ma(),s}function _a(e,t){if(Z(t)){const s=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{s.call(e),e._stopped=!0},t.map(n=>o=>!o._stopped&&n&&n(o))}else return t}const Ao=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,ba=(e,t,s,n,o,l)=>{const r=o==="svg";t==="class"?ia(e,n,r):t==="style"?ua(e,s,n):qs(t)?Pn(t)||pa(e,t,s,n,l):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):ya(e,t,n,r))?(Mo(e,t,n),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&To(e,t,n,r,l,t!=="value")):e._isVueCE&&(xa(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!ye(n)))?Mo(e,Je(t),n,l,t):(t==="true-value"?e._trueValue=n:t==="false-value"&&(e._falseValue=n),To(e,t,n,r))};function ya(e,t,s,n){if(n)return!!(t==="innerHTML"||t==="textContent"||t in e&&Ao(t)&&ne(s));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return Ao(t)&&ye(s)?!1:t in e}function xa(e,t){const s=e._def.props;if(!s)return!1;const n=Je(t);return Array.isArray(s)?s.some(o=>Je(o)===n):Object.keys(s).some(o=>Je(o)===n)}const Ws=e=>{const t=e.props["onUpdate:modelValue"]||!1;return Z(t)?s=>As(t,s):t};function wa(e){e.target.composing=!0}function Io(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Jt=Symbol("_assign");function Po(e,t,s){return t&&(e=e.trim()),s&&(e=Ys(e)),e}const Yt={created(e,{modifiers:{lazy:t,trim:s,number:n}},o){e[Jt]=Ws(o);const l=n||o.props&&o.props.type==="number";It(e,t?"change":"input",r=>{r.target.composing||e[Jt](Po(e.value,s,l))}),(s||l)&&It(e,"change",()=>{e.value=Po(e.value,s,l)}),t||(It(e,"compositionstart",wa),It(e,"compositionend",Io),It(e,"change",Io))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:s,modifiers:{lazy:n,trim:o,number:l}},r){if(e[Jt]=Ws(r),e.composing)return;const a=(l||e.type==="number")&&!/^0\d/.test(e.value)?Ys(e.value):e.value,c=t??"";a!==c&&(document.activeElement===e&&e.type!=="range"&&(n&&t===s||o&&e.value.trim()===c)||(e.value=c))}},$a={deep:!0,created(e,{value:t,modifiers:{number:s}},n){const o=Js(t);It(e,"change",()=>{const l=Array.prototype.filter.call(e.options,r=>r.selected).map(r=>s?Ys(zs(r)):zs(r));e[Jt](e.multiple?o?new Set(l):l:l[0]),e._assigning=!0,al(()=>{e._assigning=!1})}),e[Jt]=Ws(n)},mounted(e,{value:t}){Fo(e,t)},beforeUpdate(e,t,s){e[Jt]=Ws(s)},updated(e,{value:t}){e._assigning||Fo(e,t)}};function Fo(e,t){const s=e.multiple,n=Z(t);if(!(s&&!n&&!Js(t))){for(let o=0,l=e.options.length;o<l;o++){const r=e.options[o],a=zs(r);if(s)if(n){const c=typeof a;c==="string"||c==="number"?r.selected=t.some(v=>String(v)===String(a)):r.selected=pi(t,a)>-1}else r.selected=t.has(a);else if($s(zs(r),t)){e.selectedIndex!==o&&(e.selectedIndex=o);return}}!s&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function zs(e){return"_value"in e?e._value:e.value}const Ca=["ctrl","shift","alt","meta"],ka={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Ca.some(s=>e[`${s}Key`]&&!t.includes(s))},os=(e,t)=>{if(!e)return e;const s=e._withMods||(e._withMods={}),n=t.join(".");return s[n]||(s[n]=((o,...l)=>{for(let r=0;r<t.length;r++){const a=ka[t[r]];if(a&&a(o,t))return}return e(o,...l)}))},Sa=$e({patchProp:ba},Zr);let Lo;function Ta(){return Lo||(Lo=Ir(Sa))}const Ma=((...e)=>{const t=Ta().createApp(...e),{mount:s}=t;return t.mount=n=>{const o=Oa(n);if(!o)return;const l=t._component;!ne(l)&&!l.render&&!l.template&&(l.template=o.innerHTML),o.nodeType===1&&(o.textContent="");const r=s(o,!1,Ea(o));return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),r},t});function Ea(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Oa(e){return ye(e)?document.querySelector(e):e}const Aa=500,Yl=re([]),Ql=re({provides:[],injects:[]}),Jn=re([]),Xl=re([]),Zl=re([]),ei=re(!1);let No=!1,Qt="*";function ls(e){return e?e.map(t=>({...t})):[]}function Ia(e){return e?e.map(t=>({...t})):[]}function Pa(){if(typeof document>"u")return"";if(document.referrer)try{return new URL(document.referrer).origin}catch{}return""}function An(){var e;Qt&&((e=window.top)==null||e.postMessage({type:"observatory:request"},Qt))}function Fa(e){var s;if(((s=e.data)==null?void 0:s.type)!=="observatory:snapshot"||!Qt||e.origin!==Qt)return;const t=e.data.data;Yl.value=ls(t.fetch),Ql.value=t.provideInject?{provides:ls(t.provideInject.provides),injects:ls(t.provideInject.injects)}:{provides:[],injects:[]},Jn.value=ls(t.composables),Xl.value=Ia(t.renders),Zl.value=ls(t.transitions),ei.value=!0}function La(){No||typeof window>"u"||(No=!0,Qt=Pa(),window.addEventListener("message",Fa),window.setInterval(An,Aa),An())}function hs(){return Qt}function Na(){Jn.value=[]}function Ss(){return La(),{fetch:Yl,provideInject:Ql,composables:Jn,renders:Xl,transitions:Zl,connected:ei,refresh:An,clearComposables:Na}}const Ra={class:"view"},ja={class:"stats-row"},Da={class:"stat-card"},Ha={class:"stat-val"},Va={class:"stat-card"},Ua={class:"stat-val",style:{color:"var(--teal)"}},Ba={class:"stat-card"},Ka={class:"stat-val",style:{color:"var(--amber)"}},Wa={class:"stat-card"},za={class:"stat-val",style:{color:"var(--red)"}},qa={class:"toolbar"},Ja={class:"split"},Ga={class:"table-wrap"},Ya={class:"data-table"},Qa=["onClick"],Xa={class:"mono",style:{"font-size":"11px",color:"var(--text2)"}},Za=["title"],ec={class:"muted text-sm"},tc={class:"mono text-sm"},sc={style:{height:"4px",background:"var(--bg2)","border-radius":"2px",overflow:"hidden"}},nc={key:0},oc={colspan:"7",style:{"text-align":"center",color:"var(--text3)",padding:"24px"}},lc={key:0,class:"detail-panel"},ic={class:"detail-header"},rc={class:"mono bold",style:{"font-size":"12px"}},ac={class:"flex gap-2"},cc={class:"meta-grid"},uc={class:"muted text-sm"},dc={class:"mono text-sm",style:{"word-break":"break-all"}},fc={class:"payload-box"},pc={class:"mono text-sm muted"},hc={key:1,class:"detail-empty"},vc={class:"waterfall"},mc={class:"waterfall-header"},gc={key:0,class:"waterfall-body"},_c={class:"mono muted text-sm",style:{width:"140px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap","flex-shrink":"0"}},bc={class:"wf-track"},yc={class:"mono muted text-sm",style:{width:"44px","text-align":"right","flex-shrink":"0"}},xc=Nt({__name:"FetchDashboard",setup(e){const{fetch:t,connected:s}=Ss(),n=re("all"),o=re(""),l=re(null),r=re(!0),a=ie(()=>{const I=[...t.value].sort((R,ue)=>R.startTime-ue.startTime),E=Math.min(...I.map(R=>R.startTime),0);return I.map(R=>({...R,startOffset:Math.max(0,Math.round(R.startTime-E))}))}),c=ie(()=>a.value.find(I=>I.id===l.value)??null),v=ie(()=>({ok:a.value.filter(I=>I.status==="ok").length,pending:a.value.filter(I=>I.status==="pending").length,error:a.value.filter(I=>I.status==="error").length})),d=ie(()=>a.value.filter(I=>{if(n.value!=="all"&&I.status!==n.value)return!1;const E=o.value.toLowerCase();return!(E&&!I.key.toLowerCase().includes(E)&&!I.url.toLowerCase().includes(E))})),g=ie(()=>{if(!c.value)return[];const I=c.value;return[["url",I.url],["status",I.status],["origin",I.origin],["duration",I.ms!=null?`${I.ms}ms`:"—"],["size",I.size?B(I.size):"—"],["cached",I.cached?"yes":"no"]]}),M=ie(()=>{if(!c.value)return"";const I=c.value.payload;if(I===void 0)return"(no payload captured yet)";try{return JSON.stringify(I,null,2)}catch{return String(I)}});function y(I){return{ok:"badge-ok",error:"badge-err",pending:"badge-warn",cached:"badge-gray"}[I]??"badge-gray"}function x(I){return{ok:"var(--teal)",error:"var(--red)",pending:"var(--amber)",cached:"var(--border)"}[I]??"var(--border)"}function N(I){const E=Math.max(...a.value.filter(R=>R.ms).map(R=>R.ms),1);return I.ms!=null?Math.max(4,Math.round(I.ms/E*100)):4}function J(I){const E=Math.max(...a.value.map(R=>R.startOffset+(R.ms??0)),1);return Math.round(I.startOffset/E*100)}function Y(I){const E=Math.max(...a.value.map(R=>R.startOffset+(R.ms??0)),1);return I.ms!=null?Math.round(I.ms/E*100):2}function B(I){return I<1024?`${I}B`:`${(I/1024).toFixed(1)}KB`}return(I,E)=>(S(),T("div",Ra,[i("div",ja,[i("div",Da,[E[7]||(E[7]=i("div",{class:"stat-label"},"total",-1)),i("div",Ha,b(a.value.length),1)]),i("div",Va,[E[8]||(E[8]=i("div",{class:"stat-label"},"success",-1)),i("div",Ua,b(v.value.ok),1)]),i("div",Ba,[E[9]||(E[9]=i("div",{class:"stat-label"},"pending",-1)),i("div",Ka,b(v.value.pending),1)]),i("div",Wa,[E[10]||(E[10]=i("div",{class:"stat-label"},"error",-1)),i("div",za,b(v.value.error),1)])]),i("div",qa,[i("button",{class:se({active:n.value==="all"}),onClick:E[0]||(E[0]=R=>n.value="all")},"all",2),i("button",{class:se({"danger-active":n.value==="error"}),onClick:E[1]||(E[1]=R=>n.value="error")},"errors",2),i("button",{class:se({active:n.value==="pending"}),onClick:E[2]||(E[2]=R=>n.value="pending")},"pending",2),i("button",{class:se({active:n.value==="cached"}),onClick:E[3]||(E[3]=R=>n.value="cached")},"cached",2),Lt(i("input",{"onUpdate:modelValue":E[4]||(E[4]=R=>o.value=R),type:"search",placeholder:"search key or url…",style:{"max-width":"240px","margin-left":"auto"}},null,512),[[Yt,o.value]])]),i("div",Ja,[i("div",Ga,[i("table",Ya,[E[11]||(E[11]=i("thead",null,[i("tr",null,[i("th",null,"key"),i("th",null,"url"),i("th",null,"status"),i("th",null,"origin"),i("th",null,"size"),i("th",null,"time"),i("th",{style:{"min-width":"80px"}},"bar")])],-1)),i("tbody",null,[(S(!0),T(ae,null,be(d.value,R=>{var ue;return S(),T("tr",{key:R.id,class:se({selected:((ue=c.value)==null?void 0:ue.id)===R.id}),onClick:H=>l.value=R.id},[i("td",null,[i("span",Xa,b(R.key),1)]),i("td",null,[i("span",{class:"mono",style:{"font-size":"11px","max-width":"200px",display:"block",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"},title:R.url},b(R.url),9,Za)]),i("td",null,[i("span",{class:se(["badge",y(R.status)])},b(R.status),3)]),i("td",null,[i("span",{class:se(["badge",R.origin==="ssr"?"badge-info":"badge-gray"])},b(R.origin),3)]),i("td",ec,b(R.size?B(R.size):"—"),1),i("td",tc,b(R.ms!=null?`${R.ms}ms`:"—"),1),i("td",null,[i("div",sc,[i("div",{style:Ce({width:`${N(R)}%`,background:x(R.status),height:"100%",borderRadius:"2px"})},null,4)])])],10,Qa)}),128)),d.value.length?te("",!0):(S(),T("tr",nc,[i("td",oc,b(xt(s)?"No fetches recorded yet.":"Waiting for connection to the Nuxt app…"),1)]))])])]),c.value?(S(),T("div",lc,[i("div",ic,[i("span",rc,b(c.value.key),1),i("div",ac,[i("button",{onClick:E[5]||(E[5]=R=>l.value=null)},"×")])]),i("div",cc,[(S(!0),T(ae,null,be(g.value,([R,ue])=>(S(),T(ae,{key:R},[i("span",uc,b(R),1),i("span",dc,b(ue),1)],64))),128))]),E[12]||(E[12]=i("div",{class:"section-label"},"payload",-1)),i("pre",fc,b(M.value),1),E[13]||(E[13]=i("div",{class:"section-label",style:{"margin-top":"10px"}},"source",-1)),i("div",pc,b(c.value.file)+":"+b(c.value.line),1)])):(S(),T("div",hc,"select a call to inspect"))]),i("div",vc,[i("div",mc,[E[14]||(E[14]=i("div",{class:"section-label",style:{"margin-top":"0","margin-bottom":"0"}},"waterfall",-1)),i("button",{class:se({active:r.value}),onClick:E[6]||(E[6]=R=>r.value=!r.value)},b(r.value?"hide":"show"),3)]),r.value?(S(),T("div",gc,[(S(!0),T(ae,null,be(a.value,R=>(S(),T("div",{key:R.id,class:"wf-row"},[i("span",_c,b(R.key),1),i("div",bc,[i("div",{class:"wf-bar",style:Ce({left:`${J(R)}%`,width:`${Math.max(2,Y(R))}%`,background:x(R.status)})},null,4)]),i("span",yc,b(R.ms!=null?`${R.ms}ms`:"—"),1)]))),128))])):te("",!0)])]))}}),Xt=(e,t)=>{const s=e.__vccOpts||e;for(const[n,o]of t)s[n]=o;return s},wc=Xt(xc,[["__scopeId","data-v-8c1465c0"]]),$c={class:"view"},Cc={class:"toolbar"},kc=["onClick"],Sc={class:"split"},Tc={class:"graph-area"},Mc={key:0,class:"canvas-stage"},Ec=["width","height","viewBox"],Oc=["d"],Ac=["onClick"],Ic={class:"mono node-label"},Pc={key:0,class:"badge badge-ok badge-xs"},Fc={key:1,class:"badge badge-err badge-xs"},Lc={key:1,class:"graph-empty"},Nc={key:0,class:"detail-panel"},Rc={class:"detail-header"},jc={class:"mono bold",style:{"font-size":"12px"}},Dc={key:0,class:"detail-section"},Hc={class:"section-label"},Vc={class:"detail-list"},Uc={class:"row-main"},Bc={class:"mono text-sm row-key"},Kc=["title"],Wc=["onClick"],zc={key:0,class:"row-warning"},qc={key:1,class:"row-consumers"},Jc={key:0,class:"muted text-sm"},Gc={key:2,class:"muted text-sm",style:{padding:"2px 0","font-size":"11px"}},Yc={key:3,class:"value-box"},Qc={class:"section-label"},Xc={class:"detail-list"},Zc={class:"mono text-sm row-key"},eu={key:0,class:"badge badge-ok"},tu={key:1,class:"badge badge-err"},su=["title"],nu={key:2,class:"muted text-sm",style:{"margin-top":"8px"}},ou={key:1,class:"detail-empty"},Ht=140,Vt=32,lu=72,Ut=18,iu=Nt({__name:"ProvideInjectGraph",setup(e){const{provideInject:t,connected:s}=Ss();function n(w){return w.injects.some(m=>!m.ok)?"var(--red)":w.type==="both"?"var(--blue)":w.type==="provider"?"var(--teal)":"var(--text3)"}function o(w,m){return m==="all"?!0:m==="warn"?w.injects.some(_=>!_.ok):m==="shadow"?w.provides.some(_=>_.isShadowing):w.provides.some(_=>_.key===m)||w.injects.some(_=>_.key===m)}function l(w,m){if(!m)return!0;const _=m.toLowerCase();return w.label.toLowerCase().includes(_)||w.componentName.toLowerCase().includes(_)||w.provides.some(G=>G.key.toLowerCase().includes(_))||w.injects.some(G=>G.key.toLowerCase().includes(_))}function r(w){let m=0;const _=[w];for(;_.length;){const G=_.pop();G.children.length===0?m++:_.push(...G.children)}return m}function a(w){if(typeof w=="string")return w;try{return JSON.stringify(w)}catch{return String(w)}}function c(w){return typeof w=="object"&&w!==null}function v(w){if(w===null)return"null";if(Array.isArray(w))return`Array(${w.length})`;if(typeof w=="object"){const m=Object.keys(w);return m.length?`{ ${m.join(", ")} }`:"{}"}return a(w)}function d(w){if(!c(w))return a(w);try{return JSON.stringify(w,null,2)}catch{return a(w)}}function g(w,m,_){return`${w}:${m}:${_}`}function M(w){return w.split("/").pop()??w}function y(w){var _;if(!w||w==="unknown")return;const m=hs();m&&((_=window.top)==null||_.postMessage({type:"observatory:open-in-editor",file:w},m))}function x(w){return String(w.componentUid)}const N=ie(()=>{const w=new Map,m=new Map;function _(j){const X=x(j),ge=w.get(X);if(ge)return ge;const _e={id:X,label:M(j.componentFile),componentName:j.componentName??M(j.componentFile),componentFile:j.componentFile,type:"consumer",provides:[],injects:[],children:[]};return w.set(X,_e),m.set(X,j.parentUid!==void 0?String(j.parentUid):null),_e}const G=new Map;for(const j of t.value.injects){const X=G.get(j.key)??[];X.push(j),G.set(j.key,X)}const le=new Map;for(const j of t.value.provides)le.set(j.componentUid,j.componentName);for(const j of t.value.injects)le.set(j.componentUid,j.componentName);for(const j of t.value.provides){const X=_(j),ge=G.get(j.key)??[];X.provides.push({key:j.key,val:v(j.valueSnapshot),raw:j.valueSnapshot,reactive:j.isReactive,complex:c(j.valueSnapshot),scope:j.scope??"component",isShadowing:j.isShadowing??!1,consumerUids:ge.map(_e=>_e.componentUid),consumerNames:ge.map(_e=>_e.componentName)})}for(const j of t.value.injects)_(j).injects.push({key:j.key,from:j.resolvedFromFile??null,fromName:j.resolvedFromUid!==void 0?le.get(j.resolvedFromUid)??null:null,ok:j.resolved});for(const j of w.values())j.injects.some(X=>!X.ok)?j.type="error":j.provides.length&&j.injects.length?j.type="both":j.provides.length?j.type="provider":j.type="consumer";const ce=[];for(const[j,X]of w.entries()){const ge=m.get(j),_e=ge?w.get(ge):void 0;_e?_e.children.push(X):ce.push(X)}return ce}),J=re("all"),Y=re(""),B=re(null),I=re(new Set);yt(B,()=>{I.value=new Set});function E(w){const m=new Set(I.value);m.has(w)?m.delete(w):m.add(w),I.value=m}const R=ie(()=>{const w=new Set,m=[...N.value];for(;m.length;){const _=m.pop();_.provides.forEach(G=>w.add(G.key)),_.injects.forEach(G=>w.add(G.key)),m.push(..._.children)}return[...w]}),ue=ie(()=>{function w(m){const _=[],G=[m];for(;G.length;){const ce=G.pop();_.push(ce);for(let j=ce.children.length-1;j>=0;j--)G.push(ce.children[j])}const le=new Map;for(let ce=_.length-1;ce>=0;ce--){const j=_[ce],X=j.children.map(_e=>le.get(_e)??null).filter(_e=>_e!==null);!(o(j,J.value)&&l(j,Y.value))&&!X.length?le.set(j,null):le.set(j,{...j,children:X})}return le.get(m)??null}return N.value.map(w).filter(Boolean)});yt([ue,B],([w,m])=>{if(!m)return;const _=new Set,G=[...w];for(;G.length;){const le=G.pop();_.add(le.id),G.push(...le.children)}_.has(m.id)||(B.value=null)});const H=ie(()=>{const w=[],m=Ut;let _=m;for(const G of ue.value){const le=[{node:G,depth:0,slotLeft:_,parentId:null}];for(;le.length;){const{node:j,depth:X,slotLeft:ge,parentId:_e}=le.pop(),Ne=r(j)*(Ht+Ut)-Ut;w.push({data:j,parentId:_e,x:Math.round(ge+Ne/2),y:Math.round(m+X*(Vt+lu)+Vt/2)});let Re=ge;const qe=[];for(const we of j.children){const Xe=r(we);qe.push({node:we,depth:X+1,slotLeft:Re,parentId:j.id}),Re+=Xe*(Ht+Ut)}for(let we=qe.length-1;we>=0;we--)le.push(qe[we])}const ce=r(G);_+=ce*(Ht+Ut)+Ut*2}return w}),O=ie(()=>H.value.reduce((w,m)=>Math.max(w,m.x+Ht/2+20),520)),C=ie(()=>H.value.reduce((w,m)=>Math.max(w,m.y+Vt/2+20),200)),oe=ie(()=>{const w=new Map(H.value.map(m=>[m.data.id,m]));return H.value.filter(m=>m.parentId!==null).map(m=>{const _=w.get(m.parentId);return{id:`${_.data.id}--${m.data.id}`,x1:_.x,y1:_.y+Vt/2,x2:m.x,y2:m.y-Vt/2}})});return(w,m)=>(S(),T("div",$c,[i("div",Cc,[i("button",{class:se({active:J.value==="all"}),onClick:m[0]||(m[0]=_=>J.value="all")},"all keys",2),(S(!0),T(ae,null,be(R.value,_=>(S(),T("button",{key:_,style:{"font-family":"var(--mono)"},class:se({active:J.value===_}),onClick:G=>J.value=_},b(_),11,kc))),128)),i("button",{style:{"margin-left":"auto"},class:se({"danger-active":J.value==="shadow"}),onClick:m[1]||(m[1]=_=>J.value=J.value==="shadow"?"all":"shadow")}," shadowed ",2),i("button",{class:se({"danger-active":J.value==="warn"}),onClick:m[2]||(m[2]=_=>J.value=J.value==="warn"?"all":"warn")}," warnings ",2),Lt(i("input",{"onUpdate:modelValue":m[3]||(m[3]=_=>Y.value=_),type:"search",placeholder:"search component or key…",style:{"max-width":"200px"}},null,512),[[Yt,Y.value]])]),i("div",Sc,[i("div",Tc,[m[6]||(m[6]=Hr('<div class="legend" data-v-0c07531b><span class="dot" style="background:var(--teal);" data-v-0c07531b></span><span data-v-0c07531b>provides</span><span class="dot" style="background:var(--blue);" data-v-0c07531b></span><span data-v-0c07531b>both</span><span class="dot" style="background:var(--text3);" data-v-0c07531b></span><span data-v-0c07531b>injects</span><span class="dot" style="background:var(--red);" data-v-0c07531b></span><span data-v-0c07531b>missing provider</span></div>',1)),H.value.length?(S(),T("div",Mc,[i("div",{class:"canvas-wrap",style:Ce({width:`${O.value}px`,height:`${C.value}px`})},[(S(),T("svg",{class:"edges-svg",width:O.value,height:C.value,viewBox:`0 0 ${O.value} ${C.value}`},[(S(!0),T(ae,null,be(oe.value,_=>(S(),T("path",{key:_.id,d:`M ${_.x1},${_.y1} C ${_.x1},${(_.y1+_.y2)/2} ${_.x2},${(_.y1+_.y2)/2} ${_.x2},${_.y2}`,class:"edge",fill:"none"},null,8,Oc))),128))],8,Ec)),(S(!0),T(ae,null,be(H.value,_=>{var G;return S(),T("div",{key:_.data.id,class:se(["graph-node",{"is-selected":((G=B.value)==null?void 0:G.id)===_.data.id}]),style:Ce({left:`${_.x-Ht/2}px`,top:`${_.y-Vt/2}px`,width:`${Ht}px`,"--node-color":n(_.data)}),onClick:le=>B.value=_.data},[i("span",{class:"node-dot",style:Ce({background:n(_.data)})},null,4),i("span",Ic,b(_.data.label),1),_.data.provides.length?(S(),T("span",Pc," +"+b(_.data.provides.length),1)):te("",!0),_.data.injects.some(le=>!le.ok)?(S(),T("span",Fc,"!")):te("",!0)],14,Ac)}),128))],4)])):(S(),T("div",Lc,b(xt(s)?"No components match the current provide/inject filter.":"Waiting for connection to the Nuxt app…"),1))]),B.value?(S(),T("div",Nc,[i("div",Rc,[i("span",jc,b(B.value.label),1),B.value.componentFile&&B.value.componentFile!=="unknown"?(S(),T("button",{key:0,class:"jump-btn",title:"Open in editor",onClick:m[4]||(m[4]=_=>y(B.value.componentFile))}," open ↗ ")):te("",!0),i("button",{onClick:m[5]||(m[5]=_=>B.value=null)},"×")]),B.value.provides.length?(S(),T("div",Dc,[i("div",Hc,"provides ("+b(B.value.provides.length)+")",1),i("div",Vc,[(S(!0),T(ae,null,be(B.value.provides,(_,G)=>(S(),T("div",{key:g(B.value.id,_.key,G),class:"provide-row"},[i("div",Uc,[i("span",Bc,b(_.key),1),i("span",{class:"mono text-sm muted row-value-preview",title:_.val},b(_.val),9,Kc),i("span",{class:se(["badge scope-badge",`scope-${_.scope}`])},b(_.scope),3),i("span",{class:se(["badge",_.reactive?"badge-ok":"badge-gray"])},b(_.reactive?"reactive":"static"),3),_.complex?(S(),T("button",{key:0,class:"row-toggle mono",onClick:le=>E(g(B.value.id,_.key,G))},b(I.value.has(g(B.value.id,_.key,G))?"hide":"view"),9,Wc)):te("",!0)]),_.isShadowing?(S(),T("div",zc,"shadows a parent provide with the same key")):te("",!0),_.consumerNames.length?(S(),T("div",qc,[m[7]||(m[7]=i("span",{class:"muted text-sm"},"used by:",-1)),(S(!0),T(ae,null,be(_.consumerNames,le=>(S(),T("span",{key:le,class:"consumer-chip mono"},b(le),1))),128)),_.consumerNames.length?te("",!0):(S(),T("span",Jc,"no consumers"))])):(S(),T("div",Gc,"no consumers detected")),_.complex&&I.value.has(g(B.value.id,_.key,G))?(S(),T("pre",Yc,b(d(_.raw)),1)):te("",!0)]))),128))])])):te("",!0),B.value.injects.length?(S(),T("div",{key:1,class:"detail-section",style:Ce({marginTop:B.value.provides.length?"10px":"0"})},[i("div",Qc,"injects ("+b(B.value.injects.length)+")",1),i("div",Xc,[(S(!0),T(ae,null,be(B.value.injects,_=>(S(),T("div",{key:_.key,class:se(["inject-row",{"inject-miss":!_.ok}])},[i("span",Zc,b(_.key),1),_.ok?(S(),T("span",eu,"resolved")):(S(),T("span",tu,"no provider")),i("span",{class:se(["mono text-sm row-from",_.fromName?"":"muted"]),title:_.from??"undefined"},b(_.fromName??_.from??"undefined"),11,su)],2))),128))])],4)):te("",!0),!B.value.provides.length&&!B.value.injects.length?(S(),T("div",nu," no provide/inject in this component ")):te("",!0)])):(S(),T("div",ou,b(xt(s)?"Click a node to inspect.":"Waiting for connection to the Nuxt app…"),1))])]))}}),ru=Xt(iu,[["__scopeId","data-v-0c07531b"]]),au={class:"view"},cu={class:"stats-row"},uu={class:"stat-card"},du={class:"stat-val"},fu={class:"stat-card"},pu={class:"stat-val",style:{color:"var(--teal)"}},hu={class:"stat-card"},vu={class:"stat-val",style:{color:"var(--red)"}},mu={class:"stat-card"},gu={class:"stat-val"},_u={class:"toolbar"},bu={class:"list"},yu=["onClick"],xu={class:"comp-header"},wu={class:"comp-identity"},$u={class:"comp-name mono"},Cu={class:"comp-file muted mono"},ku={class:"comp-meta"},Su={key:0,class:"badge badge-warn"},Tu={key:1,class:"badge badge-warn"},Mu={key:2,class:"badge badge-err"},Eu={key:3,class:"badge badge-ok"},Ou={key:4,class:"badge badge-gray"},Au={key:0,class:"refs-preview"},Iu=["title"],Pu={class:"ref-chip-key"},Fu={class:"ref-chip-val"},Lu={key:0,class:"ref-chip-shared-dot",title:"global"},Nu={key:0,class:"muted text-sm"},Ru={key:0,class:"leak-banner"},ju={key:1,class:"global-banner"},Du={key:2,class:"muted text-sm",style:{padding:"2px 0 6px"}},Hu=["title","onClick"],Vu={class:"mono text-sm ref-val"},Uu={key:0,class:"badge badge-amber text-xs"},Bu=["onClick"],Ku={class:"section-label",style:{"margin-top":"10px"}},Wu={class:"muted",style:{"font-weight":"400","text-transform":"none","letter-spacing":"0"}},zu={class:"history-list"},qu={class:"history-time mono muted"},Ju={class:"history-key mono"},Gu={class:"history-val mono"},Yu={key:0,class:"muted text-sm",style:{padding:"2px 0"}},Qu={class:"muted text-sm",style:{"min-width":"120px"}},Xu={class:"lc-row"},Zu={class:"mono text-sm"},ed={class:"lc-row"},td={class:"mono text-sm muted"},sd={class:"lc-row"},nd={class:"mono text-sm muted",style:{display:"flex","align-items":"center",gap:"6px"}},od=["onClick"],ld={class:"lc-row"},id={class:"mono text-sm muted"},rd={class:"lc-row"},ad={class:"mono text-sm"},cd={class:"lc-row"},ud={class:"mono text-sm"},dd={key:0,class:"muted text-sm",style:{padding:"16px 0"}},fd={key:0,class:"lookup-panel"},pd={class:"lookup-header"},hd={class:"mono text-sm"},vd={class:"muted text-sm"},md={key:0,class:"muted text-sm",style:{padding:"6px 0"}},gd={class:"mono text-sm"},_d={class:"muted text-sm"},bd={class:"muted text-sm",style:{"margin-left":"auto"}},yd={class:"edit-dialog"},xd={class:"edit-dialog-header"},wd={class:"mono"},$d={key:0,class:"edit-error text-sm"},Cd={class:"edit-actions"},kd=Nt({__name:"ComposableTracker",setup(e){const{composables:t,connected:s,clearComposables:n}=Ss();function o(){var O;const H=hs();H&&(n(),(O=window.top)==null||O.postMessage({type:"observatory:clear-composables"},H))}function l(H){if(H===null)return"null";if(H===void 0)return"undefined";if(typeof H=="string")return`"${H}"`;if(typeof H=="object")try{const O=JSON.stringify(H);return O.length>80?O.slice(0,80)+"…":O}catch{return String(H)}return String(H)}function r(H){return H.split("/").pop()??H}function a(H){var C;if(!H||H==="unknown")return;const O=hs();O&&((C=window.top)==null||C.postMessage({type:"observatory:open-in-editor",file:H},O))}const c=re("all"),v=re(""),d=re(null),g=ie(()=>t.value),M=ie(()=>({mounted:g.value.filter(H=>H.status==="mounted").length,leaks:g.value.filter(H=>H.leak).length})),y=ie(()=>g.value.filter(H=>{if(c.value==="leak"&&!H.leak||c.value==="mounted"&&H.status!=="mounted"||c.value==="unmounted"&&H.status!=="unmounted")return!1;const O=v.value.toLowerCase();if(O){const C=H.name.toLowerCase().includes(O),oe=H.componentFile.toLowerCase().includes(O),w=Object.keys(H.refs).some(_=>_.toLowerCase().includes(O)),m=Object.values(H.refs).some(_=>{try{return String(JSON.stringify(_.value)).toLowerCase().includes(O)}catch{return!1}});if(!C&&!oe&&!w&&!m)return!1}return!0}));function x(H){return[{label:"onMounted",ok:H.lifecycle.hasOnMounted,status:H.lifecycle.hasOnMounted?"registered":"not used"},{label:"onUnmounted",ok:H.lifecycle.hasOnUnmounted,status:H.lifecycle.hasOnUnmounted?"registered":"missing"},{label:"watchers cleaned",ok:H.lifecycle.watchersCleaned,status:H.lifecycle.watchersCleaned?"all stopped":"NOT stopped"},{label:"intervals cleared",ok:H.lifecycle.intervalsCleaned,status:H.lifecycle.intervalsCleaned?"all cleared":"NOT cleared"}]}function N(H){return H==="computed"?"badge-info":H==="reactive"?"badge-purple":"badge-gray"}const J=re(null),Y=ie(()=>{if(!J.value)return[];const H=J.value;return g.value.filter(O=>H in O.refs)});function B(H){J.value=J.value===H?null:H}const I=re(null),E=re("");function R(H,O,C){E.value="",I.value={id:H,key:O,rawValue:JSON.stringify(C,null,2)}}function ue(){var C;if(!I.value)return;let H;try{H=JSON.parse(I.value.rawValue),E.value=""}catch(oe){E.value=`Invalid JSON: ${oe.message}`;return}const O=hs();O&&((C=window.top)==null||C.postMessage({type:"observatory:edit-composable",id:I.value.id,key:I.value.key,value:H},O),I.value=null)}return(H,O)=>(S(),T("div",au,[i("div",cu,[i("div",uu,[O[11]||(O[11]=i("div",{class:"stat-label"},"total",-1)),i("div",du,b(g.value.length),1)]),i("div",fu,[O[12]||(O[12]=i("div",{class:"stat-label"},"mounted",-1)),i("div",pu,b(M.value.mounted),1)]),i("div",hu,[O[13]||(O[13]=i("div",{class:"stat-label"},"leaks",-1)),i("div",vu,b(M.value.leaks),1)]),i("div",mu,[O[14]||(O[14]=i("div",{class:"stat-label"},"instances",-1)),i("div",gu,b(g.value.length),1)])]),i("div",_u,[i("button",{class:se({active:c.value==="all"}),onClick:O[0]||(O[0]=C=>c.value="all")},"all",2),i("button",{class:se({active:c.value==="mounted"}),onClick:O[1]||(O[1]=C=>c.value="mounted")},"mounted",2),i("button",{class:se({"danger-active":c.value==="leak"}),onClick:O[2]||(O[2]=C=>c.value="leak")},"leaks only",2),i("button",{class:se({active:c.value==="unmounted"}),onClick:O[3]||(O[3]=C=>c.value="unmounted")},"unmounted",2),Lt(i("input",{"onUpdate:modelValue":O[4]||(O[4]=C=>v.value=C),type:"search",placeholder:"search name, file, or ref…",style:{"max-width":"220px","margin-left":"auto"}},null,512),[[Yt,v.value]]),i("button",{class:"clear-btn",title:"Clear session history",onClick:o},"clear")]),i("div",bu,[(S(!0),T(ae,null,be(y.value,C=>{var oe;return S(),T("div",{key:C.id,class:se(["comp-card",{leak:C.leak,expanded:d.value===C.id}]),onClick:w=>d.value=d.value===C.id?null:C.id},[i("div",xu,[i("div",wu,[i("span",$u,b(C.name),1),i("span",Cu,b(r(C.componentFile)),1)]),i("div",ku,[C.watcherCount>0&&!C.leak?(S(),T("span",Su,b(C.watcherCount)+"w",1)):te("",!0),C.intervalCount>0&&!C.leak?(S(),T("span",Tu,b(C.intervalCount)+"t",1)):te("",!0),C.leak?(S(),T("span",Mu,"leak")):C.status==="mounted"?(S(),T("span",Eu,"mounted")):(S(),T("span",Ou,"unmounted"))])]),Object.keys(C.refs).length?(S(),T("div",Au,[(S(!0),T(ae,null,be(Object.entries(C.refs).slice(0,3),([w,m])=>{var _,G,le;return S(),T("span",{key:w,class:se(["ref-chip",{"ref-chip--reactive":m.type==="reactive","ref-chip--computed":m.type==="computed","ref-chip--shared":(_=C.sharedKeys)==null?void 0:_.includes(w)}]),title:(G=C.sharedKeys)!=null&&G.includes(w)?"shared global state":""},[i("span",Pu,b(w),1),i("span",Fu,b(l(m.value)),1),(le=C.sharedKeys)!=null&&le.includes(w)?(S(),T("span",Lu)):te("",!0)],10,Iu)}),128)),Object.keys(C.refs).length>3?(S(),T("span",Nu," +"+b(Object.keys(C.refs).length-3)+" more ",1)):te("",!0)])):te("",!0),d.value===C.id?(S(),T("div",{key:1,class:"comp-detail",onClick:O[5]||(O[5]=os(()=>{},["stop"]))},[C.leak?(S(),T("div",Ru,b(C.leakReason),1)):te("",!0),(oe=C.sharedKeys)!=null&&oe.length?(S(),T("div",ju,[O[16]||(O[16]=i("span",{class:"global-dot"},null,-1)),i("span",null,[O[15]||(O[15]=i("strong",null,"global state",-1)),Me(" — "+b(C.sharedKeys.join(", "))+" "+b(C.sharedKeys.length===1?"is":"are")+" shared across all instances of "+b(C.name),1)])])):te("",!0),O[24]||(O[24]=i("div",{class:"section-label"},"reactive state",-1)),Object.keys(C.refs).length?te("",!0):(S(),T("div",Du," no tracked state returned ")),(S(!0),T(ae,null,be(Object.entries(C.refs),([w,m])=>{var _;return S(),T("div",{key:w,class:"ref-row"},[i("span",{class:"mono text-sm ref-key ref-key--clickable",title:`click to see all instances exposing '${w}'`,onClick:os(G=>B(w),["stop"])},b(w),9,Hu),i("span",Vu,b(l(m.value)),1),i("span",{class:se(["badge text-xs",N(m.type)])},b(m.type),3),(_=C.sharedKeys)!=null&&_.includes(w)?(S(),T("span",Uu,"global")):te("",!0),m.type==="ref"?(S(),T("button",{key:1,class:"edit-btn",title:"Edit value",onClick:os(G=>R(C.id,w,m.value),["stop"])}," edit ",8,Bu)):te("",!0)])}),128)),C.history&&C.history.length?(S(),T(ae,{key:3},[i("div",Ku,[O[17]||(O[17]=Me(" change history ",-1)),i("span",Wu," ("+b(C.history.length)+" events) ",1)]),i("div",zu,[(S(!0),T(ae,null,be([...C.history].reverse().slice(0,20),(w,m)=>(S(),T("div",{key:m,class:"history-row"},[i("span",qu,"+"+b((w.t/1e3).toFixed(2))+"s",1),i("span",Ju,b(w.key),1),i("span",Gu,b(l(w.value)),1)]))),128)),C.history.length>20?(S(),T("div",Yu," … "+b(C.history.length-20)+" earlier events ",1)):te("",!0)])],64)):te("",!0),O[25]||(O[25]=i("div",{class:"section-label",style:{"margin-top":"10px"}},"lifecycle",-1)),(S(!0),T(ae,null,be(x(C),w=>(S(),T("div",{key:w.label,class:"lc-row"},[i("span",{class:"lc-dot",style:Ce({background:w.ok?"var(--teal)":"var(--red)"})},null,4),i("span",Qu,b(w.label),1),i("span",{class:"text-sm",style:Ce({color:w.ok?"var(--teal)":"var(--red)"})},b(w.status),5)]))),128)),O[26]||(O[26]=i("div",{class:"section-label",style:{"margin-top":"10px"}},"context",-1)),i("div",Xu,[O[18]||(O[18]=i("span",{class:"muted text-sm",style:{"min-width":"120px"}},"component",-1)),i("span",Zu,b(r(C.componentFile)),1)]),i("div",ed,[O[19]||(O[19]=i("span",{class:"muted text-sm",style:{"min-width":"120px"}},"uid",-1)),i("span",td,b(C.componentUid),1)]),i("div",sd,[O[20]||(O[20]=i("span",{class:"muted text-sm",style:{"min-width":"120px"}},"defined in",-1)),i("span",nd,[Me(b(C.file)+":"+b(C.line)+" ",1),i("button",{class:"jump-btn",title:"Open in editor",onClick:os(w=>a(C.file),["stop"])},"open ↗",8,od)])]),i("div",ld,[O[21]||(O[21]=i("span",{class:"muted text-sm",style:{"min-width":"120px"}},"route",-1)),i("span",id,b(C.route),1)]),i("div",rd,[O[22]||(O[22]=i("span",{class:"muted text-sm",style:{"min-width":"120px"}},"watchers",-1)),i("span",ad,b(C.watcherCount),1)]),i("div",cd,[O[23]||(O[23]=i("span",{class:"muted text-sm",style:{"min-width":"120px"}},"intervals",-1)),i("span",ud,b(C.intervalCount),1)])])):te("",!0)],10,yu)}),128)),y.value.length?te("",!0):(S(),T("div",dd,b(xt(s)?"No composables recorded yet.":"Waiting for connection to the Nuxt app…"),1))]),ke(On,{name:"slide"},{default:Ds(()=>[J.value?(S(),T("div",fd,[i("div",pd,[i("span",hd,b(J.value),1),i("span",vd,"— "+b(Y.value.length)+" instance"+b(Y.value.length!==1?"s":""),1),i("button",{class:"clear-btn",style:{"margin-left":"auto"},onClick:O[6]||(O[6]=C=>J.value=null)},"✕")]),Y.value.length?te("",!0):(S(),T("div",md,"No mounted instances expose this key.")),(S(!0),T(ae,null,be(Y.value,C=>(S(),T("div",{key:C.id,class:"lookup-row"},[i("span",gd,b(C.name),1),i("span",_d,b(r(C.componentFile)),1),i("span",bd,b(C.route),1)]))),128))])):te("",!0)]),_:1}),ke(On,{name:"fade"},{default:Ds(()=>[I.value?(S(),T("div",{key:0,class:"edit-overlay",onClick:O[10]||(O[10]=os(C=>I.value=null,["self"]))},[i("div",yd,[i("div",xd,[O[27]||(O[27]=Me(" edit ",-1)),i("span",wd,b(I.value.key),1),i("button",{class:"clear-btn",style:{"margin-left":"auto"},onClick:O[7]||(O[7]=C=>I.value=null)},"✕")]),O[28]||(O[28]=i("p",{class:"muted text-sm",style:{padding:"4px 0 8px"}},[Me(" Value applied immediately to the live ref. Only "),i("span",{class:"mono"},"ref"),Me(" values are writable. ")],-1)),Lt(i("textarea",{"onUpdate:modelValue":O[8]||(O[8]=C=>I.value.rawValue=C),class:"edit-textarea",rows:"6",spellcheck:"false"},null,512),[[Yt,I.value.rawValue]]),E.value?(S(),T("div",$d,b(E.value),1)):te("",!0),i("div",Cd,[i("button",{onClick:ue},"apply"),i("button",{class:"clear-btn",onClick:O[9]||(O[9]=C=>I.value=null)},"cancel")])])])):te("",!0)]),_:1})]))}}),Sd=Xt(kd,[["__scopeId","data-v-47ca40b0"]]),Td={class:"view"},Md={class:"controls"},Ed={class:"mode-group"},Od={class:"threshold-group"},Ad=["min","max","step"],Id={class:"mono text-sm"},Pd=["value"],Fd={class:"stats-row"},Ld={class:"stat-card"},Nd={class:"stat-val"},Rd={class:"stat-card"},jd={class:"stat-val"},Dd={class:"stat-card"},Hd={class:"stat-val",style:{color:"var(--red)"}},Vd={class:"stat-card"},Ud={class:"stat-val"},Bd={class:"inspector"},Kd={class:"roots-panel"},Wd=["onClick"],zd={class:"root-copy"},qd={class:"root-label mono"},Jd={class:"root-sub muted mono"},Gd={class:"root-meta mono"},Yd={key:0,class:"detail-empty"},Qd={class:"tree-panel"},Xd={class:"tree-toolbar"},Zd=["value"],ef={class:"tree-frame"},tf={class:"tree-canvas"},sf={key:0,class:"detail-empty"},nf={class:"detail-panel"},of={class:"detail-header"},lf={class:"mono bold",style:{"font-size":"12px"}},rf={class:"detail-pill-row"},af={class:"detail-pill mono"},cf={class:"detail-pill mono muted"},uf={key:0,class:"detail-pill mono"},df={key:1,class:"detail-pill mono persistent"},ff={key:2,class:"detail-pill mono hydrated"},pf={class:"detail-pill mono"},hf={class:"meta-grid"},vf={class:"mono text-sm"},mf={class:"mono text-sm"},gf={class:"mono text-sm muted",style:{display:"flex","align-items":"center",gap:"6px"}},_f={class:"mono text-sm"},bf={class:"mono text-sm"},yf={class:"mono text-sm"},xf={class:"meta-grid"},wf={class:"mono text-sm"},$f={class:"mono text-sm"},Cf={class:"mono text-sm"},kf={class:"mono text-sm"},Sf={class:"mono text-sm"},Tf={class:"mono text-sm"},Mf={class:"mono text-sm"},Ef={key:0,class:"muted text-sm"},Of={class:"section-label",style:{"margin-top":"8px"}},Af={class:"muted",style:{"font-weight":"400","text-transform":"none","letter-spacing":"0"}},If={key:1,class:"muted text-sm"},Pf={key:2,class:"timeline-list"},Ff={class:"timeline-time mono muted"},Lf={class:"timeline-dur mono"},Nf={key:0,class:"timeline-trigger mono muted"},Rf={class:"timeline-route mono muted",style:{"margin-left":"auto"}},jf={key:0,class:"muted text-sm",style:{padding:"2px 0"}},Df={key:1,class:"detail-empty"},Hf=Nt({__name:"RenderHeatmap",setup(e){const t=Nt({name:"TreeNode",props:{node:Object,mode:String,threshold:Number,selected:String,expandedIds:Object},emits:["select","toggle"],setup(f,{emit:p}){function k(z){return f.mode==="count"?z.rerenders+z.mountCount:z.avgMs}function q(z){return k(z)>=f.threshold}function U(z){return{selected:f.selected===z.id,hot:q(z)}}return()=>{var Ve,Zt,es;const z=f.node,fe=((Ve=f.expandedIds)==null?void 0:Ve.has(z.id))??!1,xe=z.children.length>0,Be=f.mode==="count"?`${z.rerenders+z.mountCount}`:`${z.avgMs.toFixed(1)}ms`,Ct=f.mode==="count"?"renders":"avg",gt=[],Ae=(Zt=z.element)==null?void 0:Zt.toLowerCase();if(z.element&&z.element!==z.label&&!["div","span","p"].includes(Ae??"")&&gt.push(z.element),z.file!=="unknown"){const je=((es=z.file.split("/").pop())==null?void 0:es.replace(/\.vue$/i,""))??z.file;je!==z.label&&!gt.includes(je)&&gt.push(je)}return Se("div",{class:"tree-node"},[Se("div",{class:["tree-row",U(z)],style:{"--tree-depth":String(z.depth)},onClick:je=>{je.stopPropagation(),p("select",z)}},[Se("span",{class:"tree-rail","aria-hidden":"true"}),Se("button",{class:["tree-toggle",{empty:!xe}],disabled:!xe,onClick:je=>{je.stopPropagation(),xe&&p("toggle",z.id)}},xe?fe?"⌄":"›":""),Se("div",{class:"tree-copy"},[Se("span",{class:"tree-name mono",title:z.label},z.label),gt.length?Se("div",{class:"tree-badges"},gt.slice(0,1).map(je=>Se("span",{class:"tree-badge mono",title:je},je))):null]),Se("div",{class:"tree-metrics mono"},[z.isPersistent?Se("span",{class:"tree-persistent-pill",title:"Layout / persistent component — survives navigation"},"persistent"):null,z.isHydrationMount?Se("span",{class:"tree-hydration-pill",title:"First mount was SSR hydration — not a user-triggered render"},"hydrated"):null,Se("span",{class:"tree-metric-pill"},`${Be} ${Ct}`),z.file&&z.file!=="unknown"?Se("button",{class:"tree-jump-btn",title:`Open ${z.file} in editor`,onClick:je=>{je.stopPropagation(),D(z.file)}},"↗"):null])]),fe&&xe?Se("div",{class:"tree-children"},z.children.map(je=>Se(t,{node:je,mode:f.mode,threshold:f.threshold,selected:f.selected,expandedIds:f.expandedIds,onSelect:ln=>p("select",ln),onToggle:ln=>p("toggle",ln)}))):null])}}}),{renders:s,connected:n}=Ss(),o=re("count"),l=re(""),r=re(3),a=re(16),c=ie({get:()=>o.value==="count"?r.value:a.value,set:f=>{o.value==="count"?r.value=f:a.value=f}}),v=re(!1),d=re(!1),g=re(""),M=re(null),y=re(null),x=re(new Set),N=re([]),J=re(!1);function Y(f){var k;if(f.name&&f.name!=="unknown"&&!/^Component#\d+$/.test(f.name))return f.name;if(f.element)return f.element;const p=(k=f.file.split("/").pop())==null?void 0:k.replace(/\.vue$/i,"");return p&&p!=="unknown"?p:f.name&&f.name!=="unknown"?f.name:`Component#${f.uid}`}function B(f){return`${f.type}: ${f.key}`}function I(f){const p=new Map;for(const U of f)p.set(String(U.uid),{id:String(U.uid),label:Y(U),file:U.file,element:U.element,depth:0,path:[],rerenders:U.rerenders??0,mountCount:U.mountCount??1,avgMs:U.avgMs,triggers:U.triggers.map(B),timeline:U.timeline??[],children:[],parentId:U.parentUid!==void 0?String(U.parentUid):void 0,isPersistent:!!U.isPersistent,isHydrationMount:!!U.isHydrationMount,route:U.route??"/"});const k=[];for(const U of f){const z=p.get(String(U.uid));if(!z)continue;const fe=U.parentUid!==void 0?p.get(String(U.parentUid)):void 0;fe?(z.parentLabel=fe.label,fe.children.push(z)):k.push(z)}function q(U,z=[],fe=0){U.depth=fe,U.path=[...z,U.label],U.children.forEach(xe=>q(xe,U.path,fe+1))}return k.forEach(U=>q(U)),k}function E(f){const p=[];function k(q){p.push(q),q.children.forEach(k)}return f.forEach(k),p}function R(f){return 1+f.children.reduce((p,k)=>p+R(k),0)}function ue(f,p=new Set){return p.add(f.id),f.children.forEach(k=>ue(k,p)),p}function H(f,p,k=[]){const q=[...k,f.id];if(f.id===p)return q;for(const U of f.children){const z=H(U,p,q);if(z)return z}return null}function O(f){if(m(f))return f;for(const p of f.children){const k=O(p);if(k)return k}return null}function C(f){if(!f)return new Set;const p=new Set;function k(q){q.children.length>0&&(p.add(q.id),q.children.forEach(k))}return k(f),p}function oe(f,p){const k=C(f);if(!f||!p)return k;function q(U){const z=U.children.some(xe=>q(xe)),fe=_(U,p);return z&&k.add(U.id),fe||z}return q(f),k}function w(f){return o.value==="count"?f.rerenders+f.mountCount:f.avgMs}function m(f){return w(f)>=c.value}function _(f,p){if(!p)return!0;const k=p.toLowerCase();return f.label.toLowerCase().includes(k)||f.file.toLowerCase().includes(k)||f.path.some(q=>q.toLowerCase().includes(k))||f.triggers.some(q=>q.toLowerCase().includes(k))}function G(f,p){return p?_(f,p)||f.children.some(k=>G(k,p)):!0}function le(f){return m(f)||f.children.some(p=>le(p))}function ce(f){return!l.value||f.route===l.value?!0:f.timeline.some(p=>p.route===l.value)}function j(f){return ce(f)||f.children.some(p=>j(p))}function X(f,p){const k=G(f,p),q=!v.value||le(f),U=!l.value||j(f);return k&&q&&U}function ge(f,p){const k=f.children.map(fe=>ge(fe,p)).filter(fe=>fe!==null),q=!p||_(f,p)||k.length>0,U=!v.value||m(f)||k.length>0,z=!l.value||ce(f)||k.length>0;return!q||!U||!z?null:{...f,children:k}}const _e=ie(()=>d.value?N.value:s.value),Oe=ie(()=>I(_e.value)),Ne=ie(()=>new Map(Oe.value.map(f=>[f.id,f]))),Re=ie(()=>E(Oe.value)),qe=ie(()=>{const f=g.value.trim();return Oe.value.filter(p=>X(p,f))}),we=ie(()=>y.value?qe.value.find(f=>f.id===y.value)??Ne.value.get(y.value)??null:qe.value[0]??Oe.value[0]??null),Xe=ie(()=>{const f=g.value.trim();return we.value?ge(we.value,f):null}),$t=ie(()=>Xe.value?[Xe.value]:[]),jt=ie(()=>qe.value.map((f,p)=>({id:f.id,label:`App ${p+1}`,meta:`${R(f)} nodes`,root:f}))),Ts=ie(()=>{const f=new Set;for(const p of Re.value){p.route&&f.add(p.route);for(const k of p.timeline)k.route&&f.add(k.route)}return[...f].sort()}),ee=ie(()=>Re.value.find(f=>f.id===M.value)??null),Gn=ie(()=>Re.value.reduce((f,p)=>f+p.rerenders+p.mountCount,0)),u=ie(()=>Re.value.filter(f=>m(f)).length),h=ie(()=>{const f=Re.value.filter(p=>p.avgMs>0);return f.length?(f.reduce((p,k)=>p+k.avgMs,0)/f.length).toFixed(1):"0.0"});yt(Oe,f=>{if(!f.length){y.value=null,M.value=null,x.value=new Set,J.value=!1;return}const p=new Set(f.map(U=>U.id));(!y.value||!p.has(y.value))&&(y.value=f[0].id),M.value&&!Re.value.some(U=>U.id===M.value)&&(M.value=null);const k=new Set(Re.value.map(U=>U.id)),q=new Set([...x.value].filter(U=>k.has(U)));if(!J.value){x.value=C(we.value),J.value=!0;return}!g.value.trim()&&M.value&&we.value&&(H(we.value,M.value)??[]).forEach(z=>q.add(z)),x.value=q},{immediate:!0}),yt(g,f=>{if(!we.value)return;const p=f.trim();if(p){x.value=oe(we.value,p);return}if(M.value){const k=H(we.value,M.value);x.value=k?new Set(k):C(we.value);return}x.value=C(we.value)}),yt([v,c,o,qe],()=>{if(!v.value)return;const f=qe.value[0]??null;if(!f){M.value=null;return}const p=O(f);if(!p){M.value=null;return}y.value=f.id,M.value!==p.id&&(M.value=p.id),x.value=new Set(H(f,p.id)??[f.id])});function $(f){M.value=f.id;const p=Oe.value.find(k=>ue(k).has(f.id));p&&(y.value=p.id,x.value=new Set(H(p,f.id)??[p.id]))}function L(f){const p=new Set(x.value);p.has(f)?p.delete(f):p.add(f),x.value=p}function A(f){y.value=f.id,x.value=C(f),J.value=!0}function P(f){const p=f.target;g.value=(p==null?void 0:p.value)??""}function K(){if(d.value){d.value=!1,N.value=[];return}N.value=JSON.parse(JSON.stringify(s.value)),d.value=!0}function V(f){var p;return((p=f.split("/").pop())==null?void 0:p.replace(/\.vue$/i,""))??f}function D(f){var k;if(!f||f==="unknown")return;const p=hs();p&&((k=window.top)==null||k.postMessage({type:"observatory:open-in-editor",file:f},p))}function F(f){return f.path.join(" / ")}function Q(f){return f<1?"<1ms":`${f.toFixed(1)}ms`}function W(f){return`+${(f/1e3).toFixed(2)}s`}return(f,p)=>(S(),T("div",Td,[i("div",Md,[i("div",Ed,[i("button",{class:se({active:o.value==="count"}),onClick:p[0]||(p[0]=k=>o.value="count")},"render count",2),i("button",{class:se({active:o.value==="time"}),onClick:p[1]||(p[1]=k=>o.value="time")},"render time",2)]),i("div",Od,[p[7]||(p[7]=i("span",{class:"muted text-sm"},"threshold",-1)),Lt(i("input",{"onUpdate:modelValue":p[2]||(p[2]=k=>c.value=k),type:"range",min:o.value==="count"?2:4,max:o.value==="count"?20:100,step:o.value==="count"?1:4,style:{width:"90px"}},null,8,Ad),[[Yt,c.value,void 0,{number:!0}]]),i("span",Id,b(c.value)+b(o.value==="count"?"+ renders":"ms+"),1)]),i("button",{class:se({active:v.value}),onClick:p[3]||(p[3]=k=>v.value=!v.value)},"hot only",2),Lt(i("select",{"onUpdate:modelValue":p[4]||(p[4]=k=>l.value=k),class:"route-select mono text-sm",title:"Filter by route"},[p[8]||(p[8]=i("option",{value:""},"all routes",-1)),(S(!0),T(ae,null,be(Ts.value,k=>(S(),T("option",{key:k,value:k},b(k),9,Pd))),128))],512),[[$a,l.value]]),i("button",{class:se({active:d.value}),style:{"margin-left":"auto"},onClick:K},b(d.value?"unfreeze":"freeze snapshot"),3)]),i("div",Fd,[i("div",Ld,[p[9]||(p[9]=i("div",{class:"stat-label"},"components",-1)),i("div",Nd,b(Re.value.length),1)]),i("div",Rd,[p[10]||(p[10]=i("div",{class:"stat-label"},"total renders",-1)),i("div",jd,b(Gn.value),1)]),i("div",Dd,[p[11]||(p[11]=i("div",{class:"stat-label"},"hot",-1)),i("div",Hd,b(u.value),1)]),i("div",Vd,[p[12]||(p[12]=i("div",{class:"stat-label"},"avg time",-1)),i("div",Ud,b(h.value)+"ms",1)])]),i("div",Bd,[i("aside",Kd,[p[13]||(p[13]=i("div",{class:"panel-title"},"apps",-1)),(S(!0),T(ae,null,be(jt.value,k=>(S(),T("button",{key:k.id,class:se(["root-item",{active:y.value===k.id}]),onClick:q=>A(k.root)},[i("div",zd,[i("span",qd,b(k.label),1),i("span",Jd,b(k.root.label),1)]),i("span",Gd,b(k.meta),1)],10,Wd))),128)),jt.value.length?te("",!0):(S(),T("div",Yd,"no apps match"))]),i("section",Qd,[i("div",Xd,[i("input",{value:g.value,class:"search-input mono",placeholder:"Find components...",onInput:P},null,40,Zd)]),i("div",ef,[i("div",tf,[(S(!0),T(ae,null,be($t.value,k=>{var q;return S(),Ot(xt(t),{key:k.id,node:k,mode:o.value,threshold:c.value,selected:(q=ee.value)==null?void 0:q.id,"expanded-ids":x.value,onSelect:$,onToggle:L},null,8,["node","mode","threshold","selected","expanded-ids"])}),128))]),$t.value.length?te("",!0):(S(),T("div",sf,b(xt(n)?"No render activity recorded yet.":"Waiting for connection to the Nuxt app…"),1))])]),i("aside",nf,[ee.value?(S(),T(ae,{key:0},[i("div",of,[i("span",lf,b(ee.value.label),1),i("button",{onClick:p[5]||(p[5]=k=>M.value=null)},"×")]),i("div",rf,[i("span",af,b(ee.value.rerenders+ee.value.mountCount)+" render"+b(ee.value.rerenders+ee.value.mountCount!==1?"s":""),1),i("span",cf,b(ee.value.mountCount)+" mount"+b(ee.value.mountCount!==1?"s":""),1),ee.value.rerenders?(S(),T("span",uf,b(ee.value.rerenders)+" re-render"+b(ee.value.rerenders!==1?"s":""),1)):te("",!0),ee.value.isPersistent?(S(),T("span",df,"persistent")):te("",!0),ee.value.isHydrationMount?(S(),T("span",ff,"hydrated")):te("",!0),i("span",pf,b(ee.value.avgMs.toFixed(1))+"ms avg",1),i("span",{class:se(["detail-pill mono",{hot:m(ee.value)}])},b(m(ee.value)?"hot":"cool"),3)]),p[29]||(p[29]=i("div",{class:"section-label"},"identity",-1)),i("div",hf,[p[14]||(p[14]=i("span",{class:"muted text-sm"},"label",-1)),i("span",vf,b(ee.value.label),1),p[15]||(p[15]=i("span",{class:"muted text-sm"},"path",-1)),i("span",mf,b(F(ee.value)),1),p[16]||(p[16]=i("span",{class:"muted text-sm"},"file",-1)),i("span",gf,[Me(b(ee.value.file)+" ",1),ee.value.file&&ee.value.file!=="unknown"?(S(),T("button",{key:0,class:"jump-btn",title:"Open in editor",onClick:p[6]||(p[6]=k=>D(ee.value.file))}," open ↗ ")):te("",!0)]),p[17]||(p[17]=i("span",{class:"muted text-sm"},"file name",-1)),i("span",_f,b(V(ee.value.file)),1),p[18]||(p[18]=i("span",{class:"muted text-sm"},"parent",-1)),i("span",bf,b(ee.value.parentLabel??"none"),1),p[19]||(p[19]=i("span",{class:"muted text-sm"},"children",-1)),i("span",yf,b(ee.value.children.length),1)]),p[30]||(p[30]=i("div",{class:"section-label"},"rendering",-1)),i("div",xf,[p[20]||(p[20]=i("span",{class:"muted text-sm"},"total renders",-1)),i("span",wf,b(ee.value.rerenders+ee.value.mountCount),1),p[21]||(p[21]=i("span",{class:"muted text-sm"},"re-renders",-1)),i("span",$f,b(ee.value.rerenders),1),p[22]||(p[22]=i("span",{class:"muted text-sm"},"mounts",-1)),i("span",Cf,b(ee.value.mountCount),1),p[23]||(p[23]=i("span",{class:"muted text-sm"},"persistent",-1)),i("span",{class:"mono text-sm",style:Ce({color:ee.value.isPersistent?"var(--amber)":"inherit"})},b(ee.value.isPersistent?"yes — survives navigation":"no"),5),p[24]||(p[24]=i("span",{class:"muted text-sm"},"hydration mount",-1)),i("span",kf,b(ee.value.isHydrationMount?"yes — SSR hydrated":"no"),1),p[25]||(p[25]=i("span",{class:"muted text-sm"},"avg render time",-1)),i("span",Sf,b(ee.value.avgMs.toFixed(1))+"ms",1),p[26]||(p[26]=i("span",{class:"muted text-sm"},"threshold",-1)),i("span",Tf,b(c.value)+b(o.value==="count"?"+ renders":"ms+"),1),p[27]||(p[27]=i("span",{class:"muted text-sm"},"mode",-1)),i("span",Mf,b(o.value==="count"?"re-render count":"render time"),1)]),p[31]||(p[31]=i("div",{class:"section-label"},"triggers",-1)),(S(!0),T(ae,null,be(ee.value.triggers,k=>(S(),T("div",{key:k,class:"trigger-item mono text-sm"},b(k),1))),128)),ee.value.triggers.length?te("",!0):(S(),T("div",Ef,"no triggers recorded")),i("div",Of,[p[28]||(p[28]=Me(" render timeline ",-1)),i("span",Af," ("+b(ee.value.timeline.length)+") ",1)]),ee.value.timeline.length?(S(),T("div",Pf,[(S(!0),T(ae,null,be([...ee.value.timeline].reverse().slice(0,30),(k,q)=>(S(),T("div",{key:q,class:"timeline-row"},[i("span",{class:se(["timeline-kind mono",k.kind])},b(k.kind),3),i("span",Ff,b(W(k.t)),1),i("span",Lf,b(Q(k.durationMs)),1),k.triggerKey?(S(),T("span",Nf,b(k.triggerKey),1)):te("",!0),i("span",Rf,b(k.route),1)]))),128)),ee.value.timeline.length>30?(S(),T("div",jf," … "+b(ee.value.timeline.length-30)+" earlier events ",1)):te("",!0)])):(S(),T("div",If,"no timeline events yet"))],64)):(S(),T("div",Df,"click a component to inspect"))])])]))}}),Vf=Xt(Hf,[["__scopeId","data-v-6dbeb710"]]),Uf={class:"timeline-root"},Bf={class:"stats-row"},Kf={class:"stat-card"},Wf={class:"stat-val"},zf={class:"stat-card"},qf={class:"stat-val",style:{color:"var(--purple)"}},Jf={class:"stat-card"},Gf={class:"stat-val",style:{color:"var(--red)"}},Yf={class:"stat-card"},Qf={class:"stat-val"},Xf={class:"toolbar"},Zf={class:"filter-group"},ep={class:"content-area"},tp={class:"data-table"},sp=["onClick"],np={class:"mono",style:{"font-size":"11px","font-weight":"500"}},op={class:"mono",style:{"font-size":"11px",color:"var(--text2)"}},lp={class:"muted",style:{"font-size":"11px"}},ip={class:"bar-cell"},rp={class:"bar-track"},ap={key:0},cp={colspan:"6",style:{"text-align":"center",color:"var(--text3)",padding:"24px"}},up={key:0,class:"detail-panel"},dp={class:"panel-header"},fp={class:"panel-title"},pp={class:"panel-section"},hp={class:"panel-row"},vp={class:"panel-row"},mp={class:"panel-row"},gp={class:"panel-val mono"},_p={key:0,class:"panel-row"},bp={class:"panel-val mono"},yp={class:"panel-section"},xp={class:"panel-row"},wp={class:"panel-val mono"},$p={class:"panel-row"},Cp={class:"panel-val mono"},kp={class:"panel-row"},Sp={class:"panel-val mono",style:{"font-weight":"500"}},Tp={class:"panel-section"},Mp={class:"panel-row"},Ep={class:"panel-row"},Op={key:0,class:"cancel-notice"},Ap={key:1,class:"active-notice"},Ip=Nt({__name:"TransitionTimeline",setup(e){const{transitions:t,connected:s}=Ss(),n=re("all"),o=re(""),l=re(null),r=ie(()=>{let y=[...t.value];if(o.value){const x=o.value.toLowerCase();y=y.filter(N=>N.transitionName.toLowerCase().includes(x)||N.parentComponent.toLowerCase().includes(x))}return n.value==="cancelled"?y=y.filter(x=>x.cancelled||x.phase==="interrupted"):n.value==="active"?y=y.filter(x=>x.phase==="entering"||x.phase==="leaving"):n.value==="completed"&&(y=y.filter(x=>x.phase==="entered"||x.phase==="left")),y.sort((x,N)=>{const J=x.endTime??x.startTime;return(N.endTime??N.startTime)-J})}),a=ie(()=>({total:t.value.length,active:t.value.filter(y=>y.phase==="entering"||y.phase==="leaving").length,cancelled:t.value.filter(y=>y.cancelled||y.phase==="interrupted").length,avgMs:(()=>{const y=t.value.filter(x=>x.durationMs!==void 0);return y.length?Math.round(y.reduce((x,N)=>x+(N.durationMs??0),0)/y.length):0})()})),c=ie(()=>{const y=r.value;if(!y.length)return[];const x=y.reduce((Y,B)=>Math.min(Y,B.startTime),y[0].startTime),N=y.reduce((Y,B)=>Math.max(Y,B.endTime??B.startTime+400),0),J=Math.max(N-x,1);return y.map(Y=>({left:(Y.startTime-x)/J*100,width:((Y.endTime??Y.startTime+80)-Y.startTime)/J*100}))});function v(y){return y==="entering"||y==="leaving"?"#7f77dd":y==="entered"?"#1d9e75":y==="left"?"#378add":y==="enter-cancelled"||y==="leave-cancelled"?"#e24b4a":y==="interrupted"?"#e09a3a":"#888"}function d(y){return y==="entering"||y==="leaving"?"badge-purple":y==="entered"||y==="left"?"badge-ok":y.includes("cancelled")?"badge-err":y==="interrupted"?"badge-warn":"badge-gray"}function g(y){return y.appear?"✦ appear":y.direction==="enter"?"→ enter":"← leave"}function M(y){return y.appear?"var(--amber)":y.direction==="enter"?"var(--teal)":"var(--blue)"}return(y,x)=>(S(),T("div",Uf,[i("div",Bf,[i("div",Kf,[i("div",Wf,b(a.value.total),1),x[6]||(x[6]=i("div",{class:"stat-label"},"total",-1))]),i("div",zf,[i("div",qf,b(a.value.active),1),x[7]||(x[7]=i("div",{class:"stat-label"},"active",-1))]),i("div",Jf,[i("div",Gf,b(a.value.cancelled),1),x[8]||(x[8]=i("div",{class:"stat-label"},"cancelled",-1))]),i("div",Yf,[i("div",Qf,[Me(b(a.value.avgMs)+" ",1),x[9]||(x[9]=i("span",{class:"stat-unit"},"ms",-1))]),x[10]||(x[10]=i("div",{class:"stat-label"},"avg duration",-1))])]),i("div",Xf,[Lt(i("input",{"onUpdate:modelValue":x[0]||(x[0]=N=>o.value=N),type:"search",placeholder:"filter by name or component…",class:"search-input"},null,512),[[Yt,o.value]]),i("div",Zf,[i("button",{class:se({active:n.value==="all"}),onClick:x[1]||(x[1]=N=>n.value="all")},"All",2),i("button",{class:se({active:n.value==="active"}),onClick:x[2]||(x[2]=N=>n.value="active")},"Active",2),i("button",{class:se({active:n.value==="completed"}),onClick:x[3]||(x[3]=N=>n.value="completed")},"Completed",2),i("button",{class:se({active:n.value==="cancelled","danger-active":n.value==="cancelled"}),onClick:x[4]||(x[4]=N=>n.value="cancelled")}," Cancelled ",2)])]),i("div",ep,[i("div",{class:se(["table-pane",{"has-panel":l.value}])},[i("table",tp,[x[11]||(x[11]=i("thead",null,[i("tr",null,[i("th",{style:{width:"110px"}},"NAME"),i("th",{style:{width:"80px"}},"DIR"),i("th",{style:{width:"90px"}},"PHASE"),i("th",{style:{width:"70px"}},"DURATION"),i("th",null,"COMPONENT"),i("th",null,"TIMELINE")])],-1)),i("tbody",null,[(S(!0),T(ae,null,be(r.value,(N,J)=>{var Y,B,I;return S(),T("tr",{key:N.id,class:se({selected:((Y=l.value)==null?void 0:Y.id)===N.id}),onClick:E=>{var R;return l.value=((R=l.value)==null?void 0:R.id)===N.id?null:N}},[i("td",null,[i("span",np,b(N.transitionName),1)]),i("td",null,[i("span",{class:"mono",style:Ce([{"font-size":"11px"},{color:M(N)}])},b(g(N)),5)]),i("td",null,[i("span",{class:se(["badge",d(N.phase)])},b(N.phase),3)]),i("td",op,b(N.durationMs!==void 0?N.durationMs+"ms":"—"),1),i("td",lp,b(N.parentComponent),1),i("td",ip,[i("div",rp,[i("div",{class:"bar-fill",style:Ce({left:((B=c.value[J])==null?void 0:B.left)+"%",width:Math.max(((I=c.value[J])==null?void 0:I.width)??1,1)+"%",background:v(N.phase),opacity:N.phase==="entering"||N.phase==="leaving"?"0.55":"1"})},null,4)])])],10,sp)}),128)),r.value.length?te("",!0):(S(),T("tr",ap,[i("td",cp,b(xt(s)?"No transitions recorded yet — trigger one on the page.":"Waiting for connection to the Nuxt app…"),1)]))])])],2),ke(On,{name:"panel-slide"},{default:Ds(()=>[l.value?(S(),T("aside",up,[i("div",dp,[i("span",fp,b(l.value.transitionName),1),i("button",{class:"close-btn",onClick:x[5]||(x[5]=N=>l.value=null)},"✕")]),i("div",pp,[i("div",hp,[x[12]||(x[12]=i("span",{class:"panel-key"},"Direction",-1)),i("span",{class:"panel-val",style:Ce({color:M(l.value)})},b(g(l.value)),5)]),i("div",vp,[x[13]||(x[13]=i("span",{class:"panel-key"},"Phase",-1)),i("span",{class:se(["badge",d(l.value.phase)])},b(l.value.phase),3)]),i("div",mp,[x[14]||(x[14]=i("span",{class:"panel-key"},"Component",-1)),i("span",gp,b(l.value.parentComponent),1)]),l.value.mode?(S(),T("div",_p,[x[15]||(x[15]=i("span",{class:"panel-key"},"Mode",-1)),i("span",bp,b(l.value.mode),1)])):te("",!0)]),i("div",yp,[x[19]||(x[19]=i("div",{class:"panel-section-title"},"Timing",-1)),i("div",xp,[x[16]||(x[16]=i("span",{class:"panel-key"},"Start",-1)),i("span",wp,b(l.value.startTime.toFixed(2))+"ms",1)]),i("div",$p,[x[17]||(x[17]=i("span",{class:"panel-key"},"End",-1)),i("span",Cp,b(l.value.endTime!==void 0?l.value.endTime.toFixed(2)+"ms":"—"),1)]),i("div",kp,[x[18]||(x[18]=i("span",{class:"panel-key"},"Duration",-1)),i("span",Sp,b(l.value.durationMs!==void 0?l.value.durationMs+"ms":l.value.phase==="interrupted"?"interrupted":"in progress"),1)])]),i("div",Tp,[x[22]||(x[22]=i("div",{class:"panel-section-title"},"Flags",-1)),i("div",Mp,[x[20]||(x[20]=i("span",{class:"panel-key"},"Appear",-1)),i("span",{class:"panel-val",style:Ce({color:l.value.appear?"var(--amber)":"var(--text3)"})},b(l.value.appear?"yes":"no"),5)]),i("div",Ep,[x[21]||(x[21]=i("span",{class:"panel-key"},"Cancelled",-1)),i("span",{class:"panel-val",style:Ce({color:l.value.cancelled?"var(--red)":"var(--text3)"})},b(l.value.cancelled?"yes":"no"),5)])]),l.value.cancelled?(S(),T("div",Op,[...x[23]||(x[23]=[Me(" This transition was cancelled mid-flight. The element may be stuck in a partial animation state if the interruption was not handled with ",-1),i("code",null,"onEnterCancelled",-1),Me(" / ",-1),i("code",null,"onLeaveCancelled",-1),Me(" . ",-1)])])):te("",!0),l.value.phase==="entering"||l.value.phase==="leaving"?(S(),T("div",Ap,[...x[24]||(x[24]=[Me(" Transition is currently in progress. If it stays in this state longer than expected, the ",-1),i("code",null,"done()",-1),Me(" callback may not be getting called (JS-mode transition stall). ",-1)])])):te("",!0)])):te("",!0)]),_:1})])]))}}),Pp=Xt(Ip,[["__scopeId","data-v-da869dac"]]),Fp={id:"app-root"},Lp={class:"tabbar"},Np=["onClick"],Rp={class:"tab-icon"},jp={class:"tab-content"},Dp=Nt({__name:"App",setup(e){const t={fetch:"fetch",provide:"provide",composables:"composable",heatmap:"heatmap",transitions:"transitions"},s=window.location.pathname.split("/").filter(Boolean).pop()??"",n=re(t[s]??"fetch"),o=[{id:"fetch",label:"useFetch",icon:"⬡"},{id:"provide",label:"provide/inject",icon:"⬡"},{id:"composable",label:"Composables",icon:"⬡"},{id:"heatmap",label:"Heatmap",icon:"⬡"},{id:"transitions",label:"Transitions",icon:"⬡"}];return(l,r)=>(S(),T("div",Fp,[i("nav",Lp,[r[0]||(r[0]=i("div",{class:"tabbar-brand"},"observatory",-1)),(S(),T(ae,null,be(o,a=>i("button",{key:a.id,class:se(["tab-btn",{active:n.value===a.id}]),onClick:c=>n.value=a.id},[i("span",Rp,b(a.icon),1),Me(" "+b(a.label),1)],10,Np)),64))]),i("main",jp,[n.value==="fetch"?(S(),Ot(wc,{key:0})):n.value==="provide"?(S(),Ot(ru,{key:1})):n.value==="composable"?(S(),Ot(Sd,{key:2})):n.value==="heatmap"?(S(),Ot(Vf,{key:3})):n.value==="transitions"?(S(),Ot(Pp,{key:4})):te("",!0)])]))}}),Hp=Xt(Dp,[["__scopeId","data-v-08e3ddb5"]]);Ma(Hp).mount("#app");
17
+ **/let En;const vo=typeof window<"u"&&window.trustedTypes;if(vo)try{En=vo.createPolicy("vue",{createHTML:e=>e})}catch{}const Jl=En?e=>En.createHTML(e):e=>e,Qr="http://www.w3.org/2000/svg",Xr="http://www.w3.org/1998/Math/MathML",ct=typeof document<"u"?document:null,mo=ct&&ct.createElement("template"),Zr={insert:(e,t,s)=>{t.insertBefore(e,s||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,s,n)=>{const o=t==="svg"?ct.createElementNS(Qr,e):t==="mathml"?ct.createElementNS(Xr,e):s?ct.createElement(e,{is:s}):ct.createElement(e);return e==="select"&&n&&n.multiple!=null&&o.setAttribute("multiple",n.multiple),o},createText:e=>ct.createTextNode(e),createComment:e=>ct.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>ct.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,s,n,o,l){const r=s?s.previousSibling:t.lastChild;if(o&&(o===l||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),s),!(o===l||!(o=o.nextSibling)););else{mo.innerHTML=Jl(n==="svg"?`<svg>${e}</svg>`:n==="mathml"?`<math>${e}</math>`:e);const a=mo.content;if(n==="svg"||n==="mathml"){const c=a.firstChild;for(;c.firstChild;)a.appendChild(c.firstChild);a.removeChild(c)}t.insertBefore(a,s)}return[r?r.nextSibling:t.firstChild,s?s.previousSibling:t.lastChild]}},_t="transition",ns="animation",xs=Symbol("_vtc"),Gl={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},ea=$e({},ml,Gl),ta=e=>(e.displayName="Transition",e.props=ea,e),On=ta((e,{slots:t})=>Se(Zi,sa(e),t)),Tt=(e,t=[])=>{Z(e)?e.forEach(s=>s(...t)):e&&e(...t)},go=e=>e?Z(e)?e.some(t=>t.length>1):e.length>1:!1;function sa(e){const t={};for(const m in e)m in Gl||(t[m]=e[m]);if(e.css===!1)return t;const{name:s="v",type:n,duration:o,enterFromClass:l=`${s}-enter-from`,enterActiveClass:r=`${s}-enter-active`,enterToClass:a=`${s}-enter-to`,appearFromClass:c=l,appearActiveClass:v=r,appearToClass:d=a,leaveFromClass:g=`${s}-leave-from`,leaveActiveClass:M=`${s}-leave-active`,leaveToClass:y=`${s}-leave-to`}=e,x=na(o),N=x&&x[0],J=x&&x[1],{onBeforeEnter:Y,onEnter:B,onEnterCancelled:I,onLeave:E,onLeaveCancelled:R,onBeforeAppear:ue=Y,onAppear:H=B,onAppearCancelled:O=I}=t,C=(m,_,G,le)=>{m._enterCancelled=le,Mt(m,_?d:a),Mt(m,_?v:r),G&&G()},oe=(m,_)=>{m._isLeaving=!1,Mt(m,g),Mt(m,y),Mt(m,M),_&&_()},w=m=>(_,G)=>{const le=m?H:B,ce=()=>C(_,m,G);Tt(le,[_,ce]),_o(()=>{Mt(_,m?c:l),at(_,m?d:a),go(le)||bo(_,n,N,ce)})};return $e(t,{onBeforeEnter(m){Tt(Y,[m]),at(m,l),at(m,r)},onBeforeAppear(m){Tt(ue,[m]),at(m,c),at(m,v)},onEnter:w(!1),onAppear:w(!0),onLeave(m,_){m._isLeaving=!0;const G=()=>oe(m,_);at(m,g),m._enterCancelled?(at(m,M),wo(m)):(wo(m),at(m,M)),_o(()=>{m._isLeaving&&(Mt(m,g),at(m,y),go(E)||bo(m,n,J,G))}),Tt(E,[m,G])},onEnterCancelled(m){C(m,!1,void 0,!0),Tt(I,[m])},onAppearCancelled(m){C(m,!0,void 0,!0),Tt(O,[m])},onLeaveCancelled(m){oe(m),Tt(R,[m])}})}function na(e){if(e==null)return null;if(he(e))return[vn(e.enter),vn(e.leave)];{const t=vn(e);return[t,t]}}function vn(e){return li(e)}function at(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.add(s)),(e[xs]||(e[xs]=new Set)).add(t)}function Mt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.remove(n));const s=e[xs];s&&(s.delete(t),s.size||(e[xs]=void 0))}function _o(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let oa=0;function bo(e,t,s,n){const o=e._endId=++oa,l=()=>{o===e._endId&&n()};if(s!=null)return setTimeout(l,s);const{type:r,timeout:a,propCount:c}=la(e,t);if(!r)return n();const v=r+"end";let d=0;const g=()=>{e.removeEventListener(v,M),l()},M=y=>{y.target===e&&++d>=c&&g()};setTimeout(()=>{d<c&&g()},a+1),e.addEventListener(v,M)}function la(e,t){const s=window.getComputedStyle(e),n=x=>(s[x]||"").split(", "),o=n(`${_t}Delay`),l=n(`${_t}Duration`),r=yo(o,l),a=n(`${ns}Delay`),c=n(`${ns}Duration`),v=yo(a,c);let d=null,g=0,M=0;t===_t?r>0&&(d=_t,g=r,M=l.length):t===ns?v>0&&(d=ns,g=v,M=c.length):(g=Math.max(r,v),d=g>0?r>v?_t:ns:null,M=d?d===_t?l.length:c.length:0);const y=d===_t&&/\b(?:transform|all)(?:,|$)/.test(n(`${_t}Property`).toString());return{type:d,timeout:g,propCount:M,hasTransform:y}}function yo(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max(...t.map((s,n)=>xo(s)+xo(e[n])))}function xo(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function wo(e){return(e?e.ownerDocument:document).body.offsetHeight}function ia(e,t,s){const n=e[xs];n&&(t=(t?[t,...n]:[...n]).join(" ")),t==null?e.removeAttribute("class"):s?e.setAttribute("class",t):e.className=t}const $o=Symbol("_vod"),ra=Symbol("_vsh"),aa=Symbol(""),ca=/(?:^|;)\s*display\s*:/;function ua(e,t,s){const n=e.style,o=ye(s);let l=!1;if(s&&!o){if(t)if(ye(t))for(const r of t.split(";")){const a=r.slice(0,r.indexOf(":")).trim();s[a]==null&&Ls(n,a,"")}else for(const r in t)s[r]==null&&Ls(n,r,"");for(const r in s)r==="display"&&(l=!0),Ls(n,r,s[r])}else if(o){if(t!==s){const r=n[aa];r&&(s+=";"+r),n.cssText=s,l=ca.test(s)}}else t&&e.removeAttribute("style");$o in e&&(e[$o]=l?n.display:"",e[ra]&&(n.display="none"))}const Co=/\s*!important$/;function Ls(e,t,s){if(Z(s))s.forEach(n=>Ls(e,t,n));else if(s==null&&(s=""),t.startsWith("--"))e.setProperty(t,s);else{const n=da(e,t);Co.test(s)?e.setProperty(Rt(n),s.replace(Co,""),"important"):e[n]=s}}const ko=["Webkit","Moz","ms"],mn={};function da(e,t){const s=mn[t];if(s)return s;let n=Je(t);if(n!=="filter"&&n in e)return mn[t]=n;n=Vo(n);for(let o=0;o<ko.length;o++){const l=ko[o]+n;if(l in e)return mn[t]=l}return t}const So="http://www.w3.org/1999/xlink";function To(e,t,s,n,o,l=di(t)){n&&t.startsWith("xlink:")?s==null?e.removeAttributeNS(So,t.slice(6,t.length)):e.setAttributeNS(So,t,s):s==null||l&&!Bo(s)?e.removeAttribute(t):e.setAttribute(t,l?"":it(s)?String(s):s)}function Mo(e,t,s,n,o){if(t==="innerHTML"||t==="textContent"){s!=null&&(e[t]=t==="innerHTML"?Jl(s):s);return}const l=e.tagName;if(t==="value"&&l!=="PROGRESS"&&!l.includes("-")){const a=l==="OPTION"?e.getAttribute("value")||"":e.value,c=s==null?e.type==="checkbox"?"on":"":String(s);(a!==c||!("_value"in e))&&(e.value=c),s==null&&e.removeAttribute(t),e._value=s;return}let r=!1;if(s===""||s==null){const a=typeof e[t];a==="boolean"?s=Bo(s):s==null&&a==="string"?(s="",r=!0):a==="number"&&(s=0,r=!0)}try{e[t]=s}catch{}r&&e.removeAttribute(o||t)}function It(e,t,s,n){e.addEventListener(t,s,n)}function fa(e,t,s,n){e.removeEventListener(t,s,n)}const Eo=Symbol("_vei");function pa(e,t,s,n,o=null){const l=e[Eo]||(e[Eo]={}),r=l[t];if(n&&r)r.value=n;else{const[a,c]=ha(t);if(n){const v=l[t]=ga(n,o);It(e,a,v,c)}else r&&(fa(e,a,r,c),l[t]=void 0)}}const Oo=/(?:Once|Passive|Capture)$/;function ha(e){let t;if(Oo.test(e)){t={};let n;for(;n=e.match(Oo);)e=e.slice(0,e.length-n[0].length),t[n[0].toLowerCase()]=!0}return[e[2]===":"?e.slice(3):Rt(e.slice(2)),t]}let gn=0;const va=Promise.resolve(),ma=()=>gn||(va.then(()=>gn=0),gn=Date.now());function ga(e,t){const s=n=>{if(!n._vts)n._vts=Date.now();else if(n._vts<=s.attached)return;Qe(_a(n,s.value),t,5,[n])};return s.value=e,s.attached=ma(),s}function _a(e,t){if(Z(t)){const s=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{s.call(e),e._stopped=!0},t.map(n=>o=>!o._stopped&&n&&n(o))}else return t}const Ao=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,ba=(e,t,s,n,o,l)=>{const r=o==="svg";t==="class"?ia(e,n,r):t==="style"?ua(e,s,n):qs(t)?Pn(t)||pa(e,t,s,n,l):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):ya(e,t,n,r))?(Mo(e,t,n),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&To(e,t,n,r,l,t!=="value")):e._isVueCE&&(xa(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!ye(n)))?Mo(e,Je(t),n,l,t):(t==="true-value"?e._trueValue=n:t==="false-value"&&(e._falseValue=n),To(e,t,n,r))};function ya(e,t,s,n){if(n)return!!(t==="innerHTML"||t==="textContent"||t in e&&Ao(t)&&ne(s));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return Ao(t)&&ye(s)?!1:t in e}function xa(e,t){const s=e._def.props;if(!s)return!1;const n=Je(t);return Array.isArray(s)?s.some(o=>Je(o)===n):Object.keys(s).some(o=>Je(o)===n)}const Ws=e=>{const t=e.props["onUpdate:modelValue"]||!1;return Z(t)?s=>As(t,s):t};function wa(e){e.target.composing=!0}function Io(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Jt=Symbol("_assign");function Po(e,t,s){return t&&(e=e.trim()),s&&(e=Ys(e)),e}const Yt={created(e,{modifiers:{lazy:t,trim:s,number:n}},o){e[Jt]=Ws(o);const l=n||o.props&&o.props.type==="number";It(e,t?"change":"input",r=>{r.target.composing||e[Jt](Po(e.value,s,l))}),(s||l)&&It(e,"change",()=>{e.value=Po(e.value,s,l)}),t||(It(e,"compositionstart",wa),It(e,"compositionend",Io),It(e,"change",Io))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:s,modifiers:{lazy:n,trim:o,number:l}},r){if(e[Jt]=Ws(r),e.composing)return;const a=(l||e.type==="number")&&!/^0\d/.test(e.value)?Ys(e.value):e.value,c=t??"";a!==c&&(document.activeElement===e&&e.type!=="range"&&(n&&t===s||o&&e.value.trim()===c)||(e.value=c))}},$a={deep:!0,created(e,{value:t,modifiers:{number:s}},n){const o=Js(t);It(e,"change",()=>{const l=Array.prototype.filter.call(e.options,r=>r.selected).map(r=>s?Ys(zs(r)):zs(r));e[Jt](e.multiple?o?new Set(l):l:l[0]),e._assigning=!0,al(()=>{e._assigning=!1})}),e[Jt]=Ws(n)},mounted(e,{value:t}){Fo(e,t)},beforeUpdate(e,t,s){e[Jt]=Ws(s)},updated(e,{value:t}){e._assigning||Fo(e,t)}};function Fo(e,t){const s=e.multiple,n=Z(t);if(!(s&&!n&&!Js(t))){for(let o=0,l=e.options.length;o<l;o++){const r=e.options[o],a=zs(r);if(s)if(n){const c=typeof a;c==="string"||c==="number"?r.selected=t.some(v=>String(v)===String(a)):r.selected=pi(t,a)>-1}else r.selected=t.has(a);else if($s(zs(r),t)){e.selectedIndex!==o&&(e.selectedIndex=o);return}}!s&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function zs(e){return"_value"in e?e._value:e.value}const Ca=["ctrl","shift","alt","meta"],ka={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Ca.some(s=>e[`${s}Key`]&&!t.includes(s))},os=(e,t)=>{if(!e)return e;const s=e._withMods||(e._withMods={}),n=t.join(".");return s[n]||(s[n]=((o,...l)=>{for(let r=0;r<t.length;r++){const a=ka[t[r]];if(a&&a(o,t))return}return e(o,...l)}))},Sa=$e({patchProp:ba},Zr);let Lo;function Ta(){return Lo||(Lo=Ir(Sa))}const Ma=((...e)=>{const t=Ta().createApp(...e),{mount:s}=t;return t.mount=n=>{const o=Oa(n);if(!o)return;const l=t._component;!ne(l)&&!l.render&&!l.template&&(l.template=o.innerHTML),o.nodeType===1&&(o.textContent="");const r=s(o,!1,Ea(o));return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),r},t});function Ea(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Oa(e){return ye(e)?document.querySelector(e):e}const Aa=500,Yl=re([]),Ql=re({provides:[],injects:[]}),Jn=re([]),Xl=re([]),Zl=re([]),ei=re(!1);let No=!1,Qt="*";function ls(e){return e?e.map(t=>({...t})):[]}function Ia(e){return e?e.map(t=>({...t})):[]}function Pa(){if(typeof document>"u")return"";if(document.referrer)try{return new URL(document.referrer).origin}catch{}return""}function An(){var e;Qt&&((e=window.top)==null||e.postMessage({type:"observatory:request"},Qt))}function Fa(e){var s;if(((s=e.data)==null?void 0:s.type)!=="observatory:snapshot"||Qt&&e.origin!==Qt)return;const t=e.data.data;Yl.value=ls(t.fetch),Ql.value=t.provideInject?{provides:ls(t.provideInject.provides),injects:ls(t.provideInject.injects)}:{provides:[],injects:[]},Jn.value=ls(t.composables),Xl.value=Ia(t.renders),Zl.value=ls(t.transitions),ei.value=!0}function La(){No||typeof window>"u"||(No=!0,Qt=Pa(),window.addEventListener("message",Fa),window.setInterval(An,Aa),An())}function hs(){return Qt}function Na(){Jn.value=[]}function Ss(){return La(),{fetch:Yl,provideInject:Ql,composables:Jn,renders:Xl,transitions:Zl,connected:ei,refresh:An,clearComposables:Na}}const Ra={class:"view"},ja={class:"stats-row"},Da={class:"stat-card"},Ha={class:"stat-val"},Va={class:"stat-card"},Ua={class:"stat-val",style:{color:"var(--teal)"}},Ba={class:"stat-card"},Ka={class:"stat-val",style:{color:"var(--amber)"}},Wa={class:"stat-card"},za={class:"stat-val",style:{color:"var(--red)"}},qa={class:"toolbar"},Ja={class:"split"},Ga={class:"table-wrap"},Ya={class:"data-table"},Qa=["onClick"],Xa={class:"mono",style:{"font-size":"11px",color:"var(--text2)"}},Za=["title"],ec={class:"muted text-sm"},tc={class:"mono text-sm"},sc={style:{height:"4px",background:"var(--bg2)","border-radius":"2px",overflow:"hidden"}},nc={key:0},oc={colspan:"7",style:{"text-align":"center",color:"var(--text3)",padding:"24px"}},lc={key:0,class:"detail-panel"},ic={class:"detail-header"},rc={class:"mono bold",style:{"font-size":"12px"}},ac={class:"flex gap-2"},cc={class:"meta-grid"},uc={class:"muted text-sm"},dc={class:"mono text-sm",style:{"word-break":"break-all"}},fc={class:"payload-box"},pc={class:"mono text-sm muted"},hc={key:1,class:"detail-empty"},vc={class:"waterfall"},mc={class:"waterfall-header"},gc={key:0,class:"waterfall-body"},_c={class:"mono muted text-sm",style:{width:"140px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap","flex-shrink":"0"}},bc={class:"wf-track"},yc={class:"mono muted text-sm",style:{width:"44px","text-align":"right","flex-shrink":"0"}},xc=Nt({__name:"FetchDashboard",setup(e){const{fetch:t,connected:s}=Ss(),n=re("all"),o=re(""),l=re(null),r=re(!0),a=ie(()=>{const I=[...t.value].sort((R,ue)=>R.startTime-ue.startTime),E=Math.min(...I.map(R=>R.startTime),0);return I.map(R=>({...R,startOffset:Math.max(0,Math.round(R.startTime-E))}))}),c=ie(()=>a.value.find(I=>I.id===l.value)??null),v=ie(()=>({ok:a.value.filter(I=>I.status==="ok").length,pending:a.value.filter(I=>I.status==="pending").length,error:a.value.filter(I=>I.status==="error").length})),d=ie(()=>a.value.filter(I=>{if(n.value!=="all"&&I.status!==n.value)return!1;const E=o.value.toLowerCase();return!(E&&!I.key.toLowerCase().includes(E)&&!I.url.toLowerCase().includes(E))})),g=ie(()=>{if(!c.value)return[];const I=c.value;return[["url",I.url],["status",I.status],["origin",I.origin],["duration",I.ms!=null?`${I.ms}ms`:"—"],["size",I.size?B(I.size):"—"],["cached",I.cached?"yes":"no"]]}),M=ie(()=>{if(!c.value)return"";const I=c.value.payload;if(I===void 0)return"(no payload captured yet)";try{return JSON.stringify(I,null,2)}catch{return String(I)}});function y(I){return{ok:"badge-ok",error:"badge-err",pending:"badge-warn",cached:"badge-gray"}[I]??"badge-gray"}function x(I){return{ok:"var(--teal)",error:"var(--red)",pending:"var(--amber)",cached:"var(--border)"}[I]??"var(--border)"}function N(I){const E=Math.max(...a.value.filter(R=>R.ms).map(R=>R.ms),1);return I.ms!=null?Math.max(4,Math.round(I.ms/E*100)):4}function J(I){const E=Math.max(...a.value.map(R=>R.startOffset+(R.ms??0)),1);return Math.round(I.startOffset/E*100)}function Y(I){const E=Math.max(...a.value.map(R=>R.startOffset+(R.ms??0)),1);return I.ms!=null?Math.round(I.ms/E*100):2}function B(I){return I<1024?`${I}B`:`${(I/1024).toFixed(1)}KB`}return(I,E)=>(S(),T("div",Ra,[i("div",ja,[i("div",Da,[E[7]||(E[7]=i("div",{class:"stat-label"},"total",-1)),i("div",Ha,b(a.value.length),1)]),i("div",Va,[E[8]||(E[8]=i("div",{class:"stat-label"},"success",-1)),i("div",Ua,b(v.value.ok),1)]),i("div",Ba,[E[9]||(E[9]=i("div",{class:"stat-label"},"pending",-1)),i("div",Ka,b(v.value.pending),1)]),i("div",Wa,[E[10]||(E[10]=i("div",{class:"stat-label"},"error",-1)),i("div",za,b(v.value.error),1)])]),i("div",qa,[i("button",{class:se({active:n.value==="all"}),onClick:E[0]||(E[0]=R=>n.value="all")},"all",2),i("button",{class:se({"danger-active":n.value==="error"}),onClick:E[1]||(E[1]=R=>n.value="error")},"errors",2),i("button",{class:se({active:n.value==="pending"}),onClick:E[2]||(E[2]=R=>n.value="pending")},"pending",2),i("button",{class:se({active:n.value==="cached"}),onClick:E[3]||(E[3]=R=>n.value="cached")},"cached",2),Lt(i("input",{"onUpdate:modelValue":E[4]||(E[4]=R=>o.value=R),type:"search",placeholder:"search key or url…",style:{"max-width":"240px","margin-left":"auto"}},null,512),[[Yt,o.value]])]),i("div",Ja,[i("div",Ga,[i("table",Ya,[E[11]||(E[11]=i("thead",null,[i("tr",null,[i("th",null,"key"),i("th",null,"url"),i("th",null,"status"),i("th",null,"origin"),i("th",null,"size"),i("th",null,"time"),i("th",{style:{"min-width":"80px"}},"bar")])],-1)),i("tbody",null,[(S(!0),T(ae,null,be(d.value,R=>{var ue;return S(),T("tr",{key:R.id,class:se({selected:((ue=c.value)==null?void 0:ue.id)===R.id}),onClick:H=>l.value=R.id},[i("td",null,[i("span",Xa,b(R.key),1)]),i("td",null,[i("span",{class:"mono",style:{"font-size":"11px","max-width":"200px",display:"block",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"},title:R.url},b(R.url),9,Za)]),i("td",null,[i("span",{class:se(["badge",y(R.status)])},b(R.status),3)]),i("td",null,[i("span",{class:se(["badge",R.origin==="ssr"?"badge-info":"badge-gray"])},b(R.origin),3)]),i("td",ec,b(R.size?B(R.size):"—"),1),i("td",tc,b(R.ms!=null?`${R.ms}ms`:"—"),1),i("td",null,[i("div",sc,[i("div",{style:Ce({width:`${N(R)}%`,background:x(R.status),height:"100%",borderRadius:"2px"})},null,4)])])],10,Qa)}),128)),d.value.length?te("",!0):(S(),T("tr",nc,[i("td",oc,b(xt(s)?"No fetches recorded yet.":"Waiting for connection to the Nuxt app…"),1)]))])])]),c.value?(S(),T("div",lc,[i("div",ic,[i("span",rc,b(c.value.key),1),i("div",ac,[i("button",{onClick:E[5]||(E[5]=R=>l.value=null)},"×")])]),i("div",cc,[(S(!0),T(ae,null,be(g.value,([R,ue])=>(S(),T(ae,{key:R},[i("span",uc,b(R),1),i("span",dc,b(ue),1)],64))),128))]),E[12]||(E[12]=i("div",{class:"section-label"},"payload",-1)),i("pre",fc,b(M.value),1),E[13]||(E[13]=i("div",{class:"section-label",style:{"margin-top":"10px"}},"source",-1)),i("div",pc,b(c.value.file)+":"+b(c.value.line),1)])):(S(),T("div",hc,"select a call to inspect"))]),i("div",vc,[i("div",mc,[E[14]||(E[14]=i("div",{class:"section-label",style:{"margin-top":"0","margin-bottom":"0"}},"waterfall",-1)),i("button",{class:se({active:r.value}),onClick:E[6]||(E[6]=R=>r.value=!r.value)},b(r.value?"hide":"show"),3)]),r.value?(S(),T("div",gc,[(S(!0),T(ae,null,be(a.value,R=>(S(),T("div",{key:R.id,class:"wf-row"},[i("span",_c,b(R.key),1),i("div",bc,[i("div",{class:"wf-bar",style:Ce({left:`${J(R)}%`,width:`${Math.max(2,Y(R))}%`,background:x(R.status)})},null,4)]),i("span",yc,b(R.ms!=null?`${R.ms}ms`:"—"),1)]))),128))])):te("",!0)])]))}}),Xt=(e,t)=>{const s=e.__vccOpts||e;for(const[n,o]of t)s[n]=o;return s},wc=Xt(xc,[["__scopeId","data-v-4d69a232"]]),$c={class:"view"},Cc={class:"toolbar"},kc=["onClick"],Sc={class:"split"},Tc={class:"graph-area"},Mc={key:0,class:"canvas-stage"},Ec=["width","height","viewBox"],Oc=["d"],Ac=["onClick"],Ic={class:"mono node-label"},Pc={key:0,class:"badge badge-ok badge-xs"},Fc={key:1,class:"badge badge-err badge-xs"},Lc={key:1,class:"graph-empty"},Nc={key:0,class:"detail-panel"},Rc={class:"detail-header"},jc={class:"mono bold",style:{"font-size":"12px"}},Dc={key:0,class:"detail-section"},Hc={class:"section-label"},Vc={class:"detail-list"},Uc={class:"row-main"},Bc={class:"mono text-sm row-key"},Kc=["title"],Wc=["onClick"],zc={key:0,class:"row-warning"},qc={key:1,class:"row-consumers"},Jc={key:0,class:"muted text-sm"},Gc={key:2,class:"muted text-sm",style:{padding:"2px 0","font-size":"11px"}},Yc={key:3,class:"value-box"},Qc={class:"section-label"},Xc={class:"detail-list"},Zc={class:"mono text-sm row-key"},eu={key:0,class:"badge badge-ok"},tu={key:1,class:"badge badge-err"},su=["title"],nu={key:2,class:"muted text-sm",style:{"margin-top":"8px"}},ou={key:1,class:"detail-empty"},Ht=140,Vt=32,lu=72,Ut=18,iu=Nt({__name:"ProvideInjectGraph",setup(e){const{provideInject:t,connected:s}=Ss();function n(w){return w.injects.some(m=>!m.ok)?"var(--red)":w.type==="both"?"var(--blue)":w.type==="provider"?"var(--teal)":"var(--text3)"}function o(w,m){return m==="all"?!0:m==="warn"?w.injects.some(_=>!_.ok):m==="shadow"?w.provides.some(_=>_.isShadowing):w.provides.some(_=>_.key===m)||w.injects.some(_=>_.key===m)}function l(w,m){if(!m)return!0;const _=m.toLowerCase();return w.label.toLowerCase().includes(_)||w.componentName.toLowerCase().includes(_)||w.provides.some(G=>G.key.toLowerCase().includes(_))||w.injects.some(G=>G.key.toLowerCase().includes(_))}function r(w){let m=0;const _=[w];for(;_.length;){const G=_.pop();G.children.length===0?m++:_.push(...G.children)}return m}function a(w){if(typeof w=="string")return w;try{return JSON.stringify(w)}catch{return String(w)}}function c(w){return typeof w=="object"&&w!==null}function v(w){if(w===null)return"null";if(Array.isArray(w))return`Array(${w.length})`;if(typeof w=="object"){const m=Object.keys(w);return m.length?`{ ${m.join(", ")} }`:"{}"}return a(w)}function d(w){if(!c(w))return a(w);try{return JSON.stringify(w,null,2)}catch{return a(w)}}function g(w,m,_){return`${w}:${m}:${_}`}function M(w){return w.split("/").pop()??w}function y(w){var _;if(!w||w==="unknown")return;const m=hs();m&&((_=window.top)==null||_.postMessage({type:"observatory:open-in-editor",file:w},m))}function x(w){return String(w.componentUid)}const N=ie(()=>{const w=new Map,m=new Map;function _(j){const X=x(j),ge=w.get(X);if(ge)return ge;const _e={id:X,label:M(j.componentFile),componentName:j.componentName??M(j.componentFile),componentFile:j.componentFile,type:"consumer",provides:[],injects:[],children:[]};return w.set(X,_e),m.set(X,j.parentUid!==void 0?String(j.parentUid):null),_e}const G=new Map;for(const j of t.value.injects){const X=G.get(j.key)??[];X.push(j),G.set(j.key,X)}const le=new Map;for(const j of t.value.provides)le.set(j.componentUid,j.componentName);for(const j of t.value.injects)le.set(j.componentUid,j.componentName);for(const j of t.value.provides){const X=_(j),ge=G.get(j.key)??[];X.provides.push({key:j.key,val:v(j.valueSnapshot),raw:j.valueSnapshot,reactive:j.isReactive,complex:c(j.valueSnapshot),scope:j.scope??"component",isShadowing:j.isShadowing??!1,consumerUids:ge.map(_e=>_e.componentUid),consumerNames:ge.map(_e=>_e.componentName)})}for(const j of t.value.injects)_(j).injects.push({key:j.key,from:j.resolvedFromFile??null,fromName:j.resolvedFromUid!==void 0?le.get(j.resolvedFromUid)??null:null,ok:j.resolved});for(const j of w.values())j.injects.some(X=>!X.ok)?j.type="error":j.provides.length&&j.injects.length?j.type="both":j.provides.length?j.type="provider":j.type="consumer";const ce=[];for(const[j,X]of w.entries()){const ge=m.get(j),_e=ge?w.get(ge):void 0;_e?_e.children.push(X):ce.push(X)}return ce}),J=re("all"),Y=re(""),B=re(null),I=re(new Set);yt(B,()=>{I.value=new Set});function E(w){const m=new Set(I.value);m.has(w)?m.delete(w):m.add(w),I.value=m}const R=ie(()=>{const w=new Set,m=[...N.value];for(;m.length;){const _=m.pop();_.provides.forEach(G=>w.add(G.key)),_.injects.forEach(G=>w.add(G.key)),m.push(..._.children)}return[...w]}),ue=ie(()=>{function w(m){const _=[],G=[m];for(;G.length;){const ce=G.pop();_.push(ce);for(let j=ce.children.length-1;j>=0;j--)G.push(ce.children[j])}const le=new Map;for(let ce=_.length-1;ce>=0;ce--){const j=_[ce],X=j.children.map(_e=>le.get(_e)??null).filter(_e=>_e!==null);!(o(j,J.value)&&l(j,Y.value))&&!X.length?le.set(j,null):le.set(j,{...j,children:X})}return le.get(m)??null}return N.value.map(w).filter(Boolean)});yt([ue,B],([w,m])=>{if(!m)return;const _=new Set,G=[...w];for(;G.length;){const le=G.pop();_.add(le.id),G.push(...le.children)}_.has(m.id)||(B.value=null)});const H=ie(()=>{const w=[],m=Ut;let _=m;for(const G of ue.value){const le=[{node:G,depth:0,slotLeft:_,parentId:null}];for(;le.length;){const{node:j,depth:X,slotLeft:ge,parentId:_e}=le.pop(),Ne=r(j)*(Ht+Ut)-Ut;w.push({data:j,parentId:_e,x:Math.round(ge+Ne/2),y:Math.round(m+X*(Vt+lu)+Vt/2)});let Re=ge;const qe=[];for(const we of j.children){const Xe=r(we);qe.push({node:we,depth:X+1,slotLeft:Re,parentId:j.id}),Re+=Xe*(Ht+Ut)}for(let we=qe.length-1;we>=0;we--)le.push(qe[we])}const ce=r(G);_+=ce*(Ht+Ut)+Ut*2}return w}),O=ie(()=>H.value.reduce((w,m)=>Math.max(w,m.x+Ht/2+20),520)),C=ie(()=>H.value.reduce((w,m)=>Math.max(w,m.y+Vt/2+20),200)),oe=ie(()=>{const w=new Map(H.value.map(m=>[m.data.id,m]));return H.value.filter(m=>m.parentId!==null).map(m=>{const _=w.get(m.parentId);return{id:`${_.data.id}--${m.data.id}`,x1:_.x,y1:_.y+Vt/2,x2:m.x,y2:m.y-Vt/2}})});return(w,m)=>(S(),T("div",$c,[i("div",Cc,[i("button",{class:se({active:J.value==="all"}),onClick:m[0]||(m[0]=_=>J.value="all")},"all keys",2),(S(!0),T(ae,null,be(R.value,_=>(S(),T("button",{key:_,style:{"font-family":"var(--mono)"},class:se({active:J.value===_}),onClick:G=>J.value=_},b(_),11,kc))),128)),i("button",{style:{"margin-left":"auto"},class:se({"danger-active":J.value==="shadow"}),onClick:m[1]||(m[1]=_=>J.value=J.value==="shadow"?"all":"shadow")}," shadowed ",2),i("button",{class:se({"danger-active":J.value==="warn"}),onClick:m[2]||(m[2]=_=>J.value=J.value==="warn"?"all":"warn")}," warnings ",2),Lt(i("input",{"onUpdate:modelValue":m[3]||(m[3]=_=>Y.value=_),type:"search",placeholder:"search component or key…",style:{"max-width":"200px"}},null,512),[[Yt,Y.value]])]),i("div",Sc,[i("div",Tc,[m[6]||(m[6]=Hr('<div class="legend" data-v-0c07531b><span class="dot" style="background:var(--teal);" data-v-0c07531b></span><span data-v-0c07531b>provides</span><span class="dot" style="background:var(--blue);" data-v-0c07531b></span><span data-v-0c07531b>both</span><span class="dot" style="background:var(--text3);" data-v-0c07531b></span><span data-v-0c07531b>injects</span><span class="dot" style="background:var(--red);" data-v-0c07531b></span><span data-v-0c07531b>missing provider</span></div>',1)),H.value.length?(S(),T("div",Mc,[i("div",{class:"canvas-wrap",style:Ce({width:`${O.value}px`,height:`${C.value}px`})},[(S(),T("svg",{class:"edges-svg",width:O.value,height:C.value,viewBox:`0 0 ${O.value} ${C.value}`},[(S(!0),T(ae,null,be(oe.value,_=>(S(),T("path",{key:_.id,d:`M ${_.x1},${_.y1} C ${_.x1},${(_.y1+_.y2)/2} ${_.x2},${(_.y1+_.y2)/2} ${_.x2},${_.y2}`,class:"edge",fill:"none"},null,8,Oc))),128))],8,Ec)),(S(!0),T(ae,null,be(H.value,_=>{var G;return S(),T("div",{key:_.data.id,class:se(["graph-node",{"is-selected":((G=B.value)==null?void 0:G.id)===_.data.id}]),style:Ce({left:`${_.x-Ht/2}px`,top:`${_.y-Vt/2}px`,width:`${Ht}px`,"--node-color":n(_.data)}),onClick:le=>B.value=_.data},[i("span",{class:"node-dot",style:Ce({background:n(_.data)})},null,4),i("span",Ic,b(_.data.label),1),_.data.provides.length?(S(),T("span",Pc," +"+b(_.data.provides.length),1)):te("",!0),_.data.injects.some(le=>!le.ok)?(S(),T("span",Fc,"!")):te("",!0)],14,Ac)}),128))],4)])):(S(),T("div",Lc,b(xt(s)?"No components match the current provide/inject filter.":"Waiting for connection to the Nuxt app…"),1))]),B.value?(S(),T("div",Nc,[i("div",Rc,[i("span",jc,b(B.value.label),1),B.value.componentFile&&B.value.componentFile!=="unknown"?(S(),T("button",{key:0,class:"jump-btn",title:"Open in editor",onClick:m[4]||(m[4]=_=>y(B.value.componentFile))}," open ↗ ")):te("",!0),i("button",{onClick:m[5]||(m[5]=_=>B.value=null)},"×")]),B.value.provides.length?(S(),T("div",Dc,[i("div",Hc,"provides ("+b(B.value.provides.length)+")",1),i("div",Vc,[(S(!0),T(ae,null,be(B.value.provides,(_,G)=>(S(),T("div",{key:g(B.value.id,_.key,G),class:"provide-row"},[i("div",Uc,[i("span",Bc,b(_.key),1),i("span",{class:"mono text-sm muted row-value-preview",title:_.val},b(_.val),9,Kc),i("span",{class:se(["badge scope-badge",`scope-${_.scope}`])},b(_.scope),3),i("span",{class:se(["badge",_.reactive?"badge-ok":"badge-gray"])},b(_.reactive?"reactive":"static"),3),_.complex?(S(),T("button",{key:0,class:"row-toggle mono",onClick:le=>E(g(B.value.id,_.key,G))},b(I.value.has(g(B.value.id,_.key,G))?"hide":"view"),9,Wc)):te("",!0)]),_.isShadowing?(S(),T("div",zc,"shadows a parent provide with the same key")):te("",!0),_.consumerNames.length?(S(),T("div",qc,[m[7]||(m[7]=i("span",{class:"muted text-sm"},"used by:",-1)),(S(!0),T(ae,null,be(_.consumerNames,le=>(S(),T("span",{key:le,class:"consumer-chip mono"},b(le),1))),128)),_.consumerNames.length?te("",!0):(S(),T("span",Jc,"no consumers"))])):(S(),T("div",Gc,"no consumers detected")),_.complex&&I.value.has(g(B.value.id,_.key,G))?(S(),T("pre",Yc,b(d(_.raw)),1)):te("",!0)]))),128))])])):te("",!0),B.value.injects.length?(S(),T("div",{key:1,class:"detail-section",style:Ce({marginTop:B.value.provides.length?"10px":"0"})},[i("div",Qc,"injects ("+b(B.value.injects.length)+")",1),i("div",Xc,[(S(!0),T(ae,null,be(B.value.injects,_=>(S(),T("div",{key:_.key,class:se(["inject-row",{"inject-miss":!_.ok}])},[i("span",Zc,b(_.key),1),_.ok?(S(),T("span",eu,"resolved")):(S(),T("span",tu,"no provider")),i("span",{class:se(["mono text-sm row-from",_.fromName?"":"muted"]),title:_.from??"undefined"},b(_.fromName??_.from??"undefined"),11,su)],2))),128))])],4)):te("",!0),!B.value.provides.length&&!B.value.injects.length?(S(),T("div",nu," no provide/inject in this component ")):te("",!0)])):(S(),T("div",ou,b(xt(s)?"Click a node to inspect.":"Waiting for connection to the Nuxt app…"),1))])]))}}),ru=Xt(iu,[["__scopeId","data-v-0c07531b"]]),au={class:"view"},cu={class:"stats-row"},uu={class:"stat-card"},du={class:"stat-val"},fu={class:"stat-card"},pu={class:"stat-val",style:{color:"var(--teal)"}},hu={class:"stat-card"},vu={class:"stat-val",style:{color:"var(--red)"}},mu={class:"stat-card"},gu={class:"stat-val"},_u={class:"toolbar"},bu={class:"list"},yu=["onClick"],xu={class:"comp-header"},wu={class:"comp-identity"},$u={class:"comp-name mono"},Cu={class:"comp-file muted mono"},ku={class:"comp-meta"},Su={key:0,class:"badge badge-warn"},Tu={key:1,class:"badge badge-warn"},Mu={key:2,class:"badge badge-err"},Eu={key:3,class:"badge badge-ok"},Ou={key:4,class:"badge badge-gray"},Au={key:0,class:"refs-preview"},Iu=["title"],Pu={class:"ref-chip-key"},Fu={class:"ref-chip-val"},Lu={key:0,class:"ref-chip-shared-dot",title:"global"},Nu={key:0,class:"muted text-sm"},Ru={key:0,class:"leak-banner"},ju={key:1,class:"global-banner"},Du={key:2,class:"muted text-sm",style:{padding:"2px 0 6px"}},Hu=["title","onClick"],Vu={class:"mono text-sm ref-val"},Uu={key:0,class:"badge badge-amber text-xs"},Bu=["onClick"],Ku={class:"section-label",style:{"margin-top":"10px"}},Wu={class:"muted",style:{"font-weight":"400","text-transform":"none","letter-spacing":"0"}},zu={class:"history-list"},qu={class:"history-time mono muted"},Ju={class:"history-key mono"},Gu={class:"history-val mono"},Yu={key:0,class:"muted text-sm",style:{padding:"2px 0"}},Qu={class:"muted text-sm",style:{"min-width":"120px"}},Xu={class:"lc-row"},Zu={class:"mono text-sm"},ed={class:"lc-row"},td={class:"mono text-sm muted"},sd={class:"lc-row"},nd={class:"mono text-sm muted",style:{display:"flex","align-items":"center",gap:"6px"}},od=["onClick"],ld={class:"lc-row"},id={class:"mono text-sm muted"},rd={class:"lc-row"},ad={class:"mono text-sm"},cd={class:"lc-row"},ud={class:"mono text-sm"},dd={key:0,class:"muted text-sm",style:{padding:"16px 0"}},fd={key:0,class:"lookup-panel"},pd={class:"lookup-header"},hd={class:"mono text-sm"},vd={class:"muted text-sm"},md={key:0,class:"muted text-sm",style:{padding:"6px 0"}},gd={class:"mono text-sm"},_d={class:"muted text-sm"},bd={class:"muted text-sm",style:{"margin-left":"auto"}},yd={class:"edit-dialog"},xd={class:"edit-dialog-header"},wd={class:"mono"},$d={key:0,class:"edit-error text-sm"},Cd={class:"edit-actions"},kd=Nt({__name:"ComposableTracker",setup(e){const{composables:t,connected:s,clearComposables:n}=Ss();function o(){var O;const H=hs();H&&(n(),(O=window.top)==null||O.postMessage({type:"observatory:clear-composables"},H))}function l(H){if(H===null)return"null";if(H===void 0)return"undefined";if(typeof H=="string")return`"${H}"`;if(typeof H=="object")try{const O=JSON.stringify(H);return O.length>80?O.slice(0,80)+"…":O}catch{return String(H)}return String(H)}function r(H){return H.split("/").pop()??H}function a(H){var C;if(!H||H==="unknown")return;const O=hs();O&&((C=window.top)==null||C.postMessage({type:"observatory:open-in-editor",file:H},O))}const c=re("all"),v=re(""),d=re(null),g=ie(()=>t.value),M=ie(()=>({mounted:g.value.filter(H=>H.status==="mounted").length,leaks:g.value.filter(H=>H.leak).length})),y=ie(()=>g.value.filter(H=>{if(c.value==="leak"&&!H.leak||c.value==="mounted"&&H.status!=="mounted"||c.value==="unmounted"&&H.status!=="unmounted")return!1;const O=v.value.toLowerCase();if(O){const C=H.name.toLowerCase().includes(O),oe=H.componentFile.toLowerCase().includes(O),w=Object.keys(H.refs).some(_=>_.toLowerCase().includes(O)),m=Object.values(H.refs).some(_=>{try{return String(JSON.stringify(_.value)).toLowerCase().includes(O)}catch{return!1}});if(!C&&!oe&&!w&&!m)return!1}return!0}));function x(H){return[{label:"onMounted",ok:H.lifecycle.hasOnMounted,status:H.lifecycle.hasOnMounted?"registered":"not used"},{label:"onUnmounted",ok:H.lifecycle.hasOnUnmounted,status:H.lifecycle.hasOnUnmounted?"registered":"missing"},{label:"watchers cleaned",ok:H.lifecycle.watchersCleaned,status:H.lifecycle.watchersCleaned?"all stopped":"NOT stopped"},{label:"intervals cleared",ok:H.lifecycle.intervalsCleaned,status:H.lifecycle.intervalsCleaned?"all cleared":"NOT cleared"}]}function N(H){return H==="computed"?"badge-info":H==="reactive"?"badge-purple":"badge-gray"}const J=re(null),Y=ie(()=>{if(!J.value)return[];const H=J.value;return g.value.filter(O=>H in O.refs)});function B(H){J.value=J.value===H?null:H}const I=re(null),E=re("");function R(H,O,C){E.value="",I.value={id:H,key:O,rawValue:JSON.stringify(C,null,2)}}function ue(){var C;if(!I.value)return;let H;try{H=JSON.parse(I.value.rawValue),E.value=""}catch(oe){E.value=`Invalid JSON: ${oe.message}`;return}const O=hs();O&&((C=window.top)==null||C.postMessage({type:"observatory:edit-composable",id:I.value.id,key:I.value.key,value:H},O),I.value=null)}return(H,O)=>(S(),T("div",au,[i("div",cu,[i("div",uu,[O[11]||(O[11]=i("div",{class:"stat-label"},"total",-1)),i("div",du,b(g.value.length),1)]),i("div",fu,[O[12]||(O[12]=i("div",{class:"stat-label"},"mounted",-1)),i("div",pu,b(M.value.mounted),1)]),i("div",hu,[O[13]||(O[13]=i("div",{class:"stat-label"},"leaks",-1)),i("div",vu,b(M.value.leaks),1)]),i("div",mu,[O[14]||(O[14]=i("div",{class:"stat-label"},"instances",-1)),i("div",gu,b(g.value.length),1)])]),i("div",_u,[i("button",{class:se({active:c.value==="all"}),onClick:O[0]||(O[0]=C=>c.value="all")},"all",2),i("button",{class:se({active:c.value==="mounted"}),onClick:O[1]||(O[1]=C=>c.value="mounted")},"mounted",2),i("button",{class:se({"danger-active":c.value==="leak"}),onClick:O[2]||(O[2]=C=>c.value="leak")},"leaks only",2),i("button",{class:se({active:c.value==="unmounted"}),onClick:O[3]||(O[3]=C=>c.value="unmounted")},"unmounted",2),Lt(i("input",{"onUpdate:modelValue":O[4]||(O[4]=C=>v.value=C),type:"search",placeholder:"search name, file, or ref…",style:{"max-width":"220px","margin-left":"auto"}},null,512),[[Yt,v.value]]),i("button",{class:"clear-btn",title:"Clear session history",onClick:o},"clear")]),i("div",bu,[(S(!0),T(ae,null,be(y.value,C=>{var oe;return S(),T("div",{key:C.id,class:se(["comp-card",{leak:C.leak,expanded:d.value===C.id}]),onClick:w=>d.value=d.value===C.id?null:C.id},[i("div",xu,[i("div",wu,[i("span",$u,b(C.name),1),i("span",Cu,b(r(C.componentFile)),1)]),i("div",ku,[C.watcherCount>0&&!C.leak?(S(),T("span",Su,b(C.watcherCount)+"w",1)):te("",!0),C.intervalCount>0&&!C.leak?(S(),T("span",Tu,b(C.intervalCount)+"t",1)):te("",!0),C.leak?(S(),T("span",Mu,"leak")):C.status==="mounted"?(S(),T("span",Eu,"mounted")):(S(),T("span",Ou,"unmounted"))])]),Object.keys(C.refs).length?(S(),T("div",Au,[(S(!0),T(ae,null,be(Object.entries(C.refs).slice(0,3),([w,m])=>{var _,G,le;return S(),T("span",{key:w,class:se(["ref-chip",{"ref-chip--reactive":m.type==="reactive","ref-chip--computed":m.type==="computed","ref-chip--shared":(_=C.sharedKeys)==null?void 0:_.includes(w)}]),title:(G=C.sharedKeys)!=null&&G.includes(w)?"shared global state":""},[i("span",Pu,b(w),1),i("span",Fu,b(l(m.value)),1),(le=C.sharedKeys)!=null&&le.includes(w)?(S(),T("span",Lu)):te("",!0)],10,Iu)}),128)),Object.keys(C.refs).length>3?(S(),T("span",Nu," +"+b(Object.keys(C.refs).length-3)+" more ",1)):te("",!0)])):te("",!0),d.value===C.id?(S(),T("div",{key:1,class:"comp-detail",onClick:O[5]||(O[5]=os(()=>{},["stop"]))},[C.leak?(S(),T("div",Ru,b(C.leakReason),1)):te("",!0),(oe=C.sharedKeys)!=null&&oe.length?(S(),T("div",ju,[O[16]||(O[16]=i("span",{class:"global-dot"},null,-1)),i("span",null,[O[15]||(O[15]=i("strong",null,"global state",-1)),Me(" — "+b(C.sharedKeys.join(", "))+" "+b(C.sharedKeys.length===1?"is":"are")+" shared across all instances of "+b(C.name),1)])])):te("",!0),O[24]||(O[24]=i("div",{class:"section-label"},"reactive state",-1)),Object.keys(C.refs).length?te("",!0):(S(),T("div",Du," no tracked state returned ")),(S(!0),T(ae,null,be(Object.entries(C.refs),([w,m])=>{var _;return S(),T("div",{key:w,class:"ref-row"},[i("span",{class:"mono text-sm ref-key ref-key--clickable",title:`click to see all instances exposing '${w}'`,onClick:os(G=>B(w),["stop"])},b(w),9,Hu),i("span",Vu,b(l(m.value)),1),i("span",{class:se(["badge text-xs",N(m.type)])},b(m.type),3),(_=C.sharedKeys)!=null&&_.includes(w)?(S(),T("span",Uu,"global")):te("",!0),m.type==="ref"?(S(),T("button",{key:1,class:"edit-btn",title:"Edit value",onClick:os(G=>R(C.id,w,m.value),["stop"])}," edit ",8,Bu)):te("",!0)])}),128)),C.history&&C.history.length?(S(),T(ae,{key:3},[i("div",Ku,[O[17]||(O[17]=Me(" change history ",-1)),i("span",Wu," ("+b(C.history.length)+" events) ",1)]),i("div",zu,[(S(!0),T(ae,null,be([...C.history].reverse().slice(0,20),(w,m)=>(S(),T("div",{key:m,class:"history-row"},[i("span",qu,"+"+b((w.t/1e3).toFixed(2))+"s",1),i("span",Ju,b(w.key),1),i("span",Gu,b(l(w.value)),1)]))),128)),C.history.length>20?(S(),T("div",Yu," … "+b(C.history.length-20)+" earlier events ",1)):te("",!0)])],64)):te("",!0),O[25]||(O[25]=i("div",{class:"section-label",style:{"margin-top":"10px"}},"lifecycle",-1)),(S(!0),T(ae,null,be(x(C),w=>(S(),T("div",{key:w.label,class:"lc-row"},[i("span",{class:"lc-dot",style:Ce({background:w.ok?"var(--teal)":"var(--red)"})},null,4),i("span",Qu,b(w.label),1),i("span",{class:"text-sm",style:Ce({color:w.ok?"var(--teal)":"var(--red)"})},b(w.status),5)]))),128)),O[26]||(O[26]=i("div",{class:"section-label",style:{"margin-top":"10px"}},"context",-1)),i("div",Xu,[O[18]||(O[18]=i("span",{class:"muted text-sm",style:{"min-width":"120px"}},"component",-1)),i("span",Zu,b(r(C.componentFile)),1)]),i("div",ed,[O[19]||(O[19]=i("span",{class:"muted text-sm",style:{"min-width":"120px"}},"uid",-1)),i("span",td,b(C.componentUid),1)]),i("div",sd,[O[20]||(O[20]=i("span",{class:"muted text-sm",style:{"min-width":"120px"}},"defined in",-1)),i("span",nd,[Me(b(C.file)+":"+b(C.line)+" ",1),i("button",{class:"jump-btn",title:"Open in editor",onClick:os(w=>a(C.file),["stop"])},"open ↗",8,od)])]),i("div",ld,[O[21]||(O[21]=i("span",{class:"muted text-sm",style:{"min-width":"120px"}},"route",-1)),i("span",id,b(C.route),1)]),i("div",rd,[O[22]||(O[22]=i("span",{class:"muted text-sm",style:{"min-width":"120px"}},"watchers",-1)),i("span",ad,b(C.watcherCount),1)]),i("div",cd,[O[23]||(O[23]=i("span",{class:"muted text-sm",style:{"min-width":"120px"}},"intervals",-1)),i("span",ud,b(C.intervalCount),1)])])):te("",!0)],10,yu)}),128)),y.value.length?te("",!0):(S(),T("div",dd,b(xt(s)?"No composables recorded yet.":"Waiting for connection to the Nuxt app…"),1))]),ke(On,{name:"slide"},{default:Ds(()=>[J.value?(S(),T("div",fd,[i("div",pd,[i("span",hd,b(J.value),1),i("span",vd,"— "+b(Y.value.length)+" instance"+b(Y.value.length!==1?"s":""),1),i("button",{class:"clear-btn",style:{"margin-left":"auto"},onClick:O[6]||(O[6]=C=>J.value=null)},"✕")]),Y.value.length?te("",!0):(S(),T("div",md,"No mounted instances expose this key.")),(S(!0),T(ae,null,be(Y.value,C=>(S(),T("div",{key:C.id,class:"lookup-row"},[i("span",gd,b(C.name),1),i("span",_d,b(r(C.componentFile)),1),i("span",bd,b(C.route),1)]))),128))])):te("",!0)]),_:1}),ke(On,{name:"fade"},{default:Ds(()=>[I.value?(S(),T("div",{key:0,class:"edit-overlay",onClick:O[10]||(O[10]=os(C=>I.value=null,["self"]))},[i("div",yd,[i("div",xd,[O[27]||(O[27]=Me(" edit ",-1)),i("span",wd,b(I.value.key),1),i("button",{class:"clear-btn",style:{"margin-left":"auto"},onClick:O[7]||(O[7]=C=>I.value=null)},"✕")]),O[28]||(O[28]=i("p",{class:"muted text-sm",style:{padding:"4px 0 8px"}},[Me(" Value applied immediately to the live ref. Only "),i("span",{class:"mono"},"ref"),Me(" values are writable. ")],-1)),Lt(i("textarea",{"onUpdate:modelValue":O[8]||(O[8]=C=>I.value.rawValue=C),class:"edit-textarea",rows:"6",spellcheck:"false"},null,512),[[Yt,I.value.rawValue]]),E.value?(S(),T("div",$d,b(E.value),1)):te("",!0),i("div",Cd,[i("button",{onClick:ue},"apply"),i("button",{class:"clear-btn",onClick:O[9]||(O[9]=C=>I.value=null)},"cancel")])])])):te("",!0)]),_:1})]))}}),Sd=Xt(kd,[["__scopeId","data-v-47ca40b0"]]),Td={class:"view"},Md={class:"controls"},Ed={class:"mode-group"},Od={class:"threshold-group"},Ad=["min","max","step"],Id={class:"mono text-sm"},Pd=["value"],Fd={class:"stats-row"},Ld={class:"stat-card"},Nd={class:"stat-val"},Rd={class:"stat-card"},jd={class:"stat-val"},Dd={class:"stat-card"},Hd={class:"stat-val",style:{color:"var(--red)"}},Vd={class:"stat-card"},Ud={class:"stat-val"},Bd={class:"inspector"},Kd={class:"roots-panel"},Wd=["onClick"],zd={class:"root-copy"},qd={class:"root-label mono"},Jd={class:"root-sub muted mono"},Gd={class:"root-meta mono"},Yd={key:0,class:"detail-empty"},Qd={class:"tree-panel"},Xd={class:"tree-toolbar"},Zd=["value"],ef={class:"tree-frame"},tf={class:"tree-canvas"},sf={key:0,class:"detail-empty"},nf={class:"detail-panel"},of={class:"detail-header"},lf={class:"mono bold",style:{"font-size":"12px"}},rf={class:"detail-pill-row"},af={class:"detail-pill mono"},cf={class:"detail-pill mono muted"},uf={key:0,class:"detail-pill mono"},df={key:1,class:"detail-pill mono persistent"},ff={key:2,class:"detail-pill mono hydrated"},pf={class:"detail-pill mono"},hf={class:"meta-grid"},vf={class:"mono text-sm"},mf={class:"mono text-sm"},gf={class:"mono text-sm muted",style:{display:"flex","align-items":"center",gap:"6px"}},_f={class:"mono text-sm"},bf={class:"mono text-sm"},yf={class:"mono text-sm"},xf={class:"meta-grid"},wf={class:"mono text-sm"},$f={class:"mono text-sm"},Cf={class:"mono text-sm"},kf={class:"mono text-sm"},Sf={class:"mono text-sm"},Tf={class:"mono text-sm"},Mf={class:"mono text-sm"},Ef={key:0,class:"muted text-sm"},Of={class:"section-label",style:{"margin-top":"8px"}},Af={class:"muted",style:{"font-weight":"400","text-transform":"none","letter-spacing":"0"}},If={key:1,class:"muted text-sm"},Pf={key:2,class:"timeline-list"},Ff={class:"timeline-time mono muted"},Lf={class:"timeline-dur mono"},Nf={key:0,class:"timeline-trigger mono muted"},Rf={class:"timeline-route mono muted",style:{"margin-left":"auto"}},jf={key:0,class:"muted text-sm",style:{padding:"2px 0"}},Df={key:1,class:"detail-empty"},Hf=Nt({__name:"RenderHeatmap",setup(e){const t=Nt({name:"TreeNode",props:{node:Object,mode:String,threshold:Number,selected:String,expandedIds:Object},emits:["select","toggle"],setup(f,{emit:p}){function k(z){return f.mode==="count"?z.rerenders+z.mountCount:z.avgMs}function q(z){return k(z)>=f.threshold}function U(z){return{selected:f.selected===z.id,hot:q(z)}}return()=>{var Ve,Zt,es;const z=f.node,fe=((Ve=f.expandedIds)==null?void 0:Ve.has(z.id))??!1,xe=z.children.length>0,Be=f.mode==="count"?`${z.rerenders+z.mountCount}`:`${z.avgMs.toFixed(1)}ms`,Ct=f.mode==="count"?"renders":"avg",gt=[],Ae=(Zt=z.element)==null?void 0:Zt.toLowerCase();if(z.element&&z.element!==z.label&&!["div","span","p"].includes(Ae??"")&&gt.push(z.element),z.file!=="unknown"){const je=((es=z.file.split("/").pop())==null?void 0:es.replace(/\.vue$/i,""))??z.file;je!==z.label&&!gt.includes(je)&&gt.push(je)}return Se("div",{class:"tree-node"},[Se("div",{class:["tree-row",U(z)],style:{"--tree-depth":String(z.depth)},onClick:je=>{je.stopPropagation(),p("select",z)}},[Se("span",{class:"tree-rail","aria-hidden":"true"}),Se("button",{class:["tree-toggle",{empty:!xe}],disabled:!xe,onClick:je=>{je.stopPropagation(),xe&&p("toggle",z.id)}},xe?fe?"⌄":"›":""),Se("div",{class:"tree-copy"},[Se("span",{class:"tree-name mono",title:z.label},z.label),gt.length?Se("div",{class:"tree-badges"},gt.slice(0,1).map(je=>Se("span",{class:"tree-badge mono",title:je},je))):null]),Se("div",{class:"tree-metrics mono"},[z.isPersistent?Se("span",{class:"tree-persistent-pill",title:"Layout / persistent component — survives navigation"},"persistent"):null,z.isHydrationMount?Se("span",{class:"tree-hydration-pill",title:"First mount was SSR hydration — not a user-triggered render"},"hydrated"):null,Se("span",{class:"tree-metric-pill"},`${Be} ${Ct}`),z.file&&z.file!=="unknown"?Se("button",{class:"tree-jump-btn",title:`Open ${z.file} in editor`,onClick:je=>{je.stopPropagation(),D(z.file)}},"↗"):null])]),fe&&xe?Se("div",{class:"tree-children"},z.children.map(je=>Se(t,{node:je,mode:f.mode,threshold:f.threshold,selected:f.selected,expandedIds:f.expandedIds,onSelect:ln=>p("select",ln),onToggle:ln=>p("toggle",ln)}))):null])}}}),{renders:s,connected:n}=Ss(),o=re("count"),l=re(""),r=re(3),a=re(16),c=ie({get:()=>o.value==="count"?r.value:a.value,set:f=>{o.value==="count"?r.value=f:a.value=f}}),v=re(!1),d=re(!1),g=re(""),M=re(null),y=re(null),x=re(new Set),N=re([]),J=re(!1);function Y(f){var k;if(f.name&&f.name!=="unknown"&&!/^Component#\d+$/.test(f.name))return f.name;if(f.element)return f.element;const p=(k=f.file.split("/").pop())==null?void 0:k.replace(/\.vue$/i,"");return p&&p!=="unknown"?p:f.name&&f.name!=="unknown"?f.name:`Component#${f.uid}`}function B(f){return`${f.type}: ${f.key}`}function I(f){const p=new Map;for(const U of f)p.set(String(U.uid),{id:String(U.uid),label:Y(U),file:U.file,element:U.element,depth:0,path:[],rerenders:U.rerenders??0,mountCount:U.mountCount??1,avgMs:U.avgMs,triggers:U.triggers.map(B),timeline:U.timeline??[],children:[],parentId:U.parentUid!==void 0?String(U.parentUid):void 0,isPersistent:!!U.isPersistent,isHydrationMount:!!U.isHydrationMount,route:U.route??"/"});const k=[];for(const U of f){const z=p.get(String(U.uid));if(!z)continue;const fe=U.parentUid!==void 0?p.get(String(U.parentUid)):void 0;fe?(z.parentLabel=fe.label,fe.children.push(z)):k.push(z)}function q(U,z=[],fe=0){U.depth=fe,U.path=[...z,U.label],U.children.forEach(xe=>q(xe,U.path,fe+1))}return k.forEach(U=>q(U)),k}function E(f){const p=[];function k(q){p.push(q),q.children.forEach(k)}return f.forEach(k),p}function R(f){return 1+f.children.reduce((p,k)=>p+R(k),0)}function ue(f,p=new Set){return p.add(f.id),f.children.forEach(k=>ue(k,p)),p}function H(f,p,k=[]){const q=[...k,f.id];if(f.id===p)return q;for(const U of f.children){const z=H(U,p,q);if(z)return z}return null}function O(f){if(m(f))return f;for(const p of f.children){const k=O(p);if(k)return k}return null}function C(f){if(!f)return new Set;const p=new Set;function k(q){q.children.length>0&&(p.add(q.id),q.children.forEach(k))}return k(f),p}function oe(f,p){const k=C(f);if(!f||!p)return k;function q(U){const z=U.children.some(xe=>q(xe)),fe=_(U,p);return z&&k.add(U.id),fe||z}return q(f),k}function w(f){return o.value==="count"?f.rerenders+f.mountCount:f.avgMs}function m(f){return w(f)>=c.value}function _(f,p){if(!p)return!0;const k=p.toLowerCase();return f.label.toLowerCase().includes(k)||f.file.toLowerCase().includes(k)||f.path.some(q=>q.toLowerCase().includes(k))||f.triggers.some(q=>q.toLowerCase().includes(k))}function G(f,p){return p?_(f,p)||f.children.some(k=>G(k,p)):!0}function le(f){return m(f)||f.children.some(p=>le(p))}function ce(f){return!l.value||f.route===l.value?!0:f.timeline.some(p=>p.route===l.value)}function j(f){return ce(f)||f.children.some(p=>j(p))}function X(f,p){const k=G(f,p),q=!v.value||le(f),U=!l.value||j(f);return k&&q&&U}function ge(f,p){const k=f.children.map(fe=>ge(fe,p)).filter(fe=>fe!==null),q=!p||_(f,p)||k.length>0,U=!v.value||m(f)||k.length>0,z=!l.value||ce(f)||k.length>0;return!q||!U||!z?null:{...f,children:k}}const _e=ie(()=>d.value?N.value:s.value),Oe=ie(()=>I(_e.value)),Ne=ie(()=>new Map(Oe.value.map(f=>[f.id,f]))),Re=ie(()=>E(Oe.value)),qe=ie(()=>{const f=g.value.trim();return Oe.value.filter(p=>X(p,f))}),we=ie(()=>y.value?qe.value.find(f=>f.id===y.value)??Ne.value.get(y.value)??null:qe.value[0]??Oe.value[0]??null),Xe=ie(()=>{const f=g.value.trim();return we.value?ge(we.value,f):null}),$t=ie(()=>Xe.value?[Xe.value]:[]),jt=ie(()=>qe.value.map((f,p)=>({id:f.id,label:`App ${p+1}`,meta:`${R(f)} nodes`,root:f}))),Ts=ie(()=>{const f=new Set;for(const p of Re.value){p.route&&f.add(p.route);for(const k of p.timeline)k.route&&f.add(k.route)}return[...f].sort()}),ee=ie(()=>Re.value.find(f=>f.id===M.value)??null),Gn=ie(()=>Re.value.reduce((f,p)=>f+p.rerenders+p.mountCount,0)),u=ie(()=>Re.value.filter(f=>m(f)).length),h=ie(()=>{const f=Re.value.filter(p=>p.avgMs>0);return f.length?(f.reduce((p,k)=>p+k.avgMs,0)/f.length).toFixed(1):"0.0"});yt(Oe,f=>{if(!f.length){y.value=null,M.value=null,x.value=new Set,J.value=!1;return}const p=new Set(f.map(U=>U.id));(!y.value||!p.has(y.value))&&(y.value=f[0].id),M.value&&!Re.value.some(U=>U.id===M.value)&&(M.value=null);const k=new Set(Re.value.map(U=>U.id)),q=new Set([...x.value].filter(U=>k.has(U)));if(!J.value){x.value=C(we.value),J.value=!0;return}!g.value.trim()&&M.value&&we.value&&(H(we.value,M.value)??[]).forEach(z=>q.add(z)),x.value=q},{immediate:!0}),yt(g,f=>{if(!we.value)return;const p=f.trim();if(p){x.value=oe(we.value,p);return}if(M.value){const k=H(we.value,M.value);x.value=k?new Set(k):C(we.value);return}x.value=C(we.value)}),yt([v,c,o,qe],()=>{if(!v.value)return;const f=qe.value[0]??null;if(!f){M.value=null;return}const p=O(f);if(!p){M.value=null;return}y.value=f.id,M.value!==p.id&&(M.value=p.id),x.value=new Set(H(f,p.id)??[f.id])});function $(f){M.value=f.id;const p=Oe.value.find(k=>ue(k).has(f.id));p&&(y.value=p.id,x.value=new Set(H(p,f.id)??[p.id]))}function L(f){const p=new Set(x.value);p.has(f)?p.delete(f):p.add(f),x.value=p}function A(f){y.value=f.id,x.value=C(f),J.value=!0}function P(f){const p=f.target;g.value=(p==null?void 0:p.value)??""}function K(){if(d.value){d.value=!1,N.value=[];return}N.value=JSON.parse(JSON.stringify(s.value)),d.value=!0}function V(f){var p;return((p=f.split("/").pop())==null?void 0:p.replace(/\.vue$/i,""))??f}function D(f){var k;if(!f||f==="unknown")return;const p=hs();p&&((k=window.top)==null||k.postMessage({type:"observatory:open-in-editor",file:f},p))}function F(f){return f.path.join(" / ")}function Q(f){return f<1?"<1ms":`${f.toFixed(1)}ms`}function W(f){return`+${(f/1e3).toFixed(2)}s`}return(f,p)=>(S(),T("div",Td,[i("div",Md,[i("div",Ed,[i("button",{class:se({active:o.value==="count"}),onClick:p[0]||(p[0]=k=>o.value="count")},"render count",2),i("button",{class:se({active:o.value==="time"}),onClick:p[1]||(p[1]=k=>o.value="time")},"render time",2)]),i("div",Od,[p[7]||(p[7]=i("span",{class:"muted text-sm"},"threshold",-1)),Lt(i("input",{"onUpdate:modelValue":p[2]||(p[2]=k=>c.value=k),type:"range",min:o.value==="count"?2:4,max:o.value==="count"?20:100,step:o.value==="count"?1:4,style:{width:"90px"}},null,8,Ad),[[Yt,c.value,void 0,{number:!0}]]),i("span",Id,b(c.value)+b(o.value==="count"?"+ renders":"ms+"),1)]),i("button",{class:se({active:v.value}),onClick:p[3]||(p[3]=k=>v.value=!v.value)},"hot only",2),Lt(i("select",{"onUpdate:modelValue":p[4]||(p[4]=k=>l.value=k),class:"route-select mono text-sm",title:"Filter by route"},[p[8]||(p[8]=i("option",{value:""},"all routes",-1)),(S(!0),T(ae,null,be(Ts.value,k=>(S(),T("option",{key:k,value:k},b(k),9,Pd))),128))],512),[[$a,l.value]]),i("button",{class:se({active:d.value}),style:{"margin-left":"auto"},onClick:K},b(d.value?"unfreeze":"freeze snapshot"),3)]),i("div",Fd,[i("div",Ld,[p[9]||(p[9]=i("div",{class:"stat-label"},"components",-1)),i("div",Nd,b(Re.value.length),1)]),i("div",Rd,[p[10]||(p[10]=i("div",{class:"stat-label"},"total renders",-1)),i("div",jd,b(Gn.value),1)]),i("div",Dd,[p[11]||(p[11]=i("div",{class:"stat-label"},"hot",-1)),i("div",Hd,b(u.value),1)]),i("div",Vd,[p[12]||(p[12]=i("div",{class:"stat-label"},"avg time",-1)),i("div",Ud,b(h.value)+"ms",1)])]),i("div",Bd,[i("aside",Kd,[p[13]||(p[13]=i("div",{class:"panel-title"},"apps",-1)),(S(!0),T(ae,null,be(jt.value,k=>(S(),T("button",{key:k.id,class:se(["root-item",{active:y.value===k.id}]),onClick:q=>A(k.root)},[i("div",zd,[i("span",qd,b(k.label),1),i("span",Jd,b(k.root.label),1)]),i("span",Gd,b(k.meta),1)],10,Wd))),128)),jt.value.length?te("",!0):(S(),T("div",Yd,"no apps match"))]),i("section",Qd,[i("div",Xd,[i("input",{value:g.value,class:"search-input mono",placeholder:"Find components...",onInput:P},null,40,Zd)]),i("div",ef,[i("div",tf,[(S(!0),T(ae,null,be($t.value,k=>{var q;return S(),Ot(xt(t),{key:k.id,node:k,mode:o.value,threshold:c.value,selected:(q=ee.value)==null?void 0:q.id,"expanded-ids":x.value,onSelect:$,onToggle:L},null,8,["node","mode","threshold","selected","expanded-ids"])}),128))]),$t.value.length?te("",!0):(S(),T("div",sf,b(xt(n)?"No render activity recorded yet.":"Waiting for connection to the Nuxt app…"),1))])]),i("aside",nf,[ee.value?(S(),T(ae,{key:0},[i("div",of,[i("span",lf,b(ee.value.label),1),i("button",{onClick:p[5]||(p[5]=k=>M.value=null)},"×")]),i("div",rf,[i("span",af,b(ee.value.rerenders+ee.value.mountCount)+" render"+b(ee.value.rerenders+ee.value.mountCount!==1?"s":""),1),i("span",cf,b(ee.value.mountCount)+" mount"+b(ee.value.mountCount!==1?"s":""),1),ee.value.rerenders?(S(),T("span",uf,b(ee.value.rerenders)+" re-render"+b(ee.value.rerenders!==1?"s":""),1)):te("",!0),ee.value.isPersistent?(S(),T("span",df,"persistent")):te("",!0),ee.value.isHydrationMount?(S(),T("span",ff,"hydrated")):te("",!0),i("span",pf,b(ee.value.avgMs.toFixed(1))+"ms avg",1),i("span",{class:se(["detail-pill mono",{hot:m(ee.value)}])},b(m(ee.value)?"hot":"cool"),3)]),p[29]||(p[29]=i("div",{class:"section-label"},"identity",-1)),i("div",hf,[p[14]||(p[14]=i("span",{class:"muted text-sm"},"label",-1)),i("span",vf,b(ee.value.label),1),p[15]||(p[15]=i("span",{class:"muted text-sm"},"path",-1)),i("span",mf,b(F(ee.value)),1),p[16]||(p[16]=i("span",{class:"muted text-sm"},"file",-1)),i("span",gf,[Me(b(ee.value.file)+" ",1),ee.value.file&&ee.value.file!=="unknown"?(S(),T("button",{key:0,class:"jump-btn",title:"Open in editor",onClick:p[6]||(p[6]=k=>D(ee.value.file))}," open ↗ ")):te("",!0)]),p[17]||(p[17]=i("span",{class:"muted text-sm"},"file name",-1)),i("span",_f,b(V(ee.value.file)),1),p[18]||(p[18]=i("span",{class:"muted text-sm"},"parent",-1)),i("span",bf,b(ee.value.parentLabel??"none"),1),p[19]||(p[19]=i("span",{class:"muted text-sm"},"children",-1)),i("span",yf,b(ee.value.children.length),1)]),p[30]||(p[30]=i("div",{class:"section-label"},"rendering",-1)),i("div",xf,[p[20]||(p[20]=i("span",{class:"muted text-sm"},"total renders",-1)),i("span",wf,b(ee.value.rerenders+ee.value.mountCount),1),p[21]||(p[21]=i("span",{class:"muted text-sm"},"re-renders",-1)),i("span",$f,b(ee.value.rerenders),1),p[22]||(p[22]=i("span",{class:"muted text-sm"},"mounts",-1)),i("span",Cf,b(ee.value.mountCount),1),p[23]||(p[23]=i("span",{class:"muted text-sm"},"persistent",-1)),i("span",{class:"mono text-sm",style:Ce({color:ee.value.isPersistent?"var(--amber)":"inherit"})},b(ee.value.isPersistent?"yes — survives navigation":"no"),5),p[24]||(p[24]=i("span",{class:"muted text-sm"},"hydration mount",-1)),i("span",kf,b(ee.value.isHydrationMount?"yes — SSR hydrated":"no"),1),p[25]||(p[25]=i("span",{class:"muted text-sm"},"avg render time",-1)),i("span",Sf,b(ee.value.avgMs.toFixed(1))+"ms",1),p[26]||(p[26]=i("span",{class:"muted text-sm"},"threshold",-1)),i("span",Tf,b(c.value)+b(o.value==="count"?"+ renders":"ms+"),1),p[27]||(p[27]=i("span",{class:"muted text-sm"},"mode",-1)),i("span",Mf,b(o.value==="count"?"re-render count":"render time"),1)]),p[31]||(p[31]=i("div",{class:"section-label"},"triggers",-1)),(S(!0),T(ae,null,be(ee.value.triggers,k=>(S(),T("div",{key:k,class:"trigger-item mono text-sm"},b(k),1))),128)),ee.value.triggers.length?te("",!0):(S(),T("div",Ef,"no triggers recorded")),i("div",Of,[p[28]||(p[28]=Me(" render timeline ",-1)),i("span",Af," ("+b(ee.value.timeline.length)+") ",1)]),ee.value.timeline.length?(S(),T("div",Pf,[(S(!0),T(ae,null,be([...ee.value.timeline].reverse().slice(0,30),(k,q)=>(S(),T("div",{key:q,class:"timeline-row"},[i("span",{class:se(["timeline-kind mono",k.kind])},b(k.kind),3),i("span",Ff,b(W(k.t)),1),i("span",Lf,b(Q(k.durationMs)),1),k.triggerKey?(S(),T("span",Nf,b(k.triggerKey),1)):te("",!0),i("span",Rf,b(k.route),1)]))),128)),ee.value.timeline.length>30?(S(),T("div",jf," … "+b(ee.value.timeline.length-30)+" earlier events ",1)):te("",!0)])):(S(),T("div",If,"no timeline events yet"))],64)):(S(),T("div",Df,"click a component to inspect"))])])]))}}),Vf=Xt(Hf,[["__scopeId","data-v-6dbeb710"]]),Uf={class:"timeline-root"},Bf={class:"stats-row"},Kf={class:"stat-card"},Wf={class:"stat-val"},zf={class:"stat-card"},qf={class:"stat-val",style:{color:"var(--purple)"}},Jf={class:"stat-card"},Gf={class:"stat-val",style:{color:"var(--red)"}},Yf={class:"stat-card"},Qf={class:"stat-val"},Xf={class:"toolbar"},Zf={class:"filter-group"},ep={class:"content-area"},tp={class:"data-table"},sp=["onClick"],np={class:"mono",style:{"font-size":"11px","font-weight":"500"}},op={class:"mono",style:{"font-size":"11px",color:"var(--text2)"}},lp={class:"muted",style:{"font-size":"11px"}},ip={class:"bar-cell"},rp={class:"bar-track"},ap={key:0},cp={colspan:"6",style:{"text-align":"center",color:"var(--text3)",padding:"24px"}},up={key:0,class:"detail-panel"},dp={class:"panel-header"},fp={class:"panel-title"},pp={class:"panel-section"},hp={class:"panel-row"},vp={class:"panel-row"},mp={class:"panel-row"},gp={class:"panel-val mono"},_p={key:0,class:"panel-row"},bp={class:"panel-val mono"},yp={class:"panel-section"},xp={class:"panel-row"},wp={class:"panel-val mono"},$p={class:"panel-row"},Cp={class:"panel-val mono"},kp={class:"panel-row"},Sp={class:"panel-val mono",style:{"font-weight":"500"}},Tp={class:"panel-section"},Mp={class:"panel-row"},Ep={class:"panel-row"},Op={key:0,class:"cancel-notice"},Ap={key:1,class:"active-notice"},Ip=Nt({__name:"TransitionTimeline",setup(e){const{transitions:t,connected:s}=Ss(),n=re("all"),o=re(""),l=re(null),r=ie(()=>{let y=[...t.value];if(o.value){const x=o.value.toLowerCase();y=y.filter(N=>N.transitionName.toLowerCase().includes(x)||N.parentComponent.toLowerCase().includes(x))}return n.value==="cancelled"?y=y.filter(x=>x.cancelled||x.phase==="interrupted"):n.value==="active"?y=y.filter(x=>x.phase==="entering"||x.phase==="leaving"):n.value==="completed"&&(y=y.filter(x=>x.phase==="entered"||x.phase==="left")),y.sort((x,N)=>{const J=x.endTime??x.startTime;return(N.endTime??N.startTime)-J})}),a=ie(()=>({total:t.value.length,active:t.value.filter(y=>y.phase==="entering"||y.phase==="leaving").length,cancelled:t.value.filter(y=>y.cancelled||y.phase==="interrupted").length,avgMs:(()=>{const y=t.value.filter(x=>x.durationMs!==void 0);return y.length?Math.round(y.reduce((x,N)=>x+(N.durationMs??0),0)/y.length):0})()})),c=ie(()=>{const y=r.value;if(!y.length)return[];const x=y.reduce((Y,B)=>Math.min(Y,B.startTime),y[0].startTime),N=y.reduce((Y,B)=>Math.max(Y,B.endTime??B.startTime+400),0),J=Math.max(N-x,1);return y.map(Y=>({left:(Y.startTime-x)/J*100,width:((Y.endTime??Y.startTime+80)-Y.startTime)/J*100}))});function v(y){return y==="entering"||y==="leaving"?"#7f77dd":y==="entered"?"#1d9e75":y==="left"?"#378add":y==="enter-cancelled"||y==="leave-cancelled"?"#e24b4a":y==="interrupted"?"#e09a3a":"#888"}function d(y){return y==="entering"||y==="leaving"?"badge-purple":y==="entered"||y==="left"?"badge-ok":y.includes("cancelled")?"badge-err":y==="interrupted"?"badge-warn":"badge-gray"}function g(y){return y.appear?"✦ appear":y.direction==="enter"?"→ enter":"← leave"}function M(y){return y.appear?"var(--amber)":y.direction==="enter"?"var(--teal)":"var(--blue)"}return(y,x)=>(S(),T("div",Uf,[i("div",Bf,[i("div",Kf,[i("div",Wf,b(a.value.total),1),x[6]||(x[6]=i("div",{class:"stat-label"},"total",-1))]),i("div",zf,[i("div",qf,b(a.value.active),1),x[7]||(x[7]=i("div",{class:"stat-label"},"active",-1))]),i("div",Jf,[i("div",Gf,b(a.value.cancelled),1),x[8]||(x[8]=i("div",{class:"stat-label"},"cancelled",-1))]),i("div",Yf,[i("div",Qf,[Me(b(a.value.avgMs)+" ",1),x[9]||(x[9]=i("span",{class:"stat-unit"},"ms",-1))]),x[10]||(x[10]=i("div",{class:"stat-label"},"avg duration",-1))])]),i("div",Xf,[Lt(i("input",{"onUpdate:modelValue":x[0]||(x[0]=N=>o.value=N),type:"search",placeholder:"filter by name or component…",class:"search-input"},null,512),[[Yt,o.value]]),i("div",Zf,[i("button",{class:se({active:n.value==="all"}),onClick:x[1]||(x[1]=N=>n.value="all")},"All",2),i("button",{class:se({active:n.value==="active"}),onClick:x[2]||(x[2]=N=>n.value="active")},"Active",2),i("button",{class:se({active:n.value==="completed"}),onClick:x[3]||(x[3]=N=>n.value="completed")},"Completed",2),i("button",{class:se({active:n.value==="cancelled","danger-active":n.value==="cancelled"}),onClick:x[4]||(x[4]=N=>n.value="cancelled")}," Cancelled ",2)])]),i("div",ep,[i("div",{class:se(["table-pane",{"has-panel":l.value}])},[i("table",tp,[x[11]||(x[11]=i("thead",null,[i("tr",null,[i("th",{style:{width:"110px"}},"NAME"),i("th",{style:{width:"80px"}},"DIR"),i("th",{style:{width:"90px"}},"PHASE"),i("th",{style:{width:"70px"}},"DURATION"),i("th",null,"COMPONENT"),i("th",null,"TIMELINE")])],-1)),i("tbody",null,[(S(!0),T(ae,null,be(r.value,(N,J)=>{var Y,B,I;return S(),T("tr",{key:N.id,class:se({selected:((Y=l.value)==null?void 0:Y.id)===N.id}),onClick:E=>{var R;return l.value=((R=l.value)==null?void 0:R.id)===N.id?null:N}},[i("td",null,[i("span",np,b(N.transitionName),1)]),i("td",null,[i("span",{class:"mono",style:Ce([{"font-size":"11px"},{color:M(N)}])},b(g(N)),5)]),i("td",null,[i("span",{class:se(["badge",d(N.phase)])},b(N.phase),3)]),i("td",op,b(N.durationMs!==void 0?N.durationMs+"ms":"—"),1),i("td",lp,b(N.parentComponent),1),i("td",ip,[i("div",rp,[i("div",{class:"bar-fill",style:Ce({left:((B=c.value[J])==null?void 0:B.left)+"%",width:Math.max(((I=c.value[J])==null?void 0:I.width)??1,1)+"%",background:v(N.phase),opacity:N.phase==="entering"||N.phase==="leaving"?"0.55":"1"})},null,4)])])],10,sp)}),128)),r.value.length?te("",!0):(S(),T("tr",ap,[i("td",cp,b(xt(s)?"No transitions recorded yet — trigger one on the page.":"Waiting for connection to the Nuxt app…"),1)]))])])],2),ke(On,{name:"panel-slide"},{default:Ds(()=>[l.value?(S(),T("aside",up,[i("div",dp,[i("span",fp,b(l.value.transitionName),1),i("button",{class:"close-btn",onClick:x[5]||(x[5]=N=>l.value=null)},"✕")]),i("div",pp,[i("div",hp,[x[12]||(x[12]=i("span",{class:"panel-key"},"Direction",-1)),i("span",{class:"panel-val",style:Ce({color:M(l.value)})},b(g(l.value)),5)]),i("div",vp,[x[13]||(x[13]=i("span",{class:"panel-key"},"Phase",-1)),i("span",{class:se(["badge",d(l.value.phase)])},b(l.value.phase),3)]),i("div",mp,[x[14]||(x[14]=i("span",{class:"panel-key"},"Component",-1)),i("span",gp,b(l.value.parentComponent),1)]),l.value.mode?(S(),T("div",_p,[x[15]||(x[15]=i("span",{class:"panel-key"},"Mode",-1)),i("span",bp,b(l.value.mode),1)])):te("",!0)]),i("div",yp,[x[19]||(x[19]=i("div",{class:"panel-section-title"},"Timing",-1)),i("div",xp,[x[16]||(x[16]=i("span",{class:"panel-key"},"Start",-1)),i("span",wp,b(l.value.startTime.toFixed(2))+"ms",1)]),i("div",$p,[x[17]||(x[17]=i("span",{class:"panel-key"},"End",-1)),i("span",Cp,b(l.value.endTime!==void 0?l.value.endTime.toFixed(2)+"ms":"—"),1)]),i("div",kp,[x[18]||(x[18]=i("span",{class:"panel-key"},"Duration",-1)),i("span",Sp,b(l.value.durationMs!==void 0?l.value.durationMs+"ms":l.value.phase==="interrupted"?"interrupted":"in progress"),1)])]),i("div",Tp,[x[22]||(x[22]=i("div",{class:"panel-section-title"},"Flags",-1)),i("div",Mp,[x[20]||(x[20]=i("span",{class:"panel-key"},"Appear",-1)),i("span",{class:"panel-val",style:Ce({color:l.value.appear?"var(--amber)":"var(--text3)"})},b(l.value.appear?"yes":"no"),5)]),i("div",Ep,[x[21]||(x[21]=i("span",{class:"panel-key"},"Cancelled",-1)),i("span",{class:"panel-val",style:Ce({color:l.value.cancelled?"var(--red)":"var(--text3)"})},b(l.value.cancelled?"yes":"no"),5)])]),l.value.cancelled?(S(),T("div",Op,[...x[23]||(x[23]=[Me(" This transition was cancelled mid-flight. The element may be stuck in a partial animation state if the interruption was not handled with ",-1),i("code",null,"onEnterCancelled",-1),Me(" / ",-1),i("code",null,"onLeaveCancelled",-1),Me(" . ",-1)])])):te("",!0),l.value.phase==="entering"||l.value.phase==="leaving"?(S(),T("div",Ap,[...x[24]||(x[24]=[Me(" Transition is currently in progress. If it stays in this state longer than expected, the ",-1),i("code",null,"done()",-1),Me(" callback may not be getting called (JS-mode transition stall). ",-1)])])):te("",!0)])):te("",!0)]),_:1})])]))}}),Pp=Xt(Ip,[["__scopeId","data-v-da869dac"]]),Fp={id:"app-root"},Lp={class:"tabbar"},Np=["onClick"],Rp={class:"tab-icon"},jp={class:"tab-content"},Dp=Nt({__name:"App",setup(e){const t={fetch:"fetch",provide:"provide",composables:"composable",heatmap:"heatmap",transitions:"transitions"},s=window.location.pathname.split("/").filter(Boolean).pop()??"",n=re(t[s]??"fetch"),o=[{id:"fetch",label:"useFetch",icon:"⬡"},{id:"provide",label:"provide/inject",icon:"⬡"},{id:"composable",label:"Composables",icon:"⬡"},{id:"heatmap",label:"Heatmap",icon:"⬡"},{id:"transitions",label:"Transitions",icon:"⬡"}];return(l,r)=>(S(),T("div",Fp,[i("nav",Lp,[r[0]||(r[0]=i("div",{class:"tabbar-brand"},"observatory",-1)),(S(),T(ae,null,be(o,a=>i("button",{key:a.id,class:se(["tab-btn",{active:n.value===a.id}]),onClick:c=>n.value=a.id},[i("span",Rp,b(a.icon),1),Me(" "+b(a.label),1)],10,Np)),64))]),i("main",jp,[n.value==="fetch"?(S(),Ot(wc,{key:0})):n.value==="provide"?(S(),Ot(ru,{key:1})):n.value==="composable"?(S(),Ot(Sd,{key:2})):n.value==="heatmap"?(S(),Ot(Vf,{key:3})):n.value==="transitions"?(S(),Ot(Pp,{key:4})):te("",!0)])]))}}),Hp=Xt(Dp,[["__scopeId","data-v-08e3ddb5"]]);Ma(Hp).mount("#app");
@@ -0,0 +1 @@
1
+ .view[data-v-4d69a232]{display:flex;flex-direction:column;height:100%;overflow:hidden;padding:12px;gap:10px}.stats-row[data-v-4d69a232]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;flex-shrink:0}.toolbar[data-v-4d69a232]{display:flex;align-items:center;gap:6px;flex-shrink:0;flex-wrap:wrap}.split[data-v-4d69a232]{display:flex;gap:12px;flex:1;overflow:hidden;min-height:0}.table-wrap[data-v-4d69a232]{flex:1;overflow:auto;border:.5px solid var(--border);border-radius:var(--radius-lg)}.detail-panel[data-v-4d69a232]{width:280px;flex-shrink:0;display:flex;flex-direction:column;gap:8px;overflow:auto;border:.5px solid var(--border);border-radius:var(--radius-lg);padding:12px;background:var(--bg3)}.detail-empty[data-v-4d69a232]{width:280px;flex-shrink:0;display:flex;align-items:center;justify-content:center;color:var(--text3);font-size:12px;border:.5px dashed var(--border);border-radius:var(--radius-lg)}.detail-header[data-v-4d69a232]{display:flex;align-items:center;justify-content:space-between}.meta-grid[data-v-4d69a232]{display:grid;grid-template-columns:auto 1fr;gap:4px 12px;font-size:11px}.section-label[data-v-4d69a232]{font-size:10px;font-weight:500;text-transform:uppercase;letter-spacing:.4px;color:var(--text3);margin-top:6px;min-height:fit-content}.payload-box[data-v-4d69a232]{font-family:var(--mono);font-size:11px;color:var(--text2);background:var(--bg2);border-radius:var(--radius);padding:8px 10px;overflow:auto;white-space:pre;max-height:160px}.waterfall[data-v-4d69a232]{flex-shrink:0;background:var(--bg3);border:.5px solid var(--border);border-radius:var(--radius-lg);padding:10px 12px}.waterfall-header[data-v-4d69a232]{display:flex;align-items:center;justify-content:space-between;gap:8px}.waterfall-body[data-v-4d69a232]{margin-top:6px}.wf-row[data-v-4d69a232]{display:flex;align-items:center;gap:8px;margin-bottom:4px}.wf-track[data-v-4d69a232]{flex:1;position:relative;height:8px;background:var(--bg2);border-radius:2px;overflow:hidden}.wf-bar[data-v-4d69a232]{position:absolute;top:0;height:100%;border-radius:2px;opacity:.8}.view[data-v-0c07531b]{display:flex;flex-direction:column;height:100%;overflow:hidden;padding:12px;gap:10px}.toolbar[data-v-0c07531b]{display:flex;align-items:center;gap:6px;flex-shrink:0;flex-wrap:wrap}.split[data-v-0c07531b]{display:flex;gap:12px;flex:1;overflow:hidden;min-height:0}.graph-area[data-v-0c07531b]{flex:1;overflow:auto;border:.5px solid var(--border);border-radius:var(--radius-lg);padding:12px;background:var(--bg3)}.legend[data-v-0c07531b]{display:flex;align-items:center;gap:12px;font-size:11px;color:var(--text2);margin-bottom:12px}.canvas-stage[data-v-0c07531b]{display:flex;justify-content:center;align-items:flex-start;min-width:100%}.dot[data-v-0c07531b]{width:8px;height:8px;border-radius:50%;display:inline-block;margin-right:2px}.canvas-wrap[data-v-0c07531b]{position:relative}.edges-svg[data-v-0c07531b]{position:absolute;top:0;left:0;pointer-events:none}.edge[data-v-0c07531b]{stroke:var(--border);stroke-width:1.5}.graph-node[data-v-0c07531b]{position:absolute;display:flex;align-items:center;gap:7px;padding:0 10px;height:32px;border-radius:var(--radius);border:.5px solid var(--border);background:var(--bg3);cursor:pointer;transition:border-color .12s,background .12s;overflow:hidden;box-sizing:border-box;white-space:nowrap}.graph-node[data-v-0c07531b]:hover{border-color:var(--text3)}.graph-node.is-selected[data-v-0c07531b]{border-color:var(--node-color);background:color-mix(in srgb,var(--node-color) 8%,transparent)}.node-dot[data-v-0c07531b]{width:7px;height:7px;border-radius:50%;flex-shrink:0}.node-label[data-v-0c07531b]{font-size:11px;flex:1;overflow:hidden;text-overflow:ellipsis}.badge-xs[data-v-0c07531b]{font-size:9px;padding:1px 4px}.detail-panel[data-v-0c07531b]{width:280px;flex-shrink:0;overflow:auto;border:.5px solid var(--border);border-radius:var(--radius-lg);padding:12px;background:var(--bg3);display:flex;flex-direction:column;gap:4px;min-height:0}.detail-empty[data-v-0c07531b]{width:280px;display:flex;align-items:center;justify-content:center;color:var(--text3);font-size:12px;border:.5px dashed var(--border);border-radius:var(--radius-lg);flex-shrink:0}.graph-empty[data-v-0c07531b]{display:flex;align-items:center;justify-content:center;min-height:180px;color:var(--text3);font-size:12px}.detail-header[data-v-0c07531b]{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.section-label[data-v-0c07531b]{font-size:10px;font-weight:500;text-transform:uppercase;letter-spacing:.4px;color:var(--text3);margin:8px 0 5px}.detail-section[data-v-0c07531b]{display:flex;flex-direction:column;min-height:0}.detail-list[data-v-0c07531b]{display:flex;flex-direction:column;gap:3px;overflow:auto;max-height:220px;padding-right:2px}.provide-row[data-v-0c07531b]{display:flex;flex-direction:column;gap:4px;padding:5px 8px;background:var(--bg2);border-radius:var(--radius);margin-bottom:3px}.row-warning[data-v-0c07531b]{font-size:11px;color:var(--amber);padding:2px 0}.row-consumers[data-v-0c07531b]{display:flex;flex-wrap:wrap;align-items:center;gap:4px;padding:2px 0}.consumer-chip[data-v-0c07531b]{font-size:10px;padding:1px 6px;border-radius:4px;background:color-mix(in srgb,var(--blue) 10%,var(--bg3));border:.5px solid color-mix(in srgb,var(--blue) 30%,var(--border));color:var(--text2)}.scope-badge[data-v-0c07531b]{font-size:10px;padding:1px 6px;border-radius:4px}.scope-global[data-v-0c07531b]{background:color-mix(in srgb,var(--amber) 15%,transparent);border:.5px solid color-mix(in srgb,var(--amber) 40%,var(--border));color:color-mix(in srgb,var(--amber) 80%,var(--text))}.scope-layout[data-v-0c07531b]{background:color-mix(in srgb,var(--purple) 15%,transparent);border:.5px solid color-mix(in srgb,var(--purple) 40%,var(--border));color:color-mix(in srgb,var(--purple) 80%,var(--text))}.scope-component[data-v-0c07531b]{background:var(--bg3);border:.5px solid var(--border);color:var(--text3)}.row-main[data-v-0c07531b]{display:flex;align-items:center;gap:8px;min-width:0}.row-key[data-v-0c07531b]{min-width:100px;color:var(--text2);flex-shrink:0}.row-value-preview[data-v-0c07531b]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.row-toggle[data-v-0c07531b]{padding:2px 8px;font-size:10px}.value-box[data-v-0c07531b]{font-family:var(--mono);font-size:11px;color:var(--text2);background:#0000001a;border-radius:var(--radius);padding:8px 10px;white-space:pre-wrap;word-break:break-word;overflow:auto;max-height:180px}.inject-row[data-v-0c07531b]{display:flex;align-items:center;gap:8px;padding:5px 8px;background:var(--bg2);border-radius:var(--radius);margin-bottom:3px}.row-from[data-v-0c07531b]{margin-left:auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.inject-miss[data-v-0c07531b]{background:#e24b4a14}.jump-btn[data-v-0c07531b]{font-size:10px;padding:1px 6px;border:.5px solid var(--border);border-radius:var(--radius);background:transparent;color:var(--text3);cursor:pointer;flex-shrink:0;font-family:var(--mono)}.jump-btn[data-v-0c07531b]:hover{border-color:var(--teal);color:var(--teal);background:color-mix(in srgb,var(--teal) 8%,transparent)}.view[data-v-47ca40b0]{display:flex;flex-direction:column;height:100%;overflow:hidden;padding:12px;gap:10px}.stats-row[data-v-47ca40b0]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;flex-shrink:0}.toolbar[data-v-47ca40b0]{display:flex;align-items:center;gap:6px;flex-shrink:0;flex-wrap:wrap}.clear-btn[data-v-47ca40b0]{color:var(--text3);border-color:var(--border);flex-shrink:0}.clear-btn[data-v-47ca40b0]:hover{color:var(--red);border-color:var(--red);background:transparent}.list[data-v-47ca40b0]{flex:1;overflow:auto;display:flex;flex-direction:column;gap:5px;min-height:0}.comp-card[data-v-47ca40b0]{background:var(--bg3);border:.5px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;cursor:pointer;flex-shrink:0}.comp-card[data-v-47ca40b0]:hover{border-color:var(--text3)}.comp-card.leak[data-v-47ca40b0]{border-left:2px solid var(--red);border-radius:0 var(--radius-lg) var(--radius-lg) 0}.comp-card.expanded[data-v-47ca40b0]{border-color:var(--purple)}.comp-header[data-v-47ca40b0]{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;gap:8px}.comp-identity[data-v-47ca40b0]{display:flex;align-items:baseline;gap:6px;min-width:0;flex:1}.comp-name[data-v-47ca40b0]{font-size:12px;font-weight:500;color:var(--text);flex-shrink:0}.comp-file[data-v-47ca40b0]{font-size:11px;color:var(--text3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.comp-meta[data-v-47ca40b0]{display:flex;align-items:center;gap:5px;flex-shrink:0}.refs-preview[data-v-47ca40b0]{display:flex;flex-wrap:wrap;gap:4px;padding:0 12px 8px;align-items:center}.ref-chip[data-v-47ca40b0]{display:inline-flex;align-items:center;gap:4px;padding:2px 7px;border-radius:4px;background:var(--bg2);border:.5px solid var(--border);font-size:11px;font-family:var(--mono);max-width:220px;overflow:hidden}.ref-chip--reactive[data-v-47ca40b0]{border-color:color-mix(in srgb,var(--purple) 40%,var(--border));background:color-mix(in srgb,var(--purple) 8%,var(--bg2))}.ref-chip--computed[data-v-47ca40b0]{border-color:color-mix(in srgb,var(--blue) 40%,var(--border));background:color-mix(in srgb,var(--blue) 8%,var(--bg2))}.ref-chip-key[data-v-47ca40b0]{color:var(--text2);flex-shrink:0}.ref-chip-val[data-v-47ca40b0]{color:var(--teal);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.comp-detail[data-v-47ca40b0]{padding:4px 12px 12px;border-top:.5px solid var(--border);display:flex;flex-direction:column;gap:3px}.leak-banner[data-v-47ca40b0]{background:color-mix(in srgb,var(--red) 12%,transparent);border:.5px solid color-mix(in srgb,var(--red) 40%,var(--border));border-radius:var(--radius);padding:6px 10px;font-size:11px;color:var(--red);margin-bottom:6px;font-family:var(--mono)}.section-label[data-v-47ca40b0]{font-size:10px;font-weight:500;text-transform:uppercase;letter-spacing:.4px;color:var(--text3);margin-top:6px;margin-bottom:3px}.ref-row[data-v-47ca40b0]{display:flex;align-items:center;gap:8px;padding:3px 0}.ref-key[data-v-47ca40b0]{min-width:90px;color:var(--text2);flex-shrink:0}.ref-val[data-v-47ca40b0]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--teal)}.lc-row[data-v-47ca40b0]{display:flex;align-items:center;gap:8px;padding:2px 0}.lc-dot[data-v-47ca40b0]{width:6px;height:6px;border-radius:50%;flex-shrink:0}.ref-chip--shared[data-v-47ca40b0]{border-color:color-mix(in srgb,var(--amber) 50%,var(--border));background:color-mix(in srgb,var(--amber) 10%,var(--bg2))}.ref-chip-shared-dot[data-v-47ca40b0]{display:inline-block;width:5px;height:5px;border-radius:50%;background:var(--amber);flex-shrink:0;margin-left:1px}.global-banner[data-v-47ca40b0]{display:flex;align-items:flex-start;gap:8px;background:color-mix(in srgb,var(--amber) 10%,transparent);border:.5px solid color-mix(in srgb,var(--amber) 40%,var(--border));border-radius:var(--radius);padding:7px 10px;font-size:11px;color:var(--text2);margin-bottom:6px}.global-dot[data-v-47ca40b0]{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--amber);flex-shrink:0;margin-top:3px}.badge-amber[data-v-47ca40b0]{background:color-mix(in srgb,var(--amber) 15%,transparent);color:color-mix(in srgb,var(--amber) 80%,var(--text));border:.5px solid color-mix(in srgb,var(--amber) 40%,var(--border))}.history-list[data-v-47ca40b0]{display:flex;flex-direction:column;gap:1px;background:var(--bg2);border-radius:var(--radius);padding:4px 8px;max-height:180px;overflow-y:auto}.history-row[data-v-47ca40b0]{display:flex;align-items:center;gap:8px;padding:2px 0;font-size:11px;font-family:var(--mono);border-bottom:.5px solid var(--border)}.history-row[data-v-47ca40b0]:last-child{border-bottom:none}.history-time[data-v-47ca40b0]{min-width:52px;color:var(--text3);flex-shrink:0}.history-key[data-v-47ca40b0]{min-width:80px;color:var(--text2);flex-shrink:0}.history-val[data-v-47ca40b0]{color:var(--amber);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.stat-card[data-v-47ca40b0]{background:var(--bg3);border:.5px solid var(--border);border-radius:var(--radius-lg);padding:10px 14px}.stat-label[data-v-47ca40b0]{font-size:10px;font-weight:500;text-transform:uppercase;letter-spacing:.4px;color:var(--text3);margin-bottom:4px}.stat-val[data-v-47ca40b0]{font-size:22px;font-weight:500;line-height:1;color:var(--text)}.ref-key--clickable[data-v-47ca40b0]{cursor:pointer;text-decoration:underline dotted var(--text3);text-underline-offset:2px}.ref-key--clickable[data-v-47ca40b0]:hover{color:var(--purple);text-decoration-color:var(--purple)}.edit-btn[data-v-47ca40b0]{font-size:10px;padding:1px 6px;border-radius:var(--radius);border:.5px solid var(--border);background:transparent;color:var(--text3);cursor:pointer;margin-left:auto;flex-shrink:0;font-family:var(--mono)}.edit-btn[data-v-47ca40b0]:hover{border-color:var(--purple);color:var(--purple);background:color-mix(in srgb,var(--purple) 8%,transparent)}.lookup-panel[data-v-47ca40b0]{flex-shrink:0;border:.5px solid var(--border);border-radius:var(--radius-lg);background:var(--bg3);overflow:hidden}.lookup-header[data-v-47ca40b0]{display:flex;align-items:center;gap:6px;padding:7px 12px;border-bottom:.5px solid var(--border);background:var(--bg2)}.lookup-row[data-v-47ca40b0]{display:flex;align-items:center;gap:8px;padding:5px 12px;border-bottom:.5px solid var(--border)}.lookup-row[data-v-47ca40b0]:last-child{border-bottom:none}.edit-overlay[data-v-47ca40b0]{position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;z-index:100;display:flex;align-items:center;justify-content:center}.edit-dialog[data-v-47ca40b0]{background:var(--bg1, var(--bg2));border:.5px solid var(--border);border-radius:var(--radius-lg);padding:14px 16px;width:380px;max-width:92vw;display:flex;flex-direction:column;gap:6px;box-shadow:0 8px 32px #0000004d}.edit-dialog-header[data-v-47ca40b0]{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text2);margin-bottom:2px}.edit-textarea[data-v-47ca40b0]{width:100%;font-family:var(--mono);font-size:12px;padding:8px 10px;background:var(--bg2);border:.5px solid var(--border);border-radius:var(--radius);color:var(--text);resize:vertical;outline:none}.edit-textarea[data-v-47ca40b0]:focus{border-color:var(--purple)}.edit-error[data-v-47ca40b0]{color:var(--red);font-family:var(--mono)}.edit-actions[data-v-47ca40b0]{display:flex;gap:6px;padding-top:4px}.slide-enter-active[data-v-47ca40b0],.slide-leave-active[data-v-47ca40b0]{transition:opacity .15s,transform .15s}.slide-enter-from[data-v-47ca40b0],.slide-leave-to[data-v-47ca40b0]{opacity:0;transform:translateY(6px)}.fade-enter-active[data-v-47ca40b0],.fade-leave-active[data-v-47ca40b0]{transition:opacity .15s}.fade-enter-from[data-v-47ca40b0],.fade-leave-to[data-v-47ca40b0]{opacity:0}.jump-btn[data-v-47ca40b0]{font-size:10px;padding:1px 6px;border:.5px solid var(--border);border-radius:var(--radius);background:transparent;color:var(--text3);cursor:pointer;flex-shrink:0;font-family:var(--mono)}.jump-btn[data-v-47ca40b0]:hover{border-color:var(--teal);color:var(--teal);background:color-mix(in srgb,var(--teal) 8%,transparent)}.view[data-v-6dbeb710]{display:flex;flex-direction:column;height:100%;overflow:hidden;padding:12px;gap:10px}.controls[data-v-6dbeb710]{display:flex;align-items:center;gap:8px;flex-shrink:0;flex-wrap:wrap}.mode-group[data-v-6dbeb710]{display:flex;gap:2px}.threshold-group[data-v-6dbeb710]{display:flex;align-items:center;gap:6px}.stats-row[data-v-6dbeb710]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;flex-shrink:0}.stat-sub[data-v-6dbeb710]{margin-top:4px;font-size:11px;color:var(--text3)}.inspector[data-v-6dbeb710]{display:grid;grid-template-columns:minmax(220px,280px) minmax(0,1fr) minmax(260px,320px);gap:12px;flex:1;min-height:0}.roots-panel[data-v-6dbeb710],.tree-panel[data-v-6dbeb710],.detail-panel[data-v-6dbeb710]{border:.5px solid var(--border);border-radius:var(--radius-lg);background:var(--bg3);min-height:0}.roots-panel[data-v-6dbeb710],.detail-panel[data-v-6dbeb710]{display:flex;flex-direction:column;overflow:auto;padding:12px;gap:8px}.panel-title[data-v-6dbeb710]{font-size:10px;font-weight:500;text-transform:uppercase;letter-spacing:.4px;color:var(--text3)}.root-item[data-v-6dbeb710]{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg2);color:var(--text);text-align:left}.root-item.active[data-v-6dbeb710]{border-color:var(--teal);background:color-mix(in srgb,var(--teal) 16%,var(--bg2))}.root-label[data-v-6dbeb710]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.root-copy[data-v-6dbeb710]{display:flex;flex-direction:column;min-width:0}.root-sub[data-v-6dbeb710]{font-size:11px}.root-meta[data-v-6dbeb710]{color:var(--text3);font-size:11px}.tree-panel[data-v-6dbeb710]{display:flex;flex-direction:column;overflow:hidden}.tree-toolbar[data-v-6dbeb710]{padding:12px;border-bottom:.5px solid var(--border)}.search-input[data-v-6dbeb710]{width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg2);color:var(--text)}.tree-frame[data-v-6dbeb710]{flex:1;min-height:0;overflow:auto;padding:12px}[data-v-6dbeb710] .tree-canvas{display:inline-block;min-width:100%;width:max-content}[data-v-6dbeb710] .tree-node{margin-bottom:4px}[data-v-6dbeb710] .tree-row{display:grid;grid-template-columns:8px 18px minmax(0,1fr) auto;align-items:center;gap:6px;min-width:0;width:100%;padding:4px 8px;padding-left:calc(8px + (var(--tree-depth, 0) * 16px));border:1px solid transparent;border-radius:var(--radius);cursor:pointer;white-space:nowrap}[data-v-6dbeb710] .tree-row:hover{background:var(--bg2)}[data-v-6dbeb710] .tree-row.selected{background:color-mix(in srgb,var(--teal) 12%,var(--bg2));border-color:var(--teal)}[data-v-6dbeb710] .tree-row.hot{box-shadow:inset 2px 0 0 var(--red)}[data-v-6dbeb710] .tree-toggle{width:16px;height:16px;border:none;background:transparent;color:var(--text3);padding:0;font-size:14px;display:inline-flex;align-items:center;justify-content:center}[data-v-6dbeb710] .tree-toggle:disabled{cursor:default}[data-v-6dbeb710] .tree-toggle.empty{opacity:0}[data-v-6dbeb710] .tree-rail{display:block;width:2px;height:14px;border-radius:999px;background:color-mix(in srgb,var(--border) 75%,transparent)}[data-v-6dbeb710] .tree-copy{display:flex;align-items:center;min-width:0;gap:6px;overflow:hidden}[data-v-6dbeb710] .tree-name{font-size:12px;color:var(--text);min-width:0;overflow:hidden;text-overflow:ellipsis}[data-v-6dbeb710] .tree-badges{display:flex;gap:6px;flex-shrink:0;overflow:hidden}[data-v-6dbeb710] .tree-badge{border:1px solid var(--border);border-radius:999px;padding:2px 7px;font-size:10px;color:var(--text3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:160px}[data-v-6dbeb710] .tree-metrics{display:flex;align-items:center;min-width:92px;justify-content:flex-end;flex-shrink:0;gap:6px}[data-v-6dbeb710] .tree-metric-pill{display:inline-flex;align-items:center;justify-content:center;min-width:78px;padding:2px 8px;border:1px solid var(--border);border-radius:999px;background:var(--bg2);font-size:10px;color:var(--text3)}[data-v-6dbeb710] .tree-persistent-pill{display:inline-flex;align-items:center;padding:2px 8px;border:1px solid color-mix(in srgb,var(--amber) 55%,var(--border));border-radius:999px;background:color-mix(in srgb,var(--amber) 10%,var(--bg2));font-size:10px;color:color-mix(in srgb,var(--amber) 80%,var(--text))}[data-v-6dbeb710] .tree-hydration-pill{display:inline-flex;align-items:center;padding:2px 8px;border:1px solid color-mix(in srgb,var(--teal) 55%,var(--border));border-radius:999px;background:color-mix(in srgb,var(--teal) 10%,var(--bg2));font-size:10px;color:color-mix(in srgb,var(--teal) 80%,var(--text))}[data-v-6dbeb710] .tree-children{margin-left:7px;padding-left:11px;border-left:1px solid color-mix(in srgb,var(--border) 72%,transparent)}.detail-empty[data-v-6dbeb710]{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text3);font-size:12px}.detail-header[data-v-6dbeb710]{display:flex;align-items:center;justify-content:space-between}.meta-grid[data-v-6dbeb710]{display:grid;grid-template-columns:auto 1fr;gap:4px 12px}.detail-pill-row[data-v-6dbeb710]{display:flex;flex-wrap:wrap;gap:6px}.detail-pill[data-v-6dbeb710]{border:1px solid var(--border);border-radius:999px;padding:4px 8px;background:var(--bg2);font-size:11px}.detail-pill.hot[data-v-6dbeb710]{border-color:color-mix(in srgb,var(--red) 50%,var(--border));color:var(--red)}.detail-pill.persistent[data-v-6dbeb710]{border-color:color-mix(in srgb,var(--amber) 55%,var(--border));color:color-mix(in srgb,var(--amber) 80%,var(--text))}.detail-pill.hydrated[data-v-6dbeb710]{border-color:color-mix(in srgb,var(--teal) 55%,var(--border));color:color-mix(in srgb,var(--teal) 80%,var(--text))}.detail-pill.muted[data-v-6dbeb710]{color:var(--text3);border-color:var(--border)}.section-label[data-v-6dbeb710]{font-size:10px;font-weight:500;text-transform:uppercase;letter-spacing:.4px;color:var(--text3);margin-top:8px;margin-bottom:4px}.trigger-item[data-v-6dbeb710]{background:var(--bg2);border-radius:var(--radius);padding:4px 8px;margin-bottom:3px;color:var(--text2)}[data-v-6dbeb710] .tree-jump-btn{display:none;padding:0 4px;border:none;background:transparent;color:var(--text3);font-size:11px;cursor:pointer;line-height:1;flex-shrink:0}[data-v-6dbeb710] .tree-row:hover .tree-jump-btn,[data-v-6dbeb710] .tree-row.selected .tree-jump-btn{display:inline-flex}[data-v-6dbeb710] .tree-jump-btn:hover{color:var(--teal)}.jump-btn[data-v-6dbeb710]{font-size:10px;padding:1px 6px;border:.5px solid var(--border);border-radius:var(--radius);background:transparent;color:var(--text3);cursor:pointer;flex-shrink:0;font-family:var(--mono)}.jump-btn[data-v-6dbeb710]:hover{border-color:var(--teal);color:var(--teal);background:color-mix(in srgb,var(--teal) 8%,transparent)}.route-select[data-v-6dbeb710]{padding:3px 7px;border:.5px solid var(--border);border-radius:var(--radius);background:var(--bg2);color:var(--text);font-size:11px;cursor:pointer;max-width:140px}.timeline-list[data-v-6dbeb710]{display:flex;flex-direction:column;gap:1px;background:var(--bg2);border-radius:var(--radius);padding:4px 8px;max-height:200px;overflow-y:auto}.timeline-row[data-v-6dbeb710]{display:flex;align-items:center;gap:6px;padding:2px 0;font-size:11px;border-bottom:.5px solid var(--border);min-width:0}.timeline-row[data-v-6dbeb710]:last-child{border-bottom:none}.timeline-kind[data-v-6dbeb710]{flex-shrink:0;font-size:10px;font-weight:500;min-width:40px}.timeline-kind.mount[data-v-6dbeb710]{color:var(--teal)}.timeline-kind.update[data-v-6dbeb710]{color:var(--amber)}.timeline-time[data-v-6dbeb710]{flex-shrink:0;min-width:52px;color:var(--text3)}.timeline-dur[data-v-6dbeb710]{flex-shrink:0;min-width:38px;color:var(--text2)}.timeline-trigger[data-v-6dbeb710]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text3);flex:1;min-width:0}.timeline-route[data-v-6dbeb710]{flex-shrink:0;color:var(--text3);font-size:10px}@media(max-width:1180px){.inspector[data-v-6dbeb710]{grid-template-columns:minmax(200px,240px) minmax(0,1fr)}.detail-panel[data-v-6dbeb710]{grid-column:1 / -1;max-height:220px}}.timeline-root[data-v-da869dac]{display:flex;flex-direction:column;height:100%;overflow:hidden}.stats-row[data-v-da869dac]{display:flex;gap:10px;padding:12px 14px 0;flex-shrink:0}.stat-card[data-v-da869dac]{background:var(--bg2);border:.5px solid var(--border);border-radius:var(--radius);padding:8px 14px;min-width:72px;text-align:center}.stat-val[data-v-da869dac]{font-size:20px;font-weight:600;font-family:var(--mono);line-height:1.1}.stat-unit[data-v-da869dac]{font-size:12px;opacity:.6;margin-left:1px}.stat-label[data-v-da869dac]{font-size:10px;color:var(--text3);margin-top:2px;text-transform:uppercase;letter-spacing:.4px}.toolbar[data-v-da869dac]{display:flex;align-items:center;gap:8px;padding:10px 14px;flex-shrink:0;border-bottom:.5px solid var(--border)}.search-input[data-v-da869dac]{flex:1;max-width:260px}.filter-group[data-v-da869dac]{display:flex;gap:4px}.content-area[data-v-da869dac]{display:flex;flex:1;overflow:hidden;min-height:0}.table-pane[data-v-da869dac]{flex:1;overflow:hidden auto;min-width:0}.bar-cell[data-v-da869dac]{width:200px;padding:4px 8px}.bar-track[data-v-da869dac]{position:relative;height:8px;background:var(--bg2);border-radius:4px;overflow:hidden}.bar-fill[data-v-da869dac]{position:absolute;top:0;height:100%;min-width:3px;border-radius:4px;transition:width .15s}.detail-panel[data-v-da869dac]{width:260px;flex-shrink:0;border-left:.5px solid var(--border);overflow-y:auto;background:var(--bg3);padding:0 0 16px}.panel-header[data-v-da869dac]{display:flex;align-items:center;justify-content:space-between;padding:10px 14px 8px;border-bottom:.5px solid var(--border);position:sticky;top:0;background:var(--bg3);z-index:1}.panel-title[data-v-da869dac]{font-family:var(--mono);font-size:13px;font-weight:500}.close-btn[data-v-da869dac]{border:none;background:transparent;color:var(--text3);font-size:11px;padding:2px 6px;cursor:pointer}.panel-section[data-v-da869dac]{padding:10px 14px 6px;border-bottom:.5px solid var(--border)}.panel-section-title[data-v-da869dac]{font-size:10px;font-weight:500;color:var(--text3);text-transform:uppercase;letter-spacing:.4px;margin-bottom:8px}.panel-row[data-v-da869dac]{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:3px 0;font-size:12px}.panel-key[data-v-da869dac]{color:var(--text3);flex-shrink:0}.panel-val[data-v-da869dac]{color:var(--text);text-align:right;word-break:break-all}.cancel-notice[data-v-da869dac],.active-notice[data-v-da869dac]{margin:10px 14px 0;font-size:11px;line-height:1.6;padding:8px 10px;border-radius:var(--radius)}.cancel-notice[data-v-da869dac]{background:#e24b4a1a;color:var(--red);border:.5px solid rgb(226 75 74 / 30%)}.active-notice[data-v-da869dac]{background:#7f77dd1a;color:var(--purple);border:.5px solid rgb(127 119 221 / 30%)}code[data-v-da869dac]{font-family:var(--mono);font-size:10px;background:#00000026;padding:1px 4px;border-radius:3px}.panel-slide-enter-active[data-v-da869dac],.panel-slide-leave-active[data-v-da869dac]{transition:transform .18s ease,opacity .18s ease}.panel-slide-enter-from[data-v-da869dac],.panel-slide-leave-to[data-v-da869dac]{transform:translate(12px);opacity:0}#app-root[data-v-08e3ddb5]{display:flex;flex-direction:column;height:100vh;overflow:hidden}.tabbar[data-v-08e3ddb5]{display:flex;align-items:center;gap:2px;padding:8px 12px 0;border-bottom:.5px solid var(--border);background:var(--bg3);flex-shrink:0}.tabbar-brand[data-v-08e3ddb5]{font-size:11px;font-weight:500;color:var(--purple);letter-spacing:.5px;margin-right:12px;padding-bottom:8px}.tab-btn[data-v-08e3ddb5]{border:none;border-bottom:2px solid transparent;border-radius:0;background:transparent;color:var(--text3);font-size:12px;padding:6px 12px 8px;cursor:pointer;transition:color .12s,border-color .12s;display:flex;align-items:center;gap:5px}.tab-btn[data-v-08e3ddb5]:hover{color:var(--text);background:transparent}.tab-btn.active[data-v-08e3ddb5]{color:var(--purple);border-bottom-color:var(--purple)}.tab-icon[data-v-08e3ddb5]{font-size:10px;opacity:.6}.tab-content[data-v-08e3ddb5]{flex:1;overflow:hidden;display:flex;flex-direction:column}*{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font);background:var(--bg);color:var(--text);font-size:13px;line-height:1.5}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}button{font-family:var(--font);font-size:12px;cursor:pointer;border:.5px solid var(--border);background:transparent;color:var(--text2);padding:4px 10px;border-radius:var(--radius);transition:background .12s}button:hover{background:var(--bg2)}button:active{transform:scale(.98)}button.active{background:#7f77dd26;color:var(--purple);border-color:var(--purple)}button.danger-active{background:#e24b4a1f;color:var(--red);border-color:var(--red)}button.success-active{background:#1d9e751f;color:var(--teal);border-color:var(--teal)}input[type=text],input[type=search]{font-family:var(--font);font-size:12px;border:.5px solid var(--border);background:var(--bg2);color:var(--text);padding:5px 10px;border-radius:var(--radius);outline:none;width:100%}input[type=text]:focus,input[type=search]:focus{border-color:var(--purple);box-shadow:0 0 0 2px #7f77dd33}input[type=range]{accent-color:var(--purple);cursor:pointer}.mono{font-family:var(--mono)}.muted{color:var(--text3)}.text-sm{font-size:11px}.text-xs{font-size:10px}.bold{font-weight:500}.badge{display:inline-block;font-size:10px;font-weight:500;padding:2px 7px;border-radius:99px;white-space:nowrap}.badge-ok{background:#1d9e7526;color:var(--teal)}.badge-err{background:#e24b4a1f;color:var(--red)}.badge-warn{background:#ef9f2726;color:var(--amber)}.badge-info{background:#378add1f;color:var(--blue)}.badge-gray{background:var(--bg2);color:var(--text3);border:.5px solid var(--border)}.badge-purple{background:#7f77dd26;color:var(--purple)}.card{background:var(--bg3);border:.5px solid var(--border);border-radius:var(--radius-lg);padding:12px 14px}.data-table{width:100%;border-collapse:collapse;font-size:12px}.data-table th{text-align:left;font-size:10px;font-weight:500;color:var(--text3);padding:6px 8px;border-bottom:.5px solid var(--border);text-transform:uppercase;letter-spacing:.4px;white-space:nowrap}.data-table td{padding:8px;border-bottom:.5px solid var(--border);color:var(--text);vertical-align:middle}.data-table tr:hover td{background:var(--bg2);cursor:pointer}.data-table tr.selected td{background:#7f77dd14}.stat-card{background:var(--bg2);border-radius:var(--radius);padding:10px 12px}.stat-label{font-size:10px;color:var(--text3);text-transform:uppercase;letter-spacing:.4px;margin-bottom:3px}.stat-val{font-size:20px;font-weight:500}.flex{display:flex}.items-center{align-items:center}.gap-2{gap:8px}.gap-3{gap:12px}.flex-1{flex:1}.overflow-auto{overflow:auto}.p-3{padding:12px}.p-4{padding:16px}.mb-2{margin-bottom:8px}.mb-3{margin-bottom:12px}.mt-2{margin-top:8px}
@@ -38,8 +38,8 @@
38
38
  body { font-family: var(--font); background: var(--bg); color: var(--text); font-size: 13px; }
39
39
  #app { height: 100vh; display: flex; flex-direction: column; }
40
40
  </style>
41
- <script type="module" crossorigin src="/assets/index-B1qWBxxI.js"></script>
42
- <link rel="stylesheet" crossorigin href="/assets/index-XYlDyaMH.css">
41
+ <script type="module" crossorigin src="/assets/index-C04h6V_F.js"></script>
42
+ <link rel="stylesheet" crossorigin href="/assets/index-DgLUAI-9.css">
43
43
  </head>
44
44
  <body>
45
45
  <div id="app"></div>
@@ -182,7 +182,8 @@ function onMessage(event: MessageEvent) {
182
182
 
183
183
  // Always validate the origin of incoming snapshot messages.
184
184
  // Accepting '*' would allow any page to inject arbitrary devtools data.
185
- if (!parentOrigin || event.origin !== parentOrigin) {
185
+ // For local screenshots/dev, allow any origin if parentOrigin is empty (SPA running standalone)
186
+ if (parentOrigin && event.origin !== parentOrigin) {
186
187
  return
187
188
  }
188
189
 
@@ -355,6 +355,7 @@ function formatSize(bytes: number) {
355
355
  letter-spacing: 0.4px;
356
356
  color: var(--text3);
357
357
  margin-top: 6px;
358
+ min-height: fit-content;
358
359
  }
359
360
 
360
361
  .payload-box {
package/dist/module.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "compatibility": {
5
5
  "nuxt": "^3.0.0 || ^4.0.0"
6
6
  },
7
- "version": "0.1.15",
7
+ "version": "0.1.16",
8
8
  "builder": {
9
9
  "@nuxt/module-builder": "1.0.2",
10
10
  "unbuild": "3.6.1"
package/dist/module.mjs CHANGED
@@ -361,8 +361,9 @@ function composableTrackerPlugin() {
361
361
  }
362
362
  const args = path.node.arguments;
363
363
  const loc = path.node.loc;
364
+ const fileName = id.split(/[\\/]/).pop() || id;
364
365
  const meta = t.objectExpression([
365
- t.objectProperty(t.identifier("file"), t.stringLiteral(id)),
366
+ t.objectProperty(t.identifier("file"), t.stringLiteral(fileName)),
366
367
  t.objectProperty(t.identifier("line"), t.numericLiteral(loc?.start.line ?? 0))
367
368
  ]);
368
369
  path.replaceWith(
@@ -80,15 +80,29 @@ export function __devFetchCall(originalFn, url, opts, meta) {
80
80
  if (!registry) {
81
81
  return originalFn(url, opts);
82
82
  }
83
+ function resolveUrl(u) {
84
+ if (u && typeof u === "object" && "value" in u) {
85
+ return resolveUrl(u.value);
86
+ }
87
+ if (typeof u === "function") {
88
+ try {
89
+ return resolveUrl(u());
90
+ } catch {
91
+ return String(u);
92
+ }
93
+ }
94
+ return typeof u === "string" ? u : String(u);
95
+ }
83
96
  const id = `${meta.key}::${Date.now()}`;
84
97
  const startTime = performance.now();
85
98
  const payload = window.__NUXT__?.data ?? {};
86
99
  const fromPayload = Object.prototype.hasOwnProperty.call(payload, meta.key);
87
100
  const origin = fromPayload ? "ssr" : "csr";
101
+ const resolvedUrl = resolveUrl(url);
88
102
  registry.register({
89
103
  id,
90
104
  key: meta.key,
91
- url: typeof url === "string" ? url : String(url),
105
+ url: resolvedUrl,
92
106
  status: fromPayload ? "cached" : "pending",
93
107
  origin,
94
108
  startTime,
@@ -98,7 +112,21 @@ export function __devFetchCall(originalFn, url, opts, meta) {
98
112
  line: meta.line
99
113
  });
100
114
  if (fromPayload) {
101
- return originalFn(url, opts);
115
+ const optsWithHooks = {
116
+ ...opts,
117
+ onResponse: function(ctx) {
118
+ const entry = registry.getAll().find((e) => e.id === id);
119
+ if (entry) {
120
+ registry.update(id, { payload: ctx.response._data });
121
+ }
122
+ if (typeof opts.onResponse === "function") {
123
+ opts.onResponse(ctx);
124
+ }
125
+ },
126
+ onResponseError: typeof opts.onResponseError === "function" ? opts.onResponseError : () => {
127
+ }
128
+ };
129
+ return originalFn(url, optsWithHooks);
102
130
  }
103
131
  return originalFn(url, {
104
132
  ...opts,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nuxt-devtools-observatory",
3
- "version": "0.1.15",
3
+ "version": "0.1.16",
4
4
  "description": "Nuxt DevTools: useFetch Dashboard, provide/inject Graph, Composable Tracker, Render Heatmap",
5
5
  "type": "module",
6
6
  "main": "./dist/module.mjs",
@@ -37,7 +37,9 @@
37
37
  "typecheck": "vue-tsc --noEmit",
38
38
  "test": "vitest run",
39
39
  "test:watch": "vitest",
40
- "test:coverage": "vitest run --coverage"
40
+ "test:coverage": "vitest run --coverage",
41
+ "test:screenshots": "playwright test scripts/playwright/screenshot-trackers.spec.ts",
42
+ "capture:screenshots": "node scripts/playwright/capture-observatory-screenshots.cjs"
41
43
  },
42
44
  "dependencies": {
43
45
  "@babel/generator": "^7.29.1",
@@ -51,6 +53,7 @@
51
53
  "@nuxt/kit": "^3.0.0",
52
54
  "@nuxt/module-builder": "^1.0.2",
53
55
  "@nuxt/schema": "^3.0.0",
56
+ "@playwright/test": "^1.58.2",
54
57
  "@types/babel__generator": "^7.27.0",
55
58
  "@types/babel__traverse": "^7.28.0",
56
59
  "@types/node": "^25.5.0",
@@ -65,6 +68,7 @@
65
68
  "globals": "^17.3.0",
66
69
  "happy-dom": "^20.8.4",
67
70
  "nuxt": "^3.0.0 || ^4.0.0",
71
+ "playwright": "^1.58.2",
68
72
  "postcss-html": "^1.8.1",
69
73
  "prettier": "^3.8.1",
70
74
  "stylelint": "^17.4.0",
@@ -1 +0,0 @@
1
- .view[data-v-8c1465c0]{display:flex;flex-direction:column;height:100%;overflow:hidden;padding:12px;gap:10px}.stats-row[data-v-8c1465c0]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;flex-shrink:0}.toolbar[data-v-8c1465c0]{display:flex;align-items:center;gap:6px;flex-shrink:0;flex-wrap:wrap}.split[data-v-8c1465c0]{display:flex;gap:12px;flex:1;overflow:hidden;min-height:0}.table-wrap[data-v-8c1465c0]{flex:1;overflow:auto;border:.5px solid var(--border);border-radius:var(--radius-lg)}.detail-panel[data-v-8c1465c0]{width:280px;flex-shrink:0;display:flex;flex-direction:column;gap:8px;overflow:auto;border:.5px solid var(--border);border-radius:var(--radius-lg);padding:12px;background:var(--bg3)}.detail-empty[data-v-8c1465c0]{width:280px;flex-shrink:0;display:flex;align-items:center;justify-content:center;color:var(--text3);font-size:12px;border:.5px dashed var(--border);border-radius:var(--radius-lg)}.detail-header[data-v-8c1465c0]{display:flex;align-items:center;justify-content:space-between}.meta-grid[data-v-8c1465c0]{display:grid;grid-template-columns:auto 1fr;gap:4px 12px;font-size:11px}.section-label[data-v-8c1465c0]{font-size:10px;font-weight:500;text-transform:uppercase;letter-spacing:.4px;color:var(--text3);margin-top:6px}.payload-box[data-v-8c1465c0]{font-family:var(--mono);font-size:11px;color:var(--text2);background:var(--bg2);border-radius:var(--radius);padding:8px 10px;overflow:auto;white-space:pre;max-height:160px}.waterfall[data-v-8c1465c0]{flex-shrink:0;background:var(--bg3);border:.5px solid var(--border);border-radius:var(--radius-lg);padding:10px 12px}.waterfall-header[data-v-8c1465c0]{display:flex;align-items:center;justify-content:space-between;gap:8px}.waterfall-body[data-v-8c1465c0]{margin-top:6px}.wf-row[data-v-8c1465c0]{display:flex;align-items:center;gap:8px;margin-bottom:4px}.wf-track[data-v-8c1465c0]{flex:1;position:relative;height:8px;background:var(--bg2);border-radius:2px;overflow:hidden}.wf-bar[data-v-8c1465c0]{position:absolute;top:0;height:100%;border-radius:2px;opacity:.8}.view[data-v-0c07531b]{display:flex;flex-direction:column;height:100%;overflow:hidden;padding:12px;gap:10px}.toolbar[data-v-0c07531b]{display:flex;align-items:center;gap:6px;flex-shrink:0;flex-wrap:wrap}.split[data-v-0c07531b]{display:flex;gap:12px;flex:1;overflow:hidden;min-height:0}.graph-area[data-v-0c07531b]{flex:1;overflow:auto;border:.5px solid var(--border);border-radius:var(--radius-lg);padding:12px;background:var(--bg3)}.legend[data-v-0c07531b]{display:flex;align-items:center;gap:12px;font-size:11px;color:var(--text2);margin-bottom:12px}.canvas-stage[data-v-0c07531b]{display:flex;justify-content:center;align-items:flex-start;min-width:100%}.dot[data-v-0c07531b]{width:8px;height:8px;border-radius:50%;display:inline-block;margin-right:2px}.canvas-wrap[data-v-0c07531b]{position:relative}.edges-svg[data-v-0c07531b]{position:absolute;top:0;left:0;pointer-events:none}.edge[data-v-0c07531b]{stroke:var(--border);stroke-width:1.5}.graph-node[data-v-0c07531b]{position:absolute;display:flex;align-items:center;gap:7px;padding:0 10px;height:32px;border-radius:var(--radius);border:.5px solid var(--border);background:var(--bg3);cursor:pointer;transition:border-color .12s,background .12s;overflow:hidden;box-sizing:border-box;white-space:nowrap}.graph-node[data-v-0c07531b]:hover{border-color:var(--text3)}.graph-node.is-selected[data-v-0c07531b]{border-color:var(--node-color);background:color-mix(in srgb,var(--node-color) 8%,transparent)}.node-dot[data-v-0c07531b]{width:7px;height:7px;border-radius:50%;flex-shrink:0}.node-label[data-v-0c07531b]{font-size:11px;flex:1;overflow:hidden;text-overflow:ellipsis}.badge-xs[data-v-0c07531b]{font-size:9px;padding:1px 4px}.detail-panel[data-v-0c07531b]{width:280px;flex-shrink:0;overflow:auto;border:.5px solid var(--border);border-radius:var(--radius-lg);padding:12px;background:var(--bg3);display:flex;flex-direction:column;gap:4px;min-height:0}.detail-empty[data-v-0c07531b]{width:280px;display:flex;align-items:center;justify-content:center;color:var(--text3);font-size:12px;border:.5px dashed var(--border);border-radius:var(--radius-lg);flex-shrink:0}.graph-empty[data-v-0c07531b]{display:flex;align-items:center;justify-content:center;min-height:180px;color:var(--text3);font-size:12px}.detail-header[data-v-0c07531b]{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.section-label[data-v-0c07531b]{font-size:10px;font-weight:500;text-transform:uppercase;letter-spacing:.4px;color:var(--text3);margin:8px 0 5px}.detail-section[data-v-0c07531b]{display:flex;flex-direction:column;min-height:0}.detail-list[data-v-0c07531b]{display:flex;flex-direction:column;gap:3px;overflow:auto;max-height:220px;padding-right:2px}.provide-row[data-v-0c07531b]{display:flex;flex-direction:column;gap:4px;padding:5px 8px;background:var(--bg2);border-radius:var(--radius);margin-bottom:3px}.row-warning[data-v-0c07531b]{font-size:11px;color:var(--amber);padding:2px 0}.row-consumers[data-v-0c07531b]{display:flex;flex-wrap:wrap;align-items:center;gap:4px;padding:2px 0}.consumer-chip[data-v-0c07531b]{font-size:10px;padding:1px 6px;border-radius:4px;background:color-mix(in srgb,var(--blue) 10%,var(--bg3));border:.5px solid color-mix(in srgb,var(--blue) 30%,var(--border));color:var(--text2)}.scope-badge[data-v-0c07531b]{font-size:10px;padding:1px 6px;border-radius:4px}.scope-global[data-v-0c07531b]{background:color-mix(in srgb,var(--amber) 15%,transparent);border:.5px solid color-mix(in srgb,var(--amber) 40%,var(--border));color:color-mix(in srgb,var(--amber) 80%,var(--text))}.scope-layout[data-v-0c07531b]{background:color-mix(in srgb,var(--purple) 15%,transparent);border:.5px solid color-mix(in srgb,var(--purple) 40%,var(--border));color:color-mix(in srgb,var(--purple) 80%,var(--text))}.scope-component[data-v-0c07531b]{background:var(--bg3);border:.5px solid var(--border);color:var(--text3)}.row-main[data-v-0c07531b]{display:flex;align-items:center;gap:8px;min-width:0}.row-key[data-v-0c07531b]{min-width:100px;color:var(--text2);flex-shrink:0}.row-value-preview[data-v-0c07531b]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.row-toggle[data-v-0c07531b]{padding:2px 8px;font-size:10px}.value-box[data-v-0c07531b]{font-family:var(--mono);font-size:11px;color:var(--text2);background:#0000001a;border-radius:var(--radius);padding:8px 10px;white-space:pre-wrap;word-break:break-word;overflow:auto;max-height:180px}.inject-row[data-v-0c07531b]{display:flex;align-items:center;gap:8px;padding:5px 8px;background:var(--bg2);border-radius:var(--radius);margin-bottom:3px}.row-from[data-v-0c07531b]{margin-left:auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.inject-miss[data-v-0c07531b]{background:#e24b4a14}.jump-btn[data-v-0c07531b]{font-size:10px;padding:1px 6px;border:.5px solid var(--border);border-radius:var(--radius);background:transparent;color:var(--text3);cursor:pointer;flex-shrink:0;font-family:var(--mono)}.jump-btn[data-v-0c07531b]:hover{border-color:var(--teal);color:var(--teal);background:color-mix(in srgb,var(--teal) 8%,transparent)}.view[data-v-47ca40b0]{display:flex;flex-direction:column;height:100%;overflow:hidden;padding:12px;gap:10px}.stats-row[data-v-47ca40b0]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;flex-shrink:0}.toolbar[data-v-47ca40b0]{display:flex;align-items:center;gap:6px;flex-shrink:0;flex-wrap:wrap}.clear-btn[data-v-47ca40b0]{color:var(--text3);border-color:var(--border);flex-shrink:0}.clear-btn[data-v-47ca40b0]:hover{color:var(--red);border-color:var(--red);background:transparent}.list[data-v-47ca40b0]{flex:1;overflow:auto;display:flex;flex-direction:column;gap:5px;min-height:0}.comp-card[data-v-47ca40b0]{background:var(--bg3);border:.5px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;cursor:pointer;flex-shrink:0}.comp-card[data-v-47ca40b0]:hover{border-color:var(--text3)}.comp-card.leak[data-v-47ca40b0]{border-left:2px solid var(--red);border-radius:0 var(--radius-lg) var(--radius-lg) 0}.comp-card.expanded[data-v-47ca40b0]{border-color:var(--purple)}.comp-header[data-v-47ca40b0]{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;gap:8px}.comp-identity[data-v-47ca40b0]{display:flex;align-items:baseline;gap:6px;min-width:0;flex:1}.comp-name[data-v-47ca40b0]{font-size:12px;font-weight:500;color:var(--text);flex-shrink:0}.comp-file[data-v-47ca40b0]{font-size:11px;color:var(--text3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.comp-meta[data-v-47ca40b0]{display:flex;align-items:center;gap:5px;flex-shrink:0}.refs-preview[data-v-47ca40b0]{display:flex;flex-wrap:wrap;gap:4px;padding:0 12px 8px;align-items:center}.ref-chip[data-v-47ca40b0]{display:inline-flex;align-items:center;gap:4px;padding:2px 7px;border-radius:4px;background:var(--bg2);border:.5px solid var(--border);font-size:11px;font-family:var(--mono);max-width:220px;overflow:hidden}.ref-chip--reactive[data-v-47ca40b0]{border-color:color-mix(in srgb,var(--purple) 40%,var(--border));background:color-mix(in srgb,var(--purple) 8%,var(--bg2))}.ref-chip--computed[data-v-47ca40b0]{border-color:color-mix(in srgb,var(--blue) 40%,var(--border));background:color-mix(in srgb,var(--blue) 8%,var(--bg2))}.ref-chip-key[data-v-47ca40b0]{color:var(--text2);flex-shrink:0}.ref-chip-val[data-v-47ca40b0]{color:var(--teal);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.comp-detail[data-v-47ca40b0]{padding:4px 12px 12px;border-top:.5px solid var(--border);display:flex;flex-direction:column;gap:3px}.leak-banner[data-v-47ca40b0]{background:color-mix(in srgb,var(--red) 12%,transparent);border:.5px solid color-mix(in srgb,var(--red) 40%,var(--border));border-radius:var(--radius);padding:6px 10px;font-size:11px;color:var(--red);margin-bottom:6px;font-family:var(--mono)}.section-label[data-v-47ca40b0]{font-size:10px;font-weight:500;text-transform:uppercase;letter-spacing:.4px;color:var(--text3);margin-top:6px;margin-bottom:3px}.ref-row[data-v-47ca40b0]{display:flex;align-items:center;gap:8px;padding:3px 0}.ref-key[data-v-47ca40b0]{min-width:90px;color:var(--text2);flex-shrink:0}.ref-val[data-v-47ca40b0]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--teal)}.lc-row[data-v-47ca40b0]{display:flex;align-items:center;gap:8px;padding:2px 0}.lc-dot[data-v-47ca40b0]{width:6px;height:6px;border-radius:50%;flex-shrink:0}.ref-chip--shared[data-v-47ca40b0]{border-color:color-mix(in srgb,var(--amber) 50%,var(--border));background:color-mix(in srgb,var(--amber) 10%,var(--bg2))}.ref-chip-shared-dot[data-v-47ca40b0]{display:inline-block;width:5px;height:5px;border-radius:50%;background:var(--amber);flex-shrink:0;margin-left:1px}.global-banner[data-v-47ca40b0]{display:flex;align-items:flex-start;gap:8px;background:color-mix(in srgb,var(--amber) 10%,transparent);border:.5px solid color-mix(in srgb,var(--amber) 40%,var(--border));border-radius:var(--radius);padding:7px 10px;font-size:11px;color:var(--text2);margin-bottom:6px}.global-dot[data-v-47ca40b0]{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--amber);flex-shrink:0;margin-top:3px}.badge-amber[data-v-47ca40b0]{background:color-mix(in srgb,var(--amber) 15%,transparent);color:color-mix(in srgb,var(--amber) 80%,var(--text));border:.5px solid color-mix(in srgb,var(--amber) 40%,var(--border))}.history-list[data-v-47ca40b0]{display:flex;flex-direction:column;gap:1px;background:var(--bg2);border-radius:var(--radius);padding:4px 8px;max-height:180px;overflow-y:auto}.history-row[data-v-47ca40b0]{display:flex;align-items:center;gap:8px;padding:2px 0;font-size:11px;font-family:var(--mono);border-bottom:.5px solid var(--border)}.history-row[data-v-47ca40b0]:last-child{border-bottom:none}.history-time[data-v-47ca40b0]{min-width:52px;color:var(--text3);flex-shrink:0}.history-key[data-v-47ca40b0]{min-width:80px;color:var(--text2);flex-shrink:0}.history-val[data-v-47ca40b0]{color:var(--amber);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.stat-card[data-v-47ca40b0]{background:var(--bg3);border:.5px solid var(--border);border-radius:var(--radius-lg);padding:10px 14px}.stat-label[data-v-47ca40b0]{font-size:10px;font-weight:500;text-transform:uppercase;letter-spacing:.4px;color:var(--text3);margin-bottom:4px}.stat-val[data-v-47ca40b0]{font-size:22px;font-weight:500;line-height:1;color:var(--text)}.ref-key--clickable[data-v-47ca40b0]{cursor:pointer;text-decoration:underline dotted var(--text3);text-underline-offset:2px}.ref-key--clickable[data-v-47ca40b0]:hover{color:var(--purple);text-decoration-color:var(--purple)}.edit-btn[data-v-47ca40b0]{font-size:10px;padding:1px 6px;border-radius:var(--radius);border:.5px solid var(--border);background:transparent;color:var(--text3);cursor:pointer;margin-left:auto;flex-shrink:0;font-family:var(--mono)}.edit-btn[data-v-47ca40b0]:hover{border-color:var(--purple);color:var(--purple);background:color-mix(in srgb,var(--purple) 8%,transparent)}.lookup-panel[data-v-47ca40b0]{flex-shrink:0;border:.5px solid var(--border);border-radius:var(--radius-lg);background:var(--bg3);overflow:hidden}.lookup-header[data-v-47ca40b0]{display:flex;align-items:center;gap:6px;padding:7px 12px;border-bottom:.5px solid var(--border);background:var(--bg2)}.lookup-row[data-v-47ca40b0]{display:flex;align-items:center;gap:8px;padding:5px 12px;border-bottom:.5px solid var(--border)}.lookup-row[data-v-47ca40b0]:last-child{border-bottom:none}.edit-overlay[data-v-47ca40b0]{position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;z-index:100;display:flex;align-items:center;justify-content:center}.edit-dialog[data-v-47ca40b0]{background:var(--bg1, var(--bg2));border:.5px solid var(--border);border-radius:var(--radius-lg);padding:14px 16px;width:380px;max-width:92vw;display:flex;flex-direction:column;gap:6px;box-shadow:0 8px 32px #0000004d}.edit-dialog-header[data-v-47ca40b0]{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text2);margin-bottom:2px}.edit-textarea[data-v-47ca40b0]{width:100%;font-family:var(--mono);font-size:12px;padding:8px 10px;background:var(--bg2);border:.5px solid var(--border);border-radius:var(--radius);color:var(--text);resize:vertical;outline:none}.edit-textarea[data-v-47ca40b0]:focus{border-color:var(--purple)}.edit-error[data-v-47ca40b0]{color:var(--red);font-family:var(--mono)}.edit-actions[data-v-47ca40b0]{display:flex;gap:6px;padding-top:4px}.slide-enter-active[data-v-47ca40b0],.slide-leave-active[data-v-47ca40b0]{transition:opacity .15s,transform .15s}.slide-enter-from[data-v-47ca40b0],.slide-leave-to[data-v-47ca40b0]{opacity:0;transform:translateY(6px)}.fade-enter-active[data-v-47ca40b0],.fade-leave-active[data-v-47ca40b0]{transition:opacity .15s}.fade-enter-from[data-v-47ca40b0],.fade-leave-to[data-v-47ca40b0]{opacity:0}.jump-btn[data-v-47ca40b0]{font-size:10px;padding:1px 6px;border:.5px solid var(--border);border-radius:var(--radius);background:transparent;color:var(--text3);cursor:pointer;flex-shrink:0;font-family:var(--mono)}.jump-btn[data-v-47ca40b0]:hover{border-color:var(--teal);color:var(--teal);background:color-mix(in srgb,var(--teal) 8%,transparent)}.view[data-v-6dbeb710]{display:flex;flex-direction:column;height:100%;overflow:hidden;padding:12px;gap:10px}.controls[data-v-6dbeb710]{display:flex;align-items:center;gap:8px;flex-shrink:0;flex-wrap:wrap}.mode-group[data-v-6dbeb710]{display:flex;gap:2px}.threshold-group[data-v-6dbeb710]{display:flex;align-items:center;gap:6px}.stats-row[data-v-6dbeb710]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;flex-shrink:0}.stat-sub[data-v-6dbeb710]{margin-top:4px;font-size:11px;color:var(--text3)}.inspector[data-v-6dbeb710]{display:grid;grid-template-columns:minmax(220px,280px) minmax(0,1fr) minmax(260px,320px);gap:12px;flex:1;min-height:0}.roots-panel[data-v-6dbeb710],.tree-panel[data-v-6dbeb710],.detail-panel[data-v-6dbeb710]{border:.5px solid var(--border);border-radius:var(--radius-lg);background:var(--bg3);min-height:0}.roots-panel[data-v-6dbeb710],.detail-panel[data-v-6dbeb710]{display:flex;flex-direction:column;overflow:auto;padding:12px;gap:8px}.panel-title[data-v-6dbeb710]{font-size:10px;font-weight:500;text-transform:uppercase;letter-spacing:.4px;color:var(--text3)}.root-item[data-v-6dbeb710]{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg2);color:var(--text);text-align:left}.root-item.active[data-v-6dbeb710]{border-color:var(--teal);background:color-mix(in srgb,var(--teal) 16%,var(--bg2))}.root-label[data-v-6dbeb710]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.root-copy[data-v-6dbeb710]{display:flex;flex-direction:column;min-width:0}.root-sub[data-v-6dbeb710]{font-size:11px}.root-meta[data-v-6dbeb710]{color:var(--text3);font-size:11px}.tree-panel[data-v-6dbeb710]{display:flex;flex-direction:column;overflow:hidden}.tree-toolbar[data-v-6dbeb710]{padding:12px;border-bottom:.5px solid var(--border)}.search-input[data-v-6dbeb710]{width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg2);color:var(--text)}.tree-frame[data-v-6dbeb710]{flex:1;min-height:0;overflow:auto;padding:12px}[data-v-6dbeb710] .tree-canvas{display:inline-block;min-width:100%;width:max-content}[data-v-6dbeb710] .tree-node{margin-bottom:4px}[data-v-6dbeb710] .tree-row{display:grid;grid-template-columns:8px 18px minmax(0,1fr) auto;align-items:center;gap:6px;min-width:0;width:100%;padding:4px 8px;padding-left:calc(8px + (var(--tree-depth, 0) * 16px));border:1px solid transparent;border-radius:var(--radius);cursor:pointer;white-space:nowrap}[data-v-6dbeb710] .tree-row:hover{background:var(--bg2)}[data-v-6dbeb710] .tree-row.selected{background:color-mix(in srgb,var(--teal) 12%,var(--bg2));border-color:var(--teal)}[data-v-6dbeb710] .tree-row.hot{box-shadow:inset 2px 0 0 var(--red)}[data-v-6dbeb710] .tree-toggle{width:16px;height:16px;border:none;background:transparent;color:var(--text3);padding:0;font-size:14px;display:inline-flex;align-items:center;justify-content:center}[data-v-6dbeb710] .tree-toggle:disabled{cursor:default}[data-v-6dbeb710] .tree-toggle.empty{opacity:0}[data-v-6dbeb710] .tree-rail{display:block;width:2px;height:14px;border-radius:999px;background:color-mix(in srgb,var(--border) 75%,transparent)}[data-v-6dbeb710] .tree-copy{display:flex;align-items:center;min-width:0;gap:6px;overflow:hidden}[data-v-6dbeb710] .tree-name{font-size:12px;color:var(--text);min-width:0;overflow:hidden;text-overflow:ellipsis}[data-v-6dbeb710] .tree-badges{display:flex;gap:6px;flex-shrink:0;overflow:hidden}[data-v-6dbeb710] .tree-badge{border:1px solid var(--border);border-radius:999px;padding:2px 7px;font-size:10px;color:var(--text3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:160px}[data-v-6dbeb710] .tree-metrics{display:flex;align-items:center;min-width:92px;justify-content:flex-end;flex-shrink:0;gap:6px}[data-v-6dbeb710] .tree-metric-pill{display:inline-flex;align-items:center;justify-content:center;min-width:78px;padding:2px 8px;border:1px solid var(--border);border-radius:999px;background:var(--bg2);font-size:10px;color:var(--text3)}[data-v-6dbeb710] .tree-persistent-pill{display:inline-flex;align-items:center;padding:2px 8px;border:1px solid color-mix(in srgb,var(--amber) 55%,var(--border));border-radius:999px;background:color-mix(in srgb,var(--amber) 10%,var(--bg2));font-size:10px;color:color-mix(in srgb,var(--amber) 80%,var(--text))}[data-v-6dbeb710] .tree-hydration-pill{display:inline-flex;align-items:center;padding:2px 8px;border:1px solid color-mix(in srgb,var(--teal) 55%,var(--border));border-radius:999px;background:color-mix(in srgb,var(--teal) 10%,var(--bg2));font-size:10px;color:color-mix(in srgb,var(--teal) 80%,var(--text))}[data-v-6dbeb710] .tree-children{margin-left:7px;padding-left:11px;border-left:1px solid color-mix(in srgb,var(--border) 72%,transparent)}.detail-empty[data-v-6dbeb710]{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text3);font-size:12px}.detail-header[data-v-6dbeb710]{display:flex;align-items:center;justify-content:space-between}.meta-grid[data-v-6dbeb710]{display:grid;grid-template-columns:auto 1fr;gap:4px 12px}.detail-pill-row[data-v-6dbeb710]{display:flex;flex-wrap:wrap;gap:6px}.detail-pill[data-v-6dbeb710]{border:1px solid var(--border);border-radius:999px;padding:4px 8px;background:var(--bg2);font-size:11px}.detail-pill.hot[data-v-6dbeb710]{border-color:color-mix(in srgb,var(--red) 50%,var(--border));color:var(--red)}.detail-pill.persistent[data-v-6dbeb710]{border-color:color-mix(in srgb,var(--amber) 55%,var(--border));color:color-mix(in srgb,var(--amber) 80%,var(--text))}.detail-pill.hydrated[data-v-6dbeb710]{border-color:color-mix(in srgb,var(--teal) 55%,var(--border));color:color-mix(in srgb,var(--teal) 80%,var(--text))}.detail-pill.muted[data-v-6dbeb710]{color:var(--text3);border-color:var(--border)}.section-label[data-v-6dbeb710]{font-size:10px;font-weight:500;text-transform:uppercase;letter-spacing:.4px;color:var(--text3);margin-top:8px;margin-bottom:4px}.trigger-item[data-v-6dbeb710]{background:var(--bg2);border-radius:var(--radius);padding:4px 8px;margin-bottom:3px;color:var(--text2)}[data-v-6dbeb710] .tree-jump-btn{display:none;padding:0 4px;border:none;background:transparent;color:var(--text3);font-size:11px;cursor:pointer;line-height:1;flex-shrink:0}[data-v-6dbeb710] .tree-row:hover .tree-jump-btn,[data-v-6dbeb710] .tree-row.selected .tree-jump-btn{display:inline-flex}[data-v-6dbeb710] .tree-jump-btn:hover{color:var(--teal)}.jump-btn[data-v-6dbeb710]{font-size:10px;padding:1px 6px;border:.5px solid var(--border);border-radius:var(--radius);background:transparent;color:var(--text3);cursor:pointer;flex-shrink:0;font-family:var(--mono)}.jump-btn[data-v-6dbeb710]:hover{border-color:var(--teal);color:var(--teal);background:color-mix(in srgb,var(--teal) 8%,transparent)}.route-select[data-v-6dbeb710]{padding:3px 7px;border:.5px solid var(--border);border-radius:var(--radius);background:var(--bg2);color:var(--text);font-size:11px;cursor:pointer;max-width:140px}.timeline-list[data-v-6dbeb710]{display:flex;flex-direction:column;gap:1px;background:var(--bg2);border-radius:var(--radius);padding:4px 8px;max-height:200px;overflow-y:auto}.timeline-row[data-v-6dbeb710]{display:flex;align-items:center;gap:6px;padding:2px 0;font-size:11px;border-bottom:.5px solid var(--border);min-width:0}.timeline-row[data-v-6dbeb710]:last-child{border-bottom:none}.timeline-kind[data-v-6dbeb710]{flex-shrink:0;font-size:10px;font-weight:500;min-width:40px}.timeline-kind.mount[data-v-6dbeb710]{color:var(--teal)}.timeline-kind.update[data-v-6dbeb710]{color:var(--amber)}.timeline-time[data-v-6dbeb710]{flex-shrink:0;min-width:52px;color:var(--text3)}.timeline-dur[data-v-6dbeb710]{flex-shrink:0;min-width:38px;color:var(--text2)}.timeline-trigger[data-v-6dbeb710]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text3);flex:1;min-width:0}.timeline-route[data-v-6dbeb710]{flex-shrink:0;color:var(--text3);font-size:10px}@media(max-width:1180px){.inspector[data-v-6dbeb710]{grid-template-columns:minmax(200px,240px) minmax(0,1fr)}.detail-panel[data-v-6dbeb710]{grid-column:1 / -1;max-height:220px}}.timeline-root[data-v-da869dac]{display:flex;flex-direction:column;height:100%;overflow:hidden}.stats-row[data-v-da869dac]{display:flex;gap:10px;padding:12px 14px 0;flex-shrink:0}.stat-card[data-v-da869dac]{background:var(--bg2);border:.5px solid var(--border);border-radius:var(--radius);padding:8px 14px;min-width:72px;text-align:center}.stat-val[data-v-da869dac]{font-size:20px;font-weight:600;font-family:var(--mono);line-height:1.1}.stat-unit[data-v-da869dac]{font-size:12px;opacity:.6;margin-left:1px}.stat-label[data-v-da869dac]{font-size:10px;color:var(--text3);margin-top:2px;text-transform:uppercase;letter-spacing:.4px}.toolbar[data-v-da869dac]{display:flex;align-items:center;gap:8px;padding:10px 14px;flex-shrink:0;border-bottom:.5px solid var(--border)}.search-input[data-v-da869dac]{flex:1;max-width:260px}.filter-group[data-v-da869dac]{display:flex;gap:4px}.content-area[data-v-da869dac]{display:flex;flex:1;overflow:hidden;min-height:0}.table-pane[data-v-da869dac]{flex:1;overflow:hidden auto;min-width:0}.bar-cell[data-v-da869dac]{width:200px;padding:4px 8px}.bar-track[data-v-da869dac]{position:relative;height:8px;background:var(--bg2);border-radius:4px;overflow:hidden}.bar-fill[data-v-da869dac]{position:absolute;top:0;height:100%;min-width:3px;border-radius:4px;transition:width .15s}.detail-panel[data-v-da869dac]{width:260px;flex-shrink:0;border-left:.5px solid var(--border);overflow-y:auto;background:var(--bg3);padding:0 0 16px}.panel-header[data-v-da869dac]{display:flex;align-items:center;justify-content:space-between;padding:10px 14px 8px;border-bottom:.5px solid var(--border);position:sticky;top:0;background:var(--bg3);z-index:1}.panel-title[data-v-da869dac]{font-family:var(--mono);font-size:13px;font-weight:500}.close-btn[data-v-da869dac]{border:none;background:transparent;color:var(--text3);font-size:11px;padding:2px 6px;cursor:pointer}.panel-section[data-v-da869dac]{padding:10px 14px 6px;border-bottom:.5px solid var(--border)}.panel-section-title[data-v-da869dac]{font-size:10px;font-weight:500;color:var(--text3);text-transform:uppercase;letter-spacing:.4px;margin-bottom:8px}.panel-row[data-v-da869dac]{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:3px 0;font-size:12px}.panel-key[data-v-da869dac]{color:var(--text3);flex-shrink:0}.panel-val[data-v-da869dac]{color:var(--text);text-align:right;word-break:break-all}.cancel-notice[data-v-da869dac],.active-notice[data-v-da869dac]{margin:10px 14px 0;font-size:11px;line-height:1.6;padding:8px 10px;border-radius:var(--radius)}.cancel-notice[data-v-da869dac]{background:#e24b4a1a;color:var(--red);border:.5px solid rgb(226 75 74 / 30%)}.active-notice[data-v-da869dac]{background:#7f77dd1a;color:var(--purple);border:.5px solid rgb(127 119 221 / 30%)}code[data-v-da869dac]{font-family:var(--mono);font-size:10px;background:#00000026;padding:1px 4px;border-radius:3px}.panel-slide-enter-active[data-v-da869dac],.panel-slide-leave-active[data-v-da869dac]{transition:transform .18s ease,opacity .18s ease}.panel-slide-enter-from[data-v-da869dac],.panel-slide-leave-to[data-v-da869dac]{transform:translate(12px);opacity:0}#app-root[data-v-08e3ddb5]{display:flex;flex-direction:column;height:100vh;overflow:hidden}.tabbar[data-v-08e3ddb5]{display:flex;align-items:center;gap:2px;padding:8px 12px 0;border-bottom:.5px solid var(--border);background:var(--bg3);flex-shrink:0}.tabbar-brand[data-v-08e3ddb5]{font-size:11px;font-weight:500;color:var(--purple);letter-spacing:.5px;margin-right:12px;padding-bottom:8px}.tab-btn[data-v-08e3ddb5]{border:none;border-bottom:2px solid transparent;border-radius:0;background:transparent;color:var(--text3);font-size:12px;padding:6px 12px 8px;cursor:pointer;transition:color .12s,border-color .12s;display:flex;align-items:center;gap:5px}.tab-btn[data-v-08e3ddb5]:hover{color:var(--text);background:transparent}.tab-btn.active[data-v-08e3ddb5]{color:var(--purple);border-bottom-color:var(--purple)}.tab-icon[data-v-08e3ddb5]{font-size:10px;opacity:.6}.tab-content[data-v-08e3ddb5]{flex:1;overflow:hidden;display:flex;flex-direction:column}*{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font);background:var(--bg);color:var(--text);font-size:13px;line-height:1.5}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}button{font-family:var(--font);font-size:12px;cursor:pointer;border:.5px solid var(--border);background:transparent;color:var(--text2);padding:4px 10px;border-radius:var(--radius);transition:background .12s}button:hover{background:var(--bg2)}button:active{transform:scale(.98)}button.active{background:#7f77dd26;color:var(--purple);border-color:var(--purple)}button.danger-active{background:#e24b4a1f;color:var(--red);border-color:var(--red)}button.success-active{background:#1d9e751f;color:var(--teal);border-color:var(--teal)}input[type=text],input[type=search]{font-family:var(--font);font-size:12px;border:.5px solid var(--border);background:var(--bg2);color:var(--text);padding:5px 10px;border-radius:var(--radius);outline:none;width:100%}input[type=text]:focus,input[type=search]:focus{border-color:var(--purple);box-shadow:0 0 0 2px #7f77dd33}input[type=range]{accent-color:var(--purple);cursor:pointer}.mono{font-family:var(--mono)}.muted{color:var(--text3)}.text-sm{font-size:11px}.text-xs{font-size:10px}.bold{font-weight:500}.badge{display:inline-block;font-size:10px;font-weight:500;padding:2px 7px;border-radius:99px;white-space:nowrap}.badge-ok{background:#1d9e7526;color:var(--teal)}.badge-err{background:#e24b4a1f;color:var(--red)}.badge-warn{background:#ef9f2726;color:var(--amber)}.badge-info{background:#378add1f;color:var(--blue)}.badge-gray{background:var(--bg2);color:var(--text3);border:.5px solid var(--border)}.badge-purple{background:#7f77dd26;color:var(--purple)}.card{background:var(--bg3);border:.5px solid var(--border);border-radius:var(--radius-lg);padding:12px 14px}.data-table{width:100%;border-collapse:collapse;font-size:12px}.data-table th{text-align:left;font-size:10px;font-weight:500;color:var(--text3);padding:6px 8px;border-bottom:.5px solid var(--border);text-transform:uppercase;letter-spacing:.4px;white-space:nowrap}.data-table td{padding:8px;border-bottom:.5px solid var(--border);color:var(--text);vertical-align:middle}.data-table tr:hover td{background:var(--bg2);cursor:pointer}.data-table tr.selected td{background:#7f77dd14}.stat-card{background:var(--bg2);border-radius:var(--radius);padding:10px 12px}.stat-label{font-size:10px;color:var(--text3);text-transform:uppercase;letter-spacing:.4px;margin-bottom:3px}.stat-val{font-size:20px;font-weight:500}.flex{display:flex}.items-center{align-items:center}.gap-2{gap:8px}.gap-3{gap:12px}.flex-1{flex:1}.overflow-auto{overflow:auto}.p-3{padding:12px}.p-4{padding:16px}.mb-2{margin-bottom:8px}.mb-3{margin-bottom:12px}.mt-2{margin-top:8px}