tide-commander 1.2.1 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/browser-ponyfill-DIm4hKhx.js","assets/vendor-react-uS-d4TUT.js","assets/web-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/browser-ponyfill-DIm4hKhx.js","assets/vendor-react-uS-d4TUT.js","assets/web-CAEfCxVj.js","assets/modulepreload-polyfill-B5Qt9EMX.js","assets/vendor-three-DJ4p3FLF.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
var cP=Object.defineProperty;var uP=(s,e,t)=>e in s?cP(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t;var U=(s,e,t)=>uP(s,typeof e!="symbol"?e+"":e,t);import"./modulepreload-polyfill-B5Qt9EMX.js";import{r as kx,g as Sd,a as GA,c as TS}from"./vendor-react-uS-d4TUT.js";import{T as dP,a as py,b as WA,L as qA,c as Ku,F as Rp,M as qi,V as Ys,C as Ut,d as Gi,S as mi,e as hP,P as YA,D as uc,f as il,g as vt,I as yr,Q as rl,h as pP,O as VA,i as Sx,j as fP,B as gi,k as mP,l as Xu,N as gP,m as bP,n as yP,o as $n,p as KA,R as Yo,q as xP,r as vP,s as wf,t as vr,u as Vo,v as ft,w as Ls,x as Ke,y as wP,z as si,A as fy,E as Ie,G as jx,H as oo,J as kP,K as jd,U as Hn,W as Cx,X as Nx,Y as XA,Z as SP,_ as jP,$ as CP,a0 as NP,a1 as ZA,a2 as AP,a3 as ES,a4 as _S,a5 as DS,a6 as PS,a7 as my,a8 as QA,a9 as MP,aa as Lp,ab as TP,ac as EP,ad as Zu,ae as gy,af as Kn,ag as ts,ah as ol,ai as os,aj as Xn,ak as _P,al as JA,am as DP,an as PP,ao as wr,ap as ll,aq as Wt,ar as eM,as as ln,at as bc,au as RS,av as RP,aw as Ax,ax as LP,ay as OP,az as kp,aA as Op,aB as by,aC as dc,aD as tM,aE as LS,aF as IP,aG as BP,aH as Qo,aI as ic,aJ as zP,aK as OS,aL as yy,aM as FP,aN as $P,aO as HP,aP as UP,aQ as nM,aR as Mx,aS as sM,aT as GP,aU as WP}from"./vendor-three-DJ4p3FLF.js";function qP(s,e){for(var t=0;t<e.length;t++){const n=e[t];if(typeof n!="string"&&!Array.isArray(n)){for(const a in n)if(a!=="default"&&!(a in s)){const i=Object.getOwnPropertyDescriptor(n,a);i&&Object.defineProperty(s,a,i.get?i:{enumerable:!0,get:()=>n[a]})}}}return Object.freeze(Object.defineProperty(s,Symbol.toStringTag,{value:"Module"}))}var Jg={exports:{}},ju={};/**
|
|
3
3
|
* @license React
|
|
4
4
|
* react-jsx-runtime.production.js
|
|
@@ -39,7 +39,7 @@ Error generating stack: `+v.message+`
|
|
|
39
39
|
*
|
|
40
40
|
* This source code is licensed under the MIT license found in the
|
|
41
41
|
* LICENSE file in the root directory of this source tree.
|
|
42
|
-
*/var ij;function RR(){if(ij)return ob;ij=1;var s=kx();function e(p,m){return p===m&&(p!==0||1/p===1/m)||p!==p&&m!==m}var t=typeof Object.is=="function"?Object.is:e,n=s.useState,a=s.useEffect,i=s.useLayoutEffect,o=s.useDebugValue;function l(p,m){var b=m(),x=n({inst:{value:b,getSnapshot:m}}),w=x[0].inst,k=x[1];return i(function(){w.value=b,w.getSnapshot=m,c(w)&&k({inst:w})},[p,b,m]),a(function(){return c(w)&&k({inst:w}),p(function(){c(w)&&k({inst:w})})},[p]),o(b),b}function c(p){var m=p.getSnapshot;p=p.value;try{var b=m();return!t(p,b)}catch{return!0}}function d(p,m){return m()}var f=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?d:l;return ob.useSyncExternalStore=s.useSyncExternalStore!==void 0?s.useSyncExternalStore:f,ob}var rj;function LR(){return rj||(rj=1,rb.exports=RR()),rb.exports}var OR=LR();const IR=(s,e)=>cl(e)?e:kR(e)&&cl(e.defaultValue)?e.defaultValue:Array.isArray(s)?s[s.length-1]:s,BR={t:IR,ready:!1},zR=()=>()=>{},Ge=(s,e={})=>{var P,E,R;const{i18n:t}=e,{i18n:n,defaultNS:a}=y.useContext(DR)||{},i=t||n||ER();i&&!i.reportNamespaces&&(i.reportNamespaces=new PR),i||lM(i,"NO_I18NEXT_INSTANCE","useTranslation: You will need to pass in an i18next instance by using initReactI18next");const o=y.useMemo(()=>{var I;return{...MR(),...(I=i==null?void 0:i.options)==null?void 0:I.react,...e}},[i,e]),{useSuspense:l,keyPrefix:c}=o,d=s||a||((P=i==null?void 0:i.options)==null?void 0:P.defaultNS),f=cl(d)?[d]:d||["translation"],p=y.useMemo(()=>f,f);(R=(E=i==null?void 0:i.reportNamespaces)==null?void 0:E.addUsedNamespaces)==null||R.call(E,p);const m=y.useRef(0),b=y.useCallback(I=>{if(!i)return zR;const{bindI18n:O,bindI18nStore:B}=o,q=()=>{m.current+=1,I()};return O&&i.on(O,q),B&&i.store.on(B,q),()=>{O&&O.split(" ").forEach(H=>i.off(H,q)),B&&B.split(" ").forEach(H=>i.store.off(H,q))}},[i,o]),x=y.useRef(),w=y.useCallback(()=>{if(!i)return BR;const I=!!(i.isInitialized||i.initializedStoreOnce)&&p.every(K=>wR(K,i,o)),O=e.lng||i.language,B=m.current,q=x.current;if(q&&q.ready===I&&q.lng===O&&q.keyPrefix===c&&q.revision===B)return q;const G={t:i.getFixedT(O,o.nsMode==="fallback"?p:p[0],c),ready:I,lng:O,keyPrefix:c,revision:B};return x.current=G,G},[i,p,c,o,e.lng]),[k,S]=y.useState(0),{t:j,ready:C}=OR.useSyncExternalStore(b,w,w);y.useEffect(()=>{if(i&&!C&&!l){const I=()=>S(O=>O+1);e.lng?aj(i,e.lng,p,I):wy(i,p,I)}},[i,e.lng,p,C,l,k]);const N=i||{},_=y.useRef(null),D=y.useRef(),L=I=>{const O=Object.getOwnPropertyDescriptors(I);O.__original&&delete O.__original;const B=Object.create(Object.getPrototypeOf(I),O);if(!Object.prototype.hasOwnProperty.call(B,"__original"))try{Object.defineProperty(B,"__original",{value:I,writable:!1,enumerable:!1,configurable:!1})}catch{}return B},M=y.useMemo(()=>{const I=N,O=I==null?void 0:I.language;let B=I;I&&(_.current&&_.current.__original===I?D.current!==O?(B=L(I),_.current=B,D.current=O):B=_.current:(B=L(I),_.current=B,D.current=O));const q=[j,B,C];return q.t=j,q.i18n=B,q.ready=C,q},[j,N,C,N.resolvedLanguage,N.language,N.languages]);if(i&&l&&!C)throw new Promise(I=>{const O=()=>I();e.lng?aj(i,e.lng,p,O):wy(i,p,O)});return M};function Sy(s){"@babel/helpers - typeof";return Sy=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Sy(s)}function dM(){return typeof XMLHttpRequest=="function"||(typeof XMLHttpRequest>"u"?"undefined":Sy(XMLHttpRequest))==="object"}function FR(s){return!!s&&typeof s.then=="function"}function $R(s){return FR(s)?s:Promise.resolve(s)}const HR="modulepreload",UR=function(s){return"/"+s},oj={},hM=function(e,t,n){let a=Promise.resolve();if(t&&t.length>0){let o=function(d){return Promise.all(d.map(f=>Promise.resolve(f).then(p=>({status:"fulfilled",value:p}),p=>({status:"rejected",reason:p}))))};document.getElementsByTagName("link");const l=document.querySelector("meta[property=csp-nonce]"),c=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));a=o(t.map(d=>{if(d=UR(d),d in oj)return;oj[d]=!0;const f=d.endsWith(".css"),p=f?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${d}"]${p}`))return;const m=document.createElement("link");if(m.rel=f?"stylesheet":HR,f||(m.as="script"),m.crossOrigin="",m.href=d,c&&m.setAttribute("nonce",c),document.head.appendChild(m),f)return new Promise((b,x)=>{m.addEventListener("load",b),m.addEventListener("error",()=>x(new Error(`Unable to preload CSS for ${d}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return a.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return e().catch(i)})};function lj(s,e){var t=Object.keys(s);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(s);e&&(n=n.filter(function(a){return Object.getOwnPropertyDescriptor(s,a).enumerable})),t.push.apply(t,n)}return t}function cj(s){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?lj(Object(t),!0).forEach(function(n){GR(s,n,t[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(s,Object.getOwnPropertyDescriptors(t)):lj(Object(t)).forEach(function(n){Object.defineProperty(s,n,Object.getOwnPropertyDescriptor(t,n))})}return s}function GR(s,e,t){return(e=WR(e))in s?Object.defineProperty(s,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):s[e]=t,s}function WR(s){var e=qR(s,"string");return ul(e)=="symbol"?e:e+""}function qR(s,e){if(ul(s)!="object"||!s)return s;var t=s[Symbol.toPrimitive];if(t!==void 0){var n=t.call(s,e);if(ul(n)!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(s)}function ul(s){"@babel/helpers - typeof";return ul=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ul(s)}var fo=typeof fetch=="function"?fetch:void 0;typeof global<"u"&&global.fetch?fo=global.fetch:typeof window<"u"&&window.fetch&&(fo=window.fetch);var ud;dM()&&(typeof global<"u"&&global.XMLHttpRequest?ud=global.XMLHttpRequest:typeof window<"u"&&window.XMLHttpRequest&&(ud=window.XMLHttpRequest));var Fp;typeof ActiveXObject=="function"&&(typeof global<"u"&&global.ActiveXObject?Fp=global.ActiveXObject:typeof window<"u"&&window.ActiveXObject&&(Fp=window.ActiveXObject));typeof fo!="function"&&(fo=void 0);if(!fo&&!ud&&!Fp)try{hM(()=>import("./browser-ponyfill-DIm4hKhx.js").then(s=>s.b),__vite__mapDeps([0,1])).then(function(s){fo=s.default}).catch(function(){})}catch{}var jy=function(e,t){if(t&&ul(t)==="object"){var n="";for(var a in t)n+="&"+encodeURIComponent(a)+"="+encodeURIComponent(t[a]);if(!n)return e;e=e+(e.indexOf("?")!==-1?"&":"?")+n.slice(1)}return e},uj=function(e,t,n,a){var i=function(c){if(!c.ok)return n(c.statusText||"Error",{status:c.status});c.text().then(function(d){n(null,{status:c.status,data:d})}).catch(n)};if(a){var o=a(e,t);if(o instanceof Promise){o.then(i).catch(n);return}}typeof fetch=="function"?fetch(e,t).then(i).catch(n):fo(e,t).then(i).catch(n)},dj=!1,YR=function(e,t,n,a){e.queryStringParams&&(t=jy(t,e.queryStringParams));var i=cj({},typeof e.customHeaders=="function"?e.customHeaders():e.customHeaders);typeof window>"u"&&typeof global<"u"&&typeof global.process<"u"&&global.process.versions&&global.process.versions.node&&(i["User-Agent"]="i18next-http-backend (node/".concat(global.process.version,"; ").concat(global.process.platform," ").concat(global.process.arch,")")),n&&(i["Content-Type"]="application/json");var o=typeof e.requestOptions=="function"?e.requestOptions(n):e.requestOptions,l=cj({method:n?"POST":"GET",body:n?e.stringify(n):void 0,headers:i},dj?{}:o),c=typeof e.alternateFetch=="function"&&e.alternateFetch.length>=1?e.alternateFetch:void 0;try{uj(t,l,a,c)}catch(d){if(!o||Object.keys(o).length===0||!d.message||d.message.indexOf("not implemented")<0)return a(d);try{Object.keys(o).forEach(function(f){delete l[f]}),uj(t,l,a,c),dj=!0}catch(f){a(f)}}},VR=function(e,t,n,a){n&&ul(n)==="object"&&(n=jy("",n).slice(1)),e.queryStringParams&&(t=jy(t,e.queryStringParams));try{var i=ud?new ud:new Fp("MSXML2.XMLHTTP.3.0");i.open(n?"POST":"GET",t,1),e.crossDomain||i.setRequestHeader("X-Requested-With","XMLHttpRequest"),i.withCredentials=!!e.withCredentials,n&&i.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),i.overrideMimeType&&i.overrideMimeType("application/json");var o=e.customHeaders;if(o=typeof o=="function"?o():o,o)for(var l in o)i.setRequestHeader(l,o[l]);i.onreadystatechange=function(){i.readyState>3&&a(i.status>=400?i.statusText:null,{status:i.status,data:i.responseText})},i.send(n)}catch(c){console&&console.log(c)}},KR=function(e,t,n,a){if(typeof n=="function"&&(a=n,n=void 0),a=a||function(){},fo&&t.indexOf("file:")!==0)return YR(e,t,n,a);if(dM()||typeof ActiveXObject=="function")return VR(e,t,n,a);a(new Error("No fetch and no xhr implementation found!"))};function yc(s){"@babel/helpers - typeof";return yc=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},yc(s)}function hj(s,e){var t=Object.keys(s);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(s);e&&(n=n.filter(function(a){return Object.getOwnPropertyDescriptor(s,a).enumerable})),t.push.apply(t,n)}return t}function lb(s){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?hj(Object(t),!0).forEach(function(n){pM(s,n,t[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(s,Object.getOwnPropertyDescriptors(t)):hj(Object(t)).forEach(function(n){Object.defineProperty(s,n,Object.getOwnPropertyDescriptor(t,n))})}return s}function XR(s,e){if(!(s instanceof e))throw new TypeError("Cannot call a class as a function")}function ZR(s,e){for(var t=0;t<e.length;t++){var n=e[t];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(s,fM(n.key),n)}}function QR(s,e,t){return e&&ZR(s.prototype,e),Object.defineProperty(s,"prototype",{writable:!1}),s}function pM(s,e,t){return(e=fM(e))in s?Object.defineProperty(s,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):s[e]=t,s}function fM(s){var e=JR(s,"string");return yc(e)=="symbol"?e:e+""}function JR(s,e){if(yc(s)!="object"||!s)return s;var t=s[Symbol.toPrimitive];if(t!==void 0){var n=t.call(s,e);if(yc(n)!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(s)}var eL=function(){return{loadPath:"/locales/{{lng}}/{{ns}}.json",addPath:"/locales/add/{{lng}}/{{ns}}",parse:function(t){return JSON.parse(t)},stringify:JSON.stringify,parsePayload:function(t,n,a){return pM({},n,a||"")},parseLoadPayload:function(t,n){},request:KR,reloadInterval:typeof window<"u"?!1:3600*1e3,customHeaders:{},queryStringParams:{},crossDomain:!1,withCredentials:!1,overrideMimeType:!1,requestOptions:{mode:"cors",credentials:"same-origin",cache:"default"}}},mM=(function(){function s(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};XR(this,s),this.services=e,this.options=t,this.allOptions=n,this.type="backend",this.init(e,t,n)}return QR(s,[{key:"init",value:function(t){var n=this,a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(this.services=t,this.options=lb(lb(lb({},eL()),this.options||{}),a),this.allOptions=i,this.services&&this.options.reloadInterval){var o=setInterval(function(){return n.reload()},this.options.reloadInterval);yc(o)==="object"&&typeof o.unref=="function"&&o.unref()}}},{key:"readMulti",value:function(t,n,a){this._readAny(t,t,n,n,a)}},{key:"read",value:function(t,n,a){this._readAny([t],t,[n],n,a)}},{key:"_readAny",value:function(t,n,a,i,o){var l=this,c=this.options.loadPath;typeof this.options.loadPath=="function"&&(c=this.options.loadPath(t,a)),c=$R(c),c.then(function(d){if(!d)return o(null,{});var f=l.services.interpolator.interpolate(d,{lng:t.join("+"),ns:a.join("+")});l.loadUrl(f,o,n,i)})}},{key:"loadUrl",value:function(t,n,a,i){var o=this,l=typeof a=="string"?[a]:a,c=typeof i=="string"?[i]:i,d=this.options.parseLoadPayload(l,c);this.options.request(this.options,t,d,function(f,p){if(p&&(p.status>=500&&p.status<600||!p.status))return n("failed loading "+t+"; status code: "+p.status,!0);if(p&&p.status>=400&&p.status<500)return n("failed loading "+t+"; status code: "+p.status,!1);if(!p&&f&&f.message){var m=f.message.toLowerCase(),b=["failed","fetch","network","load"].find(function(k){return m.indexOf(k)>-1});if(b)return n("failed loading "+t+": "+f.message,!0)}if(f)return n(f,!1);var x,w;try{typeof p.data=="string"?x=o.options.parse(p.data,a,i):x=p.data}catch{w="failed parsing "+t+" to json"}if(w)return n(w,!1);n(null,x)})}},{key:"create",value:function(t,n,a,i,o){var l=this;if(this.options.addPath){typeof t=="string"&&(t=[t]);var c=this.options.parsePayload(n,a,i),d=0,f=[],p=[];t.forEach(function(m){var b=l.options.addPath;typeof l.options.addPath=="function"&&(b=l.options.addPath(m,n));var x=l.services.interpolator.interpolate(b,{lng:m,ns:n});l.options.request(l.options,x,c,function(w,k){d+=1,f.push(w),p.push(k),d===t.length&&typeof o=="function"&&o(f,p)})})}}},{key:"reload",value:function(){var t=this,n=this.services,a=n.backendConnector,i=n.languageUtils,o=n.logger,l=a.language;if(!(l&&l.toLowerCase()==="cimode")){var c=[],d=function(p){var m=i.toResolveHierarchy(p);m.forEach(function(b){c.indexOf(b)<0&&c.push(b)})};d(l),this.allOptions.preload&&this.allOptions.preload.forEach(function(f){return d(f)}),c.forEach(function(f){t.allOptions.ns.forEach(function(p){a.read(f,p,"read",null,null,function(m,b){m&&o.warn("loading namespace ".concat(p," for language ").concat(f," failed"),m),!m&&b&&o.log("loaded namespace ".concat(p," for language ").concat(f),b),a.loaded("".concat(f,"|").concat(p),m,b)})})})}}}])})();mM.type="backend";const{slice:tL,forEach:nL}=[];function sL(s){return nL.call(tL.call(arguments,1),e=>{if(e)for(const t in e)s[t]===void 0&&(s[t]=e[t])}),s}function aL(s){return typeof s!="string"?!1:[/<\s*script.*?>/i,/<\s*\/\s*script\s*>/i,/<\s*img.*?on\w+\s*=/i,/<\s*\w+\s*on\w+\s*=.*?>/i,/javascript\s*:/i,/vbscript\s*:/i,/expression\s*\(/i,/eval\s*\(/i,/alert\s*\(/i,/document\.cookie/i,/document\.write\s*\(/i,/window\.location/i,/innerHTML/i].some(t=>t.test(s))}const pj=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/,iL=function(s,e){const n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{path:"/"},a=encodeURIComponent(e);let i=`${s}=${a}`;if(n.maxAge>0){const o=n.maxAge-0;if(Number.isNaN(o))throw new Error("maxAge should be a Number");i+=`; Max-Age=${Math.floor(o)}`}if(n.domain){if(!pj.test(n.domain))throw new TypeError("option domain is invalid");i+=`; Domain=${n.domain}`}if(n.path){if(!pj.test(n.path))throw new TypeError("option path is invalid");i+=`; Path=${n.path}`}if(n.expires){if(typeof n.expires.toUTCString!="function")throw new TypeError("option expires is invalid");i+=`; Expires=${n.expires.toUTCString()}`}if(n.httpOnly&&(i+="; HttpOnly"),n.secure&&(i+="; Secure"),n.sameSite)switch(typeof n.sameSite=="string"?n.sameSite.toLowerCase():n.sameSite){case!0:i+="; SameSite=Strict";break;case"lax":i+="; SameSite=Lax";break;case"strict":i+="; SameSite=Strict";break;case"none":i+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}return n.partitioned&&(i+="; Partitioned"),i},fj={create(s,e,t,n){let a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{path:"/",sameSite:"strict"};t&&(a.expires=new Date,a.expires.setTime(a.expires.getTime()+t*60*1e3)),n&&(a.domain=n),document.cookie=iL(s,e,a)},read(s){const e=`${s}=`,t=document.cookie.split(";");for(let n=0;n<t.length;n++){let a=t[n];for(;a.charAt(0)===" ";)a=a.substring(1,a.length);if(a.indexOf(e)===0)return a.substring(e.length,a.length)}return null},remove(s,e){this.create(s,"",-1,e)}};var rL={name:"cookie",lookup(s){let{lookupCookie:e}=s;if(e&&typeof document<"u")return fj.read(e)||void 0},cacheUserLanguage(s,e){let{lookupCookie:t,cookieMinutes:n,cookieDomain:a,cookieOptions:i}=e;t&&typeof document<"u"&&fj.create(t,s,n,a,i)}},oL={name:"querystring",lookup(s){var n;let{lookupQuerystring:e}=s,t;if(typeof window<"u"){let{search:a}=window.location;!window.location.search&&((n=window.location.hash)==null?void 0:n.indexOf("?"))>-1&&(a=window.location.hash.substring(window.location.hash.indexOf("?")));const o=a.substring(1).split("&");for(let l=0;l<o.length;l++){const c=o[l].indexOf("=");c>0&&o[l].substring(0,c)===e&&(t=o[l].substring(c+1))}}return t}},lL={name:"hash",lookup(s){var a;let{lookupHash:e,lookupFromHashIndex:t}=s,n;if(typeof window<"u"){const{hash:i}=window.location;if(i&&i.length>2){const o=i.substring(1);if(e){const l=o.split("&");for(let c=0;c<l.length;c++){const d=l[c].indexOf("=");d>0&&l[c].substring(0,d)===e&&(n=l[c].substring(d+1))}}if(n)return n;if(!n&&t>-1){const l=i.match(/\/([a-zA-Z-]*)/g);return Array.isArray(l)?(a=l[typeof t=="number"?t:0])==null?void 0:a.replace("/",""):void 0}}}return n}};let Yl=null;const mj=()=>{if(Yl!==null)return Yl;try{if(Yl=typeof window<"u"&&window.localStorage!==null,!Yl)return!1;const s="i18next.translate.boo";window.localStorage.setItem(s,"foo"),window.localStorage.removeItem(s)}catch{Yl=!1}return Yl};var cL={name:"localStorage",lookup(s){let{lookupLocalStorage:e}=s;if(e&&mj())return window.localStorage.getItem(e)||void 0},cacheUserLanguage(s,e){let{lookupLocalStorage:t}=e;t&&mj()&&window.localStorage.setItem(t,s)}};let Vl=null;const gj=()=>{if(Vl!==null)return Vl;try{if(Vl=typeof window<"u"&&window.sessionStorage!==null,!Vl)return!1;const s="i18next.translate.boo";window.sessionStorage.setItem(s,"foo"),window.sessionStorage.removeItem(s)}catch{Vl=!1}return Vl};var uL={name:"sessionStorage",lookup(s){let{lookupSessionStorage:e}=s;if(e&&gj())return window.sessionStorage.getItem(e)||void 0},cacheUserLanguage(s,e){let{lookupSessionStorage:t}=e;t&&gj()&&window.sessionStorage.setItem(t,s)}},dL={name:"navigator",lookup(s){const e=[];if(typeof navigator<"u"){const{languages:t,userLanguage:n,language:a}=navigator;if(t)for(let i=0;i<t.length;i++)e.push(t[i]);n&&e.push(n),a&&e.push(a)}return e.length>0?e:void 0}},hL={name:"htmlTag",lookup(s){let{htmlTag:e}=s,t;const n=e||(typeof document<"u"?document.documentElement:null);return n&&typeof n.getAttribute=="function"&&(t=n.getAttribute("lang")),t}},pL={name:"path",lookup(s){var a;let{lookupFromPathIndex:e}=s;if(typeof window>"u")return;const t=window.location.pathname.match(/\/([a-zA-Z-]*)/g);return Array.isArray(t)?(a=t[typeof e=="number"?e:0])==null?void 0:a.replace("/",""):void 0}},fL={name:"subdomain",lookup(s){var a,i;let{lookupFromSubdomainIndex:e}=s;const t=typeof e=="number"?e+1:1,n=typeof window<"u"&&((i=(a=window.location)==null?void 0:a.hostname)==null?void 0:i.match(/^(\w{2,5})\.(([a-z0-9-]{1,63}\.[a-z]{2,6})|localhost)/i));if(n)return n[t]}};let gM=!1;try{document.cookie,gM=!0}catch{}const bM=["querystring","cookie","localStorage","sessionStorage","navigator","htmlTag"];gM||bM.splice(1,1);const mL=()=>({order:bM,lookupQuerystring:"lng",lookupCookie:"i18next",lookupLocalStorage:"i18nextLng",lookupSessionStorage:"i18nextLng",caches:["localStorage"],excludeCacheFor:["cimode"],convertDetectedLanguage:s=>s});class yM{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.type="languageDetector",this.detectors={},this.init(e,t)}init(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{languageUtils:{}},t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.services=e,this.options=sL(t,this.options||{},mL()),typeof this.options.convertDetectedLanguage=="string"&&this.options.convertDetectedLanguage.indexOf("15897")>-1&&(this.options.convertDetectedLanguage=a=>a.replace("-","_")),this.options.lookupFromUrlIndex&&(this.options.lookupFromPathIndex=this.options.lookupFromUrlIndex),this.i18nOptions=n,this.addDetector(rL),this.addDetector(oL),this.addDetector(cL),this.addDetector(uL),this.addDetector(dL),this.addDetector(hL),this.addDetector(pL),this.addDetector(fL),this.addDetector(lL)}addDetector(e){return this.detectors[e.name]=e,this}detect(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.options.order,t=[];return e.forEach(n=>{if(this.detectors[n]){let a=this.detectors[n].lookup(this.options);a&&typeof a=="string"&&(a=[a]),a&&(t=t.concat(a))}}),t=t.filter(n=>n!=null&&!aL(n)).map(n=>this.options.convertDetectedLanguage(n)),this.services&&this.services.languageUtils&&this.services.languageUtils.getBestMatchFromCodes?t:t.length>0?t[0]:null}cacheUserLanguage(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.options.caches;t&&(this.options.excludeCacheFor&&this.options.excludeCacheFor.indexOf(e)>-1||t.forEach(n=>{this.detectors[n]&&this.detectors[n].cacheUserLanguage(e,this.options)}))}}yM.type="languageDetector";const $p={idle:"#4aff9e",working:"#4a9eff",waiting:"#ff9e4a",waiting_permission:"#ffcc00",error:"#ff4a4a",offline:"#888888",orphaned:"#ff9e4a",default:"#888888"},mo={running:"#4aff9e",stopped:"#888888",error:"#ff4a4a",unknown:"#ffaa00",starting:"#4a9eff",stopping:"#ffaa00"},gL={on_track:"#4aff9e",stalled:"#ff9e4a",blocked:"#ff4a4a",completed:"#4a9eff",idle:"#888888"},bL=["#4a9eff","#4aff9e","#ff9e4a","#ff4a9e","#9e4aff","#ff4a4a","#4affff","#ffff4a","#4ad7ff","#00e6a8","#ff6b4a","#ff66cc","#b84aff","#ff4a7a","#00d9ff","#e6ff4a","#1a3a6e","#1a5e3a","#6e3a1a","#6e1a4a","#4a1a6e","#6e1a1a","#1a5e5e","#5e5e1a","#1a4a6e","#145a47","#6e2c1a","#6e1a5e","#3b1a6e","#6e1a33","#14566e","#4f5e1a"],Vh={recent:"#50fa7b",short:"#f1fa8c",medium:"#ffb86c",long:"#ff5555"};function Sf(s){const t=Math.floor((Date.now()-s)/1e3)/60;return t<1?Vh.recent:t<5?Vh.short:t<30?Vh.medium:Vh.long}function Tx(s){return $p[s]??$p.default}let Sp=null;function xM(){if(!Sp)try{Sp=globalThis.__i18n}catch{}return Sp}function yL(s){Sp=s}function xL(s){return s>=1e6?(s/1e6).toFixed(1)+"M":s>=1e3?(s/1e3).toFixed(1)+"K":s.toString()}function Cy(s){return s>=1e6?(s/1e6).toFixed(1)+"M":s>=1e3?(s/1e3).toFixed(1)+"K":s.toString()}function vM(s){var a;const e=xM(),t=(a=e==null?void 0:e.t)==null?void 0:a.bind(e),n=Math.floor((Date.now()-s)/1e3);return n<60?t?t("common:time.seconds",{count:n}):`${n}s`:n<3600?t?t("common:time.minutes",{count:Math.floor(n/60)}):`${Math.floor(n/60)}m`:n<86400?t?t("common:time.hours",{count:Math.floor(n/3600)}):`${Math.floor(n/3600)}h`:t?t("common:time.days",{count:Math.floor(n/86400)}):`${Math.floor(n/86400)}d`}function jf(s){var d;const e=xM(),t=(d=e==null?void 0:e.t)==null?void 0:d.bind(e),n=Math.floor((Date.now()-s)/1e3);if(n<5)return t?t("common:time.justNow"):"just now";if(n<60)return t?t("common:time.secondsAgo",{count:n}):`${n}s ago`;const a=Math.floor(n/60);if(a<60){const f=n%60;return f>0?t?t("common:time.minutesSecondsAgo",{minutes:a,seconds:f}):`${a}m ${f}s ago`:t?t("common:time.minutesAgo",{count:a}):`${a}m ago`}const i=Math.floor(a/60),o=a%60;if(i<24)return o>0?t?t("common:time.hoursMinutesAgo",{hours:i,minutes:o}):`${i}h ${o}m ago`:t?t("common:time.hoursAgo",{count:i}):`${i}h ago`;const l=Math.floor(i/24),c=i%24;return c>0?t?t("common:time.daysHoursAgo",{days:l,hours:c}):`${l}d ${c}h ago`:t?t("common:time.daysAgo",{count:l}):`${l}d ago`}function ed(s,e){return s?e?s.replace(/\s*\(?\s*~?\$[\d,.]+\s*\)?/g,"").replace(/\s*cost[:\s]+~?\$[\d,.]+/gi,"").replace(/\s*price[:\s]+~?\$[\d,.]+/gi,"").replace(/\s*\(~?\$[\d,.]+\s*(?:USD|cost|spent)?\)/gi,"").replace(/\s*-\s*~?\$[\d,.]+\s*$/g,"").replace(/[^\S\n]+/g," ").trim():s:""}Sn.use(mM).use(yM).use(_R).init({fallbackLng:"en",ns:["common","tools","config","errors","notifications","dashboard","terminal"],defaultNS:"common",backend:{loadPath:"/locales/{{lng}}/{{ns}}.json"},detection:{order:["localStorage","navigator"],lookupLocalStorage:"tide-commander-language",caches:["localStorage"]},interpolation:{escapeValue:!1},react:{useSuspense:!0}}).then(()=>{yL(Sn)});const mt={CONFIG:"tide-commander-config",SHOW_FPS:"tide-show-fps",SETTINGS:"tide-settings",SHORTCUTS:"tide-shortcuts",MOUSE_CONTROLS:"tide-mouse-controls",BACKEND_URL:"tide-backend-url",AUTH_TOKEN:"tide-auth-token",SCENE_VIEW_MODE:"tide-scene-view-mode",CAMERA_STATE:"tide-camera-state",CAMERA_STATE_2D:"tide-camera-state-2d",VIEW_MODE:"guake-view-mode",ADVANCED_VIEW:"guake-advanced-view",TERMINAL_HEIGHT:"guake-terminal-height",TERMINAL_FULLSCREEN:"guake-terminal-fullscreen",INPUT_TEXT_PREFIX:"guake-input-",PASTED_TEXTS_PREFIX:"guake-pasted-",COMMANDER_TAB:"commander-active-tab",COMMANDER_FILTERS:"commander-filters",LAST_CWD:"tide-last-cwd",GLOBAL_SUPERVISOR_COLLAPSED:"tide-global-supervisor-collapsed",TOOLS_COLLAPSED:"tide-tool-history-collapsed",FILES_COLLAPSED:"tide-file-history-collapsed",MOBILE_VIEW:"tide-mobile-view",TREE_PANEL_WIDTH:"tide-tree-panel-width",AGENT_ORDER:"tide-agent-order",AOP_CONFIG:"tide-aop-config",AOP_OPEN:"tide-aop-open",MOBILE_OVERVIEW_HEIGHT:"tide-mobile-overview-height",UNSEEN_AGENTS:"tide-unseen-agents"},Ny="tide-backend-url-change";function Ba(s,e){try{const t=localStorage.getItem(s);return t===null?e:JSON.parse(t)}catch{return e}}function ra(s,e=""){try{return localStorage.getItem(s)??e}catch{return e}}function dd(s,e=!1){try{const t=localStorage.getItem(s);return t===null?e:t==="true"}catch{return e}}function Ex(s,e){try{const t=localStorage.getItem(s);if(t===null)return e;const n=Number(t);return isNaN(n)?e:n}catch{return e}}function Ii(s,e){try{localStorage.setItem(s,JSON.stringify(e))}catch(t){console.error(`Failed to save to localStorage: ${s}`,t)}}function $a(s,e){try{localStorage.setItem(s,e)}catch(t){console.error(`Failed to save to localStorage: ${s}`,t)}}function hd(s,e){try{localStorage.setItem(s,String(e))}catch(t){console.error(`Failed to save to localStorage: ${s}`,t)}}function _x(s,e){try{localStorage.setItem(s,String(e))}catch(t){console.error(`Failed to save to localStorage: ${s}`,t)}}function bj(s){try{localStorage.removeItem(s)}catch(e){console.error(`Failed to remove from localStorage: ${s}`,e)}}function Tr(){const s=Cf();return s?s.replace(/\/$/,""):`${window.location.protocol}//${window.location.host}`}function Ha(){return ra(mt.AUTH_TOKEN,"")}function Cf(){return ra(mt.BACKEND_URL,"")}function wM(s){const e=s.trim();$a(mt.BACKEND_URL,e),typeof window<"u"&&window.dispatchEvent(new CustomEvent(Ny,{detail:e}))}function kM(s){if(typeof window>"u")return()=>{};const e=n=>{s(n.detail)},t=n=>{n.key===mt.BACKEND_URL&&s(n.newValue??"")};return window.addEventListener(Ny,e),window.addEventListener("storage",t),()=>{window.removeEventListener(Ny,e),window.removeEventListener("storage",t)}}function ct(s){return`${Tr()}${s}`}async function yt(s,e){const t=Ha(),n=new Headers(e==null?void 0:e.headers);return t&&n.set("X-Auth-Token",t),fetch(s,{...e,headers:n})}function Cd(s){const e=Ha();if(!e)return s;try{const t=!s.startsWith("http://")&&!s.startsWith("https://"),n=t?"http://dummy":void 0,a=new URL(s,n);return a.searchParams.set("token",e),t?a.pathname+a.search:a.toString()}catch{const t=s.includes("?")?"&":"?";return`${s}${t}token=${encodeURIComponent(e)}`}}function ta(s=!1,e){const[t,n]=y.useState(s),[a,i]=y.useState(e),o=y.useCallback(d=>{d!==void 0&&i(d),n(!0)},[]),l=y.useCallback(()=>{n(!1)},[]),c=y.useCallback(()=>{n(d=>!d)},[]);return{isOpen:t,data:a,open:o,close:l,toggle:c,setData:i}}function vL(){const[s,e]=y.useState(null),t=y.useCallback(a=>{e(a)},[]),n=y.useCallback(()=>{e(null)},[]);return{isOpen:s!==null,id:s,open:t,close:n}}function wL(){const[s,e]=y.useState(!1),[t,n]=y.useState({x:0,y:0}),[a,i]=y.useState({x:0,z:0}),[o,l]=y.useState({type:"ground"}),c=y.useCallback((f,p,m)=>{n(f),i(p),l(m),e(!0)},[]),d=y.useCallback(()=>{e(!1)},[]);return{isOpen:s,screenPosition:t,worldPosition:a,target:o,open:c,close:d}}const fi=[],kL=new Set;function Hp(){kL.forEach(s=>s())}function SL(s,e){const t=fi.findIndex(n=>n.id===s);return t!==-1&&fi.splice(t,1),fi.push({id:s,close:e}),Hp(),()=>{const n=fi.findIndex(a=>a.id===s);n!==-1&&(fi.splice(n,1),Hp())}}function Ay(){return fi.length===0?!1:(fi.pop().close(),Hp(),!0)}function jL(...s){const e=new Set(s);for(;fi.length>0;){const t=fi[fi.length-1];if(e.has(t.id))break;fi.pop().close()}Hp()}function Pn(s,e,t){const n=y.useRef(t);n.current=t,y.useEffect(()=>e?SL(s,()=>n.current()):void 0,[s,e])}let My,Ty;try{My=require("@capacitor/haptics").Haptics,Ty=require("@capacitor/haptics").ImpactStyle}catch{}function yj(s,e){const{threshold:t=80,maxVerticalMovement:n=50,enabled:a=!0,onSwipeLeft:i,onSwipeRight:o,onSwipeMove:l,onSwipeCancel:c}=e,d=y.useRef({startX:0,startY:0,startTime:0,isTracking:!1,hasMovedEnough:!1}),f=y.useCallback(x=>{if(x.touches.length!==1)return;const w=x.touches[0];d.current={startX:w.clientX,startY:w.clientY,startTime:Date.now(),isTracking:!0,hasMovedEnough:!1}},[]),p=y.useCallback(x=>{if(!d.current.isTracking||x.touches.length!==1)return;const w=x.touches[0],k=w.clientX-d.current.startX;if(Math.abs(w.clientY-d.current.startY)>n){d.current.isTracking=!1,d.current.hasMovedEnough&&(c==null||c());return}const C=window.innerWidth*.4,N=Math.max(-1,Math.min(1,k/C));Math.abs(k)>=12&&(d.current.hasMovedEnough=!0,l==null||l(N))},[n,l,c]),m=y.useCallback(x=>{const w=d.current.isTracking,k=d.current.hasMovedEnough;if(!w)return;const S=x.changedTouches[0],j=S.clientX-d.current.startX,C=Math.abs(S.clientY-d.current.startY),N=Date.now()-d.current.startTime;d.current.isTracking=!1,d.current.hasMovedEnough=!1,Math.abs(j)>=t&&C<=n&&N<500?(My&&Ty?My.impact({style:Ty.Light}).catch(()=>{navigator.vibrate&&navigator.vibrate(8)}):navigator.vibrate&&navigator.vibrate(8),j>0?o==null||o():i==null||i()):k&&(c==null||c())},[t,n,i,o,c]),b=y.useCallback(()=>{const x=d.current.hasMovedEnough;d.current.isTracking=!1,d.current.hasMovedEnough=!1,x&&(c==null||c())},[c]);y.useEffect(()=>{const x=s.current;if(!(!x||!a||!(window.innerWidth<=768&&"ontouchstart"in window)))return x.addEventListener("touchstart",f,{passive:!0}),x.addEventListener("touchmove",p,{passive:!0}),x.addEventListener("touchend",m,{passive:!0}),x.addEventListener("touchcancel",b,{passive:!0}),()=>{x.removeEventListener("touchstart",f),x.removeEventListener("touchmove",p),x.removeEventListener("touchend",m),x.removeEventListener("touchcancel",b)}},[s,a,f,p,m,b])}const CL={width:400,height:300,copyStyleSheets:!0,keepOnTop:"focus"};function NL(){return"documentPictureInPicture"in window}function AL(s,e){for(const i of s.styleSheets)try{if(i.cssRules){const o=e.createElement("style");for(const l of i.cssRules)o.appendChild(e.createTextNode(l.cssText));e.head.appendChild(o)}}catch{if(i.href){const o=e.createElement("link");o.rel="stylesheet",o.href=i.href,e.head.appendChild(o)}}const t=s.documentElement.style.cssText;t&&(e.documentElement.style.cssText=t);const n=getComputedStyle(s.documentElement),a=[];for(let i=0;i<n.length;i++){const o=n[i];o.startsWith("--")&&a.push(`${o}: ${n.getPropertyValue(o)}`)}if(a.length>0){const i=e.createElement("style");i.textContent=`:root { ${a.join("; ")} }`,e.head.appendChild(i)}}function ML(){const[s,e]=y.useState(!1),[t,n]=y.useState(null),[a,i]=y.useState(null),o=y.useRef(null),l=NL(),c=y.useCallback(()=>{if(o.current){const p=o.current.__cleanupFns;p&&p.forEach(m=>m()),o.current.close(),o.current=null}n(null),i(null),e(!1)},[]),d=y.useCallback(async p=>{if(!l)return console.warn("Document Picture-in-Picture is not supported in this browser"),!1;o.current&&c();const m={...CL,...p};try{const x=await window.documentPictureInPicture.requestWindow({width:m.width,height:m.height,disallowReturnToOpener:!0});o.current=x,m.copyStyleSheets&&AL(document,x.document);const w=x.document.createElement("div");w.id="pip-root",w.style.width="100%",w.style.height="100%",x.document.body.appendChild(w),x.document.body.style.margin="0",x.document.body.style.padding="0",x.document.body.style.overflow="hidden",x.addEventListener("pagehide",()=>{o.current=null,n(null),i(null),e(!1)});const k=[];if(m.keepOnTop&&m.keepOnTop!=="none"){const S=m.keepOnTop==="raise",j=()=>{o.current&&!o.current.closed&&setTimeout(()=>{o.current&&!o.current.closed&&(o.current.focus(),S&&setTimeout(()=>window.focus(),10))},50)},C=()=>{document.visibilityState==="visible"&&o.current&&!o.current.closed&&setTimeout(()=>{o.current&&!o.current.closed&&(o.current.focus(),S&&setTimeout(()=>window.focus(),10))},100)};window.addEventListener("focus",j),document.addEventListener("visibilitychange",C),k.push(()=>window.removeEventListener("focus",j),()=>document.removeEventListener("visibilitychange",C))}return x.__cleanupFns=k,n(x),i(w),e(!0),!0}catch(b){return console.error("Failed to open Picture-in-Picture window:",b),!1}},[l,c]),f=y.useCallback(async p=>{s?c():await d(p)},[s,d,c]);return y.useEffect(()=>()=>{o.current&&o.current.close()},[]),y.useMemo(()=>({isOpen:s,pipWindow:t,pipContainer:a,isSupported:l,open:d,close:c,toggle:f}),[s,t,a,l,d,c,f])}function Au(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,s=>{const e=Math.random()*16|0;return(s==="x"?e:e&3|8).toString(16)})}class TL{constructor(){U(this,"messages",new Map);U(this,"logs",[]);U(this,"maxMessagesPerAgent",200);U(this,"maxLogs",500);U(this,"enabled",!0);U(this,"listeners",new Set);U(this,"logListeners",new Set)}setEnabled(e){this.enabled=e,this.notifyListeners("all")}isEnabled(){return this.enabled}captureSent(e,t){try{const n=JSON.parse(t);console.log(`[AgentDebugger] SENT - agent: ${e.slice(0,4)}, type: ${n.type}, size: ${t.length}B`),this.addMessage(e,{id:Au(),agentId:e,direction:"sent",type:n.type||"unknown",payload:n.payload||n,timestamp:Date.now(),size:t.length,raw:t})}catch(n){console.error("[AgentDebugger] Failed to parse SENT message:",String(n).slice(0,80)),this.addMessage(e,{id:Au(),agentId:e,direction:"sent",type:"parse_error",payload:{error:String(n)},timestamp:Date.now(),size:t.length,raw:t})}}captureReceived(e,t){try{const n=JSON.parse(t);console.log(`[AgentDebugger] RECEIVED - agent: ${e.slice(0,4)}, type: ${n.type}, size: ${t.length}B`),this.addMessage(e,{id:Au(),agentId:e,direction:"received",type:n.type||"unknown",payload:n.payload||n,timestamp:Date.now(),size:t.length,raw:t})}catch(n){console.error("[AgentDebugger] Failed to parse RECEIVED message:",String(n).slice(0,80)),this.addMessage(e,{id:Au(),agentId:e,direction:"received",type:"parse_error",payload:{error:String(n)},timestamp:Date.now(),size:t.length,raw:t})}}addMessage(e,t){let n=this.messages.get(e);n||(n=[],this.messages.set(e,n)),n.push(t),console.log(`[AgentDebugger] Added message for ${e}, total: ${n.length}, type: ${t.type}, direction: ${t.direction}`),n.length>this.maxMessagesPerAgent&&n.shift(),this.notifyListeners(e)}getMessages(e){return this.messages.get(e)||[]}getStats(e){const t=this.getMessages(e),n=t.filter(o=>o.direction==="sent").length,a=t.filter(o=>o.direction==="received").length,i=[...new Set(t.map(o=>o.type))];return{total:t.length,sent:n,received:a,messageTypes:i}}clearMessages(e){this.messages.delete(e),this.notifyListeners(e)}clearAllMessages(){this.messages.clear(),this.notifyListeners("all")}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}notifyListeners(e){this.listeners.forEach(t=>t(e))}getAgentIds(){return Array.from(this.messages.keys())}log(e,t,n,a){const i={id:Au(),level:e,message:t,data:n,timestamp:Date.now(),source:a};this.logs.push(i),this.logs.length>this.maxLogs&&this.logs.shift(),this.notifyLogListeners()}debug(e,t,n){this.log("debug",e,t,n)}info(e,t,n){this.log("info",e,t,n)}warn(e,t,n){this.log("warn",e,t,n)}error(e,t,n){this.log("error",e,t,n)}getLogs(){return this.logs}clearLogs(){this.logs=[],this.notifyLogListeners()}subscribeLogs(e){return this.logListeners.add(e),()=>this.logListeners.delete(e)}notifyLogListeners(){this.logListeners.forEach(e=>e())}}const Xs=new TL,pd={debug:(s,e,t)=>Xs.debug(s,e,t),info:(s,e,t)=>Xs.info(s,e,t),warn:(s,e,t)=>Xs.warn(s,e,t),error:(s,e,t)=>Xs.error(s,e,t)};/*! Capacitor: https://capacitorjs.com/ - MIT License */var xc;(function(s){s.Unimplemented="UNIMPLEMENTED",s.Unavailable="UNAVAILABLE"})(xc||(xc={}));class cb extends Error{constructor(e,t,n){super(e),this.message=e,this.code=t,this.data=n}}const EL=s=>{var e,t;return s!=null&&s.androidBridge?"android":!((t=(e=s==null?void 0:s.webkit)===null||e===void 0?void 0:e.messageHandlers)===null||t===void 0)&&t.bridge?"ios":"web"},_L=s=>{const e=s.CapacitorCustomPlatform||null,t=s.Capacitor||{},n=t.Plugins=t.Plugins||{},a=()=>e!==null?e.name:EL(s),i=()=>a()!=="web",o=p=>{const m=d.get(p);return!!(m!=null&&m.platforms.has(a())||l(p))},l=p=>{var m;return(m=t.PluginHeaders)===null||m===void 0?void 0:m.find(b=>b.name===p)},c=p=>s.console.error(p),d=new Map,f=(p,m={})=>{const b=d.get(p);if(b)return console.warn(`Capacitor plugin "${p}" already registered. Cannot register plugins twice.`),b.proxy;const x=a(),w=l(p);let k;const S=async()=>(!k&&x in m?k=typeof m[x]=="function"?k=await m[x]():k=m[x]:e!==null&&!k&&"web"in m&&(k=typeof m.web=="function"?k=await m.web():k=m.web),k),j=(M,P)=>{var E,R;if(w){const I=w==null?void 0:w.methods.find(O=>P===O.name);if(I)return I.rtype==="promise"?O=>t.nativePromise(p,P.toString(),O):(O,B)=>t.nativeCallback(p,P.toString(),O,B);if(M)return(E=M[P])===null||E===void 0?void 0:E.bind(M)}else{if(M)return(R=M[P])===null||R===void 0?void 0:R.bind(M);throw new cb(`"${p}" plugin is not implemented on ${x}`,xc.Unimplemented)}},C=M=>{let P;const E=(...R)=>{const I=S().then(O=>{const B=j(O,M);if(B){const q=B(...R);return P=q==null?void 0:q.remove,q}else throw new cb(`"${p}.${M}()" is not implemented on ${x}`,xc.Unimplemented)});return M==="addListener"&&(I.remove=async()=>P()),I};return E.toString=()=>`${M.toString()}() { [capacitor code] }`,Object.defineProperty(E,"name",{value:M,writable:!1,configurable:!1}),E},N=C("addListener"),_=C("removeListener"),D=(M,P)=>{const E=N({eventName:M},P),R=async()=>{const O=await E;_({eventName:M,callbackId:O},P)},I=new Promise(O=>E.then(()=>O({remove:R})));return I.remove=async()=>{console.warn("Using addListener() without 'await' is deprecated."),await R()},I},L=new Proxy({},{get(M,P){switch(P){case"$$typeof":return;case"toJSON":return()=>({});case"addListener":return w?D:N;case"removeListener":return _;default:return C(P)}}});return n[p]=L,d.set(p,{name:p,proxy:L,platforms:new Set([...Object.keys(m),...w?[x]:[]])}),L};return t.convertFileSrc||(t.convertFileSrc=p=>p),t.getPlatform=a,t.handleError=c,t.isNativePlatform=i,t.isPluginAvailable=o,t.registerPlugin=f,t.Exception=cb,t.DEBUG=!!t.DEBUG,t.isLoggingEnabled=!!t.isLoggingEnabled,t},DL=s=>s.Capacitor=_L(s),La=DL(typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}),Nd=La.registerPlugin;class Dx{constructor(){this.listeners={},this.retainedEventArguments={},this.windowListeners={}}addListener(e,t){let n=!1;this.listeners[e]||(this.listeners[e]=[],n=!0),this.listeners[e].push(t);const i=this.windowListeners[e];i&&!i.registered&&this.addWindowListener(i),n&&this.sendRetainedArgumentsForEvent(e);const o=async()=>this.removeListener(e,t);return Promise.resolve({remove:o})}async removeAllListeners(){this.listeners={};for(const e in this.windowListeners)this.removeWindowListener(this.windowListeners[e]);this.windowListeners={}}notifyListeners(e,t,n){const a=this.listeners[e];if(!a){if(n){let i=this.retainedEventArguments[e];i||(i=[]),i.push(t),this.retainedEventArguments[e]=i}return}a.forEach(i=>i(t))}hasListeners(e){var t;return!!(!((t=this.listeners[e])===null||t===void 0)&&t.length)}registerWindowListener(e,t){this.windowListeners[t]={registered:!1,windowEventName:e,pluginEventName:t,handler:n=>{this.notifyListeners(t,n)}}}unimplemented(e="not implemented"){return new La.Exception(e,xc.Unimplemented)}unavailable(e="not available"){return new La.Exception(e,xc.Unavailable)}async removeListener(e,t){const n=this.listeners[e];if(!n)return;const a=n.indexOf(t);this.listeners[e].splice(a,1),this.listeners[e].length||this.removeWindowListener(this.windowListeners[e])}addWindowListener(e){window.addEventListener(e.windowEventName,e.handler),e.registered=!0}removeWindowListener(e){e&&(window.removeEventListener(e.windowEventName,e.handler),e.registered=!1)}sendRetainedArgumentsForEvent(e){const t=this.retainedEventArguments[e];t&&(delete this.retainedEventArguments[e],t.forEach(n=>{this.notifyListeners(e,n)}))}}const xj=s=>encodeURIComponent(s).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape),vj=s=>s.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent);class PL extends Dx{async getCookies(){const e=document.cookie,t={};return e.split(";").forEach(n=>{if(n.length<=0)return;let[a,i]=n.replace(/=/,"CAP_COOKIE").split("CAP_COOKIE");a=vj(a).trim(),i=vj(i).trim(),t[a]=i}),t}async setCookie(e){try{const t=xj(e.key),n=xj(e.value),a=e.expires?`; expires=${e.expires.replace("expires=","")}`:"",i=(e.path||"/").replace("path=",""),o=e.url!=null&&e.url.length>0?`domain=${e.url}`:"";document.cookie=`${t}=${n||""}${a}; path=${i}; ${o};`}catch(t){return Promise.reject(t)}}async deleteCookie(e){try{document.cookie=`${e.key}=; Max-Age=0`}catch(t){return Promise.reject(t)}}async clearCookies(){try{const e=document.cookie.split(";")||[];for(const t of e)document.cookie=t.replace(/^ +/,"").replace(/=.*/,`=;expires=${new Date().toUTCString()};path=/`)}catch(e){return Promise.reject(e)}}async clearAllCookies(){try{await this.clearCookies()}catch(e){return Promise.reject(e)}}}Nd("CapacitorCookies",{web:()=>new PL});const RL=async s=>new Promise((e,t)=>{const n=new FileReader;n.onload=()=>{const a=n.result;e(a.indexOf(",")>=0?a.split(",")[1]:a)},n.onerror=a=>t(a),n.readAsDataURL(s)}),LL=(s={})=>{const e=Object.keys(s);return Object.keys(s).map(a=>a.toLocaleLowerCase()).reduce((a,i,o)=>(a[i]=s[e[o]],a),{})},OL=(s,e=!0)=>s?Object.entries(s).reduce((n,a)=>{const[i,o]=a;let l,c;return Array.isArray(o)?(c="",o.forEach(d=>{l=e?encodeURIComponent(d):d,c+=`${i}=${l}&`}),c.slice(0,-1)):(l=e?encodeURIComponent(o):o,c=`${i}=${l}`),`${n}&${c}`},"").substr(1):null,IL=(s,e={})=>{const t=Object.assign({method:s.method||"GET",headers:s.headers},e),a=LL(s.headers)["content-type"]||"";if(typeof s.data=="string")t.body=s.data;else if(a.includes("application/x-www-form-urlencoded")){const i=new URLSearchParams;for(const[o,l]of Object.entries(s.data||{}))i.set(o,l);t.body=i.toString()}else if(a.includes("multipart/form-data")||s.data instanceof FormData){const i=new FormData;if(s.data instanceof FormData)s.data.forEach((l,c)=>{i.append(c,l)});else for(const l of Object.keys(s.data))i.append(l,s.data[l]);t.body=i;const o=new Headers(t.headers);o.delete("content-type"),t.headers=o}else(a.includes("application/json")||typeof s.data=="object")&&(t.body=JSON.stringify(s.data));return t};class BL extends Dx{async request(e){const t=IL(e,e.webFetchExtra),n=OL(e.params,e.shouldEncodeUrlParams),a=n?`${e.url}?${n}`:e.url,i=await fetch(a,t),o=i.headers.get("content-type")||"";let{responseType:l="text"}=i.ok?e:{};o.includes("application/json")&&(l="json");let c,d;switch(l){case"arraybuffer":case"blob":d=await i.blob(),c=await RL(d);break;case"json":c=await i.json();break;case"document":case"text":default:c=await i.text()}const f={};return i.headers.forEach((p,m)=>{f[m]=p}),{data:c,headers:f,status:i.status,url:i.url}}async get(e){return this.request(Object.assign(Object.assign({},e),{method:"GET"}))}async post(e){return this.request(Object.assign(Object.assign({},e),{method:"POST"}))}async put(e){return this.request(Object.assign(Object.assign({},e),{method:"PUT"}))}async patch(e){return this.request(Object.assign(Object.assign({},e),{method:"PATCH"}))}async delete(e){return this.request(Object.assign(Object.assign({},e),{method:"DELETE"}))}}const wj=Nd("CapacitorHttp",{web:()=>new BL});var kj;(function(s){s.Dark="DARK",s.Light="LIGHT",s.Default="DEFAULT"})(kj||(kj={}));var Sj;(function(s){s.StatusBar="StatusBar",s.NavigationBar="NavigationBar"})(Sj||(Sj={}));class zL extends Dx{async setStyle(){this.unavailable("not available for web")}async setAnimation(){this.unavailable("not available for web")}async show(){this.unavailable("not available for web")}async hide(){this.unavailable("not available for web")}}Nd("SystemBars",{web:()=>new zL});var jj;(function(s){s[s.Sunday=1]="Sunday",s[s.Monday=2]="Monday",s[s.Tuesday=3]="Tuesday",s[s.Wednesday=4]="Wednesday",s[s.Thursday=5]="Thursday",s[s.Friday=6]="Friday",s[s.Saturday=7]="Saturday"})(jj||(jj={}));const Px=Nd("LocalNotifications",{web:()=>hM(()=>import("./web-DgJHdoPO.js"),__vite__mapDeps([2,3,1,4])).then(s=>new s.LocalNotificationsWeb)}),FL=Nd("ServerConfig");let $L=100;const HL="agent_alerts",Ey="tide-notification-tap";function UL(){return typeof window<"u"&&window.innerWidth<=768&&"ontouchstart"in window}function SM(s){if(UL()){z.openTerminalOnMobile(s);return}if(document.querySelector(".commander-overlay")){z.requestCommanderExpand(s);return}z.selectAgent(s),z.setTerminalOpen(!0)}function Ad(){try{return La.isNativePlatform()}catch{return!1}}async function GL(){if(Ad())try{const s=await Px.requestPermissions();return console.log("[Notifications] Permission result:",s.display),s.display==="granted"}catch(s){return console.error("[Notifications] Failed to request permissions:",s),!1}else return"Notification"in window?await Notification.requestPermission()==="granted":!1}async function WL(s){const{title:e,body:t,icon:n,data:a}=s;if(Ad())try{const i=$L++;console.log("[Notifications] Scheduling native notification id="+i,e),await Px.schedule({notifications:[{id:i,title:e,body:t,extra:a,channelId:HL,smallIcon:"ic_launcher",autoCancel:!0}]}),console.log("[Notifications] Notification scheduled successfully")}catch(i){console.error("[Notifications] Failed to schedule notification:",i)}else if("Notification"in window&&Notification.permission==="granted"){const i=new Notification(e,{body:t,icon:n,data:a});i.onclick=()=>{window.focus(),a&&window.dispatchEvent(new CustomEvent(Ey,{detail:a}))}}}let ub=!1;async function qL(s){const e=[];if(ub)return()=>{};if(ub=!0,s){const t=n=>{const a=n;a.detail&&s(a.detail)};window.addEventListener(Ey,t),e.push(()=>window.removeEventListener(Ey,t))}if(Ad())try{const t=await Px.addListener("localNotificationActionPerformed",n=>{s&&n.notification.extra&&s(n.notification.extra)});e.push(()=>t.remove())}catch(t){console.error("[Notifications] Failed to add tap listener:",t)}return()=>{e.forEach(t=>t()),ub=!1}}function YL(s,e){Ad()&&FL.syncConfig({url:s,token:e}).catch(t=>{console.warn("[Notifications] Failed to sync config to native service:",t)})}window.__tideWsState||(window.__tideWsState={ws:null,isConnecting:!1,reconnectAttempts:0,reconnectTimeout:null});const Rx=()=>window.__tideWsState.ws,Cj=s=>{window.__tideWsState.ws=s},VL=()=>window.__tideWsState.isConnecting,Mu=s=>{window.__tideWsState.isConnecting=s},_y=()=>window.__tideWsState.reconnectAttempts,Dy=s=>{window.__tideWsState.reconnectAttempts=s},jM=()=>window.__tideWsState.reconnectTimeout,CM=s=>{window.__tideWsState.reconnectTimeout=s},Nj=10,Lx="tide_ws_has_connected";function Aj(){return sessionStorage.getItem(Lx)==="true"}function KL(s){sessionStorage.setItem(Lx,"true")}function XL(){sessionStorage.removeItem(Lx)}let NM=null;const ZL=s=>{NM=s},Mj=()=>NM,We={onToast:null,onAgentCreated:null,onAgentUpdated:null,onAgentDeleted:null,onAgentsSync:null,onAreasSync:null,onSpawnError:null,onSpawnSuccess:null,onToolUse:null,onDirectoryNotFound:null,onDelegation:null,onCustomClassesSync:null,onReconnect:null,onAgentNotification:null,onBuildingUpdated:null,onSubagentStarted:null,onSubagentCompleted:null};function AM(s){s.onToast&&(We.onToast=s.onToast),s.onAgentCreated&&(We.onAgentCreated=s.onAgentCreated),s.onAgentUpdated&&(We.onAgentUpdated=s.onAgentUpdated),s.onAgentDeleted&&(We.onAgentDeleted=s.onAgentDeleted),s.onAgentsSync&&(We.onAgentsSync=s.onAgentsSync),s.onAreasSync&&(We.onAreasSync=s.onAreasSync),s.onSpawnError&&(We.onSpawnError=s.onSpawnError),s.onSpawnSuccess&&(We.onSpawnSuccess=s.onSpawnSuccess),s.onToolUse&&(We.onToolUse=s.onToolUse),s.onDirectoryNotFound&&(We.onDirectoryNotFound=s.onDirectoryNotFound),s.onDelegation&&(We.onDelegation=s.onDelegation),s.onCustomClassesSync&&(We.onCustomClassesSync=s.onCustomClassesSync),s.onReconnect&&(We.onReconnect=s.onReconnect),s.onAgentNotification&&(We.onAgentNotification=s.onAgentNotification),s.onBuildingUpdated&&(We.onBuildingUpdated=s.onBuildingUpdated),s.onSubagentStarted&&(We.onSubagentStarted=s.onSubagentStarted),s.onSubagentCompleted&&(We.onSubagentCompleted=s.onSubagentCompleted)}function QL(){We.onToast=null,We.onAgentCreated=null,We.onAgentUpdated=null,We.onAgentDeleted=null,We.onAgentsSync=null,We.onAreasSync=null,We.onSpawnError=null,We.onSpawnSuccess=null,We.onToolUse=null,We.onDirectoryNotFound=null,We.onDelegation=null,We.onCustomClassesSync=null,We.onReconnect=null,We.onAgentNotification=null,We.onSubagentStarted=null,We.onSubagentCompleted=null}function JL(){We.onAgentCreated=null,We.onAgentUpdated=null,We.onAgentDeleted=null,We.onAgentsSync=null,We.onAreasSync=null,We.onToolUse=null,We.onDelegation=null,We.onCustomClassesSync=null,We.onBuildingUpdated=null,We.onSubagentStarted=null,We.onSubagentCompleted=null}const Kh=new Map,eO=new Map,Py={start(s){},end(s){},async measure(s,e){this.start(s);try{return await e()}finally{this.end(s)}},measureSync(s,e){this.start(s);try{return e()}finally{this.end(s)}},getMetrics(s){const e={},t=s?Kh.has(s)?[[s,Kh.get(s)]]:[]:Array.from(Kh.entries());for(const[n,a]of t){const i=[...a.samples].sort((d,f)=>d-f),o=Math.floor(i.length*.5),l=Math.floor(i.length*.95),c=Math.floor(i.length*.99);e[n]={count:a.count,avgMs:a.totalMs/a.count,minMs:a.minMs,maxMs:a.maxMs,lastMs:a.lastMs,p50Ms:i[o]||0,p95Ms:i[l]||0,p99Ms:i[c]||0}}return e},clear(){Kh.clear(),eO.clear()},report(){}};class tO{constructor(){U(this,"frames",[]);U(this,"lastFrameTime",0);U(this,"frameCount",0);U(this,"fps",0);U(this,"minFps",1/0);U(this,"maxFps",0);U(this,"fpsHistory",[]);U(this,"maxHistorySize",60)}tick(e=200){const t=performance.now();if(this.lastFrameTime>0){const n=t-this.lastFrameTime;n<e&&(this.frames.push(n),this.frames.length>60&&this.frames.shift())}this.lastFrameTime=t,this.frameCount++}update(){if(this.frames.length===0)return;const e=this.frames.reduce((t,n)=>t+n,0)/this.frames.length;this.fps=1e3/e,this.minFps=Math.min(this.minFps,this.fps),this.maxFps=Math.max(this.maxFps,this.fps),this.fpsHistory.push(this.fps),this.fpsHistory.length>this.maxHistorySize&&this.fpsHistory.shift()}getFPS(){return Math.round(this.fps)}getStats(){const e=this.fpsHistory.length>0?this.fpsHistory.reduce((t,n)=>t+n,0)/this.fpsHistory.length:this.fps;return{current:Math.round(this.fps),min:Math.round(this.minFps===1/0?0:this.minFps),max:Math.round(this.maxFps),avg:Math.round(e)}}reset(){this.frames=[],this.lastFrameTime=0,this.frameCount=0,this.fps=0,this.minFps=1/0,this.maxFps=0,this.fpsHistory=[]}}const rc=new tO;class nO{constructor(){U(this,"snapshots",[]);U(this,"maxSnapshots",120);U(this,"intervalId",null);U(this,"leakThresholdMB",50);U(this,"baselineUsedMB",0)}getUsage(){const e=performance.memory;return e?{usedMB:Math.round(e.usedJSHeapSize/1024/1024),totalMB:Math.round(e.totalJSHeapSize/1024/1024),limitMB:Math.round(e.jsHeapSizeLimit/1024/1024)}:null}log(){const e=this.getUsage();e&&console.log(`[Memory] Used: ${e.usedMB}MB / ${e.totalMB}MB (limit: ${e.limitMB}MB)`)}startMonitoring(e=1e3){if(this.intervalId)return;const t=this.getUsage();t&&(this.baselineUsedMB=t.usedMB),this.intervalId=setInterval(()=>{this.takeSnapshot()},e),console.log("[Memory] Monitoring started. Use memory.report() to see analysis.")}stopMonitoring(){this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null,console.log("[Memory] Monitoring stopped."))}takeSnapshot(){const e=this.getUsage();if(!e)return;const t={timestamp:Date.now(),heapUsedMB:e.usedMB,heapTotalMB:e.totalMB,heapLimitMB:e.limitMB};this.snapshots.push(t),this.snapshots.length>this.maxSnapshots&&this.snapshots.shift();const n=e.usedMB-this.baselineUsedMB;n>this.leakThresholdMB&&console.warn(`[Memory] Warning: Heap grew by ${n}MB since monitoring started (baseline: ${this.baselineUsedMB}MB, current: ${e.usedMB}MB)`)}getGrowthRate(){if(this.snapshots.length<10)return null;const e=this.snapshots[0],t=this.snapshots[this.snapshots.length-1],n=(t.timestamp-e.timestamp)/1e3/60;return n<.1?null:(t.heapUsedMB-e.heapUsedMB)/n}report(){const e=this.getUsage();if(!e){console.log("[Memory] Memory API not available (Chrome only)");return}console.group("%c[Memory Report]","color: #ff6600; font-weight: bold"),console.log(`Current: ${e.usedMB}MB / ${e.totalMB}MB (limit: ${e.limitMB}MB)`),console.log(`Baseline: ${this.baselineUsedMB}MB`),console.log(`Growth: ${e.usedMB-this.baselineUsedMB}MB since monitoring started`);const t=this.getGrowthRate();if(t!==null&&(console.log(`Growth Rate: ${t.toFixed(2)}MB/min`),t>5&&console.warn("POTENTIAL MEMORY LEAK: Growth rate exceeds 5MB/min")),this.snapshots.length>1){const n=Math.min(...this.snapshots.map(i=>i.heapUsedMB)),a=Math.max(...this.snapshots.map(i=>i.heapUsedMB));console.log(`Range: ${n}MB - ${a}MB (${a-n}MB variance)`)}console.groupEnd()}getThreeJsInfo(e){var t;return(t=e==null?void 0:e.info)!=null&&t.memory?{geometries:e.info.memory.geometries,textures:e.info.memory.textures}:null}reset(){this.snapshots=[];const e=this.getUsage();e&&(this.baselineUsedMB=e.usedMB),console.log("[Memory] Reset. New baseline:",this.baselineUsedMB,"MB")}}const nc=new nO;function Gu(s,e,t,n,a,i){}function MM(s,e){y.useRef(0),y.useEffect(()=>{},[s,5e3,!0])}if(typeof window<"u"){setInterval(()=>{try{performance.clearMarks(),performance.clearMeasures(),performance.clearResourceTimings()}catch{}},6e4);try{performance.setResourceTimingBufferSize(0)}catch{}}function TM(s){if(s.payload&&typeof s.payload=="object"){const e=s.payload;if(e.agentId)return e.agentId;if(e.parentAgentId)return e.parentAgentId;if(e.bossId)return e.bossId;if(e.id)return e.id}return null}function Ox(s){var t,n,a,i,o,l;const e=Rx();if(!e){(t=Mj())==null||t(),(n=We.onToast)==null||n.call(We,"error","Not Connected","Connecting to server... Please try again in a moment.");return}if(e.readyState!==WebSocket.OPEN){e.readyState===WebSocket.CONNECTING?(a=We.onToast)==null||a.call(We,"warning","Connecting...","WebSocket is still connecting. Please wait a moment and try again."):(e.readyState===WebSocket.CLOSED||e.readyState===WebSocket.CLOSING)&&((i=Mj())==null||i(),(o=We.onToast)==null||o.call(We,"warning","Reconnecting...","Connection lost. Reconnecting to server..."));return}try{const c=JSON.stringify(s),d=TM(s);console.log("[AgentDebugger] SENT - type:",s.type,"agentId:",d,"payload:",s.payload),d&&Xs.captureSent(d,c),e.send(c)}catch(c){(l=We.onToast)==null||l.call(We,"error","Send Failed",`Failed to send message: ${c}`)}}const Wu=new Set,sO=5e3;function Tj(s){if(!s.isDetached||!s.sessionId){Wu.delete(s.id);return}Wu.has(s.id)||(Wu.add(s.id),Ox({type:"reattach_agent",payload:{agentId:s.id}}),setTimeout(()=>{Wu.delete(s.id)},sO))}function aO(s){var e,t,n,a,i,o,l,c,d,f,p,m,b,x,w,k,S,j,C,N,_,D,L;switch(Py.start(`ws:${s.type}`),s.type){case"agents_update":{const M=s.payload,P=M.filter(E=>E.class==="boss"||E.isBoss);P.length>0&&console.log("[WS agents_update] Boss agents received:",P.map(E=>({id:E.id,name:E.name,subordinateIds:E.subordinateIds}))),z.setAgents(M),(e=We.onAgentsSync)==null||e.call(We,M),z.loadToolHistory();for(const E of M)Tj(E);break}case"agent_created":{const M=s.payload;console.log("[WebSocket] Agent created:",M),z.addAgent(M),z.selectAgent(M.id),(t=We.onAgentCreated)==null||t.call(We,M),(n=We.onSpawnSuccess)==null||n.call(We),window.__spawnModalSuccess&&(console.log("[WebSocket] Calling __spawnModalSuccess"),window.__spawnModalSuccess()),(a=We.onToast)==null||a.call(We,"success","Agent Deployed",`${M.name} is ready for commands`);break}case"agent_updated":{const M=s.payload,E=z.getState().agents.get(M.id),R=(E==null?void 0:E.status)!==M.status;console.log(`[Tide] Agent updated: ${M.name} (${M.id}) status=${M.status} (was ${E==null?void 0:E.status})${R?" ⚡ STATUS CHANGED":""}`),R&&console.log(`[Tide] 🔔 Status change for ${M.name}: ${E==null?void 0:E.status} → ${M.status}`),R&&(E==null?void 0:E.status)==="working"&&M.status==="idle"&&z.triggerHistoryRefresh(M.id);const I=E?E.position.x!==M.position.x||E.position.z!==M.position.z:!1;z.updateAgent(M),Tj(M),(i=We.onAgentUpdated)==null||i.call(We,M,I);break}case"agent_deleted":{const{id:M}=s.payload;Wu.delete(M),z.removeAgent(M),(o=We.onAgentDeleted)==null||o.call(We,M);break}case"activity":{const M=s.payload;z.addActivity(M);break}case"event":{const M=s.payload;if(pd.debug(`Event: ${M.type}`,{agentId:M.agentId,toolName:M.toolName},"ws:event"),M.type==="tool_start"&&M.toolName&&((l=We.onToolUse)==null||l.call(We,M.agentId,M.toolName,M.toolInput),z.addToolExecution(M.agentId,M.toolName,M.toolInput),M.toolInput)){const P=M.toolInput.file_path||M.toolInput.path;P&&(M.toolName==="Write"?z.addFileChange(M.agentId,"created",P):M.toolName==="Edit"?z.addFileChange(M.agentId,"modified",P):M.toolName==="Read"&&z.addFileChange(M.agentId,"read",P))}break}case"output":{const M=s.payload;pd.debug(`Output: "${M.text.slice(0,80)}..."`,{agentId:M.agentId,isStreaming:M.isStreaming,length:M.text.length,hasSkillUpdate:!!M.skillUpdate,uuid:M.uuid,toolName:M.toolName},"ws:output"),z.addOutput(M.agentId,{text:M.text,isStreaming:M.isStreaming,timestamp:M.timestamp,isDelegation:M.isDelegation,skillUpdate:M.skillUpdate,subagentName:M.subagentName,uuid:M.uuid,toolName:M.toolName,toolInput:M.toolInput,toolOutput:M.toolOutput});break}case"context_stats":{const{agentId:M,stats:P}=s.payload;console.log(`[Tide] Received context stats for agent ${M}: ${P.usedPercent}% used`),z.updateAgentContextStats(M,P);break}case"context_update":{const{agentId:M,contextUsed:P,contextLimit:E}=s.payload;z.updateAgentContext(M,P,E);break}case"error":{const M=s.payload;console.error("[WebSocket] Error from server:",M.message),(c=We.onToast)==null||c.call(We,"error","Error",M.message),(d=We.onSpawnError)==null||d.call(We),window.__spawnModalError&&(console.log("[WebSocket] Calling __spawnModalError"),window.__spawnModalError());break}case"directory_not_found":{const{path:M}=s.payload;console.log("[WebSocket] Directory not found:",M),(f=We.onDirectoryNotFound)==null||f.call(We,M),window.__spawnModalDirNotFound&&(console.log("[WebSocket] Calling __spawnModalDirNotFound"),window.__spawnModalDirNotFound(M));break}case"command_started":{const{agentId:M,command:P}=s.payload,E=P.trim();if(E==="/context"||E==="/cost"||E==="/compact")break;z.addUserPromptToOutput(M,P);break}case"session_updated":{const{agentId:M}=s.payload;z.loadToolHistory(),z.triggerHistoryRefresh(M);const P=z.getState().agents.get(M);P&&z.updateAgent({...P});break}case"supervisor_report":{const M=s.payload;z.setSupervisorReport(M);break}case"narrative_update":{const{agentId:M,narrative:P}=s.payload;z.addNarrative(M,P);break}case"supervisor_status":{const M=s.payload;z.setSupervisorStatus(M);break}case"agent_supervisor_history":{const M=s.payload;z.setAgentSupervisorHistory(M);break}case"agent_analysis":{const{agentId:M,analysis:P}=s.payload;z.addAgentAnalysis(M,P);break}case"areas_update":{const M=s.payload;z.setAreasFromServer(M),(p=We.onAreasSync)==null||p.call(We);break}case"buildings_update":{const M=s.payload;z.setBuildingsFromServer(M);break}case"building_created":{const M=s.payload;z.addBuilding(M);break}case"building_updated":{const M=s.payload;z.updateBuildingFromServer(M),(m=We.onBuildingUpdated)==null||m.call(We,M);break}case"building_deleted":{const{id:M}=s.payload;z.removeBuildingFromServer(M);break}case"building_logs":{const{buildingId:M,logs:P}=s.payload;z.addBuildingLogs(M,P);break}case"pm2_logs_chunk":{const{buildingId:M,chunk:P}=s.payload;z.appendStreamingLogChunk(M,P);break}case"pm2_logs_streaming":{const{buildingId:M,streaming:P}=s.payload;z.setStreamingStatus(M,P);break}case"docker_logs_chunk":{const{buildingId:M,chunk:P}=s.payload;z.appendStreamingLogChunk(M,P);break}case"docker_logs_streaming":{const{buildingId:M,streaming:P}=s.payload;z.setStreamingStatus(M,P);break}case"docker_containers_list":{const{containers:M,composeProjects:P}=s.payload;console.log(`[WebSocket] Received ${M.length} containers, ${P.length} compose projects`),z.setDockerContainersList(M,P);break}case"boss_building_logs_chunk":{const{bossBuildingId:M,subordinateBuildingId:P,subordinateBuildingName:E,chunk:R,isError:I}=s.payload;z.appendBossStreamingLogChunk(M,P,E,R,I);break}case"boss_building_subordinates_updated":{const{bossBuildingId:M,subordinateBuildingIds:P}=s.payload;z.updateBuilding(M,{subordinateBuildingIds:P});break}case"permission_request":{const M=s.payload;z.addPermissionRequest(M);break}case"permission_resolved":{const{requestId:M,approved:P}=s.payload;z.resolvePermissionRequest(M,P);break}case"delegation_decision":{const M=s.payload;z.handleDelegationDecision(M),M.status==="sent"&&((b=We.onToast)==null||b.call(We,"info","Task Delegated",`Delegated to ${M.selectedAgentName}: ${M.reasoning.slice(0,80)}...`),M.bossId&&M.selectedAgentId&&((x=We.onDelegation)==null||x.call(We,M.bossId,M.selectedAgentId)));break}case"boss_subordinates_updated":{const{bossId:M,subordinateIds:P}=s.payload;z.updateBossSubordinates(M,P);break}case"delegation_history":{const{bossId:M,decisions:P}=s.payload;z.setDelegationHistory(M,P);break}case"boss_spawned_agent":{const{agent:M,bossPosition:P}=s.payload;console.log("[WebSocket] Boss spawned agent:",M.name,"- walking to boss at",P),z.addAgent(M),(w=We.onAgentCreated)==null||w.call(We,M),Ox({type:"move_agent",payload:{agentId:M.id,position:P}}),(k=We.onToast)==null||k.call(We,"success","Agent Deployed",`${M.name} spawned by boss, walking to position`);break}case"agent_task_started":{const{bossId:M,subordinateId:P,subordinateName:E,taskDescription:R}=s.payload;console.log(`[WebSocket] Agent ${E} started task for boss ${M}: ${R.slice(0,50)}...`),z.handleAgentTaskStarted(M,P,E,R);break}case"agent_task_output":{const{bossId:M,subordinateId:P,output:E}=s.payload;z.handleAgentTaskOutput(M,P,E);break}case"agent_task_completed":{const{bossId:M,subordinateId:P,success:E}=s.payload;console.log(`[WebSocket] Agent task completed for boss ${M}, subordinate ${P}, success: ${E}`),z.handleAgentTaskCompleted(M,P,E);break}case"skills_update":{const M=s.payload;z.setSkillsFromServer(M);break}case"skill_created":{const M=s.payload;z.addSkillFromServer(M),console.log(`[WebSocket] Skill created: ${M.name}`);break}case"skill_updated":{const M=s.payload;z.updateSkillFromServer(M),console.log(`[WebSocket] Skill updated: ${M.name}`);break}case"skill_deleted":{const{id:M}=s.payload;z.removeSkillFromServer(M),console.log(`[WebSocket] Skill deleted: ${M}`);break}case"agent_skills":{const{agentId:M,skills:P}=s.payload;console.log(`[WebSocket] Agent ${M} has ${P.length} skills`);break}case"custom_agent_classes_update":{const M=s.payload;z.setCustomAgentClassesFromServer(M),console.log(`[WebSocket] Received ${M.length} custom agent classes`);const P=new Map;for(const E of M)P.set(E.id,E);(S=We.onCustomClassesSync)==null||S.call(We,P);break}case"custom_agent_class_created":{const M=s.payload;z.addCustomAgentClassFromServer(M),console.log(`[WebSocket] Custom agent class created: ${M.name}`),(j=We.onCustomClassesSync)==null||j.call(We,z.getState().customAgentClasses);break}case"custom_agent_class_updated":{const M=s.payload;z.updateCustomAgentClassFromServer(M),console.log(`[WebSocket] Custom agent class updated: ${M.name}`),(C=We.onCustomClassesSync)==null||C.call(We,z.getState().customAgentClasses);break}case"custom_agent_class_deleted":{const{id:M}=s.payload;z.removeCustomAgentClassFromServer(M),console.log(`[WebSocket] Custom agent class deleted: ${M}`),(N=We.onCustomClassesSync)==null||N.call(We,z.getState().customAgentClasses);break}case"global_usage":{const M=s.payload;console.log("[WebSocket] Global usage update:",M),z.setGlobalUsage(M);break}case"agent_notification":{const M=s.payload;console.log(`[WebSocket] Agent notification from ${M.agentName}: ${M.title}`),(_=We.onAgentNotification)==null||_.call(We,M);break}case"focus_agent":{const{agentId:M,openTerminal:P}=s.payload;if(!z.getState().agents.get(M)){console.warn(`[WebSocket] focus_agent ignored - agent not found: ${M}`);break}z.selectAgent(M),P&&z.setTerminalOpen(!0);const R=[0,80,220,500,1e3];for(const I of R)window.setTimeout(()=>{window.focus()},I);break}case"exec_task_started":{const{taskId:M,agentId:P,agentName:E,command:R,cwd:I}=s.payload;console.log(`[WebSocket] Exec task started: ${M} for agent ${E}: ${R.slice(0,50)}...`),z.handleExecTaskStarted(M,P,E,R,I);break}case"exec_task_output":{const{taskId:M,agentId:P,output:E,isError:R}=s.payload;z.handleExecTaskOutput(M,P,E,R);break}case"exec_task_completed":{const{taskId:M,agentId:P,exitCode:E,success:R}=s.payload;console.log(`[WebSocket] Exec task completed: ${M} for agent ${P}, success: ${R}`),z.handleExecTaskCompleted(M,P,E,R);break}case"subagent_started":{const M=s.payload;console.log(`[WebSocket] Subagent started: ${M.name} (${M.id}) for agent ${M.parentAgentId}`),z.addSubagent(M),(D=We.onSubagentStarted)==null||D.call(We,M);break}case"subagent_output":{const{subagentId:M,parentAgentId:P,text:E,timestamp:R}=s.payload,I=E.indexOf(":");if(I>0){const O=E.slice(0,I).trim(),B=E.slice(I+1).trim();z.addSubagentActivity(M,P,{toolName:O,description:B,timestamp:R})}else E.startsWith("Using ")&&z.addSubagentActivity(M,P,{toolName:E.slice(6).trim(),description:"",timestamp:R});break}case"subagent_completed":{const{subagentId:M,parentAgentId:P,success:E,resultPreview:R,subagentName:I,durationMs:O,tokensUsed:B,toolUseCount:q}=s.payload;console.log(`[WebSocket] Subagent completed: ${M} for agent ${P}, success: ${E}`),(O||B||q)&&z.updateSubagentStats(M,P,{durationMs:O||0,tokensUsed:B||0,toolUseCount:q||0}),z.completeSubagent(M,P,E),(L=We.onSubagentCompleted)==null||L.call(We,M);const H=z.getSubagent(M)||z.getSubagentByToolUseId(M),G=I||(H==null?void 0:H.name)||M,K=E?"✅":"❌",X=O?` (${(O/1e3).toFixed(0)}s · ${((B||0)/1e3).toFixed(1)}K tokens · ${q||0} tools)`:"";z.addOutput(P,{text:`${K} Subagent ${G} ${E?"completed":"failed"}${X}`,isStreaming:!1,timestamp:Date.now(),subagentName:G,toolOutput:R});break}case"subagent_stream":{const{toolUseId:M,parentAgentId:P,entries:E}=s.payload;z.addSubagentStreamEntries(M,P,E);break}case"secrets_update":{const M=s.payload;z.setSecretsFromServer(M),console.log(`[WebSocket] Received ${M.length} secrets`);break}case"secret_created":{const M=s.payload;z.addSecretFromServer(M),console.log(`[WebSocket] Secret created: ${M.name}`);break}case"secret_updated":{const M=s.payload;z.updateSecretFromServer(M),console.log(`[WebSocket] Secret updated: ${M.name}`);break}case"secret_deleted":{const{id:M}=s.payload;z.removeSecretFromServer(M),console.log(`[WebSocket] Secret deleted: ${M}`);break}case"database_connection_result":{const{buildingId:M,connectionId:P,success:E,error:R,serverVersion:I}=s.payload;z.setConnectionStatus(M,P,{connected:E,error:R,serverVersion:I}),console.log(`[WebSocket] Database connection ${E?"succeeded":"failed"}: ${P}`);break}case"databases_list":{const{buildingId:M,connectionId:P,databases:E}=s.payload;z.setDatabases(M,P,E),console.log(`[WebSocket] Received ${E.length} databases for ${P}`);break}case"tables_list":{const{buildingId:M,connectionId:P,database:E,tables:R}=s.payload;z.setTables(M,P,E,R),console.log(`[WebSocket] Received ${R.length} tables for ${E}`);break}case"table_schema":{const{buildingId:M,connectionId:P,database:E,table:R,columns:I,indexes:O,foreignKeys:B}=s.payload;z.setTableSchema(M,P,E,R,{columns:I,indexes:O||[],foreignKeys:B||[]}),console.log(`[WebSocket] Received schema for ${R}`);break}case"query_result":{const{buildingId:M,result:P}=s.payload;z.setQueryResult(M,P),console.log(`[WebSocket] Query ${P.status}: ${P.rowCount??P.affectedRows??0} rows in ${P.duration}ms`);break}case"silent_query_result":{const{buildingId:M,query:P,requestId:E,success:R,affectedRows:I,error:O}=s.payload;z.setSilentQueryResult(M,{query:P,requestId:E,success:R,affectedRows:I,error:O}),console.log(`[WebSocket] Silent query ${R?"succeeded":"failed"}: ${I??0} affected rows`);break}case"query_history_update":{const{buildingId:M,history:P}=s.payload;z.setQueryHistory(M,P),console.log(`[WebSocket] Received ${P.length} query history entries for ${M}`);break}}Py.end(`ws:${s.type}`)}ZL(()=>fd());let Ej=!1;function EM(){const s=Rx();s&&s.readyState===WebSocket.OPEN&&s.close(1e3,"Page unloading");const e=jM();e&&clearTimeout(e),window.__tideWsState&&(window.__tideWsState.ws=null,window.__tideWsState.reconnectTimeout=null,window.__tideWsState.isConnecting=!1,window.__tideWsState.reconnectAttempts=0),XL()}function iO(){Ej||(window.addEventListener("beforeunload",EM),Ej=!0)}function _M(){EM(),z.setConnected(!1),z.stopStatusPolling()}function jp(){_M(),Dy(0),setTimeout(()=>fd(),100)}function fd(){iO();const s=jM();s&&(clearTimeout(s),CM(null));const e=Rx();if(VL()||e&&e.readyState===WebSocket.CONNECTING)return;if(e&&e.readyState===WebSocket.OPEN){Aj()&&We.onReconnect&&We.onReconnect();return}Dy(_y()+1),Mu(!0);const t=Cf(),n=Ha(),a=6200;let i;if(t){const l=t.replace(/^https:\/\//,"wss://").replace(/^http:\/\//,"ws://");i=l.endsWith("/ws")?l:`${l.replace(/\/$/,"")}/ws`}else i=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/ws`;let o=null;try{n?o=new WebSocket(i,[`auth-${n}`]):o=new WebSocket(i)}catch{Mu(!1),_j();return}Cj(o),o.onopen=()=>{var c,d,f;const l=Aj();Mu(!1),Dy(0),KL(),z.setConnected(!0),z.startStatusPolling(),z.clearAllPermissions(),l?((c=We.onToast)==null||c.call(We,"success","Reconnected","Connection restored - refreshing data..."),(d=We.onReconnect)==null||d.call(We)):(f=We.onToast)==null||f.call(We,"success","Connected","Connected to Tide Commander server"),YL(t,n)},o.onmessage=l=>{try{const c=JSON.parse(l.data),d=TM(c);console.log("[AgentDebugger] RECEIVED - type:",c.type,"agentId:",d,"payload:",c.payload),d&&Xs.captureReceived(d,l.data),aO(c)}catch(c){const d=l.data.substring(0,200);console.error("[WS] Failed to parse message:",c),console.error("[WS] Raw data (first 200 chars):",d),console.error("[WS] Full data length:",l.data.length),l.data.length<5e3&&console.error("[WS] Full malformed message:",l.data)}},o.onclose=()=>{var c,d;Mu(!1),Cj(null),z.setConnected(!1),z.stopStatusPolling();const l=_y();l<Nj?((c=We.onToast)==null||c.call(We,"warning","Disconnected",`Connection lost. Reconnecting... (attempt ${l+1}/${Nj})`),_j()):(d=We.onToast)==null||d.call(We,"error","Connection Failed",`Could not connect to server. Please check if the backend is running on port ${a}.`)},o.onerror=()=>{Mu(!1)},z.setSendMessage(Ox)}function _j(){const s=_y(),e=Math.min(1e3*Math.pow(2,s-1),3e4);CM(setTimeout(fd,e))}function Dj(s,e){if(e===dP)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),s;if(e===py||e===WA){let t=s.getIndex();if(t===null){const o=[],l=s.getAttribute("position");if(l!==void 0){for(let c=0;c<l.count;c++)o.push(c);s.setIndex(o),t=s.getIndex()}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),s}const n=t.count-2,a=[];if(e===py)for(let o=1;o<=n;o++)a.push(t.getX(0)),a.push(t.getX(o)),a.push(t.getX(o+1));else for(let o=0;o<n;o++)o%2===0?(a.push(t.getX(o)),a.push(t.getX(o+1)),a.push(t.getX(o+2))):(a.push(t.getX(o+2)),a.push(t.getX(o+1)),a.push(t.getX(o)));a.length/3!==n&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const i=s.clone();return i.setIndex(a),i.clearGroups(),i}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",e),s}class Ix extends qA{constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(t){return new uO(t)}),this.register(function(t){return new dO(t)}),this.register(function(t){return new vO(t)}),this.register(function(t){return new wO(t)}),this.register(function(t){return new kO(t)}),this.register(function(t){return new pO(t)}),this.register(function(t){return new fO(t)}),this.register(function(t){return new mO(t)}),this.register(function(t){return new gO(t)}),this.register(function(t){return new cO(t)}),this.register(function(t){return new bO(t)}),this.register(function(t){return new hO(t)}),this.register(function(t){return new xO(t)}),this.register(function(t){return new yO(t)}),this.register(function(t){return new oO(t)}),this.register(function(t){return new SO(t)}),this.register(function(t){return new jO(t)})}load(e,t,n,a){const i=this;let o;if(this.resourcePath!=="")o=this.resourcePath;else if(this.path!==""){const d=Ku.extractUrlBase(e);o=Ku.resolveURL(d,this.path)}else o=Ku.extractUrlBase(e);this.manager.itemStart(e);const l=function(d){a?a(d):console.error(d),i.manager.itemError(e),i.manager.itemEnd(e)},c=new Rp(this.manager);c.setPath(this.path),c.setResponseType("arraybuffer"),c.setRequestHeader(this.requestHeader),c.setWithCredentials(this.withCredentials),c.load(e,function(d){try{i.parse(d,o,function(f){t(f),i.manager.itemEnd(e)},l)}catch(f){l(f)}},n,l)}setDRACOLoader(e){return this.dracoLoader=e,this}setKTX2Loader(e){return this.ktx2Loader=e,this}setMeshoptDecoder(e){return this.meshoptDecoder=e,this}register(e){return this.pluginCallbacks.indexOf(e)===-1&&this.pluginCallbacks.push(e),this}unregister(e){return this.pluginCallbacks.indexOf(e)!==-1&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e),1),this}parse(e,t,n,a){let i;const o={},l={},c=new TextDecoder;if(typeof e=="string")i=JSON.parse(e);else if(e instanceof ArrayBuffer)if(c.decode(new Uint8Array(e,0,4))===DM){try{o[en.KHR_BINARY_GLTF]=new CO(e)}catch(p){a&&a(p);return}i=JSON.parse(o[en.KHR_BINARY_GLTF].content)}else i=JSON.parse(c.decode(e));else i=e;if(i.asset===void 0||i.asset.version[0]<2){a&&a(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."));return}const d=new BO(i,{path:t||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});d.fileLoader.setRequestHeader(this.requestHeader);for(let f=0;f<this.pluginCallbacks.length;f++){const p=this.pluginCallbacks[f](d);p.name||console.error("THREE.GLTFLoader: Invalid plugin found: missing name"),l[p.name]=p,o[p.name]=!0}if(i.extensionsUsed)for(let f=0;f<i.extensionsUsed.length;++f){const p=i.extensionsUsed[f],m=i.extensionsRequired||[];switch(p){case en.KHR_MATERIALS_UNLIT:o[p]=new lO;break;case en.KHR_DRACO_MESH_COMPRESSION:o[p]=new NO(i,this.dracoLoader);break;case en.KHR_TEXTURE_TRANSFORM:o[p]=new AO;break;case en.KHR_MESH_QUANTIZATION:o[p]=new MO;break;default:m.indexOf(p)>=0&&l[p]===void 0&&console.warn('THREE.GLTFLoader: Unknown extension "'+p+'".')}}d.setExtensions(o),d.setPlugins(l),d.parse(n,a)}parseAsync(e,t){const n=this;return new Promise(function(a,i){n.parse(e,t,a,i)})}}function rO(){let s={};return{get:function(e){return s[e]},add:function(e,t){s[e]=t},remove:function(e){delete s[e]},removeAll:function(){s={}}}}const en={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_DISPERSION:"KHR_materials_dispersion",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_MATERIALS_BUMP:"EXT_materials_bump",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};class oO{constructor(e){this.parser=e,this.name=en.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const e=this.parser,t=this.parser.json.nodes||[];for(let n=0,a=t.length;n<a;n++){const i=t[n];i.extensions&&i.extensions[this.name]&&i.extensions[this.name].light!==void 0&&e._addNodeRef(this.cache,i.extensions[this.name].light)}}_loadLight(e){const t=this.parser,n="light:"+e;let a=t.cache.get(n);if(a)return a;const i=t.json,c=((i.extensions&&i.extensions[this.name]||{}).lights||[])[e];let d;const f=new Ut(16777215);c.color!==void 0&&f.setRGB(c.color[0],c.color[1],c.color[2],Gi);const p=c.range!==void 0?c.range:0;switch(c.type){case"directional":d=new uc(f),d.target.position.set(0,0,-1),d.add(d.target);break;case"point":d=new YA(f),d.distance=p;break;case"spot":d=new hP(f),d.distance=p,c.spot=c.spot||{},c.spot.innerConeAngle=c.spot.innerConeAngle!==void 0?c.spot.innerConeAngle:0,c.spot.outerConeAngle=c.spot.outerConeAngle!==void 0?c.spot.outerConeAngle:Math.PI/4,d.angle=c.spot.outerConeAngle,d.penumbra=1-c.spot.innerConeAngle/c.spot.outerConeAngle,d.target.position.set(0,0,-1),d.add(d.target);break;default:throw new Error("THREE.GLTFLoader: Unexpected light type: "+c.type)}return d.position.set(0,0,0),d.decay=2,br(d,c),c.intensity!==void 0&&(d.intensity=c.intensity),d.name=t.createUniqueName(c.name||"light_"+e),a=Promise.resolve(d),t.cache.add(n,a),a}getDependency(e,t){if(e==="light")return this._loadLight(t)}createNodeAttachment(e){const t=this,n=this.parser,i=n.json.nodes[e],l=(i.extensions&&i.extensions[this.name]||{}).light;return l===void 0?null:this._loadLight(l).then(function(c){return n._getNodeRef(t.cache,l,c)})}}class lO{constructor(){this.name=en.KHR_MATERIALS_UNLIT}getMaterialType(){return Ke}extendParams(e,t,n){const a=[];e.color=new Ut(1,1,1),e.opacity=1;const i=t.pbrMetallicRoughness;if(i){if(Array.isArray(i.baseColorFactor)){const o=i.baseColorFactor;e.color.setRGB(o[0],o[1],o[2],Gi),e.opacity=o[3]}i.baseColorTexture!==void 0&&a.push(n.assignTexture(e,"map",i.baseColorTexture,mi))}return Promise.all(a)}}class cO{constructor(e){this.parser=e,this.name=en.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(e,t){const a=this.parser.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const i=a.extensions[this.name].emissiveStrength;return i!==void 0&&(t.emissiveIntensity=i),Promise.resolve()}}class uO{constructor(e){this.parser=e,this.name=en.KHR_MATERIALS_CLEARCOAT}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qi}extendMaterialParams(e,t){const n=this.parser,a=n.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const i=[],o=a.extensions[this.name];if(o.clearcoatFactor!==void 0&&(t.clearcoat=o.clearcoatFactor),o.clearcoatTexture!==void 0&&i.push(n.assignTexture(t,"clearcoatMap",o.clearcoatTexture)),o.clearcoatRoughnessFactor!==void 0&&(t.clearcoatRoughness=o.clearcoatRoughnessFactor),o.clearcoatRoughnessTexture!==void 0&&i.push(n.assignTexture(t,"clearcoatRoughnessMap",o.clearcoatRoughnessTexture)),o.clearcoatNormalTexture!==void 0&&(i.push(n.assignTexture(t,"clearcoatNormalMap",o.clearcoatNormalTexture)),o.clearcoatNormalTexture.scale!==void 0)){const l=o.clearcoatNormalTexture.scale;t.clearcoatNormalScale=new Ys(l,l)}return Promise.all(i)}}class dO{constructor(e){this.parser=e,this.name=en.KHR_MATERIALS_DISPERSION}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qi}extendMaterialParams(e,t){const a=this.parser.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const i=a.extensions[this.name];return t.dispersion=i.dispersion!==void 0?i.dispersion:0,Promise.resolve()}}class hO{constructor(e){this.parser=e,this.name=en.KHR_MATERIALS_IRIDESCENCE}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qi}extendMaterialParams(e,t){const n=this.parser,a=n.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const i=[],o=a.extensions[this.name];return o.iridescenceFactor!==void 0&&(t.iridescence=o.iridescenceFactor),o.iridescenceTexture!==void 0&&i.push(n.assignTexture(t,"iridescenceMap",o.iridescenceTexture)),o.iridescenceIor!==void 0&&(t.iridescenceIOR=o.iridescenceIor),t.iridescenceThicknessRange===void 0&&(t.iridescenceThicknessRange=[100,400]),o.iridescenceThicknessMinimum!==void 0&&(t.iridescenceThicknessRange[0]=o.iridescenceThicknessMinimum),o.iridescenceThicknessMaximum!==void 0&&(t.iridescenceThicknessRange[1]=o.iridescenceThicknessMaximum),o.iridescenceThicknessTexture!==void 0&&i.push(n.assignTexture(t,"iridescenceThicknessMap",o.iridescenceThicknessTexture)),Promise.all(i)}}class pO{constructor(e){this.parser=e,this.name=en.KHR_MATERIALS_SHEEN}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qi}extendMaterialParams(e,t){const n=this.parser,a=n.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const i=[];t.sheenColor=new Ut(0,0,0),t.sheenRoughness=0,t.sheen=1;const o=a.extensions[this.name];if(o.sheenColorFactor!==void 0){const l=o.sheenColorFactor;t.sheenColor.setRGB(l[0],l[1],l[2],Gi)}return o.sheenRoughnessFactor!==void 0&&(t.sheenRoughness=o.sheenRoughnessFactor),o.sheenColorTexture!==void 0&&i.push(n.assignTexture(t,"sheenColorMap",o.sheenColorTexture,mi)),o.sheenRoughnessTexture!==void 0&&i.push(n.assignTexture(t,"sheenRoughnessMap",o.sheenRoughnessTexture)),Promise.all(i)}}class fO{constructor(e){this.parser=e,this.name=en.KHR_MATERIALS_TRANSMISSION}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qi}extendMaterialParams(e,t){const n=this.parser,a=n.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const i=[],o=a.extensions[this.name];return o.transmissionFactor!==void 0&&(t.transmission=o.transmissionFactor),o.transmissionTexture!==void 0&&i.push(n.assignTexture(t,"transmissionMap",o.transmissionTexture)),Promise.all(i)}}class mO{constructor(e){this.parser=e,this.name=en.KHR_MATERIALS_VOLUME}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qi}extendMaterialParams(e,t){const n=this.parser,a=n.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const i=[],o=a.extensions[this.name];t.thickness=o.thicknessFactor!==void 0?o.thicknessFactor:0,o.thicknessTexture!==void 0&&i.push(n.assignTexture(t,"thicknessMap",o.thicknessTexture)),t.attenuationDistance=o.attenuationDistance||1/0;const l=o.attenuationColor||[1,1,1];return t.attenuationColor=new Ut().setRGB(l[0],l[1],l[2],Gi),Promise.all(i)}}class gO{constructor(e){this.parser=e,this.name=en.KHR_MATERIALS_IOR}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qi}extendMaterialParams(e,t){const a=this.parser.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const i=a.extensions[this.name];return t.ior=i.ior!==void 0?i.ior:1.5,Promise.resolve()}}class bO{constructor(e){this.parser=e,this.name=en.KHR_MATERIALS_SPECULAR}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qi}extendMaterialParams(e,t){const n=this.parser,a=n.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const i=[],o=a.extensions[this.name];t.specularIntensity=o.specularFactor!==void 0?o.specularFactor:1,o.specularTexture!==void 0&&i.push(n.assignTexture(t,"specularIntensityMap",o.specularTexture));const l=o.specularColorFactor||[1,1,1];return t.specularColor=new Ut().setRGB(l[0],l[1],l[2],Gi),o.specularColorTexture!==void 0&&i.push(n.assignTexture(t,"specularColorMap",o.specularColorTexture,mi)),Promise.all(i)}}class yO{constructor(e){this.parser=e,this.name=en.EXT_MATERIALS_BUMP}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qi}extendMaterialParams(e,t){const n=this.parser,a=n.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const i=[],o=a.extensions[this.name];return t.bumpScale=o.bumpFactor!==void 0?o.bumpFactor:1,o.bumpTexture!==void 0&&i.push(n.assignTexture(t,"bumpMap",o.bumpTexture)),Promise.all(i)}}class xO{constructor(e){this.parser=e,this.name=en.KHR_MATERIALS_ANISOTROPY}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qi}extendMaterialParams(e,t){const n=this.parser,a=n.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const i=[],o=a.extensions[this.name];return o.anisotropyStrength!==void 0&&(t.anisotropy=o.anisotropyStrength),o.anisotropyRotation!==void 0&&(t.anisotropyRotation=o.anisotropyRotation),o.anisotropyTexture!==void 0&&i.push(n.assignTexture(t,"anisotropyMap",o.anisotropyTexture)),Promise.all(i)}}class vO{constructor(e){this.parser=e,this.name=en.KHR_TEXTURE_BASISU}loadTexture(e){const t=this.parser,n=t.json,a=n.textures[e];if(!a.extensions||!a.extensions[this.name])return null;const i=a.extensions[this.name],o=t.options.ktx2Loader;if(!o){if(n.extensionsRequired&&n.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return t.loadTextureImage(e,i.source,o)}}class wO{constructor(e){this.parser=e,this.name=en.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(e){const t=this.name,n=this.parser,a=n.json,i=a.textures[e];if(!i.extensions||!i.extensions[t])return null;const o=i.extensions[t],l=a.images[o.source];let c=n.textureLoader;if(l.uri){const d=n.options.manager.getHandler(l.uri);d!==null&&(c=d)}return this.detectSupport().then(function(d){if(d)return n.loadTextureImage(e,o.source,c);if(a.extensionsRequired&&a.extensionsRequired.indexOf(t)>=0)throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return n.loadTexture(e)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(e){const t=new Image;t.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",t.onload=t.onerror=function(){e(t.height===1)}})),this.isSupported}}class kO{constructor(e){this.parser=e,this.name=en.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(e){const t=this.name,n=this.parser,a=n.json,i=a.textures[e];if(!i.extensions||!i.extensions[t])return null;const o=i.extensions[t],l=a.images[o.source];let c=n.textureLoader;if(l.uri){const d=n.options.manager.getHandler(l.uri);d!==null&&(c=d)}return this.detectSupport().then(function(d){if(d)return n.loadTextureImage(e,o.source,c);if(a.extensionsRequired&&a.extensionsRequired.indexOf(t)>=0)throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");return n.loadTexture(e)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(e){const t=new Image;t.src="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=",t.onload=t.onerror=function(){e(t.height===1)}})),this.isSupported}}class SO{constructor(e){this.name=en.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){const t=this.parser.json,n=t.bufferViews[e];if(n.extensions&&n.extensions[this.name]){const a=n.extensions[this.name],i=this.parser.getDependency("buffer",a.buffer),o=this.parser.options.meshoptDecoder;if(!o||!o.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return i.then(function(l){const c=a.byteOffset||0,d=a.byteLength||0,f=a.count,p=a.byteStride,m=new Uint8Array(l,c,d);return o.decodeGltfBufferAsync?o.decodeGltfBufferAsync(f,p,m,a.mode,a.filter).then(function(b){return b.buffer}):o.ready.then(function(){const b=new ArrayBuffer(f*p);return o.decodeGltfBuffer(new Uint8Array(b),f,p,m,a.mode,a.filter),b})})}else return null}}class jO{constructor(e){this.name=en.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){const t=this.parser.json,n=t.nodes[e];if(!n.extensions||!n.extensions[this.name]||n.mesh===void 0)return null;const a=t.meshes[n.mesh];for(const d of a.primitives)if(d.mode!==Ja.TRIANGLES&&d.mode!==Ja.TRIANGLE_STRIP&&d.mode!==Ja.TRIANGLE_FAN&&d.mode!==void 0)return null;const o=n.extensions[this.name].attributes,l=[],c={};for(const d in o)l.push(this.parser.getDependency("accessor",o[d]).then(f=>(c[d]=f,c[d])));return l.length<1?null:(l.push(this.parser.createNodeMesh(e)),Promise.all(l).then(d=>{const f=d.pop(),p=f.isGroup?f.children:[f],m=d[0].count,b=[];for(const x of p){const w=new il,k=new vt,S=new rl,j=new vt(1,1,1),C=new yr(x.geometry,x.material,m);for(let N=0;N<m;N++)c.TRANSLATION&&k.fromBufferAttribute(c.TRANSLATION,N),c.ROTATION&&S.fromBufferAttribute(c.ROTATION,N),c.SCALE&&j.fromBufferAttribute(c.SCALE,N),C.setMatrixAt(N,w.compose(k,S,j));for(const N in c)if(N==="_COLOR_0"){const _=c[N];C.instanceColor=new pP(_.array,_.itemSize,_.normalized)}else N!=="TRANSLATION"&&N!=="ROTATION"&&N!=="SCALE"&&x.geometry.setAttribute(N,c[N]);VA.prototype.copy.call(C,x),this.parser.assignFinalMaterial(C),b.push(C)}return f.isGroup?(f.clear(),f.add(...b),f):b[0]}))}}const DM="glTF",Tu=12,Pj={JSON:1313821514,BIN:5130562};class CO{constructor(e){this.name=en.KHR_BINARY_GLTF,this.content=null,this.body=null;const t=new DataView(e,0,Tu),n=new TextDecoder;if(this.header={magic:n.decode(new Uint8Array(e.slice(0,4))),version:t.getUint32(4,!0),length:t.getUint32(8,!0)},this.header.magic!==DM)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");const a=this.header.length-Tu,i=new DataView(e,Tu);let o=0;for(;o<a;){const l=i.getUint32(o,!0);o+=4;const c=i.getUint32(o,!0);if(o+=4,c===Pj.JSON){const d=new Uint8Array(e,Tu+o,l);this.content=n.decode(d)}else if(c===Pj.BIN){const d=Tu+o;this.body=e.slice(d,d+l)}o+=l}if(this.content===null)throw new Error("THREE.GLTFLoader: JSON content not found.")}}class NO{constructor(e,t){if(!t)throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");this.name=en.KHR_DRACO_MESH_COMPRESSION,this.json=e,this.dracoLoader=t,this.dracoLoader.preload()}decodePrimitive(e,t){const n=this.json,a=this.dracoLoader,i=e.extensions[this.name].bufferView,o=e.extensions[this.name].attributes,l={},c={},d={};for(const f in o){const p=Ry[f]||f.toLowerCase();l[p]=o[f]}for(const f in e.attributes){const p=Ry[f]||f.toLowerCase();if(o[f]!==void 0){const m=n.accessors[e.attributes[f]],b=hc[m.componentType];d[p]=b.name,c[p]=m.normalized===!0}}return t.getDependency("bufferView",i).then(function(f){return new Promise(function(p,m){a.decodeDracoFile(f,function(b){for(const x in b.attributes){const w=b.attributes[x],k=c[x];k!==void 0&&(w.normalized=k)}p(b)},l,d,Gi,m)})})}}class AO{constructor(){this.name=en.KHR_TEXTURE_TRANSFORM}extendTexture(e,t){return(t.texCoord===void 0||t.texCoord===e.channel)&&t.offset===void 0&&t.rotation===void 0&&t.scale===void 0||(e=e.clone(),t.texCoord!==void 0&&(e.channel=t.texCoord),t.offset!==void 0&&e.offset.fromArray(t.offset),t.rotation!==void 0&&(e.rotation=t.rotation),t.scale!==void 0&&e.repeat.fromArray(t.scale),e.needsUpdate=!0),e}}class MO{constructor(){this.name=en.KHR_MESH_QUANTIZATION}}class PM extends MP{constructor(e,t,n,a){super(e,t,n,a)}copySampleValue_(e){const t=this.resultBuffer,n=this.sampleValues,a=this.valueSize,i=e*a*3+a;for(let o=0;o!==a;o++)t[o]=n[i+o];return t}interpolate_(e,t,n,a){const i=this.resultBuffer,o=this.sampleValues,l=this.valueSize,c=l*2,d=l*3,f=a-t,p=(n-t)/f,m=p*p,b=m*p,x=e*d,w=x-d,k=-2*b+3*m,S=b-m,j=1-k,C=S-m+p;for(let N=0;N!==l;N++){const _=o[w+N+l],D=o[w+N+c]*f,L=o[x+N+l],M=o[x+N]*f;i[N]=j*_+C*D+k*L+S*M}return i}}const TO=new rl;class EO extends PM{interpolate_(e,t,n,a){const i=super.interpolate_(e,t,n,a);return TO.fromArray(i).normalize().toArray(i),i}}const Ja={POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6},hc={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},Rj={9728:KA,9729:$n,9984:yP,9985:bP,9986:gP,9987:Xu},Lj={33071:vP,33648:xP,10497:Yo},db={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},Ry={POSITION:"position",NORMAL:"normal",TANGENT:"tangent",TEXCOORD_0:"uv",TEXCOORD_1:"uv1",TEXCOORD_2:"uv2",TEXCOORD_3:"uv3",COLOR_0:"color",WEIGHTS_0:"skinWeight",JOINTS_0:"skinIndex"},so={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},_O={CUBICSPLINE:void 0,LINEAR:ZA,STEP:NP},hb={OPAQUE:"OPAQUE",MASK:"MASK",BLEND:"BLEND"};function DO(s){return s.DefaultMaterial===void 0&&(s.DefaultMaterial=new ft({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:QA})),s.DefaultMaterial}function zo(s,e,t){for(const n in t.extensions)s[n]===void 0&&(e.userData.gltfExtensions=e.userData.gltfExtensions||{},e.userData.gltfExtensions[n]=t.extensions[n])}function br(s,e){e.extras!==void 0&&(typeof e.extras=="object"?Object.assign(s.userData,e.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+e.extras))}function PO(s,e,t){let n=!1,a=!1,i=!1;for(let d=0,f=e.length;d<f;d++){const p=e[d];if(p.POSITION!==void 0&&(n=!0),p.NORMAL!==void 0&&(a=!0),p.COLOR_0!==void 0&&(i=!0),n&&a&&i)break}if(!n&&!a&&!i)return Promise.resolve(s);const o=[],l=[],c=[];for(let d=0,f=e.length;d<f;d++){const p=e[d];if(n){const m=p.POSITION!==void 0?t.getDependency("accessor",p.POSITION):s.attributes.position;o.push(m)}if(a){const m=p.NORMAL!==void 0?t.getDependency("accessor",p.NORMAL):s.attributes.normal;l.push(m)}if(i){const m=p.COLOR_0!==void 0?t.getDependency("accessor",p.COLOR_0):s.attributes.color;c.push(m)}}return Promise.all([Promise.all(o),Promise.all(l),Promise.all(c)]).then(function(d){const f=d[0],p=d[1],m=d[2];return n&&(s.morphAttributes.position=f),a&&(s.morphAttributes.normal=p),i&&(s.morphAttributes.color=m),s.morphTargetsRelative=!0,s})}function RO(s,e){if(s.updateMorphTargets(),e.weights!==void 0)for(let t=0,n=e.weights.length;t<n;t++)s.morphTargetInfluences[t]=e.weights[t];if(e.extras&&Array.isArray(e.extras.targetNames)){const t=e.extras.targetNames;if(s.morphTargetInfluences.length===t.length){s.morphTargetDictionary={};for(let n=0,a=t.length;n<a;n++)s.morphTargetDictionary[t[n]]=n}else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")}}function LO(s){let e;const t=s.extensions&&s.extensions[en.KHR_DRACO_MESH_COMPRESSION];if(t?e="draco:"+t.bufferView+":"+t.indices+":"+pb(t.attributes):e=s.indices+":"+pb(s.attributes)+":"+s.mode,s.targets!==void 0)for(let n=0,a=s.targets.length;n<a;n++)e+=":"+pb(s.targets[n]);return e}function pb(s){let e="";const t=Object.keys(s).sort();for(let n=0,a=t.length;n<a;n++)e+=t[n]+":"+s[t[n]]+";";return e}function Ly(s){switch(s){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.")}}function OO(s){return s.search(/\.jpe?g($|\?)/i)>0||s.search(/^data\:image\/jpeg/)===0?"image/jpeg":s.search(/\.webp($|\?)/i)>0||s.search(/^data\:image\/webp/)===0?"image/webp":s.search(/\.ktx2($|\?)/i)>0||s.search(/^data\:image\/ktx2/)===0?"image/ktx2":"image/png"}const IO=new il;class BO{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new rO,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let n=!1,a=-1,i=!1,o=-1;if(typeof navigator<"u"){const l=navigator.userAgent;n=/^((?!chrome|android).)*safari/i.test(l)===!0;const c=l.match(/Version\/(\d+)/);a=n&&c?parseInt(c[1],10):-1,i=l.indexOf("Firefox")>-1,o=i?l.match(/Firefox\/([0-9]+)\./)[1]:-1}typeof createImageBitmap>"u"||n&&a<17||i&&o<98?this.textureLoader=new Sx(this.options.manager):this.textureLoader=new fP(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new Rp(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),this.options.crossOrigin==="use-credentials"&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){const n=this,a=this.json,i=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(o){return o._markDefs&&o._markDefs()}),Promise.all(this._invokeAll(function(o){return o.beforeRoot&&o.beforeRoot()})).then(function(){return Promise.all([n.getDependencies("scene"),n.getDependencies("animation"),n.getDependencies("camera")])}).then(function(o){const l={scene:o[0][a.scene||0],scenes:o[0],animations:o[1],cameras:o[2],asset:a.asset,parser:n,userData:{}};return zo(i,l,a),br(l,a),Promise.all(n._invokeAll(function(c){return c.afterRoot&&c.afterRoot(l)})).then(function(){for(const c of l.scenes)c.updateMatrixWorld();e(l)})}).catch(t)}_markDefs(){const e=this.json.nodes||[],t=this.json.skins||[],n=this.json.meshes||[];for(let a=0,i=t.length;a<i;a++){const o=t[a].joints;for(let l=0,c=o.length;l<c;l++)e[o[l]].isBone=!0}for(let a=0,i=e.length;a<i;a++){const o=e[a];o.mesh!==void 0&&(this._addNodeRef(this.meshCache,o.mesh),o.skin!==void 0&&(n[o.mesh].isSkinnedMesh=!0)),o.camera!==void 0&&this._addNodeRef(this.cameraCache,o.camera)}}_addNodeRef(e,t){t!==void 0&&(e.refs[t]===void 0&&(e.refs[t]=e.uses[t]=0),e.refs[t]++)}_getNodeRef(e,t,n){if(e.refs[t]<=1)return n;const a=n.clone(),i=(o,l)=>{const c=this.associations.get(o);c!=null&&this.associations.set(l,c);for(const[d,f]of o.children.entries())i(f,l.children[d])};return i(n,a),a.name+="_instance_"+e.uses[t]++,a}_invokeOne(e){const t=Object.values(this.plugins);t.push(this);for(let n=0;n<t.length;n++){const a=e(t[n]);if(a)return a}return null}_invokeAll(e){const t=Object.values(this.plugins);t.unshift(this);const n=[];for(let a=0;a<t.length;a++){const i=e(t[a]);i&&n.push(i)}return n}getDependency(e,t){const n=e+":"+t;let a=this.cache.get(n);if(!a){switch(e){case"scene":a=this.loadScene(t);break;case"node":a=this._invokeOne(function(i){return i.loadNode&&i.loadNode(t)});break;case"mesh":a=this._invokeOne(function(i){return i.loadMesh&&i.loadMesh(t)});break;case"accessor":a=this.loadAccessor(t);break;case"bufferView":a=this._invokeOne(function(i){return i.loadBufferView&&i.loadBufferView(t)});break;case"buffer":a=this.loadBuffer(t);break;case"material":a=this._invokeOne(function(i){return i.loadMaterial&&i.loadMaterial(t)});break;case"texture":a=this._invokeOne(function(i){return i.loadTexture&&i.loadTexture(t)});break;case"skin":a=this.loadSkin(t);break;case"animation":a=this._invokeOne(function(i){return i.loadAnimation&&i.loadAnimation(t)});break;case"camera":a=this.loadCamera(t);break;default:if(a=this._invokeOne(function(i){return i!=this&&i.getDependency&&i.getDependency(e,t)}),!a)throw new Error("Unknown type: "+e);break}this.cache.add(n,a)}return a}getDependencies(e){let t=this.cache.get(e);if(!t){const n=this,a=this.json[e+(e==="mesh"?"es":"s")]||[];t=Promise.all(a.map(function(i,o){return n.getDependency(e,o)})),this.cache.add(e,t)}return t}loadBuffer(e){const t=this.json.buffers[e],n=this.fileLoader;if(t.type&&t.type!=="arraybuffer")throw new Error("THREE.GLTFLoader: "+t.type+" buffer type is not supported.");if(t.uri===void 0&&e===0)return Promise.resolve(this.extensions[en.KHR_BINARY_GLTF].body);const a=this.options;return new Promise(function(i,o){n.load(Ku.resolveURL(t.uri,a.path),i,void 0,function(){o(new Error('THREE.GLTFLoader: Failed to load buffer "'+t.uri+'".'))})})}loadBufferView(e){const t=this.json.bufferViews[e];return this.getDependency("buffer",t.buffer).then(function(n){const a=t.byteLength||0,i=t.byteOffset||0;return n.slice(i,i+a)})}loadAccessor(e){const t=this,n=this.json,a=this.json.accessors[e];if(a.bufferView===void 0&&a.sparse===void 0){const o=db[a.type],l=hc[a.componentType],c=a.normalized===!0,d=new l(a.count*o);return Promise.resolve(new gi(d,o,c))}const i=[];return a.bufferView!==void 0?i.push(this.getDependency("bufferView",a.bufferView)):i.push(null),a.sparse!==void 0&&(i.push(this.getDependency("bufferView",a.sparse.indices.bufferView)),i.push(this.getDependency("bufferView",a.sparse.values.bufferView))),Promise.all(i).then(function(o){const l=o[0],c=db[a.type],d=hc[a.componentType],f=d.BYTES_PER_ELEMENT,p=f*c,m=a.byteOffset||0,b=a.bufferView!==void 0?n.bufferViews[a.bufferView].byteStride:void 0,x=a.normalized===!0;let w,k;if(b&&b!==p){const S=Math.floor(m/b),j="InterleavedBuffer:"+a.bufferView+":"+a.componentType+":"+S+":"+a.count;let C=t.cache.get(j);C||(w=new d(l,S*b,a.count*b/f),C=new mP(w,b/f),t.cache.add(j,C)),k=new AP(C,c,m%b/f,x)}else l===null?w=new d(a.count*c):w=new d(l,m,a.count*c),k=new gi(w,c,x);if(a.sparse!==void 0){const S=db.SCALAR,j=hc[a.sparse.indices.componentType],C=a.sparse.indices.byteOffset||0,N=a.sparse.values.byteOffset||0,_=new j(o[1],C,a.sparse.count*S),D=new d(o[2],N,a.sparse.count*c);l!==null&&(k=new gi(k.array.slice(),k.itemSize,k.normalized)),k.normalized=!1;for(let L=0,M=_.length;L<M;L++){const P=_[L];if(k.setX(P,D[L*c]),c>=2&&k.setY(P,D[L*c+1]),c>=3&&k.setZ(P,D[L*c+2]),c>=4&&k.setW(P,D[L*c+3]),c>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}k.normalized=x}return k})}loadTexture(e){const t=this.json,n=this.options,i=t.textures[e].source,o=t.images[i];let l=this.textureLoader;if(o.uri){const c=n.manager.getHandler(o.uri);c!==null&&(l=c)}return this.loadTextureImage(e,i,l)}loadTextureImage(e,t,n){const a=this,i=this.json,o=i.textures[e],l=i.images[t],c=(l.uri||l.bufferView)+":"+o.sampler;if(this.textureCache[c])return this.textureCache[c];const d=this.loadImageSource(t,n).then(function(f){f.flipY=!1,f.name=o.name||l.name||"",f.name===""&&typeof l.uri=="string"&&l.uri.startsWith("data:image/")===!1&&(f.name=l.uri);const m=(i.samplers||{})[o.sampler]||{};return f.magFilter=Rj[m.magFilter]||$n,f.minFilter=Rj[m.minFilter]||Xu,f.wrapS=Lj[m.wrapS]||Yo,f.wrapT=Lj[m.wrapT]||Yo,f.generateMipmaps=!f.isCompressedTexture&&f.minFilter!==KA&&f.minFilter!==$n,a.associations.set(f,{textures:e}),f}).catch(function(){return null});return this.textureCache[c]=d,d}loadImageSource(e,t){const n=this,a=this.json,i=this.options;if(this.sourceCache[e]!==void 0)return this.sourceCache[e].then(p=>p.clone());const o=a.images[e],l=self.URL||self.webkitURL;let c=o.uri||"",d=!1;if(o.bufferView!==void 0)c=n.getDependency("bufferView",o.bufferView).then(function(p){d=!0;const m=new Blob([p],{type:o.mimeType});return c=l.createObjectURL(m),c});else if(o.uri===void 0)throw new Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");const f=Promise.resolve(c).then(function(p){return new Promise(function(m,b){let x=m;t.isImageBitmapLoader===!0&&(x=function(w){const k=new ES(w);k.needsUpdate=!0,m(k)}),t.load(Ku.resolveURL(p,i.path),x,void 0,b)})}).then(function(p){return d===!0&&l.revokeObjectURL(c),br(p,o),p.userData.mimeType=o.mimeType||OO(o.uri),p}).catch(function(p){throw console.error("THREE.GLTFLoader: Couldn't load texture",c),p});return this.sourceCache[e]=f,f}assignTexture(e,t,n,a){const i=this;return this.getDependency("texture",n.index).then(function(o){if(!o)return null;if(n.texCoord!==void 0&&n.texCoord>0&&(o=o.clone(),o.channel=n.texCoord),i.extensions[en.KHR_TEXTURE_TRANSFORM]){const l=n.extensions!==void 0?n.extensions[en.KHR_TEXTURE_TRANSFORM]:void 0;if(l){const c=i.associations.get(o);o=i.extensions[en.KHR_TEXTURE_TRANSFORM].extendTexture(o,l),i.associations.set(o,c)}}return a!==void 0&&(o.colorSpace=a),e[t]=o,o})}assignFinalMaterial(e){const t=e.geometry;let n=e.material;const a=t.attributes.tangent===void 0,i=t.attributes.color!==void 0,o=t.attributes.normal===void 0;if(e.isPoints){const l="PointsMaterial:"+n.uuid;let c=this.cache.get(l);c||(c=new wf,vr.prototype.copy.call(c,n),c.color.copy(n.color),c.map=n.map,c.sizeAttenuation=!1,this.cache.add(l,c)),n=c}else if(e.isLine){const l="LineBasicMaterial:"+n.uuid;let c=this.cache.get(l);c||(c=new Vo,vr.prototype.copy.call(c,n),c.color.copy(n.color),c.map=n.map,this.cache.add(l,c)),n=c}if(a||i||o){let l="ClonedMaterial:"+n.uuid+":";a&&(l+="derivative-tangents:"),i&&(l+="vertex-colors:"),o&&(l+="flat-shading:");let c=this.cache.get(l);c||(c=n.clone(),i&&(c.vertexColors=!0),o&&(c.flatShading=!0),a&&(c.normalScale&&(c.normalScale.y*=-1),c.clearcoatNormalScale&&(c.clearcoatNormalScale.y*=-1)),this.cache.add(l,c),this.associations.set(c,this.associations.get(n))),n=c}e.material=n}getMaterialType(){return ft}loadMaterial(e){const t=this,n=this.json,a=this.extensions,i=n.materials[e];let o;const l={},c=i.extensions||{},d=[];if(c[en.KHR_MATERIALS_UNLIT]){const p=a[en.KHR_MATERIALS_UNLIT];o=p.getMaterialType(),d.push(p.extendParams(l,i,t))}else{const p=i.pbrMetallicRoughness||{};if(l.color=new Ut(1,1,1),l.opacity=1,Array.isArray(p.baseColorFactor)){const m=p.baseColorFactor;l.color.setRGB(m[0],m[1],m[2],Gi),l.opacity=m[3]}p.baseColorTexture!==void 0&&d.push(t.assignTexture(l,"map",p.baseColorTexture,mi)),l.metalness=p.metallicFactor!==void 0?p.metallicFactor:1,l.roughness=p.roughnessFactor!==void 0?p.roughnessFactor:1,p.metallicRoughnessTexture!==void 0&&(d.push(t.assignTexture(l,"metalnessMap",p.metallicRoughnessTexture)),d.push(t.assignTexture(l,"roughnessMap",p.metallicRoughnessTexture))),o=this._invokeOne(function(m){return m.getMaterialType&&m.getMaterialType(e)}),d.push(Promise.all(this._invokeAll(function(m){return m.extendMaterialParams&&m.extendMaterialParams(e,l)})))}i.doubleSided===!0&&(l.side=Ls);const f=i.alphaMode||hb.OPAQUE;if(f===hb.BLEND?(l.transparent=!0,l.depthWrite=!1):(l.transparent=!1,f===hb.MASK&&(l.alphaTest=i.alphaCutoff!==void 0?i.alphaCutoff:.5)),i.normalTexture!==void 0&&o!==Ke&&(d.push(t.assignTexture(l,"normalMap",i.normalTexture)),l.normalScale=new Ys(1,1),i.normalTexture.scale!==void 0)){const p=i.normalTexture.scale;l.normalScale.set(p,p)}if(i.occlusionTexture!==void 0&&o!==Ke&&(d.push(t.assignTexture(l,"aoMap",i.occlusionTexture)),i.occlusionTexture.strength!==void 0&&(l.aoMapIntensity=i.occlusionTexture.strength)),i.emissiveFactor!==void 0&&o!==Ke){const p=i.emissiveFactor;l.emissive=new Ut().setRGB(p[0],p[1],p[2],Gi)}return i.emissiveTexture!==void 0&&o!==Ke&&d.push(t.assignTexture(l,"emissiveMap",i.emissiveTexture,mi)),Promise.all(d).then(function(){const p=new o(l);return i.name&&(p.name=i.name),br(p,i),t.associations.set(p,{materials:e}),i.extensions&&zo(a,p,i),p})}createUniqueName(e){const t=wP.sanitizeNodeName(e||"");return t in this.nodeNamesUsed?t+"_"+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){const t=this,n=this.extensions,a=this.primitiveCache;function i(l){return n[en.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(l,t).then(function(c){return Oj(c,l,t)})}const o=[];for(let l=0,c=e.length;l<c;l++){const d=e[l],f=LO(d),p=a[f];if(p)o.push(p.promise);else{let m;d.extensions&&d.extensions[en.KHR_DRACO_MESH_COMPRESSION]?m=i(d):m=Oj(new si,d,t),a[f]={primitive:d,promise:m},o.push(m)}}return Promise.all(o)}loadMesh(e){const t=this,n=this.json,a=this.extensions,i=n.meshes[e],o=i.primitives,l=[];for(let c=0,d=o.length;c<d;c++){const f=o[c].material===void 0?DO(this.cache):this.getDependency("material",o[c].material);l.push(f)}return l.push(t.loadGeometries(o)),Promise.all(l).then(function(c){const d=c.slice(0,c.length-1),f=c[c.length-1],p=[];for(let b=0,x=f.length;b<x;b++){const w=f[b],k=o[b];let S;const j=d[b];if(k.mode===Ja.TRIANGLES||k.mode===Ja.TRIANGLE_STRIP||k.mode===Ja.TRIANGLE_FAN||k.mode===void 0)S=i.isSkinnedMesh===!0?new fy(w,j):new Ie(w,j),S.isSkinnedMesh===!0&&S.normalizeSkinWeights(),k.mode===Ja.TRIANGLE_STRIP?S.geometry=Dj(S.geometry,WA):k.mode===Ja.TRIANGLE_FAN&&(S.geometry=Dj(S.geometry,py));else if(k.mode===Ja.LINES)S=new jx(w,j);else if(k.mode===Ja.LINE_STRIP)S=new oo(w,j);else if(k.mode===Ja.LINE_LOOP)S=new kP(w,j);else if(k.mode===Ja.POINTS)S=new jd(w,j);else throw new Error("THREE.GLTFLoader: Primitive mode unsupported: "+k.mode);Object.keys(S.geometry.morphAttributes).length>0&&RO(S,i),S.name=t.createUniqueName(i.name||"mesh_"+e),br(S,i),k.extensions&&zo(a,S,k),t.assignFinalMaterial(S),p.push(S)}for(let b=0,x=p.length;b<x;b++)t.associations.set(p[b],{meshes:e,primitives:b});if(p.length===1)return i.extensions&&zo(a,p[0],i),p[0];const m=new Hn;i.extensions&&zo(a,m,i),t.associations.set(m,{meshes:e});for(let b=0,x=p.length;b<x;b++)m.add(p[b]);return m})}loadCamera(e){let t;const n=this.json.cameras[e],a=n[n.type];if(!a){console.warn("THREE.GLTFLoader: Missing camera parameters.");return}return n.type==="perspective"?t=new Cx(Nx.radToDeg(a.yfov),a.aspectRatio||1,a.znear||1,a.zfar||2e6):n.type==="orthographic"&&(t=new XA(-a.xmag,a.xmag,a.ymag,-a.ymag,a.znear,a.zfar)),n.name&&(t.name=this.createUniqueName(n.name)),br(t,n),Promise.resolve(t)}loadSkin(e){const t=this.json.skins[e],n=[];for(let a=0,i=t.joints.length;a<i;a++)n.push(this._loadNodeShallow(t.joints[a]));return t.inverseBindMatrices!==void 0?n.push(this.getDependency("accessor",t.inverseBindMatrices)):n.push(null),Promise.all(n).then(function(a){const i=a.pop(),o=a,l=[],c=[];for(let d=0,f=o.length;d<f;d++){const p=o[d];if(p){l.push(p);const m=new il;i!==null&&m.fromArray(i.array,d*16),c.push(m)}else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.',t.joints[d])}return new SP(l,c)})}loadAnimation(e){const t=this.json,n=this,a=t.animations[e],i=a.name?a.name:"animation_"+e,o=[],l=[],c=[],d=[],f=[];for(let p=0,m=a.channels.length;p<m;p++){const b=a.channels[p],x=a.samplers[b.sampler],w=b.target,k=w.node,S=a.parameters!==void 0?a.parameters[x.input]:x.input,j=a.parameters!==void 0?a.parameters[x.output]:x.output;w.node!==void 0&&(o.push(this.getDependency("node",k)),l.push(this.getDependency("accessor",S)),c.push(this.getDependency("accessor",j)),d.push(x),f.push(w))}return Promise.all([Promise.all(o),Promise.all(l),Promise.all(c),Promise.all(d),Promise.all(f)]).then(function(p){const m=p[0],b=p[1],x=p[2],w=p[3],k=p[4],S=[];for(let j=0,C=m.length;j<C;j++){const N=m[j],_=b[j],D=x[j],L=w[j],M=k[j];if(N===void 0)continue;N.updateMatrix&&N.updateMatrix();const P=n._createAnimationTracks(N,_,D,L,M);if(P)for(let E=0;E<P.length;E++)S.push(P[E])}return new jP(i,void 0,S)})}createNodeMesh(e){const t=this.json,n=this,a=t.nodes[e];return a.mesh===void 0?null:n.getDependency("mesh",a.mesh).then(function(i){const o=n._getNodeRef(n.meshCache,a.mesh,i);return a.weights!==void 0&&o.traverse(function(l){if(l.isMesh)for(let c=0,d=a.weights.length;c<d;c++)l.morphTargetInfluences[c]=a.weights[c]}),o})}loadNode(e){const t=this.json,n=this,a=t.nodes[e],i=n._loadNodeShallow(e),o=[],l=a.children||[];for(let d=0,f=l.length;d<f;d++)o.push(n.getDependency("node",l[d]));const c=a.skin===void 0?Promise.resolve(null):n.getDependency("skin",a.skin);return Promise.all([i,Promise.all(o),c]).then(function(d){const f=d[0],p=d[1],m=d[2];m!==null&&f.traverse(function(b){b.isSkinnedMesh&&b.bind(m,IO)});for(let b=0,x=p.length;b<x;b++)f.add(p[b]);return f})}_loadNodeShallow(e){const t=this.json,n=this.extensions,a=this;if(this.nodeCache[e]!==void 0)return this.nodeCache[e];const i=t.nodes[e],o=i.name?a.createUniqueName(i.name):"",l=[],c=a._invokeOne(function(d){return d.createNodeMesh&&d.createNodeMesh(e)});return c&&l.push(c),i.camera!==void 0&&l.push(a.getDependency("camera",i.camera).then(function(d){return a._getNodeRef(a.cameraCache,i.camera,d)})),a._invokeAll(function(d){return d.createNodeAttachment&&d.createNodeAttachment(e)}).forEach(function(d){l.push(d)}),this.nodeCache[e]=Promise.all(l).then(function(d){let f;if(i.isBone===!0?f=new CP:d.length>1?f=new Hn:d.length===1?f=d[0]:f=new VA,f!==d[0])for(let p=0,m=d.length;p<m;p++)f.add(d[p]);if(i.name&&(f.userData.name=i.name,f.name=o),br(f,i),i.extensions&&zo(n,f,i),i.matrix!==void 0){const p=new il;p.fromArray(i.matrix),f.applyMatrix4(p)}else i.translation!==void 0&&f.position.fromArray(i.translation),i.rotation!==void 0&&f.quaternion.fromArray(i.rotation),i.scale!==void 0&&f.scale.fromArray(i.scale);return a.associations.has(f)||a.associations.set(f,{}),a.associations.get(f).nodes=e,f}),this.nodeCache[e]}loadScene(e){const t=this.extensions,n=this.json.scenes[e],a=this,i=new Hn;n.name&&(i.name=a.createUniqueName(n.name)),br(i,n),n.extensions&&zo(t,i,n);const o=n.nodes||[],l=[];for(let c=0,d=o.length;c<d;c++)l.push(a.getDependency("node",o[c]));return Promise.all(l).then(function(c){for(let f=0,p=c.length;f<p;f++)i.add(c[f]);const d=f=>{const p=new Map;for(const[m,b]of a.associations)(m instanceof vr||m instanceof ES)&&p.set(m,b);return f.traverse(m=>{const b=a.associations.get(m);b!=null&&p.set(m,b)}),p};return a.associations=d(i),i})}_createAnimationTracks(e,t,n,a,i){const o=[],l=e.name?e.name:e.uuid,c=[];so[i.path]===so.weights?e.traverse(function(m){m.morphTargetInfluences&&c.push(m.name?m.name:m.uuid)}):c.push(l);let d;switch(so[i.path]){case so.weights:d=DS;break;case so.rotation:d=PS;break;case so.position:case so.scale:d=_S;break;default:switch(n.itemSize){case 1:d=DS;break;case 2:case 3:default:d=_S;break}break}const f=a.interpolation!==void 0?_O[a.interpolation]:ZA,p=this._getArrayFromAccessor(n);for(let m=0,b=c.length;m<b;m++){const x=new d(c[m]+"."+so[i.path],t.array,p,f);a.interpolation==="CUBICSPLINE"&&this._createCubicSplineTrackInterpolant(x),o.push(x)}return o}_getArrayFromAccessor(e){let t=e.array;if(e.normalized){const n=Ly(t.constructor),a=new Float32Array(t.length);for(let i=0,o=t.length;i<o;i++)a[i]=t[i]*n;t=a}return t}_createCubicSplineTrackInterpolant(e){e.createInterpolant=function(n){const a=this instanceof PS?EO:PM;return new a(this.times,this.values,this.getValueSize()/3,n)},e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}}function zO(s,e,t){const n=e.attributes,a=new Lp;if(n.POSITION!==void 0){const l=t.json.accessors[n.POSITION],c=l.min,d=l.max;if(c!==void 0&&d!==void 0){if(a.set(new vt(c[0],c[1],c[2]),new vt(d[0],d[1],d[2])),l.normalized){const f=Ly(hc[l.componentType]);a.min.multiplyScalar(f),a.max.multiplyScalar(f)}}else{console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");return}}else return;const i=e.targets;if(i!==void 0){const l=new vt,c=new vt;for(let d=0,f=i.length;d<f;d++){const p=i[d];if(p.POSITION!==void 0){const m=t.json.accessors[p.POSITION],b=m.min,x=m.max;if(b!==void 0&&x!==void 0){if(c.setX(Math.max(Math.abs(b[0]),Math.abs(x[0]))),c.setY(Math.max(Math.abs(b[1]),Math.abs(x[1]))),c.setZ(Math.max(Math.abs(b[2]),Math.abs(x[2]))),m.normalized){const w=Ly(hc[m.componentType]);c.multiplyScalar(w)}l.max(c)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}a.expandByVector(l)}s.boundingBox=a;const o=new TP;a.getCenter(o.center),o.radius=a.min.distanceTo(a.max)/2,s.boundingSphere=o}function Oj(s,e,t){const n=e.attributes,a=[];function i(o,l){return t.getDependency("accessor",o).then(function(c){s.setAttribute(l,c)})}for(const o in n){const l=Ry[o]||o.toLowerCase();l in s.attributes||a.push(i(n[o],l))}if(e.indices!==void 0&&!s.index){const o=t.getDependency("accessor",e.indices).then(function(l){s.setIndex(l)});a.push(o)}return my.workingColorSpace!==Gi&&"COLOR_0"in n&&console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${my.workingColorSpace}" not supported.`),br(s,e),zO(s,e,t),Promise.all(a).then(function(){return e.targets!==void 0?PO(s,e.targets,t):s})}const fb=new WeakMap;class Bx extends qA{constructor(e){super(e),this.decoderPath="",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.defaultAttributeIDs={position:"POSITION",normal:"NORMAL",color:"COLOR",uv:"TEX_COORD"},this.defaultAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Float32Array",uv:"Float32Array"}}setDecoderPath(e){return this.decoderPath=e,this}setDecoderConfig(e){return this.decoderConfig=e,this}setWorkerLimit(e){return this.workerLimit=e,this}load(e,t,n,a){const i=new Rp(this.manager);i.setPath(this.path),i.setResponseType("arraybuffer"),i.setRequestHeader(this.requestHeader),i.setWithCredentials(this.withCredentials),i.load(e,o=>{this.parse(o,t,a)},n,a)}parse(e,t,n=()=>{}){this.decodeDracoFile(e,t,null,null,mi,n).catch(n)}decodeDracoFile(e,t,n,a,i=Gi,o=()=>{}){const l={attributeIDs:n||this.defaultAttributeIDs,attributeTypes:a||this.defaultAttributeTypes,useUniqueIDs:!!n,vertexColorSpace:i};return this.decodeGeometry(e,l).then(t).catch(o)}decodeGeometry(e,t){const n=JSON.stringify(t);if(fb.has(e)){const c=fb.get(e);if(c.key===n)return c.promise;if(e.byteLength===0)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let a;const i=this.workerNextTaskID++,o=e.byteLength,l=this._getWorker(i,o).then(c=>(a=c,new Promise((d,f)=>{a._callbacks[i]={resolve:d,reject:f},a.postMessage({type:"decode",id:i,taskConfig:t,buffer:e},[e])}))).then(c=>this._createGeometry(c.geometry));return l.catch(()=>!0).then(()=>{a&&i&&this._releaseTask(a,i)}),fb.set(e,{key:n,promise:l}),l}_createGeometry(e){const t=new si;e.index&&t.setIndex(new gi(e.index.array,1));for(let n=0;n<e.attributes.length;n++){const a=e.attributes[n],i=a.name,o=a.array,l=a.itemSize,c=new gi(o,l);i==="color"&&(this._assignVertexColorSpace(c,a.vertexColorSpace),c.normalized=!(o instanceof Float32Array)),t.setAttribute(i,c)}return t}_assignVertexColorSpace(e,t){if(t!==mi)return;const n=new Ut;for(let a=0,i=e.count;a<i;a++)n.fromBufferAttribute(e,a),my.toWorkingColorSpace(n,mi),e.setXYZ(a,n.r,n.g,n.b)}_loadLibrary(e,t){const n=new Rp(this.manager);return n.setPath(this.decoderPath),n.setResponseType(t),n.setWithCredentials(this.withCredentials),new Promise((a,i)=>{n.load(e,a,void 0,i)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;const e=typeof WebAssembly!="object"||this.decoderConfig.type==="js",t=[];return e?t.push(this._loadLibrary("draco_decoder.js","text")):(t.push(this._loadLibrary("draco_wasm_wrapper.js","text")),t.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(t).then(n=>{const a=n[0];e||(this.decoderConfig.wasmBinary=n[1]);const i=FO.toString(),o=["/* draco decoder */",a,"","/* worker */",i.substring(i.indexOf("{")+1,i.lastIndexOf("}"))].join(`
|
|
42
|
+
*/var ij;function RR(){if(ij)return ob;ij=1;var s=kx();function e(p,m){return p===m&&(p!==0||1/p===1/m)||p!==p&&m!==m}var t=typeof Object.is=="function"?Object.is:e,n=s.useState,a=s.useEffect,i=s.useLayoutEffect,o=s.useDebugValue;function l(p,m){var b=m(),x=n({inst:{value:b,getSnapshot:m}}),w=x[0].inst,k=x[1];return i(function(){w.value=b,w.getSnapshot=m,c(w)&&k({inst:w})},[p,b,m]),a(function(){return c(w)&&k({inst:w}),p(function(){c(w)&&k({inst:w})})},[p]),o(b),b}function c(p){var m=p.getSnapshot;p=p.value;try{var b=m();return!t(p,b)}catch{return!0}}function d(p,m){return m()}var f=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?d:l;return ob.useSyncExternalStore=s.useSyncExternalStore!==void 0?s.useSyncExternalStore:f,ob}var rj;function LR(){return rj||(rj=1,rb.exports=RR()),rb.exports}var OR=LR();const IR=(s,e)=>cl(e)?e:kR(e)&&cl(e.defaultValue)?e.defaultValue:Array.isArray(s)?s[s.length-1]:s,BR={t:IR,ready:!1},zR=()=>()=>{},Ge=(s,e={})=>{var P,E,R;const{i18n:t}=e,{i18n:n,defaultNS:a}=y.useContext(DR)||{},i=t||n||ER();i&&!i.reportNamespaces&&(i.reportNamespaces=new PR),i||lM(i,"NO_I18NEXT_INSTANCE","useTranslation: You will need to pass in an i18next instance by using initReactI18next");const o=y.useMemo(()=>{var I;return{...MR(),...(I=i==null?void 0:i.options)==null?void 0:I.react,...e}},[i,e]),{useSuspense:l,keyPrefix:c}=o,d=s||a||((P=i==null?void 0:i.options)==null?void 0:P.defaultNS),f=cl(d)?[d]:d||["translation"],p=y.useMemo(()=>f,f);(R=(E=i==null?void 0:i.reportNamespaces)==null?void 0:E.addUsedNamespaces)==null||R.call(E,p);const m=y.useRef(0),b=y.useCallback(I=>{if(!i)return zR;const{bindI18n:O,bindI18nStore:B}=o,q=()=>{m.current+=1,I()};return O&&i.on(O,q),B&&i.store.on(B,q),()=>{O&&O.split(" ").forEach(H=>i.off(H,q)),B&&B.split(" ").forEach(H=>i.store.off(H,q))}},[i,o]),x=y.useRef(),w=y.useCallback(()=>{if(!i)return BR;const I=!!(i.isInitialized||i.initializedStoreOnce)&&p.every(K=>wR(K,i,o)),O=e.lng||i.language,B=m.current,q=x.current;if(q&&q.ready===I&&q.lng===O&&q.keyPrefix===c&&q.revision===B)return q;const G={t:i.getFixedT(O,o.nsMode==="fallback"?p:p[0],c),ready:I,lng:O,keyPrefix:c,revision:B};return x.current=G,G},[i,p,c,o,e.lng]),[k,S]=y.useState(0),{t:j,ready:C}=OR.useSyncExternalStore(b,w,w);y.useEffect(()=>{if(i&&!C&&!l){const I=()=>S(O=>O+1);e.lng?aj(i,e.lng,p,I):wy(i,p,I)}},[i,e.lng,p,C,l,k]);const N=i||{},_=y.useRef(null),D=y.useRef(),L=I=>{const O=Object.getOwnPropertyDescriptors(I);O.__original&&delete O.__original;const B=Object.create(Object.getPrototypeOf(I),O);if(!Object.prototype.hasOwnProperty.call(B,"__original"))try{Object.defineProperty(B,"__original",{value:I,writable:!1,enumerable:!1,configurable:!1})}catch{}return B},M=y.useMemo(()=>{const I=N,O=I==null?void 0:I.language;let B=I;I&&(_.current&&_.current.__original===I?D.current!==O?(B=L(I),_.current=B,D.current=O):B=_.current:(B=L(I),_.current=B,D.current=O));const q=[j,B,C];return q.t=j,q.i18n=B,q.ready=C,q},[j,N,C,N.resolvedLanguage,N.language,N.languages]);if(i&&l&&!C)throw new Promise(I=>{const O=()=>I();e.lng?aj(i,e.lng,p,O):wy(i,p,O)});return M};function Sy(s){"@babel/helpers - typeof";return Sy=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Sy(s)}function dM(){return typeof XMLHttpRequest=="function"||(typeof XMLHttpRequest>"u"?"undefined":Sy(XMLHttpRequest))==="object"}function FR(s){return!!s&&typeof s.then=="function"}function $R(s){return FR(s)?s:Promise.resolve(s)}const HR="modulepreload",UR=function(s){return"/"+s},oj={},hM=function(e,t,n){let a=Promise.resolve();if(t&&t.length>0){let o=function(d){return Promise.all(d.map(f=>Promise.resolve(f).then(p=>({status:"fulfilled",value:p}),p=>({status:"rejected",reason:p}))))};document.getElementsByTagName("link");const l=document.querySelector("meta[property=csp-nonce]"),c=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));a=o(t.map(d=>{if(d=UR(d),d in oj)return;oj[d]=!0;const f=d.endsWith(".css"),p=f?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${d}"]${p}`))return;const m=document.createElement("link");if(m.rel=f?"stylesheet":HR,f||(m.as="script"),m.crossOrigin="",m.href=d,c&&m.setAttribute("nonce",c),document.head.appendChild(m),f)return new Promise((b,x)=>{m.addEventListener("load",b),m.addEventListener("error",()=>x(new Error(`Unable to preload CSS for ${d}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return a.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return e().catch(i)})};function lj(s,e){var t=Object.keys(s);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(s);e&&(n=n.filter(function(a){return Object.getOwnPropertyDescriptor(s,a).enumerable})),t.push.apply(t,n)}return t}function cj(s){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?lj(Object(t),!0).forEach(function(n){GR(s,n,t[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(s,Object.getOwnPropertyDescriptors(t)):lj(Object(t)).forEach(function(n){Object.defineProperty(s,n,Object.getOwnPropertyDescriptor(t,n))})}return s}function GR(s,e,t){return(e=WR(e))in s?Object.defineProperty(s,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):s[e]=t,s}function WR(s){var e=qR(s,"string");return ul(e)=="symbol"?e:e+""}function qR(s,e){if(ul(s)!="object"||!s)return s;var t=s[Symbol.toPrimitive];if(t!==void 0){var n=t.call(s,e);if(ul(n)!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(s)}function ul(s){"@babel/helpers - typeof";return ul=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ul(s)}var fo=typeof fetch=="function"?fetch:void 0;typeof global<"u"&&global.fetch?fo=global.fetch:typeof window<"u"&&window.fetch&&(fo=window.fetch);var ud;dM()&&(typeof global<"u"&&global.XMLHttpRequest?ud=global.XMLHttpRequest:typeof window<"u"&&window.XMLHttpRequest&&(ud=window.XMLHttpRequest));var Fp;typeof ActiveXObject=="function"&&(typeof global<"u"&&global.ActiveXObject?Fp=global.ActiveXObject:typeof window<"u"&&window.ActiveXObject&&(Fp=window.ActiveXObject));typeof fo!="function"&&(fo=void 0);if(!fo&&!ud&&!Fp)try{hM(()=>import("./browser-ponyfill-DIm4hKhx.js").then(s=>s.b),__vite__mapDeps([0,1])).then(function(s){fo=s.default}).catch(function(){})}catch{}var jy=function(e,t){if(t&&ul(t)==="object"){var n="";for(var a in t)n+="&"+encodeURIComponent(a)+"="+encodeURIComponent(t[a]);if(!n)return e;e=e+(e.indexOf("?")!==-1?"&":"?")+n.slice(1)}return e},uj=function(e,t,n,a){var i=function(c){if(!c.ok)return n(c.statusText||"Error",{status:c.status});c.text().then(function(d){n(null,{status:c.status,data:d})}).catch(n)};if(a){var o=a(e,t);if(o instanceof Promise){o.then(i).catch(n);return}}typeof fetch=="function"?fetch(e,t).then(i).catch(n):fo(e,t).then(i).catch(n)},dj=!1,YR=function(e,t,n,a){e.queryStringParams&&(t=jy(t,e.queryStringParams));var i=cj({},typeof e.customHeaders=="function"?e.customHeaders():e.customHeaders);typeof window>"u"&&typeof global<"u"&&typeof global.process<"u"&&global.process.versions&&global.process.versions.node&&(i["User-Agent"]="i18next-http-backend (node/".concat(global.process.version,"; ").concat(global.process.platform," ").concat(global.process.arch,")")),n&&(i["Content-Type"]="application/json");var o=typeof e.requestOptions=="function"?e.requestOptions(n):e.requestOptions,l=cj({method:n?"POST":"GET",body:n?e.stringify(n):void 0,headers:i},dj?{}:o),c=typeof e.alternateFetch=="function"&&e.alternateFetch.length>=1?e.alternateFetch:void 0;try{uj(t,l,a,c)}catch(d){if(!o||Object.keys(o).length===0||!d.message||d.message.indexOf("not implemented")<0)return a(d);try{Object.keys(o).forEach(function(f){delete l[f]}),uj(t,l,a,c),dj=!0}catch(f){a(f)}}},VR=function(e,t,n,a){n&&ul(n)==="object"&&(n=jy("",n).slice(1)),e.queryStringParams&&(t=jy(t,e.queryStringParams));try{var i=ud?new ud:new Fp("MSXML2.XMLHTTP.3.0");i.open(n?"POST":"GET",t,1),e.crossDomain||i.setRequestHeader("X-Requested-With","XMLHttpRequest"),i.withCredentials=!!e.withCredentials,n&&i.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),i.overrideMimeType&&i.overrideMimeType("application/json");var o=e.customHeaders;if(o=typeof o=="function"?o():o,o)for(var l in o)i.setRequestHeader(l,o[l]);i.onreadystatechange=function(){i.readyState>3&&a(i.status>=400?i.statusText:null,{status:i.status,data:i.responseText})},i.send(n)}catch(c){console&&console.log(c)}},KR=function(e,t,n,a){if(typeof n=="function"&&(a=n,n=void 0),a=a||function(){},fo&&t.indexOf("file:")!==0)return YR(e,t,n,a);if(dM()||typeof ActiveXObject=="function")return VR(e,t,n,a);a(new Error("No fetch and no xhr implementation found!"))};function yc(s){"@babel/helpers - typeof";return yc=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},yc(s)}function hj(s,e){var t=Object.keys(s);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(s);e&&(n=n.filter(function(a){return Object.getOwnPropertyDescriptor(s,a).enumerable})),t.push.apply(t,n)}return t}function lb(s){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?hj(Object(t),!0).forEach(function(n){pM(s,n,t[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(s,Object.getOwnPropertyDescriptors(t)):hj(Object(t)).forEach(function(n){Object.defineProperty(s,n,Object.getOwnPropertyDescriptor(t,n))})}return s}function XR(s,e){if(!(s instanceof e))throw new TypeError("Cannot call a class as a function")}function ZR(s,e){for(var t=0;t<e.length;t++){var n=e[t];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(s,fM(n.key),n)}}function QR(s,e,t){return e&&ZR(s.prototype,e),Object.defineProperty(s,"prototype",{writable:!1}),s}function pM(s,e,t){return(e=fM(e))in s?Object.defineProperty(s,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):s[e]=t,s}function fM(s){var e=JR(s,"string");return yc(e)=="symbol"?e:e+""}function JR(s,e){if(yc(s)!="object"||!s)return s;var t=s[Symbol.toPrimitive];if(t!==void 0){var n=t.call(s,e);if(yc(n)!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(s)}var eL=function(){return{loadPath:"/locales/{{lng}}/{{ns}}.json",addPath:"/locales/add/{{lng}}/{{ns}}",parse:function(t){return JSON.parse(t)},stringify:JSON.stringify,parsePayload:function(t,n,a){return pM({},n,a||"")},parseLoadPayload:function(t,n){},request:KR,reloadInterval:typeof window<"u"?!1:3600*1e3,customHeaders:{},queryStringParams:{},crossDomain:!1,withCredentials:!1,overrideMimeType:!1,requestOptions:{mode:"cors",credentials:"same-origin",cache:"default"}}},mM=(function(){function s(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};XR(this,s),this.services=e,this.options=t,this.allOptions=n,this.type="backend",this.init(e,t,n)}return QR(s,[{key:"init",value:function(t){var n=this,a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(this.services=t,this.options=lb(lb(lb({},eL()),this.options||{}),a),this.allOptions=i,this.services&&this.options.reloadInterval){var o=setInterval(function(){return n.reload()},this.options.reloadInterval);yc(o)==="object"&&typeof o.unref=="function"&&o.unref()}}},{key:"readMulti",value:function(t,n,a){this._readAny(t,t,n,n,a)}},{key:"read",value:function(t,n,a){this._readAny([t],t,[n],n,a)}},{key:"_readAny",value:function(t,n,a,i,o){var l=this,c=this.options.loadPath;typeof this.options.loadPath=="function"&&(c=this.options.loadPath(t,a)),c=$R(c),c.then(function(d){if(!d)return o(null,{});var f=l.services.interpolator.interpolate(d,{lng:t.join("+"),ns:a.join("+")});l.loadUrl(f,o,n,i)})}},{key:"loadUrl",value:function(t,n,a,i){var o=this,l=typeof a=="string"?[a]:a,c=typeof i=="string"?[i]:i,d=this.options.parseLoadPayload(l,c);this.options.request(this.options,t,d,function(f,p){if(p&&(p.status>=500&&p.status<600||!p.status))return n("failed loading "+t+"; status code: "+p.status,!0);if(p&&p.status>=400&&p.status<500)return n("failed loading "+t+"; status code: "+p.status,!1);if(!p&&f&&f.message){var m=f.message.toLowerCase(),b=["failed","fetch","network","load"].find(function(k){return m.indexOf(k)>-1});if(b)return n("failed loading "+t+": "+f.message,!0)}if(f)return n(f,!1);var x,w;try{typeof p.data=="string"?x=o.options.parse(p.data,a,i):x=p.data}catch{w="failed parsing "+t+" to json"}if(w)return n(w,!1);n(null,x)})}},{key:"create",value:function(t,n,a,i,o){var l=this;if(this.options.addPath){typeof t=="string"&&(t=[t]);var c=this.options.parsePayload(n,a,i),d=0,f=[],p=[];t.forEach(function(m){var b=l.options.addPath;typeof l.options.addPath=="function"&&(b=l.options.addPath(m,n));var x=l.services.interpolator.interpolate(b,{lng:m,ns:n});l.options.request(l.options,x,c,function(w,k){d+=1,f.push(w),p.push(k),d===t.length&&typeof o=="function"&&o(f,p)})})}}},{key:"reload",value:function(){var t=this,n=this.services,a=n.backendConnector,i=n.languageUtils,o=n.logger,l=a.language;if(!(l&&l.toLowerCase()==="cimode")){var c=[],d=function(p){var m=i.toResolveHierarchy(p);m.forEach(function(b){c.indexOf(b)<0&&c.push(b)})};d(l),this.allOptions.preload&&this.allOptions.preload.forEach(function(f){return d(f)}),c.forEach(function(f){t.allOptions.ns.forEach(function(p){a.read(f,p,"read",null,null,function(m,b){m&&o.warn("loading namespace ".concat(p," for language ").concat(f," failed"),m),!m&&b&&o.log("loaded namespace ".concat(p," for language ").concat(f),b),a.loaded("".concat(f,"|").concat(p),m,b)})})})}}}])})();mM.type="backend";const{slice:tL,forEach:nL}=[];function sL(s){return nL.call(tL.call(arguments,1),e=>{if(e)for(const t in e)s[t]===void 0&&(s[t]=e[t])}),s}function aL(s){return typeof s!="string"?!1:[/<\s*script.*?>/i,/<\s*\/\s*script\s*>/i,/<\s*img.*?on\w+\s*=/i,/<\s*\w+\s*on\w+\s*=.*?>/i,/javascript\s*:/i,/vbscript\s*:/i,/expression\s*\(/i,/eval\s*\(/i,/alert\s*\(/i,/document\.cookie/i,/document\.write\s*\(/i,/window\.location/i,/innerHTML/i].some(t=>t.test(s))}const pj=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/,iL=function(s,e){const n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{path:"/"},a=encodeURIComponent(e);let i=`${s}=${a}`;if(n.maxAge>0){const o=n.maxAge-0;if(Number.isNaN(o))throw new Error("maxAge should be a Number");i+=`; Max-Age=${Math.floor(o)}`}if(n.domain){if(!pj.test(n.domain))throw new TypeError("option domain is invalid");i+=`; Domain=${n.domain}`}if(n.path){if(!pj.test(n.path))throw new TypeError("option path is invalid");i+=`; Path=${n.path}`}if(n.expires){if(typeof n.expires.toUTCString!="function")throw new TypeError("option expires is invalid");i+=`; Expires=${n.expires.toUTCString()}`}if(n.httpOnly&&(i+="; HttpOnly"),n.secure&&(i+="; Secure"),n.sameSite)switch(typeof n.sameSite=="string"?n.sameSite.toLowerCase():n.sameSite){case!0:i+="; SameSite=Strict";break;case"lax":i+="; SameSite=Lax";break;case"strict":i+="; SameSite=Strict";break;case"none":i+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}return n.partitioned&&(i+="; Partitioned"),i},fj={create(s,e,t,n){let a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{path:"/",sameSite:"strict"};t&&(a.expires=new Date,a.expires.setTime(a.expires.getTime()+t*60*1e3)),n&&(a.domain=n),document.cookie=iL(s,e,a)},read(s){const e=`${s}=`,t=document.cookie.split(";");for(let n=0;n<t.length;n++){let a=t[n];for(;a.charAt(0)===" ";)a=a.substring(1,a.length);if(a.indexOf(e)===0)return a.substring(e.length,a.length)}return null},remove(s,e){this.create(s,"",-1,e)}};var rL={name:"cookie",lookup(s){let{lookupCookie:e}=s;if(e&&typeof document<"u")return fj.read(e)||void 0},cacheUserLanguage(s,e){let{lookupCookie:t,cookieMinutes:n,cookieDomain:a,cookieOptions:i}=e;t&&typeof document<"u"&&fj.create(t,s,n,a,i)}},oL={name:"querystring",lookup(s){var n;let{lookupQuerystring:e}=s,t;if(typeof window<"u"){let{search:a}=window.location;!window.location.search&&((n=window.location.hash)==null?void 0:n.indexOf("?"))>-1&&(a=window.location.hash.substring(window.location.hash.indexOf("?")));const o=a.substring(1).split("&");for(let l=0;l<o.length;l++){const c=o[l].indexOf("=");c>0&&o[l].substring(0,c)===e&&(t=o[l].substring(c+1))}}return t}},lL={name:"hash",lookup(s){var a;let{lookupHash:e,lookupFromHashIndex:t}=s,n;if(typeof window<"u"){const{hash:i}=window.location;if(i&&i.length>2){const o=i.substring(1);if(e){const l=o.split("&");for(let c=0;c<l.length;c++){const d=l[c].indexOf("=");d>0&&l[c].substring(0,d)===e&&(n=l[c].substring(d+1))}}if(n)return n;if(!n&&t>-1){const l=i.match(/\/([a-zA-Z-]*)/g);return Array.isArray(l)?(a=l[typeof t=="number"?t:0])==null?void 0:a.replace("/",""):void 0}}}return n}};let Yl=null;const mj=()=>{if(Yl!==null)return Yl;try{if(Yl=typeof window<"u"&&window.localStorage!==null,!Yl)return!1;const s="i18next.translate.boo";window.localStorage.setItem(s,"foo"),window.localStorage.removeItem(s)}catch{Yl=!1}return Yl};var cL={name:"localStorage",lookup(s){let{lookupLocalStorage:e}=s;if(e&&mj())return window.localStorage.getItem(e)||void 0},cacheUserLanguage(s,e){let{lookupLocalStorage:t}=e;t&&mj()&&window.localStorage.setItem(t,s)}};let Vl=null;const gj=()=>{if(Vl!==null)return Vl;try{if(Vl=typeof window<"u"&&window.sessionStorage!==null,!Vl)return!1;const s="i18next.translate.boo";window.sessionStorage.setItem(s,"foo"),window.sessionStorage.removeItem(s)}catch{Vl=!1}return Vl};var uL={name:"sessionStorage",lookup(s){let{lookupSessionStorage:e}=s;if(e&&gj())return window.sessionStorage.getItem(e)||void 0},cacheUserLanguage(s,e){let{lookupSessionStorage:t}=e;t&&gj()&&window.sessionStorage.setItem(t,s)}},dL={name:"navigator",lookup(s){const e=[];if(typeof navigator<"u"){const{languages:t,userLanguage:n,language:a}=navigator;if(t)for(let i=0;i<t.length;i++)e.push(t[i]);n&&e.push(n),a&&e.push(a)}return e.length>0?e:void 0}},hL={name:"htmlTag",lookup(s){let{htmlTag:e}=s,t;const n=e||(typeof document<"u"?document.documentElement:null);return n&&typeof n.getAttribute=="function"&&(t=n.getAttribute("lang")),t}},pL={name:"path",lookup(s){var a;let{lookupFromPathIndex:e}=s;if(typeof window>"u")return;const t=window.location.pathname.match(/\/([a-zA-Z-]*)/g);return Array.isArray(t)?(a=t[typeof e=="number"?e:0])==null?void 0:a.replace("/",""):void 0}},fL={name:"subdomain",lookup(s){var a,i;let{lookupFromSubdomainIndex:e}=s;const t=typeof e=="number"?e+1:1,n=typeof window<"u"&&((i=(a=window.location)==null?void 0:a.hostname)==null?void 0:i.match(/^(\w{2,5})\.(([a-z0-9-]{1,63}\.[a-z]{2,6})|localhost)/i));if(n)return n[t]}};let gM=!1;try{document.cookie,gM=!0}catch{}const bM=["querystring","cookie","localStorage","sessionStorage","navigator","htmlTag"];gM||bM.splice(1,1);const mL=()=>({order:bM,lookupQuerystring:"lng",lookupCookie:"i18next",lookupLocalStorage:"i18nextLng",lookupSessionStorage:"i18nextLng",caches:["localStorage"],excludeCacheFor:["cimode"],convertDetectedLanguage:s=>s});class yM{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.type="languageDetector",this.detectors={},this.init(e,t)}init(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{languageUtils:{}},t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.services=e,this.options=sL(t,this.options||{},mL()),typeof this.options.convertDetectedLanguage=="string"&&this.options.convertDetectedLanguage.indexOf("15897")>-1&&(this.options.convertDetectedLanguage=a=>a.replace("-","_")),this.options.lookupFromUrlIndex&&(this.options.lookupFromPathIndex=this.options.lookupFromUrlIndex),this.i18nOptions=n,this.addDetector(rL),this.addDetector(oL),this.addDetector(cL),this.addDetector(uL),this.addDetector(dL),this.addDetector(hL),this.addDetector(pL),this.addDetector(fL),this.addDetector(lL)}addDetector(e){return this.detectors[e.name]=e,this}detect(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.options.order,t=[];return e.forEach(n=>{if(this.detectors[n]){let a=this.detectors[n].lookup(this.options);a&&typeof a=="string"&&(a=[a]),a&&(t=t.concat(a))}}),t=t.filter(n=>n!=null&&!aL(n)).map(n=>this.options.convertDetectedLanguage(n)),this.services&&this.services.languageUtils&&this.services.languageUtils.getBestMatchFromCodes?t:t.length>0?t[0]:null}cacheUserLanguage(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.options.caches;t&&(this.options.excludeCacheFor&&this.options.excludeCacheFor.indexOf(e)>-1||t.forEach(n=>{this.detectors[n]&&this.detectors[n].cacheUserLanguage(e,this.options)}))}}yM.type="languageDetector";const $p={idle:"#4aff9e",working:"#4a9eff",waiting:"#ff9e4a",waiting_permission:"#ffcc00",error:"#ff4a4a",offline:"#888888",orphaned:"#ff9e4a",default:"#888888"},mo={running:"#4aff9e",stopped:"#888888",error:"#ff4a4a",unknown:"#ffaa00",starting:"#4a9eff",stopping:"#ffaa00"},gL={on_track:"#4aff9e",stalled:"#ff9e4a",blocked:"#ff4a4a",completed:"#4a9eff",idle:"#888888"},bL=["#4a9eff","#4aff9e","#ff9e4a","#ff4a9e","#9e4aff","#ff4a4a","#4affff","#ffff4a","#4ad7ff","#00e6a8","#ff6b4a","#ff66cc","#b84aff","#ff4a7a","#00d9ff","#e6ff4a","#1a3a6e","#1a5e3a","#6e3a1a","#6e1a4a","#4a1a6e","#6e1a1a","#1a5e5e","#5e5e1a","#1a4a6e","#145a47","#6e2c1a","#6e1a5e","#3b1a6e","#6e1a33","#14566e","#4f5e1a"],Vh={recent:"#50fa7b",short:"#f1fa8c",medium:"#ffb86c",long:"#ff5555"};function Sf(s){const t=Math.floor((Date.now()-s)/1e3)/60;return t<1?Vh.recent:t<5?Vh.short:t<30?Vh.medium:Vh.long}function Tx(s){return $p[s]??$p.default}let Sp=null;function xM(){if(!Sp)try{Sp=globalThis.__i18n}catch{}return Sp}function yL(s){Sp=s}function xL(s){return s>=1e6?(s/1e6).toFixed(1)+"M":s>=1e3?(s/1e3).toFixed(1)+"K":s.toString()}function Cy(s){return s>=1e6?(s/1e6).toFixed(1)+"M":s>=1e3?(s/1e3).toFixed(1)+"K":s.toString()}function vM(s){var a;const e=xM(),t=(a=e==null?void 0:e.t)==null?void 0:a.bind(e),n=Math.floor((Date.now()-s)/1e3);return n<60?t?t("common:time.seconds",{count:n}):`${n}s`:n<3600?t?t("common:time.minutes",{count:Math.floor(n/60)}):`${Math.floor(n/60)}m`:n<86400?t?t("common:time.hours",{count:Math.floor(n/3600)}):`${Math.floor(n/3600)}h`:t?t("common:time.days",{count:Math.floor(n/86400)}):`${Math.floor(n/86400)}d`}function jf(s){var d;const e=xM(),t=(d=e==null?void 0:e.t)==null?void 0:d.bind(e),n=Math.floor((Date.now()-s)/1e3);if(n<5)return t?t("common:time.justNow"):"just now";if(n<60)return t?t("common:time.secondsAgo",{count:n}):`${n}s ago`;const a=Math.floor(n/60);if(a<60){const f=n%60;return f>0?t?t("common:time.minutesSecondsAgo",{minutes:a,seconds:f}):`${a}m ${f}s ago`:t?t("common:time.minutesAgo",{count:a}):`${a}m ago`}const i=Math.floor(a/60),o=a%60;if(i<24)return o>0?t?t("common:time.hoursMinutesAgo",{hours:i,minutes:o}):`${i}h ${o}m ago`:t?t("common:time.hoursAgo",{count:i}):`${i}h ago`;const l=Math.floor(i/24),c=i%24;return c>0?t?t("common:time.daysHoursAgo",{days:l,hours:c}):`${l}d ${c}h ago`:t?t("common:time.daysAgo",{count:l}):`${l}d ago`}function ed(s,e){return s?e?s.replace(/\s*\(?\s*~?\$[\d,.]+\s*\)?/g,"").replace(/\s*cost[:\s]+~?\$[\d,.]+/gi,"").replace(/\s*price[:\s]+~?\$[\d,.]+/gi,"").replace(/\s*\(~?\$[\d,.]+\s*(?:USD|cost|spent)?\)/gi,"").replace(/\s*-\s*~?\$[\d,.]+\s*$/g,"").replace(/[^\S\n]+/g," ").trim():s:""}Sn.use(mM).use(yM).use(_R).init({fallbackLng:"en",ns:["common","tools","config","errors","notifications","dashboard","terminal"],defaultNS:"common",backend:{loadPath:"/locales/{{lng}}/{{ns}}.json"},detection:{order:["localStorage","navigator"],lookupLocalStorage:"tide-commander-language",caches:["localStorage"]},interpolation:{escapeValue:!1},react:{useSuspense:!0}}).then(()=>{yL(Sn)});const mt={CONFIG:"tide-commander-config",SHOW_FPS:"tide-show-fps",SETTINGS:"tide-settings",SHORTCUTS:"tide-shortcuts",MOUSE_CONTROLS:"tide-mouse-controls",BACKEND_URL:"tide-backend-url",AUTH_TOKEN:"tide-auth-token",SCENE_VIEW_MODE:"tide-scene-view-mode",CAMERA_STATE:"tide-camera-state",CAMERA_STATE_2D:"tide-camera-state-2d",VIEW_MODE:"guake-view-mode",ADVANCED_VIEW:"guake-advanced-view",TERMINAL_HEIGHT:"guake-terminal-height",TERMINAL_FULLSCREEN:"guake-terminal-fullscreen",INPUT_TEXT_PREFIX:"guake-input-",PASTED_TEXTS_PREFIX:"guake-pasted-",COMMANDER_TAB:"commander-active-tab",COMMANDER_FILTERS:"commander-filters",LAST_CWD:"tide-last-cwd",GLOBAL_SUPERVISOR_COLLAPSED:"tide-global-supervisor-collapsed",TOOLS_COLLAPSED:"tide-tool-history-collapsed",FILES_COLLAPSED:"tide-file-history-collapsed",MOBILE_VIEW:"tide-mobile-view",TREE_PANEL_WIDTH:"tide-tree-panel-width",AGENT_ORDER:"tide-agent-order",AOP_CONFIG:"tide-aop-config",AOP_OPEN:"tide-aop-open",MOBILE_OVERVIEW_HEIGHT:"tide-mobile-overview-height",UNSEEN_AGENTS:"tide-unseen-agents"},Ny="tide-backend-url-change";function Ba(s,e){try{const t=localStorage.getItem(s);return t===null?e:JSON.parse(t)}catch{return e}}function ra(s,e=""){try{return localStorage.getItem(s)??e}catch{return e}}function dd(s,e=!1){try{const t=localStorage.getItem(s);return t===null?e:t==="true"}catch{return e}}function Ex(s,e){try{const t=localStorage.getItem(s);if(t===null)return e;const n=Number(t);return isNaN(n)?e:n}catch{return e}}function Ii(s,e){try{localStorage.setItem(s,JSON.stringify(e))}catch(t){console.error(`Failed to save to localStorage: ${s}`,t)}}function $a(s,e){try{localStorage.setItem(s,e)}catch(t){console.error(`Failed to save to localStorage: ${s}`,t)}}function hd(s,e){try{localStorage.setItem(s,String(e))}catch(t){console.error(`Failed to save to localStorage: ${s}`,t)}}function _x(s,e){try{localStorage.setItem(s,String(e))}catch(t){console.error(`Failed to save to localStorage: ${s}`,t)}}function bj(s){try{localStorage.removeItem(s)}catch(e){console.error(`Failed to remove from localStorage: ${s}`,e)}}function Tr(){const s=Cf();return s?s.replace(/\/$/,""):`${window.location.protocol}//${window.location.host}`}function Ha(){return ra(mt.AUTH_TOKEN,"")}function Cf(){return ra(mt.BACKEND_URL,"")}function wM(s){const e=s.trim();$a(mt.BACKEND_URL,e),typeof window<"u"&&window.dispatchEvent(new CustomEvent(Ny,{detail:e}))}function kM(s){if(typeof window>"u")return()=>{};const e=n=>{s(n.detail)},t=n=>{n.key===mt.BACKEND_URL&&s(n.newValue??"")};return window.addEventListener(Ny,e),window.addEventListener("storage",t),()=>{window.removeEventListener(Ny,e),window.removeEventListener("storage",t)}}function ct(s){return`${Tr()}${s}`}async function yt(s,e){const t=Ha(),n=new Headers(e==null?void 0:e.headers);return t&&n.set("X-Auth-Token",t),fetch(s,{...e,headers:n})}function Cd(s){const e=Ha();if(!e)return s;try{const t=!s.startsWith("http://")&&!s.startsWith("https://"),n=t?"http://dummy":void 0,a=new URL(s,n);return a.searchParams.set("token",e),t?a.pathname+a.search:a.toString()}catch{const t=s.includes("?")?"&":"?";return`${s}${t}token=${encodeURIComponent(e)}`}}function ta(s=!1,e){const[t,n]=y.useState(s),[a,i]=y.useState(e),o=y.useCallback(d=>{d!==void 0&&i(d),n(!0)},[]),l=y.useCallback(()=>{n(!1)},[]),c=y.useCallback(()=>{n(d=>!d)},[]);return{isOpen:t,data:a,open:o,close:l,toggle:c,setData:i}}function vL(){const[s,e]=y.useState(null),t=y.useCallback(a=>{e(a)},[]),n=y.useCallback(()=>{e(null)},[]);return{isOpen:s!==null,id:s,open:t,close:n}}function wL(){const[s,e]=y.useState(!1),[t,n]=y.useState({x:0,y:0}),[a,i]=y.useState({x:0,z:0}),[o,l]=y.useState({type:"ground"}),c=y.useCallback((f,p,m)=>{n(f),i(p),l(m),e(!0)},[]),d=y.useCallback(()=>{e(!1)},[]);return{isOpen:s,screenPosition:t,worldPosition:a,target:o,open:c,close:d}}const fi=[],kL=new Set;function Hp(){kL.forEach(s=>s())}function SL(s,e){const t=fi.findIndex(n=>n.id===s);return t!==-1&&fi.splice(t,1),fi.push({id:s,close:e}),Hp(),()=>{const n=fi.findIndex(a=>a.id===s);n!==-1&&(fi.splice(n,1),Hp())}}function Ay(){return fi.length===0?!1:(fi.pop().close(),Hp(),!0)}function jL(...s){const e=new Set(s);for(;fi.length>0;){const t=fi[fi.length-1];if(e.has(t.id))break;fi.pop().close()}Hp()}function Pn(s,e,t){const n=y.useRef(t);n.current=t,y.useEffect(()=>e?SL(s,()=>n.current()):void 0,[s,e])}let My,Ty;try{My=require("@capacitor/haptics").Haptics,Ty=require("@capacitor/haptics").ImpactStyle}catch{}function yj(s,e){const{threshold:t=80,maxVerticalMovement:n=50,enabled:a=!0,onSwipeLeft:i,onSwipeRight:o,onSwipeMove:l,onSwipeCancel:c}=e,d=y.useRef({startX:0,startY:0,startTime:0,isTracking:!1,hasMovedEnough:!1}),f=y.useCallback(x=>{if(x.touches.length!==1)return;const w=x.touches[0];d.current={startX:w.clientX,startY:w.clientY,startTime:Date.now(),isTracking:!0,hasMovedEnough:!1}},[]),p=y.useCallback(x=>{if(!d.current.isTracking||x.touches.length!==1)return;const w=x.touches[0],k=w.clientX-d.current.startX;if(Math.abs(w.clientY-d.current.startY)>n){d.current.isTracking=!1,d.current.hasMovedEnough&&(c==null||c());return}const C=window.innerWidth*.4,N=Math.max(-1,Math.min(1,k/C));Math.abs(k)>=12&&(d.current.hasMovedEnough=!0,l==null||l(N))},[n,l,c]),m=y.useCallback(x=>{const w=d.current.isTracking,k=d.current.hasMovedEnough;if(!w)return;const S=x.changedTouches[0],j=S.clientX-d.current.startX,C=Math.abs(S.clientY-d.current.startY),N=Date.now()-d.current.startTime;d.current.isTracking=!1,d.current.hasMovedEnough=!1,Math.abs(j)>=t&&C<=n&&N<500?(My&&Ty?My.impact({style:Ty.Light}).catch(()=>{navigator.vibrate&&navigator.vibrate(8)}):navigator.vibrate&&navigator.vibrate(8),j>0?o==null||o():i==null||i()):k&&(c==null||c())},[t,n,i,o,c]),b=y.useCallback(()=>{const x=d.current.hasMovedEnough;d.current.isTracking=!1,d.current.hasMovedEnough=!1,x&&(c==null||c())},[c]);y.useEffect(()=>{const x=s.current;if(!(!x||!a||!(window.innerWidth<=768&&"ontouchstart"in window)))return x.addEventListener("touchstart",f,{passive:!0}),x.addEventListener("touchmove",p,{passive:!0}),x.addEventListener("touchend",m,{passive:!0}),x.addEventListener("touchcancel",b,{passive:!0}),()=>{x.removeEventListener("touchstart",f),x.removeEventListener("touchmove",p),x.removeEventListener("touchend",m),x.removeEventListener("touchcancel",b)}},[s,a,f,p,m,b])}const CL={width:400,height:300,copyStyleSheets:!0,keepOnTop:"focus"};function NL(){return"documentPictureInPicture"in window}function AL(s,e){for(const i of s.styleSheets)try{if(i.cssRules){const o=e.createElement("style");for(const l of i.cssRules)o.appendChild(e.createTextNode(l.cssText));e.head.appendChild(o)}}catch{if(i.href){const o=e.createElement("link");o.rel="stylesheet",o.href=i.href,e.head.appendChild(o)}}const t=s.documentElement.style.cssText;t&&(e.documentElement.style.cssText=t);const n=getComputedStyle(s.documentElement),a=[];for(let i=0;i<n.length;i++){const o=n[i];o.startsWith("--")&&a.push(`${o}: ${n.getPropertyValue(o)}`)}if(a.length>0){const i=e.createElement("style");i.textContent=`:root { ${a.join("; ")} }`,e.head.appendChild(i)}}function ML(){const[s,e]=y.useState(!1),[t,n]=y.useState(null),[a,i]=y.useState(null),o=y.useRef(null),l=NL(),c=y.useCallback(()=>{if(o.current){const p=o.current.__cleanupFns;p&&p.forEach(m=>m()),o.current.close(),o.current=null}n(null),i(null),e(!1)},[]),d=y.useCallback(async p=>{if(!l)return console.warn("Document Picture-in-Picture is not supported in this browser"),!1;o.current&&c();const m={...CL,...p};try{const x=await window.documentPictureInPicture.requestWindow({width:m.width,height:m.height,disallowReturnToOpener:!0});o.current=x,m.copyStyleSheets&&AL(document,x.document);const w=x.document.createElement("div");w.id="pip-root",w.style.width="100%",w.style.height="100%",x.document.body.appendChild(w),x.document.body.style.margin="0",x.document.body.style.padding="0",x.document.body.style.overflow="hidden",x.addEventListener("pagehide",()=>{o.current=null,n(null),i(null),e(!1)});const k=[];if(m.keepOnTop&&m.keepOnTop!=="none"){const S=m.keepOnTop==="raise",j=()=>{o.current&&!o.current.closed&&setTimeout(()=>{o.current&&!o.current.closed&&(o.current.focus(),S&&setTimeout(()=>window.focus(),10))},50)},C=()=>{document.visibilityState==="visible"&&o.current&&!o.current.closed&&setTimeout(()=>{o.current&&!o.current.closed&&(o.current.focus(),S&&setTimeout(()=>window.focus(),10))},100)};window.addEventListener("focus",j),document.addEventListener("visibilitychange",C),k.push(()=>window.removeEventListener("focus",j),()=>document.removeEventListener("visibilitychange",C))}return x.__cleanupFns=k,n(x),i(w),e(!0),!0}catch(b){return console.error("Failed to open Picture-in-Picture window:",b),!1}},[l,c]),f=y.useCallback(async p=>{s?c():await d(p)},[s,d,c]);return y.useEffect(()=>()=>{o.current&&o.current.close()},[]),y.useMemo(()=>({isOpen:s,pipWindow:t,pipContainer:a,isSupported:l,open:d,close:c,toggle:f}),[s,t,a,l,d,c,f])}function Au(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,s=>{const e=Math.random()*16|0;return(s==="x"?e:e&3|8).toString(16)})}class TL{constructor(){U(this,"messages",new Map);U(this,"logs",[]);U(this,"maxMessagesPerAgent",200);U(this,"maxLogs",500);U(this,"enabled",!0);U(this,"listeners",new Set);U(this,"logListeners",new Set)}setEnabled(e){this.enabled=e,this.notifyListeners("all")}isEnabled(){return this.enabled}captureSent(e,t){try{const n=JSON.parse(t);console.log(`[AgentDebugger] SENT - agent: ${e.slice(0,4)}, type: ${n.type}, size: ${t.length}B`),this.addMessage(e,{id:Au(),agentId:e,direction:"sent",type:n.type||"unknown",payload:n.payload||n,timestamp:Date.now(),size:t.length,raw:t})}catch(n){console.error("[AgentDebugger] Failed to parse SENT message:",String(n).slice(0,80)),this.addMessage(e,{id:Au(),agentId:e,direction:"sent",type:"parse_error",payload:{error:String(n)},timestamp:Date.now(),size:t.length,raw:t})}}captureReceived(e,t){try{const n=JSON.parse(t);console.log(`[AgentDebugger] RECEIVED - agent: ${e.slice(0,4)}, type: ${n.type}, size: ${t.length}B`),this.addMessage(e,{id:Au(),agentId:e,direction:"received",type:n.type||"unknown",payload:n.payload||n,timestamp:Date.now(),size:t.length,raw:t})}catch(n){console.error("[AgentDebugger] Failed to parse RECEIVED message:",String(n).slice(0,80)),this.addMessage(e,{id:Au(),agentId:e,direction:"received",type:"parse_error",payload:{error:String(n)},timestamp:Date.now(),size:t.length,raw:t})}}addMessage(e,t){let n=this.messages.get(e);n||(n=[],this.messages.set(e,n)),n.push(t),console.log(`[AgentDebugger] Added message for ${e}, total: ${n.length}, type: ${t.type}, direction: ${t.direction}`),n.length>this.maxMessagesPerAgent&&n.shift(),this.notifyListeners(e)}getMessages(e){return this.messages.get(e)||[]}getStats(e){const t=this.getMessages(e),n=t.filter(o=>o.direction==="sent").length,a=t.filter(o=>o.direction==="received").length,i=[...new Set(t.map(o=>o.type))];return{total:t.length,sent:n,received:a,messageTypes:i}}clearMessages(e){this.messages.delete(e),this.notifyListeners(e)}clearAllMessages(){this.messages.clear(),this.notifyListeners("all")}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}notifyListeners(e){this.listeners.forEach(t=>t(e))}getAgentIds(){return Array.from(this.messages.keys())}log(e,t,n,a){const i={id:Au(),level:e,message:t,data:n,timestamp:Date.now(),source:a};this.logs.push(i),this.logs.length>this.maxLogs&&this.logs.shift(),this.notifyLogListeners()}debug(e,t,n){this.log("debug",e,t,n)}info(e,t,n){this.log("info",e,t,n)}warn(e,t,n){this.log("warn",e,t,n)}error(e,t,n){this.log("error",e,t,n)}getLogs(){return this.logs}clearLogs(){this.logs=[],this.notifyLogListeners()}subscribeLogs(e){return this.logListeners.add(e),()=>this.logListeners.delete(e)}notifyLogListeners(){this.logListeners.forEach(e=>e())}}const Xs=new TL,pd={debug:(s,e,t)=>Xs.debug(s,e,t),info:(s,e,t)=>Xs.info(s,e,t),warn:(s,e,t)=>Xs.warn(s,e,t),error:(s,e,t)=>Xs.error(s,e,t)};/*! Capacitor: https://capacitorjs.com/ - MIT License */var xc;(function(s){s.Unimplemented="UNIMPLEMENTED",s.Unavailable="UNAVAILABLE"})(xc||(xc={}));class cb extends Error{constructor(e,t,n){super(e),this.message=e,this.code=t,this.data=n}}const EL=s=>{var e,t;return s!=null&&s.androidBridge?"android":!((t=(e=s==null?void 0:s.webkit)===null||e===void 0?void 0:e.messageHandlers)===null||t===void 0)&&t.bridge?"ios":"web"},_L=s=>{const e=s.CapacitorCustomPlatform||null,t=s.Capacitor||{},n=t.Plugins=t.Plugins||{},a=()=>e!==null?e.name:EL(s),i=()=>a()!=="web",o=p=>{const m=d.get(p);return!!(m!=null&&m.platforms.has(a())||l(p))},l=p=>{var m;return(m=t.PluginHeaders)===null||m===void 0?void 0:m.find(b=>b.name===p)},c=p=>s.console.error(p),d=new Map,f=(p,m={})=>{const b=d.get(p);if(b)return console.warn(`Capacitor plugin "${p}" already registered. Cannot register plugins twice.`),b.proxy;const x=a(),w=l(p);let k;const S=async()=>(!k&&x in m?k=typeof m[x]=="function"?k=await m[x]():k=m[x]:e!==null&&!k&&"web"in m&&(k=typeof m.web=="function"?k=await m.web():k=m.web),k),j=(M,P)=>{var E,R;if(w){const I=w==null?void 0:w.methods.find(O=>P===O.name);if(I)return I.rtype==="promise"?O=>t.nativePromise(p,P.toString(),O):(O,B)=>t.nativeCallback(p,P.toString(),O,B);if(M)return(E=M[P])===null||E===void 0?void 0:E.bind(M)}else{if(M)return(R=M[P])===null||R===void 0?void 0:R.bind(M);throw new cb(`"${p}" plugin is not implemented on ${x}`,xc.Unimplemented)}},C=M=>{let P;const E=(...R)=>{const I=S().then(O=>{const B=j(O,M);if(B){const q=B(...R);return P=q==null?void 0:q.remove,q}else throw new cb(`"${p}.${M}()" is not implemented on ${x}`,xc.Unimplemented)});return M==="addListener"&&(I.remove=async()=>P()),I};return E.toString=()=>`${M.toString()}() { [capacitor code] }`,Object.defineProperty(E,"name",{value:M,writable:!1,configurable:!1}),E},N=C("addListener"),_=C("removeListener"),D=(M,P)=>{const E=N({eventName:M},P),R=async()=>{const O=await E;_({eventName:M,callbackId:O},P)},I=new Promise(O=>E.then(()=>O({remove:R})));return I.remove=async()=>{console.warn("Using addListener() without 'await' is deprecated."),await R()},I},L=new Proxy({},{get(M,P){switch(P){case"$$typeof":return;case"toJSON":return()=>({});case"addListener":return w?D:N;case"removeListener":return _;default:return C(P)}}});return n[p]=L,d.set(p,{name:p,proxy:L,platforms:new Set([...Object.keys(m),...w?[x]:[]])}),L};return t.convertFileSrc||(t.convertFileSrc=p=>p),t.getPlatform=a,t.handleError=c,t.isNativePlatform=i,t.isPluginAvailable=o,t.registerPlugin=f,t.Exception=cb,t.DEBUG=!!t.DEBUG,t.isLoggingEnabled=!!t.isLoggingEnabled,t},DL=s=>s.Capacitor=_L(s),La=DL(typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}),Nd=La.registerPlugin;class Dx{constructor(){this.listeners={},this.retainedEventArguments={},this.windowListeners={}}addListener(e,t){let n=!1;this.listeners[e]||(this.listeners[e]=[],n=!0),this.listeners[e].push(t);const i=this.windowListeners[e];i&&!i.registered&&this.addWindowListener(i),n&&this.sendRetainedArgumentsForEvent(e);const o=async()=>this.removeListener(e,t);return Promise.resolve({remove:o})}async removeAllListeners(){this.listeners={};for(const e in this.windowListeners)this.removeWindowListener(this.windowListeners[e]);this.windowListeners={}}notifyListeners(e,t,n){const a=this.listeners[e];if(!a){if(n){let i=this.retainedEventArguments[e];i||(i=[]),i.push(t),this.retainedEventArguments[e]=i}return}a.forEach(i=>i(t))}hasListeners(e){var t;return!!(!((t=this.listeners[e])===null||t===void 0)&&t.length)}registerWindowListener(e,t){this.windowListeners[t]={registered:!1,windowEventName:e,pluginEventName:t,handler:n=>{this.notifyListeners(t,n)}}}unimplemented(e="not implemented"){return new La.Exception(e,xc.Unimplemented)}unavailable(e="not available"){return new La.Exception(e,xc.Unavailable)}async removeListener(e,t){const n=this.listeners[e];if(!n)return;const a=n.indexOf(t);this.listeners[e].splice(a,1),this.listeners[e].length||this.removeWindowListener(this.windowListeners[e])}addWindowListener(e){window.addEventListener(e.windowEventName,e.handler),e.registered=!0}removeWindowListener(e){e&&(window.removeEventListener(e.windowEventName,e.handler),e.registered=!1)}sendRetainedArgumentsForEvent(e){const t=this.retainedEventArguments[e];t&&(delete this.retainedEventArguments[e],t.forEach(n=>{this.notifyListeners(e,n)}))}}const xj=s=>encodeURIComponent(s).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape),vj=s=>s.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent);class PL extends Dx{async getCookies(){const e=document.cookie,t={};return e.split(";").forEach(n=>{if(n.length<=0)return;let[a,i]=n.replace(/=/,"CAP_COOKIE").split("CAP_COOKIE");a=vj(a).trim(),i=vj(i).trim(),t[a]=i}),t}async setCookie(e){try{const t=xj(e.key),n=xj(e.value),a=e.expires?`; expires=${e.expires.replace("expires=","")}`:"",i=(e.path||"/").replace("path=",""),o=e.url!=null&&e.url.length>0?`domain=${e.url}`:"";document.cookie=`${t}=${n||""}${a}; path=${i}; ${o};`}catch(t){return Promise.reject(t)}}async deleteCookie(e){try{document.cookie=`${e.key}=; Max-Age=0`}catch(t){return Promise.reject(t)}}async clearCookies(){try{const e=document.cookie.split(";")||[];for(const t of e)document.cookie=t.replace(/^ +/,"").replace(/=.*/,`=;expires=${new Date().toUTCString()};path=/`)}catch(e){return Promise.reject(e)}}async clearAllCookies(){try{await this.clearCookies()}catch(e){return Promise.reject(e)}}}Nd("CapacitorCookies",{web:()=>new PL});const RL=async s=>new Promise((e,t)=>{const n=new FileReader;n.onload=()=>{const a=n.result;e(a.indexOf(",")>=0?a.split(",")[1]:a)},n.onerror=a=>t(a),n.readAsDataURL(s)}),LL=(s={})=>{const e=Object.keys(s);return Object.keys(s).map(a=>a.toLocaleLowerCase()).reduce((a,i,o)=>(a[i]=s[e[o]],a),{})},OL=(s,e=!0)=>s?Object.entries(s).reduce((n,a)=>{const[i,o]=a;let l,c;return Array.isArray(o)?(c="",o.forEach(d=>{l=e?encodeURIComponent(d):d,c+=`${i}=${l}&`}),c.slice(0,-1)):(l=e?encodeURIComponent(o):o,c=`${i}=${l}`),`${n}&${c}`},"").substr(1):null,IL=(s,e={})=>{const t=Object.assign({method:s.method||"GET",headers:s.headers},e),a=LL(s.headers)["content-type"]||"";if(typeof s.data=="string")t.body=s.data;else if(a.includes("application/x-www-form-urlencoded")){const i=new URLSearchParams;for(const[o,l]of Object.entries(s.data||{}))i.set(o,l);t.body=i.toString()}else if(a.includes("multipart/form-data")||s.data instanceof FormData){const i=new FormData;if(s.data instanceof FormData)s.data.forEach((l,c)=>{i.append(c,l)});else for(const l of Object.keys(s.data))i.append(l,s.data[l]);t.body=i;const o=new Headers(t.headers);o.delete("content-type"),t.headers=o}else(a.includes("application/json")||typeof s.data=="object")&&(t.body=JSON.stringify(s.data));return t};class BL extends Dx{async request(e){const t=IL(e,e.webFetchExtra),n=OL(e.params,e.shouldEncodeUrlParams),a=n?`${e.url}?${n}`:e.url,i=await fetch(a,t),o=i.headers.get("content-type")||"";let{responseType:l="text"}=i.ok?e:{};o.includes("application/json")&&(l="json");let c,d;switch(l){case"arraybuffer":case"blob":d=await i.blob(),c=await RL(d);break;case"json":c=await i.json();break;case"document":case"text":default:c=await i.text()}const f={};return i.headers.forEach((p,m)=>{f[m]=p}),{data:c,headers:f,status:i.status,url:i.url}}async get(e){return this.request(Object.assign(Object.assign({},e),{method:"GET"}))}async post(e){return this.request(Object.assign(Object.assign({},e),{method:"POST"}))}async put(e){return this.request(Object.assign(Object.assign({},e),{method:"PUT"}))}async patch(e){return this.request(Object.assign(Object.assign({},e),{method:"PATCH"}))}async delete(e){return this.request(Object.assign(Object.assign({},e),{method:"DELETE"}))}}const wj=Nd("CapacitorHttp",{web:()=>new BL});var kj;(function(s){s.Dark="DARK",s.Light="LIGHT",s.Default="DEFAULT"})(kj||(kj={}));var Sj;(function(s){s.StatusBar="StatusBar",s.NavigationBar="NavigationBar"})(Sj||(Sj={}));class zL extends Dx{async setStyle(){this.unavailable("not available for web")}async setAnimation(){this.unavailable("not available for web")}async show(){this.unavailable("not available for web")}async hide(){this.unavailable("not available for web")}}Nd("SystemBars",{web:()=>new zL});var jj;(function(s){s[s.Sunday=1]="Sunday",s[s.Monday=2]="Monday",s[s.Tuesday=3]="Tuesday",s[s.Wednesday=4]="Wednesday",s[s.Thursday=5]="Thursday",s[s.Friday=6]="Friday",s[s.Saturday=7]="Saturday"})(jj||(jj={}));const Px=Nd("LocalNotifications",{web:()=>hM(()=>import("./web-CAEfCxVj.js"),__vite__mapDeps([2,3,1,4])).then(s=>new s.LocalNotificationsWeb)}),FL=Nd("ServerConfig");let $L=100;const HL="agent_alerts",Ey="tide-notification-tap";function UL(){return typeof window<"u"&&window.innerWidth<=768&&"ontouchstart"in window}function SM(s){if(UL()){z.openTerminalOnMobile(s);return}if(document.querySelector(".commander-overlay")){z.requestCommanderExpand(s);return}z.selectAgent(s),z.setTerminalOpen(!0)}function Ad(){try{return La.isNativePlatform()}catch{return!1}}async function GL(){if(Ad())try{const s=await Px.requestPermissions();return console.log("[Notifications] Permission result:",s.display),s.display==="granted"}catch(s){return console.error("[Notifications] Failed to request permissions:",s),!1}else return"Notification"in window?await Notification.requestPermission()==="granted":!1}async function WL(s){const{title:e,body:t,icon:n,data:a}=s;if(Ad())try{const i=$L++;console.log("[Notifications] Scheduling native notification id="+i,e),await Px.schedule({notifications:[{id:i,title:e,body:t,extra:a,channelId:HL,smallIcon:"ic_launcher",autoCancel:!0}]}),console.log("[Notifications] Notification scheduled successfully")}catch(i){console.error("[Notifications] Failed to schedule notification:",i)}else if("Notification"in window&&Notification.permission==="granted"){const i=new Notification(e,{body:t,icon:n,data:a});i.onclick=()=>{window.focus(),a&&window.dispatchEvent(new CustomEvent(Ey,{detail:a}))}}}let ub=!1;async function qL(s){const e=[];if(ub)return()=>{};if(ub=!0,s){const t=n=>{const a=n;a.detail&&s(a.detail)};window.addEventListener(Ey,t),e.push(()=>window.removeEventListener(Ey,t))}if(Ad())try{const t=await Px.addListener("localNotificationActionPerformed",n=>{s&&n.notification.extra&&s(n.notification.extra)});e.push(()=>t.remove())}catch(t){console.error("[Notifications] Failed to add tap listener:",t)}return()=>{e.forEach(t=>t()),ub=!1}}function YL(s,e){Ad()&&FL.syncConfig({url:s,token:e}).catch(t=>{console.warn("[Notifications] Failed to sync config to native service:",t)})}window.__tideWsState||(window.__tideWsState={ws:null,isConnecting:!1,reconnectAttempts:0,reconnectTimeout:null});const Rx=()=>window.__tideWsState.ws,Cj=s=>{window.__tideWsState.ws=s},VL=()=>window.__tideWsState.isConnecting,Mu=s=>{window.__tideWsState.isConnecting=s},_y=()=>window.__tideWsState.reconnectAttempts,Dy=s=>{window.__tideWsState.reconnectAttempts=s},jM=()=>window.__tideWsState.reconnectTimeout,CM=s=>{window.__tideWsState.reconnectTimeout=s},Nj=10,Lx="tide_ws_has_connected";function Aj(){return sessionStorage.getItem(Lx)==="true"}function KL(s){sessionStorage.setItem(Lx,"true")}function XL(){sessionStorage.removeItem(Lx)}let NM=null;const ZL=s=>{NM=s},Mj=()=>NM,We={onToast:null,onAgentCreated:null,onAgentUpdated:null,onAgentDeleted:null,onAgentsSync:null,onAreasSync:null,onSpawnError:null,onSpawnSuccess:null,onToolUse:null,onDirectoryNotFound:null,onDelegation:null,onCustomClassesSync:null,onReconnect:null,onAgentNotification:null,onBuildingUpdated:null,onSubagentStarted:null,onSubagentCompleted:null};function AM(s){s.onToast&&(We.onToast=s.onToast),s.onAgentCreated&&(We.onAgentCreated=s.onAgentCreated),s.onAgentUpdated&&(We.onAgentUpdated=s.onAgentUpdated),s.onAgentDeleted&&(We.onAgentDeleted=s.onAgentDeleted),s.onAgentsSync&&(We.onAgentsSync=s.onAgentsSync),s.onAreasSync&&(We.onAreasSync=s.onAreasSync),s.onSpawnError&&(We.onSpawnError=s.onSpawnError),s.onSpawnSuccess&&(We.onSpawnSuccess=s.onSpawnSuccess),s.onToolUse&&(We.onToolUse=s.onToolUse),s.onDirectoryNotFound&&(We.onDirectoryNotFound=s.onDirectoryNotFound),s.onDelegation&&(We.onDelegation=s.onDelegation),s.onCustomClassesSync&&(We.onCustomClassesSync=s.onCustomClassesSync),s.onReconnect&&(We.onReconnect=s.onReconnect),s.onAgentNotification&&(We.onAgentNotification=s.onAgentNotification),s.onBuildingUpdated&&(We.onBuildingUpdated=s.onBuildingUpdated),s.onSubagentStarted&&(We.onSubagentStarted=s.onSubagentStarted),s.onSubagentCompleted&&(We.onSubagentCompleted=s.onSubagentCompleted)}function QL(){We.onToast=null,We.onAgentCreated=null,We.onAgentUpdated=null,We.onAgentDeleted=null,We.onAgentsSync=null,We.onAreasSync=null,We.onSpawnError=null,We.onSpawnSuccess=null,We.onToolUse=null,We.onDirectoryNotFound=null,We.onDelegation=null,We.onCustomClassesSync=null,We.onReconnect=null,We.onAgentNotification=null,We.onSubagentStarted=null,We.onSubagentCompleted=null}function JL(){We.onAgentCreated=null,We.onAgentUpdated=null,We.onAgentDeleted=null,We.onAgentsSync=null,We.onAreasSync=null,We.onToolUse=null,We.onDelegation=null,We.onCustomClassesSync=null,We.onBuildingUpdated=null,We.onSubagentStarted=null,We.onSubagentCompleted=null}const Kh=new Map,eO=new Map,Py={start(s){},end(s){},async measure(s,e){this.start(s);try{return await e()}finally{this.end(s)}},measureSync(s,e){this.start(s);try{return e()}finally{this.end(s)}},getMetrics(s){const e={},t=s?Kh.has(s)?[[s,Kh.get(s)]]:[]:Array.from(Kh.entries());for(const[n,a]of t){const i=[...a.samples].sort((d,f)=>d-f),o=Math.floor(i.length*.5),l=Math.floor(i.length*.95),c=Math.floor(i.length*.99);e[n]={count:a.count,avgMs:a.totalMs/a.count,minMs:a.minMs,maxMs:a.maxMs,lastMs:a.lastMs,p50Ms:i[o]||0,p95Ms:i[l]||0,p99Ms:i[c]||0}}return e},clear(){Kh.clear(),eO.clear()},report(){}};class tO{constructor(){U(this,"frames",[]);U(this,"lastFrameTime",0);U(this,"frameCount",0);U(this,"fps",0);U(this,"minFps",1/0);U(this,"maxFps",0);U(this,"fpsHistory",[]);U(this,"maxHistorySize",60)}tick(e=200){const t=performance.now();if(this.lastFrameTime>0){const n=t-this.lastFrameTime;n<e&&(this.frames.push(n),this.frames.length>60&&this.frames.shift())}this.lastFrameTime=t,this.frameCount++}update(){if(this.frames.length===0)return;const e=this.frames.reduce((t,n)=>t+n,0)/this.frames.length;this.fps=1e3/e,this.minFps=Math.min(this.minFps,this.fps),this.maxFps=Math.max(this.maxFps,this.fps),this.fpsHistory.push(this.fps),this.fpsHistory.length>this.maxHistorySize&&this.fpsHistory.shift()}getFPS(){return Math.round(this.fps)}getStats(){const e=this.fpsHistory.length>0?this.fpsHistory.reduce((t,n)=>t+n,0)/this.fpsHistory.length:this.fps;return{current:Math.round(this.fps),min:Math.round(this.minFps===1/0?0:this.minFps),max:Math.round(this.maxFps),avg:Math.round(e)}}reset(){this.frames=[],this.lastFrameTime=0,this.frameCount=0,this.fps=0,this.minFps=1/0,this.maxFps=0,this.fpsHistory=[]}}const rc=new tO;class nO{constructor(){U(this,"snapshots",[]);U(this,"maxSnapshots",120);U(this,"intervalId",null);U(this,"leakThresholdMB",50);U(this,"baselineUsedMB",0)}getUsage(){const e=performance.memory;return e?{usedMB:Math.round(e.usedJSHeapSize/1024/1024),totalMB:Math.round(e.totalJSHeapSize/1024/1024),limitMB:Math.round(e.jsHeapSizeLimit/1024/1024)}:null}log(){const e=this.getUsage();e&&console.log(`[Memory] Used: ${e.usedMB}MB / ${e.totalMB}MB (limit: ${e.limitMB}MB)`)}startMonitoring(e=1e3){if(this.intervalId)return;const t=this.getUsage();t&&(this.baselineUsedMB=t.usedMB),this.intervalId=setInterval(()=>{this.takeSnapshot()},e),console.log("[Memory] Monitoring started. Use memory.report() to see analysis.")}stopMonitoring(){this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null,console.log("[Memory] Monitoring stopped."))}takeSnapshot(){const e=this.getUsage();if(!e)return;const t={timestamp:Date.now(),heapUsedMB:e.usedMB,heapTotalMB:e.totalMB,heapLimitMB:e.limitMB};this.snapshots.push(t),this.snapshots.length>this.maxSnapshots&&this.snapshots.shift();const n=e.usedMB-this.baselineUsedMB;n>this.leakThresholdMB&&console.warn(`[Memory] Warning: Heap grew by ${n}MB since monitoring started (baseline: ${this.baselineUsedMB}MB, current: ${e.usedMB}MB)`)}getGrowthRate(){if(this.snapshots.length<10)return null;const e=this.snapshots[0],t=this.snapshots[this.snapshots.length-1],n=(t.timestamp-e.timestamp)/1e3/60;return n<.1?null:(t.heapUsedMB-e.heapUsedMB)/n}report(){const e=this.getUsage();if(!e){console.log("[Memory] Memory API not available (Chrome only)");return}console.group("%c[Memory Report]","color: #ff6600; font-weight: bold"),console.log(`Current: ${e.usedMB}MB / ${e.totalMB}MB (limit: ${e.limitMB}MB)`),console.log(`Baseline: ${this.baselineUsedMB}MB`),console.log(`Growth: ${e.usedMB-this.baselineUsedMB}MB since monitoring started`);const t=this.getGrowthRate();if(t!==null&&(console.log(`Growth Rate: ${t.toFixed(2)}MB/min`),t>5&&console.warn("POTENTIAL MEMORY LEAK: Growth rate exceeds 5MB/min")),this.snapshots.length>1){const n=Math.min(...this.snapshots.map(i=>i.heapUsedMB)),a=Math.max(...this.snapshots.map(i=>i.heapUsedMB));console.log(`Range: ${n}MB - ${a}MB (${a-n}MB variance)`)}console.groupEnd()}getThreeJsInfo(e){var t;return(t=e==null?void 0:e.info)!=null&&t.memory?{geometries:e.info.memory.geometries,textures:e.info.memory.textures}:null}reset(){this.snapshots=[];const e=this.getUsage();e&&(this.baselineUsedMB=e.usedMB),console.log("[Memory] Reset. New baseline:",this.baselineUsedMB,"MB")}}const nc=new nO;function Gu(s,e,t,n,a,i){}function MM(s,e){y.useRef(0),y.useEffect(()=>{},[s,5e3,!0])}if(typeof window<"u"){setInterval(()=>{try{performance.clearMarks(),performance.clearMeasures(),performance.clearResourceTimings()}catch{}},6e4);try{performance.setResourceTimingBufferSize(0)}catch{}}function TM(s){if(s.payload&&typeof s.payload=="object"){const e=s.payload;if(e.agentId)return e.agentId;if(e.parentAgentId)return e.parentAgentId;if(e.bossId)return e.bossId;if(e.id)return e.id}return null}function Ox(s){var t,n,a,i,o,l;const e=Rx();if(!e){(t=Mj())==null||t(),(n=We.onToast)==null||n.call(We,"error","Not Connected","Connecting to server... Please try again in a moment.");return}if(e.readyState!==WebSocket.OPEN){e.readyState===WebSocket.CONNECTING?(a=We.onToast)==null||a.call(We,"warning","Connecting...","WebSocket is still connecting. Please wait a moment and try again."):(e.readyState===WebSocket.CLOSED||e.readyState===WebSocket.CLOSING)&&((i=Mj())==null||i(),(o=We.onToast)==null||o.call(We,"warning","Reconnecting...","Connection lost. Reconnecting to server..."));return}try{const c=JSON.stringify(s),d=TM(s);console.log("[AgentDebugger] SENT - type:",s.type,"agentId:",d,"payload:",s.payload),d&&Xs.captureSent(d,c),e.send(c)}catch(c){(l=We.onToast)==null||l.call(We,"error","Send Failed",`Failed to send message: ${c}`)}}const Wu=new Set,sO=5e3;function Tj(s){if(!s.isDetached||!s.sessionId){Wu.delete(s.id);return}Wu.has(s.id)||(Wu.add(s.id),Ox({type:"reattach_agent",payload:{agentId:s.id}}),setTimeout(()=>{Wu.delete(s.id)},sO))}function aO(s){var e,t,n,a,i,o,l,c,d,f,p,m,b,x,w,k,S,j,C,N,_,D,L;switch(Py.start(`ws:${s.type}`),s.type){case"agents_update":{const M=s.payload,P=M.filter(E=>E.class==="boss"||E.isBoss);P.length>0&&console.log("[WS agents_update] Boss agents received:",P.map(E=>({id:E.id,name:E.name,subordinateIds:E.subordinateIds}))),z.setAgents(M),(e=We.onAgentsSync)==null||e.call(We,M),z.loadToolHistory();for(const E of M)Tj(E);break}case"agent_created":{const M=s.payload;console.log("[WebSocket] Agent created:",M),z.addAgent(M),z.selectAgent(M.id),(t=We.onAgentCreated)==null||t.call(We,M),(n=We.onSpawnSuccess)==null||n.call(We),window.__spawnModalSuccess&&(console.log("[WebSocket] Calling __spawnModalSuccess"),window.__spawnModalSuccess()),(a=We.onToast)==null||a.call(We,"success","Agent Deployed",`${M.name} is ready for commands`);break}case"agent_updated":{const M=s.payload,E=z.getState().agents.get(M.id),R=(E==null?void 0:E.status)!==M.status;console.log(`[Tide] Agent updated: ${M.name} (${M.id}) status=${M.status} (was ${E==null?void 0:E.status})${R?" ⚡ STATUS CHANGED":""}`),R&&console.log(`[Tide] 🔔 Status change for ${M.name}: ${E==null?void 0:E.status} → ${M.status}`),R&&(E==null?void 0:E.status)==="working"&&M.status==="idle"&&z.triggerHistoryRefresh(M.id);const I=E?E.position.x!==M.position.x||E.position.z!==M.position.z:!1;z.updateAgent(M),Tj(M),(i=We.onAgentUpdated)==null||i.call(We,M,I);break}case"agent_deleted":{const{id:M}=s.payload;Wu.delete(M),z.removeAgent(M),(o=We.onAgentDeleted)==null||o.call(We,M);break}case"activity":{const M=s.payload;z.addActivity(M);break}case"event":{const M=s.payload;if(pd.debug(`Event: ${M.type}`,{agentId:M.agentId,toolName:M.toolName},"ws:event"),M.type==="tool_start"&&M.toolName&&((l=We.onToolUse)==null||l.call(We,M.agentId,M.toolName,M.toolInput),z.addToolExecution(M.agentId,M.toolName,M.toolInput),M.toolInput)){const P=M.toolInput.file_path||M.toolInput.path;P&&(M.toolName==="Write"?z.addFileChange(M.agentId,"created",P):M.toolName==="Edit"?z.addFileChange(M.agentId,"modified",P):M.toolName==="Read"&&z.addFileChange(M.agentId,"read",P))}break}case"output":{const M=s.payload;pd.debug(`Output: "${M.text.slice(0,80)}..."`,{agentId:M.agentId,isStreaming:M.isStreaming,length:M.text.length,hasSkillUpdate:!!M.skillUpdate,uuid:M.uuid,toolName:M.toolName},"ws:output"),z.addOutput(M.agentId,{text:M.text,isStreaming:M.isStreaming,timestamp:M.timestamp,isDelegation:M.isDelegation,skillUpdate:M.skillUpdate,subagentName:M.subagentName,uuid:M.uuid,toolName:M.toolName,toolInput:M.toolInput,toolOutput:M.toolOutput});break}case"context_stats":{const{agentId:M,stats:P}=s.payload;console.log(`[Tide] Received context stats for agent ${M}: ${P.usedPercent}% used`),z.updateAgentContextStats(M,P);break}case"context_update":{const{agentId:M,contextUsed:P,contextLimit:E}=s.payload;z.updateAgentContext(M,P,E);break}case"error":{const M=s.payload;console.error("[WebSocket] Error from server:",M.message),(c=We.onToast)==null||c.call(We,"error","Error",M.message),(d=We.onSpawnError)==null||d.call(We),window.__spawnModalError&&(console.log("[WebSocket] Calling __spawnModalError"),window.__spawnModalError());break}case"directory_not_found":{const{path:M}=s.payload;console.log("[WebSocket] Directory not found:",M),(f=We.onDirectoryNotFound)==null||f.call(We,M),window.__spawnModalDirNotFound&&(console.log("[WebSocket] Calling __spawnModalDirNotFound"),window.__spawnModalDirNotFound(M));break}case"command_started":{const{agentId:M,command:P}=s.payload,E=P.trim();if(E==="/context"||E==="/cost"||E==="/compact")break;z.addUserPromptToOutput(M,P);break}case"session_updated":{const{agentId:M}=s.payload;z.loadToolHistory(),z.triggerHistoryRefresh(M);const P=z.getState().agents.get(M);P&&z.updateAgent({...P});break}case"supervisor_report":{const M=s.payload;z.setSupervisorReport(M);break}case"narrative_update":{const{agentId:M,narrative:P}=s.payload;z.addNarrative(M,P);break}case"supervisor_status":{const M=s.payload;z.setSupervisorStatus(M);break}case"agent_supervisor_history":{const M=s.payload;z.setAgentSupervisorHistory(M);break}case"agent_analysis":{const{agentId:M,analysis:P}=s.payload;z.addAgentAnalysis(M,P);break}case"areas_update":{const M=s.payload;z.setAreasFromServer(M),(p=We.onAreasSync)==null||p.call(We);break}case"buildings_update":{const M=s.payload;z.setBuildingsFromServer(M);break}case"building_created":{const M=s.payload;z.addBuilding(M);break}case"building_updated":{const M=s.payload;z.updateBuildingFromServer(M),(m=We.onBuildingUpdated)==null||m.call(We,M);break}case"building_deleted":{const{id:M}=s.payload;z.removeBuildingFromServer(M);break}case"building_logs":{const{buildingId:M,logs:P}=s.payload;z.addBuildingLogs(M,P);break}case"pm2_logs_chunk":{const{buildingId:M,chunk:P}=s.payload;z.appendStreamingLogChunk(M,P);break}case"pm2_logs_streaming":{const{buildingId:M,streaming:P}=s.payload;z.setStreamingStatus(M,P);break}case"docker_logs_chunk":{const{buildingId:M,chunk:P}=s.payload;z.appendStreamingLogChunk(M,P);break}case"docker_logs_streaming":{const{buildingId:M,streaming:P}=s.payload;z.setStreamingStatus(M,P);break}case"docker_containers_list":{const{containers:M,composeProjects:P}=s.payload;console.log(`[WebSocket] Received ${M.length} containers, ${P.length} compose projects`),z.setDockerContainersList(M,P);break}case"boss_building_logs_chunk":{const{bossBuildingId:M,subordinateBuildingId:P,subordinateBuildingName:E,chunk:R,isError:I}=s.payload;z.appendBossStreamingLogChunk(M,P,E,R,I);break}case"boss_building_subordinates_updated":{const{bossBuildingId:M,subordinateBuildingIds:P}=s.payload;z.updateBuilding(M,{subordinateBuildingIds:P});break}case"permission_request":{const M=s.payload;z.addPermissionRequest(M);break}case"permission_resolved":{const{requestId:M,approved:P}=s.payload;z.resolvePermissionRequest(M,P);break}case"delegation_decision":{const M=s.payload;z.handleDelegationDecision(M),M.status==="sent"&&((b=We.onToast)==null||b.call(We,"info","Task Delegated",`Delegated to ${M.selectedAgentName}: ${M.reasoning.slice(0,80)}...`),M.bossId&&M.selectedAgentId&&((x=We.onDelegation)==null||x.call(We,M.bossId,M.selectedAgentId)));break}case"boss_subordinates_updated":{const{bossId:M,subordinateIds:P}=s.payload;z.updateBossSubordinates(M,P);break}case"delegation_history":{const{bossId:M,decisions:P}=s.payload;z.setDelegationHistory(M,P);break}case"boss_spawned_agent":{const{agent:M,bossPosition:P}=s.payload;console.log("[WebSocket] Boss spawned agent:",M.name,"- walking to boss at",P),z.addAgent(M),(w=We.onAgentCreated)==null||w.call(We,M),Ox({type:"move_agent",payload:{agentId:M.id,position:P}}),(k=We.onToast)==null||k.call(We,"success","Agent Deployed",`${M.name} spawned by boss, walking to position`);break}case"agent_task_started":{const{bossId:M,subordinateId:P,subordinateName:E,taskDescription:R}=s.payload;console.log(`[WebSocket] Agent ${E} started task for boss ${M}: ${R.slice(0,50)}...`),z.handleAgentTaskStarted(M,P,E,R);break}case"agent_task_output":{const{bossId:M,subordinateId:P,output:E}=s.payload;z.handleAgentTaskOutput(M,P,E);break}case"agent_task_completed":{const{bossId:M,subordinateId:P,success:E}=s.payload;console.log(`[WebSocket] Agent task completed for boss ${M}, subordinate ${P}, success: ${E}`),z.handleAgentTaskCompleted(M,P,E);break}case"skills_update":{const M=s.payload;z.setSkillsFromServer(M);break}case"skill_created":{const M=s.payload;z.addSkillFromServer(M),console.log(`[WebSocket] Skill created: ${M.name}`);break}case"skill_updated":{const M=s.payload;z.updateSkillFromServer(M),console.log(`[WebSocket] Skill updated: ${M.name}`);break}case"skill_deleted":{const{id:M}=s.payload;z.removeSkillFromServer(M),console.log(`[WebSocket] Skill deleted: ${M}`);break}case"agent_skills":{const{agentId:M,skills:P}=s.payload;console.log(`[WebSocket] Agent ${M} has ${P.length} skills`);break}case"custom_agent_classes_update":{const M=s.payload;z.setCustomAgentClassesFromServer(M),console.log(`[WebSocket] Received ${M.length} custom agent classes`);const P=new Map;for(const E of M)P.set(E.id,E);(S=We.onCustomClassesSync)==null||S.call(We,P);break}case"custom_agent_class_created":{const M=s.payload;z.addCustomAgentClassFromServer(M),console.log(`[WebSocket] Custom agent class created: ${M.name}`),(j=We.onCustomClassesSync)==null||j.call(We,z.getState().customAgentClasses);break}case"custom_agent_class_updated":{const M=s.payload;z.updateCustomAgentClassFromServer(M),console.log(`[WebSocket] Custom agent class updated: ${M.name}`),(C=We.onCustomClassesSync)==null||C.call(We,z.getState().customAgentClasses);break}case"custom_agent_class_deleted":{const{id:M}=s.payload;z.removeCustomAgentClassFromServer(M),console.log(`[WebSocket] Custom agent class deleted: ${M}`),(N=We.onCustomClassesSync)==null||N.call(We,z.getState().customAgentClasses);break}case"global_usage":{const M=s.payload;console.log("[WebSocket] Global usage update:",M),z.setGlobalUsage(M);break}case"agent_notification":{const M=s.payload;console.log(`[WebSocket] Agent notification from ${M.agentName}: ${M.title}`),(_=We.onAgentNotification)==null||_.call(We,M);break}case"focus_agent":{const{agentId:M,openTerminal:P}=s.payload;if(!z.getState().agents.get(M)){console.warn(`[WebSocket] focus_agent ignored - agent not found: ${M}`);break}z.selectAgent(M),P&&z.setTerminalOpen(!0);const R=[0,80,220,500,1e3];for(const I of R)window.setTimeout(()=>{window.focus()},I);break}case"exec_task_started":{const{taskId:M,agentId:P,agentName:E,command:R,cwd:I}=s.payload;console.log(`[WebSocket] Exec task started: ${M} for agent ${E}: ${R.slice(0,50)}...`),z.handleExecTaskStarted(M,P,E,R,I);break}case"exec_task_output":{const{taskId:M,agentId:P,output:E,isError:R}=s.payload;z.handleExecTaskOutput(M,P,E,R);break}case"exec_task_completed":{const{taskId:M,agentId:P,exitCode:E,success:R}=s.payload;console.log(`[WebSocket] Exec task completed: ${M} for agent ${P}, success: ${R}`),z.handleExecTaskCompleted(M,P,E,R);break}case"subagent_started":{const M=s.payload;console.log(`[WebSocket] Subagent started: ${M.name} (${M.id}) for agent ${M.parentAgentId}`),z.addSubagent(M),(D=We.onSubagentStarted)==null||D.call(We,M);break}case"subagent_output":{const{subagentId:M,parentAgentId:P,text:E,timestamp:R}=s.payload,I=E.indexOf(":");if(I>0){const O=E.slice(0,I).trim(),B=E.slice(I+1).trim();z.addSubagentActivity(M,P,{toolName:O,description:B,timestamp:R})}else E.startsWith("Using ")&&z.addSubagentActivity(M,P,{toolName:E.slice(6).trim(),description:"",timestamp:R});break}case"subagent_completed":{const{subagentId:M,parentAgentId:P,success:E,resultPreview:R,subagentName:I,durationMs:O,tokensUsed:B,toolUseCount:q}=s.payload;console.log(`[WebSocket] Subagent completed: ${M} for agent ${P}, success: ${E}`),(O||B||q)&&z.updateSubagentStats(M,P,{durationMs:O||0,tokensUsed:B||0,toolUseCount:q||0}),z.completeSubagent(M,P,E),(L=We.onSubagentCompleted)==null||L.call(We,M);const H=z.getSubagent(M)||z.getSubagentByToolUseId(M),G=I||(H==null?void 0:H.name)||M,K=E?"✅":"❌",X=O?` (${(O/1e3).toFixed(0)}s · ${((B||0)/1e3).toFixed(1)}K tokens · ${q||0} tools)`:"";z.addOutput(P,{text:`${K} Subagent ${G} ${E?"completed":"failed"}${X}`,isStreaming:!1,timestamp:Date.now(),subagentName:G,toolOutput:R});break}case"subagent_stream":{const{toolUseId:M,parentAgentId:P,entries:E}=s.payload;z.addSubagentStreamEntries(M,P,E);break}case"secrets_update":{const M=s.payload;z.setSecretsFromServer(M),console.log(`[WebSocket] Received ${M.length} secrets`);break}case"secret_created":{const M=s.payload;z.addSecretFromServer(M),console.log(`[WebSocket] Secret created: ${M.name}`);break}case"secret_updated":{const M=s.payload;z.updateSecretFromServer(M),console.log(`[WebSocket] Secret updated: ${M.name}`);break}case"secret_deleted":{const{id:M}=s.payload;z.removeSecretFromServer(M),console.log(`[WebSocket] Secret deleted: ${M}`);break}case"database_connection_result":{const{buildingId:M,connectionId:P,success:E,error:R,serverVersion:I}=s.payload;z.setConnectionStatus(M,P,{connected:E,error:R,serverVersion:I}),console.log(`[WebSocket] Database connection ${E?"succeeded":"failed"}: ${P}`);break}case"databases_list":{const{buildingId:M,connectionId:P,databases:E}=s.payload;z.setDatabases(M,P,E),console.log(`[WebSocket] Received ${E.length} databases for ${P}`);break}case"tables_list":{const{buildingId:M,connectionId:P,database:E,tables:R}=s.payload;z.setTables(M,P,E,R),console.log(`[WebSocket] Received ${R.length} tables for ${E}`);break}case"table_schema":{const{buildingId:M,connectionId:P,database:E,table:R,columns:I,indexes:O,foreignKeys:B}=s.payload;z.setTableSchema(M,P,E,R,{columns:I,indexes:O||[],foreignKeys:B||[]}),console.log(`[WebSocket] Received schema for ${R}`);break}case"query_result":{const{buildingId:M,result:P}=s.payload;z.setQueryResult(M,P),console.log(`[WebSocket] Query ${P.status}: ${P.rowCount??P.affectedRows??0} rows in ${P.duration}ms`);break}case"silent_query_result":{const{buildingId:M,query:P,requestId:E,success:R,affectedRows:I,error:O}=s.payload;z.setSilentQueryResult(M,{query:P,requestId:E,success:R,affectedRows:I,error:O}),console.log(`[WebSocket] Silent query ${R?"succeeded":"failed"}: ${I??0} affected rows`);break}case"query_history_update":{const{buildingId:M,history:P}=s.payload;z.setQueryHistory(M,P),console.log(`[WebSocket] Received ${P.length} query history entries for ${M}`);break}}Py.end(`ws:${s.type}`)}ZL(()=>fd());let Ej=!1;function EM(){const s=Rx();s&&s.readyState===WebSocket.OPEN&&s.close(1e3,"Page unloading");const e=jM();e&&clearTimeout(e),window.__tideWsState&&(window.__tideWsState.ws=null,window.__tideWsState.reconnectTimeout=null,window.__tideWsState.isConnecting=!1,window.__tideWsState.reconnectAttempts=0),XL()}function iO(){Ej||(window.addEventListener("beforeunload",EM),Ej=!0)}function _M(){EM(),z.setConnected(!1),z.stopStatusPolling()}function jp(){_M(),Dy(0),setTimeout(()=>fd(),100)}function fd(){iO();const s=jM();s&&(clearTimeout(s),CM(null));const e=Rx();if(VL()||e&&e.readyState===WebSocket.CONNECTING)return;if(e&&e.readyState===WebSocket.OPEN){Aj()&&We.onReconnect&&We.onReconnect();return}Dy(_y()+1),Mu(!0);const t=Cf(),n=Ha(),a=6200;let i;if(t){const l=t.replace(/^https:\/\//,"wss://").replace(/^http:\/\//,"ws://");i=l.endsWith("/ws")?l:`${l.replace(/\/$/,"")}/ws`}else i=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/ws`;let o=null;try{n?o=new WebSocket(i,[`auth-${n}`]):o=new WebSocket(i)}catch{Mu(!1),_j();return}Cj(o),o.onopen=()=>{var c,d,f;const l=Aj();Mu(!1),Dy(0),KL(),z.setConnected(!0),z.startStatusPolling(),z.clearAllPermissions(),l?((c=We.onToast)==null||c.call(We,"success","Reconnected","Connection restored - refreshing data..."),(d=We.onReconnect)==null||d.call(We)):(f=We.onToast)==null||f.call(We,"success","Connected","Connected to Tide Commander server"),YL(t,n)},o.onmessage=l=>{try{const c=JSON.parse(l.data),d=TM(c);console.log("[AgentDebugger] RECEIVED - type:",c.type,"agentId:",d,"payload:",c.payload),d&&Xs.captureReceived(d,l.data),aO(c)}catch(c){const d=l.data.substring(0,200);console.error("[WS] Failed to parse message:",c),console.error("[WS] Raw data (first 200 chars):",d),console.error("[WS] Full data length:",l.data.length),l.data.length<5e3&&console.error("[WS] Full malformed message:",l.data)}},o.onclose=()=>{var c,d;Mu(!1),Cj(null),z.setConnected(!1),z.stopStatusPolling();const l=_y();l<Nj?((c=We.onToast)==null||c.call(We,"warning","Disconnected",`Connection lost. Reconnecting... (attempt ${l+1}/${Nj})`),_j()):(d=We.onToast)==null||d.call(We,"error","Connection Failed",`Could not connect to server. Please check if the backend is running on port ${a}.`)},o.onerror=()=>{Mu(!1)},z.setSendMessage(Ox)}function _j(){const s=_y(),e=Math.min(1e3*Math.pow(2,s-1),3e4);CM(setTimeout(fd,e))}function Dj(s,e){if(e===dP)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),s;if(e===py||e===WA){let t=s.getIndex();if(t===null){const o=[],l=s.getAttribute("position");if(l!==void 0){for(let c=0;c<l.count;c++)o.push(c);s.setIndex(o),t=s.getIndex()}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),s}const n=t.count-2,a=[];if(e===py)for(let o=1;o<=n;o++)a.push(t.getX(0)),a.push(t.getX(o)),a.push(t.getX(o+1));else for(let o=0;o<n;o++)o%2===0?(a.push(t.getX(o)),a.push(t.getX(o+1)),a.push(t.getX(o+2))):(a.push(t.getX(o+2)),a.push(t.getX(o+1)),a.push(t.getX(o)));a.length/3!==n&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const i=s.clone();return i.setIndex(a),i.clearGroups(),i}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",e),s}class Ix extends qA{constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(t){return new uO(t)}),this.register(function(t){return new dO(t)}),this.register(function(t){return new vO(t)}),this.register(function(t){return new wO(t)}),this.register(function(t){return new kO(t)}),this.register(function(t){return new pO(t)}),this.register(function(t){return new fO(t)}),this.register(function(t){return new mO(t)}),this.register(function(t){return new gO(t)}),this.register(function(t){return new cO(t)}),this.register(function(t){return new bO(t)}),this.register(function(t){return new hO(t)}),this.register(function(t){return new xO(t)}),this.register(function(t){return new yO(t)}),this.register(function(t){return new oO(t)}),this.register(function(t){return new SO(t)}),this.register(function(t){return new jO(t)})}load(e,t,n,a){const i=this;let o;if(this.resourcePath!=="")o=this.resourcePath;else if(this.path!==""){const d=Ku.extractUrlBase(e);o=Ku.resolveURL(d,this.path)}else o=Ku.extractUrlBase(e);this.manager.itemStart(e);const l=function(d){a?a(d):console.error(d),i.manager.itemError(e),i.manager.itemEnd(e)},c=new Rp(this.manager);c.setPath(this.path),c.setResponseType("arraybuffer"),c.setRequestHeader(this.requestHeader),c.setWithCredentials(this.withCredentials),c.load(e,function(d){try{i.parse(d,o,function(f){t(f),i.manager.itemEnd(e)},l)}catch(f){l(f)}},n,l)}setDRACOLoader(e){return this.dracoLoader=e,this}setKTX2Loader(e){return this.ktx2Loader=e,this}setMeshoptDecoder(e){return this.meshoptDecoder=e,this}register(e){return this.pluginCallbacks.indexOf(e)===-1&&this.pluginCallbacks.push(e),this}unregister(e){return this.pluginCallbacks.indexOf(e)!==-1&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e),1),this}parse(e,t,n,a){let i;const o={},l={},c=new TextDecoder;if(typeof e=="string")i=JSON.parse(e);else if(e instanceof ArrayBuffer)if(c.decode(new Uint8Array(e,0,4))===DM){try{o[en.KHR_BINARY_GLTF]=new CO(e)}catch(p){a&&a(p);return}i=JSON.parse(o[en.KHR_BINARY_GLTF].content)}else i=JSON.parse(c.decode(e));else i=e;if(i.asset===void 0||i.asset.version[0]<2){a&&a(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."));return}const d=new BO(i,{path:t||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});d.fileLoader.setRequestHeader(this.requestHeader);for(let f=0;f<this.pluginCallbacks.length;f++){const p=this.pluginCallbacks[f](d);p.name||console.error("THREE.GLTFLoader: Invalid plugin found: missing name"),l[p.name]=p,o[p.name]=!0}if(i.extensionsUsed)for(let f=0;f<i.extensionsUsed.length;++f){const p=i.extensionsUsed[f],m=i.extensionsRequired||[];switch(p){case en.KHR_MATERIALS_UNLIT:o[p]=new lO;break;case en.KHR_DRACO_MESH_COMPRESSION:o[p]=new NO(i,this.dracoLoader);break;case en.KHR_TEXTURE_TRANSFORM:o[p]=new AO;break;case en.KHR_MESH_QUANTIZATION:o[p]=new MO;break;default:m.indexOf(p)>=0&&l[p]===void 0&&console.warn('THREE.GLTFLoader: Unknown extension "'+p+'".')}}d.setExtensions(o),d.setPlugins(l),d.parse(n,a)}parseAsync(e,t){const n=this;return new Promise(function(a,i){n.parse(e,t,a,i)})}}function rO(){let s={};return{get:function(e){return s[e]},add:function(e,t){s[e]=t},remove:function(e){delete s[e]},removeAll:function(){s={}}}}const en={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_DISPERSION:"KHR_materials_dispersion",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_MATERIALS_BUMP:"EXT_materials_bump",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};class oO{constructor(e){this.parser=e,this.name=en.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const e=this.parser,t=this.parser.json.nodes||[];for(let n=0,a=t.length;n<a;n++){const i=t[n];i.extensions&&i.extensions[this.name]&&i.extensions[this.name].light!==void 0&&e._addNodeRef(this.cache,i.extensions[this.name].light)}}_loadLight(e){const t=this.parser,n="light:"+e;let a=t.cache.get(n);if(a)return a;const i=t.json,c=((i.extensions&&i.extensions[this.name]||{}).lights||[])[e];let d;const f=new Ut(16777215);c.color!==void 0&&f.setRGB(c.color[0],c.color[1],c.color[2],Gi);const p=c.range!==void 0?c.range:0;switch(c.type){case"directional":d=new uc(f),d.target.position.set(0,0,-1),d.add(d.target);break;case"point":d=new YA(f),d.distance=p;break;case"spot":d=new hP(f),d.distance=p,c.spot=c.spot||{},c.spot.innerConeAngle=c.spot.innerConeAngle!==void 0?c.spot.innerConeAngle:0,c.spot.outerConeAngle=c.spot.outerConeAngle!==void 0?c.spot.outerConeAngle:Math.PI/4,d.angle=c.spot.outerConeAngle,d.penumbra=1-c.spot.innerConeAngle/c.spot.outerConeAngle,d.target.position.set(0,0,-1),d.add(d.target);break;default:throw new Error("THREE.GLTFLoader: Unexpected light type: "+c.type)}return d.position.set(0,0,0),d.decay=2,br(d,c),c.intensity!==void 0&&(d.intensity=c.intensity),d.name=t.createUniqueName(c.name||"light_"+e),a=Promise.resolve(d),t.cache.add(n,a),a}getDependency(e,t){if(e==="light")return this._loadLight(t)}createNodeAttachment(e){const t=this,n=this.parser,i=n.json.nodes[e],l=(i.extensions&&i.extensions[this.name]||{}).light;return l===void 0?null:this._loadLight(l).then(function(c){return n._getNodeRef(t.cache,l,c)})}}class lO{constructor(){this.name=en.KHR_MATERIALS_UNLIT}getMaterialType(){return Ke}extendParams(e,t,n){const a=[];e.color=new Ut(1,1,1),e.opacity=1;const i=t.pbrMetallicRoughness;if(i){if(Array.isArray(i.baseColorFactor)){const o=i.baseColorFactor;e.color.setRGB(o[0],o[1],o[2],Gi),e.opacity=o[3]}i.baseColorTexture!==void 0&&a.push(n.assignTexture(e,"map",i.baseColorTexture,mi))}return Promise.all(a)}}class cO{constructor(e){this.parser=e,this.name=en.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(e,t){const a=this.parser.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const i=a.extensions[this.name].emissiveStrength;return i!==void 0&&(t.emissiveIntensity=i),Promise.resolve()}}class uO{constructor(e){this.parser=e,this.name=en.KHR_MATERIALS_CLEARCOAT}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qi}extendMaterialParams(e,t){const n=this.parser,a=n.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const i=[],o=a.extensions[this.name];if(o.clearcoatFactor!==void 0&&(t.clearcoat=o.clearcoatFactor),o.clearcoatTexture!==void 0&&i.push(n.assignTexture(t,"clearcoatMap",o.clearcoatTexture)),o.clearcoatRoughnessFactor!==void 0&&(t.clearcoatRoughness=o.clearcoatRoughnessFactor),o.clearcoatRoughnessTexture!==void 0&&i.push(n.assignTexture(t,"clearcoatRoughnessMap",o.clearcoatRoughnessTexture)),o.clearcoatNormalTexture!==void 0&&(i.push(n.assignTexture(t,"clearcoatNormalMap",o.clearcoatNormalTexture)),o.clearcoatNormalTexture.scale!==void 0)){const l=o.clearcoatNormalTexture.scale;t.clearcoatNormalScale=new Ys(l,l)}return Promise.all(i)}}class dO{constructor(e){this.parser=e,this.name=en.KHR_MATERIALS_DISPERSION}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qi}extendMaterialParams(e,t){const a=this.parser.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const i=a.extensions[this.name];return t.dispersion=i.dispersion!==void 0?i.dispersion:0,Promise.resolve()}}class hO{constructor(e){this.parser=e,this.name=en.KHR_MATERIALS_IRIDESCENCE}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qi}extendMaterialParams(e,t){const n=this.parser,a=n.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const i=[],o=a.extensions[this.name];return o.iridescenceFactor!==void 0&&(t.iridescence=o.iridescenceFactor),o.iridescenceTexture!==void 0&&i.push(n.assignTexture(t,"iridescenceMap",o.iridescenceTexture)),o.iridescenceIor!==void 0&&(t.iridescenceIOR=o.iridescenceIor),t.iridescenceThicknessRange===void 0&&(t.iridescenceThicknessRange=[100,400]),o.iridescenceThicknessMinimum!==void 0&&(t.iridescenceThicknessRange[0]=o.iridescenceThicknessMinimum),o.iridescenceThicknessMaximum!==void 0&&(t.iridescenceThicknessRange[1]=o.iridescenceThicknessMaximum),o.iridescenceThicknessTexture!==void 0&&i.push(n.assignTexture(t,"iridescenceThicknessMap",o.iridescenceThicknessTexture)),Promise.all(i)}}class pO{constructor(e){this.parser=e,this.name=en.KHR_MATERIALS_SHEEN}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qi}extendMaterialParams(e,t){const n=this.parser,a=n.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const i=[];t.sheenColor=new Ut(0,0,0),t.sheenRoughness=0,t.sheen=1;const o=a.extensions[this.name];if(o.sheenColorFactor!==void 0){const l=o.sheenColorFactor;t.sheenColor.setRGB(l[0],l[1],l[2],Gi)}return o.sheenRoughnessFactor!==void 0&&(t.sheenRoughness=o.sheenRoughnessFactor),o.sheenColorTexture!==void 0&&i.push(n.assignTexture(t,"sheenColorMap",o.sheenColorTexture,mi)),o.sheenRoughnessTexture!==void 0&&i.push(n.assignTexture(t,"sheenRoughnessMap",o.sheenRoughnessTexture)),Promise.all(i)}}class fO{constructor(e){this.parser=e,this.name=en.KHR_MATERIALS_TRANSMISSION}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qi}extendMaterialParams(e,t){const n=this.parser,a=n.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const i=[],o=a.extensions[this.name];return o.transmissionFactor!==void 0&&(t.transmission=o.transmissionFactor),o.transmissionTexture!==void 0&&i.push(n.assignTexture(t,"transmissionMap",o.transmissionTexture)),Promise.all(i)}}class mO{constructor(e){this.parser=e,this.name=en.KHR_MATERIALS_VOLUME}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qi}extendMaterialParams(e,t){const n=this.parser,a=n.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const i=[],o=a.extensions[this.name];t.thickness=o.thicknessFactor!==void 0?o.thicknessFactor:0,o.thicknessTexture!==void 0&&i.push(n.assignTexture(t,"thicknessMap",o.thicknessTexture)),t.attenuationDistance=o.attenuationDistance||1/0;const l=o.attenuationColor||[1,1,1];return t.attenuationColor=new Ut().setRGB(l[0],l[1],l[2],Gi),Promise.all(i)}}class gO{constructor(e){this.parser=e,this.name=en.KHR_MATERIALS_IOR}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qi}extendMaterialParams(e,t){const a=this.parser.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const i=a.extensions[this.name];return t.ior=i.ior!==void 0?i.ior:1.5,Promise.resolve()}}class bO{constructor(e){this.parser=e,this.name=en.KHR_MATERIALS_SPECULAR}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qi}extendMaterialParams(e,t){const n=this.parser,a=n.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const i=[],o=a.extensions[this.name];t.specularIntensity=o.specularFactor!==void 0?o.specularFactor:1,o.specularTexture!==void 0&&i.push(n.assignTexture(t,"specularIntensityMap",o.specularTexture));const l=o.specularColorFactor||[1,1,1];return t.specularColor=new Ut().setRGB(l[0],l[1],l[2],Gi),o.specularColorTexture!==void 0&&i.push(n.assignTexture(t,"specularColorMap",o.specularColorTexture,mi)),Promise.all(i)}}class yO{constructor(e){this.parser=e,this.name=en.EXT_MATERIALS_BUMP}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qi}extendMaterialParams(e,t){const n=this.parser,a=n.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const i=[],o=a.extensions[this.name];return t.bumpScale=o.bumpFactor!==void 0?o.bumpFactor:1,o.bumpTexture!==void 0&&i.push(n.assignTexture(t,"bumpMap",o.bumpTexture)),Promise.all(i)}}class xO{constructor(e){this.parser=e,this.name=en.KHR_MATERIALS_ANISOTROPY}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qi}extendMaterialParams(e,t){const n=this.parser,a=n.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const i=[],o=a.extensions[this.name];return o.anisotropyStrength!==void 0&&(t.anisotropy=o.anisotropyStrength),o.anisotropyRotation!==void 0&&(t.anisotropyRotation=o.anisotropyRotation),o.anisotropyTexture!==void 0&&i.push(n.assignTexture(t,"anisotropyMap",o.anisotropyTexture)),Promise.all(i)}}class vO{constructor(e){this.parser=e,this.name=en.KHR_TEXTURE_BASISU}loadTexture(e){const t=this.parser,n=t.json,a=n.textures[e];if(!a.extensions||!a.extensions[this.name])return null;const i=a.extensions[this.name],o=t.options.ktx2Loader;if(!o){if(n.extensionsRequired&&n.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return t.loadTextureImage(e,i.source,o)}}class wO{constructor(e){this.parser=e,this.name=en.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(e){const t=this.name,n=this.parser,a=n.json,i=a.textures[e];if(!i.extensions||!i.extensions[t])return null;const o=i.extensions[t],l=a.images[o.source];let c=n.textureLoader;if(l.uri){const d=n.options.manager.getHandler(l.uri);d!==null&&(c=d)}return this.detectSupport().then(function(d){if(d)return n.loadTextureImage(e,o.source,c);if(a.extensionsRequired&&a.extensionsRequired.indexOf(t)>=0)throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return n.loadTexture(e)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(e){const t=new Image;t.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",t.onload=t.onerror=function(){e(t.height===1)}})),this.isSupported}}class kO{constructor(e){this.parser=e,this.name=en.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(e){const t=this.name,n=this.parser,a=n.json,i=a.textures[e];if(!i.extensions||!i.extensions[t])return null;const o=i.extensions[t],l=a.images[o.source];let c=n.textureLoader;if(l.uri){const d=n.options.manager.getHandler(l.uri);d!==null&&(c=d)}return this.detectSupport().then(function(d){if(d)return n.loadTextureImage(e,o.source,c);if(a.extensionsRequired&&a.extensionsRequired.indexOf(t)>=0)throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");return n.loadTexture(e)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(e){const t=new Image;t.src="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=",t.onload=t.onerror=function(){e(t.height===1)}})),this.isSupported}}class SO{constructor(e){this.name=en.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){const t=this.parser.json,n=t.bufferViews[e];if(n.extensions&&n.extensions[this.name]){const a=n.extensions[this.name],i=this.parser.getDependency("buffer",a.buffer),o=this.parser.options.meshoptDecoder;if(!o||!o.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return i.then(function(l){const c=a.byteOffset||0,d=a.byteLength||0,f=a.count,p=a.byteStride,m=new Uint8Array(l,c,d);return o.decodeGltfBufferAsync?o.decodeGltfBufferAsync(f,p,m,a.mode,a.filter).then(function(b){return b.buffer}):o.ready.then(function(){const b=new ArrayBuffer(f*p);return o.decodeGltfBuffer(new Uint8Array(b),f,p,m,a.mode,a.filter),b})})}else return null}}class jO{constructor(e){this.name=en.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){const t=this.parser.json,n=t.nodes[e];if(!n.extensions||!n.extensions[this.name]||n.mesh===void 0)return null;const a=t.meshes[n.mesh];for(const d of a.primitives)if(d.mode!==Ja.TRIANGLES&&d.mode!==Ja.TRIANGLE_STRIP&&d.mode!==Ja.TRIANGLE_FAN&&d.mode!==void 0)return null;const o=n.extensions[this.name].attributes,l=[],c={};for(const d in o)l.push(this.parser.getDependency("accessor",o[d]).then(f=>(c[d]=f,c[d])));return l.length<1?null:(l.push(this.parser.createNodeMesh(e)),Promise.all(l).then(d=>{const f=d.pop(),p=f.isGroup?f.children:[f],m=d[0].count,b=[];for(const x of p){const w=new il,k=new vt,S=new rl,j=new vt(1,1,1),C=new yr(x.geometry,x.material,m);for(let N=0;N<m;N++)c.TRANSLATION&&k.fromBufferAttribute(c.TRANSLATION,N),c.ROTATION&&S.fromBufferAttribute(c.ROTATION,N),c.SCALE&&j.fromBufferAttribute(c.SCALE,N),C.setMatrixAt(N,w.compose(k,S,j));for(const N in c)if(N==="_COLOR_0"){const _=c[N];C.instanceColor=new pP(_.array,_.itemSize,_.normalized)}else N!=="TRANSLATION"&&N!=="ROTATION"&&N!=="SCALE"&&x.geometry.setAttribute(N,c[N]);VA.prototype.copy.call(C,x),this.parser.assignFinalMaterial(C),b.push(C)}return f.isGroup?(f.clear(),f.add(...b),f):b[0]}))}}const DM="glTF",Tu=12,Pj={JSON:1313821514,BIN:5130562};class CO{constructor(e){this.name=en.KHR_BINARY_GLTF,this.content=null,this.body=null;const t=new DataView(e,0,Tu),n=new TextDecoder;if(this.header={magic:n.decode(new Uint8Array(e.slice(0,4))),version:t.getUint32(4,!0),length:t.getUint32(8,!0)},this.header.magic!==DM)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");const a=this.header.length-Tu,i=new DataView(e,Tu);let o=0;for(;o<a;){const l=i.getUint32(o,!0);o+=4;const c=i.getUint32(o,!0);if(o+=4,c===Pj.JSON){const d=new Uint8Array(e,Tu+o,l);this.content=n.decode(d)}else if(c===Pj.BIN){const d=Tu+o;this.body=e.slice(d,d+l)}o+=l}if(this.content===null)throw new Error("THREE.GLTFLoader: JSON content not found.")}}class NO{constructor(e,t){if(!t)throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");this.name=en.KHR_DRACO_MESH_COMPRESSION,this.json=e,this.dracoLoader=t,this.dracoLoader.preload()}decodePrimitive(e,t){const n=this.json,a=this.dracoLoader,i=e.extensions[this.name].bufferView,o=e.extensions[this.name].attributes,l={},c={},d={};for(const f in o){const p=Ry[f]||f.toLowerCase();l[p]=o[f]}for(const f in e.attributes){const p=Ry[f]||f.toLowerCase();if(o[f]!==void 0){const m=n.accessors[e.attributes[f]],b=hc[m.componentType];d[p]=b.name,c[p]=m.normalized===!0}}return t.getDependency("bufferView",i).then(function(f){return new Promise(function(p,m){a.decodeDracoFile(f,function(b){for(const x in b.attributes){const w=b.attributes[x],k=c[x];k!==void 0&&(w.normalized=k)}p(b)},l,d,Gi,m)})})}}class AO{constructor(){this.name=en.KHR_TEXTURE_TRANSFORM}extendTexture(e,t){return(t.texCoord===void 0||t.texCoord===e.channel)&&t.offset===void 0&&t.rotation===void 0&&t.scale===void 0||(e=e.clone(),t.texCoord!==void 0&&(e.channel=t.texCoord),t.offset!==void 0&&e.offset.fromArray(t.offset),t.rotation!==void 0&&(e.rotation=t.rotation),t.scale!==void 0&&e.repeat.fromArray(t.scale),e.needsUpdate=!0),e}}class MO{constructor(){this.name=en.KHR_MESH_QUANTIZATION}}class PM extends MP{constructor(e,t,n,a){super(e,t,n,a)}copySampleValue_(e){const t=this.resultBuffer,n=this.sampleValues,a=this.valueSize,i=e*a*3+a;for(let o=0;o!==a;o++)t[o]=n[i+o];return t}interpolate_(e,t,n,a){const i=this.resultBuffer,o=this.sampleValues,l=this.valueSize,c=l*2,d=l*3,f=a-t,p=(n-t)/f,m=p*p,b=m*p,x=e*d,w=x-d,k=-2*b+3*m,S=b-m,j=1-k,C=S-m+p;for(let N=0;N!==l;N++){const _=o[w+N+l],D=o[w+N+c]*f,L=o[x+N+l],M=o[x+N]*f;i[N]=j*_+C*D+k*L+S*M}return i}}const TO=new rl;class EO extends PM{interpolate_(e,t,n,a){const i=super.interpolate_(e,t,n,a);return TO.fromArray(i).normalize().toArray(i),i}}const Ja={POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6},hc={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},Rj={9728:KA,9729:$n,9984:yP,9985:bP,9986:gP,9987:Xu},Lj={33071:vP,33648:xP,10497:Yo},db={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},Ry={POSITION:"position",NORMAL:"normal",TANGENT:"tangent",TEXCOORD_0:"uv",TEXCOORD_1:"uv1",TEXCOORD_2:"uv2",TEXCOORD_3:"uv3",COLOR_0:"color",WEIGHTS_0:"skinWeight",JOINTS_0:"skinIndex"},so={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},_O={CUBICSPLINE:void 0,LINEAR:ZA,STEP:NP},hb={OPAQUE:"OPAQUE",MASK:"MASK",BLEND:"BLEND"};function DO(s){return s.DefaultMaterial===void 0&&(s.DefaultMaterial=new ft({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:QA})),s.DefaultMaterial}function zo(s,e,t){for(const n in t.extensions)s[n]===void 0&&(e.userData.gltfExtensions=e.userData.gltfExtensions||{},e.userData.gltfExtensions[n]=t.extensions[n])}function br(s,e){e.extras!==void 0&&(typeof e.extras=="object"?Object.assign(s.userData,e.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+e.extras))}function PO(s,e,t){let n=!1,a=!1,i=!1;for(let d=0,f=e.length;d<f;d++){const p=e[d];if(p.POSITION!==void 0&&(n=!0),p.NORMAL!==void 0&&(a=!0),p.COLOR_0!==void 0&&(i=!0),n&&a&&i)break}if(!n&&!a&&!i)return Promise.resolve(s);const o=[],l=[],c=[];for(let d=0,f=e.length;d<f;d++){const p=e[d];if(n){const m=p.POSITION!==void 0?t.getDependency("accessor",p.POSITION):s.attributes.position;o.push(m)}if(a){const m=p.NORMAL!==void 0?t.getDependency("accessor",p.NORMAL):s.attributes.normal;l.push(m)}if(i){const m=p.COLOR_0!==void 0?t.getDependency("accessor",p.COLOR_0):s.attributes.color;c.push(m)}}return Promise.all([Promise.all(o),Promise.all(l),Promise.all(c)]).then(function(d){const f=d[0],p=d[1],m=d[2];return n&&(s.morphAttributes.position=f),a&&(s.morphAttributes.normal=p),i&&(s.morphAttributes.color=m),s.morphTargetsRelative=!0,s})}function RO(s,e){if(s.updateMorphTargets(),e.weights!==void 0)for(let t=0,n=e.weights.length;t<n;t++)s.morphTargetInfluences[t]=e.weights[t];if(e.extras&&Array.isArray(e.extras.targetNames)){const t=e.extras.targetNames;if(s.morphTargetInfluences.length===t.length){s.morphTargetDictionary={};for(let n=0,a=t.length;n<a;n++)s.morphTargetDictionary[t[n]]=n}else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")}}function LO(s){let e;const t=s.extensions&&s.extensions[en.KHR_DRACO_MESH_COMPRESSION];if(t?e="draco:"+t.bufferView+":"+t.indices+":"+pb(t.attributes):e=s.indices+":"+pb(s.attributes)+":"+s.mode,s.targets!==void 0)for(let n=0,a=s.targets.length;n<a;n++)e+=":"+pb(s.targets[n]);return e}function pb(s){let e="";const t=Object.keys(s).sort();for(let n=0,a=t.length;n<a;n++)e+=t[n]+":"+s[t[n]]+";";return e}function Ly(s){switch(s){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.")}}function OO(s){return s.search(/\.jpe?g($|\?)/i)>0||s.search(/^data\:image\/jpeg/)===0?"image/jpeg":s.search(/\.webp($|\?)/i)>0||s.search(/^data\:image\/webp/)===0?"image/webp":s.search(/\.ktx2($|\?)/i)>0||s.search(/^data\:image\/ktx2/)===0?"image/ktx2":"image/png"}const IO=new il;class BO{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new rO,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let n=!1,a=-1,i=!1,o=-1;if(typeof navigator<"u"){const l=navigator.userAgent;n=/^((?!chrome|android).)*safari/i.test(l)===!0;const c=l.match(/Version\/(\d+)/);a=n&&c?parseInt(c[1],10):-1,i=l.indexOf("Firefox")>-1,o=i?l.match(/Firefox\/([0-9]+)\./)[1]:-1}typeof createImageBitmap>"u"||n&&a<17||i&&o<98?this.textureLoader=new Sx(this.options.manager):this.textureLoader=new fP(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new Rp(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),this.options.crossOrigin==="use-credentials"&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){const n=this,a=this.json,i=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(o){return o._markDefs&&o._markDefs()}),Promise.all(this._invokeAll(function(o){return o.beforeRoot&&o.beforeRoot()})).then(function(){return Promise.all([n.getDependencies("scene"),n.getDependencies("animation"),n.getDependencies("camera")])}).then(function(o){const l={scene:o[0][a.scene||0],scenes:o[0],animations:o[1],cameras:o[2],asset:a.asset,parser:n,userData:{}};return zo(i,l,a),br(l,a),Promise.all(n._invokeAll(function(c){return c.afterRoot&&c.afterRoot(l)})).then(function(){for(const c of l.scenes)c.updateMatrixWorld();e(l)})}).catch(t)}_markDefs(){const e=this.json.nodes||[],t=this.json.skins||[],n=this.json.meshes||[];for(let a=0,i=t.length;a<i;a++){const o=t[a].joints;for(let l=0,c=o.length;l<c;l++)e[o[l]].isBone=!0}for(let a=0,i=e.length;a<i;a++){const o=e[a];o.mesh!==void 0&&(this._addNodeRef(this.meshCache,o.mesh),o.skin!==void 0&&(n[o.mesh].isSkinnedMesh=!0)),o.camera!==void 0&&this._addNodeRef(this.cameraCache,o.camera)}}_addNodeRef(e,t){t!==void 0&&(e.refs[t]===void 0&&(e.refs[t]=e.uses[t]=0),e.refs[t]++)}_getNodeRef(e,t,n){if(e.refs[t]<=1)return n;const a=n.clone(),i=(o,l)=>{const c=this.associations.get(o);c!=null&&this.associations.set(l,c);for(const[d,f]of o.children.entries())i(f,l.children[d])};return i(n,a),a.name+="_instance_"+e.uses[t]++,a}_invokeOne(e){const t=Object.values(this.plugins);t.push(this);for(let n=0;n<t.length;n++){const a=e(t[n]);if(a)return a}return null}_invokeAll(e){const t=Object.values(this.plugins);t.unshift(this);const n=[];for(let a=0;a<t.length;a++){const i=e(t[a]);i&&n.push(i)}return n}getDependency(e,t){const n=e+":"+t;let a=this.cache.get(n);if(!a){switch(e){case"scene":a=this.loadScene(t);break;case"node":a=this._invokeOne(function(i){return i.loadNode&&i.loadNode(t)});break;case"mesh":a=this._invokeOne(function(i){return i.loadMesh&&i.loadMesh(t)});break;case"accessor":a=this.loadAccessor(t);break;case"bufferView":a=this._invokeOne(function(i){return i.loadBufferView&&i.loadBufferView(t)});break;case"buffer":a=this.loadBuffer(t);break;case"material":a=this._invokeOne(function(i){return i.loadMaterial&&i.loadMaterial(t)});break;case"texture":a=this._invokeOne(function(i){return i.loadTexture&&i.loadTexture(t)});break;case"skin":a=this.loadSkin(t);break;case"animation":a=this._invokeOne(function(i){return i.loadAnimation&&i.loadAnimation(t)});break;case"camera":a=this.loadCamera(t);break;default:if(a=this._invokeOne(function(i){return i!=this&&i.getDependency&&i.getDependency(e,t)}),!a)throw new Error("Unknown type: "+e);break}this.cache.add(n,a)}return a}getDependencies(e){let t=this.cache.get(e);if(!t){const n=this,a=this.json[e+(e==="mesh"?"es":"s")]||[];t=Promise.all(a.map(function(i,o){return n.getDependency(e,o)})),this.cache.add(e,t)}return t}loadBuffer(e){const t=this.json.buffers[e],n=this.fileLoader;if(t.type&&t.type!=="arraybuffer")throw new Error("THREE.GLTFLoader: "+t.type+" buffer type is not supported.");if(t.uri===void 0&&e===0)return Promise.resolve(this.extensions[en.KHR_BINARY_GLTF].body);const a=this.options;return new Promise(function(i,o){n.load(Ku.resolveURL(t.uri,a.path),i,void 0,function(){o(new Error('THREE.GLTFLoader: Failed to load buffer "'+t.uri+'".'))})})}loadBufferView(e){const t=this.json.bufferViews[e];return this.getDependency("buffer",t.buffer).then(function(n){const a=t.byteLength||0,i=t.byteOffset||0;return n.slice(i,i+a)})}loadAccessor(e){const t=this,n=this.json,a=this.json.accessors[e];if(a.bufferView===void 0&&a.sparse===void 0){const o=db[a.type],l=hc[a.componentType],c=a.normalized===!0,d=new l(a.count*o);return Promise.resolve(new gi(d,o,c))}const i=[];return a.bufferView!==void 0?i.push(this.getDependency("bufferView",a.bufferView)):i.push(null),a.sparse!==void 0&&(i.push(this.getDependency("bufferView",a.sparse.indices.bufferView)),i.push(this.getDependency("bufferView",a.sparse.values.bufferView))),Promise.all(i).then(function(o){const l=o[0],c=db[a.type],d=hc[a.componentType],f=d.BYTES_PER_ELEMENT,p=f*c,m=a.byteOffset||0,b=a.bufferView!==void 0?n.bufferViews[a.bufferView].byteStride:void 0,x=a.normalized===!0;let w,k;if(b&&b!==p){const S=Math.floor(m/b),j="InterleavedBuffer:"+a.bufferView+":"+a.componentType+":"+S+":"+a.count;let C=t.cache.get(j);C||(w=new d(l,S*b,a.count*b/f),C=new mP(w,b/f),t.cache.add(j,C)),k=new AP(C,c,m%b/f,x)}else l===null?w=new d(a.count*c):w=new d(l,m,a.count*c),k=new gi(w,c,x);if(a.sparse!==void 0){const S=db.SCALAR,j=hc[a.sparse.indices.componentType],C=a.sparse.indices.byteOffset||0,N=a.sparse.values.byteOffset||0,_=new j(o[1],C,a.sparse.count*S),D=new d(o[2],N,a.sparse.count*c);l!==null&&(k=new gi(k.array.slice(),k.itemSize,k.normalized)),k.normalized=!1;for(let L=0,M=_.length;L<M;L++){const P=_[L];if(k.setX(P,D[L*c]),c>=2&&k.setY(P,D[L*c+1]),c>=3&&k.setZ(P,D[L*c+2]),c>=4&&k.setW(P,D[L*c+3]),c>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}k.normalized=x}return k})}loadTexture(e){const t=this.json,n=this.options,i=t.textures[e].source,o=t.images[i];let l=this.textureLoader;if(o.uri){const c=n.manager.getHandler(o.uri);c!==null&&(l=c)}return this.loadTextureImage(e,i,l)}loadTextureImage(e,t,n){const a=this,i=this.json,o=i.textures[e],l=i.images[t],c=(l.uri||l.bufferView)+":"+o.sampler;if(this.textureCache[c])return this.textureCache[c];const d=this.loadImageSource(t,n).then(function(f){f.flipY=!1,f.name=o.name||l.name||"",f.name===""&&typeof l.uri=="string"&&l.uri.startsWith("data:image/")===!1&&(f.name=l.uri);const m=(i.samplers||{})[o.sampler]||{};return f.magFilter=Rj[m.magFilter]||$n,f.minFilter=Rj[m.minFilter]||Xu,f.wrapS=Lj[m.wrapS]||Yo,f.wrapT=Lj[m.wrapT]||Yo,f.generateMipmaps=!f.isCompressedTexture&&f.minFilter!==KA&&f.minFilter!==$n,a.associations.set(f,{textures:e}),f}).catch(function(){return null});return this.textureCache[c]=d,d}loadImageSource(e,t){const n=this,a=this.json,i=this.options;if(this.sourceCache[e]!==void 0)return this.sourceCache[e].then(p=>p.clone());const o=a.images[e],l=self.URL||self.webkitURL;let c=o.uri||"",d=!1;if(o.bufferView!==void 0)c=n.getDependency("bufferView",o.bufferView).then(function(p){d=!0;const m=new Blob([p],{type:o.mimeType});return c=l.createObjectURL(m),c});else if(o.uri===void 0)throw new Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");const f=Promise.resolve(c).then(function(p){return new Promise(function(m,b){let x=m;t.isImageBitmapLoader===!0&&(x=function(w){const k=new ES(w);k.needsUpdate=!0,m(k)}),t.load(Ku.resolveURL(p,i.path),x,void 0,b)})}).then(function(p){return d===!0&&l.revokeObjectURL(c),br(p,o),p.userData.mimeType=o.mimeType||OO(o.uri),p}).catch(function(p){throw console.error("THREE.GLTFLoader: Couldn't load texture",c),p});return this.sourceCache[e]=f,f}assignTexture(e,t,n,a){const i=this;return this.getDependency("texture",n.index).then(function(o){if(!o)return null;if(n.texCoord!==void 0&&n.texCoord>0&&(o=o.clone(),o.channel=n.texCoord),i.extensions[en.KHR_TEXTURE_TRANSFORM]){const l=n.extensions!==void 0?n.extensions[en.KHR_TEXTURE_TRANSFORM]:void 0;if(l){const c=i.associations.get(o);o=i.extensions[en.KHR_TEXTURE_TRANSFORM].extendTexture(o,l),i.associations.set(o,c)}}return a!==void 0&&(o.colorSpace=a),e[t]=o,o})}assignFinalMaterial(e){const t=e.geometry;let n=e.material;const a=t.attributes.tangent===void 0,i=t.attributes.color!==void 0,o=t.attributes.normal===void 0;if(e.isPoints){const l="PointsMaterial:"+n.uuid;let c=this.cache.get(l);c||(c=new wf,vr.prototype.copy.call(c,n),c.color.copy(n.color),c.map=n.map,c.sizeAttenuation=!1,this.cache.add(l,c)),n=c}else if(e.isLine){const l="LineBasicMaterial:"+n.uuid;let c=this.cache.get(l);c||(c=new Vo,vr.prototype.copy.call(c,n),c.color.copy(n.color),c.map=n.map,this.cache.add(l,c)),n=c}if(a||i||o){let l="ClonedMaterial:"+n.uuid+":";a&&(l+="derivative-tangents:"),i&&(l+="vertex-colors:"),o&&(l+="flat-shading:");let c=this.cache.get(l);c||(c=n.clone(),i&&(c.vertexColors=!0),o&&(c.flatShading=!0),a&&(c.normalScale&&(c.normalScale.y*=-1),c.clearcoatNormalScale&&(c.clearcoatNormalScale.y*=-1)),this.cache.add(l,c),this.associations.set(c,this.associations.get(n))),n=c}e.material=n}getMaterialType(){return ft}loadMaterial(e){const t=this,n=this.json,a=this.extensions,i=n.materials[e];let o;const l={},c=i.extensions||{},d=[];if(c[en.KHR_MATERIALS_UNLIT]){const p=a[en.KHR_MATERIALS_UNLIT];o=p.getMaterialType(),d.push(p.extendParams(l,i,t))}else{const p=i.pbrMetallicRoughness||{};if(l.color=new Ut(1,1,1),l.opacity=1,Array.isArray(p.baseColorFactor)){const m=p.baseColorFactor;l.color.setRGB(m[0],m[1],m[2],Gi),l.opacity=m[3]}p.baseColorTexture!==void 0&&d.push(t.assignTexture(l,"map",p.baseColorTexture,mi)),l.metalness=p.metallicFactor!==void 0?p.metallicFactor:1,l.roughness=p.roughnessFactor!==void 0?p.roughnessFactor:1,p.metallicRoughnessTexture!==void 0&&(d.push(t.assignTexture(l,"metalnessMap",p.metallicRoughnessTexture)),d.push(t.assignTexture(l,"roughnessMap",p.metallicRoughnessTexture))),o=this._invokeOne(function(m){return m.getMaterialType&&m.getMaterialType(e)}),d.push(Promise.all(this._invokeAll(function(m){return m.extendMaterialParams&&m.extendMaterialParams(e,l)})))}i.doubleSided===!0&&(l.side=Ls);const f=i.alphaMode||hb.OPAQUE;if(f===hb.BLEND?(l.transparent=!0,l.depthWrite=!1):(l.transparent=!1,f===hb.MASK&&(l.alphaTest=i.alphaCutoff!==void 0?i.alphaCutoff:.5)),i.normalTexture!==void 0&&o!==Ke&&(d.push(t.assignTexture(l,"normalMap",i.normalTexture)),l.normalScale=new Ys(1,1),i.normalTexture.scale!==void 0)){const p=i.normalTexture.scale;l.normalScale.set(p,p)}if(i.occlusionTexture!==void 0&&o!==Ke&&(d.push(t.assignTexture(l,"aoMap",i.occlusionTexture)),i.occlusionTexture.strength!==void 0&&(l.aoMapIntensity=i.occlusionTexture.strength)),i.emissiveFactor!==void 0&&o!==Ke){const p=i.emissiveFactor;l.emissive=new Ut().setRGB(p[0],p[1],p[2],Gi)}return i.emissiveTexture!==void 0&&o!==Ke&&d.push(t.assignTexture(l,"emissiveMap",i.emissiveTexture,mi)),Promise.all(d).then(function(){const p=new o(l);return i.name&&(p.name=i.name),br(p,i),t.associations.set(p,{materials:e}),i.extensions&&zo(a,p,i),p})}createUniqueName(e){const t=wP.sanitizeNodeName(e||"");return t in this.nodeNamesUsed?t+"_"+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){const t=this,n=this.extensions,a=this.primitiveCache;function i(l){return n[en.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(l,t).then(function(c){return Oj(c,l,t)})}const o=[];for(let l=0,c=e.length;l<c;l++){const d=e[l],f=LO(d),p=a[f];if(p)o.push(p.promise);else{let m;d.extensions&&d.extensions[en.KHR_DRACO_MESH_COMPRESSION]?m=i(d):m=Oj(new si,d,t),a[f]={primitive:d,promise:m},o.push(m)}}return Promise.all(o)}loadMesh(e){const t=this,n=this.json,a=this.extensions,i=n.meshes[e],o=i.primitives,l=[];for(let c=0,d=o.length;c<d;c++){const f=o[c].material===void 0?DO(this.cache):this.getDependency("material",o[c].material);l.push(f)}return l.push(t.loadGeometries(o)),Promise.all(l).then(function(c){const d=c.slice(0,c.length-1),f=c[c.length-1],p=[];for(let b=0,x=f.length;b<x;b++){const w=f[b],k=o[b];let S;const j=d[b];if(k.mode===Ja.TRIANGLES||k.mode===Ja.TRIANGLE_STRIP||k.mode===Ja.TRIANGLE_FAN||k.mode===void 0)S=i.isSkinnedMesh===!0?new fy(w,j):new Ie(w,j),S.isSkinnedMesh===!0&&S.normalizeSkinWeights(),k.mode===Ja.TRIANGLE_STRIP?S.geometry=Dj(S.geometry,WA):k.mode===Ja.TRIANGLE_FAN&&(S.geometry=Dj(S.geometry,py));else if(k.mode===Ja.LINES)S=new jx(w,j);else if(k.mode===Ja.LINE_STRIP)S=new oo(w,j);else if(k.mode===Ja.LINE_LOOP)S=new kP(w,j);else if(k.mode===Ja.POINTS)S=new jd(w,j);else throw new Error("THREE.GLTFLoader: Primitive mode unsupported: "+k.mode);Object.keys(S.geometry.morphAttributes).length>0&&RO(S,i),S.name=t.createUniqueName(i.name||"mesh_"+e),br(S,i),k.extensions&&zo(a,S,k),t.assignFinalMaterial(S),p.push(S)}for(let b=0,x=p.length;b<x;b++)t.associations.set(p[b],{meshes:e,primitives:b});if(p.length===1)return i.extensions&&zo(a,p[0],i),p[0];const m=new Hn;i.extensions&&zo(a,m,i),t.associations.set(m,{meshes:e});for(let b=0,x=p.length;b<x;b++)m.add(p[b]);return m})}loadCamera(e){let t;const n=this.json.cameras[e],a=n[n.type];if(!a){console.warn("THREE.GLTFLoader: Missing camera parameters.");return}return n.type==="perspective"?t=new Cx(Nx.radToDeg(a.yfov),a.aspectRatio||1,a.znear||1,a.zfar||2e6):n.type==="orthographic"&&(t=new XA(-a.xmag,a.xmag,a.ymag,-a.ymag,a.znear,a.zfar)),n.name&&(t.name=this.createUniqueName(n.name)),br(t,n),Promise.resolve(t)}loadSkin(e){const t=this.json.skins[e],n=[];for(let a=0,i=t.joints.length;a<i;a++)n.push(this._loadNodeShallow(t.joints[a]));return t.inverseBindMatrices!==void 0?n.push(this.getDependency("accessor",t.inverseBindMatrices)):n.push(null),Promise.all(n).then(function(a){const i=a.pop(),o=a,l=[],c=[];for(let d=0,f=o.length;d<f;d++){const p=o[d];if(p){l.push(p);const m=new il;i!==null&&m.fromArray(i.array,d*16),c.push(m)}else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.',t.joints[d])}return new SP(l,c)})}loadAnimation(e){const t=this.json,n=this,a=t.animations[e],i=a.name?a.name:"animation_"+e,o=[],l=[],c=[],d=[],f=[];for(let p=0,m=a.channels.length;p<m;p++){const b=a.channels[p],x=a.samplers[b.sampler],w=b.target,k=w.node,S=a.parameters!==void 0?a.parameters[x.input]:x.input,j=a.parameters!==void 0?a.parameters[x.output]:x.output;w.node!==void 0&&(o.push(this.getDependency("node",k)),l.push(this.getDependency("accessor",S)),c.push(this.getDependency("accessor",j)),d.push(x),f.push(w))}return Promise.all([Promise.all(o),Promise.all(l),Promise.all(c),Promise.all(d),Promise.all(f)]).then(function(p){const m=p[0],b=p[1],x=p[2],w=p[3],k=p[4],S=[];for(let j=0,C=m.length;j<C;j++){const N=m[j],_=b[j],D=x[j],L=w[j],M=k[j];if(N===void 0)continue;N.updateMatrix&&N.updateMatrix();const P=n._createAnimationTracks(N,_,D,L,M);if(P)for(let E=0;E<P.length;E++)S.push(P[E])}return new jP(i,void 0,S)})}createNodeMesh(e){const t=this.json,n=this,a=t.nodes[e];return a.mesh===void 0?null:n.getDependency("mesh",a.mesh).then(function(i){const o=n._getNodeRef(n.meshCache,a.mesh,i);return a.weights!==void 0&&o.traverse(function(l){if(l.isMesh)for(let c=0,d=a.weights.length;c<d;c++)l.morphTargetInfluences[c]=a.weights[c]}),o})}loadNode(e){const t=this.json,n=this,a=t.nodes[e],i=n._loadNodeShallow(e),o=[],l=a.children||[];for(let d=0,f=l.length;d<f;d++)o.push(n.getDependency("node",l[d]));const c=a.skin===void 0?Promise.resolve(null):n.getDependency("skin",a.skin);return Promise.all([i,Promise.all(o),c]).then(function(d){const f=d[0],p=d[1],m=d[2];m!==null&&f.traverse(function(b){b.isSkinnedMesh&&b.bind(m,IO)});for(let b=0,x=p.length;b<x;b++)f.add(p[b]);return f})}_loadNodeShallow(e){const t=this.json,n=this.extensions,a=this;if(this.nodeCache[e]!==void 0)return this.nodeCache[e];const i=t.nodes[e],o=i.name?a.createUniqueName(i.name):"",l=[],c=a._invokeOne(function(d){return d.createNodeMesh&&d.createNodeMesh(e)});return c&&l.push(c),i.camera!==void 0&&l.push(a.getDependency("camera",i.camera).then(function(d){return a._getNodeRef(a.cameraCache,i.camera,d)})),a._invokeAll(function(d){return d.createNodeAttachment&&d.createNodeAttachment(e)}).forEach(function(d){l.push(d)}),this.nodeCache[e]=Promise.all(l).then(function(d){let f;if(i.isBone===!0?f=new CP:d.length>1?f=new Hn:d.length===1?f=d[0]:f=new VA,f!==d[0])for(let p=0,m=d.length;p<m;p++)f.add(d[p]);if(i.name&&(f.userData.name=i.name,f.name=o),br(f,i),i.extensions&&zo(n,f,i),i.matrix!==void 0){const p=new il;p.fromArray(i.matrix),f.applyMatrix4(p)}else i.translation!==void 0&&f.position.fromArray(i.translation),i.rotation!==void 0&&f.quaternion.fromArray(i.rotation),i.scale!==void 0&&f.scale.fromArray(i.scale);return a.associations.has(f)||a.associations.set(f,{}),a.associations.get(f).nodes=e,f}),this.nodeCache[e]}loadScene(e){const t=this.extensions,n=this.json.scenes[e],a=this,i=new Hn;n.name&&(i.name=a.createUniqueName(n.name)),br(i,n),n.extensions&&zo(t,i,n);const o=n.nodes||[],l=[];for(let c=0,d=o.length;c<d;c++)l.push(a.getDependency("node",o[c]));return Promise.all(l).then(function(c){for(let f=0,p=c.length;f<p;f++)i.add(c[f]);const d=f=>{const p=new Map;for(const[m,b]of a.associations)(m instanceof vr||m instanceof ES)&&p.set(m,b);return f.traverse(m=>{const b=a.associations.get(m);b!=null&&p.set(m,b)}),p};return a.associations=d(i),i})}_createAnimationTracks(e,t,n,a,i){const o=[],l=e.name?e.name:e.uuid,c=[];so[i.path]===so.weights?e.traverse(function(m){m.morphTargetInfluences&&c.push(m.name?m.name:m.uuid)}):c.push(l);let d;switch(so[i.path]){case so.weights:d=DS;break;case so.rotation:d=PS;break;case so.position:case so.scale:d=_S;break;default:switch(n.itemSize){case 1:d=DS;break;case 2:case 3:default:d=_S;break}break}const f=a.interpolation!==void 0?_O[a.interpolation]:ZA,p=this._getArrayFromAccessor(n);for(let m=0,b=c.length;m<b;m++){const x=new d(c[m]+"."+so[i.path],t.array,p,f);a.interpolation==="CUBICSPLINE"&&this._createCubicSplineTrackInterpolant(x),o.push(x)}return o}_getArrayFromAccessor(e){let t=e.array;if(e.normalized){const n=Ly(t.constructor),a=new Float32Array(t.length);for(let i=0,o=t.length;i<o;i++)a[i]=t[i]*n;t=a}return t}_createCubicSplineTrackInterpolant(e){e.createInterpolant=function(n){const a=this instanceof PS?EO:PM;return new a(this.times,this.values,this.getValueSize()/3,n)},e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}}function zO(s,e,t){const n=e.attributes,a=new Lp;if(n.POSITION!==void 0){const l=t.json.accessors[n.POSITION],c=l.min,d=l.max;if(c!==void 0&&d!==void 0){if(a.set(new vt(c[0],c[1],c[2]),new vt(d[0],d[1],d[2])),l.normalized){const f=Ly(hc[l.componentType]);a.min.multiplyScalar(f),a.max.multiplyScalar(f)}}else{console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");return}}else return;const i=e.targets;if(i!==void 0){const l=new vt,c=new vt;for(let d=0,f=i.length;d<f;d++){const p=i[d];if(p.POSITION!==void 0){const m=t.json.accessors[p.POSITION],b=m.min,x=m.max;if(b!==void 0&&x!==void 0){if(c.setX(Math.max(Math.abs(b[0]),Math.abs(x[0]))),c.setY(Math.max(Math.abs(b[1]),Math.abs(x[1]))),c.setZ(Math.max(Math.abs(b[2]),Math.abs(x[2]))),m.normalized){const w=Ly(hc[m.componentType]);c.multiplyScalar(w)}l.max(c)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}a.expandByVector(l)}s.boundingBox=a;const o=new TP;a.getCenter(o.center),o.radius=a.min.distanceTo(a.max)/2,s.boundingSphere=o}function Oj(s,e,t){const n=e.attributes,a=[];function i(o,l){return t.getDependency("accessor",o).then(function(c){s.setAttribute(l,c)})}for(const o in n){const l=Ry[o]||o.toLowerCase();l in s.attributes||a.push(i(n[o],l))}if(e.indices!==void 0&&!s.index){const o=t.getDependency("accessor",e.indices).then(function(l){s.setIndex(l)});a.push(o)}return my.workingColorSpace!==Gi&&"COLOR_0"in n&&console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${my.workingColorSpace}" not supported.`),br(s,e),zO(s,e,t),Promise.all(a).then(function(){return e.targets!==void 0?PO(s,e.targets,t):s})}const fb=new WeakMap;class Bx extends qA{constructor(e){super(e),this.decoderPath="",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.defaultAttributeIDs={position:"POSITION",normal:"NORMAL",color:"COLOR",uv:"TEX_COORD"},this.defaultAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Float32Array",uv:"Float32Array"}}setDecoderPath(e){return this.decoderPath=e,this}setDecoderConfig(e){return this.decoderConfig=e,this}setWorkerLimit(e){return this.workerLimit=e,this}load(e,t,n,a){const i=new Rp(this.manager);i.setPath(this.path),i.setResponseType("arraybuffer"),i.setRequestHeader(this.requestHeader),i.setWithCredentials(this.withCredentials),i.load(e,o=>{this.parse(o,t,a)},n,a)}parse(e,t,n=()=>{}){this.decodeDracoFile(e,t,null,null,mi,n).catch(n)}decodeDracoFile(e,t,n,a,i=Gi,o=()=>{}){const l={attributeIDs:n||this.defaultAttributeIDs,attributeTypes:a||this.defaultAttributeTypes,useUniqueIDs:!!n,vertexColorSpace:i};return this.decodeGeometry(e,l).then(t).catch(o)}decodeGeometry(e,t){const n=JSON.stringify(t);if(fb.has(e)){const c=fb.get(e);if(c.key===n)return c.promise;if(e.byteLength===0)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let a;const i=this.workerNextTaskID++,o=e.byteLength,l=this._getWorker(i,o).then(c=>(a=c,new Promise((d,f)=>{a._callbacks[i]={resolve:d,reject:f},a.postMessage({type:"decode",id:i,taskConfig:t,buffer:e},[e])}))).then(c=>this._createGeometry(c.geometry));return l.catch(()=>!0).then(()=>{a&&i&&this._releaseTask(a,i)}),fb.set(e,{key:n,promise:l}),l}_createGeometry(e){const t=new si;e.index&&t.setIndex(new gi(e.index.array,1));for(let n=0;n<e.attributes.length;n++){const a=e.attributes[n],i=a.name,o=a.array,l=a.itemSize,c=new gi(o,l);i==="color"&&(this._assignVertexColorSpace(c,a.vertexColorSpace),c.normalized=!(o instanceof Float32Array)),t.setAttribute(i,c)}return t}_assignVertexColorSpace(e,t){if(t!==mi)return;const n=new Ut;for(let a=0,i=e.count;a<i;a++)n.fromBufferAttribute(e,a),my.toWorkingColorSpace(n,mi),e.setXYZ(a,n.r,n.g,n.b)}_loadLibrary(e,t){const n=new Rp(this.manager);return n.setPath(this.decoderPath),n.setResponseType(t),n.setWithCredentials(this.withCredentials),new Promise((a,i)=>{n.load(e,a,void 0,i)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;const e=typeof WebAssembly!="object"||this.decoderConfig.type==="js",t=[];return e?t.push(this._loadLibrary("draco_decoder.js","text")):(t.push(this._loadLibrary("draco_wasm_wrapper.js","text")),t.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(t).then(n=>{const a=n[0];e||(this.decoderConfig.wasmBinary=n[1]);const i=FO.toString(),o=["/* draco decoder */",a,"","/* worker */",i.substring(i.indexOf("{")+1,i.lastIndexOf("}"))].join(`
|
|
43
43
|
`);this.workerSourceURL=URL.createObjectURL(new Blob([o]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.length<this.workerLimit){const a=new Worker(this.workerSourceURL);a._callbacks={},a._taskCosts={},a._taskLoad=0,a.postMessage({type:"init",decoderConfig:this.decoderConfig}),a.onmessage=function(i){const o=i.data;switch(o.type){case"decode":a._callbacks[o.id].resolve(o);break;case"error":a._callbacks[o.id].reject(o);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+o.type+'"')}},this.workerPool.push(a)}else this.workerPool.sort(function(a,i){return a._taskLoad>i._taskLoad?-1:1});const n=this.workerPool[this.workerPool.length-1];return n._taskCosts[e]=t,n._taskLoad+=t,n})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log("Task load: ",this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e<this.workerPool.length;++e)this.workerPool[e].terminate();return this.workerPool.length=0,this.workerSourceURL!==""&&URL.revokeObjectURL(this.workerSourceURL),this}}function FO(){let s,e;onmessage=function(o){const l=o.data;switch(l.type){case"init":s=l.decoderConfig,e=new Promise(function(f){s.onModuleLoaded=function(p){f({draco:p})},DracoDecoderModule(s)});break;case"decode":const c=l.buffer,d=l.taskConfig;e.then(f=>{const p=f.draco,m=new p.Decoder;try{const b=t(p,m,new Int8Array(c),d),x=b.attributes.map(w=>w.array.buffer);b.index&&x.push(b.index.array.buffer),self.postMessage({type:"decode",id:l.id,geometry:b},x)}catch(b){console.error(b),self.postMessage({type:"error",id:l.id,error:b.message})}finally{p.destroy(m)}});break}};function t(o,l,c,d){const f=d.attributeIDs,p=d.attributeTypes;let m,b;const x=l.GetEncodedGeometryType(c);if(x===o.TRIANGULAR_MESH)m=new o.Mesh,b=l.DecodeArrayToMesh(c,c.byteLength,m);else if(x===o.POINT_CLOUD)m=new o.PointCloud,b=l.DecodeArrayToPointCloud(c,c.byteLength,m);else throw new Error("THREE.DRACOLoader: Unexpected geometry type.");if(!b.ok()||m.ptr===0)throw new Error("THREE.DRACOLoader: Decoding failed: "+b.error_msg());const w={index:null,attributes:[]};for(const k in f){const S=self[p[k]];let j,C;if(d.useUniqueIDs)C=f[k],j=l.GetAttributeByUniqueId(m,C);else{if(C=l.GetAttributeId(m,o[f[k]]),C===-1)continue;j=l.GetAttribute(m,C)}const N=a(o,l,m,k,S,j);k==="color"&&(N.vertexColorSpace=d.vertexColorSpace),w.attributes.push(N)}return x===o.TRIANGULAR_MESH&&(w.index=n(o,l,m)),o.destroy(m),w}function n(o,l,c){const f=c.num_faces()*3,p=f*4,m=o._malloc(p);l.GetTrianglesUInt32Array(c,p,m);const b=new Uint32Array(o.HEAPF32.buffer,m,f).slice();return o._free(m),{array:b,itemSize:1}}function a(o,l,c,d,f,p){const m=p.num_components(),x=c.num_points()*m,w=x*f.BYTES_PER_ELEMENT,k=i(o,f),S=o._malloc(w);l.GetAttributeDataArrayForAllPoints(c,p,k,w,S);const j=new f(o.HEAPF32.buffer,S,x).slice();return o._free(S),{name:d,array:j,itemSize:m}}function i(o,l){switch(l){case Float32Array:return o.DT_FLOAT32;case Int8Array:return o.DT_INT8;case Int16Array:return o.DT_INT16;case Int32Array:return o.DT_INT32;case Uint8Array:return o.DT_UINT8;case Uint16Array:return o.DT_UINT16;case Uint32Array:return o.DT_UINT32}}}var zx=(function(){var s="b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q;iekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq:P8Yqdbk;3sezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhDcbhqinaqae9pmeaDaeaq9RaqaDfae6Egkcsfgocl4cifcd4hxdndndndnaoc9WGgmTmbcbhPcehsawcjdfhzalhHinaraH9Rax6midnaraHaxfgl9RcK6mbczhoinawcj;cbfaogifgoc9WfhOdndndndndnaHaic9WfgAco4fRbbaAci4coG4ciGPlbedibkaO9cb83ibaOcwf9cb83ibxikaOalRblalRbbgAco4gCaCciSgCE86bbaocGfalclfaCfgORbbaAcl4ciGgCaCciSgCE86bbaocVfaOaCfgORbbaAcd4ciGgCaCciSgCE86bbaoc7faOaCfgORbbaAciGgAaAciSgAE86bbaoctfaOaAfgARbbalRbegOco4gCaCciSgCE86bbaoc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc93faAaCfgARbbaOciGgOaOciSgOE86bbaoc94faAaOfgARbbalRbdgOco4gCaCciSgCE86bbaoc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc97faAaCfgARbbaOciGgOaOciSgOE86bbaoc98faAaOfgORbbalRbiglco4gAaAciSgAE86bbaoc99faOaAfgORbbalcl4ciGgAaAciSgAE86bbaoc9:faOaAfgORbbalcd4ciGgAaAciSgAE86bbaocufaOaAfgoRbbalciGglalciSglE86bbaoalfhlxdkaOalRbwalRbbgAcl4gCaCcsSgCE86bbaocGfalcwfaCfgORbbaAcsGgAaAcsSgAE86bbaocVfaOaAfgORbbalRbegAcl4gCaCcsSgCE86bbaoc7faOaCfgORbbaAcsGgAaAcsSgAE86bbaoctfaOaAfgORbbalRbdgAcl4gCaCcsSgCE86bbaoc91faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc4faOaAfgORbbalRbigAcl4gCaCcsSgCE86bbaoc93faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc94faOaAfgORbbalRblgAcl4gCaCcsSgCE86bbaoc95faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc96faOaAfgORbbalRbvgAcl4gCaCcsSgCE86bbaoc97faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc98faOaAfgORbbalRbogAcl4gCaCcsSgCE86bbaoc99faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc9:faOaAfgORbbalRbrglcl4gAaAcsSgAE86bbaocufaOaAfgoRbbalcsGglalcsSglE86bbaoalfhlxekaOal8Pbb83bbaOcwfalcwf8Pbb83bbalczfhlkdnaiam9pmbaiczfhoaral9RcL0mekkaiam6mialTmidnakTmbawaPfRbbhOcbhoazhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkkazcefhzaPcefgPad6hsalhHaPad9hmexvkkcbhlasceGmdxikalaxad2fhCdnakTmbcbhHcehsawcjdfhminaral9Rax6mialTmdalaxfhlawaHfRbbhOcbhoamhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkamcefhmaHcefgHad6hsaHad9hmbkaChlxikcbhocehsinaral9Rax6mdalTmealaxfhlaocefgoad6hsadao9hmbkaChlxdkcbhlasceGTmekc9:hoxikabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqalmbkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;ebf8Kjjjjbaok;yzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;siliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabavcefciGaiVcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:Ohkxekcjjjj94hkkabavcdfciGaiVcetfak87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:Ohqxekcjjjj94hqkabavcufciGaiVcetfaq87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohqxekcjjjj94hqkabavciGaiVcetfaq87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2geTmbinababydbgdcwtcw91:Yadce91cjjj;8ifcjjj98G::NUdbabclfhbaecufgembkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaiczfhiaeczfheadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklz9Kbb",e="b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q;Aekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;t9tqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk;h8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhwcbhDinaDae9pmeawaeaD9RaDawfae6Egqcsfgoc9WGgkci2hxakcethmaocl4cifcd4hPabaDad2fhscbhzdnincehHalhOcbhAdninaraO9RaP6miavcj;cbfaAak2fhCaOaPfhlcbhidnakc;ab6mbaral9Rc;Gb6mbcbhoinaCaofhidndndndndnaOaoco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklbalczfhlkdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklzalczfhlkdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklaalczfhlkdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalclfaYpQbfaXc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalcwfaYpQbfaXc:q:yjjbfRbbfhlxekaialpbbbpkl8Walczfhlkaoc;abfhiaocjefak0meaihoaral9Rc;Fb0mbkkdndnaiak9pmbaici4hoinaral9RcK6mdaCaifhXdndndndndnaOaico4fRbbaocoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpklbxikaXalpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaXalpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaXalpbbbpklbalczfhlkaocdfhoaiczfgiak6mbkkalTmbaAci6hHalhOaAcefgohAaoclSmdxekkcbhlaHceGmdkdnakTmbavcjdfazfhiavazfpbdbhYcbhXinaiavcj;cbfaXfgopblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLaoakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEaoamfpblbg3cep9Ta3aQp9op9Hp9rg3aoaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfhiaXczfgXak6mbkkazclfgzad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfhDc9:hoalmexikkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk;uzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:EPliuo97eue978Jjjjjbca9Rhidndnadcl9hmbdnaec98GglTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalae9pmeaiaeciGgvcdtgdVcbczad9R;8kbaiabalcdtfglad;8qbbdnavTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkalaiad;8qbbskdnaec98GgxTmbcbhvabhdinadczfglalpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oawaopmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgvax6mbkkaxae9pmbaiaeciGgvcitgdfcbcaad9R;8kbaiabaxcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oawaopmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalae9pmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbhdabheinaeaepbbbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepkbbaeczfheadclfgdav6mbkkdnaval9pmbaialciGgdcdtgeVcbc;abae9R;8kbaiabavcdtfgvae;8qbbdnadTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepklbkavaiae;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz9Tbb",t=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,3,2,0,0,5,3,1,0,1,12,1,0,10,22,2,12,0,65,0,65,0,65,0,252,10,0,0,11,7,0,65,0,253,15,26,11]),n=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!="object")return{supported:!1};var a=WebAssembly.validate(t)?e:s,i,o=WebAssembly.instantiate(l(a),{}).then(function(S){i=S.instance,i.exports.__wasm_call_ctors()});function l(S){for(var j=new Uint8Array(S.length),C=0;C<S.length;++C){var N=S.charCodeAt(C);j[C]=N>96?N-97:N>64?N-39:N+4}for(var _=0,C=0;C<S.length;++C)j[_++]=j[C]<60?n[j[C]]:(j[C]-60)*64+j[++C];return j.buffer.slice(0,_)}function c(S,j,C,N,_,D){var L=i.exports.sbrk,M=C+3&-4,P=L(M*N),E=L(_.length),R=new Uint8Array(i.exports.memory.buffer);R.set(_,E);var I=S(P,C,N,E,_.length);if(I==0&&D&&D(P,M,N),j.set(R.subarray(P,P+C*N)),L(P-L(0)),I!=0)throw new Error("Malformed buffer data: "+I)}var d={NONE:"",OCTAHEDRAL:"meshopt_decodeFilterOct",QUATERNION:"meshopt_decodeFilterQuat",EXPONENTIAL:"meshopt_decodeFilterExp"},f={ATTRIBUTES:"meshopt_decodeVertexBuffer",TRIANGLES:"meshopt_decodeIndexBuffer",INDICES:"meshopt_decodeIndexSequence"},p=[],m=0;function b(S){var j={object:new Worker(S),pending:0,requests:{}};return j.object.onmessage=function(C){var N=C.data;j.pending-=N.count,j.requests[N.id][N.action](N.value),delete j.requests[N.id]},j}function x(S){for(var j="var instance; var ready = WebAssembly.instantiate(new Uint8Array(["+new Uint8Array(l(a))+"]), {}).then(function(result) { instance = result.instance; instance.exports.__wasm_call_ctors(); });self.onmessage = workerProcess;"+c.toString()+k.toString(),C=new Blob([j],{type:"text/javascript"}),N=URL.createObjectURL(C),_=0;_<S;++_)p[_]=b(N);URL.revokeObjectURL(N)}function w(S,j,C,N,_){for(var D=p[0],L=1;L<p.length;++L)p[L].pending<D.pending&&(D=p[L]);return new Promise(function(M,P){var E=new Uint8Array(C),R=m++;D.pending+=S,D.requests[R]={resolve:M,reject:P},D.object.postMessage({id:R,count:S,size:j,source:E,mode:N,filter:_},[E.buffer])})}function k(S){o.then(function(){var j=S.data;try{var C=new Uint8Array(j.count*j.size);c(i.exports[j.mode],C,j.count,j.size,j.source,i.exports[j.filter]),self.postMessage({id:j.id,count:j.count,action:"resolve",value:C},[C.buffer])}catch(N){self.postMessage({id:j.id,count:j.count,action:"reject",value:N})}})}return{ready:o,supported:!0,useWorkers:function(S){x(S)},decodeVertexBuffer:function(S,j,C,N,_){c(i.exports.meshopt_decodeVertexBuffer,S,j,C,N,i.exports[d[_]])},decodeIndexBuffer:function(S,j,C,N){c(i.exports.meshopt_decodeIndexBuffer,S,j,C,N)},decodeIndexSequence:function(S,j,C,N){c(i.exports.meshopt_decodeIndexSequence,S,j,C,N)},decodeGltfBuffer:function(S,j,C,N,_,D){c(i.exports[f[_]],S,j,C,N,i.exports[d[D]])},decodeGltfBufferAsync:function(S,j,C,N,_){return p.length>0?w(S,j,C,f[N],d[_]):o.then(function(){var D=new Uint8Array(S*j);return c(i.exports[f[N]],D,S,j,C,i.exports[d[_]]),D})}}})();function Ij(s){const e=new Map,t=new Map,n=s.clone();return RM(s,n,function(a,i){e.set(i,a),t.set(a,i)}),n.traverse(function(a){if(!a.isSkinnedMesh)return;const i=a,o=e.get(a),l=o.skeleton.bones;i.skeleton=o.skeleton.clone(),i.bindMatrix.copy(o.bindMatrix),i.skeleton.bones=l.map(function(c){return t.get(c)}),i.bind(i.skeleton,i.bindMatrix)}),n}function RM(s,e,t){t(s,e);for(let n=0;n<s.children.length;n++)RM(s.children[n],e.children[n],t)}const ri={scout:{icon:"🔍",color:4890367,description:"Explores and searches codebase"},builder:{icon:"🔨",color:16752202,description:"Creates and builds features"},debugger:{icon:"🐛",color:16730698,description:"Finds and fixes bugs"},architect:{icon:"📐",color:10373887,description:"Plans and designs systems"},warrior:{icon:"⚔️",color:16730782,description:"Tackles tough problems"},support:{icon:"💚",color:4915102,description:"Helps and assists others"},boss:{icon:"👑",color:16766720,description:"Manages and delegates to subordinates"}},Fx=["Alex","Sam","Jordan","Taylor","Casey","Morgan","Riley","Quinn","Avery","Blake","Cameron","Drew","Emery","Finley","Harper","Jamie","Kai","Logan","Max","Nico","Parker","Reese","Sage","Sky"],Jo=Fx,oc={scout:"character-male-a.glb",builder:"character-male-b.glb",debugger:"character-female-a.glb",architect:"character-male-c.glb",warrior:"character-female-b.glb",support:"character-female-c.glb",boss:"character-male-c.glb"},el=[{id:"scout",model:"character-male-a.glb",name:"Explorer",gender:"Male"},{id:"builder",model:"character-male-b.glb",name:"Crafter",gender:"Male"},{id:"architect",model:"character-male-c.glb",name:"Planner",gender:"Male"},{id:"debugger",model:"character-female-a.glb",name:"Analyst",gender:"Female"},{id:"warrior",model:"character-female-b.glb",name:"Fighter",gender:"Female"},{id:"support",model:"character-female-c.glb",name:"Healer",gender:"Female"}],Ti=[{file:"character-male-a.glb",name:"Male A (Explorer)",gender:"Male"},{file:"character-male-b.glb",name:"Male B (Crafter)",gender:"Male"},{file:"character-male-c.glb",name:"Male C (Planner)",gender:"Male"},{file:"character-male-d.glb",name:"Male D",gender:"Male"},{file:"character-male-e.glb",name:"Male E",gender:"Male"},{file:"character-male-f.glb",name:"Male F",gender:"Male"},{file:"character-female-a.glb",name:"Female A (Analyst)",gender:"Female"},{file:"character-female-b.glb",name:"Female B (Fighter)",gender:"Female"},{file:"character-female-c.glb",name:"Female C (Healer)",gender:"Female"},{file:"character-female-d.glb",name:"Female D",gender:"Female"},{file:"character-female-e.glb",name:"Female E",gender:"Female"},{file:"character-female-f.glb",name:"Female F",gender:"Female"}],$O=3,lc=5,HO=1e3,$x=50,Pi=1.2;class UO{constructor(){U(this,"models",new Map);U(this,"customModels",new Map);U(this,"loaded",!1);U(this,"loadingPromise",null);U(this,"loader");U(this,"dracoLoader");U(this,"loadingCustomModels",new Map);this.loader=new Ix,this.dracoLoader=new Bx,this.dracoLoader.setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.5.7/"),this.loader.setDRACOLoader(this.dracoLoader),this.loader.setMeshoptDecoder(zx)}get isLoaded(){return this.loaded}async loadAll(){if(this.loaded){console.log("[CharacterLoader] Already loaded, skipping");return}if(this.loadingPromise)return console.log("[CharacterLoader] Already loading, waiting for existing promise"),this.loadingPromise;const e=[...new Set([...Object.values(oc),...Ti.map(t=>t.file)])];return console.log(`[CharacterLoader] Starting to load ${e.length} models`),this.loadingPromise=Promise.all(e.map(t=>this.loadModel(t))).then(()=>{this.loaded=!0,console.log(`[CharacterLoader] All models loaded. Cache size: ${this.models.size}`)}),this.loadingPromise}loadModel(e){return new Promise(t=>{const n=`/assets/characters/${e}`;console.log(`[CharacterLoader] Loading model: ${n}`),this.loader.load(n,a=>{console.log(`[CharacterLoader] Successfully loaded: ${e}`);const i=this.prepareModel(a.scene);this.models.set(e,{scene:i,animations:a.animations}),t()},a=>{},a=>{console.error(`[CharacterLoader] Failed to load ${e}:`,a),t()})})}prepareModel(e){return e.scale.setScalar(1),e.position.set(0,0,0),e.rotation.set(0,0,0),e.visible=!1,e.traverse(t=>{if(t instanceof Ie&&(t.castShadow=!0,t.receiveShadow=!0,t.material)){const n=t.material;n.map&&(n.map.colorSpace=mi),n.isMeshStandardMaterial&&(n.roughness=n.roughness??.6,n.metalness=n.metalness??0,n.envMapIntensity=.8,n.needsUpdate=!0)}}),e}clone(e){const t=oc[e];return this.cloneByModelFile(t)}cloneByModelFile(e){const t=this.models.get(e);if(!t)return console.warn(`[CharacterLoader] Model not found: ${e}`),null;const n=Ij(t.scene);return n.visible=!0,n.position.set(0,0,0),n.rotation.set(0,0,0),n.traverse(a=>{a.visible=!0,a instanceof Ie&&a.material&&(Array.isArray(a.material)?a.material=a.material.map(i=>i.clone()):a.material=a.material.clone())}),{mesh:n,animations:t.animations}}getAnimations(e){const t=oc[e],n=this.models.get(t);return(n==null?void 0:n.animations)??null}hasModel(e){const t=oc[e];return this.models.has(t)}async loadCustomModel(e){if(this.customModels.has(e))return;const t=this.loadingCustomModels.get(e);if(t)return t;const n=new Promise(a=>{this.loader.load(Cd(ct(`/api/custom-models/${e}`)),i=>{const o=this.prepareModel(i.scene);this.customModels.set(e,{scene:o,animations:i.animations}),console.log(`[CharacterLoader] Loaded custom model for class: ${e} (${i.animations.length} animations)`),a()},void 0,i=>{console.error(`[CharacterLoader] Failed to load custom model for ${e}:`,i),a()})});this.loadingCustomModels.set(e,n);try{await n}finally{this.loadingCustomModels.delete(e)}}hasCustomModel(e){return this.customModels.has(e)}cloneCustomModel(e){const t=this.customModels.get(e);if(!t)return null;const n=Ij(t.scene);return n.visible=!0,n.position.set(0,0,0),n.rotation.set(0,0,0),n.traverse(a=>{a.visible=!0,a instanceof Ie&&a.material&&(Array.isArray(a.material)?a.material=a.material.map(i=>i.clone()):a.material=a.material.clone())}),{mesh:n,animations:t.animations}}getCustomModelAnimations(e){const t=this.customModels.get(e);return(t==null?void 0:t.animations)??null}unloadCustomModel(e){const t=this.customModels.get(e);t&&(this.disposeCachedModel(t),this.customModels.delete(e),console.log(`[CharacterLoader] Unloaded custom model for class: ${e}`))}disposeCachedModel(e){e.scene.traverse(t=>{var n;t instanceof Ie&&((n=t.geometry)==null||n.dispose(),Array.isArray(t.material)?t.material.forEach(a=>this.disposeMaterial(a)):t.material&&this.disposeMaterial(t.material))})}disposeMaterial(e){var t,n,a,i,o,l,c,d,f,p,m;(e instanceof ft||e instanceof Ke||e instanceof EP)&&((t=e.map)==null||t.dispose(),"normalMap"in e&&((n=e.normalMap)==null||n.dispose()),"roughnessMap"in e&&((a=e.roughnessMap)==null||a.dispose()),"metalnessMap"in e&&((i=e.metalnessMap)==null||i.dispose()),"emissiveMap"in e&&((o=e.emissiveMap)==null||o.dispose()),"aoMap"in e&&((l=e.aoMap)==null||l.dispose()),"lightMap"in e&&((c=e.lightMap)==null||c.dispose()),"bumpMap"in e&&((d=e.bumpMap)==null||d.dispose()),"displacementMap"in e&&((f=e.displacementMap)==null||f.dispose()),"alphaMap"in e&&((p=e.alphaMap)==null||p.dispose()),"envMap"in e&&((m=e.envMap)==null||m.dispose())),e.dispose()}dispose(){for(const[e,t]of this.models)this.disposeCachedModel(t),console.log(`[CharacterLoader] Disposed model template: ${e}`);this.models.clear();for(const[e,t]of this.customModels)this.disposeCachedModel(t),console.log(`[CharacterLoader] Disposed custom model: ${e}`);this.customModels.clear(),this.dracoLoader.dispose(),this.loaded=!1,this.loadingPromise=null,this.loadingCustomModels.clear(),console.log("[CharacterLoader] All model caches disposed")}getCacheStats(){return{builtInModels:this.models.size,customModels:this.customModels.size,modelNames:Array.from(this.models.keys()),customModelIds:Array.from(this.customModels.keys())}}}const GO="character-male-a.glb";class WO{constructor(e){U(this,"customClasses",new Map);this.characterLoader=e}setCustomClasses(e){this.customClasses=e}getClassConfig(e){const t=ri[e];if(t)return t;const n=this.customClasses.get(e);if(n){const a=parseInt(n.color.replace("#",""),16);return{icon:n.icon,color:isNaN(a)?8947848:a,description:n.description}}return{icon:"❓",color:8947848,description:"Unknown class"}}getModelInfo(e){const t=oc[e];if(t)return{file:t,isCustomModel:!1};const n=this.customClasses.get(e);if(n){if(n.customModelPath)return{file:n.customModelPath,isCustomModel:!0,customClassId:n.id,scale:n.modelScale,offset:n.modelOffset};if(n.model)return{file:n.model,isCustomModel:!1,scale:n.modelScale,offset:n.modelOffset}}return{file:GO,isCustomModel:!1}}createCharacterBody(e,t){const n=this.getModelInfo(e.class);let a=null;if(n.isCustomModel&&n.customClassId&&(a=this.characterLoader.cloneCustomModel(n.customClassId)),a||(a=this.characterLoader.cloneByModelFile(n.file)),a){a.mesh.name="characterBody";const c=n.scale??1;a.mesh.userData.customModelScale=c,a.mesh.userData.isCustomModel=n.isCustomModel,n.offset&&(n.offset.x!==0||n.offset.y!==0||n.offset.z!==0)&&a.mesh.position.set(n.offset.x,n.offset.z,n.offset.y);const d=this.customClasses.get(e.class);d!=null&&d.animationMapping&&(a.mesh.userData.animationMapping=d.animationMapping);const f=new Zu(a.mesh),p=new Map;for(const m of a.animations){const b=m.name.toLowerCase();p.set(b,m),p.set(m.name,m)}return{body:a.mesh,mixer:f,animations:p}}const i=new gy(.5,1,4,16),o=new ft({color:t,roughness:.4,metalness:.3}),l=new Ie(i,o);return l.position.y=1,l.castShadow=!0,l.receiveShadow=!0,l.name="characterBody",{body:l,mixer:null,animations:new Map}}calculateModelHeight(e,t){return t?2:1.5}upgradeToCharacterModel(e,t){const n=e.getObjectByName("characterBody");if(!(n instanceof Ie)||!(n.geometry instanceof gy))return null;const a=this.characterLoader.clone(t.class);if(!a)return null;e.remove(n),n.geometry.dispose(),n.material.dispose(),a.mesh.name="characterBody",e.add(a.mesh);const i=new Zu(a.mesh),o=new Map;for(const l of a.animations){const c=l.name.toLowerCase();o.set(c,l)}return{group:e,mixer:i,animations:o,currentAction:null}}replaceAgentModel(e,t){const{group:n}=e,a=this.getModelInfo(t.class);let i=null;if(a.isCustomModel&&a.customClassId&&(i=this.characterLoader.cloneCustomModel(a.customClassId)),i||(i=this.characterLoader.cloneByModelFile(a.file)),!i)return console.warn(`[ModelLoader] Could not load model for class ${t.class}, keeping current model`),n.userData.agentClass=t.class,null;const o=n.getObjectByName("characterBody");o&&(n.remove(o),o.traverse(p=>{var m;(p instanceof Ie||p instanceof fy)&&((m=p.geometry)==null||m.dispose(),Array.isArray(p.material)?p.material.forEach(b=>this.disposeMaterial(b)):p.material&&this.disposeMaterial(p.material))})),e.mixer&&(e.mixer.stopAllAction(),e.mixer.uncacheRoot(n)),i.mesh.name="characterBody";const l=a.scale??1;i.mesh.userData.customModelScale=l,i.mesh.userData.isCustomModel=a.isCustomModel,a.offset&&(a.offset.x!==0||a.offset.y!==0||a.offset.z!==0)&&i.mesh.position.set(a.offset.x,a.offset.z,a.offset.y);const c=this.customClasses.get(t.class);c!=null&&c.animationMapping&&(i.mesh.userData.animationMapping=c.animationMapping),n.add(i.mesh);const d=new Zu(i.mesh),f=new Map;for(const p of i.animations){const m=p.name.toLowerCase();f.set(m,p),f.set(p.name,p)}return n.userData.agentClass=t.class,console.log(`[ModelLoader] Agent ${t.name} model updated to ${a.file}`),{group:n,mixer:d,animations:f,currentAction:null}}disposeAgentMesh(e){for(e.mixer&&(e.mixer.stopAllAction(),e.mixer.uncacheRoot(e.group)),e.group.traverse(t=>{var n,a;t instanceof Ie?((n=t.geometry)==null||n.dispose(),Array.isArray(t.material)?t.material.forEach(i=>this.disposeMaterial(i)):t.material&&this.disposeMaterial(t.material)):t instanceof Kn?this.disposeMaterial(t.material):t instanceof fy&&((a=t.geometry)==null||a.dispose(),Array.isArray(t.material)?t.material.forEach(i=>this.disposeMaterial(i)):t.material&&this.disposeMaterial(t.material))});e.group.children.length>0;)e.group.remove(e.group.children[0]);e.animations.clear()}disposeMaterial(e){var t,n,a,i,o;(e instanceof ft||e instanceof Ke||e instanceof ts)&&((t=e.map)==null||t.dispose(),"normalMap"in e&&((n=e.normalMap)==null||n.dispose()),"roughnessMap"in e&&((a=e.roughnessMap)==null||a.dispose()),"metalnessMap"in e&&((i=e.metalnessMap)==null||i.dispose()),"emissiveMap"in e&&((o=e.emissiveMap)==null||o.dispose())),e.dispose()}}class qO{createAnimationSetup(e,t,n){n!=null&&n.animationMapping&&(e.userData.animationMapping=n.animationMapping);const a=new Zu(e),i=new Map;for(const o of t)i.set(o.name.toLowerCase(),o),i.set(o.name,o);return{mixer:a,animations:i}}getIdleTimerColor(e){const a=Math.min(e/60,60)/60,i=Math.pow(a,.7),o=120*(1-i),l=80+20*i,c=60-10*i,d=`hsl(${Math.round(o)}, ${Math.round(l)}%, ${Math.round(c)}%)`;return{text:d,border:d}}formatIdleTimeShort(e){if(e<60)return`${e}s`;const t=Math.floor(e/60);if(t<60){const o=e%60;return o>0?`${t}m ${o}s`:`${t}m`}const n=Math.floor(t/60),a=t%60;return n<24?a>0?`${n}h ${a}m`:`${n}h`:`${Math.floor(n/24)}d`}}const Bj={idle:4915102,working:4890367,waiting:16752202,waiting_permission:16763904,error:16730698,orphaned:16711935,default:8947848};function LM(s){if(s.contextStats)return 100-s.contextStats.usedPercent;const e=s.contextUsed||0,t=s.contextLimit||2e5;return Math.max(0,t-e)/t*100}class YO{constructor(e){U(this,"idleTimerCanvas",null);U(this,"idleTimerCtx",null);U(this,"manaBarCanvas",null);U(this,"manaBarCtx",null);this.animConfig=e}getStatusColor(e){return Bj[e]??Bj.default}createSelectionRing(e,t=!1){const n=t?1.5:1,a=new ol(.8*n,.95*n,32),i=new Ke({color:e,side:Ls,transparent:!0,opacity:0,depthTest:!1}),o=new Ie(a,i);return o.rotation.x=-Math.PI/2,o.position.y=.05,o.renderOrder=999,o.name="selectionRing",o}createStatusBarSprite(e,t,n,a,i=2){const o=document.createElement("canvas"),l=o.getContext("2d");o.width=4096,o.height=2560,this.drawStatusBar(l,o.width,o.height,e,t,n,a);const c=new os(o);c.minFilter=Xu,c.magFilter=$n,c.generateMipmaps=!0,c.anisotropy=16,c.needsUpdate=!0;const d=new ts({map:c,transparent:!0,depthTest:!1,depthWrite:!1}),f=new Kn(d),p=a?.8:.5;f.position.y=i+p;const m=a?2:1.6,b=o.height/o.width;return f.scale.set(m,m*b,1),f.name="statusBar",f.renderOrder=1100,f.userData.modelHeight=i,f.userData.baseIndicatorScale=m,f.userData.aspectRatio=b,f}createNameLabelSprite(e,t,n,a,i){const o=document.createElement("canvas"),l=o.getContext("2d");o.width=4096,o.height=i?2048:1024,this.drawNameLabel(l,o.width,o.height,e,t,a,i);const c=new os(o);c.minFilter=Xu,c.magFilter=$n,c.generateMipmaps=!0,c.anisotropy=16,c.needsUpdate=!0;const d=new ts({map:c,transparent:!0,depthTest:!1,depthWrite:!1}),f=new Kn(d),p=n?4.2:3.5;f.position.y=i?n?-1.2:-1:n?-.9:-.7;const m=o.height/o.width;return f.scale.set(p,p*m,1),f.name="nameLabelSprite",f.renderOrder=1200,f.userData.baseIndicatorScale=p,f.userData.aspectRatio=m,f}drawNameLabel(e,t,n,a,i,o,l){e.clearRect(0,0,t,n);const c=`#${i.toString(16).padStart(6,"0")}`,d=l?n*.3:n/2;let f=800;const p=300,m=o==="claude"||o==="codex",b=m?f*.42:0,x=m?f*.3:0,w=t-400-(m?b+x:0);e.font=`bold ${f}px Arial`;let k=e.measureText(a).width;for(;k>w&&f>p;)f-=40,e.font=`bold ${f}px Arial`,k=e.measureText(a).width;const S=m?f*.42:0,j=m?f*.3:0,C=S+j,N=k+C,_=t/2+C/2;if(e.textAlign="center",e.textBaseline="middle",e.shadowColor="rgba(0, 0, 0, 0.9)",e.shadowBlur=f*.12,e.shadowOffsetX=f*.04,e.shadowOffsetY=f*.04,e.strokeStyle="#000",e.lineWidth=f*.14,e.lineJoin="round",e.strokeText(a,_,d),e.shadowColor="transparent",e.shadowBlur=0,e.shadowOffsetX=0,e.shadowOffsetY=0,m){const D=t/2-N/2+S/2,L=d,M=o==="codex"?"#4a9eff":"#ff9e4a";e.beginPath(),e.arc(D,L,S/2,0,Math.PI*2),e.fillStyle=M,e.fill(),e.strokeStyle="rgba(255, 255, 255, 0.9)",e.lineWidth=Math.max(4,S*.1),e.stroke()}if(e.fillStyle=c,e.fillText(a,_,d),l){const D=Math.round(f*.85),L=n*.55;let M=l;const P=t-600;let E=D;for(e.font=`italic ${E}px "Segoe UI", Arial, sans-serif`;e.measureText(M).width>P&&E>200;)E-=40,e.font=`italic ${E}px "Segoe UI", Arial, sans-serif`;e.shadowColor="rgba(0, 0, 0, 0.8)",e.shadowBlur=E*.1,e.shadowOffsetX=E*.03,e.shadowOffsetY=E*.03,e.strokeStyle="#000",e.lineWidth=E*.12,e.lineJoin="round",e.strokeText(M,t/2,L),e.shadowColor="transparent",e.shadowBlur=0,e.shadowOffsetX=0,e.shadowOffsetY=0,e.fillStyle="rgba(190, 205, 225, 0.9)",e.fillText(M,t/2,L)}}drawStatusBar(e,t,n,a,i,o,l){e.clearRect(0,0,t,n);const c=t/2048;let d=80*c;l&&(e.font=`${400*c}px serif`,e.textAlign="center",e.textBaseline="top",e.fillText("👑",t/2,d),d+=440*c);const f=200*c,p=1350*c,m=(t-p)/2,b=d,x=200*c,w=m+x/2+30*c,k=b+f/2;let S;switch(i){case"working":S="#4a9eff";break;case"orphaned":S="#c060e0";break;case"error":S="#e05050";break;case"waiting":case"waiting_permission":S="#e0a030";break;default:S="#40c090"}e.beginPath(),e.arc(w,k,x/2,0,Math.PI*2),e.fillStyle=S,e.shadowColor=S,e.shadowBlur=20*c,e.fill(),e.shadowBlur=0,e.strokeStyle="rgba(0, 0, 0, 0.4)",e.lineWidth=4*c,e.stroke();const j=m+x+60*c,C=p-x-90*c,N=f-80*c,_=b+40*c,D=30*c;e.fillStyle="#0d0d14",e.beginPath(),e.roundRect(j,_,C,N,D),e.fill(),e.strokeStyle="rgba(80, 90, 110, 0.5)",e.lineWidth=4*c,e.stroke();const L=Math.max(0,Math.min(100,a))/100,M=8*c,P=Math.max(0,(C-M*2)*L);if(P>0){let O;L>.5?O="#00c896":L>.2?O="#e8a020":O="#e84040",e.fillStyle=O,e.beginPath(),e.roundRect(j+M,_+M,P,N-M*2,D-M),e.fill(),e.shadowColor=O,e.shadowBlur=12*c,e.fill(),e.shadowBlur=0}const E=`${Math.round(L*100)}%`;e.font=`bold ${180*c}px "Segoe UI", Arial, sans-serif`,e.textAlign="center",e.textBaseline="middle";const R=j+C/2,I=_+N/2;if(e.shadowColor="rgba(0, 0, 0, 0.8)",e.shadowBlur=8*c,e.shadowOffsetX=2*c,e.shadowOffsetY=2*c,e.strokeStyle="rgba(0, 0, 0, 0.9)",e.lineWidth=24*c,e.lineJoin="round",e.strokeText(E,R,I),e.shadowColor="transparent",e.shadowBlur=0,e.shadowOffsetX=0,e.shadowOffsetY=0,e.fillStyle="rgba(255, 255, 255, 0.95)",e.fillText(E,R,I),d+=f+60*c,i==="idle"&&o>0){const O=Math.floor((Date.now()-o)/1e3),B=this.animConfig.formatIdleTimeShort(O),q=this.animConfig.getIdleTimerColor(O);e.font=`bold ${140*c}px Arial`;const G=e.measureText(`⏱ ${B}`).width+140*c,K=180*c,X=(t-G)/2,$=d;e.fillStyle="rgba(0, 0, 0, 0.85)",e.beginPath(),e.roundRect(X,$,G,K,28*c),e.fill(),e.strokeStyle=q.border,e.lineWidth=12*c,e.stroke(),e.textAlign="center",e.textBaseline="middle",e.strokeStyle="#000",e.lineWidth=14*c,e.strokeText(`⏱ ${B}`,t/2,$+K/2),e.fillStyle=q.text,e.fillText(`⏱ ${B}`,t/2,$+K/2)}}createCombinedUISprite(e,t,n,a,i,o){const l=document.createElement("canvas"),c=l.getContext("2d");l.width=4096,l.height=2048,this.drawCombinedUI(c,l.width,l.height,e,t,n,a,i,o);const d=new os(l);d.minFilter=Xu,d.magFilter=$n,d.generateMipmaps=!0,d.anisotropy=16,d.needsUpdate=!0;const f=new ts({map:d,transparent:!0,depthTest:!1,depthWrite:!1}),p=new Kn(f);p.position.y=o?3.2:2.2;const m=o?3:2.4,b=l.height/l.width;return p.scale.set(m,m*b,1),p.name="combinedUI",p.userData.baseIndicatorScale=m,p.userData.aspectRatio=b,p}drawCombinedUI(e,t,n,a,i,o,l,c,d){e.clearRect(0,0,t,n);const f=`#${i.toString(16).padStart(6,"0")}`,p=t/2048;let m=80*p;d&&(e.font=`${288*p}px serif`,e.textAlign="center",e.textBaseline="top",e.fillText("👑",t/2,m),m+=320*p);const b=224*p,x=t-240*p;e.font=`bold ${b}px Arial`;let w=a;if(e.measureText(w).width>x){for(;w.length>3&&e.measureText(w+"...").width>x;)w=w.slice(0,-1);w+="..."}e.textAlign="center",e.textBaseline="middle";const S=m+b/2;e.strokeStyle="#000",e.lineWidth=24*p,e.lineJoin="round",e.strokeText(w,t/2,S),e.fillStyle=f,e.fillText(w,t/2,S),m+=b+64*p;const j=200*p,C=1350*p,N=(t-C)/2,_=m,D=176*p,L=N+D/2+24*p,M=_+j/2;let P;switch(l){case"working":P="#00a8ff";break;case"orphaned":P="#e040ff";break;case"error":P="#ff3030";break;case"waiting":case"waiting_permission":P="#ffc000";break;default:P="#00e090"}e.beginPath(),e.arc(L,M,D/2,0,Math.PI*2),e.fillStyle=P,e.fill(),e.shadowColor=P,e.shadowBlur=32*p,e.fill(),e.shadowBlur=0,e.strokeStyle="#000",e.lineWidth=12*p,e.stroke();const E=N+D+64*p,R=C-D-88*p,I=j-48*p,O=_+24*p;e.fillStyle="#000",e.beginPath(),e.roundRect(E,O,R,I,24*p),e.fill(),e.strokeStyle="#5a8a8a",e.lineWidth=8*p,e.stroke();const B=Math.max(0,Math.min(100,o))/100,q=16*p,H=Math.max(0,(R-q*2)*B);if(H>0){let $;B>.5?$="#00ff88":B>.2?$="#ffaa00":$="#ff3366",e.fillStyle=$,e.beginPath(),e.roundRect(E+q,O+q,H,I-q*2,16*p),e.fill(),e.shadowColor=$,e.shadowBlur=32*p,e.fill(),e.shadowBlur=0}const G=`${Math.round(B*100)}%`;e.font=`bold ${128*p}px Arial`,e.textAlign="center",e.textBaseline="middle";const K=E+R/2,X=O+I/2;if(e.strokeStyle="#000",e.lineWidth=28*p,e.lineJoin="round",e.strokeText(G,K,X),e.fillStyle="#fff",e.shadowColor="#000",e.shadowBlur=8*p,e.fillText(G,K,X),e.shadowBlur=0,m+=j+48*p,l==="idle"&&c>0){const $=Math.floor((Date.now()-c)/1e3),re=this.animConfig.formatIdleTimeShort($),le=this.animConfig.getIdleTimerColor($);e.font=`bold ${160*p}px Arial`;const ne=e.measureText(`⏱ ${re}`).width+160*p,W=216*p,ee=(t-ne)/2,J=m;e.fillStyle="rgba(0, 0, 0, 0.85)",e.beginPath(),e.roundRect(ee,J,ne,W,32*p),e.fill(),e.strokeStyle=le.border,e.lineWidth=12*p,e.stroke(),e.textAlign="center",e.textBaseline="middle",e.strokeStyle="#000",e.lineWidth=16*p,e.strokeText(`⏱ ${re}`,t/2,J+W/2),e.fillStyle=le.text,e.fillText(`⏱ ${re}`,t/2,J+W/2)}}createNameLabel(e,t,n=!1){const a=document.createElement("canvas"),i=a.getContext("2d"),o=72,l=32,c=100,d=256;a.width=2048,a.height=d,i.font=`bold ${o}px Arial`;const f=i.measureText(e).width,p=512,m=f+l*2+16;a.width=Math.max(p,m),i.clearRect(0,0,a.width,a.height),i.font=`bold ${o}px Arial`;const b=f+l*2,x=(a.width-b)/2,w=(a.height-c)/2;i.fillStyle="rgba(0, 0, 0, 0.8)",i.beginPath(),i.roundRect(x,w,b,c,12),i.fill(),i.fillStyle=`#${t.toString(16).padStart(6,"0")}`,i.textAlign="center",i.textBaseline="middle",i.fillText(e,a.width/2,a.height/2);const k=new os(a);k.minFilter=$n,k.magFilter=$n,k.needsUpdate=!0;const S=new ts({map:k,transparent:!0,depthTest:!1}),j=new Kn(S);j.position.y=n?-.2:-.3;const C=n?.75:.6,_=(n?1.5:1.2)*(a.width/512);return j.scale.set(_,C,1),j.name="nameLabel",j.renderOrder=1200,j.userData.aspectRatio=a.width/a.height,j}createManaBar(e,t,n=!1){const a=document.createElement("canvas"),i=a.getContext("2d");a.width=400,a.height=64,this.drawManaBar(i,a.width,a.height,e,t);const o=new os(a);o.minFilter=$n,o.magFilter=$n,o.needsUpdate=!0;const l=new ts({map:o,transparent:!0,depthTest:!1}),c=new Kn(l);return c.position.y=n?3:2,c.scale.set(n?1.4:1.1,n?.22:.18,1),c.name="manaBar",c}drawManaBar(e,t,n,a,i){const o=Math.max(0,Math.min(100,a))/100;e.clearRect(0,0,t,n);const l=n/32,c=20*l,d=6*l,f=c+d+4*l,p=6*l,m=t-f-10*l,b=n-12*l,x=6*l;let w;switch(i){case"working":w="#4a9eff";break;case"orphaned":w="#ff00ff";break;case"error":w="#ff4a4a";break;case"waiting":case"waiting_permission":w="#ffcc00";break;default:w="#4aff9e"}const k=c/2+4*l,S=n/2;e.beginPath(),e.arc(k,S,c/2,0,Math.PI*2),e.fillStyle=w,e.fill(),e.shadowColor=w,e.shadowBlur=8*l,e.fill(),e.shadowBlur=0,e.strokeStyle="#000000",e.lineWidth=2*l,e.stroke(),e.fillStyle="#000000",e.beginPath(),e.roundRect(f,p,m,b,x),e.fill(),e.strokeStyle="#5a8a8a",e.lineWidth=2*l,e.stroke();const j=Math.max(0,(m-4*l)*o);if(j>0){let N,_;o>.5?(N="#00ff88",_="#00ff88"):o>.2?(N="#ffaa00",_="#ffaa00"):(N="#ff3366",_="#ff3366"),e.fillStyle=N,e.beginPath(),e.roundRect(f+2*l,p+2*l,j,b-4*l,x-2),e.fill(),e.shadowColor=_,e.shadowBlur=8*l,e.fill(),e.shadowBlur=0}const C=`${Math.round(o*100)}%`;e.font=`bold ${Math.round(24*l)}px Arial`,e.textAlign="center",e.textBaseline="middle",e.strokeStyle="#000000",e.lineWidth=4*l,e.strokeText(C,t/2,n/2),e.fillStyle="#ffffff",e.shadowColor="#ffffff",e.shadowBlur=2*l,e.fillText(C,t/2,n/2),e.shadowBlur=0}createIdleTimer(e,t,n=!1){const a=document.createElement("canvas"),i=a.getContext("2d");a.width=400,a.height=64,this.drawIdleTimer(i,a.width,a.height,e,t);const o=new os(a);o.minFilter=$n,o.magFilter=$n,o.needsUpdate=!0;const l=new ts({map:o,transparent:!0,depthTest:!1}),c=new Kn(l);return c.position.set(0,n?3.5:2.4,0),c.scale.set(n?1.4:1.1,n?.22:.18,1),c.name="idleTimer",c}createBossCrown(){const e=document.createElement("canvas"),t=e.getContext("2d");e.width=128,e.height=128,t.clearRect(0,0,e.width,e.height),t.font="96px serif",t.textAlign="center",t.textBaseline="middle",t.fillText("👑",e.width/2,e.height/2);const n=new os(e);n.minFilter=$n,n.magFilter=$n,n.needsUpdate=!0;const a=new ts({map:n,transparent:!0,depthTest:!1}),i=new Kn(a);return i.position.set(0,4,0),i.scale.set(.8,.8,1),i.name="bossCrown",i}drawIdleTimer(e,t,n,a,i){if(e.clearRect(0,0,t,n),a!=="idle"||i<=0)return;const o=Math.floor((Date.now()-i)/1e3),l=this.animConfig.formatIdleTimeShort(o),c=this.animConfig.getIdleTimerColor(o),d=n/80,f=24*d;e.font=`bold ${Math.round(44*d)}px Arial`;const m=e.measureText(`⏱ ${l}`).width+f*2,b=n-12*d,x=(t-m)/2,w=6*d;e.fillStyle="rgba(0, 0, 0, 0.9)",e.beginPath(),e.roundRect(x,w,m,b,10*d),e.fill(),e.strokeStyle=c.border,e.lineWidth=3*d,e.stroke(),e.textAlign="center",e.textBaseline="middle",e.strokeStyle="#000000",e.lineWidth=4*d,e.strokeText(`⏱ ${l}`,t/2,n/2),e.fillStyle=c.text,e.fillText(`⏱ ${l}`,t/2,n/2)}getIdleTimerCanvas(){return this.idleTimerCanvas||(this.idleTimerCanvas=document.createElement("canvas"),this.idleTimerCanvas.width=400,this.idleTimerCanvas.height=64,this.idleTimerCtx=this.idleTimerCanvas.getContext("2d")),{canvas:this.idleTimerCanvas,ctx:this.idleTimerCtx}}getManaBarCanvas(){return this.manaBarCanvas||(this.manaBarCanvas=document.createElement("canvas"),this.manaBarCanvas.width=400,this.manaBarCanvas.height=64,this.manaBarCtx=this.manaBarCanvas.getContext("2d")),{canvas:this.manaBarCanvas,ctx:this.manaBarCtx}}updateIdleTimer(e,t,n){const a=e.getObjectByName("idleTimer");if(!a)return;const i=a.material;if(!i.map)return;const o=i.map.image;if(!o||!(o instanceof HTMLCanvasElement))return;const l=o.getContext("2d");l&&(this.drawIdleTimer(l,o.width,o.height,t,n),i.map.needsUpdate=!0)}updateManaBar(e,t,n){const a=e.getObjectByName("manaBar");if(!a)return;const i=a.material;if(!i.map)return;const o=i.map.image;if(!o||!(o instanceof HTMLCanvasElement))return;const l=o.getContext("2d");l&&(this.drawManaBar(l,o.width,o.height,t,n),i.map.needsUpdate=!0)}updateNameLabel(e,t,n,a){var f;const i=e.getObjectByName("nameLabel");i&&((f=i.material.map)==null||f.dispose(),i.material.dispose(),e.remove(i));const o=ri[n],l=(o==null?void 0:o.color)??16777215,c=n==="boss"||e.userData.isBoss,d=this.createNameLabelSprite(t,l,c,a);e.add(d)}updateVisuals(e,t,n,a,i){var m;const o=t.isBoss===!0||t.class==="boss",l=Math.round(LM(t)),c=e.userData;if(c._cachedStatus!==t.status||c._cachedPercent!==l||c._cachedIsBoss!==o||t.status==="idle"&&c._cachedIdleBucket!==Math.floor((Date.now()-t.lastActivity)/6e4)){c._cachedStatus=t.status,c._cachedPercent=l,c._cachedIsBoss=o,c._cachedIdleBucket=t.status==="idle"?Math.floor((Date.now()-t.lastActivity)/6e4):0;const b=e.getObjectByName("statusBar");if(b){const S=b.material;if(S.map){const j=S.map.image;if(j instanceof HTMLCanvasElement){const C=j.getContext("2d");C&&(this.drawStatusBar(C,j.width,j.height,l,t.status,t.lastActivity,o),S.map.needsUpdate=!0)}}}const x=e.getObjectByName("combinedUI");if(x){const S=x.material;if(S.map){const j=S.map.image;if(j instanceof HTMLCanvasElement){const C=j.getContext("2d");C&&(this.drawCombinedUI(C,j.width,j.height,t.name,i,l,t.status,t.lastActivity,o),S.map.needsUpdate=!0)}}}const w=!!e.getObjectByName("statusBar"),k=!!e.getObjectByName("combinedUI");!w&&!k&&(this.updateManaBar(e,l,t.status),this.updateIdleTimer(e,t.status,t.lastActivity))}const f=t.taskLabel;if(c.agentName!==t.name||c._cachedTaskLabel!==f){const b=e.getObjectByName("nameLabelSprite");if(b){if(!!c._cachedTaskLabel!==!!f){const j=b.material;(m=j.map)==null||m.dispose(),j.dispose(),e.remove(b);const C=t.isBoss===!0||t.class==="boss",N=this.createNameLabelSprite(t.name,i,C,t.provider,f);e.add(N)}else{const j=b.material;if(j.map){const C=j.map.image;if(C instanceof HTMLCanvasElement){const N=C.getContext("2d");N&&(this.drawNameLabel(N,C.width,C.height,t.name,i,t.provider,f),j.map.needsUpdate=!0)}}}c.agentName=t.name,c._cachedTaskLabel=f}const x=!!e.getObjectByName("statusBar"),w=!!e.getObjectByName("combinedUI");!x&&!w&&(this.updateNameLabel(e,t.name,t.class,t.provider),c.agentName=t.name,c._cachedTaskLabel=f)}const p=e.getObjectByName("selectionRing");if(p){const b=p.material;if(n){const x=ri[t.class];b.color.setHex((x==null?void 0:x.color)??i),b.opacity=t.isBoss===!0||t.class==="boss"?.34:.28}else a?(b.color.setHex(16766720),b.opacity=.2):b.opacity=0}}}class VO{constructor(e){U(this,"modelLoader");U(this,"animConfig");U(this,"visualConfig");this.modelLoader=new WO(e),this.animConfig=new qO,this.visualConfig=new YO(this.animConfig)}setCustomClasses(e){this.modelLoader.setCustomClasses(e)}createAgentMesh(e){const t=new Hn;t.userData.agentId=e.id;const n=this.modelLoader.getClassConfig(e.class),a=e.isBoss===!0||e.class==="boss",{body:i,mixer:o,animations:l}=this.modelLoader.createCharacterBody(e,n.color);t.add(i);const c=this.modelLoader.calculateModelHeight(i,a),d=this.visualConfig.createSelectionRing(n.color,a);t.add(d);const f=LM(e),p=this.visualConfig.createStatusBarSprite(f,e.status,e.lastActivity,a,c);t.add(p);const m=this.visualConfig.createNameLabelSprite(e.name,n.color,a,e.provider,e.taskLabel);t.add(m),t.userData.agentName=e.name,t.userData.agentClass=e.class,t.userData.isBoss=a,t.position.set(e.position.x,e.position.y,e.position.z);const b=a?1:.75,x=a?3.5:2.5,w=new Xn(b,b,x,8),k=new Ke({visible:!1,transparent:!0,opacity:0}),S=new Ie(w,k);return S.position.y=x/2,S.name="clickHitbox",t.add(S),{group:t,mixer:o,animations:l,currentAction:null}}updateAgentClass(e,t){const{group:n}=e,a=n.userData.agentClass;if(a===t.class)return null;console.log(`[CharacterFactory] Agent ${t.name} class changed: ${a} -> ${t.class}`);const i=this.modelLoader.replaceAgentModel(e,t);return i&&this.visualConfig.updateNameLabel(n,t.name,t.class),i}updateVisuals(e,t,n,a=!1){const i=this.modelLoader.getClassConfig(t.class);this.visualConfig.updateVisuals(e,t,n,a,i.color)}upgradeToCharacterModel(e,t){return this.modelLoader.upgradeToCharacterModel(e,t)}disposeAgentMesh(e){this.modelLoader.disposeAgentMesh(e)}getStatusColor(e){return this.visualConfig.getStatusColor(e)}updateIdleTimer(e,t,n){this.visualConfig.updateIdleTimer(e,t,n)}updateManaBar(e,t,n){this.visualConfig.updateManaBar(e,t,n)}}const rs={STATIC:"static",IDLE:"idle",WALK:"walk",JUMP:"jump",SIT:"sit",DIE:"die",EMOTE_YES:"emote-yes",EMOTE_NO:"emote-no"},zj={height:.5,speed:1.5};class KO{constructor(){U(this,"movements",new Map);U(this,"jumpingAgents",new Map);U(this,"animatingAgents",new Set);U(this,"jumpTime",0)}isMoving(e){return this.movements.has(e)}hasActiveMovements(){return this.movements.size>0}resolveAnimationName(e,t){var i;const n=e.group.getObjectByName("characterBody"),a=(i=n==null?void 0:n.userData)==null?void 0:i.animationMapping;if(a){const o=a[t];if(o&&e.animations.has(o))return o;if(o&&e.animations.has(o.toLowerCase()))return o.toLowerCase()}switch(t){case"idle":return rs.IDLE;case"walk":return rs.WALK;case"working":return rs.JUMP;default:return rs.IDLE}}playAnimationForState(e,t,n){const a=this.resolveAnimationName(e,t);this.playAnimation(e,a,n)}startMovement(e,t,n){const a=t.group.position.clone(),i=new vt(n.x,n.y,n.z),l=a.distanceTo(i)/$O*1e3;this.movements.delete(e),this.movements.set(e,{agentId:e,startPos:a,endPos:i,startTime:performance.now(),duration:Math.max(l,200)});const c=this.resolveAnimationName(t,"walk");this.playAnimation(t,c),this.faceDirection(t,a,i)}cancelMovement(e,t){this.movements.delete(e);const n=this.resolveAnimationName(t,"idle");this.playAnimation(t,n)}playAnimation(e,t,n){if(!e.mixer)return;const a=e.group.userData.agentId;let i=e.animations.get(t);if(i||(i=e.animations.get(t.toLowerCase())),!i){console.warn(`[MovementAnimator] Animation not found: ${t}, available:`,Array.from(e.animations.keys()));const f=this.jumpingAgents.get(a);if(this.jumpingAgents.delete(a),f!==void 0){const p=e.group.getObjectByName("characterBody");p&&(p.position.y=f)}e.currentAction&&(e.currentAction.fadeOut(.2),e.currentAction=null);return}console.log(`[MovementAnimator] Playing: ${t}`);const{loop:o=!0,fadeTime:l=.2,timeScale:c=1}=n??{},d=e.mixer.clipAction(i);if(d.setLoop(o?_P:JA,1/0),d.clampWhenFinished=!o,d.timeScale=c,e.currentAction&&e.currentAction!==d?(e.currentAction.fadeOut(l),d.reset().fadeIn(l).play()):d.reset().play(),e.currentAction=d,this.animatingAgents.add(a),t===rs.JUMP&&o){if(!this.jumpingAgents.has(a)){const f=e.group.getObjectByName("characterBody"),p=(f==null?void 0:f.position.y)??0;this.jumpingAgents.set(a,p)}}else{const f=this.jumpingAgents.get(a);if(this.jumpingAgents.delete(a),f!==void 0){const p=e.group.getObjectByName("characterBody");p&&(p.position.y=f)}}}stopAnimation(e){this.animatingAgents.delete(e),this.jumpingAgents.delete(e)}faceDirection(e,t,n){const a=new vt().subVectors(n,t).normalize();if(a.x!==0||a.z!==0){const i=e.group.getObjectByName("characterBody");if(i){const o=Math.atan2(a.x,a.z);i.rotation.y=o}}}update(e,t){var i;const n=performance.now(),a=[];this.jumpTime+=t;for(const o of this.animatingAgents){const l=e.get(o);(i=l==null?void 0:l.mixer)==null||i.update(t)}for(const[o,l]of this.jumpingAgents){const c=e.get(o);if(!c)continue;const d=c.group.getObjectByName("characterBody");if(d){const f=Math.abs(Math.sin(this.jumpTime*zj.speed*Math.PI*2))*zj.height;d.position.y=l+f}}for(const[o,l]of this.movements){const c=e.get(o);if(!c){a.push(o);continue}const d=n-l.startTime;let f=Math.min(d/l.duration,1);f=this.easeOutCubic(f),c.group.position.lerpVectors(l.startPos,l.endPos,f),this.smoothRotateToDirection(c,l.startPos,l.endPos,t),f>=1&&(a.push(o),c.group.position.copy(l.endPos))}for(const o of a)this.movements.delete(o);return a}smoothRotateToDirection(e,t,n,a){const i=new vt().subVectors(n,t).normalize();if(i.x===0&&i.z===0)return;const o=e.group.getObjectByName("characterBody");if(!o)return;const l=Math.atan2(i.x,i.z),c=o.rotation.y,d=l-c,f=Math.atan2(Math.sin(d),Math.cos(d)),p=10;o.rotation.y+=f*Math.min(1,p*a)}easeOutCubic(e){return 1-Math.pow(1-e,3)}get activeCount(){return this.movements.size}clear(){this.movements.clear(),this.jumpingAgents.clear(),this.animatingAgents.clear(),this.jumpTime=0}}const fs={Read:"📖",Write:"✏️",Edit:"📝",Bash:"💻",Glob:"🔍",Grep:"🔎",Task:"📋",Agent:"🤖",WebFetch:"🌐",WebSearch:"🌍",TodoWrite:"✅",NotebookEdit:"📓",AskFollowupQuestion:"❓",AskUserQuestion:"❓",AttemptCompletion:"✨",ListFiles:"📂",SearchFiles:"🔎",ExecuteCommand:"⚙️",default:"⚡"},XO={Read:"tools:display.toolNames.read",Write:"tools:display.toolNames.write",Edit:"tools:display.toolNames.edit",Bash:"tools:display.toolNames.bash",Glob:"tools:display.toolNames.glob",Grep:"tools:display.toolNames.grep",Task:"tools:display.toolNames.task",Agent:"tools:display.toolNames.agent",WebFetch:"tools:display.toolNames.webFetch",WebSearch:"tools:display.toolNames.webSearch",TodoWrite:"tools:display.toolNames.todoWrite",NotebookEdit:"tools:display.toolNames.notebookEdit",AskFollowupQuestion:"tools:display.toolNames.askFollowupQuestion",AskUserQuestion:"tools:display.toolNames.askUserQuestion",AttemptCompletion:"tools:display.toolNames.attemptCompletion",ListFiles:"tools:display.toolNames.listFiles",SearchFiles:"tools:display.toolNames.searchFiles",ExecuteCommand:"tools:display.toolNames.executeCommand"};function OM(s,e){const t=XO[s];return t&&e(t,{defaultValue:s})||s}function Up(s){return(typeof s=="string"?new Date(s):new Date(s)).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}function IM(s,e){var t;try{const n=JSON.parse(e);switch(s){case"Read":case"Write":case"Edit":case"NotebookEdit":{const a=n.file_path||n.path||n.notebook_path;if(a)return a;break}case"Bash":{const a=n.command;if(a)return BM(a);break}case"Grep":{const a=n.pattern,i=n.path;if(a&&i)return`"${a}" in ${i}`;if(a)return`"${a}"`;break}case"Glob":{const a=n.pattern,i=n.path;if(a&&i)return`${a} in ${i}`;if(a)return a;break}case"WebFetch":{const a=n.url;if(a)return a;break}case"WebSearch":{const a=n.query;if(a)return`"${a}"`;break}case"Task":case"Agent":{const a=n.description,i=n.subagent_type;if(a)return i?`[${i}] ${a}`:a;if(n.prompt)return n.prompt;break}case"ExitPlanMode":case"EnterPlanMode":{const a=n.allowedPrompts;return Array.isArray(a)&&a.length>0?a.map(i=>i.prompt||i.tool||"").filter(Boolean).join(", "):s==="ExitPlanMode"&&typeof n.plan=="string"&&n.plan.trim().length>0?n.plan.trim():s==="ExitPlanMode"?"Plan ready":"Entering plan mode"}case"TodoWrite":{const a=n.todos;if(Array.isArray(a)&&a.length>0){const i=a.filter(d=>d.status==="completed").length,o=a.filter(d=>d.status==="in_progress").length,l=a.filter(d=>d.status==="pending").length,c=[];return i>0&&c.push(`${i} done`),o>0&&c.push(`${o} active`),l>0&&c.push(`${l} pending`),`${a.length} items (${c.join(", ")})`}break}case"AskUserQuestion":case"AskFollowupQuestion":{const a=n.questions||n.question;if(a){const i=Array.isArray(a)?(t=a[0])==null?void 0:t.question:a;if(i)return i}break}default:{for(const[,a]of Object.entries(n))if(typeof a=="string"&&a.length>0)return a;break}}}catch{}return null}function ZO(s){if(!s.includes("curl")||!s.includes("/api/exec"))return null;const e=[],t=[/(?:-d|--data|--data-raw)\s+'((?:\\'|[^'])*)'/g,/(?:-d|--data|--data-raw)\s+"((?:\\"|[^"])*)"/g];for(const n of t){let a;for(;(a=n.exec(s))!==null;)a[1]&&e.push(a[1])}for(const n of e){const a=[n,n.replace(/\\"/g,'"'),n.replace(/\\'/g,"'"),n.replace(/\\"/g,'"').replace(/\\\\/g,"\\")];for(const i of a){const o=i.trim();if(!(!o.startsWith("{")||!o.endsWith("}")))try{const l=JSON.parse(o);if(typeof l.command=="string"&&l.command.length>0)return l.command}catch{}}}return null}function BM(s){return ZO(s)||s}const Fj=/(^|[\s("'`])((?:\.{1,2}\/|~\/|\/)?[A-Za-z0-9._-]+(?:\/[A-Za-z0-9._-]+)*\.[A-Za-z0-9._-]+(?::\d+(?::\d+)?)?)/g;function QO(s){return!s||s.startsWith("-")||s.includes("://")||s.includes("*")?!1:s.includes(".")&&!s.endsWith(".")}function zM(s){if(!s)return[{text:""}];const e=[];let t=0;Fj.lastIndex=0;let n;for(;(n=Fj.exec(s))!==null;){const a=n[0],i=n[1]||"",o=n[2]||"",l=n.index;l>t&&e.push({text:s.slice(t,l)}),i&&e.push({text:i}),QO(o)?e.push({text:o,fileRef:o}):e.push({text:o}),t=l+a.length}return t<s.length&&e.push({text:s.slice(t)}),e.length>0?e:[{text:s}]}const Gp="tide-file://",JO=/(^|[\s(>])((?:\.\.?\/|\/)?(?:[A-Za-z0-9._-]+\/)*[A-Za-z0-9._-]+(?:\.[A-Za-z0-9._-]+)+(?:#L\d+(?:C\d+)?)?(?::\d+(?::\d+)?)?)(?=$|[\s),.;])/g,eI=/`((?:\.\.?\/|\/)?(?:[A-Za-z0-9._-]+\/)*[A-Za-z0-9._-]+(?:\.[A-Za-z0-9._-]+)+(?:#L\d+(?:C\d+)?)?(?::\d+(?::\d+)?)?)`/g,tI=/\.(com|org|net|io|dev|app|co|me|info|biz|us|uk|de|fr|jp|cn|ru|edu|gov|mil|int|xyz|tech|online|site|store|blog|cloud|ai|gg|tv|cc|sh|fm|to|ly|gl|so|is|it|at|nl|ch|se|no|fi|dk|be|cz|pl|pt|br|mx|ar|cl|in|au|nz|za|sg|hk|tw|kr|id|ph|th|vn|my)(?:[:/\s#?]|$)/i;function $j(s){if(!s||s.includes("://")||s.startsWith("www.")||s.includes("@"))return!1;const e=s.split("/")[0];return tI.test(e)?!1:s.includes(".")&&!s.endsWith(".")}function mb(s){if(!s||!s.includes("."))return s;const e=s.split(`
|
|
44
44
|
`);let t=!1;return e.map(a=>{if(a.trimStart().startsWith("```"))return t=!t,a;if(t)return a;const o=a.replace(eI,(l,c)=>{if(!$j(c))return l;const d=encodeURIComponent(c);return`[\`${c}\`](${Gp}${d})`});return o.replace(JO,(l,c,d,f)=>{const p=f+c.length,m=p>0?o[p-1]:"",b=p+d.length<o.length?o[p+d.length]:"";if(m==="("&&p>1&&o[p-2]==="]"||m==="["||b==="]"||!$j(d))return l;const x=encodeURIComponent(d);return`${c}[${d}](${Gp}${x})`})}).join(`
|
|
45
45
|
`)}function nI(s){if(!s||!s.startsWith(Gp))return null;const e=s.slice(Gp.length);if(!e)return null;try{return decodeURIComponent(e)}catch{return e}}function vc(s){return s.startsWith('"')&&s.endsWith('"')||s.startsWith("'")&&s.endsWith("'")?s.slice(1,-1):s}function FM(s){const e=s.trim();if(!e)return null;let t,n=e;const a=e.match(/^(\S+)\s+-lc\s+([\s\S]+)$/);if(a&&(t=`${a[1]} -lc`,n=vc(a[2].trim())),!/\brg\s+--files\b/.test(n)||!/\|\s*rg\b/.test(n))return null;const i=n.match(/\|\s*rg\b\s+(.+)$/);if(!i)return null;const o=i[1].trim();if(!o)return null;const l=o.replace(/^(?:-\S+\s+)*/,"").trim(),c=vc(l||o);return c?{shellPrefix:t,commandBody:n,searchTerm:c}:null}function $M(s){const e=s.trim();if(!e)return null;let t,n=e;const a=e.match(/^(\S+)\s+-lc\s+([\s\S]+)$/);a&&(t=`${a[1]} -lc`,n=vc(a[2].trim()));const i=/\bcurl\b[\s\S]*\/api\/notify\b/.test(n),o=/\bgdbus\b[\s\S]*org\.freedesktop\.Notifications\.Notify\b/.test(n);if(!i&&!o)return null;let l,c;const d=n.match(/-d\s+((['"])([\s\S]*?)\2)/);if(d){const f=vc(d[1]).replace(/\\"/g,'"'),p=f.match(/"title"\s*:\s*"([^"]*)"/),m=f.match(/"message"\s*:\s*"([^"]*)"/);p!=null&&p[1]&&(l=p[1]),m!=null&&m[1]&&(c=m[1])}if(!l||!c){const f=n.match(/Notifications\.Notify[\s\S]*?\s'[^']*'\s+\d+\s+'[^']*'\s+'([^']*)'\s+'([^']*)'/);!l&&(f!=null&&f[1])&&(l=f[1]),!c&&(f!=null&&f[2])&&(c=f[2])}return{shellPrefix:t,commandBody:n,title:l,message:c,viaCurl:i,viaGdbus:o}}function HM(s){const e=s.trim();if(!e)return null;let t,n=e;const a=e.match(/^(\S+)\s+-lc\s+([\s\S]+)$/);if(a&&(t=`${a[1]} -lc`,n=vc(a[2].trim())),!/\bcurl\b/.test(n)||!/PATCH/.test(n)||!/\/api\/agents\//.test(n))return null;const i=n.match(/-d\s+((['"])([\s\S]*?)\2)/);if(!i)return null;const l=vc(i[1]).replace(/\\"/g,'"').match(/"taskLabel"\s*:\s*"([^"]*)"/);return l!=null&&l[1]?{shellPrefix:t,commandBody:n,taskLabel:l[1]}:null}const od=class od{constructor(e){U(this,"scene");U(this,"moveOrderEffects",[]);U(this,"speechBubbles",[]);U(this,"sleepingEffects",[]);U(this,"waitingPermissionEffects",[]);U(this,"delegationEffects",[]);U(this,"subagentEffects",[]);U(this,"agentMeshes",new Map);U(this,"ringGeometry",null);U(this,"pulseGeometry",null);U(this,"chevronGeometry",null);U(this,"delegationPaperTexture",null);U(this,"sleepingBubbleTexture",null);U(this,"waitingPermissionTexture",null);U(this,"delegationSpritePool",[]);U(this,"moveOrderGroupPool",[]);U(this,"_needsUpdate",!1);U(this,"camera",null);U(this,"indicatorScale",1);this.scene=e,this.initializeCachedResources()}get needsUpdate(){return this._needsUpdate||this.moveOrderEffects.length>0||this.speechBubbles.length>0||this.sleepingEffects.length>0||this.waitingPermissionEffects.length>0||this.delegationEffects.length>0||this.subagentEffects.length>0}markDirty(){this._needsUpdate=!0}clearDirty(){this._needsUpdate=!1}initializeCachedResources(){this.ringGeometry=new ol(.3,.4,32),this.pulseGeometry=new ol(.1,.2,32);const e=new DP;e.moveTo(0,.15),e.lineTo(.12,.35),e.lineTo(.08,.35),e.lineTo(0,.2),e.lineTo(-.08,.35),e.lineTo(-.12,.35),e.closePath(),this.chevronGeometry=new PP(e),this.createDelegationPaperTexture(),this.createSleepingBubbleTexture(),this.createWaitingPermissionTexture(),this.initializePools()}initializePools(){for(let e=0;e<od.POOL_SIZE;e++)if(this.delegationPaperTexture){const t=new ts({map:this.delegationPaperTexture,transparent:!0,opacity:0,depthTest:!1}),n=new Kn(t);n.scale.set(.3,.3,1),n.visible=!1,this.delegationSpritePool.push({sprite:n,inUse:!1})}for(let e=0;e<od.POOL_SIZE;e++){const t=this.createMoveOrderGroup();t.visible=!1,this.moveOrderGroupPool.push(t)}}createMoveOrderGroup(){const e=new Hn,t=new Ke({color:4915102,side:Ls,transparent:!0,opacity:.8}),n=new Ie(this.ringGeometry,t);n.rotation.x=-Math.PI/2,n.name="ring",e.add(n);const a=new Ke({color:4915102,side:Ls,transparent:!0,opacity:.6}),i=new Ie(this.pulseGeometry,a);i.rotation.x=-Math.PI/2,i.name="pulse",e.add(i);for(let o=0;o<3;o++){const l=new Ke({color:4915102,side:Ls,transparent:!0,opacity:.9}),c=new Ie(this.chevronGeometry,l);c.rotation.x=-Math.PI/2,c.position.y=.5+o*.25,c.name=`chevron${o}`,e.add(c)}return e}getDelegationSprite(){for(const n of this.delegationSpritePool)if(!n.inUse)return n.inUse=!0,n.sprite.visible=!0,n.sprite.material.opacity=1,n.sprite;const e=new ts({map:this.delegationPaperTexture,transparent:!0,opacity:1,depthTest:!1}),t=new Kn(e);return t.scale.set(.3,.3,1),t}returnDelegationSprite(e){for(const t of this.delegationSpritePool)if(t.sprite===e){t.inUse=!1,t.sprite.visible=!1,this.scene.remove(e);return}this.scene.remove(e),e.material.dispose()}getMoveOrderGroup(){for(const e of this.moveOrderGroupPool)if(!e.visible)return e.visible=!0,e.traverse(t=>{if(t instanceof Ie){const n=t.material;n.opacity=t.name==="ring"?.8:t.name==="pulse"?.6:.9}}),e;return this.createMoveOrderGroup()}returnMoveOrderGroup(e){this.moveOrderGroupPool.includes(e)?(e.visible=!1,this.scene.remove(e)):(this.scene.remove(e),e.traverse(n=>{n instanceof Ie&&n.material.dispose()}))}createDelegationPaperTexture(){const e=document.createElement("canvas"),t=e.getContext("2d");e.width=64,e.height=64,t.fillStyle="#ffffff",t.strokeStyle="#ffd700",t.lineWidth=2,t.save(),t.translate(32,32),t.rotate(-.2),t.beginPath(),t.moveTo(-12,-18),t.lineTo(8,-18),t.lineTo(12,-14),t.lineTo(12,18),t.lineTo(-12,18),t.closePath(),t.fill(),t.stroke(),t.beginPath(),t.moveTo(8,-18),t.lineTo(8,-14),t.lineTo(12,-14),t.strokeStyle="#cccccc",t.stroke(),t.fillStyle="#f0f0f0",t.fill(),t.strokeStyle="#888888",t.lineWidth=1;for(let n=0;n<4;n++){const a=-8+n*6,i=n===3?10:16;t.beginPath(),t.moveTo(-8,a),t.lineTo(-8+i,a),t.stroke()}t.restore(),this.delegationPaperTexture=new os(e),this.delegationPaperTexture.minFilter=$n,this.delegationPaperTexture.magFilter=$n}createSleepingBubbleTexture(){const e=document.createElement("canvas"),t=e.getContext("2d");e.width=128,e.height=128,t.fillStyle="rgba(40, 42, 54, 0.95)",t.strokeStyle="#bd93f9",t.lineWidth=2;const n=64,a=50,i=40;t.beginPath(),t.arc(n,a,i,0,Math.PI*2),t.fill(),t.stroke(),t.beginPath(),t.arc(30,95,10,0,Math.PI*2),t.fill(),t.stroke(),t.beginPath(),t.arc(18,115,6,0,Math.PI*2),t.fill(),t.stroke(),t.fillStyle="#8be9fd",t.font="bold 28px Arial",t.textAlign="center",t.textBaseline="middle",t.shadowColor="#8be9fd",t.shadowBlur=4,t.fillText("ZZZ",n,a),this.sleepingBubbleTexture=new os(e),this.sleepingBubbleTexture.minFilter=$n,this.sleepingBubbleTexture.magFilter=$n}createWaitingPermissionTexture(){const e=document.createElement("canvas"),t=e.getContext("2d");e.width=128,e.height=128,t.fillStyle="rgba(40, 42, 54, 0.95)",t.strokeStyle="#ffcc00",t.lineWidth=2;const n=64,a=50,i=40;t.beginPath(),t.arc(n,a,i,0,Math.PI*2),t.fill(),t.stroke(),t.beginPath(),t.arc(30,95,10,0,Math.PI*2),t.fill(),t.stroke(),t.beginPath(),t.arc(18,115,6,0,Math.PI*2),t.fill(),t.stroke(),t.fillStyle="#ffcc00",t.font="bold 32px Arial",t.textAlign="center",t.textBaseline="middle",t.shadowColor="#ffcc00",t.shadowBlur=6,t.fillText("🔒",n,a),this.waitingPermissionTexture=new os(e),this.waitingPermissionTexture.minFilter=$n,this.waitingPermissionTexture.magFilter=$n}setAgentMeshes(e){this.agentMeshes.clear();for(const[t,n]of e)this.agentMeshes.set(t,n.group)}updateSleepingEffect(e,t){const n=this.sleepingEffects.find(a=>a.agentId===e);t&&!n?this.createSleepingEffect(e):!t&&n&&this.removeSleepingEffect(e)}updateWaitingPermissionEffect(e,t){const n=this.waitingPermissionEffects.find(a=>a.agentId===e);t&&!n?this.createWaitingPermissionEffect(e):!t&&n&&this.removeWaitingPermissionEffect(e)}createSleepingEffect(e){const t=this.agentMeshes.get(e);if(!t||!this.sleepingBubbleTexture)return;const n=[],a=new ts({map:this.sleepingBubbleTexture,transparent:!0,opacity:.95,depthTest:!1}),i=new Kn(a);i.scale.set(.12,.12,1),i.userData.isBubble=!0,i.position.copy(t.position),i.position.y=2,i.position.x+=.15,this.scene.add(i),n.push(i),this.sleepingEffects.push({sprites:n,agentId:e,startTime:performance.now()}),this.markDirty()}removeSleepingEffect(e){const t=this.sleepingEffects.findIndex(n=>n.agentId===e);if(t!==-1){const n=this.sleepingEffects[t];for(const a of n.sprites)this.scene.remove(a),a.material.dispose();this.sleepingEffects.splice(t,1),this.markDirty()}}createWaitingPermissionEffect(e){const t=this.agentMeshes.get(e);if(!t||!this.waitingPermissionTexture)return;const n=[],a=new ts({map:this.waitingPermissionTexture,transparent:!0,opacity:.95,depthTest:!1}),i=new Kn(a);i.scale.set(.12,.12,1),i.userData.isBubble=!0,i.position.copy(t.position),i.position.y=2,i.position.x+=.15,this.scene.add(i),n.push(i),this.waitingPermissionEffects.push({sprites:n,agentId:e,startTime:performance.now()}),this.markDirty()}removeWaitingPermissionEffect(e){const t=this.waitingPermissionEffects.findIndex(n=>n.agentId===e);if(t!==-1){const n=this.waitingPermissionEffects[t];for(const a of n.sprites)this.scene.remove(a),a.material.dispose();this.waitingPermissionEffects.splice(t,1),this.markDirty()}}createDelegationEffect(e,t){const n=this.agentMeshes.get(e),a=this.agentMeshes.get(t);if(!n||!a||!this.delegationPaperTexture){console.log("[EffectsManager] Cannot create delegation effect - missing agent meshes or texture");return}const i=this.getDelegationSprite(),o=new vt(n.position.x,n.position.y+1.5,n.position.z),l=new vt(a.position.x,a.position.y+1.2,a.position.z);i.position.copy(o),this.scene.add(i),this.delegationEffects.push({sprite:i,startPosition:o.clone(),endPosition:l.clone(),startTime:performance.now(),duration:800}),this.markDirty()}createSpeechBubble(e,t,n){const a=this.agentMeshes.get(e);if(!a)return;this.removeSpeechBubble(e);const i=fs[t]||"🔧",o=this.formatToolParams(t,n),l=document.createElement("canvas"),c=l.getContext("2d");l.width=400,l.height=100;const d=o?`${i} ${t}: ${o}`:`${i} ${t}`;c.font="bold 32px Arial";const m=Math.min(c.measureText(d).width,l.width-40)+16*2,b=48,x=(l.width-m)/2,w=(l.height-b)/2,k=b/2;c.fillStyle="rgba(15, 15, 25, 0.85)",c.strokeStyle="#4a9eff",c.lineWidth=2,c.beginPath(),c.moveTo(x+k,w),c.lineTo(x+m-k,w),c.arc(x+m-k,w+k,k,-Math.PI/2,Math.PI/2),c.lineTo(x+k,w+b),c.arc(x+k,w+k,k,Math.PI/2,-Math.PI/2),c.closePath(),c.fill(),c.stroke(),c.fillStyle="#ffffff",c.font="bold 30px Arial",c.textAlign="center",c.textBaseline="middle";let S=d;const j=l.width-40;for(;c.measureText(S).width>j&&S.length>3;)S=S.slice(0,-4)+"...";c.fillText(S,l.width/2,l.height/2);const C=new os(l);C.minFilter=$n,C.magFilter=$n,C.needsUpdate=!0;const N=new ts({map:C,transparent:!0,opacity:0,depthTest:!1}),_=new Kn(N);_.scale.set(2.4,.6,1),_.renderOrder=1e3;const D=!!a.userData._cachedTaskLabel,L=a.position.y-(D?2:1.3);_.position.copy(a.position),_.position.y=L,this.scene.add(_),this.speechBubbles.push({sprite:_,agentId:e,startTime:performance.now(),duration:4e3,baseY:L})}formatToolParams(e,t){if(!t)return"";switch(e){case"WebSearch":return t.query||"";case"WebFetch":return t.url||"";case"Read":case"Write":case"Edit":const n=t.file_path||t.path||"";return n.length>40?".../"+n.split("/").slice(-2).join("/"):n;case"Bash":const a=(t.command||"").slice(0,60);return a+(a.length>=60?"...":"");case"Grep":return`"${t.pattern||""}"`;case"Glob":return t.pattern||"";case"Task":return(t.description||"").slice(0,50);default:for(const[i,o]of Object.entries(t))if(typeof o=="string"&&o.length>0&&o.length<100)return o.slice(0,50);return""}}removeSpeechBubble(e){var n;const t=this.speechBubbles.findIndex(a=>a.agentId===e);if(t!==-1){const a=this.speechBubbles[t];this.scene.remove(a.sprite),(n=a.sprite.material.map)==null||n.dispose(),a.sprite.material.dispose(),this.speechBubbles.splice(t,1)}}createMoveOrderEffect(e){const t=this.getMoveOrderGroup();t.position.copy(e),t.position.y=.05;for(let i=0;i<3;i++){const o=t.getObjectByName(`chevron${i}`);o&&(o.position.y=.5+i*.25)}const n=t.getObjectByName("ring");n&&n.scale.setScalar(1);const a=t.getObjectByName("pulse");a&&a.scale.setScalar(1),this.scene.add(t),this.moveOrderEffects.push({group:t,startTime:performance.now(),duration:800}),this.markDirty()}setIndicatorScale(e){this.indicatorScale=e}update(){const e=performance.now();this.updateMoveOrderEffects(e),this.updateSpeechBubbles(e),this.updateSleepingEffects(),this.updateWaitingPermissionEffects(),this.updateDelegationEffects(e),this.updateSubagentEffects(e)}updateWithCamera(e){this.camera=e}calculateZoomScale(e){if(!this.camera)return this.indicatorScale;const t=this.camera.position.distanceTo(e);return Math.max(.5,Math.min(2.5,t/15))*this.indicatorScale}updateSleepingEffects(){const e=performance.now();for(const t of this.sleepingEffects){const n=this.agentMeshes.get(t.agentId);if(!n)continue;const a=e-t.startTime,i=this.calculateZoomScale(n.position);for(const o of t.sprites){o.position.x=n.position.x+.25*i,o.position.z=n.position.z;const l=.002,c=.04*i;o.position.y=2+Math.sin(a*l)*c;const d=.35*i,f=Math.sin(a*.003)*.015*i;o.scale.set(d+f,d+f,1);const p=Math.min(a/500,1);o.material.opacity=.95*p}}}updateWaitingPermissionEffects(){const e=performance.now();for(const t of this.waitingPermissionEffects){const n=this.agentMeshes.get(t.agentId);if(!n)continue;const a=e-t.startTime,i=this.calculateZoomScale(n.position);for(const o of t.sprites){o.position.x=n.position.x+.25*i,o.position.z=n.position.z;const l=.004,c=.06*i;o.position.y=2+Math.sin(a*l)*c;const d=.38*i,f=Math.sin(a*.006)*.03*i;o.scale.set(d+f,d+f,1);const p=Math.min(a/300,1),m=.85+Math.sin(a*.005)*.1;o.material.opacity=m*p}}}updateDelegationEffects(e){const t=[];for(let n=0;n<this.delegationEffects.length;n++){const a=this.delegationEffects[n],i=Math.min((e-a.startTime)/a.duration,1),o=1-(1-i)*(1-i),l=a.endPosition.x-a.startPosition.x,c=a.endPosition.y-a.startPosition.y,d=a.endPosition.z-a.startPosition.z,f=4*i*(1-i)*.8;a.sprite.position.x=a.startPosition.x+l*o,a.sprite.position.y=a.startPosition.y+c*o+f,a.sprite.position.z=a.startPosition.z+d*o,a.sprite.material.rotation=i*Math.PI*1.5,a.sprite.material.opacity=i>.8?(1-i)*5:1,i>=1&&t.push(n)}for(let n=t.length-1;n>=0;n--){const a=t[n],i=this.delegationEffects[a];this.returnDelegationSprite(i.sprite),this.delegationEffects.splice(a,1)}}updateMoveOrderEffects(e){const t=[];for(let n=0;n<this.moveOrderEffects.length;n++){const a=this.moveOrderEffects[n],i=e-a.startTime,o=Math.min(i/a.duration,1),l=1-o,c=a.group.getObjectByName("ring");c&&(c.scale.setScalar(1+o*1.5),c.material.opacity=l*.8);const d=a.group.getObjectByName("pulse");if(d){const f=(Math.sin(o*Math.PI*4)+1)/2;d.scale.setScalar(.8+f*.4),d.material.opacity=l*.6}for(let f=0;f<3;f++){const p=a.group.getObjectByName(`chevron${f}`);if(p){const m=f*.15,b=Math.max(0,Math.min((o-m)/(1-m),1));p.position.y=.5+f*.25-b*(.4+f*.15),p.material.opacity=(1-b)*.9}}o>=1&&t.push(n)}for(let n=t.length-1;n>=0;n--){const a=t[n];this.returnMoveOrderGroup(this.moveOrderEffects[a].group),this.moveOrderEffects.splice(a,1)}}updateSpeechBubbles(e){var n;const t=[];for(let a=0;a<this.speechBubbles.length;a++){const i=this.speechBubbles[a],o=e-i.startTime,l=Math.min(o/i.duration,1),c=this.agentMeshes.get(i.agentId);if(c){i.sprite.position.x=c.position.x,i.sprite.position.z=c.position.z;const b=this.calculateZoomScale(c.position);i.sprite.scale.set(2.4*b,.6*b,1)}const d=Math.min(o/200,1),f=l>.7?1-(l-.7)/.3:1;i.sprite.material.opacity=d*f;const p=c?c.position.y:0,m=c?!!c.userData._cachedTaskLabel:!1;i.sprite.position.y=p-(m?2:1.3),l>=1&&t.push(a)}for(let a=t.length-1;a>=0;a--){const i=t[a],o=this.speechBubbles[i];this.scene.remove(o.sprite),(n=o.sprite.material.map)==null||n.dispose(),o.sprite.material.dispose(),this.speechBubbles.splice(i,1)}}disposeEffect(e){this.scene.remove(e.group),e.group.traverse(t=>{t instanceof Ie&&t.material.dispose()})}addSubagentEffect(e,t,n,a){const i=this.agentMeshes.get(t);if(!i){console.warn(`[EffectsManager] Cannot add subagent effect: parent agent ${t} not found`);return}if(this.subagentEffects.find(S=>S.subagentId===e))return;const o=document.createElement("canvas");o.width=256,o.height=64;const l=o.getContext("2d");l.fillStyle="rgba(30, 30, 60, 0.85)";const c=12;l.beginPath(),l.moveTo(c,0),l.lineTo(o.width-c,0),l.quadraticCurveTo(o.width,0,o.width,c),l.lineTo(o.width,o.height-c),l.quadraticCurveTo(o.width,o.height,o.width-c,o.height),l.lineTo(c,o.height),l.quadraticCurveTo(0,o.height,0,o.height-c),l.lineTo(0,c),l.quadraticCurveTo(0,0,c,0),l.closePath(),l.fill(),l.strokeStyle="rgba(100, 180, 255, 0.8)",l.lineWidth=2,l.stroke(),l.fillStyle="#64b4ff",l.font="bold 28px monospace",l.fillText("⑂",8,40),l.fillStyle="#ffffff",l.font="22px sans-serif";const d=n.length>14?n.slice(0,12)+"..":n;l.fillText(d,40,38);const f=new os(o);f.needsUpdate=!0;const p=new ts({map:f,transparent:!0,opacity:.85,depthTest:!1}),m=new Kn(p);m.scale.set(1.5,.4,1);const b=this.subagentEffects.filter(S=>S.parentAgentId===t&&!S.completed).length,x=b*Math.PI/4-Math.PI/4,w=1.5,k=i.position;m.position.set(k.x+Math.sin(x)*w,k.y+2.5+b*.5,k.z+Math.cos(x)*w),this.scene.add(m),this.subagentEffects.push({sprite:m,subagentId:e,parentAgentId:t,name:n,subagentType:a,startTime:performance.now(),completed:!1,completedAt:0}),this.markDirty(),console.log(`[EffectsManager] Added subagent effect: ${n} (${e}) near ${t}`)}completeSubagentEffect(e){const t=this.subagentEffects.find(n=>n.subagentId===e);t?(t.completed=!0,t.completedAt=performance.now(),this.markDirty(),console.log(`[EffectsManager] Marked subagent effect completed: ${t.name} (${e})`)):console.warn(`[EffectsManager] completeSubagentEffect: no effect found for subagentId=${e}`)}removeSubagentEffect(e){var n;const t=this.subagentEffects.findIndex(a=>a.subagentId===e);if(t!==-1){const a=this.subagentEffects[t];this.scene.remove(a.sprite),(n=a.sprite.material.map)==null||n.dispose(),a.sprite.material.dispose(),this.subagentEffects.splice(t,1),this.markDirty()}}updateSubagentEffects(e){var n;const t=[];for(let a=0;a<this.subagentEffects.length;a++){const i=this.subagentEffects[a],o=this.agentMeshes.get(i.parentAgentId);if(!o){t.push(a);continue}const l=this.subagentEffects.slice(0,a).filter(m=>m.parentAgentId===i.parentAgentId&&!m.completed).length,c=l*Math.PI/4-Math.PI/4,d=1.5,f=o.position;i.sprite.position.set(f.x+Math.sin(c)*d,f.y+2.5+l*.5,f.z+Math.cos(c)*d);const p=(e-i.startTime)/1e3;if(i.sprite.position.y+=Math.sin(p*1.5)*.05,i.completed&&i.completedAt>0){const m=(e-i.completedAt)/1e3;if(m>2){const b=Math.max(0,.85-(m-2)*.3);i.sprite.material.opacity=b,b<=0&&t.push(a)}}i.completed||(i.sprite.material.opacity=.75+Math.sin(p*2)*.1)}for(let a=t.length-1;a>=0;a--){const i=t[a],o=this.subagentEffects[i];this.scene.remove(o.sprite),(n=o.sprite.material.map)==null||n.dispose(),o.sprite.material.dispose(),this.subagentEffects.splice(i,1)}}removeAgentEffects(e){this.removeSleepingEffect(e),this.removeWaitingPermissionEffect(e),this.removeSpeechBubble(e);const t=this.subagentEffects.filter(n=>n.parentAgentId===e).map(n=>n.subagentId);for(const n of t)this.removeSubagentEffect(n);this.agentMeshes.delete(e)}clear(){var e,t;for(const n of this.moveOrderEffects)this.returnMoveOrderGroup(n.group);this.moveOrderEffects=[];for(const n of this.sleepingEffects)for(const a of n.sprites)this.scene.remove(a),a.material.dispose();this.sleepingEffects=[];for(const n of this.waitingPermissionEffects)for(const a of n.sprites)this.scene.remove(a),a.material.dispose();this.waitingPermissionEffects=[];for(const n of this.delegationEffects)this.returnDelegationSprite(n.sprite);this.delegationEffects=[];for(const n of this.speechBubbles)this.scene.remove(n.sprite),(e=n.sprite.material.map)==null||e.dispose(),n.sprite.material.dispose();this.speechBubbles=[];for(const n of this.subagentEffects)this.scene.remove(n.sprite),(t=n.sprite.material.map)==null||t.dispose(),n.sprite.material.dispose();this.subagentEffects=[]}dispose(){var e,t,n,a,i,o;this.clear(),(e=this.ringGeometry)==null||e.dispose(),(t=this.pulseGeometry)==null||t.dispose(),(n=this.chevronGeometry)==null||n.dispose(),this.ringGeometry=null,this.pulseGeometry=null,this.chevronGeometry=null,(a=this.delegationPaperTexture)==null||a.dispose(),(i=this.sleepingBubbleTexture)==null||i.dispose(),(o=this.waitingPermissionTexture)==null||o.dispose(),this.delegationPaperTexture=null,this.sleepingBubbleTexture=null,this.waitingPermissionTexture=null;for(const l of this.delegationSpritePool)l.sprite.material.dispose();this.delegationSpritePool=[];for(const l of this.moveOrderGroupPool)l.traverse(c=>{c instanceof Ie&&c.material.dispose()});this.moveOrderGroupPool=[],this.agentMeshes.clear()}};U(od,"POOL_SIZE",10);let Oy=od;class sI{constructor(){U(this,"animations",new Map)}register(e,t,n="idle"){this.animations.set(e,{state:n,time:Math.random()*Math.PI*2,basePosition:t.position.clone(),baseRotation:t.rotation.clone(),baseScale:t.scale.clone()})}unregister(e){this.animations.delete(e)}has(e){return this.animations.has(e)}setState(e,t){const n=this.animations.get(e);n&&n.state!==t&&(n.state=t,n.time=0)}updateBasePosition(e,t){const n=this.animations.get(e);n&&n.basePosition.copy(t)}update(e,t){for(const[n,a]of this.animations){const i=t.get(n);if(i)switch(a.time+=e,a.state){case"idle":this.applyIdleAnimation(i,a);break;case"working":this.applyWorkingAnimation(i,a);break;case"waiting":this.applyWaitingAnimation(i,a);break;case"error":this.applyErrorAnimation(i,a);break;case"static":this.resetToBase(i,a);break}}}applyIdleAnimation(e,t){const n=t.time,o=Math.sin(n*1.5)*.02,d=Math.sin(n*.8)*.01;e.position.set(t.basePosition.x+d,t.basePosition.y+o,t.basePosition.z)}applyWorkingAnimation(e,t){const n=t.time,o=Math.abs(Math.sin(n*6))*.25,l=.15,c=3,d=Math.sin(n*c)*l,m=Math.sin(n*3)*.22,x=Math.sin(n*c*.7)*.1,S=Math.sin(n*4)*.12;e.position.set(t.basePosition.x+d,t.basePosition.y+o,t.basePosition.z+x),e.rotation.set(t.baseRotation.x+m,t.baseRotation.y+S,t.baseRotation.z)}applyWaitingAnimation(e,t){const n=t.time,a=.02,i=1.2,o=Math.sin(n*i)*a,c=Math.sin(n*i)*.03,p=Math.sin(n*2)*.01;e.position.set(t.basePosition.x+o,t.basePosition.y+p,t.basePosition.z),e.rotation.set(t.baseRotation.x,t.baseRotation.y,t.baseRotation.z+c)}applyErrorAnimation(e,t){const n=t.time,a=.015,i=15,o=Math.sin(n*i)*a,l=Math.cos(n*i*1.3)*a*.5;e.position.set(t.basePosition.x+o,t.basePosition.y,t.basePosition.z+l)}resetToBase(e,t){e.position.copy(t.basePosition),e.rotation.copy(t.baseRotation),e.scale.copy(t.baseScale)}clear(){this.animations.clear()}}function Hj(s){const e=document.createElement("canvas"),t=e.getContext("2d"),n=s==="pokemon-stadium"?1024:512;switch(e.width=n,e.height=n,s){case"galactic":iI(t,e.width,e.height);break;case"metal":rI(t,e.width,e.height);break;case"hex":oI(t,e.width,e.height);break;case"circuit":lI(t,e.width,e.height);break;case"pokemon-stadium":cI(t,e.width,e.height);break;default:aI(t,e.width,e.height)}return new os(e)}function aI(s,e,t){s.fillStyle="#4a4a4a",s.fillRect(0,0,e,t);for(let n=0;n<5e3;n++){const a=Math.random()*e,i=Math.random()*t,o=60+Math.random()*40;s.fillStyle=`rgba(${o}, ${o}, ${o}, 0.3)`,s.fillRect(a,i,2,2)}s.strokeStyle="rgba(30, 30, 30, 0.4)",s.lineWidth=1;for(let n=0;n<8;n++){s.beginPath();let a=Math.random()*e,i=Math.random()*t;s.moveTo(a,i);for(let o=0;o<5;o++)a+=(Math.random()-.5)*100,i+=(Math.random()-.5)*100,s.lineTo(a,i);s.stroke()}}function iI(s,e,t){const n=s.createRadialGradient(e/2,t/2,0,e/2,t/2,e/1.5);n.addColorStop(0,"#1a0a30"),n.addColorStop(.5,"#0d0520"),n.addColorStop(1,"#050210"),s.fillStyle=n,s.fillRect(0,0,e,t);for(let a=0;a<3;a++){const i=Math.random()*e,o=Math.random()*t,l=100+Math.random()*150,c=["#ff00ff","#00ffff","#ff6600","#6600ff","#00ff66"],d=c[Math.floor(Math.random()*c.length)],f=s.createRadialGradient(i,o,0,i,o,l);f.addColorStop(0,d.replace("ff","66")+"40"),f.addColorStop(.5,d+"20"),f.addColorStop(1,"transparent"),s.fillStyle=f,s.fillRect(0,0,e,t)}for(let a=0;a<300;a++){const i=Math.random()*e,o=Math.random()*t,l=Math.random()*2,c=150+Math.random()*105;if(Math.random()>.8){const d=s.createRadialGradient(i,o,0,i,o,l*4);d.addColorStop(0,`rgba(${c}, ${c}, 255, 0.8)`),d.addColorStop(1,"transparent"),s.fillStyle=d,s.fillRect(i-l*4,o-l*4,l*8,l*8)}s.fillStyle=`rgba(${c}, ${c}, 255, 1)`,s.beginPath(),s.arc(i,o,l,0,Math.PI*2),s.fill()}s.strokeStyle="rgba(100, 50, 150, 0.15)",s.lineWidth=20,s.beginPath();for(let a=0;a<Math.PI*4;a+=.1){const i=20+a*30,o=e/2+Math.cos(a)*i,l=t/2+Math.sin(a)*i;a===0?s.moveTo(o,l):s.lineTo(o,l)}s.stroke()}function rI(s,e,t){s.fillStyle="#3a3a44",s.fillRect(0,0,e,t);for(let a=0;a<200;a++){const i=Math.random()*t,o=50+Math.random()*30;s.strokeStyle=`rgba(${o+20}, ${o+20}, ${o+30}, 0.3)`,s.lineWidth=1,s.beginPath(),s.moveTo(0,i),s.lineTo(e,i+(Math.random()-.5)*4),s.stroke()}s.strokeStyle="rgba(20, 20, 25, 0.8)",s.lineWidth=3;const n=e/4;for(let a=0;a<=e;a+=n)s.beginPath(),s.moveTo(a,0),s.lineTo(a,t),s.stroke();for(let a=0;a<=t;a+=n)s.beginPath(),s.moveTo(0,a),s.lineTo(e,a),s.stroke();s.fillStyle="#555566";for(let a=0;a<=e;a+=n)for(let i=0;i<=t;i+=n)s.beginPath(),s.arc(a,i,8,0,Math.PI*2),s.fill(),s.fillStyle="#666677",s.beginPath(),s.arc(a-2,i-2,4,0,Math.PI*2),s.fill(),s.fillStyle="#555566"}function oI(s,e,t){s.fillStyle="#1a2530",s.fillRect(0,0,e,t);const n=30,a=n*Math.sqrt(3);for(let i=-1;i<t/a+1;i++)for(let o=-1;o<e/(n*1.5)+1;o++){const l=o*n*1.5,c=i*a+(o%2===0?0:a/2),d=30+Math.random()*20;s.fillStyle=`rgb(${d}, ${d+20}, ${d+40})`,s.beginPath();for(let f=0;f<6;f++){const p=Math.PI/3*f+Math.PI/6,m=l+Math.cos(p)*(n-2),b=c+Math.sin(p)*(n-2);f===0?s.moveTo(m,b):s.lineTo(m,b)}if(s.closePath(),s.fill(),s.strokeStyle="rgba(80, 150, 200, 0.5)",s.lineWidth=2,s.stroke(),Math.random()>.85){const f=s.createRadialGradient(l,c,0,l,c,n);f.addColorStop(0,"rgba(100, 200, 255, 0.3)"),f.addColorStop(1,"transparent"),s.fillStyle=f,s.fill()}}}function lI(s,e,t){s.fillStyle="#0a1a0f",s.fillRect(0,0,e,t),s.strokeStyle="#00ff66",s.lineWidth=2,s.shadowColor="#00ff66",s.shadowBlur=4;for(let n=20;n<t;n+=40){s.beginPath();let a=0;for(s.moveTo(a,n);a<e;){const i=20+Math.random()*60;if(a+=i,s.lineTo(a,n),Math.random()>.7&&a<e-40){const o=n+(Math.random()>.5?20:-20);s.lineTo(a,o),s.lineTo(a+20,o),a+=20}}s.stroke()}for(let n=20;n<e;n+=40)if(Math.random()>.5){s.beginPath(),s.moveTo(n,0);let a=0;for(;a<t;){const i=20+Math.random()*60;if(a+=i,s.lineTo(n,a),Math.random()>.7&&a<t-40){const o=n+(Math.random()>.5?20:-20);s.lineTo(o,a),s.lineTo(o,a+20),a+=20,s.lineTo(n,a)}}s.stroke()}s.shadowBlur=0,s.fillStyle="#111";for(let n=0;n<6;n++){const a=50+Math.random()*(e-100),i=50+Math.random()*(t-100),o=30+Math.random()*40,l=20+Math.random()*30;s.fillRect(a-o/2,i-l/2,o,l),s.fillStyle="#888";for(let c=0;c<o;c+=8)s.fillRect(a-o/2+c,i-l/2-4,4,4),s.fillRect(a-o/2+c,i+l/2,4,4);s.fillStyle="#111"}s.fillStyle="#997700";for(let n=0;n<50;n++){const a=Math.random()*e,i=Math.random()*t;s.beginPath(),s.arc(a,i,4,0,Math.PI*2),s.fill()}}function cI(s,e,t){const n=e/2,a=t/2;s.fillStyle="#2E4F2C",s.fillRect(0,0,e,t);for(let w=0;w<6e3;w++){const k=Math.random()*e,S=Math.random()*t,j=Math.random()>.5;s.fillStyle=j?"rgba(30, 50, 28, 0.3)":"rgba(55, 90, 52, 0.12)",s.fillRect(k,S,2,4)}const i=e*.05,o=30;s.strokeStyle="#ffffff",s.lineWidth=6,s.beginPath(),s.roundRect(i,i,e-i*2,t-i*2,o),s.stroke(),s.lineWidth=4,s.beginPath(),s.moveTo(i,a),s.lineTo(e-i,a),s.stroke();const l=Math.min(e,t)*.2;s.beginPath(),s.arc(n,a,l,0,Math.PI*2),s.stroke();const c=l*.6;s.fillStyle="#cc3333",s.beginPath(),s.arc(n,a,c,Math.PI,0),s.closePath(),s.fill(),s.fillStyle="#f0f0f0",s.beginPath(),s.arc(n,a,c,0,Math.PI),s.closePath(),s.fill(),s.fillStyle="#1a1a1a",s.fillRect(n-c,a-5,c*2,10),s.strokeStyle="#1a1a1a",s.lineWidth=4,s.beginPath(),s.arc(n,a,c,0,Math.PI*2),s.stroke();const d=c*.28;s.fillStyle="#f0f0f0",s.beginPath(),s.arc(n,a,d,0,Math.PI*2),s.fill(),s.strokeStyle="#1a1a1a",s.lineWidth=4,s.stroke(),s.fillStyle="#ffffff",s.beginPath(),s.arc(n,a,d*.5,0,Math.PI*2),s.fill();const f=e*.08,p=t*.05,m=l+t*.08;s.strokeStyle="#ffffff",s.lineWidth=3,s.strokeRect(n-f/2,a-m-p,f,p),s.strokeRect(n-f/2,a+m,f,p);const b=e*.05,x=i+15;s.lineWidth=3,s.beginPath(),s.moveTo(x,x+b),s.lineTo(x,x),s.lineTo(x+b,x),s.stroke(),s.beginPath(),s.moveTo(e-x-b,x),s.lineTo(e-x,x),s.lineTo(e-x,x+b),s.stroke(),s.beginPath(),s.moveTo(x,t-x-b),s.lineTo(x,t-x),s.lineTo(x+b,t-x),s.stroke(),s.beginPath(),s.moveTo(e-x-b,t-x),s.lineTo(e-x,t-x),s.lineTo(e-x,t-x-b),s.stroke()}function uI(s){const e=new Hn;e.name="galacticFloor";const t=[];dI(e);const n=hI(e);return pI(e,t),mI(e),fI(e),s.add(e),console.log("[Battlefield] Galactic group added to scene:",e),{group:e,stars:n,nebulas:t,time:0}}function dI(s){const e=document.createElement("canvas"),t=e.getContext("2d");e.width=2048,e.height=2048;const n=t.createRadialGradient(1024,1024,0,1024,1024,1024);n.addColorStop(0,"#2a1050"),n.addColorStop(.2,"#1a0a40"),n.addColorStop(.5,"#0d0525"),n.addColorStop(.8,"#060215"),n.addColorStop(1,"#020108"),t.fillStyle=n,t.fillRect(0,0,2048,2048),t.save(),t.translate(1024,1024);for(let f=0;f<3;f++){const p=f/3*Math.PI*2;t.save(),t.rotate(p);for(let m=0;m<1500;m++){const b=m/1500*800,x=b*.012,w=b*.15,k=Math.cos(x)*b+(Math.random()-.5)*w,S=Math.sin(x)*b+(Math.random()-.5)*w,j=1-b/800*.6,C=(1-b/800)*4+Math.random()*3,N=Math.floor(220*j+35),_=Math.floor(200*j+55),D=Math.floor(255);if(t.fillStyle=`rgba(${N}, ${_}, ${D}, ${j})`,t.beginPath(),t.arc(k,S,C,0,Math.PI*2),t.fill(),j>.7&&Math.random()>.5){const L=t.createRadialGradient(k,S,0,k,S,C*3);L.addColorStop(0,`rgba(${N}, ${_}, ${D}, 0.6)`),L.addColorStop(1,"transparent"),t.fillStyle=L,t.beginPath(),t.arc(k,S,C*3,0,Math.PI*2),t.fill()}}t.restore()}const a=t.createRadialGradient(0,0,0,0,0,200);a.addColorStop(0,"rgba(255, 255, 255, 1)"),a.addColorStop(.1,"rgba(255, 240, 220, 0.95)"),a.addColorStop(.3,"rgba(255, 200, 150, 0.7)"),a.addColorStop(.6,"rgba(200, 150, 255, 0.4)"),a.addColorStop(1,"transparent"),t.fillStyle=a,t.beginPath(),t.arc(0,0,200,0,Math.PI*2),t.fill(),t.restore();for(let f=0;f<1e3;f++){const p=Math.random()*2048,m=Math.random()*2048,b=.5+Math.random()*2.5,x=150+Math.random()*105,w=Math.random();let k,S,j;if(w<.6?(k=x,S=x,j=255):w<.8?(k=255,S=x,j=x*.7):(k=255,S=x*.6,j=x),t.fillStyle=`rgba(${k}, ${S}, ${j}, 1)`,t.beginPath(),t.arc(p,m,b,0,Math.PI*2),t.fill(),Math.random()>.85){const C=t.createRadialGradient(p,m,0,p,m,b*6);C.addColorStop(0,`rgba(${k}, ${S}, ${j}, 0.7)`),C.addColorStop(.5,`rgba(${k}, ${S}, ${j}, 0.2)`),C.addColorStop(1,"transparent"),t.fillStyle=C,t.beginPath(),t.arc(p,m,b*6,0,Math.PI*2),t.fill()}}const i=["#ff00ff","#00ffff","#ff6600","#6600ff"];for(let f=0;f<8;f++){const p=300+Math.random()*1448,m=300+Math.random()*1448,b=100+Math.random()*200,x=i[f%i.length],w=t.createRadialGradient(p,m,0,p,m,b);w.addColorStop(0,x+"40"),w.addColorStop(.5,x+"15"),w.addColorStop(1,"transparent"),t.fillStyle=w,t.beginPath(),t.arc(p,m,b,0,Math.PI*2),t.fill()}const o=new os(e);o.colorSpace=mi;const l=new wr(30,30),c=new Ke({map:o,side:Ls}),d=new Ie(l,c);d.rotation.x=-Math.PI/2,d.position.y=.01,d.name="galaxyPlane",d.receiveShadow=!0,s.add(d),console.log("[Battlefield] Galaxy plane created:",d.position)}function hI(s){const e=new si,t=500,n=new Float32Array(t*3),a=new Float32Array(t*3);for(let l=0;l<t;l++){const c=Math.random()*Math.PI*2,d=Math.random()*14;n[l*3]=Math.cos(c)*d,n[l*3+1]=.05+Math.random()*.3,n[l*3+2]=Math.sin(c)*d;const f=Math.random();f<.4?(a[l*3]=.9,a[l*3+1]=.9,a[l*3+2]=1):f<.6?(a[l*3]=1,a[l*3+1]=.8,a[l*3+2]=.4):f<.8?(a[l*3]=1,a[l*3+1]=.4,a[l*3+2]=.8):(a[l*3]=.4,a[l*3+1]=1,a[l*3+2]=1)}e.setAttribute("position",new gi(n,3)),e.setAttribute("color",new gi(a,3));const i=new wf({size:.15,transparent:!0,opacity:.9,vertexColors:!0,blending:ll,depthWrite:!1}),o=new jd(e,i);return o.name="galacticStars",o.renderOrder=5,s.add(o),o}function pI(s,e){const t=[16711935,65535,16737792,6684927,65382];for(let n=0;n<4;n++){const a=document.createElement("canvas"),i=a.getContext("2d");a.width=256,a.height=256;const o=i.createRadialGradient(128,128,0,128,128,128);o.addColorStop(0,"rgba(255, 255, 255, 0.6)"),o.addColorStop(.3,"rgba(255, 255, 255, 0.3)"),o.addColorStop(.6,"rgba(255, 255, 255, 0.1)"),o.addColorStop(1,"transparent"),i.fillStyle=o,i.fillRect(0,0,256,256);const l=new os(a),c=6+Math.random()*6,d=new wr(c,c),f=new Ke({map:l,color:t[n%t.length],transparent:!0,opacity:.25,blending:ll,depthWrite:!1,side:Ls}),p=new Ie(d,f);p.rotation.x=-Math.PI/2,p.position.set((Math.random()-.5)*20,.03+n*.01,(Math.random()-.5)*20),p.name=`nebula_${n}`,p.renderOrder=2+n,e.push(p),s.add(p)}}function fI(s){const e=new si,t=150,n=new Float32Array(t*3);for(let o=0;o<t;o++){const l=Math.random()*Math.PI*2,c=Math.random()*14;n[o*3]=Math.cos(l)*c,n[o*3+1]=.1+Math.random()*2,n[o*3+2]=Math.sin(l)*c}e.setAttribute("position",new gi(n,3));const a=new wf({size:.15,color:8947967,transparent:!0,opacity:.5,blending:ll,depthWrite:!1}),i=new jd(e,a);i.name="cosmicDust",s.add(i)}function mI(s){const e=new ol(14.5,15.5,64),t=new Ke({color:4491519,transparent:!0,opacity:.6,side:Ls,blending:ll}),n=new Ie(e,t);n.rotation.x=-Math.PI/2,n.position.y=.02,n.name="portalRim",s.add(n);const a=new ol(13.5,14.5,64),i=new Ke({color:8930559,transparent:!0,opacity:.3,side:Ls,blending:ll}),o=new Ie(a,i);o.rotation.x=-Math.PI/2,o.position.y=.01,o.name="portalInnerRim",s.add(o)}function Uj(s,e,t){e&&(e.group.traverse(n=>{var a,i;n instanceof Ie?((a=n.geometry)==null||a.dispose(),n.material instanceof vr?t(n.material):Array.isArray(n.material)&&n.material.forEach(o=>t(o))):n instanceof jd&&((i=n.geometry)==null||i.dispose(),n.material instanceof vr&&n.material.dispose())}),s.remove(e.group))}function gI(s,e){s.time+=e;const t=s.group.getObjectByName("galaxyPlane");t&&(t.rotation.z=s.time*.02),s.nebulas.forEach((o,l)=>{o.rotation.z+=e*.03*(l%2===0?1:-1),o.position.x+=Math.sin(s.time*.2+l*2)*e*.1,o.position.z+=Math.cos(s.time*.15+l*2)*e*.1,Math.abs(o.position.x)>12&&(o.position.x*=.9),Math.abs(o.position.z)>12&&(o.position.z*=.9);const c=o.material;c.opacity=.15+Math.sin(s.time*.5+l)*.1});const n=s.group.getObjectByName("portalRim");if(n){const o=n.material;o.opacity=.5+Math.sin(s.time*2)*.3}const a=s.group.getObjectByName("portalInnerRim");if(a){const o=a.material;o.opacity=.3+Math.sin(s.time*3+1)*.2}const i=s.group.getObjectByName("cosmicDust");if(i){const o=i.geometry.attributes.position.array;for(let l=0;l<o.length;l+=3)if(o[l+1]+=e*.15,o[l+1]>3){o[l+1]=.1;const c=Math.random()*Math.PI*2,d=Math.random()*14;o[l]=Math.cos(c)*d,o[l+2]=Math.sin(c)*d}i.geometry.attributes.position.needsUpdate=!0}if(s.stars){const o=s.stars.material;o.opacity=.7+Math.sin(s.time*4)*.2,s.stars.rotation.y=s.time*.01}}const Gj=new vt,Wj=new vt;function qj(){return{phase:"dawn",sunPosition:new vt(50,10,-60),moonPosition:new vt(-40,15,-50),ambientColor:10075101,ambientIntensity:.6,hemiSkyColor:6724044,hemiGroundColor:4478310,hemiIntensity:.75,mainLightColor:12312063,mainLightIntensity:1.1,fogColor:4487082,fogDensity:.008,skyColor:3368618,starsOpacity:.2,moonOpacity:.3,sunOpacity:.9,lampIntensity:.5,windowEmissive:.3}}function Yj(){return{phase:"dusk",sunPosition:new vt(-50,8,-60),moonPosition:new vt(40,12,-50),ambientColor:7833787,ambientIntensity:.55,hemiSkyColor:4482747,hemiGroundColor:3359829,hemiIntensity:.65,mainLightColor:10075118,mainLightIntensity:.9,fogColor:2245802,fogDensity:.01,skyColor:2245802,starsOpacity:.3,moonOpacity:.4,sunOpacity:.8,lampIntensity:1.5,windowEmissive:.5}}function gb(){return{phase:"night",sunPosition:new vt(30,-20,-50),moonPosition:new vt(-30,35,-50),ambientColor:5596842,ambientIntensity:.5,hemiSkyColor:3359863,hemiGroundColor:2236996,hemiIntensity:.6,mainLightColor:13426175,mainLightIntensity:.9,fogColor:662058,fogDensity:.012,skyColor:662058,starsOpacity:.9,moonOpacity:1,sunOpacity:0,lampIntensity:2.5,windowEmissive:.8}}function bb(){return{phase:"day",sunPosition:new vt(30,50,-30),moonPosition:new vt(-30,-20,-50),ambientColor:16777215,ambientIntensity:.85,hemiSkyColor:5939433,hemiGroundColor:5596791,hemiIntensity:1,mainLightColor:16777198,mainLightIntensity:1.5,fogColor:6990048,fogDensity:.005,skyColor:4886745,starsOpacity:0,moonOpacity:0,sunOpacity:1,lampIntensity:0,windowEmissive:.1}}function Xh(s,e,t,n){const a=(o,l)=>o+(l-o)*t,i=(o,l)=>{const c=o>>16&255,d=o>>8&255,f=o&255,p=l>>16&255,m=l>>8&255,b=l&255,x=Math.round(a(c,p)),w=Math.round(a(d,m)),k=Math.round(a(f,b));return x<<16|w<<8|k};return Gj.lerpVectors(s.sunPosition,e.sunPosition,t),Wj.lerpVectors(s.moonPosition,e.moonPosition,t),{phase:n,sunPosition:Gj,moonPosition:Wj,ambientColor:i(s.ambientColor,e.ambientColor),ambientIntensity:a(s.ambientIntensity,e.ambientIntensity),hemiSkyColor:i(s.hemiSkyColor,e.hemiSkyColor),hemiGroundColor:i(s.hemiGroundColor,e.hemiGroundColor),hemiIntensity:a(s.hemiIntensity,e.hemiIntensity),mainLightColor:i(s.mainLightColor,e.mainLightColor),mainLightIntensity:a(s.mainLightIntensity,e.mainLightIntensity),fogColor:i(s.fogColor,e.fogColor),fogDensity:a(s.fogDensity,e.fogDensity),skyColor:i(s.skyColor,e.skyColor),starsOpacity:a(s.starsOpacity,e.starsOpacity),moonOpacity:a(s.moonOpacity,e.moonOpacity),sunOpacity:a(s.sunOpacity,e.sunOpacity),lampIntensity:a(s.lampIntensity,e.lampIntensity),windowEmissive:a(s.windowEmissive,e.windowEmissive)}}function bI(s){if(s>=5&&s<6){const e=s-5;return Xh(gb(),qj(),e,"dawn")}else if(s>=6&&s<7){const e=s-6;return Xh(qj(),bb(),e,"dawn")}else{if(s>=7&&s<18)return bb();if(s>=18&&s<19.5){const e=(s-18)/1.5;return Xh(bb(),Yj(),e,"dusk")}else if(s>=19.5&&s<21){const e=(s-19.5)/1.5;return Xh(Yj(),gb(),e,"dusk")}else return gb()}}function yI(){const s=document.createElement("canvas"),e=s.getContext("2d");s.width=512,s.height=512;const t=256,n=256,a=e.createRadialGradient(t,n,50,t,n,256);a.addColorStop(0,"rgba(255, 255, 200, 1)"),a.addColorStop(.2,"rgba(255, 240, 150, 0.8)"),a.addColorStop(.4,"rgba(255, 220, 100, 0.4)"),a.addColorStop(.7,"rgba(255, 200, 80, 0.1)"),a.addColorStop(1,"rgba(255, 180, 50, 0)"),e.fillStyle=a,e.fillRect(0,0,512,512);const i=e.createRadialGradient(t,n,0,t,n,80);i.addColorStop(0,"rgba(255, 255, 255, 1)"),i.addColorStop(.5,"rgba(255, 255, 220, 1)"),i.addColorStop(1,"rgba(255, 240, 150, 0.8)"),e.fillStyle=i,e.beginPath(),e.arc(t,n,80,0,Math.PI*2),e.fill(),e.beginPath(),e.arc(t,n,60,0,Math.PI*2),e.fillStyle="#ffffee",e.fill();const o=new os(s),l=new ts({map:o,transparent:!0,depthWrite:!1,blending:ll}),c=new Kn(l);return c.position.set(30,50,-30),c.scale.set(50,50,1),c.name="sun",c.visible=!1,c}function xI(){const s=document.createElement("canvas"),e=s.getContext("2d");s.width=512,s.height=512;const t=256,n=256,a=e.createRadialGradient(t,n,60,t,n,256);a.addColorStop(0,"rgba(200, 220, 255, 1)"),a.addColorStop(.2,"rgba(180, 200, 240, 0.8)"),a.addColorStop(.4,"rgba(150, 180, 220, 0.5)"),a.addColorStop(.7,"rgba(120, 150, 200, 0.2)"),a.addColorStop(1,"rgba(100, 130, 180, 0)"),e.fillStyle=a,e.fillRect(0,0,512,512);const i=e.createRadialGradient(t,n,0,t,n,100);i.addColorStop(0,"rgba(255, 255, 255, 1)"),i.addColorStop(.5,"rgba(230, 240, 255, 0.9)"),i.addColorStop(1,"rgba(200, 220, 255, 0.3)"),e.fillStyle=i,e.beginPath(),e.arc(t,n,100,0,Math.PI*2),e.fill(),e.beginPath(),e.arc(t,n,70,0,Math.PI*2),e.fillStyle="#e8eeff",e.fill(),e.fillStyle="rgba(180, 190, 210, 0.6)",e.beginPath(),e.arc(t-25,n-20,18,0,Math.PI*2),e.fill(),e.beginPath(),e.arc(t+25,n+15,12,0,Math.PI*2),e.fill(),e.beginPath(),e.arc(t-5,n+30,10,0,Math.PI*2),e.fill();const o=new os(s),l=new ts({map:o,transparent:!0,depthWrite:!1,blending:ll}),c=new Kn(l);return c.position.set(-30,35,-50),c.scale.set(40,40,1),c.name="moon",c}function vI(s=1){const e=new Hn,t=new ft({color:16777215,transparent:!0,opacity:.85,roughness:1,metalness:0,depthWrite:!1}),n=new Wt(1,16,12);return[{x:0,y:0,z:0,scale:1.2},{x:-1,y:.1,z:.2,scale:1},{x:1,y:.15,z:-.1,scale:1.1},{x:-.5,y:.3,z:.4,scale:.8},{x:.6,y:.35,z:.3,scale:.9},{x:-1.5,y:-.1,z:0,scale:.7},{x:1.5,y:-.05,z:.1,scale:.75},{x:0,y:.4,z:0,scale:.7}].forEach(i=>{const o=new Ie(n,t);o.position.set(i.x*s,i.y*s,i.z*s),o.scale.setScalar(i.scale*s),e.add(o)}),e.userData.material=t,e}function wI(){const s=new Hn;s.name="clouds";const e=[];return[{x:-25,y:35,z:-20,scale:3.5,speed:.8},{x:15,y:40,z:-35,scale:4,speed:1},{x:-40,y:38,z:10,scale:3,speed:.9},{x:30,y:42,z:15,scale:3.8,speed:1.1},{x:0,y:36,z:-45,scale:3.2,speed:.85},{x:-15,y:44,z:30,scale:2.8,speed:1.05},{x:45,y:37,z:-10,scale:3.6,speed:.95},{x:-35,y:41,z:-30,scale:2.5,speed:1.15}].forEach((n,a)=>{const i=vI(n.scale);i.position.set(n.x,n.y,n.z),i.userData.baseX=n.x,i.userData.speed=n.speed,i.userData.index=a,s.add(i),e.push(i)}),{group:s,clouds:e,time:0}}function kI(s,e){s.time+=e,s.clouds.forEach(t=>{const n=t.userData.baseX,a=t.userData.speed,i=t.userData.index,o=60,l=.015*a,c=i*.7,d=Math.sin(s.time*l+c)*o*.5;t.position.x=n+d;const f=.3*a,p=.5;t.position.y+=Math.sin(s.time*f+c)*p*e})}function SI(s,e){s.clouds.forEach(t=>{const n=t.userData.material;n&&(n.opacity=e*.85)})}function jI(){const s=new si,e=300,t=new Float32Array(e*3);for(let i=0;i<e;i++){const o=Math.random()*Math.PI*2,l=Math.random()*Math.PI*.5,c=80+Math.random()*40;t[i*3]=c*Math.sin(l)*Math.cos(o),t[i*3+1]=c*Math.cos(l)+20,t[i*3+2]=c*Math.sin(l)*Math.sin(o)}s.setAttribute("position",new gi(t,3));const n=new wf({color:16777215,size:.5,transparent:!0,opacity:.8}),a=new jd(s,n);return a.name="stars",a}function CI(s){const t=s/2+5;return[{x:-t,z:-t+2,scale:1.2},{x:-t+2,z:-t,scale:1.4},{x:t,z:-t+2,scale:1.3},{x:t-2,z:-t,scale:1},{x:-t,z:t-2,scale:1.1},{x:-t+2,z:t,scale:1.5},{x:t,z:t-2,scale:1.25},{x:t-2,z:t,scale:1.35}]}function NI(s){const e=s/2,t=e+3,n=e*.5;return[{x:-t,z:-n},{x:-t,z:0},{x:-t,z:n},{x:t,z:-n},{x:t,z:0},{x:t,z:n},{x:-n,z:-t},{x:0,z:-t},{x:n,z:-t},{x:-n,z:t},{x:0,z:t},{x:n,z:t},{x:-t-5,z:n+2},{x:-t-8,z:n+5}]}function AI(s){const e=s/2+2;return[{x:-e,z:-e},{x:e,z:-e},{x:-e,z:e},{x:e,z:e}]}function Vj(s,e=$x){const t=MI(s,e),n=TI(s,e),{house:a,windowMaterials:i}=EI(s,e),{lamps:o,lampLights:l}=_I(s,e);return{trees:t,bushes:n,house:a,lamps:o,lampLights:l,windowMaterials:i}}function MI(s,e){const t=new Hn;t.name="trees_instanced";const n=CI(e),a=n.length,i=new ft({color:4863784,roughness:.9}),o=new ft({color:2972199,roughness:.8}),l=new Xn(.3,.5,3,8),c=new Wt(2,8,6),d=new Wt(1.5,8,6),f=new yr(l,i,a),p=new yr(c,o,a),m=new yr(d,o,a);f.castShadow=!0,f.receiveShadow=!0,p.castShadow=!0,m.castShadow=!0,f.name="trees_trunks",p.name="trees_foliage1",m.name="trees_foliage2";const b=new il,x=new vt,w=new rl,k=new vt;return n.forEach((S,j)=>{const C=S.scale,N=Math.random()*Math.PI*2;x.set(S.x,1.5*C,S.z),w.setFromEuler(new eM(0,N,0)),k.set(C,C,C),b.compose(x,w,k),f.setMatrixAt(j,b),x.set(S.x,4*C,S.z),k.set(C,C*.8,C),b.compose(x,w,k),p.setMatrixAt(j,b),x.set(S.x,5.5*C,S.z),k.set(C,C,C),b.compose(x,w,k),m.setMatrixAt(j,b)}),f.instanceMatrix.needsUpdate=!0,p.instanceMatrix.needsUpdate=!0,m.instanceMatrix.needsUpdate=!0,t.add(f),t.add(p),t.add(m),s.add(t),t}function TI(s,e){const t=NI(e),n=[],a=m=>{const b=Math.sin(m)*1e4;return b-Math.floor(b)};t.forEach((m,b)=>{const x=2+Math.floor(a(b*100)*2);for(let w=0;w<x;w++){const k=b*100+w,S=.6+a(k)*.4,j=(a(k+1)-.5)*.8,C=(a(k+2)-.5)*.8,N=.7+a(k+3)*.2;n.push({x:m.x+j,y:S*.7,z:m.z+C,scaleX:S,scaleY:S*N,scaleZ:S})}});const i=new ft({color:4024887,roughness:.85}),o=new Wt(1,8,6),l=new yr(o,i,n.length);l.castShadow=!0,l.receiveShadow=!0,l.name="bushes_instanced";const c=new il,d=new vt,f=new rl,p=new vt;return n.forEach((m,b)=>{d.set(m.x,m.y,m.z),f.identity(),p.set(m.scaleX,m.scaleY,m.scaleZ),c.compose(d,f,p),l.setMatrixAt(b,c)}),l.instanceMatrix.needsUpdate=!0,s.add(l),l}function EI(s,e){const t=new Hn,n=[],a=new ln(6,4,5),i=new ft({color:13935988,roughness:.8}),o=new Ie(a,i);o.position.y=2,o.castShadow=!0,o.receiveShadow=!0,t.add(o);const l=new bc(5,3,4),c=new ft({color:9127187,roughness:.7}),d=new Ie(l,c);d.position.y=5.5,d.rotation.y=Math.PI/4,d.castShadow=!0,t.add(d);const f=new ln(1.2,2,.1),p=new ft({color:6045747,roughness:.6}),m=new Ie(f,p);m.position.set(0,1,2.55),t.add(m);const b=new ln(.8,.8,.1),x=new ft({color:16777130,emissive:16755268,emissiveIntensity:.5,roughness:.3});n.push(x);const w=new Ie(b,x);w.position.set(-1.5,2.5,2.55),t.add(w);const k=new Ie(b,x);k.position.set(1.5,2.5,2.55),t.add(k);const S=new ln(.8,2,.8),j=new ft({color:9127187,roughness:.8}),C=new Ie(S,j);C.position.set(1.5,6,-1),C.castShadow=!0,t.add(C);const N=e/2;return t.position.set(-N-5,0,N-5),t.rotation.y=Math.PI/6,t.name="house",s.add(t),{house:t,windowMaterials:n}}function _I(s,e){const t=new Hn;t.name="lamps_instanced";const n=[],a=AI(e),i=a.length,o=new ft({color:3355443,roughness:.5,metalness:.5}),l=new ft({color:2236962,roughness:.4,metalness:.6}),c=new ft({color:16772778,emissive:16755268,emissiveIntensity:2,roughness:.2}),d=new Xn(.1,.15,5,8),f=new Xn(.05,.05,1,8),p=new Xn(.4,.3,.6,8),m=new Wt(.25,8,8),b=new yr(d,o,i),x=new yr(f,o,i),w=new yr(p,l,i),k=new yr(m,c,i);b.castShadow=!0,b.name="lamps_poles",x.name="lamps_arms",w.name="lamps_housings",k.name="lamps_bulbs";const S=new il,j=new vt,C=new rl,N=new vt(1,1,1);return a.forEach((_,D)=>{j.set(_.x,2.5,_.z),C.identity(),S.compose(j,C,N),b.setMatrixAt(D,S),j.set(_.x+.4,4.8,_.z),C.setFromEuler(new eM(0,0,Math.PI/2)),S.compose(j,C,N),x.setMatrixAt(D,S),j.set(_.x+.8,4.8,_.z),C.identity(),S.compose(j,C,N),w.setMatrixAt(D,S),j.set(_.x+.8,4.5,_.z),S.compose(j,C,N),k.setMatrixAt(D,S);const L=new YA(16755285,1.5,15);L.position.set(_.x,5,_.z),n.push(L),s.add(L)}),b.instanceMatrix.needsUpdate=!0,x.instanceMatrix.needsUpdate=!0,w.instanceMatrix.needsUpdate=!0,k.instanceMatrix.needsUpdate=!0,t.add(b),t.add(x),t.add(w),t.add(k),s.add(t),{lamps:t,lampLights:n}}function Kj(s,e=$x){const t=e*1.5,n=new wr(t,t),a=new ft({color:2972199,roughness:.9,metalness:0}),i=new Ie(n,a);return i.rotation.x=-Math.PI/2,i.position.y=-.05,i.receiveShadow=!0,i.name="grass",s.add(i),i}class DI{constructor(e){U(this,"scene");U(this,"ground",null);U(this,"gridHelper",null);U(this,"sun",null);U(this,"moon",null);U(this,"stars",null);U(this,"ambientLight",null);U(this,"hemiLight",null);U(this,"mainLight",null);U(this,"fillLight",null);U(this,"lampLights",[]);U(this,"windowMaterials",[]);U(this,"trees",null);U(this,"bushes",null);U(this,"house",null);U(this,"lamps",null);U(this,"grass",null);U(this,"baseFogDensity",.01);U(this,"brightness",1);U(this,"skyColorOverride",null);U(this,"currentFloorStyle","concrete");U(this,"galacticState",null);U(this,"cloudState",null);U(this,"cloudsVisible",!0);U(this,"debugHourOverride",null);U(this,"tempColor",new Ut);U(this,"currentSize",$x);U(this,"terrainVisibility",{trees:!0,bushes:!0,house:!0,lamps:!0,grass:!0});this.scene=e}setGridVisible(e){this.gridHelper&&(this.gridHelper.visible=e)}create(){this.createGround(),this.grass=Kj(this.scene,this.currentSize),this.createGrid(),this.sun=yI(),this.scene.add(this.sun),this.moon=xI(),this.scene.add(this.moon),this.stars=jI(),this.scene.add(this.stars),this.cloudState=wI(),this.scene.add(this.cloudState.group);const e=Vj(this.scene,this.currentSize);this.trees=e.trees,this.bushes=e.bushes,this.house=e.house,this.lamps=e.lamps,this.lampLights=e.lampLights,this.windowMaterials=e.windowMaterials,this.createLighting(),this.createFog(),this.updateTimeOfDay()}updateTimeOfDay(){const e=bI(this.getCurrentHour());this.applyTimeConfig(e)}getCurrentHour(){if(this.debugHourOverride!==null)return this.debugHourOverride;const e=new Date;return e.getHours()+e.getMinutes()/60}setDebugTime(e){this.debugHourOverride=e,this.updateTimeOfDay(),console.log(`[Battlefield] Time set to: ${e!==null?`${e}:00`:"real time"}`)}setTimeMode(e){const n={auto:null,day:12,night:23,dawn:6,dusk:19.5}[e]??null;this.debugHourOverride=n,this.updateTimeOfDay(),console.log(`[Battlefield] Time mode set to: ${e} (${n!==null?`${n}:00`:"real time"})`)}setTerrainConfig(e){e.battlefieldSize!==void 0&&e.battlefieldSize!==this.currentSize&&this.resizeBattlefield(e.battlefieldSize),this.terrainVisibility={trees:e.showTrees,bushes:e.showBushes,house:e.showHouse,lamps:e.showLamps,grass:e.showGrass},this.trees&&(this.trees.visible=e.showTrees),this.bushes&&(this.bushes.visible=e.showBushes),this.house&&(this.house.visible=e.showHouse),this.lamps&&(this.lamps.visible=e.showLamps),this.lampLights.forEach(t=>{t.visible=e.showLamps}),this.grass&&(this.grass.visible=e.showGrass),e.showClouds!==void 0&&(this.cloudsVisible=e.showClouds,this.cloudState&&(this.cloudState.group.visible=e.showClouds)),this.baseFogDensity=e.fogDensity*.008,e.brightness!==void 0&&(this.brightness=e.brightness),e.skyColor!==void 0&&(this.skyColorOverride=e.skyColor),this.updateTimeOfDay()}resizeBattlefield(e){this.currentSize=e,console.log(`[Battlefield] Resizing to ${e}x${e}`),this.ground&&(this.ground.geometry.dispose(),this.disposeMaterial(this.ground.material),this.scene.remove(this.ground),this.ground=null),this.createGround(),this.setFloorStyle(this.currentFloorStyle,!0),this.gridHelper&&(this.gridHelper.geometry.dispose(),this.gridHelper.material instanceof vr&&this.gridHelper.material.dispose(),this.scene.remove(this.gridHelper),this.gridHelper=null),this.createGrid(),this.grass&&(this.grass.geometry.dispose(),this.disposeMaterial(this.grass.material),this.scene.remove(this.grass)),this.grass=Kj(this.scene,this.currentSize),this.grass.visible=this.terrainVisibility.grass,this.disposeTerrainElements();const t=Vj(this.scene,this.currentSize);if(this.trees=t.trees,this.bushes=t.bushes,this.house=t.house,this.lamps=t.lamps,this.lampLights=t.lampLights,this.windowMaterials=t.windowMaterials,this.trees&&(this.trees.visible=this.terrainVisibility.trees),this.bushes&&(this.bushes.visible=this.terrainVisibility.bushes),this.house&&(this.house.visible=this.terrainVisibility.house),this.lamps&&(this.lamps.visible=this.terrainVisibility.lamps),this.lampLights.forEach(n=>{n.visible=this.terrainVisibility.lamps}),this.mainLight){const n=this.currentSize*.6;this.mainLight.shadow.camera.left=-n,this.mainLight.shadow.camera.right=n,this.mainLight.shadow.camera.top=n,this.mainLight.shadow.camera.bottom=-n,this.mainLight.shadow.camera.updateProjectionMatrix()}}disposeTerrainElements(){this.trees&&(this.disposeGroup(this.trees),this.scene.remove(this.trees),this.trees=null),this.bushes&&(this.bushes.geometry.dispose(),this.bushes.material.dispose(),this.scene.remove(this.bushes),this.bushes=null),this.house&&(this.disposeGroup(this.house),this.scene.remove(this.house),this.house=null),this.lamps&&(this.disposeGroup(this.lamps),this.scene.remove(this.lamps),this.lamps=null);for(const e of this.lampLights)this.scene.remove(e),e.dispose();this.lampLights=[],this.windowMaterials=[]}setFloorStyle(e,t=!1){if(this.currentFloorStyle===e&&!t)return;const n=this.currentFloorStyle;if(this.currentFloorStyle=e,typeof window<"u"&&window.__TIDE_MEMORY_DEBUG__&&console.log(`[Battlefield] Memory: Switching floor from ${n} to ${e}`),n==="galactic"&&(Uj(this.scene,this.galacticState,this.disposeMaterial.bind(this)),this.galacticState=null,this.ground&&(this.ground.visible=!0)),this.ground){const a=this.ground.material;if(e==="galactic")console.log("[Battlefield] Creating galactic floor..."),this.ground.visible=!1,this.galacticState=uI(this.scene),console.log("[Battlefield] Galactic elements created");else{this.ground.visible=!0,a.transparent=!1,a.opacity=1,a.side=QA,a.depthWrite=!0,this.ground.renderOrder=0;const i=a.map;if(e==="none")a.map=null,a.color.setHex(2972199),a.roughness=.9,a.metalness=0,a.emissive.setHex(0),a.emissiveIntensity=0,a.needsUpdate=!0;else{const o=Hj(e);o.wrapS=Yo,o.wrapT=Yo;const l=e==="pokemon-stadium"?1:Math.round(this.currentSize/5);o.repeat.set(l,l),a.map=o,a.needsUpdate=!0}switch(i&&(i.dispose(),typeof window<"u"&&window.__TIDE_MEMORY_DEBUG__&&console.log("[Battlefield] Memory: Disposed old floor texture")),e){case"none":break;case"metal":a.color.setHex(8947865),a.roughness=.4,a.metalness=.8,a.emissive.setHex(0),a.emissiveIntensity=0;break;case"hex":a.color.setHex(4482696),a.roughness=.6,a.metalness=.4,a.emissive.setHex(1122867),a.emissiveIntensity=.2;break;case"circuit":a.color.setHex(2245683),a.roughness=.7,a.metalness=.3,a.emissive.setHex(13090),a.emissiveIntensity=.4;break;case"pokemon-stadium":a.color.setHex(11184810),a.roughness=1,a.metalness=0,a.emissive.setHex(0),a.emissiveIntensity=0;break;default:a.color.setHex(5592405),a.roughness=.8,a.metalness=.1,a.emissive.setHex(0),a.emissiveIntensity=0}}}console.log(`[Battlefield] Floor style set to: ${e}`)}updateGalacticAnimation(e){this.currentFloorStyle!=="galactic"||!this.galacticState||gI(this.galacticState,e)}updateCloudAnimation(e){!this.cloudState||!this.cloudsVisible||kI(this.cloudState,e)}disposeMaterial(e){var t;(e instanceof Ke||e instanceof ft||e instanceof ts)&&((t=e.map)==null||t.dispose()),e.dispose()}applyTimeConfig(e){const t=this.skyColorOverride?parseInt(this.skyColorOverride.replace("#",""),16):e.skyColor;if(this.scene.background instanceof Ut?this.scene.background.setHex(t):this.scene.background=this.tempColor.setHex(t).clone(),this.scene.fog instanceof RS){const n=this.skyColorOverride?parseInt(this.skyColorOverride.replace("#",""),16):e.fogColor;this.scene.fog.color.setHex(n);const a=this.baseFogDensity>0?this.baseFogDensity/.008:0;this.scene.fog.density=e.fogDensity*a}if(this.sun&&(this.sun.position.copy(e.sunPosition),this.sun.material.opacity=e.sunOpacity,this.sun.visible=e.sunOpacity>.01),this.moon&&(this.moon.position.copy(e.moonPosition),this.moon.material.opacity=e.moonOpacity,this.moon.visible=e.moonOpacity>.01),this.stars&&(this.stars.material.opacity=e.starsOpacity,this.stars.visible=e.starsOpacity>.01),this.ambientLight&&(this.ambientLight.color.setHex(e.ambientColor),this.ambientLight.intensity=e.ambientIntensity*this.brightness),this.hemiLight&&(this.hemiLight.color.setHex(e.hemiSkyColor),this.hemiLight.groundColor.setHex(e.hemiGroundColor),this.hemiLight.intensity=e.hemiIntensity*this.brightness),this.mainLight&&(this.mainLight.color.setHex(e.mainLightColor),this.mainLight.intensity=e.mainLightIntensity*this.brightness,e.sunOpacity>e.moonOpacity?this.mainLight.position.copy(e.sunPosition):this.mainLight.position.copy(e.moonPosition)),this.lampLights.forEach(n=>{n.intensity=e.lampIntensity}),this.windowMaterials.forEach(n=>{n.emissiveIntensity=e.windowEmissive}),this.cloudState&&this.cloudsVisible){let n;switch(e.phase){case"day":n=1;break;case"dawn":case"dusk":n=.7;break;case"night":n=.2;break;default:n=1}SI(this.cloudState,n)}}getGround(){return this.ground}createGround(){const e=new wr(this.currentSize,this.currentSize),t=Hj(this.currentFloorStyle);t.wrapS=Yo,t.wrapT=Yo;const n=this.currentFloorStyle==="galactic"?1:Math.round(this.currentSize/5);t.repeat.set(n,n);const a=new ft({map:t,color:5592405,roughness:.8,metalness:.1});this.ground=new Ie(e,a),this.ground.rotation.x=-Math.PI/2,this.ground.receiveShadow=!0,this.ground.name="ground",this.scene.add(this.ground)}createGrid(){const e=Math.round(this.currentSize/2);this.gridHelper=new RP(this.currentSize,e,2763322,1710634),this.gridHelper.position.y=.01,this.scene.add(this.gridHelper)}createLogo(){const t=new Sx().load("/assets/textures/logo-blanco.png"),n=10,a=4,i=new wr(n,a),o=new Ke({map:t,transparent:!0,opacity:.8,side:Ls,depthWrite:!1}),l=new Ie(i,o);l.rotation.x=-Math.PI/2,l.position.set(0,.02,0),l.name="tideLogo",this.scene.add(l)}createFog(){this.scene.fog=new RS(662058,.01),this.scene.background=new Ut(662058)}createLighting(){this.ambientLight=new Ax(16777215,.6),this.scene.add(this.ambientLight),this.hemiLight=new LP(16777198,5596791,.7),this.hemiLight.position.set(0,20,0),this.scene.add(this.hemiLight),this.mainLight=new uc(16777215,1.2),this.mainLight.position.set(30,50,-30),this.mainLight.castShadow=!0,this.mainLight.shadow.mapSize.width=2048,this.mainLight.shadow.mapSize.height=2048,this.mainLight.shadow.camera.near=.5,this.mainLight.shadow.camera.far=200;const e=this.currentSize*.6;this.mainLight.shadow.camera.left=-e,this.mainLight.shadow.camera.right=e,this.mainLight.shadow.camera.top=e,this.mainLight.shadow.camera.bottom=-e,this.scene.add(this.mainLight),this.fillLight=new uc(16777215,.6),this.fillLight.position.set(-10,15,10),this.scene.add(this.fillLight);const t=new uc(11193599,.5);t.position.set(0,20,30),this.scene.add(t)}dispose(){var t,n;Uj(this.scene,this.galacticState,this.disposeMaterial.bind(this)),this.galacticState=null;const e=this.scene.getObjectByName("tideLogo");e&&((t=e.geometry)==null||t.dispose(),this.disposeMaterial(e.material),this.scene.remove(e)),this.ground&&(this.ground.geometry.dispose(),this.disposeMaterial(this.ground.material),this.scene.remove(this.ground)),this.gridHelper&&(this.gridHelper.geometry.dispose(),this.gridHelper.material instanceof vr&&this.gridHelper.material.dispose(),this.scene.remove(this.gridHelper)),this.grass&&(this.grass.geometry.dispose(),this.disposeMaterial(this.grass.material),this.scene.remove(this.grass)),this.sun&&(this.disposeMaterial(this.sun.material),this.scene.remove(this.sun)),this.moon&&(this.disposeMaterial(this.moon.material),this.scene.remove(this.moon)),this.stars&&(this.stars.geometry.dispose(),this.stars.material.dispose(),this.scene.remove(this.stars)),this.trees&&(this.disposeGroup(this.trees),this.scene.remove(this.trees),this.trees=null),this.bushes&&(this.bushes.geometry.dispose(),this.bushes.material.dispose(),this.scene.remove(this.bushes),this.bushes=null),this.house&&(this.disposeGroup(this.house),this.scene.remove(this.house),this.house=null),this.lamps&&(this.disposeGroup(this.lamps),this.scene.remove(this.lamps),this.lamps=null);for(const a of this.lampLights)this.scene.remove(a),a.dispose();this.lampLights=[],this.windowMaterials=[],this.ambientLight&&this.scene.remove(this.ambientLight),this.hemiLight&&this.scene.remove(this.hemiLight),this.mainLight&&((n=this.mainLight.shadow.map)==null||n.dispose(),this.scene.remove(this.mainLight)),this.fillLight&&this.scene.remove(this.fillLight)}disposeGroup(e){e.traverse(t=>{var n;t instanceof Ie&&((n=t.geometry)==null||n.dispose(),t.material instanceof vr?this.disposeMaterial(t.material):Array.isArray(t.material)&&t.material.forEach(a=>this.disposeMaterial(a)))})}}function Lt(s,e,t,n,a={},i="global"){return{id:s,name:e,description:t,key:n,modifiers:a,enabled:!0,context:i}}const yb=[Lt("toggle-commander","Toggle Commander","Open/close Commander View","k",{ctrl:!0}),Lt("toggle-commander-tab","Toggle Commander (Tab)","Open/close Commander View with Tab","Tab",{}),Lt("spawn-agent","Spawn Agent","Open new agent spawn modal","n",{alt:!0}),Lt("select-agent-1","Select Agent 1","Select first agent","1",{ctrl:!0}),Lt("select-agent-2","Select Agent 2","Select second agent","2",{ctrl:!0}),Lt("select-agent-3","Select Agent 3","Select third agent","3",{ctrl:!0}),Lt("select-agent-4","Select Agent 4","Select fourth agent","4",{ctrl:!0}),Lt("select-agent-5","Select Agent 5","Select fifth agent","5",{ctrl:!0}),Lt("select-agent-6","Select Agent 6","Select sixth agent","6",{ctrl:!0}),Lt("select-agent-7","Select Agent 7","Select seventh agent","7",{ctrl:!0}),Lt("select-agent-8","Select Agent 8","Select eighth agent","8",{ctrl:!0}),Lt("select-agent-9","Select Agent 9","Select ninth agent","9",{ctrl:!0}),Lt("delete-selected","Delete Selected","Remove selected agents","Delete",{}),Lt("delete-selected-backspace","Delete Selected (Backspace)","Remove selected agents","Backspace",{}),Lt("deselect-all","Deselect All","Clear agent selection","Escape",{}),Lt("open-terminal","Open Terminal","Open terminal for selected agent","Space",{}),Lt("dashboard-selector-toggle","Dashboard Selector","Enable dashboard card selector",",",{}),Lt("dashboard-vim-left","Dashboard Left","Move dashboard selector left","h",{}),Lt("dashboard-vim-down","Dashboard Down","Move dashboard selector down","j",{}),Lt("dashboard-vim-up","Dashboard Up","Move dashboard selector up","k",{}),Lt("dashboard-vim-right","Dashboard Right","Move dashboard selector right","l",{}),Lt("next-agent","Next Agent","Select next agent on battlefield","l",{alt:!0}),Lt("prev-agent","Previous Agent","Select previous agent on battlefield","h",{alt:!0}),Lt("next-working-agent","Next Working Agent","Select next working agent on battlefield","l",{alt:!0,shift:!0}),Lt("prev-working-agent","Previous Working Agent","Select previous working agent on battlefield","h",{alt:!0,shift:!0}),Lt("next-message","Next Message","Navigate to next message in terminal","j",{alt:!0}),Lt("prev-message","Previous Message","Navigate to previous message in terminal","k",{alt:!0}),Lt("page-down-messages","Page Down Messages","Jump down 10 messages in terminal","d",{alt:!0,shift:!0}),Lt("page-up-messages","Page Up Messages","Jump up 10 messages in terminal","u",{alt:!0}),Lt("next-agent-terminal","Next Agent (Terminal)","Switch to next agent in terminal","l",{alt:!0}),Lt("prev-agent-terminal","Previous Agent (Terminal)","Switch to previous agent in terminal","h",{alt:!0}),Lt("activate-message","Activate Message","Click on interactive element in selected message","Space",{}),Lt("toggle-file-explorer","Toggle File Explorer","Open/close file explorer","e",{alt:!0}),Lt("file-explorer-close-tab","Close File Tab","Close active file tab in explorer","w",{alt:!0}),Lt("toggle-spotlight","Toggle Spotlight","Open/close global search","p",{alt:!0}),Lt("open-database","Open Database","Open last used database query builder","d",{alt:!0}),Lt("toggle-2d-view","Cycle View Mode","Cycle between 3D, 2D, and Dashboard views","2",{alt:!0}),Lt("commander-close","Close Commander","Close Commander View","Escape",{},"commander"),Lt("commander-vim-left","Navigate Left","Move focus left (Vim H)","h",{alt:!0},"commander"),Lt("commander-vim-down","Navigate Down","Move focus down (Vim J)","j",{alt:!0},"commander"),Lt("commander-vim-up","Navigate Up","Move focus up (Vim K)","k",{alt:!0},"commander"),Lt("commander-vim-right","Navigate Right","Move focus right (Vim L)","l",{alt:!0},"commander"),Lt("commander-expand","Expand/Collapse","Toggle agent expansion","o",{alt:!0},"commander"),Lt("commander-new-agent","New Agent","Open spawn form in commander","n",{alt:!0},"commander"),Lt("commander-next-tab","Next Tab","Switch to next area tab","Tab",{},"commander"),Lt("commander-prev-tab","Previous Tab","Switch to previous area tab","Tab",{shift:!0},"commander"),Lt("toolbox-close","Close Toolbox","Close Settings panel","Escape",{},"toolbox")];function kt(s,e){if(!e||!e.enabled)return!1;const{ctrl:t,alt:n,shift:a}=e.modifiers,i=t?s.ctrlKey||s.metaKey:!s.ctrlKey&&!s.metaKey,o=n?s.altKey:!s.altKey,l=a?s.shiftKey:!s.shiftKey;let c;if(t?c=(s.ctrlKey||s.metaKey)&&o&&l:c=i&&o&&l,!c)return!1;const d=e.key;if(d.length===1&&/^[a-zA-Z]$/.test(d)){const p=`Key${d.toUpperCase()}`;return s.code===p}if(d.length===1&&/^[0-9]$/.test(d)){const p=`Digit${d}`;return s.code===p}return d==="Space"||d===" "?s.code==="Space":s.key===d}function tl(s){const e=[];if(s.modifiers.ctrl){const n=navigator.platform.toUpperCase().indexOf("MAC")>=0;e.push(n?"⌘":"Ctrl")}if(s.modifiers.alt){const n=navigator.platform.toUpperCase().indexOf("MAC")>=0;e.push(n?"⌥":"Alt")}s.modifiers.shift&&e.push("Shift"),s.modifiers.meta&&e.push("⌘");let t=s.key;return t===" "?t="Space":t.length===1&&(t=t.toUpperCase()),e.push(t),e.join("+")}function PI(s,e,t,n){return s.filter(a=>{if(a.id===t||!a.enabled||n&&a.context!=="global"&&a.context!==n)return!1;const i=f=>f===" "||f==="Space"?"Space":f.length===1?f.toLowerCase():f,o=i(a.key),l=i(e.key);if(o!==l)return!1;const c=a.modifiers,d=e.modifiers;return(c.ctrl||!1)===(d.ctrl||!1)&&(c.alt||!1)===(d.alt||!1)&&(c.shift||!1)===(d.shift||!1)&&(c.meta||!1)===(d.meta||!1)})}class Zh{constructor(e=200){U(this,"lastClickTime",0);U(this,"lastClickId",null);U(this,"clickTimer",null);U(this,"threshold");this.threshold=e}handleClick(e){const t=performance.now(),n=t-this.lastClickTime;return this.lastClickTime>0&&this.lastClickId===e&&n<this.threshold?(this.clearTimer(),this.reset(),"double"):(this.lastClickId=e,this.lastClickTime=t,this.clearTimer(),this.clickTimer=setTimeout(()=>{this.clickTimer=null,this.lastClickId=null,this.lastClickTime=0},this.threshold),"single")}reset(){this.clearTimer(),this.lastClickId=null,this.lastClickTime=0}clearTimer(){this.clickTimer&&(clearTimeout(this.clickTimer),this.clickTimer=null)}dispose(){this.clearTimer()}}const xf=class xf{constructor(e,t,n){U(this,"canvas");U(this,"controls");U(this,"callbacks");U(this,"activePointers",new Map);U(this,"touchStartTime",0);U(this,"touchStartPos",{x:0,y:0});U(this,"isTouchDragging",!1);U(this,"isTouchPanning",!1);U(this,"touchPanStart",{x:0,y:0});U(this,"longPressTimer",null);U(this,"longPressTriggered",!1);U(this,"isPinching",!1);U(this,"lastPinchDistance",0);U(this,"twoFingerPanStart",{x:0,y:0});U(this,"lastTwoFingerAngle",0);U(this,"isThreeFingerDrag",!1);U(this,"threeFingerStart",{x:0,y:0});this.canvas=e,this.controls=t,this.callbacks=n}onTouchStart(e){for(let t=0;t<e.changedTouches.length;t++){const n=e.changedTouches[t];this.activePointers.set(n.identifier,{x:n.clientX,y:n.clientY})}this.clearLongPressTimer(),this.longPressTriggered=!1,e.touches.length===1?this.handleSingleTouchStart(e.touches[0]):e.touches.length===2?this.handleTwoTouchStart(e):e.touches.length>=3&&this.handleThreeTouchStart(e)}onTouchMove(e){for(let t=0;t<e.changedTouches.length;t++){const n=e.changedTouches[t];this.activePointers.set(n.identifier,{x:n.clientX,y:n.clientY})}e.touches.length>=3&&this.isThreeFingerDrag?this.handleThreeTouchMove(e):e.touches.length===2&&this.isPinching?this.handleTwoTouchMove(e):e.touches.length===1&&!this.isPinching&&this.handleSingleTouchMove(e.touches[0])}onTouchEnd(e){this.clearLongPressTimer();for(let t=0;t<e.changedTouches.length;t++){const n=e.changedTouches[t];this.activePointers.delete(n.identifier)}return e.touches.length===0?this.handleAllTouchesEnd(e):(e.touches.length===2?this.transitionToTwoTouches(e):e.touches.length===1&&this.transitionToOneTouch(e.touches[0]),!1)}onPointerCancel(e){this.activePointers.delete(e),this.reset()}reset(){this.isTouchPanning=!1,this.isPinching=!1,this.isThreeFingerDrag=!1,this.lastPinchDistance=0,this.isTouchDragging=!1,this.longPressTriggered=!1,this.clearLongPressTimer()}get isDragging(){return this.isTouchDragging}get wasLongPress(){return this.longPressTriggered}dispose(){this.clearLongPressTimer(),this.activePointers.clear()}reattach(e,t){this.canvas=e,this.controls=t}handleSingleTouchStart(e){this.touchStartTime=performance.now(),this.touchStartPos={x:e.clientX,y:e.clientY},this.isTouchDragging=!1,this.isTouchPanning=!1;const t=e.clientX,n=e.clientY;this.longPressTimer=setTimeout(()=>{this.longPressTriggered=!0,this.longPressTimer=null,this.callbacks.onLongPress(t,n),navigator.vibrate&&navigator.vibrate(50)},xf.LONG_PRESS_DURATION)}handleTwoTouchStart(e){e.preventDefault(),this.isPinching=!0,this.isTouchPanning=!1,this.isThreeFingerDrag=!1,this.lastPinchDistance=this.getTouchDistance(e.touches[0],e.touches[1]);const t=this.getTouchCenter(e.touches[0],e.touches[1]);this.twoFingerPanStart={x:t.x,y:t.y},this.lastTwoFingerAngle=this.getTwoFingerAngle(e.touches[0],e.touches[1])}handleThreeTouchStart(e){e.preventDefault(),this.isPinching=!1,this.isThreeFingerDrag=!0,this.controls.enableRotate=!0;const t=this.getMultiTouchCenter(e.touches);this.threeFingerStart={x:t.x,y:t.y}}handleSingleTouchMove(e){const t=e.clientX-this.touchStartPos.x,n=e.clientY-this.touchStartPos.y;if(!this.isTouchPanning&&(Math.abs(t)>lc||Math.abs(n)>lc)&&(this.clearLongPressTimer(),this.isTouchPanning=!0,this.isTouchDragging=!0,this.touchPanStart={x:e.clientX,y:e.clientY}),this.isTouchPanning){const a=e.clientX-this.touchPanStart.x,i=e.clientY-this.touchPanStart.y;this.callbacks.onPan(a,i),this.touchPanStart={x:e.clientX,y:e.clientY}}}handleTwoTouchMove(e){this.clearLongPressTimer(),e.preventDefault();const t=this.getTouchDistance(e.touches[0],e.touches[1]),n=this.getTouchCenter(e.touches[0],e.touches[1]),a=this.getTwoFingerAngle(e.touches[0],e.touches[1]);if(this.lastPinchDistance>0){const c=this.lastPinchDistance/t;this.callbacks.onPinchZoom(c,n)}this.lastPinchDistance=t;const i=n.x-this.twoFingerPanStart.x,o=n.y-this.twoFingerPanStart.y;(Math.abs(i)>1||Math.abs(o)>1)&&(this.callbacks.onOrbit(i,o),this.twoFingerPanStart={x:n.x,y:n.y});let l=a-this.lastTwoFingerAngle;l>Math.PI&&(l-=2*Math.PI),l<-Math.PI&&(l+=2*Math.PI),Math.abs(l)>.01&&(this.callbacks.onRotation(l),this.lastTwoFingerAngle=a)}handleThreeTouchMove(e){this.clearLongPressTimer(),e.preventDefault();const t=this.getMultiTouchCenter(e.touches),n=t.x-this.threeFingerStart.x,a=t.y-this.threeFingerStart.y;(Math.abs(n)>1||Math.abs(a)>1)&&(this.callbacks.onOrbit(n,a),this.threeFingerStart={x:t.x,y:t.y})}handleAllTouchesEnd(e){const t=performance.now()-this.touchStartTime,n=!this.isTouchDragging&&!this.longPressTriggered&&t<400,a=this.isTouchPanning;if(n&&e.changedTouches.length>0){const i=e.changedTouches[0];this.callbacks.onTap(i.clientX,i.clientY)}return a&&this.callbacks.onPanEnd(),this.reset(),n}transitionToTwoTouches(e){this.isThreeFingerDrag=!1,this.isPinching=!0,this.lastPinchDistance=this.getTouchDistance(e.touches[0],e.touches[1]);const t=this.getTouchCenter(e.touches[0],e.touches[1]);this.twoFingerPanStart={x:t.x,y:t.y}}transitionToOneTouch(e){this.isPinching=!1,this.isThreeFingerDrag=!1,this.lastPinchDistance=0,this.touchPanStart={x:e.clientX,y:e.clientY},this.touchStartPos={x:e.clientX,y:e.clientY}}clearLongPressTimer(){this.longPressTimer&&(clearTimeout(this.longPressTimer),this.longPressTimer=null)}getTouchDistance(e,t){const n=t.clientX-e.clientX,a=t.clientY-e.clientY;return Math.sqrt(n*n+a*a)}getTouchCenter(e,t){return{x:(e.clientX+t.clientX)/2,y:(e.clientY+t.clientY)/2}}getTwoFingerAngle(e,t){const n=t.clientX-e.clientX,a=t.clientY-e.clientY;return Math.atan2(a,n)}getMultiTouchCenter(e){let t=0,n=0;for(let a=0;a<e.length;a++)t+=e[a].clientX,n+=e[a].clientY;return{x:t/e.length,y:n/e.length}}};U(xf,"LONG_PRESS_DURATION",500);let Iy=xf;function RI(s){const e=Math.abs(s.deltaX),t=Math.abs(s.deltaY);return s.ctrlKey||e>1?!0:t>80&&e<1?!1:t>0&&t<=80}class LI{constructor(e,t,n){U(this,"cameraController");U(this,"callbacks");U(this,"canvas");U(this,"isGestureActive",!1);U(this,"gestureScale",1);U(this,"onGestureStart",e=>{const t=e;t.preventDefault(),z.getTrackpadConfig().enabled&&(this.isGestureActive=!0,this.gestureScale=t.scale)});U(this,"onGestureChange",e=>{const t=e;t.preventDefault();const n=z.getTrackpadConfig();if(!(!n.enabled||!this.isGestureActive)&&n.pinchToZoom&&t.scale!==this.gestureScale){const a=t.scale-this.gestureScale;this.callbacks.onZoom(a*n.sensitivity.zoom,t.clientX,t.clientY),this.gestureScale=t.scale}});U(this,"onGestureEnd",e=>{e.preventDefault(),this.isGestureActive=!1,this.gestureScale=1});this.cameraController=e,this.canvas=t,this.callbacks=n,this.setupGestureEvents()}setupGestureEvents(){"GestureEvent"in window&&(this.canvas.addEventListener("gesturestart",this.onGestureStart),this.canvas.addEventListener("gesturechange",this.onGestureChange),this.canvas.addEventListener("gestureend",this.onGestureEnd))}handleWheel(e){const t=z.getTrackpadConfig();if(!t.enabled||!RI(e))return!1;if(e.ctrlKey&&t.pinchToZoom){e.preventDefault();const n=-e.deltaY*.01*t.sensitivity.zoom;return this.callbacks.onZoom(n,e.clientX,e.clientY),!0}if(e.shiftKey&&t.shiftTwoFingerOrbit){e.preventDefault();const n=-e.deltaX*t.sensitivity.orbit,a=-e.deltaY*t.sensitivity.orbit;return this.callbacks.onOrbit(n,a),!0}if(t.twoFingerPan){e.preventDefault();const n=-e.deltaX*t.sensitivity.pan,a=-e.deltaY*t.sensitivity.pan;return this.callbacks.onPan(n,a),!0}return!1}setCameraController(e){this.cameraController=e}setCanvas(e){"GestureEvent"in window&&(this.canvas.removeEventListener("gesturestart",this.onGestureStart),this.canvas.removeEventListener("gesturechange",this.onGestureChange),this.canvas.removeEventListener("gestureend",this.onGestureEnd)),this.canvas=e,this.setupGestureEvents()}dispose(){"GestureEvent"in window&&(this.canvas.removeEventListener("gesturestart",this.onGestureStart),this.canvas.removeEventListener("gesturechange",this.onGestureChange),this.canvas.removeEventListener("gestureend",this.onGestureEnd))}}class OI{constructor(e,t){U(this,"camera");U(this,"canvas");U(this,"raycaster",new OP);U(this,"mouse",new Ys);U(this,"ground",null);U(this,"agentMeshes",new Map);U(this,"agentHitboxes",[]);U(this,"resizeHandlesGetter",()=>[]);U(this,"folderIconMeshesGetter",()=>[]);this.camera=e,this.canvas=t}setReferences(e,t){this.ground=e,this.agentMeshes=t,this.agentHitboxes=[];for(const n of t.values()){const a=n.group.getObjectByName("clickHitbox");this.agentHitboxes.push(a??n.group)}}setResizeHandlesGetter(e){this.resizeHandlesGetter=e}setFolderIconMeshesGetter(e){this.folderIconMeshesGetter=e}setCanvas(e){this.canvas=e}raycastGroundFromEvent(e){if(this.updateMouseFromEvent(e),this.raycaster.setFromCamera(this.mouse,this.camera),this.ground){const a=this.raycaster.intersectObject(this.ground);if(a.length>0){const i=a[0].point;return{x:i.x,z:i.z}}}const t=new kp(new vt(0,1,0),0),n=new vt;return this.raycaster.ray.intersectPlane(t,n)?{x:n.x,z:n.z}:null}raycastGroundFromPoint(e,t){if(this.updateMouseFromPoint(e,t),this.raycaster.setFromCamera(this.mouse,this.camera),this.ground){const i=this.raycaster.intersectObject(this.ground);if(i.length>0){const o=i[0].point;return{x:o.x,z:o.z}}}const n=new kp(new vt(0,1,0),0),a=new vt;return this.raycaster.ray.intersectPlane(n,a)?{x:a.x,z:a.z}:null}checkResizeHandleClick(e){const t=this.resizeHandlesGetter();if(t.length===0)return null;this.updateMouseFromEvent(e),this.raycaster.setFromCamera(this.mouse,this.camera);const n=this.raycaster.intersectObjects(t);return n.length>0?n[0].object:null}checkFolderIconClick(e){const t=this.folderIconMeshesGetter();if(t.length===0)return null;this.updateMouseFromEvent(e),this.raycaster.setFromCamera(this.mouse,this.camera);const n=this.raycaster.intersectObjects(t);return n.length>0?n[0].object:null}findAgentAtPosition(e){if(this.updateMouseFromEvent(e),this.raycaster.setFromCamera(this.mouse,this.camera),this.agentHitboxes.length===0)return null;const t=this.raycaster.intersectObjects(this.agentHitboxes,!1);if(t.length>0){let n=t[0].object;for(;n&&!n.userData.agentId;)n=n.parent;if(n&&n.userData.agentId)return n.userData.agentId}return null}findAgentAtPoint(e,t){if(this.updateMouseFromPoint(e,t),this.raycaster.setFromCamera(this.mouse,this.camera),this.agentHitboxes.length===0)return null;const n=this.raycaster.intersectObjects(this.agentHitboxes,!1);if(n.length>0){let a=n[0].object;for(;a&&!a.userData.agentId;)a=a.parent;if(a&&a.userData.agentId)return a.userData.agentId}return null}raycastToPlane(e,t){if(this.mouse.set(e,t),this.raycaster.setFromCamera(this.mouse,this.camera),this.ground){const i=this.raycaster.intersectObject(this.ground);if(i.length>0)return i[0].point}const n=new kp(new vt(0,1,0),0),a=new vt;return this.raycaster.ray.intersectPlane(n,a)?a:null}projectToScreen(e){const t=this.canvas.getBoundingClientRect(),n=e.clone().project(this.camera);return{x:(n.x+1)/2*t.width+t.left,y:(-n.y+1)/2*t.height+t.top}}getNormalizedMouseFromEvent(e){return this.updateMouseFromEvent(e),this.mouse.clone()}getNormalizedMouseFromPoint(e,t){return this.updateMouseFromPoint(e,t),this.mouse.clone()}getAgentMeshes(){return this.agentMeshes}updateMouseFromEvent(e){const t=this.canvas.getBoundingClientRect();this.mouse.x=(e.clientX-t.left)/t.width*2-1,this.mouse.y=-((e.clientY-t.top)/t.height)*2+1}updateMouseFromPoint(e,t){const n=this.canvas.getBoundingClientRect();this.mouse.x=(e-n.left)/n.width*2-1,this.mouse.y=-((t-n.top)/n.height)*2+1}}const qo=class qo{constructor(e,t,n){U(this,"camera");U(this,"controls");U(this,"canvas");U(this,"raycastProvider",null);U(this,"goalCameraPos",null);U(this,"goalOrbitTarget",null);U(this,"panInertiaVelocity",new vt);U(this,"lastPanEventTime",0);U(this,"panInertiaActive",!1);this.camera=e,this.controls=t,this.canvas=n}setRaycastProvider(e){this.raycastProvider=e}setControls(e){this.controls=e}setCanvas(e){this.canvas=e}handleWheelZoom(e,t=1){var C,N;this.stopPanInertia(),e.preventDefault();const n=Math.sign(e.deltaY)*Math.min(Math.abs(e.deltaY),100)/100,a=n<0,i=.08*Math.abs(n)*t,o=((C=this.goalOrbitTarget)==null?void 0:C.clone())??this.controls.target.clone(),c=(((N=this.goalCameraPos)==null?void 0:N.clone())??this.camera.position.clone()).clone().sub(o),d=c.length(),f=this.controls.minDistance,p=this.controls.maxDistance,m=a?Math.max(f,d*(1-i)):Math.min(p,d*(1+i));if(m===d)return;let b=null;if(this.raycastProvider){const _=this.raycastProvider.getNormalizedMouseFromEvent(e);b=this.raycastProvider.raycastToPlane(_.x,_.y)}if(!b){const _=c.normalize();this.goalCameraPos=o.clone().add(_.multiplyScalar(m)),this.goalOrbitTarget=o.clone();return}const x=m/d,w=b.clone().sub(o),k=1-x,S=o.clone().add(w.multiplyScalar(k));S.y=Math.max(0,S.y);const j=c.normalize();this.goalCameraPos=S.clone().add(j.multiplyScalar(m)),this.goalOrbitTarget=S}handlePinchZoom(e,t){this.stopPanInertia(),this.goalCameraPos=null,this.goalOrbitTarget=null;const n=this.camera.position.clone().sub(this.controls.target),a=n.length(),i=this.controls.minDistance,o=this.controls.maxDistance,l=Math.max(i,Math.min(o,a*e));if(l===a)return;const c=this.canvas.getBoundingClientRect(),d=(t.x-c.left)/c.width*2-1,f=-((t.y-c.top)/c.height)*2+1;let p=null;if(this.raycastProvider&&(p=this.raycastProvider.raycastToPlane(d,f)),!p){const S=n.normalize();this.camera.position.copy(this.controls.target).add(S.multiplyScalar(l));return}const m=l/a,b=p.clone().sub(this.controls.target),x=1-m,w=this.controls.target.clone().add(b.multiplyScalar(x));w.y=Math.max(0,w.y),this.controls.target.copy(w);const k=n.normalize();this.camera.position.copy(w).add(k.multiplyScalar(l))}handlePan(e,t){this.panInertiaActive=!1,this.goalCameraPos=null,this.goalOrbitTarget=null;const n=new vt;this.camera.getWorldDirection(n);const a=new vt(-n.z,0,n.x).normalize(),i=new vt(n.x,0,n.z).normalize(),l=this.camera.position.distanceTo(this.controls.target)*.005,c=new vt;c.add(a.multiplyScalar(-e*l)),c.add(i.multiplyScalar(t*l)),this.controls.target.add(c),this.camera.position.add(c);const d=performance.now(),f=this.lastPanEventTime>0?Math.max(.001,(d-this.lastPanEventTime)/1e3):1/60;this.lastPanEventTime=d,this.panInertiaVelocity.copy(c).divideScalar(f)}handleOrbit(e,t){this.stopPanInertia(),this.goalCameraPos=null,this.goalOrbitTarget=null;const n=.005,a=-e*n,i=-t*n,o=this.camera.position.clone().sub(this.controls.target),l=new Op;l.setFromVector3(o),l.theta+=a,l.phi+=i,l.phi=Math.max(.1,Math.min(Math.PI-.1,l.phi)),o.setFromSpherical(l),this.camera.position.copy(this.controls.target).add(o),this.camera.lookAt(this.controls.target)}handleTwistRotation(e){this.stopPanInertia(),this.goalCameraPos=null,this.goalOrbitTarget=null;const t=this.camera.position.clone().sub(this.controls.target),n=new Op;n.setFromVector3(t),n.theta+=e,n.phi=Math.max(.1,Math.min(Math.PI-.1,n.phi)),t.setFromSpherical(n),this.camera.position.copy(this.controls.target).add(t),this.camera.lookAt(this.controls.target)}updateSmoothZoom(e){if(this.updatePanInertia(e),!this.goalCameraPos||!this.goalOrbitTarget)return;const t=z.getMouseControls().sensitivity.smoothing;if(t<=0){this.camera.position.copy(this.goalCameraPos),this.controls.target.copy(this.goalOrbitTarget),this.goalCameraPos=null,this.goalOrbitTarget=null;return}const n=Nx.lerp(20,3,t),a=1-Math.exp(-n*e);this.camera.position.lerp(this.goalCameraPos,a),this.controls.target.lerp(this.goalOrbitTarget,a),this.camera.position.distanceTo(this.goalCameraPos)<.005&&this.controls.target.distanceTo(this.goalOrbitTarget)<.005&&(this.camera.position.copy(this.goalCameraPos),this.controls.target.copy(this.goalOrbitTarget),this.goalCameraPos=null,this.goalOrbitTarget=null)}get isZoomAnimating(){return this.goalCameraPos!==null}endPanWithInertia(){if(this.lastPanEventTime=0,this.panInertiaVelocity.length()<qo.PAN_INERTIA_MIN_SPEED){this.stopPanInertia();return}this.panInertiaActive=!0}stopPanInertia(){this.panInertiaActive=!1,this.panInertiaVelocity.set(0,0,0),this.lastPanEventTime=0}updatePanInertia(e){if(!this.panInertiaActive)return;const t=this.panInertiaVelocity.clone().multiplyScalar(e);this.controls.target.add(t),this.camera.position.add(t);const n=Math.pow(qo.PAN_INERTIA_DECAY,e*60);this.panInertiaVelocity.multiplyScalar(n),this.panInertiaVelocity.length()<qo.PAN_INERTIA_MIN_SPEED&&this.stopPanInertia()}};U(qo,"PAN_INERTIA_DECAY",.9),U(qo,"PAN_INERTIA_MIN_SPEED",.6);let By=qo;const xb={panSpeed:1,orbitSpeed:1,zoomSpeed:1,smoothing:.3,invertPanX:!1,invertPanY:!1,invertOrbitX:!1,invertOrbitY:!1},Qh={enabled:!0,pinchToZoom:!0,twoFingerPan:!0,shiftTwoFingerOrbit:!0,sensitivity:{zoom:1,pan:1,orbit:1}};function Fo(s,e,t,n,a,i,o){return{id:s,name:e,description:t,button:n,modifiers:a,action:i,enabled:!0,sensitivity:o}}const vb=[Fo("left-click-select","Select/Click","Select agents, click on buildings/areas","left",{},"primary-action"),Fo("left-drag-selection","Selection Box","Drag to select multiple agents","left",{},"selection-box"),Fo("right-click-context","Context Menu / Move","Show context menu or move selected agents","right",{},"context-menu"),Fo("alt-right-drag-pan","Camera Pan","Pan camera with Alt+Right-drag","right",{alt:!0},"camera-pan",1),Fo("middle-drag-orbit","Camera Orbit","Orbit camera with middle-drag","middle",{},"camera-orbit",1),Fo("shift-middle-drag-pan","Camera Pan (Alt)","Alternative pan with Shift+Middle-drag","middle",{shift:!0},"camera-pan",1),Fo("wheel-zoom","Zoom","Zoom camera with scroll wheel","middle",{},"camera-zoom",1)],II={0:"left",1:"middle",2:"right",3:"back",4:"forward"},BI={left:"Left Click",right:"Right Click",middle:"Middle Click",back:"Back Button",forward:"Forward Button"};function Xj(s,e){const t=[];if(s.modifiers.ctrl){const n=typeof navigator<"u"&&navigator.platform.toUpperCase().includes("MAC");t.push(n?"⌘":"Ctrl")}if(s.modifiers.alt){const n=typeof navigator<"u"&&navigator.platform.toUpperCase().includes("MAC");t.push(n?"⌥":"Alt")}return s.modifiers.shift&&t.push("Shift"),t.push(e?e(s.button):BI[s.button]),t.join("+")}function zI(s,e){const t=e.ctrl?s.ctrlKey||s.metaKey:!s.ctrlKey&&!s.metaKey,n=e.alt?s.altKey:!s.altKey,a=e.shift?s.shiftKey:!s.shiftKey;return t&&n&&a}function Zj(s,e,t){return s.filter(n=>{if(n.id===t||!n.enabled||n.button!==e.button)return!1;const a=n.modifiers,i=e.modifiers;return(a.ctrl||!1)===(i.ctrl||!1)&&(a.alt||!1)===(i.alt||!1)&&(a.shift||!1)===(i.shift||!1)})}class FI{constructor(e,t){U(this,"cameraController");U(this,"callbacks");U(this,"activeDragAction",null);U(this,"activeBinding",null);U(this,"dragStartPos",{x:0,y:0});U(this,"lastDragPos",{x:0,y:0});this.cameraController=e,this.callbacks=t}setCameraController(e){this.cameraController=e}findBinding(e,t){const n=z.getMouseControls(),a=II[t];if(!a)return null;const i=n.bindings.filter(o=>o.enabled&&o.button===a).sort((o,l)=>{const c=Object.values(o.modifiers).filter(Boolean).length;return Object.values(l.modifiers).filter(Boolean).length-c});for(const o of i)if(zI(e,o.modifiers))return o;return null}isCameraAction(e){return e==="camera-pan"||e==="camera-orbit"||e==="camera-rotate"||e==="camera-tilt"}handlePointerDown(e){const t=this.findBinding(e,e.button);return t?(this.dragStartPos={x:e.clientX,y:e.clientY},this.lastDragPos={x:e.clientX,y:e.clientY},this.isCameraAction(t.action)?(this.activeDragAction=t.action,this.activeBinding=t,!0):!1):!1}handlePointerMove(e){if(!this.activeDragAction||!this.activeBinding)return!1;const t=e.clientX-this.lastDragPos.x,n=e.clientY-this.lastDragPos.y,a=z.getMouseControls().sensitivity;switch(this.activeDragAction){case"camera-pan":{const i=(a.invertPanX?-t:t)*a.panSpeed,o=(a.invertPanY?-n:n)*a.panSpeed;this.cameraController.handlePan(i,o);break}case"camera-orbit":{const i=(a.invertOrbitX?-t:t)*a.orbitSpeed,o=(a.invertOrbitY?-n:n)*a.orbitSpeed;this.cameraController.handleOrbit(i,o);break}case"camera-rotate":this.cameraController.handleOrbit(t*a.orbitSpeed,0);break;case"camera-tilt":this.cameraController.handleOrbit(0,n*a.orbitSpeed);break;case"selection-box":this.callbacks.onSelectionBoxMove(e.clientX,e.clientY);break}return this.lastDragPos={x:e.clientX,y:e.clientY},!0}handlePointerUp(e){const t=this.activeDragAction!==null;return this.activeDragAction==="selection-box"&&this.callbacks.onSelectionBoxEnd(e.clientX,e.clientY),this.activeDragAction=null,this.activeBinding=null,t}handleWheel(e){const t=z.getMouseControls();if(!t.bindings.find(i=>i.enabled&&i.action==="camera-zoom"))return!1;const a=t.sensitivity;return this.cameraController.handleWheelZoom(e,a.zoomSpeed),!0}get isDragging(){return this.activeDragAction!==null}get currentAction(){return this.activeDragAction}cancelDrag(){this.activeDragAction=null,this.activeBinding=null}}const lo=class lo{constructor(e,t,n,a,i){U(this,"canvas");U(this,"camera");U(this,"controls");U(this,"selectionBox");U(this,"callbacks");U(this,"raycaster");U(this,"cameraController");U(this,"mouseControlHandler");U(this,"trackpadHandler");U(this,"touchHandler");U(this,"agentClickDetector");U(this,"agentTapDetector");U(this,"buildingClickDetector");U(this,"areaClickDetector");U(this,"isDragging",!1);U(this,"dragStart",{x:0,y:0});U(this,"dragCurrent",{x:0,y:0});U(this,"pointerDownOnCanvas",!1);U(this,"isRightDragging",!1);U(this,"rightDragStart",{x:0,y:0});U(this,"isDrawing",!1);U(this,"drawingModeChecker",()=>!1);U(this,"isResizing",!1);U(this,"resizeModeChecker",()=>!1);U(this,"areaAtPositionGetter",()=>null);U(this,"buildingAtPositionGetter",()=>null);U(this,"buildingPositionsGetter",()=>new Map);U(this,"isDraggingBuilding",!1);U(this,"draggingBuildingId",null);U(this,"buildingDragStartPos",null);U(this,"hoveredAgentId",null);U(this,"hoverTimer",null);U(this,"lastMousePos",{x:0,y:0});U(this,"lastHoverCheckTime",0);U(this,"hoveredBuildingId",null);U(this,"buildingHoverTimer",null);U(this,"onPointerDown",e=>{var n,a,i,o,l,c;if(!document.hasFocus()||document.visibilityState==="hidden")return;(a=(n=this.callbacks).onActivity)==null||a.call(n);const t=e.pointerType==="touch";if(e.button===0){this.controls.mouseButtons.LEFT=null;const d=this.raycaster.checkResizeHandleClick(e);if(d){const p=this.raycaster.raycastGroundFromEvent(e);p&&(this.isResizing=!0,t&&this.touchHandler.reset(),(o=(i=this.callbacks).onResizeStart)==null||o.call(i,d,p));return}if(this.drawingModeChecker()){const p=this.raycaster.raycastGroundFromEvent(e);p&&(this.isDrawing=!0,(c=(l=this.callbacks).onDrawStart)==null||c.call(l,p));return}const f=this.raycaster.raycastGroundFromEvent(e);if(f){const p=this.buildingAtPositionGetter(f);if(p&&!t){this.draggingBuildingId=p.id,this.buildingDragStartPos=f,this.isDraggingBuilding=!1;return}}this.isDragging=!1,this.dragStart={x:e.clientX,y:e.clientY},this.dragCurrent={x:e.clientX,y:e.clientY},this.pointerDownOnCanvas=!0}if(e.button===2){if(this.mouseControlHandler.handlePointerDown(e)){this.controls.mouseButtons.RIGHT=null;return}this.controls.mouseButtons.RIGHT=null,this.isRightDragging=!1,this.rightDragStart={x:e.clientX,y:e.clientY}}if(e.button===1&&this.mouseControlHandler.handlePointerDown(e)){this.controls.mouseButtons.MIDDLE=null;return}});U(this,"onPointerMove",e=>{var t,n,a,i,o,l,c,d;if(!document.hasFocus()||document.hidden){this.isDragging&&(this.isDragging=!1,this.selectionBox.classList.remove("active"),this.pointerDownOnCanvas=!1);return}if(e.buttons&1){if(this.isResizing){const m=this.raycaster.raycastGroundFromEvent(e);m&&((n=(t=this.callbacks).onResizeMove)==null||n.call(t,m));return}if(this.isDrawing){const m=this.raycaster.raycastGroundFromEvent(e);m&&((i=(a=this.callbacks).onDrawMove)==null||i.call(a,m));return}if(this.draggingBuildingId&&this.buildingDragStartPos){const m=this.raycaster.raycastGroundFromEvent(e);if(m){const b=m.x-this.buildingDragStartPos.x,x=m.z-this.buildingDragStartPos.z,w=Math.sqrt(b*b+x*x);!this.isDraggingBuilding&&w>.2&&(this.isDraggingBuilding=!0,(l=(o=this.callbacks).onBuildingDragStart)==null||l.call(o,this.draggingBuildingId,this.buildingDragStartPos)),this.isDraggingBuilding&&((d=(c=this.callbacks).onBuildingDragMove)==null||d.call(c,this.draggingBuildingId,m))}return}if(e.pointerType==="touch"||!this.pointerDownOnCanvas||z.getState().terminalResizing)return;const f=e.clientX-this.dragStart.x,p=e.clientY-this.dragStart.y;!this.isDragging&&(Math.abs(f)>lc||Math.abs(p)>lc)&&(this.isDragging=!0,this.selectionBox.classList.add("active")),this.isDragging&&(this.dragCurrent={x:e.clientX,y:e.clientY},this.updateSelectionBox())}if(e.buttons&2){if(this.mouseControlHandler.handlePointerMove(e))return;const f=e.clientX-this.rightDragStart.x,p=e.clientY-this.rightDragStart.y;!this.isRightDragging&&(Math.abs(f)>lc||Math.abs(p)>lc)&&(this.isRightDragging=!0)}if(!(e.buttons&4&&this.mouseControlHandler.handlePointerMove(e))&&e.buttons===0&&e.pointerType!=="touch"){const f=performance.now();f-this.lastHoverCheckTime>lo.HOVER_CHECK_INTERVAL&&(this.handleHoverDetection(e),this.lastHoverCheckTime=f)}});U(this,"onPointerUp",e=>{var t,n,a,i,o,l;if(e.button===0){if(this.controls.mouseButtons.LEFT=null,e.pointerType==="touch"&&!this.isDrawing&&!this.isResizing){this.pointerDownOnCanvas=!1;return}if(this.isResizing){(n=(t=this.callbacks).onResizeEnd)==null||n.call(t),this.isResizing=!1;return}if(this.isDrawing){const c=this.raycaster.raycastGroundFromEvent(e);c&&((i=(a=this.callbacks).onDrawEnd)==null||i.call(a,c)),this.isDrawing=!1;return}if(this.draggingBuildingId){const c=this.draggingBuildingId,d=this.raycaster.raycastGroundFromEvent(e),f={x:e.clientX,y:e.clientY};this.isDraggingBuilding&&d?(l=(o=this.callbacks).onBuildingDragEnd)==null||l.call(o,c,d):this.handleBuildingClick(c,f),this.draggingBuildingId=null,this.buildingDragStartPos=null,this.isDraggingBuilding=!1;return}this.isDragging?(this.isDragging=!1,this.selectionBox.classList.remove("active"),this.selectAgentsInBox(this.dragStart,this.dragCurrent)):e.ctrlKey||this.handleSingleClick(e),this.pointerDownOnCanvas=!1}e.button===2&&(this.mouseControlHandler.handlePointerUp(e),this.controls.mouseButtons.RIGHT=null,this.isRightDragging=!1),e.button===1&&(this.mouseControlHandler.handlePointerUp(e),this.controls.mouseButtons.MIDDLE=null)});U(this,"onPointerCancel",e=>{this.touchHandler.onPointerCancel(e.pointerId)});U(this,"onPointerLeave",e=>{this.clearHoverState(),this.clearBuildingHoverState()});U(this,"onWindowBlur",()=>{this.cancelAllDragStates()});U(this,"onVisibilityChange",()=>{document.hidden&&this.cancelAllDragStates()});U(this,"onKeyDown",e=>{var m,b;const t=e.target,n=z.getState(),a=t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.isContentEditable,i=t.closest(".guake-terminal"),o=i==null?void 0:i.classList.contains("collapsed"),l=z.getShortcuts(),c=l.find(x=>x.id==="toggle-spotlight"),d=l.find(x=>x.id==="next-agent"),f=l.find(x=>x.id==="prev-agent"),p=l.find(x=>x.id==="open-terminal");if(!kt(e,c)){if(a){const x=z.getShortcuts();if((kt(e,x.find(k=>k.id==="next-agent"))||kt(e,x.find(k=>k.id==="prev-agent"))||kt(e,x.find(k=>k.id==="next-working-agent"))||kt(e,x.find(k=>k.id==="prev-working-agent")))&&o)t.blur();else if(kt(e,p)&&o)t.blur();else return}if((kt(e,d)||kt(e,f))&&!n.terminalOpen){const x=this.getOrderedAgents(n.agents);if(x.length<=1)return;const w=n.selectedAgentIds.size===1?Array.from(n.selectedAgentIds)[0]:null,k=w?x.findIndex(j=>j.id===w):-1;let S;kt(e,d)?S=k===-1?0:(k+1)%x.length:S=k===-1?x.length-1:(k-1+x.length)%x.length,e.preventDefault(),z.selectAgent(x[S].id),(b=(m=this.callbacks).onActivity)==null||b.call(m);return}if(kt(e,p)){if(i&&!o||t.tagName==="BUTTON"||t.tagName==="A")return;if(n.terminalOpen)if(i&&o)z.setTerminalOpen(!1);else return;const x=document.querySelector(".guake-terminal");if(x&&x.classList.contains("collapsed")&&n.terminalOpen&&z.setTerminalOpen(!1),n.selectedBuildingIds.size>0||n.selectedAreaId!==null)return;if(n.selectedAgentIds.size===0){const w=n.lastSelectedAgentId;w&&n.agents.has(w)&&(e.preventDefault(),z.selectAgent(w),z.setTerminalOpen(!0));return}e.preventDefault(),z.setTerminalOpen(!0)}}});U(this,"onContextMenu",e=>{var a,i;if(e.preventDefault(),e.altKey)return;if(this.controls.mouseButtons.RIGHT=null,this.isRightDragging){this.isRightDragging=!1;return}const t=z.getState(),n=this.raycaster.raycastGroundFromEvent(e);if(n){if(t.selectedAgentIds.size>0){this.callbacks.onAreaRightClick&&this.callbacks.onAreaRightClick(n);const o=Array.from(t.selectedAgentIds),l=new vt(n.x,0,n.z);this.callbacks.onMoveCommand(l,o);return}if(this.callbacks.onContextMenu){const o=this.raycaster.findAgentAtPosition(e),l=(a=this.areaAtPositionGetter)==null?void 0:a.call(this,n),c=(i=this.buildingAtPositionGetter)==null?void 0:i.call(this,n);let d;o?d={type:"agent",id:o}:c?d={type:"building",id:c.id}:l?d={type:"area",id:l.id}:d={type:"ground"},this.callbacks.onContextMenu({x:e.clientX,y:e.clientY},n,d)}}});U(this,"onWheel",e=>{var t,n;(n=(t=this.callbacks).onActivity)==null||n.call(t),!this.trackpadHandler.handleWheel(e)&&this.mouseControlHandler.handleWheel(e)});U(this,"onTouchStart",e=>{if(this.cameraController.stopPanInertia(),this.drawingModeChecker()){e.preventDefault();return}this.touchHandler.onTouchStart(e)});U(this,"onTouchMove",e=>{if(this.isDrawing||this.isResizing){e.preventDefault();return}this.touchHandler.onTouchMove(e)});U(this,"onTouchEnd",e=>{this.isDrawing||this.isResizing||this.touchHandler.onTouchEnd(e)});U(this,"handleTouchTap",(e,t)=>{var i,o,l,c,d,f;const n=this.raycaster.findAgentAtPoint(e,t);if(n){this.agentTapDetector.handleClick(n)==="double"?this.callbacks.onAgentDoubleClick(n):this.callbacks.onAgentClick(n,!1);return}const a=this.raycaster.raycastGroundFromPoint(e,t);if(a){const p=this.buildingAtPositionGetter(a);if(p){const b={x:e,y:t};this.handleBuildingClick(p.id,b);return}const m=this.areaAtPositionGetter(a);if(m){this.areaClickDetector.handleClick(m.id)==="double"?(o=(i=this.callbacks).onAreaDoubleClick)==null||o.call(i,m.id):(c=(l=this.callbacks).onAreaClick)==null||c.call(l,m.id);return}}this.agentClickDetector.reset(),this.callbacks.onGroundClick(),(f=(d=this.callbacks).onGroundClickOutsideArea)==null||f.call(d)});U(this,"handleLongPress",(e,t)=>{var c,d;const n=z.getState(),a=this.raycaster.raycastGroundFromPoint(e,t);if(!a)return;const i=this.raycaster.findAgentAtPoint(e,t);if(i){this.callbacks.onContextMenu&&this.callbacks.onContextMenu({x:e,y:t},a,{type:"agent",id:i});return}const o=(c=this.buildingAtPositionGetter)==null?void 0:c.call(this,a);if(o){this.callbacks.onContextMenu&&this.callbacks.onContextMenu({x:e,y:t},a,{type:"building",id:o.id});return}const l=(d=this.areaAtPositionGetter)==null?void 0:d.call(this,a);if(l){this.callbacks.onContextMenu&&this.callbacks.onContextMenu({x:e,y:t},a,{type:"area",id:l.id});return}if(n.selectedAgentIds.size>0){const f=Array.from(n.selectedAgentIds),p=new vt(a.x,0,a.z);this.callbacks.onMoveCommand(p,f);return}this.callbacks.onContextMenu&&this.callbacks.onContextMenu({x:e,y:t},a,{type:"ground"})});this.canvas=e,this.camera=t,this.controls=n,this.selectionBox=a,this.callbacks=i,this.raycaster=new OI(t,e),this.cameraController=new By(t,n,e),this.cameraController.setRaycastProvider(this.raycaster),this.mouseControlHandler=new FI(this.cameraController,{onSelectionBoxStart:(o,l)=>{this.dragStart={x:o,y:l},this.dragCurrent={x:o,y:l},this.isDragging=!0,this.selectionBox.classList.add("active")},onSelectionBoxMove:(o,l)=>{this.dragCurrent={x:o,y:l},this.updateSelectionBox()},onSelectionBoxEnd:(o,l)=>{this.isDragging=!1,this.selectionBox.classList.remove("active"),this.selectAgentsInBox(this.dragStart,{x:o,y:l})}}),this.trackpadHandler=new LI(this.cameraController,e,{onPan:(o,l)=>{this.cameraController.handlePan(o,l)},onZoom:(o,l,c)=>{const d=1-o;this.cameraController.handlePinchZoom(d,{x:l,y:c})},onOrbit:(o,l)=>{this.cameraController.handleOrbit(o,l)}}),this.agentClickDetector=new Zh(300),this.agentTapDetector=new Zh(450),this.buildingClickDetector=new Zh(300),this.areaClickDetector=new Zh(300),this.touchHandler=new Iy(e,n,{onTap:this.handleTouchTap,onLongPress:this.handleLongPress,onPan:(o,l)=>this.cameraController.handlePan(o,l),onPanEnd:()=>this.cameraController.endPanWithInertia(),onPinchZoom:(o,l)=>this.cameraController.handlePinchZoom(o,l),onOrbit:(o,l)=>this.cameraController.handleOrbit(o,l),onRotation:o=>this.cameraController.handleTwistRotation(o)}),this.setupEventListeners()}setReferences(e,t){this.raycaster.setReferences(e,t)}setDrawingModeChecker(e){this.drawingModeChecker=e}setResizeHandlers(e,t){this.raycaster.setResizeHandlesGetter(e),this.resizeModeChecker=t}setFolderIconMeshesGetter(e){this.raycaster.setFolderIconMeshesGetter(e)}setAreaAtPositionGetter(e){this.areaAtPositionGetter=e}setBuildingAtPositionGetter(e){this.buildingAtPositionGetter=e}setBuildingPositionsGetter(e){this.buildingPositionsGetter=e}raycastGround(e){return this.raycaster.raycastGroundFromEvent(e)}dispose(){this.canvas.removeEventListener("pointerdown",this.onPointerDown,!0),this.canvas.removeEventListener("pointermove",this.onPointerMove),this.canvas.removeEventListener("pointerup",this.onPointerUp),this.canvas.removeEventListener("pointercancel",this.onPointerCancel),this.canvas.removeEventListener("pointerleave",this.onPointerLeave),this.canvas.removeEventListener("contextmenu",this.onContextMenu),this.canvas.removeEventListener("wheel",this.onWheel),this.canvas.removeEventListener("touchstart",this.onTouchStart),this.canvas.removeEventListener("touchmove",this.onTouchMove),this.canvas.removeEventListener("touchend",this.onTouchEnd),this.agentClickDetector.dispose(),this.agentTapDetector.dispose(),this.buildingClickDetector.dispose(),this.areaClickDetector.dispose(),this.touchHandler.dispose(),this.trackpadHandler.dispose(),this.clearHoverTimer(),this.clearBuildingHoverTimer(),window.removeEventListener("blur",this.onWindowBlur),document.removeEventListener("visibilitychange",this.onVisibilityChange),document.removeEventListener("keydown",this.onKeyDown,!0)}reattach(e,t,n){this.dispose(),this.canvas=e,this.selectionBox=t,this.controls=n,this.raycaster.setCanvas(e),this.cameraController.setCanvas(e),this.cameraController.setControls(n),this.mouseControlHandler.setCameraController(this.cameraController),this.trackpadHandler.setCameraController(this.cameraController),this.trackpadHandler.setCanvas(e),this.touchHandler.reattach(e,n),this.setupEventListeners()}updateSmoothZoom(e){this.cameraController.updateSmoothZoom(e)}get isZoomAnimating(){return this.cameraController.isZoomAnimating}calculateFormationPositions(e,t){const n=[];if(t===1)return[{x:e.x,y:0,z:e.z}];if(t<=6){const a=Pi*Math.max(1,t/3);for(let i=0;i<t;i++){const o=i/t*Math.PI*2-Math.PI/2;n.push({x:e.x+Math.cos(o)*a,y:0,z:e.z+Math.sin(o)*a})}}else{const a=Math.ceil(Math.sqrt(t)),i=Math.ceil(t/a),o=(a-1)*Pi/2,l=(i-1)*Pi/2;for(let c=0;c<t;c++){const d=c%a,f=Math.floor(c/a);n.push({x:e.x+d*Pi-o,y:0,z:e.z+f*Pi-l})}}return n}setupEventListeners(){this.canvas.addEventListener("pointerdown",this.onPointerDown,!0),this.canvas.addEventListener("pointermove",this.onPointerMove),this.canvas.addEventListener("pointerup",this.onPointerUp),this.canvas.addEventListener("pointercancel",this.onPointerCancel),this.canvas.addEventListener("pointerleave",this.onPointerLeave),this.canvas.addEventListener("contextmenu",this.onContextMenu),this.canvas.addEventListener("wheel",this.onWheel,{passive:!1}),this.canvas.addEventListener("touchstart",this.onTouchStart,{passive:!1}),this.canvas.addEventListener("touchmove",this.onTouchMove,{passive:!1}),this.canvas.addEventListener("touchend",this.onTouchEnd,{passive:!1}),window.addEventListener("blur",this.onWindowBlur),document.addEventListener("visibilitychange",this.onVisibilityChange),document.addEventListener("keydown",this.onKeyDown,!0)}cancelAllDragStates(){this.clearHoverState(),this.clearBuildingHoverState(),this.isDragging&&(this.isDragging=!1,this.selectionBox.classList.remove("active")),this.pointerDownOnCanvas=!1}clearHoverState(){var e,t;this.clearHoverTimer(),this.hoveredAgentId!==null&&(this.hoveredAgentId=null,(t=(e=this.callbacks).onAgentHover)==null||t.call(e,null,null))}handleSingleClick(e){var i,o,l,c,d,f,p,m;const t=this.raycaster.checkFolderIconClick(e);if(t){const b=t.userData.areaId,x=t.userData.folderPath;if(b){(o=(i=this.callbacks).onFolderIconClick)==null||o.call(i,b,x);return}}const n=this.raycaster.findAgentAtPosition(e);if(n){this.agentClickDetector.handleClick(n)==="double"?this.callbacks.onAgentDoubleClick(n):this.callbacks.onAgentClick(n,e.shiftKey);return}this.agentClickDetector.reset();const a=this.raycaster.raycastGroundFromEvent(e);if(a){const b=this.areaAtPositionGetter(a);if(b){this.areaClickDetector.handleClick(b.id)==="double"?(c=(l=this.callbacks).onAreaDoubleClick)==null||c.call(l,b.id):(f=(d=this.callbacks).onAreaClick)==null||f.call(d,b.id);return}}this.areaClickDetector.reset(),e.shiftKey||(this.callbacks.onGroundClick(),(m=(p=this.callbacks).onGroundClickOutsideArea)==null||m.call(p))}handleBuildingClick(e,t){var a,i,o,l;if(this.buildingClickDetector.handleClick(e)==="double")(i=(a=this.callbacks).onBuildingDoubleClick)==null||i.call(a,e);else{const c=t||{x:window.innerWidth/2,y:window.innerHeight/2};(l=(o=this.callbacks).onBuildingClick)==null||l.call(o,e,c)}}updateSelectionBox(){const e=Math.min(this.dragStart.x,this.dragCurrent.x),t=Math.min(this.dragStart.y,this.dragCurrent.y),n=Math.abs(this.dragCurrent.x-this.dragStart.x),a=Math.abs(this.dragCurrent.y-this.dragStart.y);this.selectionBox.style.left=`${e}px`,this.selectionBox.style.top=`${t}px`,this.selectionBox.style.width=`${n}px`,this.selectionBox.style.height=`${a}px`}selectAgentsInBox(e,t){this.canvas.getBoundingClientRect();const n=Math.min(e.x,t.x),a=Math.max(e.x,t.x),i=Math.min(e.y,t.y),o=Math.max(e.y,t.y),l=[],c=[];for(const[f,p]of this.raycaster.getAgentMeshes()){const m=this.raycaster.projectToScreen(p.group.position);m.x>=n&&m.x<=a&&m.y>=i&&m.y<=o&&l.push(f)}const d=this.buildingPositionsGetter();for(const[f,p]of d){const m=this.raycaster.projectToScreen(p);m.x>=n&&m.x<=a&&m.y>=i&&m.y<=o&&c.push(f)}this.callbacks.onSelectionBox(l,c)}handleHoverDetection(e){var o,l,c,d;this.lastMousePos={x:e.clientX,y:e.clientY};const t=this.raycaster.findAgentAtPosition(e);t!==this.hoveredAgentId&&(this.clearHoverTimer(),this.hoveredAgentId!==null&&((l=(o=this.callbacks).onAgentHover)==null||l.call(o,null,null)),this.hoveredAgentId=t,t&&(this.hoverTimer=setTimeout(()=>{this.triggerHoverCallback()},lo.HOVER_DELAY)));const n=this.raycaster.raycastGroundFromEvent(e),a=n?this.buildingAtPositionGetter(n):null,i=(a==null?void 0:a.id)??null;i!==this.hoveredBuildingId&&(this.clearBuildingHoverTimer(),this.hoveredBuildingId!==null&&((d=(c=this.callbacks).onBuildingHover)==null||d.call(c,null,null)),this.hoveredBuildingId=i,i&&(this.buildingHoverTimer=setTimeout(()=>{this.triggerBuildingHoverCallback()},lo.BUILDING_HOVER_DELAY)))}triggerHoverCallback(){if(this.hoveredAgentId&&this.callbacks.onAgentHover){const e=this.raycaster.getAgentMeshes().get(this.hoveredAgentId);if(e){const t=this.raycaster.projectToScreen(e.group.position);this.callbacks.onAgentHover(this.hoveredAgentId,t)}}}clearHoverTimer(){this.hoverTimer&&(clearTimeout(this.hoverTimer),this.hoverTimer=null)}triggerBuildingHoverCallback(){if(this.hoveredBuildingId&&this.callbacks.onBuildingHover){const t=this.buildingPositionsGetter().get(this.hoveredBuildingId);if(t){const n=this.raycaster.projectToScreen(t);this.callbacks.onBuildingHover(this.hoveredBuildingId,n)}}}clearBuildingHoverTimer(){this.buildingHoverTimer&&(clearTimeout(this.buildingHoverTimer),this.buildingHoverTimer=null)}clearBuildingHoverState(){var e,t;this.clearBuildingHoverTimer(),this.hoveredBuildingId!==null&&(this.hoveredBuildingId=null,(t=(e=this.callbacks).onBuildingHover)==null||t.call(e,null,null))}getOrderedAgents(e){const t=Array.from(e.values()),n=new Set(t.map(b=>b.id)),i=Ba(mt.AGENT_ORDER,[]).filter(b=>n.has(b)),l=t.filter(b=>!i.includes(b.id)).sort((b,x)=>(b.createdAt||0)-(x.createdAt||0)).map(b=>b.id),c=[...i,...l],d=new Map(t.map(b=>[b.id,b])),f=c.map(b=>d.get(b)).filter(b=>b!==void 0),p=new Map;for(const b of f){const x=z.getAreaForAgent(b.id),w=(x==null?void 0:x.id)||null;p.has(w)||p.set(w,{area:x?{name:x.name}:null,agents:[]}),p.get(w).agents.push(b)}const m=Array.from(p.values());return m.sort((b,x)=>{var w,k;return!b.area&&x.area?1:b.area&&!x.area?-1:!b.area&&!x.area?0:(((w=b.area)==null?void 0:w.name)||"").localeCompare(((k=x.area)==null?void 0:k.name)||"")}),m.flatMap(b=>b.agents)}};U(lo,"HOVER_DELAY",400),U(lo,"HOVER_CHECK_INTERVAL",50),U(lo,"BUILDING_HOVER_DELAY",5e3);let zy=lo;class $I{constructor(e){U(this,"scene");U(this,"areaMeshes",new Map);U(this,"previewMesh",null);U(this,"isDrawing",!1);U(this,"drawStartPos",null);U(this,"currentTool",null);U(this,"resizeHandles",[]);U(this,"selectedAreaId",null);U(this,"isResizing",!1);U(this,"resizeHandleType",null);U(this,"resizeStartPos",null);U(this,"resizeOriginalArea",null);U(this,"areaDragAgentStartPositions",new Map);U(this,"areaDragBuildingStartPositions",new Map);U(this,"onAreaCreated",null);U(this,"onFolderIconClick",null);U(this,"folderIconMeshes",[]);U(this,"brightness",1);U(this,"logoTextures",new Map);U(this,"loadingLogoTextures",new Set);this.scene=e}setOnAreaCreated(e){this.onAreaCreated=e}setOnFolderIconClick(e){this.onFolderIconClick=e}getFolderIconMeshes(){return this.folderIconMeshes}handleFolderIconClick(e){const t=e.userData.areaId,n=e.userData.folderPath;t&&this.onFolderIconClick&&this.onFolderIconClick(t,n)}setBrightness(e){this.brightness=e;for(const[t,n]of this.areaMeshes){const a=t===this.selectedAreaId;n.traverse(i=>{if(i instanceof Ie&&i.name!=="resizeHandle"&&i.name!=="areaLogo"){const o=i.material,l=a?.3:.15;o.opacity=l*this.brightness}})}}setTool(e){this.currentTool=e,(!e||e==="select")&&this.cancelDrawing()}getTool(){return this.currentTool}isInDrawingMode(){return this.currentTool==="rectangle"||this.currentTool==="circle"}startDrawing(e){this.isInDrawingMode()&&(this.isDrawing=!0,this.drawStartPos=e,this.createPreview(e))}updateDrawing(e){!this.isDrawing||!this.drawStartPos||!this.previewMesh||this.updatePreview(e)}finishDrawing(e){var n;if(!this.isDrawing||!this.drawStartPos)return this.cancelDrawing(),null;const t=this.createAreaFromDraw(this.drawStartPos,e);return this.cancelDrawing(),t&&(z.addArea(t),this.renderArea(t),(n=this.onAreaCreated)==null||n.call(this,t)),t}cancelDrawing(){this.isDrawing=!1,this.drawStartPos=null,this.previewMesh&&(this.scene.remove(this.previewMesh),this.disposeGroup(this.previewMesh),this.previewMesh=null)}isCurrentlyDrawing(){return this.isDrawing}renderAllAreas(){const e=z.getState();for(const t of e.areas.values()){if(t.archived){this.areaMeshes.has(t.id)&&this.removeAreaMesh(t.id);continue}this.areaMeshes.has(t.id)||this.renderArea(t)}}renderArea(e){var o;this.removeAreaMesh(e.id);const t=new Hn;t.userData.areaId=e.id,t.userData.zIndex=e.zIndex??0;const n=new Ut(e.color),a=(e.zIndex??0)*.001;if(e.type==="rectangle"&&e.width&&e.height){const l=new wr(e.width,e.height),c=new Ke({color:n,transparent:!0,opacity:.15*this.brightness,side:Ls}),d=new Ie(l,c);d.rotation.x=-Math.PI/2,d.position.y=.02+a,t.add(d);const f=[new vt(-e.width/2,0,-e.height/2),new vt(e.width/2,0,-e.height/2),new vt(e.width/2,0,e.height/2),new vt(-e.width/2,0,e.height/2),new vt(-e.width/2,0,-e.height/2)],p=new si().setFromPoints(f),m=new Vo({color:n,linewidth:2}),b=new oo(p,m);b.position.y=.03+a,t.add(b)}else if(e.type==="circle"&&e.radius){const l=new by(e.radius,32),c=new Ke({color:n,transparent:!0,opacity:.15*this.brightness,side:Ls}),d=new Ie(l,c);d.rotation.x=-Math.PI/2,d.position.y=.02+a,t.add(d);const f=[];for(let x=0;x<=32;x++){const w=x/32*Math.PI*2;f.push(new vt(Math.cos(w)*e.radius,0,Math.sin(w)*e.radius))}const p=new si().setFromPoints(f),m=new Vo({color:n,linewidth:2}),b=new oo(p,m);b.position.y=.03+a,t.add(b)}const i=this.createTextLabel(e.name,e.color);if(i.position.y=.05+a,i.name="areaLabel",t.add(i),e.directories&&e.directories.length>0){let d=0,f=0,p=3;if(e.type==="rectangle"&&e.width&&e.height)d=-e.width/2+.4,f=-e.height/2+.4,p=Math.max(1,Math.floor((e.width-.6)/.81));else if(e.type==="circle"&&e.radius){const m=e.radius*.707;d=-m+.3,f=-m+.3,p=Math.max(1,Math.floor((e.radius*1.414-.5)/.81))}e.directories.forEach((m,b)=>{var _;const x=Math.floor(b/p),w=b%p,k=((_=e.directoryGitCounts)==null?void 0:_[b])??0,S=this.createFolderIconSprite(e.color,k);S.name="folderIcon",S.userData.areaId=e.id,S.userData.folderPath=m,S.userData.isFolderIcon=!0,S.position.set(d+w*.81,.3+a,f+x*.81),t.add(S);const j=new Wt(.3,8,8),C=new Ke({visible:!1}),N=new Ie(j,C);N.position.copy(S.position),N.position.x+=e.center.x,N.position.z+=e.center.z,N.name="folderIconHit",N.userData.areaId=e.id,N.userData.folderPath=m,N.userData.isFolderIcon=!0,this.scene.add(N),this.folderIconMeshes.push(N)})}(o=e.logo)!=null&&o.filename&&this.addLogoToGroup(t,e,a),t.position.set(e.center.x,0,e.center.z),this.scene.add(t),this.areaMeshes.set(e.id,t)}createTextLabel(e,t){const n=document.createElement("canvas"),a=n.getContext("2d"),i=32,o=20,l=64;n.width=1024,n.height=l,a.font=`bold ${i}px Arial`;const c=a.measureText(e).width,d=256;n.width=Math.max(d,c+o*2),a.clearRect(0,0,n.width,n.height),a.font=`bold ${i}px Arial`,a.textAlign="center",a.textBaseline="middle",a.strokeStyle="#000000",a.lineWidth=4,a.strokeText(e,n.width/2,n.height/2),a.fillStyle=t,a.fillText(e,n.width/2,n.height/2);const f=new os(n);f.needsUpdate=!0;const p=new ts({map:f,transparent:!0,depthTest:!1}),m=new Kn(p),b=.5,x=2*(n.width/256);return m.scale.set(x,b,1),m}createFolderIconSprite(e,t=0){const n=document.createElement("canvas"),a=128;n.width=a,n.height=a;const i=n.getContext("2d");i.fillStyle="rgba(0, 0, 0, 0.6)",i.beginPath(),i.arc(a/2,a/2,a*.45,0,Math.PI*2),i.fill(),i.strokeStyle=e,i.lineWidth=3,i.beginPath(),i.arc(a/2,a/2,a*.45,0,Math.PI*2),i.stroke();const o=a*.5,l=a*.35,c=(a-o)/2,d=(a-l)/2+2,f=o*.35,p=l*.22;if(i.fillStyle=e,i.beginPath(),i.moveTo(c+4,d+p),i.lineTo(c+f,d+p),i.lineTo(c+f+p,d),i.lineTo(c+4,d),i.moveTo(c,d+p),i.lineTo(c,d+l),i.lineTo(c+o,d+l),i.lineTo(c+o,d+p),i.closePath(),i.fill(),i.strokeStyle="rgba(255, 255, 255, 0.3)",i.lineWidth=1.5,i.beginPath(),i.moveTo(c+4,d+p+3),i.lineTo(c+o-4,d+p+3),i.stroke(),t>0){const w=a*.16,k=a*.78,S=a*.78;i.fillStyle="#e8943a",i.beginPath(),i.arc(k,S,w,0,Math.PI*2),i.fill(),i.strokeStyle="rgba(0, 0, 0, 0.7)",i.lineWidth=2,i.beginPath(),i.arc(k,S,w,0,Math.PI*2),i.stroke();const j=t>99?"99+":String(t),C=w*1.3;i.font=`bold ${C}px "Segoe UI", Arial, sans-serif`,i.fillStyle="#ffffff",i.textAlign="center",i.textBaseline="middle",i.fillText(j,k,S)}const m=new os(n);m.needsUpdate=!0;const b=new ts({map:m,transparent:!0,depthTest:!1}),x=new Kn(b);return x.scale.set(.6,.6,1),x}addLogoToGroup(e,t,n){const a=t.logo,i=Cd(ct(`/api/areas/logos/${a.filename}`)),o=this.logoTextures.get(a.filename);if(o){this.createLogoMesh(e,t,o,n);return}if(this.loadingLogoTextures.has(a.filename))return;this.loadingLogoTextures.add(a.filename);const l=t.id;new Sx().load(i,d=>{var m;this.logoTextures.set(a.filename,d),this.loadingLogoTextures.delete(a.filename);const f=this.areaMeshes.get(l),p=z.getState().areas.get(l);if(f&&((m=p==null?void 0:p.logo)!=null&&m.filename)){const b=(p.zIndex??0)*.001;this.createLogoMesh(f,p,d,b)}},void 0,()=>{this.loadingLogoTextures.delete(a.filename)})}createLogoMesh(e,t,n,a){const i=t.logo,o=new wr(i.width,i.height),l=new Ke({map:n,transparent:!0,opacity:i.opacity??.8,side:Ls,depthWrite:!0,alphaTest:.01}),c=new Ie(o,l);c.rotation.x=-Math.PI/2,c.name="areaLogo",c.renderOrder=-1;const d=this.calculateLogoOffset(t,i.position,i.width,i.height);c.position.set(d.x,.04+a,d.z),e.add(c)}calculateLogoOffset(e,t,n,a){if(t==="center")return{x:0,z:0};let i=0,o=0;e.type==="rectangle"&&e.width&&e.height?(i=e.width,o=e.height):e.type==="circle"&&e.radius&&(i=e.radius*1.414,o=e.radius*1.414);const l=n/2+.2,c=a/2+.2;switch(t){case"top-left":return{x:-i/2+l,z:-o/2+c};case"top-right":return{x:i/2-l,z:-o/2+c};case"bottom-left":return{x:-i/2+l,z:o/2-c};case"bottom-right":return{x:i/2-l,z:o/2-c};default:return{x:0,z:0}}}updateAreaMesh(e){this.renderArea(e)}removeAreaMesh(e){const t=this.areaMeshes.get(e);t&&(this.scene.remove(t),this.disposeGroup(t),this.areaMeshes.delete(e)),this.folderIconMeshes=this.folderIconMeshes.filter(n=>n.userData.areaId===e?(this.scene.remove(n),n.geometry.dispose(),n.material.dispose(),!1):!0)}highlightArea(e){this.selectedAreaId=e,this.removeResizeHandles();for(const[t,n]of this.areaMeshes){const a=t===e;n.traverse(i=>{if(i instanceof Ie&&i.name!=="resizeHandle"&&i.name!=="areaLogo"){const o=i.material,l=a?.3:.15;o.opacity=l*this.brightness}if(i instanceof oo){const o=i.material;o.opacity=a?1:.8}})}if(e){const t=z.getState().areas.get(e);t&&this.createResizeHandles(t)}}createResizeHandles(e){const t=new Wt(.15,16,16),n=new Ke({color:16777215,transparent:!0,opacity:.9}),a=new Ke({color:16763904,transparent:!0,opacity:.9}),i=(e.zIndex??0)*.001,o=new Ie(t.clone(),a.clone());if(o.position.set(e.center.x,.25+i,e.center.z),o.name="resizeHandle",o.userData.handleType="move",o.userData.areaId=e.id,this.scene.add(o),this.resizeHandles.push(o),e.type==="rectangle"&&e.width&&e.height){const l=[{type:"nw",x:-e.width/2,z:-e.height/2},{type:"ne",x:e.width/2,z:-e.height/2},{type:"sw",x:-e.width/2,z:e.height/2},{type:"se",x:e.width/2,z:e.height/2}];for(const p of l){const m=new Ie(t.clone(),n.clone());m.position.set(e.center.x+p.x,.2+i,e.center.z+p.z),m.name="resizeHandle",m.userData.handleType=p.type,m.userData.areaId=e.id,this.scene.add(m),this.resizeHandles.push(m)}const c=new Ke({color:11197951,transparent:!0,opacity:.9}),d=new Wt(.12,16,16),f=[{type:"n",x:0,z:-e.height/2},{type:"s",x:0,z:e.height/2},{type:"e",x:e.width/2,z:0},{type:"w",x:-e.width/2,z:0}];for(const p of f){const m=new Ie(d.clone(),c.clone());m.position.set(e.center.x+p.x,.2+i,e.center.z+p.z),m.name="resizeHandle",m.userData.handleType=p.type,m.userData.areaId=e.id,this.scene.add(m),this.resizeHandles.push(m)}c.dispose(),d.dispose()}else if(e.type==="circle"&&e.radius){const l=new Ie(t.clone(),n.clone());l.position.set(e.center.x+e.radius,.2+i,e.center.z),l.name="resizeHandle",l.userData.handleType="radius",l.userData.areaId=e.id,this.scene.add(l),this.resizeHandles.push(l)}t.dispose(),n.dispose(),a.dispose()}removeResizeHandles(){for(const e of this.resizeHandles)this.scene.remove(e),e.geometry.dispose(),e.material.dispose();this.resizeHandles=[]}getResizeHandles(){return this.resizeHandles}isCurrentlyResizing(){return this.isResizing}startResize(e,t){const n=e.userData.areaId,a=e.userData.handleType,i=z.getState().areas.get(n);if(i&&(this.isResizing=!0,this.resizeHandleType=a,this.resizeStartPos=t,this.resizeOriginalArea={...i},this.areaDragAgentStartPositions.clear(),this.areaDragBuildingStartPositions.clear(),a==="move")){const o=z.getState();for(const l of o.agents.values())this.isPointInsideArea(l.position.x,l.position.z,i)&&this.areaDragAgentStartPositions.set(l.id,{...l.position});for(const l of o.buildings.values())this.isPointInsideArea(l.position.x,l.position.z,i)&&this.areaDragBuildingStartPositions.set(l.id,{...l.position})}}updateResize(e){if(!this.isResizing||!this.resizeOriginalArea||!this.resizeHandleType||!this.resizeStartPos)return;const t=this.resizeOriginalArea;let n={};if(this.resizeHandleType==="move"){const a=e.x-this.resizeStartPos.x,i=e.z-this.resizeStartPos.z;n={center:{x:t.center.x+a,z:t.center.z+i}};for(const[o,l]of this.areaDragAgentStartPositions)z.moveAgentLocal(o,{x:l.x+a,y:l.y,z:l.z+i});for(const[o,l]of this.areaDragBuildingStartPositions)z.updateBuildingLocal(o,{position:{x:l.x+a,z:l.z+i}})}else if(t.type==="rectangle"&&t.width&&t.height){const a=e.x-this.resizeStartPos.x,i=e.z-this.resizeStartPos.z,o=t.width,l=t.height,c=t.center.x,d=t.center.z,f=x=>{const w=Math.max(.5,o+x);return{width:w,cx:c+(w-o)/2}},p=x=>{const w=Math.max(.5,o-x);return{width:w,cx:c+(o-w)/2}},m=x=>{const w=Math.max(.5,l+x);return{height:w,cz:d+(w-l)/2}},b=x=>{const w=Math.max(.5,l-x);return{height:w,cz:d+(l-w)/2}};switch(this.resizeHandleType){case"se":{const x=f(a),w=m(i);n={width:x.width,height:w.height,center:{x:x.cx,z:w.cz}};break}case"sw":{const x=p(a),w=m(i);n={width:x.width,height:w.height,center:{x:x.cx,z:w.cz}};break}case"ne":{const x=f(a),w=b(i);n={width:x.width,height:w.height,center:{x:x.cx,z:w.cz}};break}case"nw":{const x=p(a),w=b(i);n={width:x.width,height:w.height,center:{x:x.cx,z:w.cz}};break}case"e":{const x=f(a);n={width:x.width,center:{x:x.cx,z:d}};break}case"w":{const x=p(a);n={width:x.width,center:{x:x.cx,z:d}};break}case"s":{const x=m(i);n={height:x.height,center:{x:c,z:x.cz}};break}case"n":{const x=b(i);n={height:x.height,center:{x:c,z:x.cz}};break}}}else if(t.type==="circle"&&this.resizeHandleType==="radius"){const a=e.x-t.center.x,i=e.z-t.center.z;n={radius:Math.max(.5,Math.sqrt(a*a+i*i))}}Object.keys(n).length>0&&z.updateArea(t.id,n)}finishResize(){if(this.resizeHandleType==="move"&&this.resizeOriginalArea&&this.resizeStartPos){const t=z.getState().areas.get(this.resizeOriginalArea.id);if(t){const n=t.center.x-this.resizeOriginalArea.center.x,a=t.center.z-this.resizeOriginalArea.center.z;if(n!==0||a!==0){for(const[i,o]of this.areaDragAgentStartPositions)z.moveAgent(i,{x:o.x+n,y:o.y,z:o.z+a});for(const[i,o]of this.areaDragBuildingStartPositions)z.moveBuilding(i,{x:o.x+n,z:o.z+a})}}}if(this.isResizing=!1,this.resizeHandleType=null,this.resizeStartPos=null,this.resizeOriginalArea=null,this.areaDragAgentStartPositions.clear(),this.areaDragBuildingStartPositions.clear(),this.selectedAreaId){this.removeResizeHandles();const e=z.getState().areas.get(this.selectedAreaId);e&&this.createResizeHandles(e)}}isPointInsideArea(e,t,n){if(n.type==="rectangle"&&n.width&&n.height){const a=n.width/2,i=n.height/2;return e>=n.center.x-a&&e<=n.center.x+a&&t>=n.center.z-i&&t<=n.center.z+i}if(n.type==="circle"&&n.radius){const a=e-n.center.x,i=t-n.center.z;return a*a+i*i<=n.radius*n.radius}return!1}getAreaAtPosition(e){const t=z.getState(),n=Array.from(t.areas.values()).filter(a=>!a.archived).sort((a,i)=>(i.zIndex??0)-(a.zIndex??0));for(const a of n)if(a.type==="rectangle"&&a.width&&a.height){const i=a.width/2,o=a.height/2;if(e.x>=a.center.x-i&&e.x<=a.center.x+i&&e.z>=a.center.z-o&&e.z<=a.center.z+o)return a}else if(a.type==="circle"&&a.radius){const i=e.x-a.center.x,o=e.z-a.center.z;if(Math.sqrt(i*i+o*o)<=a.radius)return a}return null}syncFromStore(){const e=z.getState();for(const t of this.areaMeshes.keys()){const n=e.areas.get(t);(!n||n.archived)&&this.removeAreaMesh(t)}for(const t of e.areas.values())t.archived||this.renderArea(t)}createPreview(e){this.previewMesh=new Hn,this.scene.add(this.previewMesh)}updatePreview(e){if(!this.previewMesh||!this.drawStartPos)return;for(;this.previewMesh.children.length>0;){const n=this.previewMesh.children[0];this.previewMesh.remove(n),(n instanceof Ie||n instanceof oo)&&(n.geometry.dispose(),n.material.dispose())}const t=new Ut("#4a9eff");if(this.currentTool==="rectangle"){const n=Math.abs(e.x-this.drawStartPos.x),a=Math.abs(e.z-this.drawStartPos.z),i=(e.x+this.drawStartPos.x)/2,o=(e.z+this.drawStartPos.z)/2;if(n>.1&&a>.1){const l=new wr(n,a),c=new Ke({color:t,transparent:!0,opacity:.2,side:Ls}),d=new Ie(l,c);d.rotation.x=-Math.PI/2,d.position.set(i,.02,o),this.previewMesh.add(d);const f=[new vt(this.drawStartPos.x,.03,this.drawStartPos.z),new vt(e.x,.03,this.drawStartPos.z),new vt(e.x,.03,e.z),new vt(this.drawStartPos.x,.03,e.z),new vt(this.drawStartPos.x,.03,this.drawStartPos.z)],p=new si().setFromPoints(f),m=new Vo({color:t}),b=new oo(p,m);this.previewMesh.add(b)}}else if(this.currentTool==="circle"){const n=e.x-this.drawStartPos.x,a=e.z-this.drawStartPos.z,i=Math.sqrt(n*n+a*a);if(i>.1){const o=new by(i,32),l=new Ke({color:t,transparent:!0,opacity:.2,side:Ls}),c=new Ie(o,l);c.rotation.x=-Math.PI/2,c.position.set(this.drawStartPos.x,.02,this.drawStartPos.z),this.previewMesh.add(c);const d=[];for(let b=0;b<=32;b++){const x=b/32*Math.PI*2;d.push(new vt(this.drawStartPos.x+Math.cos(x)*i,.03,this.drawStartPos.z+Math.sin(x)*i))}const f=new si().setFromPoints(d),p=new Vo({color:t}),m=new oo(f,p);this.previewMesh.add(m)}}}createAreaFromDraw(e,t){const n=`area_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,a=z.getState().areas.size,i=z.getNextZIndex();if(this.currentTool==="rectangle"){const o=Math.abs(t.x-e.x),l=Math.abs(t.z-e.z);return o<.5||l<.5?null:{id:n,name:`Area ${a+1}`,type:"rectangle",center:{x:(e.x+t.x)/2,z:(e.z+t.z)/2},width:o,height:l,color:"#4a9eff",zIndex:i,assignedAgentIds:[],directories:[]}}else if(this.currentTool==="circle"){const o=t.x-e.x,l=t.z-e.z,c=Math.sqrt(o*o+l*l);return c<.5?null:{id:n,name:`Area ${a+1}`,type:"circle",center:{x:e.x,z:e.z},radius:c,color:"#4a9eff",zIndex:i,assignedAgentIds:[],directories:[]}}return null}disposeGroup(e){e.traverse(t=>{if(t instanceof Ie&&(t.geometry.dispose(),Array.isArray(t.material)?t.material.forEach(n=>n.dispose()):t.material.dispose()),t instanceof oo&&(t.geometry.dispose(),t.material.dispose()),t instanceof Kn){const n=t.material;n.map&&n.map.dispose(),n.dispose()}})}dispose(){this.cancelDrawing(),this.removeResizeHandles();for(const e of this.areaMeshes.keys())this.removeAreaMesh(e);for(const e of this.folderIconMeshes)this.scene.remove(e),e.geometry.dispose(),e.material.dispose();this.folderIconMeshes=[]}}const bs={running:4915102,stopped:8947848,error:16730698,unknown:16755200,starting:4890367,stopping:16755200},Md={desktop:{primary:7438486,secondary:4871528,accent:6534125,glow:4915102},"filing-cabinet":{primary:6869905,secondary:4766584,accent:10151604,glow:4915102},satellite:{primary:8411861,secondary:7030465,accent:12031220,glow:4890367},crystal:{primary:15557798,secondary:13975436,accent:16156595,glow:10451690},factory:{primary:15567158,secondary:14510880,accent:16166229,glow:16755200}};function Yi(s){return s.name}function ki(s){const e=document.createElement("canvas"),t=e.getContext("2d"),n=56,a=28,i=72,o=144;e.width=1024,e.height=o,t.font=`bold ${n}px Arial`;const l=t.measureText(s).width,c=256,d=l+a*2+16;e.width=Math.max(c,d),t.clearRect(0,0,e.width,e.height),t.font=`bold ${n}px Arial`;const f=l+a*2,p=(e.width-f)/2,m=(e.height-i)/2;t.fillStyle="rgba(0, 0, 0, 0.8)",t.beginPath(),t.roundRect(p,m,f,i,10),t.fill(),t.textAlign="center",t.textBaseline="middle",t.fillStyle="#ffffff",t.fillText(s,e.width/2,e.height/2);const b=new os(e);b.minFilter=$n,b.magFilter=$n,b.needsUpdate=!0;const x=new ts({map:b,transparent:!0,depthTest:!1}),w=new Kn(x),k=.5,S=e.width/e.height;return w.scale.set(k*S,k,1),w.userData.aspectRatio=S,w}function UM(s){const e=document.createElement("canvas"),t=e.getContext("2d");e.width=64,e.height=64,t.fillStyle="#c89a5a",t.beginPath(),t.arc(32,32,28,0,Math.PI*2),t.fill(),t.strokeStyle="rgba(0, 0, 0, 0.5)",t.lineWidth=3,t.beginPath(),t.arc(32,32,28,0,Math.PI*2),t.stroke(),t.fillStyle="#ffffff",t.font="bold 28px Arial",t.textAlign="center",t.textBaseline="middle",t.fillText(s>99?"99+":String(s),32,32);const n=new os(e);n.minFilter=$n,n.magFilter=$n;const a=new ts({map:n,transparent:!0,depthTest:!1}),i=new Kn(a);return i.scale.set(.35,.35,1),i.name="gitIndicator",i}function HI(s,e){const t=s.material;t.map&&t.map.dispose(),t.dispose();const n=UM(e);s.material=n.material}function UI(s,e){const t=s.label,n=ki(e);n.position.copy(t.position),n.name="buildingLabel",s.group.remove(t),t.material instanceof ts&&(t.material.map&&t.material.map.dispose(),t.material.dispose()),s.group.add(n),s.label=n}function GI(s){const e=new Hn;e.userData.buildingId=s.id,e.userData.isBuilding=!0;const t=s.color?new Ut(s.color):new Ut(2763322),n=new ln(1.2,2.5,.8),a=new ft({color:t,metalness:.7,roughness:.3}),i=new Ie(n,a);i.position.y=1.25,i.castShadow=!0,i.receiveShadow=!0,i.name="buildingBody",e.add(i);for(let C=0;C<5;C++){const N=new ln(1.1,.02,.75),_=new ft({color:1710634,metalness:.5,roughness:.5}),D=new Ie(N,_);D.position.set(0,.5+C*.45,.03),e.add(D)}for(let C=0;C<5;C++){const N=new ln(.08,.08,.05),_=new Ke({color:4915102,transparent:!0,opacity:.9}),D=new Ie(N,_);D.position.set(-.45,.5+C*.45,.43),D.name=`led_${C}`,e.add(D);const L=new Ie(N.clone(),_.clone());L.position.set(-.3,.5+C*.45,.43),L.name=`activityLed_${C}`,e.add(L)}const o=new ln(1,.1,.6),l=new ft({color:1710634,metalness:.3,roughness:.7}),c=new Ie(o,l);c.position.set(0,2.55,0),e.add(c);const d=new Wt(.15,16,16),f=new Ke({color:bs[s.status],transparent:!0,opacity:.95}),p=new Ie(d,f);p.position.set(0,2.75,0),p.name="statusLight",e.add(p);const m=new Wt(.25,16,16),b=new Ke({color:bs[s.status],transparent:!0,opacity:.3}),x=new Ie(m,b);x.position.set(0,2.75,0),x.name="statusGlow",e.add(x);const w=new ln(1.5,.1,1.1),k=new ft({color:3816010,metalness:.5,roughness:.5}),S=new Ie(w,k);S.position.y=.05,S.receiveShadow=!0,e.add(S);const j=ki(Yi(s));return j.position.set(0,3.2,0),j.name="buildingLabel",e.add(j),e.position.set(s.position.x,0,s.position.z),{group:e,statusLight:p,label:j}}function WI(s,e){for(let t=0;t<5;t++){const n=s.group.getObjectByName(`led_${t}`);if(n&&n.material instanceof Ke){const i=Math.sin(e*.8+t*1.2);n.material.opacity=i>.3?.6:.15}const a=s.group.getObjectByName(`activityLed_${t}`);a&&a.material instanceof Ke&&(a.material.opacity=Math.random()>.97?.5:.1)}}function qI(s,e){for(let t=0;t<5;t++){const n=s.group.getObjectByName(`activityLed_${t}`);n&&n.material instanceof Ke&&Math.random()>.95&&(n.material.opacity=n.material.opacity>.5?.2:.9)}}function YI(s){const e=new Hn;e.userData.buildingId=s.id,e.userData.isBuilding=!0;const t=s.color?new Ut(s.color):new Ut(2767434),n=new Xn(.5,.7,3,8),a=new ft({color:t,metalness:.6,roughness:.4}),i=new Ie(n,a);i.position.y=1.5,i.castShadow=!0,i.receiveShadow=!0,i.name="buildingBody",e.add(i);for(let R=0;R<4;R++){const I=new Xn(.52-R*.03,.62-R*.03,.1,8),O=new Ke({color:4890367,transparent:!0,opacity:.7}),B=new Ie(I,O);B.position.y=.7+R*.6,B.name=`windowBand_${R}`,e.add(B)}const o=new Xn(.6,.5,.2,8),l=new ft({color:3816010,metalness:.7,roughness:.3}),c=new Ie(o,l);c.position.y=3.1,e.add(c);const d=new Xn(.15,.2,.3,6),f=new ft({color:4868698,metalness:.8,roughness:.2}),p=new Ie(d,f);p.position.y=3.35,e.add(p);const m=new Hn;m.position.y=3.6,m.name="antenna";const b=new ln(.05,.6,.05),x=new ft({color:6974074,metalness:.9,roughness:.1}),w=new Ie(b,x);w.position.y=.3,m.add(w);const k=new bc(.15,.1,8);for(let R=0;R<2;R++){const I=new Ie(k,x);I.rotation.x=Math.PI/2,I.position.set(R===0?.2:-.2,.4,0),I.rotation.z=R===0?Math.PI/2:-Math.PI/2,m.add(I)}e.add(m);const S=new Wt(.12,16,16),j=new Ke({color:bs[s.status],transparent:!0,opacity:.95}),C=new Ie(S,j);C.position.set(0,4.3,0),C.name="statusLight",e.add(C);const N=new Wt(.2,16,16),_=new Ke({color:bs[s.status],transparent:!0,opacity:.3}),D=new Ie(N,_);D.position.set(0,4.3,0),D.name="statusGlow",e.add(D);const L=new Xn(.9,1,.15,8),M=new ft({color:3816010,metalness:.5,roughness:.5}),P=new Ie(L,M);P.position.y=.075,P.receiveShadow=!0,e.add(P);const E=ki(Yi(s));return E.position.set(0,4.7,0),E.name="buildingLabel",e.add(E),e.position.set(s.position.x,0,s.position.z),{group:e,statusLight:C,label:E}}function VI(s,e,t){const n=s.group.getObjectByName("antenna");n&&(n.rotation.y+=t*.3);for(let a=0;a<4;a++){const i=s.group.getObjectByName(`windowBand_${a}`);i&&i.material instanceof Ke&&(i.material.opacity=.3+Math.sin(e*.5+a*.4)*.15)}}function KI(s,e,t){const n=s.group.getObjectByName("antenna");n&&(n.rotation.y+=t*2);for(let a=0;a<4;a++){const i=s.group.getObjectByName(`windowBand_${a}`);if(i&&i.material instanceof Ke){const o=Math.sin(e*4+a*.5)*.3+.7;i.material.opacity=o}}}function XI(s){const e=new Hn;e.userData.buildingId=s.id,e.userData.isBuilding=!0;const t=s.color?new Ut(s.color):new Ut(2763338),n=new Wt(1.2,32,16,0,Math.PI*2,0,Math.PI/2),a=new ft({color:t,metalness:.4,roughness:.6,transparent:!0,opacity:.9}),i=new Ie(n,a);i.position.y=.15,i.castShadow=!0,i.receiveShadow=!0,i.name="buildingBody",e.add(i);const o=new Wt(.8,24,12,0,Math.PI*2,0,Math.PI/2),l=new Ke({color:4890367,transparent:!0,opacity:.3}),c=new Ie(o,l);c.position.y=.15,c.name="innerDome",e.add(c);const d=new dc(1,.05,8,32),f=new Ke({color:4915102,transparent:!0,opacity:.8}),p=new Ie(d,f);p.position.y=.6,p.rotation.x=Math.PI/2,p.name="energyRing",e.add(p);const m=new Ie(d.clone(),f.clone());m.position.y=.8,m.rotation.x=Math.PI/3,m.name="energyRing2",e.add(m);for(let L=0;L<4;L++){const M=new Xn(.03,.03,1.2,8),P=new Ke({color:4890367,transparent:!0,opacity:.6}),E=new Ie(M,P),R=L/4*Math.PI*2;E.position.set(Math.cos(R)*.5,.75,Math.sin(R)*.5),E.name=`beam_${L}`,e.add(E)}const b=new Wt(.15,16,16),x=new Ke({color:bs[s.status],transparent:!0,opacity:.95}),w=new Ie(b,x);w.position.set(0,1.4,0),w.name="statusLight",e.add(w);const k=new Wt(.25,16,16),S=new Ke({color:bs[s.status],transparent:!0,opacity:.3}),j=new Ie(k,S);j.position.set(0,1.4,0),j.name="statusGlow",e.add(j);const C=new Xn(1.4,1.5,.15,32),N=new ft({color:3816010,metalness:.6,roughness:.4}),_=new Ie(C,N);_.position.y=.075,_.receiveShadow=!0,e.add(_);const D=ki(Yi(s));return D.position.set(0,1.9,0),D.name="buildingLabel",e.add(D),e.position.set(s.position.x,0,s.position.z),{group:e,statusLight:w,label:D}}function ZI(s,e,t){const n=s.group.getObjectByName("energyRing"),a=s.group.getObjectByName("energyRing2");n&&(n.rotation.z+=t*.2),a&&(a.rotation.z-=t*.15);const i=s.group.getObjectByName("innerDome");i&&i.material instanceof Ke&&(i.material.opacity=.15+Math.sin(e*.6)*.1);for(let o=0;o<4;o++){const l=s.group.getObjectByName(`beam_${o}`);l&&l.material instanceof Ke&&(l.material.opacity=.2+Math.sin(e*.5+o*.3)*.1)}}function QI(s,e,t){const n=s.group.getObjectByName("energyRing"),a=s.group.getObjectByName("energyRing2");n&&(n.rotation.z+=t*1.5),a&&(a.rotation.z-=t*1.2);const i=s.group.getObjectByName("innerDome");i&&i.material instanceof Ke&&(i.material.opacity=.2+Math.sin(e*2)*.15);for(let o=0;o<4;o++){const l=s.group.getObjectByName(`beam_${o}`);if(l&&l.material instanceof Ke){const c=Math.sin(e*5+o*1.5)*.3+.6;l.material.opacity=c}}}function JI(s){const e=new Hn;e.userData.buildingId=s.id,e.userData.isBuilding=!0;const t=s.color?new Ut(s.color):new Ut(3815978),n=new bc(1.3,2.5,4),a=new ft({color:t,metalness:.3,roughness:.7}),i=new Ie(n,a);i.position.y=1.25,i.rotation.y=Math.PI/4,i.castShadow=!0,i.receiveShadow=!0,i.name="buildingBody",e.add(i);const o=new bc(.6,1.2,4),l=new Ke({color:16755200,transparent:!0,opacity:.6}),c=new Ie(o,l);c.position.y=.8,c.rotation.y=Math.PI/4,c.name="pyramidCore",e.add(c);const d=[{x:.9,z:0},{x:-.9,z:0},{x:0,z:.9},{x:0,z:-.9}];for(let E=0;E<4;E++){const R=new Xn(.02,.02,2.7,8),I=new Ke({color:4915102,transparent:!0,opacity:.7}),O=new Ie(R,I),B=d[E];O.position.set(B.x*.5,1.25,B.z*.5);const q=Math.atan2(1.25,.65);E<2?O.rotation.z=E===0?-q:q:O.rotation.x=E===2?q:-q,O.name=`edgeLine_${E}`,e.add(O)}const f=new Wt(.15,16,16),p=new Ke({color:16755200,transparent:!0,opacity:.9}),m=new Ie(f,p);m.position.y=2.7,m.name="pyramidEye",e.add(m);const b=new Wt(.25,16,16),x=new Ke({color:16755200,transparent:!0,opacity:.3}),w=new Ie(b,x);w.position.y=2.7,w.name="pyramidEyeGlow",e.add(w);const k=new Wt(.12,16,16),S=new Ke({color:bs[s.status],transparent:!0,opacity:.95}),j=new Ie(k,S);j.position.set(1.2,.3,0),j.name="statusLight",e.add(j);const C=new Wt(.2,16,16),N=new Ke({color:bs[s.status],transparent:!0,opacity:.3}),_=new Ie(C,N);_.position.set(1.2,.3,0),_.name="statusGlow",e.add(_);const D=new ln(2.8,.15,2.8),L=new ft({color:4868666,metalness:.2,roughness:.8}),M=new Ie(D,L);M.position.y=.075,M.receiveShadow=!0,e.add(M);const P=ki(Yi(s));return P.position.set(0,3.2,0),P.name="buildingLabel",e.add(P),e.position.set(s.position.x,0,s.position.z),{group:e,statusLight:j,label:P}}function eB(s,e){const t=s.group.getObjectByName("pyramidEye"),n=s.group.getObjectByName("pyramidEyeGlow");t&&(t.position.y=2.7+Math.sin(e*.5)*.03,t.material instanceof Ke&&(t.material.opacity=.4+Math.sin(e*.7)*.2)),n&&(n.position.y=2.7+Math.sin(e*.5)*.03,n.material instanceof Ke&&(n.material.opacity=.15+Math.sin(e*.7)*.1));const a=s.group.getObjectByName("pyramidCore");a&&a.material instanceof Ke&&(a.material.opacity=.2+Math.sin(e*.5)*.1)}function tB(s,e){const t=s.group.getObjectByName("pyramidCore");t&&t.material instanceof Ke&&(t.material.opacity=.4+Math.sin(e*2)*.2);const n=s.group.getObjectByName("pyramidEye"),a=s.group.getObjectByName("pyramidEyeGlow");n&&n.material instanceof Ke&&(n.material.opacity=.7+Math.sin(e*3)*.3),a&&a.material instanceof Ke&&(a.material.opacity=.2+Math.sin(e*3)*.15),n&&(n.position.y=2.7+Math.sin(e*1.5)*.1),a&&(a.position.y=2.7+Math.sin(e*1.5)*.1)}function nB(s){const e=new Hn;e.userData.buildingId=s.id,e.userData.isBuilding=!0;const t=Md.desktop,n=s.color?new Ut(s.color):new Ut(t.primary),a=new ln(1.4,1,.15),i=new ft({color:n,metalness:.4,roughness:.6}),o=new Ie(a,i);o.position.set(0,1.4,0),o.castShadow=!0,o.name="buildingBody",e.add(o);const l=new ln(1.2,.8,.02),c=new Ke({color:661032,transparent:!0,opacity:.95}),d=new Ie(l,c);d.position.set(0,1.4,.09),d.name="screen",e.add(d);for(let K=0;K<6;K++){const X=new ln(.8-K%3*.2,.05,.01),$=new Ke({color:t.glow,transparent:!0,opacity:.9}),re=new Ie(X,$);re.position.set(-.1+K%2*.1,1.65-K*.1,.1),re.name=`codeLine_${K}`,e.add(re)}const f=new ln(.15,.6,.15),p=new ft({color:t.secondary,metalness:.5,roughness:.5}),m=new Ie(f,p);m.position.set(0,.6,0),e.add(m);const b=new ln(.6,.08,.4),x=new Ie(b,p);x.position.set(0,.25,0),e.add(x);const w=new ln(1,.08,.35),k=new ft({color:t.secondary,metalness:.3,roughness:.7}),S=new Ie(w,k);S.position.set(0,.2,.6),S.rotation.x=-.1,e.add(S);for(let K=0;K<3;K++)for(let X=0;X<10;X++){const $=new ln(.07,.03,.07),re=new ft({color:t.accent,metalness:.2,roughness:.8}),le=new Ie($,re);le.position.set(-.38+X*.085,.25,.45+K*.1),e.add(le)}const j=new ln(.4,.9,.8),C=new ft({color:n,metalness:.4,roughness:.6}),N=new Ie(j,C);N.position.set(-1.1,.55,0),N.castShadow=!0,e.add(N);const _=new ln(.05,.05,.02),D=new Ke({color:4915102,transparent:!0,opacity:.9}),L=new Ie(_,D);L.position.set(-.88,.7,.3),L.name="cpuLed",e.add(L);const M=new Wt(.1,16,16),P=new Ke({color:bs[s.status],transparent:!0,opacity:.95}),E=new Ie(M,P);E.position.set(.6,1.85,.1),E.name="statusLight",e.add(E);const R=new Wt(.18,16,16),I=new Ke({color:bs[s.status],transparent:!0,opacity:.3}),O=new Ie(R,I);O.position.set(.6,1.85,.1),O.name="statusGlow",e.add(O);const B=new ln(2.6,.1,1.4),q=new ft({color:3816010,metalness:.5,roughness:.5}),H=new Ie(B,q);H.position.y=.05,H.receiveShadow=!0,e.add(H);const G=ki(Yi(s));return G.position.set(0,2.3,0),G.name="buildingLabel",e.add(G),e.position.set(s.position.x,0,s.position.z),{group:e,statusLight:E,label:G}}function sB(s,e){const t=s.group.getObjectByName("buildingBody");t&&(t.rotation.y=Math.sin(e*.3)*.01);for(let n=0;n<6;n++){const a=s.group.getObjectByName(`codeLine_${n}`);a&&a.material instanceof Ke&&(a.material.opacity=.3+Math.sin(e*.4+n*.2)*.1)}}function aB(s,e){for(let n=0;n<6;n++){const a=s.group.getObjectByName(`codeLine_${n}`);if(a&&a.material instanceof Ke){const i=Math.random()>.98?.4:.8;a.material.opacity=i}}const t=s.group.getObjectByName("cpuLed");if(t&&t.material instanceof Ke){const n=Math.sin(e*6)>0?.9:.3;t.material.opacity=n}}function iB(s){const e=new Hn;e.userData.buildingId=s.id,e.userData.isBuilding=!0;const t=Md["filing-cabinet"],n=s.color?new Ut(s.color):new Ut(t.primary),a=new ln(1,2.4,.8),i=new ft({color:n,metalness:.5,roughness:.5}),o=new Ie(a,i);o.position.y=1.2,o.castShadow=!0,o.name="buildingBody",e.add(o);for(let S=0;S<4;S++){const j=new ln(.9,.5,.05),C=new ft({color:t.secondary,metalness:.4,roughness:.6}),N=new Ie(j,C);N.position.set(0,.35+S*.55,.4),N.name=`drawer_${S}`,e.add(N);const _=new ln(.3,.06,.05),D=new ft({color:t.accent,metalness:.7,roughness:.3}),L=new Ie(_,D);L.position.set(0,.35+S*.55,.47),L.name=`handle_${S}`,e.add(L);const M=new ln(.4,.15,.02),P=new Ke({color:16777198}),E=new Ie(M,P);E.position.set(0,.45+S*.55,.44),e.add(E)}for(let S=0;S<4;S++){const j=new ln(.06,.06,.02),C=new Ke({color:S%2===0?t.glow:t.accent,transparent:!0,opacity:.9}),N=new Ie(j,C);N.position.set(-.38,.35+S*.55,.42),N.name=`indicator_${S}`,e.add(N)}const l=new Wt(.12,16,16),c=new Ke({color:bs[s.status],transparent:!0,opacity:.95}),d=new Ie(l,c);d.position.set(0,2.55,0),d.name="statusLight",e.add(d);const f=new Wt(.2,16,16),p=new Ke({color:bs[s.status],transparent:!0,opacity:.3}),m=new Ie(f,p);m.position.set(0,2.55,0),m.name="statusGlow",e.add(m);const b=new ln(1.3,.1,1.1),x=new ft({color:3816010,metalness:.5,roughness:.5}),w=new Ie(b,x);w.position.y=.05,w.receiveShadow=!0,e.add(w);const k=ki(Yi(s));return k.position.set(0,3,0),k.name="buildingLabel",e.add(k),e.position.set(s.position.x,0,s.position.z),{group:e,statusLight:d,label:k}}function rB(s,e){s.group.rotation.y=Math.sin(e*.5)*.005;for(let t=0;t<4;t++){const n=s.group.getObjectByName(`indicator_${t}`);n&&n.material instanceof Ke&&(n.material.opacity=.3+Math.sin(e*.6+t*.4)*.15)}}function oB(s,e){for(let t=0;t<4;t++){const n=s.group.getObjectByName(`indicator_${t}`);if(n&&n.material instanceof Ke){const a=Math.sin(e*3+t*.8)*.3+.7;n.material.opacity=a}}for(let t=0;t<4;t++){const n=s.group.getObjectByName(`handle_${t}`);n&&(n.position.z=.47+Math.sin(e*8+t)*.005)}}function lB(s){const e=new Hn;e.userData.buildingId=s.id,e.userData.isBuilding=!0;const t=Md.satellite,n=s.color?new Ut(s.color):new Ut(t.primary),a=new Xn(.1,.15,2,8),i=new ft({color:t.secondary,metalness:.6,roughness:.4}),o=new Ie(a,i);o.position.y=1,o.castShadow=!0,e.add(o);const l=new ln(.3,.2,.3),c=new Ie(l,i);c.position.y=2.1,e.add(c);const d=new Hn;d.position.y=2.3,d.name="dishGroup";const f=new Wt(1,32,16,0,Math.PI*2,0,Math.PI/3),p=new ft({color:n,metalness:.5,roughness:.5,side:Ls}),m=new Ie(f,p);m.rotation.x=Math.PI/2+.3,m.name="buildingBody",d.add(m);const b=new Wt(.95,32,16,0,Math.PI*2,0,Math.PI/3),x=new ft({color:t.accent,metalness:.3,roughness:.7,side:tM}),w=new Ie(b,x);w.rotation.x=Math.PI/2+.3,d.add(w);const k=new Xn(.03,.03,.8,8),S=new ft({color:t.secondary,metalness:.6,roughness:.4}),j=new Ie(k,S);j.position.set(0,.1,.5),j.rotation.x=-.6,d.add(j);const C=new bc(.1,.2,8),N=new ft({color:t.accent,metalness:.4,roughness:.6}),_=new Ie(C,N);_.position.set(0,.5,.85),_.rotation.x=Math.PI/2-.6,d.add(_);const D=new Wt(.08,16,16),L=new Ke({color:t.glow,transparent:!0,opacity:.9}),M=new Ie(D,L);M.position.set(0,.55,.92),M.name="signal",d.add(M),e.add(d);for(let X=0;X<3;X++){const $=new ol(.2+X*.15,.22+X*.15,16),re=new Ke({color:t.glow,transparent:!0,opacity:.6-X*.15,side:Ls}),le=new Ie($,re);le.position.set(0,2.85+X*.1,.92+X*.1),le.rotation.x=-.6,le.name=`wave_${X}`,e.add(le)}const P=new Wt(.1,16,16),E=new Ke({color:bs[s.status],transparent:!0,opacity:.95}),R=new Ie(P,E);R.position.set(0,.3,.5),R.name="statusLight",e.add(R);const I=new Wt(.18,16,16),O=new Ke({color:bs[s.status],transparent:!0,opacity:.3}),B=new Ie(I,O);B.position.set(0,.3,.5),B.name="statusGlow",e.add(B);const q=new Xn(.6,.7,.15,16),H=new ft({color:t.secondary,metalness:.5,roughness:.5}),G=new Ie(q,H);G.position.y=.075,G.receiveShadow=!0,e.add(G);const K=ki(Yi(s));return K.position.set(0,3.8,0),K.name="buildingLabel",e.add(K),e.position.set(s.position.x,0,s.position.z),{group:e,statusLight:R,label:K}}function cB(s,e,t){const n=s.group.getObjectByName("dishGroup");n&&(n.rotation.y+=t*.1);for(let a=0;a<3;a++){const i=s.group.getObjectByName(`wave_${a}`);i&&i.material instanceof Ke&&(i.material.opacity=.15+Math.sin(e*.5+a*.3)*.1)}}function uB(s,e,t){const n=s.group.getObjectByName("dishGroup");n&&(n.rotation.y+=t*.5);const a=s.group.getObjectByName("signal");a&&a.material instanceof Ke&&(a.material.opacity=.6+Math.sin(e*8)*.4);for(let i=0;i<3;i++){const o=s.group.getObjectByName(`wave_${i}`);if(o&&o.material instanceof Ke){const l=1+Math.sin(e*4+i)*.1;o.scale.set(l,l,1),o.material.opacity=(.5-i*.15)*(.5+Math.sin(e*4+i)*.5)}}}function dB(s){const e=new Hn;e.userData.buildingId=s.id,e.userData.isBuilding=!0;const t=Md.crystal,n=s.color?new Ut(s.color):new Ut(t.primary),a=new LS(.8),i=new ft({color:n,metalness:.3,roughness:.2,transparent:!0,opacity:.85}),o=new Ie(a,i);o.position.y=1.8,o.castShadow=!0,o.name="buildingBody",e.add(o);const l=new LS(.5),c=new Ke({color:t.glow,transparent:!0,opacity:.6}),d=new Ie(l,c);d.position.y=1.8,d.name="crystalInner",e.add(d);for(let O=0;O<6;O++){const B=new Wt(.06,8,8),q=new Ke({color:O%2===0?t.accent:t.glow,transparent:!0,opacity:.9}),H=new Ie(B,q),G=O/6*Math.PI*2;H.position.set(Math.cos(G)*1.2,1.8+Math.sin(G*2)*.3,Math.sin(G)*1.2),H.name=`particle_${O}`,e.add(H)}const f=new IP(1.3,1),p=new Ke({color:t.accent,wireframe:!0,transparent:!0,opacity:.4}),m=new Ie(f,p);m.position.y=1.8,m.name="energyField",e.add(m);const b=new Xn(.3,.5,.8,6),x=new ft({color:t.secondary,metalness:.5,roughness:.5}),w=new Ie(b,x);w.position.y=.4,e.add(w);const k=new Xn(.05,.05,.9,8),S=new Ke({color:t.glow,transparent:!0,opacity:.7}),j=new Ie(k,S);j.position.y=1.25,j.name="energyBeam",e.add(j);const C=new Wt(.1,16,16),N=new Ke({color:bs[s.status],transparent:!0,opacity:.95}),_=new Ie(C,N);_.position.set(.7,.5,0),_.name="statusLight",e.add(_);const D=new Wt(.18,16,16),L=new Ke({color:bs[s.status],transparent:!0,opacity:.3}),M=new Ie(D,L);M.position.set(.7,.5,0),M.name="statusGlow",e.add(M);const P=new Xn(.8,.9,.1,6),E=new ft({color:t.secondary,metalness:.6,roughness:.4}),R=new Ie(P,E);R.position.y=.05,R.receiveShadow=!0,e.add(R);const I=ki(Yi(s));return I.position.set(0,3,0),I.name="buildingLabel",e.add(I),e.position.set(s.position.x,0,s.position.z),{group:e,statusLight:_,label:I}}function hB(s,e,t){const n=s.group.getObjectByName("buildingBody");n&&(n.rotation.y+=t*.2,n.position.y=1.8+Math.sin(e*.8)*.05);const a=s.group.getObjectByName("crystalInner");a&&(a.rotation.y-=t*.3,a.position.y=1.8+Math.sin(e*.8)*.05,a.material instanceof Ke&&(a.material.opacity=.25+Math.sin(e*.6)*.15));const i=s.group.getObjectByName("energyField");i&&(i.rotation.y+=t*.1,i.position.y=1.8+Math.sin(e*.8)*.05,i.material instanceof Ke&&(i.material.opacity=.15+Math.sin(e*.5)*.1));for(let l=0;l<6;l++){const c=s.group.getObjectByName(`particle_${l}`);if(c){const d=l/6*Math.PI*2+e*.3;c.position.x=Math.cos(d)*1.2,c.position.z=Math.sin(d)*1.2,c.position.y=1.8+Math.sin(e*.8)*.05+Math.sin(d*2)*.2}}const o=s.group.getObjectByName("energyBeam");o&&o.material instanceof Ke&&(o.material.opacity=.2+Math.sin(e*.7)*.15)}function pB(s,e,t){const n=s.group.getObjectByName("buildingBody"),a=s.group.getObjectByName("crystalInner"),i=s.group.getObjectByName("energyField");n&&(n.rotation.y+=t*.8,n.position.y=1.8+Math.sin(e*1.5)*.1),a&&(a.rotation.y-=t*1.2,a.position.y=1.8+Math.sin(e*1.5)*.1,a.material instanceof Ke&&(a.material.opacity=.4+Math.sin(e*3)*.2)),i&&(i.rotation.y+=t*.3,i.rotation.x+=t*.2,i.position.y=1.8+Math.sin(e*1.5)*.1);for(let l=0;l<6;l++){const c=s.group.getObjectByName(`particle_${l}`);if(c){const d=l/6*Math.PI*2+e*1.5,f=1.2+Math.sin(e*2+l)*.1;c.position.x=Math.cos(d)*f,c.position.z=Math.sin(d)*f,c.position.y=1.8+Math.sin(e*1.5)*.1+Math.sin(d*2)*.3}}const o=s.group.getObjectByName("energyBeam");o&&o.material instanceof Ke&&(o.material.opacity=.4+Math.sin(e*4)*.3)}function fB(s){const e=new Hn;e.userData.buildingId=s.id,e.userData.isBuilding=!0;const t=Md.factory,n=s.color?new Ut(s.color):new Ut(t.primary),a=new ln(1.8,1.2,1.2),i=new ft({color:n,metalness:.4,roughness:.6}),o=new Ie(a,i);o.position.set(0,.6,0),o.castShadow=!0,o.name="buildingBody",e.add(o);const l=new ln(2,.15,1.4),c=new ft({color:t.secondary,metalness:.5,roughness:.5}),d=new Ie(l,c);d.position.set(0,1.25,0),d.rotation.z=.05,e.add(d);const f=new Xn(.15,.18,1.2,8),p=new ft({color:t.secondary,metalness:.5,roughness:.5}),m=new Ie(f,p);m.position.set(.5,1.8,.3),e.add(m);const b=new dc(.17,.03,8,16),x=new Ie(b,p);x.position.set(.5,2.4,.3),x.rotation.x=Math.PI/2,e.add(x);for(let X=0;X<4;X++){const $=new Wt(.08+X*.03,8,8),re=new Ke({color:11184810,transparent:!0,opacity:.7-X*.12}),le=new Ie($,re);le.position.set(.5,2.5+X*.25,.3),le.name=`smoke_${X}`,e.add(le)}for(let X=0;X<3;X++){const $=new ln(.25,.35,.05),re=new Ke({color:t.glow,transparent:!0,opacity:.9}),le=new Ie($,re);le.position.set(-.6+X*.5,.7,.63),le.name=`window_${X}`,e.add(le)}const w=new ln(.4,.6,.05),k=new ft({color:t.secondary,metalness:.4,roughness:.6}),S=new Ie(w,k);S.position.set(.6,.35,.63),e.add(S);const j=new ln(.3,.1,1.6),C=new ft({color:t.secondary,metalness:.6,roughness:.4}),N=new Ie(j,C);N.position.set(-1,.25,0),e.add(N);for(let X=0;X<3;X++){const $=new ln(.15,.15,.15),re=new Ke({color:X%2===0?t.accent:t.glow}),le=new Ie($,re);le.position.set(-1,.38,-.5+X*.4),le.name=`conveyorItem_${X}`,e.add(le)}const _=new dc(.2,.05,6,8),D=new ft({color:t.accent,metalness:.6,roughness:.4}),L=new Ie(_,D);L.position.set(-.8,.9,.63),L.name="gear1",e.add(L);const M=new Ie(_.clone(),D.clone());M.position.set(-.5,1.05,.63),M.name="gear2",e.add(M);const P=new Wt(.12,16,16),E=new Ke({color:bs[s.status],transparent:!0,opacity:.95}),R=new Ie(P,E);R.position.set(.85,1,.65),R.name="statusLight",e.add(R);const I=new Wt(.2,16,16),O=new Ke({color:bs[s.status],transparent:!0,opacity:.3}),B=new Ie(I,O);B.position.set(.85,1,.65),B.name="statusGlow",e.add(B);const q=new ln(2.4,.1,1.8),H=new ft({color:4868682,metalness:.4,roughness:.6}),G=new Ie(q,H);G.position.y=.05,G.receiveShadow=!0,e.add(G);const K=ki(Yi(s));return K.position.set(0,2.9,0),K.name="buildingLabel",e.add(K),e.position.set(s.position.x,0,s.position.z),{group:e,statusLight:R,label:K}}function mB(s,e,t){const n=s.group.getObjectByName("gear1"),a=s.group.getObjectByName("gear2");n&&(n.rotation.z+=t*.3),a&&(a.rotation.z-=t*.4);for(let i=0;i<3;i++){const o=s.group.getObjectByName(`window_${i}`);o&&o.material instanceof Ke&&(o.material.opacity=.3+Math.sin(e*.4+i*.5)*.15)}for(let i=0;i<3;i++){const o=s.group.getObjectByName(`conveyorItem_${i}`);o&&(o.position.z=(o.position.z+t*.05+.5)%1.2-.5)}for(let i=0;i<4;i++){const o=s.group.getObjectByName(`smoke_${i}`);if(o){const l=2.5+i*.25,c=(e*.15+i*.3)%1.5;o.position.y=l+c,o.position.x=.5+Math.sin(e*.3+i)*.05,o.material instanceof Ke&&(o.material.opacity=Math.max(0,(.25-i*.05)*(1-c/1.5)))}}}function gB(s,e,t){for(let i=0;i<4;i++){const o=s.group.getObjectByName(`smoke_${i}`);if(o){const l=2.5+i*.25,c=(e*.5+i*.3)%1.5;o.position.y=l+c,o.position.x=.5+Math.sin(e+i)*.1,o.material instanceof Ke&&(o.material.opacity=Math.max(0,(.6-i*.12)*(1-c/1.5))),c>1.4&&(o.position.y=l)}}const n=s.group.getObjectByName("gear1"),a=s.group.getObjectByName("gear2");n&&(n.rotation.z+=t*2),a&&(a.rotation.z-=t*2.5);for(let i=0;i<3;i++){const o=s.group.getObjectByName(`conveyorItem_${i}`);o&&(o.position.z=(o.position.z+t*.3+.5)%1.2-.5)}for(let i=0;i<3;i++){const o=s.group.getObjectByName(`window_${i}`);if(o&&o.material instanceof Ke){const l=Math.random()>.99?.5:.8;o.material.opacity=l}}}function bB(s){const e=new Hn;e.userData.buildingId=s.id,e.userData.isBuilding=!0;const t=s.color?new Ut(s.color):new Ut(2763322),n=16766720,a=new Xn(1.8,2,.3,6),i=new ft({color:t,metalness:.7,roughness:.3}),o=new Ie(a,i);o.position.y=.15,o.receiveShadow=!0,e.add(o);const l=new Xn(1.2,1.4,.2,6),c=new ft({color:3816010,metalness:.8,roughness:.2}),d=new Ie(l,c);d.position.y=.4,e.add(d);const f=new Xn(.4,.6,2,6),p=new ft({color:t,metalness:.6,roughness:.4}),m=new Ie(f,p);m.position.y=1.5,m.castShadow=!0,m.receiveShadow=!0,m.name="buildingBody",e.add(m);const b=new Xn(.5,.4,.3,6),x=new ft({color:n,metalness:.9,roughness:.1,emissive:new Ut(n),emissiveIntensity:.3}),w=new Ie(b,x);w.position.y=2.65,w.name="crownBase",e.add(w);for(let H=0;H<5;H++){const G=H/5*Math.PI*2,K=new bc(.08,.4,4),X=new Ie(K,x);X.position.set(Math.cos(G)*.35,2.95,Math.sin(G)*.35),X.name=`crownSpike_${H}`,e.add(X)}const k=new dc(.8,.03,8,32),S=new Ke({color:n,transparent:!0,opacity:.6}),j=new Ie(k,S);j.position.y=1.2,j.rotation.x=Math.PI/2,j.name="holoRing1",e.add(j);const C=new dc(1.1,.02,8,32),N=new Ke({color:4915102,transparent:!0,opacity:.5}),_=new Ie(C,N);_.position.y=1.5,_.rotation.x=Math.PI/2,_.name="holoRing2",e.add(_);const D=new dc(1.4,.02,8,32),L=new Ke({color:4890367,transparent:!0,opacity:.4}),M=new Ie(D,L);M.position.y=1.8,M.rotation.x=Math.PI/2,M.name="holoRing3",e.add(M);for(let H=0;H<6;H++){const G=H/6*Math.PI*2,K=new Hn,X=new ln(.3,.25,.2),$=new ft({color:3816010,metalness:.6,roughness:.4}),re=new Ie(X,$);re.position.y=.45,K.add(re);const le=new wr(.25,.15),F=new Ke({color:4890367,transparent:!0,opacity:.8}),ne=new Ie(le,F);ne.position.y=.52,ne.position.z=.11,ne.rotation.x=-.3,ne.name=`consoleScreen_${H}`,K.add(ne),K.position.set(Math.cos(G)*1.5,0,Math.sin(G)*1.5),K.rotation.y=-G+Math.PI,e.add(K)}const P=new Wt(.15,16,16),E=new Ke({color:bs[s.status],transparent:!0,opacity:.95}),R=new Ie(P,E);R.position.set(0,3.3,0),R.name="statusLight",e.add(R);const I=new Wt(.25,16,16),O=new Ke({color:bs[s.status],transparent:!0,opacity:.3}),B=new Ie(I,O);B.position.set(0,3.3,0),B.name="statusGlow",e.add(B);for(let H=0;H<6;H++){const G=H/6*Math.PI*2+Math.PI/6,K=new Xn(.06,.08,1,6),X=new ft({color:n,metalness:.8,roughness:.2,emissive:new Ut(n),emissiveIntensity:.2}),$=new Ie(K,X);$.position.set(Math.cos(G)*1.85,.8,Math.sin(G)*1.85),$.name=`energyPillar_${H}`,e.add($);const re=new Wt(.08,8,8),le=new Ke({color:n,transparent:!0,opacity:.8}),F=new Ie(re,le);F.position.set(Math.cos(G)*1.85,1.35,Math.sin(G)*1.85),F.name=`pillarLight_${H}`,e.add(F)}const q=ki(Yi(s));return q.position.set(0,3.8,0),q.name="buildingLabel",e.add(q),e.position.set(s.position.x,0,s.position.z),{group:e,statusLight:R,label:q}}function yB(s,e,t){const n=s.group.getObjectByName("holoRing1"),a=s.group.getObjectByName("holoRing2"),i=s.group.getObjectByName("holoRing3");n&&(n.rotation.z+=t*.3,n.material instanceof Ke&&(n.material.opacity=.3+Math.sin(e*.5)*.1)),a&&(a.rotation.z-=t*.2,a.material instanceof Ke&&(a.material.opacity=.25+Math.sin(e*.7+1)*.1)),i&&(i.rotation.z+=t*.1,i.material instanceof Ke&&(i.material.opacity=.2+Math.sin(e*.4+2)*.1));for(let o=0;o<6;o++){const l=s.group.getObjectByName(`pillarLight_${o}`);l&&l.material instanceof Ke&&(l.material.opacity=.4+Math.sin(e*.5+o*.5)*.2)}for(let o=0;o<6;o++){const l=s.group.getObjectByName(`consoleScreen_${o}`);l&&l.material instanceof Ke&&(l.material.opacity=.4+Math.sin(e*.3+o*.3)*.1)}}function xB(s,e,t){const n=s.group.getObjectByName("holoRing1"),a=s.group.getObjectByName("holoRing2"),i=s.group.getObjectByName("holoRing3");n&&(n.rotation.z+=t*1.5,n.rotation.x=Math.PI/2+Math.sin(e*2)*.1,n.material instanceof Ke&&(n.material.opacity=.5+Math.sin(e*3)*.2)),a&&(a.rotation.z-=t*1,a.rotation.x=Math.PI/2+Math.sin(e*1.5+1)*.15,a.material instanceof Ke&&(a.material.opacity=.4+Math.sin(e*2.5+1)*.15)),i&&(i.rotation.z+=t*.5,i.rotation.x=Math.PI/2+Math.sin(e*1+2)*.1,i.material instanceof Ke&&(i.material.opacity=.35+Math.sin(e*2+2)*.15));for(let l=0;l<6;l++){const c=s.group.getObjectByName(`pillarLight_${l}`);if(c&&c.material instanceof Ke){const d=(e*2+l*.3)%(Math.PI*2);c.material.opacity=.6+Math.sin(d)*.3}}for(let l=0;l<6;l++){const c=s.group.getObjectByName(`consoleScreen_${l}`);if(c&&c.material instanceof Ke){c.material.opacity=.7+Math.sin(e*4+l*.5)*.2;const d=(e*.1+l*.1)%1;c.material.color.setHSL(d*.2+.5,.8,.5)}}const o=s.group.getObjectByName("crownBase");o&&o.material instanceof ft&&(o.material.emissiveIntensity=.4+Math.sin(e*2)*.2)}function vB(s){switch(s.style||"server-rack"){case"tower":return YI(s);case"dome":return XI(s);case"pyramid":return JI(s);case"desktop":return nB(s);case"filing-cabinet":return iB(s);case"satellite":return lB(s);case"crystal":return dB(s);case"factory":return fB(s);case"command-center":return bB(s);case"server-rack":default:return GI(s)}}function wB(s,e,t,n){switch(e.style||"server-rack"){case"server-rack":WI(s,t);break;case"desktop":sB(s,t);break;case"filing-cabinet":rB(s,t);break;case"satellite":cB(s,t,n);break;case"crystal":hB(s,t,n);break;case"factory":mB(s,t,n);break;case"tower":VI(s,t,n);break;case"dome":ZI(s,t,n);break;case"pyramid":eB(s,t);break;case"command-center":yB(s,t,n);break}}function kB(s,e,t,n){const a=e.style||"server-rack",i=s.group.getObjectByName("statusGlow"),o=Math.sin(t*3)*.2+.8;switch(i&&i.material instanceof Ke&&(i.material.opacity=.3*o),a){case"server-rack":qI(s);break;case"tower":KI(s,t,n);break;case"dome":QI(s,t,n);break;case"pyramid":tB(s,t);break;case"desktop":aB(s,t);break;case"filing-cabinet":oB(s,t);break;case"satellite":uB(s,t,n);break;case"crystal":pB(s,t,n);break;case"factory":gB(s,t,n);break;case"command-center":xB(s,t,n);break}}function SB(s,e){const t=s.group.getObjectByName("statusGlow"),n=Math.sin(e*8)*.5+.5;t&&t.material instanceof Ke&&(t.material.opacity=.5*n)}function jB(s,e){const t=s.group.getObjectByName("statusGlow"),n=Math.sin(e*2)*.5+.5;t&&t.material instanceof Ke&&(t.material.opacity=.4*n)}class CB{constructor(e){U(this,"scene");U(this,"buildingMeshes",new Map);U(this,"selectedBuildingIds",new Set);U(this,"animationTime",0);U(this,"brightness",1);U(this,"bossSubordinateLines",null);U(this,"bossSubordinateMaterial",null);U(this,"cachedBossConnections",[]);U(this,"maxLineSegments",50);U(this,"onBuildingClick",null);U(this,"onBuildingDoubleClick",null);this.scene=e}setOnBuildingClick(e){this.onBuildingClick=e}setOnBuildingDoubleClick(e){this.onBuildingDoubleClick=e}setBrightness(e){this.brightness=e;for(const t of this.buildingMeshes.values()){const n=t.group.getObjectByName("statusGlow");n&&n.material instanceof Ke&&(n.material.opacity=.3*e),t.group.traverse(a=>{if(a instanceof Ie&&a.material instanceof ft){const i=a.material;i.emissiveIntensity!==void 0&&(i.userData.baseEmissiveIntensity===void 0&&(i.userData.baseEmissiveIntensity=i.emissiveIntensity||1),i.emissiveIntensity=i.userData.baseEmissiveIntensity*e)}})}}addBuilding(e){this.removeBuilding(e.id);const t=vB(e);t.group.userData.style=e.style,t.group.userData.color=e.color||"";const n=e.scale||1;t.group.scale.setScalar(n),this.scene.add(t.group),this.buildingMeshes.set(e.id,t)}removeBuilding(e){const t=this.buildingMeshes.get(e);t&&(this.scene.remove(t.group),this.disposeGroup(t.group),this.buildingMeshes.delete(e))}setBuildingPosition(e,t){const n=this.buildingMeshes.get(e);n&&(n.group.position.set(t.x,0,t.z),this.updateBossLinePositions())}updateBuilding(e){var b;const t=this.buildingMeshes.get(e.id);if(!t){this.addBuilding(e);return}const n=t.group.userData.style,a=t.group.userData.color;if(n!==e.style||a!==(e.color||"")){this.removeBuilding(e.id),this.addBuilding(e);return}t.group.position.set(e.position.x,0,e.position.z);const i=e.scale||1;t.group.scale.setScalar(i);const o=bs[e.status],l=t.group.getObjectByName("statusLight");l&&l.material instanceof Ke&&l.material.color.setHex(o);const c=t.group.getObjectByName("statusGlow");c&&c.material instanceof Ke&&c.material.color.setHex(o),((b=t.label.material.map)==null?void 0:b.image)&&UI(t,e.name);const p=e.gitChangesCount||0,m=t.group.getObjectByName("gitIndicator");if(p>0){if(m)m.userData.gitCount!==p&&(HI(m,p),m.userData.gitCount=p);else{const x=UM(p),w=t.label.position;x.position.set(w.x+.6,w.y+.15,w.z),t.group.add(x),t.gitIndicator=x}t.gitIndicator&&(t.gitIndicator.userData.gitCount=p)}else if(m){t.group.remove(m);const x=m.material;x.map&&x.map.dispose(),x.dispose(),t.gitIndicator=void 0}}highlightBuilding(e){for(const t of this.selectedBuildingIds){const n=this.buildingMeshes.get(t);if(n){const a=n.group.getObjectByName("buildingBody");a&&a.material instanceof ft&&a.material.emissive.setHex(0)}}if(this.selectedBuildingIds.clear(),e){this.selectedBuildingIds.add(e);const t=this.buildingMeshes.get(e);if(t){const n=t.group.getObjectByName("buildingBody");n&&n.material instanceof ft&&n.material.emissive.setHex(2236996)}}this.updateBossConnectionLines()}highlightBuildings(e){for(const t of this.selectedBuildingIds){const n=this.buildingMeshes.get(t);if(n){const a=n.group.getObjectByName("buildingBody");a&&a.material instanceof ft&&a.material.emissive.setHex(0)}}this.selectedBuildingIds.clear();for(const t of e){this.selectedBuildingIds.add(t);const n=this.buildingMeshes.get(t);if(n){const a=n.group.getObjectByName("buildingBody");a&&a.material instanceof ft&&a.material.emissive.setHex(2236996)}}this.updateBossConnectionLines()}getBuildingMeshData(){return this.buildingMeshes}getHitboxForStyle(e){switch(e){case"desktop":return{halfWidth:2,halfDepth:2};case"filing-cabinet":return{halfWidth:1.8,halfDepth:1.2};case"factory":return{halfWidth:1.5,halfDepth:1.2};case"satellite":return{halfWidth:1.2,halfDepth:1.2};case"crystal":return{halfWidth:1.5,halfDepth:1.5};case"tower":return{halfWidth:1.2,halfDepth:1};case"dome":return{halfWidth:1.5,halfDepth:1.5};case"pyramid":return{halfWidth:1.5,halfDepth:1.5};case"command-center":return{halfWidth:2.2,halfDepth:2.2};case"server-rack":default:return{halfWidth:1.2,halfDepth:1}}}getBuildingAtPosition(e){const t=z.getState();for(const n of t.buildings.values()){const a=this.getHitboxForStyle(n.style),i=n.scale||1,o={halfWidth:a.halfWidth*i,halfDepth:a.halfDepth*i},l=Math.abs(e.x-n.position.x),c=Math.abs(e.z-n.position.z);if(l<=o.halfWidth&&c<=o.halfDepth)return n}return null}getBuildingMeshes(){return Array.from(this.buildingMeshes.values()).map(e=>e.group)}syncFromStore(){const e=z.getState();for(const t of this.buildingMeshes.keys())e.buildings.has(t)||this.removeBuilding(t);for(const t of e.buildings.values())this.buildingMeshes.has(t.id)?this.updateBuilding(t):this.addBuilding(t)}update(e){this.animationTime+=e;const t=z.getState();for(const[n,a]of this.buildingMeshes){const i=t.buildings.get(n);i&&(wB(a,i,this.animationTime,e),i.status==="running"?kB(a,i,this.animationTime,e):i.status==="starting"||i.status==="stopping"?SB(a,this.animationTime):i.status==="error"&&jB(a,this.animationTime))}}updateBossConnectionLines(){var a;const e=z.getState(),t=[],n=new Set;for(const i of this.selectedBuildingIds){const o=e.buildings.get(i);if(o&&o.type==="boss"&&o.subordinateBuildingIds){t.push(o);for(const l of o.subordinateBuildingIds)n.add(l)}if(o){for(const[,l]of e.buildings)if(l.type==="boss"&&((a=l.subordinateBuildingIds)!=null&&a.includes(o.id))&&!t.find(c=>c.id===l.id)){t.push(l);for(const c of l.subordinateBuildingIds||[])n.add(c)}}}this.cachedBossConnections=[];for(const i of t)if(!(!this.buildingMeshes.get(i.id)||!i.subordinateBuildingIds))for(const l of i.subordinateBuildingIds)this.buildingMeshes.get(l)&&this.cachedBossConnections.push({bossId:i.id,subId:l});if(this.cachedBossConnections.length>0){if(!this.bossSubordinateLines){const l=new Float32Array(this.maxLineSegments*6),c=new si;c.setAttribute("position",new gi(l,3)),c.setDrawRange(0,0),this.bossSubordinateMaterial=new Vo({color:16766720,transparent:!0,opacity:.4}),this.bossSubordinateLines=new jx(c,this.bossSubordinateMaterial),this.bossSubordinateLines.frustumCulled=!1,this.scene.add(this.bossSubordinateLines)}const i=this.bossSubordinateLines.geometry.attributes.position,o=i.array;for(let l=0;l<this.cachedBossConnections.length&&l<this.maxLineSegments;l++){const{bossId:c,subId:d}=this.cachedBossConnections[l],f=this.buildingMeshes.get(c),p=this.buildingMeshes.get(d);if(f&&p){const m=l*6;o[m]=f.group.position.x,o[m+1]=.1,o[m+2]=f.group.position.z,o[m+3]=p.group.position.x,o[m+4]=.1,o[m+5]=p.group.position.z}}i.needsUpdate=!0,this.bossSubordinateLines.geometry.setDrawRange(0,this.cachedBossConnections.length*2),this.bossSubordinateLines.visible=!0}else this.bossSubordinateLines&&(this.bossSubordinateLines.visible=!1);for(const[i,o]of this.buildingMeshes){if(!e.buildings.get(i))continue;const c=n.has(i),d=o.group.getObjectByName("buildingBody");d&&d.material instanceof ft&&(c&&!this.selectedBuildingIds.has(i)?d.material.emissive.setHex(3351040):this.selectedBuildingIds.has(i)||d.material.emissive.setHex(0))}}updateBossLinePositions(){if(!this.bossSubordinateLines||this.cachedBossConnections.length===0)return;const e=this.bossSubordinateLines.geometry.attributes.position,t=e.array;for(let n=0;n<this.cachedBossConnections.length&&n<this.maxLineSegments;n++){const{bossId:a,subId:i}=this.cachedBossConnections[n],o=this.buildingMeshes.get(a),l=this.buildingMeshes.get(i);if(!o||!l)continue;const c=n*6;t[c]=o.group.position.x,t[c+1]=.1,t[c+2]=o.group.position.z,t[c+3]=l.group.position.x,t[c+4]=.1,t[c+5]=l.group.position.z}e.needsUpdate=!0}disposeGroup(e){e.traverse(t=>{if(t instanceof Ie&&(t.geometry.dispose(),Array.isArray(t.material)?t.material.forEach(n=>n.dispose()):t.material.dispose()),t instanceof Kn){const n=t.material;n.map&&n.map.dispose(),n.dispose()}})}dispose(){var e;for(const t of this.buildingMeshes.keys())this.removeBuilding(t);this.bossSubordinateLines&&(this.scene.remove(this.bossSubordinateLines),this.bossSubordinateLines.geometry.dispose(),(e=this.bossSubordinateMaterial)==null||e.dispose(),this.bossSubordinateLines=null,this.bossSubordinateMaterial=null),this.cachedBossConnections=[]}}const ld=class ld{constructor(e,t,n,a,i,o){U(this,"scene");U(this,"characterLoader");U(this,"characterFactory");U(this,"movementAnimator");U(this,"proceduralAnimator");U(this,"effectsManager");U(this,"agentMeshes",new Map);U(this,"pendingAgents",[]);U(this,"modelsReady",!1);U(this,"characterScale",.5);U(this,"brightness",1);U(this,"idleAnimation",rs.SIT);U(this,"workingAnimation",rs.WALK);U(this,"previousAgentStatuses",new Map);U(this,"modelStyle",{saturation:1,roughness:-1,metalness:-1,emissiveBoost:0,envMapIntensity:-1,wireframe:!1,colorMode:"normal"});U(this,"onAgentMeshesChanged",null);U(this,"onProceduralCacheInvalidated",null);U(this,"onToast",null);this.scene=e,this.characterLoader=t,this.characterFactory=n,this.movementAnimator=a,this.proceduralAnimator=i,this.effectsManager=o}setOnAgentMeshesChanged(e){this.onAgentMeshesChanged=e}setOnProceduralCacheInvalidated(e){this.onProceduralCacheInvalidated=e}setOnToast(e){this.onToast=e}getAgentMeshes(){return this.agentMeshes}isModelsReady(){return this.modelsReady}setCharacterScale(e){this.characterScale=e;for(const t of this.agentMeshes.values()){const n=t.group.getObjectByName("characterBody");if(n){const a=n.userData.customModelScale??1,i=t.group.userData.isBoss===!0,o=i?1.5:1;n.scale.setScalar(a*e*o);const l=t.group.getObjectByName("statusBar");if(l){const d=new Lp().setFromObject(n).max.y,f=i?.2:.3,p=i?3:2.2;l.position.y=Math.min(Math.max(d,1)+f,p)}}}}setBrightness(e){this.brightness=e;for(const t of this.agentMeshes.values())this.applyStyleToMesh(t.group)}setModelStyle(e){Object.assign(this.modelStyle,e);for(const t of this.agentMeshes.values())this.applyStyleToMesh(t.group)}getModelStyle(){return{...this.modelStyle}}injectColorShader(e){const t=this.modelStyle.saturation,n=ld.COLOR_MODE_INDEX[this.modelStyle.colorMode]??0;if(e.userData.hasColorShader)e.userData.shader&&(e.userData.shader.uniforms.uSaturation.value=t,e.userData.shader.uniforms.uColorMode.value=n);else{e.userData.hasColorShader=!0;const a=this;e.onBeforeCompile=i=>{i.uniforms.uSaturation={value:a.modelStyle.saturation},i.uniforms.uColorMode={value:ld.COLOR_MODE_INDEX[a.modelStyle.colorMode]??0},i.fragmentShader=i.fragmentShader.replace("#include <common>",`#include <common>
|
|
@@ -145,7 +145,7 @@ Error generating stack: `+v.message+`
|
|
|
145
145
|
float h = normalize(vWorldPosition + offset).y;
|
|
146
146
|
gl_FragColor = vec4(mix(bottomColor, topColor, max(pow(max(h, 0.0), exponent), 0.0)), 1.0);
|
|
147
147
|
}
|
|
148
|
-
`,side:tM});a.add(new Ie(i,o)),a.add(new Ax(16777215,1));const l=n.fromScene(a,.04).texture;t.environment=l,n.dispose(),i.dispose(),o.dispose()}createInputCallbacks(){return{onAgentClick:(e,t)=>this.inputEventHandlers.handleAgentClick(e,t),onAgentDoubleClick:e=>this.inputEventHandlers.handleAgentDoubleClick(e),onAgentHover:(e,t)=>this.inputEventHandlers.handleAgentHover(e,t),onGroundClick:()=>this.inputEventHandlers.handleGroundClick(),onMoveCommand:(e,t)=>this.inputEventHandlers.handleMoveCommand(e,t),onSelectionBox:(e,t)=>this.inputEventHandlers.handleSelectionBox(e,t),onDrawStart:e=>this.drawingManager.startDrawing(e),onDrawMove:e=>this.drawingManager.updateDrawing(e),onDrawEnd:e=>this.drawingManager.finishDrawing(e),onAreaRightClick:e=>this.inputEventHandlers.handleAreaRightClick(e),onAreaClick:e=>this.inputEventHandlers.handleAreaClick(e),onAreaDoubleClick:e=>this.inputEventHandlers.handleAreaDoubleClick(e),onResizeStart:(e,t)=>this.drawingManager.startResize(e,t),onResizeMove:e=>this.drawingManager.updateResize(e),onResizeEnd:()=>this.drawingManager.finishResize(),onGroundClickOutsideArea:()=>this.inputEventHandlers.handleGroundClickOutsideArea(),onFolderIconClick:(e,t)=>{var n;t?z.openFileExplorerForAreaFolder(e,t):z.openFileExplorerForArea(e),(n=this.onFolderIconClickCallback)==null||n.call(this,e)},onBuildingClick:(e,t)=>this.inputEventHandlers.handleBuildingClick(e,t),onBuildingDoubleClick:e=>this.inputEventHandlers.handleBuildingDoubleClick(e),onBuildingHover:(e,t)=>this.inputEventHandlers.handleBuildingHover(e,t),onBuildingDragStart:()=>{},onBuildingDragMove:(e,t)=>this.buildingManager.setBuildingPosition(e,t),onBuildingDragEnd:(e,t)=>z.updateBuildingPosition(e,t),onContextMenu:(e,t,n)=>this.callbackManager.triggerContextMenu(e,t,n),onActivity:()=>this.renderLoop.markActivity(),onToggleTerminal:()=>z.toggleTerminal()}}setupInputHandlerHelpers(){this.inputHandler.setDrawingModeChecker(()=>this.drawingManager.isInDrawingMode()),this.inputHandler.setResizeHandlers(()=>this.drawingManager.getResizeHandles(),()=>this.drawingManager.isCurrentlyResizing()),this.inputHandler.setAreaAtPositionGetter(e=>this.drawingManager.getAreaAtPosition(e)),this.inputHandler.setFolderIconMeshesGetter(()=>this.drawingManager.getFolderIconMeshes()),this.inputHandler.setBuildingAtPositionGetter(e=>{const t=this.buildingManager.getBuildingAtPosition(e);return t?{id:t.id}:null}),this.inputHandler.setBuildingPositionsGetter(()=>{const e=new Map;for(const[t,n]of this.buildingManager.getBuildingMeshData())e.set(t,n.group.position.clone());return e})}setupEventListeners(e){window.addEventListener("resize",this.onWindowResize),this.resizeObserver=new ResizeObserver(()=>this.onWindowResize()),e.parentElement&&this.resizeObserver.observe(e.parentElement),e.addEventListener("webglcontextlost",this.onContextLost),e.addEventListener("webglcontextrestored",this.onContextRestored)}updateInputHandlerReferences(){this.inputHandler.setReferences(this.battlefield.getGround(),this.agentManager.getAgentMeshes())}updateBattlefield(e,t){t-this.lastTimeUpdate>6e4&&(this.battlefield.updateTimeOfDay(),this.lastTimeUpdate=t),this.battlefield.updateGalacticAnimation(e),this.battlefield.updateCloudAnimation(e)}updateAnimations(e){const t=this.movementAnimator.update(this.agentManager.getAgentMeshes(),e);return this.effectsManager.update(),this.buildingManager.update(e),t}updateProceduralAnimations(e){if(this.proceduralBodiesDirty){this.proceduralBodiesCache.clear();for(const[t,n]of this.agentManager.getAgentMeshes())if(this.proceduralAnimator.has(t)&&n.animations.size===0){const a=n.group.getObjectByName("characterBody");a&&this.proceduralBodiesCache.set(t,a)}this.proceduralBodiesDirty=!1}this.proceduralBodiesCache.size>0&&this.proceduralAnimator.update(e,this.proceduralBodiesCache)}updateIndicatorScales(e,t,n){for(const[,a]of t){const i=e.position.distanceTo(a.group.position),o=Math.max(.5,Math.min(2.5,i/15))*n,l=a.group.userData.isBoss===!0,c=a.group.getObjectByName("statusBar"),d=a.group.getObjectByName("nameLabelSprite");if(c){const p=typeof c.userData.baseIndicatorScale=="number"?c.userData.baseIndicatorScale:l?2:1.6,m=typeof c.userData.aspectRatio=="number"?c.userData.aspectRatio:2560/4096;c.scale.set(p*o,p*m*o,1)}if(d){const p=typeof d.userData.baseIndicatorScale=="number"?d.userData.baseIndicatorScale:l?1.5:1.25,m=p>2,b=m?p:Math.max(l?1.35:1.1,Math.min(l?1.65:1.35,p)),x=typeof d.userData.aspectRatio=="number"?d.userData.aspectRatio:1024/4096,w=Math.max(.5,Math.min(2.5,i/15)),S=(m?Math.max(.8,Math.min(1.2,w)):w)*n;d.scale.set(b*S,b*x*S,1)}const f=a.group.getObjectByName("combinedUI");if(f){const p=typeof f.userData.baseIndicatorScale=="number"?f.userData.baseIndicatorScale:l?3:2.4,m=typeof f.userData.aspectRatio=="number"?f.userData.aspectRatio:1024/2048;f.scale.set(p*o,p*m*o,1)}if(!c&&!f){const p=a.group.getObjectByName("nameLabel");if(p){const x=.3*o;p.scale.set(x*(p.userData.aspectRatio||2),x,1)}const m=a.group.getObjectByName("manaBar");m&&m.scale.set(.9,.14,1);const b=a.group.getObjectByName("idleTimer");b&&b.scale.set(.9*o,.14*o,1)}}for(const[,a]of this.buildingManager.getBuildingMeshData()){const i=e.position.distanceTo(a.group.position),o=Math.max(.5,Math.min(2.5,i/15))*n,l=a.group.getObjectByName("buildingLabel");if(l){const c=.3*o;l.scale.set(c*(l.userData.aspectRatio||2),c,1)}}this.effectsManager.updateWithCamera(e)}async loadCharacterModels(){await this.agentManager.loadCharacterModels()}upgradeAgentModels(){this.agentManager.upgradeAgentModels(),this.updateInputHandlerReferences()}addAgent(e){this.agentManager.addAgent(e)}removeAgent(e){this.agentManager.removeAgent(e),this.updateInputHandlerReferences()}updateAgent(e,t=!1){this.agentManager.updateAgent(e,t)}syncAgents(e){this.agentManager.syncAgents(e)}setCustomAgentClasses(e){this.agentManager.setCustomAgentClasses(e)}refreshSelectionVisuals(){this.selectionManager.refreshSelectionVisuals()}createMoveOrderEffect(e){this.effectsManager.createMoveOrderEffect(e)}showToolBubble(e,t,n){this.effectsManager.setAgentMeshes(this.agentManager.getAgentMeshes()),this.effectsManager.createSpeechBubble(e,t,n)}showDelegationEffect(e,t){this.effectsManager.setAgentMeshes(this.agentManager.getAgentMeshes()),this.effectsManager.createDelegationEffect(e,t)}addSubagentEffect(e,t,n,a){this.effectsManager.setAgentMeshes(this.agentManager.getAgentMeshes()),this.effectsManager.addSubagentEffect(e,t,n,a)}completeSubagentEffect(e){this.effectsManager.completeSubagentEffect(e)}removeSubagentEffect(e){this.effectsManager.removeSubagentEffect(e)}focusAgent(e){this.cameraManager.focusAgent(e)}callSubordinates(e){var o;const n=z.getState().agents.get(e);if(!n||!(n.isBoss||n.class==="boss")||!((o=n.subordinateIds)!=null&&o.length))return;const a=new vt(n.position.x,n.position.y,n.position.z),i=this.inputHandler.calculateFormationPositions(a,n.subordinateIds.length);this.effectsManager.createMoveOrderEffect(a.clone()),n.subordinateIds.forEach((l,c)=>{const d=this.agentManager.getAgentMeshes().get(l);z.moveAgent(l,i[c]),d&&this.movementAnimator.startMovement(l,d,i[c])})}setDrawingTool(e){this.drawingManager.setTool(e),z.setActiveTool(e)}syncAreas(){this.drawingManager.syncFromStore()}highlightArea(e){this.drawingManager.highlightArea(e)}clearAreaSelection(){this.drawingManager.highlightArea(null)}addBuilding(e){this.buildingManager.addBuilding(e)}removeBuilding(e){this.buildingManager.removeBuilding(e)}updateBuilding(e){this.buildingManager.updateBuilding(e)}syncBuildings(){this.buildingManager.syncFromStore()}highlightBuilding(e){this.buildingManager.highlightBuilding(e)}setOnBuildingClick(e){this.callbackManager.setOnBuildingClick(e)}setOnBuildingDoubleClick(e){this.callbackManager.setOnBuildingDoubleClick(e)}setOnContextMenu(e){this.callbackManager.setOnContextMenu(e)}setOnAgentHover(e){this.callbackManager.setOnAgentHover(e)}setOnBuildingHover(e){this.callbackManager.setOnBuildingHover(e)}setOnGroundClick(e){this.callbackManager.setOnGroundClick(e)}setOnAreaDoubleClick(e){this.callbackManager.setOnAreaDoubleClick(e)}setOnFolderIconClick(e){this.onFolderIconClickCallback=e}setOnToast(e){this.agentManager.setOnToast(e)}setCharacterScale(e){this.agentManager.setCharacterScale(e),this.selectionManager.setCharacterScale(e)}setIndicatorScale(e){this.renderLoop.setIndicatorScale(e),this.effectsManager.setIndicatorScale(e)}setFpsLimit(e){this.renderLoop.setFpsLimit(e)}setPowerSaving(e){this.renderLoop.setPowerSaving(e)}setGridVisible(e){this.battlefield.setGridVisible(e)}setDebugTime(e){this.battlefield.setDebugTime(e)}setTimeMode(e){this.battlefield.setTimeMode(e)}setTerrainConfig(e){this.battlefield.setTerrainConfig(e),e.brightness!==void 0&&(this.drawingManager.setBrightness(e.brightness),this.buildingManager.setBrightness(e.brightness),this.agentManager.setBrightness(e.brightness))}setFloorStyle(e,t=!1){this.battlefield.setFloorStyle(e,t)}setIdleAnimation(e){this.agentManager.setIdleAnimation(e)}setWorkingAnimation(e){this.agentManager.setWorkingAnimation(e)}setAgentModelStyle(e){this.agentManager.setModelStyle(e)}getAgentModelStyle(){return this.agentManager.getModelStyle()}setGlobalSaturation(e){this.sceneCore.setSaturation(e)}getGlobalSaturation(){return this.sceneCore.getSaturation()}setPostProcessingEnabled(e){this.sceneCore.setPostProcessingEnabled(e)}reattach(e,t){var i,o;console.log("[SceneManager] Reattaching to new canvas (HMR)"),this.isReattaching=!0,this.renderLoop.stop(),(i=this.resizeObserver)==null||i.disconnect();const n=this.sceneCore.getCanvas();n.removeEventListener("webglcontextlost",this.onContextLost),n.removeEventListener("webglcontextrestored",this.onContextRestored),this.sceneCore.reattach(e),this.cameraManager.recreateControls(this.sceneCore.getRenderer()),this.sceneCore.updateCamera(this.cameraManager.getCamera()),e.addEventListener("webglcontextlost",this.onContextLost),e.addEventListener("webglcontextrestored",this.onContextRestored),this.inputHandler.reattach(e,t,this.cameraManager.getControls()),this.updateInputHandlerReferences(),e.parentElement&&((o=this.resizeObserver)==null||o.observe(e.parentElement)),this.onWindowResize();const a=(l=0)=>{this.isReattaching=!1,e.isConnected&&this.sceneCore.getRenderer()?(console.log("[SceneManager] Restarting animation loop after HMR reattach"),this.renderLoop.start()):l<10?(console.log(`[SceneManager] Canvas not connected, retrying... (attempt ${l+1})`),this.isReattaching=!0,requestAnimationFrame(()=>a(l+1))):console.warn("[SceneManager] Failed to restart animation loop - canvas never connected")};requestAnimationFrame(()=>a())}getMemoryDiagnostics(){var t;const e=this.sceneCore.getRenderer().info;return{threeJs:e!=null&&e.memory?{geometries:e.memory.geometries,textures:e.memory.textures,programs:((t=e.programs)==null?void 0:t.length)??0}:null,heap:nc.getUsage(),agentMeshCount:this.agentManager.getAgentMeshes().size,bossLineCount:0}}getRenderStats(){var t,n;const e=(n=(t=this.sceneCore.getRenderer())==null?void 0:t.info)==null?void 0:n.render;return e?{calls:e.calls,triangles:e.triangles,points:e.points,lines:e.lines}:null}get renderer(){return this.sceneCore.getRenderer()}logMemoryDiagnostics(){const e=this.getMemoryDiagnostics(),t=this.characterLoader.getCacheStats();console.group("%c[SceneManager Memory]","color: #ff6600; font-weight: bold"),e.threeJs&&console.log(`Three.js: ${e.threeJs.geometries} geometries, ${e.threeJs.textures} textures, ${e.threeJs.programs} programs`),e.heap&&console.log(`Heap: ${e.heap.usedMB}MB / ${e.heap.totalMB}MB (limit: ${e.heap.limitMB}MB)`),console.log(`Agent meshes: ${e.agentMeshCount}`),console.log(`CharacterLoader cache: ${t.builtInModels} built-in, ${t.customModels} custom`),t.modelNames.length>0&&console.log(` Built-in models: ${t.modelNames.join(", ")}`),t.customModelIds.length>0&&console.log(` Custom models: ${t.customModelIds.join(", ")}`),console.groupEnd()}dispose(){var n;console.log("%c[SceneManager] dispose() called - starting cleanup","color: #ff0000; font-weight: bold");const e=this.characterLoader.getCacheStats();console.log(`[SceneManager] Pre-dispose: ${e.builtInModels} built-in models, ${e.customModels} custom models`),this.renderLoop.stop(),window.removeEventListener("resize",this.onWindowResize);const t=this.sceneCore.getCanvas();t.removeEventListener("webglcontextlost",this.onContextLost),t.removeEventListener("webglcontextrestored",this.onContextRestored),(n=this.resizeObserver)==null||n.disconnect(),this.resizeObserver=null,this.inputHandler.dispose(),this.drawingManager.dispose(),this.buildingManager.dispose(),this.effectsManager.dispose(),this.agentManager.dispose(),this.selectionManager.dispose(),this.battlefield.dispose(),this.characterLoader.dispose(),this.cameraManager.dispose(),this.sceneCore.dispose(),console.log("%c[SceneManager] dispose() complete - all resources freed","color: #00ff00; font-weight: bold")}}const Wp="tide_webgl_active";typeof window<"u"&&(window.__tidePersistedScene===void 0&&(window.__tidePersistedScene=null),window.__tidePersistedCanvas===void 0&&(window.__tidePersistedCanvas=null),window.__tideWsConnected===void 0&&(window.__tideWsConnected=!1),window.__tideIsPageUnloading===void 0&&(window.__tideIsPageUnloading=!1));function Af(){return typeof window<"u"?window.__tidePersistedScene??null:null}function qM(){return typeof window<"u"?window.__tidePersistedCanvas??null:null}function sz(){return typeof window<"u"?window.__tideWsConnected??!1:!1}function md(s){typeof window<"u"&&(window.__tidePersistedScene=s)}function td(s){typeof window<"u"&&(window.__tidePersistedCanvas=s)}function YM(s){typeof window<"u"&&(window.__tideWsConnected=s)}function az(s){typeof window<"u"&&(window.__tideIsPageUnloading=s)}function iz(){sessionStorage.setItem(Wp,"true")}function ep(s){az(!0),sessionStorage.removeItem(Wp),_M(),QL(),window.__tideScene&&(window.__tideScene=null);const e=Af();e?(console.log("[App] Calling persistedScene.dispose()"),e.dispose(),md(null)):console.log("[App] No persistedScene to dispose"),td(null),YM(!1);const t=document.getElementById("battlefield");t&&t.remove();const n=document.getElementById("app");n&&(n.innerHTML="")}function rz(){var a,i;if(window.__tideAppInitialized)return;if(window.__tideAppInitialized=!0,sessionStorage.getItem(Wp)==="true"&&console.log("[App] Detected unclean shutdown from previous session - forcing cleanup"),window.__tideScene){console.log("[App] Cleaning up stale __tideScene reference");try{(i=(a=window.__tideScene).dispose)==null||i.call(a)}catch{}window.__tideScene=null}const e=Af();if(e){console.log("[App] Cleaning up stale persistedScene");try{e.dispose()}catch{}md(null)}const t=document.getElementById("battlefield"),n=qM();t&&t!==n&&t.remove(),sessionStorage.removeItem(Wp)}function oz(){typeof window>"u"||(rz(),window.addEventListener("pageshow",s=>{s.persisted&&(console.log("[App] Page restored from bfcache - cleaning up"),ep(),window.location.reload())}),window.onunload=()=>ep(),window.onbeforeunload=s=>{ep()},window.addEventListener("pagehide",s=>{ep(`pagehide (persisted=${s.persisted})`)}))}oz();const aC={showTrees:!0,showBushes:!0,showHouse:!0,showLamps:!0,showGrass:!0,showClouds:!0,fogDensity:1,floorStyle:"metal",brightness:1,skyColor:null,battlefieldSize:50},iC={saturation:2,roughness:.5,metalness:-1,emissiveBoost:0,envMapIntensity:1,wireframe:!1,colorMode:"normal"},rC={idleAnimation:"sit",workingAnimation:"sprint"},lz=0;function VM(){const s={characterScale:2,indicatorScale:.7,gridVisible:!1,timeMode:"day",terrain:aC,modelStyle:iC,animations:rC,fpsLimit:lz},e=Ba(mt.CONFIG,null);return e?{characterScale:e.characterScale??s.characterScale,indicatorScale:e.indicatorScale??s.indicatorScale,gridVisible:e.gridVisible??s.gridVisible,timeMode:e.timeMode??s.timeMode,terrain:{...aC,...e.terrain},modelStyle:{...iC,...e.modelStyle},animations:{...rC,...e.animations},fpsLimit:e.fpsLimit??s.fpsLimit}:s}function cz(s){Ii(mt.CONFIG,s)}function uz(){return typeof window>"u"?!0:window.matchMedia("(max-width: 768px)").matches}typeof window<"u"&&!window.__tideHmrRefreshListeners&&(window.__tideHmrRefreshListeners=new Set);function KM(){console.log("[Tide HMR] Manual scene refresh triggered");const s=Af();if(s){try{s.dispose()}catch(t){console.warn("[Tide HMR] Error disposing scene:",t)}md(null)}td(null),window.__tideScene&&(window.__tideScene=null);const e=document.getElementById("battlefield");if(e){const t=e.getContext("webgl2")||e.getContext("webgl");if(t){const n=t.getExtension("WEBGL_lose_context");n&&n.loseContext()}}window.__tideHmrPendingSceneChanges=!1,window.location.reload()}typeof window<"u"&&(window.__tideHmrSceneRefresh=KM);function dz({canvasRef:s,selectionBoxRef:e,viewMode:t,sceneMountKey:n=0,showToast:a,showAgentNotification:i,toolboxModal:o,contextMenu:l,setHoveredAgentPopup:c,setBuildingPopup:d,getBuildingPopup:f,openBuildingModal:p,openPM2LogsModal:m,openBossLogsModal:b,openDatabasePanel:x,onSceneLoadingChange:w}){const k=y.useRef(null),S=y.useRef(null),j=y.useRef(null),C=y.useRef(null),N=y.useRef(null);return y.useEffect(()=>{if(t!=="3d"){w==null||w(!1);return}if(!s.current||!e.current)return;let _=!1;w==null||w(!0);const D=Af(),M=qM()===s.current;function P(){var E,R,I,O,B,q,H,G;(E=k.current)==null||E.setOnToast(a),(R=k.current)==null||R.setOnBuildingClick((K,X)=>{z.selectBuilding(K);const $=z.getState().buildings.get(K);($==null?void 0:$.type)==="folder"&&$.folderPath?z.openFileExplorer($.folderPath):($==null?void 0:$.type)==="server"||($==null?void 0:$.type)==="boss"||($==null?void 0:$.type)==="database"?(S.current&&clearTimeout(S.current),S.current=setTimeout(()=>{d({buildingId:K,screenPos:X,fromClick:!0}),S.current=null},150)):p(K)}),(I=k.current)==null||I.setOnContextMenu((K,X,$)=>{l.open(K,X,$)}),(O=k.current)==null||O.setOnAgentHover(()=>{}),(B=k.current)==null||B.setOnBuildingHover((K,X)=>{const $=f();if(K&&X){const re=z.getState().buildings.get(K);((re==null?void 0:re.type)==="server"||(re==null?void 0:re.type)==="boss"||(re==null?void 0:re.type)==="database")&&!($!=null&&$.fromClick)&&d({buildingId:K,screenPos:X,fromClick:!1})}else $!=null&&$.fromClick||d(null)}),(q=k.current)==null||q.setOnGroundClick(()=>{d(null)}),(H=k.current)==null||H.setOnAreaDoubleClick(K=>{z.selectArea(K),o.open()}),(G=k.current)==null||G.setOnBuildingDoubleClick(K=>{var $;S.current&&(clearTimeout(S.current),S.current=null),d(null);const X=z.getState().buildings.get(K);(X==null?void 0:X.type)==="server"&&(($=X.pm2)!=null&&$.enabled)?m==null||m(K):(X==null?void 0:X.type)==="boss"?b==null||b(K):(X==null?void 0:X.type)==="database"?x==null||x(K):(X==null?void 0:X.type)==="folder"&&X.folderPath?z.openFileExplorer(X.folderPath):p(K)})}if(D)try{k.current=D,M?console.log("[Tide] Reusing existing scene (StrictMode remount)"):(console.log("[Tide] Reattaching persisted scene to new canvas"),D.reattach(s.current,e.current),td(s.current));const E=z.getState();D.syncAreas(),D.syncBuildings(),E.agents.size>0&&(console.log("[Tide] Re-syncing agents from store after remount:",E.agents.size),D.syncAgents(Array.from(E.agents.values()))),P()}catch(E){console.error("[Tide] Failed to reattach persisted 3D scene:",E),w==null||w(!1)}finally{C.current=requestAnimationFrame(()=>{N.current=requestAnimationFrame(()=>{w==null||w(!1),N.current=null}),C.current=null})}else{const E=s.current,R=e.current,I=()=>{if(_){console.log("[Tide] Effect cleaned up before scene init, skipping"),w==null||w(!1);return}if(!E.isConnected||!R.isConnected){console.warn("[Tide] Canvas disconnected before initialization"),w==null||w(!1);return}(!E.clientWidth||!E.clientHeight)&&(console.log("[Tide] Canvas has no CSS dimensions, using window fallback"),E.style.width="100%",E.style.height="100%",E.offsetHeight),(!E.clientWidth||!E.clientHeight)&&(E.width=window.innerWidth,E.height=window.innerHeight),iz();try{const O=new nz(E,R);k.current=O,md(O),td(E);const B=VM();O.setCharacterScale(B.characterScale),O.setIndicatorScale(B.indicatorScale),O.setGridVisible(B.gridVisible),O.setTimeMode(B.timeMode),O.setTerrainConfig(B.terrain),O.setFloorStyle(B.terrain.floorStyle,!0),O.setAgentModelStyle(B.modelStyle),O.setIdleAnimation(B.animations.idleAnimation),O.setWorkingAnimation(B.animations.workingAnimation),O.setFpsLimit(B.fpsLimit),O.syncAreas(),O.syncBuildings(),O.loadCharacterModels().then(()=>{console.log("[Tide] Character models ready");const q=z.getState();q.customAgentClasses.size>0&&(console.log("[Tide] Applying custom classes from store:",q.customAgentClasses.size),O.setCustomAgentClasses(q.customAgentClasses)),q.agents.size>0&&(console.log("[Tide] Syncing agents from store:",q.agents.size),O.syncAgents(Array.from(q.agents.values()))),O.upgradeAgentModels()}).catch(q=>{console.warn("[Tide] Some models failed to load, using fallback:",q)}).finally(()=>{w==null||w(!1)}),P()}catch(O){console.error("[Tide] Failed to initialize 3D scene:",O),w==null||w(!1)}};j.current=requestAnimationFrame(I)}return AM({onAgentCreated:E=>{var R,I,O;(R=k.current)==null||R.addAgent(E),(I=k.current)==null||I.refreshSelectionVisuals(),(O=window.__spawnModalSuccess)==null||O.call(window)},onAgentUpdated:(E,R)=>{var I;(I=k.current)==null||I.updateAgent(E,R)},onAgentDeleted:E=>{var R;(R=k.current)==null||R.removeAgent(E)},onAgentsSync:E=>{var R;(R=k.current)==null||R.syncAgents(E)},onAreasSync:()=>{var R,I;(R=k.current)==null||R.syncAreas();const E=Array.from(z.getState().agents.values());(I=k.current)==null||I.syncAgents(E)},onSpawnError:()=>{var E;(E=window.__spawnModalError)==null||E.call(window)},onSpawnSuccess:()=>{var E;(E=window.__spawnModalSuccess)==null||E.call(window)},onDirectoryNotFound:E=>{var R;(R=window.__spawnModalDirNotFound)==null||R.call(window,E)},onToolUse:(E,R,I)=>{var O;(O=k.current)==null||O.showToolBubble(E,R,I)},onDelegation:(E,R)=>{var I;(I=k.current)==null||I.showDelegationEffect(E,R)},onCustomClassesSync:E=>{var R,I;(R=k.current)==null||R.setCustomAgentClasses(E),(I=k.current)==null||I.upgradeAgentModels()},onBuildingUpdated:E=>{var R;(R=k.current)==null||R.updateBuilding(E)},onSubagentStarted:E=>{var R;(R=k.current)==null||R.addSubagentEffect(E.id,E.parentAgentId,E.name,E.subagentType)},onSubagentCompleted:E=>{var O;const R=z.getSubagent(E)||z.getSubagentByToolUseId(E),I=(R==null?void 0:R.id)||E;(O=k.current)==null||O.completeSubagentEffect(I),setTimeout(()=>{var B;(B=k.current)==null||B.removeSubagentEffect(I)},3e4)}}),()=>{_=!0,j.current!==null&&(cancelAnimationFrame(j.current),j.current=null),C.current!==null&&(cancelAnimationFrame(C.current),C.current=null),N.current!==null&&(cancelAnimationFrame(N.current),N.current=null),z.getState().viewMode!=="3d"&&uz()&&k.current&&(console.log("[Tide] 3D canvas unmounted - disposing scene to free memory"),JL(),k.current.dispose(),k.current=null,md(null),td(null))}},[t,n]),k}function hz({showToast:s,showAgentNotification:e}){y.useEffect(()=>{AM({onToast:s,onReconnect:()=>{z.triggerReconnect()},onAgentNotification:a=>{e(a)}}),sz()||(fd(),YM(!0)),GL();let t;qL(a=>{a.type==="agent_notification"&&typeof a.agentId=="string"&&SM(a.agentId)}).then(a=>{t=a});const n=()=>{console.log("[Tide] App resumed from background, reconnecting..."),setTimeout(()=>fd(),100)};return window.addEventListener("tideAppResume",n),()=>{window.removeEventListener("tideAppResume",n),t==null||t()}},[s,e])}function pz(s){y.useEffect(()=>{let e="",t="",n=new Map;const a=i=>{var c;let o=!1;const l=new Map;for(const[d,f]of i){const m=`${f.position.x.toFixed(2)},${f.position.z.toFixed(2)},${f.status},${f.class},${f.isBoss},${((c=f.subordinateIds)==null?void 0:c.length)??0}`.split("").reduce((b,x)=>(b<<5)-b+x.charCodeAt(0),0);l.set(d,m),n.get(d)!==m&&(o=!0)}return l.size!==n.size&&(o=!0),{newVersion:l,changed:o}};return z.subscribe(()=>{var m;const i=z.getState(),o=Array.from(i.selectedAgentIds).sort().join(","),l=Array.from(i.selectedBuildingIds).sort().join(","),c=o!==e,d=l!==t,{newVersion:f,changed:p}=a(i.agents);(c||d||p)&&(e=o,t=l,n=f,(m=s.current)==null||m.refreshSelectionVisuals())})},[s])}function fz(s){y.useEffect(()=>{var n;(n=s.current)==null||n.syncAreas();let e=0,t=0;return z.subscribe(()=>{var l,c;const i=z.getState().areas;if(i.size!==e){e=i.size,t=Date.now(),(l=s.current)==null||l.syncAreas();return}let o=0;for(const[d,f]of i){let p=d.charCodeAt(0);p+=(f.width??0)+(f.height??0)+(f.radius??0),p+=Math.floor(f.center.x*100)+Math.floor(f.center.z*100),p+=(f.zIndex??0)*1e3;for(let m=0;m<f.name.length;m++)p+=f.name.charCodeAt(m);for(let m=0;m<f.color.length;m++)p+=f.color.charCodeAt(m);if(f.directoryGitCounts)for(const m of f.directoryGitCounts)p+=(m+1)*7;if(f.logo){p+=Math.floor((f.logo.opacity??.8)*1e3),p+=Math.floor(f.logo.width*100)+Math.floor(f.logo.height*100);for(let m=0;m<f.logo.position.length;m++)p+=f.logo.position.charCodeAt(m);if(f.logo.filename)for(let m=0;m<f.logo.filename.length;m++)p+=f.logo.filename.charCodeAt(m)}o^=p|0}o!==t&&(t=o,(c=s.current)==null||c.syncAreas())})},[s])}function mz(s){y.useEffect(()=>{var n;(n=s.current)==null||n.syncBuildings();let e=0,t=0;return z.subscribe(()=>{var l,c;const i=z.getState().buildings;if(i.size!==e){e=i.size,t=Date.now(),(l=s.current)==null||l.syncBuildings();return}let o=0;for(const[d,f]of i){o^=f.position.x*1e3+f.position.z|0,o^=(f.scale||1)*1e4|0;const p=`${f.style||""}${f.name}${f.status}${f.gitChangesCount||0}`;for(let m=0;m<p.length;m++)o=(o<<5)-o+p.charCodeAt(m)|0}o!==t&&(t=o,(c=s.current)==null||c.syncBuildings())})},[s])}function gz(s,e){y.useEffect(()=>{var t;(t=s.current)==null||t.highlightArea(e)},[s,e])}function bz(s,e){y.useEffect(()=>{var t;(t=s.current)==null||t.setPowerSaving(e)},[s,e])}function yz({sceneRef:s,spawnModal:e,commanderModal:t,explorerModal:n,spotlightModal:a,deleteConfirmModal:i,onRequestBuildingDelete:o,onOpenDatabasePanel:l,onCloseDatabasePanel:c,databasePanelOpen:d}){y.useEffect(()=>{const f=p=>{var E,R,I,O;const m=z.getShortcuts(),b=p.target,x=b.tagName==="INPUT"||b.tagName==="TEXTAREA",w=m.find(B=>B.id==="deselect-all");if(kt(p,w)){if(Ay()){p.preventDefault();return}const B=z.getState();if(B.activeTool==="rectangle"||B.activeTool==="circle"){(E=s.current)==null||E.setDrawingTool(null),typeof window<"u"&&window.__tideScene2D_setDrawingTool&&window.__tideScene2D_setDrawingTool(null);return}e.isOpen?e.close():B.terminalOpen?(z.setTerminalOpen(!1),document.activeElement instanceof HTMLElement&&document.activeElement.blur()):(z.deselectAll(),(R=s.current)==null||R.refreshSelectionVisuals())}for(let B=1;B<=9;B++){const q=m.find(H=>H.id===`select-agent-${B}`);if(kt(p,q)){p.preventDefault();const H=z.getState(),G=B-1,K=Array.from(H.agents.keys());G<K.length&&(z.selectAgent(K[G]),(I=s.current)==null||I.refreshSelectionVisuals());return}}const k=m.find(B=>B.id==="spawn-agent");if(kt(p,k)){p.preventDefault(),e.open();return}const S=m.find(B=>B.id==="toggle-commander-tab");if(kt(p,S)&&!x){p.preventDefault(),t.toggle();return}const j=m.find(B=>B.id==="toggle-commander");if(kt(p,j)){p.preventDefault(),t.toggle();return}const C=m.find(B=>B.id==="toggle-file-explorer");if(kt(p,C)){p.preventDefault();const B=z.getState();if(n.isOpen||B.explorerFolderPath!==null||B.explorerAreaId!==null)n.close(),z.closeFileExplorer();else{const H=z.getLastExplorerState();if((H==null?void 0:H.type)==="folder")z.openFileExplorer(H.path);else if((H==null?void 0:H.type)==="area")if(B.areas.has(H.areaId))n.open(H.areaId);else{const G=Array.from(B.areas.values()).filter(K=>K.directories&&K.directories.length>0);G.length>0&&n.open(G[0].id)}else{const G=Array.from(B.areas.values()).filter(K=>K.directories&&K.directories.length>0);G.length>0&&n.open(G[0].id)}}return}if(p.altKey&&!p.ctrlKey&&!p.shiftKey&&!p.metaKey&&p.code==="KeyD"){if(p.preventDefault(),p.stopPropagation(),d){c();return}const B=localStorage.getItem("tide-commander-last-database-building"),q=z.getState();if(B){const H=q.buildings.get(B);if((H==null?void 0:H.type)==="database"){l(B);return}}for(const[H,G]of q.buildings)if(G.type==="database"){l(H);return}return}const N=m.find(B=>B.id==="toggle-spotlight");if(kt(p,N)||p.altKey&&!p.ctrlKey&&!p.metaKey&&p.code==="KeyP"){console.log("[useKeyboardShortcuts] Spotlight shortcut matched!",{spotlightShortcut:N,altKey:p.altKey,code:p.code}),p.preventDefault(),a.toggle();return}const _=m.find(B=>B.id==="toggle-2d-view");if(kt(p,_)){p.preventDefault();const B=z.getState().viewMode,q=B==="3d"?"2d":B==="2d"?"dashboard":"3d";z.setViewMode(q);return}const D=m.find(B=>B.id==="next-working-agent"),L=m.find(B=>B.id==="prev-working-agent");if((kt(p,D)||kt(p,L))&&!x){const B=z.getState();if(B.terminalOpen)return;const q=Array.from(B.agents.values());let H=q.filter($=>B.agentsWithUnseenOutput.has($.id));if(H.length===0&&(H=q.filter($=>$.status==="working")),H.length===0)return;p.preventDefault();const G=B.selectedAgentIds.size===1?Array.from(B.selectedAgentIds)[0]:null,K=G?H.findIndex($=>$.id===G):-1;let X;kt(p,D)?X=K===-1?0:(K+1)%H.length:X=K===-1?H.length-1:(K-1+H.length)%H.length,z.selectAgent(H[X].id),(O=s.current)==null||O.refreshSelectionVisuals();return}const M=m.find(B=>B.id==="delete-selected"),P=m.find(B=>B.id==="delete-selected-backspace");if((kt(p,M)||kt(p,P))&&!x){const B=z.getState();if(B.selectedAgentIds.size>0){p.preventDefault(),i.open();return}if(B.selectedBuildingIds.size>0){p.preventDefault(),o();return}return}};return document.addEventListener("keydown",f,!0),()=>document.removeEventListener("keydown",f,!0)},[s,e,t,n,a,i,o,l,c,d])}function xz(){const[s,e]=y.useState(!1);return window.__tideSetBackNavModal=e,y.useEffect(()=>{if(!(window.innerWidth<=768))return;if(window.__tideBackNavSetup){window.location.hash.includes("app")||(window.location.hash="#app");return}window.__tideBackNavSetup=!0,window.location.hash.includes("app")||(window.location.hash="#app");let a=0;const i=()=>{var l;window.innerWidth>768||Date.now()-a<200||window.location.hash.includes("app")||(window.location.hash="#app",Ay()||(l=window.__tideSetBackNavModal)==null||l.call(window,!0))},o=()=>{var l;window.innerWidth>768||(window.location.hash.includes("app")||(window.location.hash="#app"),window.location.hash==="#app"&&setTimeout(()=>{window.location.hash==="#app"&&!window.location.hash.includes("app2")&&(window.history.pushState(null,"","#app2"),window.history.pushState(null,"","#app"))},50),Ay()?a=Date.now():(l=window.__tideSetBackNavModal)==null||l.call(window,!0))};window.history.pushState(null,"","#app1"),window.history.pushState(null,"","#app2"),window.history.pushState(null,"","#app"),window.addEventListener("hashchange",i),window.addEventListener("popstate",o)},[]),{showBackNavModal:s,setShowBackNavModal:e,handleLeave:()=>{e(!1);const n=window.__tideHistoryDepth??2;window.history.go(-(n+1))}}}const kb="agent-order-change";function vz(s){const e=y.useMemo(()=>new Set(s.map(c=>c.id)),[s]),[t,n]=y.useState(()=>Ba(mt.AGENT_ORDER,[]));y.useEffect(()=>{const c=d=>{n(d.detail)};return window.addEventListener(kb,c),()=>{window.removeEventListener(kb,c)}},[]);const a=y.useMemo(()=>{const c=t.filter(m=>e.has(m)),d=s.filter(m=>!c.includes(m.id)).map(m=>m.id),f=[...c,...d],p=new Map(s.map(m=>[m.id,m]));return f.map(m=>p.get(m)).filter(m=>m!==void 0)},[s,t,e]),i=y.useCallback(c=>{n(c),Ii(mt.AGENT_ORDER,c),window.dispatchEvent(new CustomEvent(kb,{detail:c}))},[]),o=y.useCallback((c,d)=>{const f=a.map(m=>m.id),[p]=f.splice(c,1);f.splice(d,0,p),i(f)},[a,i]),l=y.useCallback(()=>{n([]),Ii(mt.AGENT_ORDER,[])},[]);return y.useEffect(()=>{if(e.size===0)return;const c=t.filter(d=>e.has(d));c.length!==t.length&&i(c)},[e,t,i]),{orderedAgents:a,moveAgent:o,resetOrder:l}}const Ux="deivid11/tide-commander",wz=`https://api.github.com/repos/${Ux}/releases/latest`,kz=`https://api.github.com/repos/${Ux}/releases?per_page=3`,Sz=3600*1e3,oC="app_update_dismissed_version",lC="1.2.1";function jz(){var f;const[s,e]=y.useState({isChecking:!1,updateAvailable:!1,updateInfo:null,recentReleases:[],error:null,currentVersion:lC}),t=((f=La==null?void 0:La.getPlatform)==null?void 0:f.call(La))==="android"||!1,n=p=>p.replace(/^v/,"").split(".").map(b=>parseInt(b,10)||0),a=(p,m)=>{const b=n(p),x=n(m),w=Math.max(b.length,x.length);for(let k=0;k<w;k++){const S=b[k]||0,j=x[k]||0;if(S>j)return 1;if(S<j)return-1}return 0},i=async p=>{var b;if(La&&wj&&((b=La.isNativePlatform)==null?void 0:b.call(La))===!0){const x=await wj.get({url:p,headers:{Accept:"application/vnd.github.v3+json"}});return{data:x.data,status:x.status}}else{const x=await fetch(p,{headers:{Accept:"application/vnd.github.v3+json"}});return x.ok?{data:await x.json(),status:x.status}:{data:null,status:x.status}}},o=y.useCallback(async(p=!1)=>{e(m=>({...m,isChecking:!0,error:null}));try{const[m,b]=await Promise.all([i(wz),i(kz)]);if(m.status!==200)throw new Error(`GitHub API error: ${m.status}`);const x=m.data,w=x.tag_name;let k=[];b.status===200&&b.data&&(k=b.data.map(_=>({version:_.tag_name,name:_.name,publishedAt:_.published_at,releaseUrl:_.html_url})));const S=localStorage.getItem(oC);if(!p&&S===w)return e(_=>({..._,isChecking:!1,updateAvailable:!1,recentReleases:k})),null;if(!(a(w,lC)>0))return e(_=>({..._,isChecking:!1,updateAvailable:!1,recentReleases:k})),null;const C=x.assets.find(_=>_.name.endsWith(".apk")&&_.content_type==="application/vnd.android.package-archive"),N={version:w,name:x.name,changelog:x.body,releaseUrl:x.html_url,apkUrl:(C==null?void 0:C.browser_download_url)||null,apkSize:(C==null?void 0:C.size)||null,publishedAt:x.published_at};return e(_=>({..._,isChecking:!1,updateAvailable:!0,updateInfo:N,recentReleases:k})),N}catch(m){const b=m instanceof Error?m.message:"Failed to check for updates";return e(x=>({...x,isChecking:!1,error:b})),null}},[]),l=y.useCallback(async()=>{var p,m,b;if(!((p=s.updateInfo)!=null&&p.apkUrl)){(m=s.updateInfo)!=null&&m.releaseUrl&&window.open(s.updateInfo.releaseUrl,"_blank");return}if(!t){(b=s.updateInfo)!=null&&b.releaseUrl&&window.open(s.updateInfo.releaseUrl,"_blank");return}try{window.open(s.updateInfo.apkUrl,"_system"),e(x=>({...x,error:null}))}catch(x){const w=x instanceof Error?x.message:"Failed to open download";e(k=>({...k,error:w}))}},[s.updateInfo,t]),c=y.useCallback(()=>{s.updateInfo&&localStorage.setItem(oC,s.updateInfo.version),e(p=>({...p,updateAvailable:!1,updateInfo:null}))},[s.updateInfo]),d=y.useCallback(()=>{var p;(p=s.updateInfo)!=null&&p.releaseUrl?window.open(s.updateInfo.releaseUrl,"_blank"):window.open(`https://github.com/${Ux}/releases`,"_blank")},[s.updateInfo]);return y.useEffect(()=>{if(!t)return;const p=setTimeout(()=>{o()},5e3),m=setInterval(()=>{o()},Sz);return()=>{clearTimeout(p),clearInterval(m)}},[t,o]),{...s,isAndroid:t,checkForUpdate:o,downloadAndInstall:l,dismissUpdate:c,openReleasePage:d}}function $s(s){const e=y.useRef(null),t=y.useCallback(a=>{e.current=a.target,a.target===a.currentTarget&&a.stopPropagation()},[]),n=y.useCallback(a=>{a.target===a.currentTarget&&e.current===a.currentTarget&&(a.stopPropagation(),s()),e.current=null},[s]);return{handleMouseDown:t,handleClick:n}}const Cz=3e4;function Nz(){const s=y.useRef(null);y.useEffect(()=>{const e=async()=>{var o,l;const t=z.getState(),n=new Map,a=new Map;for(const[c,d]of t.buildings){const f=d.folderPath||d.cwd;f&&(a.has(f)||a.set(f,[]),a.get(f).push(c))}for(const[c,d]of a)try{const f=await yt(ct(`/api/files/git-status?path=${encodeURIComponent(c)}`));if(!f.ok)continue;const m=((o=(await f.json()).files)==null?void 0:o.length)||0;n.set(c,m);for(const b of d){const x=z.getState().buildings.get(b);x&&x.gitChangesCount!==m&&z.updateBuildingLocal(b,{gitChangesCount:m})}}catch{}const i=new Map;for(const[c,d]of t.areas)d.archived||!d.directories||d.directories.forEach((f,p)=>{f&&(i.has(f)||i.set(f,[]),i.get(f).push({areaId:c,dirIndex:p}))});if(i.size!==0)for(const[c,d]of i)try{let f;if(n.has(c))f=n.get(c);else{const m=await yt(ct(`/api/files/git-status?path=${encodeURIComponent(c)}`));if(!m.ok)continue;f=((l=(await m.json()).files)==null?void 0:l.length)||0,n.set(c,f)}const p=new Map;for(const m of d)p.has(m.areaId)||p.set(m.areaId,[]),p.get(m.areaId).push({dirIndex:m.dirIndex,count:f});for(const[m,b]of p){const x=z.getState().areas.get(m);if(!x)continue;const w=x.directoryGitCounts?[...x.directoryGitCounts]:new Array(x.directories.length).fill(0);let k=!1;for(const{dirIndex:S,count:j}of b)w[S]!==j&&(w[S]=j,k=!0);k&&z.updateAreaLocal(m,{directoryGitCounts:w})}}catch{}};return e(),s.current=setInterval(e,Cz),()=>{s.current&&(clearInterval(s.current),s.current=null)}},[])}const cC={historyLimit:500,hideCost:!0,showFPS:!1,powerSaving:!1,customAgentNames:[],experimental2DView:!1,experimentalVoiceAssistant:!1,experimentalTTS:!1,experimentalEchoPrompt:!1,externalEditorCommand:""},qp=90,Sb=["simple","chat","advanced"],uC=55,dC=20,hC=95,Az=200,Mz=12e4,Tz=5,ni=new Map;function Ez(s){const e=ni.get(s);e&&(ni.delete(s),ni.set(s,e))}function _z(){for(;ni.size>Tz;){const s=ni.keys().next().value;if(s!==void 0)ni.delete(s);else break}}function XM(s){ni.delete(s)}function Dz(s){return s.trim().replace(/\r\n/g,`
|
|
148
|
+
`,side:tM});a.add(new Ie(i,o)),a.add(new Ax(16777215,1));const l=n.fromScene(a,.04).texture;t.environment=l,n.dispose(),i.dispose(),o.dispose()}createInputCallbacks(){return{onAgentClick:(e,t)=>this.inputEventHandlers.handleAgentClick(e,t),onAgentDoubleClick:e=>this.inputEventHandlers.handleAgentDoubleClick(e),onAgentHover:(e,t)=>this.inputEventHandlers.handleAgentHover(e,t),onGroundClick:()=>this.inputEventHandlers.handleGroundClick(),onMoveCommand:(e,t)=>this.inputEventHandlers.handleMoveCommand(e,t),onSelectionBox:(e,t)=>this.inputEventHandlers.handleSelectionBox(e,t),onDrawStart:e=>this.drawingManager.startDrawing(e),onDrawMove:e=>this.drawingManager.updateDrawing(e),onDrawEnd:e=>this.drawingManager.finishDrawing(e),onAreaRightClick:e=>this.inputEventHandlers.handleAreaRightClick(e),onAreaClick:e=>this.inputEventHandlers.handleAreaClick(e),onAreaDoubleClick:e=>this.inputEventHandlers.handleAreaDoubleClick(e),onResizeStart:(e,t)=>this.drawingManager.startResize(e,t),onResizeMove:e=>this.drawingManager.updateResize(e),onResizeEnd:()=>this.drawingManager.finishResize(),onGroundClickOutsideArea:()=>this.inputEventHandlers.handleGroundClickOutsideArea(),onFolderIconClick:(e,t)=>{var n;t?z.openFileExplorerForAreaFolder(e,t):z.openFileExplorerForArea(e),(n=this.onFolderIconClickCallback)==null||n.call(this,e)},onBuildingClick:(e,t)=>this.inputEventHandlers.handleBuildingClick(e,t),onBuildingDoubleClick:e=>this.inputEventHandlers.handleBuildingDoubleClick(e),onBuildingHover:(e,t)=>this.inputEventHandlers.handleBuildingHover(e,t),onBuildingDragStart:()=>{},onBuildingDragMove:(e,t)=>this.buildingManager.setBuildingPosition(e,t),onBuildingDragEnd:(e,t)=>z.updateBuildingPosition(e,t),onContextMenu:(e,t,n)=>this.callbackManager.triggerContextMenu(e,t,n),onActivity:()=>this.renderLoop.markActivity(),onToggleTerminal:()=>z.toggleTerminal()}}setupInputHandlerHelpers(){this.inputHandler.setDrawingModeChecker(()=>this.drawingManager.isInDrawingMode()),this.inputHandler.setResizeHandlers(()=>this.drawingManager.getResizeHandles(),()=>this.drawingManager.isCurrentlyResizing()),this.inputHandler.setAreaAtPositionGetter(e=>this.drawingManager.getAreaAtPosition(e)),this.inputHandler.setFolderIconMeshesGetter(()=>this.drawingManager.getFolderIconMeshes()),this.inputHandler.setBuildingAtPositionGetter(e=>{const t=this.buildingManager.getBuildingAtPosition(e);return t?{id:t.id}:null}),this.inputHandler.setBuildingPositionsGetter(()=>{const e=new Map;for(const[t,n]of this.buildingManager.getBuildingMeshData())e.set(t,n.group.position.clone());return e})}setupEventListeners(e){window.addEventListener("resize",this.onWindowResize),this.resizeObserver=new ResizeObserver(()=>this.onWindowResize()),e.parentElement&&this.resizeObserver.observe(e.parentElement),e.addEventListener("webglcontextlost",this.onContextLost),e.addEventListener("webglcontextrestored",this.onContextRestored)}updateInputHandlerReferences(){this.inputHandler.setReferences(this.battlefield.getGround(),this.agentManager.getAgentMeshes())}updateBattlefield(e,t){t-this.lastTimeUpdate>6e4&&(this.battlefield.updateTimeOfDay(),this.lastTimeUpdate=t),this.battlefield.updateGalacticAnimation(e),this.battlefield.updateCloudAnimation(e)}updateAnimations(e){const t=this.movementAnimator.update(this.agentManager.getAgentMeshes(),e);return this.effectsManager.update(),this.buildingManager.update(e),t}updateProceduralAnimations(e){if(this.proceduralBodiesDirty){this.proceduralBodiesCache.clear();for(const[t,n]of this.agentManager.getAgentMeshes())if(this.proceduralAnimator.has(t)&&n.animations.size===0){const a=n.group.getObjectByName("characterBody");a&&this.proceduralBodiesCache.set(t,a)}this.proceduralBodiesDirty=!1}this.proceduralBodiesCache.size>0&&this.proceduralAnimator.update(e,this.proceduralBodiesCache)}updateIndicatorScales(e,t,n){for(const[,a]of t){const i=e.position.distanceTo(a.group.position),o=Math.max(.5,Math.min(2.5,i/15))*n,l=a.group.userData.isBoss===!0,c=a.group.getObjectByName("statusBar"),d=a.group.getObjectByName("nameLabelSprite");if(c){const p=typeof c.userData.baseIndicatorScale=="number"?c.userData.baseIndicatorScale:l?2:1.6,m=typeof c.userData.aspectRatio=="number"?c.userData.aspectRatio:2560/4096;c.scale.set(p*o,p*m*o,1)}if(d){const p=typeof d.userData.baseIndicatorScale=="number"?d.userData.baseIndicatorScale:l?1.5:1.25,m=p>2,b=m?p:Math.max(l?1.35:1.1,Math.min(l?1.65:1.35,p)),x=typeof d.userData.aspectRatio=="number"?d.userData.aspectRatio:1024/4096,w=Math.max(.5,Math.min(2.5,i/15)),S=(m?Math.max(.8,Math.min(1.2,w)):w)*n;d.scale.set(b*S,b*x*S,1)}const f=a.group.getObjectByName("combinedUI");if(f){const p=typeof f.userData.baseIndicatorScale=="number"?f.userData.baseIndicatorScale:l?3:2.4,m=typeof f.userData.aspectRatio=="number"?f.userData.aspectRatio:1024/2048;f.scale.set(p*o,p*m*o,1)}if(!c&&!f){const p=a.group.getObjectByName("nameLabel");if(p){const x=.3*o;p.scale.set(x*(p.userData.aspectRatio||2),x,1)}const m=a.group.getObjectByName("manaBar");m&&m.scale.set(.9,.14,1);const b=a.group.getObjectByName("idleTimer");b&&b.scale.set(.9*o,.14*o,1)}}for(const[,a]of this.buildingManager.getBuildingMeshData()){const i=e.position.distanceTo(a.group.position),o=Math.max(.5,Math.min(2.5,i/15))*n,l=a.group.getObjectByName("buildingLabel");if(l){const c=.3*o;l.scale.set(c*(l.userData.aspectRatio||2),c,1)}}this.effectsManager.updateWithCamera(e)}async loadCharacterModels(){await this.agentManager.loadCharacterModels()}upgradeAgentModels(){this.agentManager.upgradeAgentModels(),this.updateInputHandlerReferences()}addAgent(e){this.agentManager.addAgent(e)}removeAgent(e){this.agentManager.removeAgent(e),this.updateInputHandlerReferences()}updateAgent(e,t=!1){this.agentManager.updateAgent(e,t)}syncAgents(e){this.agentManager.syncAgents(e)}setCustomAgentClasses(e){this.agentManager.setCustomAgentClasses(e)}refreshSelectionVisuals(){this.selectionManager.refreshSelectionVisuals()}createMoveOrderEffect(e){this.effectsManager.createMoveOrderEffect(e)}showToolBubble(e,t,n){this.effectsManager.setAgentMeshes(this.agentManager.getAgentMeshes()),this.effectsManager.createSpeechBubble(e,t,n)}showDelegationEffect(e,t){this.effectsManager.setAgentMeshes(this.agentManager.getAgentMeshes()),this.effectsManager.createDelegationEffect(e,t)}addSubagentEffect(e,t,n,a){this.effectsManager.setAgentMeshes(this.agentManager.getAgentMeshes()),this.effectsManager.addSubagentEffect(e,t,n,a)}completeSubagentEffect(e){this.effectsManager.completeSubagentEffect(e)}removeSubagentEffect(e){this.effectsManager.removeSubagentEffect(e)}focusAgent(e){this.cameraManager.focusAgent(e)}callSubordinates(e){var o;const n=z.getState().agents.get(e);if(!n||!(n.isBoss||n.class==="boss")||!((o=n.subordinateIds)!=null&&o.length))return;const a=new vt(n.position.x,n.position.y,n.position.z),i=this.inputHandler.calculateFormationPositions(a,n.subordinateIds.length);this.effectsManager.createMoveOrderEffect(a.clone()),n.subordinateIds.forEach((l,c)=>{const d=this.agentManager.getAgentMeshes().get(l);z.moveAgent(l,i[c]),d&&this.movementAnimator.startMovement(l,d,i[c])})}setDrawingTool(e){this.drawingManager.setTool(e),z.setActiveTool(e)}syncAreas(){this.drawingManager.syncFromStore()}highlightArea(e){this.drawingManager.highlightArea(e)}clearAreaSelection(){this.drawingManager.highlightArea(null)}addBuilding(e){this.buildingManager.addBuilding(e)}removeBuilding(e){this.buildingManager.removeBuilding(e)}updateBuilding(e){this.buildingManager.updateBuilding(e)}syncBuildings(){this.buildingManager.syncFromStore()}highlightBuilding(e){this.buildingManager.highlightBuilding(e)}setOnBuildingClick(e){this.callbackManager.setOnBuildingClick(e)}setOnBuildingDoubleClick(e){this.callbackManager.setOnBuildingDoubleClick(e)}setOnContextMenu(e){this.callbackManager.setOnContextMenu(e)}setOnAgentHover(e){this.callbackManager.setOnAgentHover(e)}setOnBuildingHover(e){this.callbackManager.setOnBuildingHover(e)}setOnGroundClick(e){this.callbackManager.setOnGroundClick(e)}setOnAreaDoubleClick(e){this.callbackManager.setOnAreaDoubleClick(e)}setOnFolderIconClick(e){this.onFolderIconClickCallback=e}setOnToast(e){this.agentManager.setOnToast(e)}setCharacterScale(e){this.agentManager.setCharacterScale(e),this.selectionManager.setCharacterScale(e)}setIndicatorScale(e){this.renderLoop.setIndicatorScale(e),this.effectsManager.setIndicatorScale(e)}setFpsLimit(e){this.renderLoop.setFpsLimit(e)}setPowerSaving(e){this.renderLoop.setPowerSaving(e)}setGridVisible(e){this.battlefield.setGridVisible(e)}setDebugTime(e){this.battlefield.setDebugTime(e)}setTimeMode(e){this.battlefield.setTimeMode(e)}setTerrainConfig(e){this.battlefield.setTerrainConfig(e),e.brightness!==void 0&&(this.drawingManager.setBrightness(e.brightness),this.buildingManager.setBrightness(e.brightness),this.agentManager.setBrightness(e.brightness))}setFloorStyle(e,t=!1){this.battlefield.setFloorStyle(e,t)}setIdleAnimation(e){this.agentManager.setIdleAnimation(e)}setWorkingAnimation(e){this.agentManager.setWorkingAnimation(e)}setAgentModelStyle(e){this.agentManager.setModelStyle(e)}getAgentModelStyle(){return this.agentManager.getModelStyle()}setGlobalSaturation(e){this.sceneCore.setSaturation(e)}getGlobalSaturation(){return this.sceneCore.getSaturation()}setPostProcessingEnabled(e){this.sceneCore.setPostProcessingEnabled(e)}reattach(e,t){var i,o;console.log("[SceneManager] Reattaching to new canvas (HMR)"),this.isReattaching=!0,this.renderLoop.stop(),(i=this.resizeObserver)==null||i.disconnect();const n=this.sceneCore.getCanvas();n.removeEventListener("webglcontextlost",this.onContextLost),n.removeEventListener("webglcontextrestored",this.onContextRestored),this.sceneCore.reattach(e),this.cameraManager.recreateControls(this.sceneCore.getRenderer()),this.sceneCore.updateCamera(this.cameraManager.getCamera()),e.addEventListener("webglcontextlost",this.onContextLost),e.addEventListener("webglcontextrestored",this.onContextRestored),this.inputHandler.reattach(e,t,this.cameraManager.getControls()),this.updateInputHandlerReferences(),e.parentElement&&((o=this.resizeObserver)==null||o.observe(e.parentElement)),this.onWindowResize();const a=(l=0)=>{this.isReattaching=!1,e.isConnected&&this.sceneCore.getRenderer()?(console.log("[SceneManager] Restarting animation loop after HMR reattach"),this.renderLoop.start()):l<10?(console.log(`[SceneManager] Canvas not connected, retrying... (attempt ${l+1})`),this.isReattaching=!0,requestAnimationFrame(()=>a(l+1))):console.warn("[SceneManager] Failed to restart animation loop - canvas never connected")};requestAnimationFrame(()=>a())}getMemoryDiagnostics(){var t;const e=this.sceneCore.getRenderer().info;return{threeJs:e!=null&&e.memory?{geometries:e.memory.geometries,textures:e.memory.textures,programs:((t=e.programs)==null?void 0:t.length)??0}:null,heap:nc.getUsage(),agentMeshCount:this.agentManager.getAgentMeshes().size,bossLineCount:0}}getRenderStats(){var t,n;const e=(n=(t=this.sceneCore.getRenderer())==null?void 0:t.info)==null?void 0:n.render;return e?{calls:e.calls,triangles:e.triangles,points:e.points,lines:e.lines}:null}get renderer(){return this.sceneCore.getRenderer()}logMemoryDiagnostics(){const e=this.getMemoryDiagnostics(),t=this.characterLoader.getCacheStats();console.group("%c[SceneManager Memory]","color: #ff6600; font-weight: bold"),e.threeJs&&console.log(`Three.js: ${e.threeJs.geometries} geometries, ${e.threeJs.textures} textures, ${e.threeJs.programs} programs`),e.heap&&console.log(`Heap: ${e.heap.usedMB}MB / ${e.heap.totalMB}MB (limit: ${e.heap.limitMB}MB)`),console.log(`Agent meshes: ${e.agentMeshCount}`),console.log(`CharacterLoader cache: ${t.builtInModels} built-in, ${t.customModels} custom`),t.modelNames.length>0&&console.log(` Built-in models: ${t.modelNames.join(", ")}`),t.customModelIds.length>0&&console.log(` Custom models: ${t.customModelIds.join(", ")}`),console.groupEnd()}dispose(){var n;console.log("%c[SceneManager] dispose() called - starting cleanup","color: #ff0000; font-weight: bold");const e=this.characterLoader.getCacheStats();console.log(`[SceneManager] Pre-dispose: ${e.builtInModels} built-in models, ${e.customModels} custom models`),this.renderLoop.stop(),window.removeEventListener("resize",this.onWindowResize);const t=this.sceneCore.getCanvas();t.removeEventListener("webglcontextlost",this.onContextLost),t.removeEventListener("webglcontextrestored",this.onContextRestored),(n=this.resizeObserver)==null||n.disconnect(),this.resizeObserver=null,this.inputHandler.dispose(),this.drawingManager.dispose(),this.buildingManager.dispose(),this.effectsManager.dispose(),this.agentManager.dispose(),this.selectionManager.dispose(),this.battlefield.dispose(),this.characterLoader.dispose(),this.cameraManager.dispose(),this.sceneCore.dispose(),console.log("%c[SceneManager] dispose() complete - all resources freed","color: #00ff00; font-weight: bold")}}const Wp="tide_webgl_active";typeof window<"u"&&(window.__tidePersistedScene===void 0&&(window.__tidePersistedScene=null),window.__tidePersistedCanvas===void 0&&(window.__tidePersistedCanvas=null),window.__tideWsConnected===void 0&&(window.__tideWsConnected=!1),window.__tideIsPageUnloading===void 0&&(window.__tideIsPageUnloading=!1));function Af(){return typeof window<"u"?window.__tidePersistedScene??null:null}function qM(){return typeof window<"u"?window.__tidePersistedCanvas??null:null}function sz(){return typeof window<"u"?window.__tideWsConnected??!1:!1}function md(s){typeof window<"u"&&(window.__tidePersistedScene=s)}function td(s){typeof window<"u"&&(window.__tidePersistedCanvas=s)}function YM(s){typeof window<"u"&&(window.__tideWsConnected=s)}function az(s){typeof window<"u"&&(window.__tideIsPageUnloading=s)}function iz(){sessionStorage.setItem(Wp,"true")}function ep(s){az(!0),sessionStorage.removeItem(Wp),_M(),QL(),window.__tideScene&&(window.__tideScene=null);const e=Af();e?(console.log("[App] Calling persistedScene.dispose()"),e.dispose(),md(null)):console.log("[App] No persistedScene to dispose"),td(null),YM(!1);const t=document.getElementById("battlefield");t&&t.remove();const n=document.getElementById("app");n&&(n.innerHTML="")}function rz(){var a,i;if(window.__tideAppInitialized)return;if(window.__tideAppInitialized=!0,sessionStorage.getItem(Wp)==="true"&&console.log("[App] Detected unclean shutdown from previous session - forcing cleanup"),window.__tideScene){console.log("[App] Cleaning up stale __tideScene reference");try{(i=(a=window.__tideScene).dispose)==null||i.call(a)}catch{}window.__tideScene=null}const e=Af();if(e){console.log("[App] Cleaning up stale persistedScene");try{e.dispose()}catch{}md(null)}const t=document.getElementById("battlefield"),n=qM();t&&t!==n&&t.remove(),sessionStorage.removeItem(Wp)}function oz(){typeof window>"u"||(rz(),window.addEventListener("pageshow",s=>{s.persisted&&(console.log("[App] Page restored from bfcache - cleaning up"),ep(),window.location.reload())}),window.onunload=()=>ep(),window.onbeforeunload=s=>{ep()},window.addEventListener("pagehide",s=>{ep(`pagehide (persisted=${s.persisted})`)}))}oz();const aC={showTrees:!0,showBushes:!0,showHouse:!0,showLamps:!0,showGrass:!0,showClouds:!0,fogDensity:1,floorStyle:"metal",brightness:1,skyColor:null,battlefieldSize:50},iC={saturation:2,roughness:.5,metalness:-1,emissiveBoost:0,envMapIntensity:1,wireframe:!1,colorMode:"normal"},rC={idleAnimation:"sit",workingAnimation:"sprint"},lz=0;function VM(){const s={characterScale:2,indicatorScale:.7,gridVisible:!1,timeMode:"day",terrain:aC,modelStyle:iC,animations:rC,fpsLimit:lz},e=Ba(mt.CONFIG,null);return e?{characterScale:e.characterScale??s.characterScale,indicatorScale:e.indicatorScale??s.indicatorScale,gridVisible:e.gridVisible??s.gridVisible,timeMode:e.timeMode??s.timeMode,terrain:{...aC,...e.terrain},modelStyle:{...iC,...e.modelStyle},animations:{...rC,...e.animations},fpsLimit:e.fpsLimit??s.fpsLimit}:s}function cz(s){Ii(mt.CONFIG,s)}function uz(){return typeof window>"u"?!0:window.matchMedia("(max-width: 768px)").matches}typeof window<"u"&&!window.__tideHmrRefreshListeners&&(window.__tideHmrRefreshListeners=new Set);function KM(){console.log("[Tide HMR] Manual scene refresh triggered");const s=Af();if(s){try{s.dispose()}catch(t){console.warn("[Tide HMR] Error disposing scene:",t)}md(null)}td(null),window.__tideScene&&(window.__tideScene=null);const e=document.getElementById("battlefield");if(e){const t=e.getContext("webgl2")||e.getContext("webgl");if(t){const n=t.getExtension("WEBGL_lose_context");n&&n.loseContext()}}window.__tideHmrPendingSceneChanges=!1,window.location.reload()}typeof window<"u"&&(window.__tideHmrSceneRefresh=KM);function dz({canvasRef:s,selectionBoxRef:e,viewMode:t,sceneMountKey:n=0,showToast:a,showAgentNotification:i,toolboxModal:o,contextMenu:l,setHoveredAgentPopup:c,setBuildingPopup:d,getBuildingPopup:f,openBuildingModal:p,openPM2LogsModal:m,openBossLogsModal:b,openDatabasePanel:x,onSceneLoadingChange:w}){const k=y.useRef(null),S=y.useRef(null),j=y.useRef(null),C=y.useRef(null),N=y.useRef(null);return y.useEffect(()=>{if(t!=="3d"){w==null||w(!1);return}if(!s.current||!e.current)return;let _=!1;w==null||w(!0);const D=Af(),M=qM()===s.current;function P(){var E,R,I,O,B,q,H,G;(E=k.current)==null||E.setOnToast(a),(R=k.current)==null||R.setOnBuildingClick((K,X)=>{z.selectBuilding(K);const $=z.getState().buildings.get(K);($==null?void 0:$.type)==="folder"&&$.folderPath?z.openFileExplorer($.folderPath):($==null?void 0:$.type)==="server"||($==null?void 0:$.type)==="boss"||($==null?void 0:$.type)==="database"?(S.current&&clearTimeout(S.current),S.current=setTimeout(()=>{d({buildingId:K,screenPos:X,fromClick:!0}),S.current=null},150)):p(K)}),(I=k.current)==null||I.setOnContextMenu((K,X,$)=>{l.open(K,X,$)}),(O=k.current)==null||O.setOnAgentHover(()=>{}),(B=k.current)==null||B.setOnBuildingHover((K,X)=>{const $=f();if(K&&X){const re=z.getState().buildings.get(K);((re==null?void 0:re.type)==="server"||(re==null?void 0:re.type)==="boss"||(re==null?void 0:re.type)==="database")&&!($!=null&&$.fromClick)&&d({buildingId:K,screenPos:X,fromClick:!1})}else $!=null&&$.fromClick||d(null)}),(q=k.current)==null||q.setOnGroundClick(()=>{d(null)}),(H=k.current)==null||H.setOnAreaDoubleClick(K=>{z.selectArea(K),o.open()}),(G=k.current)==null||G.setOnBuildingDoubleClick(K=>{var $;S.current&&(clearTimeout(S.current),S.current=null),d(null);const X=z.getState().buildings.get(K);(X==null?void 0:X.type)==="server"&&(($=X.pm2)!=null&&$.enabled)?m==null||m(K):(X==null?void 0:X.type)==="boss"?b==null||b(K):(X==null?void 0:X.type)==="database"?x==null||x(K):(X==null?void 0:X.type)==="folder"&&X.folderPath?z.openFileExplorer(X.folderPath):p(K)})}if(D)try{k.current=D,M?console.log("[Tide] Reusing existing scene (StrictMode remount)"):(console.log("[Tide] Reattaching persisted scene to new canvas"),D.reattach(s.current,e.current),td(s.current));const E=z.getState();D.syncAreas(),D.syncBuildings(),E.agents.size>0&&(console.log("[Tide] Re-syncing agents from store after remount:",E.agents.size),D.syncAgents(Array.from(E.agents.values()))),P()}catch(E){console.error("[Tide] Failed to reattach persisted 3D scene:",E),w==null||w(!1)}finally{C.current=requestAnimationFrame(()=>{N.current=requestAnimationFrame(()=>{w==null||w(!1),N.current=null}),C.current=null})}else{const E=s.current,R=e.current,I=()=>{if(_){console.log("[Tide] Effect cleaned up before scene init, skipping"),w==null||w(!1);return}if(!E.isConnected||!R.isConnected){console.warn("[Tide] Canvas disconnected before initialization"),w==null||w(!1);return}(!E.clientWidth||!E.clientHeight)&&(console.log("[Tide] Canvas has no CSS dimensions, using window fallback"),E.style.width="100%",E.style.height="100%",E.offsetHeight),(!E.clientWidth||!E.clientHeight)&&(E.width=window.innerWidth,E.height=window.innerHeight),iz();try{const O=new nz(E,R);k.current=O,md(O),td(E);const B=VM();O.setCharacterScale(B.characterScale),O.setIndicatorScale(B.indicatorScale),O.setGridVisible(B.gridVisible),O.setTimeMode(B.timeMode),O.setTerrainConfig(B.terrain),O.setFloorStyle(B.terrain.floorStyle,!0),O.setAgentModelStyle(B.modelStyle),O.setIdleAnimation(B.animations.idleAnimation),O.setWorkingAnimation(B.animations.workingAnimation),O.setFpsLimit(B.fpsLimit),O.syncAreas(),O.syncBuildings(),O.loadCharacterModels().then(()=>{console.log("[Tide] Character models ready");const q=z.getState();q.customAgentClasses.size>0&&(console.log("[Tide] Applying custom classes from store:",q.customAgentClasses.size),O.setCustomAgentClasses(q.customAgentClasses)),q.agents.size>0&&(console.log("[Tide] Syncing agents from store:",q.agents.size),O.syncAgents(Array.from(q.agents.values()))),O.upgradeAgentModels()}).catch(q=>{console.warn("[Tide] Some models failed to load, using fallback:",q)}).finally(()=>{w==null||w(!1)}),P()}catch(O){console.error("[Tide] Failed to initialize 3D scene:",O),w==null||w(!1)}};j.current=requestAnimationFrame(I)}return AM({onAgentCreated:E=>{var R,I,O;(R=k.current)==null||R.addAgent(E),(I=k.current)==null||I.refreshSelectionVisuals(),(O=window.__spawnModalSuccess)==null||O.call(window)},onAgentUpdated:(E,R)=>{var I;(I=k.current)==null||I.updateAgent(E,R)},onAgentDeleted:E=>{var R;(R=k.current)==null||R.removeAgent(E)},onAgentsSync:E=>{var R;(R=k.current)==null||R.syncAgents(E)},onAreasSync:()=>{var R,I;(R=k.current)==null||R.syncAreas();const E=Array.from(z.getState().agents.values());(I=k.current)==null||I.syncAgents(E)},onSpawnError:()=>{var E;(E=window.__spawnModalError)==null||E.call(window)},onSpawnSuccess:()=>{var E;(E=window.__spawnModalSuccess)==null||E.call(window)},onDirectoryNotFound:E=>{var R;(R=window.__spawnModalDirNotFound)==null||R.call(window,E)},onToolUse:(E,R,I)=>{var O;(O=k.current)==null||O.showToolBubble(E,R,I)},onDelegation:(E,R)=>{var I;(I=k.current)==null||I.showDelegationEffect(E,R)},onCustomClassesSync:E=>{var R,I;(R=k.current)==null||R.setCustomAgentClasses(E),(I=k.current)==null||I.upgradeAgentModels()},onBuildingUpdated:E=>{var R;(R=k.current)==null||R.updateBuilding(E)},onSubagentStarted:E=>{var R;(R=k.current)==null||R.addSubagentEffect(E.id,E.parentAgentId,E.name,E.subagentType)},onSubagentCompleted:E=>{var O;const R=z.getSubagent(E)||z.getSubagentByToolUseId(E),I=(R==null?void 0:R.id)||E;(O=k.current)==null||O.completeSubagentEffect(I),setTimeout(()=>{var B;(B=k.current)==null||B.removeSubagentEffect(I)},3e4)}}),()=>{_=!0,j.current!==null&&(cancelAnimationFrame(j.current),j.current=null),C.current!==null&&(cancelAnimationFrame(C.current),C.current=null),N.current!==null&&(cancelAnimationFrame(N.current),N.current=null),z.getState().viewMode!=="3d"&&uz()&&k.current&&(console.log("[Tide] 3D canvas unmounted - disposing scene to free memory"),JL(),k.current.dispose(),k.current=null,md(null),td(null))}},[t,n]),k}function hz({showToast:s,showAgentNotification:e}){y.useEffect(()=>{AM({onToast:s,onReconnect:()=>{z.triggerReconnect()},onAgentNotification:a=>{e(a)}}),sz()||(fd(),YM(!0)),GL();let t;qL(a=>{a.type==="agent_notification"&&typeof a.agentId=="string"&&SM(a.agentId)}).then(a=>{t=a});const n=()=>{console.log("[Tide] App resumed from background, reconnecting..."),setTimeout(()=>fd(),100)};return window.addEventListener("tideAppResume",n),()=>{window.removeEventListener("tideAppResume",n),t==null||t()}},[s,e])}function pz(s){y.useEffect(()=>{let e="",t="",n=new Map;const a=i=>{var c;let o=!1;const l=new Map;for(const[d,f]of i){const m=`${f.position.x.toFixed(2)},${f.position.z.toFixed(2)},${f.status},${f.class},${f.isBoss},${((c=f.subordinateIds)==null?void 0:c.length)??0}`.split("").reduce((b,x)=>(b<<5)-b+x.charCodeAt(0),0);l.set(d,m),n.get(d)!==m&&(o=!0)}return l.size!==n.size&&(o=!0),{newVersion:l,changed:o}};return z.subscribe(()=>{var m;const i=z.getState(),o=Array.from(i.selectedAgentIds).sort().join(","),l=Array.from(i.selectedBuildingIds).sort().join(","),c=o!==e,d=l!==t,{newVersion:f,changed:p}=a(i.agents);(c||d||p)&&(e=o,t=l,n=f,(m=s.current)==null||m.refreshSelectionVisuals())})},[s])}function fz(s){y.useEffect(()=>{var n;(n=s.current)==null||n.syncAreas();let e=0,t=0;return z.subscribe(()=>{var l,c;const i=z.getState().areas;if(i.size!==e){e=i.size,t=Date.now(),(l=s.current)==null||l.syncAreas();return}let o=0;for(const[d,f]of i){let p=d.charCodeAt(0);p+=(f.width??0)+(f.height??0)+(f.radius??0),p+=Math.floor(f.center.x*100)+Math.floor(f.center.z*100),p+=(f.zIndex??0)*1e3;for(let m=0;m<f.name.length;m++)p+=f.name.charCodeAt(m);for(let m=0;m<f.color.length;m++)p+=f.color.charCodeAt(m);if(f.directoryGitCounts)for(const m of f.directoryGitCounts)p+=(m+1)*7;if(f.logo){p+=Math.floor((f.logo.opacity??.8)*1e3),p+=Math.floor(f.logo.width*100)+Math.floor(f.logo.height*100);for(let m=0;m<f.logo.position.length;m++)p+=f.logo.position.charCodeAt(m);if(f.logo.filename)for(let m=0;m<f.logo.filename.length;m++)p+=f.logo.filename.charCodeAt(m)}o^=p|0}o!==t&&(t=o,(c=s.current)==null||c.syncAreas())})},[s])}function mz(s){y.useEffect(()=>{var n;(n=s.current)==null||n.syncBuildings();let e=0,t=0;return z.subscribe(()=>{var l,c;const i=z.getState().buildings;if(i.size!==e){e=i.size,t=Date.now(),(l=s.current)==null||l.syncBuildings();return}let o=0;for(const[d,f]of i){o^=f.position.x*1e3+f.position.z|0,o^=(f.scale||1)*1e4|0;const p=`${f.style||""}${f.name}${f.status}${f.gitChangesCount||0}`;for(let m=0;m<p.length;m++)o=(o<<5)-o+p.charCodeAt(m)|0}o!==t&&(t=o,(c=s.current)==null||c.syncBuildings())})},[s])}function gz(s,e){y.useEffect(()=>{var t;(t=s.current)==null||t.highlightArea(e)},[s,e])}function bz(s,e){y.useEffect(()=>{var t;(t=s.current)==null||t.setPowerSaving(e)},[s,e])}function yz({sceneRef:s,spawnModal:e,commanderModal:t,explorerModal:n,spotlightModal:a,deleteConfirmModal:i,onRequestBuildingDelete:o,onOpenDatabasePanel:l,onCloseDatabasePanel:c,databasePanelOpen:d}){y.useEffect(()=>{const f=p=>{var E,R,I,O;const m=z.getShortcuts(),b=p.target,x=b.tagName==="INPUT"||b.tagName==="TEXTAREA",w=m.find(B=>B.id==="deselect-all");if(kt(p,w)){if(Ay()){p.preventDefault();return}const B=z.getState();if(B.activeTool==="rectangle"||B.activeTool==="circle"){(E=s.current)==null||E.setDrawingTool(null),typeof window<"u"&&window.__tideScene2D_setDrawingTool&&window.__tideScene2D_setDrawingTool(null);return}e.isOpen?e.close():B.terminalOpen?(z.setTerminalOpen(!1),document.activeElement instanceof HTMLElement&&document.activeElement.blur()):(z.deselectAll(),(R=s.current)==null||R.refreshSelectionVisuals())}for(let B=1;B<=9;B++){const q=m.find(H=>H.id===`select-agent-${B}`);if(kt(p,q)){p.preventDefault();const H=z.getState(),G=B-1,K=Array.from(H.agents.keys());G<K.length&&(z.selectAgent(K[G]),(I=s.current)==null||I.refreshSelectionVisuals());return}}const k=m.find(B=>B.id==="spawn-agent");if(kt(p,k)){p.preventDefault(),e.open();return}const S=m.find(B=>B.id==="toggle-commander-tab");if(kt(p,S)&&!x){p.preventDefault(),t.toggle();return}const j=m.find(B=>B.id==="toggle-commander");if(kt(p,j)){p.preventDefault(),t.toggle();return}const C=m.find(B=>B.id==="toggle-file-explorer");if(kt(p,C)){p.preventDefault();const B=z.getState();if(n.isOpen||B.explorerFolderPath!==null||B.explorerAreaId!==null)n.close(),z.closeFileExplorer();else{const H=z.getLastExplorerState();if((H==null?void 0:H.type)==="folder")z.openFileExplorer(H.path);else if((H==null?void 0:H.type)==="area")if(B.areas.has(H.areaId))n.open(H.areaId);else{const G=Array.from(B.areas.values()).filter(K=>K.directories&&K.directories.length>0);G.length>0&&n.open(G[0].id)}else{const G=Array.from(B.areas.values()).filter(K=>K.directories&&K.directories.length>0);G.length>0&&n.open(G[0].id)}}return}if(p.altKey&&!p.ctrlKey&&!p.shiftKey&&!p.metaKey&&p.code==="KeyD"){if(p.preventDefault(),p.stopPropagation(),d){c();return}const B=localStorage.getItem("tide-commander-last-database-building"),q=z.getState();if(B){const H=q.buildings.get(B);if((H==null?void 0:H.type)==="database"){l(B);return}}for(const[H,G]of q.buildings)if(G.type==="database"){l(H);return}return}const N=m.find(B=>B.id==="toggle-spotlight");if(kt(p,N)||p.altKey&&!p.ctrlKey&&!p.metaKey&&p.code==="KeyP"){console.log("[useKeyboardShortcuts] Spotlight shortcut matched!",{spotlightShortcut:N,altKey:p.altKey,code:p.code}),p.preventDefault(),a.toggle();return}const _=m.find(B=>B.id==="toggle-2d-view");if(kt(p,_)){p.preventDefault();const B=z.getState().viewMode,q=B==="3d"?"2d":B==="2d"?"dashboard":"3d";z.setViewMode(q);return}const D=m.find(B=>B.id==="next-working-agent"),L=m.find(B=>B.id==="prev-working-agent");if((kt(p,D)||kt(p,L))&&!x){const B=z.getState();if(B.terminalOpen)return;const q=Array.from(B.agents.values());let H=q.filter($=>B.agentsWithUnseenOutput.has($.id));if(H.length===0&&(H=q.filter($=>$.status==="working")),H.length===0)return;p.preventDefault();const G=B.selectedAgentIds.size===1?Array.from(B.selectedAgentIds)[0]:null,K=G?H.findIndex($=>$.id===G):-1;let X;kt(p,D)?X=K===-1?0:(K+1)%H.length:X=K===-1?H.length-1:(K-1+H.length)%H.length,z.selectAgent(H[X].id),(O=s.current)==null||O.refreshSelectionVisuals();return}const M=m.find(B=>B.id==="delete-selected"),P=m.find(B=>B.id==="delete-selected-backspace");if((kt(p,M)||kt(p,P))&&!x){const B=z.getState();if(B.selectedAgentIds.size>0){p.preventDefault(),i.open();return}if(B.selectedBuildingIds.size>0){p.preventDefault(),o();return}return}};return document.addEventListener("keydown",f,!0),()=>document.removeEventListener("keydown",f,!0)},[s,e,t,n,a,i,o,l,c,d])}function xz(){const[s,e]=y.useState(!1);return window.__tideSetBackNavModal=e,y.useEffect(()=>{if(!(window.innerWidth<=768))return;if(window.__tideBackNavSetup){window.location.hash.includes("app")||(window.location.hash="#app");return}window.__tideBackNavSetup=!0,window.location.hash.includes("app")||(window.location.hash="#app");let a=0;const i=()=>{var l;window.innerWidth>768||Date.now()-a<200||window.location.hash.includes("app")||(window.location.hash="#app",Ay()||(l=window.__tideSetBackNavModal)==null||l.call(window,!0))},o=()=>{var l;window.innerWidth>768||(window.location.hash.includes("app")||(window.location.hash="#app"),window.location.hash==="#app"&&setTimeout(()=>{window.location.hash==="#app"&&!window.location.hash.includes("app2")&&(window.history.pushState(null,"","#app2"),window.history.pushState(null,"","#app"))},50),Ay()?a=Date.now():(l=window.__tideSetBackNavModal)==null||l.call(window,!0))};window.history.pushState(null,"","#app1"),window.history.pushState(null,"","#app2"),window.history.pushState(null,"","#app"),window.addEventListener("hashchange",i),window.addEventListener("popstate",o)},[]),{showBackNavModal:s,setShowBackNavModal:e,handleLeave:()=>{e(!1);const n=window.__tideHistoryDepth??2;window.history.go(-(n+1))}}}const kb="agent-order-change";function vz(s){const e=y.useMemo(()=>new Set(s.map(c=>c.id)),[s]),[t,n]=y.useState(()=>Ba(mt.AGENT_ORDER,[]));y.useEffect(()=>{const c=d=>{n(d.detail)};return window.addEventListener(kb,c),()=>{window.removeEventListener(kb,c)}},[]);const a=y.useMemo(()=>{const c=t.filter(m=>e.has(m)),d=s.filter(m=>!c.includes(m.id)).map(m=>m.id),f=[...c,...d],p=new Map(s.map(m=>[m.id,m]));return f.map(m=>p.get(m)).filter(m=>m!==void 0)},[s,t,e]),i=y.useCallback(c=>{n(c),Ii(mt.AGENT_ORDER,c),window.dispatchEvent(new CustomEvent(kb,{detail:c}))},[]),o=y.useCallback((c,d)=>{const f=a.map(m=>m.id),[p]=f.splice(c,1);f.splice(d,0,p),i(f)},[a,i]),l=y.useCallback(()=>{n([]),Ii(mt.AGENT_ORDER,[])},[]);return y.useEffect(()=>{if(e.size===0)return;const c=t.filter(d=>e.has(d));c.length!==t.length&&i(c)},[e,t,i]),{orderedAgents:a,moveAgent:o,resetOrder:l}}const Ux="deivid11/tide-commander",wz=`https://api.github.com/repos/${Ux}/releases/latest`,kz=`https://api.github.com/repos/${Ux}/releases?per_page=3`,Sz=3600*1e3,oC="app_update_dismissed_version",lC="1.2.2";function jz(){var f;const[s,e]=y.useState({isChecking:!1,updateAvailable:!1,updateInfo:null,recentReleases:[],error:null,currentVersion:lC}),t=((f=La==null?void 0:La.getPlatform)==null?void 0:f.call(La))==="android"||!1,n=p=>p.replace(/^v/,"").split(".").map(b=>parseInt(b,10)||0),a=(p,m)=>{const b=n(p),x=n(m),w=Math.max(b.length,x.length);for(let k=0;k<w;k++){const S=b[k]||0,j=x[k]||0;if(S>j)return 1;if(S<j)return-1}return 0},i=async p=>{var b;if(La&&wj&&((b=La.isNativePlatform)==null?void 0:b.call(La))===!0){const x=await wj.get({url:p,headers:{Accept:"application/vnd.github.v3+json"}});return{data:x.data,status:x.status}}else{const x=await fetch(p,{headers:{Accept:"application/vnd.github.v3+json"}});return x.ok?{data:await x.json(),status:x.status}:{data:null,status:x.status}}},o=y.useCallback(async(p=!1)=>{e(m=>({...m,isChecking:!0,error:null}));try{const[m,b]=await Promise.all([i(wz),i(kz)]);if(m.status!==200)throw new Error(`GitHub API error: ${m.status}`);const x=m.data,w=x.tag_name;let k=[];b.status===200&&b.data&&(k=b.data.map(_=>({version:_.tag_name,name:_.name,publishedAt:_.published_at,releaseUrl:_.html_url})));const S=localStorage.getItem(oC);if(!p&&S===w)return e(_=>({..._,isChecking:!1,updateAvailable:!1,recentReleases:k})),null;if(!(a(w,lC)>0))return e(_=>({..._,isChecking:!1,updateAvailable:!1,recentReleases:k})),null;const C=x.assets.find(_=>_.name.endsWith(".apk")&&_.content_type==="application/vnd.android.package-archive"),N={version:w,name:x.name,changelog:x.body,releaseUrl:x.html_url,apkUrl:(C==null?void 0:C.browser_download_url)||null,apkSize:(C==null?void 0:C.size)||null,publishedAt:x.published_at};return e(_=>({..._,isChecking:!1,updateAvailable:!0,updateInfo:N,recentReleases:k})),N}catch(m){const b=m instanceof Error?m.message:"Failed to check for updates";return e(x=>({...x,isChecking:!1,error:b})),null}},[]),l=y.useCallback(async()=>{var p,m,b;if(!((p=s.updateInfo)!=null&&p.apkUrl)){(m=s.updateInfo)!=null&&m.releaseUrl&&window.open(s.updateInfo.releaseUrl,"_blank");return}if(!t){(b=s.updateInfo)!=null&&b.releaseUrl&&window.open(s.updateInfo.releaseUrl,"_blank");return}try{window.open(s.updateInfo.apkUrl,"_system"),e(x=>({...x,error:null}))}catch(x){const w=x instanceof Error?x.message:"Failed to open download";e(k=>({...k,error:w}))}},[s.updateInfo,t]),c=y.useCallback(()=>{s.updateInfo&&localStorage.setItem(oC,s.updateInfo.version),e(p=>({...p,updateAvailable:!1,updateInfo:null}))},[s.updateInfo]),d=y.useCallback(()=>{var p;(p=s.updateInfo)!=null&&p.releaseUrl?window.open(s.updateInfo.releaseUrl,"_blank"):window.open(`https://github.com/${Ux}/releases`,"_blank")},[s.updateInfo]);return y.useEffect(()=>{if(!t)return;const p=setTimeout(()=>{o()},5e3),m=setInterval(()=>{o()},Sz);return()=>{clearTimeout(p),clearInterval(m)}},[t,o]),{...s,isAndroid:t,checkForUpdate:o,downloadAndInstall:l,dismissUpdate:c,openReleasePage:d}}function $s(s){const e=y.useRef(null),t=y.useCallback(a=>{e.current=a.target,a.target===a.currentTarget&&a.stopPropagation()},[]),n=y.useCallback(a=>{a.target===a.currentTarget&&e.current===a.currentTarget&&(a.stopPropagation(),s()),e.current=null},[s]);return{handleMouseDown:t,handleClick:n}}const Cz=3e4;function Nz(){const s=y.useRef(null);y.useEffect(()=>{const e=async()=>{var o,l;const t=z.getState(),n=new Map,a=new Map;for(const[c,d]of t.buildings){const f=d.folderPath||d.cwd;f&&(a.has(f)||a.set(f,[]),a.get(f).push(c))}for(const[c,d]of a)try{const f=await yt(ct(`/api/files/git-status?path=${encodeURIComponent(c)}`));if(!f.ok)continue;const m=((o=(await f.json()).files)==null?void 0:o.length)||0;n.set(c,m);for(const b of d){const x=z.getState().buildings.get(b);x&&x.gitChangesCount!==m&&z.updateBuildingLocal(b,{gitChangesCount:m})}}catch{}const i=new Map;for(const[c,d]of t.areas)d.archived||!d.directories||d.directories.forEach((f,p)=>{f&&(i.has(f)||i.set(f,[]),i.get(f).push({areaId:c,dirIndex:p}))});if(i.size!==0)for(const[c,d]of i)try{let f;if(n.has(c))f=n.get(c);else{const m=await yt(ct(`/api/files/git-status?path=${encodeURIComponent(c)}`));if(!m.ok)continue;f=((l=(await m.json()).files)==null?void 0:l.length)||0,n.set(c,f)}const p=new Map;for(const m of d)p.has(m.areaId)||p.set(m.areaId,[]),p.get(m.areaId).push({dirIndex:m.dirIndex,count:f});for(const[m,b]of p){const x=z.getState().areas.get(m);if(!x)continue;const w=x.directoryGitCounts?[...x.directoryGitCounts]:new Array(x.directories.length).fill(0);let k=!1;for(const{dirIndex:S,count:j}of b)w[S]!==j&&(w[S]=j,k=!0);k&&z.updateAreaLocal(m,{directoryGitCounts:w})}}catch{}};return e(),s.current=setInterval(e,Cz),()=>{s.current&&(clearInterval(s.current),s.current=null)}},[])}const cC={historyLimit:500,hideCost:!0,showFPS:!1,powerSaving:!1,customAgentNames:[],experimental2DView:!1,experimentalVoiceAssistant:!1,experimentalTTS:!1,experimentalEchoPrompt:!1,externalEditorCommand:""},qp=90,Sb=["simple","chat","advanced"],uC=55,dC=20,hC=95,Az=200,Mz=12e4,Tz=5,ni=new Map;function Ez(s){const e=ni.get(s);e&&(ni.delete(s),ni.set(s,e))}function _z(){for(;ni.size>Tz;){const s=ni.keys().next().value;if(s!==void 0)ni.delete(s);else break}}function XM(s){ni.delete(s)}function Dz(s){return s.trim().replace(/\r\n/g,`
|
|
149
149
|
`)}function Hy(s,e){return`${s}:${Dz(e)}`}function pC(s,e,t,n){if(s.uuid&&e.has(s.uuid))return!1;const a=s.isUserPrompt?"user":"assistant",i=Hy(a,s.text),o=s.timestamp||0,l=t.get(i);return l!==void 0&&Math.abs(o-l)<=Mz?!1:o>n}function ZM({selectedAgentId:s,hasSessionId:e,reconnectCount:t,historyRefreshTrigger:n,lastPrompts:a,outputScrollRef:i}){const[o,l]=y.useState([]),[c,d]=y.useState(!1),[f,p]=y.useState(!1),[m,b]=y.useState(0),[x,w]=y.useState(!1),[k,S]=y.useState(!1),[j,C]=y.useState(0),N=y.useRef(!0),_=y.useRef(0),D=y.useRef(0),L=y.useRef(!1),M=y.useRef(!1),P=y.useRef(null),E=y.useRef(!1),R=y.useRef(null),I=y.useRef(null);y.useEffect(()=>(N.current=!0,()=>{N.current=!1}),[]),y.useEffect(()=>{if(!s||!e){l([]),D.current=0,S(!1),M.current=!1,C(0),d(!1),p(!1),b(ne=>ne+1),E.current=!1,R.current=null;return}const H=`${s}:${t}:${n}`;if(R.current===H)return;const G=P.current!==null&&P.current!==s,K=t>0,X=G||K,$=!G&&!E.current&&e;P.current=s,E.current=e,R.current=H;let re;if(K){const ne=z.getOutputs(s);ne.length>0&&(re=ne.map(W=>({...W})))}I.current&&(clearTimeout(I.current),I.current=null),K&&ni.delete(s),_.current+=1;const le=_.current;p(!0);const F=ni.get(s);F?(Ez(s),l(F.messages),D.current=F.messages.length,S(F.hasMore),M.current=F.hasMore,C(F.totalCount)):(l([]),D.current=0,S(!1),M.current=!1,C(0)),$||(I.current=setTimeout(()=>{d(!0)},150)),yt(ct(`/api/agents/${s}/history?limit=${qp}&offset=0`)).then(ne=>{if(!ne.ok)throw new Error(`HTTP ${ne.status}: ${ne.statusText}`);return ne.json()}).then(ne=>{if(le!==_.current)return;const W=Array.isArray(ne.messages)?ne.messages:[],ee=Array.isArray(ne.subagents)?ne.subagents:[];l(W),D.current=W.length;const J=ne.hasMore||!1;if(S(J),M.current=J,C(ne.totalCount||0),ee.length>0&&z.hydrateSubagentsFromHistory(s,ee),ni.set(s,{messages:W,hasMore:J,totalCount:ne.totalCount||0}),_z(),re&&re.length>0){const V=W.length>0?Math.max(...W.map(xe=>xe.timestamp?new Date(xe.timestamp).getTime():0)):0,Z=new Set(W.map(xe=>xe.uuid).filter(xe=>typeof xe=="string"&&xe.length>0)),he=new Map;for(const xe of W){if(xe.type!=="user"&&xe.type!=="assistant")continue;const we=Hy(xe.type,xe.content),Se=xe.timestamp?new Date(xe.timestamp).getTime():0,te=he.get(we)??0;Se>te&&he.set(we,Se)}const ge=re.filter(xe=>pC(xe,Z,he,V));z.clearOutputs(s);for(const xe of ge)z.addOutput(s,xe)}else if(W.length>0){const V=Math.max(...W.map(we=>we.timestamp?new Date(we.timestamp).getTime():0)),Z=new Set(W.map(we=>we.uuid).filter(we=>typeof we=="string"&&we.length>0)),he=new Map;for(const we of W){if(we.type!=="user"&&we.type!=="assistant")continue;const Se=Hy(we.type,we.content),te=we.timestamp?new Date(we.timestamp).getTime():0,fe=he.get(Se)??0;te>fe&&he.set(Se,te)}const ge=z.getOutputs(s),xe=ge.filter(we=>{const Se=pC(we,Z,he,V);return Se||console.warn(`[HISTORY-DEDUP] Removing live output: uuid=${we.uuid||"none"} ts=${we.timestamp} lastHistTs=${V} text="${we.text.slice(0,80)}"`),Se});if(ge.length!==xe.length){console.warn(`[HISTORY-DEDUP] Cleared ${ge.length-xe.length}/${ge.length} overlapping outputs for agent ${s}`),z.clearOutputs(s);for(const we of xe)z.addOutput(s,we)}}if(!a.get(s)){for(let V=W.length-1;V>=0;V--)if(W[V].type==="user"){z.setLastPrompt(s,W[V].content);break}}}).catch(ne=>{if(console.error("Failed to load history:",ne),l([]),D.current=0,S(!1),M.current=!1,C(0),X&&re&&re.length>0){z.clearOutputs(s);for(const W of re)z.addOutput(s,W)}}).finally(()=>{N.current&&le===_.current&&(I.current&&(clearTimeout(I.current),I.current=null),d(!1),p(!1),b(ne=>ne+1))})},[s,e,t,n]);const O=y.useCallback(async()=>{if(!s||L.current||!M.current)return;const H=i.current;if(!H){console.warn("loadMoreHistory: outputScrollRef not connected");return}const G=H.scrollHeight-H.scrollTop;L.current=!0,w(!0);const K=D.current;try{const $=await(await yt(ct(`/api/agents/${s}/history?limit=${qp}&offset=${K}`))).json(),re=Array.isArray($.subagents)?$.subagents:[];if(re.length>0&&z.hydrateSubagentsFromHistory(s,re),$.messages&&$.messages.length>0){if(!N.current)return;l(F=>{const ne=[...$.messages,...F];return D.current=ne.length,ne});const le=$.hasMore||!1;M.current=le,S(le),requestAnimationFrame(()=>{requestAnimationFrame(()=>{N.current&&(i.current&&(i.current.scrollTop=i.current.scrollHeight-G),L.current=!1,w(!1))})})}else{if(!N.current)return;L.current=!1,w(!1)}}catch(X){if(console.error("Failed to load more history:",X),!N.current)return;L.current=!1,w(!1)}},[s,i]),B=y.useCallback(H=>{if(!i.current||H.current)return;const{scrollTop:G}=i.current;!L.current&&M.current&&G<Az&&O()},[O,i]),q=y.useCallback(()=>{l([]),D.current=0,s&&ni.delete(s)},[s]);return{history:o,loadingHistory:c,fetchingHistory:f,historyLoadVersion:m,loadingMore:x,hasMore:k,totalCount:j,isMountedRef:N,loadMoreHistory:O,handleScroll:B,clearHistory:q,hasCachedHistory:y.useCallback(H=>ni.has(H),[])}}function Eu(...s){}function Pz(s,e,t,n,a){return{setAgents(i){const o=new Map;for(const c of i)o.set(c.id,c),(c.class==="boss"||c.isBoss)&&Eu("[Store.setAgents] Boss agent:",c.name,"subordinateIds:",c.subordinateIds);const l=i.find(c=>c.status==="working");e(c=>{c.agents=o,l&&c.selectedAgentIds.size===0&&(c.selectedAgentIds=new Set([l.id]),c.terminalOpen=!0)}),t()},addAgent(i){e(o=>{const l=new Map(o.agents);l.set(i.id,i),o.agents=l}),t()},updateAgent(i){var f;const l=s().agents.get(i.id),c=(l==null?void 0:l.status)!==i.status;c&&Eu(`[Store] Agent ${i.name} status update: ${l==null?void 0:l.status} → ${i.status}`);let d=!1;e(p=>{const m=new Map(p.agents);m.set(i.id,i),p.agents=m,c&&(l==null?void 0:l.status)==="working"&&i.status==="idle"&&(p.terminalOpen&&p.selectedAgentIds.has(i.id)||(p.agentsWithUnseenOutput=new Set(p.agentsWithUnseenOutput),p.agentsWithUnseenOutput.add(i.id),Eu(`[Store] Agent ${i.name} completed work - marked as unseen`),d=!0))}),d&&a&&a(),t(),c&&Eu(`[Store] Agent ${i.name} status now in store: ${(f=s().agents.get(i.id))==null?void 0:f.status}`)},updateAgentContextStats(i,o){const c=s().agents.get(i);c&&(e(d=>{const f=new Map(d.agents);f.set(i,{...c,contextStats:o,contextUsed:o.totalTokens,contextLimit:o.contextWindow}),d.agents=f}),t())},updateAgentContext(i,o,l){const d=s().agents.get(i);if(d){const f=Math.max(1,l||2e5),p=Math.max(0,Math.min(100,Number((o/f*100).toFixed(1))));e(m=>{const b=new Map(m.agents),x=d.contextStats?{...d.contextStats,totalTokens:o,contextWindow:f,usedPercent:p,lastUpdated:Date.now()}:void 0;b.set(i,{...d,contextUsed:o,contextLimit:f,contextStats:x}),m.agents=b}),t()}},removeAgent(i){const o=s().agentsWithUnseenOutput.has(i);e(l=>{const c=new Map(l.agents);c.delete(i),l.agents=c;const d=new Set(l.selectedAgentIds);d.delete(i),l.selectedAgentIds=d,l.agentOutputs.delete(i),l.lastPrompts.delete(i),l.agentsWithUnseenOutput.has(i)&&(l.agentsWithUnseenOutput=new Set(l.agentsWithUnseenOutput),l.agentsWithUnseenOutput.delete(i)),l.delegationHistories.delete(i),l.lastDelegationReceived.delete(i),l.agentTaskProgress.delete(i),l.supervisor.narratives.delete(i),l.supervisor.agentHistories.delete(i),l.supervisor.historyFetchedForAgents.delete(i),l.subagents.delete(i)}),XM(i),o&&a&&a(),t()},selectAgent(i){let o=!1;e(l=>{l.selectedAgentIds=new Set(i?[i]:[]),i&&(l.lastSelectedAgentId=i,l.agentsWithUnseenOutput.has(i)&&(l.agentsWithUnseenOutput=new Set(l.agentsWithUnseenOutput),l.agentsWithUnseenOutput.delete(i),o=!0)),l.currentSnapshot=null}),o&&a&&a(),t()},addToSelection(i){let o=!1;e(l=>{const c=new Set(l.selectedAgentIds);c.has(i)?c.delete(i):(c.add(i),l.agentsWithUnseenOutput.has(i)&&(l.agentsWithUnseenOutput=new Set(l.agentsWithUnseenOutput),l.agentsWithUnseenOutput.delete(i),o=!0)),l.selectedAgentIds=c}),o&&a&&a(),t()},selectMultiple(i){e(o=>{o.selectedAgentIds=new Set(i)}),t()},deselectAll(){e(i=>{i.selectedAgentIds=new Set}),t()},spawnAgent(i,o,l,c,d,f,p,m,b,x,w,k,S){Eu("[Store] spawnAgent called with:",{name:i,agentClass:o,cwd:l,position:c,sessionId:d,useChrome:f,permissionMode:p,initialSkillIds:m,provider:b,codexConfig:x,codexModel:w,model:k,customInstructions:S?`${S.length} chars`:void 0});const j=c?{x:c.x,y:0,z:c.z}:void 0,C={type:"spawn_agent",payload:{name:i,class:o,cwd:l,position:j,sessionId:d,useChrome:f,permissionMode:p,initialSkillIds:m,provider:b,codexConfig:x,codexModel:w,model:k,customInstructions:S}},N=n();if(!N){console.error("[Store] sendMessage is not defined! WebSocket may not be connected");return}N(C)},createDirectoryAndSpawn(i,o,l){var c;(c=n())==null||c({type:"create_directory",payload:{path:i,name:o,class:l}})},sendCommand(i,o){var l;e(c=>{c.lastPrompts.set(i,{text:o,timestamp:Date.now()})}),t(),(l=n())==null||l({type:"send_command",payload:{agentId:i,command:o}})},refreshAgentContext(i){var o;(o=n())==null||o({type:"request_context_stats",payload:{agentId:i}})},moveAgentLocal(i,o){const c=s().agents.get(i);c&&(e(d=>{const f={...c,position:o},p=new Map(d.agents);p.set(i,f),d.agents=p}),t())},moveAgent(i,o){var d;const c=s().agents.get(i);c&&(e(f=>{const p={...c,position:o},m=new Map(f.agents);m.set(i,p),f.agents=m}),t()),(d=n())==null||d({type:"move_agent",payload:{agentId:i,position:o}})},killAgent(i){var o;(o=n())==null||o({type:"kill_agent",payload:{agentId:i}})},stopAgent(i){var o;(o=n())==null||o({type:"stop_agent",payload:{agentId:i}})},clearContext(i){var o;(o=n())==null||o({type:"clear_context",payload:{agentId:i}}),e(l=>{const c=l.agents.get(i);if(c){const p={...c,status:"idle",currentTask:void 0,taskLabel:void 0,currentTool:void 0,lastAssignedTask:void 0,lastAssignedTaskTime:void 0,sessionId:void 0,tokensUsed:0,contextUsed:0,contextStats:void 0},m=new Map(l.agents);m.set(i,p),l.agents=m}const d=new Map(l.agentOutputs);d.delete(i),l.agentOutputs=d;const f=new Map(l.lastPrompts);f.delete(i),l.lastPrompts=f}),t()},collapseContext(i){var o;(o=n())==null||o({type:"collapse_context",payload:{agentId:i}})},removeAgentFromServer(i){var o;(o=n())==null||o({type:"remove_agent",payload:{agentId:i}})},renameAgent(i,o){var d;const c=s().agents.get(i);c&&(e(f=>{const p={...c,name:o},m=new Map(f.agents);m.set(i,p),f.agents=m}),t()),(d=n())==null||d({type:"rename_agent",payload:{agentId:i,name:o}})},updateAgentProperties(i,o){var d;const c=s().agents.get(i);c&&(e(f=>{const p={...c};o.class!==void 0&&(p.class=o.class),o.permissionMode!==void 0&&(p.permissionMode=o.permissionMode),o.model!==void 0&&(p.model=o.model),o.provider!==void 0&&(p.provider=o.provider),o.codexConfig!==void 0&&(p.codexConfig=o.codexConfig),o.codexModel!==void 0&&(p.codexModel=o.codexModel),o.useChrome!==void 0&&(p.useChrome=o.useChrome),o.cwd!==void 0&&(p.cwd=o.cwd);const m=new Map(f.agents);m.set(i,p),f.agents=m}),t()),(d=n())==null||d({type:"update_agent_properties",payload:{agentId:i,updates:o}})},getTotalTokens(){let i=0;for(const o of s().agents.values())i+=o.tokensUsed;return i},getSelectedAgents(){const i=s(),o=[];for(const l of i.selectedAgentIds){const c=i.agents.get(l);c&&o.push(c)}return o},addActivity(i){e(o=>{o.activities.unshift(i),o.activities.length>100&&o.activities.pop()}),t()},addToolExecution(i,o,l){const d=s().agents.get(i);e(f=>{f.toolExecutions.unshift({agentId:i,agentName:(d==null?void 0:d.name)||"Unknown",toolName:o,toolInput:l,timestamp:Date.now()}),f.toolExecutions.length>200&&f.toolExecutions.pop()}),t()},addFileChange(i,o,l){const d=s().agents.get(i);e(f=>{f.fileChanges.unshift({agentId:i,agentName:(d==null?void 0:d.name)||"Unknown",action:o,filePath:l,timestamp:Date.now()}),f.fileChanges.length>200&&f.fileChanges.pop()}),t()},async loadToolHistory(){try{const o=await(await yt(ct("/api/agents/tool-history?limit=100"))).json();e(l=>{o.toolExecutions&&(l.toolExecutions=o.toolExecutions),o.fileChanges&&(l.fileChanges=o.fileChanges)}),t()}catch(i){console.error("[Store] Failed to load tool history:",i)}}}}const fC=200,Rz=1024*1024,mC=64*1024,gC=`
|
|
150
150
|
|
|
151
151
|
[output truncated]`;function gd(s){return s.length*2}function Lz(s,e){if(gd(s)<=e)return s;const t=gd(gC),n=Math.max(0,e-t),a=Math.floor(n/2);return`${s.slice(0,a)}${gC}`}function bC(s){return gd(s.text)<=mC?s:{...s,text:Lz(s.text,mC)}}function yC(s){let e=s;e.length>fC&&(e=e.slice(-fC));let t=e.reduce((n,a)=>n+gd(a.text),0);for(;e.length>1&&t>Rz;)t-=gd(e[0].text),e=e.slice(1);return e}function Oz(s,e,t,n){return{addOutput(a,i){const o=n();e(l=>{const c=l.agentOutputs.get(a)||[],d=bC(i);if(d.uuid&&c.some(b=>b.uuid===d.uuid))return;const f=yC([...c,d]);pd.info(`Store: ${c.length} -> ${f.length}`,{agentId:a,text:d.text.slice(0,60),isStreaming:d.isStreaming,listeners:o},"store:addOutput");const p=new Map(l.agentOutputs);p.set(a,f),l.agentOutputs=p}),t()},clearOutputs(a){e(i=>{const o=new Map(i.agentOutputs);o.delete(a),i.agentOutputs=o}),t()},getOutputs(a){return s().agentOutputs.get(a)||[]},addUserPromptToOutput(a,i){this.addOutput(a,{text:i,isStreaming:!1,timestamp:Date.now(),isUserPrompt:!0})},getLastPrompt(a){return s().lastPrompts.get(a)},setLastPrompt(a,i){e(o=>{o.lastPrompts.set(a,{text:i,timestamp:Date.now()})}),t()},preserveOutputs(){const a=s(),i=new Map;for(const[o,l]of a.agentOutputs)i.set(o,l.map(c=>({...c})));return i},mergeOutputsWithHistory(a,i,o){let l=[...i,...o].map(bC);return l.sort((c,d)=>c.timestamp-d.timestamp),l=yC(l),e(c=>{const d=new Map(c.agentOutputs);d.set(a,l),c.agentOutputs=d}),t(),l}}}function Iz(s,e,t,n){return{setSupervisorReport(a){e(i=>{i.supervisor.lastReport=a,i.supervisor.lastReportTime=a.timestamp;const o=new Map(i.supervisor.agentHistories);for(const l of a.agentSummaries){const c=o.get(l.agentId)||[],d={id:`${a.id}-${l.agentId}`,timestamp:a.timestamp,reportId:a.id,analysis:l};if(!c.some(f=>f.reportId===a.id)){const f=[d,...c];f.length>50&&f.pop(),o.set(l.agentId,f)}}i.supervisor.agentHistories=o,i.supervisor.generatingReport=!1}),t()},addNarrative(a,i){e(o=>{const l=o.supervisor.narratives.get(a)||[];l.unshift(i),l.length>50&&l.pop();const c=new Map(o.supervisor.narratives);c.set(a,l),o.supervisor.narratives=c}),t()},getNarratives(a){return s().supervisor.narratives.get(a)||[]},setSupervisorStatus(a){e(i=>{i.supervisor.enabled=a.enabled,a.autoReportOnComplete!==void 0&&(i.supervisor.autoReportOnComplete=a.autoReportOnComplete),i.supervisor.lastReportTime=a.lastReportTime,i.supervisor.nextReportTime=a.nextReportTime}),t()},setSupervisorConfig(a){var i;(i=n())==null||i({type:"set_supervisor_config",payload:a})},requestSupervisorReport(){var a;e(i=>{i.supervisor.generatingReport=!0}),t(),(a=n())==null||a({type:"request_supervisor_report",payload:{}})},requestAgentSupervisorHistory(a){var i;e(o=>{o.supervisor.loadingHistoryForAgent=a}),t(),(i=n())==null||i({type:"request_agent_supervisor_history",payload:{agentId:a}})},setAgentSupervisorHistory(a){e(i=>{const o=new Map(i.supervisor.agentHistories);o.set(a.agentId,a.entries),i.supervisor.agentHistories=o,i.supervisor.historyFetchedForAgents.add(a.agentId),i.supervisor.loadingHistoryForAgent===a.agentId&&(i.supervisor.loadingHistoryForAgent=null)}),t()},getAgentSupervisorHistory(a){return s().supervisor.agentHistories.get(a)||[]},addAgentAnalysis(a,i){e(o=>{const l=new Map(o.supervisor.agentHistories),c=l.get(a)||[],d={id:`single-${Date.now()}-${a}`,timestamp:Date.now(),reportId:`single-${Date.now()}`,analysis:i};if(!c.some(p=>Math.abs(p.timestamp-d.timestamp)<5e3&&p.analysis.statusDescription===i.statusDescription)){const p=[d,...c];p.length>50&&p.pop(),l.set(a,p),o.supervisor.agentHistories=l}}),t()},isLoadingHistoryForAgent(a){return s().supervisor.loadingHistoryForAgent===a},hasHistoryBeenFetched(a){return s().supervisor.historyFetchedForAgents.has(a)},setGlobalUsage(a){console.log("[Supervisor] setGlobalUsage called with:",a),e(i=>{i.supervisor.globalUsage=a,i.supervisor.refreshingUsage=!1}),t()},requestGlobalUsage(){console.log("[Supervisor] requestGlobalUsage called"),e(i=>{i.supervisor.refreshingUsage=!0}),t();const a=n();console.log("[Supervisor] sendMessage function:",a?"available":"null"),a?(console.log("[Supervisor] Sending request_global_usage message"),a({type:"request_global_usage",payload:{}})):console.warn("[Supervisor] Cannot send request_global_usage - no sendMessage function")},getGlobalUsage(){return s().supervisor.globalUsage}}}function Bz(s,e,t,n){const a=()=>{var l;const o=Array.from(s().areas.values());(l=n())==null||l({type:"sync_areas",payload:o})},i=()=>{e(o=>{o.areas=new Map(o.areas)})};return{setActiveTool(o){e(l=>{l.activeTool=o,o!=="select"&&(l.selectedAreaId=null)}),t()},selectArea(o){e(l=>{l.selectedAreaId=o}),t()},addArea(o){if(o.zIndex===void 0||o.zIndex===null){const l=Array.from(s().areas.values()),c=l.length===0?-1:Math.max(...l.map(d=>d.zIndex??0));o.zIndex=c+1}e(l=>{l.areas.set(o.id,o)}),i(),a(),t()},updateArea(o,l){s().areas.get(o)&&(e(f=>{Object.assign(f.areas.get(o),l)}),i(),a(),t())},updateAreaLocal(o,l){s().areas.get(o)&&(e(f=>{Object.assign(f.areas.get(o),l)}),i(),t())},deleteArea(o){e(l=>{l.areas.delete(o),l.selectedAreaId===o&&(l.selectedAreaId=null)}),i(),a(),t()},assignAgentToArea(o,l){const d=s().areas.get(l);d&&!d.assignedAgentIds.includes(o)&&(e(f=>{for(const p of f.areas.values()){const m=p.assignedAgentIds.indexOf(o);m!==-1&&p.assignedAgentIds.splice(m,1)}f.areas.get(l).assignedAgentIds.push(o)}),i(),a(),t())},unassignAgentFromArea(o,l){const d=s().areas.get(l);if(d){const f=d.assignedAgentIds.indexOf(o);f!==-1&&(e(p=>{p.areas.get(l).assignedAgentIds.splice(f,1)}),i(),a(),t())}},addDirectoryToArea(o,l){const d=s().areas.get(o);d&&!d.directories.includes(l)&&(e(f=>{f.areas.get(o).directories.push(l)}),i(),a(),t())},removeDirectoryFromArea(o,l){const d=s().areas.get(o);if(d){const f=d.directories.indexOf(l);f!==-1&&(e(p=>{p.areas.get(o).directories.splice(f,1)}),i(),a(),t())}},getAreaDirectories(o){const l=s().areas.get(o);return(l==null?void 0:l.directories)||[]},isPositionInArea(o,l){if(l.type==="rectangle"&&l.width&&l.height){const c=l.width/2,d=l.height/2;return o.x>=l.center.x-c&&o.x<=l.center.x+c&&o.z>=l.center.z-d&&o.z<=l.center.z+d}else if(l.type==="circle"&&l.radius){const c=o.x-l.center.x,d=o.z-l.center.z;return c*c+d*d<=l.radius*l.radius}return!1},getAreaForAgent(o){const l=s(),c=l.agents.get(o);if(!c)return null;for(const d of l.areas.values())if(this.isPositionInArea({x:c.position.x,z:c.position.z},d))return d;return null},setAreasFromServer(o){e(l=>{const c=new Map;for(let d=0;d<o.length;d++){const f=o[d];f.directories||(f.directories=[]),(f.zIndex===void 0||f.zIndex===null)&&(f.zIndex=d),f.archived===void 0&&(f.archived=!1),c.set(f.id,f)}l.areas=c}),t()},getAreasInZOrder(){return Array.from(s().areas.values()).sort((l,c)=>(l.zIndex??0)-(c.zIndex??0))},getNextZIndex(){const o=Array.from(s().areas.values());return o.length===0?0:Math.max(...o.map(c=>c.zIndex??0))+1},bringAreaToFront(o){const l=s(),c=l.areas.get(o);if(!c)return;const d=Array.from(l.areas.values()),f=d.length===0?-1:Math.max(...d.map(x=>x.zIndex??0)),p=f+1,m=c.zIndex??0,b=d.filter(x=>(x.zIndex??0)===f);m===f&&b.length===1||(e(x=>{x.areas.get(o).zIndex=p}),i(),a(),t())},sendAreaToBack(o){const l=s(),c=l.areas.get(o);if(!c)return;const d=Array.from(l.areas.values()),f=Math.min(...d.map(b=>b.zIndex??0)),p=c.zIndex??0,m=d.filter(b=>(b.zIndex??0)===f);p===f&&m.length===1||(e(b=>{for(const x of b.areas.values())x.id!==o&&(x.zIndex=(x.zIndex??0)+1);b.areas.get(o).zIndex=0}),i(),a(),t())},setAreaZIndex(o,l){s().areas.get(o)&&(e(f=>{f.areas.get(o).zIndex=l}),i(),a(),t())},archiveArea(o,l){const d=s().areas.get(o);if(!(!d||d.archived)){if(l)for(const f of d.assignedAgentIds)l(f);e(f=>{const p=f.areas.get(o);p.archived=!0,p.archivedAt=Date.now(),p.originalCenter={...p.center},f.selectedAreaId===o&&(f.selectedAreaId=null)}),i(),a(),t()}},restoreArchivedArea(o,l){const c=s(),d=c.areas.get(o);if(!d||!d.archived)return;const f=d.center,p=l||d.originalCenter||d.center,m=p.x-f.x,b=p.z-f.z,x=Array.from(c.areas.values()),k=(x.length===0?-1:Math.max(...x.map(S=>S.zIndex??0)))+1;e(S=>{const j=S.areas.get(o);if(j.archived=!1,j.archivedAt=void 0,j.center=p,j.zIndex=k,m!==0||b!==0)for(const C of j.assignedAgentIds){const N=S.agents.get(C);N&&(N.position={x:N.position.x+m,y:N.position.y,z:N.position.z+b})}}),i(),a(),t()},getArchivedAreas(){return Array.from(s().areas.values()).filter(o=>o.archived===!0)},getVisibleAreas(){return Array.from(s().areas.values()).filter(o=>!o.archived)},isAgentInArchivedArea(o){const l=s();for(const c of l.areas.values())if(c.archived&&c.assignedAgentIds.includes(o))return!0;return!1}}}function zz(s,e,t,n){const a=()=>{var l;const o=Array.from(s().buildings.values());(l=n())==null||l({type:"sync_buildings",payload:o})},i={selectBuilding(o){e(l=>{l.selectedBuildingIds.clear(),o&&l.selectedBuildingIds.add(o)}),t()},selectMultipleBuildings(o){e(l=>{l.selectedBuildingIds.clear();for(const c of o)l.selectedBuildingIds.add(c)}),t()},toggleBuildingSelection(o){e(l=>{l.selectedBuildingIds.has(o)?l.selectedBuildingIds.delete(o):l.selectedBuildingIds.add(o)}),t()},isBuildingSelected(o){return s().selectedBuildingIds.has(o)},getSelectedBuildingIds(){return Array.from(s().selectedBuildingIds)},deleteSelectedBuildings(){var l,c,d;const o=s();for(const f of o.selectedBuildingIds){const p=o.buildings.get(f);((l=p==null?void 0:p.pm2)!=null&&l.enabled||(c=p==null?void 0:p.docker)!=null&&c.enabled)&&((d=n())==null||d({type:"building_command",payload:{buildingId:f,command:"delete"}}))}e(f=>{const p=new Map(f.buildings);for(const m of f.selectedBuildingIds)p.delete(m);f.buildings=p,f.selectedBuildingIds.clear()}),a(),t()},addBuilding(o){e(l=>{const c=new Map(l.buildings);c.set(o.id,o),l.buildings=c}),a(),t()},updateBuilding(o,l){const d=s().buildings.get(o);d&&(e(f=>{const p=new Map(f.buildings);p.set(o,{...d,...l}),f.buildings=p}),a(),t())},updateBuildingLocal(o,l){const d=s().buildings.get(o);d&&(e(f=>{const p=new Map(f.buildings);p.set(o,{...d,...l}),f.buildings=p}),t())},deleteBuilding(o){var d,f,p;const c=s().buildings.get(o);((d=c==null?void 0:c.pm2)!=null&&d.enabled||(f=c==null?void 0:c.docker)!=null&&f.enabled)&&((p=n())==null||p({type:"building_command",payload:{buildingId:o,command:"delete"}})),e(m=>{const b=new Map(m.buildings);b.delete(o),m.buildings=b,m.selectedBuildingIds.delete(o)}),a(),t()},moveBuilding(o,l){const d=s().buildings.get(o);d&&(e(f=>{const p=new Map(f.buildings);p.set(o,{...d,position:l}),f.buildings=p}),a(),t())},updateBuildingPosition(o,l){i.moveBuilding(o,l)},createBuilding(o){const l={...o,id:`building_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,status:"stopped",createdAt:Date.now()};i.addBuilding(l)},sendBuildingCommand(o,l){var c;(c=n())==null||c({type:"building_command",payload:{buildingId:o,command:l}})},addBuildingLogs(o,l){e(c=>{const f=[...c.buildingLogs.get(o)||[],l];f.length>500&&f.splice(0,f.length-500);const p=new Map(c.buildingLogs);p.set(o,f),c.buildingLogs=p}),t()},getBuildingLogs(o){return s().buildingLogs.get(o)||[]},clearBuildingLogs(o){e(l=>{const c=new Map(l.buildingLogs);c.delete(o),l.buildingLogs=c}),t()},setBuildingsFromServer(o){e(l=>{const c=new Map;for(const d of o)c.set(d.id,d);l.buildings=c}),t()},updateBuildingFromServer(o){e(l=>{const c=new Map(l.buildings);c.set(o.id,o),l.buildings=c}),t()},removeBuildingFromServer(o){e(l=>{const c=new Map(l.buildings);c.delete(o),l.buildings=c,l.selectedBuildingIds.delete(o)}),t()},startLogStreaming(o,l=100){var d,f,p;const c=s().buildings.get(o);e(m=>{const b=new Map(m.streamingBuildingLogs);b.set(o,""),m.streamingBuildingLogs=b}),(d=c==null?void 0:c.docker)!=null&&d.enabled?(f=n())==null||f({type:"docker_logs_start",payload:{buildingId:o,lines:l}}):(p=n())==null||p({type:"pm2_logs_start",payload:{buildingId:o,lines:l}})},stopLogStreaming(o){var c,d,f;const l=s().buildings.get(o);(c=l==null?void 0:l.docker)!=null&&c.enabled?(d=n())==null||d({type:"docker_logs_stop",payload:{buildingId:o}}):(f=n())==null||f({type:"pm2_logs_stop",payload:{buildingId:o}})},appendStreamingLogChunk(o,l){e(c=>{const d=c.streamingBuildingLogs.get(o)||"",f=500*1024;let p=d+l;if(p.length>f){const b=p.indexOf(`
|
|
@@ -205,7 +205,7 @@ ${n.slice(0,500)}${n.length>500?"...":""}`)}if(e.new_string){const n=e.new_strin
|
|
|
205
205
|
+ new:
|
|
206
206
|
${n.slice(0,500)}${n.length>500?"...":""}`)}return t.join(`
|
|
207
207
|
`)}return s==="Bash"&&e.command?e.command:s==="TodoWrite"&&e.todos?e.todos.map((n,a)=>`${n.status==="completed"?"✓":n.status==="in_progress"?"→":"○"} ${n.content}`).join(`
|
|
208
|
-
`):JSON.stringify(e,null,2)}function tH({change:s,formatTime:e,formatPath:t,getActionIcon:n,getActionColor:a,onClick:i,showAgentName:o}){return r.jsxs("div",{className:"tool-history-item file-change clickable",onClick:i,children:[r.jsx("span",{className:"file-action",style:{color:a(s.action)},children:n(s.action)}),r.jsx("span",{className:"file-path",title:s.filePath,children:t(s.filePath)}),o&&r.jsx("span",{className:"tool-agent-compact",children:s.agentName}),r.jsx("span",{className:"tool-time",children:e(s.timestamp)})]})}function nH(){const s=y.useRef(!1),e=y.useRef(!1),t=y.useRef(null),n=y.useRef(0),a=y.useRef(!1),i=y.useRef(0),o=y.useRef(0),l=y.useRef(0),c=y.useCallback((x,w)=>{const k=document.querySelector(".app");k&&(k.style.setProperty("--keyboard-height",`${x}px`),k.style.setProperty("--keyboard-visible",w?"1":"0"),k.classList.toggle("keyboard-visible",w)),n.current=x,a.current=w},[]),d=y.useCallback(()=>{c(0,!1),e.current=!1},[c]),f=y.useCallback(()=>{i.current&&(cancelAnimationFrame(i.current),i.current=0),window.visualViewport&&t.current&&(window.visualViewport.removeEventListener("resize",t.current),window.visualViewport.removeEventListener("scroll",t.current),t.current=null)},[]),p=y.useCallback(()=>{if(s.current=!0,!(window.innerWidth<=768))return;if(f(),e.current=!0,!(typeof window.__nativeKeyboardHeight=="number")&&window.visualViewport){o.current=Math.max(0,window.innerHeight-(window.visualViewport.height+window.visualViewport.offsetTop)),l.current=window.innerHeight;const k=()=>{const S=window.visualViewport;S&&(i.current&&cancelAnimationFrame(i.current),i.current=requestAnimationFrame(()=>{if(!s.current){d();return}const j=S.height+S.offsetTop,C=Math.max(0,window.innerHeight-j),N=Math.max(0,l.current-window.innerHeight),_=C>=120||N>=120;_||(o.current=C,l.current=window.innerHeight);const D=N>=120?0:_?Math.max(0,C):0;(D!==n.current||_!==a.current)&&c(D,_),_&&setTimeout(()=>{e.current=!1},300)}))};t.current=k,window.visualViewport.addEventListener("resize",k),window.visualViewport.addEventListener("scroll",k),k()}},[f,d,c]),m=y.useCallback(()=>{s.current=!1,window.innerWidth<=768&&setTimeout(()=>{s.current||(d(),f())},100)},[d,f]),b=y.useCallback(()=>{window.innerWidth<=768&&n.current>0&&(s.current=!1,d(),f())},[d,f]);return{isInputFocusedRef:s,keyboardScrollLockRef:e,handleInputFocus:p,handleInputBlur:m,cleanup:b}}function sH(){const[s,e]=y.useState(()=>{const c=Ex(mt.TERMINAL_HEIGHT,uC);return c>=dC&&c<=hC?c:uC}),t=y.useRef(!1),n=y.useRef(0),a=y.useRef(0),i=y.useRef(null),o=y.useRef(s);o.current=s;const l=y.useCallback(c=>{c.preventDefault(),t.current=!0,n.current=c.clientY,a.current=s,document.body.style.cursor="ns-resize",document.body.style.userSelect="none",z.setTerminalResizing(!0)},[s]);return y.useEffect(()=>{const c=f=>{if(!t.current)return;const p=f.clientY-n.current,m=window.innerHeight,b=p/m*100,x=Math.min(hC,Math.max(dC,a.current+b));e(x)},d=()=>{t.current&&(t.current=!1,document.body.style.cursor="",document.body.style.userSelect="",_x(mt.TERMINAL_HEIGHT,o.current),z.setTerminalResizing(!1))};return document.addEventListener("mousemove",c),document.addEventListener("mouseup",d),()=>{document.removeEventListener("mousemove",c),document.removeEventListener("mouseup",d)}},[]),{terminalHeight:s,terminalRef:i,handleResizeStart:l}}const aH=120,iH=.7;function rH(){const[s,e]=y.useState(()=>Ex(mt.MOBILE_OVERVIEW_HEIGHT,0)),t=y.useRef(s);t.current=s;const n=y.useRef(0),a=y.useRef(0),i=()=>Math.floor(window.innerHeight*iH),o=p=>Math.min(i(),Math.max(aH,p)),l=y.useCallback(p=>{e(p);const m=document.querySelector(".guake-terminal");m&&m.style.setProperty("--guake-mobile-overview-height",`${p}px`)},[]),c=y.useCallback(()=>{document.body.style.cursor="",document.body.style.userSelect="",_x(mt.MOBILE_OVERVIEW_HEIGHT,t.current),z.setTerminalResizing(!1)},[]),d=y.useCallback(p=>{p.preventDefault();const m=document.querySelector(".agent-overview-panel"),b=t.current>0?t.current:(m==null?void 0:m.getBoundingClientRect().height)??240;n.current=p.clientY,a.current=b,document.body.style.cursor="ns-resize",document.body.style.userSelect="none",z.setTerminalResizing(!0);const x=k=>{const S=k.clientY-n.current;l(o(a.current+S))},w=()=>{document.removeEventListener("mousemove",x),document.removeEventListener("mouseup",w),c()};document.addEventListener("mousemove",x),document.addEventListener("mouseup",w)},[l,c]),f=y.useCallback(p=>{if(p.touches.length!==1)return;const m=document.querySelector(".agent-overview-panel"),b=t.current>0?t.current:(m==null?void 0:m.getBoundingClientRect().height)??240;n.current=p.touches[0].clientY,a.current=b,document.body.style.cursor="ns-resize",document.body.style.userSelect="none",z.setTerminalResizing(!0);const x=k=>{if(k.touches.length!==1)return;k.preventDefault();const S=k.touches[0].clientY-n.current;l(o(a.current+S))},w=()=>{document.removeEventListener("touchmove",x),document.removeEventListener("touchend",w),document.removeEventListener("touchcancel",w),c()};document.addEventListener("touchmove",x,{passive:!1}),document.addEventListener("touchend",w),document.addEventListener("touchcancel",w)},[l,c]);return{mobileOverviewHeight:s,handleResizeMouseDown:d,handleResizeTouchStart:f}}function oH({agents:s,selectedAgentId:e,isOpen:t,overviewPanelOpen:n,loadingHistory:a,hasModalOpen:i=!1,outputRef:o}){const l=Er(),c=Qx(),d=()=>{if(typeof document>"u")return!1;const E=document.querySelector(".agent-bar");if(!E)return!1;const R=window.getComputedStyle(E);if(R.display==="none"||R.visibility==="hidden")return!1;const I=E.getBoundingClientRect();return I.width>0&&I.height>0},f=y.useMemo(()=>{const E=Array.from(s.values());if(!n&&d()){const $=E.filter(W=>!z.isAgentInArchivedArea(W.id)).sort((W,ee)=>(W.createdAt||0)-(ee.createdAt||0)),re=Ba(mt.AGENT_ORDER,[]),le=new Set($.map(W=>W.id)),F=[...re.filter(W=>le.has(W)),...$.filter(W=>!re.includes(W.id)).map(W=>W.id)],ne=new Map($.map(W=>[W.id,W]));return F.map(W=>ne.get(W)).filter(W=>W!==void 0)}const R=Ba(mt.AOP_CONFIG,{groupByArea:!0,sortMode:"recent",filterMode:"all",sameAreaOnly:!1}),I=z.getState(),O=new Map;for(const $ of c)O.has($.agentId)||O.set($.agentId,$.timestamp);const B=new Map;for(const $ of E){const re=z.getAreaForAgent($.id);!re||re.archived||B.set($.id,re.id)}let q=E.filter($=>{if(R.filterMode==="working"&&$.status!=="working"||R.filterMode==="idle"&&$.status!=="idle"||R.filterMode==="error"&&$.status!=="error")return!1;if(R.sameAreaOnly&&e){const re=B.get(e)??null,le=B.get($.id)??null;if(re!==le)return!1}return!0});const H=$=>[...$].sort((re,le)=>{if(R.sortMode==="name")return re.name.localeCompare(le.name);if(R.sortMode==="status"){const W=I.agentsWithUnseenOutput.has(re.id),ee=I.agentsWithUnseenOutput.has(le.id),J=["working","waiting_input","waiting_permission","error","idle","stopped"],V=J.indexOf(re.status)-J.indexOf(le.status);return V!==0?V:W!==ee?W?-1:1:(le.lastActivity||0)-(re.lastActivity||0)}const F=O.get(re.id)||0;return(O.get(le.id)||0)-F});if(!R.groupByArea)return H(q);const G=[],K=new Set;for(const[$,re]of l){if(re.archived)continue;const le=q.filter(F=>B.get(F.id)===$);if(le.length>0){const F=H(le);G.push(...F);for(const ne of F)K.add(ne.id)}}const X=H(q.filter($=>!K.has($.id)));return G.push(...X),q=G,q},[s,l,c,e,n]),[p,m]=y.useState(0),[b,x]=y.useState(""),w=y.useRef(null),[k,S]=y.useState(null),j=e?f.findIndex(E=>E.id===e):-1,C=j>0?f[j-1]:f[f.length-1],N=j<f.length-1?f[j+1]:f[0],_=y.useRef(null),D=y.useCallback(()=>{if(!e||f.length<=1)return;const E=f.findIndex(I=>I.id===e);if(E===-1)return;const R=(E-1+f.length)%f.length;S("left"),m(0),x(""),z.setLastSelectionViaSwipe(!0),z.selectAgent(f[R].id)},[e,f]),L=y.useCallback(()=>{if(!e||f.length<=1)return;const E=f.findIndex(I=>I.id===e);if(E===-1)return;const R=(E+1)%f.length;S("right"),m(0),x(""),z.setLastSelectionViaSwipe(!0),z.selectAgent(f[R].id)},[e,f]),M=y.useCallback(E=>{m(E),x("is-swiping")},[]),P=y.useCallback(()=>{x("is-animating"),m(0),w.current&&clearTimeout(w.current),w.current=setTimeout(()=>{x("")},100)},[]);return y.useEffect(()=>{if(!k||a)return;const E=k;S(null),requestAnimationFrame(()=>{x(E==="left"?"swipe-in-left":"swipe-in-right"),w.current=setTimeout(()=>{x("")},120)})},[k,a]),y.useEffect(()=>()=>{w.current&&clearTimeout(w.current)},[]),yj(_,{enabled:t&&f.length>1,onSwipeLeft:L,onSwipeRight:D,onSwipeMove:M,onSwipeCancel:P,threshold:40,maxVerticalMovement:50}),yj(o,{enabled:t&&f.length>1,onSwipeLeft:L,onSwipeRight:D,onSwipeMove:M,onSwipeCancel:P,threshold:50,maxVerticalMovement:35}),y.useEffect(()=>{const E=R=>{if(!t||f.length<=1||i)return;const I=z.getShortcuts(),O=I.find(X=>X.id==="prev-working-agent"),B=I.find(X=>X.id==="next-working-agent"),q=I.find(X=>X.id==="prev-agent-terminal"),H=I.find(X=>X.id==="next-agent-terminal"),G=R.altKey&&R.shiftKey&&!R.ctrlKey&&!R.metaKey&&R.code==="KeyJ",K=R.altKey&&R.shiftKey&&!R.ctrlKey&&!R.metaKey&&R.code==="KeyK";if(kt(R,O)){R.preventDefault();const X=z.getState();let $=f.filter(F=>X.agentsWithUnseenOutput.has(F.id));if($.length===0&&($=f.filter(F=>F.status==="working")),$.length===0)return;const re=e?$.findIndex(F=>F.id===e):-1,le=re===-1?$.length-1:(re-1+$.length)%$.length;z.selectAgent($[le].id);return}if(kt(R,B)){R.preventDefault();const X=z.getState();let $=f.filter(F=>X.agentsWithUnseenOutput.has(F.id));if($.length===0&&($=f.filter(F=>F.status==="working")),$.length===0)return;const re=e?$.findIndex(F=>F.id===e):-1,le=re===-1?0:(re+1)%$.length;z.selectAgent($[le].id);return}if(kt(R,q)||K){R.preventDefault(),D();return}if(kt(R,H)||G){R.preventDefault(),L();return}};return document.addEventListener("keydown",E),()=>document.removeEventListener("keydown",E)},[t,f,e,D,L,i]),{sortedAgents:f,swipeOffset:p,swipeAnimationClass:b,currentAgentIndex:j,prevAgent:C,nextAgent:N,headerRef:_,outputRef:o,handleSwipeLeft:D,handleSwipeRight:L}}function lH({selectedAgentId:s,isOpen:e}){const[t,n]=y.useState(!1),[a,i]=y.useState(""),[o,l]=y.useState([]),[c,d]=y.useState(!1),f=y.useRef(null),p=y.useCallback(async()=>{if(!s||!a.trim()){l([]);return}d(!0);try{const w=await(await yt(ct(`/api/agents/${s}/search?q=${encodeURIComponent(a)}&limit=100`))).json();l(w.matches||[])}catch(x){console.error("Search failed:",x),l([])}finally{d(!1)}},[s,a]);y.useEffect(()=>{t&&f.current&&f.current.focus()},[t]);const m=y.useCallback(()=>{n(x=>(x&&(l([]),i("")),!x))},[]),b=y.useCallback(()=>{n(!1),l([]),i("")},[]);return y.useEffect(()=>{const x=w=>{(w.ctrlKey||w.metaKey)&&w.key==="f"&&e&&(w.preventDefault(),m())};return document.addEventListener("keydown",x),()=>document.removeEventListener("keydown",x)},[e,m]),{searchMode:t,setSearchMode:n,searchQuery:a,setSearchQuery:i,searchResults:o,searchLoading:c,searchInputRef:f,handleSearch:p,toggleSearch:m,closeSearch:b}}const cH=new Map,uH=[];function kE({selectedAgentId:s}){const[e,t]=y.useState(new Map),[n,a]=y.useState(new Map),[i,o]=y.useState(new Map),[l,c]=y.useState(new Map),d=y.useRef(new Map),f=y.useRef(0);y.useEffect(()=>{if(!s||e.has(s))return;const I=ra(`${mt.INPUT_TEXT_PREFIX}${s}`);I&&t(B=>new Map(B).set(s,I));const O=ra(`${mt.PASTED_TEXTS_PREFIX}${s}`);if(O)try{const B=JSON.parse(O),q=new Map(B);o(G=>new Map(G).set(s,q));const H=Math.max(0,...B.map(([G])=>G));d.current.set(s,H)}catch{}},[s,e]);const p=s&&e.get(s)||"",m=s&&n.get(s)||!1,b=(s?i.get(s):void 0)||cH,x=(s?l.get(s):void 0)||uH,w=p.includes(`
|
|
208
|
+
`):JSON.stringify(e,null,2)}function tH({change:s,formatTime:e,formatPath:t,getActionIcon:n,getActionColor:a,onClick:i,showAgentName:o}){return r.jsxs("div",{className:"tool-history-item file-change clickable",onClick:i,children:[r.jsx("span",{className:"file-action",style:{color:a(s.action)},children:n(s.action)}),r.jsx("span",{className:"file-path",title:s.filePath,children:t(s.filePath)}),o&&r.jsx("span",{className:"tool-agent-compact",children:s.agentName}),r.jsx("span",{className:"tool-time",children:e(s.timestamp)})]})}function nH(){const s=y.useRef(!1),e=y.useRef(!1),t=y.useRef(null),n=y.useRef(0),a=y.useRef(!1),i=y.useRef(0),o=y.useRef(0),l=y.useRef(0),c=y.useCallback((x,w)=>{const k=document.querySelector(".app");k&&(k.style.setProperty("--keyboard-height",`${x}px`),k.style.setProperty("--keyboard-visible",w?"1":"0"),k.classList.toggle("keyboard-visible",w)),n.current=x,a.current=w},[]),d=y.useCallback(()=>{c(0,!1),e.current=!1},[c]),f=y.useCallback(()=>{i.current&&(cancelAnimationFrame(i.current),i.current=0),window.visualViewport&&t.current&&(window.visualViewport.removeEventListener("resize",t.current),window.visualViewport.removeEventListener("scroll",t.current),t.current=null)},[]),p=y.useCallback(()=>{if(s.current=!0,!(window.innerWidth<=768))return;if(f(),e.current=!0,!(typeof window.__nativeKeyboardHeight=="number")&&window.visualViewport){o.current=Math.max(0,window.innerHeight-(window.visualViewport.height+window.visualViewport.offsetTop)),l.current=window.innerHeight;const k=()=>{const S=window.visualViewport;S&&(i.current&&cancelAnimationFrame(i.current),i.current=requestAnimationFrame(()=>{if(!s.current){d();return}const j=S.height+S.offsetTop,C=Math.max(0,window.innerHeight-j),N=Math.max(0,l.current-window.innerHeight),_=C>=120||N>=120;_||(o.current=C,l.current=window.innerHeight);const D=N>=120?0:_?Math.max(0,C):0;(D!==n.current||_!==a.current)&&c(D,_),_&&setTimeout(()=>{e.current=!1},300)}))};t.current=k,window.visualViewport.addEventListener("resize",k),window.visualViewport.addEventListener("scroll",k),k()}},[f,d,c]),m=y.useCallback(()=>{s.current=!1,window.innerWidth<=768&&setTimeout(()=>{s.current||(d(),f())},100)},[d,f]),b=y.useCallback(()=>{window.innerWidth<=768&&n.current>0&&(s.current=!1,d(),f())},[d,f]);return{isInputFocusedRef:s,keyboardScrollLockRef:e,handleInputFocus:p,handleInputBlur:m,cleanup:b}}function sH(){const[s,e]=y.useState(()=>{const c=Ex(mt.TERMINAL_HEIGHT,uC);return c>=dC&&c<=hC?c:uC}),t=y.useRef(!1),n=y.useRef(0),a=y.useRef(0),i=y.useRef(null),o=y.useRef(s);o.current=s;const l=y.useCallback(c=>{c.preventDefault(),t.current=!0,n.current=c.clientY,a.current=s,document.body.style.cursor="ns-resize",document.body.style.userSelect="none",z.setTerminalResizing(!0)},[s]);return y.useEffect(()=>{const c=f=>{if(!t.current)return;const p=f.clientY-n.current,m=window.innerHeight,b=p/m*100,x=Math.min(hC,Math.max(dC,a.current+b));e(x)},d=()=>{t.current&&(t.current=!1,document.body.style.cursor="",document.body.style.userSelect="",_x(mt.TERMINAL_HEIGHT,o.current),z.setTerminalResizing(!1))};return document.addEventListener("mousemove",c),document.addEventListener("mouseup",d),()=>{document.removeEventListener("mousemove",c),document.removeEventListener("mouseup",d)}},[]),{terminalHeight:s,terminalRef:i,handleResizeStart:l}}const aH=120,iH=.7;function rH(){const[s,e]=y.useState(()=>Ex(mt.MOBILE_OVERVIEW_HEIGHT,0)),t=y.useRef(s);t.current=s;const n=y.useRef(0),a=y.useRef(0),i=()=>Math.floor(window.innerHeight*iH),o=p=>Math.min(i(),Math.max(aH,p)),l=y.useCallback(p=>{e(p);const m=document.querySelector(".guake-terminal");m&&m.style.setProperty("--guake-mobile-overview-height",`${p}px`)},[]),c=y.useCallback(()=>{document.body.style.cursor="",document.body.style.userSelect="",_x(mt.MOBILE_OVERVIEW_HEIGHT,t.current),z.setTerminalResizing(!1)},[]),d=y.useCallback(p=>{p.preventDefault();const m=document.querySelector(".agent-overview-panel"),b=t.current>0?t.current:(m==null?void 0:m.getBoundingClientRect().height)??240;n.current=p.clientY,a.current=b,document.body.style.cursor="ns-resize",document.body.style.userSelect="none",z.setTerminalResizing(!0);const x=k=>{const S=k.clientY-n.current;l(o(a.current+S))},w=()=>{document.removeEventListener("mousemove",x),document.removeEventListener("mouseup",w),c()};document.addEventListener("mousemove",x),document.addEventListener("mouseup",w)},[l,c]),f=y.useCallback(p=>{if(p.touches.length!==1)return;const m=document.querySelector(".agent-overview-panel"),b=t.current>0?t.current:(m==null?void 0:m.getBoundingClientRect().height)??240;n.current=p.touches[0].clientY,a.current=b,document.body.style.cursor="ns-resize",document.body.style.userSelect="none",z.setTerminalResizing(!0);const x=k=>{if(k.touches.length!==1)return;k.preventDefault();const S=k.touches[0].clientY-n.current;l(o(a.current+S))},w=()=>{document.removeEventListener("touchmove",x),document.removeEventListener("touchend",w),document.removeEventListener("touchcancel",w),c()};document.addEventListener("touchmove",x,{passive:!1}),document.addEventListener("touchend",w),document.addEventListener("touchcancel",w)},[l,c]);return{mobileOverviewHeight:s,handleResizeMouseDown:d,handleResizeTouchStart:f}}function oH({agents:s,selectedAgentId:e,isOpen:t,overviewPanelOpen:n,loadingHistory:a,hasModalOpen:i=!1,outputRef:o}){const l=Er(),c=Qx(),d=()=>{if(typeof document>"u")return!1;const E=document.querySelector(".agent-bar");if(!E)return!1;const R=window.getComputedStyle(E);if(R.display==="none"||R.visibility==="hidden")return!1;const I=E.getBoundingClientRect();return I.width>0&&I.height>0},f=y.useMemo(()=>{const E=Array.from(s.values());if(!n&&d()){const $=E.filter(W=>!z.isAgentInArchivedArea(W.id)).sort((W,ee)=>(W.createdAt||0)-(ee.createdAt||0)),re=Ba(mt.AGENT_ORDER,[]),le=new Set($.map(W=>W.id)),F=[...re.filter(W=>le.has(W)),...$.filter(W=>!re.includes(W.id)).map(W=>W.id)],ne=new Map($.map(W=>[W.id,W]));return F.map(W=>ne.get(W)).filter(W=>W!==void 0)}const R=Ba(mt.AOP_CONFIG,{groupByArea:!0,sortMode:"recent",filterMode:"all",sameAreaOnly:!1}),I=z.getState(),O=new Map;for(const $ of c)O.has($.agentId)||O.set($.agentId,$.timestamp);const B=new Map;for(const $ of E){const re=z.getAreaForAgent($.id);!re||re.archived||B.set($.id,re.id)}let q=E.filter($=>{if(R.filterMode==="working"&&$.status!=="working"||R.filterMode==="idle"&&$.status!=="idle"||R.filterMode==="error"&&$.status!=="error")return!1;if(R.sameAreaOnly&&e){const re=B.get(e)??null,le=B.get($.id)??null;if(re!==le)return!1}return!0});const H=$=>[...$].sort((re,le)=>{if(R.sortMode==="name")return re.name.localeCompare(le.name);if(R.sortMode==="status"){const W=re.status==="idle"&&!!re.taskLabel,ee=le.status==="idle"&&!!le.taskLabel;if(W!==ee)return W?-1:1;const J=["working","waiting_input","waiting_permission","error","idle","stopped"],V=J.indexOf(re.status)-J.indexOf(le.status);if(V!==0)return V;const Z=I.agentsWithUnseenOutput.has(re.id),he=I.agentsWithUnseenOutput.has(le.id);return Z!==he?Z?-1:1:(le.lastActivity||0)-(re.lastActivity||0)}const F=O.get(re.id)||0;return(O.get(le.id)||0)-F});if(!R.groupByArea)return H(q);const G=[],K=new Set;for(const[$,re]of l){if(re.archived)continue;const le=q.filter(F=>B.get(F.id)===$);if(le.length>0){const F=H(le);G.push(...F);for(const ne of F)K.add(ne.id)}}const X=H(q.filter($=>!K.has($.id)));return G.push(...X),q=G,q},[s,l,c,e,n]),[p,m]=y.useState(0),[b,x]=y.useState(""),w=y.useRef(null),[k,S]=y.useState(null),j=e?f.findIndex(E=>E.id===e):-1,C=j>0?f[j-1]:f[f.length-1],N=j<f.length-1?f[j+1]:f[0],_=y.useRef(null),D=y.useCallback(()=>{if(!e||f.length<=1)return;const E=f.findIndex(I=>I.id===e);if(E===-1)return;const R=(E-1+f.length)%f.length;S("left"),m(0),x(""),z.setLastSelectionViaSwipe(!0),z.selectAgent(f[R].id)},[e,f]),L=y.useCallback(()=>{if(!e||f.length<=1)return;const E=f.findIndex(I=>I.id===e);if(E===-1)return;const R=(E+1)%f.length;S("right"),m(0),x(""),z.setLastSelectionViaSwipe(!0),z.selectAgent(f[R].id)},[e,f]),M=y.useCallback(E=>{m(E),x("is-swiping")},[]),P=y.useCallback(()=>{x("is-animating"),m(0),w.current&&clearTimeout(w.current),w.current=setTimeout(()=>{x("")},100)},[]);return y.useEffect(()=>{if(!k||a)return;const E=k;S(null),requestAnimationFrame(()=>{x(E==="left"?"swipe-in-left":"swipe-in-right"),w.current=setTimeout(()=>{x("")},120)})},[k,a]),y.useEffect(()=>()=>{w.current&&clearTimeout(w.current)},[]),yj(_,{enabled:t&&f.length>1,onSwipeLeft:L,onSwipeRight:D,onSwipeMove:M,onSwipeCancel:P,threshold:40,maxVerticalMovement:50}),yj(o,{enabled:t&&f.length>1,onSwipeLeft:L,onSwipeRight:D,onSwipeMove:M,onSwipeCancel:P,threshold:50,maxVerticalMovement:35}),y.useEffect(()=>{const E=R=>{if(!t||f.length<=1||i)return;const I=z.getShortcuts(),O=I.find(X=>X.id==="prev-working-agent"),B=I.find(X=>X.id==="next-working-agent"),q=I.find(X=>X.id==="prev-agent-terminal"),H=I.find(X=>X.id==="next-agent-terminal"),G=R.altKey&&R.shiftKey&&!R.ctrlKey&&!R.metaKey&&R.code==="KeyJ",K=R.altKey&&R.shiftKey&&!R.ctrlKey&&!R.metaKey&&R.code==="KeyK";if(kt(R,O)){R.preventDefault();const X=z.getState();let $=f.filter(F=>X.agentsWithUnseenOutput.has(F.id));if($.length===0&&($=f.filter(F=>F.status==="working")),$.length===0)return;const re=e?$.findIndex(F=>F.id===e):-1,le=re===-1?$.length-1:(re-1+$.length)%$.length;z.selectAgent($[le].id);return}if(kt(R,B)){R.preventDefault();const X=z.getState();let $=f.filter(F=>X.agentsWithUnseenOutput.has(F.id));if($.length===0&&($=f.filter(F=>F.status==="working")),$.length===0)return;const re=e?$.findIndex(F=>F.id===e):-1,le=re===-1?0:(re+1)%$.length;z.selectAgent($[le].id);return}if(kt(R,q)||K){R.preventDefault(),D();return}if(kt(R,H)||G){R.preventDefault(),L();return}};return document.addEventListener("keydown",E),()=>document.removeEventListener("keydown",E)},[t,f,e,D,L,i]),{sortedAgents:f,swipeOffset:p,swipeAnimationClass:b,currentAgentIndex:j,prevAgent:C,nextAgent:N,headerRef:_,outputRef:o,handleSwipeLeft:D,handleSwipeRight:L}}function lH({selectedAgentId:s,isOpen:e}){const[t,n]=y.useState(!1),[a,i]=y.useState(""),[o,l]=y.useState([]),[c,d]=y.useState(!1),f=y.useRef(null),p=y.useCallback(async()=>{if(!s||!a.trim()){l([]);return}d(!0);try{const w=await(await yt(ct(`/api/agents/${s}/search?q=${encodeURIComponent(a)}&limit=100`))).json();l(w.matches||[])}catch(x){console.error("Search failed:",x),l([])}finally{d(!1)}},[s,a]);y.useEffect(()=>{t&&f.current&&f.current.focus()},[t]);const m=y.useCallback(()=>{n(x=>(x&&(l([]),i("")),!x))},[]),b=y.useCallback(()=>{n(!1),l([]),i("")},[]);return y.useEffect(()=>{const x=w=>{(w.ctrlKey||w.metaKey)&&w.key==="f"&&e&&(w.preventDefault(),m())};return document.addEventListener("keydown",x),()=>document.removeEventListener("keydown",x)},[e,m]),{searchMode:t,setSearchMode:n,searchQuery:a,setSearchQuery:i,searchResults:o,searchLoading:c,searchInputRef:f,handleSearch:p,toggleSearch:m,closeSearch:b}}const cH=new Map,uH=[];function kE({selectedAgentId:s}){const[e,t]=y.useState(new Map),[n,a]=y.useState(new Map),[i,o]=y.useState(new Map),[l,c]=y.useState(new Map),d=y.useRef(new Map),f=y.useRef(0);y.useEffect(()=>{if(!s||e.has(s))return;const I=ra(`${mt.INPUT_TEXT_PREFIX}${s}`);I&&t(B=>new Map(B).set(s,I));const O=ra(`${mt.PASTED_TEXTS_PREFIX}${s}`);if(O)try{const B=JSON.parse(O),q=new Map(B);o(G=>new Map(G).set(s,q));const H=Math.max(0,...B.map(([G])=>G));d.current.set(s,H)}catch{}},[s,e]);const p=s&&e.get(s)||"",m=s&&n.get(s)||!1,b=(s?i.get(s):void 0)||cH,x=(s?l.get(s):void 0)||uH,w=p.includes(`
|
|
209
209
|
`),S=typeof window<"u"&&window.innerWidth<=768||m||w||p.length>50,j=y.useCallback(I=>{s&&(t(O=>new Map(O).set(s,I)),I?$a(`${mt.INPUT_TEXT_PREFIX}${s}`,I):bj(`${mt.INPUT_TEXT_PREFIX}${s}`))},[s]),C=y.useCallback(I=>{s&&a(O=>new Map(O).set(s,I))},[s]),N=y.useCallback(I=>{s&&o(O=>{const B=new Map(O),q=O.get(s)||new Map,H=typeof I=="function"?I(q):I;if(B.set(s,H),H.size>0){const G=JSON.stringify(Array.from(H.entries()));$a(`${mt.PASTED_TEXTS_PREFIX}${s}`,G)}else bj(`${mt.PASTED_TEXTS_PREFIX}${s}`);return B})},[s]),_=y.useCallback(I=>{s&&c(O=>{const B=new Map(O),q=O.get(s)||[],H=typeof I=="function"?I(q):I;return B.set(s,H),B})},[s]),D=y.useCallback(()=>{if(!s)return 0;const O=(d.current.get(s)||0)+1;return d.current.set(s,O),O},[s]),L=y.useCallback(()=>{s&&d.current.set(s,0)},[s]),M=y.useCallback(I=>{_(O=>O.filter(B=>B.id!==I))},[_]),P=y.useCallback(async(I,O)=>{try{const B=O||(I instanceof File?I.name:""),q=encodeURIComponent(B),H=await yt(ct("/api/files/upload"),{method:"POST",headers:{"Content-Type":I.type||"application/octet-stream","X-Filename":q},body:I});if(!H.ok)return console.error("Upload failed:",await H.text()),null;const G=await H.json();return f.current+=1,{id:f.current,name:G.filename,path:G.absolutePath,isImage:G.isImage,size:G.size}}catch(B){return console.error("Upload error:",B),null}},[]),E=y.useCallback(I=>{let O=I;for(const[B,q]of b){const H=new RegExp(`\\[Pasted text #${B} \\+\\d+ lines\\]`,"g");O=O.replace(H,q)}return O},[b]),R=y.useCallback(()=>{const I=(p.match(/\n/g)||[]).length+1,O=Math.ceil(p.length/60),B=Math.max(I,O,2);return Math.min(B,10)},[p]);return y.useMemo(()=>({command:p,setCommand:j,forceTextarea:m,setForceTextarea:C,useTextarea:S,pastedTexts:b,setPastedTexts:N,incrementPastedCount:D,resetPastedCount:L,attachedFiles:x,setAttachedFiles:_,removeAttachedFile:M,uploadFile:P,expandPastedTexts:E,getTextareaRows:R}),[p,j,m,C,S,b,N,D,L,x,_,M,P,E,R])}const Gb=10;function dH({totalMessages:s,isOpen:e,hasModalOpen:t=!1,scrollContainerRef:n,selectedAgentId:a,inputRef:i,textareaRef:o,useTextarea:l=!1}){const[c,d]=y.useState(-1),f=y.useRef(null);y.useEffect(()=>{f.current!==a&&(d(-1),f.current=a)},[a]);const p=y.useCallback(()=>{d(-1)},[]),m=y.useRef(null),b=_=>1-Math.pow(1-_,3),x=y.useCallback((_,D,L=200)=>{m.current&&cancelAnimationFrame(m.current);const M=_.scrollTop,P=D-M,E=performance.now(),R=I=>{const O=I-E,B=Math.min(O/L,1),q=b(B);_.scrollTop=M+P*q,B<1?m.current=requestAnimationFrame(R):m.current=null};m.current=requestAnimationFrame(R)},[]),w=y.useCallback(_=>{if(!n.current)return;const D=n.current,L=D.querySelector(`[data-message-index="${_}"]`);if(L){const M=D.getBoundingClientRect(),P=L.getBoundingClientRect(),E=20;if(P.top<M.top+E){const R=D.scrollTop+(P.top-M.top)-E;x(D,R,180)}else if(P.bottom>M.bottom-E){const R=D.scrollTop+(P.bottom-M.bottom)+E;x(D,R,180)}}},[n,x]);y.useEffect(()=>()=>{m.current&&cancelAnimationFrame(m.current)},[]);const k=y.useCallback(()=>{s!==0&&d(_=>{let D;return _===-1?D=s-1:_>0?D=_-1:D=0,requestAnimationFrame(()=>w(D)),D})},[s,w]),S=y.useCallback(()=>{s!==0&&d(_=>{let D;if(_===-1)D=s-1;else if(_<s-1)D=_+1;else return-1;return requestAnimationFrame(()=>w(D)),D})},[s,w]),j=y.useCallback(()=>{s!==0&&d(_=>{let D;return _===-1?D=s-1:D=Math.max(0,_-Gb),requestAnimationFrame(()=>w(D)),D})},[s,w]),C=y.useCallback(()=>{s!==0&&d(_=>{let D;if(_===-1)D=s-1;else{if(_+Gb>=s)return-1;D=_+Gb}return requestAnimationFrame(()=>w(D)),D})},[s,w]),N=y.useCallback(_=>c===_,[c]);return y.useEffect(()=>{const _=D=>{if(!e||t)return;const L=z.getShortcuts(),M=L.find(q=>q.id==="prev-message"),P=L.find(q=>q.id==="next-message"),E=L.find(q=>q.id==="page-up-messages"),R=L.find(q=>q.id==="page-down-messages"),I=L.find(q=>q.id==="activate-message");if(kt(D,M)){D.preventDefault(),document.activeElement instanceof HTMLElement&&document.activeElement.blur(),k();return}if(kt(D,P)){D.preventDefault(),document.activeElement instanceof HTMLElement&&document.activeElement.blur(),S();return}if(kt(D,E)){D.preventDefault(),document.activeElement instanceof HTMLElement&&document.activeElement.blur(),j();return}if(kt(D,R)){D.preventDefault(),document.activeElement instanceof HTMLElement&&document.activeElement.blur(),C();return}if(D.key==="Escape"&&c!==-1){D.preventDefault(),p();return}const O=D.target,B=O.tagName==="INPUT"||O.tagName==="TEXTAREA"||O.isContentEditable;if(kt(D,I)&&c!==-1&&!B){D.preventDefault();const q=n.current;if(!q)return;const H=q.querySelector(`[data-message-index="${c}"]`);if(!H)return;const G=[".clickable-path",".output-tool-use.bash-clickable",".clickable-bash",".history-view-md-btn"];for(const X of G){const $=H.querySelector(X);if($){$.click();return}}const K=H.querySelector(".output-tool-use");K!=null&&K.classList.contains("bash-clickable")&&K.click();return}if(c!==-1&&!B){const q=kt(D,M)||kt(D,P)||kt(D,E)||kt(D,R),H=["Escape","Tab","Shift","Control","Alt","Meta","CapsLock"].includes(D.key),G=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"].includes(D.key),K=D.key.startsWith("F")&&D.key.length<=3;if(!q&&!H&&!G&&!K&&!D.ctrlKey&&!D.metaKey){const X=l?o==null?void 0:o.current:i==null?void 0:i.current;if(X){X.focus(),d(-1);return}}}};return document.addEventListener("keydown",_),()=>document.removeEventListener("keydown",_)},[e,t,k,S,j,C,p,c,i,o,l]),y.useEffect(()=>{c>=s&&s>0?d(s-1):s===0&&d(-1)},[s,c]),{selectedIndex:c,setSelectedIndex:d,clearSelection:p,navigatePrev:k,navigateNext:S,navigatePageUp:j,navigatePageDown:C,isSelected:N}}const z1=300;function hH(s){if(!s)return!1;if(s.startsWith("Using tool:"))return!0;if(s.startsWith("Tool input:")||s.startsWith("Tool result:")||s.startsWith("Bash output:")||s.startsWith("Tokens:")||s.startsWith("Cost:"))return!1;if(s.startsWith("[thinking]"))return!0;if(s.startsWith("[raw]")||s.startsWith("Session started:")||s.startsWith("Session initialized"))return!1;const e=s.trim();return!(e.startsWith("{")&&['"file_path"','"command"','"pattern"','"path"','"content"','"old_string"','"new_string"','"query"','"url"','"prompt"','"notebook_path"','"description"','"offset"','"limit"'].some(n=>e.includes(n)))}function pH(s){if(!s||s.startsWith("Using tool:")||s.startsWith("Tool input:")||s.startsWith("Tool result:")||s.startsWith("Tokens:")||s.startsWith("Cost:")||s.startsWith("[thinking]")||s.startsWith("[raw]")||s.startsWith("Session started:")||s.startsWith("Session initialized"))return!1;const e=s.trim();return!(e.startsWith("{")&&['"file_path"','"command"','"pattern"','"path"','"content"','"old_string"','"new_string"','"query"','"url"','"prompt"','"notebook_path"','"description"','"offset"','"limit"'].some(a=>e.includes(a))||[/^(let me|i'll|i will|now i|first,? i|i need to|i should|i'm going to)/i,/^(looking at|reading|checking|searching|exploring|examining|investigating)/i,/^(based on|from what|according to|it (looks|seems|appears))/i,/^(this (shows|indicates|suggests|means|is))/i,/^(the (code|file|function|class|component|implementation))/i,/^(now (let|i))/i].some(n=>n.test(e)))}function vv({outputs:s,viewMode:e}){return y.useMemo(()=>{if(e==="advanced")return s;if(e==="chat")return s.filter(n=>n.isUserPrompt?!0:n.text?pH(n.text):!1);const t=[];for(let n=0;n<s.length;n++){const a=s[n];if(a.isUserPrompt){t.push(a);continue}if(!a.text){t.push(a);continue}if(a.text.startsWith("Using tool:")){const i=a.text.replace("Using tool:","").trim();let o=null,l,c,d,f;for(let m=n+1;m<s.length&&m<=n+5;m++){const b=s[m];if(b.text.startsWith("Tool input:")){const x=b.text.replace("Tool input:","").trim();if(o=IM(i,x),i==="Edit")try{const w=JSON.parse(x);(w.old_string!==void 0||w.new_string!==void 0||w.unified_diff!==void 0)&&(l={oldString:w.old_string||"",newString:w.new_string||"",operation:typeof w.operation=="string"?w.operation:void 0,unifiedDiff:typeof w.unified_diff=="string"?w.unified_diff:void 0})}catch{}if(i==="TodoWrite")try{const w=JSON.parse(x);Array.isArray(w.todos)&&(c=x)}catch{}if(i==="Bash")try{const w=JSON.parse(x);w.command&&(f=w.command)}catch{}}if(i==="Bash"&&b.text.startsWith("Bash output:")&&(d=b.text.replace("Bash output:","").trim()),b.text.startsWith("Using tool:"))break}i==="Bash"&&o&&o.length>z1&&(o=o.substring(0,z1-3)+"...");const p=i==="Bash"&&!d;t.push({...a,_toolKeyParam:o||void 0,_editData:l,_todoInput:c,_bashOutput:d,_bashCommand:f,_isRunning:p});continue}hH(a.text)&&t.push(a)}return t},[s,e])}function SE({outputs:s,viewMode:e}){const t=y.useRef(0),n=y.useRef(0),a=vv({outputs:s,viewMode:e});if(s.length!==t.current||a.length!==n.current){const i=s.length>0?s[s.length-1]:null,o=i!=null&&i.text?i.text.slice(0,40):null;pd.info(`Filter: in=${s.length} out=${a.length} mode=${e}`,{inputLen:s.length,outputLen:a.length,viewMode:e,lastInput:o},"useFilteredOutputs"),t.current=s.length,n.current=a.length}return a}Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/};var F1={},$1;function fH(){return $1||($1=1,(function(s){function e(X,$){return X.replace(/<<(\d+)>>/g,function(re,le){return"(?:"+$[+le]+")"})}function t(X,$,re){return RegExp(e(X,$),"")}function n(X,$){for(var re=0;re<$;re++)X=X.replace(/<<self>>/g,function(){return"(?:"+X+")"});return X.replace(/<<self>>/g,"[^\\s\\S]")}var a={type:"bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",typeDeclaration:"class enum interface record struct",contextual:"add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)",other:"abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield"};function i(X){return"\\b(?:"+X.trim().replace(/ /g,"|")+")\\b"}var o=i(a.typeDeclaration),l=RegExp(i(a.type+" "+a.typeDeclaration+" "+a.contextual+" "+a.other)),c=i(a.typeDeclaration+" "+a.contextual+" "+a.other),d=i(a.type+" "+a.typeDeclaration+" "+a.other),f=n(/<(?:[^<>;=+\-*/%&|^]|<<self>>)*>/.source,2),p=n(/\((?:[^()]|<<self>>)*\)/.source,2),m=/@?\b[A-Za-z_]\w*\b/.source,b=e(/<<0>>(?:\s*<<1>>)?/.source,[m,f]),x=e(/(?!<<0>>)<<1>>(?:\s*\.\s*<<1>>)*/.source,[c,b]),w=/\[\s*(?:,\s*)*\]/.source,k=e(/<<0>>(?:\s*(?:\?\s*)?<<1>>)*(?:\s*\?)?/.source,[x,w]),S=e(/[^,()<>[\];=+\-*/%&|^]|<<0>>|<<1>>|<<2>>/.source,[f,p,w]),j=e(/\(<<0>>+(?:,<<0>>+)+\)/.source,[S]),C=e(/(?:<<0>>|<<1>>)(?:\s*(?:\?\s*)?<<2>>)*(?:\s*\?)?/.source,[j,x,w]),N={keyword:l,punctuation:/[<>()?,.:[\]]/},_=/'(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'/.source,D=/"(?:\\.|[^\\"\r\n])*"/.source,L=/@"(?:""|\\[\s\S]|[^\\"])*"(?!")/.source;s.languages.csharp=s.languages.extend("clike",{string:[{pattern:t(/(^|[^$\\])<<0>>/.source,[L]),lookbehind:!0,greedy:!0},{pattern:t(/(^|[^@$\\])<<0>>/.source,[D]),lookbehind:!0,greedy:!0}],"class-name":[{pattern:t(/(\busing\s+static\s+)<<0>>(?=\s*;)/.source,[x]),lookbehind:!0,inside:N},{pattern:t(/(\busing\s+<<0>>\s*=\s*)<<1>>(?=\s*;)/.source,[m,C]),lookbehind:!0,inside:N},{pattern:t(/(\busing\s+)<<0>>(?=\s*=)/.source,[m]),lookbehind:!0},{pattern:t(/(\b<<0>>\s+)<<1>>/.source,[o,b]),lookbehind:!0,inside:N},{pattern:t(/(\bcatch\s*\(\s*)<<0>>/.source,[x]),lookbehind:!0,inside:N},{pattern:t(/(\bwhere\s+)<<0>>/.source,[m]),lookbehind:!0},{pattern:t(/(\b(?:is(?:\s+not)?|as)\s+)<<0>>/.source,[k]),lookbehind:!0,inside:N},{pattern:t(/\b<<0>>(?=\s+(?!<<1>>|with\s*\{)<<2>>(?:\s*[=,;:{)\]]|\s+(?:in|when)\b))/.source,[C,d,m]),inside:N}],keyword:l,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:[dflmu]|lu|ul)?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),s.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),s.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:t(/([(,]\s*)<<0>>(?=\s*:)/.source,[m]),lookbehind:!0,alias:"punctuation"}}),s.languages.insertBefore("csharp","class-name",{namespace:{pattern:t(/(\b(?:namespace|using)\s+)<<0>>(?:\s*\.\s*<<0>>)*(?=\s*[;{])/.source,[m]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:t(/(\b(?:default|sizeof|typeof)\s*\(\s*(?!\s))(?:[^()\s]|\s(?!\s)|<<0>>)*(?=\s*\))/.source,[p]),lookbehind:!0,alias:"class-name",inside:N},"return-type":{pattern:t(/<<0>>(?=\s+(?:<<1>>\s*(?:=>|[({]|\.\s*this\s*\[)|this\s*\[))/.source,[C,x]),inside:N,alias:"class-name"},"constructor-invocation":{pattern:t(/(\bnew\s+)<<0>>(?=\s*[[({])/.source,[C]),lookbehind:!0,inside:N,alias:"class-name"},"generic-method":{pattern:t(/<<0>>\s*<<1>>(?=\s*\()/.source,[m,f]),inside:{function:t(/^<<0>>/.source,[m]),generic:{pattern:RegExp(f),alias:"class-name",inside:N}}},"type-list":{pattern:t(/\b((?:<<0>>\s+<<1>>|record\s+<<1>>\s*<<5>>|where\s+<<2>>)\s*:\s*)(?:<<3>>|<<4>>|<<1>>\s*<<5>>|<<6>>)(?:\s*,\s*(?:<<3>>|<<4>>|<<6>>))*(?=\s*(?:where|[{;]|=>|$))/.source,[o,b,m,C,l.source,p,/\bnew\s*\(\s*\)/.source]),lookbehind:!0,inside:{"record-arguments":{pattern:t(/(^(?!new\s*\()<<0>>\s*)<<1>>/.source,[b,p]),lookbehind:!0,greedy:!0,inside:s.languages.csharp},keyword:l,"class-name":{pattern:RegExp(C),greedy:!0,inside:N},punctuation:/[,()]/}},preprocessor:{pattern:/(^[\t ]*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var M=D+"|"+_,P=e(/\/(?![*/])|\/\/[^\r\n]*[\r\n]|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>/.source,[M]),E=n(e(/[^"'/()]|<<0>>|\(<<self>>*\)/.source,[P]),2),R=/\b(?:assembly|event|field|method|module|param|property|return|type)\b/.source,I=e(/<<0>>(?:\s*\(<<1>>*\))?/.source,[x,E]);s.languages.insertBefore("csharp","class-name",{attribute:{pattern:t(/((?:^|[^\s\w>)?])\s*\[\s*)(?:<<0>>\s*:\s*)?<<1>>(?:\s*,\s*<<1>>)*(?=\s*\])/.source,[R,I]),lookbehind:!0,greedy:!0,inside:{target:{pattern:t(/^<<0>>(?=\s*:)/.source,[R]),alias:"keyword"},"attribute-arguments":{pattern:t(/\(<<0>>*\)/.source,[E]),inside:s.languages.csharp},"class-name":{pattern:RegExp(x),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var O=/:[^}\r\n]+/.source,B=n(e(/[^"'/()]|<<0>>|\(<<self>>*\)/.source,[P]),2),q=e(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[B,O]),H=n(e(/[^"'/()]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>|\(<<self>>*\)/.source,[M]),2),G=e(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[H,O]);function K(X,$){return{interpolation:{pattern:t(/((?:^|[^{])(?:\{\{)*)<<0>>/.source,[X]),lookbehind:!0,inside:{"format-string":{pattern:t(/(^\{(?:(?![}:])<<0>>)*)<<1>>(?=\}$)/.source,[$,O]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:s.languages.csharp}}},string:/[\s\S]+/}}s.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:t(/(^|[^\\])(?:\$@|@\$)"(?:""|\\[\s\S]|\{\{|<<0>>|[^\\{"])*"/.source,[q]),lookbehind:!0,greedy:!0,inside:K(q,B)},{pattern:t(/(^|[^@\\])\$"(?:\\.|\{\{|<<0>>|[^\\"{])*"/.source,[G]),lookbehind:!0,greedy:!0,inside:K(G,H)}],char:{pattern:RegExp(_),greedy:!0}}),s.languages.dotnet=s.languages.cs=s.languages.csharp})(Prism)),F1}fH();(function(s){s.languages.kotlin=s.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete s.languages.kotlin["class-name"];var e={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:s.languages.kotlin}};s.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:e},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:e},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete s.languages.kotlin.string,s.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),s.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),s.languages.kt=s.languages.kotlin,s.languages.kts=s.languages.kotlin})(Prism);(function(s){var e={pattern:/((?:^|[^\\$])(?:\\{2})*)\$(?:\w+|\{[^{}]*\})/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:null}}};s.languages.groovy=s.languages.extend("clike",{string:{pattern:/'''(?:[^\\]|\\[\s\S])*?'''|'(?:\\.|[^\\'\r\n])*'/,greedy:!0},keyword:/\b(?:abstract|as|assert|boolean|break|byte|case|catch|char|class|const|continue|def|default|do|double|else|enum|extends|final|finally|float|for|goto|if|implements|import|in|instanceof|int|interface|long|native|new|package|private|protected|public|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|trait|transient|try|void|volatile|while)\b/,number:/\b(?:0b[01_]+|0x[\da-f_]+(?:\.[\da-f_p\-]+)?|[\d_]+(?:\.[\d_]+)?(?:e[+-]?\d+)?)[glidf]?\b/i,operator:{pattern:/(^|[^.])(?:~|==?~?|\?[.:]?|\*(?:[.=]|\*=?)?|\.[@&]|\.\.<|\.\.(?!\.)|-[-=>]?|\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\|[|=]?|\/=?|\^=?|%=?)/,lookbehind:!0},punctuation:/\.+|[{}[\];(),:$]/}),s.languages.insertBefore("groovy","string",{shebang:{pattern:/#!.+/,alias:"comment",greedy:!0},"interpolation-string":{pattern:/"""(?:[^\\]|\\[\s\S])*?"""|(["/])(?:\\.|(?!\1)[^\\\r\n])*\1|\$\/(?:[^/$]|\$(?:[/$]|(?![/$]))|\/(?!\$))*\/\$/,greedy:!0,inside:{interpolation:e,string:/[\s\S]+/}}}),s.languages.insertBefore("groovy","punctuation",{"spock-block":/\b(?:and|cleanup|expect|given|setup|then|when|where):/}),s.languages.insertBefore("groovy","function",{annotation:{pattern:/(^|[^.])@\w+/,lookbehind:!0,alias:"punctuation"}}),e.inside.expression.inside=s.languages.groovy})(Prism);var H1={},U1;function mH(){return U1||(U1=1,(function(s){s.languages.ruby=s.languages.extend("clike",{comment:{pattern:/#.*|^=begin\s[\s\S]*?^=end/m,greedy:!0},"class-name":{pattern:/(\b(?:class|module)\s+|\bcatch\s+\()[\w.\\]+|\b[A-Z_]\w*(?=\s*\.\s*new\b)/,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:BEGIN|END|alias|and|begin|break|case|class|def|define_method|defined|do|each|else|elsif|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|private|protected|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\b/,operator:/\.{2,3}|&\.|===|<?=>|[!=]?~|(?:&&|\|\||<<|>>|\*\*|[+\-*/%<>!^&|=])=?|[?:]/,punctuation:/[(){}[\].,;]/}),s.languages.insertBefore("ruby","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}});var e={pattern:/((?:^|[^\\])(?:\\{2})*)#\{(?:[^{}]|\{[^{}]*\})*\}/,lookbehind:!0,inside:{content:{pattern:/^(#\{)[\s\S]+(?=\}$)/,lookbehind:!0,inside:s.languages.ruby},delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"}}};delete s.languages.ruby.function;var t="(?:"+[/([^a-zA-Z0-9\s{(\[<=])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,/\((?:[^()\\]|\\[\s\S]|\((?:[^()\\]|\\[\s\S])*\))*\)/.source,/\{(?:[^{}\\]|\\[\s\S]|\{(?:[^{}\\]|\\[\s\S])*\})*\}/.source,/\[(?:[^\[\]\\]|\\[\s\S]|\[(?:[^\[\]\\]|\\[\s\S])*\])*\]/.source,/<(?:[^<>\\]|\\[\s\S]|<(?:[^<>\\]|\\[\s\S])*>)*>/.source].join("|")+")",n=/(?:"(?:\\.|[^"\\\r\n])*"|(?:\b[a-zA-Z_]\w*|[^\s\0-\x7F]+)[?!]?|\$.)/.source;s.languages.insertBefore("ruby","keyword",{"regex-literal":[{pattern:RegExp(/%r/.source+t+/[egimnosux]{0,6}/.source),greedy:!0,inside:{interpolation:e,regex:/[\s\S]+/}},{pattern:/(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[egimnosux]{0,6}(?=\s*(?:$|[\r\n,.;})#]))/,lookbehind:!0,greedy:!0,inside:{interpolation:e,regex:/[\s\S]+/}}],variable:/[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,symbol:[{pattern:RegExp(/(^|[^:]):/.source+n),lookbehind:!0,greedy:!0},{pattern:RegExp(/([\r\n{(,][ \t]*)/.source+n+/(?=:(?!:))/.source),lookbehind:!0,greedy:!0}],"method-definition":{pattern:/(\bdef\s+)\w+(?:\s*\.\s*\w+)?/,lookbehind:!0,inside:{function:/\b\w+$/,keyword:/^self\b/,"class-name":/^\w+/,punctuation:/\./}}}),s.languages.insertBefore("ruby","string",{"string-literal":[{pattern:RegExp(/%[qQiIwWs]?/.source+t),greedy:!0,inside:{interpolation:e,string:/[\s\S]+/}},{pattern:/("|')(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|(?!\1)[^\\#\r\n])*\1/,greedy:!0,inside:{interpolation:e,string:/[\s\S]+/}},{pattern:/<<[-~]?([a-z_]\w*)[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?[a-z_]\w*|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?/}},interpolation:e,string:/[\s\S]+/}},{pattern:/<<[-~]?'([a-z_]\w*)'[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?'[a-z_]\w*'|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?'|'$/}},string:/[\s\S]+/}}],"command-literal":[{pattern:RegExp(/%x/.source+t),greedy:!0,inside:{interpolation:e,command:{pattern:/[\s\S]+/,alias:"string"}}},{pattern:/`(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|[^\\`#\r\n])*`/,greedy:!0,inside:{interpolation:e,command:{pattern:/[\s\S]+/,alias:"string"}}}]}),delete s.languages.ruby.string,s.languages.insertBefore("ruby","number",{builtin:/\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Fixnum|Float|Hash|IO|Integer|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|Stat|String|Struct|Symbol|TMS|Thread|ThreadGroup|Time|TrueClass)\b/,constant:/\b[A-Z][A-Z0-9_]*(?:[?!]|\b)/}),s.languages.rb=s.languages.ruby})(Prism)),H1}mH();Prism.languages.scala=Prism.languages.extend("java",{"triple-quoted-string":{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string"},string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},keyword:/<-|=>|\b(?:abstract|case|catch|class|def|derives|do|else|enum|extends|extension|final|finally|for|forSome|given|if|implicit|import|infix|inline|lazy|match|new|null|object|opaque|open|override|package|private|protected|return|sealed|self|super|this|throw|trait|transparent|try|type|using|val|var|while|with|yield)\b/,number:/\b0x(?:[\da-f]*\.)?[\da-f]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e\d+)?[dfl]?/i,builtin:/\b(?:Any|AnyRef|AnyVal|Boolean|Byte|Char|Double|Float|Int|Long|Nothing|Short|String|Unit)\b/,symbol:/'[^\d\s\\]\w*/});Prism.languages.insertBefore("scala","triple-quoted-string",{"string-interpolation":{pattern:/\b[a-z]\w*(?:"""(?:[^$]|\$(?:[^{]|\{(?:[^{}]|\{[^{}]*\})*\}))*?"""|"(?:[^$"\r\n]|\$(?:[^{]|\{(?:[^{}]|\{[^{}]*\})*\}))*")/i,greedy:!0,inside:{id:{pattern:/^\w+/,greedy:!0,alias:"function"},escape:{pattern:/\\\$"|\$[$"]/,greedy:!0,alias:"symbol"},interpolation:{pattern:/\$(?:\w+|\{(?:[^{}]|\{[^{}]*\})*\})/,greedy:!0,inside:{punctuation:/^\$\{?|\}$/,expression:{pattern:/[\s\S]+/,inside:Prism.languages.scala}}},string:/[\s\S]+/}}});delete Prism.languages.scala["class-name"];delete Prism.languages.scala.function;delete Prism.languages.scala.constant;(function(s){function e(t,n){return"___"+t.toUpperCase()+n+"___"}Object.defineProperties(s.languages["markup-templating"]={},{buildPlaceholders:{value:function(t,n,a,i){if(t.language===n){var o=t.tokenStack=[];t.code=t.code.replace(a,function(l){if(typeof i=="function"&&!i(l))return l;for(var c=o.length,d;t.code.indexOf(d=e(n,c))!==-1;)++c;return o[c]=l,d}),t.grammar=s.languages.markup}}},tokenizePlaceholders:{value:function(t,n){if(t.language!==n||!t.tokenStack)return;t.grammar=s.languages[n];var a=0,i=Object.keys(t.tokenStack);function o(l){for(var c=0;c<l.length&&!(a>=i.length);c++){var d=l[c];if(typeof d=="string"||d.content&&typeof d.content=="string"){var f=i[a],p=t.tokenStack[f],m=typeof d=="string"?d:d.content,b=e(n,f),x=m.indexOf(b);if(x>-1){++a;var w=m.substring(0,x),k=new s.Token(n,s.tokenize(p,t.grammar),"language-"+n,p),S=m.substring(x+b.length),j=[];w&&j.push.apply(j,o([w])),j.push(k),S&&j.push.apply(j,o([S])),typeof d=="string"?l.splice.apply(l,[c,1].concat(j)):d.content=j}}else d.content&&o(d.content)}return l}o(t.tokens)}}})})(Prism);var G1={},W1;function gH(){return W1||(W1=1,(function(s){var e=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,t=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],n=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,a=/<?=>|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,i=/[{}\[\](),:;]/;s.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:e,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:t,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:n,operator:a,punctuation:i};var o={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:s.languages.php},l=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:o}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:o}}];s.languages.insertBefore("php","variable",{string:l,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:e,string:l,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:t,number:n,operator:a,punctuation:i}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),s.hooks.add("before-tokenize",function(c){if(/<\?/.test(c.code)){var d=/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g;s.languages["markup-templating"].buildPlaceholders(c,"php",d)}}),s.hooks.add("after-tokenize",function(c){s.languages["markup-templating"].tokenizePlaceholders(c,"php")})})(Prism)),G1}gH();Prism.languages.swift={comment:{pattern:/(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,lookbehind:!0,greedy:!0},"string-literal":[{pattern:RegExp(/(^|[^"#])/.source+"(?:"+/"(?:\\(?:\((?:[^()]|\([^()]*\))*\)|\r\n|[^(])|[^\\\r\n"])*"/.source+"|"+/"""(?:\\(?:\((?:[^()]|\([^()]*\))*\)|[^(])|[^\\"]|"(?!""))*"""/.source+")"+/(?!["#])/.source),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\\($/,alias:"punctuation"},punctuation:/\\(?=[\r\n])/,string:/[\s\S]+/}},{pattern:RegExp(/(^|[^"#])(#+)/.source+"(?:"+/"(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|\r\n|[^#])|[^\\\r\n])*?"/.source+"|"+/"""(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|[^#])|[^\\])*?"""/.source+")\\2"),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\#+\($/,alias:"punctuation"},string:/[\s\S]+/}}],directive:{pattern:RegExp(/#/.source+"(?:"+(/(?:elseif|if)\b/.source+"(?:[ ]*"+/(?:![ \t]*)?(?:\b\w+\b(?:[ \t]*\((?:[^()]|\([^()]*\))*\))?|\((?:[^()]|\([^()]*\))*\))(?:[ \t]*(?:&&|\|\|))?/.source+")+")+"|"+/(?:else|endif)\b/.source+")"),alias:"property",inside:{"directive-name":/^#\w+/,boolean:/\b(?:false|true)\b/,number:/\b\d+(?:\.\d+)*\b/,operator:/!|&&|\|\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,alias:"constant"},"other-directive":{pattern:/#\w+\b/,alias:"property"},attribute:{pattern:/@\w+/,alias:"atrule"},"function-definition":{pattern:/(\bfunc\s+)\w+/,lookbehind:!0,alias:"function"},label:{pattern:/\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,lookbehind:!0,alias:"important"},keyword:/\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,boolean:/\b(?:false|true)\b/,nil:{pattern:/\bnil\b/,alias:"constant"},"short-argument":/\$\d+\b/,omit:{pattern:/\b_\b/,alias:"keyword"},number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,"class-name":/\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,operator:/[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\]();,.:\\]/};Prism.languages.swift["string-literal"].forEach(function(s){s.inside.interpolation.inside=Prism.languages.swift});Prism.languages.lua={comment:/^#!.+|--(?:\[(=*)\[[\s\S]*?\]\1\]|.*)/m,string:{pattern:/(["'])(?:(?!\1)[^\\\r\n]|\\z(?:\r\n|\s)|\\(?:\r\n|[^z]))*\1|\[(=*)\[[\s\S]*?\]\2\]/,greedy:!0},number:/\b0x[a-f\d]+(?:\.[a-f\d]*)?(?:p[+-]?\d+)?\b|\b\d+(?:\.\B|(?:\.\d*)?(?:e[+-]?\d+)?\b)|\B\.\d+(?:e[+-]?\d+)?\b/i,keyword:/\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,function:/(?!\d)\w+(?=\s*(?:[({]))/,operator:[/[-+*%^&|#]|\/\/?|<[<=]?|>[>=]?|[=~]=?/,{pattern:/(^|[^.])\.\.(?!\.)/,lookbehind:!0}],punctuation:/[\[\](){},;]|\.+|:+/};var q1={},Y1;function bH(){return Y1||(Y1=1,(function(s){var e=/(?:\((?:[^()\\]|\\[\s\S])*\)|\{(?:[^{}\\]|\\[\s\S])*\}|\[(?:[^[\]\\]|\\[\s\S])*\]|<(?:[^<>\\]|\\[\s\S])*>)/.source;s.languages.perl={comment:[{pattern:/(^\s*)=\w[\s\S]*?=cut.*/m,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\$])#.*/,lookbehind:!0,greedy:!0}],string:[{pattern:RegExp(/\b(?:q|qq|qw|qx)(?![a-zA-Z0-9])\s*/.source+"(?:"+[/([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,/([a-zA-Z0-9])(?:(?!\2)[^\\]|\\[\s\S])*\2/.source,e].join("|")+")"),greedy:!0},{pattern:/("|`)(?:(?!\1)[^\\]|\\[\s\S])*\1/,greedy:!0},{pattern:/'(?:[^'\\\r\n]|\\.)*'/,greedy:!0}],regex:[{pattern:RegExp(/\b(?:m|qr)(?![a-zA-Z0-9])\s*/.source+"(?:"+[/([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,/([a-zA-Z0-9])(?:(?!\2)[^\\]|\\[\s\S])*\2/.source,e].join("|")+")"+/[msixpodualngc]*/.source),greedy:!0},{pattern:RegExp(/(^|[^-])\b(?:s|tr|y)(?![a-zA-Z0-9])\s*/.source+"(?:"+[/([^a-zA-Z0-9\s{(\[<])(?:(?!\2)[^\\]|\\[\s\S])*\2(?:(?!\2)[^\\]|\\[\s\S])*\2/.source,/([a-zA-Z0-9])(?:(?!\3)[^\\]|\\[\s\S])*\3(?:(?!\3)[^\\]|\\[\s\S])*\3/.source,e+/\s*/.source+e].join("|")+")"+/[msixpodualngcer]*/.source),lookbehind:!0,greedy:!0},{pattern:/\/(?:[^\/\\\r\n]|\\.)*\/[msixpodualngc]*(?=\s*(?:$|[\r\n,.;})&|\-+*~<>!?^]|(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|x|xor)\b))/,greedy:!0}],variable:[/[&*$@%]\{\^[A-Z]+\}/,/[&*$@%]\^[A-Z_]/,/[&*$@%]#?(?=\{)/,/[&*$@%]#?(?:(?:::)*'?(?!\d)[\w$]+(?![\w$]))+(?:::)*/,/[&*$@%]\d+/,/(?!%=)[$@%][!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~]/],filehandle:{pattern:/<(?![<=])\S*?>|\b_\b/,alias:"symbol"},"v-string":{pattern:/v\d+(?:\.\d+)*|\d+(?:\.\d+){2,}/,alias:"string"},function:{pattern:/(\bsub[ \t]+)\w+/,lookbehind:!0},keyword:/\b(?:any|break|continue|default|delete|die|do|else|elsif|eval|for|foreach|given|goto|if|last|local|my|next|our|package|print|redo|require|return|say|state|sub|switch|undef|unless|until|use|when|while)\b/,number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)\b/,operator:/-[rwxoRWXOezsfdlpSbctugkTBMAC]\b|\+[+=]?|-[-=>]?|\*\*?=?|\/\/?=?|=[=~>]?|~[~=]?|\|\|?=?|&&?=?|<(?:=>?|<=?)?|>>?=?|![~=]?|[%^]=?|\.(?:=|\.\.?)?|[\\?]|\bx(?:=|\b)|\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)\b/,punctuation:/[{}[\];(),:]/}})(Prism)),q1}bH();Prism.languages.r={comment:/#.*/,string:{pattern:/(['"])(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},"percent-operator":{pattern:/%[^%\s]*%/,alias:"operator"},boolean:/\b(?:FALSE|TRUE)\b/,ellipsis:/\.\.(?:\.|\d+)/,number:[/\b(?:Inf|NaN)\b/,/(?:\b0x[\dA-Fa-f]+(?:\.\d*)?|\b\d+(?:\.\d*)?|\B\.\d+)(?:[EePp][+-]?\d+)?[iL]?/],keyword:/\b(?:NA|NA_character_|NA_complex_|NA_integer_|NA_real_|NULL|break|else|for|function|if|in|next|repeat|while)\b/,operator:/->?>?|<(?:=|<?-)?|[>=!]=?|::?|&&?|\|\|?|[+*\/^$@~]/,punctuation:/[(){}\[\],;]/};var V1={},K1;function yH(){return K1||(K1=1,Prism.languages.haskell={comment:{pattern:/(^|[^-!#$%*+=?&@|~.:<>^\\\/])(?:--(?:(?=.)[^-!#$%*+=?&@|~.:<>^\\\/].*|$)|\{-[\s\S]*?-\})/m,lookbehind:!0},char:{pattern:/'(?:[^\\']|\\(?:[abfnrtv\\"'&]|\^[A-Z@[\]^_]|ACK|BEL|BS|CAN|CR|DC1|DC2|DC3|DC4|DEL|DLE|EM|ENQ|EOT|ESC|ETB|ETX|FF|FS|GS|HT|LF|NAK|NUL|RS|SI|SO|SOH|SP|STX|SUB|SYN|US|VT|\d+|o[0-7]+|x[0-9a-fA-F]+))'/,alias:"string"},string:{pattern:/"(?:[^\\"]|\\(?:\S|\s+\\))*"/,greedy:!0},keyword:/\b(?:case|class|data|deriving|do|else|if|in|infixl|infixr|instance|let|module|newtype|of|primitive|then|type|where)\b/,"import-statement":{pattern:/(^[\t ]*)import\s+(?:qualified\s+)?(?:[A-Z][\w']*)(?:\.[A-Z][\w']*)*(?:\s+as\s+(?:[A-Z][\w']*)(?:\.[A-Z][\w']*)*)?(?:\s+hiding\b)?/m,lookbehind:!0,inside:{keyword:/\b(?:as|hiding|import|qualified)\b/,punctuation:/\./}},builtin:/\b(?:abs|acos|acosh|all|and|any|appendFile|approxRational|asTypeOf|asin|asinh|atan|atan2|atanh|basicIORun|break|catch|ceiling|chr|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|denominator|digitToInt|div|divMod|drop|dropWhile|either|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromDouble|fromEnum|fromInt|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|group|head|id|inRange|index|init|intToDigit|interact|ioError|isAlpha|isAlphaNum|isAscii|isControl|isDenormalized|isDigit|isHexDigit|isIEEE|isInfinite|isLower|isNaN|isNegativeZero|isOctDigit|isPrint|isSpace|isUpper|iterate|last|lcm|length|lex|lexDigits|lexLitChar|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|numerator|odd|or|ord|otherwise|pack|pi|pred|primExitWith|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|range|rangeSize|read|readDec|readFile|readFloat|readHex|readIO|readInt|readList|readLitChar|readLn|readOct|readParen|readSigned|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showInt|showList|showLitChar|showParen|showSigned|showString|shows|showsPrec|significand|signum|sin|sinh|snd|sort|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|threadToIOResult|toEnum|toInt|toInteger|toLower|toRational|toUpper|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\b/,number:/\b(?:\d+(?:\.\d+)?(?:e[+-]?\d+)?|0o[0-7]+|0x[0-9a-f]+)\b/i,operator:[{pattern:/`(?:[A-Z][\w']*\.)*[_a-z][\w']*`/,greedy:!0},{pattern:/(\s)\.(?=\s)/,lookbehind:!0},/[-!#$%*+=?&@|~:<>^\\\/][-!#$%*+=?&@|~.:<>^\\\/]*|\.[-!#$%*+=?&@|~.:<>^\\\/]+/],hvariable:{pattern:/\b(?:[A-Z][\w']*\.)*[_a-z][\w']*/,inside:{punctuation:/\./}},constant:{pattern:/\b(?:[A-Z][\w']*\.)*[A-Z][\w']*/,inside:{punctuation:/\./}},punctuation:/[{}[\];(),.:]/},Prism.languages.hs=Prism.languages.haskell),V1}yH();var X1={},Z1;function xH(){return Z1||(Z1=1,Prism.languages.elixir={doc:{pattern:/@(?:doc|moduledoc)\s+(?:("""|''')[\s\S]*?\1|("|')(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2)/,inside:{attribute:/^@\w+/,string:/['"][\s\S]+/}},comment:{pattern:/#.*/,greedy:!0},regex:{pattern:/~[rR](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([\/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|[^\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[uismxfr]*/,greedy:!0},string:[{pattern:/~[cCsSwW](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([\/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|#\{[^}]+\}|#(?!\{)|[^#\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[csa]?/,greedy:!0,inside:{}},{pattern:/("""|''')[\s\S]*?\1/,greedy:!0,inside:{}},{pattern:/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0,inside:{}}],atom:{pattern:/(^|[^:]):\w+/,lookbehind:!0,alias:"symbol"},module:{pattern:/\b[A-Z]\w*\b/,alias:"class-name"},"attr-name":/\b\w+\??:(?!:)/,argument:{pattern:/(^|[^&])&\d+/,lookbehind:!0,alias:"variable"},attribute:{pattern:/@\w+/,alias:"variable"},function:/\b[_a-zA-Z]\w*[?!]?(?:(?=\s*(?:\.\s*)?\()|(?=\/\d))/,number:/\b(?:0[box][a-f\d_]+|\d[\d_]*)(?:\.[\d_]+)?(?:e[+-]?[\d_]+)?\b/i,keyword:/\b(?:after|alias|and|case|catch|cond|def(?:callback|delegate|exception|impl|macro|module|n|np|p|protocol|struct)?|do|else|end|fn|for|if|import|not|or|quote|raise|require|rescue|try|unless|unquote|use|when)\b/,boolean:/\b(?:false|nil|true)\b/,operator:[/\bin\b|&&?|\|[|>]?|\\\\|::|\.\.\.?|\+\+?|-[->]?|<[-=>]|>=|!==?|\B!|=(?:==?|[>~])?|[*\/^]/,{pattern:/([^<])<(?!<)/,lookbehind:!0},{pattern:/([^>])>(?!>)/,lookbehind:!0}],punctuation:/<<|>>|[.,%\[\]{}()]/},Prism.languages.elixir.string.forEach(function(s){s.inside={interpolation:{pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"},rest:Prism.languages.elixir}}}})),X1}xH();Prism.languages.erlang={comment:/%.+/,string:{pattern:/"(?:\\.|[^\\"\r\n])*"/,greedy:!0},"quoted-function":{pattern:/'(?:\\.|[^\\'\r\n])+'(?=\()/,alias:"function"},"quoted-atom":{pattern:/'(?:\\.|[^\\'\r\n])+'/,alias:"atom"},boolean:/\b(?:false|true)\b/,keyword:/\b(?:after|begin|case|catch|end|fun|if|of|receive|try|when)\b/,number:[/\$\\?./,/\b\d+#[a-z0-9]+/i,/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i],function:/\b[a-z][\w@]*(?=\()/,variable:{pattern:/(^|[^@])(?:\b|\?)[A-Z_][\w@]*/,lookbehind:!0},operator:[/[=\/<>:]=|=[:\/]=|\+\+?|--?|[=*\/!]|\b(?:and|andalso|band|bnot|bor|bsl|bsr|bxor|div|not|or|orelse|rem|xor)\b/,{pattern:/(^|[^<])<(?!<)/,lookbehind:!0},{pattern:/(^|[^>])>(?!>)/,lookbehind:!0}],atom:/\b[a-z][\w@]*/,punctuation:/[()[\]{}:;,.#|]|<<|>>/};Prism.languages.clojure={comment:{pattern:/;.*/,greedy:!0},string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0},char:/\\\w+/,symbol:{pattern:/(^|[\s()\[\]{},])::?[\w*+!?'<>=/.-]+/,lookbehind:!0},keyword:{pattern:/(\()(?:-|->|->>|\.|\.\.|\*|\/|\+|<|<=|=|==|>|>=|accessor|agent|agent-errors|aget|alength|all-ns|alter|and|append-child|apply|array-map|aset|aset-boolean|aset-byte|aset-char|aset-double|aset-float|aset-int|aset-long|aset-short|assert|assoc|await|await-for|bean|binding|bit-and|bit-not|bit-or|bit-shift-left|bit-shift-right|bit-xor|boolean|branch\?|butlast|byte|cast|char|children|class|clear-agent-errors|comment|commute|comp|comparator|complement|concat|cond|conj|cons|constantly|construct-proxy|contains\?|count|create-ns|create-struct|cycle|dec|declare|def|def-|definline|definterface|defmacro|defmethod|defmulti|defn|defn-|defonce|defproject|defprotocol|defrecord|defstruct|deftype|deref|difference|disj|dissoc|distinct|do|doall|doc|dorun|doseq|dosync|dotimes|doto|double|down|drop|drop-while|edit|end\?|ensure|eval|every\?|false\?|ffirst|file-seq|filter|find|find-doc|find-ns|find-var|first|float|flush|fn|fnseq|for|frest|gensym|get|get-proxy-class|hash-map|hash-set|identical\?|identity|if|if-let|if-not|import|in-ns|inc|index|insert-child|insert-left|insert-right|inspect-table|inspect-tree|instance\?|int|interleave|intersection|into|into-array|iterate|join|key|keys|keyword|keyword\?|last|lazy-cat|lazy-cons|left|lefts|let|line-seq|list|list\*|load|load-file|locking|long|loop|macroexpand|macroexpand-1|make-array|make-node|map|map-invert|map\?|mapcat|max|max-key|memfn|merge|merge-with|meta|min|min-key|monitor-enter|name|namespace|neg\?|new|newline|next|nil\?|node|not|not-any\?|not-every\?|not=|ns|ns-imports|ns-interns|ns-map|ns-name|ns-publics|ns-refers|ns-resolve|ns-unmap|nth|nthrest|or|parse|partial|path|peek|pop|pos\?|pr|pr-str|print|print-str|println|println-str|prn|prn-str|project|proxy|proxy-mappings|quot|quote|rand|rand-int|range|re-find|re-groups|re-matcher|re-matches|re-pattern|re-seq|read|read-line|recur|reduce|ref|ref-set|refer|rem|remove|remove-method|remove-ns|rename|rename-keys|repeat|replace|replicate|resolve|rest|resultset-seq|reverse|rfirst|right|rights|root|rrest|rseq|second|select|select-keys|send|send-off|seq|seq-zip|seq\?|set|set!|short|slurp|some|sort|sort-by|sorted-map|sorted-map-by|sorted-set|special-symbol\?|split-at|split-with|str|string\?|struct|struct-map|subs|subvec|symbol|symbol\?|sync|take|take-nth|take-while|test|throw|time|to-array|to-array-2d|tree-seq|true\?|try|union|up|update-proxy|val|vals|var|var-get|var-set|var\?|vector|vector-zip|vector\?|when|when-first|when-let|when-not|with-local-vars|with-meta|with-open|with-out-str|xml-seq|xml-zip|zero\?|zipmap|zipper)(?=[\s)]|$)/,lookbehind:!0},boolean:/\b(?:false|nil|true)\b/,number:{pattern:/(^|[^\w$@])(?:\d+(?:[/.]\d+)?(?:e[+-]?\d+)?|0x[a-f0-9]+|[1-9]\d?r[a-z0-9]+)[lmn]?(?![\w$@])/i,lookbehind:!0},function:{pattern:/((?:^|[^'])\()[\w*+!?'<>=/.-]+(?=[\s)]|$)/,lookbehind:!0},operator:/[#@^`~]/,punctuation:/[{}\[\](),]/};Prism.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:Prism.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/};Prism.hooks.add("after-tokenize",function(e){if(e.language!=="graphql")return;var t=e.tokens.filter(function(w){return typeof w!="string"&&w.type!=="comment"&&w.type!=="scalar"}),n=0;function a(w){return t[n+w]}function i(w,k){k=k||0;for(var S=0;S<w.length;S++){var j=a(S+k);if(!j||j.type!==w[S])return!1}return!0}function o(w,k){for(var S=1,j=n;j<t.length;j++){var C=t[j],N=C.content;if(C.type==="punctuation"&&typeof N=="string"){if(w.test(N))S++;else if(k.test(N)&&(S--,S===0))return j}}return-1}function l(w,k){var S=w.alias;S?Array.isArray(S)||(w.alias=S=[S]):w.alias=S=[],S.push(k)}for(;n<t.length;){var c=t[n++];if(c.type==="keyword"&&c.content==="mutation"){var d=[];if(i(["definition-mutation","punctuation"])&&a(1).content==="("){n+=2;var f=o(/^\($/,/^\)$/);if(f===-1)continue;for(;n<f;n++){var p=a(0);p.type==="variable"&&(l(p,"variable-input"),d.push(p.content))}n=f+1}if(i(["punctuation","property-query"])&&a(0).content==="{"&&(n++,l(a(0),"property-mutation"),d.length>0)){var m=o(/^\{$/,/^\}$/);if(m===-1)continue;for(var b=n;b<m;b++){var x=t[b];x.type==="variable"&&d.indexOf(x.content)>=0&&l(x,"variable-input")}}}}});(function(s){var e=/\$(?:\w[a-z\d]*(?:_[^\x00-\x1F\s"'\\()$]*)?|\{[^}\s"'\\]+\})/i;s.languages.nginx={comment:{pattern:/(^|[\s{};])#.*/,lookbehind:!0,greedy:!0},directive:{pattern:/(^|\s)\w(?:[^;{}"'\\\s]|\\.|"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'|\s+(?:#.*(?!.)|(?![#\s])))*?(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:{string:{pattern:/((?:^|[^\\])(?:\\\\)*)(?:"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*')/,lookbehind:!0,greedy:!0,inside:{escape:{pattern:/\\["'\\nrt]/,alias:"entity"},variable:e}},comment:{pattern:/(\s)#.*/,lookbehind:!0,greedy:!0},keyword:{pattern:/^\S+/,greedy:!0},boolean:{pattern:/(\s)(?:off|on)(?!\S)/,lookbehind:!0},number:{pattern:/(\s)\d+[a-z]*(?!\S)/i,lookbehind:!0},variable:e}},punctuation:/[{};]/}})(Prism);Prism.languages.vim={string:/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\r\n]|'')*'/,comment:/".*/,function:/\b\w+(?=\()/,keyword:/\b(?:N|Next|P|Print|X|XMLent|XMLns|ab|abbreviate|abc|abclear|abo|aboveleft|al|all|ar|arga|argadd|argd|argdelete|argdo|arge|argedit|argg|argglobal|argl|arglocal|args|argu|argument|as|ascii|b|bN|bNext|ba|bad|badd|ball|bd|bdelete|be|bel|belowright|bf|bfirst|bl|blast|bm|bmodified|bn|bnext|bo|botright|bp|bprevious|br|brea|break|breaka|breakadd|breakd|breakdel|breakl|breaklist|brewind|bro|browse|bufdo|buffer|buffers|bun|bunload|bw|bwipeout|c|cN|cNext|cNfcNfile|ca|cabbrev|cabc|cabclear|cad|caddb|caddbuffer|caddexpr|caddf|caddfile|cal|call|cat|catch|cb|cbuffer|cc|ccl|cclose|cd|ce|center|cex|cexpr|cf|cfile|cfir|cfirst|cg|cgetb|cgetbuffer|cgete|cgetexpr|cgetfile|change|changes|chd|chdir|che|checkpath|checkt|checktime|cl|cla|clast|clist|clo|close|cmapc|cmapclear|cn|cnew|cnewer|cnext|cnf|cnfile|cnorea|cnoreabbrev|co|col|colder|colo|colorscheme|comc|comclear|comp|compiler|con|conf|confirm|continue|cope|copen|copy|cp|cpf|cpfile|cprevious|cq|cquit|cr|crewind|cu|cuna|cunabbrev|cunmap|cw|cwindow|d|debugg|debuggreedy|delc|delcommand|delete|delf|delfunction|delm|delmarks|di|diffg|diffget|diffoff|diffpatch|diffpu|diffput|diffsplit|diffthis|diffu|diffupdate|dig|digraphs|display|dj|djump|dl|dlist|dr|drop|ds|dsearch|dsp|dsplit|e|earlier|echoe|echoerr|echom|echomsg|echon|edit|el|else|elsei|elseif|em|emenu|en|endf|endfo|endfor|endfun|endfunction|endif|endt|endtry|endw|endwhile|ene|enew|ex|exi|exit|exu|exusage|f|file|files|filetype|fin|fina|finally|find|fini|finish|fir|first|fix|fixdel|fo|fold|foldc|foldclose|foldd|folddoc|folddoclosed|folddoopen|foldo|foldopen|for|fu|fun|function|go|goto|gr|grep|grepa|grepadd|h|ha|hardcopy|help|helpf|helpfind|helpg|helpgrep|helpt|helptags|hid|hide|his|history|ia|iabbrev|iabc|iabclear|if|ij|ijump|il|ilist|imapc|imapclear|in|inorea|inoreabbrev|isearch|isp|isplit|iu|iuna|iunabbrev|iunmap|j|join|ju|jumps|k|kee|keepalt|keepj|keepjumps|keepmarks|l|lN|lNext|lNf|lNfile|la|lad|laddb|laddbuffer|laddexpr|laddf|laddfile|lan|language|last|later|lb|lbuffer|lc|lcd|lch|lchdir|lcl|lclose|left|lefta|leftabove|let|lex|lexpr|lf|lfile|lfir|lfirst|lg|lgetb|lgetbuffer|lgete|lgetexpr|lgetfile|lgr|lgrep|lgrepa|lgrepadd|lh|lhelpgrep|list|ll|lla|llast|lli|llist|lm|lmak|lmake|lmap|lmapc|lmapclear|ln|lne|lnew|lnewer|lnext|lnf|lnfile|lnoremap|lo|loadview|loc|lockmarks|lockv|lockvar|lol|lolder|lop|lopen|lp|lpf|lpfile|lprevious|lr|lrewind|ls|lt|ltag|lu|lunmap|lv|lvimgrep|lvimgrepa|lvimgrepadd|lw|lwindow|m|ma|mak|make|mark|marks|mat|match|menut|menutranslate|mk|mkexrc|mks|mksession|mksp|mkspell|mkv|mkvie|mkview|mkvimrc|mod|mode|move|mz|mzf|mzfile|mzscheme|n|nbkey|new|next|nmapc|nmapclear|noh|nohlsearch|norea|noreabbrev|nu|number|nun|nunmap|o|omapc|omapclear|on|only|open|opt|options|ou|ounmap|p|pc|pclose|pe|ped|pedit|perl|perld|perldo|po|pop|popu|popup|pp|ppop|pre|preserve|prev|previous|print|prof|profd|profdel|profile|promptf|promptfind|promptr|promptrepl|ps|psearch|ptN|ptNext|pta|ptag|ptf|ptfirst|ptj|ptjump|ptl|ptlast|ptn|ptnext|ptp|ptprevious|ptr|ptrewind|pts|ptselect|pu|put|pw|pwd|py|pyf|pyfile|python|q|qa|qall|quit|quita|quitall|r|read|rec|recover|red|redi|redir|redo|redr|redraw|redraws|redrawstatus|reg|registers|res|resize|ret|retab|retu|return|rew|rewind|ri|right|rightb|rightbelow|ru|rub|ruby|rubyd|rubydo|rubyf|rubyfile|runtime|rv|rviminfo|sN|sNext|sa|sal|sall|san|sandbox|sargument|sav|saveas|sb|sbN|sbNext|sba|sball|sbf|sbfirst|sbl|sblast|sbm|sbmodified|sbn|sbnext|sbp|sbprevious|sbr|sbrewind|sbuffer|scrip|scripte|scriptencoding|scriptnames|se|set|setf|setfiletype|setg|setglobal|setl|setlocal|sf|sfind|sfir|sfirst|sh|shell|sign|sil|silent|sim|simalt|sl|sla|slast|sleep|sm|smagic|smap|smapc|smapclear|sme|smenu|sn|snext|sni|sniff|sno|snomagic|snor|snoremap|snoreme|snoremenu|so|sor|sort|source|sp|spe|spelld|spelldump|spellgood|spelli|spellinfo|spellr|spellrepall|spellu|spellundo|spellw|spellwrong|split|spr|sprevious|sre|srewind|st|sta|stag|star|startg|startgreplace|startinsert|startr|startreplace|stj|stjump|stop|stopi|stopinsert|sts|stselect|sun|sunhide|sunm|sunmap|sus|suspend|sv|sview|syncbind|t|tN|tNext|ta|tab|tabN|tabNext|tabc|tabclose|tabd|tabdo|tabe|tabedit|tabf|tabfind|tabfir|tabfirst|tabl|tablast|tabm|tabmove|tabn|tabnew|tabnext|tabo|tabonly|tabp|tabprevious|tabr|tabrewind|tabs|tag|tags|tc|tcl|tcld|tcldo|tclf|tclfile|te|tearoff|tf|tfirst|th|throw|tj|tjump|tl|tlast|tm|tmenu|tn|tnext|to|topleft|tp|tprevious|tr|trewind|try|ts|tselect|tu|tunmenu|u|una|unabbreviate|undo|undoj|undojoin|undol|undolist|unh|unhide|unlet|unlo|unlockvar|unm|unmap|up|update|ve|verb|verbose|version|vert|vertical|vi|vie|view|vim|vimgrep|vimgrepa|vimgrepadd|visual|viu|viusage|vmapc|vmapclear|vne|vnew|vs|vsplit|vu|vunmap|w|wN|wNext|wa|wall|wh|while|win|winc|wincmd|windo|winp|winpos|winsize|wn|wnext|wp|wprevious|wq|wqa|wqall|write|ws|wsverb|wv|wviminfo|x|xa|xall|xit|xm|xmap|xmapc|xmapclear|xme|xmenu|xn|xnoremap|xnoreme|xnoremenu|xu|xunmap|y|yank)\b/,builtin:/\b(?:acd|ai|akm|aleph|allowrevins|altkeymap|ambiwidth|ambw|anti|antialias|arab|arabic|arabicshape|ari|arshape|autochdir|autocmd|autoindent|autoread|autowrite|autowriteall|aw|awa|background|backspace|backup|backupcopy|backupdir|backupext|backupskip|balloondelay|ballooneval|balloonexpr|bdir|bdlay|beval|bex|bexpr|bg|bh|bin|binary|biosk|bioskey|bk|bkc|bomb|breakat|brk|browsedir|bs|bsdir|bsk|bt|bufhidden|buflisted|buftype|casemap|ccv|cdpath|cedit|cfu|ch|charconvert|ci|cin|cindent|cink|cinkeys|cino|cinoptions|cinw|cinwords|clipboard|cmdheight|cmdwinheight|cmp|cms|columns|com|comments|commentstring|compatible|complete|completefunc|completeopt|consk|conskey|copyindent|cot|cpo|cpoptions|cpt|cscopepathcomp|cscopeprg|cscopequickfix|cscopetag|cscopetagorder|cscopeverbose|cspc|csprg|csqf|cst|csto|csverb|cuc|cul|cursorcolumn|cursorline|cwh|debug|deco|def|define|delcombine|dex|dg|dict|dictionary|diff|diffexpr|diffopt|digraph|dip|dir|directory|dy|ea|ead|eadirection|eb|ed|edcompatible|ef|efm|ei|ek|enc|encoding|endofline|eol|ep|equalalways|equalprg|errorbells|errorfile|errorformat|esckeys|et|eventignore|expandtab|exrc|fcl|fcs|fdc|fde|fdi|fdl|fdls|fdm|fdn|fdo|fdt|fen|fenc|fencs|fex|ff|ffs|fileencoding|fileencodings|fileformat|fileformats|fillchars|fk|fkmap|flp|fml|fmr|foldcolumn|foldenable|foldexpr|foldignore|foldlevel|foldlevelstart|foldmarker|foldmethod|foldminlines|foldnestmax|foldtext|formatexpr|formatlistpat|formatoptions|formatprg|fp|fs|fsync|ft|gcr|gd|gdefault|gfm|gfn|gfs|gfw|ghr|gp|grepformat|grepprg|gtl|gtt|guicursor|guifont|guifontset|guifontwide|guiheadroom|guioptions|guipty|guitablabel|guitabtooltip|helpfile|helpheight|helplang|hf|hh|hi|hidden|highlight|hk|hkmap|hkmapp|hkp|hl|hlg|hls|hlsearch|ic|icon|iconstring|ignorecase|im|imactivatekey|imak|imc|imcmdline|imd|imdisable|imi|iminsert|ims|imsearch|inc|include|includeexpr|incsearch|inde|indentexpr|indentkeys|indk|inex|inf|infercase|insertmode|invacd|invai|invakm|invallowrevins|invaltkeymap|invanti|invantialias|invar|invarab|invarabic|invarabicshape|invari|invarshape|invautochdir|invautoindent|invautoread|invautowrite|invautowriteall|invaw|invawa|invbackup|invballooneval|invbeval|invbin|invbinary|invbiosk|invbioskey|invbk|invbl|invbomb|invbuflisted|invcf|invci|invcin|invcindent|invcompatible|invconfirm|invconsk|invconskey|invcopyindent|invcp|invcscopetag|invcscopeverbose|invcst|invcsverb|invcuc|invcul|invcursorcolumn|invcursorline|invdeco|invdelcombine|invdg|invdiff|invdigraph|invdisable|invea|inveb|inved|invedcompatible|invek|invendofline|inveol|invequalalways|inverrorbells|invesckeys|invet|invex|invexpandtab|invexrc|invfen|invfk|invfkmap|invfoldenable|invgd|invgdefault|invguipty|invhid|invhidden|invhk|invhkmap|invhkmapp|invhkp|invhls|invhlsearch|invic|invicon|invignorecase|invim|invimc|invimcmdline|invimd|invincsearch|invinf|invinfercase|invinsertmode|invis|invjoinspaces|invjs|invlazyredraw|invlbr|invlinebreak|invlisp|invlist|invloadplugins|invlpl|invlz|invma|invmacatsui|invmagic|invmh|invml|invmod|invmodeline|invmodifiable|invmodified|invmore|invmousef|invmousefocus|invmousehide|invnu|invnumber|invodev|invopendevice|invpaste|invpi|invpreserveindent|invpreviewwindow|invprompt|invpvw|invreadonly|invremap|invrestorescreen|invrevins|invri|invrightleft|invrightleftcmd|invrl|invrlc|invro|invrs|invru|invruler|invsb|invsc|invscb|invscrollbind|invscs|invsecure|invsft|invshellslash|invshelltemp|invshiftround|invshortname|invshowcmd|invshowfulltag|invshowmatch|invshowmode|invsi|invsm|invsmartcase|invsmartindent|invsmarttab|invsmd|invsn|invsol|invspell|invsplitbelow|invsplitright|invspr|invsr|invssl|invsta|invstartofline|invstmp|invswapfile|invswf|invta|invtagbsearch|invtagrelative|invtagstack|invtbi|invtbidi|invtbs|invtermbidi|invterse|invtextauto|invtextmode|invtf|invtgst|invtildeop|invtimeout|invtitle|invto|invtop|invtr|invttimeout|invttybuiltin|invttyfast|invtx|invvb|invvisualbell|invwa|invwarn|invwb|invweirdinvert|invwfh|invwfw|invwildmenu|invwinfixheight|invwinfixwidth|invwiv|invwmnu|invwrap|invwrapscan|invwrite|invwriteany|invwritebackup|invws|isf|isfname|isi|isident|isk|iskeyword|isprint|joinspaces|js|key|keymap|keymodel|keywordprg|km|kmp|kp|langmap|langmenu|laststatus|lazyredraw|lbr|lcs|linebreak|lines|linespace|lisp|lispwords|listchars|loadplugins|lpl|lsp|lz|macatsui|magic|makeef|makeprg|matchpairs|matchtime|maxcombine|maxfuncdepth|maxmapdepth|maxmem|maxmempattern|maxmemtot|mco|mef|menuitems|mfd|mh|mis|mkspellmem|ml|mls|mm|mmd|mmp|mmt|modeline|modelines|modifiable|modified|more|mouse|mousef|mousefocus|mousehide|mousem|mousemodel|mouses|mouseshape|mouset|mousetime|mp|mps|msm|mzq|mzquantum|nf|noacd|noai|noakm|noallowrevins|noaltkeymap|noanti|noantialias|noar|noarab|noarabic|noarabicshape|noari|noarshape|noautochdir|noautoindent|noautoread|noautowrite|noautowriteall|noaw|noawa|nobackup|noballooneval|nobeval|nobin|nobinary|nobiosk|nobioskey|nobk|nobl|nobomb|nobuflisted|nocf|noci|nocin|nocindent|nocompatible|noconfirm|noconsk|noconskey|nocopyindent|nocp|nocscopetag|nocscopeverbose|nocst|nocsverb|nocuc|nocul|nocursorcolumn|nocursorline|nodeco|nodelcombine|nodg|nodiff|nodigraph|nodisable|noea|noeb|noed|noedcompatible|noek|noendofline|noeol|noequalalways|noerrorbells|noesckeys|noet|noex|noexpandtab|noexrc|nofen|nofk|nofkmap|nofoldenable|nogd|nogdefault|noguipty|nohid|nohidden|nohk|nohkmap|nohkmapp|nohkp|nohls|noic|noicon|noignorecase|noim|noimc|noimcmdline|noimd|noincsearch|noinf|noinfercase|noinsertmode|nois|nojoinspaces|nojs|nolazyredraw|nolbr|nolinebreak|nolisp|nolist|noloadplugins|nolpl|nolz|noma|nomacatsui|nomagic|nomh|noml|nomod|nomodeline|nomodifiable|nomodified|nomore|nomousef|nomousefocus|nomousehide|nonu|nonumber|noodev|noopendevice|nopaste|nopi|nopreserveindent|nopreviewwindow|noprompt|nopvw|noreadonly|noremap|norestorescreen|norevins|nori|norightleft|norightleftcmd|norl|norlc|noro|nors|noru|noruler|nosb|nosc|noscb|noscrollbind|noscs|nosecure|nosft|noshellslash|noshelltemp|noshiftround|noshortname|noshowcmd|noshowfulltag|noshowmatch|noshowmode|nosi|nosm|nosmartcase|nosmartindent|nosmarttab|nosmd|nosn|nosol|nospell|nosplitbelow|nosplitright|nospr|nosr|nossl|nosta|nostartofline|nostmp|noswapfile|noswf|nota|notagbsearch|notagrelative|notagstack|notbi|notbidi|notbs|notermbidi|noterse|notextauto|notextmode|notf|notgst|notildeop|notimeout|notitle|noto|notop|notr|nottimeout|nottybuiltin|nottyfast|notx|novb|novisualbell|nowa|nowarn|nowb|noweirdinvert|nowfh|nowfw|nowildmenu|nowinfixheight|nowinfixwidth|nowiv|nowmnu|nowrap|nowrapscan|nowrite|nowriteany|nowritebackup|nows|nrformats|numberwidth|nuw|odev|oft|ofu|omnifunc|opendevice|operatorfunc|opfunc|osfiletype|pa|para|paragraphs|paste|pastetoggle|patchexpr|patchmode|path|pdev|penc|pex|pexpr|pfn|ph|pheader|pi|pm|pmbcs|pmbfn|popt|preserveindent|previewheight|previewwindow|printdevice|printencoding|printexpr|printfont|printheader|printmbcharset|printmbfont|printoptions|prompt|pt|pumheight|pvh|pvw|qe|quoteescape|readonly|remap|report|restorescreen|revins|rightleft|rightleftcmd|rl|rlc|ro|rs|rtp|ruf|ruler|rulerformat|runtimepath|sbo|sc|scb|scr|scroll|scrollbind|scrolljump|scrolloff|scrollopt|scs|sect|sections|secure|sel|selection|selectmode|sessionoptions|sft|shcf|shellcmdflag|shellpipe|shellquote|shellredir|shellslash|shelltemp|shelltype|shellxquote|shiftround|shiftwidth|shm|shortmess|shortname|showbreak|showcmd|showfulltag|showmatch|showmode|showtabline|shq|si|sidescroll|sidescrolloff|siso|sj|slm|smartcase|smartindent|smarttab|smc|smd|softtabstop|sol|spc|spell|spellcapcheck|spellfile|spelllang|spellsuggest|spf|spl|splitbelow|splitright|sps|sr|srr|ss|ssl|ssop|stal|startofline|statusline|stl|stmp|su|sua|suffixes|suffixesadd|sw|swapfile|swapsync|swb|swf|switchbuf|sws|sxq|syn|synmaxcol|syntax|t_AB|t_AF|t_AL|t_CS|t_CV|t_Ce|t_Co|t_Cs|t_DL|t_EI|t_F1|t_F2|t_F3|t_F4|t_F5|t_F6|t_F7|t_F8|t_F9|t_IE|t_IS|t_K1|t_K3|t_K4|t_K5|t_K6|t_K7|t_K8|t_K9|t_KA|t_KB|t_KC|t_KD|t_KE|t_KF|t_KG|t_KH|t_KI|t_KJ|t_KK|t_KL|t_RI|t_RV|t_SI|t_Sb|t_Sf|t_WP|t_WS|t_ZH|t_ZR|t_al|t_bc|t_cd|t_ce|t_cl|t_cm|t_cs|t_da|t_db|t_dl|t_fs|t_k1|t_k2|t_k3|t_k4|t_k5|t_k6|t_k7|t_k8|t_k9|t_kB|t_kD|t_kI|t_kN|t_kP|t_kb|t_kd|t_ke|t_kh|t_kl|t_kr|t_ks|t_ku|t_le|t_mb|t_md|t_me|t_mr|t_ms|t_nd|t_op|t_se|t_so|t_sr|t_te|t_ti|t_ts|t_ue|t_us|t_ut|t_vb|t_ve|t_vi|t_vs|t_xs|tabline|tabpagemax|tabstop|tagbsearch|taglength|tagrelative|tagstack|tal|tb|tbi|tbidi|tbis|tbs|tenc|term|termbidi|termencoding|terse|textauto|textmode|textwidth|tgst|thesaurus|tildeop|timeout|timeoutlen|title|titlelen|titleold|titlestring|toolbar|toolbariconsize|top|tpm|tsl|tsr|ttimeout|ttimeoutlen|ttm|tty|ttybuiltin|ttyfast|ttym|ttymouse|ttyscroll|ttytype|tw|tx|uc|ul|undolevels|updatecount|updatetime|ut|vb|vbs|vdir|verbosefile|vfile|viewdir|viewoptions|viminfo|virtualedit|visualbell|vop|wak|warn|wb|wc|wcm|wd|weirdinvert|wfh|wfw|whichwrap|wi|wig|wildchar|wildcharm|wildignore|wildmenu|wildmode|wildoptions|wim|winaltkeys|window|winfixheight|winfixwidth|winheight|winminheight|winminwidth|winwidth|wiv|wiw|wm|wmh|wmnu|wmw|wop|wrap|wrapmargin|wrapscan|writeany|writebackup|writedelay|ww)\b/,number:/\b(?:0x[\da-f]+|\d+(?:\.\d+)?)\b/i,operator:/\|\||&&|[-+.]=?|[=!](?:[=~][#?]?)?|[<>]=?[#?]?|[*\/%?]|\b(?:is(?:not)?)\b/,punctuation:/[{}[\](),;:]/};(function(s){s.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var e={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(e).forEach(function(t){var n=e[t],a=[];/^\w+$/.test(t)||a.push(/\w+/.exec(t)[0]),t==="diff"&&a.push("bold"),s.languages.diff[t]={pattern:RegExp("^(?:["+n+`].*(?:\r
|
|
210
210
|
?|
|
|
211
211
|
|(?![\\s\\S])))+`,"m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(t)[0]}}}}),Object.defineProperty(s.languages.diff,"PREFIXES",{value:e})})(Prism);Prism.languages.ini={comment:{pattern:/(^[ \f\t\v]*)[#;][^\n\r]*/m,lookbehind:!0},section:{pattern:/(^[ \f\t\v]*)\[[^\n\r\]]*\]?/m,lookbehind:!0,inside:{"section-name":{pattern:/(^\[[ \f\t\v]*)[^ \f\t\v\]]+(?:[ \f\t\v]+[^ \f\t\v\]]+)*/,lookbehind:!0,alias:"selector"},punctuation:/\[|\]/}},key:{pattern:/(^[ \f\t\v]*)[^ \f\n\r\t\v=]+(?:[ \f\t\v]+[^ \f\n\r\t\v=]+)*(?=[ \f\t\v]*=)/m,lookbehind:!0,alias:"attr-name"},value:{pattern:/(=[ \f\t\v]*)[^ \f\n\r\t\v]+(?:[ \f\t\v]+[^ \f\n\r\t\v]+)*/,lookbehind:!0,alias:"attr-value",inside:{"inner-value":{pattern:/^("|').+(?=\1$)/,lookbehind:!0}}},punctuation:/=/};(function(s){var e=s.languages.powershell={comment:[{pattern:/(^|[^`])<#[\s\S]*?#>/,lookbehind:!0},{pattern:/(^|[^`])#.*/,lookbehind:!0}],string:[{pattern:/"(?:`[\s\S]|[^`"])*"/,greedy:!0,inside:null},{pattern:/'(?:[^']|'')*'/,greedy:!0}],namespace:/\[[a-z](?:\[(?:\[[^\]]*\]|[^\[\]])*\]|[^\[\]])*\]/i,boolean:/\$(?:false|true)\b/i,variable:/\$\w+\b/,function:[/\b(?:Add|Approve|Assert|Backup|Block|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|ForEach|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Sort|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Tee|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Where|Write)-[a-z]+\b/i,/\b(?:ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\b/i],keyword:/\b(?:Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\b/i,operator:{pattern:/(^|\W)(?:!|-(?:b?(?:and|x?or)|as|(?:Not)?(?:Contains|In|Like|Match)|eq|ge|gt|is(?:Not)?|Join|le|lt|ne|not|Replace|sh[lr])\b|-[-=]?|\+[+=]?|[*\/%]=?)/i,lookbehind:!0},punctuation:/[|{}[\];(),.]/};e.string[0].inside={function:{pattern:/(^|[^`])\$\((?:\$\([^\r\n()]*\)|(?!\$\()[^\r\n)])*\)/,lookbehind:!0,inside:e},boolean:e.boolean,variable:e.variable}})(Prism);Prism.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/};const jE={".ts":"typescript",".tsx":"tsx",".js":"javascript",".jsx":"jsx",".mjs":"javascript",".cjs":"javascript",".css":"css",".scss":"scss",".sass":"scss",".less":"css",".html":"markup",".xml":"markup",".svg":"markup",".graphql":"graphql",".gql":"graphql",".java":"java",".kt":"kotlin",".kts":"kotlin",".scala":"scala",".groovy":"groovy",".gradle":"groovy",".clj":"clojure",".cljs":"clojure",".c":"c",".h":"c",".cpp":"cpp",".cc":"cpp",".cxx":"cpp",".hpp":"cpp",".hxx":"cpp",".cs":"csharp",".py":"python",".rb":"ruby",".php":"php",".lua":"lua",".pl":"perl",".pm":"perl",".r":"r",".R":"r",".hs":"haskell",".lhs":"haskell",".ex":"elixir",".exs":"elixir",".erl":"erlang",".hrl":"erlang",".rs":"rust",".go":"go",".swift":"swift",".sh":"bash",".bash":"bash",".zsh":"bash",".fish":"bash",".ps1":"powershell",".psm1":"powershell",".psd1":"powershell",".json":"json",".yaml":"yaml",".yml":"yaml",".toml":"toml",".ini":"ini",".cfg":"ini",".conf":"ini",".md":"markdown",".mdx":"markdown",".sql":"sql",".dockerfile":"docker",".nginx":"nginx",".vim":"vim",".vimrc":"vim",".diff":"diff",".patch":"diff",".makefile":"makefile",".mk":"makefile"},Pe="/assets/vscode-icons/",Qp={".7z":`${Pe}file_type_zip.svg`,".R":`${Pe}file_type_r.svg`,".adoc":`${Pe}file_type_asciidoc.svg`,".asciidoc":`${Pe}file_type_asciidoc.svg`,".astro":`${Pe}file_type_astro.svg`,".avi":`${Pe}file_type_video.svg`,".babelrc":`${Pe}file_type_babel.svg`,".bash":`${Pe}file_type_shell.svg`,".bat":`${Pe}file_type_bat.svg`,".bmp":`${Pe}file_type_image.svg`,".c":`${Pe}file_type_c.svg`,".cc":`${Pe}file_type_cpp.svg`,".cfg":`${Pe}file_type_ini.svg`,".circleci":`${Pe}file_type_circleci.svg`,".cjs":`${Pe}file_type_js_official.svg`,".clj":`${Pe}file_type_clojure.svg`,".cljs":`${Pe}file_type_clojure.svg`,".cmd":`${Pe}file_type_bat.svg`,".conf":`${Pe}file_type_ini.svg`,".cpp":`${Pe}file_type_cpp.svg`,".cs":`${Pe}file_type_csharp.svg`,".css":`${Pe}file_type_css.svg`,".csv":`${Pe}file_type_csv.svg`,".cxx":`${Pe}file_type_cpp.svg`,".dart":`${Pe}file_type_dart.svg`,".diff":`${Pe}file_type_diff.svg`,".dockerfile":`${Pe}file_type_docker.svg`,".dockerignore":`${Pe}file_type_docker.svg`,".env":`${Pe}file_type_dotenv.svg`,".env.development":`${Pe}file_type_dotenv.svg`,".env.local":`${Pe}file_type_dotenv.svg`,".env.production":`${Pe}file_type_dotenv.svg`,".env.test":`${Pe}file_type_dotenv.svg`,".erb":`${Pe}file_type_ruby.svg`,".erl":`${Pe}file_type_erlang.svg`,".eslintrc":`${Pe}file_type_eslint.svg`,".eslintrc.js":`${Pe}file_type_eslint.svg`,".eslintrc.json":`${Pe}file_type_eslint.svg`,".ex":`${Pe}file_type_elixir.svg`,".exs":`${Pe}file_type_elixir.svg`,".fish":`${Pe}file_type_shell.svg`,".gif":`${Pe}file_type_image.svg`,".git":`${Pe}file_type_git.svg`,".gitattributes":`${Pe}file_type_git.svg`,".github":`${Pe}file_type_github.svg`,".gitignore":`${Pe}file_type_git.svg`,".gitlab-ci.yml":`${Pe}file_type_gitlab.svg`,".gitmodules":`${Pe}file_type_git.svg`,".go":`${Pe}file_type_go.svg`,".gql":`${Pe}file_type_graphql.svg`,".gradle":`${Pe}file_type_gradle.svg`,".graphql":`${Pe}file_type_graphql.svg`,".groovy":`${Pe}file_type_groovy.svg`,".gz":`${Pe}file_type_zip.svg`,".h":`${Pe}file_type_c.svg`,".hpp":`${Pe}file_type_cpp.svg`,".hrl":`${Pe}file_type_erlang.svg`,".hs":`${Pe}file_type_haskell.svg`,".htm":`${Pe}file_type_html.svg`,".html":`${Pe}file_type_html.svg`,".ico":`${Pe}file_type_image.svg`,".ini":`${Pe}file_type_ini.svg`,".java":`${Pe}file_type_java.svg`,".jl":`${Pe}file_type_julia.svg`,".jpeg":`${Pe}file_type_image.svg`,".jpg":`${Pe}file_type_image.svg`,".js":`${Pe}file_type_js_official.svg`,".json":`${Pe}file_type_json_official.svg`,".json5":`${Pe}file_type_json5.svg`,".jsonc":`${Pe}file_type_json_official.svg`,".jsx":`${Pe}file_type_reactjs.svg`,".kt":`${Pe}file_type_kotlin.svg`,".kts":`${Pe}file_type_kotlin.svg`,".kubernetes.yaml":`${Pe}file_type_kubernetes.svg`,".less":`${Pe}file_type_less.svg`,".lhs":`${Pe}file_type_haskell.svg`,".lock":`${Pe}file_type_lock.svg`,".log":`${Pe}file_type_log.svg`,".lua":`${Pe}file_type_lua.svg`,".markdown":`${Pe}file_type_markdown.svg`,".md":`${Pe}file_type_markdown.svg`,".mdown":`${Pe}file_type_markdown.svg`,".mdx":`${Pe}file_type_markdown.svg`,".mjs":`${Pe}file_type_js_official.svg`,".mk":`${Pe}file_type_makefile.svg`,".mov":`${Pe}file_type_video.svg`,".mp3":`${Pe}file_type_audio.svg`,".mp4":`${Pe}file_type_video.svg`,".nim":`${Pe}file_type_nim.svg`,".nims":`${Pe}file_type_nim.svg`,".patch":`${Pe}file_type_diff.svg`,".pdf":`${Pe}file_type_pdf.svg`,".php":`${Pe}file_type_php.svg`,".pl":`${Pe}file_type_perl.svg`,".pm":`${Pe}file_type_perl.svg`,".png":`${Pe}file_type_image.svg`,".prettier.json":`${Pe}file_type_prettier.svg`,".prettierrc":`${Pe}file_type_prettier.svg`,".ps1":`${Pe}file_type_powershell.svg`,".psd1":`${Pe}file_type_powershell.svg`,".psm1":`${Pe}file_type_powershell.svg`,".py":`${Pe}file_type_python.svg`,".pyw":`${Pe}file_type_python.svg`,".r":`${Pe}file_type_r.svg`,".rar":`${Pe}file_type_zip.svg`,".rb":`${Pe}file_type_ruby.svg`,".rs":`${Pe}file_type_rust.svg`,".rst":`${Pe}file_type_rst.svg`,".sass":`${Pe}file_type_scss.svg`,".scala":`${Pe}file_type_scala.svg`,".scss":`${Pe}file_type_scss.svg`,".sh":`${Pe}file_type_shell.svg`,".sql":`${Pe}file_type_sql.svg`,".sty":`${Pe}file_type_latex.svg`,".svelte":`${Pe}file_type_svelte.svg`,".svg":`${Pe}file_type_svg.svg`,".swift":`${Pe}file_type_swift.svg`,".tar":`${Pe}file_type_tar.svg`,".tar.bz2":`${Pe}file_type_zip.svg`,".tar.gz":`${Pe}file_type_zip.svg`,".terraform":`${Pe}file_type_terraform.svg`,".tex":`${Pe}file_type_latex.svg`,".toml":`${Pe}file_type_toml.svg`,".travis.yml":`${Pe}file_type_travis.svg`,".ts":`${Pe}file_type_typescript_official.svg`,".tsv":`${Pe}file_type_tsv.svg`,".tsx":`${Pe}file_type_typescript_official.svg`,".txt":`${Pe}file_type_text.svg`,".vue":`${Pe}file_type_vue.svg`,".webm":`${Pe}file_type_video.svg`,".webp":`${Pe}file_type_image.svg`,".xml":`${Pe}file_type_xml.svg`,".yaml":`${Pe}file_type_yaml_official.svg`,".yml":`${Pe}file_type_yaml_official.svg`,".zig":`${Pe}file_type_zig.svg`,".zip":`${Pe}file_type_zip.svg`,".zsh":`${Pe}file_type_shell.svg`,"CMakeLists.txt":`${Pe}file_type_cmake.svg`,"Cargo.lock":`${Pe}file_type_cargo.svg`,"Cargo.toml":`${Pe}file_type_cargo.svg`,Dockerfile:`${Pe}file_type_docker.svg`,Gemfile:`${Pe}file_type_ruby.svg`,"Gemfile.lock":`${Pe}file_type_ruby.svg`,Justfile:`${Pe}file_type_just.svg`,Makefile:`${Pe}file_type_makefile.svg`,Pipfile:`${Pe}file_type_python.svg`,"Pipfile.lock":`${Pe}file_type_python.svg`,Procfile:`${Pe}file_type_procfile.svg`,Vagrantfile:`${Pe}file_type_vagrant.svg`,"azure-pipelines.yml":`${Pe}file_type_azurepipelines.svg`,"build.gradle":`${Pe}file_type_gradle.svg`,"build.sbt":`${Pe}file_type_scala.svg`,"docker-compose.yaml":`${Pe}file_type_docker.svg`,"docker-compose.yml":`${Pe}file_type_docker.svg`,dune:`${Pe}file_type_dune.svg`,"gatsby-config.js":`${Pe}file_type_gatsby.svg`,"go.mod":`${Pe}file_type_go.svg`,"go.sum":`${Pe}file_type_go.svg`,"heroku.yml":`${Pe}file_type_heroku.svg`,"jsconfig.json":`${Pe}file_type_jsconfig.svg`,"kubernetes.yaml":`${Pe}file_type_kubernetes.svg`,makefile:`${Pe}file_type_makefile.svg`,"meson.build":`${Pe}file_type_meson.svg`,"mix.exs":`${Pe}file_type_elixir.svg`,"next.config.js":`${Pe}file_type_nextjs.svg`,"nuxt.config.js":`${Pe}file_type_nuxtjs.svg`,"package-lock.json":`${Pe}file_type_npm.svg`,"package.json":`${Pe}file_type_npm.svg`,"pnpm-lock.yaml":`${Pe}file_type_pnpm.svg`,"pom.xml":`${Pe}file_type_maven.svg`,"pubspec.lock":`${Pe}file_type_dart.svg`,"pubspec.yaml":`${Pe}file_type_dart.svg`,"pyproject.toml":`${Pe}file_type_python.svg`,"rebar.config":`${Pe}file_type_erlang.svg`,"requirements.txt":`${Pe}file_type_python.svg`,"terraform.tfvars":`${Pe}file_type_terraform.svg`,"tox.ini":`${Pe}file_type_tox.svg`,"tsconfig.json":`${Pe}file_type_tsconfig.svg`,"vite.config.js":`${Pe}file_type_vite.svg`,"vite.config.ts":`${Pe}file_type_vite.svg`,"webpack.config.js":`${Pe}file_type_webpack.svg`,"yarn.lock":`${Pe}file_type_yarn.svg`,default:`${Pe}default_file.svg`},zf={conflict:{icon:"C",color:"#ff5555",label:"Conflicts"},modified:{icon:"M",color:"#c89a5a",label:"Modified"},added:{icon:"A",color:"#5cb88a",label:"Added"},deleted:{icon:"D",color:"#c85a5a",label:"Deleted"},untracked:{icon:"U",color:"#6ab8c8",label:"Untracked"},renamed:{icon:"R",color:"#9a80c0",label:"Renamed"}};function wv(s){oi.highlightElement(s)}function kv(s){return jE[s]||"plaintext"}function vH(s){return s in oi.languages}function Q1(s){return s.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function Jp(s,e){if(!s)return"";const t=oi.languages[e];if(!t)return Q1(s);try{return oi.highlight(s,t,e)}catch{return Q1(s)}}function ef(s){return typeof s=="string"||typeof s=="number"?String(s):Array.isArray(s)?s.map(ef).join(""):He.isValidElement(s)?ef(s.props.children):""}const wH=/\.(com|org|net|io|dev|app|co|me|info|biz|us|uk|de|fr|jp|cn|ru|edu|gov|mil|int|xyz|tech|online|site|store|blog|cloud|ai|gg|tv|cc|sh|fm|to|ly|gl|so|is|it|at|nl|ch|se|no|fi|dk|be|cz|pl|pt|br|mx|ar|cl|in|au|nz|za|sg|hk|tw|kr|id|ph|th|vn|my)$/i;function Sv(s){const e=s.split("/")[0].split("?")[0].split("#")[0];return wH.test(e)}function kH(s){return!s||s.startsWith("#")||/^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(s)||Sv(s)?!1:s.includes(".")||s.startsWith("/")||s.startsWith("./")||s.startsWith("../")}function SH(s){if(!s||s.includes(`
|
|
@@ -239,7 +239,7 @@ ${Te}`:me=Te}z.sendCommand(t,me),i(""),l(!1),k(new Map),f([]),S(),window.innerWi
|
|
|
239
239
|
`),children:["⑂",P.length]}),M.length>0&&P.length===0&&r.jsxs("span",{className:"aop-subagent-count",title:w("terminal:overview.subagentsCompleted",{count:M.length}),style:{opacity:.5},children:["⑂",M.length]}),s.class&&r.jsx("span",{className:"aop-agent-class",style:{color:`color-mix(in srgb, ${S.color} 65%, var(--text-muted))`,background:`${S.color}10`,borderColor:`${S.color}25`},children:s.class}),l&&f&&r.jsx("span",{className:"aop-area-chip",style:{background:`${f.color}10`,borderColor:`${f.color}25`,color:`color-mix(in srgb, ${f.color} 65%, var(--text-muted))`},children:f.name})]}),s.taskLabel&&r.jsxs("div",{className:"aop-task-label",title:s.taskLabel,children:[r.jsx("span",{className:"task-prefix",children:"📋"}),r.jsx("span",{className:"task-text",children:op(s.taskLabel,L)})]}),_&&(t||_.isUserPrompt)&&r.jsxs("div",{className:`aop-last-message ${_.isUserPrompt?"user":"assistant"}`,title:_.text.split(`
|
|
240
240
|
`)[0],children:[r.jsx("span",{className:"lm-prefix",children:_.isUserPrompt?"▶":"◀"}),r.jsx("span",{className:"lm-text",children:op(_.text,L)}),r.jsx("span",{className:"lm-time",children:Up(_.timestamp)})]}),p&&r.jsxs("div",{className:`aop-match-context aop-match-context--${p.type}`,title:p.text,children:[r.jsx("span",{className:"match-icon",children:p.type==="history"?"📜":p.type==="file"?"📄":"💬"}),r.jsx("span",{className:"match-label",children:p.type==="history"?"history":p.type==="file"?"file":"task"}),r.jsx("span",{className:"match-text",children:op(p.text,L)})]}),t&&r.jsxs("div",{className:"aop-agent-body",children:[E&&r.jsxs("div",{className:"aop-subagents",children:[r.jsx("div",{className:"aop-section-label",children:w("terminal:overview.subagents",{count:M.length})}),M.map(ve=>r.jsxs("div",{className:`aop-subagent-item ${ve.status}`,children:[r.jsx("span",{className:"sub-icon",children:ve.status==="completed"?"✅":ve.status==="failed"?"❌":ve.status==="unknown"?"⬜":"⑂"}),r.jsx("span",{className:"sub-name",children:ve.name}),r.jsx("span",{className:"sub-type",children:ve.type}),ve.description&&r.jsx("span",{className:"sub-desc",title:ve.description,children:op(ve.description,n?30:50)})]},ve.id))]}),R&&r.jsxs("div",{className:"aop-tool-timeline",children:[r.jsx("div",{className:"aop-section-label",children:w("terminal:overview.recentActivity")}),N.map((ve,Q)=>{var ue,oe;const pe=ve.toolInput&&(ve.toolInput.file_path||((ue=ve.toolInput.command)==null?void 0:ue.slice(0,40))||ve.toolInput.pattern||ve.toolInput.description||((oe=ve.toolInput.prompt)==null?void 0:oe.slice(0,50)))||"";return r.jsxs("div",{className:"aop-timeline-entry",children:[r.jsx("span",{className:"tl-time",children:Up(ve.timestamp)}),r.jsx("span",{className:"tl-icon",children:fs[ve.toolName]||fs.default}),r.jsx("span",{className:"tl-tool",children:ve.toolName}),pe&&r.jsx("span",{className:"tl-param",children:pe})]},`${ve.timestamp}-${Q}`)})]}),!I&&(i||o)&&r.jsx("div",{className:"aop-no-activity",children:w("terminal:overview.noToolActivity")})]}),s.contextLimit>0&&r.jsx("div",{className:"aop-context-bar",title:`${Math.round(O*100)}% context used (${Math.round(s.contextUsed/1e3)}k / ${Math.round(s.contextLimit/1e3)}k)`,children:r.jsx("div",{className:"aop-context-fill",style:{width:`${B}%`,backgroundColor:G}})})]})]})}function yU({progress:s,defaultExpanded:e=!1,onAgentClick:t}){const[n,a]=y.useState(null),i=y.useRef(s.status),o=n!==null?!n:s.status==="working"||s.status==="completed"||s.status==="failed";y.useEffect(()=>{i.current!==s.status&&(i.current==="working"&&(s.status==="completed"||s.status==="failed")&&a(!1),i.current=s.status)},[s.status]);const l={working:"#4a9eff",completed:"#22c55e",failed:"#ef4444"},c={working:"⚙️",completed:"✅",failed:"❌"},{t:d}=Ge(["tools"]),f={working:d("tools:progress.workingOn"),completed:d("tools:progress.taskFinished"),failed:d("tools:progress.taskFailed")},p=s.taskDescription.length>80?s.taskDescription.slice(0,80)+"...":s.taskDescription,m=()=>{const x=s.completedAt||Date.now(),w=Math.floor((x-s.startedAt)/1e3);if(w<60)return`${w}s`;const k=Math.floor(w/60),S=w%60;return`${k}m ${S}s`},b=()=>{a(o)};return r.jsxs("div",{className:`agent-progress-indicator status-${s.status} ${o?"expanded":"collapsed"}`,children:[r.jsxs("div",{className:"agent-progress-header",onClick:b,children:[r.jsx("span",{className:"agent-progress-status-icon",style:{color:l[s.status]},children:c[s.status]}),r.jsx("span",{className:"agent-progress-agent-name",onClick:x=>{t&&(x.stopPropagation(),t(s.agentId))},children:s.agentName}),r.jsx("span",{className:"agent-progress-status-text",style:{color:l[s.status]},children:f[s.status]}),r.jsx("span",{className:"agent-progress-elapsed",children:m()}),r.jsx("span",{className:"agent-progress-toggle",children:o?"▼":"▶"})]}),!o&&r.jsx("div",{className:"agent-progress-task-preview",children:p}),o&&r.jsxs("div",{className:"agent-progress-expanded",children:[r.jsx("div",{className:"agent-progress-task-full",children:s.taskDescription}),s.output.length>0&&r.jsx("div",{className:"agent-progress-output-section",children:r.jsx(xU,{output:s.output,agentId:s.agentId,maxHeight:200})})]})]})}function xU({output:s,agentId:e,maxHeight:t=200}){const n=y.useRef(null),a=y.useMemo(()=>s.map((o,l)=>({text:o,isStreaming:!1,timestamp:Date.now()-(s.length-l)*100})),[s]),i=vv({outputs:a,viewMode:"simple"});return y.useEffect(()=>{n.current&&(n.current.scrollTop=n.current.scrollHeight)},[i]),i.length===0?null:r.jsx("div",{ref:n,className:"agent-progress-output",style:{maxHeight:`${t}px`},children:i.map((o,l)=>r.jsx(Tv,{output:o,agentId:e},`progress-${l}`))})}const vU={id:"dracula",name:"Dracula",description:"Vampire purple with fangs pink",colors:{bgPrimary:"#282a36",bgSecondary:"#21222c",bgTertiary:"#343746",borderColor:"#44475a",textPrimary:"#f8f8f2",textSecondary:"#bfbfbf",textMuted:"#6272a4",accentBlue:"#8be9fd",accentGreen:"#50fa7b",accentOrange:"#ffb86c",accentRed:"#ff5555",accentPurple:"#bd93f9",accentCyan:"#8be9fd",accentClaude:"#50fa7b",accentClaudeLight:"#69ff94",accentPink:"#ff79c6",accentYellow:"#f1fa8c",msgUserBg:"rgba(189, 147, 249, 0.12)",msgUserBorder:"#bd93f9",msgUserText:"#bd93f9",msgAssistantBg:"rgba(255, 121, 198, 0.12)",msgAssistantBorder:"#ff79c6",msgAssistantText:"#ff79c6",toolUseBg:"rgba(255, 184, 108, 0.08)",toolUseBorder:"#ffb86c",toolUseText:"#ffb86c",toolUseName:"#8be9fd",toolResultBg:"rgba(80, 250, 123, 0.08)",toolResultBorder:"#50fa7b",toolResultText:"#50fa7b",outputLineBg:"rgba(189, 147, 249, 0.04)",contextBarBg:"rgba(189, 147, 249, 0.25)",contextBarFill:"#bd93f9",taskLabelColor:"#ff79c6"}},UE={id:"muted",name:"Muted",description:"Foggy dawn through frosted glass",colors:{bgPrimary:"#16181c",bgSecondary:"#1c1f24",bgTertiary:"#24282e",borderColor:"#33393f",textPrimary:"#c8ccd4",textSecondary:"#9099a4",textMuted:"#5c6670",accentBlue:"#7aa8c8",accentGreen:"#8ab898",accentOrange:"#c8a878",accentRed:"#c88888",accentPurple:"#a898b8",accentCyan:"#88b8c0",accentClaude:"#8ab898",accentClaudeLight:"#9ac8a8",accentPink:"#b898a8",accentYellow:"#c8c098",msgUserBg:"rgba(138, 184, 152, 0.06)",msgUserBorder:"rgba(138, 184, 152, 0.3)",msgUserText:"#8ab898",msgAssistantBg:"rgba(168, 152, 184, 0.06)",msgAssistantBorder:"rgba(168, 152, 184, 0.3)",msgAssistantText:"#a898b8",toolUseBg:"rgba(200, 168, 120, 0.05)",toolUseBorder:"rgba(200, 168, 120, 0.3)",toolUseText:"#c8a878",toolUseName:"#88b8c0",toolResultBg:"rgba(136, 184, 192, 0.05)",toolResultBorder:"rgba(136, 184, 192, 0.3)",toolResultText:"#88b8c0",outputLineBg:"rgba(144, 153, 164, 0.03)",contextBarBg:"rgba(168, 152, 184, 0.2)",contextBarFill:"#a898b8",taskLabelColor:"#c8a878"}},wU={id:"muted-red",name:"Rosewood",description:"Aged wine by candlelight",colors:{bgPrimary:"#1a1014",bgSecondary:"#221418",bgTertiary:"#2c1c20",borderColor:"#482830",textPrimary:"#f0e4e8",textSecondary:"#c8b0b8",textMuted:"#8c6878",accentBlue:"#8898c8",accentGreen:"#78a890",accentOrange:"#d8a068",accentRed:"#c85868",accentPurple:"#a878a0",accentCyan:"#88a8b0",accentClaude:"#78a890",accentClaudeLight:"#88b8a0",accentPink:"#d88898",accentYellow:"#d8c088",msgUserBg:"rgba(216, 136, 152, 0.10)",msgUserBorder:"#d88898",msgUserText:"#d88898",msgAssistantBg:"rgba(200, 88, 104, 0.10)",msgAssistantBorder:"#c85868",msgAssistantText:"#c85868",toolUseBg:"rgba(216, 160, 104, 0.08)",toolUseBorder:"#d8a068",toolUseText:"#d8a068",toolUseName:"#d8c088",toolResultBg:"rgba(168, 120, 160, 0.08)",toolResultBorder:"#a878a0",toolResultText:"#a878a0",outputLineBg:"rgba(200, 88, 104, 0.03)",contextBarBg:"rgba(216, 136, 152, 0.25)",contextBarFill:"#d88898",taskLabelColor:"#d8c088"}},kU={id:"nord",name:"Nord",description:"Polar night with aurora",colors:{bgPrimary:"#2e3440",bgSecondary:"#3b4252",bgTertiary:"#434c5e",borderColor:"#4c566a",textPrimary:"#eceff4",textSecondary:"#d8dee9",textMuted:"#7b88a1",accentBlue:"#81a1c1",accentGreen:"#a3be8c",accentOrange:"#d08770",accentRed:"#bf616a",accentPurple:"#b48ead",accentCyan:"#88c0d0",accentClaude:"#a3be8c",accentClaudeLight:"#b3ce9c",accentPink:"#b48ead",accentYellow:"#ebcb8b",msgUserBg:"rgba(136, 192, 208, 0.10)",msgUserBorder:"#88c0d0",msgUserText:"#88c0d0",msgAssistantBg:"rgba(163, 190, 140, 0.10)",msgAssistantBorder:"#a3be8c",msgAssistantText:"#a3be8c",toolUseBg:"rgba(208, 135, 112, 0.08)",toolUseBorder:"#d08770",toolUseText:"#d08770",toolUseName:"#ebcb8b",toolResultBg:"rgba(180, 142, 173, 0.08)",toolResultBorder:"#b48ead",toolResultText:"#b48ead",outputLineBg:"rgba(67, 76, 94, 0.3)",contextBarBg:"rgba(129, 161, 193, 0.25)",contextBarFill:"#81a1c1",taskLabelColor:"#ebcb8b"}},SU={id:"solarized-dark",name:"Solarized",description:"Precision-engineered contrast",colors:{bgPrimary:"#002b36",bgSecondary:"#073642",bgTertiary:"#094652",borderColor:"#586e75",textPrimary:"#93a1a1",textSecondary:"#839496",textMuted:"#657b83",accentBlue:"#268bd2",accentGreen:"#859900",accentOrange:"#cb4b16",accentRed:"#dc322f",accentPurple:"#6c71c4",accentCyan:"#2aa198",accentClaude:"#859900",accentClaudeLight:"#95a910",accentPink:"#d33682",accentYellow:"#b58900",msgUserBg:"rgba(42, 161, 152, 0.12)",msgUserBorder:"#2aa198",msgUserText:"#2aa198",msgAssistantBg:"rgba(133, 153, 0, 0.12)",msgAssistantBorder:"#859900",msgAssistantText:"#859900",toolUseBg:"rgba(203, 75, 22, 0.10)",toolUseBorder:"#cb4b16",toolUseText:"#cb4b16",toolUseName:"#b58900",toolResultBg:"rgba(108, 113, 196, 0.10)",toolResultBorder:"#6c71c4",toolResultText:"#6c71c4",outputLineBg:"rgba(7, 54, 66, 0.5)",contextBarBg:"rgba(38, 139, 210, 0.25)",contextBarFill:"#268bd2",taskLabelColor:"#b58900"}},jU={id:"monokai",name:"Monokai",description:"Neon jungle on warm charcoal",colors:{bgPrimary:"#272822",bgSecondary:"#1e1f1a",bgTertiary:"#3e3d32",borderColor:"#49483e",textPrimary:"#f8f8f2",textSecondary:"#cfcfc2",textMuted:"#75715e",accentBlue:"#66d9ef",accentGreen:"#a6e22e",accentOrange:"#fd971f",accentRed:"#f92672",accentPurple:"#ae81ff",accentCyan:"#66d9ef",accentClaude:"#a6e22e",accentClaudeLight:"#b6f23e",accentPink:"#f92672",accentYellow:"#e6db74",msgUserBg:"rgba(249, 38, 114, 0.10)",msgUserBorder:"#f92672",msgUserText:"#f92672",msgAssistantBg:"rgba(166, 226, 46, 0.10)",msgAssistantBorder:"#a6e22e",msgAssistantText:"#a6e22e",toolUseBg:"rgba(253, 151, 31, 0.08)",toolUseBorder:"#fd971f",toolUseText:"#fd971f",toolUseName:"#66d9ef",toolResultBg:"rgba(174, 129, 255, 0.08)",toolResultBorder:"#ae81ff",toolResultText:"#ae81ff",outputLineBg:"rgba(62, 61, 50, 0.3)",contextBarBg:"rgba(249, 38, 114, 0.25)",contextBarFill:"#f92672",taskLabelColor:"#fd971f"}},CU={id:"gruvbox",name:"Gruvbox",description:"Retro coffee shop warmth",colors:{bgPrimary:"#282828",bgSecondary:"#1d2021",bgTertiary:"#3c3836",borderColor:"#504945",textPrimary:"#ebdbb2",textSecondary:"#d5c4a1",textMuted:"#928374",accentBlue:"#83a598",accentGreen:"#b8bb26",accentOrange:"#fe8019",accentRed:"#fb4934",accentPurple:"#d3869b",accentCyan:"#8ec07c",accentClaude:"#b8bb26",accentClaudeLight:"#c8cb36",accentPink:"#d3869b",accentYellow:"#fabd2f",msgUserBg:"rgba(254, 128, 25, 0.10)",msgUserBorder:"#fe8019",msgUserText:"#fe8019",msgAssistantBg:"rgba(142, 192, 124, 0.10)",msgAssistantBorder:"#8ec07c",msgAssistantText:"#8ec07c",toolUseBg:"rgba(250, 189, 47, 0.08)",toolUseBorder:"#fabd2f",toolUseText:"#fabd2f",toolUseName:"#83a598",toolResultBg:"rgba(211, 134, 155, 0.08)",toolResultBorder:"#d3869b",toolResultText:"#d3869b",outputLineBg:"rgba(60, 56, 54, 0.4)",contextBarBg:"rgba(254, 128, 25, 0.25)",contextBarFill:"#fe8019",taskLabelColor:"#fabd2f"}},NU={id:"atom",name:"Atom",description:"Deep space exploration",colors:{bgPrimary:"#0c1014",bgSecondary:"#121820",bgTertiary:"#1a222c",borderColor:"#283040",textPrimary:"#d8e0f0",textSecondary:"#9ca8c0",textMuted:"#5a6880",accentBlue:"#5dade2",accentGreen:"#58d68d",accentOrange:"#f0b060",accentRed:"#ec7063",accentPurple:"#af7ac5",accentCyan:"#48c9b0",accentClaude:"#58d68d",accentClaudeLight:"#68e69d",accentPink:"#f1948a",accentYellow:"#f7dc6f",msgUserBg:"rgba(93, 173, 226, 0.10)",msgUserBorder:"#5dade2",msgUserText:"#5dade2",msgAssistantBg:"rgba(88, 214, 141, 0.10)",msgAssistantBorder:"#58d68d",msgAssistantText:"#58d68d",toolUseBg:"rgba(240, 176, 96, 0.08)",toolUseBorder:"#f0b060",toolUseText:"#f0b060",toolUseName:"#48c9b0",toolResultBg:"rgba(175, 122, 197, 0.08)",toolResultBorder:"#af7ac5",toolResultText:"#af7ac5",outputLineBg:"rgba(26, 34, 44, 0.5)",contextBarBg:"rgba(175, 122, 197, 0.25)",contextBarFill:"#af7ac5",taskLabelColor:"#f7dc6f"}},AU={id:"cyberpunk",name:"Cyberpunk",description:"Neon noir dystopia",colors:{bgPrimary:"#030308",bgSecondary:"#08080f",bgTertiary:"#101018",borderColor:"#181828",textPrimary:"#e8e8ff",textSecondary:"#a0a0c8",textMuted:"#5050a0",accentBlue:"#00f0ff",accentGreen:"#00ff9f",accentOrange:"#ff6600",accentRed:"#ff003c",accentPurple:"#bf00ff",accentCyan:"#00f0ff",accentClaude:"#00ff9f",accentClaudeLight:"#50ffbf",accentPink:"#ff00aa",accentYellow:"#fff000",msgUserBg:"rgba(255, 0, 170, 0.12)",msgUserBorder:"#ff00aa",msgUserText:"#ff00aa",msgAssistantBg:"rgba(0, 255, 159, 0.10)",msgAssistantBorder:"#00ff9f",msgAssistantText:"#00ff9f",toolUseBg:"rgba(191, 0, 255, 0.10)",toolUseBorder:"#bf00ff",toolUseText:"#bf00ff",toolUseName:"#00f0ff",toolResultBg:"rgba(0, 240, 255, 0.08)",toolResultBorder:"#00f0ff",toolResultText:"#00f0ff",outputLineBg:"rgba(191, 0, 255, 0.03)",contextBarBg:"rgba(255, 0, 170, 0.30)",contextBarFill:"#ff00aa",taskLabelColor:"#fff000"}},MU={id:"synthwave",name:"Synthwave",description:"Sunset over chrome horizon",colors:{bgPrimary:"#241b30",bgSecondary:"#1a1424",bgTertiary:"#2e2540",borderColor:"#4a3860",textPrimary:"#f8e8f8",textSecondary:"#c8a8d0",textMuted:"#7860a0",accentBlue:"#2de2e6",accentGreen:"#0abdc6",accentOrange:"#ff9e64",accentRed:"#ff3864",accentPurple:"#9d4edd",accentCyan:"#2de2e6",accentClaude:"#0abdc6",accentClaudeLight:"#2ad0d8",accentPink:"#f706cf",accentYellow:"#fede5d",msgUserBg:"rgba(247, 6, 207, 0.12)",msgUserBorder:"#f706cf",msgUserText:"#f706cf",msgAssistantBg:"rgba(45, 226, 230, 0.10)",msgAssistantBorder:"#2de2e6",msgAssistantText:"#2de2e6",toolUseBg:"rgba(255, 158, 100, 0.10)",toolUseBorder:"#ff9e64",toolUseText:"#ff9e64",toolUseName:"#fede5d",toolResultBg:"rgba(157, 78, 221, 0.10)",toolResultBorder:"#9d4edd",toolResultText:"#9d4edd",outputLineBg:"rgba(157, 78, 221, 0.05)",contextBarBg:"rgba(247, 6, 207, 0.25)",contextBarFill:"#f706cf",taskLabelColor:"#fede5d"}},TU={id:"abyss",name:"Abyss",description:"Pitch-black void, vivid accents",colors:{bgPrimary:"#08090c",bgSecondary:"#0e1014",bgTertiary:"#16181e",borderColor:"#242830",textPrimary:"#b0b4bc",textSecondary:"#808690",textMuted:"#4c5058",accentBlue:"#3d8ab8",accentGreen:"#3ea868",accentOrange:"#c07848",accentRed:"#b84848",accentPurple:"#8060b0",accentCyan:"#3ca8a8",accentClaude:"#3ea868",accentClaudeLight:"#50b878",accentPink:"#a85880",accentYellow:"#b8a840",msgUserBg:"#181c24",msgUserBorder:"#3a2820",msgUserText:"#d0d4dc",msgAssistantBg:"#12161e",msgAssistantBorder:"#1c3838",msgAssistantText:"#a0a8b4",toolUseBg:"#161a22",toolUseBorder:"#3a2820",toolUseText:"#989ea8",toolUseName:"#c07848",toolResultBg:"#121824",toolResultBorder:"#202038",toolResultText:"#989ea8",outputLineBg:"#0a0c10",contextBarBg:"rgba(60, 68, 76, 0.25)",contextBarFill:"#4c5460",taskLabelColor:"#c07848"}},EU={id:"catppuccin",name:"Catppuccin",description:"Cozy pastel mocha cafe",colors:{bgPrimary:"#1e1e2e",bgSecondary:"#181825",bgTertiary:"#313244",borderColor:"#45475a",textPrimary:"#cdd6f4",textSecondary:"#bac2de",textMuted:"#6c7086",accentBlue:"#89b4fa",accentGreen:"#a6e3a1",accentOrange:"#fab387",accentRed:"#f38ba8",accentPurple:"#cba6f7",accentCyan:"#94e2d5",accentClaude:"#a6e3a1",accentClaudeLight:"#b6f3b1",accentPink:"#f5c2e7",accentYellow:"#f9e2af",msgUserBg:"rgba(180, 190, 254, 0.10)",msgUserBorder:"#b4befe",msgUserText:"#b4befe",msgAssistantBg:"rgba(148, 226, 213, 0.10)",msgAssistantBorder:"#94e2d5",msgAssistantText:"#94e2d5",toolUseBg:"rgba(250, 179, 135, 0.08)",toolUseBorder:"#fab387",toolUseText:"#fab387",toolUseName:"#f9e2af",toolResultBg:"rgba(203, 166, 247, 0.08)",toolResultBorder:"#cba6f7",toolResultText:"#cba6f7",outputLineBg:"rgba(49, 50, 68, 0.4)",contextBarBg:"rgba(245, 194, 231, 0.25)",contextBarFill:"#f5c2e7",taskLabelColor:"#fab387"}},_U={id:"github-dark",name:"GitHub Dark",description:"Developer professional minimal",colors:{bgPrimary:"#0d1117",bgSecondary:"#161b22",bgTertiary:"#21262d",borderColor:"#30363d",textPrimary:"#c9d1d9",textSecondary:"#8b949e",textMuted:"#484f58",accentBlue:"#58a6ff",accentGreen:"#3fb950",accentOrange:"#d29922",accentRed:"#f85149",accentPurple:"#a371f7",accentCyan:"#79c0ff",accentClaude:"#3fb950",accentClaudeLight:"#56d364",accentPink:"#f778ba",accentYellow:"#e3b341",msgUserBg:"rgba(88, 166, 255, 0.08)",msgUserBorder:"#58a6ff",msgUserText:"#58a6ff",msgAssistantBg:"rgba(63, 185, 80, 0.08)",msgAssistantBorder:"#3fb950",msgAssistantText:"#3fb950",toolUseBg:"rgba(210, 153, 34, 0.08)",toolUseBorder:"#d29922",toolUseText:"#d29922",toolUseName:"#79c0ff",toolResultBg:"rgba(163, 113, 247, 0.08)",toolResultBorder:"#a371f7",toolResultText:"#a371f7",outputLineBg:"rgba(33, 38, 45, 0.5)",contextBarBg:"rgba(88, 166, 255, 0.25)",contextBarFill:"#58a6ff",taskLabelColor:"#d29922"}},DU={id:"one-dark",name:"One Dark",description:"Moonlit late night coding",colors:{bgPrimary:"#282c34",bgSecondary:"#21252b",bgTertiary:"#2c323c",borderColor:"#3e4451",textPrimary:"#abb2bf",textSecondary:"#828997",textMuted:"#5c6370",accentBlue:"#61afef",accentGreen:"#98c379",accentOrange:"#d19a66",accentRed:"#e06c75",accentPurple:"#c678dd",accentCyan:"#56b6c2",accentClaude:"#98c379",accentClaudeLight:"#a8d389",accentPink:"#e06c75",accentYellow:"#e5c07b",msgUserBg:"rgba(86, 182, 194, 0.10)",msgUserBorder:"#56b6c2",msgUserText:"#56b6c2",msgAssistantBg:"rgba(152, 195, 121, 0.10)",msgAssistantBorder:"#98c379",msgAssistantText:"#98c379",toolUseBg:"rgba(209, 154, 102, 0.08)",toolUseBorder:"#d19a66",toolUseText:"#d19a66",toolUseName:"#e5c07b",toolResultBg:"rgba(198, 120, 221, 0.08)",toolResultBorder:"#c678dd",toolResultText:"#c678dd",outputLineBg:"rgba(44, 50, 60, 0.5)",contextBarBg:"rgba(97, 175, 239, 0.25)",contextBarFill:"#61afef",taskLabelColor:"#d19a66"}},PU={id:"classic",name:"Classic",description:"Original transparent style",colors:{bgPrimary:"#0d0d14",bgSecondary:"#14141e",bgTertiary:"#1c1c28",borderColor:"#2a2a3a",textPrimary:"#d0d0d8",textSecondary:"#8a8a98",textMuted:"#5a6a8a",accentBlue:"#5a8fd4",accentGreen:"#50fa7b",accentOrange:"#c89a5a",accentRed:"#c85a5a",accentPurple:"#9a80c0",accentCyan:"#8be9fd",accentClaude:"#50fa7b",accentClaudeLight:"#69ff94",accentPink:"#c87a9a",accentYellow:"#c8c87a",msgUserBg:"rgba(139, 233, 253, 0.12)",msgUserBorder:"transparent",msgUserText:"#8be9fd",msgAssistantBg:"rgba(80, 250, 123, 0.12)",msgAssistantBorder:"transparent",msgAssistantText:"#50fa7b",toolUseBg:"rgba(255, 184, 108, 0.05)",toolUseBorder:"transparent",toolUseText:"#8be9fd",toolUseName:"#ffb86c",toolResultBg:"rgba(80, 250, 123, 0.06)",toolResultBorder:"transparent",toolResultText:"#50fa7b",outputLineBg:"transparent",contextBarBg:"rgba(106, 154, 120, 0.25)",contextBarFill:"#6a9a78",taskLabelColor:"#8be9fd"}},Ra=[PU,TU,vU,UE,wU,kU,SU,jU,CU,NU,AU,MU,EU,_U,DU];function rd(s){return Ra.find(e=>e.id===s)||UE}const RU="classic";function sf(s){const e=document.documentElement,{colors:t}=s;e.style.setProperty("--bg-primary",t.bgPrimary),e.style.setProperty("--bg-secondary",t.bgSecondary),e.style.setProperty("--bg-tertiary",t.bgTertiary),e.style.setProperty("--border-color",t.borderColor),e.style.setProperty("--text-primary",t.textPrimary),e.style.setProperty("--text-secondary",t.textSecondary),e.style.setProperty("--text-muted",t.textMuted),e.style.setProperty("--accent-blue",t.accentBlue),e.style.setProperty("--accent-green",t.accentGreen),e.style.setProperty("--accent-orange",t.accentOrange),e.style.setProperty("--accent-red",t.accentRed),e.style.setProperty("--accent-purple",t.accentPurple),e.style.setProperty("--accent-cyan",t.accentCyan),e.style.setProperty("--accent-claude",t.accentClaude),e.style.setProperty("--accent-claude-light",t.accentClaudeLight),e.style.setProperty("--accent-pink",t.accentPink),e.style.setProperty("--accent-yellow",t.accentYellow),e.style.setProperty("--msg-user-bg",t.msgUserBg),e.style.setProperty("--msg-user-border",t.msgUserBorder),e.style.setProperty("--msg-user-text",t.msgUserText),e.style.setProperty("--msg-assistant-bg",t.msgAssistantBg),e.style.setProperty("--msg-assistant-border",t.msgAssistantBorder),e.style.setProperty("--msg-assistant-text",t.msgAssistantText),e.style.setProperty("--tool-use-bg",t.toolUseBg),e.style.setProperty("--tool-use-border",t.toolUseBorder),e.style.setProperty("--tool-use-text",t.toolUseText),e.style.setProperty("--tool-use-name",t.toolUseName),e.style.setProperty("--tool-result-bg",t.toolResultBg),e.style.setProperty("--tool-result-border",t.toolResultBorder),e.style.setProperty("--tool-result-text",t.toolResultText),e.style.setProperty("--output-line-bg",t.outputLineBg),e.style.setProperty("--context-bar-bg",t.contextBarBg),e.style.setProperty("--context-bar-fill",t.contextBarFill),e.style.setProperty("--task-label-color",t.taskLabelColor);try{localStorage.setItem("tide-theme",s.id)}catch{}}function Ev(){try{const s=localStorage.getItem("tide-theme");if(s&&Ra.some(e=>e.id===s))return s}catch{}return RU}function LU(){const s=Ev(),e=rd(s);sf(e)}const OU=y.memo(function(){const{t:e}=Ge(["terminal"]),[t,n]=y.useState(!1),[a,i]=y.useState(()=>Ev()),[o,l]=y.useState(-1),c=y.useRef(null),d=y.useRef(null),f=Ra.findIndex(w=>w.id===a);y.useEffect(()=>{if(!t)return;const w=k=>{c.current&&!c.current.contains(k.target)&&n(!1)};return document.addEventListener("mousedown",w),()=>document.removeEventListener("mousedown",w)},[t]),y.useEffect(()=>{t&&l(f)},[t,f]);const p=w=>{const k=w==="next"?(f+1)%Ra.length:(f-1+Ra.length)%Ra.length,S=Ra[k],j=rd(S.id);sf(j),i(S.id)},m=w=>{t||(w.key==="ArrowUp"||w.key==="ArrowLeft"?(w.preventDefault(),p("prev")):w.key==="ArrowDown"||w.key==="ArrowRight"?(w.preventDefault(),p("next")):(w.key==="Enter"||w.key===" ")&&(w.preventDefault(),n(!0)))};y.useEffect(()=>{if(!t)return;const w=k=>{var S,j;k.key==="Escape"?(n(!1),(S=d.current)==null||S.focus()):k.key==="ArrowDown"?(k.preventDefault(),l(C=>(C+1)%Ra.length)):k.key==="ArrowUp"?(k.preventDefault(),l(C=>(C-1+Ra.length)%Ra.length)):k.key==="Enter"&&o>=0&&(k.preventDefault(),b(Ra[o].id),(j=d.current)==null||j.focus())};return document.addEventListener("keydown",w),()=>document.removeEventListener("keydown",w)},[t,o]);const b=w=>{const k=rd(w);sf(k),i(w),n(!1)},x=rd(a);return r.jsxs("div",{className:"theme-selector",ref:c,children:[r.jsxs("button",{ref:d,className:"theme-selector-trigger",onClick:()=>n(!t),onKeyDown:m,title:e("terminal:themeSelector.themeTitle",{name:x.name}),children:[r.jsx("span",{className:"theme-selector-icon",children:"🎨"}),r.jsx("span",{className:"theme-selector-name",children:x.name}),r.jsx("span",{className:"theme-selector-arrow",children:t?"▲":"▼"})]}),t&&r.jsxs("div",{className:"theme-selector-dropdown",onMouseDown:w=>w.stopPropagation(),onClick:w=>w.stopPropagation(),children:[r.jsx("div",{className:"theme-selector-header",children:e("terminal:themeSelector.selectTheme")}),r.jsx("div",{className:"theme-selector-list",children:Ra.map((w,k)=>r.jsxs("button",{className:`theme-selector-option ${w.id===a?"active":""} ${k===o?"highlighted":""}`,onClick:S=>{S.stopPropagation(),b(w.id)},onMouseDown:S=>S.stopPropagation(),onMouseEnter:()=>l(k),children:[r.jsx("span",{className:"theme-option-preview",style:{background:`linear-gradient(135deg, ${w.colors.bgPrimary} 0%, ${w.colors.bgSecondary} 50%, ${w.colors.accentPurple} 100%)`}}),r.jsxs("span",{className:"theme-option-info",children:[r.jsx("span",{className:"theme-option-name",children:w.name}),r.jsx("span",{className:"theme-option-desc",children:w.description})]}),w.id===a&&r.jsx("span",{className:"theme-option-check",children:"✓"})]},w.id))})]})]})}),fN=1e4,IU=3e4,BU=12e4,zU=128,FU=95;function Wb(s){const e=jv(s);return Cv(e.userMessage).userMessage.trim().replace(/\r\n/g,`
|
|
241
241
|
`)}function lp(s){return s.trim().replace(/\r\n/g,`
|
|
242
|
-
`)}function $U(s){return s.startsWith("Using tool:")||s.startsWith("Tool input:")||s.startsWith("Tool result:")||s.startsWith("Bash output:")||s.startsWith("Session started:")||s.startsWith("[thinking]")||s.startsWith("Tokens:")||s.startsWith("Cost:")||s.startsWith("Context (estimated from Codex turn usage):")||s.startsWith("🔄 [System]")||s.startsWith("📋 [System]")||s.startsWith("[System]")}function HU(s,e){if(e.type==="rectangle"&&e.width&&e.height){const t=e.width/2,n=e.height/2;return s.x>=e.center.x-t&&s.x<=e.center.x+t&&s.z>=e.center.z-n&&s.z<=e.center.z+n}if(e.type==="circle"&&e.radius){const t=s.x-e.center.x,n=s.z-e.center.z;return t*t+n*n<=e.radius*e.radius}return!1}const UU=y.memo(function({onSaveSnapshot:e}={}){var _s,ds,ci,Zi,ka;const{t}=Ge(["terminal","common"]),n=ji(),a=Tf(),i=nT(),o=Vx(),l=ev(),c=rT(),d=sT(),f=Xx(),p=Zx(),m=jF(),b=!!m,x=y.useMemo(()=>m?{id:m.agentId,name:m.agentName,class:m.agentClass,status:"idle",provider:"claude",position:{x:0,y:0,z:0},cwd:m.cwd,permissionMode:"interactive",tokensUsed:0,contextUsed:0,contextLimit:2e5,taskCount:0,createdAt:m.createdAt,lastActivity:m.createdAt}:null,[m]),w=Array.from(a),S=w.length===1?w[0]:null,C=(Wx(S)||null)??(b?x:null),N=S??(b?(m==null?void 0:m.agentId)??null:null),_=!!(C!=null&&C.sessionId)&&!b,D=Er(),L=y.useMemo(()=>{if(!N)return null;const Qe=new Set,dt=[];for(const gt of D.values())gt.archived||gt.directories.length===0||gt.assignedAgentIds.includes(N)&&(Qe.add(gt.id),dt.push(gt));const Mt=n.get(N);if(Mt)for(const gt of D.values())gt.archived||gt.directories.length===0||Qe.has(gt.id)||HU({x:Mt.position.x,z:Mt.position.z},gt)&&(Qe.add(gt.id),dt.push(gt));return dt.length===0?null:dt.flatMap(gt=>gt.directories.filter(Dt=>Dt&&Dt.trim().length>0).map(Dt=>({areaId:gt.id,areaName:gt.name,dir:Dt})))},[N,D,n]),{terminalHeight:M,terminalRef:P,handleResizeStart:E}=sH(),{mobileOverviewHeight:R,handleResizeMouseDown:I,handleResizeTouchStart:O}=rH(),B=nH(),q=qx(N),H=y.useMemo(()=>b&&m?m.outputs.map(Qe=>({text:Qe.text||"",timestamp:Qe.timestamp,isStreaming:!1,isUserPrompt:!1})):q,[b,m,q]),G=y.useRef(null),K=y.useRef(null),X=y.useRef(null),[$,re]=y.useState(()=>{const Qe=ra(mt.VIEW_MODE);return Qe==="simple"||Qe==="chat"||Qe==="advanced"?Qe:ra(mt.ADVANCED_VIEW)==="true"?"advanced":"simple"}),[le,F]=y.useState(()=>dd(mt.TERMINAL_FULLSCREEN,!1)),[ne,W]=y.useState(null),[ee,J]=y.useState(null),[V,Z]=y.useState(null),[he,ge]=y.useState(null),[xe,we]=y.useState(!1);Pn("guake-image-modal",ne!==null,()=>W(null)),Pn("guake-bash-modal",ee!==null,()=>J(null)),Pn("guake-response-modal",he!==null,()=>ge(null)),Pn("guake-context-confirm",V!==null,()=>Z(null)),Pn("guake-agent-info",xe,()=>we(!1));const[Se,te]=y.useState(!1),[fe,ve]=y.useState(()=>Xs.isEnabled()),Q=EF(),pe=y.useCallback(Qe=>z.setOverviewPanelOpen(Qe),[]),[ue,oe]=y.useState(!1),[be,je]=y.useState(null),Re=y.useRef(null),et=y.useRef(null),[ye,Ae]=y.useState(!1),[Fe,ae]=y.useState(!1),[ce,de]=y.useState(!1),[me,Ee]=y.useState(!1),_e=y.useRef(0),Ve=i&&C!==null,Te=y.useCallback(()=>{F(Qe=>{const dt=!Qe;return hd(mt.TERMINAL_FULLSCREEN,dt),dt})},[]),Oe=ZM({selectedAgentId:N,hasSessionId:_,reconnectCount:l,historyRefreshTrigger:c,lastPrompts:o,outputScrollRef:G}),Xe=lH({selectedAgentId:N,isOpen:Ve}),at=oH({agents:n,selectedAgentId:N,isOpen:Ve,overviewPanelOpen:Q,loadingHistory:Oe.fetchingHistory,hasModalOpen:!!(ne||ee||he||f||p),outputRef:G}),st=kE({selectedAgentId:S}),ot=nF(),ie=y.useMemo(()=>b||!N?[]:Array.from(ot.values()).filter(Qe=>Qe.agentId===N&&Qe.status==="pending"),[b,N,ot]),Ne=(C==null?void 0:C.class)==="boss"||(C==null?void 0:C.isBoss),Ze=mF(!b&&Ne?N:null),ut=gF(b?null:N),lt=TF(b?null:N);y.useEffect(()=>{Se&&!fe&&(ve(!0),Xs.setEnabled(!0))},[Se,fe]),y.useEffect(()=>{Ve||we(!1)},[Ve]),y.useEffect(()=>{const Qe=C==null?void 0:C.status;if(Re.current==="working"&&Qe==="idle"){et.current&&clearTimeout(et.current);const Mt=N?o.get(N):void 0;je(Mt!=null&&Mt.timestamp?Date.now()-Mt.timestamp:null),oe(!0),et.current=setTimeout(()=>{oe(!1),je(null),et.current=null},4e3)}else Qe==="working"&&(et.current&&(clearTimeout(et.current),et.current=null),oe(!1),je(null));return Re.current=Qe||null,()=>{et.current&&clearTimeout(et.current)}},[C==null?void 0:C.status]);const Bt=y.useMemo(()=>{const{history:Qe}=Oe,dt=new Map;for(const gt of Qe)gt.type==="tool_result"&>.toolUseId&&dt.set(gt.toolUseId,gt.content);return(gt=>gt.map(Dt=>{if(Dt.type==="tool_use"&&Dt.toolName==="Bash"&&Dt.toolUseId){const un=dt.get(Dt.toolUseId);let zt;try{zt=(Dt.toolInput||(Dt.content?JSON.parse(Dt.content):{})).command}catch{}return{...Dt,_bashOutput:un,_bashCommand:zt}}return Dt}))(Qe)},[Oe.history,$]),Ot=SE({outputs:H,viewMode:$}),Ct=y.useMemo(()=>{const Qe=[],dt=new Set,Mt=new Set;let gt=null,Dt=0;for(const un of Bt){if(un.type==="assistant"){const qn=un.uuid?`uuid:${un.uuid}:${lp(un.content)}`:`sig:${un.timestamp}:${lp(un.content)}`;if(dt.has(qn))continue;dt.add(qn),Qe.push(un);continue}if(un.type!=="user"){Qe.push(un);continue}const zt=Wb(un.content),dn=un.uuid?`uuid:${un.uuid}:${zt}`:null;if(dn&&Mt.has(dn))continue;const Tn=un.timestamp?new Date(un.timestamp).getTime():0;gt===zt&&Math.abs(Tn-Dt)<=fN||(Qe.push(un),dn&&Mt.add(dn),gt=zt,Dt=Tn)}return Qe},[Bt]),Pt=y.useMemo(()=>{const Qe=new Map,dt=new Set,Mt=new Map;for(const zt of Ct){const dn=zt.timestamp?new Date(zt.timestamp).getTime():0;if(zt.type==="user"){const vs=Wb(zt.content),Me=Qe.get(vs)??0;dn>Me&&Qe.set(vs,dn);continue}if(zt.type!=="assistant")continue;zt.uuid&&dt.add(zt.uuid);const Tn=lp(zt.content),qn=Mt.get(Tn)??0;dn>qn&&Mt.set(Tn,dn)}const gt=[];let Dt=null,un=0;for(const zt of Ot){if(!zt.isUserPrompt){if(!zt.isStreaming&&!$U(zt.text)){if(zt.uuid&&dt.has(zt.uuid))continue;const vs=lp(zt.text),Me=zt.timestamp||0,Ue=Mt.get(vs);if(Ue&&Math.abs(Me-Ue)<=BU)continue}gt.push(zt);continue}const dn=Wb(zt.text),Tn=zt.timestamp||0,qn=Qe.get(dn);qn&&Tn>=qn&&Tn-qn<=IU||Dt===dn&&Math.abs(Tn-un)<=fN||(gt.push(zt),Dt=dn,un=Tn)}return gt},[Ot,Ct]),Gn=Ct.length+Pt.length,yn=dH({totalMessages:Gn,isOpen:Ve,hasModalOpen:!!(ne||ee||he||f),scrollContainerRef:G,selectedAgentId:N,inputRef:K,textareaRef:X,useTextarea:st.useTextarea});y.useEffect(()=>{if(!(!(ee!=null&&ee.isLive)||!ee.command)){for(const Qe of Pt)if(Qe._bashCommand===ee.command&&Qe._bashOutput){J({command:ee.command,output:Qe._bashOutput,isLive:!1});return}}},[ee,Pt]);const At=y.useCallback((Qe,dt)=>{W({url:Qe,name:dt})},[]),Kt=y.useCallback((Qe,dt)=>{const Mt=Dd(Qe,C==null?void 0:C.cwd),gt=Mt.line?{...dt||{},targetLine:Mt.line}:dt;z.setFileViewerPath(Mt.path,gt,C==null?void 0:C.cwd)},[C==null?void 0:C.cwd]),cs=y.useCallback((Qe,dt)=>{J({command:Qe,output:dt,isLive:dt==="Running..."})},[]),Ln=y.useCallback(Qe=>{ge(Qe)},[]),Ns=y.useCallback(()=>{we(Qe=>!Qe)},[]),[Qn,qt]=y.useState(!0),[Wn,ss]=y.useState(0),[Us,Ga]=y.useState(!1),Js=y.useRef(!1),Gs=y.useRef(!1),us=y.useCallback(()=>{Gs.current||(Js.current=!0,qt(!1))},[]),wa=y.useCallback(()=>ae(!1),[]),bt=y.useCallback(()=>{typeof window>"u"||window.innerWidth>768||(Ga(!0),ss(zU),document.activeElement instanceof HTMLElement&&document.activeElement.blur(),setTimeout(()=>{z.setMobileView("3d"),Ga(!1),ss(0)},FU))},[]),Yt=y.useCallback(Qe=>{Us||ss(Qe)},[Us]);y.useEffect(()=>{qt(!0),ss(0),Ga(!1),Js.current=!1,Gs.current=!0;const Qe=setTimeout(()=>{Gs.current=!1},3e3);return()=>clearTimeout(Qe)},[N]);const De=y.useRef(Oe.handleScroll);De.current=Oe.handleScroll;const nt=y.useCallback(()=>{if(!G.current||B.keyboardScrollLockRef.current)return;const{scrollTop:Qe,scrollHeight:dt,clientHeight:Mt}=G.current,gt=dt-Qe-Mt<150;Gs.current||(Js.current=!gt,gt&&qt(!0)),De.current(B.keyboardScrollLockRef)},[G,B.keyboardScrollLockRef]),pt=q.length>0&&((ds=(_s=q[q.length-1])==null?void 0:_s.text)==null?void 0:ds.length)||0;y.useEffect(()=>{B.keyboardScrollLockRef.current||Js.current||requestAnimationFrame(()=>{if(G.current){const{scrollTop:Qe,scrollHeight:dt,clientHeight:Mt}=G.current;dt-Qe-Mt<150&&(G.current.scrollTop=dt)}})},[q.length,pt,B.keyboardScrollLockRef,G]);const Xt=y.useRef(null);y.useLayoutEffect(()=>{const Qe=Xt.current;Qe!==null&&Qe!==S?(Ae(!1),S&&Oe.hasCachedHistory(S)||de(!0),z.getState().currentSnapshot&&z.setCurrentSnapshot(null)):S||Ae(!1),Xt.current=S},[S]),y.useEffect(()=>{if(!ce||Oe.fetchingHistory)return;const Qe=requestAnimationFrame(()=>{G.current&&(G.current.scrollTop=G.current.scrollHeight),de(!1)});return()=>cancelAnimationFrame(Qe)},[ce,Oe.fetchingHistory,Oe.historyLoadVersion]);const xn=y.useRef(!1);y.useEffect(()=>{Ve&&S&&z.clearUnseenForAgent(S)},[Ve,S]),y.useEffect(()=>{xn.current=!0,ae(!0)},[N,l]),y.useEffect(()=>{Oe.fetchingHistory&&(xn.current=!0,ae(!0))},[Oe.fetchingHistory]),y.useEffect(()=>{if(!Fe||!Ve||Oe.fetchingHistory)return;const Qe=G.current;if(!Qe)return;let dt=null;const Mt=performance.now();let gt=0,Dt=-1;const un=()=>{const{scrollTop:dn,scrollHeight:Tn,clientHeight:qn}=Qe;return Tn-dn-qn<=2},zt=()=>{const dn=performance.now(),Tn=Qe.scrollHeight,qn=Math.abs(Tn-Dt)<=1,vs=un();if(qn&&vs?gt+=1:gt=0,Dt=Tn,gt>=3){ae(!1),dt=null;return}if(dn-Mt>8e3){ae(!1),dt=null;return}dt=requestAnimationFrame(zt)};return dt=requestAnimationFrame(zt),()=>{dt!==null&&cancelAnimationFrame(dt)}},[Fe,Ve,Oe.fetchingHistory,Oe.historyLoadVersion]);const sn=y.useRef(!1);y.useEffect(()=>{sn.current&&!Fe&&xn.current&&(xn.current=!1,Ae(!0)),sn.current=Fe},[Fe]),y.useEffect(()=>{if(!Ve||!xn.current||Fe||Oe.fetchingHistory)return;const Qe=requestAnimationFrame(()=>{xn.current&&(xn.current=!1,Ae(!0))});return()=>cancelAnimationFrame(Qe)},[Oe.historyLoadVersion,Ve,Fe,Oe.fetchingHistory]),y.useEffect(()=>{const Qe=dt=>{if(dt.key==="`"&&!dt.ctrlKey&&!dt.altKey&&C){const Mt=dt.target;Mt.tagName!=="INPUT"&&Mt.tagName!=="TEXTAREA"&&(dt.preventDefault(),z.toggleTerminal())}};return document.addEventListener("keydown",Qe),()=>document.removeEventListener("keydown",Qe)},[C]),y.useEffect(()=>{const Qe=dt=>{dt.key==="Escape"&&(f?(dt.stopImmediatePropagation(),z.clearFileViewerPath()):p?(dt.stopImmediatePropagation(),z.closeContextModal()):he?(dt.stopImmediatePropagation(),ge(null)):ee?(dt.stopImmediatePropagation(),J(null)):ne?(dt.stopImmediatePropagation(),W(null)):Xe.searchMode&&(dt.stopImmediatePropagation(),Xe.closeSearch()))};return document.addEventListener("keydown",Qe,!0),()=>document.removeEventListener("keydown",Qe,!0)},[ne,ee,he,Xe,f,p]);const kn=y.useRef(Ve),Bn=y.useRef(!1);y.useEffect(()=>{kn.current=Ve},[Ve]),y.useEffect(()=>{if(window.innerWidth<=768)return;const dt=Dt=>{var Tn;if(!(Dt instanceof Element))return!1;const un=(Tn=P.current)==null?void 0:Tn.contains(Dt),zt=Dt.closest(".agent-bar"),dn=!!Dt.closest(".modal-overlay, .modal, .image-modal-overlay, .image-modal, .bash-modal-overlay, .bash-modal, .agent-info-modal-overlay, .agent-info-modal, .agent-response-modal, .pasted-text-modal-overlay, .pasted-text-modal, .file-viewer-overlay, .file-viewer-modal, .context-view-modal, .guake-context-confirm-overlay, .guake-context-confirm-modal");return!!un||!!zt||dn},Mt=Dt=>{if(!kn.current){Bn.current=!1;return}Bn.current=!dt(Dt.target)},gt=Dt=>{Bn.current&&(dt(Dt.target)||z.setTerminalOpen(!1),Bn.current=!1)};return document.addEventListener("mousedown",Mt,!0),document.addEventListener("mouseup",gt,!0),()=>{document.removeEventListener("mousedown",Mt,!0),document.removeEventListener("mouseup",gt,!0)}},[]),y.useEffect(()=>{const Qe=()=>{document.hidden&&B.cleanup()};return document.addEventListener("visibilitychange",Qe),()=>document.removeEventListener("visibilitychange",Qe)},[B]),y.useEffect(()=>()=>B.cleanup(),[N,B]);const es=typeof window<"u"&&window.innerWidth<=768;if(!C)return es&&d==="terminal"&&a.size===0?r.jsx("div",{ref:P,className:`guake-terminal open ${le?"fullscreen":""}`,style:{"--terminal-height":`${M}%`},children:r.jsx("div",{className:"guake-content",children:r.jsx("div",{className:"guake-output",style:{display:"flex",alignItems:"center",justifyContent:"center",color:"#6272a4"},children:r.jsxs("div",{style:{textAlign:"center"},children:[r.jsx("div",{style:{fontSize:"48px",marginBottom:"16px"},children:"👆"}),r.jsx("div",{style:{fontSize:"16px"},children:t("terminal:empty.tapAgent")}),r.jsx("div",{style:{fontSize:"14px",marginTop:"8px",opacity:.7},children:t("terminal:empty.switchTo3D")})]})})})}):es&&d==="terminal"&&a.size>0?r.jsx("div",{ref:P,className:`guake-terminal open ${le?"fullscreen":""}`,style:{"--terminal-height":`${M}%`},children:r.jsx("div",{className:"guake-content",children:r.jsx("div",{className:"guake-output",style:{display:"flex",alignItems:"center",justifyContent:"center",color:"#6272a4"},children:r.jsxs("div",{className:"guake-empty loading",children:[t("terminal:empty.loadingTerminal"),r.jsxs("span",{className:"loading-dots",children:[r.jsx("span",{}),r.jsx("span",{}),r.jsx("span",{})]})]})})})}):null;if(!N)return null;const ys=Qe=>{Qe.preventDefault(),Qe.stopPropagation(),_e.current++,Qe.dataTransfer.types.includes("Files")&&Ee(!0)},Os=Qe=>{Qe.preventDefault(),Qe.stopPropagation()},xs=Qe=>{Qe.preventDefault(),Qe.stopPropagation(),_e.current--,_e.current===0&&Ee(!1)},oa=async Qe=>{Qe.preventDefault(),Qe.stopPropagation(),_e.current=0,Ee(!1);const dt=Qe.dataTransfer.files;if(dt.length)for(const Mt of dt){const gt=await st.uploadFile(Mt);gt&&st.setAttachedFiles(Dt=>[...Dt,gt])}};return r.jsxs("div",{ref:P,className:`guake-terminal ${Ve?"open":"collapsed"} ${le&&Ve?"fullscreen":""} ${Se&&Ve?"with-debug-panel":""} ${Q&&Ve?"with-overview-panel":""} ${me?"drag-over":""} ${Wn>0?"mobile-swipe-close-active":""} ${Us?"mobile-swipe-close-closing":""}`,style:{"--terminal-height":`${M}%`,"--mobile-swipe-close-offset":`${Wn}px`,...R>0?{"--guake-mobile-overview-height":`${R}px`}:{}},onDragEnter:ys,onDragOver:Os,onDragLeave:xs,onDrop:oa,children:[r.jsxs("div",{className:"guake-drop-overlay",children:[r.jsx("div",{className:"drop-border"}),r.jsx("span",{className:"drop-icon",children:"📎"}),r.jsx("span",{className:"drop-label",children:t("terminal:input.dropToAttach")})]}),!b&&Se&&Ve&&N&&r.jsx(hU,{agentId:N,onClose:()=>te(!1)}),!b&&Q&&Ve&&N&&r.jsx(gU,{activeAgentId:N,onClose:()=>pe(!1),onSelectAgent:Qe=>{z.setLastSelectionViaDirectClick(!0),z.selectAgent(Qe)}}),!b&&Q&&Ve&&N&&r.jsx("div",{className:"aop-resize-handle",onMouseDown:I,onTouchStart:O}),r.jsxs("div",{className:"guake-content",children:[r.jsx(MH,{selectedAgent:C,selectedAgentId:N,sortedAgents:at.sortedAgents,swipeOffset:at.swipeOffset,viewMode:$,setViewMode:re,searchMode:Xe.searchMode,toggleSearch:Xe.toggleSearch,closeSearch:Xe.closeSearch,debugPanelOpen:Se,setDebugPanelOpen:te,debuggerEnabled:fe,setDebuggerEnabled:ve,overviewPanelOpen:Q,setOverviewPanelOpen:pe,agentInfoOpen:xe,onToggleAgentInfo:Ns,isFullscreen:le,onToggleFullscreen:Te,outputsLength:Ct.length+Pt.length,setContextConfirm:Z,headerRef:at.headerRef,onSaveSnapshot:b?void 0:e,isSnapshotView:b}),Xe.searchMode&&r.jsx(TH,{searchInputRef:Xe.searchInputRef,searchQuery:Xe.searchQuery,setSearchQuery:Xe.setSearchQuery,handleSearch:Xe.handleSearch,closeSearch:Xe.closeSearch,searchLoading:Xe.searchLoading,searchResultsCount:Xe.searchResults.length}),r.jsxs("div",{className:`guake-swipe-container ${at.swipeAnimationClass}`,style:at.swipeOffset!==0?{transform:`translateX(${at.swipeOffset*40}%)`}:void 0,children:[at.sortedAgents.length>1&&at.swipeOffset!==0&&r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:`swipe-indicator left ${at.swipeOffset>.3?"visible":""}`,children:[r.jsx("span",{className:"indicator-icon",children:"←"}),r.jsx("span",{className:"indicator-name",children:(ci=at.nextAgent)==null?void 0:ci.name})]}),r.jsxs("div",{className:`swipe-indicator right ${at.swipeOffset<-.3?"visible":""}`,children:[r.jsx("span",{className:"indicator-name",children:(Zi=at.prevAgent)==null?void 0:Zi.name}),r.jsx("span",{className:"indicator-icon",children:"→"})]})]}),at.sortedAgents.length>1&&at.sortedAgents.length<=8&&at.swipeOffset!==0&&r.jsx("div",{className:`swipe-dots ${Math.abs(at.swipeOffset)>.1?"visible":""}`,children:at.sortedAgents.map((Qe,dt)=>r.jsx("div",{className:`swipe-dot ${dt===at.currentAgentIndex?"active":""}`},Qe.id))}),r.jsx("div",{className:"guake-output",ref:G,onScroll:nt,children:Xe.searchMode&&Xe.searchResults.length>0?r.jsxs(r.Fragment,{children:[r.jsx("div",{className:"guake-search-header",children:t("terminal:header.searchResultsTitle")}),Xe.searchResults.map((Qe,dt)=>r.jsx(Mv,{message:Qe,agentId:N,highlight:Xe.searchQuery,onImageClick:At,onFileClick:Kt,onBashClick:cs,onViewMarkdown:Ln},`s-${dt}`))]}):r.jsxs("div",{className:`guake-history-content ${ye?"fade-in":""}`,children:[ce&&r.jsxs("div",{className:"guake-empty loading",children:[t("terminal:empty.loadingConversation"),r.jsxs("span",{className:"loading-dots",children:[r.jsx("span",{}),r.jsx("span",{}),r.jsx("span",{})]})]}),!ce&&Oe.loadingHistory&&Oe.history.length===0&&q.length===0&&r.jsxs("div",{className:"guake-empty loading",children:[t("terminal:empty.loadingConversation"),r.jsxs("span",{className:"loading-dots",children:[r.jsx("span",{}),r.jsx("span",{}),r.jsx("span",{})]})]}),!ce&&!Oe.loadingHistory&&Oe.history.length===0&&H.length===0&&C.status!=="working"&&r.jsx("div",{className:"guake-empty",children:t("terminal:empty.noOutput")}),!ce&&Oe.hasMore&&!Xe.searchMode&&r.jsx("div",{className:"guake-load-more",children:Oe.loadingMore?r.jsx("span",{children:t("terminal:empty.loadingOlder")}):r.jsx("button",{onClick:Oe.loadMoreHistory,children:t("terminal:empty.loadMore",{count:Oe.totalCount-Oe.history.length})})}),!ce&&r.jsx(HE,{historyMessages:Ct,liveOutputs:Pt,agentId:N,execTasks:ut,subagents:lt,viewMode:$,selectedMessageIndex:yn.selectedIndex,isMessageSelected:yn.isSelected,onImageClick:At,onFileClick:Kt,onBashClick:cs,onViewMarkdown:Ln,scrollContainerRef:G,onScrollTopReached:Oe.loadMoreHistory,isLoadingMore:Oe.loadingMore,hasMore:Oe.hasMore,shouldAutoScroll:Qn,onUserScroll:us,pinToBottom:Fe,onPinCancel:wa,isLoadingHistory:Oe.fetchingHistory},N),!ce&&Ne&&Ze.size>0&&r.jsxs("div",{className:"agent-progress-container",children:[r.jsxs("div",{className:"agent-progress-container-header",children:[r.jsx("span",{className:"progress-crown",children:"👑"}),r.jsx("span",{children:t("terminal:empty.subordinateProgress")}),r.jsx("span",{className:"progress-count",children:t("terminal:empty.activeCount",{count:Ze.size})})]}),Array.from(Ze.values()).map(Qe=>r.jsx(yU,{progress:Qe,defaultExpanded:Qe.status==="working",onAgentClick:z.selectAgent},Qe.agentId))]})]})})]}),r.jsx(IH,{selectedAgent:C,selectedAgentId:N,isOpen:Ve,command:st.command,setCommand:st.setCommand,forceTextarea:st.forceTextarea,setForceTextarea:st.setForceTextarea,useTextarea:st.useTextarea,attachedFiles:st.attachedFiles,setAttachedFiles:st.setAttachedFiles,removeAttachedFile:st.removeAttachedFile,uploadFile:st.uploadFile,pastedTexts:st.pastedTexts,expandPastedTexts:st.expandPastedTexts,incrementPastedCount:st.incrementPastedCount,setPastedTexts:st.setPastedTexts,resetPastedCount:st.resetPastedCount,handleInputFocus:B.handleInputFocus,handleInputBlur:B.handleInputBlur,pendingPermissions:ie,showCompletion:ue,completionElapsed:be,onImageClick:At,inputRef:K,textareaRef:X,isSnapshotView:b,onClearHistory:Oe.clearHistory,canSwipeClose:es&&d==="terminal"&&!ce&&!Xe.searchMode&&!Oe.fetchingHistory,onSwipeCloseOffsetChange:Yt,onSwipeClose:bt}),r.jsxs("div",{className:"guake-agent-status-bar",children:[!b&&(C==null?void 0:C.isDetached)&&r.jsx(tf,{content:r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"tide-tooltip__title",children:["🔄 ",t("terminal:empty.reattachingSessionTitle")]}),r.jsxs("div",{className:"tide-tooltip__text",children:[t("terminal:empty.reattachingSessionDesc"),r.jsx("br",{}),r.jsx("br",{}),r.jsxs("strong",{children:[t("common:labels.status"),":"]})," ",t("terminal:empty.reattachingSessionStatus")]})]}),position:"top",className:"tide-tooltip--detached",children:r.jsxs("span",{className:"guake-detached-badge",title:t("terminal:empty.reattachingBadge"),children:[r.jsx("span",{className:"guake-detached-spinner",children:"🔄"})," ",t("terminal:empty.reattaching")]})}),(C==null?void 0:C.cwd)&&r.jsxs("span",{className:"guake-agent-cwd",children:["📁 ",C.cwd.split("/").filter(Boolean).slice(-2).join("/")||C.cwd]}),L&&L.map(({areaId:Qe,areaName:dt,dir:Mt})=>r.jsxs("span",{className:"guake-agent-area-dir",title:`${dt}: ${Mt}`,onClick:()=>z.openFileExplorerForAreaFolder(Qe,Mt),children:["📂 ",Mt.split("/").filter(Boolean).pop()||Mt]},`${Qe}:${Mt}`)),!b&&C&&(()=>{const Qe=C.contextStats,dt=!!Qe,Mt=Qe?Qe.totalTokens:C.contextUsed||0,gt=Qe?Qe.contextWindow:C.contextLimit||2e5,Dt=Qe?Qe.usedPercent:Math.round(Mt/gt*100),un=Math.round(100-Dt),zt=Dt>=80?"#ff4a4a":Dt>=60?"#ff9e4a":Dt>=40?"#ffd700":"#4aff9e",dn=(Mt/1e3).toFixed(1),Tn=(gt/1e3).toFixed(1);return r.jsxs("span",{className:"guake-agent-context",onClick:()=>z.setContextModalAgentId(N),title:t(dt?"terminal:context.clickToViewStats":"terminal:context.clickToFetchStats"),children:[r.jsx("span",{className:"context-icon",children:"📊"}),r.jsxs("span",{className:"context-label",children:[t("terminal:agentInfo.context"),":"]}),r.jsx("span",{className:"context-bar-mini",children:r.jsx("span",{className:"context-bar-mini-fill",style:{width:`${Math.min(100,Dt)}%`,backgroundColor:zt}})}),r.jsxs("span",{className:"context-tokens",style:{color:zt},children:[dn,"k/",Tn,"k"]}),r.jsxs("span",{className:"context-free",children:["(",t("terminal:context.percentFree",{percent:un}),")"]}),!dt&&r.jsx("span",{className:"context-warning",title:t("terminal:context.clickToFetchStats"),children:"⚠️"})]})})(),r.jsx(OU,{})]})]}),Ve&&!le&&r.jsx("div",{className:"guake-resize-handle",onMouseDown:E,title:t("common:rightPanel.dragToResize")}),r.jsxs("div",{className:`guake-handle ${le&&Ve?"fullscreen":""}`,onClick:()=>{Ve&&z.toggleTerminal()},onDoubleClick:()=>{Ve||z.toggleTerminal()},style:{top:Ve?le?"calc(100vh - 72px)":`min(${M}%, calc(100vh - 72px))`:"0"},children:[r.jsx("span",{className:"guake-handle-icon",children:Ve?"▲":"▼"}),r.jsx("span",{className:"guake-handle-text",children:C.name})]}),ne&&r.jsx(PE,{url:ne.url,name:ne.name,onClose:()=>W(null)}),ee&&r.jsx(RE,{state:ee,onClose:()=>J(null)}),V&&r.jsx(FH,{action:V,selectedAgentId:N,subordinateCount:((ka=C==null?void 0:C.subordinateIds)==null?void 0:ka.length)||0,onClose:()=>Z(null),onClearHistory:Oe.clearHistory}),r.jsx($H,{}),r.jsx(HH,{}),r.jsx(UH,{agent:C,isOpen:xe,onClose:()=>we(!1)}),!b&&r.jsx(LE,{agent:C,content:he,onClose:()=>ge(null)})]})});function GU(s){return s.trim().replace(/^v/i,"")}function mN(s){const t=GU(s).match(/^(\d+(?:\.\d+)*)(?:-([0-9A-Za-z.-]+))?/);if(!t)return null;const n=t[1].split(".").map(i=>Number.parseInt(i,10));if(n.some(Number.isNaN))return null;const a=t[2]?t[2].split("."):[];return{core:n,prerelease:a}}function WU(s,e){if(s.length===0&&e.length===0)return 0;if(s.length===0)return 1;if(e.length===0)return-1;const t=Math.max(s.length,e.length);for(let n=0;n<t;n+=1){const a=s[n],i=e[n];if(a===void 0)return-1;if(i===void 0)return 1;const o=/^\d+$/.test(a)?Number.parseInt(a,10):null,l=/^\d+$/.test(i)?Number.parseInt(i,10):null;if(o!==null&&l!==null){if(o>l)return 1;if(o<l)return-1;continue}if(o!==null)return-1;if(l!==null)return 1;const c=a.localeCompare(i);if(c!==0)return c>0?1:-1}return 0}function qU(s,e){const t=mN(s),n=mN(e);if(!t||!n)return null;const a=Math.max(t.core.length,n.core.length);for(let i=0;i<a;i+=1){const o=t.core[i]??0,l=n.core[i]??0;if(o>l)return 1;if(o<l)return-1}return WU(t.prerelease,n.prerelease)}function YU(s,e){const t=qU(s,e);return t===null?"unknown":t<0?"behind":t>0?"ahead":"equal"}async function VU(s,e={}){const{timeoutMs:t=5e3,fetchImpl:n=fetch}=e;try{const a=new AbortController,i=setTimeout(()=>a.abort(),t),o=Date.now(),l=await n(`https://registry.npmjs.org/${encodeURIComponent(s)}/latest?t=${o}`,{signal:a.signal,headers:{Accept:"application/json"}});if(clearTimeout(i),!l.ok)return null;const c=await l.json();return typeof c.version=="string"?c.version:null}catch{return null}}async function KU(s,e,t={}){const n=await VU(s,t);return n?{currentVersion:e,latestVersion:n,relation:YU(e,n)}:{currentVersion:e,latestVersion:null,relation:"unknown"}}const XU="tide-commander",qb="1.2.1";function ZU(){const[s,e]=y.useState({currentVersion:qb,latestVersion:null,relation:"unknown",isChecking:!1}),t=y.useCallback(async()=>{e(a=>({...a,isChecking:!0}));const n=await KU(XU,qb);e({currentVersion:qb,latestVersion:n.latestVersion,relation:n.relation,isChecking:!1})},[]);return y.useEffect(()=>{t()},[t]),{...s,refresh:t}}const QU=y.memo(function({agent:e,currentIndex:t,agentIndex:n,isTouchInput:a,isTouchDragEnabled:i,isSelected:o,hasUnseenOutput:l,isDragging:c,isDragOver:d,customClasses:f,onDragStart:p,onDragEnd:m,onDragOver:b,onDragEnter:x,onDragLeave:w,onDrop:k,onAgentClick:S,onAgentDoubleClick:j,onTouchStart:C,onTouchMove:N,onTouchEnd:_,onTouchCancel:D,onHoverEnter:L,onHoverLeave:M,onItemRef:P}){const E=y.useMemo(()=>Vi(e.class,f),[e.class,f]),R=!a||i,I=y.useCallback(O=>{P(e.id,O)},[e.id,P]);return r.jsxs("div",{ref:I,className:`agent-bar-item ${o?"selected":""} ${e.status} ${e.isBoss?"is-boss":""} ${c?"dragging":""} ${d?"drag-over":""} ${i?"touch-drag-enabled":""}`,draggable:R,onDragStart:O=>p(O,e),onDragEnd:m,onDragOver:O=>b(O,n),onDragEnter:O=>x(O,n),onDragLeave:w,onDrop:O=>k(O,n),onTouchStart:O=>C(O,e.id),onTouchMove:N,onTouchEnd:_,onTouchCancel:D,onClick:O=>S(e,O),onDoubleClick:()=>j(e),onMouseEnter:()=>L(e),onMouseLeave:M,title:a?`${e.name} (${t+1}) - Long press to reorder`:`${e.name} (${t+1}) - Drag to reorder within group`,children:[r.jsxs("div",{className:"agent-bar-avatar",children:[r.jsx("span",{className:"agent-bar-icon",children:E.icon}),r.jsx("span",{className:"agent-bar-status",style:{backgroundColor:Tx(e.status)}}),l&&r.jsx("span",{className:"agent-bar-notification-badge",title:"New output available - click to view"}),e.status==="idle"&&e.lastActivity>0&&r.jsx("span",{className:"agent-bar-idle-clock",style:{color:Sf(e.lastActivity)},title:jf(e.lastActivity),children:"⏱"})]}),r.jsxs("span",{className:"agent-bar-hotkey",title:`Ctrl+${t+1}`,children:["^",t+1]})]})}),JU=y.memo(function({onFocusAgent:e,onSpawnClick:t,onSpawnBossClick:n,onNewBuildingClick:a,onNewAreaClick:i}){const{t:o}=Ge(["common"]),l=ji(),c=Er(),d=Tf(),f=Kz(),p=Vx(),m=xo(),b=Ua(),x=Df(),[w,k]=y.useState(!1);MM("AgentBar");const S=y.useRef(null),j=y.useRef(null),C=y.useRef(null),N=y.useRef(new Map);y.useEffect(()=>{{k(!1);return}},[m.experimental2DView]),y.useEffect(()=>{const Te=j.current;if(!Te)return;const Oe=Xe=>{Te.scrollWidth<=Te.clientWidth||(Xe.preventDefault(),Te.scrollLeft+=Xe.deltaY)};return Te.addEventListener("wheel",Oe,{passive:!1}),()=>Te.removeEventListener("wheel",Oe)},[]);const[_,D]=y.useState(null),[L,M]=y.useState(new Map),[P,E]=y.useState(null),[R,I]=y.useState(null),O=y.useRef(0),[B,q]=y.useState(null),H=y.useRef(null),G=y.useRef(null),K=y.useRef(null),X=y.useRef(null),$=350,re=8,le=y.useMemo(()=>typeof window>"u"?!1:"ontouchstart"in window||window.matchMedia("(pointer: coarse)").matches,[]),F=y.useMemo(()=>Array.from(l.values()).filter(Te=>!z.isAgentInArchivedArea(Te.id)).sort((Te,Oe)=>(Te.createdAt||0)-(Oe.createdAt||0)),[l,c]),{orderedAgents:ne,moveAgent:W}=vz(F),ee=ne,J=y.useMemo(()=>{const Te=new Map;for(const Oe of ee)Te.set(Oe.id,z.getAreaForAgent(Oe.id));return Te},[ee,c]),V=y.useMemo(()=>{const Te=new Map;for(const Xe of ee){const at=J.get(Xe.id)||null,st=(at==null?void 0:at.id)||null;Te.has(st)||Te.set(st,{area:at,agents:[]}),Te.get(st).agents.push(Xe)}const Oe=Array.from(Te.values());return Oe.sort((Xe,at)=>{var st,ot;return!Xe.area&&at.area?1:Xe.area&&!at.area?-1:!Xe.area&&!at.area?0:(((st=Xe.area)==null?void 0:st.name)||"").localeCompare(((ot=at.area)==null?void 0:ot.name)||"")}),Oe},[ee,J]),Z=y.useRef(e);Z.current=e;const he=y.useRef(P);he.current=P;const ge=y.useRef(ee);ge.current=ee;const xe=y.useRef(J);xe.current=J;const we=y.useRef(W);we.current=W,y.useEffect(()=>{const Te=new Map(L);let Oe=!1;for(const Xe of ee){const at=L.get(Xe.id);Xe.currentTool?(!at||at.tool!==Xe.currentTool)&&(Te.set(Xe.id,{tool:Xe.currentTool,key:Date.now()}),Oe=!0):at&&setTimeout(()=>{M(st=>{const ot=new Map(st);return ot.delete(Xe.id),ot})},1500)}Oe&&M(Te)},[ee.map(Te=>Te.currentTool).join(",")]),y.useEffect(()=>{const Te=f;if(!Te)return;const Oe=N.current.get(Te),Xe=j.current;Oe&&Xe&&requestAnimationFrame(()=>{const at=Oe.getBoundingClientRect(),st=Xe.getBoundingClientRect(),ie=at.left-st.left+Xe.scrollLeft+at.width/2,Ne=Xe.clientWidth;Xe.scrollTo({left:ie-Ne/2,behavior:"smooth"})})},[f]);const Se=y.useCallback((Te,Oe)=>{if(K.current===Te.id){K.current=null,Oe.preventDefault(),Oe.stopPropagation();return}z.setLastSelectionViaDirectClick(!0),Oe.shiftKey?z.addToSelection(Te.id):z.selectAgent(Te.id),z.setTerminalOpen(!0)},[]),te=y.useCallback(Te=>{var Oe;(Oe=Z.current)==null||Oe.call(Z,Te.id),z.setTerminalOpen(!0)},[]),fe=y.useCallback(()=>D(null),[]),ve=y.useCallback((Te,Oe)=>{Oe?N.current.set(Te,Oe):N.current.delete(Te)},[]),Q=y.useCallback((Te,Oe)=>{E(Oe),q(Oe.id),Te.dataTransfer.effectAllowed="move",Te.dataTransfer.setData("text/plain",Oe.id),requestAnimationFrame(()=>{Te.target.classList.add("dragging")})},[]),pe=y.useCallback(Te=>{E(null),I(null),q(null),O.current=0,Te.target.classList.remove("dragging")},[]),ue=y.useCallback((Te,Oe)=>{Te.preventDefault();const Xe=he.current;if(Xe){const at=xe.current.get(Xe.id),st=ge.current[Oe],ot=st?xe.current.get(st.id):null,ie=(at==null?void 0:at.id)??null,Ne=(ot==null?void 0:ot.id)??null;Te.dataTransfer.dropEffect=ie===Ne?"move":"none"}else Te.dataTransfer.dropEffect="move"},[]),oe=y.useCallback((Te,Oe)=>{Te.preventDefault(),O.current++;const Xe=he.current;if(Xe){const at=xe.current.get(Xe.id),st=ge.current[Oe],ot=st?xe.current.get(st.id):null,ie=(at==null?void 0:at.id)??null,Ne=(ot==null?void 0:ot.id)??null;I(ie===Ne?Oe:null)}else I(Oe)},[]),be=y.useCallback(Te=>{O.current--,O.current===0&&I(null)},[]),je=y.useCallback((Te,Oe)=>{Te.preventDefault();const Xe=he.current;if(!Xe)return;const at=ge.current,st=xe.current,ot=at.findIndex(ie=>ie.id===Xe.id);if(ot!==-1&&ot!==Oe){const ie=st.get(Xe.id),Ne=at[Oe],Ze=Ne?st.get(Ne.id):null,ut=(ie==null?void 0:ie.id)??null,lt=(Ze==null?void 0:Ze.id)??null;ut===lt&&we.current(ot,Oe)}E(null),I(null),q(null),O.current=0},[]),Re=y.useCallback(()=>{H.current&&(clearTimeout(H.current),H.current=null)},[]),et=y.useCallback(()=>{X.current&&(clearTimeout(X.current),X.current=null)},[]),ye=y.useCallback((Te,Oe)=>{if(!le||Te.touches.length!==1)return;Re(),et(),q(null);const Xe=Te.touches[0];G.current={agentId:Oe,x:Xe.clientX,y:Xe.clientY},H.current=setTimeout(()=>{q(Oe),K.current=Oe,H.current=null},$)},[Re,et,le]),Ae=y.useCallback(Te=>{if(!le||Te.touches.length!==1)return;const Oe=G.current;if(!Oe||!H.current)return;const Xe=Te.touches[0],at=Xe.clientX-Oe.x,st=Xe.clientY-Oe.y;Math.sqrt(at*at+st*st)>re&&(Re(),G.current=null)},[Re,le]),Fe=y.useCallback(()=>{Re(),G.current=null,he.current||q(null),et(),X.current=setTimeout(()=>{K.current=null,X.current=null},450)},[Re,et]);y.useEffect(()=>()=>{Re(),et()},[Re,et]);const ae=Te=>{const Oe=`common:status.${Te}`;return o(Oe,{defaultValue:o("common:status.unknown")})},{currentVersion:ce,latestVersion:de,relation:me,isChecking:Ee}=ZU(),_e=ce;let Ve=0;return r.jsxs("div",{className:"agent-bar",ref:S,children:[r.jsxs("div",{className:"agent-bar-scroll",ref:j,children:[r.jsxs("div",{className:"agent-bar-version",title:de?`Tide Commander v${_e} (npm: v${de})`:`Tide Commander v${_e}`,children:[r.jsxs("span",{children:["v",_e]}),me==="behind"&&de?r.jsxs("span",{className:"agent-bar-version-badge agent-bar-version-badge-behind",title:`Behind npm latest v${de}`,children:["npm v",de]}):me==="ahead"&&de?r.jsxs("span",{className:"agent-bar-version-badge agent-bar-version-badge-ahead",title:`Ahead of npm latest v${de}`,children:["npm v",de]}):null,me==="behind"?r.jsx("a",{href:"https://github.com/deivid11/tide-commander/releases",target:"_blank",rel:"noopener noreferrer",className:"agent-bar-version-status agent-bar-version-status-behind",title:o("common:agentBar.behindNpmTooltip",{defaultValue:"Current version is behind npm latest"}),children:o("common:agentBar.behindNpm",{defaultValue:"(behind npm)"})}):me==="ahead"?r.jsx("span",{className:"agent-bar-version-status agent-bar-version-status-ahead",title:o("common:agentBar.aheadNpmTooltip",{defaultValue:"Current version is newer than npm latest"}),children:o("common:agentBar.aheadNpm",{defaultValue:"(ahead of npm)"})}):me==="equal"?r.jsx("a",{href:"https://github.com/deivid11/tide-commander/releases",target:"_blank",rel:"noopener noreferrer",className:"agent-bar-version-status",children:o("common:agentBar.updated")}):Ee?r.jsx("span",{className:"agent-bar-version-status",children:o("common:agentBar.checkingNpm",{defaultValue:"(checking npm)"})}):r.jsx("span",{className:"agent-bar-version-status",children:o("common:agentBar.unknownNpm",{defaultValue:"(npm unknown)"})}),w&&r.jsx("button",{className:"agent-bar-hmr-refresh",onClick:KM,title:"Refresh 3D Scene (HMR changes pending)",children:"↻"})]}),r.jsxs("div",{className:"agent-bar-list",ref:C,children:[r.jsxs("button",{className:"agent-bar-spawn-btn",onClick:t,title:o("common:agentBar.spawnNewAgent"),children:[r.jsx("span",{className:"agent-bar-spawn-icon",children:"+"}),r.jsx("span",{className:"agent-bar-spawn-label",children:o("common:agentBar.newAgent")})]}),r.jsxs("button",{className:"agent-bar-spawn-btn agent-bar-boss-btn",onClick:n,title:o("common:agentBar.spawnBoss"),children:[r.jsx("span",{className:"agent-bar-spawn-icon",children:"👑"}),r.jsx("span",{className:"agent-bar-spawn-label",children:o("common:agentBar.newBoss")})]}),r.jsxs("button",{className:"agent-bar-spawn-btn agent-bar-building-btn",onClick:a,title:o("common:agentBar.addNewBuilding"),children:[r.jsx("span",{className:"agent-bar-spawn-icon",children:"🏢"}),r.jsx("span",{className:"agent-bar-spawn-label",children:o("common:agentBar.newBuilding")})]}),r.jsxs("button",{className:"agent-bar-spawn-btn agent-bar-area-btn",onClick:i,title:o("common:agentBar.drawNewArea"),children:[r.jsx("span",{className:"agent-bar-spawn-icon",children:"🔲"}),r.jsx("span",{className:"agent-bar-spawn-label",children:o("common:agentBar.newArea")})]}),V.map(Te=>{var at,st,ot,ie,Ne;const Oe=Te.agents,Xe=!Te.area;return r.jsxs("div",{className:`agent-bar-group ${Xe?"unassigned":""}`,style:{borderColor:((at=Te.area)==null?void 0:at.color)||void 0,background:Te.area?`${Te.area.color}15`:void 0},children:[r.jsx("div",{className:"agent-bar-area-label",children:r.jsx("span",{className:"agent-bar-area-name",style:{color:((st=Te.area)==null?void 0:st.color)||"#888"},children:((ot=Te.area)==null?void 0:ot.name)||o("common:agentBar.unassigned")})}),((ie=Te.area)==null?void 0:ie.directories)&&Te.area.directories.length>0&&r.jsx("div",{className:"agent-bar-folders",children:Te.area.directories.map((Ze,ut)=>r.jsxs("div",{className:"agent-bar-folder-item",onClick:lt=>{lt.stopPropagation(),z.openFileExplorer(Ze)},children:[r.jsx("span",{className:"agent-bar-folder-icon",children:"📁"}),r.jsxs("div",{className:"agent-bar-folder-tooltip",children:[r.jsx("div",{className:"agent-bar-folder-tooltip-path",children:Ze}),r.jsx("div",{className:"agent-bar-folder-tooltip-hint",children:o("common:agentBar.clickToOpen")})]})]},ut))}),Oe.map(Ze=>{const ut=Ve++,lt=ee.findIndex(Bt=>Bt.id===Ze.id);return r.jsx(QU,{agent:Ze,currentIndex:ut,agentIndex:lt,isTouchInput:le,isTouchDragEnabled:B===Ze.id,isSelected:d.has(Ze.id),hasUnseenOutput:x.has(Ze.id),isDragging:(P==null?void 0:P.id)===Ze.id,isDragOver:R===lt,customClasses:b,onDragStart:Q,onDragEnd:pe,onDragOver:ue,onDragEnter:oe,onDragLeave:be,onDrop:je,onAgentClick:Se,onAgentDoubleClick:te,onTouchStart:ye,onTouchMove:Ae,onTouchEnd:Fe,onTouchCancel:Fe,onHoverEnter:D,onHoverLeave:fe,onItemRef:ve},Ze.id)})]},((Ne=Te.area)==null?void 0:Ne.id)||"unassigned")})]})]}),Array.from(L.entries()).map(([Te,Oe])=>{const Xe=N.current.get(Te);if(!Xe)return null;const at=Xe.getBoundingClientRect(),st=fs[Oe.tool]||fs.default;return r.jsxs("div",{className:"agent-bar-tool-bubble",title:Oe.tool,style:{position:"fixed",left:at.left+at.width/2,bottom:window.innerHeight-at.top+8},children:[r.jsx("span",{className:"agent-bar-tool-icon",children:st}),r.jsx("span",{className:"agent-bar-tool-name",children:Oe.tool})]},`tool-${Te}-${Oe.key}`)}),_&&(()=>{const Te=z.getAreaForAgent(_.id),Oe=p.get(_.id),Xe=Vi(_.class,b),at=z.getAgentSupervisorHistory(_.id),st=at.length>0?at[at.length-1]:void 0,ot=Date.now()-(_.createdAt||Date.now()),ie=Math.floor(ot/6e4),Ne=Math.floor(ie/60),Ze=Ne>0?`${Ne}h ${ie%60}m`:`${ie}m`,ut=Pt=>Pt>=1e6?`${(Pt/1e6).toFixed(1)}M`:Pt>=1e3?`${(Pt/1e3).toFixed(1)}K`:Pt.toString(),lt=_.contextLimit>0?Math.round(_.contextUsed/_.contextLimit*100):0,Bt=Pt=>{switch(Pt){case"on_track":return"#4aff9e";case"completed":return"#4a9eff";case"stalled":return"#ff9e4a";case"blocked":return"#ff4a4a";case"idle":return"#888888";default:return"#888888"}},Ot=N.current.get(_.id),Ct={};if(Ot){const Pt=Ot.getBoundingClientRect();Ct.position="fixed",Ct.left=Pt.left+Pt.width/2,Ct.bottom=window.innerHeight-Pt.top+12}return r.jsxs("div",{className:"agent-bar-tooltip",style:Ct,children:[r.jsxs("div",{className:"agent-bar-tooltip-header",children:[r.jsx("span",{className:"agent-bar-tooltip-icon",children:Xe.icon}),r.jsxs("span",{className:"agent-bar-tooltip-name",children:[r.jsx("img",{src:_.provider==="codex"?"/assets/codex.png":"/assets/claude.png",alt:_.provider,className:"agent-bar-provider-icon",title:_.provider==="codex"?"Codex Agent":"Claude Agent"}),_.name]}),r.jsx("span",{className:"agent-bar-tooltip-status",style:{color:Tx(_.status)},children:ae(_.status)})]}),r.jsxs("div",{className:"agent-bar-tooltip-info",children:[r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:labels.class"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value",children:[_.class," — ",Xe.description]})]}),Te&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:agentPopup.area"),":"]}),r.jsx("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-area",style:{color:Te.color},children:Te.name})]}),r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:agentPopup.directory"),":"]}),r.jsx("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-path",children:_.cwd})]}),r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:labels.uptime"),":"]}),r.jsx("span",{className:"agent-bar-tooltip-value",children:Ze})]}),r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:labels.tokens"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value",children:[ut(_.tokensUsed)," ",o("common:agentPopup.used")]})]}),r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:labels.context"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value",style:{color:lt>80?"#ff4a4a":lt>60?"#ff9e4a":void 0},children:[ut(_.contextUsed)," / ",ut(_.contextLimit)," (",lt,"%)"]})]}),_.currentTool&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:agentPopup.tool"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-tool",children:[fs[_.currentTool]||fs.default," ",_.currentTool]})]}),_.taskLabel&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsx("span",{className:"agent-bar-tooltip-label",children:"📋 Task:"}),r.jsx("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-tool",children:_.taskLabel})]}),_.currentTask&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:labels.task"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value",children:[_.currentTask.substring(0,150),_.currentTask.length>150?"...":""]})]}),_.lastAssignedTask&&!_.currentTask&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:agentPopup.assignedTask"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-query",children:[_.lastAssignedTask.substring(0,200),_.lastAssignedTask.length>200?"...":""]})]}),Oe&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:agentPopup.lastQuery"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-query",children:[Oe.text.substring(0,300),Oe.text.length>300?"...":""]})]}),st&&r.jsxs(r.Fragment,{children:[r.jsx("div",{className:"agent-bar-tooltip-divider"}),r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:agentPopup.supervisor"),":"]}),r.jsx("span",{className:"agent-bar-tooltip-value",style:{color:Bt(st.analysis.progress)},children:st.analysis.progress.replace("_"," ")})]}),r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:labels.status"),":"]}),r.jsx("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-supervisor",children:st.analysis.statusDescription})]}),st.analysis.recentWorkSummary&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:labels.summary"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-supervisor",children:[st.analysis.recentWorkSummary.substring(0,300),st.analysis.recentWorkSummary.length>300?"...":""]})]}),st.analysis.concerns&&st.analysis.concerns.length>0&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:labels.concerns"),":"]}),r.jsx("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-concerns",children:st.analysis.concerns.join("; ")})]})]})]})]})})()]})});function eG({activeTool:s,onExit:e}){const{t}=Ge(["notifications","terminal"]);if(!s||s==="select")return null;const n=t(s==="rectangle"?"notifications:drawing.rectangleTool":"notifications:drawing.circleTool"),a=s==="rectangle"?"▭":"○";return r.jsxs("div",{className:"drawing-mode-indicator",children:[r.jsxs("div",{className:"drawing-mode-content",children:[r.jsx("span",{className:"drawing-mode-icon",children:a}),r.jsxs("div",{className:"drawing-mode-text",children:[r.jsxs("span",{className:"drawing-mode-title",children:[t("terminal:drawingMode.drawingArea"),": ",n]}),r.jsxs("span",{className:"drawing-mode-hint",children:[t("terminal:drawingMode.clickAndDrag")," • ",t("terminal:drawingMode.pressEscape")]})]})]}),r.jsx("button",{className:"drawing-mode-exit",onClick:e,title:t("terminal:drawingMode.exitDrawingMode"),children:"✕"})]})}const tG={idle:"common:status.idle",working:"common:status.working",waiting:"common:status.waiting",error:"common:status.error",offline:"common:status.offline"},Yb=s=>s>=1e6?`${(s/1e6).toFixed(1)}M`:s>=1e3?`${(s/1e3).toFixed(1)}K`:s.toString(),nG=s=>{switch(s){case"on_track":return"#4aff9e";case"completed":return"#4a9eff";case"stalled":return"#ff9e4a";case"blocked":return"#ff4a4a";case"idle":return"#888888";default:return"#888888"}},sG=y.memo(function({agent:e,screenPos:t,onClose:n}){const{t:a}=Ge(["common"]),i=Ua(),o=z.getAreaForAgent(e.id),l=z.getState().lastPrompts.get(e.id),c=Vi(e.class,i),d=z.getAgentSupervisorHistory(e.id),f=d.length>0?d[d.length-1]:void 0,p=Date.now()-(e.createdAt||Date.now()),m=Math.floor(p/6e4),b=Math.floor(m/60),x=b>0?`${b}h ${m%60}m`:`${m}m`,w=e.contextLimit>0?Math.round(e.contextUsed/e.contextLimit*100):0,k=y.useMemo(()=>{let C=t.x-150,N=t.y-320-10;return typeof window<"u"&&(C<10?C=10:C+300>window.innerWidth-10&&(C=window.innerWidth-300-10),N<10&&(N=t.y+10)),{position:"fixed",left:C,top:N,zIndex:1e4,maxWidth:300,maxHeight:320,fontSize:"0.85em"}},[t.x,t.y]);return r.jsxs("div",{className:"agent-hover-popup",style:k,onMouseLeave:n,children:[r.jsxs("div",{className:"agent-bar-tooltip-header",children:[r.jsx("span",{className:"agent-bar-tooltip-icon",children:c.icon}),r.jsx("span",{className:"agent-bar-tooltip-name",children:e.name}),r.jsx("span",{className:"agent-bar-tooltip-status",style:{color:Tx(e.status)},children:a(tG[e.status]||"common:status.unknown")})]}),r.jsxs("div",{className:"agent-bar-tooltip-info",children:[r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:labels.class"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value",children:[e.class," — ",c.description]})]}),o&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:agentPopup.area"),":"]}),r.jsx("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-area",style:{color:o.color},children:o.name})]}),r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:agentPopup.directory"),":"]}),r.jsx("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-path",children:e.cwd})]}),r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:labels.uptime"),":"]}),r.jsx("span",{className:"agent-bar-tooltip-value",children:x})]}),r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:labels.tokens"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value",children:[Yb(e.tokensUsed)," ",a("common:agentPopup.used")]})]}),r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:labels.context"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value",style:{color:w>80?"#ff4a4a":w>60?"#ff9e4a":void 0},children:[Yb(e.contextUsed)," / ",Yb(e.contextLimit)," (",w,"%)"]})]}),e.currentTool&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:agentPopup.tool"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-tool",children:[fs[e.currentTool]||fs.default," ",e.currentTool]})]}),e.currentTask&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:labels.task"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value",children:[e.currentTask.substring(0,150),e.currentTask.length>150?"...":""]})]}),e.lastAssignedTask&&!e.currentTask&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:agentPopup.assignedTask"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-query",children:[e.lastAssignedTask.substring(0,200),e.lastAssignedTask.length>200?"...":""]})]}),l&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:agentPopup.lastQuery"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-query",children:[l.text.substring(0,300),l.text.length>300?"...":""]})]}),f&&r.jsxs(r.Fragment,{children:[r.jsx("div",{className:"agent-bar-tooltip-divider"}),r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:agentPopup.supervisor"),":"]}),r.jsx("span",{className:"agent-bar-tooltip-value",style:{color:nG(f.analysis.progress)},children:f.analysis.progress.replace("_"," ")})]}),r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:labels.status"),":"]}),r.jsx("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-supervisor",children:f.analysis.statusDescription})]}),f.analysis.recentWorkSummary&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:labels.summary"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-supervisor",children:[f.analysis.recentWorkSummary.substring(0,300),f.analysis.recentWorkSummary.length>300?"...":""]})]}),f.analysis.concerns&&f.analysis.concerns.length>0&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:labels.concerns"),":"]}),r.jsx("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-concerns",children:f.analysis.concerns.join("; ")})]})]})]})]})});function gN(s){if(s===0)return"0 B";const e=1024,t=["B","KB","MB","GB"],n=Math.floor(Math.log(s)/Math.log(e));return parseFloat((s/Math.pow(e,n)).toFixed(1))+" "+t[n]}function bN(s){const t=Date.now()-s,n=Math.floor(t/(1e3*60*60)),a=Math.floor(t%(1e3*60*60)/(1e3*60));return n>0?`${n}h ${a}m`:`${a}m`}const yN={30:"#1a1a1a",31:"#e74c3c",32:"#2ecc71",33:"#f39c12",34:"#3498db",35:"#9b59b6",36:"#00bcd4",37:"#ecf0f1",90:"#7f8c8d",91:"#ff6b6b",92:"#4ade80",93:"#fbbf24",94:"#60a5fa",95:"#c084fc",96:"#22d3ee",97:"#ffffff"};function aG(s){const e=[],t=/\x1B\[([0-9;]*)m/g;let n=0,a=null,i;for(;(i=t.exec(s))!==null;){if(i.index>n){const l=s.slice(n,i.index);a?e.push(r.jsx("span",{style:{color:a},children:l},e.length)):e.push(l)}const o=i[1].split(";").map(Number);for(const l of o)l===0||l===39?a=null:yN[l]&&(a=yN[l]);n=t.lastIndex}if(n<s.length){const o=s.slice(n);a?e.push(r.jsx("span",{style:{color:a},children:o},e.length)):e.push(o)}return e.length>0?e:[s]}const iG=y.memo(function({building:e,screenPos:t,onClose:n,onOpenSettings:a,onOpenLogsModal:i,onOpenUrlInModal:o}){var H,G,K,X,$,re,le,F,ne,W,ee,J,V,Z,he,ge,xe,we,Se,te;const{t:l}=Ge(["terminal","common"]),[c,d]=y.useState(!1),[f,p]=y.useState(null),[m,b]=y.useState(!1),x=y.useRef(null),w=y.useRef(f);w.current=f;const{buildingLogs:k}=Un(),S=z.getBuildingLogs(e.id),j=(H=e.pm2)==null?void 0:H.enabled,C=(G=e.docker)==null?void 0:G.enabled,N=y.useRef(null),_=y.useRef(null),D=y.useCallback(fe=>{fe.preventDefault();const ve=w.current?w.current.x:0,Q=w.current?w.current.y:0;x.current={mouseX:fe.clientX,mouseY:fe.clientY,popupX:ve,popupY:Q},b(!0),N.current=pe=>{if(!x.current)return;const ue=pe.clientX-x.current.mouseX,oe=pe.clientY-x.current.mouseY;p({x:x.current.popupX+ue,y:x.current.popupY+oe})},_.current=()=>{b(!1),x.current=null,N.current&&document.removeEventListener("mousemove",N.current),_.current&&document.removeEventListener("mouseup",_.current)},document.addEventListener("mousemove",N.current),document.addEventListener("mouseup",_.current)},[]);y.useEffect(()=>()=>{N.current&&document.removeEventListener("mousemove",N.current),_.current&&document.removeEventListener("mouseup",_.current)},[]);const L=fe=>{if(fe==="logs"){if((j||C)&&i){i();return}z.sendBuildingCommand(e.id,fe),d(!0)}else z.sendBuildingCommand(e.id,fe)},M=(fe,ve)=>{if(fe){const Q=`http://localhost:${fe}`;ve&&o?o(Q):window.open(Q,"_blank")}},P=((K=e.pm2Status)==null?void 0:K.ports)||[],E=(($=(X=e.dockerStatus)==null?void 0:X.ports)==null?void 0:$.map(fe=>fe.host))||[],R=j?P:C?E:[],I=j?!!((re=e.pm2)!=null&&re.script):C?!!((le=e.docker)!=null&&le.image)||((F=e.docker)==null?void 0:F.mode)==="compose"||((ne=e.docker)==null?void 0:ne.mode)==="existing":!!((W=e.commands)!=null&&W.start),O=j?!!((ee=e.pm2)!=null&&ee.script):C?!0:!!((J=e.commands)!=null&&J.stop),B=j?!!((V=e.pm2)!=null&&V.script):C?!0:!!((Z=e.commands)!=null&&Z.restart),q=y.useMemo(()=>{const ve=c?400:250;let Q=t.x+20,pe=t.y-80;return typeof window<"u"&&!f&&(t.x+20+280>window.innerWidth&&(Q=t.x-280-20),t.y-80<0?pe=10:t.y-80+ve>window.innerHeight&&(pe=window.innerHeight-ve-10)),{position:"fixed",left:Q+((f==null?void 0:f.x)||0),top:pe+((f==null?void 0:f.y)||0),zIndex:1e3,cursor:m?"grabbing":void 0}},[t.x,t.y,c,f,m]);return r.jsxs("div",{className:"building-action-popup",style:q,onClick:fe=>fe.stopPropagation(),children:[r.jsxs("div",{className:`building-popup-header ${m?"dragging":""}`,onMouseDown:D,children:[r.jsx("span",{className:"building-popup-name",children:e.name}),R.length>0&&r.jsx("span",{className:"building-popup-ports",children:R.map(fe=>r.jsxs("a",{href:`http://localhost:${fe}`,className:"building-popup-port-link",onClick:ve=>{ve.preventDefault(),ve.stopPropagation(),M(fe,ve.altKey)},onMouseDown:ve=>ve.stopPropagation(),title:`Open http://localhost:${fe} (Alt+Click for modal)`,children:[":",fe]},fe))}),r.jsx("span",{className:"building-popup-status",style:{backgroundColor:mo[e.status]},children:e.status}),r.jsx("button",{className:"building-popup-close",onClick:n,children:"x"})]}),j&&e.pm2Status&&r.jsxs("div",{className:"building-popup-metrics",children:[r.jsxs("span",{className:"metric",children:[r.jsx("span",{className:"label",children:"PID"}),r.jsx("span",{className:"value",children:e.pm2Status.pid||"-"})]}),r.jsxs("span",{className:"metric",children:[r.jsx("span",{className:"label",children:"CPU"}),r.jsxs("span",{className:"value",children:[((he=e.pm2Status.cpu)==null?void 0:he.toFixed(1))||"0","%"]})]}),r.jsxs("span",{className:"metric",children:[r.jsx("span",{className:"label",children:"MEM"}),r.jsx("span",{className:"value",children:gN(e.pm2Status.memory||0)})]}),e.pm2Status.restarts!==void 0&&e.pm2Status.restarts>0&&r.jsxs("span",{className:"metric",children:[r.jsx("span",{className:"label",children:"RST"}),r.jsx("span",{className:"value",children:e.pm2Status.restarts})]}),e.pm2Status.uptime&&r.jsxs("span",{className:"metric",children:[r.jsx("span",{className:"label",children:"UP"}),r.jsx("span",{className:"value",children:bN(e.pm2Status.uptime)})]})]}),C&&e.dockerStatus&&r.jsxs("div",{className:"building-popup-metrics",children:[r.jsxs("span",{className:"metric",children:[r.jsx("span",{className:"label",children:"ID"}),r.jsx("span",{className:"value",children:e.dockerStatus.containerId||"-"})]}),e.dockerStatus.cpu!==void 0&&r.jsxs("span",{className:"metric",children:[r.jsx("span",{className:"label",children:"CPU"}),r.jsxs("span",{className:"value",children:[e.dockerStatus.cpu.toFixed(1),"%"]})]}),e.dockerStatus.memory!==void 0&&r.jsxs("span",{className:"metric",children:[r.jsx("span",{className:"label",children:"MEM"}),r.jsx("span",{className:"value",children:gN(e.dockerStatus.memory)})]}),e.dockerStatus.health&&e.dockerStatus.health!=="none"&&r.jsxs("span",{className:"metric",children:[r.jsx("span",{className:"label",children:"HEALTH"}),r.jsx("span",{className:"value",style:{color:e.dockerStatus.health==="healthy"?"#4ade80":e.dockerStatus.health==="unhealthy"?"#f87171":"#fbbf24"},children:e.dockerStatus.health==="healthy"?"✓":e.dockerStatus.health==="unhealthy"?"✗":"..."})]}),e.dockerStatus.startedAt&&r.jsxs("span",{className:"metric",children:[r.jsx("span",{className:"label",children:"UP"}),r.jsx("span",{className:"value",children:bN(e.dockerStatus.startedAt)})]})]}),C&&((ge=e.dockerStatus)==null?void 0:ge.services)&&e.dockerStatus.services.length>0&&r.jsx("div",{className:"building-popup-services",children:e.dockerStatus.services.map((fe,ve)=>r.jsxs("span",{className:"service-item",title:`${fe.name}: ${fe.status}`,children:[r.jsx("span",{className:"service-indicator",style:{backgroundColor:fe.status==="running"?"#4ade80":"#f87171"}}),r.jsx("span",{className:"service-name",children:fe.name})]},ve))}),(e.lastError||j&&((xe=e.pm2Status)==null?void 0:xe.status)==="errored"||C&&((we=e.dockerStatus)==null?void 0:we.status)==="dead")&&r.jsxs("div",{className:"building-popup-error",children:[e.lastError||l("terminal:building.processFailedToStart"),j&&((Se=e.pm2Status)==null?void 0:Se.restarts)&&e.pm2Status.restarts>5&&r.jsxs("span",{className:"error-hint",children:[" - ",l("terminal:building.checkLogsOrConfig")]}),C&&((te=e.dockerStatus)==null?void 0:te.health)==="unhealthy"&&r.jsxs("span",{className:"error-hint",children:[" - ",l("terminal:building.healthCheckFailing")]})]}),r.jsxs("div",{className:"building-popup-actions",children:[r.jsxs("button",{className:"action-btn start",onClick:()=>L("start"),disabled:!I||e.status==="running"||e.status==="starting",title:l(I?"terminal:buildingAction.start":"terminal:buildingAction.noStartCommand"),children:[r.jsx("span",{className:"icon",children:"▶"}),l("terminal:buildingAction.start")]}),r.jsxs("button",{className:"action-btn stop",onClick:()=>L("stop"),disabled:!O||e.status==="stopped"||e.status==="stopping",title:l(O?"terminal:buildingAction.stop":"terminal:buildingAction.noStopCommand"),children:[r.jsx("span",{className:"icon",children:"■"}),l("terminal:buildingAction.stop")]}),r.jsxs("button",{className:"action-btn restart",onClick:()=>L("restart"),disabled:!B,title:l(B?"terminal:buildingAction.restart":"terminal:buildingAction.noRestartCommand"),children:[r.jsx("span",{className:"icon",children:"↺"}),l("terminal:buildingAction.restart")]}),r.jsxs("button",{className:"action-btn logs",onClick:()=>L("logs"),title:l("terminal:buildingAction.viewLogs"),children:[r.jsx("span",{className:"icon",children:"📄"}),l("terminal:logs.title")]}),R.length===1&&r.jsxs("button",{className:"action-btn open-url",onClick:fe=>M(R[0],fe.altKey),title:`Open http://localhost:${R[0]} (Alt+Click for modal)`,children:[r.jsx("span",{className:"icon",children:"🔗"}),l("terminal:buildingAction.openInBrowser")]}),R.length>1&&r.jsxs("div",{className:"action-btn-group",children:[r.jsxs("span",{className:"action-btn-label",children:[l("terminal:buildingAction.openInBrowser"),":"]}),R.map(fe=>r.jsxs("button",{className:"action-btn open-url port-btn",onClick:ve=>M(fe,ve.altKey),title:`Open http://localhost:${fe} (Alt+Click for modal)`,children:[":",fe]},fe))]})]}),c&&S.length>0&&r.jsxs("div",{className:"building-popup-logs",children:[r.jsxs("div",{className:"logs-header",children:[r.jsx("span",{children:l("terminal:logs.title")}),r.jsx("button",{onClick:()=>z.clearBuildingLogs(e.id),children:l("terminal:logs.clear")})]}),r.jsx("div",{className:"logs-content",children:S.slice(-50).map((fe,ve)=>r.jsx("pre",{children:aG(fe)},ve))})]}),r.jsx("button",{className:"building-popup-settings",onClick:a,children:l("terminal:buildingAction.fullSettings")})]})});function rG(s){if(s===0)return"0 B";const e=1024,t=["B","KB","MB","GB"],n=Math.floor(Math.log(s)/Math.log(e));return parseFloat((s/Math.pow(e,n)).toFixed(1))+" "+t[n]}function oG(s){const t=Date.now()-s,n=Math.floor(t/(1e3*60*60)),a=Math.floor(t%(1e3*60*60)/(1e3*60));return n>0?`${n}h ${a}m`:`${a}m`}const lG=y.memo(function({building:e,screenPos:t,onClose:n,onOpenSettings:a,onOpenLogsModal:i,onOpenUrlInModal:o}){const{t:l}=Ge(["terminal","common"]),[c,d]=y.useState(null),[f,p]=y.useState(!1),m=y.useRef(null),b=y.useRef(c);b.current=c;const{buildings:x}=Un(),k=(e.subordinateBuildingIds||[]).map(P=>x.get(P)).filter(P=>P!==void 0),S=y.useRef(null),j=y.useRef(null),C=y.useCallback(P=>{P.preventDefault();const E=b.current?b.current.x:0,R=b.current?b.current.y:0;m.current={mouseX:P.clientX,mouseY:P.clientY,popupX:E,popupY:R},p(!0),S.current=I=>{if(!m.current)return;const O=I.clientX-m.current.mouseX,B=I.clientY-m.current.mouseY;d({x:m.current.popupX+O,y:m.current.popupY+B})},j.current=()=>{p(!1),m.current=null,S.current&&document.removeEventListener("mousemove",S.current),j.current&&document.removeEventListener("mouseup",j.current)},document.addEventListener("mousemove",S.current),document.addEventListener("mouseup",j.current)},[]);y.useEffect(()=>()=>{S.current&&document.removeEventListener("mousemove",S.current),j.current&&document.removeEventListener("mouseup",j.current)},[]);const N=P=>{z.sendBossBuildingCommand(e.id,P)},_=k.reduce((P,E)=>(P[E.status]=(P[E.status]||0)+1,P),{}),D=k.some(P=>{var E;return(E=P.pm2)==null?void 0:E.enabled}),L=(P,E)=>{const R=`http://localhost:${P}`;E&&o?o(R):window.open(R,"_blank")},M=y.useMemo(()=>{let R=t.x+20,I=t.y-80;return typeof window<"u"&&!c&&(t.x+20+340>window.innerWidth&&(R=t.x-340-20),t.y-80<0?I=10:t.y-80+350>window.innerHeight&&(I=window.innerHeight-350-10)),{position:"fixed",left:R+((c==null?void 0:c.x)||0),top:I+((c==null?void 0:c.y)||0),zIndex:1e3,cursor:f?"grabbing":void 0}},[t.x,t.y,c,f]);return r.jsxs("div",{className:"building-action-popup boss-building-popup",style:M,onClick:P=>P.stopPropagation(),children:[r.jsxs("div",{className:`building-popup-header boss-header ${f?"dragging":""}`,onMouseDown:C,children:[r.jsx("span",{className:"boss-icon",children:"👑"}),r.jsx("span",{className:"building-popup-name",children:e.name}),r.jsx("span",{className:"subordinate-count",children:l("terminal:building.unitsCount",{count:k.length})}),r.jsx("button",{className:"building-popup-close",onClick:n,children:"x"})]}),r.jsxs("div",{className:"boss-status-overview",children:[Object.entries(_).map(([P,E])=>r.jsxs("span",{className:"status-badge",style:{backgroundColor:mo[P]||"#666"},children:[E," ",P]},P)),k.length===0&&r.jsx("span",{className:"no-subordinates",children:l("terminal:building.noSubordinates")})]}),k.length>0&&r.jsx("div",{className:"subordinate-list",children:k.map(P=>{var E,R,I;return r.jsxs("div",{className:"subordinate-item",children:[r.jsx("span",{className:"sub-status-dot",style:{backgroundColor:mo[P.status]}}),r.jsx("span",{className:"sub-name",children:P.name}),((E=P.pm2Status)==null?void 0:E.ports)&&P.pm2Status.ports.length>0&&r.jsx("span",{className:"sub-port",children:P.pm2Status.ports.map(O=>r.jsxs("a",{href:`http://localhost:${O}`,className:"building-popup-port-link",onClick:B=>{B.preventDefault(),B.stopPropagation(),L(O,B.altKey)},title:`Open http://localhost:${O} (Alt+Click for modal)`,children:[":",O]},O))}),P.pm2Status&&r.jsxs("span",{className:"sub-metrics",children:[(R=P.pm2Status.cpu)==null?void 0:R.toFixed(0),"% | ",rG(P.pm2Status.memory||0)]}),((I=P.pm2Status)==null?void 0:I.uptime)&&r.jsx("span",{className:"sub-uptime",children:oG(P.pm2Status.uptime)})]},P.id)})}),r.jsxs("div",{className:"building-popup-actions boss-actions",children:[r.jsxs("button",{className:"action-btn start",onClick:()=>N("start_all"),disabled:k.length===0,title:l("terminal:building.startAllSubs"),children:[r.jsx("span",{className:"icon",children:"▶"}),l("terminal:building.startAll")]}),r.jsxs("button",{className:"action-btn stop",onClick:()=>N("stop_all"),disabled:k.length===0,title:l("terminal:building.stopAllSubs"),children:[r.jsx("span",{className:"icon",children:"■"}),l("terminal:building.stopAll")]}),r.jsxs("button",{className:"action-btn restart",onClick:()=>N("restart_all"),disabled:k.length===0,title:l("terminal:building.restartAllSubs"),children:[r.jsx("span",{className:"icon",children:"↺"}),l("terminal:building.restartAll")]}),D&&r.jsxs("button",{className:"action-btn logs",onClick:i,title:l("terminal:building.viewUnifiedLogs"),children:[r.jsx("span",{className:"icon",children:"📄"}),l("terminal:building.logs")]})]}),r.jsx("button",{className:"building-popup-settings",onClick:a,children:l("terminal:building.fullSettings")})]})}),cG=y.memo(function({building:e,screenPos:t,onClose:n,onOpenSettings:a,onOpenDatabasePanel:i}){var _;const{t:o}=Ge(["terminal","common"]),[l,c]=y.useState(null),[d,f]=y.useState(!1),p=y.useRef(null),m=y.useRef(l);m.current=l;const b=_f(e.id),x=((_=e.database)==null?void 0:_.connections)??[],w=y.useRef(null),k=y.useRef(null),S=y.useCallback(D=>{D.preventDefault();const L=m.current?m.current.x:0,M=m.current?m.current.y:0;p.current={mouseX:D.clientX,mouseY:D.clientY,popupX:L,popupY:M},f(!0),w.current=P=>{if(!p.current)return;const E=P.clientX-p.current.mouseX,R=P.clientY-p.current.mouseY;c({x:p.current.popupX+E,y:p.current.popupY+R})},k.current=()=>{f(!1),p.current=null,w.current&&document.removeEventListener("mousemove",w.current),k.current&&document.removeEventListener("mouseup",k.current)},document.addEventListener("mousemove",w.current),document.addEventListener("mouseup",k.current)},[]);y.useEffect(()=>()=>{w.current&&document.removeEventListener("mousemove",w.current),k.current&&document.removeEventListener("mouseup",k.current)},[]);const j=D=>{z.testDatabaseConnection(e.id,D)},C=D=>b.connectionStatus.get(D),N=y.useMemo(()=>{let M=t.x+20,P=t.y-80;return typeof window<"u"&&!l&&(t.x+20+320>window.innerWidth&&(M=t.x-320-20),t.y-80<0?P=10:t.y-80+300>window.innerHeight&&(P=window.innerHeight-300-10)),{position:"fixed",left:M+((l==null?void 0:l.x)||0),top:P+((l==null?void 0:l.y)||0),zIndex:1e3,cursor:d?"grabbing":void 0}},[t.x,t.y,l,d]);return r.jsxs("div",{className:"building-action-popup database-building-popup",style:N,onClick:D=>D.stopPropagation(),children:[r.jsxs("div",{className:`building-popup-header database-header ${d?"dragging":""}`,onMouseDown:S,children:[r.jsx("span",{className:"database-icon",children:"🗄️"}),r.jsx("span",{className:"building-popup-name",children:e.name}),r.jsx("span",{className:"connection-count",children:o("terminal:building.connCount",{count:x.length})}),r.jsx("button",{className:"building-popup-close",onClick:n,children:"x"})]}),x.length>0?r.jsx("div",{className:"database-connection-list",children:x.map(D=>{const L=C(D.id);return r.jsxs("div",{className:"database-connection-item",children:[r.jsx("span",{className:"conn-engine",children:D.engine==="mysql"?"🐬":"🐘"}),r.jsx("span",{className:"conn-name",children:D.name}),r.jsxs("span",{className:"conn-host",children:[D.host,":",D.port]}),L&&r.jsx("span",{className:`conn-status ${L.connected?"connected":"disconnected"}`,children:L.connected?"●":"○"}),r.jsx("button",{className:"conn-test-btn",onClick:()=>j(D.id),title:o("terminal:building.testConnection"),children:"↻"})]},D.id)})}):r.jsxs("div",{className:"database-no-connections",children:[r.jsx("p",{children:o("terminal:building.noConnections")}),r.jsx("p",{className:"hint",children:o("terminal:building.clickSettingsToAdd")})]}),r.jsxs("div",{className:"building-popup-actions database-actions",children:[r.jsxs("button",{className:"action-btn query",onClick:i,disabled:x.length===0,title:o("terminal:building.openDbExplorer"),children:[r.jsx("span",{className:"icon",children:"⌨"}),o("terminal:building.query")]}),r.jsxs("button",{className:"action-btn test-all",onClick:()=>x.forEach(D=>j(D.id)),disabled:x.length===0,title:o("terminal:building.testAllConnections"),children:[r.jsx("span",{className:"icon",children:"↻"}),o("terminal:building.testAll")]})]}),r.jsx("button",{className:"building-popup-settings",onClick:a,children:o("common:buttons.settings")})]})}),uG=({building:s,connections:e,activeConnectionId:t,activeDatabase:n,collapsed:a,onToggleCollapse:i,onConnectionChange:o,onDatabaseChange:l,onInsertTable:c,onSelectTableQuery:d})=>{const{t:f}=Ge(["terminal"]),p=_f(s.id),[m,b]=y.useState(new Set),[x,w]=y.useState(""),[k,S]=y.useState(!1),[j,C]=y.useState(null),N=y.useRef(null),_=y.useRef(null),D=t?p.databases.get(t)??[]:[],L=t&&n?`${t}:${n}`:"",M=L?p.tables.get(L)??[]:[],P=t?p.connectionStatus.get(t):void 0,E=y.useMemo(()=>{if(!x.trim())return D;const O=x.toLowerCase();return D.filter(B=>B.toLowerCase().includes(O))},[D,x]);y.useEffect(()=>{const O=B=>{_.current&&!_.current.contains(B.target)&&S(!1)};return k&&document.addEventListener("mousedown",O),()=>document.removeEventListener("mousedown",O)},[k]),y.useEffect(()=>{t&&!P&&z.testDatabaseConnection(s.id,t)},[s.id,t,P]),y.useEffect(()=>{t&&(P!=null&&P.connected)&&D.length===0&&z.listDatabases(s.id,t)},[s.id,t,P==null?void 0:P.connected,D.length]),y.useEffect(()=>{t&&n&&M.length===0&&z.listTables(s.id,t,n)},[s.id,t,n,M.length]),y.useEffect(()=>{C(null)},[t,n]);const R=y.useCallback(O=>{b(B=>{const q=new Set(B);if(q.has(O))q.delete(O);else if(q.add(O),t&&n){const H=`${t}:${n}:${O}`;p.tableSchemas.has(H)||z.getTableSchema(s.id,t,n,O)}return q})},[s.id,t,n,p.tableSchemas]),I=O=>{if(!t||!n)return null;const B=`${t}:${n}:${O}`;return p.tableSchemas.get(B)};return a?r.jsx("div",{className:"database-sidebar database-sidebar--collapsed",children:r.jsx("button",{className:"database-sidebar__toggle",onClick:i,title:f("terminal:database.expandSidebar"),children:"»"})}):r.jsxs("div",{className:"database-sidebar",children:[r.jsxs("div",{className:"database-sidebar__header",children:[r.jsx("span",{children:f("terminal:database.explorer")}),r.jsx("button",{className:"database-sidebar__toggle",onClick:i,title:f("terminal:database.collapseSidebar"),children:"«"})]}),r.jsxs("div",{className:"database-sidebar__section",children:[r.jsx("div",{className:"database-sidebar__section-title",children:f("terminal:database.connection")}),r.jsx("select",{className:"database-sidebar__select",value:t||"",onChange:O=>o(O.target.value),children:e.length===0?r.jsx("option",{value:"",children:f("terminal:database.noConnections")}):e.map(O=>r.jsxs("option",{value:O.id,children:[O.engine==="mysql"?"🐬":"🐘"," ",O.name]},O.id))}),P&&r.jsx("div",{className:`database-sidebar__status ${P.connected?"database-sidebar__status--connected":"database-sidebar__status--error"}`,children:P.connected?r.jsxs(r.Fragment,{children:[r.jsx("span",{className:"database-sidebar__status-icon",children:"✓"}),f("terminal:database.connected"),P.serverVersion&&r.jsxs("span",{className:"database-sidebar__version",children:["(",P.serverVersion,")"]})]}):r.jsxs(r.Fragment,{children:[r.jsx("span",{className:"database-sidebar__status-icon",children:"✗"}),P.error||f("terminal:database.disconnected")]})})]}),D.length>0&&r.jsxs("div",{className:"database-sidebar__section",children:[r.jsx("div",{className:"database-sidebar__section-title",children:f("terminal:database.databaseTitle")}),r.jsxs("div",{className:"database-sidebar__searchable-select",ref:_,children:[r.jsx("input",{ref:N,className:"database-sidebar__search-input",type:"text",value:k?x:n||"",placeholder:f("terminal:database.selectDatabase"),onChange:O=>{w(O.target.value),k||S(!0)},onFocus:()=>{S(!0),w("")},onKeyDown:O=>{var B,q;O.key==="Escape"?(S(!1),w(""),(B=N.current)==null||B.blur()):O.key==="Enter"&&E.length===1&&(l(E[0]),S(!1),w(""),(q=N.current)==null||q.blur())}}),k&&r.jsx("div",{className:"database-sidebar__dropdown",children:E.length===0?r.jsx("div",{className:"database-sidebar__dropdown-empty",children:"No matches"}):E.map(O=>r.jsx("div",{className:`database-sidebar__dropdown-item ${O===n?"database-sidebar__dropdown-item--active":""}`,onMouseDown:B=>{B.preventDefault(),l(O),S(!1),w("")},children:O},O))})]})]}),M.length>0&&r.jsxs("div",{className:"database-sidebar__section database-sidebar__section--tables",children:[r.jsx("div",{className:"database-sidebar__section-title",children:f("terminal:database.tablesCount",{count:M.length})}),r.jsx("div",{className:"database-sidebar__tables",children:M.map(O=>{const B=m.has(O.name),q=B?I(O.name):null;return r.jsxs("div",{className:"database-sidebar__table",children:[r.jsxs("div",{className:"database-sidebar__table-header",children:[r.jsx("button",{className:"database-sidebar__table-expand",onClick:()=>R(O.name),title:B?"Collapse table schema":"Expand table schema",children:B?"▼":"▶"}),r.jsx("span",{className:"database-sidebar__table-icon",children:O.type==="view"?"👁":"📋"}),r.jsx("span",{className:`database-sidebar__table-name ${j===O.name?"database-sidebar__table-name--selected":""}`,onClick:()=>C(O.name),onDoubleClick:()=>{C(O.name),d(O.name)},children:O.name}),r.jsx("button",{className:"database-sidebar__table-insert",onClick:H=>{H.stopPropagation(),c(O.name)},title:f("terminal:database.insertTableName"),children:"+"})]}),B&&q&&r.jsx("div",{className:"database-sidebar__table-columns",children:q.columns.map(H=>r.jsxs("div",{className:"database-sidebar__column",onClick:()=>c(H.name),title:`${H.type}${H.nullable?" NULL":" NOT NULL"}${H.primaryKey?" PK":""}`,children:[r.jsx("span",{className:"database-sidebar__column-icon",children:H.primaryKey?"🔑":""}),r.jsx("span",{className:"database-sidebar__column-name",children:H.name}),r.jsx("span",{className:"database-sidebar__column-type",children:H.type})]},H.name))})]},O.name)})})]})]})};function _v(s){const e=[];let t=!1,n=!1,a=!1,i=!1,o=0;for(let c=0;c<s.length;c++){const d=s[c],f=s[c+1];if(a){d===`
|
|
242
|
+
`)}function $U(s){return s.startsWith("Using tool:")||s.startsWith("Tool input:")||s.startsWith("Tool result:")||s.startsWith("Bash output:")||s.startsWith("Session started:")||s.startsWith("[thinking]")||s.startsWith("Tokens:")||s.startsWith("Cost:")||s.startsWith("Context (estimated from Codex turn usage):")||s.startsWith("🔄 [System]")||s.startsWith("📋 [System]")||s.startsWith("[System]")}function HU(s,e){if(e.type==="rectangle"&&e.width&&e.height){const t=e.width/2,n=e.height/2;return s.x>=e.center.x-t&&s.x<=e.center.x+t&&s.z>=e.center.z-n&&s.z<=e.center.z+n}if(e.type==="circle"&&e.radius){const t=s.x-e.center.x,n=s.z-e.center.z;return t*t+n*n<=e.radius*e.radius}return!1}const UU=y.memo(function({onSaveSnapshot:e}={}){var _s,ds,ci,Zi,ka;const{t}=Ge(["terminal","common"]),n=ji(),a=Tf(),i=nT(),o=Vx(),l=ev(),c=rT(),d=sT(),f=Xx(),p=Zx(),m=jF(),b=!!m,x=y.useMemo(()=>m?{id:m.agentId,name:m.agentName,class:m.agentClass,status:"idle",provider:"claude",position:{x:0,y:0,z:0},cwd:m.cwd,permissionMode:"interactive",tokensUsed:0,contextUsed:0,contextLimit:2e5,taskCount:0,createdAt:m.createdAt,lastActivity:m.createdAt}:null,[m]),w=Array.from(a),S=w.length===1?w[0]:null,C=(Wx(S)||null)??(b?x:null),N=S??(b?(m==null?void 0:m.agentId)??null:null),_=!!(C!=null&&C.sessionId)&&!b,D=Er(),L=y.useMemo(()=>{if(!N)return null;const Qe=new Set,dt=[];for(const gt of D.values())gt.archived||gt.directories.length===0||gt.assignedAgentIds.includes(N)&&(Qe.add(gt.id),dt.push(gt));const Mt=n.get(N);if(Mt)for(const gt of D.values())gt.archived||gt.directories.length===0||Qe.has(gt.id)||HU({x:Mt.position.x,z:Mt.position.z},gt)&&(Qe.add(gt.id),dt.push(gt));return dt.length===0?null:dt.flatMap(gt=>gt.directories.filter(Dt=>Dt&&Dt.trim().length>0).map(Dt=>({areaId:gt.id,areaName:gt.name,dir:Dt})))},[N,D,n]),{terminalHeight:M,terminalRef:P,handleResizeStart:E}=sH(),{mobileOverviewHeight:R,handleResizeMouseDown:I,handleResizeTouchStart:O}=rH(),B=nH(),q=qx(N),H=y.useMemo(()=>b&&m?m.outputs.map(Qe=>({text:Qe.text||"",timestamp:Qe.timestamp,isStreaming:!1,isUserPrompt:!1})):q,[b,m,q]),G=y.useRef(null),K=y.useRef(null),X=y.useRef(null),[$,re]=y.useState(()=>{const Qe=ra(mt.VIEW_MODE);return Qe==="simple"||Qe==="chat"||Qe==="advanced"?Qe:ra(mt.ADVANCED_VIEW)==="true"?"advanced":"simple"}),[le,F]=y.useState(()=>dd(mt.TERMINAL_FULLSCREEN,!1)),[ne,W]=y.useState(null),[ee,J]=y.useState(null),[V,Z]=y.useState(null),[he,ge]=y.useState(null),[xe,we]=y.useState(!1);Pn("guake-image-modal",ne!==null,()=>W(null)),Pn("guake-bash-modal",ee!==null,()=>J(null)),Pn("guake-response-modal",he!==null,()=>ge(null)),Pn("guake-context-confirm",V!==null,()=>Z(null)),Pn("guake-agent-info",xe,()=>we(!1));const[Se,te]=y.useState(!1),[fe,ve]=y.useState(()=>Xs.isEnabled()),Q=EF(),pe=y.useCallback(Qe=>z.setOverviewPanelOpen(Qe),[]),[ue,oe]=y.useState(!1),[be,je]=y.useState(null),Re=y.useRef(null),et=y.useRef(null),[ye,Ae]=y.useState(!1),[Fe,ae]=y.useState(!1),[ce,de]=y.useState(!1),[me,Ee]=y.useState(!1),_e=y.useRef(0),Ve=i&&C!==null,Te=y.useCallback(()=>{F(Qe=>{const dt=!Qe;return hd(mt.TERMINAL_FULLSCREEN,dt),dt})},[]),Oe=ZM({selectedAgentId:N,hasSessionId:_,reconnectCount:l,historyRefreshTrigger:c,lastPrompts:o,outputScrollRef:G}),Xe=lH({selectedAgentId:N,isOpen:Ve}),at=oH({agents:n,selectedAgentId:N,isOpen:Ve,overviewPanelOpen:Q,loadingHistory:Oe.fetchingHistory,hasModalOpen:!!(ne||ee||he||f||p),outputRef:G}),st=kE({selectedAgentId:S}),ot=nF(),ie=y.useMemo(()=>b||!N?[]:Array.from(ot.values()).filter(Qe=>Qe.agentId===N&&Qe.status==="pending"),[b,N,ot]),Ne=(C==null?void 0:C.class)==="boss"||(C==null?void 0:C.isBoss),Ze=mF(!b&&Ne?N:null),ut=gF(b?null:N),lt=TF(b?null:N);y.useEffect(()=>{Se&&!fe&&(ve(!0),Xs.setEnabled(!0))},[Se,fe]),y.useEffect(()=>{Ve||we(!1)},[Ve]),y.useEffect(()=>{const Qe=C==null?void 0:C.status;if(Re.current==="working"&&Qe==="idle"){et.current&&clearTimeout(et.current);const Mt=N?o.get(N):void 0;je(Mt!=null&&Mt.timestamp?Date.now()-Mt.timestamp:null),oe(!0),et.current=setTimeout(()=>{oe(!1),je(null),et.current=null},4e3)}else Qe==="working"&&(et.current&&(clearTimeout(et.current),et.current=null),oe(!1),je(null));return Re.current=Qe||null,()=>{et.current&&clearTimeout(et.current)}},[C==null?void 0:C.status]);const Bt=y.useMemo(()=>{const{history:Qe}=Oe,dt=new Map;for(const gt of Qe)gt.type==="tool_result"&>.toolUseId&&dt.set(gt.toolUseId,gt.content);return(gt=>gt.map(Dt=>{if(Dt.type==="tool_use"&&Dt.toolName==="Bash"&&Dt.toolUseId){const un=dt.get(Dt.toolUseId);let zt;try{zt=(Dt.toolInput||(Dt.content?JSON.parse(Dt.content):{})).command}catch{}return{...Dt,_bashOutput:un,_bashCommand:zt}}return Dt}))(Qe)},[Oe.history,$]),Ot=SE({outputs:H,viewMode:$}),Ct=y.useMemo(()=>{const Qe=[],dt=new Set,Mt=new Set;let gt=null,Dt=0;for(const un of Bt){if(un.type==="assistant"){const qn=un.uuid?`uuid:${un.uuid}:${lp(un.content)}`:`sig:${un.timestamp}:${lp(un.content)}`;if(dt.has(qn))continue;dt.add(qn),Qe.push(un);continue}if(un.type!=="user"){Qe.push(un);continue}const zt=Wb(un.content),dn=un.uuid?`uuid:${un.uuid}:${zt}`:null;if(dn&&Mt.has(dn))continue;const Tn=un.timestamp?new Date(un.timestamp).getTime():0;gt===zt&&Math.abs(Tn-Dt)<=fN||(Qe.push(un),dn&&Mt.add(dn),gt=zt,Dt=Tn)}return Qe},[Bt]),Pt=y.useMemo(()=>{const Qe=new Map,dt=new Set,Mt=new Map;for(const zt of Ct){const dn=zt.timestamp?new Date(zt.timestamp).getTime():0;if(zt.type==="user"){const vs=Wb(zt.content),Me=Qe.get(vs)??0;dn>Me&&Qe.set(vs,dn);continue}if(zt.type!=="assistant")continue;zt.uuid&&dt.add(zt.uuid);const Tn=lp(zt.content),qn=Mt.get(Tn)??0;dn>qn&&Mt.set(Tn,dn)}const gt=[];let Dt=null,un=0;for(const zt of Ot){if(!zt.isUserPrompt){if(!zt.isStreaming&&!$U(zt.text)){if(zt.uuid&&dt.has(zt.uuid))continue;const vs=lp(zt.text),Me=zt.timestamp||0,Ue=Mt.get(vs);if(Ue&&Math.abs(Me-Ue)<=BU)continue}gt.push(zt);continue}const dn=Wb(zt.text),Tn=zt.timestamp||0,qn=Qe.get(dn);qn&&Tn>=qn&&Tn-qn<=IU||Dt===dn&&Math.abs(Tn-un)<=fN||(gt.push(zt),Dt=dn,un=Tn)}return gt},[Ot,Ct]),Gn=Ct.length+Pt.length,yn=dH({totalMessages:Gn,isOpen:Ve,hasModalOpen:!!(ne||ee||he||f),scrollContainerRef:G,selectedAgentId:N,inputRef:K,textareaRef:X,useTextarea:st.useTextarea});y.useEffect(()=>{if(!(!(ee!=null&&ee.isLive)||!ee.command)){for(const Qe of Pt)if(Qe._bashCommand===ee.command&&Qe._bashOutput){J({command:ee.command,output:Qe._bashOutput,isLive:!1});return}}},[ee,Pt]);const At=y.useCallback((Qe,dt)=>{W({url:Qe,name:dt})},[]),Kt=y.useCallback((Qe,dt)=>{const Mt=Dd(Qe,C==null?void 0:C.cwd),gt=Mt.line?{...dt||{},targetLine:Mt.line}:dt;z.setFileViewerPath(Mt.path,gt,C==null?void 0:C.cwd)},[C==null?void 0:C.cwd]),cs=y.useCallback((Qe,dt)=>{J({command:Qe,output:dt,isLive:dt==="Running..."})},[]),Ln=y.useCallback(Qe=>{ge(Qe)},[]),Ns=y.useCallback(()=>{we(Qe=>!Qe)},[]),[Qn,qt]=y.useState(!0),[Wn,ss]=y.useState(0),[Us,Ga]=y.useState(!1),Js=y.useRef(!1),Gs=y.useRef(!1),us=y.useCallback(()=>{Gs.current||(Js.current=!0,qt(!1))},[]),wa=y.useCallback(()=>ae(!1),[]),bt=y.useCallback(()=>{typeof window>"u"||window.innerWidth>768||(Ga(!0),ss(zU),document.activeElement instanceof HTMLElement&&document.activeElement.blur(),setTimeout(()=>{z.setMobileView("3d"),Ga(!1),ss(0)},FU))},[]),Yt=y.useCallback(Qe=>{Us||ss(Qe)},[Us]);y.useEffect(()=>{qt(!0),ss(0),Ga(!1),Js.current=!1,Gs.current=!0;const Qe=setTimeout(()=>{Gs.current=!1},3e3);return()=>clearTimeout(Qe)},[N]);const De=y.useRef(Oe.handleScroll);De.current=Oe.handleScroll;const nt=y.useCallback(()=>{if(!G.current||B.keyboardScrollLockRef.current)return;const{scrollTop:Qe,scrollHeight:dt,clientHeight:Mt}=G.current,gt=dt-Qe-Mt<150;Gs.current||(Js.current=!gt,gt&&qt(!0)),De.current(B.keyboardScrollLockRef)},[G,B.keyboardScrollLockRef]),pt=q.length>0&&((ds=(_s=q[q.length-1])==null?void 0:_s.text)==null?void 0:ds.length)||0;y.useEffect(()=>{B.keyboardScrollLockRef.current||Js.current||requestAnimationFrame(()=>{if(G.current){const{scrollTop:Qe,scrollHeight:dt,clientHeight:Mt}=G.current;dt-Qe-Mt<150&&(G.current.scrollTop=dt)}})},[q.length,pt,B.keyboardScrollLockRef,G]);const Xt=y.useRef(null);y.useLayoutEffect(()=>{const Qe=Xt.current;Qe!==null&&Qe!==S?(Ae(!1),S&&Oe.hasCachedHistory(S)||de(!0),z.getState().currentSnapshot&&z.setCurrentSnapshot(null)):S||Ae(!1),Xt.current=S},[S]),y.useEffect(()=>{if(!ce||Oe.fetchingHistory)return;const Qe=requestAnimationFrame(()=>{G.current&&(G.current.scrollTop=G.current.scrollHeight),de(!1)});return()=>cancelAnimationFrame(Qe)},[ce,Oe.fetchingHistory,Oe.historyLoadVersion]);const xn=y.useRef(!1);y.useEffect(()=>{Ve&&S&&z.clearUnseenForAgent(S)},[Ve,S]),y.useEffect(()=>{xn.current=!0,ae(!0)},[N,l]),y.useEffect(()=>{Oe.fetchingHistory&&(xn.current=!0,ae(!0))},[Oe.fetchingHistory]),y.useEffect(()=>{if(!Fe||!Ve||Oe.fetchingHistory)return;const Qe=G.current;if(!Qe)return;let dt=null;const Mt=performance.now();let gt=0,Dt=-1;const un=()=>{const{scrollTop:dn,scrollHeight:Tn,clientHeight:qn}=Qe;return Tn-dn-qn<=2},zt=()=>{const dn=performance.now(),Tn=Qe.scrollHeight,qn=Math.abs(Tn-Dt)<=1,vs=un();if(qn&&vs?gt+=1:gt=0,Dt=Tn,gt>=3){ae(!1),dt=null;return}if(dn-Mt>8e3){ae(!1),dt=null;return}dt=requestAnimationFrame(zt)};return dt=requestAnimationFrame(zt),()=>{dt!==null&&cancelAnimationFrame(dt)}},[Fe,Ve,Oe.fetchingHistory,Oe.historyLoadVersion]);const sn=y.useRef(!1);y.useEffect(()=>{sn.current&&!Fe&&xn.current&&(xn.current=!1,Ae(!0)),sn.current=Fe},[Fe]),y.useEffect(()=>{if(!Ve||!xn.current||Fe||Oe.fetchingHistory)return;const Qe=requestAnimationFrame(()=>{xn.current&&(xn.current=!1,Ae(!0))});return()=>cancelAnimationFrame(Qe)},[Oe.historyLoadVersion,Ve,Fe,Oe.fetchingHistory]),y.useEffect(()=>{const Qe=dt=>{if(dt.key==="`"&&!dt.ctrlKey&&!dt.altKey&&C){const Mt=dt.target;Mt.tagName!=="INPUT"&&Mt.tagName!=="TEXTAREA"&&(dt.preventDefault(),z.toggleTerminal())}};return document.addEventListener("keydown",Qe),()=>document.removeEventListener("keydown",Qe)},[C]),y.useEffect(()=>{const Qe=dt=>{dt.key==="Escape"&&(f?(dt.stopImmediatePropagation(),z.clearFileViewerPath()):p?(dt.stopImmediatePropagation(),z.closeContextModal()):he?(dt.stopImmediatePropagation(),ge(null)):ee?(dt.stopImmediatePropagation(),J(null)):ne?(dt.stopImmediatePropagation(),W(null)):Xe.searchMode&&(dt.stopImmediatePropagation(),Xe.closeSearch()))};return document.addEventListener("keydown",Qe,!0),()=>document.removeEventListener("keydown",Qe,!0)},[ne,ee,he,Xe,f,p]);const kn=y.useRef(Ve),Bn=y.useRef(!1);y.useEffect(()=>{kn.current=Ve},[Ve]),y.useEffect(()=>{if(window.innerWidth<=768)return;const dt=Dt=>{var Tn;if(!(Dt instanceof Element))return!1;const un=(Tn=P.current)==null?void 0:Tn.contains(Dt),zt=Dt.closest(".agent-bar"),dn=!!Dt.closest(".modal-overlay, .modal, .image-modal-overlay, .image-modal, .bash-modal-overlay, .bash-modal, .agent-info-modal-overlay, .agent-info-modal, .agent-response-modal, .pasted-text-modal-overlay, .pasted-text-modal, .file-viewer-overlay, .file-viewer-modal, .context-view-modal, .guake-context-confirm-overlay, .guake-context-confirm-modal");return!!un||!!zt||dn},Mt=Dt=>{if(!kn.current){Bn.current=!1;return}Bn.current=!dt(Dt.target)},gt=Dt=>{Bn.current&&(dt(Dt.target)||z.setTerminalOpen(!1),Bn.current=!1)};return document.addEventListener("mousedown",Mt,!0),document.addEventListener("mouseup",gt,!0),()=>{document.removeEventListener("mousedown",Mt,!0),document.removeEventListener("mouseup",gt,!0)}},[]),y.useEffect(()=>{const Qe=()=>{document.hidden&&B.cleanup()};return document.addEventListener("visibilitychange",Qe),()=>document.removeEventListener("visibilitychange",Qe)},[B]),y.useEffect(()=>()=>B.cleanup(),[N,B]);const es=typeof window<"u"&&window.innerWidth<=768;if(!C)return es&&d==="terminal"&&a.size===0?r.jsx("div",{ref:P,className:`guake-terminal open ${le?"fullscreen":""}`,style:{"--terminal-height":`${M}%`},children:r.jsx("div",{className:"guake-content",children:r.jsx("div",{className:"guake-output",style:{display:"flex",alignItems:"center",justifyContent:"center",color:"#6272a4"},children:r.jsxs("div",{style:{textAlign:"center"},children:[r.jsx("div",{style:{fontSize:"48px",marginBottom:"16px"},children:"👆"}),r.jsx("div",{style:{fontSize:"16px"},children:t("terminal:empty.tapAgent")}),r.jsx("div",{style:{fontSize:"14px",marginTop:"8px",opacity:.7},children:t("terminal:empty.switchTo3D")})]})})})}):es&&d==="terminal"&&a.size>0?r.jsx("div",{ref:P,className:`guake-terminal open ${le?"fullscreen":""}`,style:{"--terminal-height":`${M}%`},children:r.jsx("div",{className:"guake-content",children:r.jsx("div",{className:"guake-output",style:{display:"flex",alignItems:"center",justifyContent:"center",color:"#6272a4"},children:r.jsxs("div",{className:"guake-empty loading",children:[t("terminal:empty.loadingTerminal"),r.jsxs("span",{className:"loading-dots",children:[r.jsx("span",{}),r.jsx("span",{}),r.jsx("span",{})]})]})})})}):null;if(!N)return null;const ys=Qe=>{Qe.preventDefault(),Qe.stopPropagation(),_e.current++,Qe.dataTransfer.types.includes("Files")&&Ee(!0)},Os=Qe=>{Qe.preventDefault(),Qe.stopPropagation()},xs=Qe=>{Qe.preventDefault(),Qe.stopPropagation(),_e.current--,_e.current===0&&Ee(!1)},oa=async Qe=>{Qe.preventDefault(),Qe.stopPropagation(),_e.current=0,Ee(!1);const dt=Qe.dataTransfer.files;if(dt.length)for(const Mt of dt){const gt=await st.uploadFile(Mt);gt&&st.setAttachedFiles(Dt=>[...Dt,gt])}};return r.jsxs("div",{ref:P,className:`guake-terminal ${Ve?"open":"collapsed"} ${le&&Ve?"fullscreen":""} ${Se&&Ve?"with-debug-panel":""} ${Q&&Ve?"with-overview-panel":""} ${me?"drag-over":""} ${Wn>0?"mobile-swipe-close-active":""} ${Us?"mobile-swipe-close-closing":""}`,style:{"--terminal-height":`${M}%`,"--mobile-swipe-close-offset":`${Wn}px`,...R>0?{"--guake-mobile-overview-height":`${R}px`}:{}},onDragEnter:ys,onDragOver:Os,onDragLeave:xs,onDrop:oa,children:[r.jsxs("div",{className:"guake-drop-overlay",children:[r.jsx("div",{className:"drop-border"}),r.jsx("span",{className:"drop-icon",children:"📎"}),r.jsx("span",{className:"drop-label",children:t("terminal:input.dropToAttach")})]}),!b&&Se&&Ve&&N&&r.jsx(hU,{agentId:N,onClose:()=>te(!1)}),!b&&Q&&Ve&&N&&r.jsx(gU,{activeAgentId:N,onClose:()=>pe(!1),onSelectAgent:Qe=>{z.setLastSelectionViaDirectClick(!0),z.selectAgent(Qe)}}),!b&&Q&&Ve&&N&&r.jsx("div",{className:"aop-resize-handle",onMouseDown:I,onTouchStart:O}),r.jsxs("div",{className:"guake-content",children:[r.jsx(MH,{selectedAgent:C,selectedAgentId:N,sortedAgents:at.sortedAgents,swipeOffset:at.swipeOffset,viewMode:$,setViewMode:re,searchMode:Xe.searchMode,toggleSearch:Xe.toggleSearch,closeSearch:Xe.closeSearch,debugPanelOpen:Se,setDebugPanelOpen:te,debuggerEnabled:fe,setDebuggerEnabled:ve,overviewPanelOpen:Q,setOverviewPanelOpen:pe,agentInfoOpen:xe,onToggleAgentInfo:Ns,isFullscreen:le,onToggleFullscreen:Te,outputsLength:Ct.length+Pt.length,setContextConfirm:Z,headerRef:at.headerRef,onSaveSnapshot:b?void 0:e,isSnapshotView:b}),Xe.searchMode&&r.jsx(TH,{searchInputRef:Xe.searchInputRef,searchQuery:Xe.searchQuery,setSearchQuery:Xe.setSearchQuery,handleSearch:Xe.handleSearch,closeSearch:Xe.closeSearch,searchLoading:Xe.searchLoading,searchResultsCount:Xe.searchResults.length}),r.jsxs("div",{className:`guake-swipe-container ${at.swipeAnimationClass}`,style:at.swipeOffset!==0?{transform:`translateX(${at.swipeOffset*40}%)`}:void 0,children:[at.sortedAgents.length>1&&at.swipeOffset!==0&&r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:`swipe-indicator left ${at.swipeOffset>.3?"visible":""}`,children:[r.jsx("span",{className:"indicator-icon",children:"←"}),r.jsx("span",{className:"indicator-name",children:(ci=at.nextAgent)==null?void 0:ci.name})]}),r.jsxs("div",{className:`swipe-indicator right ${at.swipeOffset<-.3?"visible":""}`,children:[r.jsx("span",{className:"indicator-name",children:(Zi=at.prevAgent)==null?void 0:Zi.name}),r.jsx("span",{className:"indicator-icon",children:"→"})]})]}),at.sortedAgents.length>1&&at.sortedAgents.length<=8&&at.swipeOffset!==0&&r.jsx("div",{className:`swipe-dots ${Math.abs(at.swipeOffset)>.1?"visible":""}`,children:at.sortedAgents.map((Qe,dt)=>r.jsx("div",{className:`swipe-dot ${dt===at.currentAgentIndex?"active":""}`},Qe.id))}),r.jsx("div",{className:"guake-output",ref:G,onScroll:nt,children:Xe.searchMode&&Xe.searchResults.length>0?r.jsxs(r.Fragment,{children:[r.jsx("div",{className:"guake-search-header",children:t("terminal:header.searchResultsTitle")}),Xe.searchResults.map((Qe,dt)=>r.jsx(Mv,{message:Qe,agentId:N,highlight:Xe.searchQuery,onImageClick:At,onFileClick:Kt,onBashClick:cs,onViewMarkdown:Ln},`s-${dt}`))]}):r.jsxs("div",{className:`guake-history-content ${ye?"fade-in":""}`,children:[ce&&r.jsxs("div",{className:"guake-empty loading",children:[t("terminal:empty.loadingConversation"),r.jsxs("span",{className:"loading-dots",children:[r.jsx("span",{}),r.jsx("span",{}),r.jsx("span",{})]})]}),!ce&&Oe.loadingHistory&&Oe.history.length===0&&q.length===0&&r.jsxs("div",{className:"guake-empty loading",children:[t("terminal:empty.loadingConversation"),r.jsxs("span",{className:"loading-dots",children:[r.jsx("span",{}),r.jsx("span",{}),r.jsx("span",{})]})]}),!ce&&!Oe.loadingHistory&&Oe.history.length===0&&H.length===0&&C.status!=="working"&&r.jsx("div",{className:"guake-empty",children:t("terminal:empty.noOutput")}),!ce&&Oe.hasMore&&!Xe.searchMode&&r.jsx("div",{className:"guake-load-more",children:Oe.loadingMore?r.jsx("span",{children:t("terminal:empty.loadingOlder")}):r.jsx("button",{onClick:Oe.loadMoreHistory,children:t("terminal:empty.loadMore",{count:Oe.totalCount-Oe.history.length})})}),!ce&&r.jsx(HE,{historyMessages:Ct,liveOutputs:Pt,agentId:N,execTasks:ut,subagents:lt,viewMode:$,selectedMessageIndex:yn.selectedIndex,isMessageSelected:yn.isSelected,onImageClick:At,onFileClick:Kt,onBashClick:cs,onViewMarkdown:Ln,scrollContainerRef:G,onScrollTopReached:Oe.loadMoreHistory,isLoadingMore:Oe.loadingMore,hasMore:Oe.hasMore,shouldAutoScroll:Qn,onUserScroll:us,pinToBottom:Fe,onPinCancel:wa,isLoadingHistory:Oe.fetchingHistory},N),!ce&&Ne&&Ze.size>0&&r.jsxs("div",{className:"agent-progress-container",children:[r.jsxs("div",{className:"agent-progress-container-header",children:[r.jsx("span",{className:"progress-crown",children:"👑"}),r.jsx("span",{children:t("terminal:empty.subordinateProgress")}),r.jsx("span",{className:"progress-count",children:t("terminal:empty.activeCount",{count:Ze.size})})]}),Array.from(Ze.values()).map(Qe=>r.jsx(yU,{progress:Qe,defaultExpanded:Qe.status==="working",onAgentClick:z.selectAgent},Qe.agentId))]})]})})]}),r.jsx(IH,{selectedAgent:C,selectedAgentId:N,isOpen:Ve,command:st.command,setCommand:st.setCommand,forceTextarea:st.forceTextarea,setForceTextarea:st.setForceTextarea,useTextarea:st.useTextarea,attachedFiles:st.attachedFiles,setAttachedFiles:st.setAttachedFiles,removeAttachedFile:st.removeAttachedFile,uploadFile:st.uploadFile,pastedTexts:st.pastedTexts,expandPastedTexts:st.expandPastedTexts,incrementPastedCount:st.incrementPastedCount,setPastedTexts:st.setPastedTexts,resetPastedCount:st.resetPastedCount,handleInputFocus:B.handleInputFocus,handleInputBlur:B.handleInputBlur,pendingPermissions:ie,showCompletion:ue,completionElapsed:be,onImageClick:At,inputRef:K,textareaRef:X,isSnapshotView:b,onClearHistory:Oe.clearHistory,canSwipeClose:es&&d==="terminal"&&!ce&&!Xe.searchMode&&!Oe.fetchingHistory,onSwipeCloseOffsetChange:Yt,onSwipeClose:bt}),r.jsxs("div",{className:"guake-agent-status-bar",children:[!b&&(C==null?void 0:C.isDetached)&&r.jsx(tf,{content:r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"tide-tooltip__title",children:["🔄 ",t("terminal:empty.reattachingSessionTitle")]}),r.jsxs("div",{className:"tide-tooltip__text",children:[t("terminal:empty.reattachingSessionDesc"),r.jsx("br",{}),r.jsx("br",{}),r.jsxs("strong",{children:[t("common:labels.status"),":"]})," ",t("terminal:empty.reattachingSessionStatus")]})]}),position:"top",className:"tide-tooltip--detached",children:r.jsxs("span",{className:"guake-detached-badge",title:t("terminal:empty.reattachingBadge"),children:[r.jsx("span",{className:"guake-detached-spinner",children:"🔄"})," ",t("terminal:empty.reattaching")]})}),(C==null?void 0:C.cwd)&&r.jsxs("span",{className:"guake-agent-cwd",children:["📁 ",C.cwd.split("/").filter(Boolean).slice(-2).join("/")||C.cwd]}),L&&L.map(({areaId:Qe,areaName:dt,dir:Mt})=>r.jsxs("span",{className:"guake-agent-area-dir",title:`${dt}: ${Mt}`,onClick:()=>z.openFileExplorerForAreaFolder(Qe,Mt),children:["📂 ",Mt.split("/").filter(Boolean).pop()||Mt]},`${Qe}:${Mt}`)),!b&&C&&(()=>{const Qe=C.contextStats,dt=!!Qe,Mt=Qe?Qe.totalTokens:C.contextUsed||0,gt=Qe?Qe.contextWindow:C.contextLimit||2e5,Dt=Qe?Qe.usedPercent:Math.round(Mt/gt*100),un=Math.round(100-Dt),zt=Dt>=80?"#ff4a4a":Dt>=60?"#ff9e4a":Dt>=40?"#ffd700":"#4aff9e",dn=(Mt/1e3).toFixed(1),Tn=(gt/1e3).toFixed(1);return r.jsxs("span",{className:"guake-agent-context",onClick:()=>z.setContextModalAgentId(N),title:t(dt?"terminal:context.clickToViewStats":"terminal:context.clickToFetchStats"),children:[r.jsx("span",{className:"context-icon",children:"📊"}),r.jsxs("span",{className:"context-label",children:[t("terminal:agentInfo.context"),":"]}),r.jsx("span",{className:"context-bar-mini",children:r.jsx("span",{className:"context-bar-mini-fill",style:{width:`${Math.min(100,Dt)}%`,backgroundColor:zt}})}),r.jsxs("span",{className:"context-tokens",style:{color:zt},children:[dn,"k/",Tn,"k"]}),r.jsxs("span",{className:"context-free",children:["(",t("terminal:context.percentFree",{percent:un}),")"]}),!dt&&r.jsx("span",{className:"context-warning",title:t("terminal:context.clickToFetchStats"),children:"⚠️"})]})})(),r.jsx(OU,{})]})]}),Ve&&!le&&r.jsx("div",{className:"guake-resize-handle",onMouseDown:E,title:t("common:rightPanel.dragToResize")}),r.jsxs("div",{className:`guake-handle ${le&&Ve?"fullscreen":""}`,onClick:()=>{Ve&&z.toggleTerminal()},onDoubleClick:()=>{Ve||z.toggleTerminal()},style:{top:Ve?le?"calc(100vh - 72px)":`min(${M}%, calc(100vh - 72px))`:"0"},children:[r.jsx("span",{className:"guake-handle-icon",children:Ve?"▲":"▼"}),r.jsx("span",{className:"guake-handle-text",children:C.name})]}),ne&&r.jsx(PE,{url:ne.url,name:ne.name,onClose:()=>W(null)}),ee&&r.jsx(RE,{state:ee,onClose:()=>J(null)}),V&&r.jsx(FH,{action:V,selectedAgentId:N,subordinateCount:((ka=C==null?void 0:C.subordinateIds)==null?void 0:ka.length)||0,onClose:()=>Z(null),onClearHistory:Oe.clearHistory}),r.jsx($H,{}),r.jsx(HH,{}),r.jsx(UH,{agent:C,isOpen:xe,onClose:()=>we(!1)}),!b&&r.jsx(LE,{agent:C,content:he,onClose:()=>ge(null)})]})});function GU(s){return s.trim().replace(/^v/i,"")}function mN(s){const t=GU(s).match(/^(\d+(?:\.\d+)*)(?:-([0-9A-Za-z.-]+))?/);if(!t)return null;const n=t[1].split(".").map(i=>Number.parseInt(i,10));if(n.some(Number.isNaN))return null;const a=t[2]?t[2].split("."):[];return{core:n,prerelease:a}}function WU(s,e){if(s.length===0&&e.length===0)return 0;if(s.length===0)return 1;if(e.length===0)return-1;const t=Math.max(s.length,e.length);for(let n=0;n<t;n+=1){const a=s[n],i=e[n];if(a===void 0)return-1;if(i===void 0)return 1;const o=/^\d+$/.test(a)?Number.parseInt(a,10):null,l=/^\d+$/.test(i)?Number.parseInt(i,10):null;if(o!==null&&l!==null){if(o>l)return 1;if(o<l)return-1;continue}if(o!==null)return-1;if(l!==null)return 1;const c=a.localeCompare(i);if(c!==0)return c>0?1:-1}return 0}function qU(s,e){const t=mN(s),n=mN(e);if(!t||!n)return null;const a=Math.max(t.core.length,n.core.length);for(let i=0;i<a;i+=1){const o=t.core[i]??0,l=n.core[i]??0;if(o>l)return 1;if(o<l)return-1}return WU(t.prerelease,n.prerelease)}function YU(s,e){const t=qU(s,e);return t===null?"unknown":t<0?"behind":t>0?"ahead":"equal"}async function VU(s,e={}){const{timeoutMs:t=5e3,fetchImpl:n=fetch}=e;try{const a=new AbortController,i=setTimeout(()=>a.abort(),t),o=Date.now(),l=await n(`https://registry.npmjs.org/${encodeURIComponent(s)}/latest?t=${o}`,{signal:a.signal,headers:{Accept:"application/json"}});if(clearTimeout(i),!l.ok)return null;const c=await l.json();return typeof c.version=="string"?c.version:null}catch{return null}}async function KU(s,e,t={}){const n=await VU(s,t);return n?{currentVersion:e,latestVersion:n,relation:YU(e,n)}:{currentVersion:e,latestVersion:null,relation:"unknown"}}const XU="tide-commander",qb="1.2.2";function ZU(){const[s,e]=y.useState({currentVersion:qb,latestVersion:null,relation:"unknown",isChecking:!1}),t=y.useCallback(async()=>{e(a=>({...a,isChecking:!0}));const n=await KU(XU,qb);e({currentVersion:qb,latestVersion:n.latestVersion,relation:n.relation,isChecking:!1})},[]);return y.useEffect(()=>{t()},[t]),{...s,refresh:t}}const QU=y.memo(function({agent:e,currentIndex:t,agentIndex:n,isTouchInput:a,isTouchDragEnabled:i,isSelected:o,hasUnseenOutput:l,isDragging:c,isDragOver:d,customClasses:f,onDragStart:p,onDragEnd:m,onDragOver:b,onDragEnter:x,onDragLeave:w,onDrop:k,onAgentClick:S,onAgentDoubleClick:j,onTouchStart:C,onTouchMove:N,onTouchEnd:_,onTouchCancel:D,onHoverEnter:L,onHoverLeave:M,onItemRef:P}){const E=y.useMemo(()=>Vi(e.class,f),[e.class,f]),R=!a||i,I=y.useCallback(O=>{P(e.id,O)},[e.id,P]);return r.jsxs("div",{ref:I,className:`agent-bar-item ${o?"selected":""} ${e.status} ${e.isBoss?"is-boss":""} ${c?"dragging":""} ${d?"drag-over":""} ${i?"touch-drag-enabled":""}`,draggable:R,onDragStart:O=>p(O,e),onDragEnd:m,onDragOver:O=>b(O,n),onDragEnter:O=>x(O,n),onDragLeave:w,onDrop:O=>k(O,n),onTouchStart:O=>C(O,e.id),onTouchMove:N,onTouchEnd:_,onTouchCancel:D,onClick:O=>S(e,O),onDoubleClick:()=>j(e),onMouseEnter:()=>L(e),onMouseLeave:M,title:a?`${e.name} (${t+1}) - Long press to reorder`:`${e.name} (${t+1}) - Drag to reorder within group`,children:[r.jsxs("div",{className:"agent-bar-avatar",children:[r.jsx("span",{className:"agent-bar-icon",children:E.icon}),r.jsx("span",{className:"agent-bar-status",style:{backgroundColor:Tx(e.status)}}),l&&r.jsx("span",{className:"agent-bar-notification-badge",title:"New output available - click to view"}),e.status==="idle"&&e.lastActivity>0&&r.jsx("span",{className:"agent-bar-idle-clock",style:{color:Sf(e.lastActivity)},title:jf(e.lastActivity),children:"⏱"})]}),r.jsxs("span",{className:"agent-bar-hotkey",title:`Ctrl+${t+1}`,children:["^",t+1]})]})}),JU=y.memo(function({onFocusAgent:e,onSpawnClick:t,onSpawnBossClick:n,onNewBuildingClick:a,onNewAreaClick:i}){const{t:o}=Ge(["common"]),l=ji(),c=Er(),d=Tf(),f=Kz(),p=Vx(),m=xo(),b=Ua(),x=Df(),[w,k]=y.useState(!1);MM("AgentBar");const S=y.useRef(null),j=y.useRef(null),C=y.useRef(null),N=y.useRef(new Map);y.useEffect(()=>{{k(!1);return}},[m.experimental2DView]),y.useEffect(()=>{const Te=j.current;if(!Te)return;const Oe=Xe=>{Te.scrollWidth<=Te.clientWidth||(Xe.preventDefault(),Te.scrollLeft+=Xe.deltaY)};return Te.addEventListener("wheel",Oe,{passive:!1}),()=>Te.removeEventListener("wheel",Oe)},[]);const[_,D]=y.useState(null),[L,M]=y.useState(new Map),[P,E]=y.useState(null),[R,I]=y.useState(null),O=y.useRef(0),[B,q]=y.useState(null),H=y.useRef(null),G=y.useRef(null),K=y.useRef(null),X=y.useRef(null),$=350,re=8,le=y.useMemo(()=>typeof window>"u"?!1:"ontouchstart"in window||window.matchMedia("(pointer: coarse)").matches,[]),F=y.useMemo(()=>Array.from(l.values()).filter(Te=>!z.isAgentInArchivedArea(Te.id)).sort((Te,Oe)=>(Te.createdAt||0)-(Oe.createdAt||0)),[l,c]),{orderedAgents:ne,moveAgent:W}=vz(F),ee=ne,J=y.useMemo(()=>{const Te=new Map;for(const Oe of ee)Te.set(Oe.id,z.getAreaForAgent(Oe.id));return Te},[ee,c]),V=y.useMemo(()=>{const Te=new Map;for(const Xe of ee){const at=J.get(Xe.id)||null,st=(at==null?void 0:at.id)||null;Te.has(st)||Te.set(st,{area:at,agents:[]}),Te.get(st).agents.push(Xe)}const Oe=Array.from(Te.values());return Oe.sort((Xe,at)=>{var st,ot;return!Xe.area&&at.area?1:Xe.area&&!at.area?-1:!Xe.area&&!at.area?0:(((st=Xe.area)==null?void 0:st.name)||"").localeCompare(((ot=at.area)==null?void 0:ot.name)||"")}),Oe},[ee,J]),Z=y.useRef(e);Z.current=e;const he=y.useRef(P);he.current=P;const ge=y.useRef(ee);ge.current=ee;const xe=y.useRef(J);xe.current=J;const we=y.useRef(W);we.current=W,y.useEffect(()=>{const Te=new Map(L);let Oe=!1;for(const Xe of ee){const at=L.get(Xe.id);Xe.currentTool?(!at||at.tool!==Xe.currentTool)&&(Te.set(Xe.id,{tool:Xe.currentTool,key:Date.now()}),Oe=!0):at&&setTimeout(()=>{M(st=>{const ot=new Map(st);return ot.delete(Xe.id),ot})},1500)}Oe&&M(Te)},[ee.map(Te=>Te.currentTool).join(",")]),y.useEffect(()=>{const Te=f;if(!Te)return;const Oe=N.current.get(Te),Xe=j.current;Oe&&Xe&&requestAnimationFrame(()=>{const at=Oe.getBoundingClientRect(),st=Xe.getBoundingClientRect(),ie=at.left-st.left+Xe.scrollLeft+at.width/2,Ne=Xe.clientWidth;Xe.scrollTo({left:ie-Ne/2,behavior:"smooth"})})},[f]);const Se=y.useCallback((Te,Oe)=>{if(K.current===Te.id){K.current=null,Oe.preventDefault(),Oe.stopPropagation();return}z.setLastSelectionViaDirectClick(!0),Oe.shiftKey?z.addToSelection(Te.id):z.selectAgent(Te.id),z.setTerminalOpen(!0)},[]),te=y.useCallback(Te=>{var Oe;(Oe=Z.current)==null||Oe.call(Z,Te.id),z.setTerminalOpen(!0)},[]),fe=y.useCallback(()=>D(null),[]),ve=y.useCallback((Te,Oe)=>{Oe?N.current.set(Te,Oe):N.current.delete(Te)},[]),Q=y.useCallback((Te,Oe)=>{E(Oe),q(Oe.id),Te.dataTransfer.effectAllowed="move",Te.dataTransfer.setData("text/plain",Oe.id),requestAnimationFrame(()=>{Te.target.classList.add("dragging")})},[]),pe=y.useCallback(Te=>{E(null),I(null),q(null),O.current=0,Te.target.classList.remove("dragging")},[]),ue=y.useCallback((Te,Oe)=>{Te.preventDefault();const Xe=he.current;if(Xe){const at=xe.current.get(Xe.id),st=ge.current[Oe],ot=st?xe.current.get(st.id):null,ie=(at==null?void 0:at.id)??null,Ne=(ot==null?void 0:ot.id)??null;Te.dataTransfer.dropEffect=ie===Ne?"move":"none"}else Te.dataTransfer.dropEffect="move"},[]),oe=y.useCallback((Te,Oe)=>{Te.preventDefault(),O.current++;const Xe=he.current;if(Xe){const at=xe.current.get(Xe.id),st=ge.current[Oe],ot=st?xe.current.get(st.id):null,ie=(at==null?void 0:at.id)??null,Ne=(ot==null?void 0:ot.id)??null;I(ie===Ne?Oe:null)}else I(Oe)},[]),be=y.useCallback(Te=>{O.current--,O.current===0&&I(null)},[]),je=y.useCallback((Te,Oe)=>{Te.preventDefault();const Xe=he.current;if(!Xe)return;const at=ge.current,st=xe.current,ot=at.findIndex(ie=>ie.id===Xe.id);if(ot!==-1&&ot!==Oe){const ie=st.get(Xe.id),Ne=at[Oe],Ze=Ne?st.get(Ne.id):null,ut=(ie==null?void 0:ie.id)??null,lt=(Ze==null?void 0:Ze.id)??null;ut===lt&&we.current(ot,Oe)}E(null),I(null),q(null),O.current=0},[]),Re=y.useCallback(()=>{H.current&&(clearTimeout(H.current),H.current=null)},[]),et=y.useCallback(()=>{X.current&&(clearTimeout(X.current),X.current=null)},[]),ye=y.useCallback((Te,Oe)=>{if(!le||Te.touches.length!==1)return;Re(),et(),q(null);const Xe=Te.touches[0];G.current={agentId:Oe,x:Xe.clientX,y:Xe.clientY},H.current=setTimeout(()=>{q(Oe),K.current=Oe,H.current=null},$)},[Re,et,le]),Ae=y.useCallback(Te=>{if(!le||Te.touches.length!==1)return;const Oe=G.current;if(!Oe||!H.current)return;const Xe=Te.touches[0],at=Xe.clientX-Oe.x,st=Xe.clientY-Oe.y;Math.sqrt(at*at+st*st)>re&&(Re(),G.current=null)},[Re,le]),Fe=y.useCallback(()=>{Re(),G.current=null,he.current||q(null),et(),X.current=setTimeout(()=>{K.current=null,X.current=null},450)},[Re,et]);y.useEffect(()=>()=>{Re(),et()},[Re,et]);const ae=Te=>{const Oe=`common:status.${Te}`;return o(Oe,{defaultValue:o("common:status.unknown")})},{currentVersion:ce,latestVersion:de,relation:me,isChecking:Ee}=ZU(),_e=ce;let Ve=0;return r.jsxs("div",{className:"agent-bar",ref:S,children:[r.jsxs("div",{className:"agent-bar-scroll",ref:j,children:[r.jsxs("div",{className:"agent-bar-version",title:de?`Tide Commander v${_e} (npm: v${de})`:`Tide Commander v${_e}`,children:[r.jsxs("span",{children:["v",_e]}),me==="behind"&&de?r.jsxs("span",{className:"agent-bar-version-badge agent-bar-version-badge-behind",title:`Behind npm latest v${de}`,children:["npm v",de]}):me==="ahead"&&de?r.jsxs("span",{className:"agent-bar-version-badge agent-bar-version-badge-ahead",title:`Ahead of npm latest v${de}`,children:["npm v",de]}):null,me==="behind"?r.jsx("a",{href:"https://github.com/deivid11/tide-commander/releases",target:"_blank",rel:"noopener noreferrer",className:"agent-bar-version-status agent-bar-version-status-behind",title:o("common:agentBar.behindNpmTooltip",{defaultValue:"Current version is behind npm latest"}),children:o("common:agentBar.behindNpm",{defaultValue:"(behind npm)"})}):me==="ahead"?r.jsx("span",{className:"agent-bar-version-status agent-bar-version-status-ahead",title:o("common:agentBar.aheadNpmTooltip",{defaultValue:"Current version is newer than npm latest"}),children:o("common:agentBar.aheadNpm",{defaultValue:"(ahead of npm)"})}):me==="equal"?r.jsx("a",{href:"https://github.com/deivid11/tide-commander/releases",target:"_blank",rel:"noopener noreferrer",className:"agent-bar-version-status",children:o("common:agentBar.updated")}):Ee?r.jsx("span",{className:"agent-bar-version-status",children:o("common:agentBar.checkingNpm",{defaultValue:"(checking npm)"})}):r.jsx("span",{className:"agent-bar-version-status",children:o("common:agentBar.unknownNpm",{defaultValue:"(npm unknown)"})}),w&&r.jsx("button",{className:"agent-bar-hmr-refresh",onClick:KM,title:"Refresh 3D Scene (HMR changes pending)",children:"↻"})]}),r.jsxs("div",{className:"agent-bar-list",ref:C,children:[r.jsxs("button",{className:"agent-bar-spawn-btn",onClick:t,title:o("common:agentBar.spawnNewAgent"),children:[r.jsx("span",{className:"agent-bar-spawn-icon",children:"+"}),r.jsx("span",{className:"agent-bar-spawn-label",children:o("common:agentBar.newAgent")})]}),r.jsxs("button",{className:"agent-bar-spawn-btn agent-bar-boss-btn",onClick:n,title:o("common:agentBar.spawnBoss"),children:[r.jsx("span",{className:"agent-bar-spawn-icon",children:"👑"}),r.jsx("span",{className:"agent-bar-spawn-label",children:o("common:agentBar.newBoss")})]}),r.jsxs("button",{className:"agent-bar-spawn-btn agent-bar-building-btn",onClick:a,title:o("common:agentBar.addNewBuilding"),children:[r.jsx("span",{className:"agent-bar-spawn-icon",children:"🏢"}),r.jsx("span",{className:"agent-bar-spawn-label",children:o("common:agentBar.newBuilding")})]}),r.jsxs("button",{className:"agent-bar-spawn-btn agent-bar-area-btn",onClick:i,title:o("common:agentBar.drawNewArea"),children:[r.jsx("span",{className:"agent-bar-spawn-icon",children:"🔲"}),r.jsx("span",{className:"agent-bar-spawn-label",children:o("common:agentBar.newArea")})]}),V.map(Te=>{var at,st,ot,ie,Ne;const Oe=Te.agents,Xe=!Te.area;return r.jsxs("div",{className:`agent-bar-group ${Xe?"unassigned":""}`,style:{borderColor:((at=Te.area)==null?void 0:at.color)||void 0,background:Te.area?`${Te.area.color}15`:void 0},children:[r.jsx("div",{className:"agent-bar-area-label",children:r.jsx("span",{className:"agent-bar-area-name",style:{color:((st=Te.area)==null?void 0:st.color)||"#888"},children:((ot=Te.area)==null?void 0:ot.name)||o("common:agentBar.unassigned")})}),((ie=Te.area)==null?void 0:ie.directories)&&Te.area.directories.length>0&&r.jsx("div",{className:"agent-bar-folders",children:Te.area.directories.map((Ze,ut)=>r.jsxs("div",{className:"agent-bar-folder-item",onClick:lt=>{lt.stopPropagation(),z.openFileExplorer(Ze)},children:[r.jsx("span",{className:"agent-bar-folder-icon",children:"📁"}),r.jsxs("div",{className:"agent-bar-folder-tooltip",children:[r.jsx("div",{className:"agent-bar-folder-tooltip-path",children:Ze}),r.jsx("div",{className:"agent-bar-folder-tooltip-hint",children:o("common:agentBar.clickToOpen")})]})]},ut))}),Oe.map(Ze=>{const ut=Ve++,lt=ee.findIndex(Bt=>Bt.id===Ze.id);return r.jsx(QU,{agent:Ze,currentIndex:ut,agentIndex:lt,isTouchInput:le,isTouchDragEnabled:B===Ze.id,isSelected:d.has(Ze.id),hasUnseenOutput:x.has(Ze.id),isDragging:(P==null?void 0:P.id)===Ze.id,isDragOver:R===lt,customClasses:b,onDragStart:Q,onDragEnd:pe,onDragOver:ue,onDragEnter:oe,onDragLeave:be,onDrop:je,onAgentClick:Se,onAgentDoubleClick:te,onTouchStart:ye,onTouchMove:Ae,onTouchEnd:Fe,onTouchCancel:Fe,onHoverEnter:D,onHoverLeave:fe,onItemRef:ve},Ze.id)})]},((Ne=Te.area)==null?void 0:Ne.id)||"unassigned")})]})]}),Array.from(L.entries()).map(([Te,Oe])=>{const Xe=N.current.get(Te);if(!Xe)return null;const at=Xe.getBoundingClientRect(),st=fs[Oe.tool]||fs.default;return r.jsxs("div",{className:"agent-bar-tool-bubble",title:Oe.tool,style:{position:"fixed",left:at.left+at.width/2,bottom:window.innerHeight-at.top+8},children:[r.jsx("span",{className:"agent-bar-tool-icon",children:st}),r.jsx("span",{className:"agent-bar-tool-name",children:Oe.tool})]},`tool-${Te}-${Oe.key}`)}),_&&(()=>{const Te=z.getAreaForAgent(_.id),Oe=p.get(_.id),Xe=Vi(_.class,b),at=z.getAgentSupervisorHistory(_.id),st=at.length>0?at[at.length-1]:void 0,ot=Date.now()-(_.createdAt||Date.now()),ie=Math.floor(ot/6e4),Ne=Math.floor(ie/60),Ze=Ne>0?`${Ne}h ${ie%60}m`:`${ie}m`,ut=Pt=>Pt>=1e6?`${(Pt/1e6).toFixed(1)}M`:Pt>=1e3?`${(Pt/1e3).toFixed(1)}K`:Pt.toString(),lt=_.contextLimit>0?Math.round(_.contextUsed/_.contextLimit*100):0,Bt=Pt=>{switch(Pt){case"on_track":return"#4aff9e";case"completed":return"#4a9eff";case"stalled":return"#ff9e4a";case"blocked":return"#ff4a4a";case"idle":return"#888888";default:return"#888888"}},Ot=N.current.get(_.id),Ct={};if(Ot){const Pt=Ot.getBoundingClientRect();Ct.position="fixed",Ct.left=Pt.left+Pt.width/2,Ct.bottom=window.innerHeight-Pt.top+12}return r.jsxs("div",{className:"agent-bar-tooltip",style:Ct,children:[r.jsxs("div",{className:"agent-bar-tooltip-header",children:[r.jsx("span",{className:"agent-bar-tooltip-icon",children:Xe.icon}),r.jsxs("span",{className:"agent-bar-tooltip-name",children:[r.jsx("img",{src:_.provider==="codex"?"/assets/codex.png":"/assets/claude.png",alt:_.provider,className:"agent-bar-provider-icon",title:_.provider==="codex"?"Codex Agent":"Claude Agent"}),_.name]}),r.jsx("span",{className:"agent-bar-tooltip-status",style:{color:Tx(_.status)},children:ae(_.status)})]}),r.jsxs("div",{className:"agent-bar-tooltip-info",children:[r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:labels.class"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value",children:[_.class," — ",Xe.description]})]}),Te&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:agentPopup.area"),":"]}),r.jsx("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-area",style:{color:Te.color},children:Te.name})]}),r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:agentPopup.directory"),":"]}),r.jsx("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-path",children:_.cwd})]}),r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:labels.uptime"),":"]}),r.jsx("span",{className:"agent-bar-tooltip-value",children:Ze})]}),r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:labels.tokens"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value",children:[ut(_.tokensUsed)," ",o("common:agentPopup.used")]})]}),r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:labels.context"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value",style:{color:lt>80?"#ff4a4a":lt>60?"#ff9e4a":void 0},children:[ut(_.contextUsed)," / ",ut(_.contextLimit)," (",lt,"%)"]})]}),_.currentTool&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:agentPopup.tool"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-tool",children:[fs[_.currentTool]||fs.default," ",_.currentTool]})]}),_.taskLabel&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsx("span",{className:"agent-bar-tooltip-label",children:"📋 Task:"}),r.jsx("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-tool",children:_.taskLabel})]}),_.currentTask&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:labels.task"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value",children:[_.currentTask.substring(0,150),_.currentTask.length>150?"...":""]})]}),_.lastAssignedTask&&!_.currentTask&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:agentPopup.assignedTask"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-query",children:[_.lastAssignedTask.substring(0,200),_.lastAssignedTask.length>200?"...":""]})]}),Oe&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:agentPopup.lastQuery"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-query",children:[Oe.text.substring(0,300),Oe.text.length>300?"...":""]})]}),st&&r.jsxs(r.Fragment,{children:[r.jsx("div",{className:"agent-bar-tooltip-divider"}),r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:agentPopup.supervisor"),":"]}),r.jsx("span",{className:"agent-bar-tooltip-value",style:{color:Bt(st.analysis.progress)},children:st.analysis.progress.replace("_"," ")})]}),r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:labels.status"),":"]}),r.jsx("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-supervisor",children:st.analysis.statusDescription})]}),st.analysis.recentWorkSummary&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:labels.summary"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-supervisor",children:[st.analysis.recentWorkSummary.substring(0,300),st.analysis.recentWorkSummary.length>300?"...":""]})]}),st.analysis.concerns&&st.analysis.concerns.length>0&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[o("common:labels.concerns"),":"]}),r.jsx("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-concerns",children:st.analysis.concerns.join("; ")})]})]})]})]})})()]})});function eG({activeTool:s,onExit:e}){const{t}=Ge(["notifications","terminal"]);if(!s||s==="select")return null;const n=t(s==="rectangle"?"notifications:drawing.rectangleTool":"notifications:drawing.circleTool"),a=s==="rectangle"?"▭":"○";return r.jsxs("div",{className:"drawing-mode-indicator",children:[r.jsxs("div",{className:"drawing-mode-content",children:[r.jsx("span",{className:"drawing-mode-icon",children:a}),r.jsxs("div",{className:"drawing-mode-text",children:[r.jsxs("span",{className:"drawing-mode-title",children:[t("terminal:drawingMode.drawingArea"),": ",n]}),r.jsxs("span",{className:"drawing-mode-hint",children:[t("terminal:drawingMode.clickAndDrag")," • ",t("terminal:drawingMode.pressEscape")]})]})]}),r.jsx("button",{className:"drawing-mode-exit",onClick:e,title:t("terminal:drawingMode.exitDrawingMode"),children:"✕"})]})}const tG={idle:"common:status.idle",working:"common:status.working",waiting:"common:status.waiting",error:"common:status.error",offline:"common:status.offline"},Yb=s=>s>=1e6?`${(s/1e6).toFixed(1)}M`:s>=1e3?`${(s/1e3).toFixed(1)}K`:s.toString(),nG=s=>{switch(s){case"on_track":return"#4aff9e";case"completed":return"#4a9eff";case"stalled":return"#ff9e4a";case"blocked":return"#ff4a4a";case"idle":return"#888888";default:return"#888888"}},sG=y.memo(function({agent:e,screenPos:t,onClose:n}){const{t:a}=Ge(["common"]),i=Ua(),o=z.getAreaForAgent(e.id),l=z.getState().lastPrompts.get(e.id),c=Vi(e.class,i),d=z.getAgentSupervisorHistory(e.id),f=d.length>0?d[d.length-1]:void 0,p=Date.now()-(e.createdAt||Date.now()),m=Math.floor(p/6e4),b=Math.floor(m/60),x=b>0?`${b}h ${m%60}m`:`${m}m`,w=e.contextLimit>0?Math.round(e.contextUsed/e.contextLimit*100):0,k=y.useMemo(()=>{let C=t.x-150,N=t.y-320-10;return typeof window<"u"&&(C<10?C=10:C+300>window.innerWidth-10&&(C=window.innerWidth-300-10),N<10&&(N=t.y+10)),{position:"fixed",left:C,top:N,zIndex:1e4,maxWidth:300,maxHeight:320,fontSize:"0.85em"}},[t.x,t.y]);return r.jsxs("div",{className:"agent-hover-popup",style:k,onMouseLeave:n,children:[r.jsxs("div",{className:"agent-bar-tooltip-header",children:[r.jsx("span",{className:"agent-bar-tooltip-icon",children:c.icon}),r.jsx("span",{className:"agent-bar-tooltip-name",children:e.name}),r.jsx("span",{className:"agent-bar-tooltip-status",style:{color:Tx(e.status)},children:a(tG[e.status]||"common:status.unknown")})]}),r.jsxs("div",{className:"agent-bar-tooltip-info",children:[r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:labels.class"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value",children:[e.class," — ",c.description]})]}),o&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:agentPopup.area"),":"]}),r.jsx("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-area",style:{color:o.color},children:o.name})]}),r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:agentPopup.directory"),":"]}),r.jsx("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-path",children:e.cwd})]}),r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:labels.uptime"),":"]}),r.jsx("span",{className:"agent-bar-tooltip-value",children:x})]}),r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:labels.tokens"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value",children:[Yb(e.tokensUsed)," ",a("common:agentPopup.used")]})]}),r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:labels.context"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value",style:{color:w>80?"#ff4a4a":w>60?"#ff9e4a":void 0},children:[Yb(e.contextUsed)," / ",Yb(e.contextLimit)," (",w,"%)"]})]}),e.currentTool&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:agentPopup.tool"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-tool",children:[fs[e.currentTool]||fs.default," ",e.currentTool]})]}),e.currentTask&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:labels.task"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value",children:[e.currentTask.substring(0,150),e.currentTask.length>150?"...":""]})]}),e.lastAssignedTask&&!e.currentTask&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:agentPopup.assignedTask"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-query",children:[e.lastAssignedTask.substring(0,200),e.lastAssignedTask.length>200?"...":""]})]}),l&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:agentPopup.lastQuery"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-query",children:[l.text.substring(0,300),l.text.length>300?"...":""]})]}),f&&r.jsxs(r.Fragment,{children:[r.jsx("div",{className:"agent-bar-tooltip-divider"}),r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:agentPopup.supervisor"),":"]}),r.jsx("span",{className:"agent-bar-tooltip-value",style:{color:nG(f.analysis.progress)},children:f.analysis.progress.replace("_"," ")})]}),r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:labels.status"),":"]}),r.jsx("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-supervisor",children:f.analysis.statusDescription})]}),f.analysis.recentWorkSummary&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:labels.summary"),":"]}),r.jsxs("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-supervisor",children:[f.analysis.recentWorkSummary.substring(0,300),f.analysis.recentWorkSummary.length>300?"...":""]})]}),f.analysis.concerns&&f.analysis.concerns.length>0&&r.jsxs("div",{className:"agent-bar-tooltip-row",children:[r.jsxs("span",{className:"agent-bar-tooltip-label",children:[a("common:labels.concerns"),":"]}),r.jsx("span",{className:"agent-bar-tooltip-value agent-bar-tooltip-concerns",children:f.analysis.concerns.join("; ")})]})]})]})]})});function gN(s){if(s===0)return"0 B";const e=1024,t=["B","KB","MB","GB"],n=Math.floor(Math.log(s)/Math.log(e));return parseFloat((s/Math.pow(e,n)).toFixed(1))+" "+t[n]}function bN(s){const t=Date.now()-s,n=Math.floor(t/(1e3*60*60)),a=Math.floor(t%(1e3*60*60)/(1e3*60));return n>0?`${n}h ${a}m`:`${a}m`}const yN={30:"#1a1a1a",31:"#e74c3c",32:"#2ecc71",33:"#f39c12",34:"#3498db",35:"#9b59b6",36:"#00bcd4",37:"#ecf0f1",90:"#7f8c8d",91:"#ff6b6b",92:"#4ade80",93:"#fbbf24",94:"#60a5fa",95:"#c084fc",96:"#22d3ee",97:"#ffffff"};function aG(s){const e=[],t=/\x1B\[([0-9;]*)m/g;let n=0,a=null,i;for(;(i=t.exec(s))!==null;){if(i.index>n){const l=s.slice(n,i.index);a?e.push(r.jsx("span",{style:{color:a},children:l},e.length)):e.push(l)}const o=i[1].split(";").map(Number);for(const l of o)l===0||l===39?a=null:yN[l]&&(a=yN[l]);n=t.lastIndex}if(n<s.length){const o=s.slice(n);a?e.push(r.jsx("span",{style:{color:a},children:o},e.length)):e.push(o)}return e.length>0?e:[s]}const iG=y.memo(function({building:e,screenPos:t,onClose:n,onOpenSettings:a,onOpenLogsModal:i,onOpenUrlInModal:o}){var H,G,K,X,$,re,le,F,ne,W,ee,J,V,Z,he,ge,xe,we,Se,te;const{t:l}=Ge(["terminal","common"]),[c,d]=y.useState(!1),[f,p]=y.useState(null),[m,b]=y.useState(!1),x=y.useRef(null),w=y.useRef(f);w.current=f;const{buildingLogs:k}=Un(),S=z.getBuildingLogs(e.id),j=(H=e.pm2)==null?void 0:H.enabled,C=(G=e.docker)==null?void 0:G.enabled,N=y.useRef(null),_=y.useRef(null),D=y.useCallback(fe=>{fe.preventDefault();const ve=w.current?w.current.x:0,Q=w.current?w.current.y:0;x.current={mouseX:fe.clientX,mouseY:fe.clientY,popupX:ve,popupY:Q},b(!0),N.current=pe=>{if(!x.current)return;const ue=pe.clientX-x.current.mouseX,oe=pe.clientY-x.current.mouseY;p({x:x.current.popupX+ue,y:x.current.popupY+oe})},_.current=()=>{b(!1),x.current=null,N.current&&document.removeEventListener("mousemove",N.current),_.current&&document.removeEventListener("mouseup",_.current)},document.addEventListener("mousemove",N.current),document.addEventListener("mouseup",_.current)},[]);y.useEffect(()=>()=>{N.current&&document.removeEventListener("mousemove",N.current),_.current&&document.removeEventListener("mouseup",_.current)},[]);const L=fe=>{if(fe==="logs"){if((j||C)&&i){i();return}z.sendBuildingCommand(e.id,fe),d(!0)}else z.sendBuildingCommand(e.id,fe)},M=(fe,ve)=>{if(fe){const Q=`http://localhost:${fe}`;ve&&o?o(Q):window.open(Q,"_blank")}},P=((K=e.pm2Status)==null?void 0:K.ports)||[],E=(($=(X=e.dockerStatus)==null?void 0:X.ports)==null?void 0:$.map(fe=>fe.host))||[],R=j?P:C?E:[],I=j?!!((re=e.pm2)!=null&&re.script):C?!!((le=e.docker)!=null&&le.image)||((F=e.docker)==null?void 0:F.mode)==="compose"||((ne=e.docker)==null?void 0:ne.mode)==="existing":!!((W=e.commands)!=null&&W.start),O=j?!!((ee=e.pm2)!=null&&ee.script):C?!0:!!((J=e.commands)!=null&&J.stop),B=j?!!((V=e.pm2)!=null&&V.script):C?!0:!!((Z=e.commands)!=null&&Z.restart),q=y.useMemo(()=>{const ve=c?400:250;let Q=t.x+20,pe=t.y-80;return typeof window<"u"&&!f&&(t.x+20+280>window.innerWidth&&(Q=t.x-280-20),t.y-80<0?pe=10:t.y-80+ve>window.innerHeight&&(pe=window.innerHeight-ve-10)),{position:"fixed",left:Q+((f==null?void 0:f.x)||0),top:pe+((f==null?void 0:f.y)||0),zIndex:1e3,cursor:m?"grabbing":void 0}},[t.x,t.y,c,f,m]);return r.jsxs("div",{className:"building-action-popup",style:q,onClick:fe=>fe.stopPropagation(),children:[r.jsxs("div",{className:`building-popup-header ${m?"dragging":""}`,onMouseDown:D,children:[r.jsx("span",{className:"building-popup-name",children:e.name}),R.length>0&&r.jsx("span",{className:"building-popup-ports",children:R.map(fe=>r.jsxs("a",{href:`http://localhost:${fe}`,className:"building-popup-port-link",onClick:ve=>{ve.preventDefault(),ve.stopPropagation(),M(fe,ve.altKey)},onMouseDown:ve=>ve.stopPropagation(),title:`Open http://localhost:${fe} (Alt+Click for modal)`,children:[":",fe]},fe))}),r.jsx("span",{className:"building-popup-status",style:{backgroundColor:mo[e.status]},children:e.status}),r.jsx("button",{className:"building-popup-close",onClick:n,children:"x"})]}),j&&e.pm2Status&&r.jsxs("div",{className:"building-popup-metrics",children:[r.jsxs("span",{className:"metric",children:[r.jsx("span",{className:"label",children:"PID"}),r.jsx("span",{className:"value",children:e.pm2Status.pid||"-"})]}),r.jsxs("span",{className:"metric",children:[r.jsx("span",{className:"label",children:"CPU"}),r.jsxs("span",{className:"value",children:[((he=e.pm2Status.cpu)==null?void 0:he.toFixed(1))||"0","%"]})]}),r.jsxs("span",{className:"metric",children:[r.jsx("span",{className:"label",children:"MEM"}),r.jsx("span",{className:"value",children:gN(e.pm2Status.memory||0)})]}),e.pm2Status.restarts!==void 0&&e.pm2Status.restarts>0&&r.jsxs("span",{className:"metric",children:[r.jsx("span",{className:"label",children:"RST"}),r.jsx("span",{className:"value",children:e.pm2Status.restarts})]}),e.pm2Status.uptime&&r.jsxs("span",{className:"metric",children:[r.jsx("span",{className:"label",children:"UP"}),r.jsx("span",{className:"value",children:bN(e.pm2Status.uptime)})]})]}),C&&e.dockerStatus&&r.jsxs("div",{className:"building-popup-metrics",children:[r.jsxs("span",{className:"metric",children:[r.jsx("span",{className:"label",children:"ID"}),r.jsx("span",{className:"value",children:e.dockerStatus.containerId||"-"})]}),e.dockerStatus.cpu!==void 0&&r.jsxs("span",{className:"metric",children:[r.jsx("span",{className:"label",children:"CPU"}),r.jsxs("span",{className:"value",children:[e.dockerStatus.cpu.toFixed(1),"%"]})]}),e.dockerStatus.memory!==void 0&&r.jsxs("span",{className:"metric",children:[r.jsx("span",{className:"label",children:"MEM"}),r.jsx("span",{className:"value",children:gN(e.dockerStatus.memory)})]}),e.dockerStatus.health&&e.dockerStatus.health!=="none"&&r.jsxs("span",{className:"metric",children:[r.jsx("span",{className:"label",children:"HEALTH"}),r.jsx("span",{className:"value",style:{color:e.dockerStatus.health==="healthy"?"#4ade80":e.dockerStatus.health==="unhealthy"?"#f87171":"#fbbf24"},children:e.dockerStatus.health==="healthy"?"✓":e.dockerStatus.health==="unhealthy"?"✗":"..."})]}),e.dockerStatus.startedAt&&r.jsxs("span",{className:"metric",children:[r.jsx("span",{className:"label",children:"UP"}),r.jsx("span",{className:"value",children:bN(e.dockerStatus.startedAt)})]})]}),C&&((ge=e.dockerStatus)==null?void 0:ge.services)&&e.dockerStatus.services.length>0&&r.jsx("div",{className:"building-popup-services",children:e.dockerStatus.services.map((fe,ve)=>r.jsxs("span",{className:"service-item",title:`${fe.name}: ${fe.status}`,children:[r.jsx("span",{className:"service-indicator",style:{backgroundColor:fe.status==="running"?"#4ade80":"#f87171"}}),r.jsx("span",{className:"service-name",children:fe.name})]},ve))}),(e.lastError||j&&((xe=e.pm2Status)==null?void 0:xe.status)==="errored"||C&&((we=e.dockerStatus)==null?void 0:we.status)==="dead")&&r.jsxs("div",{className:"building-popup-error",children:[e.lastError||l("terminal:building.processFailedToStart"),j&&((Se=e.pm2Status)==null?void 0:Se.restarts)&&e.pm2Status.restarts>5&&r.jsxs("span",{className:"error-hint",children:[" - ",l("terminal:building.checkLogsOrConfig")]}),C&&((te=e.dockerStatus)==null?void 0:te.health)==="unhealthy"&&r.jsxs("span",{className:"error-hint",children:[" - ",l("terminal:building.healthCheckFailing")]})]}),r.jsxs("div",{className:"building-popup-actions",children:[r.jsxs("button",{className:"action-btn start",onClick:()=>L("start"),disabled:!I||e.status==="running"||e.status==="starting",title:l(I?"terminal:buildingAction.start":"terminal:buildingAction.noStartCommand"),children:[r.jsx("span",{className:"icon",children:"▶"}),l("terminal:buildingAction.start")]}),r.jsxs("button",{className:"action-btn stop",onClick:()=>L("stop"),disabled:!O||e.status==="stopped"||e.status==="stopping",title:l(O?"terminal:buildingAction.stop":"terminal:buildingAction.noStopCommand"),children:[r.jsx("span",{className:"icon",children:"■"}),l("terminal:buildingAction.stop")]}),r.jsxs("button",{className:"action-btn restart",onClick:()=>L("restart"),disabled:!B,title:l(B?"terminal:buildingAction.restart":"terminal:buildingAction.noRestartCommand"),children:[r.jsx("span",{className:"icon",children:"↺"}),l("terminal:buildingAction.restart")]}),r.jsxs("button",{className:"action-btn logs",onClick:()=>L("logs"),title:l("terminal:buildingAction.viewLogs"),children:[r.jsx("span",{className:"icon",children:"📄"}),l("terminal:logs.title")]}),R.length===1&&r.jsxs("button",{className:"action-btn open-url",onClick:fe=>M(R[0],fe.altKey),title:`Open http://localhost:${R[0]} (Alt+Click for modal)`,children:[r.jsx("span",{className:"icon",children:"🔗"}),l("terminal:buildingAction.openInBrowser")]}),R.length>1&&r.jsxs("div",{className:"action-btn-group",children:[r.jsxs("span",{className:"action-btn-label",children:[l("terminal:buildingAction.openInBrowser"),":"]}),R.map(fe=>r.jsxs("button",{className:"action-btn open-url port-btn",onClick:ve=>M(fe,ve.altKey),title:`Open http://localhost:${fe} (Alt+Click for modal)`,children:[":",fe]},fe))]})]}),c&&S.length>0&&r.jsxs("div",{className:"building-popup-logs",children:[r.jsxs("div",{className:"logs-header",children:[r.jsx("span",{children:l("terminal:logs.title")}),r.jsx("button",{onClick:()=>z.clearBuildingLogs(e.id),children:l("terminal:logs.clear")})]}),r.jsx("div",{className:"logs-content",children:S.slice(-50).map((fe,ve)=>r.jsx("pre",{children:aG(fe)},ve))})]}),r.jsx("button",{className:"building-popup-settings",onClick:a,children:l("terminal:buildingAction.fullSettings")})]})});function rG(s){if(s===0)return"0 B";const e=1024,t=["B","KB","MB","GB"],n=Math.floor(Math.log(s)/Math.log(e));return parseFloat((s/Math.pow(e,n)).toFixed(1))+" "+t[n]}function oG(s){const t=Date.now()-s,n=Math.floor(t/(1e3*60*60)),a=Math.floor(t%(1e3*60*60)/(1e3*60));return n>0?`${n}h ${a}m`:`${a}m`}const lG=y.memo(function({building:e,screenPos:t,onClose:n,onOpenSettings:a,onOpenLogsModal:i,onOpenUrlInModal:o}){const{t:l}=Ge(["terminal","common"]),[c,d]=y.useState(null),[f,p]=y.useState(!1),m=y.useRef(null),b=y.useRef(c);b.current=c;const{buildings:x}=Un(),k=(e.subordinateBuildingIds||[]).map(P=>x.get(P)).filter(P=>P!==void 0),S=y.useRef(null),j=y.useRef(null),C=y.useCallback(P=>{P.preventDefault();const E=b.current?b.current.x:0,R=b.current?b.current.y:0;m.current={mouseX:P.clientX,mouseY:P.clientY,popupX:E,popupY:R},p(!0),S.current=I=>{if(!m.current)return;const O=I.clientX-m.current.mouseX,B=I.clientY-m.current.mouseY;d({x:m.current.popupX+O,y:m.current.popupY+B})},j.current=()=>{p(!1),m.current=null,S.current&&document.removeEventListener("mousemove",S.current),j.current&&document.removeEventListener("mouseup",j.current)},document.addEventListener("mousemove",S.current),document.addEventListener("mouseup",j.current)},[]);y.useEffect(()=>()=>{S.current&&document.removeEventListener("mousemove",S.current),j.current&&document.removeEventListener("mouseup",j.current)},[]);const N=P=>{z.sendBossBuildingCommand(e.id,P)},_=k.reduce((P,E)=>(P[E.status]=(P[E.status]||0)+1,P),{}),D=k.some(P=>{var E;return(E=P.pm2)==null?void 0:E.enabled}),L=(P,E)=>{const R=`http://localhost:${P}`;E&&o?o(R):window.open(R,"_blank")},M=y.useMemo(()=>{let R=t.x+20,I=t.y-80;return typeof window<"u"&&!c&&(t.x+20+340>window.innerWidth&&(R=t.x-340-20),t.y-80<0?I=10:t.y-80+350>window.innerHeight&&(I=window.innerHeight-350-10)),{position:"fixed",left:R+((c==null?void 0:c.x)||0),top:I+((c==null?void 0:c.y)||0),zIndex:1e3,cursor:f?"grabbing":void 0}},[t.x,t.y,c,f]);return r.jsxs("div",{className:"building-action-popup boss-building-popup",style:M,onClick:P=>P.stopPropagation(),children:[r.jsxs("div",{className:`building-popup-header boss-header ${f?"dragging":""}`,onMouseDown:C,children:[r.jsx("span",{className:"boss-icon",children:"👑"}),r.jsx("span",{className:"building-popup-name",children:e.name}),r.jsx("span",{className:"subordinate-count",children:l("terminal:building.unitsCount",{count:k.length})}),r.jsx("button",{className:"building-popup-close",onClick:n,children:"x"})]}),r.jsxs("div",{className:"boss-status-overview",children:[Object.entries(_).map(([P,E])=>r.jsxs("span",{className:"status-badge",style:{backgroundColor:mo[P]||"#666"},children:[E," ",P]},P)),k.length===0&&r.jsx("span",{className:"no-subordinates",children:l("terminal:building.noSubordinates")})]}),k.length>0&&r.jsx("div",{className:"subordinate-list",children:k.map(P=>{var E,R,I;return r.jsxs("div",{className:"subordinate-item",children:[r.jsx("span",{className:"sub-status-dot",style:{backgroundColor:mo[P.status]}}),r.jsx("span",{className:"sub-name",children:P.name}),((E=P.pm2Status)==null?void 0:E.ports)&&P.pm2Status.ports.length>0&&r.jsx("span",{className:"sub-port",children:P.pm2Status.ports.map(O=>r.jsxs("a",{href:`http://localhost:${O}`,className:"building-popup-port-link",onClick:B=>{B.preventDefault(),B.stopPropagation(),L(O,B.altKey)},title:`Open http://localhost:${O} (Alt+Click for modal)`,children:[":",O]},O))}),P.pm2Status&&r.jsxs("span",{className:"sub-metrics",children:[(R=P.pm2Status.cpu)==null?void 0:R.toFixed(0),"% | ",rG(P.pm2Status.memory||0)]}),((I=P.pm2Status)==null?void 0:I.uptime)&&r.jsx("span",{className:"sub-uptime",children:oG(P.pm2Status.uptime)})]},P.id)})}),r.jsxs("div",{className:"building-popup-actions boss-actions",children:[r.jsxs("button",{className:"action-btn start",onClick:()=>N("start_all"),disabled:k.length===0,title:l("terminal:building.startAllSubs"),children:[r.jsx("span",{className:"icon",children:"▶"}),l("terminal:building.startAll")]}),r.jsxs("button",{className:"action-btn stop",onClick:()=>N("stop_all"),disabled:k.length===0,title:l("terminal:building.stopAllSubs"),children:[r.jsx("span",{className:"icon",children:"■"}),l("terminal:building.stopAll")]}),r.jsxs("button",{className:"action-btn restart",onClick:()=>N("restart_all"),disabled:k.length===0,title:l("terminal:building.restartAllSubs"),children:[r.jsx("span",{className:"icon",children:"↺"}),l("terminal:building.restartAll")]}),D&&r.jsxs("button",{className:"action-btn logs",onClick:i,title:l("terminal:building.viewUnifiedLogs"),children:[r.jsx("span",{className:"icon",children:"📄"}),l("terminal:building.logs")]})]}),r.jsx("button",{className:"building-popup-settings",onClick:a,children:l("terminal:building.fullSettings")})]})}),cG=y.memo(function({building:e,screenPos:t,onClose:n,onOpenSettings:a,onOpenDatabasePanel:i}){var _;const{t:o}=Ge(["terminal","common"]),[l,c]=y.useState(null),[d,f]=y.useState(!1),p=y.useRef(null),m=y.useRef(l);m.current=l;const b=_f(e.id),x=((_=e.database)==null?void 0:_.connections)??[],w=y.useRef(null),k=y.useRef(null),S=y.useCallback(D=>{D.preventDefault();const L=m.current?m.current.x:0,M=m.current?m.current.y:0;p.current={mouseX:D.clientX,mouseY:D.clientY,popupX:L,popupY:M},f(!0),w.current=P=>{if(!p.current)return;const E=P.clientX-p.current.mouseX,R=P.clientY-p.current.mouseY;c({x:p.current.popupX+E,y:p.current.popupY+R})},k.current=()=>{f(!1),p.current=null,w.current&&document.removeEventListener("mousemove",w.current),k.current&&document.removeEventListener("mouseup",k.current)},document.addEventListener("mousemove",w.current),document.addEventListener("mouseup",k.current)},[]);y.useEffect(()=>()=>{w.current&&document.removeEventListener("mousemove",w.current),k.current&&document.removeEventListener("mouseup",k.current)},[]);const j=D=>{z.testDatabaseConnection(e.id,D)},C=D=>b.connectionStatus.get(D),N=y.useMemo(()=>{let M=t.x+20,P=t.y-80;return typeof window<"u"&&!l&&(t.x+20+320>window.innerWidth&&(M=t.x-320-20),t.y-80<0?P=10:t.y-80+300>window.innerHeight&&(P=window.innerHeight-300-10)),{position:"fixed",left:M+((l==null?void 0:l.x)||0),top:P+((l==null?void 0:l.y)||0),zIndex:1e3,cursor:d?"grabbing":void 0}},[t.x,t.y,l,d]);return r.jsxs("div",{className:"building-action-popup database-building-popup",style:N,onClick:D=>D.stopPropagation(),children:[r.jsxs("div",{className:`building-popup-header database-header ${d?"dragging":""}`,onMouseDown:S,children:[r.jsx("span",{className:"database-icon",children:"🗄️"}),r.jsx("span",{className:"building-popup-name",children:e.name}),r.jsx("span",{className:"connection-count",children:o("terminal:building.connCount",{count:x.length})}),r.jsx("button",{className:"building-popup-close",onClick:n,children:"x"})]}),x.length>0?r.jsx("div",{className:"database-connection-list",children:x.map(D=>{const L=C(D.id);return r.jsxs("div",{className:"database-connection-item",children:[r.jsx("span",{className:"conn-engine",children:D.engine==="mysql"?"🐬":"🐘"}),r.jsx("span",{className:"conn-name",children:D.name}),r.jsxs("span",{className:"conn-host",children:[D.host,":",D.port]}),L&&r.jsx("span",{className:`conn-status ${L.connected?"connected":"disconnected"}`,children:L.connected?"●":"○"}),r.jsx("button",{className:"conn-test-btn",onClick:()=>j(D.id),title:o("terminal:building.testConnection"),children:"↻"})]},D.id)})}):r.jsxs("div",{className:"database-no-connections",children:[r.jsx("p",{children:o("terminal:building.noConnections")}),r.jsx("p",{className:"hint",children:o("terminal:building.clickSettingsToAdd")})]}),r.jsxs("div",{className:"building-popup-actions database-actions",children:[r.jsxs("button",{className:"action-btn query",onClick:i,disabled:x.length===0,title:o("terminal:building.openDbExplorer"),children:[r.jsx("span",{className:"icon",children:"⌨"}),o("terminal:building.query")]}),r.jsxs("button",{className:"action-btn test-all",onClick:()=>x.forEach(D=>j(D.id)),disabled:x.length===0,title:o("terminal:building.testAllConnections"),children:[r.jsx("span",{className:"icon",children:"↻"}),o("terminal:building.testAll")]})]}),r.jsx("button",{className:"building-popup-settings",onClick:a,children:o("common:buttons.settings")})]})}),uG=({building:s,connections:e,activeConnectionId:t,activeDatabase:n,collapsed:a,onToggleCollapse:i,onConnectionChange:o,onDatabaseChange:l,onInsertTable:c,onSelectTableQuery:d})=>{const{t:f}=Ge(["terminal"]),p=_f(s.id),[m,b]=y.useState(new Set),[x,w]=y.useState(""),[k,S]=y.useState(!1),[j,C]=y.useState(null),N=y.useRef(null),_=y.useRef(null),D=t?p.databases.get(t)??[]:[],L=t&&n?`${t}:${n}`:"",M=L?p.tables.get(L)??[]:[],P=t?p.connectionStatus.get(t):void 0,E=y.useMemo(()=>{if(!x.trim())return D;const O=x.toLowerCase();return D.filter(B=>B.toLowerCase().includes(O))},[D,x]);y.useEffect(()=>{const O=B=>{_.current&&!_.current.contains(B.target)&&S(!1)};return k&&document.addEventListener("mousedown",O),()=>document.removeEventListener("mousedown",O)},[k]),y.useEffect(()=>{t&&!P&&z.testDatabaseConnection(s.id,t)},[s.id,t,P]),y.useEffect(()=>{t&&(P!=null&&P.connected)&&D.length===0&&z.listDatabases(s.id,t)},[s.id,t,P==null?void 0:P.connected,D.length]),y.useEffect(()=>{t&&n&&M.length===0&&z.listTables(s.id,t,n)},[s.id,t,n,M.length]),y.useEffect(()=>{C(null)},[t,n]);const R=y.useCallback(O=>{b(B=>{const q=new Set(B);if(q.has(O))q.delete(O);else if(q.add(O),t&&n){const H=`${t}:${n}:${O}`;p.tableSchemas.has(H)||z.getTableSchema(s.id,t,n,O)}return q})},[s.id,t,n,p.tableSchemas]),I=O=>{if(!t||!n)return null;const B=`${t}:${n}:${O}`;return p.tableSchemas.get(B)};return a?r.jsx("div",{className:"database-sidebar database-sidebar--collapsed",children:r.jsx("button",{className:"database-sidebar__toggle",onClick:i,title:f("terminal:database.expandSidebar"),children:"»"})}):r.jsxs("div",{className:"database-sidebar",children:[r.jsxs("div",{className:"database-sidebar__header",children:[r.jsx("span",{children:f("terminal:database.explorer")}),r.jsx("button",{className:"database-sidebar__toggle",onClick:i,title:f("terminal:database.collapseSidebar"),children:"«"})]}),r.jsxs("div",{className:"database-sidebar__section",children:[r.jsx("div",{className:"database-sidebar__section-title",children:f("terminal:database.connection")}),r.jsx("select",{className:"database-sidebar__select",value:t||"",onChange:O=>o(O.target.value),children:e.length===0?r.jsx("option",{value:"",children:f("terminal:database.noConnections")}):e.map(O=>r.jsxs("option",{value:O.id,children:[O.engine==="mysql"?"🐬":"🐘"," ",O.name]},O.id))}),P&&r.jsx("div",{className:`database-sidebar__status ${P.connected?"database-sidebar__status--connected":"database-sidebar__status--error"}`,children:P.connected?r.jsxs(r.Fragment,{children:[r.jsx("span",{className:"database-sidebar__status-icon",children:"✓"}),f("terminal:database.connected"),P.serverVersion&&r.jsxs("span",{className:"database-sidebar__version",children:["(",P.serverVersion,")"]})]}):r.jsxs(r.Fragment,{children:[r.jsx("span",{className:"database-sidebar__status-icon",children:"✗"}),P.error||f("terminal:database.disconnected")]})})]}),D.length>0&&r.jsxs("div",{className:"database-sidebar__section",children:[r.jsx("div",{className:"database-sidebar__section-title",children:f("terminal:database.databaseTitle")}),r.jsxs("div",{className:"database-sidebar__searchable-select",ref:_,children:[r.jsx("input",{ref:N,className:"database-sidebar__search-input",type:"text",value:k?x:n||"",placeholder:f("terminal:database.selectDatabase"),onChange:O=>{w(O.target.value),k||S(!0)},onFocus:()=>{S(!0),w("")},onKeyDown:O=>{var B,q;O.key==="Escape"?(S(!1),w(""),(B=N.current)==null||B.blur()):O.key==="Enter"&&E.length===1&&(l(E[0]),S(!1),w(""),(q=N.current)==null||q.blur())}}),k&&r.jsx("div",{className:"database-sidebar__dropdown",children:E.length===0?r.jsx("div",{className:"database-sidebar__dropdown-empty",children:"No matches"}):E.map(O=>r.jsx("div",{className:`database-sidebar__dropdown-item ${O===n?"database-sidebar__dropdown-item--active":""}`,onMouseDown:B=>{B.preventDefault(),l(O),S(!1),w("")},children:O},O))})]})]}),M.length>0&&r.jsxs("div",{className:"database-sidebar__section database-sidebar__section--tables",children:[r.jsx("div",{className:"database-sidebar__section-title",children:f("terminal:database.tablesCount",{count:M.length})}),r.jsx("div",{className:"database-sidebar__tables",children:M.map(O=>{const B=m.has(O.name),q=B?I(O.name):null;return r.jsxs("div",{className:"database-sidebar__table",children:[r.jsxs("div",{className:"database-sidebar__table-header",children:[r.jsx("button",{className:"database-sidebar__table-expand",onClick:()=>R(O.name),title:B?"Collapse table schema":"Expand table schema",children:B?"▼":"▶"}),r.jsx("span",{className:"database-sidebar__table-icon",children:O.type==="view"?"👁":"📋"}),r.jsx("span",{className:`database-sidebar__table-name ${j===O.name?"database-sidebar__table-name--selected":""}`,onClick:()=>C(O.name),onDoubleClick:()=>{C(O.name),d(O.name)},children:O.name}),r.jsx("button",{className:"database-sidebar__table-insert",onClick:H=>{H.stopPropagation(),c(O.name)},title:f("terminal:database.insertTableName"),children:"+"})]}),B&&q&&r.jsx("div",{className:"database-sidebar__table-columns",children:q.columns.map(H=>r.jsxs("div",{className:"database-sidebar__column",onClick:()=>c(H.name),title:`${H.type}${H.nullable?" NULL":" NOT NULL"}${H.primaryKey?" PK":""}`,children:[r.jsx("span",{className:"database-sidebar__column-icon",children:H.primaryKey?"🔑":""}),r.jsx("span",{className:"database-sidebar__column-name",children:H.name}),r.jsx("span",{className:"database-sidebar__column-type",children:H.type})]},H.name))})]},O.name)})})]})]})};function _v(s){const e=[];let t=!1,n=!1,a=!1,i=!1,o=0;for(let c=0;c<s.length;c++){const d=s[c],f=s[c+1];if(a){d===`
|
|
243
243
|
`&&(a=!1);continue}if(i){d==="*"&&f==="/"&&(i=!1,c++);continue}if(t){if(d==="'"&&f==="'"){c++;continue}d==="'"&&(t=!1);continue}if(n){if(d==='"'&&f==='"'){c++;continue}d==='"'&&(n=!1);continue}if(d==="-"&&f==="-"){a=!0,c++;continue}if(d==="/"&&f==="*"){i=!0,c++;continue}if(d==="'"){t=!0;continue}if(d==='"'){n=!0;continue}if(d===";"){const p=s.slice(o,c).trim();p&&e.push({sql:p,start:o,end:c}),o=c+1}}const l=s.slice(o).trim();return l&&e.push({sql:l,start:o,end:s.length}),e}function dG(s,e){const t=_v(s);if(t.length===0)return null;for(const n of t)if(e>=n.start&&e<=n.end)return n.sql;return t[t.length-1].sql}const hG=({query:s,onChange:e,onExecute:t,isExecuting:n,disabled:a,autoFocus:i=!0})=>{const{t:o}=Ge(["terminal"]),l=y.useRef(null),c=y.useRef(null),d=y.useRef(!1),f="query-editor-height",p=80,m=800,[b,x]=y.useState(()=>{try{const L=localStorage.getItem(f);if(L){const M=Number(L);if(M>=p&&M<=m)return M}}catch{}return 150}),w=y.useCallback(L=>{try{localStorage.setItem(f,String(L))}catch{}},[]),k=y.useCallback(L=>{L.preventDefault(),d.current=!0;const M=L.clientY,P=b,E=I=>{const O=I.clientY-M,B=Math.max(p,Math.min(m,P+O));x(B)},R=()=>{var O;d.current=!1,document.removeEventListener("mousemove",E),document.removeEventListener("mouseup",R),document.body.style.cursor="",document.body.style.userSelect="";const I=(O=l.current)==null?void 0:O.parentElement;I&&w(I.getBoundingClientRect().height)};document.addEventListener("mousemove",E),document.addEventListener("mouseup",R),document.body.style.cursor="row-resize",document.body.style.userSelect="none"},[b,w]);y.useEffect(()=>{if(i&&!a&&l.current){const L=setTimeout(()=>{var M;(M=l.current)==null||M.focus()},100);return()=>clearTimeout(L)}},[i,a]);const S=y.useCallback(L=>{const M=L.currentTarget;c.current&&(c.current.scrollLeft=M.scrollLeft,c.current.scrollTop=M.scrollTop)},[]),j=y.useMemo(()=>_v(s).length>1,[s]),C=y.useCallback(L=>{if((L.ctrlKey||L.metaKey)&&L.shiftKey&&L.key==="Enter"){L.preventDefault(),!a&&!n&&t("all");return}if((L.ctrlKey||L.metaKey)&&L.key==="Enter"&&(L.preventDefault(),!a&&!n&&t("cursor")),L.key==="Tab"){L.preventDefault();const M=L.currentTarget,P=M.selectionStart,E=M.selectionEnd,R=s.substring(0,P)+" "+s.substring(E);e(R),setTimeout(()=>{M.selectionStart=M.selectionEnd=P+2},0)}},[s,e,t,a,n]),N=y.useMemo(()=>{if(!s)return"";try{return oi.highlight(s,oi.languages.sql,"sql")}catch{return s}},[s]),_=y.useMemo(()=>s.split(`
|
|
244
244
|
`).map((M,P)=>P+1),[s]),D=y.useCallback(()=>{var L;return((L=l.current)==null?void 0:L.selectionStart)??0},[]);return r.jsxs("div",{className:"query-editor",children:[r.jsxs("div",{className:"query-editor__toolbar",children:[r.jsxs("div",{className:"query-editor__buttons",children:[r.jsx("button",{className:"query-editor__execute",onClick:()=>t("cursor"),disabled:a||n||!s.trim(),title:o("terminal:database.executeShortcut"),children:n?r.jsxs(r.Fragment,{children:[r.jsx("span",{className:"query-editor__spinner"}),o("common:status.running")]}):r.jsxs(r.Fragment,{children:[r.jsx("span",{className:"query-editor__play-icon",children:"▶"}),o(j?"terminal:database.runAtCursor":"terminal:database.runQuery")]})}),j&&r.jsxs("button",{className:"query-editor__execute-cursor",onClick:()=>t("all"),disabled:a||n||!s.trim(),title:o("terminal:database.executeCursorShortcut"),children:[r.jsx("span",{className:"query-editor__cursor-icon",children:"▶▶"}),o("terminal:database.runAll")]})]}),r.jsx("div",{className:"query-editor__hint",children:o(j?"terminal:database.pressCtrlEnterMulti":"terminal:database.pressCtrlEnter")})]}),r.jsxs("div",{className:"query-editor__input-wrapper",children:[r.jsx("div",{className:"query-editor__line-numbers",children:_.map(L=>r.jsx("span",{children:L},L))}),r.jsxs("div",{className:"query-editor__editor",style:{height:b},children:[r.jsx("pre",{ref:c,className:"query-editor__highlight","aria-hidden":"true",dangerouslySetInnerHTML:{__html:N+`
|
|
245
245
|
`}}),r.jsx("textarea",{ref:l,className:"query-editor__textarea",value:s,onChange:L=>e(L.target.value),onKeyDown:C,onScroll:S,placeholder:o(a?"terminal:database.selectDbPlaceholder":"terminal:database.enterQueryPlaceholder"),disabled:a,spellCheck:!1,autoComplete:"off",autoCorrect:"off",autoCapitalize:"off","data-cursor-pos":D()})]})]}),r.jsx("div",{className:"query-editor__resize-handle",onMouseDown:k})]})};function GE(s){var e,t,n="";if(typeof s=="string"||typeof s=="number")n+=s;else if(typeof s=="object")if(Array.isArray(s)){var a=s.length;for(e=0;e<a;e++)s[e]&&(t=GE(s[e]))&&(n&&(n+=" "),n+=t)}else for(t in s)s[t]&&(n&&(n+=" "),n+=t);return n}function Es(){for(var s,e,t=0,n="",a=arguments.length;t<a;t++)(s=arguments[t])&&(e=GE(s))&&(n&&(n+=" "),n+=e);return n}const WE=6048e5,pG=864e5,Hf=6e4,Uf=36e5,fG=1e3,xN=Symbol.for("constructDateFrom");function Mn(s,e){return typeof s=="function"?s(e):s&&typeof s=="object"&&xN in s?s[xN](e):s instanceof Date?new s.constructor(e):new Date(e)}function St(s,e){return Mn(e||s,s)}function xi(s,e,t){const n=St(s,t==null?void 0:t.in);return isNaN(e)?Mn((t==null?void 0:t.in)||s,NaN):(e&&n.setDate(n.getDate()+e),n)}function wi(s,e,t){const n=St(s,t==null?void 0:t.in);if(isNaN(e))return Mn(s,NaN);if(!e)return n;const a=n.getDate(),i=Mn(s,n.getTime());i.setMonth(n.getMonth()+e+1,0);const o=i.getDate();return a>=o?i:(n.setFullYear(i.getFullYear(),i.getMonth(),a),n)}function qE(s,e,t){return Mn(s,+St(s)+e)}function mG(s,e,t){return qE(s,e*Uf)}let gG={};function ml(){return gG}function Ar(s,e){var l,c,d,f;const t=ml(),n=(e==null?void 0:e.weekStartsOn)??((c=(l=e==null?void 0:e.locale)==null?void 0:l.options)==null?void 0:c.weekStartsOn)??t.weekStartsOn??((f=(d=t.locale)==null?void 0:d.options)==null?void 0:f.weekStartsOn)??0,a=St(s,e==null?void 0:e.in),i=a.getDay(),o=(i<n?7:0)+i-n;return a.setDate(a.getDate()-o),a.setHours(0,0,0,0),a}function Sc(s,e){return Ar(s,{...e,weekStartsOn:1})}function YE(s,e){const t=St(s,e==null?void 0:e.in),n=t.getFullYear(),a=Mn(t,0);a.setFullYear(n+1,0,4),a.setHours(0,0,0,0);const i=Sc(a),o=Mn(t,0);o.setFullYear(n,0,4),o.setHours(0,0,0,0);const l=Sc(o);return t.getTime()>=i.getTime()?n+1:t.getTime()>=l.getTime()?n:n-1}function af(s){const e=St(s),t=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()));return t.setUTCFullYear(e.getFullYear()),+s-+t}function Pr(s,...e){const t=Mn.bind(null,e.find(n=>typeof n=="object"));return e.map(t)}function hl(s,e){const t=St(s,e==null?void 0:e.in);return t.setHours(0,0,0,0),t}function jc(s,e,t){const[n,a]=Pr(t==null?void 0:t.in,s,e),i=hl(n),o=hl(a),l=+i-af(i),c=+o-af(o);return Math.round((l-c)/pG)}function bG(s,e){const t=YE(s,e),n=Mn(s,0);return n.setFullYear(t,0,4),n.setHours(0,0,0,0),Sc(n)}function vd(s,e,t){const n=St(s,t==null?void 0:t.in);return n.setTime(n.getTime()+e*Hf),n}function Dv(s,e,t){return wi(s,e*3,t)}function yG(s,e,t){return qE(s,e*1e3)}function rf(s,e,t){return xi(s,e*7,t)}function vi(s,e,t){return wi(s,e*12,t)}function vN(s,e){let t,n=e==null?void 0:e.in;return s.forEach(a=>{!n&&typeof a=="object"&&(n=Mn.bind(null,a));const i=St(a,n);(!t||t<i||isNaN(+i))&&(t=i)}),Mn(n,t||NaN)}function wN(s,e){let t,n=e==null?void 0:e.in;return s.forEach(a=>{!n&&typeof a=="object"&&(n=Mn.bind(null,a));const i=St(a,n);(!t||t>i||isNaN(+i))&&(t=i)}),Mn(n,t||NaN)}function xG(s,e,t){const[n,a]=Pr(t==null?void 0:t.in,s,e);return+hl(n)==+hl(a)}function Hi(s){return s instanceof Date||typeof s=="object"&&Object.prototype.toString.call(s)==="[object Date]"}function Cc(s){return!(!Hi(s)&&typeof s!="number"||isNaN(+St(s)))}function of(s,e,t){const[n,a]=Pr(t==null?void 0:t.in,s,e),i=n.getFullYear()-a.getFullYear(),o=n.getMonth()-a.getMonth();return i*12+o}function uo(s,e){const t=St(s,e==null?void 0:e.in);return Math.trunc(t.getMonth()/3)+1}function lf(s,e,t){const[n,a]=Pr(t==null?void 0:t.in,s,e),i=n.getFullYear()-a.getFullYear(),o=uo(n)-uo(a);return i*4+o}function cf(s,e,t){const[n,a]=Pr(t==null?void 0:t.in,s,e);return n.getFullYear()-a.getFullYear()}function vG(s,e,t){const[n,a]=Pr(t==null?void 0:t.in,s,e),i=kN(n,a),o=Math.abs(jc(n,a));n.setDate(n.getDate()-i*o);const l=+(kN(n,a)===-i),c=i*(o-l);return c===0?0:c}function kN(s,e){const t=s.getFullYear()-e.getFullYear()||s.getMonth()-e.getMonth()||s.getDate()-e.getDate()||s.getHours()-e.getHours()||s.getMinutes()-e.getMinutes()||s.getSeconds()-e.getSeconds()||s.getMilliseconds()-e.getMilliseconds();return t<0?-1:t>0?1:t}function VE(s,e){const t=St(s,e==null?void 0:e.in);return t.setHours(23,59,59,999),t}function KE(s,e){const t=St(s,e==null?void 0:e.in),n=t.getMonth();return t.setFullYear(t.getFullYear(),n+1,0),t.setHours(23,59,59,999),t}function sx(s,e){const t=St(s,e==null?void 0:e.in),n=t.getMonth(),a=n-n%3;return t.setMonth(a,1),t.setHours(0,0,0,0),t}function XE(s,e){const t=St(s,e==null?void 0:e.in);return t.setDate(1),t.setHours(0,0,0,0),t}function ZE(s,e){const t=St(s,e==null?void 0:e.in),n=t.getFullYear();return t.setFullYear(n+1,0,0),t.setHours(23,59,59,999),t}function Gf(s,e){const t=St(s,e==null?void 0:e.in);return t.setFullYear(t.getFullYear(),0,1),t.setHours(0,0,0,0),t}function wG(s,e){var l,c;const t=ml(),n=t.weekStartsOn??((c=(l=t.locale)==null?void 0:l.options)==null?void 0:c.weekStartsOn)??0,a=St(s,e==null?void 0:e.in),i=a.getDay(),o=(i<n?-7:0)+6-(i-n);return a.setDate(a.getDate()+o),a.setHours(23,59,59,999),a}const kG={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},SG=(s,e,t)=>{let n;const a=kG[s];return typeof a=="string"?n=a:e===1?n=a.one:n=a.other.replace("{{count}}",e.toString()),t!=null&&t.addSuffix?t.comparison&&t.comparison>0?"in "+n:n+" ago":n};function Vb(s){return(e={})=>{const t=e.width?String(e.width):s.defaultWidth;return s.formats[t]||s.formats[s.defaultWidth]}}const jG={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},CG={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},NG={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},AG={date:Vb({formats:jG,defaultWidth:"full"}),time:Vb({formats:CG,defaultWidth:"full"}),dateTime:Vb({formats:NG,defaultWidth:"full"})},MG={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},TG=(s,e,t,n)=>MG[s];function Bu(s){return(e,t)=>{const n=t!=null&&t.context?String(t.context):"standalone";let a;if(n==="formatting"&&s.formattingValues){const o=s.defaultFormattingWidth||s.defaultWidth,l=t!=null&&t.width?String(t.width):o;a=s.formattingValues[l]||s.formattingValues[o]}else{const o=s.defaultWidth,l=t!=null&&t.width?String(t.width):s.defaultWidth;a=s.values[l]||s.values[o]}const i=s.argumentCallback?s.argumentCallback(e):e;return a[i]}}const EG={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},_G={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},DG={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},PG={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},RG={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},LG={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},OG=(s,e)=>{const t=Number(s),n=t%100;if(n>20||n<10)switch(n%10){case 1:return t+"st";case 2:return t+"nd";case 3:return t+"rd"}return t+"th"},IG={ordinalNumber:OG,era:Bu({values:EG,defaultWidth:"wide"}),quarter:Bu({values:_G,defaultWidth:"wide",argumentCallback:s=>s-1}),month:Bu({values:DG,defaultWidth:"wide"}),day:Bu({values:PG,defaultWidth:"wide"}),dayPeriod:Bu({values:RG,defaultWidth:"wide",formattingValues:LG,defaultFormattingWidth:"wide"})};function zu(s){return(e,t={})=>{const n=t.width,a=n&&s.matchPatterns[n]||s.matchPatterns[s.defaultMatchWidth],i=e.match(a);if(!i)return null;const o=i[0],l=n&&s.parsePatterns[n]||s.parsePatterns[s.defaultParseWidth],c=Array.isArray(l)?zG(l,p=>p.test(o)):BG(l,p=>p.test(o));let d;d=s.valueCallback?s.valueCallback(c):c,d=t.valueCallback?t.valueCallback(d):d;const f=e.slice(o.length);return{value:d,rest:f}}}function BG(s,e){for(const t in s)if(Object.prototype.hasOwnProperty.call(s,t)&&e(s[t]))return t}function zG(s,e){for(let t=0;t<s.length;t++)if(e(s[t]))return t}function FG(s){return(e,t={})=>{const n=e.match(s.matchPattern);if(!n)return null;const a=n[0],i=e.match(s.parsePattern);if(!i)return null;let o=s.valueCallback?s.valueCallback(i[0]):i[0];o=t.valueCallback?t.valueCallback(o):o;const l=e.slice(a.length);return{value:o,rest:l}}}const $G=/^(\d+)(th|st|nd|rd)?/i,HG=/\d+/i,UG={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},GG={any:[/^b/i,/^(a|c)/i]},WG={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},qG={any:[/1/i,/2/i,/3/i,/4/i]},YG={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},VG={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},KG={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},XG={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},ZG={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},QG={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},JG={ordinalNumber:FG({matchPattern:$G,parsePattern:HG,valueCallback:s=>parseInt(s,10)}),era:zu({matchPatterns:UG,defaultMatchWidth:"wide",parsePatterns:GG,defaultParseWidth:"any"}),quarter:zu({matchPatterns:WG,defaultMatchWidth:"wide",parsePatterns:qG,defaultParseWidth:"any",valueCallback:s=>s+1}),month:zu({matchPatterns:YG,defaultMatchWidth:"wide",parsePatterns:VG,defaultParseWidth:"any"}),day:zu({matchPatterns:KG,defaultMatchWidth:"wide",parsePatterns:XG,defaultParseWidth:"any"}),dayPeriod:zu({matchPatterns:ZG,defaultMatchWidth:"any",parsePatterns:QG,defaultParseWidth:"any"})},QE={code:"en-US",formatDistance:SG,formatLong:AG,formatRelative:TG,localize:IG,match:JG,options:{weekStartsOn:0,firstWeekContainsDate:1}};function eW(s,e){const t=St(s,e==null?void 0:e.in);return jc(t,Gf(t))+1}function Pv(s,e){const t=St(s,e==null?void 0:e.in),n=+Sc(t)-+bG(t);return Math.round(n/WE)+1}function Rv(s,e){var f,p,m,b;const t=St(s,e==null?void 0:e.in),n=t.getFullYear(),a=ml(),i=(e==null?void 0:e.firstWeekContainsDate)??((p=(f=e==null?void 0:e.locale)==null?void 0:f.options)==null?void 0:p.firstWeekContainsDate)??a.firstWeekContainsDate??((b=(m=a.locale)==null?void 0:m.options)==null?void 0:b.firstWeekContainsDate)??1,o=Mn((e==null?void 0:e.in)||s,0);o.setFullYear(n+1,0,i),o.setHours(0,0,0,0);const l=Ar(o,e),c=Mn((e==null?void 0:e.in)||s,0);c.setFullYear(n,0,i),c.setHours(0,0,0,0);const d=Ar(c,e);return+t>=+l?n+1:+t>=+d?n:n-1}function tW(s,e){var l,c,d,f;const t=ml(),n=(e==null?void 0:e.firstWeekContainsDate)??((c=(l=e==null?void 0:e.locale)==null?void 0:l.options)==null?void 0:c.firstWeekContainsDate)??t.firstWeekContainsDate??((f=(d=t.locale)==null?void 0:d.options)==null?void 0:f.firstWeekContainsDate)??1,a=Rv(s,e),i=Mn((e==null?void 0:e.in)||s,0);return i.setFullYear(a,0,n),i.setHours(0,0,0,0),Ar(i,e)}function JE(s,e){const t=St(s,e==null?void 0:e.in),n=+Ar(t,e)-+tW(t,e);return Math.round(n/WE)+1}function An(s,e){const t=s<0?"-":"",n=Math.abs(s).toString().padStart(e,"0");return t+n}const io={y(s,e){const t=s.getFullYear(),n=t>0?t:1-t;return An(e==="yy"?n%100:n,e.length)},M(s,e){const t=s.getMonth();return e==="M"?String(t+1):An(t+1,2)},d(s,e){return An(s.getDate(),e.length)},a(s,e){const t=s.getHours()/12>=1?"pm":"am";switch(e){case"a":case"aa":return t.toUpperCase();case"aaa":return t;case"aaaaa":return t[0];case"aaaa":default:return t==="am"?"a.m.":"p.m."}},h(s,e){return An(s.getHours()%12||12,e.length)},H(s,e){return An(s.getHours(),e.length)},m(s,e){return An(s.getMinutes(),e.length)},s(s,e){return An(s.getSeconds(),e.length)},S(s,e){const t=e.length,n=s.getMilliseconds(),a=Math.trunc(n*Math.pow(10,t-3));return An(a,e.length)}},Jl={midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},SN={G:function(s,e,t){const n=s.getFullYear()>0?1:0;switch(e){case"G":case"GG":case"GGG":return t.era(n,{width:"abbreviated"});case"GGGGG":return t.era(n,{width:"narrow"});case"GGGG":default:return t.era(n,{width:"wide"})}},y:function(s,e,t){if(e==="yo"){const n=s.getFullYear(),a=n>0?n:1-n;return t.ordinalNumber(a,{unit:"year"})}return io.y(s,e)},Y:function(s,e,t,n){const a=Rv(s,n),i=a>0?a:1-a;if(e==="YY"){const o=i%100;return An(o,2)}return e==="Yo"?t.ordinalNumber(i,{unit:"year"}):An(i,e.length)},R:function(s,e){const t=YE(s);return An(t,e.length)},u:function(s,e){const t=s.getFullYear();return An(t,e.length)},Q:function(s,e,t){const n=Math.ceil((s.getMonth()+1)/3);switch(e){case"Q":return String(n);case"QQ":return An(n,2);case"Qo":return t.ordinalNumber(n,{unit:"quarter"});case"QQQ":return t.quarter(n,{width:"abbreviated",context:"formatting"});case"QQQQQ":return t.quarter(n,{width:"narrow",context:"formatting"});case"QQQQ":default:return t.quarter(n,{width:"wide",context:"formatting"})}},q:function(s,e,t){const n=Math.ceil((s.getMonth()+1)/3);switch(e){case"q":return String(n);case"qq":return An(n,2);case"qo":return t.ordinalNumber(n,{unit:"quarter"});case"qqq":return t.quarter(n,{width:"abbreviated",context:"standalone"});case"qqqqq":return t.quarter(n,{width:"narrow",context:"standalone"});case"qqqq":default:return t.quarter(n,{width:"wide",context:"standalone"})}},M:function(s,e,t){const n=s.getMonth();switch(e){case"M":case"MM":return io.M(s,e);case"Mo":return t.ordinalNumber(n+1,{unit:"month"});case"MMM":return t.month(n,{width:"abbreviated",context:"formatting"});case"MMMMM":return t.month(n,{width:"narrow",context:"formatting"});case"MMMM":default:return t.month(n,{width:"wide",context:"formatting"})}},L:function(s,e,t){const n=s.getMonth();switch(e){case"L":return String(n+1);case"LL":return An(n+1,2);case"Lo":return t.ordinalNumber(n+1,{unit:"month"});case"LLL":return t.month(n,{width:"abbreviated",context:"standalone"});case"LLLLL":return t.month(n,{width:"narrow",context:"standalone"});case"LLLL":default:return t.month(n,{width:"wide",context:"standalone"})}},w:function(s,e,t,n){const a=JE(s,n);return e==="wo"?t.ordinalNumber(a,{unit:"week"}):An(a,e.length)},I:function(s,e,t){const n=Pv(s);return e==="Io"?t.ordinalNumber(n,{unit:"week"}):An(n,e.length)},d:function(s,e,t){return e==="do"?t.ordinalNumber(s.getDate(),{unit:"date"}):io.d(s,e)},D:function(s,e,t){const n=eW(s);return e==="Do"?t.ordinalNumber(n,{unit:"dayOfYear"}):An(n,e.length)},E:function(s,e,t){const n=s.getDay();switch(e){case"E":case"EE":case"EEE":return t.day(n,{width:"abbreviated",context:"formatting"});case"EEEEE":return t.day(n,{width:"narrow",context:"formatting"});case"EEEEEE":return t.day(n,{width:"short",context:"formatting"});case"EEEE":default:return t.day(n,{width:"wide",context:"formatting"})}},e:function(s,e,t,n){const a=s.getDay(),i=(a-n.weekStartsOn+8)%7||7;switch(e){case"e":return String(i);case"ee":return An(i,2);case"eo":return t.ordinalNumber(i,{unit:"day"});case"eee":return t.day(a,{width:"abbreviated",context:"formatting"});case"eeeee":return t.day(a,{width:"narrow",context:"formatting"});case"eeeeee":return t.day(a,{width:"short",context:"formatting"});case"eeee":default:return t.day(a,{width:"wide",context:"formatting"})}},c:function(s,e,t,n){const a=s.getDay(),i=(a-n.weekStartsOn+8)%7||7;switch(e){case"c":return String(i);case"cc":return An(i,e.length);case"co":return t.ordinalNumber(i,{unit:"day"});case"ccc":return t.day(a,{width:"abbreviated",context:"standalone"});case"ccccc":return t.day(a,{width:"narrow",context:"standalone"});case"cccccc":return t.day(a,{width:"short",context:"standalone"});case"cccc":default:return t.day(a,{width:"wide",context:"standalone"})}},i:function(s,e,t){const n=s.getDay(),a=n===0?7:n;switch(e){case"i":return String(a);case"ii":return An(a,e.length);case"io":return t.ordinalNumber(a,{unit:"day"});case"iii":return t.day(n,{width:"abbreviated",context:"formatting"});case"iiiii":return t.day(n,{width:"narrow",context:"formatting"});case"iiiiii":return t.day(n,{width:"short",context:"formatting"});case"iiii":default:return t.day(n,{width:"wide",context:"formatting"})}},a:function(s,e,t){const a=s.getHours()/12>=1?"pm":"am";switch(e){case"a":case"aa":return t.dayPeriod(a,{width:"abbreviated",context:"formatting"});case"aaa":return t.dayPeriod(a,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return t.dayPeriod(a,{width:"narrow",context:"formatting"});case"aaaa":default:return t.dayPeriod(a,{width:"wide",context:"formatting"})}},b:function(s,e,t){const n=s.getHours();let a;switch(n===12?a=Jl.noon:n===0?a=Jl.midnight:a=n/12>=1?"pm":"am",e){case"b":case"bb":return t.dayPeriod(a,{width:"abbreviated",context:"formatting"});case"bbb":return t.dayPeriod(a,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return t.dayPeriod(a,{width:"narrow",context:"formatting"});case"bbbb":default:return t.dayPeriod(a,{width:"wide",context:"formatting"})}},B:function(s,e,t){const n=s.getHours();let a;switch(n>=17?a=Jl.evening:n>=12?a=Jl.afternoon:n>=4?a=Jl.morning:a=Jl.night,e){case"B":case"BB":case"BBB":return t.dayPeriod(a,{width:"abbreviated",context:"formatting"});case"BBBBB":return t.dayPeriod(a,{width:"narrow",context:"formatting"});case"BBBB":default:return t.dayPeriod(a,{width:"wide",context:"formatting"})}},h:function(s,e,t){if(e==="ho"){let n=s.getHours()%12;return n===0&&(n=12),t.ordinalNumber(n,{unit:"hour"})}return io.h(s,e)},H:function(s,e,t){return e==="Ho"?t.ordinalNumber(s.getHours(),{unit:"hour"}):io.H(s,e)},K:function(s,e,t){const n=s.getHours()%12;return e==="Ko"?t.ordinalNumber(n,{unit:"hour"}):An(n,e.length)},k:function(s,e,t){let n=s.getHours();return n===0&&(n=24),e==="ko"?t.ordinalNumber(n,{unit:"hour"}):An(n,e.length)},m:function(s,e,t){return e==="mo"?t.ordinalNumber(s.getMinutes(),{unit:"minute"}):io.m(s,e)},s:function(s,e,t){return e==="so"?t.ordinalNumber(s.getSeconds(),{unit:"second"}):io.s(s,e)},S:function(s,e){return io.S(s,e)},X:function(s,e,t){const n=s.getTimezoneOffset();if(n===0)return"Z";switch(e){case"X":return CN(n);case"XXXX":case"XX":return Uo(n);case"XXXXX":case"XXX":default:return Uo(n,":")}},x:function(s,e,t){const n=s.getTimezoneOffset();switch(e){case"x":return CN(n);case"xxxx":case"xx":return Uo(n);case"xxxxx":case"xxx":default:return Uo(n,":")}},O:function(s,e,t){const n=s.getTimezoneOffset();switch(e){case"O":case"OO":case"OOO":return"GMT"+jN(n,":");case"OOOO":default:return"GMT"+Uo(n,":")}},z:function(s,e,t){const n=s.getTimezoneOffset();switch(e){case"z":case"zz":case"zzz":return"GMT"+jN(n,":");case"zzzz":default:return"GMT"+Uo(n,":")}},t:function(s,e,t){const n=Math.trunc(+s/1e3);return An(n,e.length)},T:function(s,e,t){return An(+s,e.length)}};function jN(s,e=""){const t=s>0?"-":"+",n=Math.abs(s),a=Math.trunc(n/60),i=n%60;return i===0?t+String(a):t+String(a)+e+An(i,2)}function CN(s,e){return s%60===0?(s>0?"-":"+")+An(Math.abs(s)/60,2):Uo(s,e)}function Uo(s,e=""){const t=s>0?"-":"+",n=Math.abs(s),a=An(Math.trunc(n/60),2),i=An(n%60,2);return t+a+e+i}const NN=(s,e)=>{switch(s){case"P":return e.date({width:"short"});case"PP":return e.date({width:"medium"});case"PPP":return e.date({width:"long"});case"PPPP":default:return e.date({width:"full"})}},e_=(s,e)=>{switch(s){case"p":return e.time({width:"short"});case"pp":return e.time({width:"medium"});case"ppp":return e.time({width:"long"});case"pppp":default:return e.time({width:"full"})}},nW=(s,e)=>{const t=s.match(/(P+)(p+)?/)||[],n=t[1],a=t[2];if(!a)return NN(s,e);let i;switch(n){case"P":i=e.dateTime({width:"short"});break;case"PP":i=e.dateTime({width:"medium"});break;case"PPP":i=e.dateTime({width:"long"});break;case"PPPP":default:i=e.dateTime({width:"full"});break}return i.replace("{{date}}",NN(n,e)).replace("{{time}}",e_(a,e))},ax={p:e_,P:nW},sW=/^D+$/,aW=/^Y+$/,iW=["D","DD","YY","YYYY"];function rW(s){return sW.test(s)}function oW(s){return aW.test(s)}function lW(s,e,t){const n=cW(s,e,t);if(console.warn(n),iW.includes(s))throw new RangeError(n)}function cW(s,e,t){const n=s[0]==="Y"?"years":"days of the month";return`Use \`${s.toLowerCase()}\` instead of \`${s}\` (in \`${e}\`) for formatting ${n} to the input \`${t}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}const uW=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,dW=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,hW=/^'([^]*?)'?$/,pW=/''/g,fW=/[a-zA-Z]/;function AN(s,e,t){var f,p,m,b,x,w,k,S;const n=ml(),a=(t==null?void 0:t.locale)??n.locale??QE,i=(t==null?void 0:t.firstWeekContainsDate)??((p=(f=t==null?void 0:t.locale)==null?void 0:f.options)==null?void 0:p.firstWeekContainsDate)??n.firstWeekContainsDate??((b=(m=n.locale)==null?void 0:m.options)==null?void 0:b.firstWeekContainsDate)??1,o=(t==null?void 0:t.weekStartsOn)??((w=(x=t==null?void 0:t.locale)==null?void 0:x.options)==null?void 0:w.weekStartsOn)??n.weekStartsOn??((S=(k=n.locale)==null?void 0:k.options)==null?void 0:S.weekStartsOn)??0,l=St(s,t==null?void 0:t.in);if(!Cc(l))throw new RangeError("Invalid time value");let c=e.match(dW).map(j=>{const C=j[0];if(C==="p"||C==="P"){const N=ax[C];return N(j,a.formatLong)}return j}).join("").match(uW).map(j=>{if(j==="''")return{isToken:!1,value:"'"};const C=j[0];if(C==="'")return{isToken:!1,value:mW(j)};if(SN[C])return{isToken:!0,value:j};if(C.match(fW))throw new RangeError("Format string contains an unescaped latin alphabet character `"+C+"`");return{isToken:!1,value:j}});a.localize.preprocessor&&(c=a.localize.preprocessor(l,c));const d={firstWeekContainsDate:i,weekStartsOn:o,locale:a};return c.map(j=>{if(!j.isToken)return j.value;const C=j.value;(!(t!=null&&t.useAdditionalWeekYearTokens)&&oW(C)||!(t!=null&&t.useAdditionalDayOfYearTokens)&&rW(C))&&lW(C,e,String(s));const N=SN[C[0]];return N(l,C,a.localize,d)}).join("")}function mW(s){const e=s.match(hW);return e?e[1].replace(pW,"'"):s}function MN(s,e){return St(s,e==null?void 0:e.in).getDate()}function gW(s,e){return St(s,e==null?void 0:e.in).getDay()}function bW(s,e){const t=St(s,e==null?void 0:e.in),n=t.getFullYear(),a=t.getMonth(),i=Mn(t,0);return i.setFullYear(n,a+1,0),i.setHours(0,0,0,0),i.getDate()}function yW(){return Object.assign({},ml())}function Vs(s,e){return St(s,e==null?void 0:e.in).getHours()}function xW(s,e){const t=St(s,e==null?void 0:e.in).getDay();return t===0?7:t}function Ks(s,e){return St(s,e==null?void 0:e.in).getMinutes()}function ya(s,e){return St(s,e==null?void 0:e.in).getMonth()}function ho(s){return St(s).getSeconds()}function ix(s){return+St(s)}function tn(s,e){return St(s,e==null?void 0:e.in).getFullYear()}function jr(s,e){return+St(s)>+St(e)}function Bi(s,e){return+St(s)<+St(e)}function vW(s,e){return+St(s)==+St(e)}function wW(s,e){const t=kW(e)?new e(0):Mn(e,0);return t.setFullYear(s.getFullYear(),s.getMonth(),s.getDate()),t.setHours(s.getHours(),s.getMinutes(),s.getSeconds(),s.getMilliseconds()),t}function kW(s){var e;return typeof s=="function"&&((e=s.prototype)==null?void 0:e.constructor)===s}const SW=10;class t_{constructor(){U(this,"subPriority",0)}validate(e,t){return!0}}class jW extends t_{constructor(e,t,n,a,i){super(),this.value=e,this.validateValue=t,this.setValue=n,this.priority=a,i&&(this.subPriority=i)}validate(e,t){return this.validateValue(e,this.value,t)}set(e,t,n){return this.setValue(e,t,this.value,n)}}class CW extends t_{constructor(t,n){super();U(this,"priority",SW);U(this,"subPriority",-1);this.context=t||(a=>Mn(n,a))}set(t,n){return n.timestampIsSet?t:Mn(t,wW(t,this.context))}}class wn{run(e,t,n,a){const i=this.parse(e,t,n,a);return i?{setter:new jW(i.value,this.validate,this.set,this.priority,this.subPriority),rest:i.rest}:null}validate(e,t,n){return!0}}class NW extends wn{constructor(){super(...arguments);U(this,"priority",140);U(this,"incompatibleTokens",["R","u","t","T"])}parse(t,n,a){switch(n){case"G":case"GG":case"GGG":return a.era(t,{width:"abbreviated"})||a.era(t,{width:"narrow"});case"GGGGG":return a.era(t,{width:"narrow"});case"GGGG":default:return a.era(t,{width:"wide"})||a.era(t,{width:"abbreviated"})||a.era(t,{width:"narrow"})}}set(t,n,a){return n.era=a,t.setFullYear(a,0,1),t.setHours(0,0,0,0),t}}const ms={month:/^(1[0-2]|0?\d)/,date:/^(3[0-1]|[0-2]?\d)/,dayOfYear:/^(36[0-6]|3[0-5]\d|[0-2]?\d?\d)/,week:/^(5[0-3]|[0-4]?\d)/,hour23h:/^(2[0-3]|[0-1]?\d)/,hour24h:/^(2[0-4]|[0-1]?\d)/,hour11h:/^(1[0-1]|0?\d)/,hour12h:/^(1[0-2]|0?\d)/,minute:/^[0-5]?\d/,second:/^[0-5]?\d/,singleDigit:/^\d/,twoDigits:/^\d{1,2}/,threeDigits:/^\d{1,3}/,fourDigits:/^\d{1,4}/,anyDigitsSigned:/^-?\d+/,singleDigitSigned:/^-?\d/,twoDigitsSigned:/^-?\d{1,2}/,threeDigitsSigned:/^-?\d{1,3}/,fourDigitsSigned:/^-?\d{1,4}/},Ri={basicOptionalMinutes:/^([+-])(\d{2})(\d{2})?|Z/,basic:/^([+-])(\d{2})(\d{2})|Z/,basicOptionalSeconds:/^([+-])(\d{2})(\d{2})((\d{2}))?|Z/,extended:/^([+-])(\d{2}):(\d{2})|Z/,extendedOptionalSeconds:/^([+-])(\d{2}):(\d{2})(:(\d{2}))?|Z/};function gs(s,e){return s&&{value:e(s.value),rest:s.rest}}function ns(s,e){const t=e.match(s);return t?{value:parseInt(t[0],10),rest:e.slice(t[0].length)}:null}function Li(s,e){const t=e.match(s);if(!t)return null;if(t[0]==="Z")return{value:0,rest:e.slice(1)};const n=t[1]==="+"?1:-1,a=t[2]?parseInt(t[2],10):0,i=t[3]?parseInt(t[3],10):0,o=t[5]?parseInt(t[5],10):0;return{value:n*(a*Uf+i*Hf+o*fG),rest:e.slice(t[0].length)}}function n_(s){return ns(ms.anyDigitsSigned,s)}function ls(s,e){switch(s){case 1:return ns(ms.singleDigit,e);case 2:return ns(ms.twoDigits,e);case 3:return ns(ms.threeDigits,e);case 4:return ns(ms.fourDigits,e);default:return ns(new RegExp("^\\d{1,"+s+"}"),e)}}function uf(s,e){switch(s){case 1:return ns(ms.singleDigitSigned,e);case 2:return ns(ms.twoDigitsSigned,e);case 3:return ns(ms.threeDigitsSigned,e);case 4:return ns(ms.fourDigitsSigned,e);default:return ns(new RegExp("^-?\\d{1,"+s+"}"),e)}}function Lv(s){switch(s){case"morning":return 4;case"evening":return 17;case"pm":case"noon":case"afternoon":return 12;case"am":case"midnight":case"night":default:return 0}}function s_(s,e){const t=e>0,n=t?e:1-e;let a;if(n<=50)a=s||100;else{const i=n+50,o=Math.trunc(i/100)*100,l=s>=i%100;a=s+o-(l?100:0)}return t?a:1-a}function a_(s){return s%400===0||s%4===0&&s%100!==0}class AW extends wn{constructor(){super(...arguments);U(this,"priority",130);U(this,"incompatibleTokens",["Y","R","u","w","I","i","e","c","t","T"])}parse(t,n,a){const i=o=>({year:o,isTwoDigitYear:n==="yy"});switch(n){case"y":return gs(ls(4,t),i);case"yo":return gs(a.ordinalNumber(t,{unit:"year"}),i);default:return gs(ls(n.length,t),i)}}validate(t,n){return n.isTwoDigitYear||n.year>0}set(t,n,a){const i=t.getFullYear();if(a.isTwoDigitYear){const l=s_(a.year,i);return t.setFullYear(l,0,1),t.setHours(0,0,0,0),t}const o=!("era"in n)||n.era===1?a.year:1-a.year;return t.setFullYear(o,0,1),t.setHours(0,0,0,0),t}}class MW extends wn{constructor(){super(...arguments);U(this,"priority",130);U(this,"incompatibleTokens",["y","R","u","Q","q","M","L","I","d","D","i","t","T"])}parse(t,n,a){const i=o=>({year:o,isTwoDigitYear:n==="YY"});switch(n){case"Y":return gs(ls(4,t),i);case"Yo":return gs(a.ordinalNumber(t,{unit:"year"}),i);default:return gs(ls(n.length,t),i)}}validate(t,n){return n.isTwoDigitYear||n.year>0}set(t,n,a,i){const o=Rv(t,i);if(a.isTwoDigitYear){const c=s_(a.year,o);return t.setFullYear(c,0,i.firstWeekContainsDate),t.setHours(0,0,0,0),Ar(t,i)}const l=!("era"in n)||n.era===1?a.year:1-a.year;return t.setFullYear(l,0,i.firstWeekContainsDate),t.setHours(0,0,0,0),Ar(t,i)}}class TW extends wn{constructor(){super(...arguments);U(this,"priority",130);U(this,"incompatibleTokens",["G","y","Y","u","Q","q","M","L","w","d","D","e","c","t","T"])}parse(t,n){return uf(n==="R"?4:n.length,t)}set(t,n,a){const i=Mn(t,0);return i.setFullYear(a,0,4),i.setHours(0,0,0,0),Sc(i)}}class EW extends wn{constructor(){super(...arguments);U(this,"priority",130);U(this,"incompatibleTokens",["G","y","Y","R","w","I","i","e","c","t","T"])}parse(t,n){return uf(n==="u"?4:n.length,t)}set(t,n,a){return t.setFullYear(a,0,1),t.setHours(0,0,0,0),t}}class _W extends wn{constructor(){super(...arguments);U(this,"priority",120);U(this,"incompatibleTokens",["Y","R","q","M","L","w","I","d","D","i","e","c","t","T"])}parse(t,n,a){switch(n){case"Q":case"QQ":return ls(n.length,t);case"Qo":return a.ordinalNumber(t,{unit:"quarter"});case"QQQ":return a.quarter(t,{width:"abbreviated",context:"formatting"})||a.quarter(t,{width:"narrow",context:"formatting"});case"QQQQQ":return a.quarter(t,{width:"narrow",context:"formatting"});case"QQQQ":default:return a.quarter(t,{width:"wide",context:"formatting"})||a.quarter(t,{width:"abbreviated",context:"formatting"})||a.quarter(t,{width:"narrow",context:"formatting"})}}validate(t,n){return n>=1&&n<=4}set(t,n,a){return t.setMonth((a-1)*3,1),t.setHours(0,0,0,0),t}}class DW extends wn{constructor(){super(...arguments);U(this,"priority",120);U(this,"incompatibleTokens",["Y","R","Q","M","L","w","I","d","D","i","e","c","t","T"])}parse(t,n,a){switch(n){case"q":case"qq":return ls(n.length,t);case"qo":return a.ordinalNumber(t,{unit:"quarter"});case"qqq":return a.quarter(t,{width:"abbreviated",context:"standalone"})||a.quarter(t,{width:"narrow",context:"standalone"});case"qqqqq":return a.quarter(t,{width:"narrow",context:"standalone"});case"qqqq":default:return a.quarter(t,{width:"wide",context:"standalone"})||a.quarter(t,{width:"abbreviated",context:"standalone"})||a.quarter(t,{width:"narrow",context:"standalone"})}}validate(t,n){return n>=1&&n<=4}set(t,n,a){return t.setMonth((a-1)*3,1),t.setHours(0,0,0,0),t}}class PW extends wn{constructor(){super(...arguments);U(this,"incompatibleTokens",["Y","R","q","Q","L","w","I","D","i","e","c","t","T"]);U(this,"priority",110)}parse(t,n,a){const i=o=>o-1;switch(n){case"M":return gs(ns(ms.month,t),i);case"MM":return gs(ls(2,t),i);case"Mo":return gs(a.ordinalNumber(t,{unit:"month"}),i);case"MMM":return a.month(t,{width:"abbreviated",context:"formatting"})||a.month(t,{width:"narrow",context:"formatting"});case"MMMMM":return a.month(t,{width:"narrow",context:"formatting"});case"MMMM":default:return a.month(t,{width:"wide",context:"formatting"})||a.month(t,{width:"abbreviated",context:"formatting"})||a.month(t,{width:"narrow",context:"formatting"})}}validate(t,n){return n>=0&&n<=11}set(t,n,a){return t.setMonth(a,1),t.setHours(0,0,0,0),t}}class RW extends wn{constructor(){super(...arguments);U(this,"priority",110);U(this,"incompatibleTokens",["Y","R","q","Q","M","w","I","D","i","e","c","t","T"])}parse(t,n,a){const i=o=>o-1;switch(n){case"L":return gs(ns(ms.month,t),i);case"LL":return gs(ls(2,t),i);case"Lo":return gs(a.ordinalNumber(t,{unit:"month"}),i);case"LLL":return a.month(t,{width:"abbreviated",context:"standalone"})||a.month(t,{width:"narrow",context:"standalone"});case"LLLLL":return a.month(t,{width:"narrow",context:"standalone"});case"LLLL":default:return a.month(t,{width:"wide",context:"standalone"})||a.month(t,{width:"abbreviated",context:"standalone"})||a.month(t,{width:"narrow",context:"standalone"})}}validate(t,n){return n>=0&&n<=11}set(t,n,a){return t.setMonth(a,1),t.setHours(0,0,0,0),t}}function LW(s,e,t){const n=St(s,t==null?void 0:t.in),a=JE(n,t)-e;return n.setDate(n.getDate()-a*7),St(n,t==null?void 0:t.in)}class OW extends wn{constructor(){super(...arguments);U(this,"priority",100);U(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","i","t","T"])}parse(t,n,a){switch(n){case"w":return ns(ms.week,t);case"wo":return a.ordinalNumber(t,{unit:"week"});default:return ls(n.length,t)}}validate(t,n){return n>=1&&n<=53}set(t,n,a,i){return Ar(LW(t,a,i),i)}}function IW(s,e,t){const n=St(s,t==null?void 0:t.in),a=Pv(n,t)-e;return n.setDate(n.getDate()-a*7),n}class BW extends wn{constructor(){super(...arguments);U(this,"priority",100);U(this,"incompatibleTokens",["y","Y","u","q","Q","M","L","w","d","D","e","c","t","T"])}parse(t,n,a){switch(n){case"I":return ns(ms.week,t);case"Io":return a.ordinalNumber(t,{unit:"week"});default:return ls(n.length,t)}}validate(t,n){return n>=1&&n<=53}set(t,n,a){return Sc(IW(t,a))}}const zW=[31,28,31,30,31,30,31,31,30,31,30,31],FW=[31,29,31,30,31,30,31,31,30,31,30,31];class $W extends wn{constructor(){super(...arguments);U(this,"priority",90);U(this,"subPriority",1);U(this,"incompatibleTokens",["Y","R","q","Q","w","I","D","i","e","c","t","T"])}parse(t,n,a){switch(n){case"d":return ns(ms.date,t);case"do":return a.ordinalNumber(t,{unit:"date"});default:return ls(n.length,t)}}validate(t,n){const a=t.getFullYear(),i=a_(a),o=t.getMonth();return i?n>=1&&n<=FW[o]:n>=1&&n<=zW[o]}set(t,n,a){return t.setDate(a),t.setHours(0,0,0,0),t}}class HW extends wn{constructor(){super(...arguments);U(this,"priority",90);U(this,"subpriority",1);U(this,"incompatibleTokens",["Y","R","q","Q","M","L","w","I","d","E","i","e","c","t","T"])}parse(t,n,a){switch(n){case"D":case"DD":return ns(ms.dayOfYear,t);case"Do":return a.ordinalNumber(t,{unit:"date"});default:return ls(n.length,t)}}validate(t,n){const a=t.getFullYear();return a_(a)?n>=1&&n<=366:n>=1&&n<=365}set(t,n,a){return t.setMonth(0,a),t.setHours(0,0,0,0),t}}function Ov(s,e,t){var p,m,b,x;const n=ml(),a=(t==null?void 0:t.weekStartsOn)??((m=(p=t==null?void 0:t.locale)==null?void 0:p.options)==null?void 0:m.weekStartsOn)??n.weekStartsOn??((x=(b=n.locale)==null?void 0:b.options)==null?void 0:x.weekStartsOn)??0,i=St(s,t==null?void 0:t.in),o=i.getDay(),c=(e%7+7)%7,d=7-a,f=e<0||e>6?e-(o+d)%7:(c+d)%7-(o+d)%7;return xi(i,f,t)}class UW extends wn{constructor(){super(...arguments);U(this,"priority",90);U(this,"incompatibleTokens",["D","i","e","c","t","T"])}parse(t,n,a){switch(n){case"E":case"EE":case"EEE":return a.day(t,{width:"abbreviated",context:"formatting"})||a.day(t,{width:"short",context:"formatting"})||a.day(t,{width:"narrow",context:"formatting"});case"EEEEE":return a.day(t,{width:"narrow",context:"formatting"});case"EEEEEE":return a.day(t,{width:"short",context:"formatting"})||a.day(t,{width:"narrow",context:"formatting"});case"EEEE":default:return a.day(t,{width:"wide",context:"formatting"})||a.day(t,{width:"abbreviated",context:"formatting"})||a.day(t,{width:"short",context:"formatting"})||a.day(t,{width:"narrow",context:"formatting"})}}validate(t,n){return n>=0&&n<=6}set(t,n,a,i){return t=Ov(t,a,i),t.setHours(0,0,0,0),t}}class GW extends wn{constructor(){super(...arguments);U(this,"priority",90);U(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","E","i","c","t","T"])}parse(t,n,a,i){const o=l=>{const c=Math.floor((l-1)/7)*7;return(l+i.weekStartsOn+6)%7+c};switch(n){case"e":case"ee":return gs(ls(n.length,t),o);case"eo":return gs(a.ordinalNumber(t,{unit:"day"}),o);case"eee":return a.day(t,{width:"abbreviated",context:"formatting"})||a.day(t,{width:"short",context:"formatting"})||a.day(t,{width:"narrow",context:"formatting"});case"eeeee":return a.day(t,{width:"narrow",context:"formatting"});case"eeeeee":return a.day(t,{width:"short",context:"formatting"})||a.day(t,{width:"narrow",context:"formatting"});case"eeee":default:return a.day(t,{width:"wide",context:"formatting"})||a.day(t,{width:"abbreviated",context:"formatting"})||a.day(t,{width:"short",context:"formatting"})||a.day(t,{width:"narrow",context:"formatting"})}}validate(t,n){return n>=0&&n<=6}set(t,n,a,i){return t=Ov(t,a,i),t.setHours(0,0,0,0),t}}class WW extends wn{constructor(){super(...arguments);U(this,"priority",90);U(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","E","i","e","t","T"])}parse(t,n,a,i){const o=l=>{const c=Math.floor((l-1)/7)*7;return(l+i.weekStartsOn+6)%7+c};switch(n){case"c":case"cc":return gs(ls(n.length,t),o);case"co":return gs(a.ordinalNumber(t,{unit:"day"}),o);case"ccc":return a.day(t,{width:"abbreviated",context:"standalone"})||a.day(t,{width:"short",context:"standalone"})||a.day(t,{width:"narrow",context:"standalone"});case"ccccc":return a.day(t,{width:"narrow",context:"standalone"});case"cccccc":return a.day(t,{width:"short",context:"standalone"})||a.day(t,{width:"narrow",context:"standalone"});case"cccc":default:return a.day(t,{width:"wide",context:"standalone"})||a.day(t,{width:"abbreviated",context:"standalone"})||a.day(t,{width:"short",context:"standalone"})||a.day(t,{width:"narrow",context:"standalone"})}}validate(t,n){return n>=0&&n<=6}set(t,n,a,i){return t=Ov(t,a,i),t.setHours(0,0,0,0),t}}function qW(s,e,t){const n=St(s,t==null?void 0:t.in),a=xW(n,t),i=e-a;return xi(n,i,t)}class YW extends wn{constructor(){super(...arguments);U(this,"priority",90);U(this,"incompatibleTokens",["y","Y","u","q","Q","M","L","w","d","D","E","e","c","t","T"])}parse(t,n,a){const i=o=>o===0?7:o;switch(n){case"i":case"ii":return ls(n.length,t);case"io":return a.ordinalNumber(t,{unit:"day"});case"iii":return gs(a.day(t,{width:"abbreviated",context:"formatting"})||a.day(t,{width:"short",context:"formatting"})||a.day(t,{width:"narrow",context:"formatting"}),i);case"iiiii":return gs(a.day(t,{width:"narrow",context:"formatting"}),i);case"iiiiii":return gs(a.day(t,{width:"short",context:"formatting"})||a.day(t,{width:"narrow",context:"formatting"}),i);case"iiii":default:return gs(a.day(t,{width:"wide",context:"formatting"})||a.day(t,{width:"abbreviated",context:"formatting"})||a.day(t,{width:"short",context:"formatting"})||a.day(t,{width:"narrow",context:"formatting"}),i)}}validate(t,n){return n>=1&&n<=7}set(t,n,a){return t=qW(t,a),t.setHours(0,0,0,0),t}}class VW extends wn{constructor(){super(...arguments);U(this,"priority",80);U(this,"incompatibleTokens",["b","B","H","k","t","T"])}parse(t,n,a){switch(n){case"a":case"aa":case"aaa":return a.dayPeriod(t,{width:"abbreviated",context:"formatting"})||a.dayPeriod(t,{width:"narrow",context:"formatting"});case"aaaaa":return a.dayPeriod(t,{width:"narrow",context:"formatting"});case"aaaa":default:return a.dayPeriod(t,{width:"wide",context:"formatting"})||a.dayPeriod(t,{width:"abbreviated",context:"formatting"})||a.dayPeriod(t,{width:"narrow",context:"formatting"})}}set(t,n,a){return t.setHours(Lv(a),0,0,0),t}}class KW extends wn{constructor(){super(...arguments);U(this,"priority",80);U(this,"incompatibleTokens",["a","B","H","k","t","T"])}parse(t,n,a){switch(n){case"b":case"bb":case"bbb":return a.dayPeriod(t,{width:"abbreviated",context:"formatting"})||a.dayPeriod(t,{width:"narrow",context:"formatting"});case"bbbbb":return a.dayPeriod(t,{width:"narrow",context:"formatting"});case"bbbb":default:return a.dayPeriod(t,{width:"wide",context:"formatting"})||a.dayPeriod(t,{width:"abbreviated",context:"formatting"})||a.dayPeriod(t,{width:"narrow",context:"formatting"})}}set(t,n,a){return t.setHours(Lv(a),0,0,0),t}}class XW extends wn{constructor(){super(...arguments);U(this,"priority",80);U(this,"incompatibleTokens",["a","b","t","T"])}parse(t,n,a){switch(n){case"B":case"BB":case"BBB":return a.dayPeriod(t,{width:"abbreviated",context:"formatting"})||a.dayPeriod(t,{width:"narrow",context:"formatting"});case"BBBBB":return a.dayPeriod(t,{width:"narrow",context:"formatting"});case"BBBB":default:return a.dayPeriod(t,{width:"wide",context:"formatting"})||a.dayPeriod(t,{width:"abbreviated",context:"formatting"})||a.dayPeriod(t,{width:"narrow",context:"formatting"})}}set(t,n,a){return t.setHours(Lv(a),0,0,0),t}}class ZW extends wn{constructor(){super(...arguments);U(this,"priority",70);U(this,"incompatibleTokens",["H","K","k","t","T"])}parse(t,n,a){switch(n){case"h":return ns(ms.hour12h,t);case"ho":return a.ordinalNumber(t,{unit:"hour"});default:return ls(n.length,t)}}validate(t,n){return n>=1&&n<=12}set(t,n,a){const i=t.getHours()>=12;return i&&a<12?t.setHours(a+12,0,0,0):!i&&a===12?t.setHours(0,0,0,0):t.setHours(a,0,0,0),t}}class QW extends wn{constructor(){super(...arguments);U(this,"priority",70);U(this,"incompatibleTokens",["a","b","h","K","k","t","T"])}parse(t,n,a){switch(n){case"H":return ns(ms.hour23h,t);case"Ho":return a.ordinalNumber(t,{unit:"hour"});default:return ls(n.length,t)}}validate(t,n){return n>=0&&n<=23}set(t,n,a){return t.setHours(a,0,0,0),t}}class JW extends wn{constructor(){super(...arguments);U(this,"priority",70);U(this,"incompatibleTokens",["h","H","k","t","T"])}parse(t,n,a){switch(n){case"K":return ns(ms.hour11h,t);case"Ko":return a.ordinalNumber(t,{unit:"hour"});default:return ls(n.length,t)}}validate(t,n){return n>=0&&n<=11}set(t,n,a){return t.getHours()>=12&&a<12?t.setHours(a+12,0,0,0):t.setHours(a,0,0,0),t}}class e7 extends wn{constructor(){super(...arguments);U(this,"priority",70);U(this,"incompatibleTokens",["a","b","h","H","K","t","T"])}parse(t,n,a){switch(n){case"k":return ns(ms.hour24h,t);case"ko":return a.ordinalNumber(t,{unit:"hour"});default:return ls(n.length,t)}}validate(t,n){return n>=1&&n<=24}set(t,n,a){const i=a<=24?a%24:a;return t.setHours(i,0,0,0),t}}class t7 extends wn{constructor(){super(...arguments);U(this,"priority",60);U(this,"incompatibleTokens",["t","T"])}parse(t,n,a){switch(n){case"m":return ns(ms.minute,t);case"mo":return a.ordinalNumber(t,{unit:"minute"});default:return ls(n.length,t)}}validate(t,n){return n>=0&&n<=59}set(t,n,a){return t.setMinutes(a,0,0),t}}class n7 extends wn{constructor(){super(...arguments);U(this,"priority",50);U(this,"incompatibleTokens",["t","T"])}parse(t,n,a){switch(n){case"s":return ns(ms.second,t);case"so":return a.ordinalNumber(t,{unit:"second"});default:return ls(n.length,t)}}validate(t,n){return n>=0&&n<=59}set(t,n,a){return t.setSeconds(a,0),t}}class s7 extends wn{constructor(){super(...arguments);U(this,"priority",30);U(this,"incompatibleTokens",["t","T"])}parse(t,n){const a=i=>Math.trunc(i*Math.pow(10,-n.length+3));return gs(ls(n.length,t),a)}set(t,n,a){return t.setMilliseconds(a),t}}class a7 extends wn{constructor(){super(...arguments);U(this,"priority",10);U(this,"incompatibleTokens",["t","T","x"])}parse(t,n){switch(n){case"X":return Li(Ri.basicOptionalMinutes,t);case"XX":return Li(Ri.basic,t);case"XXXX":return Li(Ri.basicOptionalSeconds,t);case"XXXXX":return Li(Ri.extendedOptionalSeconds,t);case"XXX":default:return Li(Ri.extended,t)}}set(t,n,a){return n.timestampIsSet?t:Mn(t,t.getTime()-af(t)-a)}}class i7 extends wn{constructor(){super(...arguments);U(this,"priority",10);U(this,"incompatibleTokens",["t","T","X"])}parse(t,n){switch(n){case"x":return Li(Ri.basicOptionalMinutes,t);case"xx":return Li(Ri.basic,t);case"xxxx":return Li(Ri.basicOptionalSeconds,t);case"xxxxx":return Li(Ri.extendedOptionalSeconds,t);case"xxx":default:return Li(Ri.extended,t)}}set(t,n,a){return n.timestampIsSet?t:Mn(t,t.getTime()-af(t)-a)}}class r7 extends wn{constructor(){super(...arguments);U(this,"priority",40);U(this,"incompatibleTokens","*")}parse(t){return n_(t)}set(t,n,a){return[Mn(t,a*1e3),{timestampIsSet:!0}]}}class o7 extends wn{constructor(){super(...arguments);U(this,"priority",20);U(this,"incompatibleTokens","*")}parse(t){return n_(t)}set(t,n,a){return[Mn(t,a),{timestampIsSet:!0}]}}const l7={G:new NW,y:new AW,Y:new MW,R:new TW,u:new EW,Q:new _W,q:new DW,M:new PW,L:new RW,w:new OW,I:new BW,d:new $W,D:new HW,E:new UW,e:new GW,c:new WW,i:new YW,a:new VW,b:new KW,B:new XW,h:new ZW,H:new QW,K:new JW,k:new e7,m:new t7,s:new n7,S:new s7,X:new a7,x:new i7,t:new r7,T:new o7},c7=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,u7=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,d7=/^'([^]*?)'?$/,h7=/''/g,p7=/\S/,f7=/[a-zA-Z]/;function m7(s,e,t,n){var k,S,j,C,N,_,D,L;const a=()=>Mn((n==null?void 0:n.in)||t,NaN),i=yW(),o=(n==null?void 0:n.locale)??i.locale??QE,l=(n==null?void 0:n.firstWeekContainsDate)??((S=(k=n==null?void 0:n.locale)==null?void 0:k.options)==null?void 0:S.firstWeekContainsDate)??i.firstWeekContainsDate??((C=(j=i.locale)==null?void 0:j.options)==null?void 0:C.firstWeekContainsDate)??1,c=(n==null?void 0:n.weekStartsOn)??((_=(N=n==null?void 0:n.locale)==null?void 0:N.options)==null?void 0:_.weekStartsOn)??i.weekStartsOn??((L=(D=i.locale)==null?void 0:D.options)==null?void 0:L.weekStartsOn)??0;if(!e)return s?a():St(t,n==null?void 0:n.in);const d={firstWeekContainsDate:l,weekStartsOn:c,locale:o},f=[new CW(n==null?void 0:n.in,t)],p=e.match(u7).map(M=>{const P=M[0];if(P in ax){const E=ax[P];return E(M,o.formatLong)}return M}).join("").match(c7),m=[];for(let M of p){const P=M[0],E=l7[P];if(E){const{incompatibleTokens:R}=E;if(Array.isArray(R)){const O=m.find(B=>R.includes(B.token)||B.token===P);if(O)throw new RangeError(`The format string mustn't contain \`${O.fullToken}\` and \`${M}\` at the same time`)}else if(E.incompatibleTokens==="*"&&m.length>0)throw new RangeError(`The format string mustn't contain \`${M}\` and any other token at the same time`);m.push({token:P,fullToken:M});const I=E.run(s,M,o.match,d);if(!I)return a();f.push(I.setter),s=I.rest}else{if(P.match(f7))throw new RangeError("Format string contains an unescaped latin alphabet character `"+P+"`");if(M==="''"?M="'":P==="'"&&(M=g7(M)),s.indexOf(M)===0)s=s.slice(M.length);else return a()}}if(s.length>0&&p7.test(s))return a();const b=f.map(M=>M.priority).sort((M,P)=>P-M).filter((M,P,E)=>E.indexOf(M)===P).map(M=>f.filter(P=>P.priority===M).sort((P,E)=>E.subPriority-P.subPriority)).map(M=>M[0]);let x=St(t,n==null?void 0:n.in);if(isNaN(+x))return a();const w={};for(const M of b){if(!M.validate(x,d))return a();const P=M.set(x,w,d);Array.isArray(P)?(x=P[0],Object.assign(w,P[1])):x=P}return x}function g7(s){return s.match(d7)[1].replace(h7,"'")}function b7(s,e,t){const[n,a]=Pr(t==null?void 0:t.in,s,e);return n.getFullYear()===a.getFullYear()&&n.getMonth()===a.getMonth()}function y7(s,e,t){const[n,a]=Pr(t==null?void 0:t.in,s,e);return+sx(n)==+sx(a)}function x7(s,e,t){const[n,a]=Pr(t==null?void 0:t.in,s,e);return n.getFullYear()===a.getFullYear()}function wd(s,e,t){const n=+St(s,t==null?void 0:t.in),[a,i]=[+St(e.start,t==null?void 0:t.in),+St(e.end,t==null?void 0:t.in)].sort((o,l)=>o-l);return n>=a&&n<=i}function v7(s,e,t){return xi(s,-1,t)}function w7(s,e){const t=()=>Mn(e==null?void 0:e.in,NaN),a=C7(s);let i;if(a.date){const d=N7(a.date,2);i=A7(d.restDateString,d.year)}if(!i||isNaN(+i))return t();const o=+i;let l=0,c;if(a.time&&(l=M7(a.time),isNaN(l)))return t();if(a.timezone){if(c=T7(a.timezone),isNaN(c))return t()}else{const d=new Date(o+l),f=St(0,e==null?void 0:e.in);return f.setFullYear(d.getUTCFullYear(),d.getUTCMonth(),d.getUTCDate()),f.setHours(d.getUTCHours(),d.getUTCMinutes(),d.getUTCSeconds(),d.getUTCMilliseconds()),f}return St(o+l+c,e==null?void 0:e.in)}const cp={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},k7=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,S7=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,j7=/^([+-])(\d{2})(?::?(\d{2}))?$/;function C7(s){const e={},t=s.split(cp.dateTimeDelimiter);let n;if(t.length>2)return e;if(/:/.test(t[0])?n=t[0]:(e.date=t[0],n=t[1],cp.timeZoneDelimiter.test(e.date)&&(e.date=s.split(cp.timeZoneDelimiter)[0],n=s.substr(e.date.length,s.length))),n){const a=cp.timezone.exec(n);a?(e.time=n.replace(a[1],""),e.timezone=a[1]):e.time=n}return e}function N7(s,e){const t=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+e)+"})|(\\d{2}|[+-]\\d{"+(2+e)+"})$)"),n=s.match(t);if(!n)return{year:NaN,restDateString:""};const a=n[1]?parseInt(n[1]):null,i=n[2]?parseInt(n[2]):null;return{year:i===null?a:i*100,restDateString:s.slice((n[1]||n[2]).length)}}function A7(s,e){if(e===null)return new Date(NaN);const t=s.match(k7);if(!t)return new Date(NaN);const n=!!t[4],a=Fu(t[1]),i=Fu(t[2])-1,o=Fu(t[3]),l=Fu(t[4]),c=Fu(t[5])-1;if(n)return R7(e,l,c)?E7(e,l,c):new Date(NaN);{const d=new Date(0);return!D7(e,i,o)||!P7(e,a)?new Date(NaN):(d.setUTCFullYear(e,i,Math.max(a,o)),d)}}function Fu(s){return s?parseInt(s):1}function M7(s){const e=s.match(S7);if(!e)return NaN;const t=Kb(e[1]),n=Kb(e[2]),a=Kb(e[3]);return L7(t,n,a)?t*Uf+n*Hf+a*1e3:NaN}function Kb(s){return s&&parseFloat(s.replace(",","."))||0}function T7(s){if(s==="Z")return 0;const e=s.match(j7);if(!e)return 0;const t=e[1]==="+"?-1:1,n=parseInt(e[2]),a=e[3]&&parseInt(e[3])||0;return O7(n,a)?t*(n*Uf+a*Hf):NaN}function E7(s,e,t){const n=new Date(0);n.setUTCFullYear(s,0,4);const a=n.getUTCDay()||7,i=(e-1)*7+t+1-a;return n.setUTCDate(n.getUTCDate()+i),n}const _7=[31,null,31,30,31,30,31,31,30,31,30,31];function i_(s){return s%400===0||s%4===0&&s%100!==0}function D7(s,e,t){return e>=0&&e<=11&&t>=1&&t<=(_7[e]||(i_(s)?29:28))}function P7(s,e){return e>=1&&e<=(i_(s)?366:365)}function R7(s,e,t){return e>=1&&e<=53&&t>=0&&t<=6}function L7(s,e,t){return s===24?e===0&&t===0:t>=0&&t<60&&e>=0&&e<60&&s>=0&&s<25}function O7(s,e){return e>=0&&e<=59}function Oa(s,e,t){const n=St(s,t==null?void 0:t.in),a=n.getFullYear(),i=n.getDate(),o=Mn(s,0);o.setFullYear(a,e,15),o.setHours(0,0,0,0);const l=bW(o);return n.setMonth(e,Math.min(i,l)),n}function Mp(s,e,t){const n=St(s,t==null?void 0:t.in);return n.setHours(e),n}function Tp(s,e,t){const n=St(s,t==null?void 0:t.in);return n.setMinutes(e),n}function ac(s,e,t){const n=St(s,t==null?void 0:t.in),a=Math.trunc(n.getMonth()/3)+1,i=e-a;return Oa(n,n.getMonth()+i*3)}function Ep(s,e,t){const n=St(s,t==null?void 0:t.in);return n.setSeconds(e),n}function _i(s,e,t){const n=St(s,t==null?void 0:t.in);return isNaN(+n)?Mn(s,NaN):(n.setFullYear(e),n)}function nl(s,e,t){return wi(s,-e,t)}function r_(s,e,t){return Dv(s,-1,t)}function TN(s,e,t){return rf(s,-1,t)}function bo(s,e,t){return vi(s,-e,t)}function Wf(){return typeof window<"u"}function Lc(s){return o_(s)?(s.nodeName||"").toLowerCase():"#document"}function Fa(s){var e;return(s==null||(e=s.ownerDocument)==null?void 0:e.defaultView)||window}function Xi(s){var e;return(e=(o_(s)?s.ownerDocument:s.document)||window.document)==null?void 0:e.documentElement}function o_(s){return Wf()?s instanceof Node||s instanceof Fa(s).Node:!1}function ia(s){return Wf()?s instanceof Element||s instanceof Fa(s).Element:!1}function Wi(s){return Wf()?s instanceof HTMLElement||s instanceof Fa(s).HTMLElement:!1}function EN(s){return!Wf()||typeof ShadowRoot>"u"?!1:s instanceof ShadowRoot||s instanceof Fa(s).ShadowRoot}const I7=new Set(["inline","contents"]);function Pd(s){const{overflow:e,overflowX:t,overflowY:n,display:a}=li(s);return/auto|scroll|overlay|hidden|clip/.test(e+n+t)&&!I7.has(a)}const B7=new Set(["table","td","th"]);function z7(s){return B7.has(Lc(s))}const F7=[":popover-open",":modal"];function qf(s){return F7.some(e=>{try{return s.matches(e)}catch{return!1}})}const $7=["transform","translate","scale","rotate","perspective"],H7=["transform","translate","scale","rotate","perspective","filter"],U7=["paint","layout","strict","content"];function Iv(s){const e=Bv(),t=ia(s)?li(s):s;return $7.some(n=>t[n]?t[n]!=="none":!1)||(t.containerType?t.containerType!=="normal":!1)||!e&&(t.backdropFilter?t.backdropFilter!=="none":!1)||!e&&(t.filter?t.filter!=="none":!1)||H7.some(n=>(t.willChange||"").includes(n))||U7.some(n=>(t.contain||"").includes(n))}function G7(s){let e=yo(s);for(;Wi(e)&&!Nc(e);){if(Iv(e))return e;if(qf(e))return null;e=yo(e)}return null}function Bv(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const W7=new Set(["html","body","#document"]);function Nc(s){return W7.has(Lc(s))}function li(s){return Fa(s).getComputedStyle(s)}function Yf(s){return ia(s)?{scrollLeft:s.scrollLeft,scrollTop:s.scrollTop}:{scrollLeft:s.scrollX,scrollTop:s.scrollY}}function yo(s){if(Lc(s)==="html")return s;const e=s.assignedSlot||s.parentNode||EN(s)&&s.host||Xi(s);return EN(e)?e.host:e}function l_(s){const e=yo(s);return Nc(e)?s.ownerDocument?s.ownerDocument.body:s.body:Wi(e)&&Pd(e)?e:l_(e)}function kd(s,e,t){var n;e===void 0&&(e=[]),t===void 0&&(t=!0);const a=l_(s),i=a===((n=s.ownerDocument)==null?void 0:n.body),o=Fa(a);if(i){const l=rx(o);return e.concat(o,o.visualViewport||[],Pd(a)?a:[],l&&t?kd(l):[])}return e.concat(a,kd(a,[],t))}function rx(s){return s.parent&&Object.getPrototypeOf(s.parent)?s.frameElement:null}const Ac=Math.min,sl=Math.max,df=Math.round,up=Math.floor,Ui=s=>({x:s,y:s}),q7={left:"right",right:"left",bottom:"top",top:"bottom"},Y7={start:"end",end:"start"};function V7(s,e,t){return sl(s,Ac(e,t))}function Vf(s,e){return typeof s=="function"?s(e):s}function Mc(s){return s.split("-")[0]}function Rd(s){return s.split("-")[1]}function K7(s){return s==="x"?"y":"x"}function zv(s){return s==="y"?"height":"width"}const X7=new Set(["top","bottom"]);function Ko(s){return X7.has(Mc(s))?"y":"x"}function Fv(s){return K7(Ko(s))}function Z7(s,e,t){t===void 0&&(t=!1);const n=Rd(s),a=Fv(s),i=zv(a);let o=a==="x"?n===(t?"end":"start")?"right":"left":n==="start"?"bottom":"top";return e.reference[i]>e.floating[i]&&(o=hf(o)),[o,hf(o)]}function Q7(s){const e=hf(s);return[ox(s),e,ox(e)]}function ox(s){return s.replace(/start|end/g,e=>Y7[e])}const _N=["left","right"],DN=["right","left"],J7=["top","bottom"],eq=["bottom","top"];function tq(s,e,t){switch(s){case"top":case"bottom":return t?e?DN:_N:e?_N:DN;case"left":case"right":return e?J7:eq;default:return[]}}function nq(s,e,t,n){const a=Rd(s);let i=tq(Mc(s),t==="start",n);return a&&(i=i.map(o=>o+"-"+a),e&&(i=i.concat(i.map(ox)))),i}function hf(s){return s.replace(/left|right|bottom|top/g,e=>q7[e])}function sq(s){return{top:0,right:0,bottom:0,left:0,...s}}function c_(s){return typeof s!="number"?sq(s):{top:s,right:s,bottom:s,left:s}}function pf(s){const{x:e,y:t,width:n,height:a}=s;return{width:n,height:a,top:t,left:e,right:e+n,bottom:t+a,x:e,y:t}}var aq=typeof document<"u",iq=function(){},ff=aq?y.useLayoutEffect:iq;const rq={...aM},oq=rq.useInsertionEffect,lq=oq||(s=>s());function cq(s){const e=y.useRef(()=>{});return lq(()=>{e.current=s}),y.useCallback(function(){for(var t=arguments.length,n=new Array(t),a=0;a<t;a++)n[a]=arguments[a];return e.current==null?void 0:e.current(...n)},[])}function PN(s,e,t){let{reference:n,floating:a}=s;const i=Ko(e),o=Fv(e),l=zv(o),c=Mc(e),d=i==="y",f=n.x+n.width/2-a.width/2,p=n.y+n.height/2-a.height/2,m=n[l]/2-a[l]/2;let b;switch(c){case"top":b={x:f,y:n.y-a.height};break;case"bottom":b={x:f,y:n.y+n.height};break;case"right":b={x:n.x+n.width,y:p};break;case"left":b={x:n.x-a.width,y:p};break;default:b={x:n.x,y:n.y}}switch(Rd(e)){case"start":b[o]-=m*(t&&d?-1:1);break;case"end":b[o]+=m*(t&&d?-1:1);break}return b}async function uq(s,e){var t;e===void 0&&(e={});const{x:n,y:a,platform:i,rects:o,elements:l,strategy:c}=s,{boundary:d="clippingAncestors",rootBoundary:f="viewport",elementContext:p="floating",altBoundary:m=!1,padding:b=0}=Vf(e,s),x=c_(b),k=l[m?p==="floating"?"reference":"floating":p],S=pf(await i.getClippingRect({element:(t=await(i.isElement==null?void 0:i.isElement(k)))==null||t?k:k.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(l.floating)),boundary:d,rootBoundary:f,strategy:c})),j=p==="floating"?{x:n,y:a,width:o.floating.width,height:o.floating.height}:o.reference,C=await(i.getOffsetParent==null?void 0:i.getOffsetParent(l.floating)),N=await(i.isElement==null?void 0:i.isElement(C))?await(i.getScale==null?void 0:i.getScale(C))||{x:1,y:1}:{x:1,y:1},_=pf(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:l,rect:j,offsetParent:C,strategy:c}):j);return{top:(S.top-_.top+x.top)/N.y,bottom:(_.bottom-S.bottom+x.bottom)/N.y,left:(S.left-_.left+x.left)/N.x,right:(_.right-S.right+x.right)/N.x}}const dq=async(s,e,t)=>{const{placement:n="bottom",strategy:a="absolute",middleware:i=[],platform:o}=t,l=i.filter(Boolean),c=await(o.isRTL==null?void 0:o.isRTL(e));let d=await o.getElementRects({reference:s,floating:e,strategy:a}),{x:f,y:p}=PN(d,n,c),m=n,b={},x=0;for(let k=0;k<l.length;k++){var w;const{name:S,fn:j}=l[k],{x:C,y:N,data:_,reset:D}=await j({x:f,y:p,initialPlacement:n,placement:m,strategy:a,middlewareData:b,rects:d,platform:{...o,detectOverflow:(w=o.detectOverflow)!=null?w:uq},elements:{reference:s,floating:e}});f=C??f,p=N??p,b={...b,[S]:{...b[S],..._}},D&&x<=50&&(x++,typeof D=="object"&&(D.placement&&(m=D.placement),D.rects&&(d=D.rects===!0?await o.getElementRects({reference:s,floating:e,strategy:a}):D.rects),{x:f,y:p}=PN(d,m,c)),k=-1)}return{x:f,y:p,placement:m,strategy:a,middlewareData:b}},hq=s=>({name:"arrow",options:s,async fn(e){const{x:t,y:n,placement:a,rects:i,platform:o,elements:l,middlewareData:c}=e,{element:d,padding:f=0}=Vf(s,e)||{};if(d==null)return{};const p=c_(f),m={x:t,y:n},b=Fv(a),x=zv(b),w=await o.getDimensions(d),k=b==="y",S=k?"top":"left",j=k?"bottom":"right",C=k?"clientHeight":"clientWidth",N=i.reference[x]+i.reference[b]-m[b]-i.floating[x],_=m[b]-i.reference[b],D=await(o.getOffsetParent==null?void 0:o.getOffsetParent(d));let L=D?D[C]:0;(!L||!await(o.isElement==null?void 0:o.isElement(D)))&&(L=l.floating[C]||i.floating[x]);const M=N/2-_/2,P=L/2-w[x]/2-1,E=Ac(p[S],P),R=Ac(p[j],P),I=E,O=L-w[x]-R,B=L/2-w[x]/2+M,q=V7(I,B,O),H=!c.arrow&&Rd(a)!=null&&B!==q&&i.reference[x]/2-(B<I?E:R)-w[x]/2<0,G=H?B<I?B-I:B-O:0;return{[b]:m[b]+G,data:{[b]:q,centerOffset:B-q-G,...H&&{alignmentOffset:G}},reset:H}}}),pq=function(s){return s===void 0&&(s={}),{name:"flip",options:s,async fn(e){var t,n;const{placement:a,middlewareData:i,rects:o,initialPlacement:l,platform:c,elements:d}=e,{mainAxis:f=!0,crossAxis:p=!0,fallbackPlacements:m,fallbackStrategy:b="bestFit",fallbackAxisSideDirection:x="none",flipAlignment:w=!0,...k}=Vf(s,e);if((t=i.arrow)!=null&&t.alignmentOffset)return{};const S=Mc(a),j=Ko(l),C=Mc(l)===l,N=await(c.isRTL==null?void 0:c.isRTL(d.floating)),_=m||(C||!w?[hf(l)]:Q7(l)),D=x!=="none";!m&&D&&_.push(...nq(l,w,x,N));const L=[l,..._],M=await c.detectOverflow(e,k),P=[];let E=((n=i.flip)==null?void 0:n.overflows)||[];if(f&&P.push(M[S]),p){const B=Z7(a,o,N);P.push(M[B[0]],M[B[1]])}if(E=[...E,{placement:a,overflows:P}],!P.every(B=>B<=0)){var R,I;const B=(((R=i.flip)==null?void 0:R.index)||0)+1,q=L[B];if(q&&(!(p==="alignment"?j!==Ko(q):!1)||E.every(K=>Ko(K.placement)===j?K.overflows[0]>0:!0)))return{data:{index:B,overflows:E},reset:{placement:q}};let H=(I=E.filter(G=>G.overflows[0]<=0).sort((G,K)=>G.overflows[1]-K.overflows[1])[0])==null?void 0:I.placement;if(!H)switch(b){case"bestFit":{var O;const G=(O=E.filter(K=>{if(D){const X=Ko(K.placement);return X===j||X==="y"}return!0}).map(K=>[K.placement,K.overflows.filter(X=>X>0).reduce((X,$)=>X+$,0)]).sort((K,X)=>K[1]-X[1])[0])==null?void 0:O[0];G&&(H=G);break}case"initialPlacement":H=l;break}if(a!==H)return{reset:{placement:H}}}return{}}}},fq=new Set(["left","top"]);async function mq(s,e){const{placement:t,platform:n,elements:a}=s,i=await(n.isRTL==null?void 0:n.isRTL(a.floating)),o=Mc(t),l=Rd(t),c=Ko(t)==="y",d=fq.has(o)?-1:1,f=i&&c?-1:1,p=Vf(e,s);let{mainAxis:m,crossAxis:b,alignmentAxis:x}=typeof p=="number"?{mainAxis:p,crossAxis:0,alignmentAxis:null}:{mainAxis:p.mainAxis||0,crossAxis:p.crossAxis||0,alignmentAxis:p.alignmentAxis};return l&&typeof x=="number"&&(b=l==="end"?x*-1:x),c?{x:b*f,y:m*d}:{x:m*d,y:b*f}}const gq=function(s){return s===void 0&&(s=0),{name:"offset",options:s,async fn(e){var t,n;const{x:a,y:i,placement:o,middlewareData:l}=e,c=await mq(e,s);return o===((t=l.offset)==null?void 0:t.placement)&&(n=l.arrow)!=null&&n.alignmentOffset?{}:{x:a+c.x,y:i+c.y,data:{...c,placement:o}}}}};function u_(s){const e=li(s);let t=parseFloat(e.width)||0,n=parseFloat(e.height)||0;const a=Wi(s),i=a?s.offsetWidth:t,o=a?s.offsetHeight:n,l=df(t)!==i||df(n)!==o;return l&&(t=i,n=o),{width:t,height:n,$:l}}function $v(s){return ia(s)?s:s.contextElement}function mc(s){const e=$v(s);if(!Wi(e))return Ui(1);const t=e.getBoundingClientRect(),{width:n,height:a,$:i}=u_(e);let o=(i?df(t.width):t.width)/n,l=(i?df(t.height):t.height)/a;return(!o||!Number.isFinite(o))&&(o=1),(!l||!Number.isFinite(l))&&(l=1),{x:o,y:l}}const bq=Ui(0);function d_(s){const e=Fa(s);return!Bv()||!e.visualViewport?bq:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function yq(s,e,t){return e===void 0&&(e=!1),!t||e&&t!==Fa(s)?!1:e}function pl(s,e,t,n){e===void 0&&(e=!1),t===void 0&&(t=!1);const a=s.getBoundingClientRect(),i=$v(s);let o=Ui(1);e&&(n?ia(n)&&(o=mc(n)):o=mc(s));const l=yq(i,t,n)?d_(i):Ui(0);let c=(a.left+l.x)/o.x,d=(a.top+l.y)/o.y,f=a.width/o.x,p=a.height/o.y;if(i){const m=Fa(i),b=n&&ia(n)?Fa(n):n;let x=m,w=rx(x);for(;w&&n&&b!==x;){const k=mc(w),S=w.getBoundingClientRect(),j=li(w),C=S.left+(w.clientLeft+parseFloat(j.paddingLeft))*k.x,N=S.top+(w.clientTop+parseFloat(j.paddingTop))*k.y;c*=k.x,d*=k.y,f*=k.x,p*=k.y,c+=C,d+=N,x=Fa(w),w=rx(x)}}return pf({width:f,height:p,x:c,y:d})}function Kf(s,e){const t=Yf(s).scrollLeft;return e?e.left+t:pl(Xi(s)).left+t}function h_(s,e){const t=s.getBoundingClientRect(),n=t.left+e.scrollLeft-Kf(s,t),a=t.top+e.scrollTop;return{x:n,y:a}}function xq(s){let{elements:e,rect:t,offsetParent:n,strategy:a}=s;const i=a==="fixed",o=Xi(n),l=e?qf(e.floating):!1;if(n===o||l&&i)return t;let c={scrollLeft:0,scrollTop:0},d=Ui(1);const f=Ui(0),p=Wi(n);if((p||!p&&!i)&&((Lc(n)!=="body"||Pd(o))&&(c=Yf(n)),Wi(n))){const b=pl(n);d=mc(n),f.x=b.x+n.clientLeft,f.y=b.y+n.clientTop}const m=o&&!p&&!i?h_(o,c):Ui(0);return{width:t.width*d.x,height:t.height*d.y,x:t.x*d.x-c.scrollLeft*d.x+f.x+m.x,y:t.y*d.y-c.scrollTop*d.y+f.y+m.y}}function vq(s){return Array.from(s.getClientRects())}function wq(s){const e=Xi(s),t=Yf(s),n=s.ownerDocument.body,a=sl(e.scrollWidth,e.clientWidth,n.scrollWidth,n.clientWidth),i=sl(e.scrollHeight,e.clientHeight,n.scrollHeight,n.clientHeight);let o=-t.scrollLeft+Kf(s);const l=-t.scrollTop;return li(n).direction==="rtl"&&(o+=sl(e.clientWidth,n.clientWidth)-a),{width:a,height:i,x:o,y:l}}const RN=25;function kq(s,e){const t=Fa(s),n=Xi(s),a=t.visualViewport;let i=n.clientWidth,o=n.clientHeight,l=0,c=0;if(a){i=a.width,o=a.height;const f=Bv();(!f||f&&e==="fixed")&&(l=a.offsetLeft,c=a.offsetTop)}const d=Kf(n);if(d<=0){const f=n.ownerDocument,p=f.body,m=getComputedStyle(p),b=f.compatMode==="CSS1Compat"&&parseFloat(m.marginLeft)+parseFloat(m.marginRight)||0,x=Math.abs(n.clientWidth-p.clientWidth-b);x<=RN&&(i-=x)}else d<=RN&&(i+=d);return{width:i,height:o,x:l,y:c}}const Sq=new Set(["absolute","fixed"]);function jq(s,e){const t=pl(s,!0,e==="fixed"),n=t.top+s.clientTop,a=t.left+s.clientLeft,i=Wi(s)?mc(s):Ui(1),o=s.clientWidth*i.x,l=s.clientHeight*i.y,c=a*i.x,d=n*i.y;return{width:o,height:l,x:c,y:d}}function LN(s,e,t){let n;if(e==="viewport")n=kq(s,t);else if(e==="document")n=wq(Xi(s));else if(ia(e))n=jq(e,t);else{const a=d_(s);n={x:e.x-a.x,y:e.y-a.y,width:e.width,height:e.height}}return pf(n)}function p_(s,e){const t=yo(s);return t===e||!ia(t)||Nc(t)?!1:li(t).position==="fixed"||p_(t,e)}function Cq(s,e){const t=e.get(s);if(t)return t;let n=kd(s,[],!1).filter(l=>ia(l)&&Lc(l)!=="body"),a=null;const i=li(s).position==="fixed";let o=i?yo(s):s;for(;ia(o)&&!Nc(o);){const l=li(o),c=Iv(o);!c&&l.position==="fixed"&&(a=null),(i?!c&&!a:!c&&l.position==="static"&&!!a&&Sq.has(a.position)||Pd(o)&&!c&&p_(s,o))?n=n.filter(f=>f!==o):a=l,o=yo(o)}return e.set(s,n),n}function Nq(s){let{element:e,boundary:t,rootBoundary:n,strategy:a}=s;const o=[...t==="clippingAncestors"?qf(e)?[]:Cq(e,this._c):[].concat(t),n],l=o[0],c=o.reduce((d,f)=>{const p=LN(e,f,a);return d.top=sl(p.top,d.top),d.right=Ac(p.right,d.right),d.bottom=Ac(p.bottom,d.bottom),d.left=sl(p.left,d.left),d},LN(e,l,a));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}}function Aq(s){const{width:e,height:t}=u_(s);return{width:e,height:t}}function Mq(s,e,t){const n=Wi(e),a=Xi(e),i=t==="fixed",o=pl(s,!0,i,e);let l={scrollLeft:0,scrollTop:0};const c=Ui(0);function d(){c.x=Kf(a)}if(n||!n&&!i)if((Lc(e)!=="body"||Pd(a))&&(l=Yf(e)),n){const b=pl(e,!0,i,e);c.x=b.x+e.clientLeft,c.y=b.y+e.clientTop}else a&&d();i&&!n&&a&&d();const f=a&&!n&&!i?h_(a,l):Ui(0),p=o.left+l.scrollLeft-c.x-f.x,m=o.top+l.scrollTop-c.y-f.y;return{x:p,y:m,width:o.width,height:o.height}}function Xb(s){return li(s).position==="static"}function ON(s,e){if(!Wi(s)||li(s).position==="fixed")return null;if(e)return e(s);let t=s.offsetParent;return Xi(s)===t&&(t=t.ownerDocument.body),t}function f_(s,e){const t=Fa(s);if(qf(s))return t;if(!Wi(s)){let a=yo(s);for(;a&&!Nc(a);){if(ia(a)&&!Xb(a))return a;a=yo(a)}return t}let n=ON(s,e);for(;n&&z7(n)&&Xb(n);)n=ON(n,e);return n&&Nc(n)&&Xb(n)&&!Iv(n)?t:n||G7(s)||t}const Tq=async function(s){const e=this.getOffsetParent||f_,t=this.getDimensions,n=await t(s.floating);return{reference:Mq(s.reference,await e(s.floating),s.strategy),floating:{x:0,y:0,width:n.width,height:n.height}}};function Eq(s){return li(s).direction==="rtl"}const _q={convertOffsetParentRelativeRectToViewportRelativeRect:xq,getDocumentElement:Xi,getClippingRect:Nq,getOffsetParent:f_,getElementRects:Tq,getClientRects:vq,getDimensions:Aq,getScale:mc,isElement:ia,isRTL:Eq};function m_(s,e){return s.x===e.x&&s.y===e.y&&s.width===e.width&&s.height===e.height}function Dq(s,e){let t=null,n;const a=Xi(s);function i(){var l;clearTimeout(n),(l=t)==null||l.disconnect(),t=null}function o(l,c){l===void 0&&(l=!1),c===void 0&&(c=1),i();const d=s.getBoundingClientRect(),{left:f,top:p,width:m,height:b}=d;if(l||e(),!m||!b)return;const x=up(p),w=up(a.clientWidth-(f+m)),k=up(a.clientHeight-(p+b)),S=up(f),C={rootMargin:-x+"px "+-w+"px "+-k+"px "+-S+"px",threshold:sl(0,Ac(1,c))||1};let N=!0;function _(D){const L=D[0].intersectionRatio;if(L!==c){if(!N)return o();L?o(!1,L):n=setTimeout(()=>{o(!1,1e-7)},1e3)}L===1&&!m_(d,s.getBoundingClientRect())&&o(),N=!1}try{t=new IntersectionObserver(_,{...C,root:a.ownerDocument})}catch{t=new IntersectionObserver(_,C)}t.observe(s)}return o(!0),i}function Pq(s,e,t,n){n===void 0&&(n={});const{ancestorScroll:a=!0,ancestorResize:i=!0,elementResize:o=typeof ResizeObserver=="function",layoutShift:l=typeof IntersectionObserver=="function",animationFrame:c=!1}=n,d=$v(s),f=a||i?[...d?kd(d):[],...kd(e)]:[];f.forEach(S=>{a&&S.addEventListener("scroll",t,{passive:!0}),i&&S.addEventListener("resize",t)});const p=d&&l?Dq(d,t):null;let m=-1,b=null;o&&(b=new ResizeObserver(S=>{let[j]=S;j&&j.target===d&&b&&(b.unobserve(e),cancelAnimationFrame(m),m=requestAnimationFrame(()=>{var C;(C=b)==null||C.observe(e)})),t()}),d&&!c&&b.observe(d),b.observe(e));let x,w=c?pl(s):null;c&&k();function k(){const S=pl(s);w&&!m_(w,S)&&t(),w=S,x=requestAnimationFrame(k)}return t(),()=>{var S;f.forEach(j=>{a&&j.removeEventListener("scroll",t),i&&j.removeEventListener("resize",t)}),p==null||p(),(S=b)==null||S.disconnect(),b=null,c&&cancelAnimationFrame(x)}}const Rq=gq,Lq=pq,IN=hq,Oq=(s,e,t)=>{const n=new Map,a={platform:_q,...t},i={...a.platform,_c:n};return dq(s,e,{...a,platform:i})};var Iq=typeof document<"u",Bq=function(){},_p=Iq?y.useLayoutEffect:Bq;function mf(s,e){if(s===e)return!0;if(typeof s!=typeof e)return!1;if(typeof s=="function"&&s.toString()===e.toString())return!0;let t,n,a;if(s&&e&&typeof s=="object"){if(Array.isArray(s)){if(t=s.length,t!==e.length)return!1;for(n=t;n--!==0;)if(!mf(s[n],e[n]))return!1;return!0}if(a=Object.keys(s),t=a.length,t!==Object.keys(e).length)return!1;for(n=t;n--!==0;)if(!{}.hasOwnProperty.call(e,a[n]))return!1;for(n=t;n--!==0;){const i=a[n];if(!(i==="_owner"&&s.$$typeof)&&!mf(s[i],e[i]))return!1}return!0}return s!==s&&e!==e}function g_(s){return typeof window>"u"?1:(s.ownerDocument.defaultView||window).devicePixelRatio||1}function BN(s,e){const t=g_(s);return Math.round(e*t)/t}function Zb(s){const e=y.useRef(s);return _p(()=>{e.current=s}),e}function zq(s){s===void 0&&(s={});const{placement:e="bottom",strategy:t="absolute",middleware:n=[],platform:a,elements:{reference:i,floating:o}={},transform:l=!0,whileElementsMounted:c,open:d}=s,[f,p]=y.useState({x:0,y:0,strategy:t,placement:e,middlewareData:{},isPositioned:!1}),[m,b]=y.useState(n);mf(m,n)||b(n);const[x,w]=y.useState(null),[k,S]=y.useState(null),j=y.useCallback(K=>{K!==D.current&&(D.current=K,w(K))},[]),C=y.useCallback(K=>{K!==L.current&&(L.current=K,S(K))},[]),N=i||x,_=o||k,D=y.useRef(null),L=y.useRef(null),M=y.useRef(f),P=c!=null,E=Zb(c),R=Zb(a),I=Zb(d),O=y.useCallback(()=>{if(!D.current||!L.current)return;const K={placement:e,strategy:t,middleware:m};R.current&&(K.platform=R.current),Oq(D.current,L.current,K).then(X=>{const $={...X,isPositioned:I.current!==!1};B.current&&!mf(M.current,$)&&(M.current=$,_c.flushSync(()=>{p($)}))})},[m,e,t,R,I]);_p(()=>{d===!1&&M.current.isPositioned&&(M.current.isPositioned=!1,p(K=>({...K,isPositioned:!1})))},[d]);const B=y.useRef(!1);_p(()=>(B.current=!0,()=>{B.current=!1}),[]),_p(()=>{if(N&&(D.current=N),_&&(L.current=_),N&&_){if(E.current)return E.current(N,_,O);O()}},[N,_,O,E,P]);const q=y.useMemo(()=>({reference:D,floating:L,setReference:j,setFloating:C}),[j,C]),H=y.useMemo(()=>({reference:N,floating:_}),[N,_]),G=y.useMemo(()=>{const K={position:t,left:0,top:0};if(!H.floating)return K;const X=BN(H.floating,f.x),$=BN(H.floating,f.y);return l?{...K,transform:"translate("+X+"px, "+$+"px)",...g_(H.floating)>=1.5&&{willChange:"transform"}}:{position:t,left:X,top:$}},[t,l,H.floating,f.x,f.y]);return y.useMemo(()=>({...f,update:O,refs:q,elements:H,floatingStyles:G}),[f,O,q,H,G])}const Fq=s=>{function e(t){return{}.hasOwnProperty.call(t,"current")}return{name:"arrow",options:s,fn(t){const{element:n,padding:a}=typeof s=="function"?s(t):s;return n&&e(n)?n.current!=null?IN({element:n.current,padding:a}).fn(t):{}:n?IN({element:n,padding:a}).fn(t):{}}}},$q=(s,e)=>({...Rq(s),options:[s,e]}),Hq=(s,e)=>({...Lq(s),options:[s,e]}),Uq=(s,e)=>({...Fq(s),options:[s,e]}),Gq={...aM};let zN=!1,Wq=0;const FN=()=>"floating-ui-"+Math.random().toString(36).slice(2,6)+Wq++;function qq(){const[s,e]=y.useState(()=>zN?FN():void 0);return ff(()=>{s==null&&e(FN())},[]),y.useEffect(()=>{zN=!0},[]),s}const Yq=Gq.useId,b_=Yq||qq,Vq=y.forwardRef(function(e,t){const{context:{placement:n,elements:{floating:a},middlewareData:{arrow:i,shift:o}},width:l=14,height:c=7,tipRadius:d=0,strokeWidth:f=0,staticOffset:p,stroke:m,d:b,style:{transform:x,...w}={},...k}=e,S=b_(),[j,C]=y.useState(!1);if(ff(()=>{if(!a)return;li(a).direction==="rtl"&&C(!0)},[a]),!a)return null;const[N,_]=n.split("-"),D=N==="top"||N==="bottom";let L=p;(D&&o!=null&&o.x||!D&&o!=null&&o.y)&&(L=null);const M=f*2,P=M/2,E=l/2*(d/-8+1),R=c/2*d/4,I=!!b,O=L&&_==="end"?"bottom":"top";let B=L&&_==="end"?"right":"left";L&&j&&(B=_==="end"?"left":"right");const q=(i==null?void 0:i.x)!=null?L||i.x:"",H=(i==null?void 0:i.y)!=null?L||i.y:"",G=b||"M0,0"+(" H"+l)+(" L"+(l-E)+","+(c-R))+(" Q"+l/2+","+c+" "+E+","+(c-R))+" Z",K={top:I?"rotate(180deg)":"",left:I?"rotate(90deg)":"rotate(-90deg)",bottom:I?"":"rotate(180deg)",right:I?"rotate(-90deg)":"rotate(90deg)"}[N];return r.jsxs("svg",{...k,"aria-hidden":!0,ref:t,width:I?l:l+M,height:l,viewBox:"0 0 "+l+" "+(c>l?c:l),style:{position:"absolute",pointerEvents:"none",[B]:q,[O]:H,[N]:D||I?"100%":"calc(100% - "+M/2+"px)",transform:[K,x].filter(X=>!!X).join(" "),...w},children:[M>0&&r.jsx("path",{clipPath:"url(#"+S+")",fill:"none",stroke:m,strokeWidth:M+(b?0:1),d:G}),r.jsx("path",{stroke:M&&!b?k.fill:"none",d:G}),r.jsx("clipPath",{id:S,children:r.jsx("rect",{x:-P,y:P*(I?-1:1),width:l+M,height:l})})]})});function Kq(){const s=new Map;return{emit(e,t){var n;(n=s.get(e))==null||n.forEach(a=>a(t))},on(e,t){s.has(e)||s.set(e,new Set),s.get(e).add(t)},off(e,t){var n;(n=s.get(e))==null||n.delete(t)}}}const Xq=y.createContext(null),Zq=y.createContext(null),Qq=()=>{var s;return((s=y.useContext(Xq))==null?void 0:s.id)||null},Jq=()=>y.useContext(Zq);function eY(s){const{open:e=!1,onOpenChange:t,elements:n}=s,a=b_(),i=y.useRef({}),[o]=y.useState(()=>Kq()),l=Qq()!=null,[c,d]=y.useState(n.reference),f=cq((b,x,w)=>{i.current.openEvent=b?x:void 0,o.emit("openchange",{open:b,event:x,reason:w,nested:l}),t==null||t(b,x,w)}),p=y.useMemo(()=>({setPositionReference:d}),[]),m=y.useMemo(()=>({reference:c||n.reference||null,floating:n.floating||null,domReference:n.reference}),[c,n.reference,n.floating]);return y.useMemo(()=>({dataRef:i,open:e,onOpenChange:f,elements:m,events:o,floatingId:a,refs:p}),[e,f,m,o,a,p])}function tY(s){s===void 0&&(s={});const{nodeId:e}=s,t=eY({...s,elements:{reference:null,floating:null,...s.elements}}),n=s.rootContext||t,a=n.elements,[i,o]=y.useState(null),[l,c]=y.useState(null),f=(a==null?void 0:a.domReference)||i,p=y.useRef(null),m=Jq();ff(()=>{f&&(p.current=f)},[f]);const b=zq({...s,elements:{...a,...l&&{reference:l}}}),x=y.useCallback(C=>{const N=ia(C)?{getBoundingClientRect:()=>C.getBoundingClientRect(),getClientRects:()=>C.getClientRects(),contextElement:C}:C;c(N),b.refs.setReference(N)},[b.refs]),w=y.useCallback(C=>{(ia(C)||C===null)&&(p.current=C,o(C)),(ia(b.refs.reference.current)||b.refs.reference.current===null||C!==null&&!ia(C))&&b.refs.setReference(C)},[b.refs]),k=y.useMemo(()=>({...b.refs,setReference:w,setPositionReference:x,domReference:p}),[b.refs,w,x]),S=y.useMemo(()=>({...b.elements,domReference:f}),[b.elements,f]),j=y.useMemo(()=>({...b,...n,refs:k,elements:S,nodeId:e}),[b,k,S,e,n]);return ff(()=>{n.dataRef.current.floatingContext=j;const C=m==null?void 0:m.nodesRef.current.find(N=>N.id===e);C&&(C.context=j)}),y.useMemo(()=>({...b,context:j,refs:k,elements:S}),[b,k,S,j])}/*!
|