mirror of
https://github.com/GNS3/gns3-server.git
synced 2026-10-31 04:29:33 +02:00
4595 lines
4.6 MiB
4595 lines
4.6 MiB
import{a as mt,b as rt,c as m5,d as _t,e as We,f as Wt,g as Xe,h as tb,i as qe,j as bt,k as Qe,l as ke,m as T5,n as E5,o as sb,p as O5,q as hg}from"./chunk-2MJLPLTV.js";import{$ as hm,A as Ho,B as ct,C as b5,D as ot,E as ob,F as ml,G as _s,H as x5,I as y5,J as pl,K as ab,L as w5,M as M5,N as gg,O as re,P as Gt,Q as Rt,R as Uk,S as Ni,T as rb,U as Ir,V as Xo,W as Yo,X as S5,Y as k5,Z as P5,_ as bo,a as pt,aa as so,b as st,ba as ui,c as ut,ca as Xn,d as u5,da as _m,e as Ko,ea as ga,f as eo,fa as fs,g as it,ga as Ja,h as Ve,ha as er,i as Wn,ia as tr,j as Dr,k as Bi,l as oi,m as nb,n as ug,o as Pe,p as we,q as Td,r as ib,s as g5,t as h5,u as gm,v as _5,w as nt,x as f5,y as v5,z as C5}from"./chunk-YK4BK3GN.js";import{$ as Qn,$a as mA,$b as Et,$c as DA,$d as No,$e as um,A as nA,Aa as IC,Ab as gt,Ac as Pa,Ad as LA,Ae as t5,B as Ci,Ba as Bk,Bb as ht,Bc as og,Bd as VA,Be as dg,C as ma,Ca as lf,Cc as dm,Cd as WC,Ce as YC,D as La,Da as Ba,Db as Bn,Dc as bA,De as n5,E as DC,Ea as AC,Eb as jn,Ec as fe,Ed as BA,Ee as $k,F as ro,Fa as So,Fb as Te,Fc as nc,Fe as ZC,G as Yi,Ga as lm,Gb as Tt,Gc as xA,Ge as i5,H as sl,Ha as m,Hb as ne,Hc as yA,Hd as jA,He as Or,I as ei,Ia as Ya,Ib as Za,Ic as VC,Ie as Hk,J as Lk,Ja as pa,Jb as c,Jc as BC,Je as mf,K as iA,Ka as Fp,Kb as N,Kc as wA,Kd as GC,Ke as o5,L as rf,La as qi,Lb as X,Lc as MA,Ld as $A,Le as $a,M as tg,Ma as Mt,Mb as Un,Mc as ag,Md as Pd,Me as a5,N as Gr,Nb as pA,Nc as SA,Nd as At,Ne as Vp,O as sf,Oa as Wo,Ob as RC,Oc as kA,Od as HA,Oe as r5,P as oA,Pa as V,Pb as uA,Pc as us,Pd as Ue,Pe as s5,Q as ng,Qa as on,Qb as an,Qc as PA,Qd as UA,Qe as $t,R as aA,Ra as yt,Rb as Xt,Rc as rg,Rd as qC,Re as mg,S as ig,Sa as qr,Sb as rn,Sc as TA,Sd as Nt,Se as Ft,Tb as ka,Tc as Pr,Td as vt,Te as Co,Ua as mi,Ub as Md,Uc as Ta,Ud as QC,Ue as JC,V as wd,Va as se,Vb as un,Vc as jC,Vd as Qo,Ve as vn,Wa as NC,Wb as at,Wc as df,Wd as Ji,We as l5,X as Di,Xa as dA,Xb as tn,Xc as Rp,Xd as Ec,Xe as ce,Y as Dn,Yb as Go,Yc as EA,Yd as Ge,Ye as ie,Z as He,Za as Hs,Zb as zC,Zc as OA,Zd as WA,Ze as c5,_ as rA,_a as Ce,_b as LC,_c as mm,_d as Ct,_e as eb,a as q,aa as Ii,ab as T,ac as gn,ad as cl,ae as Tr,af as d5,b as ze,ba as Pc,bb as FC,bc as Io,bd as ja,be as GA,bf as Xr,c as EC,ca as J,cb as E,cc as gA,cd as Kr,ce as qA,cf as Be,d as al,da as nn,db as ni,dc as Qr,dd as zp,de as Yt,df as Oc,e as qn,ea as mn,eb as Oe,ec as hA,ed as sg,ee as Ut,ef as he,f as Jl,fa as _e,fb as Q,fc as cf,fd as IA,fe as QA,ff as Y,g as Oo,ga as f,gb as K,gc as Ne,gd as AA,ge as KA,gf as zi,h as Sr,ha as sA,hb as v,hc as cm,hd as NA,he as pm,hf as p5,i as Ye,ia as lA,ib as r,ic as _A,id as Vi,ie as Er,if as sn,j as cn,ja as Vk,jb as l,jc as $o,jd as jk,je as dl,jf as Yr,k as Ju,ka as y,kb as L,kc as ee,kd as $C,ke as XA,kf as pg,l as J4,la as w,lb as ii,lc as ln,ld as kd,le as cg,m as eA,ma as Mi,mb as Si,mc as fA,md as FA,me as Ai,n as rl,na as Xa,nb as kr,nd as Lp,ne as St,o as eg,oa as xa,ob as Fe,oc as $,od as RA,oe as It,p as tA,pa as Do,pb as Re,pc as oe,pd as ua,pe as hs,q as sm,qa as Va,qb as li,qc as Sd,qd as zA,r as Vt,ra as be,rb as R,rc as zt,re as KC,s as jo,sa as Gi,sb as pr,sc as qo,sd as lg,t as af,ta as cA,tb as _,te as XC,u as OC,ua as z,ub as Tc,uc as ki,ue as YA,v as Rk,va as Vn,vb as h,vc as Ao,ve as ZA,w as Pt,wa as Nn,wb as pi,wc as vA,wd as HC,we as JA,x as mr,xa as yi,xb as Zt,xc as CA,xd as UC,xe as e5,y as Np,ya as Kt,yb as Zi,yc as ll,yd as gs,z as zk,za as ec,zb as Kn,zc as tc}from"./chunk-JPY5KHMK.js";var Hz=al((jz,$z)=>{(function(n){if(typeof jz=="object")$z.exports=n();else if(typeof define=="function"&&define.amd)define(n);else{var o;try{o=window}catch{o=self}o.SparkMD5=n()}})(function(n){"use strict";var o=function(S,O){return S+O&4294967295},e=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];function t(S,O,A,D,F,I){return O=o(o(O,S),o(D,I)),o(O<<F|O>>>32-F,A)}function i(S,O){var A=S[0],D=S[1],F=S[2],I=S[3];A+=(D&F|~D&I)+O[0]-680876936|0,A=(A<<7|A>>>25)+D|0,I+=(A&D|~A&F)+O[1]-389564586|0,I=(I<<12|I>>>20)+A|0,F+=(I&A|~I&D)+O[2]+606105819|0,F=(F<<17|F>>>15)+I|0,D+=(F&I|~F&A)+O[3]-1044525330|0,D=(D<<22|D>>>10)+F|0,A+=(D&F|~D&I)+O[4]-176418897|0,A=(A<<7|A>>>25)+D|0,I+=(A&D|~A&F)+O[5]+1200080426|0,I=(I<<12|I>>>20)+A|0,F+=(I&A|~I&D)+O[6]-1473231341|0,F=(F<<17|F>>>15)+I|0,D+=(F&I|~F&A)+O[7]-45705983|0,D=(D<<22|D>>>10)+F|0,A+=(D&F|~D&I)+O[8]+1770035416|0,A=(A<<7|A>>>25)+D|0,I+=(A&D|~A&F)+O[9]-1958414417|0,I=(I<<12|I>>>20)+A|0,F+=(I&A|~I&D)+O[10]-42063|0,F=(F<<17|F>>>15)+I|0,D+=(F&I|~F&A)+O[11]-1990404162|0,D=(D<<22|D>>>10)+F|0,A+=(D&F|~D&I)+O[12]+1804603682|0,A=(A<<7|A>>>25)+D|0,I+=(A&D|~A&F)+O[13]-40341101|0,I=(I<<12|I>>>20)+A|0,F+=(I&A|~I&D)+O[14]-1502002290|0,F=(F<<17|F>>>15)+I|0,D+=(F&I|~F&A)+O[15]+1236535329|0,D=(D<<22|D>>>10)+F|0,A+=(D&I|F&~I)+O[1]-165796510|0,A=(A<<5|A>>>27)+D|0,I+=(A&F|D&~F)+O[6]-1069501632|0,I=(I<<9|I>>>23)+A|0,F+=(I&D|A&~D)+O[11]+643717713|0,F=(F<<14|F>>>18)+I|0,D+=(F&A|I&~A)+O[0]-373897302|0,D=(D<<20|D>>>12)+F|0,A+=(D&I|F&~I)+O[5]-701558691|0,A=(A<<5|A>>>27)+D|0,I+=(A&F|D&~F)+O[10]+38016083|0,I=(I<<9|I>>>23)+A|0,F+=(I&D|A&~D)+O[15]-660478335|0,F=(F<<14|F>>>18)+I|0,D+=(F&A|I&~A)+O[4]-405537848|0,D=(D<<20|D>>>12)+F|0,A+=(D&I|F&~I)+O[9]+568446438|0,A=(A<<5|A>>>27)+D|0,I+=(A&F|D&~F)+O[14]-1019803690|0,I=(I<<9|I>>>23)+A|0,F+=(I&D|A&~D)+O[3]-187363961|0,F=(F<<14|F>>>18)+I|0,D+=(F&A|I&~A)+O[8]+1163531501|0,D=(D<<20|D>>>12)+F|0,A+=(D&I|F&~I)+O[13]-1444681467|0,A=(A<<5|A>>>27)+D|0,I+=(A&F|D&~F)+O[2]-51403784|0,I=(I<<9|I>>>23)+A|0,F+=(I&D|A&~D)+O[7]+1735328473|0,F=(F<<14|F>>>18)+I|0,D+=(F&A|I&~A)+O[12]-1926607734|0,D=(D<<20|D>>>12)+F|0,A+=(D^F^I)+O[5]-378558|0,A=(A<<4|A>>>28)+D|0,I+=(A^D^F)+O[8]-2022574463|0,I=(I<<11|I>>>21)+A|0,F+=(I^A^D)+O[11]+1839030562|0,F=(F<<16|F>>>16)+I|0,D+=(F^I^A)+O[14]-35309556|0,D=(D<<23|D>>>9)+F|0,A+=(D^F^I)+O[1]-1530992060|0,A=(A<<4|A>>>28)+D|0,I+=(A^D^F)+O[4]+1272893353|0,I=(I<<11|I>>>21)+A|0,F+=(I^A^D)+O[7]-155497632|0,F=(F<<16|F>>>16)+I|0,D+=(F^I^A)+O[10]-1094730640|0,D=(D<<23|D>>>9)+F|0,A+=(D^F^I)+O[13]+681279174|0,A=(A<<4|A>>>28)+D|0,I+=(A^D^F)+O[0]-358537222|0,I=(I<<11|I>>>21)+A|0,F+=(I^A^D)+O[3]-722521979|0,F=(F<<16|F>>>16)+I|0,D+=(F^I^A)+O[6]+76029189|0,D=(D<<23|D>>>9)+F|0,A+=(D^F^I)+O[9]-640364487|0,A=(A<<4|A>>>28)+D|0,I+=(A^D^F)+O[12]-421815835|0,I=(I<<11|I>>>21)+A|0,F+=(I^A^D)+O[15]+530742520|0,F=(F<<16|F>>>16)+I|0,D+=(F^I^A)+O[2]-995338651|0,D=(D<<23|D>>>9)+F|0,A+=(F^(D|~I))+O[0]-198630844|0,A=(A<<6|A>>>26)+D|0,I+=(D^(A|~F))+O[7]+1126891415|0,I=(I<<10|I>>>22)+A|0,F+=(A^(I|~D))+O[14]-1416354905|0,F=(F<<15|F>>>17)+I|0,D+=(I^(F|~A))+O[5]-57434055|0,D=(D<<21|D>>>11)+F|0,A+=(F^(D|~I))+O[12]+1700485571|0,A=(A<<6|A>>>26)+D|0,I+=(D^(A|~F))+O[3]-1894986606|0,I=(I<<10|I>>>22)+A|0,F+=(A^(I|~D))+O[10]-1051523|0,F=(F<<15|F>>>17)+I|0,D+=(I^(F|~A))+O[1]-2054922799|0,D=(D<<21|D>>>11)+F|0,A+=(F^(D|~I))+O[8]+1873313359|0,A=(A<<6|A>>>26)+D|0,I+=(D^(A|~F))+O[15]-30611744|0,I=(I<<10|I>>>22)+A|0,F+=(A^(I|~D))+O[6]-1560198380|0,F=(F<<15|F>>>17)+I|0,D+=(I^(F|~A))+O[13]+1309151649|0,D=(D<<21|D>>>11)+F|0,A+=(F^(D|~I))+O[4]-145523070|0,A=(A<<6|A>>>26)+D|0,I+=(D^(A|~F))+O[11]-1120210379|0,I=(I<<10|I>>>22)+A|0,F+=(A^(I|~D))+O[2]+718787259|0,F=(F<<15|F>>>17)+I|0,D+=(I^(F|~A))+O[9]-343485551|0,D=(D<<21|D>>>11)+F|0,S[0]=A+S[0]|0,S[1]=D+S[1]|0,S[2]=F+S[2]|0,S[3]=I+S[3]|0}function a(S){var O=[],A;for(A=0;A<64;A+=4)O[A>>2]=S.charCodeAt(A)+(S.charCodeAt(A+1)<<8)+(S.charCodeAt(A+2)<<16)+(S.charCodeAt(A+3)<<24);return O}function s(S){var O=[],A;for(A=0;A<64;A+=4)O[A>>2]=S[A]+(S[A+1]<<8)+(S[A+2]<<16)+(S[A+3]<<24);return O}function d(S){var O=S.length,A=[1732584193,-271733879,-1732584194,271733878],D,F,I,B,le,ae;for(D=64;D<=O;D+=64)i(A,a(S.substring(D-64,D)));for(S=S.substring(D-64),F=S.length,I=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],D=0;D<F;D+=1)I[D>>2]|=S.charCodeAt(D)<<(D%4<<3);if(I[D>>2]|=128<<(D%4<<3),D>55)for(i(A,I),D=0;D<16;D+=1)I[D]=0;return B=O*8,B=B.toString(16).match(/(.*?)(.{0,8})$/),le=parseInt(B[2],16),ae=parseInt(B[1],16)||0,I[14]=le,I[15]=ae,i(A,I),A}function p(S){var O=S.length,A=[1732584193,-271733879,-1732584194,271733878],D,F,I,B,le,ae;for(D=64;D<=O;D+=64)i(A,s(S.subarray(D-64,D)));for(S=D-64<O?S.subarray(D-64):new Uint8Array(0),F=S.length,I=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],D=0;D<F;D+=1)I[D>>2]|=S[D]<<(D%4<<3);if(I[D>>2]|=128<<(D%4<<3),D>55)for(i(A,I),D=0;D<16;D+=1)I[D]=0;return B=O*8,B=B.toString(16).match(/(.*?)(.{0,8})$/),le=parseInt(B[2],16),ae=parseInt(B[1],16)||0,I[14]=le,I[15]=ae,i(A,I),A}function u(S){var O="",A;for(A=0;A<4;A+=1)O+=e[S>>A*8+4&15]+e[S>>A*8&15];return O}function g(S){var O;for(O=0;O<S.length;O+=1)S[O]=u(S[O]);return S.join("")}g(d("hello"))!=="5d41402abc4b2a76b9719d911017c592"&&(o=function(S,O){var A=(S&65535)+(O&65535),D=(S>>16)+(O>>16)+(A>>16);return D<<16|A&65535}),typeof ArrayBuffer<"u"&&!ArrayBuffer.prototype.slice&&(function(){function S(O,A){return O=O|0||0,O<0?Math.max(O+A,0):Math.min(O,A)}ArrayBuffer.prototype.slice=function(O,A){var D=this.byteLength,F=S(O,D),I=D,B,le,ae,W;return A!==n&&(I=S(A,D)),F>I?new ArrayBuffer(0):(B=I-F,le=new ArrayBuffer(B),ae=new Uint8Array(le),W=new Uint8Array(this,F,B),ae.set(W),le)}})();function C(S){return/[\u0080-\uFFFF]/.test(S)&&(S=unescape(encodeURIComponent(S))),S}function M(S,O){var A=S.length,D=new ArrayBuffer(A),F=new Uint8Array(D),I;for(I=0;I<A;I+=1)F[I]=S.charCodeAt(I);return O?F:D}function x(S){return String.fromCharCode.apply(null,new Uint8Array(S))}function b(S,O,A){var D=new Uint8Array(S.byteLength+O.byteLength);return D.set(new Uint8Array(S)),D.set(new Uint8Array(O),S.byteLength),A?D:D.buffer}function P(S){var O=[],A=S.length,D;for(D=0;D<A-1;D+=2)O.push(parseInt(S.substr(D,2),16));return String.fromCharCode.apply(String,O)}function k(){this.reset()}return k.prototype.append=function(S){return this.appendBinary(C(S)),this},k.prototype.appendBinary=function(S){this._buff+=S,this._length+=S.length;var O=this._buff.length,A;for(A=64;A<=O;A+=64)i(this._hash,a(this._buff.substring(A-64,A)));return this._buff=this._buff.substring(A-64),this},k.prototype.end=function(S){var O=this._buff,A=O.length,D,F=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],I;for(D=0;D<A;D+=1)F[D>>2]|=O.charCodeAt(D)<<(D%4<<3);return this._finish(F,A),I=g(this._hash),S&&(I=P(I)),this.reset(),I},k.prototype.reset=function(){return this._buff="",this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},k.prototype.getState=function(){return{buff:this._buff,length:this._length,hash:this._hash.slice()}},k.prototype.setState=function(S){return this._buff=S.buff,this._length=S.length,this._hash=S.hash,this},k.prototype.destroy=function(){delete this._hash,delete this._buff,delete this._length},k.prototype._finish=function(S,O){var A=O,D,F,I;if(S[A>>2]|=128<<(A%4<<3),A>55)for(i(this._hash,S),A=0;A<16;A+=1)S[A]=0;D=this._length*8,D=D.toString(16).match(/(.*?)(.{0,8})$/),F=parseInt(D[2],16),I=parseInt(D[1],16)||0,S[14]=F,S[15]=I,i(this._hash,S)},k.hash=function(S,O){return k.hashBinary(C(S),O)},k.hashBinary=function(S,O){var A=d(S),D=g(A);return O?P(D):D},k.ArrayBuffer=function(){this.reset()},k.ArrayBuffer.prototype.append=function(S){var O=b(this._buff.buffer,S,!0),A=O.length,D;for(this._length+=S.byteLength,D=64;D<=A;D+=64)i(this._hash,s(O.subarray(D-64,D)));return this._buff=D-64<A?new Uint8Array(O.buffer.slice(D-64)):new Uint8Array(0),this},k.ArrayBuffer.prototype.end=function(S){var O=this._buff,A=O.length,D=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],F,I;for(F=0;F<A;F+=1)D[F>>2]|=O[F]<<(F%4<<3);return this._finish(D,A),I=g(this._hash),S&&(I=P(I)),this.reset(),I},k.ArrayBuffer.prototype.reset=function(){return this._buff=new Uint8Array(0),this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},k.ArrayBuffer.prototype.getState=function(){var S=k.prototype.getState.call(this);return S.buff=x(S.buff),S},k.ArrayBuffer.prototype.setState=function(S){return S.buff=M(S.buff,!0),k.prototype.setState.call(this,S)},k.ArrayBuffer.prototype.destroy=k.prototype.destroy,k.ArrayBuffer.prototype._finish=k.prototype._finish,k.ArrayBuffer.hash=function(S,O){var A=p(new Uint8Array(S)),D=g(A);return O?P(D):D},k})});var Jz=al((Qut,by)=>{(function(n,o,e){if(!n)return;for(var t={8:"backspace",9:"tab",13:"enter",16:"shift",17:"ctrl",18:"alt",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"ins",46:"del",91:"meta",93:"meta",224:"meta"},i={106:"*",107:"+",109:"-",110:".",111:"/",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"},a={"~":"`","!":"1","@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=",":":";",'"':"'","<":",",">":".","?":"/","|":"\\"},s={option:"alt",command:"meta",return:"enter",escape:"esc",plus:"+",mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"meta":"ctrl"},d,p=1;p<20;++p)t[111+p]="f"+p;for(p=0;p<=9;++p)t[p+96]=p.toString();function u(I,B,le){if(I.addEventListener){I.addEventListener(B,le,!1);return}I.attachEvent("on"+B,le)}function g(I){if(I.type=="keypress"){var B=String.fromCharCode(I.which);return I.shiftKey||(B=B.toLowerCase()),B}return t[I.which]?t[I.which]:i[I.which]?i[I.which]:String.fromCharCode(I.which).toLowerCase()}function C(I,B){return I.sort().join(",")===B.sort().join(",")}function M(I){var B=[];return I.shiftKey&&B.push("shift"),I.altKey&&B.push("alt"),I.ctrlKey&&B.push("ctrl"),I.metaKey&&B.push("meta"),B}function x(I){if(I.preventDefault){I.preventDefault();return}I.returnValue=!1}function b(I){if(I.stopPropagation){I.stopPropagation();return}I.cancelBubble=!0}function P(I){return I=="shift"||I=="ctrl"||I=="alt"||I=="meta"}function k(){if(!d){d={};for(var I in t)I>95&&I<112||t.hasOwnProperty(I)&&(d[t[I]]=I)}return d}function S(I,B,le){return le||(le=k()[I]?"keydown":"keypress"),le=="keypress"&&B.length&&(le="keydown"),le}function O(I){return I==="+"?["+"]:(I=I.replace(/\+{2}/g,"+plus"),I.split("+"))}function A(I,B){var le,ae,W,G=[];for(le=O(I),W=0;W<le.length;++W)ae=le[W],s[ae]&&(ae=s[ae]),B&&B!="keypress"&&a[ae]&&(ae=a[ae],G.push("shift")),P(ae)&&G.push(ae);return B=S(ae,G,B),{key:ae,modifiers:G,action:B}}function D(I,B){return I===null||I===o?!1:I===B?!0:D(I.parentNode,B)}function F(I){var B=this;if(I=I||o,!(B instanceof F))return new F(I);B.target=I,B._callbacks={},B._directMap={};var le={},ae,W=!1,G=!1,ve=!1;function Se(me){me=me||{};var Ie=!1,$e;for($e in le){if(me[$e]){Ie=!0;continue}le[$e]=0}Ie||(ve=!1)}function pe(me,Ie,$e,tt,et,Me){var Z,Le,Ze=[],dt=$e.type;if(!B._callbacks[me])return[];for(dt=="keyup"&&P(me)&&(Ie=[me]),Z=0;Z<B._callbacks[me].length;++Z)if(Le=B._callbacks[me][Z],!(!tt&&Le.seq&&le[Le.seq]!=Le.level)&&dt==Le.action&&(dt=="keypress"&&!$e.metaKey&&!$e.ctrlKey||C(Ie,Le.modifiers))){var Ot=!tt&&Le.combo==et,si=tt&&Le.seq==tt&&Le.level==Me;(Ot||si)&&B._callbacks[me].splice(Z,1),Ze.push(Le)}return Ze}function Ae(me,Ie,$e,tt){B.stopCallback(Ie,Ie.target||Ie.srcElement,$e,tt)||me(Ie,$e)===!1&&(x(Ie),b(Ie))}B._handleKey=function(me,Ie,$e){var tt=pe(me,Ie,$e),et,Me={},Z=0,Le=!1;for(et=0;et<tt.length;++et)tt[et].seq&&(Z=Math.max(Z,tt[et].level));for(et=0;et<tt.length;++et){if(tt[et].seq){if(tt[et].level!=Z)continue;Le=!0,Me[tt[et].seq]=1,Ae(tt[et].callback,$e,tt[et].combo,tt[et].seq);continue}Le||Ae(tt[et].callback,$e,tt[et].combo)}var Ze=$e.type=="keypress"&&G;$e.type==ve&&!P(me)&&!Ze&&Se(Me),G=Le&&$e.type=="keydown"};function ue(me){typeof me.which!="number"&&(me.which=me.keyCode);var Ie=g(me);if(Ie){if(me.type=="keyup"&&W===Ie){W=!1;return}B.handleKey(Ie,M(me),me)}}function H(){clearTimeout(ae),ae=setTimeout(Se,1e3)}function te(me,Ie,$e,tt){le[me]=0;function et(dt){return function(){ve=dt,++le[me],H()}}function Me(dt){Ae($e,dt,me),tt!=="keyup"&&(W=g(dt)),setTimeout(Se,10)}for(var Z=0;Z<Ie.length;++Z){var Le=Z+1===Ie.length,Ze=Le?Me:et(tt||A(Ie[Z+1]).action);de(Ie[Z],Ze,tt,me,Z)}}function de(me,Ie,$e,tt,et){B._directMap[me+":"+$e]=Ie,me=me.replace(/\s+/g," ");var Me=me.split(" "),Z;if(Me.length>1){te(me,Me,Ie,$e);return}Z=A(me,$e),B._callbacks[Z.key]=B._callbacks[Z.key]||[],pe(Z.key,Z.modifiers,{type:Z.action},tt,me,et),B._callbacks[Z.key][tt?"unshift":"push"]({callback:Ie,modifiers:Z.modifiers,action:Z.action,seq:tt,level:et,combo:me})}B._bindMultiple=function(me,Ie,$e){for(var tt=0;tt<me.length;++tt)de(me[tt],Ie,$e)},u(I,"keypress",ue),u(I,"keydown",ue),u(I,"keyup",ue)}F.prototype.bind=function(I,B,le){var ae=this;return I=I instanceof Array?I:[I],ae._bindMultiple.call(ae,I,B,le),ae},F.prototype.unbind=function(I,B){var le=this;return le.bind.call(le,I,function(){},B)},F.prototype.trigger=function(I,B){var le=this;return le._directMap[I+":"+B]&&le._directMap[I+":"+B]({},I),le},F.prototype.reset=function(){var I=this;return I._callbacks={},I._directMap={},I},F.prototype.stopCallback=function(I,B){var le=this;if((" "+B.className+" ").indexOf(" mousetrap ")>-1||D(B,le.target))return!1;if("composedPath"in I&&typeof I.composedPath=="function"){var ae=I.composedPath()[0];ae!==I.target&&(B=ae)}return B.tagName=="INPUT"||B.tagName=="SELECT"||B.tagName=="TEXTAREA"||B.isContentEditable},F.prototype.handleKey=function(){var I=this;return I._handleKey.apply(I,arguments)},F.addKeycodes=function(I){for(var B in I)I.hasOwnProperty(B)&&(t[B]=I[B]);d=null},F.init=function(){var I=F(o);for(var B in I)B.charAt(0)!=="_"&&(F[B]=(function(le){return function(){return I[le].apply(I,arguments)}})(B))},F.init(),n.Mousetrap=F,typeof by<"u"&&by.exports&&(by.exports=F),typeof define=="function"&&define.amd&&define(function(){return F})})(typeof window<"u"?window:null,typeof window<"u"?document:null)});var s7=al(cO=>{var r7="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");cO.encode=function(n){if(0<=n&&n<r7.length)return r7[n];throw new TypeError("Must be between 0 and 63: "+n)};cO.decode=function(n){var o=65,e=90,t=97,i=122,a=48,s=57,d=43,p=47,u=26,g=52;return o<=n&&n<=e?n-o:t<=n&&n<=i?n-t+u:a<=n&&n<=s?n-a+g:n==d?62:n==p?63:-1}});var p7=al(mO=>{var l7=s7(),dO=5,c7=1<<dO,d7=c7-1,m7=c7;function Uhe(n){return n<0?(-n<<1)+1:(n<<1)+0}function Whe(n){var o=(n&1)===1,e=n>>1;return o?-e:e}mO.encode=function(o){var e="",t,i=Uhe(o);do t=i&d7,i>>>=dO,i>0&&(t|=m7),e+=l7.encode(t);while(i>0);return e};mO.decode=function(o,e,t){var i=o.length,a=0,s=0,d,p;do{if(e>=i)throw new Error("Expected more digits in base 64 VLQ value.");if(p=l7.decode(o.charCodeAt(e++)),p===-1)throw new Error("Invalid base64 digit: "+o.charAt(e-1));d=!!(p&m7),p&=d7,a=a+(p<<s),s+=dO}while(d);t.value=Whe(a),t.rest=e}});var By=al(cr=>{function Ghe(n,o,e){if(o in n)return n[o];if(arguments.length===3)return e;throw new Error('"'+o+'" is a required argument.')}cr.getArg=Ghe;var u7=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/,qhe=/^data:.+\,.+$/;function Ev(n){var o=n.match(u7);return o?{scheme:o[1],auth:o[2],host:o[3],port:o[4],path:o[5]}:null}cr.urlParse=Ev;function Rh(n){var o="";return n.scheme&&(o+=n.scheme+":"),o+="//",n.auth&&(o+=n.auth+"@"),n.host&&(o+=n.host),n.port&&(o+=":"+n.port),n.path&&(o+=n.path),o}cr.urlGenerate=Rh;var Qhe=32;function Khe(n){var o=[];return function(e){for(var t=0;t<o.length;t++)if(o[t].input===e){var i=o[0];return o[0]=o[t],o[t]=i,o[0].result}var a=n(e);return o.unshift({input:e,result:a}),o.length>Qhe&&o.pop(),a}}var pO=Khe(function(o){var e=o,t=Ev(o);if(t){if(!t.path)return o;e=t.path}for(var i=cr.isAbsolute(e),a=[],s=0,d=0;;)if(s=d,d=e.indexOf("/",s),d===-1){a.push(e.slice(s));break}else for(a.push(e.slice(s,d));d<e.length&&e[d]==="/";)d++;for(var p,u=0,d=a.length-1;d>=0;d--)p=a[d],p==="."?a.splice(d,1):p===".."?u++:u>0&&(p===""?(a.splice(d+1,u),u=0):(a.splice(d,2),u--));return e=a.join("/"),e===""&&(e=i?"/":"."),t?(t.path=e,Rh(t)):e});cr.normalize=pO;function g7(n,o){n===""&&(n="."),o===""&&(o=".");var e=Ev(o),t=Ev(n);if(t&&(n=t.path||"/"),e&&!e.scheme)return t&&(e.scheme=t.scheme),Rh(e);if(e||o.match(qhe))return o;if(t&&!t.host&&!t.path)return t.host=o,Rh(t);var i=o.charAt(0)==="/"?o:pO(n.replace(/\/+$/,"")+"/"+o);return t?(t.path=i,Rh(t)):i}cr.join=g7;cr.isAbsolute=function(n){return n.charAt(0)==="/"||u7.test(n)};function Xhe(n,o){n===""&&(n="."),n=n.replace(/\/$/,"");for(var e=0;o.indexOf(n+"/")!==0;){var t=n.lastIndexOf("/");if(t<0||(n=n.slice(0,t),n.match(/^([^\/]+:\/)?\/*$/)))return o;++e}return Array(e+1).join("../")+o.substr(n.length+1)}cr.relative=Xhe;var h7=(function(){var n=Object.create(null);return!("__proto__"in n)})();function _7(n){return n}function Yhe(n){return f7(n)?"$"+n:n}cr.toSetString=h7?_7:Yhe;function Zhe(n){return f7(n)?n.slice(1):n}cr.fromSetString=h7?_7:Zhe;function f7(n){if(!n)return!1;var o=n.length;if(o<9||n.charCodeAt(o-1)!==95||n.charCodeAt(o-2)!==95||n.charCodeAt(o-3)!==111||n.charCodeAt(o-4)!==116||n.charCodeAt(o-5)!==111||n.charCodeAt(o-6)!==114||n.charCodeAt(o-7)!==112||n.charCodeAt(o-8)!==95||n.charCodeAt(o-9)!==95)return!1;for(var e=o-10;e>=0;e--)if(n.charCodeAt(e)!==36)return!1;return!0}function Jhe(n,o,e){var t=Xd(n.source,o.source);return t!==0||(t=n.originalLine-o.originalLine,t!==0)||(t=n.originalColumn-o.originalColumn,t!==0||e)||(t=n.generatedColumn-o.generatedColumn,t!==0)||(t=n.generatedLine-o.generatedLine,t!==0)?t:Xd(n.name,o.name)}cr.compareByOriginalPositions=Jhe;function e_e(n,o,e){var t;return t=n.originalLine-o.originalLine,t!==0||(t=n.originalColumn-o.originalColumn,t!==0||e)||(t=n.generatedColumn-o.generatedColumn,t!==0)||(t=n.generatedLine-o.generatedLine,t!==0)?t:Xd(n.name,o.name)}cr.compareByOriginalPositionsNoSource=e_e;function t_e(n,o,e){var t=n.generatedLine-o.generatedLine;return t!==0||(t=n.generatedColumn-o.generatedColumn,t!==0||e)||(t=Xd(n.source,o.source),t!==0)||(t=n.originalLine-o.originalLine,t!==0)||(t=n.originalColumn-o.originalColumn,t!==0)?t:Xd(n.name,o.name)}cr.compareByGeneratedPositionsDeflated=t_e;function n_e(n,o,e){var t=n.generatedColumn-o.generatedColumn;return t!==0||e||(t=Xd(n.source,o.source),t!==0)||(t=n.originalLine-o.originalLine,t!==0)||(t=n.originalColumn-o.originalColumn,t!==0)?t:Xd(n.name,o.name)}cr.compareByGeneratedPositionsDeflatedNoLine=n_e;function Xd(n,o){return n===o?0:n===null?1:o===null?-1:n>o?1:-1}function i_e(n,o){var e=n.generatedLine-o.generatedLine;return e!==0||(e=n.generatedColumn-o.generatedColumn,e!==0)||(e=Xd(n.source,o.source),e!==0)||(e=n.originalLine-o.originalLine,e!==0)||(e=n.originalColumn-o.originalColumn,e!==0)?e:Xd(n.name,o.name)}cr.compareByGeneratedPositionsInflated=i_e;function o_e(n){return JSON.parse(n.replace(/^\)]}'[^\n]*\n/,""))}cr.parseSourceMapInput=o_e;function a_e(n,o,e){if(o=o||"",n&&(n[n.length-1]!=="/"&&o[0]!=="/"&&(n+="/"),o=n+o),e){var t=Ev(e);if(!t)throw new Error("sourceMapURL could not be parsed");if(t.path){var i=t.path.lastIndexOf("/");i>=0&&(t.path=t.path.substring(0,i+1))}o=g7(Rh(t),o)}return pO(o)}cr.computeSourceURL=a_e});var C7=al(v7=>{var uO=By(),gO=Object.prototype.hasOwnProperty,Nu=typeof Map<"u";function Yd(){this._array=[],this._set=Nu?new Map:Object.create(null)}Yd.fromArray=function(o,e){for(var t=new Yd,i=0,a=o.length;i<a;i++)t.add(o[i],e);return t};Yd.prototype.size=function(){return Nu?this._set.size:Object.getOwnPropertyNames(this._set).length};Yd.prototype.add=function(o,e){var t=Nu?o:uO.toSetString(o),i=Nu?this.has(o):gO.call(this._set,t),a=this._array.length;(!i||e)&&this._array.push(o),i||(Nu?this._set.set(o,a):this._set[t]=a)};Yd.prototype.has=function(o){if(Nu)return this._set.has(o);var e=uO.toSetString(o);return gO.call(this._set,e)};Yd.prototype.indexOf=function(o){if(Nu){var e=this._set.get(o);if(e>=0)return e}else{var t=uO.toSetString(o);if(gO.call(this._set,t))return this._set[t]}throw new Error('"'+o+'" is not in the set.')};Yd.prototype.at=function(o){if(o>=0&&o<this._array.length)return this._array[o];throw new Error("No element indexed by "+o)};Yd.prototype.toArray=function(){return this._array.slice()};v7.ArraySet=Yd});var y7=al(x7=>{var b7=By();function r_e(n,o){var e=n.generatedLine,t=o.generatedLine,i=n.generatedColumn,a=o.generatedColumn;return t>e||t==e&&a>=i||b7.compareByGeneratedPositionsInflated(n,o)<=0}function jy(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}jy.prototype.unsortedForEach=function(o,e){this._array.forEach(o,e)};jy.prototype.add=function(o){r_e(this._last,o)?(this._last=o,this._array.push(o)):(this._sorted=!1,this._array.push(o))};jy.prototype.toArray=function(){return this._sorted||(this._array.sort(b7.compareByGeneratedPositionsInflated),this._sorted=!0),this._array};x7.MappingList=jy});var M7=al(w7=>{var Ov=p7(),Sa=By(),$y=C7().ArraySet,s_e=y7().MappingList;function Bl(n){n||(n={}),this._file=Sa.getArg(n,"file",null),this._sourceRoot=Sa.getArg(n,"sourceRoot",null),this._skipValidation=Sa.getArg(n,"skipValidation",!1),this._ignoreInvalidMapping=Sa.getArg(n,"ignoreInvalidMapping",!1),this._sources=new $y,this._names=new $y,this._mappings=new s_e,this._sourcesContents=null}Bl.prototype._version=3;Bl.fromSourceMap=function(o,e){var t=o.sourceRoot,i=new Bl(Object.assign(e||{},{file:o.file,sourceRoot:t}));return o.eachMapping(function(a){var s={generated:{line:a.generatedLine,column:a.generatedColumn}};a.source!=null&&(s.source=a.source,t!=null&&(s.source=Sa.relative(t,s.source)),s.original={line:a.originalLine,column:a.originalColumn},a.name!=null&&(s.name=a.name)),i.addMapping(s)}),o.sources.forEach(function(a){var s=a;t!==null&&(s=Sa.relative(t,a)),i._sources.has(s)||i._sources.add(s);var d=o.sourceContentFor(a);d!=null&&i.setSourceContent(a,d)}),i};Bl.prototype.addMapping=function(o){var e=Sa.getArg(o,"generated"),t=Sa.getArg(o,"original",null),i=Sa.getArg(o,"source",null),a=Sa.getArg(o,"name",null);!this._skipValidation&&this._validateMapping(e,t,i,a)===!1||(i!=null&&(i=String(i),this._sources.has(i)||this._sources.add(i)),a!=null&&(a=String(a),this._names.has(a)||this._names.add(a)),this._mappings.add({generatedLine:e.line,generatedColumn:e.column,originalLine:t!=null&&t.line,originalColumn:t!=null&&t.column,source:i,name:a}))};Bl.prototype.setSourceContent=function(o,e){var t=o;this._sourceRoot!=null&&(t=Sa.relative(this._sourceRoot,t)),e!=null?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[Sa.toSetString(t)]=e):this._sourcesContents&&(delete this._sourcesContents[Sa.toSetString(t)],Object.keys(this._sourcesContents).length===0&&(this._sourcesContents=null))};Bl.prototype.applySourceMap=function(o,e,t){var i=e;if(e==null){if(o.file==null)throw new Error(`SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map's "file" property. Both were omitted.`);i=o.file}var a=this._sourceRoot;a!=null&&(i=Sa.relative(a,i));var s=new $y,d=new $y;this._mappings.unsortedForEach(function(p){if(p.source===i&&p.originalLine!=null){var u=o.originalPositionFor({line:p.originalLine,column:p.originalColumn});u.source!=null&&(p.source=u.source,t!=null&&(p.source=Sa.join(t,p.source)),a!=null&&(p.source=Sa.relative(a,p.source)),p.originalLine=u.line,p.originalColumn=u.column,u.name!=null&&(p.name=u.name))}var g=p.source;g!=null&&!s.has(g)&&s.add(g);var C=p.name;C!=null&&!d.has(C)&&d.add(C)},this),this._sources=s,this._names=d,o.sources.forEach(function(p){var u=o.sourceContentFor(p);u!=null&&(t!=null&&(p=Sa.join(t,p)),a!=null&&(p=Sa.relative(a,p)),this.setSourceContent(p,u))},this)};Bl.prototype._validateMapping=function(o,e,t,i){if(e&&typeof e.line!="number"&&typeof e.column!="number"){var a="original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.";if(this._ignoreInvalidMapping)return typeof console<"u"&&console.warn&&console.warn(a),!1;throw new Error(a)}if(!(o&&"line"in o&&"column"in o&&o.line>0&&o.column>=0&&!e&&!t&&!i)){if(o&&"line"in o&&"column"in o&&e&&"line"in e&&"column"in e&&o.line>0&&o.column>=0&&e.line>0&&e.column>=0&&t)return;var a="Invalid mapping: "+JSON.stringify({generated:o,source:t,original:e,name:i});if(this._ignoreInvalidMapping)return typeof console<"u"&&console.warn&&console.warn(a),!1;throw new Error(a)}};Bl.prototype._serializeMappings=function(){for(var o=0,e=1,t=0,i=0,a=0,s=0,d="",p,u,g,C,M=this._mappings.toArray(),x=0,b=M.length;x<b;x++){if(u=M[x],p="",u.generatedLine!==e){o=0;var P=u.generatedLine-e;p+=P===1?";":";".repeat(P),e=u.generatedLine}else if(x>0){if(!Sa.compareByGeneratedPositionsInflated(u,M[x-1]))continue;p+=","}p+=Ov.encode(u.generatedColumn-o),o=u.generatedColumn,u.source!=null&&(C=this._sources.indexOf(u.source),p+=Ov.encode(C-s),s=C,p+=Ov.encode(u.originalLine-1-i),i=u.originalLine-1,p+=Ov.encode(u.originalColumn-t),t=u.originalColumn,u.name!=null&&(g=this._names.indexOf(u.name),p+=Ov.encode(g-a),a=g)),d+=p}return d};Bl.prototype._generateSourcesContent=function(o,e){return o.map(function(t){if(!this._sourcesContents)return null;e!=null&&(t=Sa.relative(e,t));var i=Sa.toSetString(t);return Object.prototype.hasOwnProperty.call(this._sourcesContents,i)?this._sourcesContents[i]:null},this)};Bl.prototype.toJSON=function(){var o={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return this._file!=null&&(o.file=this._file),this._sourceRoot!=null&&(o.sourceRoot=this._sourceRoot),this._sourcesContents&&(o.sourcesContent=this._generateSourcesContent(o.sources,o.sourceRoot)),o};Bl.prototype.toString=function(){return JSON.stringify(this.toJSON())};w7.SourceMapGenerator=Bl});var HM=al((nj,$M)=>{(function(n){"use strict";let o="(0?\\d+|0x[a-f0-9]+)",e={fourOctet:new RegExp(`^${o}\\.${o}\\.${o}\\.${o}$`,"i"),threeOctet:new RegExp(`^${o}\\.${o}\\.${o}$`,"i"),twoOctet:new RegExp(`^${o}\\.${o}$`,"i"),longValue:new RegExp(`^${o}$`,"i")},t=new RegExp("^0[0-7]+$","i"),i=new RegExp("^0x[a-f0-9]+$","i"),a="%[0-9a-z]{1,}",s="(?:[0-9a-f]+::?)+",d={zoneIndex:new RegExp(a,"i"),native:new RegExp(`^(::)?(${s})?([0-9a-f]+)?(::)?(${a})?$`,"i"),deprecatedTransitional:new RegExp(`^(?:::)(${o}\\.${o}\\.${o}\\.${o}(${a})?)$`,"i"),transitional:new RegExp(`^((?:${s})|(?:::)(?:${s})?)${o}\\.${o}\\.${o}\\.${o}(${a})?$`,"i")};function p(x,b){if(x.indexOf("::")!==x.lastIndexOf("::"))return null;let P=0,k=-1,S=(x.match(d.zoneIndex)||[])[0],O,A;for(S&&(S=S.substring(1),x=x.replace(/%.+$/,""));(k=x.indexOf(":",k+1))>=0;)P++;if(x.substr(0,2)==="::"&&P--,x.substr(-2,2)==="::"&&P--,P>b)return null;for(A=b-P,O=":";A--;)O+="0:";return x=x.replace("::",O),x[0]===":"&&(x=x.slice(1)),x[x.length-1]===":"&&(x=x.slice(0,-1)),b=(function(){let D=x.split(":"),F=[];for(let I=0;I<D.length;I++)F.push(parseInt(D[I],16));return F})(),{parts:b,zoneId:S}}function u(x,b,P,k){if(x.length!==b.length)throw new Error("ipaddr: cannot match CIDR for objects with different lengths");let S=0,O;for(;k>0;){if(O=P-k,O<0&&(O=0),x[S]>>O!==b[S]>>O)return!1;k-=P,S+=1}return!0}function g(x){if(i.test(x))return parseInt(x,16);if(x[0]==="0"&&!isNaN(parseInt(x[1],10))){if(t.test(x))return parseInt(x,8);throw new Error(`ipaddr: cannot parse ${x} as octal`)}return parseInt(x,10)}function C(x,b){for(;x.length<b;)x=`0${x}`;return x}let M={};M.IPv4=(function(){function x(b){if(b.length!==4)throw new Error("ipaddr: ipv4 octet count should be 4");let P,k;for(P=0;P<b.length;P++)if(k=b[P],!(0<=k&&k<=255))throw new Error("ipaddr: ipv4 octet should fit in 8 bits");this.octets=b}return x.prototype.SpecialRanges={unspecified:[[new x([0,0,0,0]),8]],broadcast:[[new x([255,255,255,255]),32]],multicast:[[new x([224,0,0,0]),4]],linkLocal:[[new x([169,254,0,0]),16]],loopback:[[new x([127,0,0,0]),8]],carrierGradeNat:[[new x([100,64,0,0]),10]],private:[[new x([10,0,0,0]),8],[new x([172,16,0,0]),12],[new x([192,168,0,0]),16]],reserved:[[new x([192,0,0,0]),24],[new x([192,0,2,0]),24],[new x([192,88,99,0]),24],[new x([198,18,0,0]),15],[new x([198,51,100,0]),24],[new x([203,0,113,0]),24],[new x([240,0,0,0]),4]],as112:[[new x([192,175,48,0]),24],[new x([192,31,196,0]),24]],amt:[[new x([192,52,193,0]),24]]},x.prototype.kind=function(){return"ipv4"},x.prototype.match=function(b,P){let k;if(P===void 0&&(k=b,b=k[0],P=k[1]),b.kind()!=="ipv4")throw new Error("ipaddr: cannot match ipv4 address with non-ipv4 one");return u(this.octets,b.octets,8,P)},x.prototype.prefixLengthFromSubnetMask=function(){let b=0,P=!1,k={0:8,128:7,192:6,224:5,240:4,248:3,252:2,254:1,255:0},S,O,A;for(S=3;S>=0;S-=1)if(O=this.octets[S],O in k){if(A=k[O],P&&A!==0)return null;A!==8&&(P=!0),b+=A}else return null;return 32-b},x.prototype.range=function(){return M.subnetMatch(this,this.SpecialRanges)},x.prototype.toByteArray=function(){return this.octets.slice(0)},x.prototype.toIPv4MappedAddress=function(){return M.IPv6.parse(`::ffff:${this.toString()}`)},x.prototype.toNormalizedString=function(){return this.toString()},x.prototype.toString=function(){return this.octets.join(".")},x})(),M.IPv4.broadcastAddressFromCIDR=function(x){try{let b=this.parseCIDR(x),P=b[0].toByteArray(),k=this.subnetMaskFromPrefixLength(b[1]).toByteArray(),S=[],O=0;for(;O<4;)S.push(parseInt(P[O],10)|parseInt(k[O],10)^255),O++;return new this(S)}catch{throw new Error("ipaddr: the address does not have IPv4 CIDR format")}},M.IPv4.isIPv4=function(x){return this.parser(x)!==null},M.IPv4.isValid=function(x){try{return new this(this.parser(x)),!0}catch{return!1}},M.IPv4.isValidCIDR=function(x){try{return this.parseCIDR(x),!0}catch{return!1}},M.IPv4.isValidFourPartDecimal=function(x){return!!(M.IPv4.isValid(x)&&x.match(/^(0|[1-9]\d*)(\.(0|[1-9]\d*)){3}$/))},M.IPv4.isValidCIDRFourPartDecimal=function(x){let b=x.match(/^(.+)\/(\d+)$/);return!M.IPv4.isValidCIDR(x)||!b?!1:M.IPv4.isValidFourPartDecimal(b[1])},M.IPv4.networkAddressFromCIDR=function(x){let b,P,k,S,O;try{for(b=this.parseCIDR(x),k=b[0].toByteArray(),O=this.subnetMaskFromPrefixLength(b[1]).toByteArray(),S=[],P=0;P<4;)S.push(parseInt(k[P],10)&parseInt(O[P],10)),P++;return new this(S)}catch{throw new Error("ipaddr: the address does not have IPv4 CIDR format")}},M.IPv4.parse=function(x){let b=this.parser(x);if(b===null)throw new Error("ipaddr: string is not formatted like an IPv4 Address");return new this(b)},M.IPv4.parseCIDR=function(x){let b;if(b=x.match(/^(.+)\/(\d+)$/)){let P=parseInt(b[2]);if(P>=0&&P<=32){let k=[this.parse(b[1]),P];return Object.defineProperty(k,"toString",{value:function(){return this.join("/")}}),k}}throw new Error("ipaddr: string is not formatted like an IPv4 CIDR range")},M.IPv4.parser=function(x){let b,P,k;if(b=x.match(e.fourOctet))return(function(){let S=b.slice(1,6),O=[];for(let A=0;A<S.length;A++)P=S[A],O.push(g(P));return O})();if(b=x.match(e.longValue)){if(k=g(b[1]),k>4294967295||k<0)throw new Error("ipaddr: address outside defined range");return(function(){let S=[],O;for(O=0;O<=24;O+=8)S.push(k>>O&255);return S})().reverse()}else return(b=x.match(e.twoOctet))?(function(){let S=b.slice(1,4),O=[];if(k=g(S[1]),k>16777215||k<0)throw new Error("ipaddr: address outside defined range");return O.push(g(S[0])),O.push(k>>16&255),O.push(k>>8&255),O.push(k&255),O})():(b=x.match(e.threeOctet))?(function(){let S=b.slice(1,5),O=[];if(k=g(S[2]),k>65535||k<0)throw new Error("ipaddr: address outside defined range");return O.push(g(S[0])),O.push(g(S[1])),O.push(k>>8&255),O.push(k&255),O})():null},M.IPv4.subnetMaskFromPrefixLength=function(x){if(x=parseInt(x),x<0||x>32)throw new Error("ipaddr: invalid IPv4 prefix length");let b=[0,0,0,0],P=0,k=Math.floor(x/8);for(;P<k;)b[P]=255,P++;return k<4&&(b[k]=Math.pow(2,x%8)-1<<8-x%8),new this(b)},M.IPv6=(function(){function x(b,P){let k,S;if(b.length===16)for(this.parts=[],k=0;k<=14;k+=2)this.parts.push(b[k]<<8|b[k+1]);else if(b.length===8)this.parts=b;else throw new Error("ipaddr: ipv6 part count should be 8 or 16");for(k=0;k<this.parts.length;k++)if(S=this.parts[k],!(0<=S&&S<=65535))throw new Error("ipaddr: ipv6 part should fit in 16 bits");P&&(this.zoneId=P)}return x.prototype.SpecialRanges={unspecified:[new x([0,0,0,0,0,0,0,0]),128],linkLocal:[new x([65152,0,0,0,0,0,0,0]),10],multicast:[new x([65280,0,0,0,0,0,0,0]),8],loopback:[new x([0,0,0,0,0,0,0,1]),128],uniqueLocal:[new x([64512,0,0,0,0,0,0,0]),7],ipv4Mapped:[new x([0,0,0,0,0,65535,0,0]),96],discard:[new x([256,0,0,0,0,0,0,0]),64],rfc6145:[new x([0,0,0,0,65535,0,0,0]),96],rfc6052:[new x([100,65435,0,0,0,0,0,0]),96],"6to4":[new x([8194,0,0,0,0,0,0,0]),16],teredo:[new x([8193,0,0,0,0,0,0,0]),32],benchmarking:[new x([8193,2,0,0,0,0,0,0]),48],amt:[new x([8193,3,0,0,0,0,0,0]),32],as112v6:[[new x([8193,4,274,0,0,0,0,0]),48],[new x([9760,79,32768,0,0,0,0,0]),48]],deprecated:[new x([8193,16,0,0,0,0,0,0]),28],orchid2:[new x([8193,32,0,0,0,0,0,0]),28],droneRemoteIdProtocolEntityTags:[new x([8193,48,0,0,0,0,0,0]),28],reserved:[[new x([8193,0,0,0,0,0,0,0]),23],[new x([8193,3512,0,0,0,0,0,0]),32]]},x.prototype.isIPv4MappedAddress=function(){return this.range()==="ipv4Mapped"},x.prototype.kind=function(){return"ipv6"},x.prototype.match=function(b,P){let k;if(P===void 0&&(k=b,b=k[0],P=k[1]),b.kind()!=="ipv6")throw new Error("ipaddr: cannot match ipv6 address with non-ipv6 one");return u(this.parts,b.parts,16,P)},x.prototype.prefixLengthFromSubnetMask=function(){let b=0,P=!1,k={0:16,32768:15,49152:14,57344:13,61440:12,63488:11,64512:10,65024:9,65280:8,65408:7,65472:6,65504:5,65520:4,65528:3,65532:2,65534:1,65535:0},S,O;for(let A=7;A>=0;A-=1)if(S=this.parts[A],S in k){if(O=k[S],P&&O!==0)return null;O!==16&&(P=!0),b+=O}else return null;return 128-b},x.prototype.range=function(){return M.subnetMatch(this,this.SpecialRanges)},x.prototype.toByteArray=function(){let b,P=[],k=this.parts;for(let S=0;S<k.length;S++)b=k[S],P.push(b>>8),P.push(b&255);return P},x.prototype.toFixedLengthString=function(){let b=function(){let k=[];for(let S=0;S<this.parts.length;S++)k.push(C(this.parts[S].toString(16),4));return k}.call(this).join(":"),P="";return this.zoneId&&(P=`%${this.zoneId}`),b+P},x.prototype.toIPv4Address=function(){if(!this.isIPv4MappedAddress())throw new Error("ipaddr: trying to convert a generic ipv6 address to ipv4");let b=this.parts.slice(-2),P=b[0],k=b[1];return new M.IPv4([P>>8,P&255,k>>8,k&255])},x.prototype.toNormalizedString=function(){let b=function(){let k=[];for(let S=0;S<this.parts.length;S++)k.push(this.parts[S].toString(16));return k}.call(this).join(":"),P="";return this.zoneId&&(P=`%${this.zoneId}`),b+P},x.prototype.toRFC5952String=function(){let b=/((^|:)(0(:|$)){2,})/g,P=this.toNormalizedString(),k=0,S=-1,O;for(;O=b.exec(P);)O[0].length>S&&(k=O.index,S=O[0].length);return S<0?P:`${P.substring(0,k)}::${P.substring(k+S)}`},x.prototype.toString=function(){return this.toRFC5952String()},x})(),M.IPv6.broadcastAddressFromCIDR=function(x){try{let b=this.parseCIDR(x),P=b[0].toByteArray(),k=this.subnetMaskFromPrefixLength(b[1]).toByteArray(),S=[],O=0;for(;O<16;)S.push(parseInt(P[O],10)|parseInt(k[O],10)^255),O++;return new this(S)}catch(b){throw new Error(`ipaddr: the address does not have IPv6 CIDR format (${b})`)}},M.IPv6.isIPv6=function(x){return this.parser(x)!==null},M.IPv6.isValid=function(x){if(typeof x=="string"&&x.indexOf(":")===-1)return!1;try{let b=this.parser(x);return new this(b.parts,b.zoneId),!0}catch{return!1}},M.IPv6.isValidCIDR=function(x){if(typeof x=="string"&&x.indexOf(":")===-1)return!1;try{return this.parseCIDR(x),!0}catch{return!1}},M.IPv6.networkAddressFromCIDR=function(x){let b,P,k,S,O;try{for(b=this.parseCIDR(x),k=b[0].toByteArray(),O=this.subnetMaskFromPrefixLength(b[1]).toByteArray(),S=[],P=0;P<16;)S.push(parseInt(k[P],10)&parseInt(O[P],10)),P++;return new this(S)}catch(A){throw new Error(`ipaddr: the address does not have IPv6 CIDR format (${A})`)}},M.IPv6.parse=function(x){let b=this.parser(x);if(b.parts===null)throw new Error("ipaddr: string is not formatted like an IPv6 Address");return new this(b.parts,b.zoneId)},M.IPv6.parseCIDR=function(x){let b,P,k;if((P=x.match(/^(.+)\/(\d+)$/))&&(b=parseInt(P[2]),b>=0&&b<=128))return k=[this.parse(P[1]),b],Object.defineProperty(k,"toString",{value:function(){return this.join("/")}}),k;throw new Error("ipaddr: string is not formatted like an IPv6 CIDR range")},M.IPv6.parser=function(x){let b,P,k,S,O,A;if(k=x.match(d.deprecatedTransitional))return this.parser(`::ffff:${k[1]}`);if(d.native.test(x))return p(x,8);if((k=x.match(d.transitional))&&(A=k[6]||"",b=k[1],k[1].endsWith("::")||(b=b.slice(0,-1)),b=p(b+A,6),b.parts)){for(O=[parseInt(k[2]),parseInt(k[3]),parseInt(k[4]),parseInt(k[5])],P=0;P<O.length;P++)if(S=O[P],!(0<=S&&S<=255))return null;return b.parts.push(O[0]<<8|O[1]),b.parts.push(O[2]<<8|O[3]),{parts:b.parts,zoneId:b.zoneId}}return null},M.IPv6.subnetMaskFromPrefixLength=function(x){if(x=parseInt(x),x<0||x>128)throw new Error("ipaddr: invalid IPv6 prefix length");let b=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],P=0,k=Math.floor(x/8);for(;P<k;)b[P]=255,P++;return k<16&&(b[k]=Math.pow(2,x%8)-1<<8-x%8),new this(b)},M.fromByteArray=function(x){let b=x.length;if(b===4)return new M.IPv4(x);if(b===16)return new M.IPv6(x);throw new Error("ipaddr: the binary input is neither an IPv6 nor IPv4 address")},M.isValid=function(x){return M.IPv6.isValid(x)||M.IPv4.isValid(x)},M.isValidCIDR=function(x){return M.IPv6.isValidCIDR(x)||M.IPv4.isValidCIDR(x)},M.parse=function(x){if(M.IPv6.isValid(x))return M.IPv6.parse(x);if(M.IPv4.isValid(x))return M.IPv4.parse(x);throw new Error("ipaddr: the address has neither IPv6 nor IPv4 format")},M.parseCIDR=function(x){try{return M.IPv6.parseCIDR(x)}catch{try{return M.IPv4.parseCIDR(x)}catch{throw new Error("ipaddr: the address has neither IPv6 nor IPv4 CIDR format")}}},M.process=function(x){let b=this.parse(x);return b.kind()==="ipv6"&&b.isIPv4MappedAddress()?b.toIPv4Address():b},M.subnetMatch=function(x,b,P){let k,S,O,A;P==null&&(P="unicast");for(S in b)if(Object.prototype.hasOwnProperty.call(b,S)){for(O=b[S],O[0]&&!(O[0]instanceof Array)&&(O=[O]),k=0;k<O.length;k++)if(A=O[k],x.kind()===A[0].kind()&&x.match.apply(x,A))return S}return P},typeof $M<"u"&&$M.exports?$M.exports=M:n.ipaddr=M})(nj)});var Pj=al(S4=>{"use strict";(function(){var n=typeof S4<"u"&&S4||typeof define<"u"&&{}||this||window;typeof define<"u"&&define("save-svg-as-png",[],function(){return n}),n.default=n;var o="http://www.w3.org/2000/xmlns/",e="http://www.w3.org/1999/xhtml",t="http://www.w3.org/2000/svg",i='<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [<!ENTITY nbsp " ">]>',a=/url\(["']?(.+?)["']?\)/,s={woff2:"font/woff2",woff:"font/woff",otf:"application/x-font-opentype",ttf:"application/x-font-ttf",eot:"application/vnd.ms-fontobject",sfnt:"application/font-sfnt",svg:"image/svg+xml"},d=function(G){return G instanceof HTMLElement||G instanceof SVGElement},p=function(G){if(!d(G))throw new Error("an HTMLElement or SVGElement is required; got "+G)},u=function(G){return new Promise(function(ve,Se){d(G)?ve(G):Se(new Error("an HTMLElement or SVGElement is required; got "+G))})},g=function(G){return G&&G.lastIndexOf("http",0)===0&&G.lastIndexOf(window.location.host)===-1},C=function(G){var ve=Object.keys(s).filter(function(Se){return G.indexOf("."+Se)>0}).map(function(Se){return s[Se]});return ve?ve[0]:(console.error("Unknown font format for "+G+". Fonts may not be working correctly."),"application/octet-stream")},M=function(G){for(var ve="",Se=new Uint8Array(G),pe=0;pe<Se.byteLength;pe++)ve+=String.fromCharCode(Se[pe]);return window.btoa(ve)},x=function(G,ve,Se){var pe=G.viewBox&&G.viewBox.baseVal&&G.viewBox.baseVal[Se]||ve.getAttribute(Se)!==null&&!ve.getAttribute(Se).match(/%$/)&&parseInt(ve.getAttribute(Se))||G.getBoundingClientRect()[Se]||parseInt(ve.style[Se])||parseInt(window.getComputedStyle(G).getPropertyValue(Se));return typeof pe>"u"||pe===null||isNaN(parseFloat(pe))?0:pe},b=function(G,ve,Se,pe){if(G.tagName==="svg")return{width:Se||x(G,ve,"width"),height:pe||x(G,ve,"height")};if(G.getBBox){var Ae=G.getBBox(),ue=Ae.x,H=Ae.y,te=Ae.width,de=Ae.height;return{width:ue+te,height:H+de}}},P=function(G){return decodeURIComponent(encodeURIComponent(G).replace(/%([0-9A-F]{2})/g,function(ve,Se){var pe=String.fromCharCode("0x"+Se);return pe==="%"?"%25":pe}))},k=function(G){for(var ve=window.atob(G.split(",")[1]),Se=G.split(",")[0].split(":")[1].split(";")[0],pe=new ArrayBuffer(ve.length),Ae=new Uint8Array(pe),ue=0;ue<ve.length;ue++)Ae[ue]=ve.charCodeAt(ue);return new Blob([pe],{type:Se})},S=function(G,ve){if(ve)try{return G.querySelector(ve)||G.parentNode&&G.parentNode.querySelector(ve)}catch(Se){console.warn('Invalid CSS selector "'+ve+'"',Se)}},O=function(G,ve){var Se=G.cssText.match(a),pe=Se&&Se[1]||"";if(!(!pe||pe.match(/^data:/)||pe==="about:blank")){var Ae=pe.startsWith("../")?ve+"/../"+pe:pe.startsWith("./")?ve+"/."+pe:pe;return{text:G.cssText,format:C(Ae),url:Ae}}},A=function(G){return Promise.all(Array.from(G.querySelectorAll("image")).map(function(ve){var Se=ve.getAttributeNS("http://www.w3.org/1999/xlink","href")||ve.getAttribute("href");return Se?(g(Se)&&(Se+=(Se.indexOf("?")===-1?"?":"&")+"t="+new Date().valueOf()),new Promise(function(pe,Ae){var ue=document.createElement("canvas"),H=new Image;H.crossOrigin="anonymous",H.src=Se,H.onerror=function(){return Ae(new Error("Could not load "+Se))},H.onload=function(){ue.width=H.width,ue.height=H.height,ue.getContext("2d").drawImage(H,0,0),ve.setAttributeNS("http://www.w3.org/1999/xlink","href",ue.toDataURL("image/png")),pe(!0)}})):Promise.resolve(null)}))},D={},F=function(G){return Promise.all(G.map(function(ve){return new Promise(function(Se,pe){if(D[ve.url])return Se(D[ve.url]);var Ae=new XMLHttpRequest;Ae.addEventListener("load",function(){var ue=M(Ae.response),H=ve.text.replace(a,'url("data:'+ve.format+";base64,"+ue+'")')+`
|
||
`;D[ve.url]=H,Se(H)}),Ae.addEventListener("error",function(ue){console.warn("Failed to load font from: "+ve.url,ue),D[ve.url]=null,Se(null)}),Ae.addEventListener("abort",function(ue){console.warn("Aborted loading font from: "+ve.url,ue),Se(null)}),Ae.open("GET",ve.url),Ae.responseType="arraybuffer",Ae.send()})})).then(function(ve){return ve.filter(function(Se){return Se}).join("")})},I=null,B=function(){return I||(I=Array.from(document.styleSheets).map(function(G){try{return{rules:G.cssRules,href:G.href}}catch(ve){return console.warn("Stylesheet could not be loaded: "+G.href,ve),{}}}))},le=function(G,ve){var Se=ve||{},pe=Se.selectorRemap,Ae=Se.modifyStyle,ue=Se.modifyCss,H=Se.fonts,te=Se.excludeUnusedCss,de=ue||function(tt,et){var Me=pe?pe(tt):tt,Z=Ae?Ae(et):et;return Me+"{"+Z+`}
|
||
`},me=[],Ie=typeof H>"u",$e=H||[];return B().forEach(function(tt){var et=tt.rules,Me=tt.href;et&&Array.from(et).forEach(function(Z){if(typeof Z.style<"u")if(S(G,Z.selectorText))me.push(de(Z.selectorText,Z.style.cssText));else if(Ie&&Z.cssText.match(/^@font-face/)){var Le=O(Z,Me);Le&&$e.push(Le)}else te||me.push(Z.cssText)})}),F($e).then(function(tt){return me.join(`
|
||
`)+tt})},ae=function(){if(!navigator.msSaveOrOpenBlob&&!("download"in document.createElement("a")))return{popup:window.open()}};n.prepareSvg=function(W,G,ve){p(W);var Se=G||{},pe=Se.left,Ae=pe===void 0?0:pe,ue=Se.top,H=ue===void 0?0:ue,te=Se.width,de=Se.height,me=Se.scale,Ie=me===void 0?1:me,$e=Se.responsive,tt=$e===void 0?!1:$e,et=Se.excludeCss,Me=et===void 0?!1:et;return A(W).then(function(){var Z=W.cloneNode(!0);Z.style.backgroundColor=(G||{}).backgroundColor||W.style.backgroundColor;var Le=b(W,Z,te,de),Ze=Le.width,dt=Le.height;if(W.tagName!=="svg")if(W.getBBox){Z.getAttribute("transform")!=null&&Z.setAttribute("transform",Z.getAttribute("transform").replace(/translate\(.*?\)/,""));var Ot=document.createElementNS("http://www.w3.org/2000/svg","svg");Ot.appendChild(Z),Z=Ot}else{console.error("Attempted to render non-SVG element",W);return}if(Z.setAttribute("version","1.1"),Z.setAttribute("viewBox",[Ae,H,Ze,dt].join(" ")),Z.getAttribute("xmlns")||Z.setAttributeNS(o,"xmlns",t),Z.getAttribute("xmlns:xlink")||Z.setAttributeNS(o,"xmlns:xlink","http://www.w3.org/1999/xlink"),tt?(Z.removeAttribute("width"),Z.removeAttribute("height"),Z.setAttribute("preserveAspectRatio","xMinYMin meet")):(Z.setAttribute("width",Ze*Ie),Z.setAttribute("height",dt*Ie)),Array.from(Z.querySelectorAll("foreignObject > *")).forEach(function(Mo){Mo.setAttributeNS(o,"xmlns",Mo.tagName==="svg"?t:e)}),Me){var si=document.createElement("div");si.appendChild(Z);var Bo=si.innerHTML;if(typeof ve=="function")ve(Bo,Ze,dt);else return{src:Bo,width:Ze,height:dt}}else return le(W,G).then(function(Mo){var Ka=document.createElement("style");Ka.setAttribute("type","text/css"),Ka.innerHTML=`<![CDATA[
|
||
`+Mo+`
|
||
]]>`;var Gn=document.createElement("defs");Gn.appendChild(Ka),Z.insertBefore(Gn,Z.firstChild);var om=document.createElement("div");om.appendChild(Z);var Zu=om.innerHTML.replace(/NS\d+:href/gi,'xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href');if(typeof ve=="function")ve(Zu,Ze,dt);else return{src:Zu,width:Ze,height:dt}})})},n.svgAsDataUri=function(W,G,ve){return p(W),n.prepareSvg(W,G).then(function(Se){var pe=Se.src,Ae=Se.width,ue=Se.height,H="data:image/svg+xml;base64,"+window.btoa(P(i+pe));return typeof ve=="function"&&ve(H,Ae,ue),H})},n.svgAsPngUri=function(W,G,ve){p(W);var Se=G||{},pe=Se.encoderType,Ae=pe===void 0?"image/png":pe,ue=Se.encoderOptions,H=ue===void 0?.8:ue,te=Se.canvg,de=function(Ie){var $e=Ie.src,tt=Ie.width,et=Ie.height,Me=document.createElement("canvas"),Z=Me.getContext("2d"),Le=window.devicePixelRatio||1;Me.width=tt*Le,Me.height=et*Le,Me.style.width=Me.width+"px",Me.style.height=Me.height+"px",Z.setTransform(Le,0,0,Le,0,0),te?te(Me,$e):Z.drawImage($e,0,0);var Ze=void 0;try{Ze=Me.toDataURL(Ae,H)}catch(dt){if(typeof SecurityError<"u"&&dt instanceof SecurityError||dt.name==="SecurityError"){console.error("Rendered SVG images cannot be downloaded in this browser.");return}else throw dt}return typeof ve=="function"&&ve(Ze,Me.width,Me.height),Promise.resolve(Ze)};return te?n.prepareSvg(W,G).then(de):n.svgAsDataUri(W,G).then(function(me){return new Promise(function(Ie,$e){var tt=new Image;tt.onload=function(){return Ie(de({src:tt,width:tt.width,height:tt.height}))},tt.onerror=function(){$e(`There was an error loading the data URI as an image on the following SVG
|
||
`+window.atob(me.slice(26))+`Open the following link to see browser's diagnosis
|
||
`+me)},tt.src=me})})},n.download=function(W,G,ve){if(navigator.msSaveOrOpenBlob)navigator.msSaveOrOpenBlob(k(G),W);else{var Se=document.createElement("a");if("download"in Se){Se.download=W,Se.style.display="none",document.body.appendChild(Se);try{var pe=k(G),Ae=URL.createObjectURL(pe);Se.href=Ae,Se.onclick=function(){return requestAnimationFrame(function(){return URL.revokeObjectURL(Ae)})}}catch(ue){console.error(ue),console.warn("Error while getting object URL. Falling back to string URL."),Se.href=G}Se.click(),document.body.removeChild(Se)}else ve&&ve.popup&&(ve.popup.document.title=W,ve.popup.location.replace(G))}},n.saveSvg=function(W,G,ve){var Se=ae();return u(W).then(function(pe){return n.svgAsDataUri(pe,ve||{})}).then(function(pe){return n.download(G,pe,Se)})},n.saveSvgAsPng=function(W,G,ve){var Se=ae();return u(W).then(function(pe){return n.svgAsPngUri(pe,ve||{})}).then(function(pe){return n.download(G,pe,Se)})}})()});var O4=al((d2,E4)=>{(function(n,o){if(typeof d2=="object"&&typeof E4=="object")E4.exports=o();else if(typeof define=="function"&&define.amd)define([],o);else{var e=o();for(var t in e)(typeof d2=="object"?d2:n)[t]=e[t]}})(globalThis,()=>(()=>{"use strict";var n={4567:function(i,a,s){var d=this&&this.__decorate||function(k,S,O,A){var D,F=arguments.length,I=F<3?S:A===null?A=Object.getOwnPropertyDescriptor(S,O):A;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")I=Reflect.decorate(k,S,O,A);else for(var B=k.length-1;B>=0;B--)(D=k[B])&&(I=(F<3?D(I):F>3?D(S,O,I):D(S,O))||I);return F>3&&I&&Object.defineProperty(S,O,I),I},p=this&&this.__param||function(k,S){return function(O,A){S(O,A,k)}};Object.defineProperty(a,"__esModule",{value:!0}),a.AccessibilityManager=void 0;let u=s(9042),g=s(9924),C=s(844),M=s(4725),x=s(2585),b=s(3656),P=a.AccessibilityManager=class extends C.Disposable{constructor(k,S,O,A){super(),this._terminal=k,this._coreBrowserService=O,this._renderService=A,this._rowColumns=new WeakMap,this._liveRegionLineCount=0,this._charsToConsume=[],this._charsToAnnounce="",this._accessibilityContainer=this._coreBrowserService.mainDocument.createElement("div"),this._accessibilityContainer.classList.add("xterm-accessibility"),this._rowContainer=this._coreBrowserService.mainDocument.createElement("div"),this._rowContainer.setAttribute("role","list"),this._rowContainer.classList.add("xterm-accessibility-tree"),this._rowElements=[];for(let D=0;D<this._terminal.rows;D++)this._rowElements[D]=this._createAccessibilityTreeNode(),this._rowContainer.appendChild(this._rowElements[D]);if(this._topBoundaryFocusListener=D=>this._handleBoundaryFocus(D,0),this._bottomBoundaryFocusListener=D=>this._handleBoundaryFocus(D,1),this._rowElements[0].addEventListener("focus",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._refreshRowsDimensions(),this._accessibilityContainer.appendChild(this._rowContainer),this._liveRegion=this._coreBrowserService.mainDocument.createElement("div"),this._liveRegion.classList.add("live-region"),this._liveRegion.setAttribute("aria-live","assertive"),this._accessibilityContainer.appendChild(this._liveRegion),this._liveRegionDebouncer=this.register(new g.TimeBasedDebouncer(this._renderRows.bind(this))),!this._terminal.element)throw new Error("Cannot enable accessibility before Terminal.open");this._terminal.element.insertAdjacentElement("afterbegin",this._accessibilityContainer),this.register(this._terminal.onResize(D=>this._handleResize(D.rows))),this.register(this._terminal.onRender(D=>this._refreshRows(D.start,D.end))),this.register(this._terminal.onScroll(()=>this._refreshRows())),this.register(this._terminal.onA11yChar(D=>this._handleChar(D))),this.register(this._terminal.onLineFeed(()=>this._handleChar(`
|
||
`))),this.register(this._terminal.onA11yTab(D=>this._handleTab(D))),this.register(this._terminal.onKey(D=>this._handleKey(D.key))),this.register(this._terminal.onBlur(()=>this._clearLiveRegion())),this.register(this._renderService.onDimensionsChange(()=>this._refreshRowsDimensions())),this.register((0,b.addDisposableDomListener)(document,"selectionchange",()=>this._handleSelectionChange())),this.register(this._coreBrowserService.onDprChange(()=>this._refreshRowsDimensions())),this._refreshRows(),this.register((0,C.toDisposable)(()=>{this._accessibilityContainer.remove(),this._rowElements.length=0}))}_handleTab(k){for(let S=0;S<k;S++)this._handleChar(" ")}_handleChar(k){this._liveRegionLineCount<21&&(this._charsToConsume.length>0?this._charsToConsume.shift()!==k&&(this._charsToAnnounce+=k):this._charsToAnnounce+=k,k===`
|
||
`&&(this._liveRegionLineCount++,this._liveRegionLineCount===21&&(this._liveRegion.textContent+=u.tooMuchOutput)))}_clearLiveRegion(){this._liveRegion.textContent="",this._liveRegionLineCount=0}_handleKey(k){this._clearLiveRegion(),new RegExp("\\p{Control}","u").test(k)||this._charsToConsume.push(k)}_refreshRows(k,S){this._liveRegionDebouncer.refresh(k,S,this._terminal.rows)}_renderRows(k,S){let O=this._terminal.buffer,A=O.lines.length.toString();for(let D=k;D<=S;D++){let F=O.lines.get(O.ydisp+D),I=[],B=F?.translateToString(!0,void 0,void 0,I)||"",le=(O.ydisp+D+1).toString(),ae=this._rowElements[D];ae&&(B.length===0?(ae.innerText="\xA0",this._rowColumns.set(ae,[0,1])):(ae.textContent=B,this._rowColumns.set(ae,I)),ae.setAttribute("aria-posinset",le),ae.setAttribute("aria-setsize",A))}this._announceCharacters()}_announceCharacters(){this._charsToAnnounce.length!==0&&(this._liveRegion.textContent+=this._charsToAnnounce,this._charsToAnnounce="")}_handleBoundaryFocus(k,S){let O=k.target,A=this._rowElements[S===0?1:this._rowElements.length-2];if(O.getAttribute("aria-posinset")===(S===0?"1":`${this._terminal.buffer.lines.length}`)||k.relatedTarget!==A)return;let D,F;if(S===0?(D=O,F=this._rowElements.pop(),this._rowContainer.removeChild(F)):(D=this._rowElements.shift(),F=O,this._rowContainer.removeChild(D)),D.removeEventListener("focus",this._topBoundaryFocusListener),F.removeEventListener("focus",this._bottomBoundaryFocusListener),S===0){let I=this._createAccessibilityTreeNode();this._rowElements.unshift(I),this._rowContainer.insertAdjacentElement("afterbegin",I)}else{let I=this._createAccessibilityTreeNode();this._rowElements.push(I),this._rowContainer.appendChild(I)}this._rowElements[0].addEventListener("focus",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._terminal.scrollLines(S===0?-1:1),this._rowElements[S===0?1:this._rowElements.length-2].focus(),k.preventDefault(),k.stopImmediatePropagation()}_handleSelectionChange(){if(this._rowElements.length===0)return;let k=document.getSelection();if(!k)return;if(k.isCollapsed)return void(this._rowContainer.contains(k.anchorNode)&&this._terminal.clearSelection());if(!k.anchorNode||!k.focusNode)return void console.error("anchorNode and/or focusNode are null");let S={node:k.anchorNode,offset:k.anchorOffset},O={node:k.focusNode,offset:k.focusOffset};if((S.node.compareDocumentPosition(O.node)&Node.DOCUMENT_POSITION_PRECEDING||S.node===O.node&&S.offset>O.offset)&&([S,O]=[O,S]),S.node.compareDocumentPosition(this._rowElements[0])&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_FOLLOWING)&&(S={node:this._rowElements[0].childNodes[0],offset:0}),!this._rowContainer.contains(S.node))return;let A=this._rowElements.slice(-1)[0];if(O.node.compareDocumentPosition(A)&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_PRECEDING)&&(O={node:A,offset:A.textContent?.length??0}),!this._rowContainer.contains(O.node))return;let D=({node:B,offset:le})=>{let ae=B instanceof Text?B.parentNode:B,W=parseInt(ae?.getAttribute("aria-posinset"),10)-1;if(isNaN(W))return console.warn("row is invalid. Race condition?"),null;let G=this._rowColumns.get(ae);if(!G)return console.warn("columns is null. Race condition?"),null;let ve=le<G.length?G[le]:G.slice(-1)[0]+1;return ve>=this._terminal.cols&&(++W,ve=0),{row:W,column:ve}},F=D(S),I=D(O);if(F&&I){if(F.row>I.row||F.row===I.row&&F.column>=I.column)throw new Error("invalid range");this._terminal.select(F.column,F.row,(I.row-F.row)*this._terminal.cols-F.column+I.column)}}_handleResize(k){this._rowElements[this._rowElements.length-1].removeEventListener("focus",this._bottomBoundaryFocusListener);for(let S=this._rowContainer.children.length;S<this._terminal.rows;S++)this._rowElements[S]=this._createAccessibilityTreeNode(),this._rowContainer.appendChild(this._rowElements[S]);for(;this._rowElements.length>k;)this._rowContainer.removeChild(this._rowElements.pop());this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._refreshRowsDimensions()}_createAccessibilityTreeNode(){let k=this._coreBrowserService.mainDocument.createElement("div");return k.setAttribute("role","listitem"),k.tabIndex=-1,this._refreshRowDimensions(k),k}_refreshRowsDimensions(){if(this._renderService.dimensions.css.cell.height){this._accessibilityContainer.style.width=`${this._renderService.dimensions.css.canvas.width}px`,this._rowElements.length!==this._terminal.rows&&this._handleResize(this._terminal.rows);for(let k=0;k<this._terminal.rows;k++)this._refreshRowDimensions(this._rowElements[k])}}_refreshRowDimensions(k){k.style.height=`${this._renderService.dimensions.css.cell.height}px`}};a.AccessibilityManager=P=d([p(1,x.IInstantiationService),p(2,M.ICoreBrowserService),p(3,M.IRenderService)],P)},3614:(i,a)=>{function s(g){return g.replace(/\r?\n/g,"\r")}function d(g,C){return C?"\x1B[200~"+g+"\x1B[201~":g}function p(g,C,M,x){g=d(g=s(g),M.decPrivateModes.bracketedPasteMode&&x.rawOptions.ignoreBracketedPasteMode!==!0),M.triggerDataEvent(g,!0),C.value=""}function u(g,C,M){let x=M.getBoundingClientRect(),b=g.clientX-x.left-10,P=g.clientY-x.top-10;C.style.width="20px",C.style.height="20px",C.style.left=`${b}px`,C.style.top=`${P}px`,C.style.zIndex="1000",C.focus()}Object.defineProperty(a,"__esModule",{value:!0}),a.rightClickHandler=a.moveTextAreaUnderMouseCursor=a.paste=a.handlePasteEvent=a.copyHandler=a.bracketTextForPaste=a.prepareTextForTerminal=void 0,a.prepareTextForTerminal=s,a.bracketTextForPaste=d,a.copyHandler=function(g,C){g.clipboardData&&g.clipboardData.setData("text/plain",C.selectionText),g.preventDefault()},a.handlePasteEvent=function(g,C,M,x){g.stopPropagation(),g.clipboardData&&p(g.clipboardData.getData("text/plain"),C,M,x)},a.paste=p,a.moveTextAreaUnderMouseCursor=u,a.rightClickHandler=function(g,C,M,x,b){u(g,C,M),b&&x.rightClickSelect(g),C.value=x.selectionText,C.select()}},7239:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.ColorContrastCache=void 0;let d=s(1505);a.ColorContrastCache=class{constructor(){this._color=new d.TwoKeyMap,this._css=new d.TwoKeyMap}setCss(p,u,g){this._css.set(p,u,g)}getCss(p,u){return this._css.get(p,u)}setColor(p,u,g){this._color.set(p,u,g)}getColor(p,u){return this._color.get(p,u)}clear(){this._color.clear(),this._css.clear()}}},3656:(i,a)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.addDisposableDomListener=void 0,a.addDisposableDomListener=function(s,d,p,u){s.addEventListener(d,p,u);let g=!1;return{dispose:()=>{g||(g=!0,s.removeEventListener(d,p,u))}}}},3551:function(i,a,s){var d=this&&this.__decorate||function(P,k,S,O){var A,D=arguments.length,F=D<3?k:O===null?O=Object.getOwnPropertyDescriptor(k,S):O;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")F=Reflect.decorate(P,k,S,O);else for(var I=P.length-1;I>=0;I--)(A=P[I])&&(F=(D<3?A(F):D>3?A(k,S,F):A(k,S))||F);return D>3&&F&&Object.defineProperty(k,S,F),F},p=this&&this.__param||function(P,k){return function(S,O){k(S,O,P)}};Object.defineProperty(a,"__esModule",{value:!0}),a.Linkifier=void 0;let u=s(3656),g=s(8460),C=s(844),M=s(2585),x=s(4725),b=a.Linkifier=class extends C.Disposable{get currentLink(){return this._currentLink}constructor(P,k,S,O,A){super(),this._element=P,this._mouseService=k,this._renderService=S,this._bufferService=O,this._linkProviderService=A,this._linkCacheDisposables=[],this._isMouseOut=!0,this._wasResized=!1,this._activeLine=-1,this._onShowLinkUnderline=this.register(new g.EventEmitter),this.onShowLinkUnderline=this._onShowLinkUnderline.event,this._onHideLinkUnderline=this.register(new g.EventEmitter),this.onHideLinkUnderline=this._onHideLinkUnderline.event,this.register((0,C.getDisposeArrayDisposable)(this._linkCacheDisposables)),this.register((0,C.toDisposable)(()=>{this._lastMouseEvent=void 0,this._activeProviderReplies?.clear()})),this.register(this._bufferService.onResize(()=>{this._clearCurrentLink(),this._wasResized=!0})),this.register((0,u.addDisposableDomListener)(this._element,"mouseleave",()=>{this._isMouseOut=!0,this._clearCurrentLink()})),this.register((0,u.addDisposableDomListener)(this._element,"mousemove",this._handleMouseMove.bind(this))),this.register((0,u.addDisposableDomListener)(this._element,"mousedown",this._handleMouseDown.bind(this))),this.register((0,u.addDisposableDomListener)(this._element,"mouseup",this._handleMouseUp.bind(this)))}_handleMouseMove(P){this._lastMouseEvent=P;let k=this._positionFromMouseEvent(P,this._element,this._mouseService);if(!k)return;this._isMouseOut=!1;let S=P.composedPath();for(let O=0;O<S.length;O++){let A=S[O];if(A.classList.contains("xterm"))break;if(A.classList.contains("xterm-hover"))return}this._lastBufferCell&&k.x===this._lastBufferCell.x&&k.y===this._lastBufferCell.y||(this._handleHover(k),this._lastBufferCell=k)}_handleHover(P){if(this._activeLine!==P.y||this._wasResized)return this._clearCurrentLink(),this._askForLink(P,!1),void(this._wasResized=!1);this._currentLink&&this._linkAtPosition(this._currentLink.link,P)||(this._clearCurrentLink(),this._askForLink(P,!0))}_askForLink(P,k){this._activeProviderReplies&&k||(this._activeProviderReplies?.forEach(O=>{O?.forEach(A=>{A.link.dispose&&A.link.dispose()})}),this._activeProviderReplies=new Map,this._activeLine=P.y);let S=!1;for(let[O,A]of this._linkProviderService.linkProviders.entries())k?this._activeProviderReplies?.get(O)&&(S=this._checkLinkProviderResult(O,P,S)):A.provideLinks(P.y,D=>{if(this._isMouseOut)return;let F=D?.map(I=>({link:I}));this._activeProviderReplies?.set(O,F),S=this._checkLinkProviderResult(O,P,S),this._activeProviderReplies?.size===this._linkProviderService.linkProviders.length&&this._removeIntersectingLinks(P.y,this._activeProviderReplies)})}_removeIntersectingLinks(P,k){let S=new Set;for(let O=0;O<k.size;O++){let A=k.get(O);if(A)for(let D=0;D<A.length;D++){let F=A[D],I=F.link.range.start.y<P?0:F.link.range.start.x,B=F.link.range.end.y>P?this._bufferService.cols:F.link.range.end.x;for(let le=I;le<=B;le++){if(S.has(le)){A.splice(D--,1);break}S.add(le)}}}}_checkLinkProviderResult(P,k,S){if(!this._activeProviderReplies)return S;let O=this._activeProviderReplies.get(P),A=!1;for(let D=0;D<P;D++)this._activeProviderReplies.has(D)&&!this._activeProviderReplies.get(D)||(A=!0);if(!A&&O){let D=O.find(F=>this._linkAtPosition(F.link,k));D&&(S=!0,this._handleNewLink(D))}if(this._activeProviderReplies.size===this._linkProviderService.linkProviders.length&&!S)for(let D=0;D<this._activeProviderReplies.size;D++){let F=this._activeProviderReplies.get(D)?.find(I=>this._linkAtPosition(I.link,k));if(F){S=!0,this._handleNewLink(F);break}}return S}_handleMouseDown(){this._mouseDownLink=this._currentLink}_handleMouseUp(P){if(!this._currentLink)return;let k=this._positionFromMouseEvent(P,this._element,this._mouseService);k&&this._mouseDownLink===this._currentLink&&this._linkAtPosition(this._currentLink.link,k)&&this._currentLink.link.activate(P,this._currentLink.link.text)}_clearCurrentLink(P,k){this._currentLink&&this._lastMouseEvent&&(!P||!k||this._currentLink.link.range.start.y>=P&&this._currentLink.link.range.end.y<=k)&&(this._linkLeave(this._element,this._currentLink.link,this._lastMouseEvent),this._currentLink=void 0,(0,C.disposeArray)(this._linkCacheDisposables))}_handleNewLink(P){if(!this._lastMouseEvent)return;let k=this._positionFromMouseEvent(this._lastMouseEvent,this._element,this._mouseService);k&&this._linkAtPosition(P.link,k)&&(this._currentLink=P,this._currentLink.state={decorations:{underline:P.link.decorations===void 0||P.link.decorations.underline,pointerCursor:P.link.decorations===void 0||P.link.decorations.pointerCursor},isHovered:!0},this._linkHover(this._element,P.link,this._lastMouseEvent),P.link.decorations={},Object.defineProperties(P.link.decorations,{pointerCursor:{get:()=>this._currentLink?.state?.decorations.pointerCursor,set:S=>{this._currentLink?.state&&this._currentLink.state.decorations.pointerCursor!==S&&(this._currentLink.state.decorations.pointerCursor=S,this._currentLink.state.isHovered&&this._element.classList.toggle("xterm-cursor-pointer",S))}},underline:{get:()=>this._currentLink?.state?.decorations.underline,set:S=>{this._currentLink?.state&&this._currentLink?.state?.decorations.underline!==S&&(this._currentLink.state.decorations.underline=S,this._currentLink.state.isHovered&&this._fireUnderlineEvent(P.link,S))}}}),this._linkCacheDisposables.push(this._renderService.onRenderedViewportChange(S=>{if(!this._currentLink)return;let O=S.start===0?0:S.start+1+this._bufferService.buffer.ydisp,A=this._bufferService.buffer.ydisp+1+S.end;if(this._currentLink.link.range.start.y>=O&&this._currentLink.link.range.end.y<=A&&(this._clearCurrentLink(O,A),this._lastMouseEvent)){let D=this._positionFromMouseEvent(this._lastMouseEvent,this._element,this._mouseService);D&&this._askForLink(D,!1)}})))}_linkHover(P,k,S){this._currentLink?.state&&(this._currentLink.state.isHovered=!0,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(k,!0),this._currentLink.state.decorations.pointerCursor&&P.classList.add("xterm-cursor-pointer")),k.hover&&k.hover(S,k.text)}_fireUnderlineEvent(P,k){let S=P.range,O=this._bufferService.buffer.ydisp,A=this._createLinkUnderlineEvent(S.start.x-1,S.start.y-O-1,S.end.x,S.end.y-O-1,void 0);(k?this._onShowLinkUnderline:this._onHideLinkUnderline).fire(A)}_linkLeave(P,k,S){this._currentLink?.state&&(this._currentLink.state.isHovered=!1,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(k,!1),this._currentLink.state.decorations.pointerCursor&&P.classList.remove("xterm-cursor-pointer")),k.leave&&k.leave(S,k.text)}_linkAtPosition(P,k){let S=P.range.start.y*this._bufferService.cols+P.range.start.x,O=P.range.end.y*this._bufferService.cols+P.range.end.x,A=k.y*this._bufferService.cols+k.x;return S<=A&&A<=O}_positionFromMouseEvent(P,k,S){let O=S.getCoords(P,k,this._bufferService.cols,this._bufferService.rows);if(O)return{x:O[0],y:O[1]+this._bufferService.buffer.ydisp}}_createLinkUnderlineEvent(P,k,S,O,A){return{x1:P,y1:k,x2:S,y2:O,cols:this._bufferService.cols,fg:A}}};a.Linkifier=b=d([p(1,x.IMouseService),p(2,x.IRenderService),p(3,M.IBufferService),p(4,x.ILinkProviderService)],b)},9042:(i,a)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.tooMuchOutput=a.promptLabel=void 0,a.promptLabel="Terminal input",a.tooMuchOutput="Too much output to announce, navigate to rows manually to read"},3730:function(i,a,s){var d=this&&this.__decorate||function(x,b,P,k){var S,O=arguments.length,A=O<3?b:k===null?k=Object.getOwnPropertyDescriptor(b,P):k;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")A=Reflect.decorate(x,b,P,k);else for(var D=x.length-1;D>=0;D--)(S=x[D])&&(A=(O<3?S(A):O>3?S(b,P,A):S(b,P))||A);return O>3&&A&&Object.defineProperty(b,P,A),A},p=this&&this.__param||function(x,b){return function(P,k){b(P,k,x)}};Object.defineProperty(a,"__esModule",{value:!0}),a.OscLinkProvider=void 0;let u=s(511),g=s(2585),C=a.OscLinkProvider=class{constructor(x,b,P){this._bufferService=x,this._optionsService=b,this._oscLinkService=P}provideLinks(x,b){let P=this._bufferService.buffer.lines.get(x-1);if(!P)return void b(void 0);let k=[],S=this._optionsService.rawOptions.linkHandler,O=new u.CellData,A=P.getTrimmedLength(),D=-1,F=-1,I=!1;for(let B=0;B<A;B++)if(F!==-1||P.hasContent(B)){if(P.loadCell(B,O),O.hasExtendedAttrs()&&O.extended.urlId){if(F===-1){F=B,D=O.extended.urlId;continue}I=O.extended.urlId!==D}else F!==-1&&(I=!0);if(I||F!==-1&&B===A-1){let le=this._oscLinkService.getLinkData(D)?.uri;if(le){let ae={start:{x:F+1,y:x},end:{x:B+(I||B!==A-1?0:1),y:x}},W=!1;if(!S?.allowNonHttpProtocols)try{let G=new URL(le);["http:","https:"].includes(G.protocol)||(W=!0)}catch{W=!0}W||k.push({text:le,range:ae,activate:(G,ve)=>S?S.activate(G,ve,ae):M(0,ve),hover:(G,ve)=>S?.hover?.(G,ve,ae),leave:(G,ve)=>S?.leave?.(G,ve,ae)})}I=!1,O.hasExtendedAttrs()&&O.extended.urlId?(F=B,D=O.extended.urlId):(F=-1,D=-1)}}b(k)}};function M(x,b){if(confirm(`Do you want to navigate to ${b}?
|
||
|
||
WARNING: This link could potentially be dangerous`)){let P=window.open();if(P){try{P.opener=null}catch{}P.location.href=b}else console.warn("Opening link blocked as opener could not be cleared")}}a.OscLinkProvider=C=d([p(0,g.IBufferService),p(1,g.IOptionsService),p(2,g.IOscLinkService)],C)},6193:(i,a)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.RenderDebouncer=void 0,a.RenderDebouncer=class{constructor(s,d){this._renderCallback=s,this._coreBrowserService=d,this._refreshCallbacks=[]}dispose(){this._animationFrame&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)}addRefreshCallback(s){return this._refreshCallbacks.push(s),this._animationFrame||(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._innerRefresh())),this._animationFrame}refresh(s,d,p){this._rowCount=p,s=s!==void 0?s:0,d=d!==void 0?d:this._rowCount-1,this._rowStart=this._rowStart!==void 0?Math.min(this._rowStart,s):s,this._rowEnd=this._rowEnd!==void 0?Math.max(this._rowEnd,d):d,this._animationFrame||(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._innerRefresh()))}_innerRefresh(){if(this._animationFrame=void 0,this._rowStart===void 0||this._rowEnd===void 0||this._rowCount===void 0)return void this._runRefreshCallbacks();let s=Math.max(this._rowStart,0),d=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(s,d),this._runRefreshCallbacks()}_runRefreshCallbacks(){for(let s of this._refreshCallbacks)s(0);this._refreshCallbacks=[]}}},3236:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.Terminal=void 0;let d=s(3614),p=s(3656),u=s(3551),g=s(9042),C=s(3730),M=s(1680),x=s(3107),b=s(5744),P=s(2950),k=s(1296),S=s(428),O=s(4269),A=s(5114),D=s(8934),F=s(3230),I=s(9312),B=s(4725),le=s(6731),ae=s(8055),W=s(8969),G=s(8460),ve=s(844),Se=s(6114),pe=s(8437),Ae=s(2584),ue=s(7399),H=s(5941),te=s(9074),de=s(2585),me=s(5435),Ie=s(4567),$e=s(779);class tt extends W.CoreTerminal{get onFocus(){return this._onFocus.event}get onBlur(){return this._onBlur.event}get onA11yChar(){return this._onA11yCharEmitter.event}get onA11yTab(){return this._onA11yTabEmitter.event}get onWillOpen(){return this._onWillOpen.event}constructor(Me={}){super(Me),this.browser=Se,this._keyDownHandled=!1,this._keyDownSeen=!1,this._keyPressHandled=!1,this._unprocessedDeadKey=!1,this._accessibilityManager=this.register(new ve.MutableDisposable),this._onCursorMove=this.register(new G.EventEmitter),this.onCursorMove=this._onCursorMove.event,this._onKey=this.register(new G.EventEmitter),this.onKey=this._onKey.event,this._onRender=this.register(new G.EventEmitter),this.onRender=this._onRender.event,this._onSelectionChange=this.register(new G.EventEmitter),this.onSelectionChange=this._onSelectionChange.event,this._onTitleChange=this.register(new G.EventEmitter),this.onTitleChange=this._onTitleChange.event,this._onBell=this.register(new G.EventEmitter),this.onBell=this._onBell.event,this._onFocus=this.register(new G.EventEmitter),this._onBlur=this.register(new G.EventEmitter),this._onA11yCharEmitter=this.register(new G.EventEmitter),this._onA11yTabEmitter=this.register(new G.EventEmitter),this._onWillOpen=this.register(new G.EventEmitter),this._setup(),this._decorationService=this._instantiationService.createInstance(te.DecorationService),this._instantiationService.setService(de.IDecorationService,this._decorationService),this._linkProviderService=this._instantiationService.createInstance($e.LinkProviderService),this._instantiationService.setService(B.ILinkProviderService,this._linkProviderService),this._linkProviderService.registerLinkProvider(this._instantiationService.createInstance(C.OscLinkProvider)),this.register(this._inputHandler.onRequestBell(()=>this._onBell.fire())),this.register(this._inputHandler.onRequestRefreshRows((Z,Le)=>this.refresh(Z,Le))),this.register(this._inputHandler.onRequestSendFocus(()=>this._reportFocus())),this.register(this._inputHandler.onRequestReset(()=>this.reset())),this.register(this._inputHandler.onRequestWindowsOptionsReport(Z=>this._reportWindowsOptions(Z))),this.register(this._inputHandler.onColor(Z=>this._handleColorEvent(Z))),this.register((0,G.forwardEvent)(this._inputHandler.onCursorMove,this._onCursorMove)),this.register((0,G.forwardEvent)(this._inputHandler.onTitleChange,this._onTitleChange)),this.register((0,G.forwardEvent)(this._inputHandler.onA11yChar,this._onA11yCharEmitter)),this.register((0,G.forwardEvent)(this._inputHandler.onA11yTab,this._onA11yTabEmitter)),this.register(this._bufferService.onResize(Z=>this._afterResize(Z.cols,Z.rows))),this.register((0,ve.toDisposable)(()=>{this._customKeyEventHandler=void 0,this.element?.parentNode?.removeChild(this.element)}))}_handleColorEvent(Me){if(this._themeService)for(let Z of Me){let Le,Ze="";switch(Z.index){case 256:Le="foreground",Ze="10";break;case 257:Le="background",Ze="11";break;case 258:Le="cursor",Ze="12";break;default:Le="ansi",Ze="4;"+Z.index}switch(Z.type){case 0:let dt=ae.color.toColorRGB(Le==="ansi"?this._themeService.colors.ansi[Z.index]:this._themeService.colors[Le]);this.coreService.triggerDataEvent(`${Ae.C0.ESC}]${Ze};${(0,H.toRgbString)(dt)}${Ae.C1_ESCAPED.ST}`);break;case 1:if(Le==="ansi")this._themeService.modifyColors(Ot=>Ot.ansi[Z.index]=ae.channels.toColor(...Z.color));else{let Ot=Le;this._themeService.modifyColors(si=>si[Ot]=ae.channels.toColor(...Z.color))}break;case 2:this._themeService.restoreColor(Z.index)}}}_setup(){super._setup(),this._customKeyEventHandler=void 0}get buffer(){return this.buffers.active}focus(){this.textarea&&this.textarea.focus({preventScroll:!0})}_handleScreenReaderModeOptionChange(Me){Me?!this._accessibilityManager.value&&this._renderService&&(this._accessibilityManager.value=this._instantiationService.createInstance(Ie.AccessibilityManager,this)):this._accessibilityManager.clear()}_handleTextAreaFocus(Me){this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(Ae.C0.ESC+"[I"),this.element.classList.add("focus"),this._showCursor(),this._onFocus.fire()}blur(){return this.textarea?.blur()}_handleTextAreaBlur(){this.textarea.value="",this.refresh(this.buffer.y,this.buffer.y),this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(Ae.C0.ESC+"[O"),this.element.classList.remove("focus"),this._onBlur.fire()}_syncTextArea(){if(!this.textarea||!this.buffer.isCursorInViewport||this._compositionHelper.isComposing||!this._renderService)return;let Me=this.buffer.ybase+this.buffer.y,Z=this.buffer.lines.get(Me);if(!Z)return;let Le=Math.min(this.buffer.x,this.cols-1),Ze=this._renderService.dimensions.css.cell.height,dt=Z.getWidth(Le),Ot=this._renderService.dimensions.css.cell.width*dt,si=this.buffer.y*this._renderService.dimensions.css.cell.height,Bo=Le*this._renderService.dimensions.css.cell.width;this.textarea.style.left=Bo+"px",this.textarea.style.top=si+"px",this.textarea.style.width=Ot+"px",this.textarea.style.height=Ze+"px",this.textarea.style.lineHeight=Ze+"px",this.textarea.style.zIndex="-5"}_initGlobal(){this._bindKeys(),this.register((0,p.addDisposableDomListener)(this.element,"copy",Z=>{this.hasSelection()&&(0,d.copyHandler)(Z,this._selectionService)}));let Me=Z=>(0,d.handlePasteEvent)(Z,this.textarea,this.coreService,this.optionsService);this.register((0,p.addDisposableDomListener)(this.textarea,"paste",Me)),this.register((0,p.addDisposableDomListener)(this.element,"paste",Me)),Se.isFirefox?this.register((0,p.addDisposableDomListener)(this.element,"mousedown",Z=>{Z.button===2&&(0,d.rightClickHandler)(Z,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})):this.register((0,p.addDisposableDomListener)(this.element,"contextmenu",Z=>{(0,d.rightClickHandler)(Z,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})),Se.isLinux&&this.register((0,p.addDisposableDomListener)(this.element,"auxclick",Z=>{Z.button===1&&(0,d.moveTextAreaUnderMouseCursor)(Z,this.textarea,this.screenElement)}))}_bindKeys(){this.register((0,p.addDisposableDomListener)(this.textarea,"keyup",Me=>this._keyUp(Me),!0)),this.register((0,p.addDisposableDomListener)(this.textarea,"keydown",Me=>this._keyDown(Me),!0)),this.register((0,p.addDisposableDomListener)(this.textarea,"keypress",Me=>this._keyPress(Me),!0)),this.register((0,p.addDisposableDomListener)(this.textarea,"compositionstart",()=>this._compositionHelper.compositionstart())),this.register((0,p.addDisposableDomListener)(this.textarea,"compositionupdate",Me=>this._compositionHelper.compositionupdate(Me))),this.register((0,p.addDisposableDomListener)(this.textarea,"compositionend",()=>this._compositionHelper.compositionend())),this.register((0,p.addDisposableDomListener)(this.textarea,"input",Me=>this._inputEvent(Me),!0)),this.register(this.onRender(()=>this._compositionHelper.updateCompositionElements()))}open(Me){if(!Me)throw new Error("Terminal requires a parent element.");if(Me.isConnected||this._logService.debug("Terminal.open was called on an element that was not attached to the DOM"),this.element?.ownerDocument.defaultView&&this._coreBrowserService)return void(this.element.ownerDocument.defaultView!==this._coreBrowserService.window&&(this._coreBrowserService.window=this.element.ownerDocument.defaultView));this._document=Me.ownerDocument,this.options.documentOverride&&this.options.documentOverride instanceof Document&&(this._document=this.optionsService.rawOptions.documentOverride),this.element=this._document.createElement("div"),this.element.dir="ltr",this.element.classList.add("terminal"),this.element.classList.add("xterm"),Me.appendChild(this.element);let Z=this._document.createDocumentFragment();this._viewportElement=this._document.createElement("div"),this._viewportElement.classList.add("xterm-viewport"),Z.appendChild(this._viewportElement),this._viewportScrollArea=this._document.createElement("div"),this._viewportScrollArea.classList.add("xterm-scroll-area"),this._viewportElement.appendChild(this._viewportScrollArea),this.screenElement=this._document.createElement("div"),this.screenElement.classList.add("xterm-screen"),this.register((0,p.addDisposableDomListener)(this.screenElement,"mousemove",Le=>this.updateCursorStyle(Le))),this._helperContainer=this._document.createElement("div"),this._helperContainer.classList.add("xterm-helpers"),this.screenElement.appendChild(this._helperContainer),Z.appendChild(this.screenElement),this.textarea=this._document.createElement("textarea"),this.textarea.classList.add("xterm-helper-textarea"),this.textarea.setAttribute("aria-label",g.promptLabel),Se.isChromeOS||this.textarea.setAttribute("aria-multiline","false"),this.textarea.setAttribute("autocorrect","off"),this.textarea.setAttribute("autocapitalize","off"),this.textarea.setAttribute("spellcheck","false"),this.textarea.tabIndex=0,this._coreBrowserService=this.register(this._instantiationService.createInstance(A.CoreBrowserService,this.textarea,Me.ownerDocument.defaultView??window,this._document??typeof window<"u"?window.document:null)),this._instantiationService.setService(B.ICoreBrowserService,this._coreBrowserService),this.register((0,p.addDisposableDomListener)(this.textarea,"focus",Le=>this._handleTextAreaFocus(Le))),this.register((0,p.addDisposableDomListener)(this.textarea,"blur",()=>this._handleTextAreaBlur())),this._helperContainer.appendChild(this.textarea),this._charSizeService=this._instantiationService.createInstance(S.CharSizeService,this._document,this._helperContainer),this._instantiationService.setService(B.ICharSizeService,this._charSizeService),this._themeService=this._instantiationService.createInstance(le.ThemeService),this._instantiationService.setService(B.IThemeService,this._themeService),this._characterJoinerService=this._instantiationService.createInstance(O.CharacterJoinerService),this._instantiationService.setService(B.ICharacterJoinerService,this._characterJoinerService),this._renderService=this.register(this._instantiationService.createInstance(F.RenderService,this.rows,this.screenElement)),this._instantiationService.setService(B.IRenderService,this._renderService),this.register(this._renderService.onRenderedViewportChange(Le=>this._onRender.fire(Le))),this.onResize(Le=>this._renderService.resize(Le.cols,Le.rows)),this._compositionView=this._document.createElement("div"),this._compositionView.classList.add("composition-view"),this._compositionHelper=this._instantiationService.createInstance(P.CompositionHelper,this.textarea,this._compositionView),this._helperContainer.appendChild(this._compositionView),this._mouseService=this._instantiationService.createInstance(D.MouseService),this._instantiationService.setService(B.IMouseService,this._mouseService),this.linkifier=this.register(this._instantiationService.createInstance(u.Linkifier,this.screenElement)),this.element.appendChild(Z);try{this._onWillOpen.fire(this.element)}catch{}this._renderService.hasRenderer()||this._renderService.setRenderer(this._createRenderer()),this.viewport=this._instantiationService.createInstance(M.Viewport,this._viewportElement,this._viewportScrollArea),this.viewport.onRequestScrollLines(Le=>this.scrollLines(Le.amount,Le.suppressScrollEvent,1)),this.register(this._inputHandler.onRequestSyncScrollBar(()=>this.viewport.syncScrollArea())),this.register(this.viewport),this.register(this.onCursorMove(()=>{this._renderService.handleCursorMove(),this._syncTextArea()})),this.register(this.onResize(()=>this._renderService.handleResize(this.cols,this.rows))),this.register(this.onBlur(()=>this._renderService.handleBlur())),this.register(this.onFocus(()=>this._renderService.handleFocus())),this.register(this._renderService.onDimensionsChange(()=>this.viewport.syncScrollArea())),this._selectionService=this.register(this._instantiationService.createInstance(I.SelectionService,this.element,this.screenElement,this.linkifier)),this._instantiationService.setService(B.ISelectionService,this._selectionService),this.register(this._selectionService.onRequestScrollLines(Le=>this.scrollLines(Le.amount,Le.suppressScrollEvent))),this.register(this._selectionService.onSelectionChange(()=>this._onSelectionChange.fire())),this.register(this._selectionService.onRequestRedraw(Le=>this._renderService.handleSelectionChanged(Le.start,Le.end,Le.columnSelectMode))),this.register(this._selectionService.onLinuxMouseSelection(Le=>{this.textarea.value=Le,this.textarea.focus(),this.textarea.select()})),this.register(this._onScroll.event(Le=>{this.viewport.syncScrollArea(),this._selectionService.refresh()})),this.register((0,p.addDisposableDomListener)(this._viewportElement,"scroll",()=>this._selectionService.refresh())),this.register(this._instantiationService.createInstance(x.BufferDecorationRenderer,this.screenElement)),this.register((0,p.addDisposableDomListener)(this.element,"mousedown",Le=>this._selectionService.handleMouseDown(Le))),this.coreMouseService.areMouseEventsActive?(this._selectionService.disable(),this.element.classList.add("enable-mouse-events")):this._selectionService.enable(),this.options.screenReaderMode&&(this._accessibilityManager.value=this._instantiationService.createInstance(Ie.AccessibilityManager,this)),this.register(this.optionsService.onSpecificOptionChange("screenReaderMode",Le=>this._handleScreenReaderModeOptionChange(Le))),this.options.overviewRulerWidth&&(this._overviewRulerRenderer=this.register(this._instantiationService.createInstance(b.OverviewRulerRenderer,this._viewportElement,this.screenElement))),this.optionsService.onSpecificOptionChange("overviewRulerWidth",Le=>{!this._overviewRulerRenderer&&Le&&this._viewportElement&&this.screenElement&&(this._overviewRulerRenderer=this.register(this._instantiationService.createInstance(b.OverviewRulerRenderer,this._viewportElement,this.screenElement)))}),this._charSizeService.measure(),this.refresh(0,this.rows-1),this._initGlobal(),this.bindMouse()}_createRenderer(){return this._instantiationService.createInstance(k.DomRenderer,this,this._document,this.element,this.screenElement,this._viewportElement,this._helperContainer,this.linkifier)}bindMouse(){let Me=this,Z=this.element;function Le(Ot){let si=Me._mouseService.getMouseReportCoords(Ot,Me.screenElement);if(!si)return!1;let Bo,Mo;switch(Ot.overrideType||Ot.type){case"mousemove":Mo=32,Ot.buttons===void 0?(Bo=3,Ot.button!==void 0&&(Bo=Ot.button<3?Ot.button:3)):Bo=1&Ot.buttons?0:4&Ot.buttons?1:2&Ot.buttons?2:3;break;case"mouseup":Mo=0,Bo=Ot.button<3?Ot.button:3;break;case"mousedown":Mo=1,Bo=Ot.button<3?Ot.button:3;break;case"wheel":if(Me._customWheelEventHandler&&Me._customWheelEventHandler(Ot)===!1||Me.viewport.getLinesScrolled(Ot)===0)return!1;Mo=Ot.deltaY<0?0:1,Bo=4;break;default:return!1}return!(Mo===void 0||Bo===void 0||Bo>4)&&Me.coreMouseService.triggerMouseEvent({col:si.col,row:si.row,x:si.x,y:si.y,button:Bo,action:Mo,ctrl:Ot.ctrlKey,alt:Ot.altKey,shift:Ot.shiftKey})}let Ze={mouseup:null,wheel:null,mousedrag:null,mousemove:null},dt={mouseup:Ot=>(Le(Ot),Ot.buttons||(this._document.removeEventListener("mouseup",Ze.mouseup),Ze.mousedrag&&this._document.removeEventListener("mousemove",Ze.mousedrag)),this.cancel(Ot)),wheel:Ot=>(Le(Ot),this.cancel(Ot,!0)),mousedrag:Ot=>{Ot.buttons&&Le(Ot)},mousemove:Ot=>{Ot.buttons||Le(Ot)}};this.register(this.coreMouseService.onProtocolChange(Ot=>{Ot?(this.optionsService.rawOptions.logLevel==="debug"&&this._logService.debug("Binding to mouse events:",this.coreMouseService.explainEvents(Ot)),this.element.classList.add("enable-mouse-events"),this._selectionService.disable()):(this._logService.debug("Unbinding from mouse events."),this.element.classList.remove("enable-mouse-events"),this._selectionService.enable()),8&Ot?Ze.mousemove||(Z.addEventListener("mousemove",dt.mousemove),Ze.mousemove=dt.mousemove):(Z.removeEventListener("mousemove",Ze.mousemove),Ze.mousemove=null),16&Ot?Ze.wheel||(Z.addEventListener("wheel",dt.wheel,{passive:!1}),Ze.wheel=dt.wheel):(Z.removeEventListener("wheel",Ze.wheel),Ze.wheel=null),2&Ot?Ze.mouseup||(Ze.mouseup=dt.mouseup):(this._document.removeEventListener("mouseup",Ze.mouseup),Ze.mouseup=null),4&Ot?Ze.mousedrag||(Ze.mousedrag=dt.mousedrag):(this._document.removeEventListener("mousemove",Ze.mousedrag),Ze.mousedrag=null)})),this.coreMouseService.activeProtocol=this.coreMouseService.activeProtocol,this.register((0,p.addDisposableDomListener)(Z,"mousedown",Ot=>{if(Ot.preventDefault(),this.focus(),this.coreMouseService.areMouseEventsActive&&!this._selectionService.shouldForceSelection(Ot))return Le(Ot),Ze.mouseup&&this._document.addEventListener("mouseup",Ze.mouseup),Ze.mousedrag&&this._document.addEventListener("mousemove",Ze.mousedrag),this.cancel(Ot)})),this.register((0,p.addDisposableDomListener)(Z,"wheel",Ot=>{if(!Ze.wheel){if(this._customWheelEventHandler&&this._customWheelEventHandler(Ot)===!1)return!1;if(!this.buffer.hasScrollback){let si=this.viewport.getLinesScrolled(Ot);if(si===0)return;let Bo=Ae.C0.ESC+(this.coreService.decPrivateModes.applicationCursorKeys?"O":"[")+(Ot.deltaY<0?"A":"B"),Mo="";for(let Ka=0;Ka<Math.abs(si);Ka++)Mo+=Bo;return this.coreService.triggerDataEvent(Mo,!0),this.cancel(Ot,!0)}return this.viewport.handleWheel(Ot)?this.cancel(Ot):void 0}},{passive:!1})),this.register((0,p.addDisposableDomListener)(Z,"touchstart",Ot=>{if(!this.coreMouseService.areMouseEventsActive)return this.viewport.handleTouchStart(Ot),this.cancel(Ot)},{passive:!0})),this.register((0,p.addDisposableDomListener)(Z,"touchmove",Ot=>{if(!this.coreMouseService.areMouseEventsActive)return this.viewport.handleTouchMove(Ot)?void 0:this.cancel(Ot)},{passive:!1}))}refresh(Me,Z){this._renderService?.refreshRows(Me,Z)}updateCursorStyle(Me){this._selectionService?.shouldColumnSelect(Me)?this.element.classList.add("column-select"):this.element.classList.remove("column-select")}_showCursor(){this.coreService.isCursorInitialized||(this.coreService.isCursorInitialized=!0,this.refresh(this.buffer.y,this.buffer.y))}scrollLines(Me,Z,Le=0){Le===1?(super.scrollLines(Me,Z,Le),this.refresh(0,this.rows-1)):this.viewport?.scrollLines(Me)}paste(Me){(0,d.paste)(Me,this.textarea,this.coreService,this.optionsService)}attachCustomKeyEventHandler(Me){this._customKeyEventHandler=Me}attachCustomWheelEventHandler(Me){this._customWheelEventHandler=Me}registerLinkProvider(Me){return this._linkProviderService.registerLinkProvider(Me)}registerCharacterJoiner(Me){if(!this._characterJoinerService)throw new Error("Terminal must be opened first");let Z=this._characterJoinerService.register(Me);return this.refresh(0,this.rows-1),Z}deregisterCharacterJoiner(Me){if(!this._characterJoinerService)throw new Error("Terminal must be opened first");this._characterJoinerService.deregister(Me)&&this.refresh(0,this.rows-1)}get markers(){return this.buffer.markers}registerMarker(Me){return this.buffer.addMarker(this.buffer.ybase+this.buffer.y+Me)}registerDecoration(Me){return this._decorationService.registerDecoration(Me)}hasSelection(){return!!this._selectionService&&this._selectionService.hasSelection}select(Me,Z,Le){this._selectionService.setSelection(Me,Z,Le)}getSelection(){return this._selectionService?this._selectionService.selectionText:""}getSelectionPosition(){if(this._selectionService&&this._selectionService.hasSelection)return{start:{x:this._selectionService.selectionStart[0],y:this._selectionService.selectionStart[1]},end:{x:this._selectionService.selectionEnd[0],y:this._selectionService.selectionEnd[1]}}}clearSelection(){this._selectionService?.clearSelection()}selectAll(){this._selectionService?.selectAll()}selectLines(Me,Z){this._selectionService?.selectLines(Me,Z)}_keyDown(Me){if(this._keyDownHandled=!1,this._keyDownSeen=!0,this._customKeyEventHandler&&this._customKeyEventHandler(Me)===!1)return!1;let Z=this.browser.isMac&&this.options.macOptionIsMeta&&Me.altKey;if(!Z&&!this._compositionHelper.keydown(Me))return this.options.scrollOnUserInput&&this.buffer.ybase!==this.buffer.ydisp&&this.scrollToBottom(),!1;Z||Me.key!=="Dead"&&Me.key!=="AltGraph"||(this._unprocessedDeadKey=!0);let Le=(0,ue.evaluateKeyboardEvent)(Me,this.coreService.decPrivateModes.applicationCursorKeys,this.browser.isMac,this.options.macOptionIsMeta);if(this.updateCursorStyle(Me),Le.type===3||Le.type===2){let Ze=this.rows-1;return this.scrollLines(Le.type===2?-Ze:Ze),this.cancel(Me,!0)}return Le.type===1&&this.selectAll(),!!this._isThirdLevelShift(this.browser,Me)||(Le.cancel&&this.cancel(Me,!0),!Le.key||!!(Me.key&&!Me.ctrlKey&&!Me.altKey&&!Me.metaKey&&Me.key.length===1&&Me.key.charCodeAt(0)>=65&&Me.key.charCodeAt(0)<=90)||(this._unprocessedDeadKey?(this._unprocessedDeadKey=!1,!0):(Le.key!==Ae.C0.ETX&&Le.key!==Ae.C0.CR||(this.textarea.value=""),this._onKey.fire({key:Le.key,domEvent:Me}),this._showCursor(),this.coreService.triggerDataEvent(Le.key,!0),!this.optionsService.rawOptions.screenReaderMode||Me.altKey||Me.ctrlKey?this.cancel(Me,!0):void(this._keyDownHandled=!0))))}_isThirdLevelShift(Me,Z){let Le=Me.isMac&&!this.options.macOptionIsMeta&&Z.altKey&&!Z.ctrlKey&&!Z.metaKey||Me.isWindows&&Z.altKey&&Z.ctrlKey&&!Z.metaKey||Me.isWindows&&Z.getModifierState("AltGraph");return Z.type==="keypress"?Le:Le&&(!Z.keyCode||Z.keyCode>47)}_keyUp(Me){this._keyDownSeen=!1,this._customKeyEventHandler&&this._customKeyEventHandler(Me)===!1||((function(Z){return Z.keyCode===16||Z.keyCode===17||Z.keyCode===18})(Me)||this.focus(),this.updateCursorStyle(Me),this._keyPressHandled=!1)}_keyPress(Me){let Z;if(this._keyPressHandled=!1,this._keyDownHandled||this._customKeyEventHandler&&this._customKeyEventHandler(Me)===!1)return!1;if(this.cancel(Me),Me.charCode)Z=Me.charCode;else if(Me.which===null||Me.which===void 0)Z=Me.keyCode;else{if(Me.which===0||Me.charCode===0)return!1;Z=Me.which}return!(!Z||(Me.altKey||Me.ctrlKey||Me.metaKey)&&!this._isThirdLevelShift(this.browser,Me)||(Z=String.fromCharCode(Z),this._onKey.fire({key:Z,domEvent:Me}),this._showCursor(),this.coreService.triggerDataEvent(Z,!0),this._keyPressHandled=!0,this._unprocessedDeadKey=!1,0))}_inputEvent(Me){if(Me.data&&Me.inputType==="insertText"&&(!Me.composed||!this._keyDownSeen)&&!this.optionsService.rawOptions.screenReaderMode){if(this._keyPressHandled)return!1;this._unprocessedDeadKey=!1;let Z=Me.data;return this.coreService.triggerDataEvent(Z,!0),this.cancel(Me),!0}return!1}resize(Me,Z){Me!==this.cols||Z!==this.rows?super.resize(Me,Z):this._charSizeService&&!this._charSizeService.hasValidSize&&this._charSizeService.measure()}_afterResize(Me,Z){this._charSizeService?.measure(),this.viewport?.syncScrollArea(!0)}clear(){if(this.buffer.ybase!==0||this.buffer.y!==0){this.buffer.clearAllMarkers(),this.buffer.lines.set(0,this.buffer.lines.get(this.buffer.ybase+this.buffer.y)),this.buffer.lines.length=1,this.buffer.ydisp=0,this.buffer.ybase=0,this.buffer.y=0;for(let Me=1;Me<this.rows;Me++)this.buffer.lines.push(this.buffer.getBlankLine(pe.DEFAULT_ATTR_DATA));this._onScroll.fire({position:this.buffer.ydisp,source:0}),this.viewport?.reset(),this.refresh(0,this.rows-1)}}reset(){this.options.rows=this.rows,this.options.cols=this.cols;let Me=this._customKeyEventHandler;this._setup(),super.reset(),this._selectionService?.reset(),this._decorationService.reset(),this.viewport?.reset(),this._customKeyEventHandler=Me,this.refresh(0,this.rows-1)}clearTextureAtlas(){this._renderService?.clearTextureAtlas()}_reportFocus(){this.element?.classList.contains("focus")?this.coreService.triggerDataEvent(Ae.C0.ESC+"[I"):this.coreService.triggerDataEvent(Ae.C0.ESC+"[O")}_reportWindowsOptions(Me){if(this._renderService)switch(Me){case me.WindowsOptionsReportType.GET_WIN_SIZE_PIXELS:let Z=this._renderService.dimensions.css.canvas.width.toFixed(0),Le=this._renderService.dimensions.css.canvas.height.toFixed(0);this.coreService.triggerDataEvent(`${Ae.C0.ESC}[4;${Le};${Z}t`);break;case me.WindowsOptionsReportType.GET_CELL_SIZE_PIXELS:let Ze=this._renderService.dimensions.css.cell.width.toFixed(0),dt=this._renderService.dimensions.css.cell.height.toFixed(0);this.coreService.triggerDataEvent(`${Ae.C0.ESC}[6;${dt};${Ze}t`)}}cancel(Me,Z){if(this.options.cancelEvents||Z)return Me.preventDefault(),Me.stopPropagation(),!1}}a.Terminal=tt},9924:(i,a)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.TimeBasedDebouncer=void 0,a.TimeBasedDebouncer=class{constructor(s,d=1e3){this._renderCallback=s,this._debounceThresholdMS=d,this._lastRefreshMs=0,this._additionalRefreshRequested=!1}dispose(){this._refreshTimeoutID&&clearTimeout(this._refreshTimeoutID)}refresh(s,d,p){this._rowCount=p,s=s!==void 0?s:0,d=d!==void 0?d:this._rowCount-1,this._rowStart=this._rowStart!==void 0?Math.min(this._rowStart,s):s,this._rowEnd=this._rowEnd!==void 0?Math.max(this._rowEnd,d):d;let u=Date.now();if(u-this._lastRefreshMs>=this._debounceThresholdMS)this._lastRefreshMs=u,this._innerRefresh();else if(!this._additionalRefreshRequested){let g=u-this._lastRefreshMs,C=this._debounceThresholdMS-g;this._additionalRefreshRequested=!0,this._refreshTimeoutID=window.setTimeout(()=>{this._lastRefreshMs=Date.now(),this._innerRefresh(),this._additionalRefreshRequested=!1,this._refreshTimeoutID=void 0},C)}}_innerRefresh(){if(this._rowStart===void 0||this._rowEnd===void 0||this._rowCount===void 0)return;let s=Math.max(this._rowStart,0),d=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(s,d)}}},1680:function(i,a,s){var d=this&&this.__decorate||function(P,k,S,O){var A,D=arguments.length,F=D<3?k:O===null?O=Object.getOwnPropertyDescriptor(k,S):O;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")F=Reflect.decorate(P,k,S,O);else for(var I=P.length-1;I>=0;I--)(A=P[I])&&(F=(D<3?A(F):D>3?A(k,S,F):A(k,S))||F);return D>3&&F&&Object.defineProperty(k,S,F),F},p=this&&this.__param||function(P,k){return function(S,O){k(S,O,P)}};Object.defineProperty(a,"__esModule",{value:!0}),a.Viewport=void 0;let u=s(3656),g=s(4725),C=s(8460),M=s(844),x=s(2585),b=a.Viewport=class extends M.Disposable{constructor(P,k,S,O,A,D,F,I){super(),this._viewportElement=P,this._scrollArea=k,this._bufferService=S,this._optionsService=O,this._charSizeService=A,this._renderService=D,this._coreBrowserService=F,this.scrollBarWidth=0,this._currentRowHeight=0,this._currentDeviceCellHeight=0,this._lastRecordedBufferLength=0,this._lastRecordedViewportHeight=0,this._lastRecordedBufferHeight=0,this._lastTouchY=0,this._lastScrollTop=0,this._wheelPartialScroll=0,this._refreshAnimationFrame=null,this._ignoreNextScrollEvent=!1,this._smoothScrollState={startTime:0,origin:-1,target:-1},this._onRequestScrollLines=this.register(new C.EventEmitter),this.onRequestScrollLines=this._onRequestScrollLines.event,this.scrollBarWidth=this._viewportElement.offsetWidth-this._scrollArea.offsetWidth||15,this.register((0,u.addDisposableDomListener)(this._viewportElement,"scroll",this._handleScroll.bind(this))),this._activeBuffer=this._bufferService.buffer,this.register(this._bufferService.buffers.onBufferActivate(B=>this._activeBuffer=B.activeBuffer)),this._renderDimensions=this._renderService.dimensions,this.register(this._renderService.onDimensionsChange(B=>this._renderDimensions=B)),this._handleThemeChange(I.colors),this.register(I.onChangeColors(B=>this._handleThemeChange(B))),this.register(this._optionsService.onSpecificOptionChange("scrollback",()=>this.syncScrollArea())),setTimeout(()=>this.syncScrollArea())}_handleThemeChange(P){this._viewportElement.style.backgroundColor=P.background.css}reset(){this._currentRowHeight=0,this._currentDeviceCellHeight=0,this._lastRecordedBufferLength=0,this._lastRecordedViewportHeight=0,this._lastRecordedBufferHeight=0,this._lastTouchY=0,this._lastScrollTop=0,this._coreBrowserService.window.requestAnimationFrame(()=>this.syncScrollArea())}_refresh(P){if(P)return this._innerRefresh(),void(this._refreshAnimationFrame!==null&&this._coreBrowserService.window.cancelAnimationFrame(this._refreshAnimationFrame));this._refreshAnimationFrame===null&&(this._refreshAnimationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._innerRefresh()))}_innerRefresh(){if(this._charSizeService.height>0){this._currentRowHeight=this._renderDimensions.device.cell.height/this._coreBrowserService.dpr,this._currentDeviceCellHeight=this._renderDimensions.device.cell.height,this._lastRecordedViewportHeight=this._viewportElement.offsetHeight;let k=Math.round(this._currentRowHeight*this._lastRecordedBufferLength)+(this._lastRecordedViewportHeight-this._renderDimensions.css.canvas.height);this._lastRecordedBufferHeight!==k&&(this._lastRecordedBufferHeight=k,this._scrollArea.style.height=this._lastRecordedBufferHeight+"px")}let P=this._bufferService.buffer.ydisp*this._currentRowHeight;this._viewportElement.scrollTop!==P&&(this._ignoreNextScrollEvent=!0,this._viewportElement.scrollTop=P),this._refreshAnimationFrame=null}syncScrollArea(P=!1){if(this._lastRecordedBufferLength!==this._bufferService.buffer.lines.length)return this._lastRecordedBufferLength=this._bufferService.buffer.lines.length,void this._refresh(P);this._lastRecordedViewportHeight===this._renderService.dimensions.css.canvas.height&&this._lastScrollTop===this._activeBuffer.ydisp*this._currentRowHeight&&this._renderDimensions.device.cell.height===this._currentDeviceCellHeight||this._refresh(P)}_handleScroll(P){if(this._lastScrollTop=this._viewportElement.scrollTop,!this._viewportElement.offsetParent)return;if(this._ignoreNextScrollEvent)return this._ignoreNextScrollEvent=!1,void this._onRequestScrollLines.fire({amount:0,suppressScrollEvent:!0});let k=Math.round(this._lastScrollTop/this._currentRowHeight)-this._bufferService.buffer.ydisp;this._onRequestScrollLines.fire({amount:k,suppressScrollEvent:!0})}_smoothScroll(){if(this._isDisposed||this._smoothScrollState.origin===-1||this._smoothScrollState.target===-1)return;let P=this._smoothScrollPercent();this._viewportElement.scrollTop=this._smoothScrollState.origin+Math.round(P*(this._smoothScrollState.target-this._smoothScrollState.origin)),P<1?this._coreBrowserService.window.requestAnimationFrame(()=>this._smoothScroll()):this._clearSmoothScrollState()}_smoothScrollPercent(){return this._optionsService.rawOptions.smoothScrollDuration&&this._smoothScrollState.startTime?Math.max(Math.min((Date.now()-this._smoothScrollState.startTime)/this._optionsService.rawOptions.smoothScrollDuration,1),0):1}_clearSmoothScrollState(){this._smoothScrollState.startTime=0,this._smoothScrollState.origin=-1,this._smoothScrollState.target=-1}_bubbleScroll(P,k){let S=this._viewportElement.scrollTop+this._lastRecordedViewportHeight;return!(k<0&&this._viewportElement.scrollTop!==0||k>0&&S<this._lastRecordedBufferHeight)||(P.cancelable&&P.preventDefault(),!1)}handleWheel(P){let k=this._getPixelsScrolled(P);return k!==0&&(this._optionsService.rawOptions.smoothScrollDuration?(this._smoothScrollState.startTime=Date.now(),this._smoothScrollPercent()<1?(this._smoothScrollState.origin=this._viewportElement.scrollTop,this._smoothScrollState.target===-1?this._smoothScrollState.target=this._viewportElement.scrollTop+k:this._smoothScrollState.target+=k,this._smoothScrollState.target=Math.max(Math.min(this._smoothScrollState.target,this._viewportElement.scrollHeight),0),this._smoothScroll()):this._clearSmoothScrollState()):this._viewportElement.scrollTop+=k,this._bubbleScroll(P,k))}scrollLines(P){if(P!==0)if(this._optionsService.rawOptions.smoothScrollDuration){let k=P*this._currentRowHeight;this._smoothScrollState.startTime=Date.now(),this._smoothScrollPercent()<1?(this._smoothScrollState.origin=this._viewportElement.scrollTop,this._smoothScrollState.target=this._smoothScrollState.origin+k,this._smoothScrollState.target=Math.max(Math.min(this._smoothScrollState.target,this._viewportElement.scrollHeight),0),this._smoothScroll()):this._clearSmoothScrollState()}else this._onRequestScrollLines.fire({amount:P,suppressScrollEvent:!1})}_getPixelsScrolled(P){if(P.deltaY===0||P.shiftKey)return 0;let k=this._applyScrollModifier(P.deltaY,P);return P.deltaMode===WheelEvent.DOM_DELTA_LINE?k*=this._currentRowHeight:P.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(k*=this._currentRowHeight*this._bufferService.rows),k}getBufferElements(P,k){let S,O="",A=[],D=k??this._bufferService.buffer.lines.length,F=this._bufferService.buffer.lines;for(let I=P;I<D;I++){let B=F.get(I);if(!B)continue;let le=F.get(I+1)?.isWrapped;if(O+=B.translateToString(!le),!le||I===F.length-1){let ae=document.createElement("div");ae.textContent=O,A.push(ae),O.length>0&&(S=ae),O=""}}return{bufferElements:A,cursorElement:S}}getLinesScrolled(P){if(P.deltaY===0||P.shiftKey)return 0;let k=this._applyScrollModifier(P.deltaY,P);return P.deltaMode===WheelEvent.DOM_DELTA_PIXEL?(k/=this._currentRowHeight+0,this._wheelPartialScroll+=k,k=Math.floor(Math.abs(this._wheelPartialScroll))*(this._wheelPartialScroll>0?1:-1),this._wheelPartialScroll%=1):P.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(k*=this._bufferService.rows),k}_applyScrollModifier(P,k){let S=this._optionsService.rawOptions.fastScrollModifier;return S==="alt"&&k.altKey||S==="ctrl"&&k.ctrlKey||S==="shift"&&k.shiftKey?P*this._optionsService.rawOptions.fastScrollSensitivity*this._optionsService.rawOptions.scrollSensitivity:P*this._optionsService.rawOptions.scrollSensitivity}handleTouchStart(P){this._lastTouchY=P.touches[0].pageY}handleTouchMove(P){let k=this._lastTouchY-P.touches[0].pageY;return this._lastTouchY=P.touches[0].pageY,k!==0&&(this._viewportElement.scrollTop+=k,this._bubbleScroll(P,k))}};a.Viewport=b=d([p(2,x.IBufferService),p(3,x.IOptionsService),p(4,g.ICharSizeService),p(5,g.IRenderService),p(6,g.ICoreBrowserService),p(7,g.IThemeService)],b)},3107:function(i,a,s){var d=this&&this.__decorate||function(x,b,P,k){var S,O=arguments.length,A=O<3?b:k===null?k=Object.getOwnPropertyDescriptor(b,P):k;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")A=Reflect.decorate(x,b,P,k);else for(var D=x.length-1;D>=0;D--)(S=x[D])&&(A=(O<3?S(A):O>3?S(b,P,A):S(b,P))||A);return O>3&&A&&Object.defineProperty(b,P,A),A},p=this&&this.__param||function(x,b){return function(P,k){b(P,k,x)}};Object.defineProperty(a,"__esModule",{value:!0}),a.BufferDecorationRenderer=void 0;let u=s(4725),g=s(844),C=s(2585),M=a.BufferDecorationRenderer=class extends g.Disposable{constructor(x,b,P,k,S){super(),this._screenElement=x,this._bufferService=b,this._coreBrowserService=P,this._decorationService=k,this._renderService=S,this._decorationElements=new Map,this._altBufferIsActive=!1,this._dimensionsChanged=!1,this._container=document.createElement("div"),this._container.classList.add("xterm-decoration-container"),this._screenElement.appendChild(this._container),this.register(this._renderService.onRenderedViewportChange(()=>this._doRefreshDecorations())),this.register(this._renderService.onDimensionsChange(()=>{this._dimensionsChanged=!0,this._queueRefresh()})),this.register(this._coreBrowserService.onDprChange(()=>this._queueRefresh())),this.register(this._bufferService.buffers.onBufferActivate(()=>{this._altBufferIsActive=this._bufferService.buffer===this._bufferService.buffers.alt})),this.register(this._decorationService.onDecorationRegistered(()=>this._queueRefresh())),this.register(this._decorationService.onDecorationRemoved(O=>this._removeDecoration(O))),this.register((0,g.toDisposable)(()=>{this._container.remove(),this._decorationElements.clear()}))}_queueRefresh(){this._animationFrame===void 0&&(this._animationFrame=this._renderService.addRefreshCallback(()=>{this._doRefreshDecorations(),this._animationFrame=void 0}))}_doRefreshDecorations(){for(let x of this._decorationService.decorations)this._renderDecoration(x);this._dimensionsChanged=!1}_renderDecoration(x){this._refreshStyle(x),this._dimensionsChanged&&this._refreshXPosition(x)}_createElement(x){let b=this._coreBrowserService.mainDocument.createElement("div");b.classList.add("xterm-decoration"),b.classList.toggle("xterm-decoration-top-layer",x?.options?.layer==="top"),b.style.width=`${Math.round((x.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,b.style.height=(x.options.height||1)*this._renderService.dimensions.css.cell.height+"px",b.style.top=(x.marker.line-this._bufferService.buffers.active.ydisp)*this._renderService.dimensions.css.cell.height+"px",b.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`;let P=x.options.x??0;return P&&P>this._bufferService.cols&&(b.style.display="none"),this._refreshXPosition(x,b),b}_refreshStyle(x){let b=x.marker.line-this._bufferService.buffers.active.ydisp;if(b<0||b>=this._bufferService.rows)x.element&&(x.element.style.display="none",x.onRenderEmitter.fire(x.element));else{let P=this._decorationElements.get(x);P||(P=this._createElement(x),x.element=P,this._decorationElements.set(x,P),this._container.appendChild(P),x.onDispose(()=>{this._decorationElements.delete(x),P.remove()})),P.style.top=b*this._renderService.dimensions.css.cell.height+"px",P.style.display=this._altBufferIsActive?"none":"block",x.onRenderEmitter.fire(P)}}_refreshXPosition(x,b=x.element){if(!b)return;let P=x.options.x??0;(x.options.anchor||"left")==="right"?b.style.right=P?P*this._renderService.dimensions.css.cell.width+"px":"":b.style.left=P?P*this._renderService.dimensions.css.cell.width+"px":""}_removeDecoration(x){this._decorationElements.get(x)?.remove(),this._decorationElements.delete(x),x.dispose()}};a.BufferDecorationRenderer=M=d([p(1,C.IBufferService),p(2,u.ICoreBrowserService),p(3,C.IDecorationService),p(4,u.IRenderService)],M)},5871:(i,a)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.ColorZoneStore=void 0,a.ColorZoneStore=class{constructor(){this._zones=[],this._zonePool=[],this._zonePoolIndex=0,this._linePadding={full:0,left:0,center:0,right:0}}get zones(){return this._zonePool.length=Math.min(this._zonePool.length,this._zones.length),this._zones}clear(){this._zones.length=0,this._zonePoolIndex=0}addDecoration(s){if(s.options.overviewRulerOptions){for(let d of this._zones)if(d.color===s.options.overviewRulerOptions.color&&d.position===s.options.overviewRulerOptions.position){if(this._lineIntersectsZone(d,s.marker.line))return;if(this._lineAdjacentToZone(d,s.marker.line,s.options.overviewRulerOptions.position))return void this._addLineToZone(d,s.marker.line)}if(this._zonePoolIndex<this._zonePool.length)return this._zonePool[this._zonePoolIndex].color=s.options.overviewRulerOptions.color,this._zonePool[this._zonePoolIndex].position=s.options.overviewRulerOptions.position,this._zonePool[this._zonePoolIndex].startBufferLine=s.marker.line,this._zonePool[this._zonePoolIndex].endBufferLine=s.marker.line,void this._zones.push(this._zonePool[this._zonePoolIndex++]);this._zones.push({color:s.options.overviewRulerOptions.color,position:s.options.overviewRulerOptions.position,startBufferLine:s.marker.line,endBufferLine:s.marker.line}),this._zonePool.push(this._zones[this._zones.length-1]),this._zonePoolIndex++}}setPadding(s){this._linePadding=s}_lineIntersectsZone(s,d){return d>=s.startBufferLine&&d<=s.endBufferLine}_lineAdjacentToZone(s,d,p){return d>=s.startBufferLine-this._linePadding[p||"full"]&&d<=s.endBufferLine+this._linePadding[p||"full"]}_addLineToZone(s,d){s.startBufferLine=Math.min(s.startBufferLine,d),s.endBufferLine=Math.max(s.endBufferLine,d)}}},5744:function(i,a,s){var d=this&&this.__decorate||function(S,O,A,D){var F,I=arguments.length,B=I<3?O:D===null?D=Object.getOwnPropertyDescriptor(O,A):D;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")B=Reflect.decorate(S,O,A,D);else for(var le=S.length-1;le>=0;le--)(F=S[le])&&(B=(I<3?F(B):I>3?F(O,A,B):F(O,A))||B);return I>3&&B&&Object.defineProperty(O,A,B),B},p=this&&this.__param||function(S,O){return function(A,D){O(A,D,S)}};Object.defineProperty(a,"__esModule",{value:!0}),a.OverviewRulerRenderer=void 0;let u=s(5871),g=s(4725),C=s(844),M=s(2585),x={full:0,left:0,center:0,right:0},b={full:0,left:0,center:0,right:0},P={full:0,left:0,center:0,right:0},k=a.OverviewRulerRenderer=class extends C.Disposable{get _width(){return this._optionsService.options.overviewRulerWidth||0}constructor(S,O,A,D,F,I,B){super(),this._viewportElement=S,this._screenElement=O,this._bufferService=A,this._decorationService=D,this._renderService=F,this._optionsService=I,this._coreBrowserService=B,this._colorZoneStore=new u.ColorZoneStore,this._shouldUpdateDimensions=!0,this._shouldUpdateAnchor=!0,this._lastKnownBufferLength=0,this._canvas=this._coreBrowserService.mainDocument.createElement("canvas"),this._canvas.classList.add("xterm-decoration-overview-ruler"),this._refreshCanvasDimensions(),this._viewportElement.parentElement?.insertBefore(this._canvas,this._viewportElement);let le=this._canvas.getContext("2d");if(!le)throw new Error("Ctx cannot be null");this._ctx=le,this._registerDecorationListeners(),this._registerBufferChangeListeners(),this._registerDimensionChangeListeners(),this.register((0,C.toDisposable)(()=>{this._canvas?.remove()}))}_registerDecorationListeners(){this.register(this._decorationService.onDecorationRegistered(()=>this._queueRefresh(void 0,!0))),this.register(this._decorationService.onDecorationRemoved(()=>this._queueRefresh(void 0,!0)))}_registerBufferChangeListeners(){this.register(this._renderService.onRenderedViewportChange(()=>this._queueRefresh())),this.register(this._bufferService.buffers.onBufferActivate(()=>{this._canvas.style.display=this._bufferService.buffer===this._bufferService.buffers.alt?"none":"block"})),this.register(this._bufferService.onScroll(()=>{this._lastKnownBufferLength!==this._bufferService.buffers.normal.lines.length&&(this._refreshDrawHeightConstants(),this._refreshColorZonePadding())}))}_registerDimensionChangeListeners(){this.register(this._renderService.onRender(()=>{this._containerHeight&&this._containerHeight===this._screenElement.clientHeight||(this._queueRefresh(!0),this._containerHeight=this._screenElement.clientHeight)})),this.register(this._optionsService.onSpecificOptionChange("overviewRulerWidth",()=>this._queueRefresh(!0))),this.register(this._coreBrowserService.onDprChange(()=>this._queueRefresh(!0))),this._queueRefresh(!0)}_refreshDrawConstants(){let S=Math.floor(this._canvas.width/3),O=Math.ceil(this._canvas.width/3);b.full=this._canvas.width,b.left=S,b.center=O,b.right=S,this._refreshDrawHeightConstants(),P.full=0,P.left=0,P.center=b.left,P.right=b.left+b.center}_refreshDrawHeightConstants(){x.full=Math.round(2*this._coreBrowserService.dpr);let S=this._canvas.height/this._bufferService.buffer.lines.length,O=Math.round(Math.max(Math.min(S,12),6)*this._coreBrowserService.dpr);x.left=O,x.center=O,x.right=O}_refreshColorZonePadding(){this._colorZoneStore.setPadding({full:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*x.full),left:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*x.left),center:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*x.center),right:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*x.right)}),this._lastKnownBufferLength=this._bufferService.buffers.normal.lines.length}_refreshCanvasDimensions(){this._canvas.style.width=`${this._width}px`,this._canvas.width=Math.round(this._width*this._coreBrowserService.dpr),this._canvas.style.height=`${this._screenElement.clientHeight}px`,this._canvas.height=Math.round(this._screenElement.clientHeight*this._coreBrowserService.dpr),this._refreshDrawConstants(),this._refreshColorZonePadding()}_refreshDecorations(){this._shouldUpdateDimensions&&this._refreshCanvasDimensions(),this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height),this._colorZoneStore.clear();for(let O of this._decorationService.decorations)this._colorZoneStore.addDecoration(O);this._ctx.lineWidth=1;let S=this._colorZoneStore.zones;for(let O of S)O.position!=="full"&&this._renderColorZone(O);for(let O of S)O.position==="full"&&this._renderColorZone(O);this._shouldUpdateDimensions=!1,this._shouldUpdateAnchor=!1}_renderColorZone(S){this._ctx.fillStyle=S.color,this._ctx.fillRect(P[S.position||"full"],Math.round((this._canvas.height-1)*(S.startBufferLine/this._bufferService.buffers.active.lines.length)-x[S.position||"full"]/2),b[S.position||"full"],Math.round((this._canvas.height-1)*((S.endBufferLine-S.startBufferLine)/this._bufferService.buffers.active.lines.length)+x[S.position||"full"]))}_queueRefresh(S,O){this._shouldUpdateDimensions=S||this._shouldUpdateDimensions,this._shouldUpdateAnchor=O||this._shouldUpdateAnchor,this._animationFrame===void 0&&(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._refreshDecorations(),this._animationFrame=void 0}))}};a.OverviewRulerRenderer=k=d([p(2,M.IBufferService),p(3,M.IDecorationService),p(4,g.IRenderService),p(5,M.IOptionsService),p(6,g.ICoreBrowserService)],k)},2950:function(i,a,s){var d=this&&this.__decorate||function(x,b,P,k){var S,O=arguments.length,A=O<3?b:k===null?k=Object.getOwnPropertyDescriptor(b,P):k;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")A=Reflect.decorate(x,b,P,k);else for(var D=x.length-1;D>=0;D--)(S=x[D])&&(A=(O<3?S(A):O>3?S(b,P,A):S(b,P))||A);return O>3&&A&&Object.defineProperty(b,P,A),A},p=this&&this.__param||function(x,b){return function(P,k){b(P,k,x)}};Object.defineProperty(a,"__esModule",{value:!0}),a.CompositionHelper=void 0;let u=s(4725),g=s(2585),C=s(2584),M=a.CompositionHelper=class{get isComposing(){return this._isComposing}constructor(x,b,P,k,S,O){this._textarea=x,this._compositionView=b,this._bufferService=P,this._optionsService=k,this._coreService=S,this._renderService=O,this._isComposing=!1,this._isSendingComposition=!1,this._compositionPosition={start:0,end:0},this._dataAlreadySent=""}compositionstart(){this._isComposing=!0,this._compositionPosition.start=this._textarea.value.length,this._compositionView.textContent="",this._dataAlreadySent="",this._compositionView.classList.add("active")}compositionupdate(x){this._compositionView.textContent=x.data,this.updateCompositionElements(),setTimeout(()=>{this._compositionPosition.end=this._textarea.value.length},0)}compositionend(){this._finalizeComposition(!0)}keydown(x){if(this._isComposing||this._isSendingComposition){if(x.keyCode===229||x.keyCode===16||x.keyCode===17||x.keyCode===18)return!1;this._finalizeComposition(!1)}return x.keyCode!==229||(this._handleAnyTextareaChanges(),!1)}_finalizeComposition(x){if(this._compositionView.classList.remove("active"),this._isComposing=!1,x){let b={start:this._compositionPosition.start,end:this._compositionPosition.end};this._isSendingComposition=!0,setTimeout(()=>{if(this._isSendingComposition){let P;this._isSendingComposition=!1,b.start+=this._dataAlreadySent.length,P=this._isComposing?this._textarea.value.substring(b.start,b.end):this._textarea.value.substring(b.start),P.length>0&&this._coreService.triggerDataEvent(P,!0)}},0)}else{this._isSendingComposition=!1;let b=this._textarea.value.substring(this._compositionPosition.start,this._compositionPosition.end);this._coreService.triggerDataEvent(b,!0)}}_handleAnyTextareaChanges(){let x=this._textarea.value;setTimeout(()=>{if(!this._isComposing){let b=this._textarea.value,P=b.replace(x,"");this._dataAlreadySent=P,b.length>x.length?this._coreService.triggerDataEvent(P,!0):b.length<x.length?this._coreService.triggerDataEvent(`${C.C0.DEL}`,!0):b.length===x.length&&b!==x&&this._coreService.triggerDataEvent(b,!0)}},0)}updateCompositionElements(x){if(this._isComposing){if(this._bufferService.buffer.isCursorInViewport){let b=Math.min(this._bufferService.buffer.x,this._bufferService.cols-1),P=this._renderService.dimensions.css.cell.height,k=this._bufferService.buffer.y*this._renderService.dimensions.css.cell.height,S=b*this._renderService.dimensions.css.cell.width;this._compositionView.style.left=S+"px",this._compositionView.style.top=k+"px",this._compositionView.style.height=P+"px",this._compositionView.style.lineHeight=P+"px",this._compositionView.style.fontFamily=this._optionsService.rawOptions.fontFamily,this._compositionView.style.fontSize=this._optionsService.rawOptions.fontSize+"px";let O=this._compositionView.getBoundingClientRect();this._textarea.style.left=S+"px",this._textarea.style.top=k+"px",this._textarea.style.width=Math.max(O.width,1)+"px",this._textarea.style.height=Math.max(O.height,1)+"px",this._textarea.style.lineHeight=O.height+"px"}x||setTimeout(()=>this.updateCompositionElements(!0),0)}}};a.CompositionHelper=M=d([p(2,g.IBufferService),p(3,g.IOptionsService),p(4,g.ICoreService),p(5,u.IRenderService)],M)},9806:(i,a)=>{function s(d,p,u){let g=u.getBoundingClientRect(),C=d.getComputedStyle(u),M=parseInt(C.getPropertyValue("padding-left")),x=parseInt(C.getPropertyValue("padding-top"));return[p.clientX-g.left-M,p.clientY-g.top-x]}Object.defineProperty(a,"__esModule",{value:!0}),a.getCoords=a.getCoordsRelativeToElement=void 0,a.getCoordsRelativeToElement=s,a.getCoords=function(d,p,u,g,C,M,x,b,P){if(!M)return;let k=s(d,p,u);return k?(k[0]=Math.ceil((k[0]+(P?x/2:0))/x),k[1]=Math.ceil(k[1]/b),k[0]=Math.min(Math.max(k[0],1),g+(P?1:0)),k[1]=Math.min(Math.max(k[1],1),C),k):void 0}},9504:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.moveToCellSequence=void 0;let d=s(2584);function p(b,P,k,S){let O=b-u(b,k),A=P-u(P,k),D=Math.abs(O-A)-(function(F,I,B){let le=0,ae=F-u(F,B),W=I-u(I,B);for(let G=0;G<Math.abs(ae-W);G++){let ve=g(F,I)==="A"?-1:1;B.buffer.lines.get(ae+ve*G)?.isWrapped&&le++}return le})(b,P,k);return x(D,M(g(b,P),S))}function u(b,P){let k=0,S=P.buffer.lines.get(b),O=S?.isWrapped;for(;O&&b>=0&&b<P.rows;)k++,S=P.buffer.lines.get(--b),O=S?.isWrapped;return k}function g(b,P){return b>P?"A":"B"}function C(b,P,k,S,O,A){let D=b,F=P,I="";for(;D!==k||F!==S;)D+=O?1:-1,O&&D>A.cols-1?(I+=A.buffer.translateBufferLineToString(F,!1,b,D),D=0,b=0,F++):!O&&D<0&&(I+=A.buffer.translateBufferLineToString(F,!1,0,b+1),D=A.cols-1,b=D,F--);return I+A.buffer.translateBufferLineToString(F,!1,b,D)}function M(b,P){let k=P?"O":"[";return d.C0.ESC+k+b}function x(b,P){b=Math.floor(b);let k="";for(let S=0;S<b;S++)k+=P;return k}a.moveToCellSequence=function(b,P,k,S){let O=k.buffer.x,A=k.buffer.y;if(!k.buffer.hasScrollback)return(function(I,B,le,ae,W,G){return p(B,ae,W,G).length===0?"":x(C(I,B,I,B-u(B,W),!1,W).length,M("D",G))})(O,A,0,P,k,S)+p(A,P,k,S)+(function(I,B,le,ae,W,G){let ve;ve=p(B,ae,W,G).length>0?ae-u(ae,W):B;let Se=ae,pe=(function(Ae,ue,H,te,de,me){let Ie;return Ie=p(H,te,de,me).length>0?te-u(te,de):ue,Ae<H&&Ie<=te||Ae>=H&&Ie<te?"C":"D"})(I,B,le,ae,W,G);return x(C(I,ve,le,Se,pe==="C",W).length,M(pe,G))})(O,A,b,P,k,S);let D;if(A===P)return D=O>b?"D":"C",x(Math.abs(O-b),M(D,S));D=A>P?"D":"C";let F=Math.abs(A-P);return x((function(I,B){return B.cols-I})(A>P?b:O,k)+(F-1)*k.cols+1+((A>P?O:b)-1),M(D,S))}},1296:function(i,a,s){var d=this&&this.__decorate||function(G,ve,Se,pe){var Ae,ue=arguments.length,H=ue<3?ve:pe===null?pe=Object.getOwnPropertyDescriptor(ve,Se):pe;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")H=Reflect.decorate(G,ve,Se,pe);else for(var te=G.length-1;te>=0;te--)(Ae=G[te])&&(H=(ue<3?Ae(H):ue>3?Ae(ve,Se,H):Ae(ve,Se))||H);return ue>3&&H&&Object.defineProperty(ve,Se,H),H},p=this&&this.__param||function(G,ve){return function(Se,pe){ve(Se,pe,G)}};Object.defineProperty(a,"__esModule",{value:!0}),a.DomRenderer=void 0;let u=s(3787),g=s(2550),C=s(2223),M=s(6171),x=s(6052),b=s(4725),P=s(8055),k=s(8460),S=s(844),O=s(2585),A="xterm-dom-renderer-owner-",D="xterm-rows",F="xterm-fg-",I="xterm-bg-",B="xterm-focus",le="xterm-selection",ae=1,W=a.DomRenderer=class extends S.Disposable{constructor(G,ve,Se,pe,Ae,ue,H,te,de,me,Ie,$e,tt){super(),this._terminal=G,this._document=ve,this._element=Se,this._screenElement=pe,this._viewportElement=Ae,this._helperContainer=ue,this._linkifier2=H,this._charSizeService=de,this._optionsService=me,this._bufferService=Ie,this._coreBrowserService=$e,this._themeService=tt,this._terminalClass=ae++,this._rowElements=[],this._selectionRenderModel=(0,x.createSelectionRenderModel)(),this.onRequestRedraw=this.register(new k.EventEmitter).event,this._rowContainer=this._document.createElement("div"),this._rowContainer.classList.add(D),this._rowContainer.style.lineHeight="normal",this._rowContainer.setAttribute("aria-hidden","true"),this._refreshRowElements(this._bufferService.cols,this._bufferService.rows),this._selectionContainer=this._document.createElement("div"),this._selectionContainer.classList.add(le),this._selectionContainer.setAttribute("aria-hidden","true"),this.dimensions=(0,M.createRenderDimensions)(),this._updateDimensions(),this.register(this._optionsService.onOptionChange(()=>this._handleOptionsChanged())),this.register(this._themeService.onChangeColors(et=>this._injectCss(et))),this._injectCss(this._themeService.colors),this._rowFactory=te.createInstance(u.DomRendererRowFactory,document),this._element.classList.add(A+this._terminalClass),this._screenElement.appendChild(this._rowContainer),this._screenElement.appendChild(this._selectionContainer),this.register(this._linkifier2.onShowLinkUnderline(et=>this._handleLinkHover(et))),this.register(this._linkifier2.onHideLinkUnderline(et=>this._handleLinkLeave(et))),this.register((0,S.toDisposable)(()=>{this._element.classList.remove(A+this._terminalClass),this._rowContainer.remove(),this._selectionContainer.remove(),this._widthCache.dispose(),this._themeStyleElement.remove(),this._dimensionsStyleElement.remove()})),this._widthCache=new g.WidthCache(this._document,this._helperContainer),this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}_updateDimensions(){let G=this._coreBrowserService.dpr;this.dimensions.device.char.width=this._charSizeService.width*G,this.dimensions.device.char.height=Math.ceil(this._charSizeService.height*G),this.dimensions.device.cell.width=this.dimensions.device.char.width+Math.round(this._optionsService.rawOptions.letterSpacing),this.dimensions.device.cell.height=Math.floor(this.dimensions.device.char.height*this._optionsService.rawOptions.lineHeight),this.dimensions.device.char.left=0,this.dimensions.device.char.top=0,this.dimensions.device.canvas.width=this.dimensions.device.cell.width*this._bufferService.cols,this.dimensions.device.canvas.height=this.dimensions.device.cell.height*this._bufferService.rows,this.dimensions.css.canvas.width=Math.round(this.dimensions.device.canvas.width/G),this.dimensions.css.canvas.height=Math.round(this.dimensions.device.canvas.height/G),this.dimensions.css.cell.width=this.dimensions.css.canvas.width/this._bufferService.cols,this.dimensions.css.cell.height=this.dimensions.css.canvas.height/this._bufferService.rows;for(let Se of this._rowElements)Se.style.width=`${this.dimensions.css.canvas.width}px`,Se.style.height=`${this.dimensions.css.cell.height}px`,Se.style.lineHeight=`${this.dimensions.css.cell.height}px`,Se.style.overflow="hidden";this._dimensionsStyleElement||(this._dimensionsStyleElement=this._document.createElement("style"),this._screenElement.appendChild(this._dimensionsStyleElement));let ve=`${this._terminalSelector} .${D} span { display: inline-block; height: 100%; vertical-align: top;}`;this._dimensionsStyleElement.textContent=ve,this._selectionContainer.style.height=this._viewportElement.style.height,this._screenElement.style.width=`${this.dimensions.css.canvas.width}px`,this._screenElement.style.height=`${this.dimensions.css.canvas.height}px`}_injectCss(G){this._themeStyleElement||(this._themeStyleElement=this._document.createElement("style"),this._screenElement.appendChild(this._themeStyleElement));let ve=`${this._terminalSelector} .${D} { color: ${G.foreground.css}; font-family: ${this._optionsService.rawOptions.fontFamily}; font-size: ${this._optionsService.rawOptions.fontSize}px; font-kerning: none; white-space: pre}`;ve+=`${this._terminalSelector} .${D} .xterm-dim { color: ${P.color.multiplyOpacity(G.foreground,.5).css};}`,ve+=`${this._terminalSelector} span:not(.xterm-bold) { font-weight: ${this._optionsService.rawOptions.fontWeight};}${this._terminalSelector} span.xterm-bold { font-weight: ${this._optionsService.rawOptions.fontWeightBold};}${this._terminalSelector} span.xterm-italic { font-style: italic;}`;let Se=`blink_underline_${this._terminalClass}`,pe=`blink_bar_${this._terminalClass}`,Ae=`blink_block_${this._terminalClass}`;ve+=`@keyframes ${Se} { 50% { border-bottom-style: hidden; }}`,ve+=`@keyframes ${pe} { 50% { box-shadow: none; }}`,ve+=`@keyframes ${Ae} { 0% { background-color: ${G.cursor.css}; color: ${G.cursorAccent.css}; } 50% { background-color: inherit; color: ${G.cursor.css}; }}`,ve+=`${this._terminalSelector} .${D}.${B} .xterm-cursor.xterm-cursor-blink.xterm-cursor-underline { animation: ${Se} 1s step-end infinite;}${this._terminalSelector} .${D}.${B} .xterm-cursor.xterm-cursor-blink.xterm-cursor-bar { animation: ${pe} 1s step-end infinite;}${this._terminalSelector} .${D}.${B} .xterm-cursor.xterm-cursor-blink.xterm-cursor-block { animation: ${Ae} 1s step-end infinite;}${this._terminalSelector} .${D} .xterm-cursor.xterm-cursor-block { background-color: ${G.cursor.css}; color: ${G.cursorAccent.css};}${this._terminalSelector} .${D} .xterm-cursor.xterm-cursor-block:not(.xterm-cursor-blink) { background-color: ${G.cursor.css} !important; color: ${G.cursorAccent.css} !important;}${this._terminalSelector} .${D} .xterm-cursor.xterm-cursor-outline { outline: 1px solid ${G.cursor.css}; outline-offset: -1px;}${this._terminalSelector} .${D} .xterm-cursor.xterm-cursor-bar { box-shadow: ${this._optionsService.rawOptions.cursorWidth}px 0 0 ${G.cursor.css} inset;}${this._terminalSelector} .${D} .xterm-cursor.xterm-cursor-underline { border-bottom: 1px ${G.cursor.css}; border-bottom-style: solid; height: calc(100% - 1px);}`,ve+=`${this._terminalSelector} .${le} { position: absolute; top: 0; left: 0; z-index: 1; pointer-events: none;}${this._terminalSelector}.focus .${le} div { position: absolute; background-color: ${G.selectionBackgroundOpaque.css};}${this._terminalSelector} .${le} div { position: absolute; background-color: ${G.selectionInactiveBackgroundOpaque.css};}`;for(let[ue,H]of G.ansi.entries())ve+=`${this._terminalSelector} .${F}${ue} { color: ${H.css}; }${this._terminalSelector} .${F}${ue}.xterm-dim { color: ${P.color.multiplyOpacity(H,.5).css}; }${this._terminalSelector} .${I}${ue} { background-color: ${H.css}; }`;ve+=`${this._terminalSelector} .${F}${C.INVERTED_DEFAULT_COLOR} { color: ${P.color.opaque(G.background).css}; }${this._terminalSelector} .${F}${C.INVERTED_DEFAULT_COLOR}.xterm-dim { color: ${P.color.multiplyOpacity(P.color.opaque(G.background),.5).css}; }${this._terminalSelector} .${I}${C.INVERTED_DEFAULT_COLOR} { background-color: ${G.foreground.css}; }`,this._themeStyleElement.textContent=ve}_setDefaultSpacing(){let G=this.dimensions.css.cell.width-this._widthCache.get("W",!1,!1);this._rowContainer.style.letterSpacing=`${G}px`,this._rowFactory.defaultSpacing=G}handleDevicePixelRatioChange(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}_refreshRowElements(G,ve){for(let Se=this._rowElements.length;Se<=ve;Se++){let pe=this._document.createElement("div");this._rowContainer.appendChild(pe),this._rowElements.push(pe)}for(;this._rowElements.length>ve;)this._rowContainer.removeChild(this._rowElements.pop())}handleResize(G,ve){this._refreshRowElements(G,ve),this._updateDimensions(),this.handleSelectionChanged(this._selectionRenderModel.selectionStart,this._selectionRenderModel.selectionEnd,this._selectionRenderModel.columnSelectMode)}handleCharSizeChanged(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}handleBlur(){this._rowContainer.classList.remove(B),this.renderRows(0,this._bufferService.rows-1)}handleFocus(){this._rowContainer.classList.add(B),this.renderRows(this._bufferService.buffer.y,this._bufferService.buffer.y)}handleSelectionChanged(G,ve,Se){if(this._selectionContainer.replaceChildren(),this._rowFactory.handleSelectionChanged(G,ve,Se),this.renderRows(0,this._bufferService.rows-1),!G||!ve)return;this._selectionRenderModel.update(this._terminal,G,ve,Se);let pe=this._selectionRenderModel.viewportStartRow,Ae=this._selectionRenderModel.viewportEndRow,ue=this._selectionRenderModel.viewportCappedStartRow,H=this._selectionRenderModel.viewportCappedEndRow;if(ue>=this._bufferService.rows||H<0)return;let te=this._document.createDocumentFragment();if(Se){let de=G[0]>ve[0];te.appendChild(this._createSelectionElement(ue,de?ve[0]:G[0],de?G[0]:ve[0],H-ue+1))}else{let de=pe===ue?G[0]:0,me=ue===Ae?ve[0]:this._bufferService.cols;te.appendChild(this._createSelectionElement(ue,de,me));let Ie=H-ue-1;if(te.appendChild(this._createSelectionElement(ue+1,0,this._bufferService.cols,Ie)),ue!==H){let $e=Ae===H?ve[0]:this._bufferService.cols;te.appendChild(this._createSelectionElement(H,0,$e))}}this._selectionContainer.appendChild(te)}_createSelectionElement(G,ve,Se,pe=1){let Ae=this._document.createElement("div"),ue=ve*this.dimensions.css.cell.width,H=this.dimensions.css.cell.width*(Se-ve);return ue+H>this.dimensions.css.canvas.width&&(H=this.dimensions.css.canvas.width-ue),Ae.style.height=pe*this.dimensions.css.cell.height+"px",Ae.style.top=G*this.dimensions.css.cell.height+"px",Ae.style.left=`${ue}px`,Ae.style.width=`${H}px`,Ae}handleCursorMove(){}_handleOptionsChanged(){this._updateDimensions(),this._injectCss(this._themeService.colors),this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}clear(){for(let G of this._rowElements)G.replaceChildren()}renderRows(G,ve){let Se=this._bufferService.buffer,pe=Se.ybase+Se.y,Ae=Math.min(Se.x,this._bufferService.cols-1),ue=this._optionsService.rawOptions.cursorBlink,H=this._optionsService.rawOptions.cursorStyle,te=this._optionsService.rawOptions.cursorInactiveStyle;for(let de=G;de<=ve;de++){let me=de+Se.ydisp,Ie=this._rowElements[de],$e=Se.lines.get(me);if(!Ie||!$e)break;Ie.replaceChildren(...this._rowFactory.createRow($e,me,me===pe,H,te,Ae,ue,this.dimensions.css.cell.width,this._widthCache,-1,-1))}}get _terminalSelector(){return`.${A}${this._terminalClass}`}_handleLinkHover(G){this._setCellUnderline(G.x1,G.x2,G.y1,G.y2,G.cols,!0)}_handleLinkLeave(G){this._setCellUnderline(G.x1,G.x2,G.y1,G.y2,G.cols,!1)}_setCellUnderline(G,ve,Se,pe,Ae,ue){Se<0&&(G=0),pe<0&&(ve=0);let H=this._bufferService.rows-1;Se=Math.max(Math.min(Se,H),0),pe=Math.max(Math.min(pe,H),0),Ae=Math.min(Ae,this._bufferService.cols);let te=this._bufferService.buffer,de=te.ybase+te.y,me=Math.min(te.x,Ae-1),Ie=this._optionsService.rawOptions.cursorBlink,$e=this._optionsService.rawOptions.cursorStyle,tt=this._optionsService.rawOptions.cursorInactiveStyle;for(let et=Se;et<=pe;++et){let Me=et+te.ydisp,Z=this._rowElements[et],Le=te.lines.get(Me);if(!Z||!Le)break;Z.replaceChildren(...this._rowFactory.createRow(Le,Me,Me===de,$e,tt,me,Ie,this.dimensions.css.cell.width,this._widthCache,ue?et===Se?G:0:-1,ue?(et===pe?ve:Ae)-1:-1))}}};a.DomRenderer=W=d([p(7,O.IInstantiationService),p(8,b.ICharSizeService),p(9,O.IOptionsService),p(10,O.IBufferService),p(11,b.ICoreBrowserService),p(12,b.IThemeService)],W)},3787:function(i,a,s){var d=this&&this.__decorate||function(D,F,I,B){var le,ae=arguments.length,W=ae<3?F:B===null?B=Object.getOwnPropertyDescriptor(F,I):B;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")W=Reflect.decorate(D,F,I,B);else for(var G=D.length-1;G>=0;G--)(le=D[G])&&(W=(ae<3?le(W):ae>3?le(F,I,W):le(F,I))||W);return ae>3&&W&&Object.defineProperty(F,I,W),W},p=this&&this.__param||function(D,F){return function(I,B){F(I,B,D)}};Object.defineProperty(a,"__esModule",{value:!0}),a.DomRendererRowFactory=void 0;let u=s(2223),g=s(643),C=s(511),M=s(2585),x=s(8055),b=s(4725),P=s(4269),k=s(6171),S=s(3734),O=a.DomRendererRowFactory=class{constructor(D,F,I,B,le,ae,W){this._document=D,this._characterJoinerService=F,this._optionsService=I,this._coreBrowserService=B,this._coreService=le,this._decorationService=ae,this._themeService=W,this._workCell=new C.CellData,this._columnSelectMode=!1,this.defaultSpacing=0}handleSelectionChanged(D,F,I){this._selectionStart=D,this._selectionEnd=F,this._columnSelectMode=I}createRow(D,F,I,B,le,ae,W,G,ve,Se,pe){let Ae=[],ue=this._characterJoinerService.getJoinedCharacters(F),H=this._themeService.colors,te,de=D.getNoBgTrimmedLength();I&&de<ae+1&&(de=ae+1);let me=0,Ie="",$e=0,tt=0,et=0,Me=!1,Z=0,Le=!1,Ze=0,dt=[],Ot=Se!==-1&&pe!==-1;for(let si=0;si<de;si++){D.loadCell(si,this._workCell);let Bo=this._workCell.getWidth();if(Bo===0)continue;let Mo=!1,Ka=si,Gn=this._workCell;if(ue.length>0&&si===ue[0][0]){Mo=!0;let oa=ue.shift();Gn=new P.JoinedCellData(this._workCell,D.translateToString(!0,oa[0],oa[1]),oa[1]-oa[0]),Ka=oa[1]-1,Bo=Gn.getWidth()}let om=this._isCellInSelection(si,F),Zu=I&&si===ae,Ak=Ot&&si>=Se&&si<=pe,Nk=!1;this._decorationService.forEachDecorationAtCell(si,F,void 0,oa=>{Nk=!0});let PC=Gn.getChars()||g.WHITESPACE_CELL_CHAR;if(PC===" "&&(Gn.isUnderline()||Gn.isOverline())&&(PC="\xA0"),Ze=Bo*G-ve.get(PC,Gn.isBold(),Gn.isItalic()),te){if(me&&(om&&Le||!om&&!Le&&Gn.bg===$e)&&(om&&Le&&H.selectionForeground||Gn.fg===tt)&&Gn.extended.ext===et&&Ak===Me&&Ze===Z&&!Zu&&!Mo&&!Nk){Gn.isInvisible()?Ie+=g.WHITESPACE_CELL_CHAR:Ie+=PC,me++;continue}me&&(te.textContent=Ie),te=this._document.createElement("span"),me=0,Ie=""}else te=this._document.createElement("span");if($e=Gn.bg,tt=Gn.fg,et=Gn.extended.ext,Me=Ak,Z=Ze,Le=om,Mo&&ae>=si&&ae<=Ka&&(ae=si),!this._coreService.isCursorHidden&&Zu&&this._coreService.isCursorInitialized){if(dt.push("xterm-cursor"),this._coreBrowserService.isFocused)W&&dt.push("xterm-cursor-blink"),dt.push(B==="bar"?"xterm-cursor-bar":B==="underline"?"xterm-cursor-underline":"xterm-cursor-block");else if(le)switch(le){case"outline":dt.push("xterm-cursor-outline");break;case"block":dt.push("xterm-cursor-block");break;case"bar":dt.push("xterm-cursor-bar");break;case"underline":dt.push("xterm-cursor-underline")}}if(Gn.isBold()&&dt.push("xterm-bold"),Gn.isItalic()&&dt.push("xterm-italic"),Gn.isDim()&&dt.push("xterm-dim"),Ie=Gn.isInvisible()?g.WHITESPACE_CELL_CHAR:Gn.getChars()||g.WHITESPACE_CELL_CHAR,Gn.isUnderline()&&(dt.push(`xterm-underline-${Gn.extended.underlineStyle}`),Ie===" "&&(Ie="\xA0"),!Gn.isUnderlineColorDefault()))if(Gn.isUnderlineColorRGB())te.style.textDecorationColor=`rgb(${S.AttributeData.toColorRGB(Gn.getUnderlineColor()).join(",")})`;else{let oa=Gn.getUnderlineColor();this._optionsService.rawOptions.drawBoldTextInBrightColors&&Gn.isBold()&&oa<8&&(oa+=8),te.style.textDecorationColor=H.ansi[oa].css}Gn.isOverline()&&(dt.push("xterm-overline"),Ie===" "&&(Ie="\xA0")),Gn.isStrikethrough()&&dt.push("xterm-strikethrough"),Ak&&(te.style.textDecoration="underline");let ol=Gn.getFgColor(),tf=Gn.getFgColorMode(),kc=Gn.getBgColor(),nf=Gn.getBgColorMode(),Fk=!!Gn.isInverse();if(Fk){let oa=ol;ol=kc,kc=oa;let jH=tf;tf=nf,nf=jH}let am,TC,rm,of=!1;switch(this._decorationService.forEachDecorationAtCell(si,F,void 0,oa=>{oa.options.layer!=="top"&&of||(oa.backgroundColorRGB&&(nf=50331648,kc=oa.backgroundColorRGB.rgba>>8&16777215,am=oa.backgroundColorRGB),oa.foregroundColorRGB&&(tf=50331648,ol=oa.foregroundColorRGB.rgba>>8&16777215,TC=oa.foregroundColorRGB),of=oa.options.layer==="top")}),!of&&om&&(am=this._coreBrowserService.isFocused?H.selectionBackgroundOpaque:H.selectionInactiveBackgroundOpaque,kc=am.rgba>>8&16777215,nf=50331648,of=!0,H.selectionForeground&&(tf=50331648,ol=H.selectionForeground.rgba>>8&16777215,TC=H.selectionForeground)),of&&dt.push("xterm-decoration-top"),nf){case 16777216:case 33554432:rm=H.ansi[kc],dt.push(`xterm-bg-${kc}`);break;case 50331648:rm=x.channels.toColor(kc>>16,kc>>8&255,255&kc),this._addStyle(te,`background-color:#${A((kc>>>0).toString(16),"0",6)}`);break;default:Fk?(rm=H.foreground,dt.push(`xterm-bg-${u.INVERTED_DEFAULT_COLOR}`)):rm=H.background}switch(am||Gn.isDim()&&(am=x.color.multiplyOpacity(rm,.5)),tf){case 16777216:case 33554432:Gn.isBold()&&ol<8&&this._optionsService.rawOptions.drawBoldTextInBrightColors&&(ol+=8),this._applyMinimumContrast(te,rm,H.ansi[ol],Gn,am,void 0)||dt.push(`xterm-fg-${ol}`);break;case 50331648:let oa=x.channels.toColor(ol>>16&255,ol>>8&255,255&ol);this._applyMinimumContrast(te,rm,oa,Gn,am,TC)||this._addStyle(te,`color:#${A(ol.toString(16),"0",6)}`);break;default:this._applyMinimumContrast(te,rm,H.foreground,Gn,am,TC)||Fk&&dt.push(`xterm-fg-${u.INVERTED_DEFAULT_COLOR}`)}dt.length&&(te.className=dt.join(" "),dt.length=0),Zu||Mo||Nk?te.textContent=Ie:me++,Ze!==this.defaultSpacing&&(te.style.letterSpacing=`${Ze}px`),Ae.push(te),si=Ka}return te&&me&&(te.textContent=Ie),Ae}_applyMinimumContrast(D,F,I,B,le,ae){if(this._optionsService.rawOptions.minimumContrastRatio===1||(0,k.treatGlyphAsBackgroundColor)(B.getCode()))return!1;let W=this._getContrastCache(B),G;if(le||ae||(G=W.getColor(F.rgba,I.rgba)),G===void 0){let ve=this._optionsService.rawOptions.minimumContrastRatio/(B.isDim()?2:1);G=x.color.ensureContrastRatio(le||F,ae||I,ve),W.setColor((le||F).rgba,(ae||I).rgba,G??null)}return!!G&&(this._addStyle(D,`color:${G.css}`),!0)}_getContrastCache(D){return D.isDim()?this._themeService.colors.halfContrastCache:this._themeService.colors.contrastCache}_addStyle(D,F){D.setAttribute("style",`${D.getAttribute("style")||""}${F};`)}_isCellInSelection(D,F){let I=this._selectionStart,B=this._selectionEnd;return!(!I||!B)&&(this._columnSelectMode?I[0]<=B[0]?D>=I[0]&&F>=I[1]&&D<B[0]&&F<=B[1]:D<I[0]&&F>=I[1]&&D>=B[0]&&F<=B[1]:F>I[1]&&F<B[1]||I[1]===B[1]&&F===I[1]&&D>=I[0]&&D<B[0]||I[1]<B[1]&&F===B[1]&&D<B[0]||I[1]<B[1]&&F===I[1]&&D>=I[0])}};function A(D,F,I){for(;D.length<I;)D=F+D;return D}a.DomRendererRowFactory=O=d([p(1,b.ICharacterJoinerService),p(2,M.IOptionsService),p(3,b.ICoreBrowserService),p(4,M.ICoreService),p(5,M.IDecorationService),p(6,b.IThemeService)],O)},2550:(i,a)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.WidthCache=void 0,a.WidthCache=class{constructor(s,d){this._flat=new Float32Array(256),this._font="",this._fontSize=0,this._weight="normal",this._weightBold="bold",this._measureElements=[],this._container=s.createElement("div"),this._container.classList.add("xterm-width-cache-measure-container"),this._container.setAttribute("aria-hidden","true"),this._container.style.whiteSpace="pre",this._container.style.fontKerning="none";let p=s.createElement("span");p.classList.add("xterm-char-measure-element");let u=s.createElement("span");u.classList.add("xterm-char-measure-element"),u.style.fontWeight="bold";let g=s.createElement("span");g.classList.add("xterm-char-measure-element"),g.style.fontStyle="italic";let C=s.createElement("span");C.classList.add("xterm-char-measure-element"),C.style.fontWeight="bold",C.style.fontStyle="italic",this._measureElements=[p,u,g,C],this._container.appendChild(p),this._container.appendChild(u),this._container.appendChild(g),this._container.appendChild(C),d.appendChild(this._container),this.clear()}dispose(){this._container.remove(),this._measureElements.length=0,this._holey=void 0}clear(){this._flat.fill(-9999),this._holey=new Map}setFont(s,d,p,u){s===this._font&&d===this._fontSize&&p===this._weight&&u===this._weightBold||(this._font=s,this._fontSize=d,this._weight=p,this._weightBold=u,this._container.style.fontFamily=this._font,this._container.style.fontSize=`${this._fontSize}px`,this._measureElements[0].style.fontWeight=`${p}`,this._measureElements[1].style.fontWeight=`${u}`,this._measureElements[2].style.fontWeight=`${p}`,this._measureElements[3].style.fontWeight=`${u}`,this.clear())}get(s,d,p){let u=0;if(!d&&!p&&s.length===1&&(u=s.charCodeAt(0))<256){if(this._flat[u]!==-9999)return this._flat[u];let M=this._measure(s,0);return M>0&&(this._flat[u]=M),M}let g=s;d&&(g+="B"),p&&(g+="I");let C=this._holey.get(g);if(C===void 0){let M=0;d&&(M|=1),p&&(M|=2),C=this._measure(s,M),C>0&&this._holey.set(g,C)}return C}_measure(s,d){let p=this._measureElements[d];return p.textContent=s.repeat(32),p.offsetWidth/32}}},2223:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.TEXT_BASELINE=a.DIM_OPACITY=a.INVERTED_DEFAULT_COLOR=void 0;let d=s(6114);a.INVERTED_DEFAULT_COLOR=257,a.DIM_OPACITY=.5,a.TEXT_BASELINE=d.isFirefox||d.isLegacyEdge?"bottom":"ideographic"},6171:(i,a)=>{function s(p){return 57508<=p&&p<=57558}function d(p){return p>=128512&&p<=128591||p>=127744&&p<=128511||p>=128640&&p<=128767||p>=9728&&p<=9983||p>=9984&&p<=10175||p>=65024&&p<=65039||p>=129280&&p<=129535||p>=127462&&p<=127487}Object.defineProperty(a,"__esModule",{value:!0}),a.computeNextVariantOffset=a.createRenderDimensions=a.treatGlyphAsBackgroundColor=a.allowRescaling=a.isEmoji=a.isRestrictedPowerlineGlyph=a.isPowerlineGlyph=a.throwIfFalsy=void 0,a.throwIfFalsy=function(p){if(!p)throw new Error("value must not be falsy");return p},a.isPowerlineGlyph=s,a.isRestrictedPowerlineGlyph=function(p){return 57520<=p&&p<=57527},a.isEmoji=d,a.allowRescaling=function(p,u,g,C){return u===1&&g>Math.ceil(1.5*C)&&p!==void 0&&p>255&&!d(p)&&!s(p)&&!(function(M){return 57344<=M&&M<=63743})(p)},a.treatGlyphAsBackgroundColor=function(p){return s(p)||(function(u){return 9472<=u&&u<=9631})(p)},a.createRenderDimensions=function(){return{css:{canvas:{width:0,height:0},cell:{width:0,height:0}},device:{canvas:{width:0,height:0},cell:{width:0,height:0},char:{width:0,height:0,left:0,top:0}}}},a.computeNextVariantOffset=function(p,u,g=0){return(p-(2*Math.round(u)-g))%(2*Math.round(u))}},6052:(i,a)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.createSelectionRenderModel=void 0;class s{constructor(){this.clear()}clear(){this.hasSelection=!1,this.columnSelectMode=!1,this.viewportStartRow=0,this.viewportEndRow=0,this.viewportCappedStartRow=0,this.viewportCappedEndRow=0,this.startCol=0,this.endCol=0,this.selectionStart=void 0,this.selectionEnd=void 0}update(p,u,g,C=!1){if(this.selectionStart=u,this.selectionEnd=g,!u||!g||u[0]===g[0]&&u[1]===g[1])return void this.clear();let M=p.buffers.active.ydisp,x=u[1]-M,b=g[1]-M,P=Math.max(x,0),k=Math.min(b,p.rows-1);P>=p.rows||k<0?this.clear():(this.hasSelection=!0,this.columnSelectMode=C,this.viewportStartRow=x,this.viewportEndRow=b,this.viewportCappedStartRow=P,this.viewportCappedEndRow=k,this.startCol=u[0],this.endCol=g[0])}isCellSelected(p,u,g){return!!this.hasSelection&&(g-=p.buffer.active.viewportY,this.columnSelectMode?this.startCol<=this.endCol?u>=this.startCol&&g>=this.viewportCappedStartRow&&u<this.endCol&&g<=this.viewportCappedEndRow:u<this.startCol&&g>=this.viewportCappedStartRow&&u>=this.endCol&&g<=this.viewportCappedEndRow:g>this.viewportStartRow&&g<this.viewportEndRow||this.viewportStartRow===this.viewportEndRow&&g===this.viewportStartRow&&u>=this.startCol&&u<this.endCol||this.viewportStartRow<this.viewportEndRow&&g===this.viewportEndRow&&u<this.endCol||this.viewportStartRow<this.viewportEndRow&&g===this.viewportStartRow&&u>=this.startCol)}}a.createSelectionRenderModel=function(){return new s}},456:(i,a)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.SelectionModel=void 0,a.SelectionModel=class{constructor(s){this._bufferService=s,this.isSelectAllActive=!1,this.selectionStartLength=0}clearSelection(){this.selectionStart=void 0,this.selectionEnd=void 0,this.isSelectAllActive=!1,this.selectionStartLength=0}get finalSelectionStart(){return this.isSelectAllActive?[0,0]:this.selectionEnd&&this.selectionStart&&this.areSelectionValuesReversed()?this.selectionEnd:this.selectionStart}get finalSelectionEnd(){if(this.isSelectAllActive)return[this._bufferService.cols,this._bufferService.buffer.ybase+this._bufferService.rows-1];if(this.selectionStart){if(!this.selectionEnd||this.areSelectionValuesReversed()){let s=this.selectionStart[0]+this.selectionStartLength;return s>this._bufferService.cols?s%this._bufferService.cols==0?[this._bufferService.cols,this.selectionStart[1]+Math.floor(s/this._bufferService.cols)-1]:[s%this._bufferService.cols,this.selectionStart[1]+Math.floor(s/this._bufferService.cols)]:[s,this.selectionStart[1]]}if(this.selectionStartLength&&this.selectionEnd[1]===this.selectionStart[1]){let s=this.selectionStart[0]+this.selectionStartLength;return s>this._bufferService.cols?[s%this._bufferService.cols,this.selectionStart[1]+Math.floor(s/this._bufferService.cols)]:[Math.max(s,this.selectionEnd[0]),this.selectionEnd[1]]}return this.selectionEnd}}areSelectionValuesReversed(){let s=this.selectionStart,d=this.selectionEnd;return!(!s||!d)&&(s[1]>d[1]||s[1]===d[1]&&s[0]>d[0])}handleTrim(s){return this.selectionStart&&(this.selectionStart[1]-=s),this.selectionEnd&&(this.selectionEnd[1]-=s),this.selectionEnd&&this.selectionEnd[1]<0?(this.clearSelection(),!0):(this.selectionStart&&this.selectionStart[1]<0&&(this.selectionStart[1]=0),!1)}}},428:function(i,a,s){var d=this&&this.__decorate||function(k,S,O,A){var D,F=arguments.length,I=F<3?S:A===null?A=Object.getOwnPropertyDescriptor(S,O):A;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")I=Reflect.decorate(k,S,O,A);else for(var B=k.length-1;B>=0;B--)(D=k[B])&&(I=(F<3?D(I):F>3?D(S,O,I):D(S,O))||I);return F>3&&I&&Object.defineProperty(S,O,I),I},p=this&&this.__param||function(k,S){return function(O,A){S(O,A,k)}};Object.defineProperty(a,"__esModule",{value:!0}),a.CharSizeService=void 0;let u=s(2585),g=s(8460),C=s(844),M=a.CharSizeService=class extends C.Disposable{get hasValidSize(){return this.width>0&&this.height>0}constructor(k,S,O){super(),this._optionsService=O,this.width=0,this.height=0,this._onCharSizeChange=this.register(new g.EventEmitter),this.onCharSizeChange=this._onCharSizeChange.event;try{this._measureStrategy=this.register(new P(this._optionsService))}catch{this._measureStrategy=this.register(new b(k,S,this._optionsService))}this.register(this._optionsService.onMultipleOptionChange(["fontFamily","fontSize"],()=>this.measure()))}measure(){let k=this._measureStrategy.measure();k.width===this.width&&k.height===this.height||(this.width=k.width,this.height=k.height,this._onCharSizeChange.fire())}};a.CharSizeService=M=d([p(2,u.IOptionsService)],M);class x extends C.Disposable{constructor(){super(...arguments),this._result={width:0,height:0}}_validateAndSet(S,O){S!==void 0&&S>0&&O!==void 0&&O>0&&(this._result.width=S,this._result.height=O)}}class b extends x{constructor(S,O,A){super(),this._document=S,this._parentElement=O,this._optionsService=A,this._measureElement=this._document.createElement("span"),this._measureElement.classList.add("xterm-char-measure-element"),this._measureElement.textContent="W".repeat(32),this._measureElement.setAttribute("aria-hidden","true"),this._measureElement.style.whiteSpace="pre",this._measureElement.style.fontKerning="none",this._parentElement.appendChild(this._measureElement)}measure(){return this._measureElement.style.fontFamily=this._optionsService.rawOptions.fontFamily,this._measureElement.style.fontSize=`${this._optionsService.rawOptions.fontSize}px`,this._validateAndSet(Number(this._measureElement.offsetWidth)/32,Number(this._measureElement.offsetHeight)),this._result}}class P extends x{constructor(S){super(),this._optionsService=S,this._canvas=new OffscreenCanvas(100,100),this._ctx=this._canvas.getContext("2d");let O=this._ctx.measureText("W");if(!("width"in O&&"fontBoundingBoxAscent"in O&&"fontBoundingBoxDescent"in O))throw new Error("Required font metrics not supported")}measure(){this._ctx.font=`${this._optionsService.rawOptions.fontSize}px ${this._optionsService.rawOptions.fontFamily}`;let S=this._ctx.measureText("W");return this._validateAndSet(S.width,S.fontBoundingBoxAscent+S.fontBoundingBoxDescent),this._result}}},4269:function(i,a,s){var d=this&&this.__decorate||function(P,k,S,O){var A,D=arguments.length,F=D<3?k:O===null?O=Object.getOwnPropertyDescriptor(k,S):O;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")F=Reflect.decorate(P,k,S,O);else for(var I=P.length-1;I>=0;I--)(A=P[I])&&(F=(D<3?A(F):D>3?A(k,S,F):A(k,S))||F);return D>3&&F&&Object.defineProperty(k,S,F),F},p=this&&this.__param||function(P,k){return function(S,O){k(S,O,P)}};Object.defineProperty(a,"__esModule",{value:!0}),a.CharacterJoinerService=a.JoinedCellData=void 0;let u=s(3734),g=s(643),C=s(511),M=s(2585);class x extends u.AttributeData{constructor(k,S,O){super(),this.content=0,this.combinedData="",this.fg=k.fg,this.bg=k.bg,this.combinedData=S,this._width=O}isCombined(){return 2097152}getWidth(){return this._width}getChars(){return this.combinedData}getCode(){return 2097151}setFromCharData(k){throw new Error("not implemented")}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}}a.JoinedCellData=x;let b=a.CharacterJoinerService=class Fj{constructor(k){this._bufferService=k,this._characterJoiners=[],this._nextCharacterJoinerId=0,this._workCell=new C.CellData}register(k){let S={id:this._nextCharacterJoinerId++,handler:k};return this._characterJoiners.push(S),S.id}deregister(k){for(let S=0;S<this._characterJoiners.length;S++)if(this._characterJoiners[S].id===k)return this._characterJoiners.splice(S,1),!0;return!1}getJoinedCharacters(k){if(this._characterJoiners.length===0)return[];let S=this._bufferService.buffer.lines.get(k);if(!S||S.length===0)return[];let O=[],A=S.translateToString(!0),D=0,F=0,I=0,B=S.getFg(0),le=S.getBg(0);for(let ae=0;ae<S.getTrimmedLength();ae++)if(S.loadCell(ae,this._workCell),this._workCell.getWidth()!==0){if(this._workCell.fg!==B||this._workCell.bg!==le){if(ae-D>1){let W=this._getJoinedRanges(A,I,F,S,D);for(let G=0;G<W.length;G++)O.push(W[G])}D=ae,I=F,B=this._workCell.fg,le=this._workCell.bg}F+=this._workCell.getChars().length||g.WHITESPACE_CELL_CHAR.length}if(this._bufferService.cols-D>1){let ae=this._getJoinedRanges(A,I,F,S,D);for(let W=0;W<ae.length;W++)O.push(ae[W])}return O}_getJoinedRanges(k,S,O,A,D){let F=k.substring(S,O),I=[];try{I=this._characterJoiners[0].handler(F)}catch(B){console.error(B)}for(let B=1;B<this._characterJoiners.length;B++)try{let le=this._characterJoiners[B].handler(F);for(let ae=0;ae<le.length;ae++)Fj._mergeRanges(I,le[ae])}catch(le){console.error(le)}return this._stringRangesToCellRanges(I,A,D),I}_stringRangesToCellRanges(k,S,O){let A=0,D=!1,F=0,I=k[A];if(I){for(let B=O;B<this._bufferService.cols;B++){let le=S.getWidth(B),ae=S.getString(B).length||g.WHITESPACE_CELL_CHAR.length;if(le!==0){if(!D&&I[0]<=F&&(I[0]=B,D=!0),I[1]<=F){if(I[1]=B,I=k[++A],!I)break;I[0]<=F?(I[0]=B,D=!0):D=!1}F+=ae}}I&&(I[1]=this._bufferService.cols)}}static _mergeRanges(k,S){let O=!1;for(let A=0;A<k.length;A++){let D=k[A];if(O){if(S[1]<=D[0])return k[A-1][1]=S[1],k;if(S[1]<=D[1])return k[A-1][1]=Math.max(S[1],D[1]),k.splice(A,1),k;k.splice(A,1),A--}else{if(S[1]<=D[0])return k.splice(A,0,S),k;if(S[1]<=D[1])return D[0]=Math.min(S[0],D[0]),k;S[0]<D[1]&&(D[0]=Math.min(S[0],D[0]),O=!0)}}return O?k[k.length-1][1]=S[1]:k.push(S),k}};a.CharacterJoinerService=b=d([p(0,M.IBufferService)],b)},5114:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.CoreBrowserService=void 0;let d=s(844),p=s(8460),u=s(3656);class g extends d.Disposable{constructor(x,b,P){super(),this._textarea=x,this._window=b,this.mainDocument=P,this._isFocused=!1,this._cachedIsFocused=void 0,this._screenDprMonitor=new C(this._window),this._onDprChange=this.register(new p.EventEmitter),this.onDprChange=this._onDprChange.event,this._onWindowChange=this.register(new p.EventEmitter),this.onWindowChange=this._onWindowChange.event,this.register(this.onWindowChange(k=>this._screenDprMonitor.setWindow(k))),this.register((0,p.forwardEvent)(this._screenDprMonitor.onDprChange,this._onDprChange)),this._textarea.addEventListener("focus",()=>this._isFocused=!0),this._textarea.addEventListener("blur",()=>this._isFocused=!1)}get window(){return this._window}set window(x){this._window!==x&&(this._window=x,this._onWindowChange.fire(this._window))}get dpr(){return this.window.devicePixelRatio}get isFocused(){return this._cachedIsFocused===void 0&&(this._cachedIsFocused=this._isFocused&&this._textarea.ownerDocument.hasFocus(),queueMicrotask(()=>this._cachedIsFocused=void 0)),this._cachedIsFocused}}a.CoreBrowserService=g;class C extends d.Disposable{constructor(x){super(),this._parentWindow=x,this._windowResizeListener=this.register(new d.MutableDisposable),this._onDprChange=this.register(new p.EventEmitter),this.onDprChange=this._onDprChange.event,this._outerListener=()=>this._setDprAndFireIfDiffers(),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._updateDpr(),this._setWindowResizeListener(),this.register((0,d.toDisposable)(()=>this.clearListener()))}setWindow(x){this._parentWindow=x,this._setWindowResizeListener(),this._setDprAndFireIfDiffers()}_setWindowResizeListener(){this._windowResizeListener.value=(0,u.addDisposableDomListener)(this._parentWindow,"resize",()=>this._setDprAndFireIfDiffers())}_setDprAndFireIfDiffers(){this._parentWindow.devicePixelRatio!==this._currentDevicePixelRatio&&this._onDprChange.fire(this._parentWindow.devicePixelRatio),this._updateDpr()}_updateDpr(){this._outerListener&&(this._resolutionMediaMatchList?.removeListener(this._outerListener),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._resolutionMediaMatchList=this._parentWindow.matchMedia(`screen and (resolution: ${this._parentWindow.devicePixelRatio}dppx)`),this._resolutionMediaMatchList.addListener(this._outerListener))}clearListener(){this._resolutionMediaMatchList&&this._outerListener&&(this._resolutionMediaMatchList.removeListener(this._outerListener),this._resolutionMediaMatchList=void 0,this._outerListener=void 0)}}},779:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.LinkProviderService=void 0;let d=s(844);class p extends d.Disposable{constructor(){super(),this.linkProviders=[],this.register((0,d.toDisposable)(()=>this.linkProviders.length=0))}registerLinkProvider(g){return this.linkProviders.push(g),{dispose:()=>{let C=this.linkProviders.indexOf(g);C!==-1&&this.linkProviders.splice(C,1)}}}}a.LinkProviderService=p},8934:function(i,a,s){var d=this&&this.__decorate||function(M,x,b,P){var k,S=arguments.length,O=S<3?x:P===null?P=Object.getOwnPropertyDescriptor(x,b):P;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")O=Reflect.decorate(M,x,b,P);else for(var A=M.length-1;A>=0;A--)(k=M[A])&&(O=(S<3?k(O):S>3?k(x,b,O):k(x,b))||O);return S>3&&O&&Object.defineProperty(x,b,O),O},p=this&&this.__param||function(M,x){return function(b,P){x(b,P,M)}};Object.defineProperty(a,"__esModule",{value:!0}),a.MouseService=void 0;let u=s(4725),g=s(9806),C=a.MouseService=class{constructor(M,x){this._renderService=M,this._charSizeService=x}getCoords(M,x,b,P,k){return(0,g.getCoords)(window,M,x,b,P,this._charSizeService.hasValidSize,this._renderService.dimensions.css.cell.width,this._renderService.dimensions.css.cell.height,k)}getMouseReportCoords(M,x){let b=(0,g.getCoordsRelativeToElement)(window,M,x);if(this._charSizeService.hasValidSize)return b[0]=Math.min(Math.max(b[0],0),this._renderService.dimensions.css.canvas.width-1),b[1]=Math.min(Math.max(b[1],0),this._renderService.dimensions.css.canvas.height-1),{col:Math.floor(b[0]/this._renderService.dimensions.css.cell.width),row:Math.floor(b[1]/this._renderService.dimensions.css.cell.height),x:Math.floor(b[0]),y:Math.floor(b[1])}}};a.MouseService=C=d([p(0,u.IRenderService),p(1,u.ICharSizeService)],C)},3230:function(i,a,s){var d=this&&this.__decorate||function(k,S,O,A){var D,F=arguments.length,I=F<3?S:A===null?A=Object.getOwnPropertyDescriptor(S,O):A;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")I=Reflect.decorate(k,S,O,A);else for(var B=k.length-1;B>=0;B--)(D=k[B])&&(I=(F<3?D(I):F>3?D(S,O,I):D(S,O))||I);return F>3&&I&&Object.defineProperty(S,O,I),I},p=this&&this.__param||function(k,S){return function(O,A){S(O,A,k)}};Object.defineProperty(a,"__esModule",{value:!0}),a.RenderService=void 0;let u=s(6193),g=s(4725),C=s(8460),M=s(844),x=s(7226),b=s(2585),P=a.RenderService=class extends M.Disposable{get dimensions(){return this._renderer.value.dimensions}constructor(k,S,O,A,D,F,I,B){super(),this._rowCount=k,this._charSizeService=A,this._renderer=this.register(new M.MutableDisposable),this._pausedResizeTask=new x.DebouncedIdleTask,this._observerDisposable=this.register(new M.MutableDisposable),this._isPaused=!1,this._needsFullRefresh=!1,this._isNextRenderRedrawOnly=!0,this._needsSelectionRefresh=!1,this._canvasWidth=0,this._canvasHeight=0,this._selectionState={start:void 0,end:void 0,columnSelectMode:!1},this._onDimensionsChange=this.register(new C.EventEmitter),this.onDimensionsChange=this._onDimensionsChange.event,this._onRenderedViewportChange=this.register(new C.EventEmitter),this.onRenderedViewportChange=this._onRenderedViewportChange.event,this._onRender=this.register(new C.EventEmitter),this.onRender=this._onRender.event,this._onRefreshRequest=this.register(new C.EventEmitter),this.onRefreshRequest=this._onRefreshRequest.event,this._renderDebouncer=new u.RenderDebouncer((le,ae)=>this._renderRows(le,ae),I),this.register(this._renderDebouncer),this.register(I.onDprChange(()=>this.handleDevicePixelRatioChange())),this.register(F.onResize(()=>this._fullRefresh())),this.register(F.buffers.onBufferActivate(()=>this._renderer.value?.clear())),this.register(O.onOptionChange(()=>this._handleOptionsChanged())),this.register(this._charSizeService.onCharSizeChange(()=>this.handleCharSizeChanged())),this.register(D.onDecorationRegistered(()=>this._fullRefresh())),this.register(D.onDecorationRemoved(()=>this._fullRefresh())),this.register(O.onMultipleOptionChange(["customGlyphs","drawBoldTextInBrightColors","letterSpacing","lineHeight","fontFamily","fontSize","fontWeight","fontWeightBold","minimumContrastRatio","rescaleOverlappingGlyphs"],()=>{this.clear(),this.handleResize(F.cols,F.rows),this._fullRefresh()})),this.register(O.onMultipleOptionChange(["cursorBlink","cursorStyle"],()=>this.refreshRows(F.buffer.y,F.buffer.y,!0))),this.register(B.onChangeColors(()=>this._fullRefresh())),this._registerIntersectionObserver(I.window,S),this.register(I.onWindowChange(le=>this._registerIntersectionObserver(le,S)))}_registerIntersectionObserver(k,S){if("IntersectionObserver"in k){let O=new k.IntersectionObserver(A=>this._handleIntersectionChange(A[A.length-1]),{threshold:0});O.observe(S),this._observerDisposable.value=(0,M.toDisposable)(()=>O.disconnect())}}_handleIntersectionChange(k){this._isPaused=k.isIntersecting===void 0?k.intersectionRatio===0:!k.isIntersecting,this._isPaused||this._charSizeService.hasValidSize||this._charSizeService.measure(),!this._isPaused&&this._needsFullRefresh&&(this._pausedResizeTask.flush(),this.refreshRows(0,this._rowCount-1),this._needsFullRefresh=!1)}refreshRows(k,S,O=!1){this._isPaused?this._needsFullRefresh=!0:(O||(this._isNextRenderRedrawOnly=!1),this._renderDebouncer.refresh(k,S,this._rowCount))}_renderRows(k,S){this._renderer.value&&(k=Math.min(k,this._rowCount-1),S=Math.min(S,this._rowCount-1),this._renderer.value.renderRows(k,S),this._needsSelectionRefresh&&(this._renderer.value.handleSelectionChanged(this._selectionState.start,this._selectionState.end,this._selectionState.columnSelectMode),this._needsSelectionRefresh=!1),this._isNextRenderRedrawOnly||this._onRenderedViewportChange.fire({start:k,end:S}),this._onRender.fire({start:k,end:S}),this._isNextRenderRedrawOnly=!0)}resize(k,S){this._rowCount=S,this._fireOnCanvasResize()}_handleOptionsChanged(){this._renderer.value&&(this.refreshRows(0,this._rowCount-1),this._fireOnCanvasResize())}_fireOnCanvasResize(){this._renderer.value&&(this._renderer.value.dimensions.css.canvas.width===this._canvasWidth&&this._renderer.value.dimensions.css.canvas.height===this._canvasHeight||this._onDimensionsChange.fire(this._renderer.value.dimensions))}hasRenderer(){return!!this._renderer.value}setRenderer(k){this._renderer.value=k,this._renderer.value&&(this._renderer.value.onRequestRedraw(S=>this.refreshRows(S.start,S.end,!0)),this._needsSelectionRefresh=!0,this._fullRefresh())}addRefreshCallback(k){return this._renderDebouncer.addRefreshCallback(k)}_fullRefresh(){this._isPaused?this._needsFullRefresh=!0:this.refreshRows(0,this._rowCount-1)}clearTextureAtlas(){this._renderer.value&&(this._renderer.value.clearTextureAtlas?.(),this._fullRefresh())}handleDevicePixelRatioChange(){this._charSizeService.measure(),this._renderer.value&&(this._renderer.value.handleDevicePixelRatioChange(),this.refreshRows(0,this._rowCount-1))}handleResize(k,S){this._renderer.value&&(this._isPaused?this._pausedResizeTask.set(()=>this._renderer.value?.handleResize(k,S)):this._renderer.value.handleResize(k,S),this._fullRefresh())}handleCharSizeChanged(){this._renderer.value?.handleCharSizeChanged()}handleBlur(){this._renderer.value?.handleBlur()}handleFocus(){this._renderer.value?.handleFocus()}handleSelectionChanged(k,S,O){this._selectionState.start=k,this._selectionState.end=S,this._selectionState.columnSelectMode=O,this._renderer.value?.handleSelectionChanged(k,S,O)}handleCursorMove(){this._renderer.value?.handleCursorMove()}clear(){this._renderer.value?.clear()}};a.RenderService=P=d([p(2,b.IOptionsService),p(3,g.ICharSizeService),p(4,b.IDecorationService),p(5,b.IBufferService),p(6,g.ICoreBrowserService),p(7,g.IThemeService)],P)},9312:function(i,a,s){var d=this&&this.__decorate||function(I,B,le,ae){var W,G=arguments.length,ve=G<3?B:ae===null?ae=Object.getOwnPropertyDescriptor(B,le):ae;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")ve=Reflect.decorate(I,B,le,ae);else for(var Se=I.length-1;Se>=0;Se--)(W=I[Se])&&(ve=(G<3?W(ve):G>3?W(B,le,ve):W(B,le))||ve);return G>3&&ve&&Object.defineProperty(B,le,ve),ve},p=this&&this.__param||function(I,B){return function(le,ae){B(le,ae,I)}};Object.defineProperty(a,"__esModule",{value:!0}),a.SelectionService=void 0;let u=s(9806),g=s(9504),C=s(456),M=s(4725),x=s(8460),b=s(844),P=s(6114),k=s(4841),S=s(511),O=s(2585),A="\xA0",D=new RegExp(A,"g"),F=a.SelectionService=class extends b.Disposable{constructor(I,B,le,ae,W,G,ve,Se,pe){super(),this._element=I,this._screenElement=B,this._linkifier=le,this._bufferService=ae,this._coreService=W,this._mouseService=G,this._optionsService=ve,this._renderService=Se,this._coreBrowserService=pe,this._dragScrollAmount=0,this._enabled=!0,this._workCell=new S.CellData,this._mouseDownTimeStamp=0,this._oldHasSelection=!1,this._oldSelectionStart=void 0,this._oldSelectionEnd=void 0,this._onLinuxMouseSelection=this.register(new x.EventEmitter),this.onLinuxMouseSelection=this._onLinuxMouseSelection.event,this._onRedrawRequest=this.register(new x.EventEmitter),this.onRequestRedraw=this._onRedrawRequest.event,this._onSelectionChange=this.register(new x.EventEmitter),this.onSelectionChange=this._onSelectionChange.event,this._onRequestScrollLines=this.register(new x.EventEmitter),this.onRequestScrollLines=this._onRequestScrollLines.event,this._mouseMoveListener=Ae=>this._handleMouseMove(Ae),this._mouseUpListener=Ae=>this._handleMouseUp(Ae),this._coreService.onUserInput(()=>{this.hasSelection&&this.clearSelection()}),this._trimListener=this._bufferService.buffer.lines.onTrim(Ae=>this._handleTrim(Ae)),this.register(this._bufferService.buffers.onBufferActivate(Ae=>this._handleBufferActivate(Ae))),this.enable(),this._model=new C.SelectionModel(this._bufferService),this._activeSelectionMode=0,this.register((0,b.toDisposable)(()=>{this._removeMouseDownListeners()}))}reset(){this.clearSelection()}disable(){this.clearSelection(),this._enabled=!1}enable(){this._enabled=!0}get selectionStart(){return this._model.finalSelectionStart}get selectionEnd(){return this._model.finalSelectionEnd}get hasSelection(){let I=this._model.finalSelectionStart,B=this._model.finalSelectionEnd;return!(!I||!B||I[0]===B[0]&&I[1]===B[1])}get selectionText(){let I=this._model.finalSelectionStart,B=this._model.finalSelectionEnd;if(!I||!B)return"";let le=this._bufferService.buffer,ae=[];if(this._activeSelectionMode===3){if(I[0]===B[0])return"";let W=I[0]<B[0]?I[0]:B[0],G=I[0]<B[0]?B[0]:I[0];for(let ve=I[1];ve<=B[1];ve++){let Se=le.translateBufferLineToString(ve,!0,W,G);ae.push(Se)}}else{let W=I[1]===B[1]?B[0]:void 0;ae.push(le.translateBufferLineToString(I[1],!0,I[0],W));for(let G=I[1]+1;G<=B[1]-1;G++){let ve=le.lines.get(G),Se=le.translateBufferLineToString(G,!0);ve?.isWrapped?ae[ae.length-1]+=Se:ae.push(Se)}if(I[1]!==B[1]){let G=le.lines.get(B[1]),ve=le.translateBufferLineToString(B[1],!0,0,B[0]);G&&G.isWrapped?ae[ae.length-1]+=ve:ae.push(ve)}}return ae.map(W=>W.replace(D," ")).join(P.isWindows?`\r
|
||
`:`
|
||
`)}clearSelection(){this._model.clearSelection(),this._removeMouseDownListeners(),this.refresh(),this._onSelectionChange.fire()}refresh(I){this._refreshAnimationFrame||(this._refreshAnimationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._refresh())),P.isLinux&&I&&this.selectionText.length&&this._onLinuxMouseSelection.fire(this.selectionText)}_refresh(){this._refreshAnimationFrame=void 0,this._onRedrawRequest.fire({start:this._model.finalSelectionStart,end:this._model.finalSelectionEnd,columnSelectMode:this._activeSelectionMode===3})}_isClickInSelection(I){let B=this._getMouseBufferCoords(I),le=this._model.finalSelectionStart,ae=this._model.finalSelectionEnd;return!!(le&&ae&&B)&&this._areCoordsInSelection(B,le,ae)}isCellInSelection(I,B){let le=this._model.finalSelectionStart,ae=this._model.finalSelectionEnd;return!(!le||!ae)&&this._areCoordsInSelection([I,B],le,ae)}_areCoordsInSelection(I,B,le){return I[1]>B[1]&&I[1]<le[1]||B[1]===le[1]&&I[1]===B[1]&&I[0]>=B[0]&&I[0]<le[0]||B[1]<le[1]&&I[1]===le[1]&&I[0]<le[0]||B[1]<le[1]&&I[1]===B[1]&&I[0]>=B[0]}_selectWordAtCursor(I,B){let le=this._linkifier.currentLink?.link?.range;if(le)return this._model.selectionStart=[le.start.x-1,le.start.y-1],this._model.selectionStartLength=(0,k.getRangeLength)(le,this._bufferService.cols),this._model.selectionEnd=void 0,!0;let ae=this._getMouseBufferCoords(I);return!!ae&&(this._selectWordAt(ae,B),this._model.selectionEnd=void 0,!0)}selectAll(){this._model.isSelectAllActive=!0,this.refresh(),this._onSelectionChange.fire()}selectLines(I,B){this._model.clearSelection(),I=Math.max(I,0),B=Math.min(B,this._bufferService.buffer.lines.length-1),this._model.selectionStart=[0,I],this._model.selectionEnd=[this._bufferService.cols,B],this.refresh(),this._onSelectionChange.fire()}_handleTrim(I){this._model.handleTrim(I)&&this.refresh()}_getMouseBufferCoords(I){let B=this._mouseService.getCoords(I,this._screenElement,this._bufferService.cols,this._bufferService.rows,!0);if(B)return B[0]--,B[1]--,B[1]+=this._bufferService.buffer.ydisp,B}_getMouseEventScrollAmount(I){let B=(0,u.getCoordsRelativeToElement)(this._coreBrowserService.window,I,this._screenElement)[1],le=this._renderService.dimensions.css.canvas.height;return B>=0&&B<=le?0:(B>le&&(B-=le),B=Math.min(Math.max(B,-50),50),B/=50,B/Math.abs(B)+Math.round(14*B))}shouldForceSelection(I){return P.isMac?I.altKey&&this._optionsService.rawOptions.macOptionClickForcesSelection:I.shiftKey}handleMouseDown(I){if(this._mouseDownTimeStamp=I.timeStamp,(I.button!==2||!this.hasSelection)&&I.button===0){if(!this._enabled){if(!this.shouldForceSelection(I))return;I.stopPropagation()}I.preventDefault(),this._dragScrollAmount=0,this._enabled&&I.shiftKey?this._handleIncrementalClick(I):I.detail===1?this._handleSingleClick(I):I.detail===2?this._handleDoubleClick(I):I.detail===3&&this._handleTripleClick(I),this._addMouseDownListeners(),this.refresh(!0)}}_addMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.addEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.addEventListener("mouseup",this._mouseUpListener)),this._dragScrollIntervalTimer=this._coreBrowserService.window.setInterval(()=>this._dragScroll(),50)}_removeMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.removeEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.removeEventListener("mouseup",this._mouseUpListener)),this._coreBrowserService.window.clearInterval(this._dragScrollIntervalTimer),this._dragScrollIntervalTimer=void 0}_handleIncrementalClick(I){this._model.selectionStart&&(this._model.selectionEnd=this._getMouseBufferCoords(I))}_handleSingleClick(I){if(this._model.selectionStartLength=0,this._model.isSelectAllActive=!1,this._activeSelectionMode=this.shouldColumnSelect(I)?3:0,this._model.selectionStart=this._getMouseBufferCoords(I),!this._model.selectionStart)return;this._model.selectionEnd=void 0;let B=this._bufferService.buffer.lines.get(this._model.selectionStart[1]);B&&B.length!==this._model.selectionStart[0]&&B.hasWidth(this._model.selectionStart[0])===0&&this._model.selectionStart[0]++}_handleDoubleClick(I){this._selectWordAtCursor(I,!0)&&(this._activeSelectionMode=1)}_handleTripleClick(I){let B=this._getMouseBufferCoords(I);B&&(this._activeSelectionMode=2,this._selectLineAt(B[1]))}shouldColumnSelect(I){return I.altKey&&!(P.isMac&&this._optionsService.rawOptions.macOptionClickForcesSelection)}_handleMouseMove(I){if(I.stopImmediatePropagation(),!this._model.selectionStart)return;let B=this._model.selectionEnd?[this._model.selectionEnd[0],this._model.selectionEnd[1]]:null;if(this._model.selectionEnd=this._getMouseBufferCoords(I),!this._model.selectionEnd)return void this.refresh(!0);this._activeSelectionMode===2?this._model.selectionEnd[1]<this._model.selectionStart[1]?this._model.selectionEnd[0]=0:this._model.selectionEnd[0]=this._bufferService.cols:this._activeSelectionMode===1&&this._selectToWordAt(this._model.selectionEnd),this._dragScrollAmount=this._getMouseEventScrollAmount(I),this._activeSelectionMode!==3&&(this._dragScrollAmount>0?this._model.selectionEnd[0]=this._bufferService.cols:this._dragScrollAmount<0&&(this._model.selectionEnd[0]=0));let le=this._bufferService.buffer;if(this._model.selectionEnd[1]<le.lines.length){let ae=le.lines.get(this._model.selectionEnd[1]);ae&&ae.hasWidth(this._model.selectionEnd[0])===0&&this._model.selectionEnd[0]<this._bufferService.cols&&this._model.selectionEnd[0]++}B&&B[0]===this._model.selectionEnd[0]&&B[1]===this._model.selectionEnd[1]||this.refresh(!0)}_dragScroll(){if(this._model.selectionEnd&&this._model.selectionStart&&this._dragScrollAmount){this._onRequestScrollLines.fire({amount:this._dragScrollAmount,suppressScrollEvent:!1});let I=this._bufferService.buffer;this._dragScrollAmount>0?(this._activeSelectionMode!==3&&(this._model.selectionEnd[0]=this._bufferService.cols),this._model.selectionEnd[1]=Math.min(I.ydisp+this._bufferService.rows,I.lines.length-1)):(this._activeSelectionMode!==3&&(this._model.selectionEnd[0]=0),this._model.selectionEnd[1]=I.ydisp),this.refresh()}}_handleMouseUp(I){let B=I.timeStamp-this._mouseDownTimeStamp;if(this._removeMouseDownListeners(),this.selectionText.length<=1&&B<500&&I.altKey&&this._optionsService.rawOptions.altClickMovesCursor){if(this._bufferService.buffer.ybase===this._bufferService.buffer.ydisp){let le=this._mouseService.getCoords(I,this._element,this._bufferService.cols,this._bufferService.rows,!1);if(le&&le[0]!==void 0&&le[1]!==void 0){let ae=(0,g.moveToCellSequence)(le[0]-1,le[1]-1,this._bufferService,this._coreService.decPrivateModes.applicationCursorKeys);this._coreService.triggerDataEvent(ae,!0)}}}else this._fireEventIfSelectionChanged()}_fireEventIfSelectionChanged(){let I=this._model.finalSelectionStart,B=this._model.finalSelectionEnd,le=!(!I||!B||I[0]===B[0]&&I[1]===B[1]);le?I&&B&&(this._oldSelectionStart&&this._oldSelectionEnd&&I[0]===this._oldSelectionStart[0]&&I[1]===this._oldSelectionStart[1]&&B[0]===this._oldSelectionEnd[0]&&B[1]===this._oldSelectionEnd[1]||this._fireOnSelectionChange(I,B,le)):this._oldHasSelection&&this._fireOnSelectionChange(I,B,le)}_fireOnSelectionChange(I,B,le){this._oldSelectionStart=I,this._oldSelectionEnd=B,this._oldHasSelection=le,this._onSelectionChange.fire()}_handleBufferActivate(I){this.clearSelection(),this._trimListener.dispose(),this._trimListener=I.activeBuffer.lines.onTrim(B=>this._handleTrim(B))}_convertViewportColToCharacterIndex(I,B){let le=B;for(let ae=0;B>=ae;ae++){let W=I.loadCell(ae,this._workCell).getChars().length;this._workCell.getWidth()===0?le--:W>1&&B!==ae&&(le+=W-1)}return le}setSelection(I,B,le){this._model.clearSelection(),this._removeMouseDownListeners(),this._model.selectionStart=[I,B],this._model.selectionStartLength=le,this.refresh(),this._fireEventIfSelectionChanged()}rightClickSelect(I){this._isClickInSelection(I)||(this._selectWordAtCursor(I,!1)&&this.refresh(!0),this._fireEventIfSelectionChanged())}_getWordAt(I,B,le=!0,ae=!0){if(I[0]>=this._bufferService.cols)return;let W=this._bufferService.buffer,G=W.lines.get(I[1]);if(!G)return;let ve=W.translateBufferLineToString(I[1],!1),Se=this._convertViewportColToCharacterIndex(G,I[0]),pe=Se,Ae=I[0]-Se,ue=0,H=0,te=0,de=0;if(ve.charAt(Se)===" "){for(;Se>0&&ve.charAt(Se-1)===" ";)Se--;for(;pe<ve.length&&ve.charAt(pe+1)===" ";)pe++}else{let $e=I[0],tt=I[0];G.getWidth($e)===0&&(ue++,$e--),G.getWidth(tt)===2&&(H++,tt++);let et=G.getString(tt).length;for(et>1&&(de+=et-1,pe+=et-1);$e>0&&Se>0&&!this._isCharWordSeparator(G.loadCell($e-1,this._workCell));){G.loadCell($e-1,this._workCell);let Me=this._workCell.getChars().length;this._workCell.getWidth()===0?(ue++,$e--):Me>1&&(te+=Me-1,Se-=Me-1),Se--,$e--}for(;tt<G.length&&pe+1<ve.length&&!this._isCharWordSeparator(G.loadCell(tt+1,this._workCell));){G.loadCell(tt+1,this._workCell);let Me=this._workCell.getChars().length;this._workCell.getWidth()===2?(H++,tt++):Me>1&&(de+=Me-1,pe+=Me-1),pe++,tt++}}pe++;let me=Se+Ae-ue+te,Ie=Math.min(this._bufferService.cols,pe-Se+ue+H-te-de);if(B||ve.slice(Se,pe).trim()!==""){if(le&&me===0&&G.getCodePoint(0)!==32){let $e=W.lines.get(I[1]-1);if($e&&G.isWrapped&&$e.getCodePoint(this._bufferService.cols-1)!==32){let tt=this._getWordAt([this._bufferService.cols-1,I[1]-1],!1,!0,!1);if(tt){let et=this._bufferService.cols-tt.start;me-=et,Ie+=et}}}if(ae&&me+Ie===this._bufferService.cols&&G.getCodePoint(this._bufferService.cols-1)!==32){let $e=W.lines.get(I[1]+1);if($e?.isWrapped&&$e.getCodePoint(0)!==32){let tt=this._getWordAt([0,I[1]+1],!1,!1,!0);tt&&(Ie+=tt.length)}}return{start:me,length:Ie}}}_selectWordAt(I,B){let le=this._getWordAt(I,B);if(le){for(;le.start<0;)le.start+=this._bufferService.cols,I[1]--;this._model.selectionStart=[le.start,I[1]],this._model.selectionStartLength=le.length}}_selectToWordAt(I){let B=this._getWordAt(I,!0);if(B){let le=I[1];for(;B.start<0;)B.start+=this._bufferService.cols,le--;if(!this._model.areSelectionValuesReversed())for(;B.start+B.length>this._bufferService.cols;)B.length-=this._bufferService.cols,le++;this._model.selectionEnd=[this._model.areSelectionValuesReversed()?B.start:B.start+B.length,le]}}_isCharWordSeparator(I){return I.getWidth()!==0&&this._optionsService.rawOptions.wordSeparator.indexOf(I.getChars())>=0}_selectLineAt(I){let B=this._bufferService.buffer.getWrappedRangeForLine(I),le={start:{x:0,y:B.first},end:{x:this._bufferService.cols-1,y:B.last}};this._model.selectionStart=[0,B.first],this._model.selectionEnd=void 0,this._model.selectionStartLength=(0,k.getRangeLength)(le,this._bufferService.cols)}};a.SelectionService=F=d([p(3,O.IBufferService),p(4,O.ICoreService),p(5,M.IMouseService),p(6,O.IOptionsService),p(7,M.IRenderService),p(8,M.ICoreBrowserService)],F)},4725:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.ILinkProviderService=a.IThemeService=a.ICharacterJoinerService=a.ISelectionService=a.IRenderService=a.IMouseService=a.ICoreBrowserService=a.ICharSizeService=void 0;let d=s(8343);a.ICharSizeService=(0,d.createDecorator)("CharSizeService"),a.ICoreBrowserService=(0,d.createDecorator)("CoreBrowserService"),a.IMouseService=(0,d.createDecorator)("MouseService"),a.IRenderService=(0,d.createDecorator)("RenderService"),a.ISelectionService=(0,d.createDecorator)("SelectionService"),a.ICharacterJoinerService=(0,d.createDecorator)("CharacterJoinerService"),a.IThemeService=(0,d.createDecorator)("ThemeService"),a.ILinkProviderService=(0,d.createDecorator)("LinkProviderService")},6731:function(i,a,s){var d=this&&this.__decorate||function(F,I,B,le){var ae,W=arguments.length,G=W<3?I:le===null?le=Object.getOwnPropertyDescriptor(I,B):le;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")G=Reflect.decorate(F,I,B,le);else for(var ve=F.length-1;ve>=0;ve--)(ae=F[ve])&&(G=(W<3?ae(G):W>3?ae(I,B,G):ae(I,B))||G);return W>3&&G&&Object.defineProperty(I,B,G),G},p=this&&this.__param||function(F,I){return function(B,le){I(B,le,F)}};Object.defineProperty(a,"__esModule",{value:!0}),a.ThemeService=a.DEFAULT_ANSI_COLORS=void 0;let u=s(7239),g=s(8055),C=s(8460),M=s(844),x=s(2585),b=g.css.toColor("#ffffff"),P=g.css.toColor("#000000"),k=g.css.toColor("#ffffff"),S=g.css.toColor("#000000"),O={css:"rgba(255, 255, 255, 0.3)",rgba:4294967117};a.DEFAULT_ANSI_COLORS=Object.freeze((()=>{let F=[g.css.toColor("#2e3436"),g.css.toColor("#cc0000"),g.css.toColor("#4e9a06"),g.css.toColor("#c4a000"),g.css.toColor("#3465a4"),g.css.toColor("#75507b"),g.css.toColor("#06989a"),g.css.toColor("#d3d7cf"),g.css.toColor("#555753"),g.css.toColor("#ef2929"),g.css.toColor("#8ae234"),g.css.toColor("#fce94f"),g.css.toColor("#729fcf"),g.css.toColor("#ad7fa8"),g.css.toColor("#34e2e2"),g.css.toColor("#eeeeec")],I=[0,95,135,175,215,255];for(let B=0;B<216;B++){let le=I[B/36%6|0],ae=I[B/6%6|0],W=I[B%6];F.push({css:g.channels.toCss(le,ae,W),rgba:g.channels.toRgba(le,ae,W)})}for(let B=0;B<24;B++){let le=8+10*B;F.push({css:g.channels.toCss(le,le,le),rgba:g.channels.toRgba(le,le,le)})}return F})());let A=a.ThemeService=class extends M.Disposable{get colors(){return this._colors}constructor(F){super(),this._optionsService=F,this._contrastCache=new u.ColorContrastCache,this._halfContrastCache=new u.ColorContrastCache,this._onChangeColors=this.register(new C.EventEmitter),this.onChangeColors=this._onChangeColors.event,this._colors={foreground:b,background:P,cursor:k,cursorAccent:S,selectionForeground:void 0,selectionBackgroundTransparent:O,selectionBackgroundOpaque:g.color.blend(P,O),selectionInactiveBackgroundTransparent:O,selectionInactiveBackgroundOpaque:g.color.blend(P,O),ansi:a.DEFAULT_ANSI_COLORS.slice(),contrastCache:this._contrastCache,halfContrastCache:this._halfContrastCache},this._updateRestoreColors(),this._setTheme(this._optionsService.rawOptions.theme),this.register(this._optionsService.onSpecificOptionChange("minimumContrastRatio",()=>this._contrastCache.clear())),this.register(this._optionsService.onSpecificOptionChange("theme",()=>this._setTheme(this._optionsService.rawOptions.theme)))}_setTheme(F={}){let I=this._colors;if(I.foreground=D(F.foreground,b),I.background=D(F.background,P),I.cursor=D(F.cursor,k),I.cursorAccent=D(F.cursorAccent,S),I.selectionBackgroundTransparent=D(F.selectionBackground,O),I.selectionBackgroundOpaque=g.color.blend(I.background,I.selectionBackgroundTransparent),I.selectionInactiveBackgroundTransparent=D(F.selectionInactiveBackground,I.selectionBackgroundTransparent),I.selectionInactiveBackgroundOpaque=g.color.blend(I.background,I.selectionInactiveBackgroundTransparent),I.selectionForeground=F.selectionForeground?D(F.selectionForeground,g.NULL_COLOR):void 0,I.selectionForeground===g.NULL_COLOR&&(I.selectionForeground=void 0),g.color.isOpaque(I.selectionBackgroundTransparent)&&(I.selectionBackgroundTransparent=g.color.opacity(I.selectionBackgroundTransparent,.3)),g.color.isOpaque(I.selectionInactiveBackgroundTransparent)&&(I.selectionInactiveBackgroundTransparent=g.color.opacity(I.selectionInactiveBackgroundTransparent,.3)),I.ansi=a.DEFAULT_ANSI_COLORS.slice(),I.ansi[0]=D(F.black,a.DEFAULT_ANSI_COLORS[0]),I.ansi[1]=D(F.red,a.DEFAULT_ANSI_COLORS[1]),I.ansi[2]=D(F.green,a.DEFAULT_ANSI_COLORS[2]),I.ansi[3]=D(F.yellow,a.DEFAULT_ANSI_COLORS[3]),I.ansi[4]=D(F.blue,a.DEFAULT_ANSI_COLORS[4]),I.ansi[5]=D(F.magenta,a.DEFAULT_ANSI_COLORS[5]),I.ansi[6]=D(F.cyan,a.DEFAULT_ANSI_COLORS[6]),I.ansi[7]=D(F.white,a.DEFAULT_ANSI_COLORS[7]),I.ansi[8]=D(F.brightBlack,a.DEFAULT_ANSI_COLORS[8]),I.ansi[9]=D(F.brightRed,a.DEFAULT_ANSI_COLORS[9]),I.ansi[10]=D(F.brightGreen,a.DEFAULT_ANSI_COLORS[10]),I.ansi[11]=D(F.brightYellow,a.DEFAULT_ANSI_COLORS[11]),I.ansi[12]=D(F.brightBlue,a.DEFAULT_ANSI_COLORS[12]),I.ansi[13]=D(F.brightMagenta,a.DEFAULT_ANSI_COLORS[13]),I.ansi[14]=D(F.brightCyan,a.DEFAULT_ANSI_COLORS[14]),I.ansi[15]=D(F.brightWhite,a.DEFAULT_ANSI_COLORS[15]),F.extendedAnsi){let B=Math.min(I.ansi.length-16,F.extendedAnsi.length);for(let le=0;le<B;le++)I.ansi[le+16]=D(F.extendedAnsi[le],a.DEFAULT_ANSI_COLORS[le+16])}this._contrastCache.clear(),this._halfContrastCache.clear(),this._updateRestoreColors(),this._onChangeColors.fire(this.colors)}restoreColor(F){this._restoreColor(F),this._onChangeColors.fire(this.colors)}_restoreColor(F){if(F!==void 0)switch(F){case 256:this._colors.foreground=this._restoreColors.foreground;break;case 257:this._colors.background=this._restoreColors.background;break;case 258:this._colors.cursor=this._restoreColors.cursor;break;default:this._colors.ansi[F]=this._restoreColors.ansi[F]}else for(let I=0;I<this._restoreColors.ansi.length;++I)this._colors.ansi[I]=this._restoreColors.ansi[I]}modifyColors(F){F(this._colors),this._onChangeColors.fire(this.colors)}_updateRestoreColors(){this._restoreColors={foreground:this._colors.foreground,background:this._colors.background,cursor:this._colors.cursor,ansi:this._colors.ansi.slice()}}};function D(F,I){if(F!==void 0)try{return g.css.toColor(F)}catch{}return I}a.ThemeService=A=d([p(0,x.IOptionsService)],A)},6349:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.CircularList=void 0;let d=s(8460),p=s(844);class u extends p.Disposable{constructor(C){super(),this._maxLength=C,this.onDeleteEmitter=this.register(new d.EventEmitter),this.onDelete=this.onDeleteEmitter.event,this.onInsertEmitter=this.register(new d.EventEmitter),this.onInsert=this.onInsertEmitter.event,this.onTrimEmitter=this.register(new d.EventEmitter),this.onTrim=this.onTrimEmitter.event,this._array=new Array(this._maxLength),this._startIndex=0,this._length=0}get maxLength(){return this._maxLength}set maxLength(C){if(this._maxLength===C)return;let M=new Array(C);for(let x=0;x<Math.min(C,this.length);x++)M[x]=this._array[this._getCyclicIndex(x)];this._array=M,this._maxLength=C,this._startIndex=0}get length(){return this._length}set length(C){if(C>this._length)for(let M=this._length;M<C;M++)this._array[M]=void 0;this._length=C}get(C){return this._array[this._getCyclicIndex(C)]}set(C,M){this._array[this._getCyclicIndex(C)]=M}push(C){this._array[this._getCyclicIndex(this._length)]=C,this._length===this._maxLength?(this._startIndex=++this._startIndex%this._maxLength,this.onTrimEmitter.fire(1)):this._length++}recycle(){if(this._length!==this._maxLength)throw new Error("Can only recycle when the buffer is full");return this._startIndex=++this._startIndex%this._maxLength,this.onTrimEmitter.fire(1),this._array[this._getCyclicIndex(this._length-1)]}get isFull(){return this._length===this._maxLength}pop(){return this._array[this._getCyclicIndex(this._length---1)]}splice(C,M,...x){if(M){for(let b=C;b<this._length-M;b++)this._array[this._getCyclicIndex(b)]=this._array[this._getCyclicIndex(b+M)];this._length-=M,this.onDeleteEmitter.fire({index:C,amount:M})}for(let b=this._length-1;b>=C;b--)this._array[this._getCyclicIndex(b+x.length)]=this._array[this._getCyclicIndex(b)];for(let b=0;b<x.length;b++)this._array[this._getCyclicIndex(C+b)]=x[b];if(x.length&&this.onInsertEmitter.fire({index:C,amount:x.length}),this._length+x.length>this._maxLength){let b=this._length+x.length-this._maxLength;this._startIndex+=b,this._length=this._maxLength,this.onTrimEmitter.fire(b)}else this._length+=x.length}trimStart(C){C>this._length&&(C=this._length),this._startIndex+=C,this._length-=C,this.onTrimEmitter.fire(C)}shiftElements(C,M,x){if(!(M<=0)){if(C<0||C>=this._length)throw new Error("start argument out of range");if(C+x<0)throw new Error("Cannot shift elements in list beyond index 0");if(x>0){for(let P=M-1;P>=0;P--)this.set(C+P+x,this.get(C+P));let b=C+M+x-this._length;if(b>0)for(this._length+=b;this._length>this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(let b=0;b<M;b++)this.set(C+b+x,this.get(C+b))}}_getCyclicIndex(C){return(this._startIndex+C)%this._maxLength}}a.CircularList=u},1439:(i,a)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.clone=void 0,a.clone=function s(d,p=5){if(typeof d!="object")return d;let u=Array.isArray(d)?[]:{};for(let g in d)u[g]=p<=1?d[g]:d[g]&&s(d[g],p-1);return u}},8055:(i,a)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.contrastRatio=a.toPaddedHex=a.rgba=a.rgb=a.css=a.color=a.channels=a.NULL_COLOR=void 0;let s=0,d=0,p=0,u=0;var g,C,M,x,b;function P(S){let O=S.toString(16);return O.length<2?"0"+O:O}function k(S,O){return S<O?(O+.05)/(S+.05):(S+.05)/(O+.05)}a.NULL_COLOR={css:"#00000000",rgba:0},(function(S){S.toCss=function(O,A,D,F){return F!==void 0?`#${P(O)}${P(A)}${P(D)}${P(F)}`:`#${P(O)}${P(A)}${P(D)}`},S.toRgba=function(O,A,D,F=255){return(O<<24|A<<16|D<<8|F)>>>0},S.toColor=function(O,A,D,F){return{css:S.toCss(O,A,D,F),rgba:S.toRgba(O,A,D,F)}}})(g||(a.channels=g={})),(function(S){function O(A,D){return u=Math.round(255*D),[s,d,p]=b.toChannels(A.rgba),{css:g.toCss(s,d,p,u),rgba:g.toRgba(s,d,p,u)}}S.blend=function(A,D){if(u=(255&D.rgba)/255,u===1)return{css:D.css,rgba:D.rgba};let F=D.rgba>>24&255,I=D.rgba>>16&255,B=D.rgba>>8&255,le=A.rgba>>24&255,ae=A.rgba>>16&255,W=A.rgba>>8&255;return s=le+Math.round((F-le)*u),d=ae+Math.round((I-ae)*u),p=W+Math.round((B-W)*u),{css:g.toCss(s,d,p),rgba:g.toRgba(s,d,p)}},S.isOpaque=function(A){return(255&A.rgba)==255},S.ensureContrastRatio=function(A,D,F){let I=b.ensureContrastRatio(A.rgba,D.rgba,F);if(I)return g.toColor(I>>24&255,I>>16&255,I>>8&255)},S.opaque=function(A){let D=(255|A.rgba)>>>0;return[s,d,p]=b.toChannels(D),{css:g.toCss(s,d,p),rgba:D}},S.opacity=O,S.multiplyOpacity=function(A,D){return u=255&A.rgba,O(A,u*D/255)},S.toColorRGB=function(A){return[A.rgba>>24&255,A.rgba>>16&255,A.rgba>>8&255]}})(C||(a.color=C={})),(function(S){let O,A;try{let D=document.createElement("canvas");D.width=1,D.height=1;let F=D.getContext("2d",{willReadFrequently:!0});F&&(O=F,O.globalCompositeOperation="copy",A=O.createLinearGradient(0,0,1,1))}catch{}S.toColor=function(D){if(D.match(/#[\da-f]{3,8}/i))switch(D.length){case 4:return s=parseInt(D.slice(1,2).repeat(2),16),d=parseInt(D.slice(2,3).repeat(2),16),p=parseInt(D.slice(3,4).repeat(2),16),g.toColor(s,d,p);case 5:return s=parseInt(D.slice(1,2).repeat(2),16),d=parseInt(D.slice(2,3).repeat(2),16),p=parseInt(D.slice(3,4).repeat(2),16),u=parseInt(D.slice(4,5).repeat(2),16),g.toColor(s,d,p,u);case 7:return{css:D,rgba:(parseInt(D.slice(1),16)<<8|255)>>>0};case 9:return{css:D,rgba:parseInt(D.slice(1),16)>>>0}}let F=D.match(/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(,\s*(0|1|\d?\.(\d+))\s*)?\)/);if(F)return s=parseInt(F[1]),d=parseInt(F[2]),p=parseInt(F[3]),u=Math.round(255*(F[5]===void 0?1:parseFloat(F[5]))),g.toColor(s,d,p,u);if(!O||!A)throw new Error("css.toColor: Unsupported css format");if(O.fillStyle=A,O.fillStyle=D,typeof O.fillStyle!="string")throw new Error("css.toColor: Unsupported css format");if(O.fillRect(0,0,1,1),[s,d,p,u]=O.getImageData(0,0,1,1).data,u!==255)throw new Error("css.toColor: Unsupported css format");return{rgba:g.toRgba(s,d,p,u),css:D}}})(M||(a.css=M={})),(function(S){function O(A,D,F){let I=A/255,B=D/255,le=F/255;return .2126*(I<=.03928?I/12.92:Math.pow((I+.055)/1.055,2.4))+.7152*(B<=.03928?B/12.92:Math.pow((B+.055)/1.055,2.4))+.0722*(le<=.03928?le/12.92:Math.pow((le+.055)/1.055,2.4))}S.relativeLuminance=function(A){return O(A>>16&255,A>>8&255,255&A)},S.relativeLuminance2=O})(x||(a.rgb=x={})),(function(S){function O(D,F,I){let B=D>>24&255,le=D>>16&255,ae=D>>8&255,W=F>>24&255,G=F>>16&255,ve=F>>8&255,Se=k(x.relativeLuminance2(W,G,ve),x.relativeLuminance2(B,le,ae));for(;Se<I&&(W>0||G>0||ve>0);)W-=Math.max(0,Math.ceil(.1*W)),G-=Math.max(0,Math.ceil(.1*G)),ve-=Math.max(0,Math.ceil(.1*ve)),Se=k(x.relativeLuminance2(W,G,ve),x.relativeLuminance2(B,le,ae));return(W<<24|G<<16|ve<<8|255)>>>0}function A(D,F,I){let B=D>>24&255,le=D>>16&255,ae=D>>8&255,W=F>>24&255,G=F>>16&255,ve=F>>8&255,Se=k(x.relativeLuminance2(W,G,ve),x.relativeLuminance2(B,le,ae));for(;Se<I&&(W<255||G<255||ve<255);)W=Math.min(255,W+Math.ceil(.1*(255-W))),G=Math.min(255,G+Math.ceil(.1*(255-G))),ve=Math.min(255,ve+Math.ceil(.1*(255-ve))),Se=k(x.relativeLuminance2(W,G,ve),x.relativeLuminance2(B,le,ae));return(W<<24|G<<16|ve<<8|255)>>>0}S.blend=function(D,F){if(u=(255&F)/255,u===1)return F;let I=F>>24&255,B=F>>16&255,le=F>>8&255,ae=D>>24&255,W=D>>16&255,G=D>>8&255;return s=ae+Math.round((I-ae)*u),d=W+Math.round((B-W)*u),p=G+Math.round((le-G)*u),g.toRgba(s,d,p)},S.ensureContrastRatio=function(D,F,I){let B=x.relativeLuminance(D>>8),le=x.relativeLuminance(F>>8);if(k(B,le)<I){if(le<B){let G=O(D,F,I),ve=k(B,x.relativeLuminance(G>>8));if(ve<I){let Se=A(D,F,I);return ve>k(B,x.relativeLuminance(Se>>8))?G:Se}return G}let ae=A(D,F,I),W=k(B,x.relativeLuminance(ae>>8));if(W<I){let G=O(D,F,I);return W>k(B,x.relativeLuminance(G>>8))?ae:G}return ae}},S.reduceLuminance=O,S.increaseLuminance=A,S.toChannels=function(D){return[D>>24&255,D>>16&255,D>>8&255,255&D]}})(b||(a.rgba=b={})),a.toPaddedHex=P,a.contrastRatio=k},8969:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.CoreTerminal=void 0;let d=s(844),p=s(2585),u=s(4348),g=s(7866),C=s(744),M=s(7302),x=s(6975),b=s(8460),P=s(1753),k=s(1480),S=s(7994),O=s(9282),A=s(5435),D=s(5981),F=s(2660),I=!1;class B extends d.Disposable{get onScroll(){return this._onScrollApi||(this._onScrollApi=this.register(new b.EventEmitter),this._onScroll.event(ae=>{this._onScrollApi?.fire(ae.position)})),this._onScrollApi.event}get cols(){return this._bufferService.cols}get rows(){return this._bufferService.rows}get buffers(){return this._bufferService.buffers}get options(){return this.optionsService.options}set options(ae){for(let W in ae)this.optionsService.options[W]=ae[W]}constructor(ae){super(),this._windowsWrappingHeuristics=this.register(new d.MutableDisposable),this._onBinary=this.register(new b.EventEmitter),this.onBinary=this._onBinary.event,this._onData=this.register(new b.EventEmitter),this.onData=this._onData.event,this._onLineFeed=this.register(new b.EventEmitter),this.onLineFeed=this._onLineFeed.event,this._onResize=this.register(new b.EventEmitter),this.onResize=this._onResize.event,this._onWriteParsed=this.register(new b.EventEmitter),this.onWriteParsed=this._onWriteParsed.event,this._onScroll=this.register(new b.EventEmitter),this._instantiationService=new u.InstantiationService,this.optionsService=this.register(new M.OptionsService(ae)),this._instantiationService.setService(p.IOptionsService,this.optionsService),this._bufferService=this.register(this._instantiationService.createInstance(C.BufferService)),this._instantiationService.setService(p.IBufferService,this._bufferService),this._logService=this.register(this._instantiationService.createInstance(g.LogService)),this._instantiationService.setService(p.ILogService,this._logService),this.coreService=this.register(this._instantiationService.createInstance(x.CoreService)),this._instantiationService.setService(p.ICoreService,this.coreService),this.coreMouseService=this.register(this._instantiationService.createInstance(P.CoreMouseService)),this._instantiationService.setService(p.ICoreMouseService,this.coreMouseService),this.unicodeService=this.register(this._instantiationService.createInstance(k.UnicodeService)),this._instantiationService.setService(p.IUnicodeService,this.unicodeService),this._charsetService=this._instantiationService.createInstance(S.CharsetService),this._instantiationService.setService(p.ICharsetService,this._charsetService),this._oscLinkService=this._instantiationService.createInstance(F.OscLinkService),this._instantiationService.setService(p.IOscLinkService,this._oscLinkService),this._inputHandler=this.register(new A.InputHandler(this._bufferService,this._charsetService,this.coreService,this._logService,this.optionsService,this._oscLinkService,this.coreMouseService,this.unicodeService)),this.register((0,b.forwardEvent)(this._inputHandler.onLineFeed,this._onLineFeed)),this.register(this._inputHandler),this.register((0,b.forwardEvent)(this._bufferService.onResize,this._onResize)),this.register((0,b.forwardEvent)(this.coreService.onData,this._onData)),this.register((0,b.forwardEvent)(this.coreService.onBinary,this._onBinary)),this.register(this.coreService.onRequestScrollToBottom(()=>this.scrollToBottom())),this.register(this.coreService.onUserInput(()=>this._writeBuffer.handleUserInput())),this.register(this.optionsService.onMultipleOptionChange(["windowsMode","windowsPty"],()=>this._handleWindowsPtyOptionChange())),this.register(this._bufferService.onScroll(W=>{this._onScroll.fire({position:this._bufferService.buffer.ydisp,source:0}),this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop,this._bufferService.buffer.scrollBottom)})),this.register(this._inputHandler.onScroll(W=>{this._onScroll.fire({position:this._bufferService.buffer.ydisp,source:0}),this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop,this._bufferService.buffer.scrollBottom)})),this._writeBuffer=this.register(new D.WriteBuffer((W,G)=>this._inputHandler.parse(W,G))),this.register((0,b.forwardEvent)(this._writeBuffer.onWriteParsed,this._onWriteParsed))}write(ae,W){this._writeBuffer.write(ae,W)}writeSync(ae,W){this._logService.logLevel<=p.LogLevelEnum.WARN&&!I&&(this._logService.warn("writeSync is unreliable and will be removed soon."),I=!0),this._writeBuffer.writeSync(ae,W)}input(ae,W=!0){this.coreService.triggerDataEvent(ae,W)}resize(ae,W){isNaN(ae)||isNaN(W)||(ae=Math.max(ae,C.MINIMUM_COLS),W=Math.max(W,C.MINIMUM_ROWS),this._bufferService.resize(ae,W))}scroll(ae,W=!1){this._bufferService.scroll(ae,W)}scrollLines(ae,W,G){this._bufferService.scrollLines(ae,W,G)}scrollPages(ae){this.scrollLines(ae*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(){this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(ae){let W=ae-this._bufferService.buffer.ydisp;W!==0&&this.scrollLines(W)}registerEscHandler(ae,W){return this._inputHandler.registerEscHandler(ae,W)}registerDcsHandler(ae,W){return this._inputHandler.registerDcsHandler(ae,W)}registerCsiHandler(ae,W){return this._inputHandler.registerCsiHandler(ae,W)}registerOscHandler(ae,W){return this._inputHandler.registerOscHandler(ae,W)}_setup(){this._handleWindowsPtyOptionChange()}reset(){this._inputHandler.reset(),this._bufferService.reset(),this._charsetService.reset(),this.coreService.reset(),this.coreMouseService.reset()}_handleWindowsPtyOptionChange(){let ae=!1,W=this.optionsService.rawOptions.windowsPty;W&&W.buildNumber!==void 0&&W.buildNumber!==void 0?ae=W.backend==="conpty"&&W.buildNumber<21376:this.optionsService.rawOptions.windowsMode&&(ae=!0),ae?this._enableWindowsWrappingHeuristics():this._windowsWrappingHeuristics.clear()}_enableWindowsWrappingHeuristics(){if(!this._windowsWrappingHeuristics.value){let ae=[];ae.push(this.onLineFeed(O.updateWindowsModeWrappedState.bind(null,this._bufferService))),ae.push(this.registerCsiHandler({final:"H"},()=>((0,O.updateWindowsModeWrappedState)(this._bufferService),!1))),this._windowsWrappingHeuristics.value=(0,d.toDisposable)(()=>{for(let W of ae)W.dispose()})}}}a.CoreTerminal=B},8460:(i,a)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.runAndSubscribe=a.forwardEvent=a.EventEmitter=void 0,a.EventEmitter=class{constructor(){this._listeners=[],this._disposed=!1}get event(){return this._event||(this._event=s=>(this._listeners.push(s),{dispose:()=>{if(!this._disposed){for(let d=0;d<this._listeners.length;d++)if(this._listeners[d]===s)return void this._listeners.splice(d,1)}}})),this._event}fire(s,d){let p=[];for(let u=0;u<this._listeners.length;u++)p.push(this._listeners[u]);for(let u=0;u<p.length;u++)p[u].call(void 0,s,d)}dispose(){this.clearListeners(),this._disposed=!0}clearListeners(){this._listeners&&(this._listeners.length=0)}},a.forwardEvent=function(s,d){return s(p=>d.fire(p))},a.runAndSubscribe=function(s,d){return d(void 0),s(p=>d(p))}},5435:function(i,a,s){var d=this&&this.__decorate||function(ue,H,te,de){var me,Ie=arguments.length,$e=Ie<3?H:de===null?de=Object.getOwnPropertyDescriptor(H,te):de;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")$e=Reflect.decorate(ue,H,te,de);else for(var tt=ue.length-1;tt>=0;tt--)(me=ue[tt])&&($e=(Ie<3?me($e):Ie>3?me(H,te,$e):me(H,te))||$e);return Ie>3&&$e&&Object.defineProperty(H,te,$e),$e},p=this&&this.__param||function(ue,H){return function(te,de){H(te,de,ue)}};Object.defineProperty(a,"__esModule",{value:!0}),a.InputHandler=a.WindowsOptionsReportType=void 0;let u=s(2584),g=s(7116),C=s(2015),M=s(844),x=s(482),b=s(8437),P=s(8460),k=s(643),S=s(511),O=s(3734),A=s(2585),D=s(1480),F=s(6242),I=s(6351),B=s(5941),le={"(":0,")":1,"*":2,"+":3,"-":1,".":2},ae=131072;function W(ue,H){if(ue>24)return H.setWinLines||!1;switch(ue){case 1:return!!H.restoreWin;case 2:return!!H.minimizeWin;case 3:return!!H.setWinPosition;case 4:return!!H.setWinSizePixels;case 5:return!!H.raiseWin;case 6:return!!H.lowerWin;case 7:return!!H.refreshWin;case 8:return!!H.setWinSizeChars;case 9:return!!H.maximizeWin;case 10:return!!H.fullscreenWin;case 11:return!!H.getWinState;case 13:return!!H.getWinPosition;case 14:return!!H.getWinSizePixels;case 15:return!!H.getScreenSizePixels;case 16:return!!H.getCellSizePixels;case 18:return!!H.getWinSizeChars;case 19:return!!H.getScreenSizeChars;case 20:return!!H.getIconTitle;case 21:return!!H.getWinTitle;case 22:return!!H.pushTitle;case 23:return!!H.popTitle;case 24:return!!H.setWinLines}return!1}var G;(function(ue){ue[ue.GET_WIN_SIZE_PIXELS=0]="GET_WIN_SIZE_PIXELS",ue[ue.GET_CELL_SIZE_PIXELS=1]="GET_CELL_SIZE_PIXELS"})(G||(a.WindowsOptionsReportType=G={}));let ve=0;class Se extends M.Disposable{getAttrData(){return this._curAttrData}constructor(H,te,de,me,Ie,$e,tt,et,Me=new C.EscapeSequenceParser){super(),this._bufferService=H,this._charsetService=te,this._coreService=de,this._logService=me,this._optionsService=Ie,this._oscLinkService=$e,this._coreMouseService=tt,this._unicodeService=et,this._parser=Me,this._parseBuffer=new Uint32Array(4096),this._stringDecoder=new x.StringToUtf32,this._utf8Decoder=new x.Utf8ToUtf32,this._workCell=new S.CellData,this._windowTitle="",this._iconName="",this._windowTitleStack=[],this._iconNameStack=[],this._curAttrData=b.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=b.DEFAULT_ATTR_DATA.clone(),this._onRequestBell=this.register(new P.EventEmitter),this.onRequestBell=this._onRequestBell.event,this._onRequestRefreshRows=this.register(new P.EventEmitter),this.onRequestRefreshRows=this._onRequestRefreshRows.event,this._onRequestReset=this.register(new P.EventEmitter),this.onRequestReset=this._onRequestReset.event,this._onRequestSendFocus=this.register(new P.EventEmitter),this.onRequestSendFocus=this._onRequestSendFocus.event,this._onRequestSyncScrollBar=this.register(new P.EventEmitter),this.onRequestSyncScrollBar=this._onRequestSyncScrollBar.event,this._onRequestWindowsOptionsReport=this.register(new P.EventEmitter),this.onRequestWindowsOptionsReport=this._onRequestWindowsOptionsReport.event,this._onA11yChar=this.register(new P.EventEmitter),this.onA11yChar=this._onA11yChar.event,this._onA11yTab=this.register(new P.EventEmitter),this.onA11yTab=this._onA11yTab.event,this._onCursorMove=this.register(new P.EventEmitter),this.onCursorMove=this._onCursorMove.event,this._onLineFeed=this.register(new P.EventEmitter),this.onLineFeed=this._onLineFeed.event,this._onScroll=this.register(new P.EventEmitter),this.onScroll=this._onScroll.event,this._onTitleChange=this.register(new P.EventEmitter),this.onTitleChange=this._onTitleChange.event,this._onColor=this.register(new P.EventEmitter),this.onColor=this._onColor.event,this._parseStack={paused:!1,cursorStartX:0,cursorStartY:0,decodedLength:0,position:0},this._specialColors=[256,257,258],this.register(this._parser),this._dirtyRowTracker=new pe(this._bufferService),this._activeBuffer=this._bufferService.buffer,this.register(this._bufferService.buffers.onBufferActivate(Z=>this._activeBuffer=Z.activeBuffer)),this._parser.setCsiHandlerFallback((Z,Le)=>{this._logService.debug("Unknown CSI code: ",{identifier:this._parser.identToString(Z),params:Le.toArray()})}),this._parser.setEscHandlerFallback(Z=>{this._logService.debug("Unknown ESC code: ",{identifier:this._parser.identToString(Z)})}),this._parser.setExecuteHandlerFallback(Z=>{this._logService.debug("Unknown EXECUTE code: ",{code:Z})}),this._parser.setOscHandlerFallback((Z,Le,Ze)=>{this._logService.debug("Unknown OSC code: ",{identifier:Z,action:Le,data:Ze})}),this._parser.setDcsHandlerFallback((Z,Le,Ze)=>{Le==="HOOK"&&(Ze=Ze.toArray()),this._logService.debug("Unknown DCS code: ",{identifier:this._parser.identToString(Z),action:Le,payload:Ze})}),this._parser.setPrintHandler((Z,Le,Ze)=>this.print(Z,Le,Ze)),this._parser.registerCsiHandler({final:"@"},Z=>this.insertChars(Z)),this._parser.registerCsiHandler({intermediates:" ",final:"@"},Z=>this.scrollLeft(Z)),this._parser.registerCsiHandler({final:"A"},Z=>this.cursorUp(Z)),this._parser.registerCsiHandler({intermediates:" ",final:"A"},Z=>this.scrollRight(Z)),this._parser.registerCsiHandler({final:"B"},Z=>this.cursorDown(Z)),this._parser.registerCsiHandler({final:"C"},Z=>this.cursorForward(Z)),this._parser.registerCsiHandler({final:"D"},Z=>this.cursorBackward(Z)),this._parser.registerCsiHandler({final:"E"},Z=>this.cursorNextLine(Z)),this._parser.registerCsiHandler({final:"F"},Z=>this.cursorPrecedingLine(Z)),this._parser.registerCsiHandler({final:"G"},Z=>this.cursorCharAbsolute(Z)),this._parser.registerCsiHandler({final:"H"},Z=>this.cursorPosition(Z)),this._parser.registerCsiHandler({final:"I"},Z=>this.cursorForwardTab(Z)),this._parser.registerCsiHandler({final:"J"},Z=>this.eraseInDisplay(Z,!1)),this._parser.registerCsiHandler({prefix:"?",final:"J"},Z=>this.eraseInDisplay(Z,!0)),this._parser.registerCsiHandler({final:"K"},Z=>this.eraseInLine(Z,!1)),this._parser.registerCsiHandler({prefix:"?",final:"K"},Z=>this.eraseInLine(Z,!0)),this._parser.registerCsiHandler({final:"L"},Z=>this.insertLines(Z)),this._parser.registerCsiHandler({final:"M"},Z=>this.deleteLines(Z)),this._parser.registerCsiHandler({final:"P"},Z=>this.deleteChars(Z)),this._parser.registerCsiHandler({final:"S"},Z=>this.scrollUp(Z)),this._parser.registerCsiHandler({final:"T"},Z=>this.scrollDown(Z)),this._parser.registerCsiHandler({final:"X"},Z=>this.eraseChars(Z)),this._parser.registerCsiHandler({final:"Z"},Z=>this.cursorBackwardTab(Z)),this._parser.registerCsiHandler({final:"`"},Z=>this.charPosAbsolute(Z)),this._parser.registerCsiHandler({final:"a"},Z=>this.hPositionRelative(Z)),this._parser.registerCsiHandler({final:"b"},Z=>this.repeatPrecedingCharacter(Z)),this._parser.registerCsiHandler({final:"c"},Z=>this.sendDeviceAttributesPrimary(Z)),this._parser.registerCsiHandler({prefix:">",final:"c"},Z=>this.sendDeviceAttributesSecondary(Z)),this._parser.registerCsiHandler({final:"d"},Z=>this.linePosAbsolute(Z)),this._parser.registerCsiHandler({final:"e"},Z=>this.vPositionRelative(Z)),this._parser.registerCsiHandler({final:"f"},Z=>this.hVPosition(Z)),this._parser.registerCsiHandler({final:"g"},Z=>this.tabClear(Z)),this._parser.registerCsiHandler({final:"h"},Z=>this.setMode(Z)),this._parser.registerCsiHandler({prefix:"?",final:"h"},Z=>this.setModePrivate(Z)),this._parser.registerCsiHandler({final:"l"},Z=>this.resetMode(Z)),this._parser.registerCsiHandler({prefix:"?",final:"l"},Z=>this.resetModePrivate(Z)),this._parser.registerCsiHandler({final:"m"},Z=>this.charAttributes(Z)),this._parser.registerCsiHandler({final:"n"},Z=>this.deviceStatus(Z)),this._parser.registerCsiHandler({prefix:"?",final:"n"},Z=>this.deviceStatusPrivate(Z)),this._parser.registerCsiHandler({intermediates:"!",final:"p"},Z=>this.softReset(Z)),this._parser.registerCsiHandler({intermediates:" ",final:"q"},Z=>this.setCursorStyle(Z)),this._parser.registerCsiHandler({final:"r"},Z=>this.setScrollRegion(Z)),this._parser.registerCsiHandler({final:"s"},Z=>this.saveCursor(Z)),this._parser.registerCsiHandler({final:"t"},Z=>this.windowOptions(Z)),this._parser.registerCsiHandler({final:"u"},Z=>this.restoreCursor(Z)),this._parser.registerCsiHandler({intermediates:"'",final:"}"},Z=>this.insertColumns(Z)),this._parser.registerCsiHandler({intermediates:"'",final:"~"},Z=>this.deleteColumns(Z)),this._parser.registerCsiHandler({intermediates:'"',final:"q"},Z=>this.selectProtected(Z)),this._parser.registerCsiHandler({intermediates:"$",final:"p"},Z=>this.requestMode(Z,!0)),this._parser.registerCsiHandler({prefix:"?",intermediates:"$",final:"p"},Z=>this.requestMode(Z,!1)),this._parser.setExecuteHandler(u.C0.BEL,()=>this.bell()),this._parser.setExecuteHandler(u.C0.LF,()=>this.lineFeed()),this._parser.setExecuteHandler(u.C0.VT,()=>this.lineFeed()),this._parser.setExecuteHandler(u.C0.FF,()=>this.lineFeed()),this._parser.setExecuteHandler(u.C0.CR,()=>this.carriageReturn()),this._parser.setExecuteHandler(u.C0.BS,()=>this.backspace()),this._parser.setExecuteHandler(u.C0.HT,()=>this.tab()),this._parser.setExecuteHandler(u.C0.SO,()=>this.shiftOut()),this._parser.setExecuteHandler(u.C0.SI,()=>this.shiftIn()),this._parser.setExecuteHandler(u.C1.IND,()=>this.index()),this._parser.setExecuteHandler(u.C1.NEL,()=>this.nextLine()),this._parser.setExecuteHandler(u.C1.HTS,()=>this.tabSet()),this._parser.registerOscHandler(0,new F.OscHandler(Z=>(this.setTitle(Z),this.setIconName(Z),!0))),this._parser.registerOscHandler(1,new F.OscHandler(Z=>this.setIconName(Z))),this._parser.registerOscHandler(2,new F.OscHandler(Z=>this.setTitle(Z))),this._parser.registerOscHandler(4,new F.OscHandler(Z=>this.setOrReportIndexedColor(Z))),this._parser.registerOscHandler(8,new F.OscHandler(Z=>this.setHyperlink(Z))),this._parser.registerOscHandler(10,new F.OscHandler(Z=>this.setOrReportFgColor(Z))),this._parser.registerOscHandler(11,new F.OscHandler(Z=>this.setOrReportBgColor(Z))),this._parser.registerOscHandler(12,new F.OscHandler(Z=>this.setOrReportCursorColor(Z))),this._parser.registerOscHandler(104,new F.OscHandler(Z=>this.restoreIndexedColor(Z))),this._parser.registerOscHandler(110,new F.OscHandler(Z=>this.restoreFgColor(Z))),this._parser.registerOscHandler(111,new F.OscHandler(Z=>this.restoreBgColor(Z))),this._parser.registerOscHandler(112,new F.OscHandler(Z=>this.restoreCursorColor(Z))),this._parser.registerEscHandler({final:"7"},()=>this.saveCursor()),this._parser.registerEscHandler({final:"8"},()=>this.restoreCursor()),this._parser.registerEscHandler({final:"D"},()=>this.index()),this._parser.registerEscHandler({final:"E"},()=>this.nextLine()),this._parser.registerEscHandler({final:"H"},()=>this.tabSet()),this._parser.registerEscHandler({final:"M"},()=>this.reverseIndex()),this._parser.registerEscHandler({final:"="},()=>this.keypadApplicationMode()),this._parser.registerEscHandler({final:">"},()=>this.keypadNumericMode()),this._parser.registerEscHandler({final:"c"},()=>this.fullReset()),this._parser.registerEscHandler({final:"n"},()=>this.setgLevel(2)),this._parser.registerEscHandler({final:"o"},()=>this.setgLevel(3)),this._parser.registerEscHandler({final:"|"},()=>this.setgLevel(3)),this._parser.registerEscHandler({final:"}"},()=>this.setgLevel(2)),this._parser.registerEscHandler({final:"~"},()=>this.setgLevel(1)),this._parser.registerEscHandler({intermediates:"%",final:"@"},()=>this.selectDefaultCharset()),this._parser.registerEscHandler({intermediates:"%",final:"G"},()=>this.selectDefaultCharset());for(let Z in g.CHARSETS)this._parser.registerEscHandler({intermediates:"(",final:Z},()=>this.selectCharset("("+Z)),this._parser.registerEscHandler({intermediates:")",final:Z},()=>this.selectCharset(")"+Z)),this._parser.registerEscHandler({intermediates:"*",final:Z},()=>this.selectCharset("*"+Z)),this._parser.registerEscHandler({intermediates:"+",final:Z},()=>this.selectCharset("+"+Z)),this._parser.registerEscHandler({intermediates:"-",final:Z},()=>this.selectCharset("-"+Z)),this._parser.registerEscHandler({intermediates:".",final:Z},()=>this.selectCharset("."+Z)),this._parser.registerEscHandler({intermediates:"/",final:Z},()=>this.selectCharset("/"+Z));this._parser.registerEscHandler({intermediates:"#",final:"8"},()=>this.screenAlignmentPattern()),this._parser.setErrorHandler(Z=>(this._logService.error("Parsing error: ",Z),Z)),this._parser.registerDcsHandler({intermediates:"$",final:"q"},new I.DcsHandler((Z,Le)=>this.requestStatusString(Z,Le)))}_preserveStack(H,te,de,me){this._parseStack.paused=!0,this._parseStack.cursorStartX=H,this._parseStack.cursorStartY=te,this._parseStack.decodedLength=de,this._parseStack.position=me}_logSlowResolvingAsync(H){this._logService.logLevel<=A.LogLevelEnum.WARN&&Promise.race([H,new Promise((te,de)=>setTimeout(()=>de("#SLOW_TIMEOUT"),5e3))]).catch(te=>{if(te!=="#SLOW_TIMEOUT")throw te;console.warn("async parser handler taking longer than 5000 ms")})}_getCurrentLinkId(){return this._curAttrData.extended.urlId}parse(H,te){let de,me=this._activeBuffer.x,Ie=this._activeBuffer.y,$e=0,tt=this._parseStack.paused;if(tt){if(de=this._parser.parse(this._parseBuffer,this._parseStack.decodedLength,te))return this._logSlowResolvingAsync(de),de;me=this._parseStack.cursorStartX,Ie=this._parseStack.cursorStartY,this._parseStack.paused=!1,H.length>ae&&($e=this._parseStack.position+ae)}if(this._logService.logLevel<=A.LogLevelEnum.DEBUG&&this._logService.debug("parsing data"+(typeof H=="string"?` "${H}"`:` "${Array.prototype.map.call(H,Z=>String.fromCharCode(Z)).join("")}"`),typeof H=="string"?H.split("").map(Z=>Z.charCodeAt(0)):H),this._parseBuffer.length<H.length&&this._parseBuffer.length<ae&&(this._parseBuffer=new Uint32Array(Math.min(H.length,ae))),tt||this._dirtyRowTracker.clearRange(),H.length>ae)for(let Z=$e;Z<H.length;Z+=ae){let Le=Z+ae<H.length?Z+ae:H.length,Ze=typeof H=="string"?this._stringDecoder.decode(H.substring(Z,Le),this._parseBuffer):this._utf8Decoder.decode(H.subarray(Z,Le),this._parseBuffer);if(de=this._parser.parse(this._parseBuffer,Ze))return this._preserveStack(me,Ie,Ze,Z),this._logSlowResolvingAsync(de),de}else if(!tt){let Z=typeof H=="string"?this._stringDecoder.decode(H,this._parseBuffer):this._utf8Decoder.decode(H,this._parseBuffer);if(de=this._parser.parse(this._parseBuffer,Z))return this._preserveStack(me,Ie,Z,0),this._logSlowResolvingAsync(de),de}this._activeBuffer.x===me&&this._activeBuffer.y===Ie||this._onCursorMove.fire();let et=this._dirtyRowTracker.end+(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp),Me=this._dirtyRowTracker.start+(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp);Me<this._bufferService.rows&&this._onRequestRefreshRows.fire(Math.min(Me,this._bufferService.rows-1),Math.min(et,this._bufferService.rows-1))}print(H,te,de){let me,Ie,$e=this._charsetService.charset,tt=this._optionsService.rawOptions.screenReaderMode,et=this._bufferService.cols,Me=this._coreService.decPrivateModes.wraparound,Z=this._coreService.modes.insertMode,Le=this._curAttrData,Ze=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._activeBuffer.x&&de-te>0&&Ze.getWidth(this._activeBuffer.x-1)===2&&Ze.setCellFromCodepoint(this._activeBuffer.x-1,0,1,Le);let dt=this._parser.precedingJoinState;for(let Ot=te;Ot<de;++Ot){if(me=H[Ot],me<127&&$e){let Ka=$e[String.fromCharCode(me)];Ka&&(me=Ka.charCodeAt(0))}let si=this._unicodeService.charProperties(me,dt);Ie=D.UnicodeService.extractWidth(si);let Bo=D.UnicodeService.extractShouldJoin(si),Mo=Bo?D.UnicodeService.extractWidth(dt):0;if(dt=si,tt&&this._onA11yChar.fire((0,x.stringFromCodePoint)(me)),this._getCurrentLinkId()&&this._oscLinkService.addLineToLink(this._getCurrentLinkId(),this._activeBuffer.ybase+this._activeBuffer.y),this._activeBuffer.x+Ie-Mo>et){if(Me){let Ka=Ze,Gn=this._activeBuffer.x-Mo;for(this._activeBuffer.x=Mo,this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData(),!0)):(this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!0),Ze=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y),Mo>0&&Ze instanceof b.BufferLine&&Ze.copyCellsFrom(Ka,Gn,0,Mo,!1);Gn<et;)Ka.setCellFromCodepoint(Gn++,0,1,Le)}else if(this._activeBuffer.x=et-1,Ie===2)continue}if(Bo&&this._activeBuffer.x){let Ka=Ze.getWidth(this._activeBuffer.x-1)?1:2;Ze.addCodepointToCell(this._activeBuffer.x-Ka,me,Ie);for(let Gn=Ie-Mo;--Gn>=0;)Ze.setCellFromCodepoint(this._activeBuffer.x++,0,0,Le)}else if(Z&&(Ze.insertCells(this._activeBuffer.x,Ie-Mo,this._activeBuffer.getNullCell(Le)),Ze.getWidth(et-1)===2&&Ze.setCellFromCodepoint(et-1,k.NULL_CELL_CODE,k.NULL_CELL_WIDTH,Le)),Ze.setCellFromCodepoint(this._activeBuffer.x++,me,Ie,Le),Ie>0)for(;--Ie;)Ze.setCellFromCodepoint(this._activeBuffer.x++,0,0,Le)}this._parser.precedingJoinState=dt,this._activeBuffer.x<et&&de-te>0&&Ze.getWidth(this._activeBuffer.x)===0&&!Ze.hasContent(this._activeBuffer.x)&&Ze.setCellFromCodepoint(this._activeBuffer.x,0,1,Le),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}registerCsiHandler(H,te){return H.final!=="t"||H.prefix||H.intermediates?this._parser.registerCsiHandler(H,te):this._parser.registerCsiHandler(H,de=>!W(de.params[0],this._optionsService.rawOptions.windowOptions)||te(de))}registerDcsHandler(H,te){return this._parser.registerDcsHandler(H,new I.DcsHandler(te))}registerEscHandler(H,te){return this._parser.registerEscHandler(H,te)}registerOscHandler(H,te){return this._parser.registerOscHandler(H,new F.OscHandler(te))}bell(){return this._onRequestBell.fire(),!0}lineFeed(){return this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._optionsService.rawOptions.convertEol&&(this._activeBuffer.x=0),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows?this._activeBuffer.y=this._bufferService.rows-1:this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.x>=this._bufferService.cols&&this._activeBuffer.x--,this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._onLineFeed.fire(),!0}carriageReturn(){return this._activeBuffer.x=0,!0}backspace(){if(!this._coreService.decPrivateModes.reverseWraparound)return this._restrictCursor(),this._activeBuffer.x>0&&this._activeBuffer.x--,!0;if(this._restrictCursor(this._bufferService.cols),this._activeBuffer.x>0)this._activeBuffer.x--;else if(this._activeBuffer.x===0&&this._activeBuffer.y>this._activeBuffer.scrollTop&&this._activeBuffer.y<=this._activeBuffer.scrollBottom&&this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y)?.isWrapped){this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.y--,this._activeBuffer.x=this._bufferService.cols-1;let H=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);H.hasWidth(this._activeBuffer.x)&&!H.hasContent(this._activeBuffer.x)&&this._activeBuffer.x--}return this._restrictCursor(),!0}tab(){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let H=this._activeBuffer.x;return this._activeBuffer.x=this._activeBuffer.nextStop(),this._optionsService.rawOptions.screenReaderMode&&this._onA11yTab.fire(this._activeBuffer.x-H),!0}shiftOut(){return this._charsetService.setgLevel(1),!0}shiftIn(){return this._charsetService.setgLevel(0),!0}_restrictCursor(H=this._bufferService.cols-1){this._activeBuffer.x=Math.min(H,Math.max(0,this._activeBuffer.x)),this._activeBuffer.y=this._coreService.decPrivateModes.origin?Math.min(this._activeBuffer.scrollBottom,Math.max(this._activeBuffer.scrollTop,this._activeBuffer.y)):Math.min(this._bufferService.rows-1,Math.max(0,this._activeBuffer.y)),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_setCursor(H,te){this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._coreService.decPrivateModes.origin?(this._activeBuffer.x=H,this._activeBuffer.y=this._activeBuffer.scrollTop+te):(this._activeBuffer.x=H,this._activeBuffer.y=te),this._restrictCursor(),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_moveCursor(H,te){this._restrictCursor(),this._setCursor(this._activeBuffer.x+H,this._activeBuffer.y+te)}cursorUp(H){let te=this._activeBuffer.y-this._activeBuffer.scrollTop;return te>=0?this._moveCursor(0,-Math.min(te,H.params[0]||1)):this._moveCursor(0,-(H.params[0]||1)),!0}cursorDown(H){let te=this._activeBuffer.scrollBottom-this._activeBuffer.y;return te>=0?this._moveCursor(0,Math.min(te,H.params[0]||1)):this._moveCursor(0,H.params[0]||1),!0}cursorForward(H){return this._moveCursor(H.params[0]||1,0),!0}cursorBackward(H){return this._moveCursor(-(H.params[0]||1),0),!0}cursorNextLine(H){return this.cursorDown(H),this._activeBuffer.x=0,!0}cursorPrecedingLine(H){return this.cursorUp(H),this._activeBuffer.x=0,!0}cursorCharAbsolute(H){return this._setCursor((H.params[0]||1)-1,this._activeBuffer.y),!0}cursorPosition(H){return this._setCursor(H.length>=2?(H.params[1]||1)-1:0,(H.params[0]||1)-1),!0}charPosAbsolute(H){return this._setCursor((H.params[0]||1)-1,this._activeBuffer.y),!0}hPositionRelative(H){return this._moveCursor(H.params[0]||1,0),!0}linePosAbsolute(H){return this._setCursor(this._activeBuffer.x,(H.params[0]||1)-1),!0}vPositionRelative(H){return this._moveCursor(0,H.params[0]||1),!0}hVPosition(H){return this.cursorPosition(H),!0}tabClear(H){let te=H.params[0];return te===0?delete this._activeBuffer.tabs[this._activeBuffer.x]:te===3&&(this._activeBuffer.tabs={}),!0}cursorForwardTab(H){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let te=H.params[0]||1;for(;te--;)this._activeBuffer.x=this._activeBuffer.nextStop();return!0}cursorBackwardTab(H){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let te=H.params[0]||1;for(;te--;)this._activeBuffer.x=this._activeBuffer.prevStop();return!0}selectProtected(H){let te=H.params[0];return te===1&&(this._curAttrData.bg|=536870912),te!==2&&te!==0||(this._curAttrData.bg&=-536870913),!0}_eraseInBufferLine(H,te,de,me=!1,Ie=!1){let $e=this._activeBuffer.lines.get(this._activeBuffer.ybase+H);$e.replaceCells(te,de,this._activeBuffer.getNullCell(this._eraseAttrData()),Ie),me&&($e.isWrapped=!1)}_resetBufferLine(H,te=!1){let de=this._activeBuffer.lines.get(this._activeBuffer.ybase+H);de&&(de.fill(this._activeBuffer.getNullCell(this._eraseAttrData()),te),this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase+H),de.isWrapped=!1)}eraseInDisplay(H,te=!1){let de;switch(this._restrictCursor(this._bufferService.cols),H.params[0]){case 0:for(de=this._activeBuffer.y,this._dirtyRowTracker.markDirty(de),this._eraseInBufferLine(de++,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,te);de<this._bufferService.rows;de++)this._resetBufferLine(de,te);this._dirtyRowTracker.markDirty(de);break;case 1:for(de=this._activeBuffer.y,this._dirtyRowTracker.markDirty(de),this._eraseInBufferLine(de,0,this._activeBuffer.x+1,!0,te),this._activeBuffer.x+1>=this._bufferService.cols&&(this._activeBuffer.lines.get(de+1).isWrapped=!1);de--;)this._resetBufferLine(de,te);this._dirtyRowTracker.markDirty(0);break;case 2:for(de=this._bufferService.rows,this._dirtyRowTracker.markDirty(de-1);de--;)this._resetBufferLine(de,te);this._dirtyRowTracker.markDirty(0);break;case 3:let me=this._activeBuffer.lines.length-this._bufferService.rows;me>0&&(this._activeBuffer.lines.trimStart(me),this._activeBuffer.ybase=Math.max(this._activeBuffer.ybase-me,0),this._activeBuffer.ydisp=Math.max(this._activeBuffer.ydisp-me,0),this._onScroll.fire(0))}return!0}eraseInLine(H,te=!1){switch(this._restrictCursor(this._bufferService.cols),H.params[0]){case 0:this._eraseInBufferLine(this._activeBuffer.y,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,te);break;case 1:this._eraseInBufferLine(this._activeBuffer.y,0,this._activeBuffer.x+1,!1,te);break;case 2:this._eraseInBufferLine(this._activeBuffer.y,0,this._bufferService.cols,!0,te)}return this._dirtyRowTracker.markDirty(this._activeBuffer.y),!0}insertLines(H){this._restrictCursor();let te=H.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let de=this._activeBuffer.ybase+this._activeBuffer.y,me=this._bufferService.rows-1-this._activeBuffer.scrollBottom,Ie=this._bufferService.rows-1+this._activeBuffer.ybase-me+1;for(;te--;)this._activeBuffer.lines.splice(Ie-1,1),this._activeBuffer.lines.splice(de,0,this._activeBuffer.getBlankLine(this._eraseAttrData()));return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y,this._activeBuffer.scrollBottom),this._activeBuffer.x=0,!0}deleteLines(H){this._restrictCursor();let te=H.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let de=this._activeBuffer.ybase+this._activeBuffer.y,me;for(me=this._bufferService.rows-1-this._activeBuffer.scrollBottom,me=this._bufferService.rows-1+this._activeBuffer.ybase-me;te--;)this._activeBuffer.lines.splice(de,1),this._activeBuffer.lines.splice(me,0,this._activeBuffer.getBlankLine(this._eraseAttrData()));return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y,this._activeBuffer.scrollBottom),this._activeBuffer.x=0,!0}insertChars(H){this._restrictCursor();let te=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return te&&(te.insertCells(this._activeBuffer.x,H.params[0]||1,this._activeBuffer.getNullCell(this._eraseAttrData())),this._dirtyRowTracker.markDirty(this._activeBuffer.y)),!0}deleteChars(H){this._restrictCursor();let te=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return te&&(te.deleteCells(this._activeBuffer.x,H.params[0]||1,this._activeBuffer.getNullCell(this._eraseAttrData())),this._dirtyRowTracker.markDirty(this._activeBuffer.y)),!0}scrollUp(H){let te=H.params[0]||1;for(;te--;)this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollTop,1),this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollBottom,0,this._activeBuffer.getBlankLine(this._eraseAttrData()));return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}scrollDown(H){let te=H.params[0]||1;for(;te--;)this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollBottom,1),this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollTop,0,this._activeBuffer.getBlankLine(b.DEFAULT_ATTR_DATA));return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}scrollLeft(H){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let te=H.params[0]||1;for(let de=this._activeBuffer.scrollTop;de<=this._activeBuffer.scrollBottom;++de){let me=this._activeBuffer.lines.get(this._activeBuffer.ybase+de);me.deleteCells(0,te,this._activeBuffer.getNullCell(this._eraseAttrData())),me.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}scrollRight(H){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let te=H.params[0]||1;for(let de=this._activeBuffer.scrollTop;de<=this._activeBuffer.scrollBottom;++de){let me=this._activeBuffer.lines.get(this._activeBuffer.ybase+de);me.insertCells(0,te,this._activeBuffer.getNullCell(this._eraseAttrData())),me.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}insertColumns(H){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let te=H.params[0]||1;for(let de=this._activeBuffer.scrollTop;de<=this._activeBuffer.scrollBottom;++de){let me=this._activeBuffer.lines.get(this._activeBuffer.ybase+de);me.insertCells(this._activeBuffer.x,te,this._activeBuffer.getNullCell(this._eraseAttrData())),me.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}deleteColumns(H){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let te=H.params[0]||1;for(let de=this._activeBuffer.scrollTop;de<=this._activeBuffer.scrollBottom;++de){let me=this._activeBuffer.lines.get(this._activeBuffer.ybase+de);me.deleteCells(this._activeBuffer.x,te,this._activeBuffer.getNullCell(this._eraseAttrData())),me.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}eraseChars(H){this._restrictCursor();let te=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return te&&(te.replaceCells(this._activeBuffer.x,this._activeBuffer.x+(H.params[0]||1),this._activeBuffer.getNullCell(this._eraseAttrData())),this._dirtyRowTracker.markDirty(this._activeBuffer.y)),!0}repeatPrecedingCharacter(H){let te=this._parser.precedingJoinState;if(!te)return!0;let de=H.params[0]||1,me=D.UnicodeService.extractWidth(te),Ie=this._activeBuffer.x-me,$e=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).getString(Ie),tt=new Uint32Array($e.length*de),et=0;for(let Z=0;Z<$e.length;){let Le=$e.codePointAt(Z)||0;tt[et++]=Le,Z+=Le>65535?2:1}let Me=et;for(let Z=1;Z<de;++Z)tt.copyWithin(Me,0,et),Me+=et;return this.print(tt,0,Me),!0}sendDeviceAttributesPrimary(H){return H.params[0]>0||(this._is("xterm")||this._is("rxvt-unicode")||this._is("screen")?this._coreService.triggerDataEvent(u.C0.ESC+"[?1;2c"):this._is("linux")&&this._coreService.triggerDataEvent(u.C0.ESC+"[?6c")),!0}sendDeviceAttributesSecondary(H){return H.params[0]>0||(this._is("xterm")?this._coreService.triggerDataEvent(u.C0.ESC+"[>0;276;0c"):this._is("rxvt-unicode")?this._coreService.triggerDataEvent(u.C0.ESC+"[>85;95;0c"):this._is("linux")?this._coreService.triggerDataEvent(H.params[0]+"c"):this._is("screen")&&this._coreService.triggerDataEvent(u.C0.ESC+"[>83;40003;0c")),!0}_is(H){return(this._optionsService.rawOptions.termName+"").indexOf(H)===0}setMode(H){for(let te=0;te<H.length;te++)switch(H.params[te]){case 4:this._coreService.modes.insertMode=!0;break;case 20:this._optionsService.options.convertEol=!0}return!0}setModePrivate(H){for(let te=0;te<H.length;te++)switch(H.params[te]){case 1:this._coreService.decPrivateModes.applicationCursorKeys=!0;break;case 2:this._charsetService.setgCharset(0,g.DEFAULT_CHARSET),this._charsetService.setgCharset(1,g.DEFAULT_CHARSET),this._charsetService.setgCharset(2,g.DEFAULT_CHARSET),this._charsetService.setgCharset(3,g.DEFAULT_CHARSET);break;case 3:this._optionsService.rawOptions.windowOptions.setWinLines&&(this._bufferService.resize(132,this._bufferService.rows),this._onRequestReset.fire());break;case 6:this._coreService.decPrivateModes.origin=!0,this._setCursor(0,0);break;case 7:this._coreService.decPrivateModes.wraparound=!0;break;case 12:this._optionsService.options.cursorBlink=!0;break;case 45:this._coreService.decPrivateModes.reverseWraparound=!0;break;case 66:this._logService.debug("Serial port requested application keypad."),this._coreService.decPrivateModes.applicationKeypad=!0,this._onRequestSyncScrollBar.fire();break;case 9:this._coreMouseService.activeProtocol="X10";break;case 1e3:this._coreMouseService.activeProtocol="VT200";break;case 1002:this._coreMouseService.activeProtocol="DRAG";break;case 1003:this._coreMouseService.activeProtocol="ANY";break;case 1004:this._coreService.decPrivateModes.sendFocus=!0,this._onRequestSendFocus.fire();break;case 1005:this._logService.debug("DECSET 1005 not supported (see #2507)");break;case 1006:this._coreMouseService.activeEncoding="SGR";break;case 1015:this._logService.debug("DECSET 1015 not supported (see #2507)");break;case 1016:this._coreMouseService.activeEncoding="SGR_PIXELS";break;case 25:this._coreService.isCursorHidden=!1;break;case 1048:this.saveCursor();break;case 1049:this.saveCursor();case 47:case 1047:this._bufferService.buffers.activateAltBuffer(this._eraseAttrData()),this._coreService.isCursorInitialized=!0,this._onRequestRefreshRows.fire(0,this._bufferService.rows-1),this._onRequestSyncScrollBar.fire();break;case 2004:this._coreService.decPrivateModes.bracketedPasteMode=!0}return!0}resetMode(H){for(let te=0;te<H.length;te++)switch(H.params[te]){case 4:this._coreService.modes.insertMode=!1;break;case 20:this._optionsService.options.convertEol=!1}return!0}resetModePrivate(H){for(let te=0;te<H.length;te++)switch(H.params[te]){case 1:this._coreService.decPrivateModes.applicationCursorKeys=!1;break;case 3:this._optionsService.rawOptions.windowOptions.setWinLines&&(this._bufferService.resize(80,this._bufferService.rows),this._onRequestReset.fire());break;case 6:this._coreService.decPrivateModes.origin=!1,this._setCursor(0,0);break;case 7:this._coreService.decPrivateModes.wraparound=!1;break;case 12:this._optionsService.options.cursorBlink=!1;break;case 45:this._coreService.decPrivateModes.reverseWraparound=!1;break;case 66:this._logService.debug("Switching back to normal keypad."),this._coreService.decPrivateModes.applicationKeypad=!1,this._onRequestSyncScrollBar.fire();break;case 9:case 1e3:case 1002:case 1003:this._coreMouseService.activeProtocol="NONE";break;case 1004:this._coreService.decPrivateModes.sendFocus=!1;break;case 1005:this._logService.debug("DECRST 1005 not supported (see #2507)");break;case 1006:case 1016:this._coreMouseService.activeEncoding="DEFAULT";break;case 1015:this._logService.debug("DECRST 1015 not supported (see #2507)");break;case 25:this._coreService.isCursorHidden=!0;break;case 1048:this.restoreCursor();break;case 1049:case 47:case 1047:this._bufferService.buffers.activateNormalBuffer(),H.params[te]===1049&&this.restoreCursor(),this._coreService.isCursorInitialized=!0,this._onRequestRefreshRows.fire(0,this._bufferService.rows-1),this._onRequestSyncScrollBar.fire();break;case 2004:this._coreService.decPrivateModes.bracketedPasteMode=!1}return!0}requestMode(H,te){let de=this._coreService.decPrivateModes,{activeProtocol:me,activeEncoding:Ie}=this._coreMouseService,$e=this._coreService,{buffers:tt,cols:et}=this._bufferService,{active:Me,alt:Z}=tt,Le=this._optionsService.rawOptions,Ze=Bo=>Bo?1:2,dt=H.params[0];return Ot=dt,si=te?dt===2?4:dt===4?Ze($e.modes.insertMode):dt===12?3:dt===20?Ze(Le.convertEol):0:dt===1?Ze(de.applicationCursorKeys):dt===3?Le.windowOptions.setWinLines?et===80?2:et===132?1:0:0:dt===6?Ze(de.origin):dt===7?Ze(de.wraparound):dt===8?3:dt===9?Ze(me==="X10"):dt===12?Ze(Le.cursorBlink):dt===25?Ze(!$e.isCursorHidden):dt===45?Ze(de.reverseWraparound):dt===66?Ze(de.applicationKeypad):dt===67?4:dt===1e3?Ze(me==="VT200"):dt===1002?Ze(me==="DRAG"):dt===1003?Ze(me==="ANY"):dt===1004?Ze(de.sendFocus):dt===1005?4:dt===1006?Ze(Ie==="SGR"):dt===1015?4:dt===1016?Ze(Ie==="SGR_PIXELS"):dt===1048?1:dt===47||dt===1047||dt===1049?Ze(Me===Z):dt===2004?Ze(de.bracketedPasteMode):0,$e.triggerDataEvent(`${u.C0.ESC}[${te?"":"?"}${Ot};${si}$y`),!0;var Ot,si}_updateAttrColor(H,te,de,me,Ie){return te===2?(H|=50331648,H&=-16777216,H|=O.AttributeData.fromColorRGB([de,me,Ie])):te===5&&(H&=-50331904,H|=33554432|255&de),H}_extractColor(H,te,de){let me=[0,0,-1,0,0,0],Ie=0,$e=0;do{if(me[$e+Ie]=H.params[te+$e],H.hasSubParams(te+$e)){let tt=H.getSubParams(te+$e),et=0;do me[1]===5&&(Ie=1),me[$e+et+1+Ie]=tt[et];while(++et<tt.length&&et+$e+1+Ie<me.length);break}if(me[1]===5&&$e+Ie>=2||me[1]===2&&$e+Ie>=5)break;me[1]&&(Ie=1)}while(++$e+te<H.length&&$e+Ie<me.length);for(let tt=2;tt<me.length;++tt)me[tt]===-1&&(me[tt]=0);switch(me[0]){case 38:de.fg=this._updateAttrColor(de.fg,me[1],me[3],me[4],me[5]);break;case 48:de.bg=this._updateAttrColor(de.bg,me[1],me[3],me[4],me[5]);break;case 58:de.extended=de.extended.clone(),de.extended.underlineColor=this._updateAttrColor(de.extended.underlineColor,me[1],me[3],me[4],me[5])}return $e}_processUnderline(H,te){te.extended=te.extended.clone(),(!~H||H>5)&&(H=1),te.extended.underlineStyle=H,te.fg|=268435456,H===0&&(te.fg&=-268435457),te.updateExtended()}_processSGR0(H){H.fg=b.DEFAULT_ATTR_DATA.fg,H.bg=b.DEFAULT_ATTR_DATA.bg,H.extended=H.extended.clone(),H.extended.underlineStyle=0,H.extended.underlineColor&=-67108864,H.updateExtended()}charAttributes(H){if(H.length===1&&H.params[0]===0)return this._processSGR0(this._curAttrData),!0;let te=H.length,de,me=this._curAttrData;for(let Ie=0;Ie<te;Ie++)de=H.params[Ie],de>=30&&de<=37?(me.fg&=-50331904,me.fg|=16777216|de-30):de>=40&&de<=47?(me.bg&=-50331904,me.bg|=16777216|de-40):de>=90&&de<=97?(me.fg&=-50331904,me.fg|=16777224|de-90):de>=100&&de<=107?(me.bg&=-50331904,me.bg|=16777224|de-100):de===0?this._processSGR0(me):de===1?me.fg|=134217728:de===3?me.bg|=67108864:de===4?(me.fg|=268435456,this._processUnderline(H.hasSubParams(Ie)?H.getSubParams(Ie)[0]:1,me)):de===5?me.fg|=536870912:de===7?me.fg|=67108864:de===8?me.fg|=1073741824:de===9?me.fg|=2147483648:de===2?me.bg|=134217728:de===21?this._processUnderline(2,me):de===22?(me.fg&=-134217729,me.bg&=-134217729):de===23?me.bg&=-67108865:de===24?(me.fg&=-268435457,this._processUnderline(0,me)):de===25?me.fg&=-536870913:de===27?me.fg&=-67108865:de===28?me.fg&=-1073741825:de===29?me.fg&=2147483647:de===39?(me.fg&=-67108864,me.fg|=16777215&b.DEFAULT_ATTR_DATA.fg):de===49?(me.bg&=-67108864,me.bg|=16777215&b.DEFAULT_ATTR_DATA.bg):de===38||de===48||de===58?Ie+=this._extractColor(H,Ie,me):de===53?me.bg|=1073741824:de===55?me.bg&=-1073741825:de===59?(me.extended=me.extended.clone(),me.extended.underlineColor=-1,me.updateExtended()):de===100?(me.fg&=-67108864,me.fg|=16777215&b.DEFAULT_ATTR_DATA.fg,me.bg&=-67108864,me.bg|=16777215&b.DEFAULT_ATTR_DATA.bg):this._logService.debug("Unknown SGR attribute: %d.",de);return!0}deviceStatus(H){switch(H.params[0]){case 5:this._coreService.triggerDataEvent(`${u.C0.ESC}[0n`);break;case 6:let te=this._activeBuffer.y+1,de=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${u.C0.ESC}[${te};${de}R`)}return!0}deviceStatusPrivate(H){if(H.params[0]===6){let te=this._activeBuffer.y+1,de=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${u.C0.ESC}[?${te};${de}R`)}return!0}softReset(H){return this._coreService.isCursorHidden=!1,this._onRequestSyncScrollBar.fire(),this._activeBuffer.scrollTop=0,this._activeBuffer.scrollBottom=this._bufferService.rows-1,this._curAttrData=b.DEFAULT_ATTR_DATA.clone(),this._coreService.reset(),this._charsetService.reset(),this._activeBuffer.savedX=0,this._activeBuffer.savedY=this._activeBuffer.ybase,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._coreService.decPrivateModes.origin=!1,!0}setCursorStyle(H){let te=H.params[0]||1;switch(te){case 1:case 2:this._optionsService.options.cursorStyle="block";break;case 3:case 4:this._optionsService.options.cursorStyle="underline";break;case 5:case 6:this._optionsService.options.cursorStyle="bar"}let de=te%2==1;return this._optionsService.options.cursorBlink=de,!0}setScrollRegion(H){let te=H.params[0]||1,de;return(H.length<2||(de=H.params[1])>this._bufferService.rows||de===0)&&(de=this._bufferService.rows),de>te&&(this._activeBuffer.scrollTop=te-1,this._activeBuffer.scrollBottom=de-1,this._setCursor(0,0)),!0}windowOptions(H){if(!W(H.params[0],this._optionsService.rawOptions.windowOptions))return!0;let te=H.length>1?H.params[1]:0;switch(H.params[0]){case 14:te!==2&&this._onRequestWindowsOptionsReport.fire(G.GET_WIN_SIZE_PIXELS);break;case 16:this._onRequestWindowsOptionsReport.fire(G.GET_CELL_SIZE_PIXELS);break;case 18:this._bufferService&&this._coreService.triggerDataEvent(`${u.C0.ESC}[8;${this._bufferService.rows};${this._bufferService.cols}t`);break;case 22:te!==0&&te!==2||(this._windowTitleStack.push(this._windowTitle),this._windowTitleStack.length>10&&this._windowTitleStack.shift()),te!==0&&te!==1||(this._iconNameStack.push(this._iconName),this._iconNameStack.length>10&&this._iconNameStack.shift());break;case 23:te!==0&&te!==2||this._windowTitleStack.length&&this.setTitle(this._windowTitleStack.pop()),te!==0&&te!==1||this._iconNameStack.length&&this.setIconName(this._iconNameStack.pop())}return!0}saveCursor(H){return this._activeBuffer.savedX=this._activeBuffer.x,this._activeBuffer.savedY=this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,!0}restoreCursor(H){return this._activeBuffer.x=this._activeBuffer.savedX||0,this._activeBuffer.y=Math.max(this._activeBuffer.savedY-this._activeBuffer.ybase,0),this._curAttrData.fg=this._activeBuffer.savedCurAttrData.fg,this._curAttrData.bg=this._activeBuffer.savedCurAttrData.bg,this._charsetService.charset=this._savedCharset,this._activeBuffer.savedCharset&&(this._charsetService.charset=this._activeBuffer.savedCharset),this._restrictCursor(),!0}setTitle(H){return this._windowTitle=H,this._onTitleChange.fire(H),!0}setIconName(H){return this._iconName=H,!0}setOrReportIndexedColor(H){let te=[],de=H.split(";");for(;de.length>1;){let me=de.shift(),Ie=de.shift();if(/^\d+$/.exec(me)){let $e=parseInt(me);if(Ae($e))if(Ie==="?")te.push({type:0,index:$e});else{let tt=(0,B.parseColor)(Ie);tt&&te.push({type:1,index:$e,color:tt})}}}return te.length&&this._onColor.fire(te),!0}setHyperlink(H){let te=H.split(";");return!(te.length<2)&&(te[1]?this._createHyperlink(te[0],te[1]):!te[0]&&this._finishHyperlink())}_createHyperlink(H,te){this._getCurrentLinkId()&&this._finishHyperlink();let de=H.split(":"),me,Ie=de.findIndex($e=>$e.startsWith("id="));return Ie!==-1&&(me=de[Ie].slice(3)||void 0),this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=this._oscLinkService.registerLink({id:me,uri:te}),this._curAttrData.updateExtended(),!0}_finishHyperlink(){return this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=0,this._curAttrData.updateExtended(),!0}_setOrReportSpecialColor(H,te){let de=H.split(";");for(let me=0;me<de.length&&!(te>=this._specialColors.length);++me,++te)if(de[me]==="?")this._onColor.fire([{type:0,index:this._specialColors[te]}]);else{let Ie=(0,B.parseColor)(de[me]);Ie&&this._onColor.fire([{type:1,index:this._specialColors[te],color:Ie}])}return!0}setOrReportFgColor(H){return this._setOrReportSpecialColor(H,0)}setOrReportBgColor(H){return this._setOrReportSpecialColor(H,1)}setOrReportCursorColor(H){return this._setOrReportSpecialColor(H,2)}restoreIndexedColor(H){if(!H)return this._onColor.fire([{type:2}]),!0;let te=[],de=H.split(";");for(let me=0;me<de.length;++me)if(/^\d+$/.exec(de[me])){let Ie=parseInt(de[me]);Ae(Ie)&&te.push({type:2,index:Ie})}return te.length&&this._onColor.fire(te),!0}restoreFgColor(H){return this._onColor.fire([{type:2,index:256}]),!0}restoreBgColor(H){return this._onColor.fire([{type:2,index:257}]),!0}restoreCursorColor(H){return this._onColor.fire([{type:2,index:258}]),!0}nextLine(){return this._activeBuffer.x=0,this.index(),!0}keypadApplicationMode(){return this._logService.debug("Serial port requested application keypad."),this._coreService.decPrivateModes.applicationKeypad=!0,this._onRequestSyncScrollBar.fire(),!0}keypadNumericMode(){return this._logService.debug("Switching back to normal keypad."),this._coreService.decPrivateModes.applicationKeypad=!1,this._onRequestSyncScrollBar.fire(),!0}selectDefaultCharset(){return this._charsetService.setgLevel(0),this._charsetService.setgCharset(0,g.DEFAULT_CHARSET),!0}selectCharset(H){return H.length!==2?(this.selectDefaultCharset(),!0):(H[0]==="/"||this._charsetService.setgCharset(le[H[0]],g.CHARSETS[H[1]]||g.DEFAULT_CHARSET),!0)}index(){return this._restrictCursor(),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._restrictCursor(),!0}tabSet(){return this._activeBuffer.tabs[this._activeBuffer.x]=!0,!0}reverseIndex(){if(this._restrictCursor(),this._activeBuffer.y===this._activeBuffer.scrollTop){let H=this._activeBuffer.scrollBottom-this._activeBuffer.scrollTop;this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase+this._activeBuffer.y,H,1),this._activeBuffer.lines.set(this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.getBlankLine(this._eraseAttrData())),this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom)}else this._activeBuffer.y--,this._restrictCursor();return!0}fullReset(){return this._parser.reset(),this._onRequestReset.fire(),!0}reset(){this._curAttrData=b.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=b.DEFAULT_ATTR_DATA.clone()}_eraseAttrData(){return this._eraseAttrDataInternal.bg&=-67108864,this._eraseAttrDataInternal.bg|=67108863&this._curAttrData.bg,this._eraseAttrDataInternal}setgLevel(H){return this._charsetService.setgLevel(H),!0}screenAlignmentPattern(){let H=new S.CellData;H.content=4194373,H.fg=this._curAttrData.fg,H.bg=this._curAttrData.bg,this._setCursor(0,0);for(let te=0;te<this._bufferService.rows;++te){let de=this._activeBuffer.ybase+this._activeBuffer.y+te,me=this._activeBuffer.lines.get(de);me&&(me.fill(H),me.isWrapped=!1)}return this._dirtyRowTracker.markAllDirty(),this._setCursor(0,0),!0}requestStatusString(H,te){let de=this._bufferService.buffer,me=this._optionsService.rawOptions;return(Ie=>(this._coreService.triggerDataEvent(`${u.C0.ESC}${Ie}${u.C0.ESC}\\`),!0))(H==='"q'?`P1$r${this._curAttrData.isProtected()?1:0}"q`:H==='"p'?'P1$r61;1"p':H==="r"?`P1$r${de.scrollTop+1};${de.scrollBottom+1}r`:H==="m"?"P1$r0m":H===" q"?`P1$r${{block:2,underline:4,bar:6}[me.cursorStyle]-(me.cursorBlink?1:0)} q`:"P0$r")}markRangeDirty(H,te){this._dirtyRowTracker.markRangeDirty(H,te)}}a.InputHandler=Se;let pe=class{constructor(ue){this._bufferService=ue,this.clearRange()}clearRange(){this.start=this._bufferService.buffer.y,this.end=this._bufferService.buffer.y}markDirty(ue){ue<this.start?this.start=ue:ue>this.end&&(this.end=ue)}markRangeDirty(ue,H){ue>H&&(ve=ue,ue=H,H=ve),ue<this.start&&(this.start=ue),H>this.end&&(this.end=H)}markAllDirty(){this.markRangeDirty(0,this._bufferService.rows-1)}};function Ae(ue){return 0<=ue&&ue<256}pe=d([p(0,A.IBufferService)],pe)},844:(i,a)=>{function s(d){for(let p of d)p.dispose();d.length=0}Object.defineProperty(a,"__esModule",{value:!0}),a.getDisposeArrayDisposable=a.disposeArray=a.toDisposable=a.MutableDisposable=a.Disposable=void 0,a.Disposable=class{constructor(){this._disposables=[],this._isDisposed=!1}dispose(){this._isDisposed=!0;for(let d of this._disposables)d.dispose();this._disposables.length=0}register(d){return this._disposables.push(d),d}unregister(d){let p=this._disposables.indexOf(d);p!==-1&&this._disposables.splice(p,1)}},a.MutableDisposable=class{constructor(){this._isDisposed=!1}get value(){return this._isDisposed?void 0:this._value}set value(d){this._isDisposed||d===this._value||(this._value?.dispose(),this._value=d)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,this._value?.dispose(),this._value=void 0}},a.toDisposable=function(d){return{dispose:d}},a.disposeArray=s,a.getDisposeArrayDisposable=function(d){return{dispose:()=>s(d)}}},1505:(i,a)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.FourKeyMap=a.TwoKeyMap=void 0;class s{constructor(){this._data={}}set(p,u,g){this._data[p]||(this._data[p]={}),this._data[p][u]=g}get(p,u){return this._data[p]?this._data[p][u]:void 0}clear(){this._data={}}}a.TwoKeyMap=s,a.FourKeyMap=class{constructor(){this._data=new s}set(d,p,u,g,C){this._data.get(d,p)||this._data.set(d,p,new s),this._data.get(d,p).set(u,g,C)}get(d,p,u,g){return this._data.get(d,p)?.get(u,g)}clear(){this._data.clear()}}},6114:(i,a)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.isChromeOS=a.isLinux=a.isWindows=a.isIphone=a.isIpad=a.isMac=a.getSafariVersion=a.isSafari=a.isLegacyEdge=a.isFirefox=a.isNode=void 0,a.isNode=typeof process<"u"&&"title"in process;let s=a.isNode?"node":navigator.userAgent,d=a.isNode?"node":navigator.platform;a.isFirefox=s.includes("Firefox"),a.isLegacyEdge=s.includes("Edge"),a.isSafari=/^((?!chrome|android).)*safari/i.test(s),a.getSafariVersion=function(){if(!a.isSafari)return 0;let p=s.match(/Version\/(\d+)/);return p===null||p.length<2?0:parseInt(p[1])},a.isMac=["Macintosh","MacIntel","MacPPC","Mac68K"].includes(d),a.isIpad=d==="iPad",a.isIphone=d==="iPhone",a.isWindows=["Windows","Win16","Win32","WinCE"].includes(d),a.isLinux=d.indexOf("Linux")>=0,a.isChromeOS=/\bCrOS\b/.test(s)},6106:(i,a)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.SortedList=void 0;let s=0;a.SortedList=class{constructor(d){this._getKey=d,this._array=[]}clear(){this._array.length=0}insert(d){this._array.length!==0?(s=this._search(this._getKey(d)),this._array.splice(s,0,d)):this._array.push(d)}delete(d){if(this._array.length===0)return!1;let p=this._getKey(d);if(p===void 0||(s=this._search(p),s===-1)||this._getKey(this._array[s])!==p)return!1;do if(this._array[s]===d)return this._array.splice(s,1),!0;while(++s<this._array.length&&this._getKey(this._array[s])===p);return!1}*getKeyIterator(d){if(this._array.length!==0&&(s=this._search(d),!(s<0||s>=this._array.length)&&this._getKey(this._array[s])===d))do yield this._array[s];while(++s<this._array.length&&this._getKey(this._array[s])===d)}forEachByKey(d,p){if(this._array.length!==0&&(s=this._search(d),!(s<0||s>=this._array.length)&&this._getKey(this._array[s])===d))do p(this._array[s]);while(++s<this._array.length&&this._getKey(this._array[s])===d)}values(){return[...this._array].values()}_search(d){let p=0,u=this._array.length-1;for(;u>=p;){let g=p+u>>1,C=this._getKey(this._array[g]);if(C>d)u=g-1;else{if(!(C<d)){for(;g>0&&this._getKey(this._array[g-1])===d;)g--;return g}p=g+1}}return p}}},7226:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.DebouncedIdleTask=a.IdleTaskQueue=a.PriorityTaskQueue=void 0;let d=s(6114);class p{constructor(){this._tasks=[],this._i=0}enqueue(C){this._tasks.push(C),this._start()}flush(){for(;this._i<this._tasks.length;)this._tasks[this._i]()||this._i++;this.clear()}clear(){this._idleCallback&&(this._cancelCallback(this._idleCallback),this._idleCallback=void 0),this._i=0,this._tasks.length=0}_start(){this._idleCallback||(this._idleCallback=this._requestCallback(this._process.bind(this)))}_process(C){this._idleCallback=void 0;let M=0,x=0,b=C.timeRemaining(),P=0;for(;this._i<this._tasks.length;){if(M=Date.now(),this._tasks[this._i]()||this._i++,M=Math.max(1,Date.now()-M),x=Math.max(M,x),P=C.timeRemaining(),1.5*x>P)return b-M<-20&&console.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(b-M))}ms`),void this._start();b=P}this.clear()}}class u extends p{_requestCallback(C){return setTimeout(()=>C(this._createDeadline(16)))}_cancelCallback(C){clearTimeout(C)}_createDeadline(C){let M=Date.now()+C;return{timeRemaining:()=>Math.max(0,M-Date.now())}}}a.PriorityTaskQueue=u,a.IdleTaskQueue=!d.isNode&&"requestIdleCallback"in window?class extends p{_requestCallback(g){return requestIdleCallback(g)}_cancelCallback(g){cancelIdleCallback(g)}}:u,a.DebouncedIdleTask=class{constructor(){this._queue=new a.IdleTaskQueue}set(g){this._queue.clear(),this._queue.enqueue(g)}flush(){this._queue.flush()}}},9282:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.updateWindowsModeWrappedState=void 0;let d=s(643);a.updateWindowsModeWrappedState=function(p){let u=p.buffer.lines.get(p.buffer.ybase+p.buffer.y-1),g=u?.get(p.cols-1),C=p.buffer.lines.get(p.buffer.ybase+p.buffer.y);C&&g&&(C.isWrapped=g[d.CHAR_DATA_CODE_INDEX]!==d.NULL_CELL_CODE&&g[d.CHAR_DATA_CODE_INDEX]!==d.WHITESPACE_CELL_CODE)}},3734:(i,a)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.ExtendedAttrs=a.AttributeData=void 0;class s{constructor(){this.fg=0,this.bg=0,this.extended=new d}static toColorRGB(u){return[u>>>16&255,u>>>8&255,255&u]}static fromColorRGB(u){return(255&u[0])<<16|(255&u[1])<<8|255&u[2]}clone(){let u=new s;return u.fg=this.fg,u.bg=this.bg,u.extended=this.extended.clone(),u}isInverse(){return 67108864&this.fg}isBold(){return 134217728&this.fg}isUnderline(){return this.hasExtendedAttrs()&&this.extended.underlineStyle!==0?1:268435456&this.fg}isBlink(){return 536870912&this.fg}isInvisible(){return 1073741824&this.fg}isItalic(){return 67108864&this.bg}isDim(){return 134217728&this.bg}isStrikethrough(){return 2147483648&this.fg}isProtected(){return 536870912&this.bg}isOverline(){return 1073741824&this.bg}getFgColorMode(){return 50331648&this.fg}getBgColorMode(){return 50331648&this.bg}isFgRGB(){return(50331648&this.fg)==50331648}isBgRGB(){return(50331648&this.bg)==50331648}isFgPalette(){return(50331648&this.fg)==16777216||(50331648&this.fg)==33554432}isBgPalette(){return(50331648&this.bg)==16777216||(50331648&this.bg)==33554432}isFgDefault(){return(50331648&this.fg)==0}isBgDefault(){return(50331648&this.bg)==0}isAttributeDefault(){return this.fg===0&&this.bg===0}getFgColor(){switch(50331648&this.fg){case 16777216:case 33554432:return 255&this.fg;case 50331648:return 16777215&this.fg;default:return-1}}getBgColor(){switch(50331648&this.bg){case 16777216:case 33554432:return 255&this.bg;case 50331648:return 16777215&this.bg;default:return-1}}hasExtendedAttrs(){return 268435456&this.bg}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(268435456&this.bg&&~this.extended.underlineColor)switch(50331648&this.extended.underlineColor){case 16777216:case 33554432:return 255&this.extended.underlineColor;case 50331648:return 16777215&this.extended.underlineColor;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return 268435456&this.bg&&~this.extended.underlineColor?50331648&this.extended.underlineColor:this.getFgColorMode()}isUnderlineColorRGB(){return 268435456&this.bg&&~this.extended.underlineColor?(50331648&this.extended.underlineColor)==50331648:this.isFgRGB()}isUnderlineColorPalette(){return 268435456&this.bg&&~this.extended.underlineColor?(50331648&this.extended.underlineColor)==16777216||(50331648&this.extended.underlineColor)==33554432:this.isFgPalette()}isUnderlineColorDefault(){return 268435456&this.bg&&~this.extended.underlineColor?(50331648&this.extended.underlineColor)==0:this.isFgDefault()}getUnderlineStyle(){return 268435456&this.fg?268435456&this.bg?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}}a.AttributeData=s;class d{get ext(){return this._urlId?-469762049&this._ext|this.underlineStyle<<26:this._ext}set ext(u){this._ext=u}get underlineStyle(){return this._urlId?5:(469762048&this._ext)>>26}set underlineStyle(u){this._ext&=-469762049,this._ext|=u<<26&469762048}get underlineColor(){return 67108863&this._ext}set underlineColor(u){this._ext&=-67108864,this._ext|=67108863&u}get urlId(){return this._urlId}set urlId(u){this._urlId=u}get underlineVariantOffset(){let u=(3758096384&this._ext)>>29;return u<0?4294967288^u:u}set underlineVariantOffset(u){this._ext&=536870911,this._ext|=u<<29&3758096384}constructor(u=0,g=0){this._ext=0,this._urlId=0,this._ext=u,this._urlId=g}clone(){return new d(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0}}a.ExtendedAttrs=d},9092:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.Buffer=a.MAX_BUFFER_SIZE=void 0;let d=s(6349),p=s(7226),u=s(3734),g=s(8437),C=s(4634),M=s(511),x=s(643),b=s(4863),P=s(7116);a.MAX_BUFFER_SIZE=4294967295,a.Buffer=class{constructor(k,S,O){this._hasScrollback=k,this._optionsService=S,this._bufferService=O,this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.tabs={},this.savedY=0,this.savedX=0,this.savedCurAttrData=g.DEFAULT_ATTR_DATA.clone(),this.savedCharset=P.DEFAULT_CHARSET,this.markers=[],this._nullCell=M.CellData.fromCharData([0,x.NULL_CELL_CHAR,x.NULL_CELL_WIDTH,x.NULL_CELL_CODE]),this._whitespaceCell=M.CellData.fromCharData([0,x.WHITESPACE_CELL_CHAR,x.WHITESPACE_CELL_WIDTH,x.WHITESPACE_CELL_CODE]),this._isClearing=!1,this._memoryCleanupQueue=new p.IdleTaskQueue,this._memoryCleanupPosition=0,this._cols=this._bufferService.cols,this._rows=this._bufferService.rows,this.lines=new d.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}getNullCell(k){return k?(this._nullCell.fg=k.fg,this._nullCell.bg=k.bg,this._nullCell.extended=k.extended):(this._nullCell.fg=0,this._nullCell.bg=0,this._nullCell.extended=new u.ExtendedAttrs),this._nullCell}getWhitespaceCell(k){return k?(this._whitespaceCell.fg=k.fg,this._whitespaceCell.bg=k.bg,this._whitespaceCell.extended=k.extended):(this._whitespaceCell.fg=0,this._whitespaceCell.bg=0,this._whitespaceCell.extended=new u.ExtendedAttrs),this._whitespaceCell}getBlankLine(k,S){return new g.BufferLine(this._bufferService.cols,this.getNullCell(k),S)}get hasScrollback(){return this._hasScrollback&&this.lines.maxLength>this._rows}get isCursorInViewport(){let k=this.ybase+this.y-this.ydisp;return k>=0&&k<this._rows}_getCorrectBufferLength(k){if(!this._hasScrollback)return k;let S=k+this._optionsService.rawOptions.scrollback;return S>a.MAX_BUFFER_SIZE?a.MAX_BUFFER_SIZE:S}fillViewportRows(k){if(this.lines.length===0){k===void 0&&(k=g.DEFAULT_ATTR_DATA);let S=this._rows;for(;S--;)this.lines.push(this.getBlankLine(k))}}clear(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new d.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}resize(k,S){let O=this.getNullCell(g.DEFAULT_ATTR_DATA),A=0,D=this._getCorrectBufferLength(S);if(D>this.lines.maxLength&&(this.lines.maxLength=D),this.lines.length>0){if(this._cols<k)for(let I=0;I<this.lines.length;I++)A+=+this.lines.get(I).resize(k,O);let F=0;if(this._rows<S)for(let I=this._rows;I<S;I++)this.lines.length<S+this.ybase&&(this._optionsService.rawOptions.windowsMode||this._optionsService.rawOptions.windowsPty.backend!==void 0||this._optionsService.rawOptions.windowsPty.buildNumber!==void 0?this.lines.push(new g.BufferLine(k,O)):this.ybase>0&&this.lines.length<=this.ybase+this.y+F+1?(this.ybase--,F++,this.ydisp>0&&this.ydisp--):this.lines.push(new g.BufferLine(k,O)));else for(let I=this._rows;I>S;I--)this.lines.length>S+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(D<this.lines.maxLength){let I=this.lines.length-D;I>0&&(this.lines.trimStart(I),this.ybase=Math.max(this.ybase-I,0),this.ydisp=Math.max(this.ydisp-I,0),this.savedY=Math.max(this.savedY-I,0)),this.lines.maxLength=D}this.x=Math.min(this.x,k-1),this.y=Math.min(this.y,S-1),F&&(this.y+=F),this.savedX=Math.min(this.savedX,k-1),this.scrollTop=0}if(this.scrollBottom=S-1,this._isReflowEnabled&&(this._reflow(k,S),this._cols>k))for(let F=0;F<this.lines.length;F++)A+=+this.lines.get(F).resize(k,O);this._cols=k,this._rows=S,this._memoryCleanupQueue.clear(),A>.1*this.lines.length&&(this._memoryCleanupPosition=0,this._memoryCleanupQueue.enqueue(()=>this._batchedMemoryCleanup()))}_batchedMemoryCleanup(){let k=!0;this._memoryCleanupPosition>=this.lines.length&&(this._memoryCleanupPosition=0,k=!1);let S=0;for(;this._memoryCleanupPosition<this.lines.length;)if(S+=this.lines.get(this._memoryCleanupPosition++).cleanupMemory(),S>100)return!0;return k}get _isReflowEnabled(){let k=this._optionsService.rawOptions.windowsPty;return k&&k.buildNumber?this._hasScrollback&&k.backend==="conpty"&&k.buildNumber>=21376:this._hasScrollback&&!this._optionsService.rawOptions.windowsMode}_reflow(k,S){this._cols!==k&&(k>this._cols?this._reflowLarger(k,S):this._reflowSmaller(k,S))}_reflowLarger(k,S){let O=(0,C.reflowLargerGetLinesToRemove)(this.lines,this._cols,k,this.ybase+this.y,this.getNullCell(g.DEFAULT_ATTR_DATA));if(O.length>0){let A=(0,C.reflowLargerCreateNewLayout)(this.lines,O);(0,C.reflowLargerApplyNewLayout)(this.lines,A.layout),this._reflowLargerAdjustViewport(k,S,A.countRemoved)}}_reflowLargerAdjustViewport(k,S,O){let A=this.getNullCell(g.DEFAULT_ATTR_DATA),D=O;for(;D-- >0;)this.ybase===0?(this.y>0&&this.y--,this.lines.length<S&&this.lines.push(new g.BufferLine(k,A))):(this.ydisp===this.ybase&&this.ydisp--,this.ybase--);this.savedY=Math.max(this.savedY-O,0)}_reflowSmaller(k,S){let O=this.getNullCell(g.DEFAULT_ATTR_DATA),A=[],D=0;for(let F=this.lines.length-1;F>=0;F--){let I=this.lines.get(F);if(!I||!I.isWrapped&&I.getTrimmedLength()<=k)continue;let B=[I];for(;I.isWrapped&&F>0;)I=this.lines.get(--F),B.unshift(I);let le=this.ybase+this.y;if(le>=F&&le<F+B.length)continue;let ae=B[B.length-1].getTrimmedLength(),W=(0,C.reflowSmallerGetNewLineLengths)(B,this._cols,k),G=W.length-B.length,ve;ve=this.ybase===0&&this.y!==this.lines.length-1?Math.max(0,this.y-this.lines.maxLength+G):Math.max(0,this.lines.length-this.lines.maxLength+G);let Se=[];for(let de=0;de<G;de++){let me=this.getBlankLine(g.DEFAULT_ATTR_DATA,!0);Se.push(me)}Se.length>0&&(A.push({start:F+B.length+D,newLines:Se}),D+=Se.length),B.push(...Se);let pe=W.length-1,Ae=W[pe];Ae===0&&(pe--,Ae=W[pe]);let ue=B.length-G-1,H=ae;for(;ue>=0;){let de=Math.min(H,Ae);if(B[pe]===void 0)break;if(B[pe].copyCellsFrom(B[ue],H-de,Ae-de,de,!0),Ae-=de,Ae===0&&(pe--,Ae=W[pe]),H-=de,H===0){ue--;let me=Math.max(ue,0);H=(0,C.getWrappedLineTrimmedLength)(B,me,this._cols)}}for(let de=0;de<B.length;de++)W[de]<k&&B[de].setCell(W[de],O);let te=G-ve;for(;te-- >0;)this.ybase===0?this.y<S-1?(this.y++,this.lines.pop()):(this.ybase++,this.ydisp++):this.ybase<Math.min(this.lines.maxLength,this.lines.length+D)-S&&(this.ybase===this.ydisp&&this.ydisp++,this.ybase++);this.savedY=Math.min(this.savedY+G,this.ybase+S-1)}if(A.length>0){let F=[],I=[];for(let pe=0;pe<this.lines.length;pe++)I.push(this.lines.get(pe));let B=this.lines.length,le=B-1,ae=0,W=A[ae];this.lines.length=Math.min(this.lines.maxLength,this.lines.length+D);let G=0;for(let pe=Math.min(this.lines.maxLength-1,B+D-1);pe>=0;pe--)if(W&&W.start>le+G){for(let Ae=W.newLines.length-1;Ae>=0;Ae--)this.lines.set(pe--,W.newLines[Ae]);pe++,F.push({index:le+1,amount:W.newLines.length}),G+=W.newLines.length,W=A[++ae]}else this.lines.set(pe,I[le--]);let ve=0;for(let pe=F.length-1;pe>=0;pe--)F[pe].index+=ve,this.lines.onInsertEmitter.fire(F[pe]),ve+=F[pe].amount;let Se=Math.max(0,B+D-this.lines.maxLength);Se>0&&this.lines.onTrimEmitter.fire(Se)}}translateBufferLineToString(k,S,O=0,A){let D=this.lines.get(k);return D?D.translateToString(S,O,A):""}getWrappedRangeForLine(k){let S=k,O=k;for(;S>0&&this.lines.get(S).isWrapped;)S--;for(;O+1<this.lines.length&&this.lines.get(O+1).isWrapped;)O++;return{first:S,last:O}}setupTabStops(k){for(k!=null?this.tabs[k]||(k=this.prevStop(k)):(this.tabs={},k=0);k<this._cols;k+=this._optionsService.rawOptions.tabStopWidth)this.tabs[k]=!0}prevStop(k){for(k==null&&(k=this.x);!this.tabs[--k]&&k>0;);return k>=this._cols?this._cols-1:k<0?0:k}nextStop(k){for(k==null&&(k=this.x);!this.tabs[++k]&&k<this._cols;);return k>=this._cols?this._cols-1:k<0?0:k}clearMarkers(k){this._isClearing=!0;for(let S=0;S<this.markers.length;S++)this.markers[S].line===k&&(this.markers[S].dispose(),this.markers.splice(S--,1));this._isClearing=!1}clearAllMarkers(){this._isClearing=!0;for(let k=0;k<this.markers.length;k++)this.markers[k].dispose(),this.markers.splice(k--,1);this._isClearing=!1}addMarker(k){let S=new b.Marker(k);return this.markers.push(S),S.register(this.lines.onTrim(O=>{S.line-=O,S.line<0&&S.dispose()})),S.register(this.lines.onInsert(O=>{S.line>=O.index&&(S.line+=O.amount)})),S.register(this.lines.onDelete(O=>{S.line>=O.index&&S.line<O.index+O.amount&&S.dispose(),S.line>O.index&&(S.line-=O.amount)})),S.register(S.onDispose(()=>this._removeMarker(S))),S}_removeMarker(k){this._isClearing||this.markers.splice(this.markers.indexOf(k),1)}}},8437:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.BufferLine=a.DEFAULT_ATTR_DATA=void 0;let d=s(3734),p=s(511),u=s(643),g=s(482);a.DEFAULT_ATTR_DATA=Object.freeze(new d.AttributeData);let C=0;class M{constructor(b,P,k=!1){this.isWrapped=k,this._combined={},this._extendedAttrs={},this._data=new Uint32Array(3*b);let S=P||p.CellData.fromCharData([0,u.NULL_CELL_CHAR,u.NULL_CELL_WIDTH,u.NULL_CELL_CODE]);for(let O=0;O<b;++O)this.setCell(O,S);this.length=b}get(b){let P=this._data[3*b+0],k=2097151&P;return[this._data[3*b+1],2097152&P?this._combined[b]:k?(0,g.stringFromCodePoint)(k):"",P>>22,2097152&P?this._combined[b].charCodeAt(this._combined[b].length-1):k]}set(b,P){this._data[3*b+1]=P[u.CHAR_DATA_ATTR_INDEX],P[u.CHAR_DATA_CHAR_INDEX].length>1?(this._combined[b]=P[1],this._data[3*b+0]=2097152|b|P[u.CHAR_DATA_WIDTH_INDEX]<<22):this._data[3*b+0]=P[u.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|P[u.CHAR_DATA_WIDTH_INDEX]<<22}getWidth(b){return this._data[3*b+0]>>22}hasWidth(b){return 12582912&this._data[3*b+0]}getFg(b){return this._data[3*b+1]}getBg(b){return this._data[3*b+2]}hasContent(b){return 4194303&this._data[3*b+0]}getCodePoint(b){let P=this._data[3*b+0];return 2097152&P?this._combined[b].charCodeAt(this._combined[b].length-1):2097151&P}isCombined(b){return 2097152&this._data[3*b+0]}getString(b){let P=this._data[3*b+0];return 2097152&P?this._combined[b]:2097151&P?(0,g.stringFromCodePoint)(2097151&P):""}isProtected(b){return 536870912&this._data[3*b+2]}loadCell(b,P){return C=3*b,P.content=this._data[C+0],P.fg=this._data[C+1],P.bg=this._data[C+2],2097152&P.content&&(P.combinedData=this._combined[b]),268435456&P.bg&&(P.extended=this._extendedAttrs[b]),P}setCell(b,P){2097152&P.content&&(this._combined[b]=P.combinedData),268435456&P.bg&&(this._extendedAttrs[b]=P.extended),this._data[3*b+0]=P.content,this._data[3*b+1]=P.fg,this._data[3*b+2]=P.bg}setCellFromCodepoint(b,P,k,S){268435456&S.bg&&(this._extendedAttrs[b]=S.extended),this._data[3*b+0]=P|k<<22,this._data[3*b+1]=S.fg,this._data[3*b+2]=S.bg}addCodepointToCell(b,P,k){let S=this._data[3*b+0];2097152&S?this._combined[b]+=(0,g.stringFromCodePoint)(P):2097151&S?(this._combined[b]=(0,g.stringFromCodePoint)(2097151&S)+(0,g.stringFromCodePoint)(P),S&=-2097152,S|=2097152):S=P|4194304,k&&(S&=-12582913,S|=k<<22),this._data[3*b+0]=S}insertCells(b,P,k){if((b%=this.length)&&this.getWidth(b-1)===2&&this.setCellFromCodepoint(b-1,0,1,k),P<this.length-b){let S=new p.CellData;for(let O=this.length-b-P-1;O>=0;--O)this.setCell(b+P+O,this.loadCell(b+O,S));for(let O=0;O<P;++O)this.setCell(b+O,k)}else for(let S=b;S<this.length;++S)this.setCell(S,k);this.getWidth(this.length-1)===2&&this.setCellFromCodepoint(this.length-1,0,1,k)}deleteCells(b,P,k){if(b%=this.length,P<this.length-b){let S=new p.CellData;for(let O=0;O<this.length-b-P;++O)this.setCell(b+O,this.loadCell(b+P+O,S));for(let O=this.length-P;O<this.length;++O)this.setCell(O,k)}else for(let S=b;S<this.length;++S)this.setCell(S,k);b&&this.getWidth(b-1)===2&&this.setCellFromCodepoint(b-1,0,1,k),this.getWidth(b)!==0||this.hasContent(b)||this.setCellFromCodepoint(b,0,1,k)}replaceCells(b,P,k,S=!1){if(S)for(b&&this.getWidth(b-1)===2&&!this.isProtected(b-1)&&this.setCellFromCodepoint(b-1,0,1,k),P<this.length&&this.getWidth(P-1)===2&&!this.isProtected(P)&&this.setCellFromCodepoint(P,0,1,k);b<P&&b<this.length;)this.isProtected(b)||this.setCell(b,k),b++;else for(b&&this.getWidth(b-1)===2&&this.setCellFromCodepoint(b-1,0,1,k),P<this.length&&this.getWidth(P-1)===2&&this.setCellFromCodepoint(P,0,1,k);b<P&&b<this.length;)this.setCell(b++,k)}resize(b,P){if(b===this.length)return 4*this._data.length*2<this._data.buffer.byteLength;let k=3*b;if(b>this.length){if(this._data.buffer.byteLength>=4*k)this._data=new Uint32Array(this._data.buffer,0,k);else{let S=new Uint32Array(k);S.set(this._data),this._data=S}for(let S=this.length;S<b;++S)this.setCell(S,P)}else{this._data=this._data.subarray(0,k);let S=Object.keys(this._combined);for(let A=0;A<S.length;A++){let D=parseInt(S[A],10);D>=b&&delete this._combined[D]}let O=Object.keys(this._extendedAttrs);for(let A=0;A<O.length;A++){let D=parseInt(O[A],10);D>=b&&delete this._extendedAttrs[D]}}return this.length=b,4*k*2<this._data.buffer.byteLength}cleanupMemory(){if(4*this._data.length*2<this._data.buffer.byteLength){let b=new Uint32Array(this._data.length);return b.set(this._data),this._data=b,1}return 0}fill(b,P=!1){if(P)for(let k=0;k<this.length;++k)this.isProtected(k)||this.setCell(k,b);else{this._combined={},this._extendedAttrs={};for(let k=0;k<this.length;++k)this.setCell(k,b)}}copyFrom(b){this.length!==b.length?this._data=new Uint32Array(b._data):this._data.set(b._data),this.length=b.length,this._combined={};for(let P in b._combined)this._combined[P]=b._combined[P];this._extendedAttrs={};for(let P in b._extendedAttrs)this._extendedAttrs[P]=b._extendedAttrs[P];this.isWrapped=b.isWrapped}clone(){let b=new M(0);b._data=new Uint32Array(this._data),b.length=this.length;for(let P in this._combined)b._combined[P]=this._combined[P];for(let P in this._extendedAttrs)b._extendedAttrs[P]=this._extendedAttrs[P];return b.isWrapped=this.isWrapped,b}getTrimmedLength(){for(let b=this.length-1;b>=0;--b)if(4194303&this._data[3*b+0])return b+(this._data[3*b+0]>>22);return 0}getNoBgTrimmedLength(){for(let b=this.length-1;b>=0;--b)if(4194303&this._data[3*b+0]||50331648&this._data[3*b+2])return b+(this._data[3*b+0]>>22);return 0}copyCellsFrom(b,P,k,S,O){let A=b._data;if(O)for(let F=S-1;F>=0;F--){for(let I=0;I<3;I++)this._data[3*(k+F)+I]=A[3*(P+F)+I];268435456&A[3*(P+F)+2]&&(this._extendedAttrs[k+F]=b._extendedAttrs[P+F])}else for(let F=0;F<S;F++){for(let I=0;I<3;I++)this._data[3*(k+F)+I]=A[3*(P+F)+I];268435456&A[3*(P+F)+2]&&(this._extendedAttrs[k+F]=b._extendedAttrs[P+F])}let D=Object.keys(b._combined);for(let F=0;F<D.length;F++){let I=parseInt(D[F],10);I>=P&&(this._combined[I-P+k]=b._combined[I])}}translateToString(b,P,k,S){P=P??0,k=k??this.length,b&&(k=Math.min(k,this.getTrimmedLength())),S&&(S.length=0);let O="";for(;P<k;){let A=this._data[3*P+0],D=2097151&A,F=2097152&A?this._combined[P]:D?(0,g.stringFromCodePoint)(D):u.WHITESPACE_CELL_CHAR;if(O+=F,S)for(let I=0;I<F.length;++I)S.push(P);P+=A>>22||1}return S&&S.push(P),O}}a.BufferLine=M},4841:(i,a)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.getRangeLength=void 0,a.getRangeLength=function(s,d){if(s.start.y>s.end.y)throw new Error(`Buffer range end (${s.end.x}, ${s.end.y}) cannot be before start (${s.start.x}, ${s.start.y})`);return d*(s.end.y-s.start.y)+(s.end.x-s.start.x+1)}},4634:(i,a)=>{function s(d,p,u){if(p===d.length-1)return d[p].getTrimmedLength();let g=!d[p].hasContent(u-1)&&d[p].getWidth(u-1)===1,C=d[p+1].getWidth(0)===2;return g&&C?u-1:u}Object.defineProperty(a,"__esModule",{value:!0}),a.getWrappedLineTrimmedLength=a.reflowSmallerGetNewLineLengths=a.reflowLargerApplyNewLayout=a.reflowLargerCreateNewLayout=a.reflowLargerGetLinesToRemove=void 0,a.reflowLargerGetLinesToRemove=function(d,p,u,g,C){let M=[];for(let x=0;x<d.length-1;x++){let b=x,P=d.get(++b);if(!P.isWrapped)continue;let k=[d.get(x)];for(;b<d.length&&P.isWrapped;)k.push(P),P=d.get(++b);if(g>=x&&g<b){x+=k.length-1;continue}let S=0,O=s(k,S,p),A=1,D=0;for(;A<k.length;){let I=s(k,A,p),B=I-D,le=u-O,ae=Math.min(B,le);k[S].copyCellsFrom(k[A],D,O,ae,!1),O+=ae,O===u&&(S++,O=0),D+=ae,D===I&&(A++,D=0),O===0&&S!==0&&k[S-1].getWidth(u-1)===2&&(k[S].copyCellsFrom(k[S-1],u-1,O++,1,!1),k[S-1].setCell(u-1,C))}k[S].replaceCells(O,u,C);let F=0;for(let I=k.length-1;I>0&&(I>S||k[I].getTrimmedLength()===0);I--)F++;F>0&&(M.push(x+k.length-F),M.push(F)),x+=k.length-1}return M},a.reflowLargerCreateNewLayout=function(d,p){let u=[],g=0,C=p[g],M=0;for(let x=0;x<d.length;x++)if(C===x){let b=p[++g];d.onDeleteEmitter.fire({index:x-M,amount:b}),x+=b-1,M+=b,C=p[++g]}else u.push(x);return{layout:u,countRemoved:M}},a.reflowLargerApplyNewLayout=function(d,p){let u=[];for(let g=0;g<p.length;g++)u.push(d.get(p[g]));for(let g=0;g<u.length;g++)d.set(g,u[g]);d.length=p.length},a.reflowSmallerGetNewLineLengths=function(d,p,u){let g=[],C=d.map((P,k)=>s(d,k,p)).reduce((P,k)=>P+k),M=0,x=0,b=0;for(;b<C;){if(C-b<u){g.push(C-b);break}M+=u;let P=s(d,x,p);M>P&&(M-=P,x++);let k=d[x].getWidth(M-1)===2;k&&M--;let S=k?u-1:u;g.push(S),b+=S}return g},a.getWrappedLineTrimmedLength=s},5295:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.BufferSet=void 0;let d=s(8460),p=s(844),u=s(9092);class g extends p.Disposable{constructor(M,x){super(),this._optionsService=M,this._bufferService=x,this._onBufferActivate=this.register(new d.EventEmitter),this.onBufferActivate=this._onBufferActivate.event,this.reset(),this.register(this._optionsService.onSpecificOptionChange("scrollback",()=>this.resize(this._bufferService.cols,this._bufferService.rows))),this.register(this._optionsService.onSpecificOptionChange("tabStopWidth",()=>this.setupTabStops()))}reset(){this._normal=new u.Buffer(!0,this._optionsService,this._bufferService),this._normal.fillViewportRows(),this._alt=new u.Buffer(!1,this._optionsService,this._bufferService),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}),this.setupTabStops()}get alt(){return this._alt}get active(){return this._activeBuffer}get normal(){return this._normal}activateNormalBuffer(){this._activeBuffer!==this._normal&&(this._normal.x=this._alt.x,this._normal.y=this._alt.y,this._alt.clearAllMarkers(),this._alt.clear(),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}))}activateAltBuffer(M){this._activeBuffer!==this._alt&&(this._alt.fillViewportRows(M),this._alt.x=this._normal.x,this._alt.y=this._normal.y,this._activeBuffer=this._alt,this._onBufferActivate.fire({activeBuffer:this._alt,inactiveBuffer:this._normal}))}resize(M,x){this._normal.resize(M,x),this._alt.resize(M,x),this.setupTabStops(M)}setupTabStops(M){this._normal.setupTabStops(M),this._alt.setupTabStops(M)}}a.BufferSet=g},511:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.CellData=void 0;let d=s(482),p=s(643),u=s(3734);class g extends u.AttributeData{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new u.ExtendedAttrs,this.combinedData=""}static fromCharData(M){let x=new g;return x.setFromCharData(M),x}isCombined(){return 2097152&this.content}getWidth(){return this.content>>22}getChars(){return 2097152&this.content?this.combinedData:2097151&this.content?(0,d.stringFromCodePoint)(2097151&this.content):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content}setFromCharData(M){this.fg=M[p.CHAR_DATA_ATTR_INDEX],this.bg=0;let x=!1;if(M[p.CHAR_DATA_CHAR_INDEX].length>2)x=!0;else if(M[p.CHAR_DATA_CHAR_INDEX].length===2){let b=M[p.CHAR_DATA_CHAR_INDEX].charCodeAt(0);if(55296<=b&&b<=56319){let P=M[p.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=P&&P<=57343?this.content=1024*(b-55296)+P-56320+65536|M[p.CHAR_DATA_WIDTH_INDEX]<<22:x=!0}else x=!0}else this.content=M[p.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|M[p.CHAR_DATA_WIDTH_INDEX]<<22;x&&(this.combinedData=M[p.CHAR_DATA_CHAR_INDEX],this.content=2097152|M[p.CHAR_DATA_WIDTH_INDEX]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}}a.CellData=g},643:(i,a)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.WHITESPACE_CELL_CODE=a.WHITESPACE_CELL_WIDTH=a.WHITESPACE_CELL_CHAR=a.NULL_CELL_CODE=a.NULL_CELL_WIDTH=a.NULL_CELL_CHAR=a.CHAR_DATA_CODE_INDEX=a.CHAR_DATA_WIDTH_INDEX=a.CHAR_DATA_CHAR_INDEX=a.CHAR_DATA_ATTR_INDEX=a.DEFAULT_EXT=a.DEFAULT_ATTR=a.DEFAULT_COLOR=void 0,a.DEFAULT_COLOR=0,a.DEFAULT_ATTR=256|a.DEFAULT_COLOR<<9,a.DEFAULT_EXT=0,a.CHAR_DATA_ATTR_INDEX=0,a.CHAR_DATA_CHAR_INDEX=1,a.CHAR_DATA_WIDTH_INDEX=2,a.CHAR_DATA_CODE_INDEX=3,a.NULL_CELL_CHAR="",a.NULL_CELL_WIDTH=1,a.NULL_CELL_CODE=0,a.WHITESPACE_CELL_CHAR=" ",a.WHITESPACE_CELL_WIDTH=1,a.WHITESPACE_CELL_CODE=32},4863:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.Marker=void 0;let d=s(8460),p=s(844);class u{get id(){return this._id}constructor(C){this.line=C,this.isDisposed=!1,this._disposables=[],this._id=u._nextId++,this._onDispose=this.register(new d.EventEmitter),this.onDispose=this._onDispose.event}dispose(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire(),(0,p.disposeArray)(this._disposables),this._disposables.length=0)}register(C){return this._disposables.push(C),C}}a.Marker=u,u._nextId=1},7116:(i,a)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.DEFAULT_CHARSET=a.CHARSETS=void 0,a.CHARSETS={},a.DEFAULT_CHARSET=a.CHARSETS.B,a.CHARSETS[0]={"`":"\u25C6",a:"\u2592",b:"\u2409",c:"\u240C",d:"\u240D",e:"\u240A",f:"\xB0",g:"\xB1",h:"\u2424",i:"\u240B",j:"\u2518",k:"\u2510",l:"\u250C",m:"\u2514",n:"\u253C",o:"\u23BA",p:"\u23BB",q:"\u2500",r:"\u23BC",s:"\u23BD",t:"\u251C",u:"\u2524",v:"\u2534",w:"\u252C",x:"\u2502",y:"\u2264",z:"\u2265","{":"\u03C0","|":"\u2260","}":"\xA3","~":"\xB7"},a.CHARSETS.A={"#":"\xA3"},a.CHARSETS.B=void 0,a.CHARSETS[4]={"#":"\xA3","@":"\xBE","[":"ij","\\":"\xBD","]":"|","{":"\xA8","|":"f","}":"\xBC","~":"\xB4"},a.CHARSETS.C=a.CHARSETS[5]={"[":"\xC4","\\":"\xD6","]":"\xC5","^":"\xDC","`":"\xE9","{":"\xE4","|":"\xF6","}":"\xE5","~":"\xFC"},a.CHARSETS.R={"#":"\xA3","@":"\xE0","[":"\xB0","\\":"\xE7","]":"\xA7","{":"\xE9","|":"\xF9","}":"\xE8","~":"\xA8"},a.CHARSETS.Q={"@":"\xE0","[":"\xE2","\\":"\xE7","]":"\xEA","^":"\xEE","`":"\xF4","{":"\xE9","|":"\xF9","}":"\xE8","~":"\xFB"},a.CHARSETS.K={"@":"\xA7","[":"\xC4","\\":"\xD6","]":"\xDC","{":"\xE4","|":"\xF6","}":"\xFC","~":"\xDF"},a.CHARSETS.Y={"#":"\xA3","@":"\xA7","[":"\xB0","\\":"\xE7","]":"\xE9","`":"\xF9","{":"\xE0","|":"\xF2","}":"\xE8","~":"\xEC"},a.CHARSETS.E=a.CHARSETS[6]={"@":"\xC4","[":"\xC6","\\":"\xD8","]":"\xC5","^":"\xDC","`":"\xE4","{":"\xE6","|":"\xF8","}":"\xE5","~":"\xFC"},a.CHARSETS.Z={"#":"\xA3","@":"\xA7","[":"\xA1","\\":"\xD1","]":"\xBF","{":"\xB0","|":"\xF1","}":"\xE7"},a.CHARSETS.H=a.CHARSETS[7]={"@":"\xC9","[":"\xC4","\\":"\xD6","]":"\xC5","^":"\xDC","`":"\xE9","{":"\xE4","|":"\xF6","}":"\xE5","~":"\xFC"},a.CHARSETS["="]={"#":"\xF9","@":"\xE0","[":"\xE9","\\":"\xE7","]":"\xEA","^":"\xEE",_:"\xE8","`":"\xF4","{":"\xE4","|":"\xF6","}":"\xFC","~":"\xFB"}},2584:(i,a)=>{var s,d,p;Object.defineProperty(a,"__esModule",{value:!0}),a.C1_ESCAPED=a.C1=a.C0=void 0,(function(u){u.NUL="\0",u.SOH="",u.STX="",u.ETX="",u.EOT="",u.ENQ="",u.ACK="",u.BEL="\x07",u.BS="\b",u.HT=" ",u.LF=`
|
||
`,u.VT="\v",u.FF="\f",u.CR="\r",u.SO="",u.SI="",u.DLE="",u.DC1="",u.DC2="",u.DC3="",u.DC4="",u.NAK="",u.SYN="",u.ETB="",u.CAN="",u.EM="",u.SUB="",u.ESC="\x1B",u.FS="",u.GS="",u.RS="",u.US="",u.SP=" ",u.DEL="\x7F"})(s||(a.C0=s={})),(function(u){u.PAD="\x80",u.HOP="\x81",u.BPH="\x82",u.NBH="\x83",u.IND="\x84",u.NEL="\x85",u.SSA="\x86",u.ESA="\x87",u.HTS="\x88",u.HTJ="\x89",u.VTS="\x8A",u.PLD="\x8B",u.PLU="\x8C",u.RI="\x8D",u.SS2="\x8E",u.SS3="\x8F",u.DCS="\x90",u.PU1="\x91",u.PU2="\x92",u.STS="\x93",u.CCH="\x94",u.MW="\x95",u.SPA="\x96",u.EPA="\x97",u.SOS="\x98",u.SGCI="\x99",u.SCI="\x9A",u.CSI="\x9B",u.ST="\x9C",u.OSC="\x9D",u.PM="\x9E",u.APC="\x9F"})(d||(a.C1=d={})),(function(u){u.ST=`${s.ESC}\\`})(p||(a.C1_ESCAPED=p={}))},7399:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.evaluateKeyboardEvent=void 0;let d=s(2584),p={48:["0",")"],49:["1","!"],50:["2","@"],51:["3","#"],52:["4","$"],53:["5","%"],54:["6","^"],55:["7","&"],56:["8","*"],57:["9","("],186:[";",":"],187:["=","+"],188:[",","<"],189:["-","_"],190:[".",">"],191:["/","?"],192:["`","~"],219:["[","{"],220:["\\","|"],221:["]","}"],222:["'",'"']};a.evaluateKeyboardEvent=function(u,g,C,M){let x={type:0,cancel:!1,key:void 0},b=(u.shiftKey?1:0)|(u.altKey?2:0)|(u.ctrlKey?4:0)|(u.metaKey?8:0);switch(u.keyCode){case 0:u.key==="UIKeyInputUpArrow"?x.key=g?d.C0.ESC+"OA":d.C0.ESC+"[A":u.key==="UIKeyInputLeftArrow"?x.key=g?d.C0.ESC+"OD":d.C0.ESC+"[D":u.key==="UIKeyInputRightArrow"?x.key=g?d.C0.ESC+"OC":d.C0.ESC+"[C":u.key==="UIKeyInputDownArrow"&&(x.key=g?d.C0.ESC+"OB":d.C0.ESC+"[B");break;case 8:x.key=u.ctrlKey?"\b":d.C0.DEL,u.altKey&&(x.key=d.C0.ESC+x.key);break;case 9:if(u.shiftKey){x.key=d.C0.ESC+"[Z";break}x.key=d.C0.HT,x.cancel=!0;break;case 13:x.key=u.altKey?d.C0.ESC+d.C0.CR:d.C0.CR,x.cancel=!0;break;case 27:x.key=d.C0.ESC,u.altKey&&(x.key=d.C0.ESC+d.C0.ESC),x.cancel=!0;break;case 37:if(u.metaKey)break;b?(x.key=d.C0.ESC+"[1;"+(b+1)+"D",x.key===d.C0.ESC+"[1;3D"&&(x.key=d.C0.ESC+(C?"b":"[1;5D"))):x.key=g?d.C0.ESC+"OD":d.C0.ESC+"[D";break;case 39:if(u.metaKey)break;b?(x.key=d.C0.ESC+"[1;"+(b+1)+"C",x.key===d.C0.ESC+"[1;3C"&&(x.key=d.C0.ESC+(C?"f":"[1;5C"))):x.key=g?d.C0.ESC+"OC":d.C0.ESC+"[C";break;case 38:if(u.metaKey)break;b?(x.key=d.C0.ESC+"[1;"+(b+1)+"A",C||x.key!==d.C0.ESC+"[1;3A"||(x.key=d.C0.ESC+"[1;5A")):x.key=g?d.C0.ESC+"OA":d.C0.ESC+"[A";break;case 40:if(u.metaKey)break;b?(x.key=d.C0.ESC+"[1;"+(b+1)+"B",C||x.key!==d.C0.ESC+"[1;3B"||(x.key=d.C0.ESC+"[1;5B")):x.key=g?d.C0.ESC+"OB":d.C0.ESC+"[B";break;case 45:u.shiftKey||u.ctrlKey||(x.key=d.C0.ESC+"[2~");break;case 46:x.key=b?d.C0.ESC+"[3;"+(b+1)+"~":d.C0.ESC+"[3~";break;case 36:x.key=b?d.C0.ESC+"[1;"+(b+1)+"H":g?d.C0.ESC+"OH":d.C0.ESC+"[H";break;case 35:x.key=b?d.C0.ESC+"[1;"+(b+1)+"F":g?d.C0.ESC+"OF":d.C0.ESC+"[F";break;case 33:u.shiftKey?x.type=2:u.ctrlKey?x.key=d.C0.ESC+"[5;"+(b+1)+"~":x.key=d.C0.ESC+"[5~";break;case 34:u.shiftKey?x.type=3:u.ctrlKey?x.key=d.C0.ESC+"[6;"+(b+1)+"~":x.key=d.C0.ESC+"[6~";break;case 112:x.key=b?d.C0.ESC+"[1;"+(b+1)+"P":d.C0.ESC+"OP";break;case 113:x.key=b?d.C0.ESC+"[1;"+(b+1)+"Q":d.C0.ESC+"OQ";break;case 114:x.key=b?d.C0.ESC+"[1;"+(b+1)+"R":d.C0.ESC+"OR";break;case 115:x.key=b?d.C0.ESC+"[1;"+(b+1)+"S":d.C0.ESC+"OS";break;case 116:x.key=b?d.C0.ESC+"[15;"+(b+1)+"~":d.C0.ESC+"[15~";break;case 117:x.key=b?d.C0.ESC+"[17;"+(b+1)+"~":d.C0.ESC+"[17~";break;case 118:x.key=b?d.C0.ESC+"[18;"+(b+1)+"~":d.C0.ESC+"[18~";break;case 119:x.key=b?d.C0.ESC+"[19;"+(b+1)+"~":d.C0.ESC+"[19~";break;case 120:x.key=b?d.C0.ESC+"[20;"+(b+1)+"~":d.C0.ESC+"[20~";break;case 121:x.key=b?d.C0.ESC+"[21;"+(b+1)+"~":d.C0.ESC+"[21~";break;case 122:x.key=b?d.C0.ESC+"[23;"+(b+1)+"~":d.C0.ESC+"[23~";break;case 123:x.key=b?d.C0.ESC+"[24;"+(b+1)+"~":d.C0.ESC+"[24~";break;default:if(!u.ctrlKey||u.shiftKey||u.altKey||u.metaKey)if(C&&!M||!u.altKey||u.metaKey)!C||u.altKey||u.ctrlKey||u.shiftKey||!u.metaKey?u.key&&!u.ctrlKey&&!u.altKey&&!u.metaKey&&u.keyCode>=48&&u.key.length===1?x.key=u.key:u.key&&u.ctrlKey&&(u.key==="_"&&(x.key=d.C0.US),u.key==="@"&&(x.key=d.C0.NUL)):u.keyCode===65&&(x.type=1);else{let P=p[u.keyCode],k=P?.[u.shiftKey?1:0];if(k)x.key=d.C0.ESC+k;else if(u.keyCode>=65&&u.keyCode<=90){let S=u.ctrlKey?u.keyCode-64:u.keyCode+32,O=String.fromCharCode(S);u.shiftKey&&(O=O.toUpperCase()),x.key=d.C0.ESC+O}else if(u.keyCode===32)x.key=d.C0.ESC+(u.ctrlKey?d.C0.NUL:" ");else if(u.key==="Dead"&&u.code.startsWith("Key")){let S=u.code.slice(3,4);u.shiftKey||(S=S.toLowerCase()),x.key=d.C0.ESC+S,x.cancel=!0}}else u.keyCode>=65&&u.keyCode<=90?x.key=String.fromCharCode(u.keyCode-64):u.keyCode===32?x.key=d.C0.NUL:u.keyCode>=51&&u.keyCode<=55?x.key=String.fromCharCode(u.keyCode-51+27):u.keyCode===56?x.key=d.C0.DEL:u.keyCode===219?x.key=d.C0.ESC:u.keyCode===220?x.key=d.C0.FS:u.keyCode===221&&(x.key=d.C0.GS)}return x}},482:(i,a)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.Utf8ToUtf32=a.StringToUtf32=a.utf32ToString=a.stringFromCodePoint=void 0,a.stringFromCodePoint=function(s){return s>65535?(s-=65536,String.fromCharCode(55296+(s>>10))+String.fromCharCode(s%1024+56320)):String.fromCharCode(s)},a.utf32ToString=function(s,d=0,p=s.length){let u="";for(let g=d;g<p;++g){let C=s[g];C>65535?(C-=65536,u+=String.fromCharCode(55296+(C>>10))+String.fromCharCode(C%1024+56320)):u+=String.fromCharCode(C)}return u},a.StringToUtf32=class{constructor(){this._interim=0}clear(){this._interim=0}decode(s,d){let p=s.length;if(!p)return 0;let u=0,g=0;if(this._interim){let C=s.charCodeAt(g++);56320<=C&&C<=57343?d[u++]=1024*(this._interim-55296)+C-56320+65536:(d[u++]=this._interim,d[u++]=C),this._interim=0}for(let C=g;C<p;++C){let M=s.charCodeAt(C);if(55296<=M&&M<=56319){if(++C>=p)return this._interim=M,u;let x=s.charCodeAt(C);56320<=x&&x<=57343?d[u++]=1024*(M-55296)+x-56320+65536:(d[u++]=M,d[u++]=x)}else M!==65279&&(d[u++]=M)}return u}},a.Utf8ToUtf32=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(s,d){let p=s.length;if(!p)return 0;let u,g,C,M,x=0,b=0,P=0;if(this.interim[0]){let O=!1,A=this.interim[0];A&=(224&A)==192?31:(240&A)==224?15:7;let D,F=0;for(;(D=63&this.interim[++F])&&F<4;)A<<=6,A|=D;let I=(224&this.interim[0])==192?2:(240&this.interim[0])==224?3:4,B=I-F;for(;P<B;){if(P>=p)return 0;if(D=s[P++],(192&D)!=128){P--,O=!0;break}this.interim[F++]=D,A<<=6,A|=63&D}O||(I===2?A<128?P--:d[x++]=A:I===3?A<2048||A>=55296&&A<=57343||A===65279||(d[x++]=A):A<65536||A>1114111||(d[x++]=A)),this.interim.fill(0)}let k=p-4,S=P;for(;S<p;){for(;!(!(S<k)||128&(u=s[S])||128&(g=s[S+1])||128&(C=s[S+2])||128&(M=s[S+3]));)d[x++]=u,d[x++]=g,d[x++]=C,d[x++]=M,S+=4;if(u=s[S++],u<128)d[x++]=u;else if((224&u)==192){if(S>=p)return this.interim[0]=u,x;if(g=s[S++],(192&g)!=128){S--;continue}if(b=(31&u)<<6|63&g,b<128){S--;continue}d[x++]=b}else if((240&u)==224){if(S>=p)return this.interim[0]=u,x;if(g=s[S++],(192&g)!=128){S--;continue}if(S>=p)return this.interim[0]=u,this.interim[1]=g,x;if(C=s[S++],(192&C)!=128){S--;continue}if(b=(15&u)<<12|(63&g)<<6|63&C,b<2048||b>=55296&&b<=57343||b===65279)continue;d[x++]=b}else if((248&u)==240){if(S>=p)return this.interim[0]=u,x;if(g=s[S++],(192&g)!=128){S--;continue}if(S>=p)return this.interim[0]=u,this.interim[1]=g,x;if(C=s[S++],(192&C)!=128){S--;continue}if(S>=p)return this.interim[0]=u,this.interim[1]=g,this.interim[2]=C,x;if(M=s[S++],(192&M)!=128){S--;continue}if(b=(7&u)<<18|(63&g)<<12|(63&C)<<6|63&M,b<65536||b>1114111)continue;d[x++]=b}}return x}}},225:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.UnicodeV6=void 0;let d=s(1480),p=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531]],u=[[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]],g;a.UnicodeV6=class{constructor(){if(this.version="6",!g){g=new Uint8Array(65536),g.fill(1),g[0]=0,g.fill(0,1,32),g.fill(0,127,160),g.fill(2,4352,4448),g[9001]=2,g[9002]=2,g.fill(2,11904,42192),g[12351]=1,g.fill(2,44032,55204),g.fill(2,63744,64256),g.fill(2,65040,65050),g.fill(2,65072,65136),g.fill(2,65280,65377),g.fill(2,65504,65511);for(let C=0;C<p.length;++C)g.fill(0,p[C][0],p[C][1]+1)}}wcwidth(C){return C<32?0:C<127?1:C<65536?g[C]:(function(M,x){let b,P=0,k=x.length-1;if(M<x[0][0]||M>x[k][1])return!1;for(;k>=P;)if(b=P+k>>1,M>x[b][1])P=b+1;else{if(!(M<x[b][0]))return!0;k=b-1}return!1})(C,u)?0:C>=131072&&C<=196605||C>=196608&&C<=262141?2:1}charProperties(C,M){let x=this.wcwidth(C),b=x===0&&M!==0;if(b){let P=d.UnicodeService.extractWidth(M);P===0?b=!1:P>x&&(x=P)}return d.UnicodeService.createPropertyValue(0,x,b)}}},5981:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.WriteBuffer=void 0;let d=s(8460),p=s(844);class u extends p.Disposable{constructor(C){super(),this._action=C,this._writeBuffer=[],this._callbacks=[],this._pendingData=0,this._bufferOffset=0,this._isSyncWriting=!1,this._syncCalls=0,this._didUserInput=!1,this._onWriteParsed=this.register(new d.EventEmitter),this.onWriteParsed=this._onWriteParsed.event}handleUserInput(){this._didUserInput=!0}writeSync(C,M){if(M!==void 0&&this._syncCalls>M)return void(this._syncCalls=0);if(this._pendingData+=C.length,this._writeBuffer.push(C),this._callbacks.push(void 0),this._syncCalls++,this._isSyncWriting)return;let x;for(this._isSyncWriting=!0;x=this._writeBuffer.shift();){this._action(x);let b=this._callbacks.shift();b&&b()}this._pendingData=0,this._bufferOffset=2147483647,this._isSyncWriting=!1,this._syncCalls=0}write(C,M){if(this._pendingData>5e7)throw new Error("write data discarded, use flow control to avoid losing data");if(!this._writeBuffer.length){if(this._bufferOffset=0,this._didUserInput)return this._didUserInput=!1,this._pendingData+=C.length,this._writeBuffer.push(C),this._callbacks.push(M),void this._innerWrite();setTimeout(()=>this._innerWrite())}this._pendingData+=C.length,this._writeBuffer.push(C),this._callbacks.push(M)}_innerWrite(C=0,M=!0){let x=C||Date.now();for(;this._writeBuffer.length>this._bufferOffset;){let b=this._writeBuffer[this._bufferOffset],P=this._action(b,M);if(P){let S=O=>Date.now()-x>=12?setTimeout(()=>this._innerWrite(0,O)):this._innerWrite(x,O);return void P.catch(O=>(queueMicrotask(()=>{throw O}),Promise.resolve(!1))).then(S)}let k=this._callbacks[this._bufferOffset];if(k&&k(),this._bufferOffset++,this._pendingData-=b.length,Date.now()-x>=12)break}this._writeBuffer.length>this._bufferOffset?(this._bufferOffset>50&&(this._writeBuffer=this._writeBuffer.slice(this._bufferOffset),this._callbacks=this._callbacks.slice(this._bufferOffset),this._bufferOffset=0),setTimeout(()=>this._innerWrite())):(this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0),this._onWriteParsed.fire()}}a.WriteBuffer=u},5941:(i,a)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.toRgbString=a.parseColor=void 0;let s=/^([\da-f])\/([\da-f])\/([\da-f])$|^([\da-f]{2})\/([\da-f]{2})\/([\da-f]{2})$|^([\da-f]{3})\/([\da-f]{3})\/([\da-f]{3})$|^([\da-f]{4})\/([\da-f]{4})\/([\da-f]{4})$/,d=/^[\da-f]+$/;function p(u,g){let C=u.toString(16),M=C.length<2?"0"+C:C;switch(g){case 4:return C[0];case 8:return M;case 12:return(M+M).slice(0,3);default:return M+M}}a.parseColor=function(u){if(!u)return;let g=u.toLowerCase();if(g.indexOf("rgb:")===0){g=g.slice(4);let C=s.exec(g);if(C){let M=C[1]?15:C[4]?255:C[7]?4095:65535;return[Math.round(parseInt(C[1]||C[4]||C[7]||C[10],16)/M*255),Math.round(parseInt(C[2]||C[5]||C[8]||C[11],16)/M*255),Math.round(parseInt(C[3]||C[6]||C[9]||C[12],16)/M*255)]}}else if(g.indexOf("#")===0&&(g=g.slice(1),d.exec(g)&&[3,6,9,12].includes(g.length))){let C=g.length/3,M=[0,0,0];for(let x=0;x<3;++x){let b=parseInt(g.slice(C*x,C*x+C),16);M[x]=C===1?b<<4:C===2?b:C===3?b>>4:b>>8}return M}},a.toRgbString=function(u,g=16){let[C,M,x]=u;return`rgb:${p(C,g)}/${p(M,g)}/${p(x,g)}`}},5770:(i,a)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.PAYLOAD_LIMIT=void 0,a.PAYLOAD_LIMIT=1e7},6351:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.DcsHandler=a.DcsParser=void 0;let d=s(482),p=s(8742),u=s(5770),g=[];a.DcsParser=class{constructor(){this._handlers=Object.create(null),this._active=g,this._ident=0,this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=g}registerHandler(M,x){this._handlers[M]===void 0&&(this._handlers[M]=[]);let b=this._handlers[M];return b.push(x),{dispose:()=>{let P=b.indexOf(x);P!==-1&&b.splice(P,1)}}}clearHandler(M){this._handlers[M]&&delete this._handlers[M]}setHandlerFallback(M){this._handlerFb=M}reset(){if(this._active.length)for(let M=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;M>=0;--M)this._active[M].unhook(!1);this._stack.paused=!1,this._active=g,this._ident=0}hook(M,x){if(this.reset(),this._ident=M,this._active=this._handlers[M]||g,this._active.length)for(let b=this._active.length-1;b>=0;b--)this._active[b].hook(x);else this._handlerFb(this._ident,"HOOK",x)}put(M,x,b){if(this._active.length)for(let P=this._active.length-1;P>=0;P--)this._active[P].put(M,x,b);else this._handlerFb(this._ident,"PUT",(0,d.utf32ToString)(M,x,b))}unhook(M,x=!0){if(this._active.length){let b=!1,P=this._active.length-1,k=!1;if(this._stack.paused&&(P=this._stack.loopPosition-1,b=x,k=this._stack.fallThrough,this._stack.paused=!1),!k&&b===!1){for(;P>=0&&(b=this._active[P].unhook(M),b!==!0);P--)if(b instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=P,this._stack.fallThrough=!1,b;P--}for(;P>=0;P--)if(b=this._active[P].unhook(!1),b instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=P,this._stack.fallThrough=!0,b}else this._handlerFb(this._ident,"UNHOOK",M);this._active=g,this._ident=0}};let C=new p.Params;C.addParam(0),a.DcsHandler=class{constructor(M){this._handler=M,this._data="",this._params=C,this._hitLimit=!1}hook(M){this._params=M.length>1||M.params[0]?M.clone():C,this._data="",this._hitLimit=!1}put(M,x,b){this._hitLimit||(this._data+=(0,d.utf32ToString)(M,x,b),this._data.length>u.PAYLOAD_LIMIT&&(this._data="",this._hitLimit=!0))}unhook(M){let x=!1;if(this._hitLimit)x=!1;else if(M&&(x=this._handler(this._data,this._params),x instanceof Promise))return x.then(b=>(this._params=C,this._data="",this._hitLimit=!1,b));return this._params=C,this._data="",this._hitLimit=!1,x}}},2015:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.EscapeSequenceParser=a.VT500_TRANSITION_TABLE=a.TransitionTable=void 0;let d=s(844),p=s(8742),u=s(6242),g=s(6351);class C{constructor(P){this.table=new Uint8Array(P)}setDefault(P,k){this.table.fill(P<<4|k)}add(P,k,S,O){this.table[k<<8|P]=S<<4|O}addMany(P,k,S,O){for(let A=0;A<P.length;A++)this.table[k<<8|P[A]]=S<<4|O}}a.TransitionTable=C;let M=160;a.VT500_TRANSITION_TABLE=(function(){let b=new C(4095),P=Array.apply(null,Array(256)).map((F,I)=>I),k=(F,I)=>P.slice(F,I),S=k(32,127),O=k(0,24);O.push(25),O.push.apply(O,k(28,32));let A=k(0,14),D;for(D in b.setDefault(1,0),b.addMany(S,0,2,0),A)b.addMany([24,26,153,154],D,3,0),b.addMany(k(128,144),D,3,0),b.addMany(k(144,152),D,3,0),b.add(156,D,0,0),b.add(27,D,11,1),b.add(157,D,4,8),b.addMany([152,158,159],D,0,7),b.add(155,D,11,3),b.add(144,D,11,9);return b.addMany(O,0,3,0),b.addMany(O,1,3,1),b.add(127,1,0,1),b.addMany(O,8,0,8),b.addMany(O,3,3,3),b.add(127,3,0,3),b.addMany(O,4,3,4),b.add(127,4,0,4),b.addMany(O,6,3,6),b.addMany(O,5,3,5),b.add(127,5,0,5),b.addMany(O,2,3,2),b.add(127,2,0,2),b.add(93,1,4,8),b.addMany(S,8,5,8),b.add(127,8,5,8),b.addMany([156,27,24,26,7],8,6,0),b.addMany(k(28,32),8,0,8),b.addMany([88,94,95],1,0,7),b.addMany(S,7,0,7),b.addMany(O,7,0,7),b.add(156,7,0,0),b.add(127,7,0,7),b.add(91,1,11,3),b.addMany(k(64,127),3,7,0),b.addMany(k(48,60),3,8,4),b.addMany([60,61,62,63],3,9,4),b.addMany(k(48,60),4,8,4),b.addMany(k(64,127),4,7,0),b.addMany([60,61,62,63],4,0,6),b.addMany(k(32,64),6,0,6),b.add(127,6,0,6),b.addMany(k(64,127),6,0,0),b.addMany(k(32,48),3,9,5),b.addMany(k(32,48),5,9,5),b.addMany(k(48,64),5,0,6),b.addMany(k(64,127),5,7,0),b.addMany(k(32,48),4,9,5),b.addMany(k(32,48),1,9,2),b.addMany(k(32,48),2,9,2),b.addMany(k(48,127),2,10,0),b.addMany(k(48,80),1,10,0),b.addMany(k(81,88),1,10,0),b.addMany([89,90,92],1,10,0),b.addMany(k(96,127),1,10,0),b.add(80,1,11,9),b.addMany(O,9,0,9),b.add(127,9,0,9),b.addMany(k(28,32),9,0,9),b.addMany(k(32,48),9,9,12),b.addMany(k(48,60),9,8,10),b.addMany([60,61,62,63],9,9,10),b.addMany(O,11,0,11),b.addMany(k(32,128),11,0,11),b.addMany(k(28,32),11,0,11),b.addMany(O,10,0,10),b.add(127,10,0,10),b.addMany(k(28,32),10,0,10),b.addMany(k(48,60),10,8,10),b.addMany([60,61,62,63],10,0,11),b.addMany(k(32,48),10,9,12),b.addMany(O,12,0,12),b.add(127,12,0,12),b.addMany(k(28,32),12,0,12),b.addMany(k(32,48),12,9,12),b.addMany(k(48,64),12,0,11),b.addMany(k(64,127),12,12,13),b.addMany(k(64,127),10,12,13),b.addMany(k(64,127),9,12,13),b.addMany(O,13,13,13),b.addMany(S,13,13,13),b.add(127,13,0,13),b.addMany([27,156,24,26],13,14,0),b.add(M,0,2,0),b.add(M,8,5,8),b.add(M,6,0,6),b.add(M,11,0,11),b.add(M,13,13,13),b})();class x extends d.Disposable{constructor(P=a.VT500_TRANSITION_TABLE){super(),this._transitions=P,this._parseStack={state:0,handlers:[],handlerPos:0,transition:0,chunkPos:0},this.initialState=0,this.currentState=this.initialState,this._params=new p.Params,this._params.addParam(0),this._collect=0,this.precedingJoinState=0,this._printHandlerFb=(k,S,O)=>{},this._executeHandlerFb=k=>{},this._csiHandlerFb=(k,S)=>{},this._escHandlerFb=k=>{},this._errorHandlerFb=k=>k,this._printHandler=this._printHandlerFb,this._executeHandlers=Object.create(null),this._csiHandlers=Object.create(null),this._escHandlers=Object.create(null),this.register((0,d.toDisposable)(()=>{this._csiHandlers=Object.create(null),this._executeHandlers=Object.create(null),this._escHandlers=Object.create(null)})),this._oscParser=this.register(new u.OscParser),this._dcsParser=this.register(new g.DcsParser),this._errorHandler=this._errorHandlerFb,this.registerEscHandler({final:"\\"},()=>!0)}_identifier(P,k=[64,126]){let S=0;if(P.prefix){if(P.prefix.length>1)throw new Error("only one byte as prefix supported");if(S=P.prefix.charCodeAt(0),S&&60>S||S>63)throw new Error("prefix must be in range 0x3c .. 0x3f")}if(P.intermediates){if(P.intermediates.length>2)throw new Error("only two bytes as intermediates are supported");for(let A=0;A<P.intermediates.length;++A){let D=P.intermediates.charCodeAt(A);if(32>D||D>47)throw new Error("intermediate must be in range 0x20 .. 0x2f");S<<=8,S|=D}}if(P.final.length!==1)throw new Error("final must be a single byte");let O=P.final.charCodeAt(0);if(k[0]>O||O>k[1])throw new Error(`final must be in range ${k[0]} .. ${k[1]}`);return S<<=8,S|=O,S}identToString(P){let k=[];for(;P;)k.push(String.fromCharCode(255&P)),P>>=8;return k.reverse().join("")}setPrintHandler(P){this._printHandler=P}clearPrintHandler(){this._printHandler=this._printHandlerFb}registerEscHandler(P,k){let S=this._identifier(P,[48,126]);this._escHandlers[S]===void 0&&(this._escHandlers[S]=[]);let O=this._escHandlers[S];return O.push(k),{dispose:()=>{let A=O.indexOf(k);A!==-1&&O.splice(A,1)}}}clearEscHandler(P){this._escHandlers[this._identifier(P,[48,126])]&&delete this._escHandlers[this._identifier(P,[48,126])]}setEscHandlerFallback(P){this._escHandlerFb=P}setExecuteHandler(P,k){this._executeHandlers[P.charCodeAt(0)]=k}clearExecuteHandler(P){this._executeHandlers[P.charCodeAt(0)]&&delete this._executeHandlers[P.charCodeAt(0)]}setExecuteHandlerFallback(P){this._executeHandlerFb=P}registerCsiHandler(P,k){let S=this._identifier(P);this._csiHandlers[S]===void 0&&(this._csiHandlers[S]=[]);let O=this._csiHandlers[S];return O.push(k),{dispose:()=>{let A=O.indexOf(k);A!==-1&&O.splice(A,1)}}}clearCsiHandler(P){this._csiHandlers[this._identifier(P)]&&delete this._csiHandlers[this._identifier(P)]}setCsiHandlerFallback(P){this._csiHandlerFb=P}registerDcsHandler(P,k){return this._dcsParser.registerHandler(this._identifier(P),k)}clearDcsHandler(P){this._dcsParser.clearHandler(this._identifier(P))}setDcsHandlerFallback(P){this._dcsParser.setHandlerFallback(P)}registerOscHandler(P,k){return this._oscParser.registerHandler(P,k)}clearOscHandler(P){this._oscParser.clearHandler(P)}setOscHandlerFallback(P){this._oscParser.setHandlerFallback(P)}setErrorHandler(P){this._errorHandler=P}clearErrorHandler(){this._errorHandler=this._errorHandlerFb}reset(){this.currentState=this.initialState,this._oscParser.reset(),this._dcsParser.reset(),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingJoinState=0,this._parseStack.state!==0&&(this._parseStack.state=2,this._parseStack.handlers=[])}_preserveStack(P,k,S,O,A){this._parseStack.state=P,this._parseStack.handlers=k,this._parseStack.handlerPos=S,this._parseStack.transition=O,this._parseStack.chunkPos=A}parse(P,k,S){let O,A=0,D=0,F=0;if(this._parseStack.state)if(this._parseStack.state===2)this._parseStack.state=0,F=this._parseStack.chunkPos+1;else{if(S===void 0||this._parseStack.state===1)throw this._parseStack.state=1,new Error("improper continuation due to previous async handler, giving up parsing");let I=this._parseStack.handlers,B=this._parseStack.handlerPos-1;switch(this._parseStack.state){case 3:if(S===!1&&B>-1){for(;B>=0&&(O=I[B](this._params),O!==!0);B--)if(O instanceof Promise)return this._parseStack.handlerPos=B,O}this._parseStack.handlers=[];break;case 4:if(S===!1&&B>-1){for(;B>=0&&(O=I[B](),O!==!0);B--)if(O instanceof Promise)return this._parseStack.handlerPos=B,O}this._parseStack.handlers=[];break;case 6:if(A=P[this._parseStack.chunkPos],O=this._dcsParser.unhook(A!==24&&A!==26,S),O)return O;A===27&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0;break;case 5:if(A=P[this._parseStack.chunkPos],O=this._oscParser.end(A!==24&&A!==26,S),O)return O;A===27&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0}this._parseStack.state=0,F=this._parseStack.chunkPos+1,this.precedingJoinState=0,this.currentState=15&this._parseStack.transition}for(let I=F;I<k;++I){switch(A=P[I],D=this._transitions.table[this.currentState<<8|(A<160?A:M)],D>>4){case 2:for(let G=I+1;;++G){if(G>=k||(A=P[G])<32||A>126&&A<M){this._printHandler(P,I,G),I=G-1;break}if(++G>=k||(A=P[G])<32||A>126&&A<M){this._printHandler(P,I,G),I=G-1;break}if(++G>=k||(A=P[G])<32||A>126&&A<M){this._printHandler(P,I,G),I=G-1;break}if(++G>=k||(A=P[G])<32||A>126&&A<M){this._printHandler(P,I,G),I=G-1;break}}break;case 3:this._executeHandlers[A]?this._executeHandlers[A]():this._executeHandlerFb(A),this.precedingJoinState=0;break;case 0:break;case 1:if(this._errorHandler({position:I,code:A,currentState:this.currentState,collect:this._collect,params:this._params,abort:!1}).abort)return;break;case 7:let B=this._csiHandlers[this._collect<<8|A],le=B?B.length-1:-1;for(;le>=0&&(O=B[le](this._params),O!==!0);le--)if(O instanceof Promise)return this._preserveStack(3,B,le,D,I),O;le<0&&this._csiHandlerFb(this._collect<<8|A,this._params),this.precedingJoinState=0;break;case 8:do switch(A){case 59:this._params.addParam(0);break;case 58:this._params.addSubParam(-1);break;default:this._params.addDigit(A-48)}while(++I<k&&(A=P[I])>47&&A<60);I--;break;case 9:this._collect<<=8,this._collect|=A;break;case 10:let ae=this._escHandlers[this._collect<<8|A],W=ae?ae.length-1:-1;for(;W>=0&&(O=ae[W](),O!==!0);W--)if(O instanceof Promise)return this._preserveStack(4,ae,W,D,I),O;W<0&&this._escHandlerFb(this._collect<<8|A),this.precedingJoinState=0;break;case 11:this._params.reset(),this._params.addParam(0),this._collect=0;break;case 12:this._dcsParser.hook(this._collect<<8|A,this._params);break;case 13:for(let G=I+1;;++G)if(G>=k||(A=P[G])===24||A===26||A===27||A>127&&A<M){this._dcsParser.put(P,I,G),I=G-1;break}break;case 14:if(O=this._dcsParser.unhook(A!==24&&A!==26),O)return this._preserveStack(6,[],0,D,I),O;A===27&&(D|=1),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingJoinState=0;break;case 4:this._oscParser.start();break;case 5:for(let G=I+1;;G++)if(G>=k||(A=P[G])<32||A>127&&A<M){this._oscParser.put(P,I,G),I=G-1;break}break;case 6:if(O=this._oscParser.end(A!==24&&A!==26),O)return this._preserveStack(5,[],0,D,I),O;A===27&&(D|=1),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingJoinState=0}this.currentState=15&D}}}a.EscapeSequenceParser=x},6242:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.OscHandler=a.OscParser=void 0;let d=s(5770),p=s(482),u=[];a.OscParser=class{constructor(){this._state=0,this._active=u,this._id=-1,this._handlers=Object.create(null),this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}registerHandler(g,C){this._handlers[g]===void 0&&(this._handlers[g]=[]);let M=this._handlers[g];return M.push(C),{dispose:()=>{let x=M.indexOf(C);x!==-1&&M.splice(x,1)}}}clearHandler(g){this._handlers[g]&&delete this._handlers[g]}setHandlerFallback(g){this._handlerFb=g}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=u}reset(){if(this._state===2)for(let g=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;g>=0;--g)this._active[g].end(!1);this._stack.paused=!1,this._active=u,this._id=-1,this._state=0}_start(){if(this._active=this._handlers[this._id]||u,this._active.length)for(let g=this._active.length-1;g>=0;g--)this._active[g].start();else this._handlerFb(this._id,"START")}_put(g,C,M){if(this._active.length)for(let x=this._active.length-1;x>=0;x--)this._active[x].put(g,C,M);else this._handlerFb(this._id,"PUT",(0,p.utf32ToString)(g,C,M))}start(){this.reset(),this._state=1}put(g,C,M){if(this._state!==3){if(this._state===1)for(;C<M;){let x=g[C++];if(x===59){this._state=2,this._start();break}if(x<48||57<x)return void(this._state=3);this._id===-1&&(this._id=0),this._id=10*this._id+x-48}this._state===2&&M-C>0&&this._put(g,C,M)}}end(g,C=!0){if(this._state!==0){if(this._state!==3)if(this._state===1&&this._start(),this._active.length){let M=!1,x=this._active.length-1,b=!1;if(this._stack.paused&&(x=this._stack.loopPosition-1,M=C,b=this._stack.fallThrough,this._stack.paused=!1),!b&&M===!1){for(;x>=0&&(M=this._active[x].end(g),M!==!0);x--)if(M instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=x,this._stack.fallThrough=!1,M;x--}for(;x>=0;x--)if(M=this._active[x].end(!1),M instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=x,this._stack.fallThrough=!0,M}else this._handlerFb(this._id,"END",g);this._active=u,this._id=-1,this._state=0}}},a.OscHandler=class{constructor(g){this._handler=g,this._data="",this._hitLimit=!1}start(){this._data="",this._hitLimit=!1}put(g,C,M){this._hitLimit||(this._data+=(0,p.utf32ToString)(g,C,M),this._data.length>d.PAYLOAD_LIMIT&&(this._data="",this._hitLimit=!0))}end(g){let C=!1;if(this._hitLimit)C=!1;else if(g&&(C=this._handler(this._data),C instanceof Promise))return C.then(M=>(this._data="",this._hitLimit=!1,M));return this._data="",this._hitLimit=!1,C}}},8742:(i,a)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.Params=void 0;let s=2147483647;class d{static fromArray(u){let g=new d;if(!u.length)return g;for(let C=Array.isArray(u[0])?1:0;C<u.length;++C){let M=u[C];if(Array.isArray(M))for(let x=0;x<M.length;++x)g.addSubParam(M[x]);else g.addParam(M)}return g}constructor(u=32,g=32){if(this.maxLength=u,this.maxSubParamsLength=g,g>256)throw new Error("maxSubParamsLength must not be greater than 256");this.params=new Int32Array(u),this.length=0,this._subParams=new Int32Array(g),this._subParamsLength=0,this._subParamsIdx=new Uint16Array(u),this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}clone(){let u=new d(this.maxLength,this.maxSubParamsLength);return u.params.set(this.params),u.length=this.length,u._subParams.set(this._subParams),u._subParamsLength=this._subParamsLength,u._subParamsIdx.set(this._subParamsIdx),u._rejectDigits=this._rejectDigits,u._rejectSubDigits=this._rejectSubDigits,u._digitIsSub=this._digitIsSub,u}toArray(){let u=[];for(let g=0;g<this.length;++g){u.push(this.params[g]);let C=this._subParamsIdx[g]>>8,M=255&this._subParamsIdx[g];M-C>0&&u.push(Array.prototype.slice.call(this._subParams,C,M))}return u}reset(){this.length=0,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}addParam(u){if(this._digitIsSub=!1,this.length>=this.maxLength)this._rejectDigits=!0;else{if(u<-1)throw new Error("values lesser than -1 are not allowed");this._subParamsIdx[this.length]=this._subParamsLength<<8|this._subParamsLength,this.params[this.length++]=u>s?s:u}}addSubParam(u){if(this._digitIsSub=!0,this.length)if(this._rejectDigits||this._subParamsLength>=this.maxSubParamsLength)this._rejectSubDigits=!0;else{if(u<-1)throw new Error("values lesser than -1 are not allowed");this._subParams[this._subParamsLength++]=u>s?s:u,this._subParamsIdx[this.length-1]++}}hasSubParams(u){return(255&this._subParamsIdx[u])-(this._subParamsIdx[u]>>8)>0}getSubParams(u){let g=this._subParamsIdx[u]>>8,C=255&this._subParamsIdx[u];return C-g>0?this._subParams.subarray(g,C):null}getSubParamsAll(){let u={};for(let g=0;g<this.length;++g){let C=this._subParamsIdx[g]>>8,M=255&this._subParamsIdx[g];M-C>0&&(u[g]=this._subParams.slice(C,M))}return u}addDigit(u){let g;if(this._rejectDigits||!(g=this._digitIsSub?this._subParamsLength:this.length)||this._digitIsSub&&this._rejectSubDigits)return;let C=this._digitIsSub?this._subParams:this.params,M=C[g-1];C[g-1]=~M?Math.min(10*M+u,s):u}}a.Params=d},5741:(i,a)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.AddonManager=void 0,a.AddonManager=class{constructor(){this._addons=[]}dispose(){for(let s=this._addons.length-1;s>=0;s--)this._addons[s].instance.dispose()}loadAddon(s,d){let p={instance:d,dispose:d.dispose,isDisposed:!1};this._addons.push(p),d.dispose=()=>this._wrappedAddonDispose(p),d.activate(s)}_wrappedAddonDispose(s){if(s.isDisposed)return;let d=-1;for(let p=0;p<this._addons.length;p++)if(this._addons[p]===s){d=p;break}if(d===-1)throw new Error("Could not dispose an addon that has not been loaded");s.isDisposed=!0,s.dispose.apply(s.instance),this._addons.splice(d,1)}}},8771:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.BufferApiView=void 0;let d=s(3785),p=s(511);a.BufferApiView=class{constructor(u,g){this._buffer=u,this.type=g}init(u){return this._buffer=u,this}get cursorY(){return this._buffer.y}get cursorX(){return this._buffer.x}get viewportY(){return this._buffer.ydisp}get baseY(){return this._buffer.ybase}get length(){return this._buffer.lines.length}getLine(u){let g=this._buffer.lines.get(u);if(g)return new d.BufferLineApiView(g)}getNullCell(){return new p.CellData}}},3785:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.BufferLineApiView=void 0;let d=s(511);a.BufferLineApiView=class{constructor(p){this._line=p}get isWrapped(){return this._line.isWrapped}get length(){return this._line.length}getCell(p,u){if(!(p<0||p>=this._line.length))return u?(this._line.loadCell(p,u),u):this._line.loadCell(p,new d.CellData)}translateToString(p,u,g){return this._line.translateToString(p,u,g)}}},8285:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.BufferNamespaceApi=void 0;let d=s(8771),p=s(8460),u=s(844);class g extends u.Disposable{constructor(M){super(),this._core=M,this._onBufferChange=this.register(new p.EventEmitter),this.onBufferChange=this._onBufferChange.event,this._normal=new d.BufferApiView(this._core.buffers.normal,"normal"),this._alternate=new d.BufferApiView(this._core.buffers.alt,"alternate"),this._core.buffers.onBufferActivate(()=>this._onBufferChange.fire(this.active))}get active(){if(this._core.buffers.active===this._core.buffers.normal)return this.normal;if(this._core.buffers.active===this._core.buffers.alt)return this.alternate;throw new Error("Active buffer is neither normal nor alternate")}get normal(){return this._normal.init(this._core.buffers.normal)}get alternate(){return this._alternate.init(this._core.buffers.alt)}}a.BufferNamespaceApi=g},7975:(i,a)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.ParserApi=void 0,a.ParserApi=class{constructor(s){this._core=s}registerCsiHandler(s,d){return this._core.registerCsiHandler(s,p=>d(p.toArray()))}addCsiHandler(s,d){return this.registerCsiHandler(s,d)}registerDcsHandler(s,d){return this._core.registerDcsHandler(s,(p,u)=>d(p,u.toArray()))}addDcsHandler(s,d){return this.registerDcsHandler(s,d)}registerEscHandler(s,d){return this._core.registerEscHandler(s,d)}addEscHandler(s,d){return this.registerEscHandler(s,d)}registerOscHandler(s,d){return this._core.registerOscHandler(s,d)}addOscHandler(s,d){return this.registerOscHandler(s,d)}}},7090:(i,a)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.UnicodeApi=void 0,a.UnicodeApi=class{constructor(s){this._core=s}register(s){this._core.unicodeService.register(s)}get versions(){return this._core.unicodeService.versions}get activeVersion(){return this._core.unicodeService.activeVersion}set activeVersion(s){this._core.unicodeService.activeVersion=s}}},744:function(i,a,s){var d=this&&this.__decorate||function(b,P,k,S){var O,A=arguments.length,D=A<3?P:S===null?S=Object.getOwnPropertyDescriptor(P,k):S;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")D=Reflect.decorate(b,P,k,S);else for(var F=b.length-1;F>=0;F--)(O=b[F])&&(D=(A<3?O(D):A>3?O(P,k,D):O(P,k))||D);return A>3&&D&&Object.defineProperty(P,k,D),D},p=this&&this.__param||function(b,P){return function(k,S){P(k,S,b)}};Object.defineProperty(a,"__esModule",{value:!0}),a.BufferService=a.MINIMUM_ROWS=a.MINIMUM_COLS=void 0;let u=s(8460),g=s(844),C=s(5295),M=s(2585);a.MINIMUM_COLS=2,a.MINIMUM_ROWS=1;let x=a.BufferService=class extends g.Disposable{get buffer(){return this.buffers.active}constructor(b){super(),this.isUserScrolling=!1,this._onResize=this.register(new u.EventEmitter),this.onResize=this._onResize.event,this._onScroll=this.register(new u.EventEmitter),this.onScroll=this._onScroll.event,this.cols=Math.max(b.rawOptions.cols||0,a.MINIMUM_COLS),this.rows=Math.max(b.rawOptions.rows||0,a.MINIMUM_ROWS),this.buffers=this.register(new C.BufferSet(b,this))}resize(b,P){this.cols=b,this.rows=P,this.buffers.resize(b,P),this._onResize.fire({cols:b,rows:P})}reset(){this.buffers.reset(),this.isUserScrolling=!1}scroll(b,P=!1){let k=this.buffer,S;S=this._cachedBlankLine,S&&S.length===this.cols&&S.getFg(0)===b.fg&&S.getBg(0)===b.bg||(S=k.getBlankLine(b,P),this._cachedBlankLine=S),S.isWrapped=P;let O=k.ybase+k.scrollTop,A=k.ybase+k.scrollBottom;if(k.scrollTop===0){let D=k.lines.isFull;A===k.lines.length-1?D?k.lines.recycle().copyFrom(S):k.lines.push(S.clone()):k.lines.splice(A+1,0,S.clone()),D?this.isUserScrolling&&(k.ydisp=Math.max(k.ydisp-1,0)):(k.ybase++,this.isUserScrolling||k.ydisp++)}else{let D=A-O+1;k.lines.shiftElements(O+1,D-1,-1),k.lines.set(A,S.clone())}this.isUserScrolling||(k.ydisp=k.ybase),this._onScroll.fire(k.ydisp)}scrollLines(b,P,k){let S=this.buffer;if(b<0){if(S.ydisp===0)return;this.isUserScrolling=!0}else b+S.ydisp>=S.ybase&&(this.isUserScrolling=!1);let O=S.ydisp;S.ydisp=Math.max(Math.min(S.ydisp+b,S.ybase),0),O!==S.ydisp&&(P||this._onScroll.fire(S.ydisp))}};a.BufferService=x=d([p(0,M.IOptionsService)],x)},7994:(i,a)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.CharsetService=void 0,a.CharsetService=class{constructor(){this.glevel=0,this._charsets=[]}reset(){this.charset=void 0,this._charsets=[],this.glevel=0}setgLevel(s){this.glevel=s,this.charset=this._charsets[s]}setgCharset(s,d){this._charsets[s]=d,this.glevel===s&&(this.charset=d)}}},1753:function(i,a,s){var d=this&&this.__decorate||function(S,O,A,D){var F,I=arguments.length,B=I<3?O:D===null?D=Object.getOwnPropertyDescriptor(O,A):D;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")B=Reflect.decorate(S,O,A,D);else for(var le=S.length-1;le>=0;le--)(F=S[le])&&(B=(I<3?F(B):I>3?F(O,A,B):F(O,A))||B);return I>3&&B&&Object.defineProperty(O,A,B),B},p=this&&this.__param||function(S,O){return function(A,D){O(A,D,S)}};Object.defineProperty(a,"__esModule",{value:!0}),a.CoreMouseService=void 0;let u=s(2585),g=s(8460),C=s(844),M={NONE:{events:0,restrict:()=>!1},X10:{events:1,restrict:S=>S.button!==4&&S.action===1&&(S.ctrl=!1,S.alt=!1,S.shift=!1,!0)},VT200:{events:19,restrict:S=>S.action!==32},DRAG:{events:23,restrict:S=>S.action!==32||S.button!==3},ANY:{events:31,restrict:S=>!0}};function x(S,O){let A=(S.ctrl?16:0)|(S.shift?4:0)|(S.alt?8:0);return S.button===4?(A|=64,A|=S.action):(A|=3&S.button,4&S.button&&(A|=64),8&S.button&&(A|=128),S.action===32?A|=32:S.action!==0||O||(A|=3)),A}let b=String.fromCharCode,P={DEFAULT:S=>{let O=[x(S,!1)+32,S.col+32,S.row+32];return O[0]>255||O[1]>255||O[2]>255?"":`\x1B[M${b(O[0])}${b(O[1])}${b(O[2])}`},SGR:S=>{let O=S.action===0&&S.button!==4?"m":"M";return`\x1B[<${x(S,!0)};${S.col};${S.row}${O}`},SGR_PIXELS:S=>{let O=S.action===0&&S.button!==4?"m":"M";return`\x1B[<${x(S,!0)};${S.x};${S.y}${O}`}},k=a.CoreMouseService=class extends C.Disposable{constructor(S,O){super(),this._bufferService=S,this._coreService=O,this._protocols={},this._encodings={},this._activeProtocol="",this._activeEncoding="",this._lastEvent=null,this._onProtocolChange=this.register(new g.EventEmitter),this.onProtocolChange=this._onProtocolChange.event;for(let A of Object.keys(M))this.addProtocol(A,M[A]);for(let A of Object.keys(P))this.addEncoding(A,P[A]);this.reset()}addProtocol(S,O){this._protocols[S]=O}addEncoding(S,O){this._encodings[S]=O}get activeProtocol(){return this._activeProtocol}get areMouseEventsActive(){return this._protocols[this._activeProtocol].events!==0}set activeProtocol(S){if(!this._protocols[S])throw new Error(`unknown protocol "${S}"`);this._activeProtocol=S,this._onProtocolChange.fire(this._protocols[S].events)}get activeEncoding(){return this._activeEncoding}set activeEncoding(S){if(!this._encodings[S])throw new Error(`unknown encoding "${S}"`);this._activeEncoding=S}reset(){this.activeProtocol="NONE",this.activeEncoding="DEFAULT",this._lastEvent=null}triggerMouseEvent(S){if(S.col<0||S.col>=this._bufferService.cols||S.row<0||S.row>=this._bufferService.rows||S.button===4&&S.action===32||S.button===3&&S.action!==32||S.button!==4&&(S.action===2||S.action===3)||(S.col++,S.row++,S.action===32&&this._lastEvent&&this._equalEvents(this._lastEvent,S,this._activeEncoding==="SGR_PIXELS"))||!this._protocols[this._activeProtocol].restrict(S))return!1;let O=this._encodings[this._activeEncoding](S);return O&&(this._activeEncoding==="DEFAULT"?this._coreService.triggerBinaryEvent(O):this._coreService.triggerDataEvent(O,!0)),this._lastEvent=S,!0}explainEvents(S){return{down:!!(1&S),up:!!(2&S),drag:!!(4&S),move:!!(8&S),wheel:!!(16&S)}}_equalEvents(S,O,A){if(A){if(S.x!==O.x||S.y!==O.y)return!1}else if(S.col!==O.col||S.row!==O.row)return!1;return S.button===O.button&&S.action===O.action&&S.ctrl===O.ctrl&&S.alt===O.alt&&S.shift===O.shift}};a.CoreMouseService=k=d([p(0,u.IBufferService),p(1,u.ICoreService)],k)},6975:function(i,a,s){var d=this&&this.__decorate||function(k,S,O,A){var D,F=arguments.length,I=F<3?S:A===null?A=Object.getOwnPropertyDescriptor(S,O):A;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")I=Reflect.decorate(k,S,O,A);else for(var B=k.length-1;B>=0;B--)(D=k[B])&&(I=(F<3?D(I):F>3?D(S,O,I):D(S,O))||I);return F>3&&I&&Object.defineProperty(S,O,I),I},p=this&&this.__param||function(k,S){return function(O,A){S(O,A,k)}};Object.defineProperty(a,"__esModule",{value:!0}),a.CoreService=void 0;let u=s(1439),g=s(8460),C=s(844),M=s(2585),x=Object.freeze({insertMode:!1}),b=Object.freeze({applicationCursorKeys:!1,applicationKeypad:!1,bracketedPasteMode:!1,origin:!1,reverseWraparound:!1,sendFocus:!1,wraparound:!0}),P=a.CoreService=class extends C.Disposable{constructor(k,S,O){super(),this._bufferService=k,this._logService=S,this._optionsService=O,this.isCursorInitialized=!1,this.isCursorHidden=!1,this._onData=this.register(new g.EventEmitter),this.onData=this._onData.event,this._onUserInput=this.register(new g.EventEmitter),this.onUserInput=this._onUserInput.event,this._onBinary=this.register(new g.EventEmitter),this.onBinary=this._onBinary.event,this._onRequestScrollToBottom=this.register(new g.EventEmitter),this.onRequestScrollToBottom=this._onRequestScrollToBottom.event,this.modes=(0,u.clone)(x),this.decPrivateModes=(0,u.clone)(b)}reset(){this.modes=(0,u.clone)(x),this.decPrivateModes=(0,u.clone)(b)}triggerDataEvent(k,S=!1){if(this._optionsService.rawOptions.disableStdin)return;let O=this._bufferService.buffer;S&&this._optionsService.rawOptions.scrollOnUserInput&&O.ybase!==O.ydisp&&this._onRequestScrollToBottom.fire(),S&&this._onUserInput.fire(),this._logService.debug(`sending data "${k}"`,()=>k.split("").map(A=>A.charCodeAt(0))),this._onData.fire(k)}triggerBinaryEvent(k){this._optionsService.rawOptions.disableStdin||(this._logService.debug(`sending binary "${k}"`,()=>k.split("").map(S=>S.charCodeAt(0))),this._onBinary.fire(k))}};a.CoreService=P=d([p(0,M.IBufferService),p(1,M.ILogService),p(2,M.IOptionsService)],P)},9074:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.DecorationService=void 0;let d=s(8055),p=s(8460),u=s(844),g=s(6106),C=0,M=0;class x extends u.Disposable{get decorations(){return this._decorations.values()}constructor(){super(),this._decorations=new g.SortedList(k=>k?.marker.line),this._onDecorationRegistered=this.register(new p.EventEmitter),this.onDecorationRegistered=this._onDecorationRegistered.event,this._onDecorationRemoved=this.register(new p.EventEmitter),this.onDecorationRemoved=this._onDecorationRemoved.event,this.register((0,u.toDisposable)(()=>this.reset()))}registerDecoration(k){if(k.marker.isDisposed)return;let S=new b(k);if(S){let O=S.marker.onDispose(()=>S.dispose());S.onDispose(()=>{S&&(this._decorations.delete(S)&&this._onDecorationRemoved.fire(S),O.dispose())}),this._decorations.insert(S),this._onDecorationRegistered.fire(S)}return S}reset(){for(let k of this._decorations.values())k.dispose();this._decorations.clear()}*getDecorationsAtCell(k,S,O){let A=0,D=0;for(let F of this._decorations.getKeyIterator(S))A=F.options.x??0,D=A+(F.options.width??1),k>=A&&k<D&&(!O||(F.options.layer??"bottom")===O)&&(yield F)}forEachDecorationAtCell(k,S,O,A){this._decorations.forEachByKey(S,D=>{C=D.options.x??0,M=C+(D.options.width??1),k>=C&&k<M&&(!O||(D.options.layer??"bottom")===O)&&A(D)})}}a.DecorationService=x;class b extends u.Disposable{get isDisposed(){return this._isDisposed}get backgroundColorRGB(){return this._cachedBg===null&&(this.options.backgroundColor?this._cachedBg=d.css.toColor(this.options.backgroundColor):this._cachedBg=void 0),this._cachedBg}get foregroundColorRGB(){return this._cachedFg===null&&(this.options.foregroundColor?this._cachedFg=d.css.toColor(this.options.foregroundColor):this._cachedFg=void 0),this._cachedFg}constructor(k){super(),this.options=k,this.onRenderEmitter=this.register(new p.EventEmitter),this.onRender=this.onRenderEmitter.event,this._onDispose=this.register(new p.EventEmitter),this.onDispose=this._onDispose.event,this._cachedBg=null,this._cachedFg=null,this.marker=k.marker,this.options.overviewRulerOptions&&!this.options.overviewRulerOptions.position&&(this.options.overviewRulerOptions.position="full")}dispose(){this._onDispose.fire(),super.dispose()}}},4348:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.InstantiationService=a.ServiceCollection=void 0;let d=s(2585),p=s(8343);class u{constructor(...C){this._entries=new Map;for(let[M,x]of C)this.set(M,x)}set(C,M){let x=this._entries.get(C);return this._entries.set(C,M),x}forEach(C){for(let[M,x]of this._entries.entries())C(M,x)}has(C){return this._entries.has(C)}get(C){return this._entries.get(C)}}a.ServiceCollection=u,a.InstantiationService=class{constructor(){this._services=new u,this._services.set(d.IInstantiationService,this)}setService(g,C){this._services.set(g,C)}getService(g){return this._services.get(g)}createInstance(g,...C){let M=(0,p.getServiceDependencies)(g).sort((P,k)=>P.index-k.index),x=[];for(let P of M){let k=this._services.get(P.id);if(!k)throw new Error(`[createInstance] ${g.name} depends on UNKNOWN service ${P.id}.`);x.push(k)}let b=M.length>0?M[0].index:C.length;if(C.length!==b)throw new Error(`[createInstance] First service dependency of ${g.name} at position ${b+1} conflicts with ${C.length} static arguments`);return new g(...C,...x)}}},7866:function(i,a,s){var d=this&&this.__decorate||function(b,P,k,S){var O,A=arguments.length,D=A<3?P:S===null?S=Object.getOwnPropertyDescriptor(P,k):S;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")D=Reflect.decorate(b,P,k,S);else for(var F=b.length-1;F>=0;F--)(O=b[F])&&(D=(A<3?O(D):A>3?O(P,k,D):O(P,k))||D);return A>3&&D&&Object.defineProperty(P,k,D),D},p=this&&this.__param||function(b,P){return function(k,S){P(k,S,b)}};Object.defineProperty(a,"__esModule",{value:!0}),a.traceCall=a.setTraceLogger=a.LogService=void 0;let u=s(844),g=s(2585),C={trace:g.LogLevelEnum.TRACE,debug:g.LogLevelEnum.DEBUG,info:g.LogLevelEnum.INFO,warn:g.LogLevelEnum.WARN,error:g.LogLevelEnum.ERROR,off:g.LogLevelEnum.OFF},M,x=a.LogService=class extends u.Disposable{get logLevel(){return this._logLevel}constructor(b){super(),this._optionsService=b,this._logLevel=g.LogLevelEnum.OFF,this._updateLogLevel(),this.register(this._optionsService.onSpecificOptionChange("logLevel",()=>this._updateLogLevel())),M=this}_updateLogLevel(){this._logLevel=C[this._optionsService.rawOptions.logLevel]}_evalLazyOptionalParams(b){for(let P=0;P<b.length;P++)typeof b[P]=="function"&&(b[P]=b[P]())}_log(b,P,k){this._evalLazyOptionalParams(k),b.call(console,(this._optionsService.options.logger?"":"xterm.js: ")+P,...k)}trace(b,...P){this._logLevel<=g.LogLevelEnum.TRACE&&this._log(this._optionsService.options.logger?.trace.bind(this._optionsService.options.logger)??console.log,b,P)}debug(b,...P){this._logLevel<=g.LogLevelEnum.DEBUG&&this._log(this._optionsService.options.logger?.debug.bind(this._optionsService.options.logger)??console.log,b,P)}info(b,...P){this._logLevel<=g.LogLevelEnum.INFO&&this._log(this._optionsService.options.logger?.info.bind(this._optionsService.options.logger)??console.info,b,P)}warn(b,...P){this._logLevel<=g.LogLevelEnum.WARN&&this._log(this._optionsService.options.logger?.warn.bind(this._optionsService.options.logger)??console.warn,b,P)}error(b,...P){this._logLevel<=g.LogLevelEnum.ERROR&&this._log(this._optionsService.options.logger?.error.bind(this._optionsService.options.logger)??console.error,b,P)}};a.LogService=x=d([p(0,g.IOptionsService)],x),a.setTraceLogger=function(b){M=b},a.traceCall=function(b,P,k){if(typeof k.value!="function")throw new Error("not supported");let S=k.value;k.value=function(...O){if(M.logLevel!==g.LogLevelEnum.TRACE)return S.apply(this,O);M.trace(`GlyphRenderer#${S.name}(${O.map(D=>JSON.stringify(D)).join(", ")})`);let A=S.apply(this,O);return M.trace(`GlyphRenderer#${S.name} return`,A),A}}},7302:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.OptionsService=a.DEFAULT_OPTIONS=void 0;let d=s(8460),p=s(844),u=s(6114);a.DEFAULT_OPTIONS={cols:80,rows:24,cursorBlink:!1,cursorStyle:"block",cursorWidth:1,cursorInactiveStyle:"outline",customGlyphs:!0,drawBoldTextInBrightColors:!0,documentOverride:null,fastScrollModifier:"alt",fastScrollSensitivity:5,fontFamily:"courier-new, courier, monospace",fontSize:15,fontWeight:"normal",fontWeightBold:"bold",ignoreBracketedPasteMode:!1,lineHeight:1,letterSpacing:0,linkHandler:null,logLevel:"info",logger:null,scrollback:1e3,scrollOnUserInput:!0,scrollSensitivity:1,screenReaderMode:!1,smoothScrollDuration:0,macOptionIsMeta:!1,macOptionClickForcesSelection:!1,minimumContrastRatio:1,disableStdin:!1,allowProposedApi:!1,allowTransparency:!1,tabStopWidth:8,theme:{},rescaleOverlappingGlyphs:!1,rightClickSelectsWord:u.isMac,windowOptions:{},windowsMode:!1,windowsPty:{},wordSeparator:" ()[]{}',\"`",altClickMovesCursor:!0,convertEol:!1,termName:"xterm",cancelEvents:!1,overviewRulerWidth:0};let g=["normal","bold","100","200","300","400","500","600","700","800","900"];class C extends p.Disposable{constructor(x){super(),this._onOptionChange=this.register(new d.EventEmitter),this.onOptionChange=this._onOptionChange.event;let b=q({},a.DEFAULT_OPTIONS);for(let P in x)if(P in b)try{let k=x[P];b[P]=this._sanitizeAndValidateOption(P,k)}catch(k){console.error(k)}this.rawOptions=b,this.options=q({},b),this._setupOptions(),this.register((0,p.toDisposable)(()=>{this.rawOptions.linkHandler=null,this.rawOptions.documentOverride=null}))}onSpecificOptionChange(x,b){return this.onOptionChange(P=>{P===x&&b(this.rawOptions[x])})}onMultipleOptionChange(x,b){return this.onOptionChange(P=>{x.indexOf(P)!==-1&&b()})}_setupOptions(){let x=P=>{if(!(P in a.DEFAULT_OPTIONS))throw new Error(`No option with key "${P}"`);return this.rawOptions[P]},b=(P,k)=>{if(!(P in a.DEFAULT_OPTIONS))throw new Error(`No option with key "${P}"`);k=this._sanitizeAndValidateOption(P,k),this.rawOptions[P]!==k&&(this.rawOptions[P]=k,this._onOptionChange.fire(P))};for(let P in this.rawOptions){let k={get:x.bind(this,P),set:b.bind(this,P)};Object.defineProperty(this.options,P,k)}}_sanitizeAndValidateOption(x,b){switch(x){case"cursorStyle":if(b||(b=a.DEFAULT_OPTIONS[x]),!(function(P){return P==="block"||P==="underline"||P==="bar"})(b))throw new Error(`"${b}" is not a valid value for ${x}`);break;case"wordSeparator":b||(b=a.DEFAULT_OPTIONS[x]);break;case"fontWeight":case"fontWeightBold":if(typeof b=="number"&&1<=b&&b<=1e3)break;b=g.includes(b)?b:a.DEFAULT_OPTIONS[x];break;case"cursorWidth":b=Math.floor(b);case"lineHeight":case"tabStopWidth":if(b<1)throw new Error(`${x} cannot be less than 1, value: ${b}`);break;case"minimumContrastRatio":b=Math.max(1,Math.min(21,Math.round(10*b)/10));break;case"scrollback":if((b=Math.min(b,4294967295))<0)throw new Error(`${x} cannot be less than 0, value: ${b}`);break;case"fastScrollSensitivity":case"scrollSensitivity":if(b<=0)throw new Error(`${x} cannot be less than or equal to 0, value: ${b}`);break;case"rows":case"cols":if(!b&&b!==0)throw new Error(`${x} must be numeric, value: ${b}`);break;case"windowsPty":b=b??{}}return b}}a.OptionsService=C},2660:function(i,a,s){var d=this&&this.__decorate||function(C,M,x,b){var P,k=arguments.length,S=k<3?M:b===null?b=Object.getOwnPropertyDescriptor(M,x):b;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")S=Reflect.decorate(C,M,x,b);else for(var O=C.length-1;O>=0;O--)(P=C[O])&&(S=(k<3?P(S):k>3?P(M,x,S):P(M,x))||S);return k>3&&S&&Object.defineProperty(M,x,S),S},p=this&&this.__param||function(C,M){return function(x,b){M(x,b,C)}};Object.defineProperty(a,"__esModule",{value:!0}),a.OscLinkService=void 0;let u=s(2585),g=a.OscLinkService=class{constructor(C){this._bufferService=C,this._nextId=1,this._entriesWithId=new Map,this._dataByLinkId=new Map}registerLink(C){let M=this._bufferService.buffer;if(C.id===void 0){let O=M.addMarker(M.ybase+M.y),A={data:C,id:this._nextId++,lines:[O]};return O.onDispose(()=>this._removeMarkerFromLink(A,O)),this._dataByLinkId.set(A.id,A),A.id}let x=C,b=this._getEntryIdKey(x),P=this._entriesWithId.get(b);if(P)return this.addLineToLink(P.id,M.ybase+M.y),P.id;let k=M.addMarker(M.ybase+M.y),S={id:this._nextId++,key:this._getEntryIdKey(x),data:x,lines:[k]};return k.onDispose(()=>this._removeMarkerFromLink(S,k)),this._entriesWithId.set(S.key,S),this._dataByLinkId.set(S.id,S),S.id}addLineToLink(C,M){let x=this._dataByLinkId.get(C);if(x&&x.lines.every(b=>b.line!==M)){let b=this._bufferService.buffer.addMarker(M);x.lines.push(b),b.onDispose(()=>this._removeMarkerFromLink(x,b))}}getLinkData(C){return this._dataByLinkId.get(C)?.data}_getEntryIdKey(C){return`${C.id};;${C.uri}`}_removeMarkerFromLink(C,M){let x=C.lines.indexOf(M);x!==-1&&(C.lines.splice(x,1),C.lines.length===0&&(C.data.id!==void 0&&this._entriesWithId.delete(C.key),this._dataByLinkId.delete(C.id)))}};a.OscLinkService=g=d([p(0,u.IBufferService)],g)},8343:(i,a)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.createDecorator=a.getServiceDependencies=a.serviceRegistry=void 0;let s="di$target",d="di$dependencies";a.serviceRegistry=new Map,a.getServiceDependencies=function(p){return p[d]||[]},a.createDecorator=function(p){if(a.serviceRegistry.has(p))return a.serviceRegistry.get(p);let u=function(g,C,M){if(arguments.length!==3)throw new Error("@IServiceName-decorator can only be used to decorate a parameter");(function(x,b,P){b[s]===b?b[d].push({id:x,index:P}):(b[d]=[{id:x,index:P}],b[s]=b)})(u,g,M)};return u.toString=()=>p,a.serviceRegistry.set(p,u),u}},2585:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.IDecorationService=a.IUnicodeService=a.IOscLinkService=a.IOptionsService=a.ILogService=a.LogLevelEnum=a.IInstantiationService=a.ICharsetService=a.ICoreService=a.ICoreMouseService=a.IBufferService=void 0;let d=s(8343);var p;a.IBufferService=(0,d.createDecorator)("BufferService"),a.ICoreMouseService=(0,d.createDecorator)("CoreMouseService"),a.ICoreService=(0,d.createDecorator)("CoreService"),a.ICharsetService=(0,d.createDecorator)("CharsetService"),a.IInstantiationService=(0,d.createDecorator)("InstantiationService"),(function(u){u[u.TRACE=0]="TRACE",u[u.DEBUG=1]="DEBUG",u[u.INFO=2]="INFO",u[u.WARN=3]="WARN",u[u.ERROR=4]="ERROR",u[u.OFF=5]="OFF"})(p||(a.LogLevelEnum=p={})),a.ILogService=(0,d.createDecorator)("LogService"),a.IOptionsService=(0,d.createDecorator)("OptionsService"),a.IOscLinkService=(0,d.createDecorator)("OscLinkService"),a.IUnicodeService=(0,d.createDecorator)("UnicodeService"),a.IDecorationService=(0,d.createDecorator)("DecorationService")},1480:(i,a,s)=>{Object.defineProperty(a,"__esModule",{value:!0}),a.UnicodeService=void 0;let d=s(8460),p=s(225);class u{static extractShouldJoin(C){return(1&C)!=0}static extractWidth(C){return C>>1&3}static extractCharKind(C){return C>>3}static createPropertyValue(C,M,x=!1){return(16777215&C)<<3|(3&M)<<1|(x?1:0)}constructor(){this._providers=Object.create(null),this._active="",this._onChange=new d.EventEmitter,this.onChange=this._onChange.event;let C=new p.UnicodeV6;this.register(C),this._active=C.version,this._activeProvider=C}dispose(){this._onChange.dispose()}get versions(){return Object.keys(this._providers)}get activeVersion(){return this._active}set activeVersion(C){if(!this._providers[C])throw new Error(`unknown Unicode version "${C}"`);this._active=C,this._activeProvider=this._providers[C],this._onChange.fire(C)}register(C){this._providers[C.version]=C}wcwidth(C){return this._activeProvider.wcwidth(C)}getStringCellWidth(C){let M=0,x=0,b=C.length;for(let P=0;P<b;++P){let k=C.charCodeAt(P);if(55296<=k&&k<=56319){if(++P>=b)return M+this.wcwidth(k);let A=C.charCodeAt(P);56320<=A&&A<=57343?k=1024*(k-55296)+A-56320+65536:M+=this.wcwidth(A)}let S=this.charProperties(k,x),O=u.extractWidth(S);u.extractShouldJoin(S)&&(O-=u.extractWidth(x)),M+=O,x=S}return M}charProperties(C,M){return this._activeProvider.charProperties(C,M)}}a.UnicodeService=u}},o={};function e(i){var a=o[i];if(a!==void 0)return a.exports;var s=o[i]={exports:{}};return n[i].call(s.exports,s,s.exports,e),s.exports}var t={};return(()=>{var i=t;Object.defineProperty(i,"__esModule",{value:!0}),i.Terminal=void 0;let a=e(9042),s=e(3236),d=e(844),p=e(5741),u=e(8285),g=e(7975),C=e(7090),M=["cols","rows"];class x extends d.Disposable{constructor(P){super(),this._core=this.register(new s.Terminal(P)),this._addonManager=this.register(new p.AddonManager),this._publicOptions=q({},this._core.options);let k=O=>this._core.options[O],S=(O,A)=>{this._checkReadonlyOptions(O),this._core.options[O]=A};for(let O in this._core.options){let A={get:k.bind(this,O),set:S.bind(this,O)};Object.defineProperty(this._publicOptions,O,A)}}_checkReadonlyOptions(P){if(M.includes(P))throw new Error(`Option "${P}" can only be set in the constructor`)}_checkProposedApi(){if(!this._core.optionsService.rawOptions.allowProposedApi)throw new Error("You must set the allowProposedApi option to true to use proposed API")}get onBell(){return this._core.onBell}get onBinary(){return this._core.onBinary}get onCursorMove(){return this._core.onCursorMove}get onData(){return this._core.onData}get onKey(){return this._core.onKey}get onLineFeed(){return this._core.onLineFeed}get onRender(){return this._core.onRender}get onResize(){return this._core.onResize}get onScroll(){return this._core.onScroll}get onSelectionChange(){return this._core.onSelectionChange}get onTitleChange(){return this._core.onTitleChange}get onWriteParsed(){return this._core.onWriteParsed}get element(){return this._core.element}get parser(){return this._parser||(this._parser=new g.ParserApi(this._core)),this._parser}get unicode(){return this._checkProposedApi(),new C.UnicodeApi(this._core)}get textarea(){return this._core.textarea}get rows(){return this._core.rows}get cols(){return this._core.cols}get buffer(){return this._buffer||(this._buffer=this.register(new u.BufferNamespaceApi(this._core))),this._buffer}get markers(){return this._checkProposedApi(),this._core.markers}get modes(){let P=this._core.coreService.decPrivateModes,k="none";switch(this._core.coreMouseService.activeProtocol){case"X10":k="x10";break;case"VT200":k="vt200";break;case"DRAG":k="drag";break;case"ANY":k="any"}return{applicationCursorKeysMode:P.applicationCursorKeys,applicationKeypadMode:P.applicationKeypad,bracketedPasteMode:P.bracketedPasteMode,insertMode:this._core.coreService.modes.insertMode,mouseTrackingMode:k,originMode:P.origin,reverseWraparoundMode:P.reverseWraparound,sendFocusMode:P.sendFocus,wraparoundMode:P.wraparound}}get options(){return this._publicOptions}set options(P){for(let k in P)this._publicOptions[k]=P[k]}blur(){this._core.blur()}focus(){this._core.focus()}input(P,k=!0){this._core.input(P,k)}resize(P,k){this._verifyIntegers(P,k),this._core.resize(P,k)}open(P){this._core.open(P)}attachCustomKeyEventHandler(P){this._core.attachCustomKeyEventHandler(P)}attachCustomWheelEventHandler(P){this._core.attachCustomWheelEventHandler(P)}registerLinkProvider(P){return this._core.registerLinkProvider(P)}registerCharacterJoiner(P){return this._checkProposedApi(),this._core.registerCharacterJoiner(P)}deregisterCharacterJoiner(P){this._checkProposedApi(),this._core.deregisterCharacterJoiner(P)}registerMarker(P=0){return this._verifyIntegers(P),this._core.registerMarker(P)}registerDecoration(P){return this._checkProposedApi(),this._verifyPositiveIntegers(P.x??0,P.width??0,P.height??0),this._core.registerDecoration(P)}hasSelection(){return this._core.hasSelection()}select(P,k,S){this._verifyIntegers(P,k,S),this._core.select(P,k,S)}getSelection(){return this._core.getSelection()}getSelectionPosition(){return this._core.getSelectionPosition()}clearSelection(){this._core.clearSelection()}selectAll(){this._core.selectAll()}selectLines(P,k){this._verifyIntegers(P,k),this._core.selectLines(P,k)}dispose(){super.dispose()}scrollLines(P){this._verifyIntegers(P),this._core.scrollLines(P)}scrollPages(P){this._verifyIntegers(P),this._core.scrollPages(P)}scrollToTop(){this._core.scrollToTop()}scrollToBottom(){this._core.scrollToBottom()}scrollToLine(P){this._verifyIntegers(P),this._core.scrollToLine(P)}clear(){this._core.clear()}write(P,k){this._core.write(P,k)}writeln(P,k){this._core.write(P),this._core.write(`\r
|
||
`,k)}paste(P){this._core.paste(P)}refresh(P,k){this._verifyIntegers(P,k),this._core.refresh(P,k)}reset(){this._core.reset()}clearTextureAtlas(){this._core.clearTextureAtlas()}loadAddon(P){this._addonManager.loadAddon(this,P)}static get strings(){return a}_verifyIntegers(...P){for(let k of P)if(k===1/0||isNaN(k)||k%1!=0)throw new Error("This API only accepts integers")}_verifyPositiveIntegers(...P){for(let k of P)if(k&&(k===1/0||isNaN(k)||k%1!=0||k<0))throw new Error("This API only accepts positive integers")}}i.Terminal=x})(),t})())});var A4=al((p2,I4)=>{(function(n,o){typeof p2=="object"&&typeof I4=="object"?I4.exports=o():typeof define=="function"&&define.amd?define([],o):typeof p2=="object"?p2.FitAddon=o():n.FitAddon=o()})(self,()=>(()=>{"use strict";var n={};return(()=>{var o=n;Object.defineProperty(o,"__esModule",{value:!0}),o.FitAddon=void 0,o.FitAddon=class{activate(e){this._terminal=e}dispose(){}fit(){let e=this.proposeDimensions();if(!e||!this._terminal||isNaN(e.cols)||isNaN(e.rows))return;let t=this._terminal._core;this._terminal.rows===e.rows&&this._terminal.cols===e.cols||(t._renderService.clear(),this._terminal.resize(e.cols,e.rows))}proposeDimensions(){if(!this._terminal||!this._terminal.element||!this._terminal.element.parentElement)return;let e=this._terminal._core,t=e._renderService.dimensions;if(t.css.cell.width===0||t.css.cell.height===0)return;let i=this._terminal.options.scrollback===0?0:e.viewport.scrollBarWidth,a=window.getComputedStyle(this._terminal.element.parentElement),s=parseInt(a.getPropertyValue("height")),d=Math.max(0,parseInt(a.getPropertyValue("width"))),p=window.getComputedStyle(this._terminal.element),u=s-(parseInt(p.getPropertyValue("padding-top"))+parseInt(p.getPropertyValue("padding-bottom"))),g=d-(parseInt(p.getPropertyValue("padding-right"))+parseInt(p.getPropertyValue("padding-left")))-i;return{cols:Math.max(2,Math.floor(g/t.css.cell.width)),rows:Math.max(1,Math.floor(u/t.css.cell.height))}}}})(),n})())});var D5=new RegExp(`(\\:not\\()|(([\\.\\#]?)[-\\w]+)|(?:\\[([-.\\w*\\\\$]+)(?:=(["']?)([^\\]"']*)\\5)?\\])|(\\))|(\\s*,\\s*)`,"g"),Ag=class n{element=null;classNames=[];attrs=[];notSelectors=[];static parse(o){let e=[],t=(p,u)=>{u.notSelectors.length>0&&!u.element&&u.classNames.length==0&&u.attrs.length==0&&(u.element="*"),p.push(u)},i=new n,a,s=i,d=!1;for(D5.lastIndex=0;a=D5.exec(o);){if(a[1]){if(d)throw new Error("Nesting :not in a selector is not allowed");d=!0,s=new n,i.notSelectors.push(s)}let p=a[2];if(p){let g=a[3];g==="#"?s.addAttribute("id",p.slice(1)):g==="."?s.addClassName(p.slice(1)):s.setElement(p)}let u=a[4];if(u&&s.addAttribute(s.unescapeAttribute(u),a[6]),a[7]&&(d=!1,s=i),a[8]){if(d)throw new Error("Multiple selectors in :not are not supported");t(e,i),i=s=new n}}return t(e,i),e}unescapeAttribute(o){let e="",t=!1;for(let i=0;i<o.length;i++){let a=o.charAt(i);if(a==="\\"){t=!0;continue}if(a==="$"&&!t)throw new Error(`Error in attribute selector "${o}". Unescaped "$" is not supported. Please escape with "\\$".`);t=!1,e+=a}return e}escapeAttribute(o){return o.replace(/\\/g,"\\\\").replace(/\$/g,"\\$")}isElementSelector(){return this.hasElementSelector()&&this.classNames.length==0&&this.attrs.length==0&&this.notSelectors.length===0}hasElementSelector(){return!!this.element}setElement(o=null){this.element=o}getAttrs(){let o=[];return this.classNames.length>0&&o.push("class",this.classNames.join(" ")),o.concat(this.attrs)}addAttribute(o,e=""){this.attrs.push(o,e&&e.toLowerCase()||"")}addClassName(o){this.classNames.push(o.toLowerCase())}toString(){let o=this.element||"";if(this.classNames&&this.classNames.forEach(e=>o+=`.${e}`),this.attrs)for(let e=0;e<this.attrs.length;e+=2){let t=this.escapeAttribute(this.attrs[e]),i=this.attrs[e+1];o+=`[${t}${i?"="+i:""}]`}return this.notSelectors.forEach(e=>o+=`:not(${e})`),o}},kb=class n{static createNotMatcher(o){let e=new n;return e.addSelectables(o,null),e}_elementMap=new Map;_elementPartialMap=new Map;_classMap=new Map;_classPartialMap=new Map;_attrValueMap=new Map;_attrValuePartialMap=new Map;_listContexts=[];addSelectables(o,e){let t=null;o.length>1&&(t=new pP(o),this._listContexts.push(t));for(let i=0;i<o.length;i++)this._addSelectable(o[i],e,t)}_addSelectable(o,e,t){let i=this,a=o.element,s=o.classNames,d=o.attrs,p=new uP(o,e,t);if(a&&(d.length===0&&s.length===0?this._addTerminal(i._elementMap,a,p):i=this._addPartial(i._elementPartialMap,a)),s)for(let u=0;u<s.length;u++){let g=d.length===0&&u===s.length-1,C=s[u];g?this._addTerminal(i._classMap,C,p):i=this._addPartial(i._classPartialMap,C)}if(d)for(let u=0;u<d.length;u+=2){let g=u===d.length-2,C=d[u],M=d[u+1];if(g){let x=i._attrValueMap,b=x.get(C);b||(b=new Map,x.set(C,b)),this._addTerminal(b,M,p)}else{let x=i._attrValuePartialMap,b=x.get(C);b||(b=new Map,x.set(C,b)),i=this._addPartial(b,M)}}}_addTerminal(o,e,t){let i=o.get(e);i||(i=[],o.set(e,i)),i.push(t)}_addPartial(o,e){let t=o.get(e);return t||(t=new n,o.set(e,t)),t}match(o,e){let t=!1,i=o.element,a=o.classNames,s=o.attrs;for(let d=0;d<this._listContexts.length;d++)this._listContexts[d].alreadyMatched=!1;if(t=this._matchTerminal(this._elementMap,i,o,e)||t,t=this._matchPartial(this._elementPartialMap,i,o,e)||t,a)for(let d=0;d<a.length;d++){let p=a[d];t=this._matchTerminal(this._classMap,p,o,e)||t,t=this._matchPartial(this._classPartialMap,p,o,e)||t}if(s)for(let d=0;d<s.length;d+=2){let p=s[d],u=s[d+1],g=this._attrValueMap.get(p);u&&(t=this._matchTerminal(g,"",o,e)||t),t=this._matchTerminal(g,u,o,e)||t;let C=this._attrValuePartialMap.get(p);u&&(t=this._matchPartial(C,"",o,e)||t),t=this._matchPartial(C,u,o,e)||t}return t}_matchTerminal(o,e,t,i){if(!o||typeof e!="string")return!1;let a=o.get(e)||[],s=o.get("*");if(s&&(a=a.concat(s)),a.length===0)return!1;let d,p=!1;for(let u=0;u<a.length;u++)d=a[u],p=d.finalize(t,i)||p;return p}_matchPartial(o,e,t,i){if(!o||typeof e!="string")return!1;let a=o.get(e);return a?a.match(t,i):!1}},pP=class{selectors;alreadyMatched=!1;constructor(o){this.selectors=o}},uP=class{selector;cbContext;listContext;notSelectors;constructor(o,e,t){this.selector=o,this.cbContext=e,this.listContext=t,this.notSelectors=o.notSelectors}finalize(o,e){let t=!0;return this.notSelectors.length>0&&(!this.listContext||!this.listContext.alreadyMatched)&&(t=!kb.createNotMatcher(this.notSelectors).match(o,null)),t&&e&&(!this.listContext||!this.listContext.alreadyMatched)&&(this.listContext&&(this.listContext.alreadyMatched=!0),e(this.selector,this.cbContext)),t}},Pb=class{registry;constructor(o){this.registry=o}match(o){return this.registry.has(o)?this.registry.get(o):[]}},gi=(function(n){return n[n.NONE=0]="NONE",n[n.HTML=1]="HTML",n[n.STYLE=2]="STYLE",n[n.SCRIPT=3]="SCRIPT",n[n.URL=4]="URL",n[n.RESOURCE_URL=5]="RESOURCE_URL",n[n.ATTRIBUTE_NO_BINDING=6]="ATTRIBUTE_NO_BINDING",n})(gi||{}),bb,I5="svg",$H="math";function HH(){return bb||(bb={},fm(gi.HTML,void 0,[["iframe",["srcdoc"]],["*",["innerHTML","outerHTML"]]]),fm(gi.STYLE,void 0,[["*",["style"]]]),fm(gi.URL,void 0,[["*",["formAction"]],["area",["href"]],["a",["href","xlink:href"]],["form",["action"]],["img",["src"]],["video",["src"]]]),fm(gi.URL,$H,[["*",["href","xlink:href"]],["annotation",["href","xlink:href"]],["annotation-xml",["href","xlink:href"]],["maction",["href","xlink:href"]],["malignmark",["href","xlink:href"]],["math",["href","xlink:href"]],["mroot",["href","xlink:href"]],["msqrt",["href","xlink:href"]],["merror",["href","xlink:href"]],["mfrac",["href","xlink:href"]],["mglyph",["href","xlink:href"]],["msub",["href","xlink:href"]],["msup",["href","xlink:href"]],["msubsup",["href","xlink:href"]],["mmultiscripts",["href","xlink:href"]],["mprescripts",["href","xlink:href"]],["mi",["href","xlink:href"]],["mn",["href","xlink:href"]],["mo",["href","xlink:href"]],["mpadded",["href","xlink:href"]],["mphantom",["href","xlink:href"]],["mrow",["href","xlink:href"]],["ms",["href","xlink:href"]],["mspace",["href","xlink:href"]],["mstyle",["href","xlink:href"]],["mtable",["href","xlink:href"]],["mtd",["href","xlink:href"]],["mtr",["href","xlink:href"]],["mtext",["href","xlink:href"]],["mover",["href","xlink:href"]],["munder",["href","xlink:href"]],["munderover",["href","xlink:href"]],["semantics",["href","xlink:href"]],["none",["href","xlink:href"]]]),fm(gi.RESOURCE_URL,void 0,[["base",["href"]],["embed",["src"]],["frame",["src"]],["iframe",["src"]],["link",["href"]],["object",["codebase","data"]]]),fm(gi.URL,I5,[["a",["href","xlink:href"]]]),fm(gi.ATTRIBUTE_NO_BINDING,I5,[["animate",["attributeName","values","to","from"]],["set",["to","attributeName"]],["animateMotion",["attributeName"]],["animateTransform",["attributeName"]]]),fm(gi.ATTRIBUTE_NO_BINDING,void 0,[["unknown",["attributeName","values","to","from","sandbox","allow","allowFullscreen","referrerPolicy","csp","fetchPriority"]],["iframe",["sandbox","allow","allowFullscreen","referrerPolicy","csp","fetchPriority"]]])),bb}function fm(n,o,e){for(let[t,i]of e){let a=o&&t!=="unknown"?`:${o}:${t}`:t;a=a.toLowerCase();for(let s of i)bb[`${a}|${s.toLowerCase()}`]=n}}var $p=(function(n){return n[n.Emulated=0]="Emulated",n[n.None=2]="None",n[n.ShadowDom=3]="ShadowDom",n[n.ExperimentalIsolatedShadowDom=4]="ExperimentalIsolatedShadowDom",n})($p||{}),$3=(function(n){return n[n.OnPush=0]="OnPush",n[n.Default=1]="Default",n[n.Eager=1]="Eager",n})($3||{}),yf=(function(n){return n[n.None=0]="None",n[n.SignalBased=1]="SignalBased",n[n.HasDecoratorInputTransform=2]="HasDecoratorInputTransform",n})(yf||{}),A5={name:"custom-elements"},N5={name:"no-errors-schema"};function UH(n){let o=n.classNames&&n.classNames.length?[8,...n.classNames]:[];return[n.element&&n.element!=="*"?n.element:"",...n.attrs,...o]}function WH(n){let o=n.classNames&&n.classNames.length?[8,...n.classNames]:[];return n.element?[5,n.element,...n.attrs,...o]:n.attrs.length?[3,...n.attrs,...o]:n.classNames&&n.classNames.length?[9,...n.classNames]:[]}function GH(n){let o=UH(n),e=n.notSelectors&&n.notSelectors.length?n.notSelectors.map(t=>WH(t)):[];return o.concat(...e)}function H3(n){return n?Ag.parse(n).map(GH):[]}var Ed=(function(n){return n[n.Directive=0]="Directive",n[n.Component=1]="Component",n[n.Injectable=2]="Injectable",n[n.Pipe=3]="Pipe",n[n.NgModule=4]="NgModule",n})(Ed||{});var Tb;function qH(n){return YH(XH(n.nodes).join("")+`[${n.meaning}]`)}function QH(n){return n.id||PN(n)}function PN(n){let o=new gP,e=n.nodes.map(t=>t.visit(o,null));return TN(e.join(""),n.meaning)}var Eb=class{visitText(o,e){return o.value}visitContainer(o,e){return`[${o.children.map(t=>t.visit(this)).join(", ")}]`}visitIcu(o,e){let t=Object.keys(o.cases).map(i=>`${i} {${o.cases[i].visit(this)}}`);return`{${o.expression}, ${o.type}, ${t.join(", ")}}`}visitTagPlaceholder(o,e){return o.isVoid?`<ph tag name="${o.startName}"/>`:`<ph tag name="${o.startName}">${o.children.map(t=>t.visit(this)).join(", ")}</ph name="${o.closeName}">`}visitPlaceholder(o,e){return o.value?`<ph name="${o.name}">${o.value}</ph>`:`<ph name="${o.name}"/>`}visitIcuPlaceholder(o,e){return`<ph icu name="${o.name}">${o.value.visit(this)}</ph>`}visitBlockPlaceholder(o,e){return`<ph block name="${o.startName}">${o.children.map(t=>t.visit(this)).join(", ")}</ph name="${o.closeName}">`}},KH=new Eb;function XH(n){return n.map(o=>o.visit(KH,null))}var gP=class extends Eb{visitIcu(o){let e=Object.keys(o.cases).map(t=>`${t} {${o.cases[t].visit(this)}}`);return`{${o.type}, ${e.join(", ")}}`}};function YH(n){Tb??=new TextEncoder;let o=[...Tb.encode(n)],e=eU(o,U3.Big),t=o.length*8,i=new Uint32Array(80),a=1732584193,s=4023233417,d=2562383102,p=271733878,u=3285377520;e[t>>5]|=128<<24-t%32,e[(t+64>>9<<4)+15]=t;for(let g=0;g<e.length;g+=16){let C=a,M=s,x=d,b=p,P=u;for(let k=0;k<80;k++){k<16?i[k]=e[g+k]:i[k]=Wk(i[k-3]^i[k-8]^i[k-14]^i[k-16],1);let S=ZH(k,s,d,p),O=S[0],A=S[1],D=[Wk(a,5),O,u,A,i[k]].reduce(_g);u=p,p=d,d=Wk(s,30),s=a,a=D}a=_g(a,C),s=_g(s,M),d=_g(d,x),p=_g(p,b),u=_g(u,P)}return pf(a)+pf(s)+pf(d)+pf(p)+pf(u)}function pf(n){return(n>>>0).toString(16).padStart(8,"0")}function ZH(n,o,e,t){return n<20?[o&e|~o&t,1518500249]:n<40?[o^e^t,1859775393]:n<60?[o&e|o&t|e&t,2400959708]:[o^e^t,3395469782]}function F5(n){Tb??=new TextEncoder;let o=Tb.encode(n),e=new DataView(o.buffer,o.byteOffset,o.byteLength),t=R5(e,o.length,0),i=R5(e,o.length,102072);return t==0&&(i==0||i==1)&&(t=t^319790063,i=i^-1801410264),BigInt.asUintN(32,BigInt(t))<<BigInt(32)|BigInt.asUintN(32,BigInt(i))}function TN(n,o=""){let e=F5(n);return o&&(e=BigInt.asUintN(64,e<<BigInt(1))|e>>BigInt(63)&BigInt(1),e+=F5(o)),BigInt.asUintN(63,e).toString()}function R5(n,o,e){let t=2654435769,i=2654435769,a=0,s=o-12;for(;a<=s;a+=12){t+=n.getUint32(a,!0),i+=n.getUint32(a+4,!0),e+=n.getUint32(a+8,!0);let p=z5(t,i,e);t=p[0],i=p[1],e=p[2]}let d=o-a;return e+=o,d>=4?(t+=n.getUint32(a,!0),a+=4,d>=8?(i+=n.getUint32(a,!0),a+=4,d>=9&&(e+=n.getUint8(a++)<<8),d>=10&&(e+=n.getUint8(a++)<<16),d===11&&(e+=n.getUint8(a++)<<24)):(d>=5&&(i+=n.getUint8(a++)),d>=6&&(i+=n.getUint8(a++)<<8),d===7&&(i+=n.getUint8(a++)<<16))):(d>=1&&(t+=n.getUint8(a++)),d>=2&&(t+=n.getUint8(a++)<<8),d===3&&(t+=n.getUint8(a++)<<16)),z5(t,i,e)[2]}function z5(n,o,e){return n-=o,n-=e,n^=e>>>13,o-=e,o-=n,o^=n<<8,e-=n,e-=o,e^=o>>>13,n-=o,n-=e,n^=e>>>12,o-=e,o-=n,o^=n<<16,e-=n,e-=o,e^=o>>>5,n-=o,n-=e,n^=e>>>3,o-=e,o-=n,o^=n<<10,e-=n,e-=o,e^=o>>>15,[n,o,e]}var U3=(function(n){return n[n.Little=0]="Little",n[n.Big=1]="Big",n})(U3||{});function _g(n,o){return JH(n,o)[1]}function JH(n,o){let e=(n&65535)+(o&65535),t=(n>>>16)+(o>>>16)+(e>>>16);return[t>>>16,t<<16|e&65535]}function Wk(n,o){return n<<o|n>>>32-o}function eU(n,o){let e=n.length+3>>>2,t=[];for(let i=0;i<e;i++)t[i]=tU(n,i*4,o);return t}function L5(n,o){return o>=n.length?0:n[o]}function tU(n,o,e){let t=0;if(e===U3.Big)for(let i=0;i<4;i++)t+=L5(n,o+i)<<24-8*i;else for(let i=0;i<4;i++)t+=L5(n,o+i)<<8*i;return t}var EN=(function(n){return n[n.None=0]="None",n[n.Const=1]="Const",n})(EN||{}),Ob=class{modifiers;constructor(o=EN.None){this.modifiers=o}hasModifier(o){return(this.modifiers&o)!==0}},Ld=(function(n){return n[n.Dynamic=0]="Dynamic",n[n.Bool=1]="Bool",n[n.String=2]="String",n[n.Int=3]="Int",n[n.Number=4]="Number",n[n.Function=5]="Function",n[n.Inferred=6]="Inferred",n[n.None=7]="None",n})(Ld||{}),Vc=class extends Ob{name;constructor(o,e){super(e),this.name=o}visitType(o,e){return o.visitBuiltinType(this,e)}},xl=class extends Ob{value;typeParams;constructor(o,e,t=null){super(e),this.value=o,this.typeParams=t}visitType(o,e){return o.visitExpressionType(this,e)}};var ws=new Vc(Ld.Dynamic),ic=new Vc(Ld.Inferred),nU=new Vc(Ld.Bool),mHe=new Vc(Ld.Int),iu=new Vc(Ld.Number),W3=new Vc(Ld.String),pHe=new Vc(Ld.Function),Bc=new Vc(Ld.None),zf=(function(n){return n[n.Minus=0]="Minus",n[n.Plus=1]="Plus",n})(zf||{}),lt=(function(n){return n[n.Equals=0]="Equals",n[n.NotEquals=1]="NotEquals",n[n.Assign=2]="Assign",n[n.Identical=3]="Identical",n[n.NotIdentical=4]="NotIdentical",n[n.Minus=5]="Minus",n[n.Plus=6]="Plus",n[n.Divide=7]="Divide",n[n.Multiply=8]="Multiply",n[n.Modulo=9]="Modulo",n[n.And=10]="And",n[n.Or=11]="Or",n[n.BitwiseOr=12]="BitwiseOr",n[n.BitwiseAnd=13]="BitwiseAnd",n[n.Lower=14]="Lower",n[n.LowerEquals=15]="LowerEquals",n[n.Bigger=16]="Bigger",n[n.BiggerEquals=17]="BiggerEquals",n[n.NullishCoalesce=18]="NullishCoalesce",n[n.Exponentiation=19]="Exponentiation",n[n.In=20]="In",n[n.InstanceOf=21]="InstanceOf",n[n.AdditionAssignment=22]="AdditionAssignment",n[n.SubtractionAssignment=23]="SubtractionAssignment",n[n.MultiplicationAssignment=24]="MultiplicationAssignment",n[n.DivisionAssignment=25]="DivisionAssignment",n[n.RemainderAssignment=26]="RemainderAssignment",n[n.ExponentiationAssignment=27]="ExponentiationAssignment",n[n.AndAssignment=28]="AndAssignment",n[n.OrAssignment=29]="OrAssignment",n[n.NullishCoalesceAssignment=30]="NullishCoalesceAssignment",n})(lt||{});function iU(n,o){return n==null||o==null?n==o:n.isEquivalent(o)}function ON(n,o,e){let t=n.length;if(t!==o.length)return!1;for(let i=0;i<t;i++)if(!e(n[i],o[i]))return!1;return!0}function Ks(n,o){return ON(n,o,(e,t)=>e.isEquivalent(t))}var Qi=class{type;sourceSpan;constructor(o,e){this.type=o||null,this.sourceSpan=e||null}prop(o,e){return new Xs(this,o,null,e)}key(o,e,t){return new Fd(this,o,e,t)}callFn(o,e,t){return new Ms(this,o,null,e,t)}instantiate(o,e,t){return new Vf(this,o,e,t)}conditional(o,e=null,t){return new jc(this,o,e,null,t)}equals(o,e){return new Pi(lt.Equals,this,o,null,e)}notEquals(o,e){return new Pi(lt.NotEquals,this,o,null,e)}identical(o,e){return new Pi(lt.Identical,this,o,null,e)}notIdentical(o,e){return new Pi(lt.NotIdentical,this,o,null,e)}minus(o,e){return new Pi(lt.Minus,this,o,null,e)}plus(o,e){return new Pi(lt.Plus,this,o,null,e)}divide(o,e){return new Pi(lt.Divide,this,o,null,e)}multiply(o,e){return new Pi(lt.Multiply,this,o,null,e)}modulo(o,e){return new Pi(lt.Modulo,this,o,null,e)}power(o,e){return new Pi(lt.Exponentiation,this,o,null,e)}and(o,e){return new Pi(lt.And,this,o,null,e)}bitwiseOr(o,e){return new Pi(lt.BitwiseOr,this,o,null,e)}bitwiseAnd(o,e){return new Pi(lt.BitwiseAnd,this,o,null,e)}or(o,e){return new Pi(lt.Or,this,o,null,e)}lower(o,e){return new Pi(lt.Lower,this,o,null,e)}lowerEquals(o,e){return new Pi(lt.LowerEquals,this,o,null,e)}bigger(o,e){return new Pi(lt.Bigger,this,o,null,e)}biggerEquals(o,e){return new Pi(lt.BiggerEquals,this,o,null,e)}isBlank(o){return this.equals(lU,o)}nullishCoalesce(o,e){return new Pi(lt.NullishCoalesce,this,o,null,e)}toStmt(){return new fr(this,null)}},oc=class n extends Qi{name;constructor(o,e,t){super(e,t),this.name=o}isEquivalent(o){return o instanceof n&&this.name===o.name}isConstant(){return!1}visitExpression(o,e){return o.visitReadVarExpr(this,e)}clone(){return new n(this.name,this.type,this.sourceSpan)}set(o){return new Pi(lt.Assign,this,o,null,this.sourceSpan)}},Ng=class n extends Qi{expr;constructor(o,e,t){super(e,t),this.expr=o}visitExpression(o,e){return o.visitTypeofExpr(this,e)}isEquivalent(o){return o instanceof n&&o.expr.isEquivalent(this.expr)}isConstant(){return this.expr.isConstant()}clone(){return new n(this.expr.clone())}},Db=class n extends Qi{expr;constructor(o,e,t){super(e,t),this.expr=o}visitExpression(o,e){return o.visitVoidExpr(this,e)}isEquivalent(o){return o instanceof n&&o.expr.isEquivalent(this.expr)}isConstant(){return this.expr.isConstant()}clone(){return new n(this.expr.clone())}},_i=class n extends Qi{node;constructor(o,e,t){super(e,t),this.node=o}isEquivalent(o){return o instanceof n&&this.node===o.node}isConstant(){return!1}visitExpression(o,e){return o.visitWrappedNodeExpr(this,e)}clone(){return new n(this.node,this.type,this.sourceSpan)}},Ms=class n extends Qi{fn;args;pure;constructor(o,e,t,i,a=!1){super(t,i),this.fn=o,this.args=e,this.pure=a}get receiver(){return this.fn}isEquivalent(o){return o instanceof n&&this.fn.isEquivalent(o.fn)&&Ks(this.args,o.args)&&this.pure===o.pure}isConstant(){return!1}visitExpression(o,e){return o.visitInvokeFunctionExpr(this,e)}clone(){return new n(this.fn.clone(),this.args.map(o=>o.clone()),this.type,this.sourceSpan,this.pure)}},Lf=class n extends Qi{tag;template;constructor(o,e,t,i){super(t,i),this.tag=o,this.template=e}isEquivalent(o){return o instanceof n&&this.tag.isEquivalent(o.tag)&&this.template.isEquivalent(o.template)}isConstant(){return!1}visitExpression(o,e){return o.visitTaggedTemplateLiteralExpr(this,e)}clone(){return new n(this.tag.clone(),this.template.clone(),this.type,this.sourceSpan)}},Vf=class n extends Qi{classExpr;args;constructor(o,e,t,i){super(t,i),this.classExpr=o,this.args=e}isEquivalent(o){return o instanceof n&&this.classExpr.isEquivalent(o.classExpr)&&Ks(this.args,o.args)}isConstant(){return!1}visitExpression(o,e){return o.visitInstantiateExpr(this,e)}clone(){return new n(this.classExpr.clone(),this.args.map(o=>o.clone()),this.type,this.sourceSpan)}},Fg=class n extends Qi{body;flags;constructor(o,e,t){super(null,t),this.body=o,this.flags=e}isEquivalent(o){return o instanceof n&&this.body===o.body&&this.flags===o.flags}isConstant(){return!0}visitExpression(o,e){return o.visitRegularExpressionLiteral(this,e)}clone(){return new n(this.body,this.flags,this.sourceSpan)}},_r=class n extends Qi{value;constructor(o,e,t){super(e,t),this.value=o}isEquivalent(o){return o instanceof n&&this.value===o.value}isConstant(){return!0}visitExpression(o,e){return o.visitLiteralExpr(this,e)}clone(){return new n(this.value,this.type,this.sourceSpan)}},Bf=class n extends Qi{elements;expressions;constructor(o,e,t){super(null,t),this.elements=o,this.expressions=e}isEquivalent(o){return o instanceof n&&ON(this.elements,o.elements,(e,t)=>e.text===t.text)&&Ks(this.expressions,o.expressions)}isConstant(){return!1}visitExpression(o,e){return o.visitTemplateLiteralExpr(this,e)}clone(){return new n(this.elements.map(o=>o.clone()),this.expressions.map(o=>o.clone()))}},Ib=class n extends Qi{text;rawText;constructor(o,e,t){super(W3,e),this.text=o,this.rawText=t??hP(xb(o))}visitExpression(o,e){return o.visitTemplateLiteralElementExpr(this,e)}isEquivalent(o){return o instanceof n&&o.text===this.text&&o.rawText===this.rawText}isConstant(){return!0}clone(){return new n(this.text,this.sourceSpan,this.rawText)}},Xp=class{text;sourceSpan;constructor(o,e){this.text=o,this.sourceSpan=e}},Og=class{text;sourceSpan;associatedMessage;constructor(o,e,t){this.text=o,this.sourceSpan=e,this.associatedMessage=t}},oU="|",V5="@@",aU="\u241F",Ab=class n extends Qi{metaBlock;messageParts;placeHolderNames;expressions;constructor(o,e,t,i,a){super(W3,a),this.metaBlock=o,this.messageParts=e,this.placeHolderNames=t,this.expressions=i}isEquivalent(o){return!1}isConstant(){return!1}visitExpression(o,e){return o.visitLocalizedString(this,e)}clone(){return new n(this.metaBlock,this.messageParts,this.placeHolderNames,this.expressions.map(o=>o.clone()),this.sourceSpan)}serializeI18nHead(){let o=this.metaBlock.description||"";return this.metaBlock.meaning&&(o=`${this.metaBlock.meaning}${oU}${o}`),this.metaBlock.customId&&(o=`${o}${V5}${this.metaBlock.customId}`),this.metaBlock.legacyIds&&this.metaBlock.legacyIds.forEach(e=>{o=`${o}${aU}${e}`}),B5(o,this.messageParts[0].text,this.getMessagePartSourceSpan(0))}getMessagePartSourceSpan(o){return this.messageParts[o]?.sourceSpan??this.sourceSpan}getPlaceholderSourceSpan(o){return this.placeHolderNames[o]?.sourceSpan??this.expressions[o]?.sourceSpan??this.sourceSpan}serializeI18nTemplatePart(o){let e=this.placeHolderNames[o-1],t=this.messageParts[o],i=e.text;return e.associatedMessage?.legacyIds.length===0&&(i+=`${V5}${TN(e.associatedMessage.messageString,e.associatedMessage.meaning)}`),B5(i,t.text,this.getMessagePartSourceSpan(o))}},xb=n=>n.replace(/\\/g,"\\\\"),rU=n=>n.replace(/^:/,"\\:"),sU=n=>n.replace(/:/g,"\\:"),hP=n=>n.replace(/`/g,"\\`").replace(/\${/g,"$\\{");function B5(n,o,e){return n===""?{cooked:o,raw:hP(rU(xb(o))),range:e}:{cooked:`:${n}:${o}`,raw:hP(`:${sU(xb(n))}:${xb(o)}`),range:e}}var ou=class n extends Qi{value;typeParams;constructor(o,e,t=null,i){super(e,i),this.value=o,this.typeParams=t}isEquivalent(o){return o instanceof n&&this.value.name===o.value.name&&this.value.moduleName===o.value.moduleName}isConstant(){return!1}visitExpression(o,e){return o.visitExternalExpr(this,e)}clone(){return new n(this.value,this.type,this.typeParams,this.sourceSpan)}};var jc=class n extends Qi{condition;falseCase;trueCase;constructor(o,e,t=null,i,a){super(i||e.type,a),this.condition=o,this.falseCase=t,this.trueCase=e}isEquivalent(o){return o instanceof n&&this.condition.isEquivalent(o.condition)&&this.trueCase.isEquivalent(o.trueCase)&&iU(this.falseCase,o.falseCase)}isConstant(){return!1}visitExpression(o,e){return o.visitConditionalExpr(this,e)}clone(){return new n(this.condition.clone(),this.trueCase.clone(),this.falseCase?.clone(),this.type,this.sourceSpan)}};var jf=class n extends Qi{condition;constructor(o,e){super(nU,e),this.condition=o}isEquivalent(o){return o instanceof n&&this.condition.isEquivalent(o.condition)}isConstant(){return!1}visitExpression(o,e){return o.visitNotExpr(this,e)}clone(){return new n(this.condition.clone(),this.sourceSpan)}},Da=class n{name;type;constructor(o,e=null){this.name=o,this.type=e}isEquivalent(o){return this.name===o.name}clone(){return new n(this.name,this.type)}},Pm=class n extends Qi{params;statements;name;constructor(o,e,t,i,a){super(t,i),this.params=o,this.statements=e,this.name=a}isEquivalent(o){return(o instanceof n||o instanceof $f)&&Ks(this.params,o.params)&&Ks(this.statements,o.statements)}isConstant(){return!1}visitExpression(o,e){return o.visitFunctionExpr(this,e)}toDeclStmt(o,e){return new $f(o,this.params,this.statements,this.type,e,this.sourceSpan)}clone(){return new n(this.params.map(o=>o.clone()),this.statements,this.type,this.sourceSpan,this.name)}},vu=class _P extends Qi{params;body;constructor(o,e,t,i){super(t,i),this.params=o,this.body=e}isEquivalent(o){return!(o instanceof _P)||!Ks(this.params,o.params)?!1:this.body instanceof Qi&&o.body instanceof Qi?this.body.isEquivalent(o.body):Array.isArray(this.body)&&Array.isArray(o.body)?Ks(this.body,o.body):!1}isConstant(){return!1}visitExpression(o,e){return o.visitArrowFunctionExpr(this,e)}clone(){return new _P(this.params.map(o=>o.clone()),Array.isArray(this.body)?this.body:this.body.clone(),this.type,this.sourceSpan)}toDeclStmt(o,e){return new Ga(o,this,ic,e,this.sourceSpan)}},au=class n extends Qi{operator;expr;parens;constructor(o,e,t,i,a=!0){super(t||iu,i),this.operator=o,this.expr=e,this.parens=a}isEquivalent(o){return o instanceof n&&this.operator===o.operator&&this.expr.isEquivalent(o.expr)}isConstant(){return!1}visitExpression(o,e){return o.visitUnaryOperatorExpr(this,e)}clone(){return new n(this.operator,this.expr.clone(),this.type,this.sourceSpan,this.parens)}},ac=class n extends Qi{expr;constructor(o,e,t){super(e,t),this.expr=o}visitExpression(o,e){return o.visitParenthesizedExpr(this,e)}isEquivalent(o){return o instanceof n&&o.expr.isEquivalent(this.expr)}isConstant(){return this.expr.isConstant()}clone(){return new n(this.expr.clone())}},Pi=class n extends Qi{operator;rhs;lhs;constructor(o,e,t,i,a){super(i||e.type,a),this.operator=o,this.rhs=t,this.lhs=e}isEquivalent(o){return o instanceof n&&this.operator===o.operator&&this.lhs.isEquivalent(o.lhs)&&this.rhs.isEquivalent(o.rhs)}isConstant(){return!1}visitExpression(o,e){return o.visitBinaryOperatorExpr(this,e)}clone(){return new n(this.operator,this.lhs.clone(),this.rhs.clone(),this.type,this.sourceSpan)}isAssignment(){let o=this.operator;return o===lt.Assign||o===lt.AdditionAssignment||o===lt.SubtractionAssignment||o===lt.MultiplicationAssignment||o===lt.DivisionAssignment||o===lt.RemainderAssignment||o===lt.ExponentiationAssignment||o===lt.AndAssignment||o===lt.OrAssignment||o===lt.NullishCoalesceAssignment}},Xs=class n extends Qi{receiver;name;constructor(o,e,t,i){super(t,i),this.receiver=o,this.name=e}get index(){return this.name}isEquivalent(o){return o instanceof n&&this.receiver.isEquivalent(o.receiver)&&this.name===o.name}isConstant(){return!1}visitExpression(o,e){return o.visitReadPropExpr(this,e)}set(o){return new Pi(lt.Assign,this.receiver.prop(this.name),o,null,this.sourceSpan)}clone(){return new n(this.receiver.clone(),this.name,this.type,this.sourceSpan)}},Fd=class n extends Qi{receiver;index;constructor(o,e,t,i){super(t,i),this.receiver=o,this.index=e}isEquivalent(o){return o instanceof n&&this.receiver.isEquivalent(o.receiver)&&this.index.isEquivalent(o.index)}isConstant(){return!1}visitExpression(o,e){return o.visitReadKeyExpr(this,e)}set(o){return new Pi(lt.Assign,this.receiver.key(this.index),o,null,this.sourceSpan)}clone(){return new n(this.receiver.clone(),this.index.clone(),this.type,this.sourceSpan)}},$c=class n extends Qi{entries;constructor(o,e,t){super(e,t),this.entries=o}isConstant(){return this.entries.every(o=>o.isConstant())}isEquivalent(o){return o instanceof n&&Ks(this.entries,o.entries)}visitExpression(o,e){return o.visitLiteralArrayExpr(this,e)}clone(){return new n(this.entries.map(o=>o.clone()),this.type,this.sourceSpan)}},Rg=class n{key;value;quoted;constructor(o,e,t){this.key=o,this.value=e,this.quoted=t}isEquivalent(o){return this.key===o.key&&this.value.isEquivalent(o.value)}clone(){return new n(this.key,this.value.clone(),this.quoted)}isConstant(){return this.value.isConstant()}},Tm=class n{expression;constructor(o){this.expression=o}isEquivalent(o){return o instanceof n&&this.expression.isEquivalent(o.expression)}clone(){return new n(this.expression.clone())}isConstant(){return this.expression.isConstant()}},rc=class n extends Qi{entries;valueType=null;constructor(o,e,t){super(e,t),this.entries=o,e&&(this.valueType=e.valueType)}isEquivalent(o){return o instanceof n&&Ks(this.entries,o.entries)}isConstant(){return this.entries.every(o=>o.isConstant())}visitExpression(o,e){return o.visitLiteralMapExpr(this,e)}clone(){let o=this.entries.map(e=>e.clone());return new n(o,this.type,this.sourceSpan)}};var ru=class n extends Qi{expression;constructor(o,e){super(null,e),this.expression=o}isEquivalent(o){return o instanceof n&&this.expression.isEquivalent(o.expression)}isConstant(){return this.expression.isConstant()}visitExpression(o,e){return o.visitSpreadElementExpr(this,e)}clone(){return new n(this.expression.clone(),this.sourceSpan)}},zg=new _r(null,null,null),lU=new _r(null,ic,null),ur=(function(n){return n[n.None=0]="None",n[n.Final=1]="Final",n[n.Private=2]="Private",n[n.Exported=4]="Exported",n[n.Static=8]="Static",n})(ur||{}),fP=class{text;multiline;trailingNewline;constructor(o,e,t){this.text=o,this.multiline=e,this.trailingNewline=t}toString(){return this.multiline?` ${this.text} `:this.text}},Nb=class extends fP{tags;constructor(o){super("",!0,!0),this.tags=o}toString(){return uU(this.tags)}},su=class{modifiers;sourceSpan;leadingComments;constructor(o=ur.None,e=null,t){this.modifiers=o,this.sourceSpan=e,this.leadingComments=t}hasModifier(o){return(this.modifiers&o)!==0}addLeadingComment(o){this.leadingComments=this.leadingComments??[],this.leadingComments.push(o)}},Ga=class n extends su{name;value;type;constructor(o,e,t,i,a,s){super(i,a,s),this.name=o,this.value=e,this.type=t||e&&e.type||null}isEquivalent(o){return o instanceof n&&this.name===o.name&&(this.value?!!o.value&&this.value.isEquivalent(o.value):!o.value)}visitStatement(o,e){return o.visitDeclareVarStmt(this,e)}},$f=class n extends su{name;params;statements;type;constructor(o,e,t,i,a,s,d){super(a,s,d),this.name=o,this.params=e,this.statements=t,this.type=i||null}isEquivalent(o){return o instanceof n&&Ks(this.params,o.params)&&Ks(this.statements,o.statements)}visitStatement(o,e){return o.visitDeclareFunctionStmt(this,e)}},fr=class n extends su{expr;constructor(o,e,t){super(ur.None,e,t),this.expr=o}isEquivalent(o){return o instanceof n&&this.expr.isEquivalent(o.expr)}visitStatement(o,e){return o.visitExpressionStmt(this,e)}},Ia=class n extends su{value;constructor(o,e=null,t){super(ur.None,e,t),this.value=o}isEquivalent(o){return o instanceof n&&this.value.isEquivalent(o.value)}visitStatement(o,e){return o.visitReturnStmt(this,e)}},Fb=class n extends su{condition;trueCase;falseCase;constructor(o,e,t=[],i,a){super(ur.None,i,a),this.condition=o,this.trueCase=e,this.falseCase=t}isEquivalent(o){return o instanceof n&&this.condition.isEquivalent(o.condition)&&Ks(this.trueCase,o.trueCase)&&Ks(this.falseCase,o.falseCase)}visitStatement(o,e){return o.visitIfStmt(this,e)}};function cU(n=[]){return new Nb(n)}function di(n,o,e){return new oc(n,o,e)}function Ht(n,o=null,e){return new ou(n,null,o,e)}function gr(n,o,e){return new xl(n,o,e)}function N0(n){return new Ng(n)}function io(n,o,e){return new $c(n,o,e)}function yl(n,o=null){return new rc(n.map(e=>new Rg(e.key,e.value,e.quoted)),o,null)}function dU(n,o){return new jf(n,o)}function Em(n,o,e,t,i){return new Pm(n,o,e,t,i)}function Ys(n,o,e,t){return new vu(n,o,e,t)}function Nx(n,o,e,t,i){return new Fb(n,o,e,t,i)}function mU(n,o,e,t){return new Lf(n,o,e,t)}function De(n,o,e){return new _r(n,o,e)}function pU(n,o,e,t,i){return new Ab(n,o,e,t,i)}function j5(n){let o="";if(n.tagName&&(o+=` @${n.tagName}`),n.text){if(n.text.match(/\/\*|\*\//))throw new Error('JSDoc text cannot contain "/*" and "*/"');o+=" "+n.text.replace(/@/g,"\\@")}return o}function uU(n){if(n.length===0)return"";if(n.length===1&&n[0].tagName&&!n[0].text)return`*${j5(n[0])} `;let o=`*
|
||
`;for(let e of n)o+=" *",o+=j5(e).replace(/\n/g,`
|
||
* `),o+=`
|
||
`;return o+=" ",o}var gU="_c",hU={},_U=50,Rb=class n extends Qi{resolved;original;shared=!1;constructor(o){super(o.type),this.resolved=o,this.original=o}visitExpression(o,e){return e===hU?this.original.visitExpression(o,e):this.resolved.visitExpression(o,e)}isEquivalent(o){return o instanceof n&&this.resolved.isEquivalent(o.resolved)}isConstant(){return!0}clone(){throw new Error("Not supported.")}fixup(o){this.resolved=o,this.shared=!0}},zb=class{isClosureCompilerEnabled;statements=[];literals=new Map;literalFactories=new Map;sharedConstants=new Map;_claimedNames=new Map;nextNameIndex=0;constructor(o=!1){this.isClosureCompilerEnabled=o}getConstLiteral(o,e){if(o instanceof _r&&!$5(o)||o instanceof Rb)return o;let t=Hf.INSTANCE.keyOf(o),i=this.literals.get(t),a=!1;if(i||(i=new Rb(o),this.literals.set(t,i),a=!0),!a&&!i.shared||a&&e){let s=this.freshName(),d,p;this.isClosureCompilerEnabled&&$5(o)?(d=new Pm([],[new Ia(o)]),p=di(s).callFn([])):(d=o,p=di(s)),this.statements.push(new Ga(s,d,ic,ur.Final)),i.fixup(p)}return i}getSharedConstant(o,e){let t=o.keyOf(e);if(!this.sharedConstants.has(t)){let i=this.freshName();this.sharedConstants.set(t,di(i)),this.statements.push(o.toSharedConstantDeclaration(i,e))}return this.sharedConstants.get(t)}getSharedFunctionReference(o,e,t=!0){let i=o instanceof vu;for(let s of this.statements)if(i&&s instanceof Ga&&s.value?.isEquivalent(o)||!i&&s instanceof $f&&o instanceof Pm&&o.isEquivalent(s))return di(s.name);let a=t?this.uniqueName(e):e;return this.statements.push(o instanceof Pm?o.toDeclStmt(a,ur.Final):new Ga(a,o,ic,ur.Final,o.sourceSpan)),di(a)}uniqueName(o,e=!0){let t=this._claimedNames.get(o)??0,i=t===0&&!e?`${o}`:`${o}${t}`;return this._claimedNames.set(o,t+1),i}freshName(){return this.uniqueName(gU)}},Hf=class n{static INSTANCE=new n;keyOf(o){if(o instanceof _r&&typeof o.value=="string")return`"${o.value}"`;if(o instanceof _r)return String(o.value);if(o instanceof Fg)return`/${o.body}/${o.flags??""}`;if(o instanceof $c){let e=[];for(let t of o.entries)e.push(this.keyOf(t));return`[${e.join(",")}]`}else if(o instanceof rc){let e=[];for(let t of o.entries)if(t instanceof Tm)e.push("..."+this.keyOf(t.expression));else{let i=t.key;t.quoted&&(i=`"${i}"`),e.push(i+":"+this.keyOf(t.value))}return`{${e.join(",")}}`}else{if(o instanceof ou)return`import("${o.value.moduleName}", ${o.value.name})`;if(o instanceof oc)return`read(${o.name})`;if(o instanceof Ng)return`typeof(${this.keyOf(o.expr)})`;if(o instanceof ru)return`...${this.keyOf(o.expression)}`;throw new Error(`${this.constructor.name} does not handle expressions of type ${o.constructor.name}`)}}};function $5(n){return n instanceof _r&&typeof n.value=="string"&&n.value.length>=_U}var xe="@angular/core",ge=(()=>{class n{static core={name:null,moduleName:xe};static namespaceHTML={name:"\u0275\u0275namespaceHTML",moduleName:xe};static namespaceMathML={name:"\u0275\u0275namespaceMathML",moduleName:xe};static namespaceSVG={name:"\u0275\u0275namespaceSVG",moduleName:xe};static element={name:"\u0275\u0275element",moduleName:xe};static elementStart={name:"\u0275\u0275elementStart",moduleName:xe};static elementEnd={name:"\u0275\u0275elementEnd",moduleName:xe};static domElement={name:"\u0275\u0275domElement",moduleName:xe};static domElementStart={name:"\u0275\u0275domElementStart",moduleName:xe};static domElementEnd={name:"\u0275\u0275domElementEnd",moduleName:xe};static domElementContainer={name:"\u0275\u0275domElementContainer",moduleName:xe};static domElementContainerStart={name:"\u0275\u0275domElementContainerStart",moduleName:xe};static domElementContainerEnd={name:"\u0275\u0275domElementContainerEnd",moduleName:xe};static domTemplate={name:"\u0275\u0275domTemplate",moduleName:xe};static domListener={name:"\u0275\u0275domListener",moduleName:xe};static advance={name:"\u0275\u0275advance",moduleName:xe};static syntheticHostProperty={name:"\u0275\u0275syntheticHostProperty",moduleName:xe};static syntheticHostListener={name:"\u0275\u0275syntheticHostListener",moduleName:xe};static attribute={name:"\u0275\u0275attribute",moduleName:xe};static classProp={name:"\u0275\u0275classProp",moduleName:xe};static elementContainerStart={name:"\u0275\u0275elementContainerStart",moduleName:xe};static elementContainerEnd={name:"\u0275\u0275elementContainerEnd",moduleName:xe};static elementContainer={name:"\u0275\u0275elementContainer",moduleName:xe};static styleMap={name:"\u0275\u0275styleMap",moduleName:xe};static classMap={name:"\u0275\u0275classMap",moduleName:xe};static styleProp={name:"\u0275\u0275styleProp",moduleName:xe};static interpolate={name:"\u0275\u0275interpolate",moduleName:xe};static interpolate1={name:"\u0275\u0275interpolate1",moduleName:xe};static interpolate2={name:"\u0275\u0275interpolate2",moduleName:xe};static interpolate3={name:"\u0275\u0275interpolate3",moduleName:xe};static interpolate4={name:"\u0275\u0275interpolate4",moduleName:xe};static interpolate5={name:"\u0275\u0275interpolate5",moduleName:xe};static interpolate6={name:"\u0275\u0275interpolate6",moduleName:xe};static interpolate7={name:"\u0275\u0275interpolate7",moduleName:xe};static interpolate8={name:"\u0275\u0275interpolate8",moduleName:xe};static interpolateV={name:"\u0275\u0275interpolateV",moduleName:xe};static nextContext={name:"\u0275\u0275nextContext",moduleName:xe};static resetView={name:"\u0275\u0275resetView",moduleName:xe};static templateCreate={name:"\u0275\u0275template",moduleName:xe};static defer={name:"\u0275\u0275defer",moduleName:xe};static deferWhen={name:"\u0275\u0275deferWhen",moduleName:xe};static deferOnIdle={name:"\u0275\u0275deferOnIdle",moduleName:xe};static deferOnImmediate={name:"\u0275\u0275deferOnImmediate",moduleName:xe};static deferOnTimer={name:"\u0275\u0275deferOnTimer",moduleName:xe};static deferOnHover={name:"\u0275\u0275deferOnHover",moduleName:xe};static deferOnInteraction={name:"\u0275\u0275deferOnInteraction",moduleName:xe};static deferOnViewport={name:"\u0275\u0275deferOnViewport",moduleName:xe};static deferPrefetchWhen={name:"\u0275\u0275deferPrefetchWhen",moduleName:xe};static deferPrefetchOnIdle={name:"\u0275\u0275deferPrefetchOnIdle",moduleName:xe};static deferPrefetchOnImmediate={name:"\u0275\u0275deferPrefetchOnImmediate",moduleName:xe};static deferPrefetchOnTimer={name:"\u0275\u0275deferPrefetchOnTimer",moduleName:xe};static deferPrefetchOnHover={name:"\u0275\u0275deferPrefetchOnHover",moduleName:xe};static deferPrefetchOnInteraction={name:"\u0275\u0275deferPrefetchOnInteraction",moduleName:xe};static deferPrefetchOnViewport={name:"\u0275\u0275deferPrefetchOnViewport",moduleName:xe};static deferHydrateWhen={name:"\u0275\u0275deferHydrateWhen",moduleName:xe};static deferHydrateNever={name:"\u0275\u0275deferHydrateNever",moduleName:xe};static deferHydrateOnIdle={name:"\u0275\u0275deferHydrateOnIdle",moduleName:xe};static deferHydrateOnImmediate={name:"\u0275\u0275deferHydrateOnImmediate",moduleName:xe};static deferHydrateOnTimer={name:"\u0275\u0275deferHydrateOnTimer",moduleName:xe};static deferHydrateOnHover={name:"\u0275\u0275deferHydrateOnHover",moduleName:xe};static deferHydrateOnInteraction={name:"\u0275\u0275deferHydrateOnInteraction",moduleName:xe};static deferHydrateOnViewport={name:"\u0275\u0275deferHydrateOnViewport",moduleName:xe};static deferEnableTimerScheduling={name:"\u0275\u0275deferEnableTimerScheduling",moduleName:xe};static conditionalCreate={name:"\u0275\u0275conditionalCreate",moduleName:xe};static conditionalBranchCreate={name:"\u0275\u0275conditionalBranchCreate",moduleName:xe};static conditional={name:"\u0275\u0275conditional",moduleName:xe};static repeater={name:"\u0275\u0275repeater",moduleName:xe};static repeaterCreate={name:"\u0275\u0275repeaterCreate",moduleName:xe};static repeaterTrackByIndex={name:"\u0275\u0275repeaterTrackByIndex",moduleName:xe};static repeaterTrackByIdentity={name:"\u0275\u0275repeaterTrackByIdentity",moduleName:xe};static componentInstance={name:"\u0275\u0275componentInstance",moduleName:xe};static text={name:"\u0275\u0275text",moduleName:xe};static enableBindings={name:"\u0275\u0275enableBindings",moduleName:xe};static disableBindings={name:"\u0275\u0275disableBindings",moduleName:xe};static getCurrentView={name:"\u0275\u0275getCurrentView",moduleName:xe};static textInterpolate={name:"\u0275\u0275textInterpolate",moduleName:xe};static textInterpolate1={name:"\u0275\u0275textInterpolate1",moduleName:xe};static textInterpolate2={name:"\u0275\u0275textInterpolate2",moduleName:xe};static textInterpolate3={name:"\u0275\u0275textInterpolate3",moduleName:xe};static textInterpolate4={name:"\u0275\u0275textInterpolate4",moduleName:xe};static textInterpolate5={name:"\u0275\u0275textInterpolate5",moduleName:xe};static textInterpolate6={name:"\u0275\u0275textInterpolate6",moduleName:xe};static textInterpolate7={name:"\u0275\u0275textInterpolate7",moduleName:xe};static textInterpolate8={name:"\u0275\u0275textInterpolate8",moduleName:xe};static textInterpolateV={name:"\u0275\u0275textInterpolateV",moduleName:xe};static restoreView={name:"\u0275\u0275restoreView",moduleName:xe};static pureFunction0={name:"\u0275\u0275pureFunction0",moduleName:xe};static pureFunction1={name:"\u0275\u0275pureFunction1",moduleName:xe};static pureFunction2={name:"\u0275\u0275pureFunction2",moduleName:xe};static pureFunction3={name:"\u0275\u0275pureFunction3",moduleName:xe};static pureFunction4={name:"\u0275\u0275pureFunction4",moduleName:xe};static pureFunction5={name:"\u0275\u0275pureFunction5",moduleName:xe};static pureFunction6={name:"\u0275\u0275pureFunction6",moduleName:xe};static pureFunction7={name:"\u0275\u0275pureFunction7",moduleName:xe};static pureFunction8={name:"\u0275\u0275pureFunction8",moduleName:xe};static pureFunctionV={name:"\u0275\u0275pureFunctionV",moduleName:xe};static pipeBind1={name:"\u0275\u0275pipeBind1",moduleName:xe};static pipeBind2={name:"\u0275\u0275pipeBind2",moduleName:xe};static pipeBind3={name:"\u0275\u0275pipeBind3",moduleName:xe};static pipeBind4={name:"\u0275\u0275pipeBind4",moduleName:xe};static pipeBindV={name:"\u0275\u0275pipeBindV",moduleName:xe};static domProperty={name:"\u0275\u0275domProperty",moduleName:xe};static ariaProperty={name:"\u0275\u0275ariaProperty",moduleName:xe};static property={name:"\u0275\u0275property",moduleName:xe};static control={name:"\u0275\u0275control",moduleName:xe};static controlCreate={name:"\u0275\u0275controlCreate",moduleName:xe};static animationEnterListener={name:"\u0275\u0275animateEnterListener",moduleName:xe};static animationLeaveListener={name:"\u0275\u0275animateLeaveListener",moduleName:xe};static animationEnter={name:"\u0275\u0275animateEnter",moduleName:xe};static animationLeave={name:"\u0275\u0275animateLeave",moduleName:xe};static i18n={name:"\u0275\u0275i18n",moduleName:xe};static i18nAttributes={name:"\u0275\u0275i18nAttributes",moduleName:xe};static i18nExp={name:"\u0275\u0275i18nExp",moduleName:xe};static i18nStart={name:"\u0275\u0275i18nStart",moduleName:xe};static i18nEnd={name:"\u0275\u0275i18nEnd",moduleName:xe};static i18nApply={name:"\u0275\u0275i18nApply",moduleName:xe};static i18nPostprocess={name:"\u0275\u0275i18nPostprocess",moduleName:xe};static pipe={name:"\u0275\u0275pipe",moduleName:xe};static projection={name:"\u0275\u0275projection",moduleName:xe};static projectionDef={name:"\u0275\u0275projectionDef",moduleName:xe};static reference={name:"\u0275\u0275reference",moduleName:xe};static inject={name:"\u0275\u0275inject",moduleName:xe};static injectAttribute={name:"\u0275\u0275injectAttribute",moduleName:xe};static directiveInject={name:"\u0275\u0275directiveInject",moduleName:xe};static invalidFactory={name:"\u0275\u0275invalidFactory",moduleName:xe};static invalidFactoryDep={name:"\u0275\u0275invalidFactoryDep",moduleName:xe};static templateRefExtractor={name:"\u0275\u0275templateRefExtractor",moduleName:xe};static forwardRef={name:"forwardRef",moduleName:xe};static resolveForwardRef={name:"resolveForwardRef",moduleName:xe};static replaceMetadata={name:"\u0275\u0275replaceMetadata",moduleName:xe};static getReplaceMetadataURL={name:"\u0275\u0275getReplaceMetadataURL",moduleName:xe};static \u0275\u0275defineInjectable={name:"\u0275\u0275defineInjectable",moduleName:xe};static declareInjectable={name:"\u0275\u0275ngDeclareInjectable",moduleName:xe};static InjectableDeclaration={name:"\u0275\u0275InjectableDeclaration",moduleName:xe};static resolveWindow={name:"\u0275\u0275resolveWindow",moduleName:xe};static resolveDocument={name:"\u0275\u0275resolveDocument",moduleName:xe};static resolveBody={name:"\u0275\u0275resolveBody",moduleName:xe};static getComponentDepsFactory={name:"\u0275\u0275getComponentDepsFactory",moduleName:xe};static defineComponent={name:"\u0275\u0275defineComponent",moduleName:xe};static declareComponent={name:"\u0275\u0275ngDeclareComponent",moduleName:xe};static setComponentScope={name:"\u0275\u0275setComponentScope",moduleName:xe};static ChangeDetectionStrategy={name:"ChangeDetectionStrategy",moduleName:xe};static ViewEncapsulation={name:"ViewEncapsulation",moduleName:xe};static ComponentDeclaration={name:"\u0275\u0275ComponentDeclaration",moduleName:xe};static FactoryDeclaration={name:"\u0275\u0275FactoryDeclaration",moduleName:xe};static declareFactory={name:"\u0275\u0275ngDeclareFactory",moduleName:xe};static FactoryTarget={name:"\u0275\u0275FactoryTarget",moduleName:xe};static defineDirective={name:"\u0275\u0275defineDirective",moduleName:xe};static declareDirective={name:"\u0275\u0275ngDeclareDirective",moduleName:xe};static DirectiveDeclaration={name:"\u0275\u0275DirectiveDeclaration",moduleName:xe};static InjectorDef={name:"\u0275\u0275InjectorDef",moduleName:xe};static InjectorDeclaration={name:"\u0275\u0275InjectorDeclaration",moduleName:xe};static defineInjector={name:"\u0275\u0275defineInjector",moduleName:xe};static declareInjector={name:"\u0275\u0275ngDeclareInjector",moduleName:xe};static NgModuleDeclaration={name:"\u0275\u0275NgModuleDeclaration",moduleName:xe};static ModuleWithProviders={name:"ModuleWithProviders",moduleName:xe};static defineNgModule={name:"\u0275\u0275defineNgModule",moduleName:xe};static declareNgModule={name:"\u0275\u0275ngDeclareNgModule",moduleName:xe};static setNgModuleScope={name:"\u0275\u0275setNgModuleScope",moduleName:xe};static registerNgModuleType={name:"\u0275\u0275registerNgModuleType",moduleName:xe};static PipeDeclaration={name:"\u0275\u0275PipeDeclaration",moduleName:xe};static definePipe={name:"\u0275\u0275definePipe",moduleName:xe};static declarePipe={name:"\u0275\u0275ngDeclarePipe",moduleName:xe};static declareClassMetadata={name:"\u0275\u0275ngDeclareClassMetadata",moduleName:xe};static declareClassMetadataAsync={name:"\u0275\u0275ngDeclareClassMetadataAsync",moduleName:xe};static setClassMetadata={name:"\u0275setClassMetadata",moduleName:xe};static setClassMetadataAsync={name:"\u0275setClassMetadataAsync",moduleName:xe};static setClassDebugInfo={name:"\u0275setClassDebugInfo",moduleName:xe};static queryRefresh={name:"\u0275\u0275queryRefresh",moduleName:xe};static viewQuery={name:"\u0275\u0275viewQuery",moduleName:xe};static loadQuery={name:"\u0275\u0275loadQuery",moduleName:xe};static contentQuery={name:"\u0275\u0275contentQuery",moduleName:xe};static viewQuerySignal={name:"\u0275\u0275viewQuerySignal",moduleName:xe};static contentQuerySignal={name:"\u0275\u0275contentQuerySignal",moduleName:xe};static queryAdvance={name:"\u0275\u0275queryAdvance",moduleName:xe};static twoWayProperty={name:"\u0275\u0275twoWayProperty",moduleName:xe};static twoWayBindingSet={name:"\u0275\u0275twoWayBindingSet",moduleName:xe};static twoWayListener={name:"\u0275\u0275twoWayListener",moduleName:xe};static declareLet={name:"\u0275\u0275declareLet",moduleName:xe};static storeLet={name:"\u0275\u0275storeLet",moduleName:xe};static readContextLet={name:"\u0275\u0275readContextLet",moduleName:xe};static arrowFunction={name:"\u0275\u0275arrowFunction",moduleName:xe};static attachSourceLocations={name:"\u0275\u0275attachSourceLocations",moduleName:xe};static NgOnChangesFeature={name:"\u0275\u0275NgOnChangesFeature",moduleName:xe};static ControlFeature={name:"\u0275\u0275ControlFeature",moduleName:xe};static InheritDefinitionFeature={name:"\u0275\u0275InheritDefinitionFeature",moduleName:xe};static ProvidersFeature={name:"\u0275\u0275ProvidersFeature",moduleName:xe};static HostDirectivesFeature={name:"\u0275\u0275HostDirectivesFeature",moduleName:xe};static ExternalStylesFeature={name:"\u0275\u0275ExternalStylesFeature",moduleName:xe};static listener={name:"\u0275\u0275listener",moduleName:xe};static getInheritedFactory={name:"\u0275\u0275getInheritedFactory",moduleName:xe};static sanitizeHtml={name:"\u0275\u0275sanitizeHtml",moduleName:xe};static sanitizeStyle={name:"\u0275\u0275sanitizeStyle",moduleName:xe};static validateAttribute={name:"\u0275\u0275validateAttribute",moduleName:xe};static sanitizeResourceUrl={name:"\u0275\u0275sanitizeResourceUrl",moduleName:xe};static sanitizeScript={name:"\u0275\u0275sanitizeScript",moduleName:xe};static sanitizeUrl={name:"\u0275\u0275sanitizeUrl",moduleName:xe};static sanitizeUrlOrResourceUrl={name:"\u0275\u0275sanitizeUrlOrResourceUrl",moduleName:xe};static trustConstantHtml={name:"\u0275\u0275trustConstantHtml",moduleName:xe};static trustConstantResourceUrl={name:"\u0275\u0275trustConstantResourceUrl",moduleName:xe};static inputDecorator={name:"Input",moduleName:xe};static outputDecorator={name:"Output",moduleName:xe};static viewChildDecorator={name:"ViewChild",moduleName:xe};static viewChildrenDecorator={name:"ViewChildren",moduleName:xe};static contentChildDecorator={name:"ContentChild",moduleName:xe};static contentChildrenDecorator={name:"ContentChildren",moduleName:xe};static InputSignalBrandWriteType={name:"\u0275INPUT_SIGNAL_BRAND_WRITE_TYPE",moduleName:xe};static UnwrapDirectiveSignalInputs={name:"\u0275UnwrapDirectiveSignalInputs",moduleName:xe};static unwrapWritableSignal={name:"\u0275unwrapWritableSignal",moduleName:xe};static assertType={name:"\u0275assertType",moduleName:xe}}return n})(),fU=/-+([a-z0-9])/g;function vU(n){return n.replace(fU,(...o)=>o[1].toUpperCase())}function CU(n,o){return DN(n,":",o)}function bU(n,o){return DN(n,".",o)}function DN(n,o,e){let t=n.indexOf(o);return t==-1?e:[n.slice(0,t).trim(),n.slice(t+1).trim()]}function xU(n){let o=[];for(let e=0;e<n.length;e++){let t=n.charCodeAt(e);if(t>=55296&&t<=56319&&n.length>e+1){let i=n.charCodeAt(e+1);i>=56320&&i<=57343&&(e++,t=(t-55296<<10)+i-56320+65536)}t<=127?o.push(t):t<=2047?o.push(t>>6&31|192,t&63|128):t<=65535?o.push(t>>12|224,t>>6&63|128,t&63|128):t<=2097151&&o.push(t>>18&7|240,t>>12&63|128,t>>6&63|128,t&63|128)}return o}function IN(n){if(typeof n=="string")return n;if(Array.isArray(n))return`[${n.map(IN).join(", ")}]`;if(n==null)return""+n;let o=n.overriddenName||n.name;if(o)return`${o}`;if(!n.toString)return"object";let e=n.toString();if(e==null)return""+e;let t=e.indexOf(`
|
||
`);return t>=0?e.slice(0,t):e}var vP=class{full;major;minor;patch;constructor(o){this.full=o;let e=o.split(".");this.major=e[0],this.minor=e[1],this.patch=e.slice(2).join(".")}},Tf=globalThis,yU=/^([1-9]|1[0-8])\./;function AN(n){return n.startsWith("0.")?!0:!yU.test(n)}var wU=3,MU="# sourceMappingURL=data:application/json;base64,",CP=class{file;sourcesContent=new Map;lines=[];lastCol0=0;hasMappings=!1;constructor(o=null){this.file=o}addSource(o,e=null){return this.sourcesContent.has(o)||this.sourcesContent.set(o,e),this}addLine(){return this.lines.push([]),this.lastCol0=0,this}addMapping(o,e,t,i){if(!this.currentLine)throw new Error("A line must be added before mappings can be added");if(e!=null&&!this.sourcesContent.has(e))throw new Error(`Unknown source file "${e}"`);if(o==null)throw new Error("The column in the generated code must be provided");if(o<this.lastCol0)throw new Error("Mapping should be added in output order");if(e&&(t==null||i==null))throw new Error("The source location must be provided when a source url is provided");return this.hasMappings=!0,this.lastCol0=o,this.currentLine.push({col0:o,sourceUrl:e,sourceLine0:t,sourceCol0:i}),this}get currentLine(){return this.lines.slice(-1)[0]}toJSON(){if(!this.hasMappings)return null;let o=new Map,e=[],t=[];Array.from(this.sourcesContent.keys()).forEach((u,g)=>{o.set(u,g),e.push(u),t.push(this.sourcesContent.get(u)||null)});let i="",a=0,s=0,d=0,p=0;return this.lines.forEach(u=>{a=0,i+=u.map(g=>{let C=lb(g.col0-a);return a=g.col0,g.sourceUrl!=null&&(C+=lb(o.get(g.sourceUrl)-s),s=o.get(g.sourceUrl),C+=lb(g.sourceLine0-d),d=g.sourceLine0,C+=lb(g.sourceCol0-p),p=g.sourceCol0),C}).join(","),i+=";"}),i=i.slice(0,-1),{file:this.file||"",version:wU,sourceRoot:"",sources:e,sourcesContent:t,mappings:i}}toJsComment(){return this.hasMappings?"//"+MU+SU(JSON.stringify(this,null,0)):""}};function SU(n){let o="",e=xU(n);for(let t=0;t<e.length;){let i=e[t++],a=t<e.length?e[t++]:null,s=t<e.length?e[t++]:null;o+=wf(i>>2),o+=wf((i&3)<<4|(a===null?0:a>>4)),o+=a===null?"=":wf((a&15)<<2|(s===null?0:s>>6)),o+=a===null||s===null?"=":wf(s&63)}return o}function lb(n){n=n<0?(-n<<1)+1:n<<1;let o="";do{let e=n&31;n=n>>5,n>0&&(e=e|32),o+=wf(e)}while(n>0);return o}var kU="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function wf(n){if(n<0||n>=64)throw new Error("Can only encode value in the range [0, 63]");return kU[n]}var PU=/'|\\|\n|\r|\$/g,TU=/^[$A-Z_][0-9A-Z_$]*$/i,bP=" ",Lb=class{indent;partsLength=0;parts=[];srcSpans=[];constructor(o){this.indent=o}},EU=new Map([[lt.And,"&&"],[lt.Bigger,">"],[lt.BiggerEquals,">="],[lt.BitwiseOr,"|"],[lt.BitwiseAnd,"&"],[lt.Divide,"/"],[lt.Assign,"="],[lt.Equals,"=="],[lt.Identical,"==="],[lt.Lower,"<"],[lt.LowerEquals,"<="],[lt.Minus,"-"],[lt.Modulo,"%"],[lt.Exponentiation,"**"],[lt.Multiply,"*"],[lt.NotEquals,"!="],[lt.NotIdentical,"!=="],[lt.NullishCoalesce,"??"],[lt.Or,"||"],[lt.Plus,"+"],[lt.In,"in"],[lt.InstanceOf,"instanceof"],[lt.AdditionAssignment,"+="],[lt.SubtractionAssignment,"-="],[lt.MultiplicationAssignment,"*="],[lt.DivisionAssignment,"/="],[lt.RemainderAssignment,"%="],[lt.ExponentiationAssignment,"**="],[lt.AndAssignment,"&&="],[lt.OrAssignment,"||="],[lt.NullishCoalesceAssignment,"??="]]),xP=class n{_indent;static createRoot(){return new n(0)}_lines;constructor(o){this._indent=o,this._lines=[new Lb(o)]}get _currentLine(){return this._lines[this._lines.length-1]}println(o,e=""){this.print(o||null,e,!0)}lineIsEmpty(){return this._currentLine.parts.length===0}lineLength(){return this._currentLine.indent*bP.length+this._currentLine.partsLength}print(o,e,t=!1){e.length>0&&(this._currentLine.parts.push(e),this._currentLine.partsLength+=e.length,this._currentLine.srcSpans.push(o&&o.sourceSpan||null)),t&&this._lines.push(new Lb(this._indent))}removeEmptyLastLine(){this.lineIsEmpty()&&this._lines.pop()}incIndent(){this._indent++,this.lineIsEmpty()&&(this._currentLine.indent=this._indent)}decIndent(){this._indent--,this.lineIsEmpty()&&(this._currentLine.indent=this._indent)}toSource(){return this.sourceLines.map(o=>o.parts.length>0?H5(o.indent)+o.parts.join(""):"").join(`
|
||
`)}toSourceMapGenerator(o,e=0){let t=new CP(o),i=!1,a=()=>{i||(t.addSource(o," ").addMapping(0,o,0,0),i=!0)};for(let s=0;s<e;s++)t.addLine(),a();return this.sourceLines.forEach((s,d)=>{t.addLine();let p=s.srcSpans,u=s.parts,g=s.indent*bP.length,C=0;for(;C<p.length&&!p[C];)g+=u[C].length,C++;for(C<p.length&&d===0&&g===0?i=!0:a();C<p.length;){let M=p[C],x=M.start.file,b=M.start.line,P=M.start.col;for(t.addSource(x.url,x.content).addMapping(g,x.url,b,P),g+=u[C].length,C++;C<p.length&&(M===p[C]||!p[C]);)g+=u[C].length,C++}}),t}spanOf(o,e){let t=this._lines[o];if(t){let i=e-H5(t.indent).length;for(let a=0;a<t.parts.length;a++){let s=t.parts[a];if(s.length>i)return t.srcSpans[a];i-=s.length}}return null}get sourceLines(){return this._lines.length&&this._lines[this._lines.length-1].parts.length===0?this._lines.slice(0,-1):this._lines}},yP=class{_escapeDollarInStrings;lastIfCondition=null;constructor(o){this._escapeDollarInStrings=o}printLeadingComments(o,e){if(o.leadingComments!==void 0)for(let t of o.leadingComments)t instanceof Nb?e.print(o,`/*${t.toString()}*/`,t.trailingNewline):t.multiline?e.print(o,`/* ${t.text} */`,t.trailingNewline):t.text.split(`
|
||
`).forEach(i=>{e.println(o,`// ${i}`)})}visitExpressionStmt(o,e){return this.printLeadingComments(o,e),o.expr.visitExpression(this,e),e.println(o,";"),null}visitReturnStmt(o,e){return this.printLeadingComments(o,e),e.print(o,"return "),o.value.visitExpression(this,e),e.println(o,";"),null}visitIfStmt(o,e){this.printLeadingComments(o,e),e.print(o,"if ("),this.lastIfCondition=o.condition,o.condition.visitExpression(this,e),this.lastIfCondition=null,e.print(o,") {");let t=o.falseCase!=null&&o.falseCase.length>0;return o.trueCase.length<=1&&!t?(e.print(o," "),this.visitAllStatements(o.trueCase,e),e.removeEmptyLastLine(),e.print(o," ")):(e.println(),e.incIndent(),this.visitAllStatements(o.trueCase,e),e.decIndent(),t&&(e.println(o,"} else {"),e.incIndent(),this.visitAllStatements(o.falseCase,e),e.decIndent())),e.println(o,"}"),null}visitInvokeFunctionExpr(o,e){let t=o.fn instanceof vu;return t&&e.print(o.fn,"("),o.fn.visitExpression(this,e),t&&e.print(o.fn,")"),e.print(o,"("),this.visitAllExpressions(o.args,e,","),e.print(o,")"),null}visitTaggedTemplateLiteralExpr(o,e){return o.tag.visitExpression(this,e),o.template.visitExpression(this,e),null}visitTemplateLiteralExpr(o,e){e.print(o,"`");for(let t=0;t<o.elements.length;t++){o.elements[t].visitExpression(this,e);let i=t<o.expressions.length?o.expressions[t]:null;i!==null&&(e.print(i,"${"),i.visitExpression(this,e),e.print(i,"}"))}e.print(o,"`")}visitTemplateLiteralElementExpr(o,e){e.print(o,o.rawText)}visitWrappedNodeExpr(o,e){throw new Error("Abstract emitter cannot visit WrappedNodeExpr.")}visitTypeofExpr(o,e){e.print(o,"typeof "),o.expr.visitExpression(this,e)}visitVoidExpr(o,e){e.print(o,"void "),o.expr.visitExpression(this,e)}visitReadVarExpr(o,e){return e.print(o,o.name),null}visitInstantiateExpr(o,e){return e.print(o,"new "),o.classExpr.visitExpression(this,e),e.print(o,"("),this.visitAllExpressions(o.args,e,","),e.print(o,")"),null}visitLiteralExpr(o,e){let t=o.value;return typeof t=="string"?e.print(o,Gp(t,this._escapeDollarInStrings)):e.print(o,`${t}`),null}visitRegularExpressionLiteral(o,e){return e.print(o,`/${o.body}/${o.flags||""}`),null}visitLocalizedString(o,e){let t=o.serializeI18nHead();e.print(o,"$localize `"+t.raw);for(let i=1;i<o.messageParts.length;i++)e.print(o,"${"),o.expressions[i-1].visitExpression(this,e),e.print(o,`}${o.serializeI18nTemplatePart(i).raw}`);return e.print(o,"`"),null}visitConditionalExpr(o,e){return e.print(o,"("),o.condition.visitExpression(this,e),e.print(o,"? "),o.trueCase.visitExpression(this,e),e.print(o,": "),o.falseCase.visitExpression(this,e),e.print(o,")"),null}visitDynamicImportExpr(o,e){e.print(o,`import(${o.url})`)}visitNotExpr(o,e){return e.print(o,"!"),o.condition.visitExpression(this,e),null}visitUnaryOperatorExpr(o,e){let t;switch(o.operator){case zf.Plus:t="+";break;case zf.Minus:t="-";break;default:throw new Error(`Unknown operator ${o.operator}`)}let i=o!==this.lastIfCondition;return i&&e.print(o,"("),e.print(o,t),o.expr.visitExpression(this,e),i&&e.print(o,")"),null}visitBinaryOperatorExpr(o,e){let t=EU.get(o.operator);if(!t)throw new Error(`Unknown operator ${o.operator}`);let i=o!==this.lastIfCondition;return i&&e.print(o,"("),o.lhs.visitExpression(this,e),e.print(o,` ${t} `),o.rhs.visitExpression(this,e),i&&e.print(o,")"),null}visitReadPropExpr(o,e){return o.receiver.visitExpression(this,e),e.print(o,"."),e.print(o,o.name),null}visitReadKeyExpr(o,e){return o.receiver.visitExpression(this,e),e.print(o,"["),o.index.visitExpression(this,e),e.print(o,"]"),null}visitLiteralArrayExpr(o,e){return e.print(o,"["),this.visitAllExpressions(o.entries,e,","),e.print(o,"]"),null}visitLiteralMapExpr(o,e){return e.print(o,"{"),this.visitAllObjects(t=>{t instanceof Tm?(e.print(o,"..."),t.expression.visitExpression(this,e)):(e.print(o,`${Gp(t.key,this._escapeDollarInStrings,t.quoted)}:`),t.value.visitExpression(this,e))},o.entries,e,","),e.print(o,"}"),null}visitCommaExpr(o,e){return e.print(o,"("),this.visitAllExpressions(o.parts,e,","),e.print(o,")"),null}visitParenthesizedExpr(o,e){o.expr.visitExpression(this,e)}visitSpreadElementExpr(o,e){e.print(o,"..."),o.expression.visitExpression(this,e)}visitAllExpressions(o,e,t){this.visitAllObjects(i=>i.visitExpression(this,e),o,e,t)}visitAllObjects(o,e,t,i){let a=!1;for(let s=0;s<e.length;s++)s>0&&(t.lineLength()>80?(t.print(null,i,!0),a||(t.incIndent(),t.incIndent(),a=!0)):t.print(null,i,!1)),o(e[s]);a&&(t.decIndent(),t.decIndent())}visitAllStatements(o,e){o.forEach(t=>t.visitStatement(this,e))}};function Gp(n,o,e=!0){if(n==null)return null;let t=n.replace(PU,(...a)=>a[0]=="$"?o?"\\$":"$":a[0]==`
|
||
`?"\\n":a[0]=="\r"?"\\r":`\\${a[0]}`);return e||!TU.test(t)?`'${t}'`:t}function H5(n){let o="";for(let e=0;e<n;e++)o+=bP;return o}function Fx(n,o){if(o===0)return gr(n);let e=[];for(let t=0;t<o;t++)e.push(ws);return gr(n,void 0,e)}function OU(n,o){let e=Gp(o,!1,!1);return e!==o?`${n}[${e}]`:`${n}.${o}`}function DU(n){return IU("ngJitMode",n)}function IU(n,o){let e=new ou({name:n,moduleName:null}),t=new Pi(lt.Identical,new Ng(e),De("undefined")),i=new Pi(lt.Or,t,e,void 0,void 0);return new Pi(lt.And,i,o)}function Ua(n){let o=new _i(n);return{value:o,type:o}}function qp(n,o){let e=io(n.map(t=>t.value));return o?Ys([],e):e}function G3(n,o){return{expression:n,forwardRef:o}}function AU({expression:n,forwardRef:o}){switch(o){case 0:case 1:return n;case 2:return NU(n)}}function NU(n){return Ht(ge.forwardRef).callFn([Ys([],n)])}var Vb=(function(n){return n[n.Class=0]="Class",n[n.Function=1]="Function",n})(Vb||{});function Hp(n){let o=di("__ngFactoryType__"),e=null,t=W5(n)?o:new Pi(lt.Or,o,n.type.value),i=null;n.deps!==null?n.deps!=="invalid"&&(i=new Vf(t,U5(n.deps,n.target))):(e=di(`\u0275${n.name}_BaseFactory`),i=e.callFn([t]));let a=[],s=null;function d(u){let g=di("__ngConditionalFactory__");a.push(new Ga(g.name,zg,ic));let C=i!==null?g.set(i).toStmt():Ht(ge.invalidFactory).callFn([]).toStmt();return a.push(Nx(o,[C],[g.set(u).toStmt()])),g}if(W5(n)){let u=U5(n.delegateDeps,n.target),g=new(n.delegateType===Vb.Class?Vf:Ms)(n.delegate,u);s=d(g)}else VU(n)?s=d(n.expression):s=i;if(s===null)a.push(Ht(ge.invalidFactory).callFn([]).toStmt());else if(e!==null){let u=Ht(ge.getInheritedFactory).callFn([n.type.value]),g=new Pi(lt.Or,e,e.set(u));a.push(new Ia(g.callFn([t])))}else a.push(new Ia(s));let p=Em([new Da(o.name,ws)],a,ic,void 0,`${n.name}_Factory`);return e!==null&&(p=Ys([],[new Ga(e.name),new Ia(p)]).callFn([],void 0,!0)),{expression:p,statements:[],type:FU(n)}}function FU(n){let o=n.deps!==null&&n.deps!=="invalid"?zU(n.deps):Bc;return gr(Ht(ge.FactoryDeclaration,[Fx(n.type.type,n.typeArgumentCount),o]))}function U5(n,o){return n.map((e,t)=>RU(e,o,t))}function RU(n,o,e){if(n.token===null)return Ht(ge.invalidFactoryDep).callFn([De(e)]);if(n.attributeNameType===null){let t=0|(n.self?2:0)|(n.skipSelf?4:0)|(n.host?1:0)|(n.optional?8:0)|(o===Ed.Pipe?16:0),i=t!==0||n.optional?De(t):null,a=[n.token];i&&a.push(i);let s=BU(o);return Ht(s).callFn(a)}else return Ht(ge.injectAttribute).callFn([n.token])}function zU(n){let o=!1,e=n.map(t=>{let i=LU(t);return i!==null?(o=!0,i):De(null)});return o?gr(io(e)):Bc}function LU(n){let o=[];return n.attributeNameType!==null&&o.push({key:"attribute",value:n.attributeNameType,quoted:!1}),n.optional&&o.push({key:"optional",value:De(!0),quoted:!1}),n.host&&o.push({key:"host",value:De(!0),quoted:!1}),n.self&&o.push({key:"self",value:De(!0),quoted:!1}),n.skipSelf&&o.push({key:"skipSelf",value:De(!0),quoted:!1}),o.length>0?yl(o):null}function W5(n){return n.delegateType!==void 0}function VU(n){return n.expression!==void 0}function BU(n){switch(n){case Ed.Component:case Ed.Directive:case Ed.Pipe:return ge.directiveInject;case Ed.NgModule:case Ed.Injectable:default:return ge.inject}}var lu=class{start;end;constructor(o,e){this.start=o,this.end=e}toAbsolute(o){return new qs(o+this.start,o+this.end)}},co=class{span;sourceSpan;constructor(o,e){this.span=o,this.sourceSpan=e}toString(){return"AST"}},Uf=class extends co{nameSpan;constructor(o,e,t){super(o,e),this.nameSpan=t}},Ar=class extends co{visit(o,e=null){return o.visitEmptyExpr?.(this,e)}},Hc=class extends co{visit(o,e=null){return o.visitImplicitReceiver(this,e)}},Wf=class extends co{visit(o,e=null){return o.visitThisReceiver?.(this,e)}},Lg=class extends co{expressions;constructor(o,e,t){super(o,e),this.expressions=t}visit(o,e=null){return o.visitChain(this,e)}},Bb=class extends co{condition;trueExp;falseExp;constructor(o,e,t,i,a){super(o,e),this.condition=t,this.trueExp=i,this.falseExp=a}visit(o,e=null){return o.visitConditional(this,e)}},zc=class extends Uf{receiver;name;constructor(o,e,t,i,a){super(o,e,t),this.receiver=i,this.name=a}visit(o,e=null){return o.visitPropertyRead(this,e)}},Gf=class extends Uf{receiver;name;constructor(o,e,t,i,a){super(o,e,t),this.receiver=i,this.name=a}visit(o,e=null){return o.visitSafePropertyRead(this,e)}},cu=class extends co{receiver;key;constructor(o,e,t,i){super(o,e),this.receiver=t,this.key=i}visit(o,e=null){return o.visitKeyedRead(this,e)}},qf=class extends co{receiver;key;constructor(o,e,t,i){super(o,e),this.receiver=t,this.key=i}visit(o,e=null){return o.visitSafeKeyedRead(this,e)}},yb=(function(n){return n[n.ReferencedByName=0]="ReferencedByName",n[n.ReferencedDirectly=1]="ReferencedDirectly",n})(yb||{}),jb=class extends Uf{exp;name;args;type;constructor(o,e,t,i,a,s,d){super(o,e,d),this.exp=t,this.name=i,this.args=a,this.type=s}visit(o,e=null){return o.visitPipe(this,e)}},Cs=class extends co{value;constructor(o,e,t){super(o,e),this.value=t}visit(o,e=null){return o.visitLiteralPrimitive(this,e)}},Qf=class extends co{expressions;constructor(o,e,t){super(o,e),this.expressions=t}visit(o,e=null){return o.visitLiteralArray(this,e)}},$b=class extends co{expression;constructor(o,e,t){super(o,e),this.expression=t}visit(o,e=null){return o.visitSpreadElement(this,e)}},du=class extends co{keys;values;constructor(o,e,t,i){super(o,e),this.keys=t,this.values=i}visit(o,e=null){return o.visitLiteralMap(this,e)}},F0=class extends co{strings;expressions;constructor(o,e,t,i){super(o,e),this.strings=t,this.expressions=i}visit(o,e=null){return o.visitInterpolation(this,e)}},Zr=class extends co{operation;left;right;constructor(o,e,t,i,a){super(o,e),this.operation=t,this.left=i,this.right=a}visit(o,e=null){return o.visitBinary(this,e)}static isAssignmentOperation(o){return o==="="||o==="+="||o==="-="||o==="*="||o==="/="||o==="%="||o==="**="||o==="&&="||o==="||="||o==="??="}},Dg=class n extends Zr{operator;expr;left=null;right=null;operation=null;static createMinus(o,e,t){return new n(o,e,"-",t,"-",new Cs(o,e,0),t)}static createPlus(o,e,t){return new n(o,e,"+",t,"-",t,new Cs(o,e,0))}constructor(o,e,t,i,a,s,d){super(o,e,a,s,d),this.operator=t,this.expr=i}visit(o,e=null){return o.visitUnary!==void 0?o.visitUnary(this,e):o.visitBinary(this,e)}},Kf=class extends co{expression;constructor(o,e,t){super(o,e),this.expression=t}visit(o,e=null){return o.visitPrefixNot(this,e)}},Xf=class extends co{expression;constructor(o,e,t){super(o,e),this.expression=t}visit(o,e=null){return o.visitTypeofExpression(this,e)}},Yf=class extends co{expression;constructor(o,e,t){super(o,e),this.expression=t}visit(o,e=null){return o.visitVoidExpression(this,e)}},Zf=class extends co{expression;constructor(o,e,t){super(o,e),this.expression=t}visit(o,e=null){return o.visitNonNullAssert(this,e)}},Vg=class extends co{receiver;args;argumentSpan;constructor(o,e,t,i,a){super(o,e),this.receiver=t,this.args=i,this.argumentSpan=a}visit(o,e=null){return o.visitCall(this,e)}},Hb=class extends co{receiver;args;argumentSpan;constructor(o,e,t,i,a){super(o,e),this.receiver=t,this.args=i,this.argumentSpan=a}visit(o,e=null){return o.visitSafeCall(this,e)}},Jf=class extends co{tag;template;constructor(o,e,t,i){super(o,e),this.tag=t,this.template=i}visit(o,e){return o.visitTaggedTemplateLiteral(this,e)}},e0=class extends co{elements;expressions;constructor(o,e,t,i){super(o,e),this.elements=t,this.expressions=i}visit(o,e){return o.visitTemplateLiteral(this,e)}},Ub=class extends co{text;constructor(o,e,t){super(o,e),this.text=t}visit(o,e){return o.visitTemplateLiteralElement(this,e)}},t0=class extends co{expression;constructor(o,e,t){super(o,e),this.expression=t}visit(o,e){return o.visitParenthesizedExpression(this,e)}},wP=class{name;span;sourceSpan;constructor(o,e,t){this.name=o,this.span=e,this.sourceSpan=t}},Wb=class extends co{parameters;body;constructor(o,e,t,i){super(o,e),this.parameters=t,this.body=i}visit(o,e){return o.visitArrowFunction(this,e)}},Gb=class extends co{body;flags;constructor(o,e,t,i){super(o,e),this.body=t,this.flags=i}visit(o,e){return o.visitRegularExpressionLiteral(this,e)}},qs=class{start;end;constructor(o,e){this.start=o,this.end=e}},xs=class extends co{ast;source;location;errors;constructor(o,e,t,i,a){super(new lu(0,e===null?0:e.length),new qs(i,e===null?i:i+e.length)),this.ast=o,this.source=e,this.location=t,this.errors=a}visit(o,e=null){return o.visitASTWithSource?o.visitASTWithSource(this,e):this.ast.visit(o,e)}toString(){return`${this.source} in ${this.location}`}},n0=class{sourceSpan;key;value;constructor(o,e,t){this.sourceSpan=o,this.key=e,this.value=t}},MP=class{sourceSpan;key;value;constructor(o,e,t){this.sourceSpan=o,this.key=e,this.value=t}},Bg=class{visit(o,e){o.visit(this,e)}visitUnary(o,e){this.visit(o.expr,e)}visitBinary(o,e){this.visit(o.left,e),this.visit(o.right,e)}visitChain(o,e){this.visitAll(o.expressions,e)}visitConditional(o,e){this.visit(o.condition,e),this.visit(o.trueExp,e),this.visit(o.falseExp,e)}visitPipe(o,e){this.visit(o.exp,e),this.visitAll(o.args,e)}visitImplicitReceiver(o,e){}visitThisReceiver(o,e){}visitInterpolation(o,e){this.visitAll(o.expressions,e)}visitKeyedRead(o,e){this.visit(o.receiver,e),this.visit(o.key,e)}visitLiteralArray(o,e){this.visitAll(o.expressions,e)}visitLiteralMap(o,e){this.visitAll(o.values,e)}visitLiteralPrimitive(o,e){}visitPrefixNot(o,e){this.visit(o.expression,e)}visitTypeofExpression(o,e){this.visit(o.expression,e)}visitVoidExpression(o,e){this.visit(o.expression,e)}visitNonNullAssert(o,e){this.visit(o.expression,e)}visitPropertyRead(o,e){this.visit(o.receiver,e)}visitSafePropertyRead(o,e){this.visit(o.receiver,e)}visitSafeKeyedRead(o,e){this.visit(o.receiver,e),this.visit(o.key,e)}visitCall(o,e){this.visit(o.receiver,e),this.visitAll(o.args,e)}visitSafeCall(o,e){this.visit(o.receiver,e),this.visitAll(o.args,e)}visitTemplateLiteral(o,e){for(let t=0;t<o.elements.length;t++){this.visit(o.elements[t],e);let i=t<o.expressions.length?o.expressions[t]:null;i!==null&&this.visit(i,e)}}visitTemplateLiteralElement(o,e){}visitTaggedTemplateLiteral(o,e){this.visit(o.tag,e),this.visit(o.template,e)}visitParenthesizedExpression(o,e){this.visit(o.expression,e)}visitArrowFunction(o,e){this.visit(o.body,e)}visitRegularExpressionLiteral(o,e){}visitSpreadElement(o,e){this.visit(o.expression,e)}visitEmptyExpr(o,e){}visitAll(o,e){for(let t of o)this.visit(t,e)}},Sg=class{name;expression;type;sourceSpan;keySpan;valueSpan;isLiteral;isLegacyAnimation;isAnimation;constructor(o,e,t,i,a,s){this.name=o,this.expression=e,this.type=t,this.sourceSpan=i,this.keySpan=a,this.valueSpan=s,this.isLiteral=this.type===Ac.LITERAL_ATTR,this.isLegacyAnimation=this.type===Ac.LEGACY_ANIMATION,this.isAnimation=this.type===Ac.ANIMATION}},Ac=(function(n){return n[n.DEFAULT=0]="DEFAULT",n[n.LITERAL_ATTR=1]="LITERAL_ATTR",n[n.LEGACY_ANIMATION=2]="LEGACY_ANIMATION",n[n.TWO_WAY=3]="TWO_WAY",n[n.ANIMATION=4]="ANIMATION",n})(Ac||{}),is=(function(n){return n[n.Regular=0]="Regular",n[n.LegacyAnimation=1]="LegacyAnimation",n[n.TwoWay=2]="TwoWay",n[n.Animation=3]="Animation",n})(is||{}),qb=class{name;targetOrPhase;type;handler;sourceSpan;handlerSpan;keySpan;constructor(o,e,t,i,a,s,d){this.name=o,this.targetOrPhase=e,this.type=t,this.handler=i,this.sourceSpan=a,this.handlerSpan=s,this.keySpan=d}},SP=class{name;value;sourceSpan;keySpan;valueSpan;constructor(o,e,t,i,a){this.name=o,this.value=e,this.sourceSpan=t,this.keySpan=i,this.valueSpan=a}},Fi=(function(n){return n[n.Property=0]="Property",n[n.Attribute=1]="Attribute",n[n.Class=2]="Class",n[n.Style=3]="Style",n[n.LegacyAnimation=4]="LegacyAnimation",n[n.TwoWay=5]="TwoWay",n[n.Animation=6]="Animation",n})(Fi||{}),Qb=class{name;type;securityContext;value;unit;sourceSpan;keySpan;valueSpan;constructor(o,e,t,i,a,s,d,p){this.name=o,this.type=e,this.securityContext=t,this.value=i,this.unit=a,this.sourceSpan=s,this.keySpan=d,this.valueSpan=p}},Nc=(function(n){return n[n.RAW_TEXT=0]="RAW_TEXT",n[n.ESCAPABLE_RAW_TEXT=1]="ESCAPABLE_RAW_TEXT",n[n.PARSABLE_DATA=2]="PARSABLE_DATA",n})(Nc||{});function hr(n,o=!0){if(n[0]!=":")return[null,n];let e=n.indexOf(":",1);if(e===-1){if(o)throw new Error(`Unsupported format "${n}" expecting ":namespace:name"`);return[null,n]}return[n.slice(1,e),n.slice(e+1)]}function G5(n){return hr(n)[1]==="ng-container"}function kP(n){return hr(n)[1]==="ng-content"}function jU(n){return hr(n)[1]==="ng-template"}function PP(n){return n===null?null:hr(n)[0]}function wb(n,o){return n?`:${n}:${o}`:o}var Rx=class{value;sourceSpan;constructor(o,e){this.value=o,this.sourceSpan=e}visit(o){throw new Error("visit() not implemented for Comment")}},Qp=class{value;sourceSpan;constructor(o,e){this.value=o,this.sourceSpan=e}visit(o){return o.visitText(this)}},jg=class{value;sourceSpan;i18n;constructor(o,e,t){this.value=o,this.sourceSpan=e,this.i18n=t}visit(o){return o.visitBoundText(this)}},$g=class{name;value;sourceSpan;keySpan;valueSpan;i18n;constructor(o,e,t,i,a,s){this.name=o,this.value=e,this.sourceSpan=t,this.keySpan=i,this.valueSpan=a,this.i18n=s}visit(o){return o.visitTextAttribute(this)}},TP=class n{name;type;securityContext;value;unit;sourceSpan;keySpan;valueSpan;i18n;constructor(o,e,t,i,a,s,d,p,u){this.name=o,this.type=e,this.securityContext=t,this.value=i,this.unit=a,this.sourceSpan=s,this.keySpan=d,this.valueSpan=p,this.i18n=u}static fromBoundElementProperty(o,e){if(o.keySpan===void 0)throw new Error(`Unexpected state: keySpan must be defined for bound attributes but was not for ${o.name}: ${o.sourceSpan}`);return new n(o.name,o.type,o.securityContext,o.value,o.unit,o.sourceSpan,o.keySpan,o.valueSpan,e)}visit(o){return o.visitBoundAttribute(this)}},EP=class n{name;type;handler;target;phase;sourceSpan;handlerSpan;keySpan;constructor(o,e,t,i,a,s,d,p){this.name=o,this.type=e,this.handler=t,this.target=i,this.phase=a,this.sourceSpan=s,this.handlerSpan=d,this.keySpan=p}static fromParsedEvent(o){let e=o.type===is.Regular?o.targetOrPhase:null,t=o.type===is.LegacyAnimation?o.targetOrPhase:null;if(o.keySpan===void 0)throw new Error(`Unexpected state: keySpan must be defined for bound event but was not for ${o.name}: ${o.sourceSpan}`);return new n(o.name,o.type,o.handler,e,t,o.sourceSpan,o.handlerSpan,o.keySpan)}visit(o){return o.visitBoundEvent(this)}},Uc=class{name;attributes;inputs;outputs;directives;children;references;isSelfClosing;sourceSpan;startSourceSpan;endSourceSpan;isVoid;i18n;constructor(o,e,t,i,a,s,d,p,u,g,C,M,x){this.name=o,this.attributes=e,this.inputs=t,this.outputs=i,this.directives=a,this.children=s,this.references=d,this.isSelfClosing=p,this.sourceSpan=u,this.startSourceSpan=g,this.endSourceSpan=C,this.isVoid=M,this.i18n=x}visit(o){return o.visitElement(this)}},Wc=class{nameSpan;sourceSpan;prefetchSpan;whenOrOnSourceSpan;hydrateSpan;constructor(o,e,t,i,a){this.nameSpan=o,this.sourceSpan=e,this.prefetchSpan=t,this.whenOrOnSourceSpan=i,this.hydrateSpan=a}visit(o){return o.visitDeferredTrigger(this)}},Kb=class extends Wc{value;constructor(o,e,t,i,a){super(null,e,t,i,a),this.value=o}},OP=class extends Wc{},DP=class extends Wc{},IP=class extends Wc{},Xb=class extends Wc{reference;constructor(o,e,t,i,a,s){super(e,t,i,a,s),this.reference=o}},AP=class extends Wc{delay;constructor(o,e,t,i,a,s){super(e,t,i,a,s),this.delay=o}},Yb=class extends Wc{reference;constructor(o,e,t,i,a,s){super(e,t,i,a,s),this.reference=o}},i0=class extends Wc{reference;options;constructor(o,e,t,i,a,s,d){super(t,i,a,s,d),this.reference=o,this.options=e}},Ss=class{nameSpan;sourceSpan;startSourceSpan;endSourceSpan;constructor(o,e,t,i){this.nameSpan=o,this.sourceSpan=e,this.startSourceSpan=t,this.endSourceSpan=i}},o0=class extends Ss{children;minimumTime;i18n;constructor(o,e,t,i,a,s,d){super(t,i,a,s),this.children=o,this.minimumTime=e,this.i18n=d}visit(o){return o.visitDeferredBlockPlaceholder(this)}},a0=class extends Ss{children;afterTime;minimumTime;i18n;constructor(o,e,t,i,a,s,d,p){super(i,a,s,d),this.children=o,this.afterTime=e,this.minimumTime=t,this.i18n=p}visit(o){return o.visitDeferredBlockLoading(this)}},r0=class extends Ss{children;i18n;constructor(o,e,t,i,a,s){super(e,t,i,a),this.children=o,this.i18n=s}visit(o){return o.visitDeferredBlockError(this)}},mu=class extends Ss{children;placeholder;loading;error;mainBlockSpan;i18n;triggers;prefetchTriggers;hydrateTriggers;definedTriggers;definedPrefetchTriggers;definedHydrateTriggers;constructor(o,e,t,i,a,s,d,p,u,g,C,M,x){super(p,u,C,M),this.children=o,this.placeholder=a,this.loading=s,this.error=d,this.mainBlockSpan=g,this.i18n=x,this.triggers=e,this.prefetchTriggers=t,this.hydrateTriggers=i,this.definedTriggers=Object.keys(e),this.definedPrefetchTriggers=Object.keys(t),this.definedHydrateTriggers=Object.keys(i)}visit(o){return o.visitDeferredBlock(this)}visitAll(o){this.visitTriggers(this.definedHydrateTriggers,this.hydrateTriggers,o),this.visitTriggers(this.definedTriggers,this.triggers,o),this.visitTriggers(this.definedPrefetchTriggers,this.prefetchTriggers,o),Gk(o,this.children);let e=[this.placeholder,this.loading,this.error].filter(t=>t!==null);Gk(o,e)}visitTriggers(o,e,t){Gk(t,o.map(i=>e[i]))}},Zb=class extends Ss{expression;groups;unknownBlocks;exhaustiveCheck;constructor(o,e,t,i,a,s,d,p){super(p,a,s,d),this.expression=o,this.groups=e,this.unknownBlocks=t,this.exhaustiveCheck=i}visit(o){return o.visitSwitchBlock(this)}},NP=class extends Ss{expression;constructor(o,e,t,i,a){super(a,e,t,i),this.expression=o}visit(o){return o.visitSwitchBlockCase(this)}},s0=class extends Ss{cases;children;i18n;constructor(o,e,t,i,a,s,d){super(s,t,i,a),this.cases=o,this.children=e,this.i18n=d}visit(o){return o.visitSwitchBlockCaseGroup(this)}},FP=class extends Ss{constructor(o,e,t,i){super(i,o,e,t)}visit(o){return o.visitSwitchExhaustiveCheck(this)}},Hg=class extends Ss{item;expression;trackBy;trackKeywordSpan;contextVariables;children;empty;mainBlockSpan;i18n;constructor(o,e,t,i,a,s,d,p,u,g,C,M,x){super(M,p,g,C),this.item=o,this.expression=e,this.trackBy=t,this.trackKeywordSpan=i,this.contextVariables=a,this.children=s,this.empty=d,this.mainBlockSpan=u,this.i18n=x}visit(o){return o.visitForLoopBlock(this)}},l0=class extends Ss{children;i18n;constructor(o,e,t,i,a,s){super(a,e,t,i),this.children=o,this.i18n=s}visit(o){return o.visitForLoopBlockEmpty(this)}},Jb=class extends Ss{branches;constructor(o,e,t,i,a){super(a,e,t,i),this.branches=o}visit(o){return o.visitIfBlock(this)}},Yp=class extends Ss{expression;children;expressionAlias;i18n;constructor(o,e,t,i,a,s,d,p){super(d,i,a,s),this.expression=o,this.children=e,this.expressionAlias=t,this.i18n=p}visit(o){return o.visitIfBlockBranch(this)}},ex=class{name;sourceSpan;nameSpan;constructor(o,e,t){this.name=o,this.sourceSpan=e,this.nameSpan=t}visit(o){return o.visitUnknownBlock(this)}},q3=class{name;value;sourceSpan;nameSpan;valueSpan;constructor(o,e,t,i,a){this.name=o,this.value=e,this.sourceSpan=t,this.nameSpan=i,this.valueSpan=a}visit(o){return o.visitLetDeclaration(this)}},Ef=class{componentName;tagName;fullName;attributes;inputs;outputs;directives;children;references;isSelfClosing;sourceSpan;startSourceSpan;endSourceSpan;i18n;constructor(o,e,t,i,a,s,d,p,u,g,C,M,x,b){this.componentName=o,this.tagName=e,this.fullName=t,this.attributes=i,this.inputs=a,this.outputs=s,this.directives=d,this.children=p,this.references=u,this.isSelfClosing=g,this.sourceSpan=C,this.startSourceSpan=M,this.endSourceSpan=x,this.i18n=b}visit(o){return o.visitComponent(this)}},NN=class{name;attributes;inputs;outputs;references;sourceSpan;startSourceSpan;endSourceSpan;i18n;constructor(o,e,t,i,a,s,d,p,u){this.name=o,this.attributes=e,this.inputs=t,this.outputs=i,this.references=a,this.sourceSpan=s,this.startSourceSpan=d,this.endSourceSpan=p,this.i18n=u}visit(o){return o.visitDirective(this)}},Qs=class{tagName;attributes;inputs;outputs;directives;templateAttrs;children;references;variables;isSelfClosing;sourceSpan;startSourceSpan;endSourceSpan;i18n;constructor(o,e,t,i,a,s,d,p,u,g,C,M,x,b){this.tagName=o,this.attributes=e,this.inputs=t,this.outputs=i,this.directives=a,this.templateAttrs=s,this.children=d,this.references=p,this.variables=u,this.isSelfClosing=g,this.sourceSpan=C,this.startSourceSpan=M,this.endSourceSpan=x,this.i18n=b}visit(o){return o.visitTemplate(this)}},Ug=class{selector;attributes;children;isSelfClosing;sourceSpan;startSourceSpan;endSourceSpan;i18n;name="ng-content";constructor(o,e,t,i,a,s,d,p){this.selector=o,this.attributes=e,this.children=t,this.isSelfClosing=i,this.sourceSpan=a,this.startSourceSpan=s,this.endSourceSpan=d,this.i18n=p}visit(o){return o.visitContent(this)}},Om=class{name;value;sourceSpan;keySpan;valueSpan;constructor(o,e,t,i,a){this.name=o,this.value=e,this.sourceSpan=t,this.keySpan=i,this.valueSpan=a}visit(o){return o.visitVariable(this)}},c0=class{name;value;sourceSpan;keySpan;valueSpan;constructor(o,e,t,i,a){this.name=o,this.value=e,this.sourceSpan=t,this.keySpan=i,this.valueSpan=a}visit(o){return o.visitReference(this)}},FN=class{vars;placeholders;sourceSpan;i18n;constructor(o,e,t,i){this.vars=o,this.placeholders=e,this.sourceSpan=t,this.i18n=i}visit(o){return o.visitIcu(this)}},d0=class{tagNames;bindings;listeners;sourceSpan;constructor(o,e,t,i){if(this.tagNames=o,this.bindings=e,this.listeners=t,this.sourceSpan=i,o.length===0)throw new Error("HostElement must have at least one tag name.")}visit(){throw new Error("HostElement cannot be visited")}};function Gk(n,o){let e=[];if(n.visit)for(let t of o)n.visit(t);else for(let t of o){let i=t.visit(n);i&&e.push(i)}return e}var os=class{nodes;placeholders;placeholderToMessage;meaning;description;customId;sources;id;legacyIds=[];messageString;constructor(o,e,t,i,a,s){this.nodes=o,this.placeholders=e,this.placeholderToMessage=t,this.meaning=i,this.description=a,this.customId=s,this.id=this.customId,this.messageString=$U(this.nodes),o.length?this.sources=[{filePath:o[0].sourceSpan.start.file.url,startLine:o[0].sourceSpan.start.line+1,startCol:o[0].sourceSpan.start.col+1,endLine:o[o.length-1].sourceSpan.end.line+1,endCol:o[0].sourceSpan.start.col+1}]:this.sources=[]}},uf=class{value;sourceSpan;constructor(o,e){this.value=o,this.sourceSpan=e}visit(o,e){return o.visitText(this,e)}},Id=class{children;sourceSpan;constructor(o,e){this.children=o,this.sourceSpan=e}visit(o,e){return o.visitContainer(this,e)}},tx=class{expression;type;cases;sourceSpan;expressionPlaceholder;constructor(o,e,t,i,a){this.expression=o,this.type=e,this.cases=t,this.sourceSpan=i,this.expressionPlaceholder=a}visit(o,e){return o.visitIcu(this,e)}},Dm=class{tag;attrs;startName;closeName;children;isVoid;sourceSpan;startSourceSpan;endSourceSpan;constructor(o,e,t,i,a,s,d,p,u){this.tag=o,this.attrs=e,this.startName=t,this.closeName=i,this.children=a,this.isVoid=s,this.sourceSpan=d,this.startSourceSpan=p,this.endSourceSpan=u}visit(o,e){return o.visitTagPlaceholder(this,e)}},m0=class{value;name;sourceSpan;constructor(o,e,t){this.value=o,this.name=e,this.sourceSpan=t}visit(o,e){return o.visitPlaceholder(this,e)}},Wg=class{value;name;sourceSpan;previousMessage;constructor(o,e,t){this.value=o,this.name=e,this.sourceSpan=t}visit(o,e){return o.visitIcuPlaceholder(this,e)}},Im=class{name;parameters;startName;closeName;children;sourceSpan;startSourceSpan;endSourceSpan;constructor(o,e,t,i,a,s,d,p){this.name=o,this.parameters=e,this.startName=t,this.closeName=i,this.children=a,this.sourceSpan=s,this.startSourceSpan=d,this.endSourceSpan=p}visit(o,e){return o.visitBlockPlaceholder(this,e)}};function $U(n){let o=new RP;return n.map(t=>t.visit(o)).join("")}var RP=class{visitText(o){return o.value}visitContainer(o){return o.children.map(e=>e.visit(this)).join("")}visitIcu(o){let e=Object.keys(o.cases).map(t=>`${t} {${o.cases[t].visit(this)}}`);return`{${o.expressionPlaceholder}, ${o.type}, ${e.join(" ")}}`}visitTagPlaceholder(o){let e=o.children.map(t=>t.visit(this)).join("");return`{$${o.startName}}${e}{$${o.closeName}}`}visitPlaceholder(o){return`{$${o.name}}`}visitIcuPlaceholder(o){return`{$${o.name}}`}visitBlockPlaceholder(o){let e=o.children.map(t=>t.visit(this)).join("");return`{$${o.startName}}${e}{$${o.closeName}}`}};var HU=class{visitTag(o){let e=this._serializeAttributes(o.attrs);if(o.children.length==0)return`<${o.name}${e}/>`;let t=o.children.map(i=>i.visit(this));return`<${o.name}${e}>${t.join("")}</${o.name}>`}visitText(o){return o.value}visitDeclaration(o){return`<?xml${this._serializeAttributes(o.attrs)} ?>`}_serializeAttributes(o){let e=Object.keys(o).map(t=>`${t}="${o[t]}"`).join(" ");return e.length>0?" "+e:""}visitDoctype(o){return`<!DOCTYPE ${o.rootTag} [
|
||
${o.dtd}
|
||
]>`}},MHe=new HU;function UU(n){return n.toUpperCase().replace(/[^A-Z0-9_]/g,"_")}var RN="i18n",zP="i18n-",WU="VAR_";function zN(n){return n===RN||n.startsWith(zP)}function GU(n){return n.attrs.some(o=>zN(o.name))}function LN(n){return n.nodes[0]}function Q3(n={},o){let e={};return n&&Object.keys(n).length&&Object.keys(n).forEach(t=>e[R0(t,o)]=n[t]),e}function R0(n,o=!0){let e=UU(n);if(!o)return e;let t=e.split("_");if(t.length===1)return n.toLowerCase();let i;/^\d+$/.test(t[t.length-1])&&(i=t.pop());let a=t.shift().toLowerCase();return t.length&&(a+=t.map(s=>s.charAt(0).toUpperCase()+s.slice(1).toLowerCase()).join("")),i?`${a}_${i}`:a}var qU=/[-.]/,K3="_t",Zs="ctx",Jg="rf";function VN(n,o){let e=null;return()=>(e||(n(new Ga(K3,void 0,ws)),e=di(o)),e)}function kg(n){return Array.isArray(n)?io(n.map(kg)):De(n,ic)}function q5(n,o){let e=Object.getOwnPropertyNames(n);return e.length===0?null:yl(e.map(t=>{let i=n[t],a,s,d,p;if(typeof i=="string")a=t,d=t,s=i,p=kg(s);else{d=t,a=i.classPropertyName,s=i.bindingPropertyName;let u=s!==a,g=i.transformFunction!==null,C=yf.None;if(i.isSignal&&(C|=yf.SignalBased),g&&(C|=yf.HasDecoratorInputTransform),o&&(u||g||C!==yf.None)){let M=[De(C),kg(s)];(u||g)&&(M.push(kg(a)),g&&M.push(i.transformFunction)),p=io(M)}else p=kg(s)}return{key:d,quoted:qU.test(d),value:p}}))}var Am=class{values=[];set(o,e){if(e){let t=this.values.find(i=>i.key===o);t?t.value=e:this.values.push({key:o,value:e,quoted:!1})}}toLiteralMap(){return yl(this.values)}};function QU(n){let o=n instanceof Uc?n.name:"ng-template",e=KU(n),t=new Ag,i=hr(o)[1];return t.setElement(i),Object.getOwnPropertyNames(e).forEach(a=>{let s=hr(a)[1],d=e[a];t.addAttribute(s,d),a.toLowerCase()==="class"&&d.trim().split(/\s+/).forEach(u=>t.addClassName(u))}),t}function KU(n){let o={};return n instanceof Qs&&n.tagName!=="ng-template"?n.templateAttrs.forEach(e=>o[e.name]=""):(n.attributes.forEach(e=>{zN(e.name)||(o[e.name]=e.value)}),n.inputs.forEach(e=>{(e.type===Fi.Property||e.type===Fi.TwoWay)&&(o[e.name]="")}),n.outputs.forEach(e=>{o[e.name]=""})),o}function Q5(n,o){let e=null,t={name:n.name,type:n.type,typeArgumentCount:n.typeArgumentCount,deps:[],target:Ed.Injectable};if(n.useClass!==void 0){let d=n.useClass.expression.isEquivalent(n.type.value),p;n.deps!==void 0&&(p=n.deps),p!==void 0?e=Hp(ze(q({},t),{delegate:n.useClass.expression,delegateDeps:p,delegateType:Vb.Class})):d?e=Hp(t):e={statements:[],expression:K5(n.type.value,n.useClass.expression,o)}}else n.useFactory!==void 0?n.deps!==void 0?e=Hp(ze(q({},t),{delegate:n.useFactory,delegateDeps:n.deps||[],delegateType:Vb.Function})):e={statements:[],expression:Ys([],n.useFactory.callFn([]))}:n.useValue!==void 0?e=Hp(ze(q({},t),{expression:n.useValue.expression})):n.useExisting!==void 0?e=Hp(ze(q({},t),{expression:Ht(ge.inject).callFn([n.useExisting.expression])})):e={statements:[],expression:K5(n.type.value,n.type.value,o)};let i=n.type.value,a=new Am;return a.set("token",i),a.set("factory",e.expression),n.providedIn.expression.value!==null&&a.set("providedIn",AU(n.providedIn)),{expression:Ht(ge.\u0275\u0275defineInjectable).callFn([a.toLiteralMap()],void 0,!0),type:XU(n),statements:e.statements}}function XU(n){return new xl(Ht(ge.InjectableDeclaration,[Fx(n.type.type,n.typeArgumentCount)]))}function K5(n,o,e){if(n.node===o.node)return o.prop("\u0275fac");if(!e)return X5(o);let t=Ht(ge.resolveForwardRef).callFn([o]);return X5(t)}function X5(n){let o=new Da("__ngFactoryType__",ws);return Ys([o],n.prop("\u0275fac").callFn([di(o.name)]))}var or=0,YU=8,X3=9,Zp=10,BN=11,jN=12,Y3=13,$N=32,LP=33,p0=34,HN=35,zx=36,ZU=37,nx=38,u0=39,ns=40,Ea=41,Y5=42,UN=43,Nr=44,ix=45,jp=46,gl=47,Fc=58,bs=59,Ig=60,nr=61,Ws=62,Z5=63,Z3=48,JU=55,WN=57,Vm=65,eW=69,tW=70,nW=88,eh=90,Lc=91,Jp=92,Od=93,iW=94,Bm=95,pu=97,oW=98,aW=101,J3=102,GN=110,qN=114,QN=116,KN=117,XN=118,YN=120,z0=122,fl=123,J5=124,es=125,ZN=160,fg=64,VP=96;function g0(n){return n>=X3&&n<=$N||n==ZN}function hl(n){return Z3<=n&&n<=WN}function Nm(n){return n>=pu&&n<=z0||n>=Vm&&n<=eh}function rW(n){return n>=pu&&n<=J3||n>=Vm&&n<=tW||hl(n)}function ox(n){return n===Zp||n===Y3}function e6(n){return Z3<=n&&n<=JU}function Of(n){return n===u0||n===p0||n===VP}var h0=class n{file;offset;line;col;constructor(o,e,t,i){this.file=o,this.offset=e,this.line=t,this.col=i}toString(){return this.offset!=null?`${this.file.url}@${this.line}:${this.col}`:this.file.url}moveBy(o){let e=this.file.content,t=e.length,i=this.offset,a=this.line,s=this.col;for(;i>0&&o<0;)if(i--,o++,e.charCodeAt(i)==Zp){a--;let p=e.substring(0,i-1).lastIndexOf(String.fromCharCode(Zp));s=p>0?i-p:i}else s--;for(;i<t&&o>0;){let d=e.charCodeAt(i);i++,o--,d==Zp?(a++,s=0):s++}return new n(this.file,i,a,s)}getContext(o,e){let t=this.file.content,i=this.offset;if(i!=null){i>t.length-1&&(i=t.length-1);let a=i,s=0,d=0;for(;s<o&&i>0&&(i--,s++,!(t[i]==`
|
||
`&&++d==e)););for(s=0,d=0;s<o&&a<t.length-1&&(a++,s++,!(t[a]==`
|
||
`&&++d==e)););return{before:t.substring(i,this.offset),after:t.substring(this.offset,a+1)}}return null}},ax=class{content;url;constructor(o,e){this.content=o,this.url=e}},In=class{start;end;fullStart;details;constructor(o,e,t=o,i=null){this.start=o,this.end=e,this.fullStart=t,this.details=i}toString(){return this.start.file.content.substring(this.start.offset,this.end.offset)}},Sm=(function(n){return n[n.WARNING=0]="WARNING",n[n.ERROR=1]="ERROR",n})(Sm||{}),dn=class extends Error{span;msg;level;relatedError;constructor(o,e,t=Sm.ERROR,i){super(e),this.span=o,this.msg=e,this.level=t,this.relatedError=i,Object.setPrototypeOf(this,new.target.prototype)}contextualMessage(){let o=this.span.start.getContext(100,3);return o?`${this.msg} ("${o.before}[${Sm[this.level]} ->]${o.after}")`:this.msg}toString(){let o=this.span.details?`, ${this.span.details}`:"";return`${this.contextualMessage()}: ${this.span.start}${o}`}};function sW(n,o,e){let t=`in ${n} ${o} in ${e}`,i=new ax("",t);return new In(new h0(i,-1,-1,-1),new h0(i,-1,-1,-1))}var lW=0;function cW(n){if(!n||!n.reference)return null;let o=n.reference;if(o.__anonymousType)return o.__anonymousType;if(o.__forward_ref__)return"__forward_ref__";let e=IN(o);return e.indexOf("(")>=0?(e=`anonymous_${lW++}`,o.__anonymousType=e):e=Up(e),e}function Up(n){return n.replace(/\W/g,"_")}var t6='(this&&this.__makeTemplateObject||function(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e})',BP=class extends yP{constructor(){super(!1)}visitWrappedNodeExpr(o,e){throw new Error("Cannot emit a WrappedNodeExpr in Javascript.")}visitDeclareVarStmt(o,e){return e.print(o,`var ${o.name}`),o.value&&(e.print(o," = "),o.value.visitExpression(this,e)),e.println(o,";"),null}visitTaggedTemplateLiteralExpr(o,e){let t=o.template.elements;return o.tag.visitExpression(this,e),e.print(o,`(${t6}(`),e.print(o,`[${t.map(i=>Gp(i.text,!1)).join(", ")}], `),e.print(o,`[${t.map(i=>Gp(i.rawText,!1)).join(", ")}])`),o.template.expressions.forEach(i=>{e.print(o,", "),i.visitExpression(this,e)}),e.print(o,")"),null}visitTemplateLiteralExpr(o,e){e.print(o,"`");for(let t=0;t<o.elements.length;t++){o.elements[t].visitExpression(this,e);let i=t<o.expressions.length?o.expressions[t]:null;i!==null&&(e.print(i,"${"),i.visitExpression(this,e),e.print(i,"}"))}e.print(o,"`")}visitTemplateLiteralElementExpr(o,e){return e.print(o,o.rawText),null}visitFunctionExpr(o,e){return e.print(o,`function${o.name?" "+o.name:""}(`),this._visitParams(o.params,e),e.println(o,") {"),e.incIndent(),this.visitAllStatements(o.statements,e),e.decIndent(),e.print(o,"}"),null}visitArrowFunctionExpr(o,e){if(e.print(o,"("),this._visitParams(o.params,e),e.print(o,") =>"),Array.isArray(o.body))e.println(o,"{"),e.incIndent(),this.visitAllStatements(o.body,e),e.decIndent(),e.print(o,"}");else{let t=o.body instanceof rc;t&&e.print(o,"("),o.body.visitExpression(this,e),t&&e.print(o,")")}return null}visitDeclareFunctionStmt(o,e){return e.print(o,`function ${o.name}(`),this._visitParams(o.params,e),e.println(o,") {"),e.incIndent(),this.visitAllStatements(o.statements,e),e.decIndent(),e.println(o,"}"),null}visitLocalizedString(o,e){e.print(o,`$localize(${t6}(`);let t=[o.serializeI18nHead()];for(let i=1;i<o.messageParts.length;i++)t.push(o.serializeI18nTemplatePart(i));return e.print(o,`[${t.map(i=>Gp(i.cooked,!1)).join(", ")}], `),e.print(o,`[${t.map(i=>Gp(i.raw,!1)).join(", ")}])`),o.expressions.forEach(i=>{e.print(o,", "),i.visitExpression(this,e)}),e.print(o,")"),null}_visitParams(o,e){this.visitAllObjects(t=>e.print(null,t.name),o,e,",")}},cb;function dW(){if(cb===void 0){let n=Tf.trustedTypes;if(cb=null,n)try{cb=n.createPolicy("angular#unsafe-jit",{createScript:o=>o})}catch{}}return cb}function mW(n){return dW()?.createScript(n)||n}function n6(...n){if(!Tf.trustedTypes)return new Function(...n);let o=n.slice(0,-1).join(","),e=n[n.length-1],t=`(function anonymous(${o}
|
||
) { ${e}
|
||
})`,i=Tf.eval(mW(t));return i.bind===void 0?new Function(...n):(i.toString=()=>t,i.bind(Tf))}var jP=class{evaluateStatements(o,e,t,i){let a=new $P(t),s=xP.createRoot();return e.length>0&&!pW(e[0])&&(e=[De("use strict").toStmt(),...e]),a.visitAllStatements(e,s),a.createReturnStmt(s),this.evaluateCode(o,s,a.getArgs(),i)}evaluateCode(o,e,t,i){let a=`"use strict";${e.toSource()}
|
||
//# sourceURL=${o}`,s=[],d=[];for(let u in t)d.push(t[u]),s.push(u);if(i){let u=n6(...s.concat("return null;")).toString(),g=u.slice(0,u.indexOf("return null;")).split(`
|
||
`).length-1;a+=`
|
||
${e.toSourceMapGenerator(o,g).toJsComment()}`}let p=n6(...s.concat(a));return this.executeFunction(p,d)}executeFunction(o,e){return o(...e)}},$P=class extends BP{refResolver;_evalArgNames=[];_evalArgValues=[];_evalExportedVars=[];constructor(o){super(),this.refResolver=o}createReturnStmt(o){new Ia(new rc(this._evalExportedVars.map(t=>new Rg(t,di(t),!1)))).visitStatement(this,o)}getArgs(){let o={};for(let e=0;e<this._evalArgNames.length;e++)o[this._evalArgNames[e]]=this._evalArgValues[e];return o}visitExternalExpr(o,e){return this._emitReferenceToExternal(o,this.refResolver.resolveExternalReference(o.value),e),null}visitWrappedNodeExpr(o,e){return this._emitReferenceToExternal(o,o.node,e),null}visitDeclareVarStmt(o,e){return o.hasModifier(ur.Exported)&&this._evalExportedVars.push(o.name),super.visitDeclareVarStmt(o,e)}visitDeclareFunctionStmt(o,e){return o.hasModifier(ur.Exported)&&this._evalExportedVars.push(o.name),super.visitDeclareFunctionStmt(o,e)}_emitReferenceToExternal(o,e,t){let i=this._evalArgValues.indexOf(e);if(i===-1){i=this._evalArgValues.length,this._evalArgValues.push(e);let a=cW({reference:e})||"val";this._evalArgNames.push(`jit_${a}_${i}`)}t.print(o,this._evalArgNames[i])}};function pW(n){return n.isEquivalent(De("use strict").toStmt())}function i6(n){let o=new Am;n.providers!==null&&o.set("providers",n.providers),n.imports.length>0&&o.set("imports",io(n.imports));let e=Ht(ge.defineInjector).callFn([o.toLiteralMap()],void 0,!0),t=uW(n);return{expression:e,type:t,statements:[]}}function uW(n){return new xl(Ht(ge.InjectorDeclaration,[new xl(n.type.type)]))}var HP=class{context;constructor(o){this.context=o}resolveExternalReference(o){if(o.moduleName!=="@angular/core")throw new Error(`Cannot resolve external reference to ${o.moduleName}, only references to @angular/core are supported.`);if(!this.context.hasOwnProperty(o.name))throw new Error(`No value provided for @angular/core symbol '${o.name}'.`);return this.context[o.name]}},rx=(function(n){return n[n.Inline=0]="Inline",n[n.SideEffect=1]="SideEffect",n[n.Omit=2]="Omit",n})(rx||{}),km=(function(n){return n[n.Global=0]="Global",n[n.Local=1]="Local",n})(km||{});function gW(n){let o=[],e=new Am;if(e.set("type",n.type.value),n.kind===km.Global&&n.bootstrap.length>0&&e.set("bootstrap",qp(n.bootstrap,n.containsForwardDecls)),n.selectorScopeMode===rx.Inline)n.declarations.length>0&&e.set("declarations",qp(n.declarations,n.containsForwardDecls)),n.imports.length>0&&e.set("imports",qp(n.imports,n.containsForwardDecls)),n.exports.length>0&&e.set("exports",qp(n.exports,n.containsForwardDecls));else if(n.selectorScopeMode===rx.SideEffect){let a=fW(n);a!==null&&o.push(a)}n.schemas!==null&&n.schemas.length>0&&e.set("schemas",io(n.schemas.map(a=>a.value))),n.id!==null&&(e.set("id",n.id),o.push(Ht(ge.registerNgModuleType).callFn([n.type.value,n.id]).toStmt()));let t=Ht(ge.defineNgModule).callFn([e.toLiteralMap()],void 0,!0),i=_W(n);return{expression:t,type:i,statements:o}}function hW(n){let o=new Am;return o.set("type",new _i(n.type)),n.bootstrap!==void 0&&o.set("bootstrap",new _i(n.bootstrap)),n.declarations!==void 0&&o.set("declarations",new _i(n.declarations)),n.imports!==void 0&&o.set("imports",new _i(n.imports)),n.exports!==void 0&&o.set("exports",new _i(n.exports)),n.schemas!==void 0&&o.set("schemas",new _i(n.schemas)),n.id!==void 0&&o.set("id",new _i(n.id)),Ht(ge.defineNgModule).callFn([o.toLiteralMap()])}function _W(n){if(n.kind===km.Local)return new xl(n.type.value);let{type:o,declarations:e,exports:t,imports:i,includeImportTypes:a,publicDeclarationTypes:s}=n;return new xl(Ht(ge.NgModuleDeclaration,[new xl(o.type),s===null?qk(e):vW(s),a?qk(i):Bc,qk(t)]))}function fW(n){let o=new Am;if(n.kind===km.Global?n.declarations.length>0&&o.set("declarations",qp(n.declarations,n.containsForwardDecls)):n.declarationsExpression&&o.set("declarations",n.declarationsExpression),n.kind===km.Global?n.imports.length>0&&o.set("imports",qp(n.imports,n.containsForwardDecls)):n.importsExpression&&o.set("imports",n.importsExpression),n.kind===km.Global?n.exports.length>0&&o.set("exports",qp(n.exports,n.containsForwardDecls)):n.exportsExpression&&o.set("exports",n.exportsExpression),n.kind===km.Local&&n.bootstrapExpression&&o.set("bootstrap",n.bootstrapExpression),Object.keys(o.values).length===0)return null;let e=new Ms(Ht(ge.setNgModuleScope),[n.type.value,o.toLiteralMap()]),t=DU(e),i=new Pm([],[t.toStmt()]);return new Ms(i,[]).toStmt()}function qk(n){let o=n.map(e=>N0(e.type));return n.length>0?gr(io(o)):Bc}function vW(n){let o=n.map(e=>N0(e));return n.length>0?gr(io(o)):Bc}function o6(n){let o=[];o.push({key:"name",value:De(n.pipeName??n.name),quoted:!1}),o.push({key:"type",value:n.type.value,quoted:!1}),o.push({key:"pure",value:De(n.pure),quoted:!1}),n.isStandalone===!1&&o.push({key:"standalone",value:De(!1),quoted:!1});let e=Ht(ge.definePipe).callFn([yl(o)],void 0,!0),t=CW(n);return{expression:e,type:t,statements:[]}}function CW(n){return new xl(Ht(ge.PipeDeclaration,[Fx(n.type.type,n.typeArgumentCount),new xl(new _r(n.pipeName)),new xl(new _r(n.isStandalone))]))}var Gg=(function(n){return n[n.Directive=0]="Directive",n[n.Pipe=1]="Pipe",n[n.NgModule=2]="NgModule",n})(Gg||{}),bW=new Set(["inherit","initial","revert","unset","alternate","alternate-reverse","normal","reverse","backwards","both","forwards","none","paused","running","ease","ease-in","ease-in-out","ease-out","linear","step-start","step-end","end","jump-both","jump-end","jump-none","jump-start","start"]),xW=["@media","@supports","@document","@layer","@container","@scope","@starting-style"],UP=class{shimCssText(o,e,t=""){let i=[];o=o.replace(zW,d=>{if(d.match(LW))i.push(d);else{let p=d.match(RW);i.push(p?.join("")??"")}return tT}),o=this._insertDirectives(o);let a=this._scopeCssText(o,e,t),s=0;return a.replace(VW,()=>i[s++])}_insertDirectives(o){return o=this._insertPolyfillDirectivesInCssText(o),this._insertPolyfillRulesInCssText(o)}_scopeKeyframesRelatedCss(o,e){let t=new Set,i=db(o,a=>this._scopeLocalKeyframeDeclarations(a,e,t));return db(i,a=>this._scopeAnimationRule(a,e,t))}_scopeLocalKeyframeDeclarations(o,e,t){return ze(q({},o),{selector:o.selector.replace(/(^@(?:-webkit-)?keyframes(?:\s+))(['"]?)(.+)\2(\s*)$/,(i,a,s,d,p)=>(t.add(s6(d,s)),`${a}${s}${e}_${d}${s}${p}`))})}_scopeAnimationKeyframe(o,e,t){return o.replace(/^(\s*)(['"]?)(.+?)\2(\s*)$/,(i,a,s,d,p)=>(d=`${t.has(s6(d,s))?e+"_":""}${d}`,`${a}${s}${d}${s}${p}`))}_animationDeclarationKeyframesRe=/(^|\s+|,)(?:(?:(['"])((?:\\\\|\\\2|(?!\2).)+)\2)|(-?[A-Za-z][\w\-]*))(?=[,\s]|$)/g;_scopeAnimationRule(o,e,t){let i=o.content.replace(/((?:^|\s+|;)(?:-webkit-)?animation\s*:\s*),*([^;]+)/g,(a,s,d)=>s+d.replace(this._animationDeclarationKeyframesRe,(p,u,g="",C,M)=>C?`${u}${this._scopeAnimationKeyframe(`${g}${C}${g}`,e,t)}`:bW.has(M)?p:`${u}${this._scopeAnimationKeyframe(M,e,t)}`));return i=i.replace(/((?:^|\s+|;)(?:-webkit-)?animation-name(?:\s*):(?:\s*))([^;]+)/g,(a,s,d)=>`${s}${d.split(",").map(p=>this._scopeAnimationKeyframe(p,e,t)).join(",")}`),ze(q({},o),{content:i})}_insertPolyfillDirectivesInCssText(o){return o.replace(wW,function(...e){return e[2]+"{"})}_insertPolyfillRulesInCssText(o){return o.replace(MW,(...e)=>{let t=e[0].replace(e[1],"").replace(e[2],"");return e[4]+t})}_scopeCssText(o,e,t){let i=this._extractUnscopedRulesFromCssText(o);return o=this._insertPolyfillHostInCssText(o),o=this._convertColonHost(o),o=this._convertColonHostContext(o),o=this._convertShadowDOMSelectors(o),e&&(o=this._scopeKeyframesRelatedCss(o,e),o=this._scopeSelectors(o,e,t)),o=o+`
|
||
`+i,o.trim()}_extractUnscopedRulesFromCssText(o){let e="",t;for(a6.lastIndex=0;(t=a6.exec(o))!==null;){let i=t[0].replace(t[2],"").replace(t[1],t[4]);e+=i+`
|
||
|
||
`}return e}_convertColonHost(o){return o.replace(TW,(e,t,i)=>{if(t){let a=[];for(let s of this._splitOnTopLevelCommas(t,!0)){let d=s.trim();if(!d)break;let p=ym+d.replace(sx,"")+i;a.push(p)}return a.join(",")}else return ym+i})}*_splitOnTopLevelCommas(o,e){let t=o.length,i=0,a=0;for(let s=0;s<t;s++){let d=o.charCodeAt(s);if(d===ns)i++;else if(d===Ea){if(i--,i<0&&e){yield o.slice(a,s);return}}else d===Nr&&i===0&&(yield o.slice(a,s),a=s+1)}yield o.slice(a)}_convertColonHostContext(o){let e=[];for(let t of this._splitOnTopLevelCommas(o,!1))e.push(this._convertColonHostContextInSelectorPart(t));return e.join(",")}_convertColonHostContextInSelectorPart(o){return o.replace(OW,(e,t)=>{let i=[[]],a=e.indexOf(wg);for(;a!==-1;){let s=e.substring(a+wg.length);if(!s||s[0]!=="("){e=s,a=e.indexOf(wg);continue}let d=[],p=0;for(let g of this._splitOnTopLevelCommas(s.substring(1),!0)){p=p+g.length+1;let C=g.trim();C&&d.push(C)}let u=i.length;XW(i,d.length);for(let g=0;g<d.length;g++)for(let C=0;C<u;C++)i[C+g*u].push(d[g]);e=s.substring(p+1),a=e.indexOf(wg)}return i.map(s=>KW(s,e,t)).join(", ")})}_convertShadowDOMSelectors(o){return IW.reduce((e,t)=>e.replace(t," "),o)}_scopeSelectors(o,e,t){return db(o,i=>{let a=i.selector,s=i.content;return i.selector[0]!=="@"?a=this._scopeSelector({selector:a,scopeSelector:e,hostSelector:t,isParentSelector:!0}):xW.some(d=>i.selector.startsWith(d))?s=this._scopeSelectors(i.content,e,t):(i.selector.startsWith("@font-face")||i.selector.startsWith("@page"))&&(s=this._stripScopingSelectors(i.content)),new _0(a,s)})}_stripScopingSelectors(o){return db(o,e=>{let t=e.selector.replace(r6," ").replace(Qk," ");return new _0(t,e.content)})}_safeSelector;_shouldScopeIndicator;_scopeSelector({selector:o,scopeSelector:e,hostSelector:t,isParentSelector:i=!1}){let a=/ ?,(?!(?:[^)(]*(?:\([^)(]*(?:\([^)(]*(?:\([^)(]*\)[^)(]*)*\)[^)(]*)*\)[^)(]*)*\))) ?/;return o.split(a).map(s=>s.split(r6)).map(s=>{let[d,...p]=s;return[(g=>this._selectorNeedsScoping(g,e)?this._applySelectorScope({selector:g,scopeSelector:e,hostSelector:t,isParentSelector:i}):g)(d),...p].join(" ")}).join(", ")}_selectorNeedsScoping(o,e){return!this._makeScopeMatcher(e).test(o)}_makeScopeMatcher(o){let e=/\[/g,t=/\]/g;return o=o.replace(e,"\\[").replace(t,"\\]"),new RegExp("^("+o+")"+AW,"m")}_applySimpleSelectorScope(o,e,t){if(Pg.lastIndex=0,Pg.test(o)){let i=`[${t}]`,a=o;for(;a.match(Qk);)a=a.replace(Qk,(s,d)=>d.replace(/([^:\)]*)(:*)(.*)/,(p,u,g,C)=>u+i+g+C));return a.replace(Pg,i)}return e+" "+o}_applySelectorScope({selector:o,scopeSelector:e,hostSelector:t,isParentSelector:i}){let a=/\[is=([^\]]*)\]/g;e=e.replace(a,(P,...k)=>k[0]);let s=`[${e}]`,d=P=>{let k=P.trim();if(!k)return P;if(P.includes(ym)){if(k=this._applySimpleSelectorScope(P,e,t),!P.match(DW)){let[S,O,A,D]=k.match(/([^:]*)(:*)([\s\S]*)/);k=O+s+A+D}}else{let S=P.replace(Pg,"");if(S.length>0){let O=S.match(/([^:]*)(:*)([\s\S]*)/);O&&(k=O[1]+s+O[2]+O[3])}}return k},p=P=>{let k="",S=[],O;for(;(O=gf.exec(P))!==null;){let A=1,D=gf.lastIndex;for(;D<P.length;){let F=P[D];if(D++,F==="("){A++;continue}if(F===")"){if(A--,A===0)break;continue}}S.push(`${O[0]}${P.slice(gf.lastIndex,D)}`),gf.lastIndex=D}return S.join("")===P?k=S.map(A=>{let[D]=A.match(gf)??[],F=A.slice(D?.length,-1);F.includes(ym)&&(this._shouldScopeIndicator=!0);let I=this._scopeSelector({selector:F,scopeSelector:e,hostSelector:t});return`${D}${I})`}).join(""):(this._shouldScopeIndicator=this._shouldScopeIndicator||P.includes(ym),k=this._shouldScopeIndicator?d(P):P),k};i&&(this._safeSelector=new WP(o),o=this._safeSelector.content());let u="",g=0,C,M=/( |>|\+|~(?!=))(?!([^)(]*(?:\([^)(]*(?:\([^)(]*(?:\([^)(]*\)[^)(]*)*\)[^)(]*)*\)[^)(]*)*\)))\s*/g,x=o.includes(ym);for((i||this._shouldScopeIndicator)&&(this._shouldScopeIndicator=!x);(C=M.exec(o))!==null;){let P=C[1],k=o.slice(g,C.index);if(k.match(/__esc-ph-(\d+)__/)&&o[C.index+1]?.match(/[a-fA-F\d]/))continue;let S=p(k);u+=`${S} ${P} `,g=M.lastIndex}let b=o.substring(g);return u+=p(b),this._safeSelector.restore(u)}_insertPolyfillHostInCssText(o){return o.replace(FW,wg).replace(NW,sx)}},WP=class{placeholders=[];index=0;_content;constructor(o){o=this._escapeRegexMatches(o,/(\[[^\]]*\])/g),o=o.replace(/(\\.)/g,(e,t)=>{let i=`__esc-ph-${this.index}__`;return this.placeholders.push(t),this.index++,i}),this._content=o.replace(PW,(e,t,i)=>{let a=`__ph-${this.index}__`;return this.placeholders.push(`(${i})`),this.index++,t+a})}restore(o){return o.replace(/__(?:ph|esc-ph)-(\d+)__/g,(e,t)=>this.placeholders[+t])}content(){return this._content}_escapeRegexMatches(o,e){return o.replace(e,(t,i)=>{let a=`__ph-${this.index}__`;return this.placeholders.push(i),this.index++,a})}},yW="(:(where|is)\\()?",gf=/:(where|is)\(/gi,wW=/polyfill-next-selector[^}]*content:[\s]*?(['"])(.*?)\1[;\s]*}([^{]*?){/gim,MW=/(polyfill-rule)[^}]*(content:[\s]*(['"])(.*?)\3)[;\s]*[^}]*}/gim,a6=/(polyfill-unscoped-rule)[^}]*(content:[\s]*(['"])(.*?)\3)[;\s]*[^}]*}/gim,sx="-shadowcsshost",wg="-shadowcsscontext",GP="[^)(]*",SW=String.raw`(?:\(${GP}\)|${GP})+?`,kW=String.raw`(?:\(${SW}\)|${GP})+?`,eT=String.raw`(?:\((${kW})\))`,PW=new RegExp(String.raw`(:nth-[-\w]+)`+eT,"g"),TW=new RegExp(sx+eT+"?([^,{]*)","gim"),EW=wg+eT+"?([^{]*)",OW=new RegExp(`${yW}(${EW})`,"gim"),ym=sx+"-no-combinator",DW=new RegExp(`${ym}(?![^(]*\\))`,"g"),Qk=/-shadowcsshost-no-combinator([^\s,]*)/,IW=[/::shadow/g,/::content/g,/\/shadow-deep\//g,/\/shadow\//g],r6=/(?:>>>)|(?:\/deep\/)|(?:::ng-deep)/g,AW="([>\\s~+[.,{:][\\s\\S]*)?$",Pg=/-shadowcsshost/gim,NW=/:host/gim,FW=/:host-context/gim,RW=/\r?\n/g,zW=/\/\*[\s\S]*?\*\//g,LW=/\/\*\s*#\s*source(Mapping)?URL=/g,tT="%COMMENT%",VW=new RegExp(tT,"g"),Kk="%BLOCK%",BW=new RegExp(`(\\s*(?:${tT}\\s*)*)([^;\\{\\}]+?)(\\s*)((?:{%BLOCK%}?\\s*;?)|(?:\\s*;))`,"g"),jW=new Map([["{","}"]]),JN="%COMMA_IN_PLACEHOLDER%",eF="%SEMI_IN_PLACEHOLDER%",tF="%COLON_IN_PLACEHOLDER%",$W=new RegExp(JN,"g"),HW=new RegExp(eF,"g"),UW=new RegExp(tF,"g"),_0=class{selector;content;constructor(o,e){this.selector=o,this.content=e}};function db(n,o){let e=qW(n),t=WW(e,jW,Kk),i=0,a=t.escapedString.replace(BW,(...s)=>{let d=s[2],p="",u=s[4],g="";u&&u.startsWith("{"+Kk)&&(p=t.blocks[i++],u=u.substring(Kk.length+1),g="{");let C=o(new _0(d,p));return`${s[1]}${C.selector}${s[3]}${g}${C.content}${u}`});return QW(a)}var qP=class{escapedString;blocks;constructor(o,e){this.escapedString=o,this.blocks=e}};function WW(n,o,e){let t=[],i=[],a=0,s=0,d=-1,p,u;for(let g=0;g<n.length;g++){let C=n[g];C==="\\"?g++:C===u?(a--,a===0&&(i.push(n.substring(d,g)),t.push(e),s=g,d=-1,p=u=void 0)):C===p?a++:a===0&&o.has(C)&&(p=C,u=o.get(C),a=1,d=g+1,t.push(n.substring(s,d)))}return d!==-1?(i.push(n.substring(d)),t.push(e)):t.push(n.substring(s)),new qP(t.join(""),i)}var GW={";":eF,",":JN,":":tF};function qW(n){let o=n,e=null;for(let t=0;t<o.length;t++){let i=o[t];if(i==="\\")t++;else if(e!==null)if(i===e)e=null;else{let a=GW[i];a&&(o=`${o.substr(0,t)}${a}${o.substr(t+1)}`,t+=a.length-1)}else(i==="'"||i==='"')&&(e=i)}return o}function QW(n){let o=n.replace($W,",");return o=o.replace(HW,";"),o=o.replace(UW,":"),o}function s6(n,o){return o?n.replace(/((?:^|[^\\])(?:\\\\)*)\\(?=['"])/g,"$1"):n}function KW(n,o,e=""){let t=ym;Pg.lastIndex=0;let i=Pg.test(o);if(n.length===0)return t+o;let a=[n.pop()||""];for(;n.length>0;){let s=a.length,d=n.pop();for(let p=0;p<s;p++){let u=a[p];a[s*2+p]=u+" "+d,a[s+p]=d+" "+u,a[p]=d+u}}return a.map(s=>i?`${e}${s}${o}`:`${e}${s}${t}${o}, ${e}${s} ${t}${o}`).join(",")}function XW(n,o){let e=n.length;for(let t=1;t<o;t++)for(let i=0;i<e;i++)n[i+t*e]=n[i].slice(0)}var j=(function(n){return n[n.ListEnd=0]="ListEnd",n[n.Statement=1]="Statement",n[n.Variable=2]="Variable",n[n.ElementStart=3]="ElementStart",n[n.Element=4]="Element",n[n.Template=5]="Template",n[n.ElementEnd=6]="ElementEnd",n[n.ContainerStart=7]="ContainerStart",n[n.Container=8]="Container",n[n.ContainerEnd=9]="ContainerEnd",n[n.DisableBindings=10]="DisableBindings",n[n.ConditionalCreate=11]="ConditionalCreate",n[n.ConditionalBranchCreate=12]="ConditionalBranchCreate",n[n.Conditional=13]="Conditional",n[n.EnableBindings=14]="EnableBindings",n[n.Text=15]="Text",n[n.Listener=16]="Listener",n[n.InterpolateText=17]="InterpolateText",n[n.Binding=18]="Binding",n[n.Property=19]="Property",n[n.StyleProp=20]="StyleProp",n[n.ClassProp=21]="ClassProp",n[n.StyleMap=22]="StyleMap",n[n.ClassMap=23]="ClassMap",n[n.Advance=24]="Advance",n[n.Pipe=25]="Pipe",n[n.Attribute=26]="Attribute",n[n.ExtractedAttribute=27]="ExtractedAttribute",n[n.Defer=28]="Defer",n[n.DeferOn=29]="DeferOn",n[n.DeferWhen=30]="DeferWhen",n[n.I18nMessage=31]="I18nMessage",n[n.DomProperty=32]="DomProperty",n[n.Namespace=33]="Namespace",n[n.ProjectionDef=34]="ProjectionDef",n[n.Projection=35]="Projection",n[n.RepeaterCreate=36]="RepeaterCreate",n[n.Repeater=37]="Repeater",n[n.TwoWayProperty=38]="TwoWayProperty",n[n.TwoWayListener=39]="TwoWayListener",n[n.DeclareLet=40]="DeclareLet",n[n.StoreLet=41]="StoreLet",n[n.I18nStart=42]="I18nStart",n[n.I18n=43]="I18n",n[n.I18nEnd=44]="I18nEnd",n[n.I18nExpression=45]="I18nExpression",n[n.I18nApply=46]="I18nApply",n[n.IcuStart=47]="IcuStart",n[n.IcuEnd=48]="IcuEnd",n[n.IcuPlaceholder=49]="IcuPlaceholder",n[n.I18nContext=50]="I18nContext",n[n.I18nAttributes=51]="I18nAttributes",n[n.SourceLocation=52]="SourceLocation",n[n.Animation=53]="Animation",n[n.AnimationString=54]="AnimationString",n[n.AnimationBinding=55]="AnimationBinding",n[n.AnimationListener=56]="AnimationListener",n[n.Control=57]="Control",n[n.ControlCreate=58]="ControlCreate",n})(j||{}),Jt=(function(n){return n[n.LexicalRead=0]="LexicalRead",n[n.Context=1]="Context",n[n.TrackContext=2]="TrackContext",n[n.ReadVariable=3]="ReadVariable",n[n.NextContext=4]="NextContext",n[n.Reference=5]="Reference",n[n.StoreLet=6]="StoreLet",n[n.ContextLetReference=7]="ContextLetReference",n[n.GetCurrentView=8]="GetCurrentView",n[n.RestoreView=9]="RestoreView",n[n.ResetView=10]="ResetView",n[n.PureFunctionExpr=11]="PureFunctionExpr",n[n.PureFunctionParameterExpr=12]="PureFunctionParameterExpr",n[n.PipeBinding=13]="PipeBinding",n[n.PipeBindingVariadic=14]="PipeBindingVariadic",n[n.SafePropertyRead=15]="SafePropertyRead",n[n.SafeKeyedRead=16]="SafeKeyedRead",n[n.SafeInvokeFunction=17]="SafeInvokeFunction",n[n.SafeTernaryExpr=18]="SafeTernaryExpr",n[n.EmptyExpr=19]="EmptyExpr",n[n.AssignTemporaryExpr=20]="AssignTemporaryExpr",n[n.ReadTemporaryExpr=21]="ReadTemporaryExpr",n[n.SlotLiteralExpr=22]="SlotLiteralExpr",n[n.ConditionalCase=23]="ConditionalCase",n[n.ConstCollected=24]="ConstCollected",n[n.TwoWayBindingSet=25]="TwoWayBindingSet",n[n.ArrowFunction=26]="ArrowFunction",n})(Jt||{}),vl=(function(n){return n[n.None=0]="None",n[n.AlwaysInline=1]="AlwaysInline",n})(vl||{}),ar=(function(n){return n[n.Context=0]="Context",n[n.Identifier=1]="Identifier",n[n.SavedView=2]="SavedView",n[n.Alias=3]="Alias",n})(ar||{}),Qt=(function(n){return n[n.Attribute=0]="Attribute",n[n.ClassName=1]="ClassName",n[n.StyleProperty=2]="StyleProperty",n[n.Property=3]="Property",n[n.Template=4]="Template",n[n.I18n=5]="I18n",n[n.LegacyAnimation=6]="LegacyAnimation",n[n.TwoWayProperty=7]="TwoWayProperty",n[n.Animation=8]="Animation",n})(Qt||{}),f0=(function(n){return n[n.Creation=0]="Creation",n[n.Postproccessing=1]="Postproccessing",n})(f0||{}),th=(function(n){return n[n.I18nText=0]="I18nText",n[n.I18nAttribute=1]="I18nAttribute",n})(th||{}),go=(function(n){return n[n.None=0]="None",n[n.ElementTag=1]="ElementTag",n[n.TemplateTag=2]="TemplateTag",n[n.OpenTag=4]="OpenTag",n[n.CloseTag=8]="CloseTag",n[n.ExpressionIndex=16]="ExpressionIndex",n})(go||{}),Oa=(function(n){return n[n.HTML=0]="HTML",n[n.SVG=1]="SVG",n[n.Math=2]="Math",n})(Oa||{}),lo=(function(n){return n[n.Idle=0]="Idle",n[n.Immediate=1]="Immediate",n[n.Timer=2]="Timer",n[n.Hover=3]="Hover",n[n.Interaction=4]="Interaction",n[n.Viewport=5]="Viewport",n[n.Never=6]="Never",n})(lo||{}),Kp=(function(n){return n[n.RootI18n=0]="RootI18n",n[n.Icu=1]="Icu",n[n.Attr=2]="Attr",n})(Kp||{}),ys=(function(n){return n[n.NgTemplate=0]="NgTemplate",n[n.Structural=1]="Structural",n[n.Block=2]="Block",n})(ys||{}),Je=(()=>{class n{static nextListId=0;debugListId=n.nextListId++;head={kind:j.ListEnd,next:null,prev:null,debugListId:this.debugListId};tail={kind:j.ListEnd,next:null,prev:null,debugListId:this.debugListId};constructor(){this.head.next=this.tail,this.tail.prev=this.head}push(e){if(Array.isArray(e)){for(let i of e)this.push(i);return}n.assertIsNotEnd(e),n.assertIsUnowned(e),e.debugListId=this.debugListId;let t=this.tail.prev;e.prev=t,t.next=e,e.next=this.tail,this.tail.prev=e}prepend(e){if(e.length===0)return;for(let a of e)n.assertIsNotEnd(a),n.assertIsUnowned(a),a.debugListId=this.debugListId;let t=this.head.next,i=this.head;for(let a of e)i.next=a,a.prev=i,i=a;i.next=t,t.prev=i}*[Symbol.iterator](){let e=this.head.next;for(;e!==this.tail;){n.assertIsOwned(e,this.debugListId);let t=e.next;yield e,e=t}}*reversed(){let e=this.tail.prev;for(;e!==this.head;){n.assertIsOwned(e,this.debugListId);let t=e.prev;yield e,e=t}}static replace(e,t){n.assertIsNotEnd(e),n.assertIsNotEnd(t),n.assertIsOwned(e),n.assertIsUnowned(t),t.debugListId=e.debugListId,e.prev!==null&&(e.prev.next=t,t.prev=e.prev),e.next!==null&&(e.next.prev=t,t.next=e.next),e.debugListId=null,e.prev=null,e.next=null}static replaceWithMany(e,t){if(t.length===0){n.remove(e);return}n.assertIsNotEnd(e),n.assertIsOwned(e);let i=e.debugListId;e.debugListId=null;for(let g of t)n.assertIsNotEnd(g),n.assertIsUnowned(g);let{prev:a,next:s}=e;e.prev=null,e.next=null;let d=a;for(let g of t)n.assertIsUnowned(g),g.debugListId=i,d.next=g,g.prev=d,g.next=null,d=g;let p=t[0],u=d;a!==null&&(a.next=p,p.prev=a),s!==null&&(s.prev=u,u.next=s)}static remove(e){n.assertIsNotEnd(e),n.assertIsOwned(e),e.prev.next=e.next,e.next.prev=e.prev,e.debugListId=null,e.prev=null,e.next=null}static insertBefore(e,t){if(Array.isArray(e)){for(let i of e)n.insertBefore(i,t);return}if(n.assertIsOwned(t),t.prev===null)throw new Error("AssertionError: illegal operation on list start");n.assertIsNotEnd(e),n.assertIsUnowned(e),e.debugListId=t.debugListId,e.prev=null,t.prev.next=e,e.prev=t.prev,e.next=t,t.prev=e}static insertAfter(e,t){if(n.assertIsOwned(t),t.next===null)throw new Error("AssertionError: illegal operation on list end");n.assertIsNotEnd(e),n.assertIsUnowned(e),e.debugListId=t.debugListId,t.next.prev=e,e.next=t.next,e.prev=t,t.next=e}static assertIsUnowned(e){if(e.debugListId!==null)throw new Error(`AssertionError: illegal operation on owned node: ${j[e.kind]}`)}static assertIsOwned(e,t){if(e.debugListId===null)throw new Error(`AssertionError: illegal operation on unowned node: ${j[e.kind]}`);if(t!==void 0&&e.debugListId!==t)throw new Error(`AssertionError: node belongs to the wrong list (expected ${t}, actual ${e.debugListId})`)}static assertIsNotEnd(e){if(e.kind===j.ListEnd)throw new Error("AssertionError: illegal operation on list head or tail")}}return n})();function Js(n){return q({kind:j.Statement,statement:n},An)}function Mm(n,o,e,t){return q({kind:j.Variable,xref:n,variable:o,initializer:e,flags:t},An)}var An={debugListId:null,prev:null,next:null},nF=Symbol("ConsumesSlot"),nT=Symbol("DependsOnSlotContext"),Cu=Symbol("ConsumesVars"),L0=Symbol("UsesVarOffset"),wl={[nF]:!0,numSlotsUsed:1},ks={[nT]:!0},Ps={[Cu]:!0};function nh(n){return n[nF]===!0}function v0(n){return n[nT]===!0}function Xk(n){return n[Cu]===!0}function l6(n){return n[L0]===!0}function YW(n,o,e){return q(q(q({kind:j.InterpolateText,target:n,interpolation:o,sourceSpan:e},ks),Ps),An)}var aa=class{strings;expressions;i18nPlaceholders;constructor(o,e,t){if(this.strings=o,this.expressions=e,this.i18nPlaceholders=t,t.length!==0&&t.length!==e.length)throw new Error(`Expected ${e.length} placeholders to match interpolation expression count, but got ${t.length}`)}};function uu(n,o,e,t,i,a,s,d,p,u,g){return q({kind:j.Binding,bindingKind:o,target:n,name:e,expression:t,unit:i,securityContext:a,isTextAttribute:s,isStructuralTemplateAttribute:d,templateKind:p,i18nContext:null,i18nMessage:u,sourceSpan:g},An)}function ZW(n,o,e,t,i,a,s,d,p,u){return q(q(q({kind:j.Property,target:n,name:o,expression:e,bindingKind:t,securityContext:i,sanitizer:null,isStructuralTemplateAttribute:a,templateKind:s,i18nContext:d,i18nMessage:p,sourceSpan:u},ks),Ps),An)}function JW(n,o,e,t,i,a,s,d,p){return q(q(q({kind:j.TwoWayProperty,target:n,name:o,expression:e,securityContext:t,sanitizer:null,isStructuralTemplateAttribute:i,templateKind:a,i18nContext:s,i18nMessage:d,sourceSpan:p},ks),Ps),An)}function eG(n,o,e,t,i){return q(q(q({kind:j.StyleProp,target:n,name:o,expression:e,unit:t,sourceSpan:i},ks),Ps),An)}function tG(n,o,e,t){return q(q(q({kind:j.ClassProp,target:n,name:o,expression:e,sourceSpan:t},ks),Ps),An)}function nG(n,o,e){return q(q(q({kind:j.StyleMap,target:n,expression:o,sourceSpan:e},ks),Ps),An)}function iG(n,o,e){return q(q(q({kind:j.ClassMap,target:n,expression:o,sourceSpan:e},ks),Ps),An)}function c6(n,o,e,t,i,a,s,d,p,u){return q(q(q({kind:j.Attribute,target:n,namespace:o,name:e,expression:t,securityContext:i,sanitizer:null,isTextAttribute:a,isStructuralTemplateAttribute:s,templateKind:d,i18nContext:null,i18nMessage:p,sourceSpan:u},ks),Ps),An)}function oG(n,o){return q({kind:j.Advance,delta:n,sourceSpan:o},An)}function iF(n,o,e,t){return q(q(q({kind:j.Conditional,target:n,test:o,conditions:e,processed:null,sourceSpan:t,contextValue:null},An),ks),Ps)}function aG(n,o,e,t){return q(q({kind:j.Repeater,target:n,targetSlot:o,collection:e,sourceSpan:t},An),ks)}function d6(n,o,e,t,i,a,s){return q({kind:j.AnimationBinding,name:n,target:o,animationKind:e,expression:t,i18nMessage:null,securityContext:i,sanitizer:null,sourceSpan:a,animationBindingKind:s},An)}function rG(n,o,e,t){return q(q(q({kind:j.DeferWhen,target:n,expr:o,modifier:e,sourceSpan:t},An),ks),Ps)}function oF(n,o,e,t,i,a,s,d,p,u,g){return q(q(q({kind:j.I18nExpression,context:n,target:o,i18nOwner:e,handle:t,expression:i,icuPlaceholder:a,i18nPlaceholder:s,resolutionTime:d,usage:p,name:u,sourceSpan:g},An),Ps),ks)}function sG(n,o,e){return q({kind:j.I18nApply,owner:n,handle:o,sourceSpan:e},An)}function lG(n,o,e,t){return q(q(q({kind:j.StoreLet,target:n,declaredName:o,value:e,sourceSpan:t},ks),Ps),An)}function cG(n,o){return q(q({kind:j.Control,sourceSpan:o,target:n},ks),An)}function Gc(n){return n instanceof oo}var oo=class extends Qi{constructor(o=null){super(null,o)}},ir=class n extends oo{name;kind=Jt.LexicalRead;constructor(o){super(),this.name=o}visitExpression(o,e){}isEquivalent(o){return this.name===o.name}isConstant(){return!1}transformInternalExpressions(){}clone(){return new n(this.name)}},lx=class n extends oo{target;targetSlot;offset;kind=Jt.Reference;constructor(o,e,t){super(),this.target=o,this.targetSlot=e,this.offset=t}visitExpression(){}isEquivalent(o){return o instanceof n&&o.target===this.target}isConstant(){return!1}transformInternalExpressions(){}clone(){return new n(this.target,this.targetSlot,this.offset)}},C0=class n extends oo{target;value;sourceSpan;kind=Jt.StoreLet;[Cu]=!0;[nT]=!0;constructor(o,e,t){super(),this.target=o,this.value=e,this.sourceSpan=t}visitExpression(){}isEquivalent(o){return o instanceof n&&o.target===this.target&&o.value.isEquivalent(this.value)}isConstant(){return!1}transformInternalExpressions(o,e){this.value=Bt(this.value,o,e)}clone(){return new n(this.target,this.value,this.sourceSpan)}},b0=class n extends oo{target;targetSlot;kind=Jt.ContextLetReference;constructor(o,e){super(),this.target=o,this.targetSlot=e}visitExpression(){}isEquivalent(o){return o instanceof n&&o.target===this.target}isConstant(){return!1}transformInternalExpressions(){}clone(){return new n(this.target,this.targetSlot)}},Fm=class n extends oo{view;kind=Jt.Context;constructor(o){super(),this.view=o}visitExpression(){}isEquivalent(o){return o instanceof n&&o.view===this.view}isConstant(){return!1}transformInternalExpressions(){}clone(){return new n(this.view)}},QP=class n extends oo{view;kind=Jt.TrackContext;constructor(o){super(),this.view=o}visitExpression(){}isEquivalent(o){return o instanceof n&&o.view===this.view}isConstant(){return!1}transformInternalExpressions(){}clone(){return new n(this.view)}},cx=class n extends oo{kind=Jt.NextContext;steps=1;visitExpression(){}isEquivalent(o){return o instanceof n&&o.steps===this.steps}isConstant(){return!1}transformInternalExpressions(){}clone(){let o=new n;return o.steps=this.steps,o}},KP=class n extends oo{kind=Jt.GetCurrentView;constructor(){super()}visitExpression(){}isEquivalent(o){return o instanceof n}isConstant(){return!1}transformInternalExpressions(){}clone(){return new n}},x0=class n extends oo{view;kind=Jt.RestoreView;constructor(o){super(),this.view=o}visitExpression(o,e){typeof this.view!="number"&&this.view.visitExpression(o,e)}isEquivalent(o){return!(o instanceof n)||typeof o.view!=typeof this.view?!1:typeof this.view=="number"?this.view===o.view:this.view.isEquivalent(o.view)}isConstant(){return!1}transformInternalExpressions(o,e){typeof this.view!="number"&&(this.view=Bt(this.view,o,e))}clone(){return new n(this.view instanceof Qi?this.view.clone():this.view)}},dx=class n extends oo{expr;kind=Jt.ResetView;constructor(o){super(),this.expr=o}visitExpression(o,e){this.expr.visitExpression(o,e)}isEquivalent(o){return o instanceof n&&this.expr.isEquivalent(o.expr)}isConstant(){return!1}transformInternalExpressions(o,e){this.expr=Bt(this.expr,o,e)}clone(){return new n(this.expr.clone())}},mx=class n extends oo{target;value;kind=Jt.TwoWayBindingSet;constructor(o,e){super(),this.target=o,this.value=e}visitExpression(o,e){this.target.visitExpression(o,e),this.value.visitExpression(o,e)}isEquivalent(o){return this.target.isEquivalent(o.target)&&this.value.isEquivalent(o.value)}isConstant(){return!1}transformInternalExpressions(o,e){this.target=Bt(this.target,o,e),this.value=Bt(this.value,o,e)}clone(){return new n(this.target,this.value)}},Ad=class n extends oo{xref;kind=Jt.ReadVariable;name=null;constructor(o){super(),this.xref=o}visitExpression(){}isEquivalent(o){return o instanceof n&&o.xref===this.xref}isConstant(){return!1}transformInternalExpressions(){}clone(){let o=new n(this.xref);return o.name=this.name,o}},gu=class n extends oo{kind=Jt.PureFunctionExpr;[Cu]=!0;[L0]=!0;varOffset=null;body;args;fn=null;constructor(o,e){super(),this.body=o,this.args=e}visitExpression(o,e){this.body?.visitExpression(o,e);for(let t of this.args)t.visitExpression(o,e)}isEquivalent(o){return!(o instanceof n)||o.args.length!==this.args.length?!1:o.body!==null&&this.body!==null&&o.body.isEquivalent(this.body)&&o.args.every((e,t)=>e.isEquivalent(this.args[t]))}isConstant(){return!1}transformInternalExpressions(o,e){this.body!==null?this.body=Bt(this.body,o,e|ai.InChildOperation):this.fn!==null&&(this.fn=Bt(this.fn,o,e));for(let t=0;t<this.args.length;t++)this.args[t]=Bt(this.args[t],o,e)}clone(){let o=new n(this.body?.clone()??null,this.args.map(e=>e.clone()));return o.fn=this.fn?.clone()??null,o.varOffset=this.varOffset,o}},Rm=class n extends oo{index;kind=Jt.PureFunctionParameterExpr;constructor(o){super(),this.index=o}visitExpression(){}isEquivalent(o){return o instanceof n&&o.index===this.index}isConstant(){return!0}transformInternalExpressions(){}clone(){return new n(this.index)}},hu=class n extends oo{target;targetSlot;name;args;kind=Jt.PipeBinding;[Cu]=!0;[L0]=!0;varOffset=null;constructor(o,e,t,i){super(),this.target=o,this.targetSlot=e,this.name=t,this.args=i}visitExpression(o,e){for(let t of this.args)t.visitExpression(o,e)}isEquivalent(){return!1}isConstant(){return!1}transformInternalExpressions(o,e){for(let t=0;t<this.args.length;t++)this.args[t]=Bt(this.args[t],o,e)}clone(){let o=new n(this.target,this.targetSlot,this.name,this.args.map(e=>e.clone()));return o.varOffset=this.varOffset,o}},y0=class n extends oo{target;targetSlot;name;args;numArgs;kind=Jt.PipeBindingVariadic;[Cu]=!0;[L0]=!0;varOffset=null;constructor(o,e,t,i,a){super(),this.target=o,this.targetSlot=e,this.name=t,this.args=i,this.numArgs=a}visitExpression(o,e){this.args.visitExpression(o,e)}isEquivalent(){return!1}isConstant(){return!1}transformInternalExpressions(o,e){this.args=Bt(this.args,o,e)}clone(){let o=new n(this.target,this.targetSlot,this.name,this.args.clone(),this.numArgs);return o.varOffset=this.varOffset,o}},qg=class n extends oo{receiver;name;kind=Jt.SafePropertyRead;constructor(o,e){super(),this.receiver=o,this.name=e}get index(){return this.name}visitExpression(o,e){this.receiver.visitExpression(o,e)}isEquivalent(){return!1}isConstant(){return!1}transformInternalExpressions(o,e){this.receiver=Bt(this.receiver,o,e)}clone(){return new n(this.receiver.clone(),this.name)}},Qg=class n extends oo{receiver;index;kind=Jt.SafeKeyedRead;constructor(o,e,t){super(t),this.receiver=o,this.index=e}visitExpression(o,e){this.receiver.visitExpression(o,e),this.index.visitExpression(o,e)}isEquivalent(){return!1}isConstant(){return!1}transformInternalExpressions(o,e){this.receiver=Bt(this.receiver,o,e),this.index=Bt(this.index,o,e)}clone(){return new n(this.receiver.clone(),this.index.clone(),this.sourceSpan)}},_u=class n extends oo{receiver;args;kind=Jt.SafeInvokeFunction;constructor(o,e){super(),this.receiver=o,this.args=e}visitExpression(o,e){this.receiver.visitExpression(o,e);for(let t of this.args)t.visitExpression(o,e)}isEquivalent(){return!1}isConstant(){return!1}transformInternalExpressions(o,e){this.receiver=Bt(this.receiver,o,e);for(let t=0;t<this.args.length;t++)this.args[t]=Bt(this.args[t],o,e)}clone(){return new n(this.receiver.clone(),this.args.map(o=>o.clone()))}},Kg=class n extends oo{guard;expr;kind=Jt.SafeTernaryExpr;constructor(o,e){super(),this.guard=o,this.expr=e}visitExpression(o,e){this.guard.visitExpression(o,e),this.expr.visitExpression(o,e)}isEquivalent(){return!1}isConstant(){return!1}transformInternalExpressions(o,e){this.guard=Bt(this.guard,o,e),this.expr=Bt(this.expr,o,e)}clone(){return new n(this.guard.clone(),this.expr.clone())}},w0=class n extends oo{kind=Jt.EmptyExpr;visitExpression(o,e){}isEquivalent(o){return o instanceof n}isConstant(){return!0}clone(){return new n}transformInternalExpressions(){}},qc=class n extends oo{expr;xref;kind=Jt.AssignTemporaryExpr;name=null;constructor(o,e){super(),this.expr=o,this.xref=e}visitExpression(o,e){this.expr.visitExpression(o,e)}isEquivalent(){return!1}isConstant(){return!1}transformInternalExpressions(o,e){this.expr=Bt(this.expr,o,e)}clone(){let o=new n(this.expr.clone(),this.xref);return o.name=this.name,o}},zm=class n extends oo{xref;kind=Jt.ReadTemporaryExpr;name=null;constructor(o){super(),this.xref=o}visitExpression(o,e){}isEquivalent(){return this.xref===this.xref}isConstant(){return!1}transformInternalExpressions(o,e){}clone(){let o=new n(this.xref);return o.name=this.name,o}},px=class n extends oo{slot;kind=Jt.SlotLiteralExpr;constructor(o){super(),this.slot=o}visitExpression(o,e){}isEquivalent(o){return o instanceof n&&o.slot===this.slot}isConstant(){return!0}clone(){return new n(this.slot)}transformInternalExpressions(){}},ux=class n extends oo{expr;target;targetSlot;alias;kind=Jt.ConditionalCase;constructor(o,e,t,i=null){super(),this.expr=o,this.target=e,this.targetSlot=t,this.alias=i}visitExpression(o,e){this.expr!==null&&this.expr.visitExpression(o,e)}isEquivalent(o){return o instanceof n&&o.expr===this.expr}isConstant(){return!0}clone(){return new n(this.expr,this.target,this.targetSlot)}transformInternalExpressions(o,e){this.expr!==null&&(this.expr=Bt(this.expr,o,e))}},M0=class n extends oo{expr;kind=Jt.ConstCollected;constructor(o){super(),this.expr=o}transformInternalExpressions(o,e){this.expr=o(this.expr,e)}visitExpression(o,e){this.expr.visitExpression(o,e)}isEquivalent(o){return o instanceof n?this.expr.isEquivalent(o.expr):!1}isConstant(){return this.expr.isConstant()}clone(){return new n(this.expr)}},XP=class n extends oo{parameters;body;kind=Jt.ArrowFunction;[Cu]=!0;[L0]=!0;contextName=Zs;currentViewName="view";varOffset=null;ops;constructor(o,e){super(),this.parameters=o,this.body=e,this.ops=new Je,this.ops.push([Js(new Ia(e,e.sourceSpan))])}visitExpression(o,e){for(let t of this.ops)wa(t,i=>{i.visitExpression(o,e)})}isEquivalent(o){return o instanceof n&&o.parameters.length===this.parameters.length&&o.parameters.every((e,t)=>e.isEquivalent(this.parameters[t]))&&o.body.isEquivalent(this.body)}isConstant(){return!1}transformInternalExpressions(o,e){for(let t of this.ops)ra(t,o,e|(ai.InChildOperation|ai.InArrowFunctionOperation))}clone(){let o=new n(this.parameters,this.body);return o.varOffset=this.varOffset,o.ops=this.ops,o}};function wa(n,o){ra(n,(e,t)=>(o(e,t),e),ai.None)}var ai=(function(n){return n[n.None=0]="None",n[n.InChildOperation=1]="InChildOperation",n[n.InArrowFunctionOperation=2]="InArrowFunctionOperation",n})(ai||{});function Yk(n,o,e){for(let t=0;t<n.expressions.length;t++)n.expressions[t]=Bt(n.expressions[t],o,e)}function ra(n,o,e){switch(n.kind){case j.StyleProp:case j.StyleMap:case j.ClassProp:case j.ClassMap:case j.AnimationString:case j.AnimationBinding:case j.Binding:n.expression instanceof aa?Yk(n.expression,o,e):n.expression=Bt(n.expression,o,e);break;case j.Property:case j.DomProperty:case j.Attribute:n.expression instanceof aa?Yk(n.expression,o,e):n.expression=Bt(n.expression,o,e),n.sanitizer=n.sanitizer&&Bt(n.sanitizer,o,e);break;case j.TwoWayProperty:n.expression=Bt(n.expression,o,e),n.sanitizer=n.sanitizer&&Bt(n.sanitizer,o,e);break;case j.I18nExpression:n.expression=Bt(n.expression,o,e);break;case j.InterpolateText:Yk(n.interpolation,o,e);break;case j.Statement:gx(n.statement,o,e);break;case j.Variable:n.initializer=Bt(n.initializer,o,e);break;case j.Conditional:for(let t of n.conditions)t.expr!==null&&(t.expr=Bt(t.expr,o,e));n.processed!==null&&(n.processed=Bt(n.processed,o,e)),n.contextValue!==null&&(n.contextValue=Bt(n.contextValue,o,e));break;case j.Animation:case j.AnimationListener:case j.Listener:case j.TwoWayListener:for(let t of n.handlerOps)ra(t,o,e|ai.InChildOperation);break;case j.ExtractedAttribute:n.expression=n.expression&&Bt(n.expression,o,e),n.trustedValueFn=n.trustedValueFn&&Bt(n.trustedValueFn,o,e);break;case j.RepeaterCreate:if(n.trackByOps===null)n.track=Bt(n.track,o,e);else for(let t of n.trackByOps)ra(t,o,e|ai.InChildOperation);n.trackByFn!==null&&(n.trackByFn=Bt(n.trackByFn,o,e));break;case j.Repeater:n.collection=Bt(n.collection,o,e);break;case j.Defer:n.loadingConfig!==null&&(n.loadingConfig=Bt(n.loadingConfig,o,e)),n.placeholderConfig!==null&&(n.placeholderConfig=Bt(n.placeholderConfig,o,e)),n.resolverFn!==null&&(n.resolverFn=Bt(n.resolverFn,o,e));break;case j.I18nMessage:for(let[t,i]of n.params)n.params.set(t,Bt(i,o,e));for(let[t,i]of n.postprocessingParams)n.postprocessingParams.set(t,Bt(i,o,e));break;case j.DeferWhen:n.expr=Bt(n.expr,o,e);break;case j.StoreLet:n.value=Bt(n.value,o,e);break;case j.Advance:case j.Container:case j.ContainerEnd:case j.ContainerStart:case j.DeferOn:case j.DisableBindings:case j.Element:case j.ElementEnd:case j.ElementStart:case j.EnableBindings:case j.I18n:case j.I18nApply:case j.I18nContext:case j.I18nEnd:case j.I18nStart:case j.IcuEnd:case j.IcuStart:case j.Namespace:case j.Pipe:case j.Projection:case j.ProjectionDef:case j.Template:case j.Text:case j.I18nAttributes:case j.IcuPlaceholder:case j.DeclareLet:case j.SourceLocation:case j.ConditionalCreate:case j.ConditionalBranchCreate:case j.Control:case j.ControlCreate:break;default:throw new Error(`AssertionError: transformExpressionsInOp doesn't handle ${j[n.kind]}`)}}function Bt(n,o,e){if(n instanceof oo)n.transformInternalExpressions(o,e);else if(n instanceof Pi)n.lhs=Bt(n.lhs,o,e),n.rhs=Bt(n.rhs,o,e);else if(n instanceof au)n.expr=Bt(n.expr,o,e);else if(n instanceof Xs)n.receiver=Bt(n.receiver,o,e);else if(n instanceof Fd)n.receiver=Bt(n.receiver,o,e),n.index=Bt(n.index,o,e);else if(n instanceof Ms){n.fn=Bt(n.fn,o,e);for(let t=0;t<n.args.length;t++)n.args[t]=Bt(n.args[t],o,e)}else if(n instanceof $c)for(let t=0;t<n.entries.length;t++)n.entries[t]=Bt(n.entries[t],o,e);else if(n instanceof rc)for(let t of n.entries)t instanceof Tm?t.expression=Bt(t.expression,o,e):t.value=Bt(t.value,o,e);else if(n instanceof jc)n.condition=Bt(n.condition,o,e),n.trueCase=Bt(n.trueCase,o,e),n.falseCase!==null&&(n.falseCase=Bt(n.falseCase,o,e));else if(n instanceof Ng)n.expr=Bt(n.expr,o,e);else if(n instanceof Db)n.expr=Bt(n.expr,o,e);else if(n instanceof Ab)for(let t=0;t<n.expressions.length;t++)n.expressions[t]=Bt(n.expressions[t],o,e);else if(n instanceof jf)n.condition=Bt(n.condition,o,e);else if(n instanceof Lf)n.tag=Bt(n.tag,o,e),n.template.expressions=n.template.expressions.map(t=>Bt(t,o,e));else if(n instanceof vu)if(Array.isArray(n.body))for(let t=0;t<n.body.length;t++)gx(n.body[t],o,e|ai.InChildOperation);else n.body=Bt(n.body,o,e|ai.InChildOperation);else if(!(n instanceof _i)){if(n instanceof Bf)for(let t=0;t<n.expressions.length;t++)n.expressions[t]=Bt(n.expressions[t],o,e);else if(n instanceof ac)n.expr=Bt(n.expr,o,e);else if(n instanceof ru)n.expression=Bt(n.expression,o,e);else if(!(n instanceof oc||n instanceof ou||n instanceof _r||n instanceof Fg))throw new Error(`Unhandled expression kind: ${n.constructor.name}`)}return o(n,e)}function gx(n,o,e){if(n instanceof fr)n.expr=Bt(n.expr,o,e);else if(n instanceof Ia)n.value=Bt(n.value,o,e);else if(n instanceof Ga)n.value!==void 0&&(n.value=Bt(n.value,o,e));else if(n instanceof Fb){n.condition=Bt(n.condition,o,e);for(let t of n.trueCase)gx(t,o,e);for(let t of n.falseCase)gx(t,o,e)}else throw new Error(`Unhandled statement kind: ${n.constructor.name}`)}function aF(n){return n instanceof _r&&typeof n.value=="string"}var vr=class{slot=null},dG=new Set([j.Element,j.ElementStart,j.Container,j.ContainerStart,j.Template,j.RepeaterCreate,j.ConditionalCreate,j.ConditionalBranchCreate]);function Lm(n){return dG.has(n.kind)}function mG(n,o,e,t,i,a){return q(q({kind:j.ElementStart,xref:o,tag:n,handle:new vr,attributes:null,localRefs:[],nonBindable:!1,namespace:e,i18nPlaceholder:t,startSourceSpan:i,wholeSourceSpan:a},wl),An)}function rF(n,o,e,t,i,a,s,d){return q(q({kind:j.Template,xref:n,templateKind:o,attributes:null,tag:e,handle:new vr,functionNameSuffix:t,decls:null,vars:null,localRefs:[],nonBindable:!1,namespace:i,i18nPlaceholder:a,startSourceSpan:s,wholeSourceSpan:d},wl),An)}function sF(n,o,e,t,i,a,s,d){return q(q({kind:j.ConditionalCreate,xref:n,templateKind:o,attributes:null,tag:e,handle:new vr,functionNameSuffix:t,decls:null,vars:null,localRefs:[],nonBindable:!1,namespace:i,i18nPlaceholder:a,startSourceSpan:s,wholeSourceSpan:d},wl),An)}function lF(n,o,e,t,i,a,s,d){return q(q({kind:j.ConditionalBranchCreate,xref:n,templateKind:o,attributes:null,tag:e,handle:new vr,functionNameSuffix:t,decls:null,vars:null,localRefs:[],nonBindable:!1,namespace:i,i18nPlaceholder:a,startSourceSpan:s,wholeSourceSpan:d},wl),An)}function pG(n,o,e,t,i,a,s,d,p,u){return ze(q(q(q({kind:j.RepeaterCreate,attributes:null,xref:n,handle:new vr,emptyView:o,track:t,trackByFn:null,trackByOps:null,tag:e,emptyTag:a,emptyAttributes:null,functionNameSuffix:"For",namespace:Oa.HTML,nonBindable:!1,localRefs:[],decls:null,vars:null,varNames:i,usesComponentInstance:!1,i18nPlaceholder:s,emptyI18nPlaceholder:d,startSourceSpan:p,wholeSourceSpan:u},wl),An),Ps),{numSlotsUsed:o===null?2:3})}function uG(n,o){return q({kind:j.ElementEnd,xref:n,sourceSpan:o},An)}function gG(n){return q({kind:j.DisableBindings,xref:n},An)}function hG(n){return q({kind:j.EnableBindings,xref:n},An)}function cF(n,o,e,t){return q(q({kind:j.Text,xref:n,handle:new vr,initialValue:o,icuPlaceholder:e,sourceSpan:t},wl),An)}function _G(n,o,e,t,i,a){return q({kind:j.AnimationString,name:n,target:o,animationKind:e,expression:t,i18nMessage:null,securityContext:i,sanitizer:null,sourceSpan:a},An)}function fG(n,o,e,t,i,a){let s=new Je;return s.push(t),q({kind:j.Animation,name:n,target:o,animationKind:e,handlerOps:s,handlerFnName:null,i18nMessage:null,securityContext:i,sanitizer:null,sourceSpan:a},An)}function iT(n,o,e,t,i,a,s,d,p){let u=new Je;return u.push(i),q({kind:j.Listener,target:n,targetSlot:o,tag:t,hostListener:d,name:e,handlerOps:u,handlerFnName:null,consumesDollarEvent:!1,isLegacyAnimationListener:a!==null,legacyAnimationPhase:a,eventTarget:s,sourceSpan:p},An)}function dF(n,o,e,t,i,a,s,d,p){let u=new Je;return u.push(i),q({kind:j.AnimationListener,target:n,targetSlot:o,tag:t,hostListener:d,name:e,animationKind:a,handlerOps:u,handlerFnName:null,consumesDollarEvent:!1,eventTarget:s,sourceSpan:p},An)}function mF(n,o,e,t,i,a){let s=new Je;return s.push(i),q({kind:j.TwoWayListener,target:n,targetSlot:o,tag:t,name:e,handlerOps:s,handlerFnName:null,sourceSpan:a},An)}function vG(n,o,e){return q(q({kind:j.Pipe,xref:n,handle:o,name:e},An),wl)}function CG(n){return q({kind:j.Namespace,active:n},An)}function bG(n){return q({kind:j.ProjectionDef,def:n},An)}function xG(n,o,e,t,i){return ze(q(q({kind:j.Projection,xref:n,handle:new vr,selector:o,i18nPlaceholder:e,fallbackView:t,projectionSlotIndex:0,attributes:null,localRefs:[],sourceSpan:i},An),wl),{numSlotsUsed:t===null?1:2})}function Cl(n,o,e,t,i,a,s,d){return q({kind:j.ExtractedAttribute,target:n,bindingKind:o,namespace:e,name:t,expression:i,i18nContext:a,i18nMessage:s,securityContext:d,trustedValueFn:null},An)}function yG(n,o,e,t,i,a){return ze(q(q({kind:j.Defer,xref:n,handle:new vr,mainView:o,mainSlot:e,loadingView:null,loadingSlot:null,loadingConfig:null,loadingMinimumTime:null,loadingAfterTime:null,placeholderView:null,placeholderSlot:null,placeholderConfig:null,placeholderMinimumTime:null,errorView:null,errorSlot:null,ownResolverFn:t,resolverFn:i,flags:null,sourceSpan:a},An),wl),{numSlotsUsed:2})}function xm(n,o,e,t){return q({kind:j.DeferOn,defer:n,trigger:o,modifier:e,sourceSpan:t},An)}function wG(n,o,e){return q(q({kind:j.DeclareLet,xref:n,declaredName:o,sourceSpan:e,handle:new vr},wl),An)}function MG(n,o,e,t,i,a,s,d){return q({kind:j.I18nMessage,xref:n,i18nContext:o,i18nBlock:e,message:t,messagePlaceholder:i,params:a,postprocessingParams:s,needsPostprocessing:d,subMessages:[]},An)}function Lx(n,o,e,t){return q(q({kind:j.I18nStart,xref:n,handle:new vr,root:e??n,message:o,messageIndex:null,subTemplateIndex:null,context:null,sourceSpan:t},An),wl)}function Vx(n,o){return q({kind:j.I18nEnd,xref:n,sourceSpan:o},An)}function SG(n,o,e,t){return q({kind:j.IcuStart,xref:n,message:o,messagePlaceholder:e,context:null,sourceSpan:t},An)}function kG(n){return q({kind:j.IcuEnd,xref:n},An)}function PG(n,o,e){return q({kind:j.IcuPlaceholder,xref:n,name:o,strings:e,expressionPlaceholders:[]},An)}function Zk(n,o,e,t,i){if(e===null&&n!==Kp.Attr)throw new Error("AssertionError: i18nBlock must be provided for non-attribute contexts.");return q({kind:j.I18nContext,contextKind:n,xref:o,i18nBlock:e,message:t,sourceSpan:i,params:new Map,postprocessingParams:new Map},An)}function pF(n,o,e){return q(q({kind:j.I18nAttributes,xref:n,handle:o,target:e,i18nAttributesConfig:null},An),wl)}function TG(n,o){return q({kind:j.SourceLocation,templatePath:n,locations:o},An)}function EG(n){return q({kind:j.ControlCreate,sourceSpan:n},An)}function OG(n,o,e,t,i,a){return q(q({kind:j.DomProperty,name:n,expression:o,bindingKind:e,i18nContext:t,securityContext:i,sanitizer:null,sourceSpan:a},Ps),An)}var uF="CTX_REF_MARKER",Dt=(function(n){return n[n.Tmpl=0]="Tmpl",n[n.Host=1]="Host",n[n.Both=2]="Both",n})(Dt||{}),vs=(function(n){return n[n.Full=0]="Full",n[n.DomOnly=1]="DomOnly",n})(vs||{}),hx=class{componentName;pool;mode;constructor(o,e,t){this.componentName=o,this.pool=e,this.mode=t}kind=Dt.Both;allocateXrefId(){return this.nextXrefId++}nextXrefId=0},S0=class extends hx{relativeContextFilePath;i18nUseExternalIds;deferMeta;allDeferrableDepsFn;relativeTemplatePath;enableDebugLocations;constructor(o,e,t,i,a,s,d,p,u){super(o,e,t),this.relativeContextFilePath=i,this.i18nUseExternalIds=a,this.deferMeta=s,this.allDeferrableDepsFn=d,this.relativeTemplatePath=p,this.enableDebugLocations=u,this.root=new bl(this,this.allocateXrefId(),null),this.views.set(this.root.xref,this.root)}kind=Dt.Tmpl;fnSuffix="Template";root;views=new Map;contentSelectors=null;allocateView(o){let e=new bl(this,this.allocateXrefId(),o);return this.views.set(e.xref,e),e}get units(){return this.views.values()}addConst(o,e){for(let i=0;i<this.consts.length;i++)if(this.consts[i].isEquivalent(o))return i;let t=this.consts.length;return this.consts.push(o),e&&this.constsInitializers.push(...e),t}consts=[];constsInitializers=[]},_x=class{xref;constructor(o){this.xref=o}create=new Je;update=new Je;functions=new Set;fnName=null;vars=null;*ops(){for(let o of this.functions)for(let e of o.ops)yield e;for(let o of this.create)if(yield o,o.kind===j.Listener||o.kind===j.Animation||o.kind===j.AnimationListener||o.kind===j.TwoWayListener)for(let e of o.handlerOps)yield e;else if(o.kind===j.RepeaterCreate&&o.trackByOps!==null)for(let e of o.trackByOps)yield e;for(let o of this.update)yield o}},bl=class extends _x{job;parent;constructor(o,e,t){super(e),this.job=o,this.parent=t}contextVariables=new Map;aliases=new Set;decls=null},fx=class extends hx{constructor(o,e,t){super(o,e,t),this.root=new YP(this)}kind=Dt.Host;fnSuffix="HostBindings";root;get units(){return[this.root]}},YP=class extends _x{job;constructor(o){super(0),this.job=o}attributes=null};function DG(n){for(let o of n.units)for(let e of o.ops())ra(e,IG,ai.None)}function IG(n){if(n instanceof Ms&&n.fn instanceof ir&&n.fn.name==="$any"){if(n.args.length!==1)throw new Error("The $any builtin function expects exactly one argument.");return n.args[0]}return n}function AG(n){let o=new Map;for(let e of n.units)for(let t of e.create)t.kind===j.I18nContext&&o.set(t.xref,t);for(let e of n.units)for(let t of e.update)t.kind===j.I18nExpression&&NG(o,t)&&Je.insertAfter(sG(t.i18nOwner,t.handle,null),t)}function NG(n,o){if(o.next?.kind!==j.I18nExpression)return!0;let e=n.get(o.context),t=n.get(o.next.context);if(e===void 0)throw new Error("AssertionError: expected an I18nContextOp to exist for the I18nExpressionOp's context");if(t===void 0)throw new Error("AssertionError: expected an I18nContextOp to exist for the next I18nExpressionOp's context");return e.i18nBlock!==null?e.i18nBlock!==t.i18nBlock:o.i18nOwner!==o.next.i18nOwner}function FG(n){for(let o of n.units){let e=o.update.head,t=[],i=null;for(let a of o.create){if(a.kind===j.I18nStart)i={blockXref:a.xref,lastSlotConsumer:a.xref};else if(a.kind===j.I18nEnd){for(let s of t)s.target=i.lastSlotConsumer,Je.insertBefore(s,e);t.length=0,i=null}if(nh(a))for(i!==null&&(i.lastSlotConsumer=a.xref);e.next!==null;){if(i!==null&&e.kind===j.I18nExpression&&e.usage===th.I18nText&&e.i18nOwner===i.blockXref){let d=e;e=e.next,Je.remove(d),t.push(d);continue}let s=!1;if(v0(e)&&e.target!==a.xref?s=!0:(e.kind===j.Statement||e.kind===j.Variable)&&wa(e,d=>{!s&&v0(d)&&d.target!==a.xref&&(s=!0)}),s)break;e=e.next}}}}function RG(n){if(!(!n.enableDebugLocations||n.relativeTemplatePath===null))for(let o of n.units){let e=[];for(let t of o.create)if(t.kind===j.ElementStart||t.kind===j.Element){let i=t.startSourceSpan.start;e.push({targetSlot:t.handle,offset:i.offset,line:i.line,column:i.col})}e.length>0&&o.create.push(TG(n.relativeTemplatePath,e))}}function gF(n){let o=new Map;for(let e of n.create)nh(e)&&(o.set(e.xref,e),e.kind===j.RepeaterCreate&&e.emptyView!==null&&o.set(e.emptyView,e));return o}function zG(n){for(let o of n.units){let e=gF(o);for(let t of o.ops())switch(t.kind){case j.Attribute:LG(o,t,e);break;case j.Property:if(t.bindingKind!==Qt.LegacyAnimation&&t.bindingKind!==Qt.Animation){let i;t.i18nMessage!==null&&t.templateKind===null?i=Qt.I18n:t.isStructuralTemplateAttribute?i=Qt.Template:i=Qt.Property,Je.insertBefore(Cl(t.target,i,null,t.name,null,null,null,t.securityContext),Mg(e,t.target))}break;case j.TwoWayProperty:Je.insertBefore(Cl(t.target,Qt.TwoWayProperty,null,t.name,null,null,null,t.securityContext),Mg(e,t.target));break;case j.StyleProp:case j.ClassProp:t.expression instanceof w0&&Je.insertBefore(Cl(t.target,Qt.Property,null,t.name,null,null,null,gi.STYLE),Mg(e,t.target));break;case j.Listener:if(!t.isLegacyAnimationListener){let i=Cl(t.target,Qt.Property,null,t.name,null,null,null,gi.NONE);if(n.kind===Dt.Host)break;Je.insertBefore(i,Mg(e,t.target))}break;case j.TwoWayListener:if(n.kind!==Dt.Host){let i=Cl(t.target,Qt.Property,null,t.name,null,null,null,gi.NONE);Je.insertBefore(i,Mg(e,t.target))}break}}}function Mg(n,o){let e=n.get(o);if(e===void 0)throw new Error("All attributes should have an element-like target.");return e}function LG(n,o,e){if(!(o.expression instanceof aa)&&o.isTextAttribute){let t=Cl(o.target,o.isStructuralTemplateAttribute?Qt.Template:Qt.Attribute,o.namespace,o.name,o.expression,o.i18nContext,o.i18nMessage,o.securityContext);if(n.job.kind===Dt.Host)n.create.push(t);else{let i=Mg(e,o.target);Je.insertBefore(t,i)}Je.remove(o)}}var m6="aria-";function hF(n){return n.startsWith(m6)&&n.length>m6.length}function VG(n,o){let e=n.get(o);if(e===void 0)throw new Error("All attributes should have an element-like target.");return e}function BG(n){let o=new Map;for(let e of n.units)for(let t of e.create)Lm(t)&&o.set(t.xref,t);for(let e of n.units)for(let t of e.ops())if(t.kind===j.Binding)switch(t.bindingKind){case Qt.Attribute:if(t.name==="ngNonBindable"){Je.remove(t);let i=VG(o,t.target);i.nonBindable=!0}else if(t.name.startsWith("animate."))Je.replace(t,d6(t.name,t.target,t.name==="animate.enter"?"enter":"leave",t.expression,t.securityContext,t.sourceSpan,0));else{let[i,a]=hr(t.name);Je.replace(t,c6(t.target,i,a,t.expression,t.securityContext,t.isTextAttribute,t.isStructuralTemplateAttribute,t.templateKind,t.i18nMessage,t.sourceSpan))}break;case Qt.Animation:Je.replace(t,d6(t.name,t.target,t.name==="animate.enter"?"enter":"leave",t.expression,t.securityContext,t.sourceSpan,1));break;case Qt.Property:case Qt.LegacyAnimation:n.mode===vs.DomOnly&&hF(t.name)?Je.replace(t,c6(t.target,null,t.name,t.expression,t.securityContext,!1,t.isStructuralTemplateAttribute,t.templateKind,t.i18nMessage,t.sourceSpan)):n.kind===Dt.Host?Je.replace(t,OG(t.name,t.expression,t.bindingKind,t.i18nContext,t.securityContext,t.sourceSpan)):Je.replace(t,ZW(t.target,t.name,t.expression,t.bindingKind,t.securityContext,t.isStructuralTemplateAttribute,t.templateKind,t.i18nContext,t.i18nMessage,t.sourceSpan));break;case Qt.TwoWayProperty:if(!(t.expression instanceof Qi))throw new Error(`Expected value of two-way property binding "${t.name}" to be an expression`);Je.replace(t,JW(t.target,t.name,t.expression,t.securityContext,t.isStructuralTemplateAttribute,t.templateKind,t.i18nContext,t.i18nMessage,t.sourceSpan));break;case Qt.I18n:case Qt.ClassName:case Qt.StyleProperty:throw new Error(`Unhandled binding of kind ${Qt[t.bindingKind]}`)}}var p6=new Map([[ge.ariaProperty,ge.ariaProperty],[ge.attribute,ge.attribute],[ge.classProp,ge.classProp],[ge.element,ge.element],[ge.elementContainer,ge.elementContainer],[ge.elementContainerEnd,ge.elementContainerEnd],[ge.elementContainerStart,ge.elementContainerStart],[ge.elementEnd,ge.elementEnd],[ge.elementStart,ge.elementStart],[ge.domProperty,ge.domProperty],[ge.i18nExp,ge.i18nExp],[ge.listener,ge.listener],[ge.listener,ge.listener],[ge.property,ge.property],[ge.styleProp,ge.styleProp],[ge.syntheticHostListener,ge.syntheticHostListener],[ge.syntheticHostProperty,ge.syntheticHostProperty],[ge.templateCreate,ge.templateCreate],[ge.twoWayProperty,ge.twoWayProperty],[ge.twoWayListener,ge.twoWayListener],[ge.declareLet,ge.declareLet],[ge.conditionalCreate,ge.conditionalBranchCreate],[ge.conditionalBranchCreate,ge.conditionalBranchCreate],[ge.domElement,ge.domElement],[ge.domElementStart,ge.domElementStart],[ge.domElementEnd,ge.domElementEnd],[ge.domElementContainer,ge.domElementContainer],[ge.domElementContainerStart,ge.domElementContainerStart],[ge.domElementContainerEnd,ge.domElementContainerEnd],[ge.domListener,ge.domListener],[ge.domTemplate,ge.domTemplate],[ge.animationEnter,ge.animationEnter],[ge.animationLeave,ge.animationLeave],[ge.animationEnterListener,ge.animationEnterListener],[ge.animationLeaveListener,ge.animationLeaveListener]]),jG=256;function $G(n){for(let o of n.units)u6(o.create),u6(o.update)}function u6(n){let o=null;for(let e of n){if(e.kind!==j.Statement||!(e.statement instanceof fr)){o=null;continue}if(!(e.statement.expr instanceof Ms)||!(e.statement.expr.fn instanceof ou)){o=null;continue}let t=e.statement.expr.fn.value;if(!p6.has(t)){o=null;continue}if(o!==null&&p6.get(o.instruction)===t&&o.length<jG){let i=o.expression.callFn(e.statement.expr.args,e.statement.expr.sourceSpan,e.statement.expr.pure);o.expression=i,o.op.statement=i.toStmt(),o.length++,Je.remove(e)}else o={op:e,instruction:t,expression:e.statement.expr,length:1}}}function HG(n){for(let o of n.units)for(let e of o.update)(e.kind===j.Attribute||e.kind===j.StyleProp||e.kind==j.StyleMap||e.kind===j.ClassMap)&&e.expression instanceof aa&&e.expression.strings.length===2&&e.expression.strings.every(i=>i==="")&&(e.expression=e.expression.expressions[0])}function UG(n){for(let o of n.units)for(let e of o.ops()){if(e.kind!==j.Conditional)continue;let t,i=e.conditions.findIndex(d=>d.expr===null);if(i>=0){let d=e.conditions.splice(i,1)[0].targetSlot;t=new px(d)}else t=De(-1);let a=e.test==null?null:new qc(e.test,n.allocateXrefId()),s=null;for(let d=e.conditions.length-1;d>=0;d--){let p=e.conditions[d];if(p.expr!==null){if(a!==null){let u=d===0?a:new zm(a.xref);p.expr=new Pi(lt.Identical,u,p.expr)}else p.alias!==null&&(s??=n.allocateXrefId(),p.expr=new qc(p.expr,s),e.contextValue=new zm(s));t=new jc(p.expr,new px(p.targetSlot),t)}}e.processed=t,e.conditions=[]}}var WG=new Map([["&&",lt.And],[">",lt.Bigger],[">=",lt.BiggerEquals],["|",lt.BitwiseOr],["&",lt.BitwiseAnd],["/",lt.Divide],["=",lt.Assign],["==",lt.Equals],["===",lt.Identical],["<",lt.Lower],["<=",lt.LowerEquals],["-",lt.Minus],["%",lt.Modulo],["**",lt.Exponentiation],["*",lt.Multiply],["!=",lt.NotEquals],["!==",lt.NotIdentical],["??",lt.NullishCoalesce],["||",lt.Or],["+",lt.Plus],["in",lt.In],["instanceof",lt.InstanceOf],["+=",lt.AdditionAssignment],["-=",lt.SubtractionAssignment],["*=",lt.MultiplicationAssignment],["/=",lt.DivisionAssignment],["%=",lt.RemainderAssignment],["**=",lt.ExponentiationAssignment],["&&=",lt.AndAssignment],["||=",lt.OrAssignment],["??=",lt.NullishCoalesceAssignment]]);function _F(n){let o=new Map([["svg",Oa.SVG],["math",Oa.Math]]);return n===null?Oa.HTML:o.get(n)??Oa.HTML}function GG(n){let o=new Map([["svg",Oa.SVG],["math",Oa.Math]]);for(let[e,t]of o.entries())if(t===n)return e;return null}function qG(n,o){return o===Oa.HTML?n:`:${GG(o)}:${n}`}function Xg(n){return Array.isArray(n)?io(n.map(Xg)):De(n)}function QG(n){let o=new Map;for(let e of n.units)for(let t of e.create)if(t.kind===j.ExtractedAttribute){let i=o.get(t.target)||new ZP;o.set(t.target,i),i.add(t.bindingKind,t.name,t.expression,t.namespace,t.trustedValueFn),Je.remove(t)}if(n instanceof S0)for(let e of n.units)for(let t of e.create)if(t.kind==j.Projection){let i=o.get(t.xref);if(i!==void 0){let a=JP(i);a.entries.length>0&&(t.attributes=n.pool.getConstLiteral(a,!0))}}else Lm(t)&&(t.attributes=g6(n,o,t.xref),t.kind===j.RepeaterCreate&&t.emptyView!==null&&(t.emptyAttributes=g6(n,o,t.emptyView)));else if(n instanceof fx)for(let[e,t]of o.entries()){if(e!==n.root.xref)throw new Error("An attribute would be const collected into the host binding's template function, but is not associated with the root xref.");let i=JP(t);i.entries.length>0&&(n.root.attributes=i)}}function g6(n,o,e){let t=o.get(e);if(t!==void 0){let i=JP(t);if(i.entries.length>0)return n.addConst(i)}return null}var vg=Object.freeze([]),ZP=class{known=new Map;byKind=new Map;propertyBindings=null;projectAs=null;get attributes(){return this.byKind.get(Qt.Attribute)??vg}get classes(){return this.byKind.get(Qt.ClassName)??vg}get styles(){return this.byKind.get(Qt.StyleProperty)??vg}get bindings(){return this.propertyBindings??vg}get template(){return this.byKind.get(Qt.Template)??vg}get i18n(){return this.byKind.get(Qt.I18n)??vg}isKnown(o,e){let t=this.known.get(o)??new Set;return this.known.set(o,t),t.has(e)?!0:(t.add(e),!1)}add(o,e,t,i,a){if(!(o===Qt.Attribute||o===Qt.ClassName||o===Qt.StyleProperty)&&this.isKnown(o,e))return;if(e==="ngProjectAs"){if(t===null||!(t instanceof _r)||t.value==null||typeof t.value?.toString()!="string")throw Error("ngProjectAs must have a string literal value");this.projectAs=t.value.toString()}let d=this.arrayFor(o);if(d.push(...KG(i,e)),o===Qt.Attribute||o===Qt.StyleProperty){if(t===null)throw Error("Attribute, i18n attribute, & style element attributes must have a value");a!==null&&aF(t)?d.push(mU(a,new Bf([new Ib(t.value)],[]),void 0,t.sourceSpan)):d.push(t)}}arrayFor(o){return o===Qt.Property||o===Qt.TwoWayProperty?(this.propertyBindings??=[],this.propertyBindings):(this.byKind.has(o)||this.byKind.set(o,[]),this.byKind.get(o))}};function KG(n,o){let e=De(o);return n?[De(0),De(n),e]:[e]}function JP({attributes:n,bindings:o,classes:e,i18n:t,projectAs:i,styles:a,template:s}){let d=[...n];if(i!==null){let p=H3(i)[0];d.push(De(5),Xg(p))}return e.length>0&&d.push(De(1),...e),a.length>0&&d.push(De(2),...a),o.length>0&&d.push(De(3),...o),s.length>0&&d.push(De(4),...s),t.length>0&&d.push(De(6),...t),io(d)}function XG(n,o){let e=n.get(o);if(e===void 0)throw new Error("All attributes should have an element-like target.");return e}function YG(n){let o=new Map;for(let e of n.units)for(let t of e.create)Lm(t)&&o.set(t.xref,t);for(let e of n.units)for(let t of e.ops())if(t.kind===j.AnimationBinding){let i=ZG(t);n.kind===Dt.Host?e.create.push(i):Je.insertAfter(i,XG(o,t.target)),Je.remove(t)}}function ZG(n){if(n.animationBindingKind===0)return _G(n.name,n.target,n.name==="animate.enter"?"enter":"leave",n.expression,n.securityContext,n.sourceSpan);{let o=n.expression;return fG(n.name,n.target,n.name==="animate.enter"?"enter":"leave",[Js(new Ia(o,o.sourceSpan))],n.securityContext,n.sourceSpan)}}function JG(n){let o=new Map;for(let e of n.units){for(let t of e.create)t.kind===j.I18nAttributes&&o.set(t.target,t);for(let t of e.update)switch(t.kind){case j.Property:case j.Attribute:if(t.i18nContext===null||!(t.expression instanceof aa))continue;let i=o.get(t.target);if(i===void 0)throw new Error("AssertionError: An i18n attribute binding instruction requires the owning element to have an I18nAttributes create instruction");if(i.target!==t.target)throw new Error("AssertionError: Expected i18nAttributes target element to match binding target element");let a=[];for(let s=0;s<t.expression.expressions.length;s++){let d=t.expression.expressions[s];if(t.expression.i18nPlaceholders.length!==t.expression.expressions.length)throw new Error(`AssertionError: An i18n attribute binding instruction requires the same number of expressions and placeholders, but found ${t.expression.i18nPlaceholders.length} placeholders and ${t.expression.expressions.length} expressions`);a.push(oF(t.i18nContext,i.target,i.xref,i.handle,d,null,t.expression.i18nPlaceholders[s],f0.Creation,th.I18nAttribute,t.name,t.sourceSpan))}Je.replaceWithMany(t,a);break}}}function eq(n){let o=new Map;for(let i of n.units)for(let a of i.ops())switch(a.kind){case j.Binding:case j.Property:case j.Attribute:case j.ExtractedAttribute:if(a.i18nMessage===null)continue;if(!o.has(a.i18nMessage)){let s=Zk(Kp.Attr,n.allocateXrefId(),null,a.i18nMessage,null);i.create.push(s),o.set(a.i18nMessage,s.xref)}a.i18nContext=o.get(a.i18nMessage);break}let e=new Map;for(let i of n.units)for(let a of i.create)switch(a.kind){case j.I18nStart:if(a.xref===a.root){let s=Zk(Kp.RootI18n,n.allocateXrefId(),a.xref,a.message,null);i.create.push(s),a.context=s.xref,e.set(a.xref,s)}break}for(let i of n.units)for(let a of i.create)if(a.kind===j.I18nStart&&a.xref!==a.root){let s=e.get(a.root);if(s===void 0)throw Error("AssertionError: Root i18n block i18n context should have been created.");a.context=s.xref,e.set(a.xref,s)}let t=null;for(let i of n.units)for(let a of i.create)switch(a.kind){case j.I18nStart:t=a;break;case j.I18nEnd:t=null;break;case j.IcuStart:if(t===null)throw Error("AssertionError: Unexpected ICU outside of an i18n block.");if(a.message.id!==t.message.id){let s=Zk(Kp.Icu,n.allocateXrefId(),t.root,a.message,null);i.create.push(s),a.context=s.xref}else a.context=t.context,e.get(t.xref).contextKind=Kp.Icu;break}}function tq(n){let o=new Map;for(let e of n.units)for(let t of e.update.reversed())if(t.kind===j.Binding&&t.isTextAttribute){let i=o.get(t.target)||new Set;i.has(t.name)&&(t.name==="style"||t.name==="class")&&Je.remove(t),i.add(t.name),o.set(t.target,i)}}function nq(n){for(let o of n.units)for(let e of o.create)e.kind===j.Defer&&(e.placeholderMinimumTime!==null&&(e.placeholderConfig=new M0(Xg([e.placeholderMinimumTime]))),(e.loadingMinimumTime!==null||e.loadingAfterTime!==null)&&(e.loadingConfig=new M0(Xg([e.loadingMinimumTime,e.loadingAfterTime]))))}function iq(n){let o=new Map;function e(i){if(o.has(i.xref))return o.get(i.xref);let a=new oq;for(let s of i.create)if(!(!Lm(s)||s.localRefs===null)){if(!Array.isArray(s.localRefs))throw new Error("LocalRefs were already processed, but were needed to resolve defer targets.");for(let d of s.localRefs)d.target===""&&a.targets.set(d.name,{xref:s.xref,slot:s.handle})}return o.set(i.xref,a),a}function t(i,a,s){switch(a.trigger.kind){case lo.Idle:case lo.Never:case lo.Immediate:case lo.Timer:return;case lo.Hover:case lo.Interaction:case lo.Viewport:if(a.trigger.targetName===null){if(s===null)throw new Error("defer on trigger with no target name must have a placeholder block");let u=n.views.get(s);if(u==null)throw new Error("AssertionError: could not find placeholder view for defer on trigger");for(let g of u.create)if(nh(g)&&(Lm(g)||g.kind===j.Projection)){a.trigger.targetXref=g.xref,a.trigger.targetView=s,a.trigger.targetSlotViewSteps=-1,a.trigger.targetSlot=g.handle;return}return}let d=s!==null?n.views.get(s):i,p=s!==null?-1:0;for(;d!==null;){let u=e(d);if(u.targets.has(a.trigger.targetName)){let{xref:g,slot:C}=u.targets.get(a.trigger.targetName);a.trigger.targetXref=g,a.trigger.targetView=d.xref,a.trigger.targetSlotViewSteps=p,a.trigger.targetSlot=C;return}d=d.parent!==null?n.views.get(d.parent):null,p++}break;default:throw new Error(`Trigger kind ${a.trigger.kind} not handled`)}}for(let i of n.units){let a=new Map;for(let s of i.create)switch(s.kind){case j.Defer:a.set(s.xref,s);break;case j.DeferOn:let d=a.get(s.defer);t(i,s,s.modifier==="hydrate"?d.mainView:d.placeholderView);break}}}var oq=class{targets=new Map},aq=new Map([[j.ElementEnd,[j.ElementStart,j.Element]],[j.ContainerEnd,[j.ContainerStart,j.Container]],[j.I18nEnd,[j.I18nStart,j.I18n]]]),rq=new Set([j.Pipe]);function sq(n){for(let o of n.units)for(let e of o.create){let t=aq.get(e.kind);if(t===void 0)continue;let[i,a]=t,s=e.prev;for(;s!==null&&rq.has(s.kind);)s=s.prev;s!==null&&s.kind===i&&(s.kind=a,Je.remove(e))}}function lq(n){for(let o of n.units)for(let e of o.ops())ra(e,t=>gq(t,{job:n}),ai.None),ra(e,hq,ai.None)}function Us(n){return n instanceof au?Us(n.expr):n instanceof Pi?Us(n.lhs)||Us(n.rhs):n instanceof jc?n.falseCase&&Us(n.falseCase)?!0:Us(n.condition)||Us(n.trueCase):n instanceof jf?Us(n.condition):n instanceof qc?Us(n.expr):n instanceof Xs?Us(n.receiver):n instanceof Fd?Us(n.receiver)||Us(n.index):n instanceof ac?Us(n.expr):n instanceof Ms||n instanceof $c||n instanceof rc||n instanceof _u||n instanceof hu}function cq(n){let o=new Set;return Bt(n,e=>(e instanceof qc&&o.add(e.xref),e),ai.None),o}function dq(n,o,e){return Bt(n,t=>{if(t instanceof qc&&o.has(t.xref)){let i=new zm(t.xref);return new qc(i,i.xref)}return t},ai.None),n}function Cg(n,o,e){let t;if(Us(n)){let i=e.job.allocateXrefId();t=[new qc(n,i),new zm(i)]}else t=[n,n.clone()],dq(t[1],cq(t[0]));return new Kg(t[0],o(t[1]))}function mq(n){return n instanceof qg||n instanceof Qg||n instanceof _u}function pq(n){return n instanceof Xs||n instanceof Fd||n instanceof Ms}function fF(n){return mq(n)||pq(n)}function uq(n){if(fF(n)&&n.receiver instanceof Kg){let o=n.receiver;for(;o.expr instanceof Kg;)o=o.expr;return o}return null}function gq(n,o){if(!fF(n))return n;let e=uq(n);if(e){if(n instanceof Ms)return e.expr=e.expr.callFn(n.args),n.receiver;if(n instanceof Xs)return e.expr=e.expr.prop(n.name),n.receiver;if(n instanceof Fd)return e.expr=e.expr.key(n.index),n.receiver;if(n instanceof _u)return e.expr=Cg(e.expr,t=>t.callFn(n.args),o),n.receiver;if(n instanceof qg)return e.expr=Cg(e.expr,t=>t.prop(n.name),o),n.receiver;if(n instanceof Qg)return e.expr=Cg(e.expr,t=>t.key(n.index),o),n.receiver}else{if(n instanceof _u)return Cg(n.receiver,t=>t.callFn(n.args),o);if(n instanceof qg)return Cg(n.receiver,t=>t.prop(n.name),o);if(n instanceof Qg)return Cg(n.receiver,t=>t.key(n.index),o)}return n}function hq(n){return n instanceof Kg?new ac(new jc(new Pi(lt.Equals,n.guard,zg),zg,n.expr)):n}var h6="\uFFFD",_q="#",fq="*",vq="/",Cq=":",bq="[",xq="]",yq="|";function wq(n){let o=new Map,e=new Map,t=new Map;for(let a of n.units)for(let s of a.create)switch(s.kind){case j.I18nContext:let d=Mq(n,s);a.create.push(d),o.set(s.xref,d),t.set(s.xref,s);break;case j.I18nStart:e.set(s.xref,s);break}let i=null;for(let a of n.units)for(let s of a.create)switch(s.kind){case j.IcuStart:i=s,Je.remove(s);let d=t.get(s.context);if(d.contextKind!==Kp.Icu)continue;let p=e.get(d.i18nBlock);if(p.context===d.xref)continue;let u=e.get(p.root),g=o.get(u.context);if(g===void 0)throw Error("AssertionError: ICU sub-message should belong to a root message.");let C=o.get(d.xref);C.messagePlaceholder=s.messagePlaceholder,g.subMessages.push(C.xref);break;case j.IcuEnd:i=null,Je.remove(s);break;case j.IcuPlaceholder:if(i===null||i.context==null)throw Error("AssertionError: Unexpected ICU placeholder outside of i18n context");o.get(i.context).postprocessingParams.set(s.name,De(Sq(s))),Je.remove(s);break}}function Mq(n,o,e){let t=_6(o.params),i=_6(o.postprocessingParams),a=[...o.params.values()].some(s=>s.length>1);return MG(n.allocateXrefId(),o.xref,o.i18nBlock,o.message,null,t,i,a)}function Sq(n){if(n.strings.length!==n.expressionPlaceholders.length+1)throw Error(`AssertionError: Invalid ICU placeholder with ${n.strings.length} strings and ${n.expressionPlaceholders.length} expressions`);let o=n.expressionPlaceholders.map(Tg);return n.strings.flatMap((e,t)=>[e,o[t]||""]).join("")}function _6(n){let o=new Map;for(let[e,t]of n){let i=kq(t);i!==null&&o.set(e,De(i))}return o}function kq(n){if(n.length===0)return null;let o=n.map(e=>Tg(e));return o.length===1?o[0]:`${bq}${o.join(yq)}${xq}`}function Tg(n){if(n.flags&go.ElementTag&&n.flags&go.TemplateTag){if(typeof n.value!="object")throw Error("AssertionError: Expected i18n param value to have an element and template slot");let i=Tg(ze(q({},n),{value:n.value.element,flags:n.flags&~go.TemplateTag})),a=Tg(ze(q({},n),{value:n.value.template,flags:n.flags&~go.ElementTag}));return n.flags&go.OpenTag&&n.flags&go.CloseTag?`${a}${i}${a}`:n.flags&go.CloseTag?`${i}${a}`:`${a}${i}`}if(n.flags&go.OpenTag&&n.flags&go.CloseTag)return`${Tg(ze(q({},n),{flags:n.flags&~go.CloseTag}))}${Tg(ze(q({},n),{flags:n.flags&~go.OpenTag}))}`;if(n.flags===go.None)return`${n.value}`;let o="",e="";n.flags&go.ElementTag?o=_q:n.flags&go.TemplateTag&&(o=fq),o!==""&&(e=n.flags&go.CloseTag?vq:"");let t=n.subTemplateIndex===null?"":`${Cq}${n.subTemplateIndex}`;return`${h6}${e}${o}${n.value}${t}${h6}`}function Pq(n){for(let o of n.units){let e=new Map;for(let i of o.create){if(nh(i)){if(i.handle.slot===null)throw new Error("AssertionError: expected slots to have been allocated before generating advance() calls")}else continue;e.set(i.xref,i.handle.slot)}let t=0;for(let i of o.update){let a=null;if(v0(i)?a=i:wa(i,d=>{a===null&&v0(d)&&(a=d)}),a===null)continue;if(!e.has(a.target))throw new Error(`AssertionError: reference to unknown slot for target ${a.target}`);let s=e.get(a.target);if(t!==s){let d=s-t;if(d<0)throw new Error("AssertionError: slot counter should never need to move backwards");Je.insertBefore(oG(d,a.sourceSpan),i),t=s}}}}function Tq(n){for(let o of n.units)for(let e of o.update){if(e.kind!==j.StoreLet)continue;let t={kind:ar.Identifier,name:null,identifier:e.declaredName,local:!0};Je.replace(e,Mm(n.allocateXrefId(),t,new C0(e.target,e.value,e.sourceSpan),vl.None))}}function Eq(n){let e=[],t=0;for(let i of n.units)for(let a of i.create)a.kind===j.Projection&&(e.push(a.selector),a.projectionSlotIndex=t++);if(e.length>0){let i=null;if(e.length>1||e[0]!=="*"){let a=e.map(s=>s==="*"?s:H3(s));i=n.pool.getConstLiteral(Xg(a),!0)}n.contentSelectors=n.pool.getConstLiteral(Xg(e),!0),n.root.create.prepend([bG(i)])}}function Oq(n){Mf(n.root,null)}function Mf(n,o){let e=f6(n,o);for(let t of n.create)switch(t.kind){case j.ConditionalCreate:case j.ConditionalBranchCreate:case j.Template:Mf(n.job.views.get(t.xref),e);break;case j.Projection:t.fallbackView!==null&&Mf(n.job.views.get(t.fallbackView),e);break;case j.RepeaterCreate:Mf(n.job.views.get(t.xref),e),t.emptyView&&Mf(n.job.views.get(t.emptyView),e),t.trackByOps!==null&&t.trackByOps.prepend(Sf(n,e,!1));break;case j.Animation:case j.AnimationListener:case j.Listener:case j.TwoWayListener:t.handlerOps.prepend(Sf(n,e,!0));break}n.update.prepend(Sf(n,e,!1));for(let t of n.functions)t.ops.prepend(Sf(n,f6(n,o),!0))}function f6(n,o){let e={view:n.xref,viewContextVariable:{kind:ar.Context,name:null,view:n.xref},contextVariables:new Map,aliases:n.aliases,references:[],letDeclarations:[],parent:o};for(let t of n.contextVariables.keys())e.contextVariables.set(t,{kind:ar.Identifier,name:null,identifier:t,local:!1});for(let t of n.create)switch(t.kind){case j.ElementStart:case j.ConditionalCreate:case j.ConditionalBranchCreate:case j.Template:if(!Array.isArray(t.localRefs))throw new Error("AssertionError: expected localRefs to be an array");for(let i=0;i<t.localRefs.length;i++)e.references.push({name:t.localRefs[i].name,targetId:t.xref,targetSlot:t.handle,offset:i,variable:{kind:ar.Identifier,name:null,identifier:t.localRefs[i].name,local:!1}});break;case j.DeclareLet:e.letDeclarations.push({targetId:t.xref,targetSlot:t.handle,variable:{kind:ar.Identifier,name:null,identifier:t.declaredName,local:!1}});break}return e}function Sf(n,o,e){let t=[];o.view!==n.xref&&t.push(Mm(n.job.allocateXrefId(),o.viewContextVariable,new cx,vl.None));let i=n.job.views.get(o.view);for(let[a,s]of i.contextVariables){let d=new Fm(o.view),p=s===uF?d:new Xs(d,s);t.push(Mm(n.job.allocateXrefId(),o.contextVariables.get(a),p,vl.None))}for(let a of i.aliases)t.push(Mm(n.job.allocateXrefId(),a,a.expression.clone(),vl.AlwaysInline));for(let a of o.references)t.push(Mm(n.job.allocateXrefId(),a.variable,new lx(a.targetId,a.targetSlot,a.offset),vl.None));if(o.view!==n.xref||e)for(let a of o.letDeclarations)t.push(Mm(n.job.allocateXrefId(),a.variable,new b0(a.targetId,a.targetSlot),vl.None));return o.parent!==null&&t.push(...Sf(n,o.parent,!1)),t}function Dq(n){for(let o of n.units)for(let e of o.ops())ra(e,t=>t instanceof M0?De(n.addConst(t.expr)):t,ai.None)}var v6="style.",C6="class.",Iq="style!",b6="class!",x6="!important";function Aq(n){for(let o of n.root.update)if(o.kind===j.Binding&&o.bindingKind===Qt.Property)if(o.name.endsWith(x6)&&(o.name=o.name.substring(0,o.name.length-x6.length)),o.name.startsWith(v6)){o.bindingKind=Qt.StyleProperty,o.name=o.name.substring(v6.length),Nq(o.name)||(o.name=Fq(o.name));let{property:e,suffix:t}=Jk(o.name);o.name=e,o.unit=t}else o.name.startsWith(Iq)?(o.bindingKind=Qt.StyleProperty,o.name="style"):o.name.startsWith(C6)?(o.bindingKind=Qt.ClassName,o.name=Jk(o.name.substring(C6.length)).property):o.name.startsWith(b6)&&(o.bindingKind=Qt.ClassName,o.name=Jk(o.name.substring(b6.length)).property)}function Nq(n){return n.startsWith("--")}function Fq(n){return n.replace(/[a-z][A-Z]/g,o=>o.charAt(0)+"-"+o.charAt(1)).toLowerCase()}function Jk(n){let o=n.indexOf("!important");o!==-1&&(n=o>0?n.substring(0,o):"");let e=null,t=n,i=n.lastIndexOf(".");return i>0&&(e=n.slice(i+1),t=n.substring(0,i)),{property:t,suffix:e}}function e3(n,o=!1){return yl(Object.keys(n).map(e=>({key:e,quoted:o,value:n[e]})))}var t3=class{visitText(o){return o.value}visitContainer(o){return o.children.map(e=>e.visit(this)).join("")}visitIcu(o){let e=Object.keys(o.cases).map(i=>`${i} {${o.cases[i].visit(this)}}`);return`{${o.expressionPlaceholder}, ${o.type}, ${e.join(" ")}}`}visitTagPlaceholder(o){return o.isVoid?this.formatPh(o.startName):`${this.formatPh(o.startName)}${o.children.map(e=>e.visit(this)).join("")}${this.formatPh(o.closeName)}`}visitPlaceholder(o){return this.formatPh(o.name)}visitBlockPlaceholder(o){return`${this.formatPh(o.startName)}${o.children.map(e=>e.visit(this)).join("")}${this.formatPh(o.closeName)}`}visitIcuPlaceholder(o,e){return this.formatPh(o.name)}formatPh(o){return`{${R0(o,!1)}}`}},Rq=new t3;function vF(n){return n.visit(Rq)}var Rd=class{sourceSpan;i18n;constructor(o,e){this.sourceSpan=o,this.i18n=e}},fu=class extends Rd{value;tokens;constructor(o,e,t,i){super(e,i),this.value=o,this.tokens=t}visit(o,e){return o.visitText(this,e)}},eu=class extends Rd{switchValue;type;cases;switchValueSourceSpan;constructor(o,e,t,i,a,s){super(i,s),this.switchValue=o,this.type=e,this.cases=t,this.switchValueSourceSpan=a}visit(o,e){return o.visitExpansion(this,e)}},vx=class{value;expression;sourceSpan;valueSourceSpan;expSourceSpan;constructor(o,e,t,i,a){this.value=o,this.expression=e,this.sourceSpan=t,this.valueSourceSpan=i,this.expSourceSpan=a}visit(o,e){return o.visitExpansionCase(this,e)}},n3=class extends Rd{name;value;keySpan;valueSpan;valueTokens;constructor(o,e,t,i,a,s,d){super(t,d),this.name=o,this.value=e,this.keySpan=i,this.valueSpan=a,this.valueTokens=s}visit(o,e){return o.visitAttribute(this,e)}},ul=class extends Rd{name;attrs;directives;children;isSelfClosing;startSourceSpan;endSourceSpan;isVoid;constructor(o,e,t,i,a,s,d,p=null,u,g){super(s,g),this.name=o,this.attrs=e,this.directives=t,this.children=i,this.isSelfClosing=a,this.startSourceSpan=d,this.endSourceSpan=p,this.isVoid=u}visit(o,e){return o.visitElement(this,e)}},k0=class{value;sourceSpan;constructor(o,e){this.value=o,this.sourceSpan=e}visit(o,e){return o.visitComment(this,e)}},_l=class extends Rd{name;parameters;children;nameSpan;startSourceSpan;endSourceSpan;constructor(o,e,t,i,a,s,d=null,p){super(i,p),this.name=o,this.parameters=e,this.children=t,this.nameSpan=a,this.startSourceSpan=s,this.endSourceSpan=d}visit(o,e){return o.visitBlock(this,e)}},Jr=class extends Rd{componentName;tagName;fullName;attrs;directives;children;isSelfClosing;startSourceSpan;endSourceSpan;constructor(o,e,t,i,a,s,d,p,u,g=null,C){super(p,C),this.componentName=o,this.tagName=e,this.fullName=t,this.attrs=i,this.directives=a,this.children=s,this.isSelfClosing=d,this.startSourceSpan=u,this.endSourceSpan=g}visit(o,e){return o.visitComponent(this,e)}},i3=class{name;attrs;sourceSpan;startSourceSpan;endSourceSpan;constructor(o,e,t,i,a=null){this.name=o,this.attrs=e,this.sourceSpan=t,this.startSourceSpan=i,this.endSourceSpan=a}visit(o,e){return o.visitDirective(this,e)}},Cx=class{expression;sourceSpan;constructor(o,e){this.expression=o,this.sourceSpan=e}visit(o,e){return o.visitBlockParameter(this,e)}},bx=class{name;value;sourceSpan;nameSpan;valueSpan;constructor(o,e,t,i,a){this.name=o,this.value=e,this.sourceSpan=t,this.nameSpan=i,this.valueSpan=a}visit(o,e){return o.visitLetDeclaration(this,e)}};function ko(n,o,e=null){let t=[],i=n.visit?a=>n.visit(a,e)||a.visit(n,e):a=>a.visit(n,e);return o.forEach(a=>{let s=i(a);s&&t.push(s)}),t}var P0={AElig:"\xC6",AMP:"&",amp:"&",Aacute:"\xC1",Abreve:"\u0102",Acirc:"\xC2",Acy:"\u0410",Afr:"\u{1D504}",Agrave:"\xC0",Alpha:"\u0391",Amacr:"\u0100",And:"\u2A53",Aogon:"\u0104",Aopf:"\u{1D538}",ApplyFunction:"\u2061",af:"\u2061",Aring:"\xC5",angst:"\xC5",Ascr:"\u{1D49C}",Assign:"\u2254",colone:"\u2254",coloneq:"\u2254",Atilde:"\xC3",Auml:"\xC4",Backslash:"\u2216",setminus:"\u2216",setmn:"\u2216",smallsetminus:"\u2216",ssetmn:"\u2216",Barv:"\u2AE7",Barwed:"\u2306",doublebarwedge:"\u2306",Bcy:"\u0411",Because:"\u2235",becaus:"\u2235",because:"\u2235",Bernoullis:"\u212C",Bscr:"\u212C",bernou:"\u212C",Beta:"\u0392",Bfr:"\u{1D505}",Bopf:"\u{1D539}",Breve:"\u02D8",breve:"\u02D8",Bumpeq:"\u224E",HumpDownHump:"\u224E",bump:"\u224E",CHcy:"\u0427",COPY:"\xA9",copy:"\xA9",Cacute:"\u0106",Cap:"\u22D2",CapitalDifferentialD:"\u2145",DD:"\u2145",Cayleys:"\u212D",Cfr:"\u212D",Ccaron:"\u010C",Ccedil:"\xC7",Ccirc:"\u0108",Cconint:"\u2230",Cdot:"\u010A",Cedilla:"\xB8",cedil:"\xB8",CenterDot:"\xB7",centerdot:"\xB7",middot:"\xB7",Chi:"\u03A7",CircleDot:"\u2299",odot:"\u2299",CircleMinus:"\u2296",ominus:"\u2296",CirclePlus:"\u2295",oplus:"\u2295",CircleTimes:"\u2297",otimes:"\u2297",ClockwiseContourIntegral:"\u2232",cwconint:"\u2232",CloseCurlyDoubleQuote:"\u201D",rdquo:"\u201D",rdquor:"\u201D",CloseCurlyQuote:"\u2019",rsquo:"\u2019",rsquor:"\u2019",Colon:"\u2237",Proportion:"\u2237",Colone:"\u2A74",Congruent:"\u2261",equiv:"\u2261",Conint:"\u222F",DoubleContourIntegral:"\u222F",ContourIntegral:"\u222E",conint:"\u222E",oint:"\u222E",Copf:"\u2102",complexes:"\u2102",Coproduct:"\u2210",coprod:"\u2210",CounterClockwiseContourIntegral:"\u2233",awconint:"\u2233",Cross:"\u2A2F",Cscr:"\u{1D49E}",Cup:"\u22D3",CupCap:"\u224D",asympeq:"\u224D",DDotrahd:"\u2911",DJcy:"\u0402",DScy:"\u0405",DZcy:"\u040F",Dagger:"\u2021",ddagger:"\u2021",Darr:"\u21A1",Dashv:"\u2AE4",DoubleLeftTee:"\u2AE4",Dcaron:"\u010E",Dcy:"\u0414",Del:"\u2207",nabla:"\u2207",Delta:"\u0394",Dfr:"\u{1D507}",DiacriticalAcute:"\xB4",acute:"\xB4",DiacriticalDot:"\u02D9",dot:"\u02D9",DiacriticalDoubleAcute:"\u02DD",dblac:"\u02DD",DiacriticalGrave:"`",grave:"`",DiacriticalTilde:"\u02DC",tilde:"\u02DC",Diamond:"\u22C4",diam:"\u22C4",diamond:"\u22C4",DifferentialD:"\u2146",dd:"\u2146",Dopf:"\u{1D53B}",Dot:"\xA8",DoubleDot:"\xA8",die:"\xA8",uml:"\xA8",DotDot:"\u20DC",DotEqual:"\u2250",doteq:"\u2250",esdot:"\u2250",DoubleDownArrow:"\u21D3",Downarrow:"\u21D3",dArr:"\u21D3",DoubleLeftArrow:"\u21D0",Leftarrow:"\u21D0",lArr:"\u21D0",DoubleLeftRightArrow:"\u21D4",Leftrightarrow:"\u21D4",hArr:"\u21D4",iff:"\u21D4",DoubleLongLeftArrow:"\u27F8",Longleftarrow:"\u27F8",xlArr:"\u27F8",DoubleLongLeftRightArrow:"\u27FA",Longleftrightarrow:"\u27FA",xhArr:"\u27FA",DoubleLongRightArrow:"\u27F9",Longrightarrow:"\u27F9",xrArr:"\u27F9",DoubleRightArrow:"\u21D2",Implies:"\u21D2",Rightarrow:"\u21D2",rArr:"\u21D2",DoubleRightTee:"\u22A8",vDash:"\u22A8",DoubleUpArrow:"\u21D1",Uparrow:"\u21D1",uArr:"\u21D1",DoubleUpDownArrow:"\u21D5",Updownarrow:"\u21D5",vArr:"\u21D5",DoubleVerticalBar:"\u2225",par:"\u2225",parallel:"\u2225",shortparallel:"\u2225",spar:"\u2225",DownArrow:"\u2193",ShortDownArrow:"\u2193",darr:"\u2193",downarrow:"\u2193",DownArrowBar:"\u2913",DownArrowUpArrow:"\u21F5",duarr:"\u21F5",DownBreve:"\u0311",DownLeftRightVector:"\u2950",DownLeftTeeVector:"\u295E",DownLeftVector:"\u21BD",leftharpoondown:"\u21BD",lhard:"\u21BD",DownLeftVectorBar:"\u2956",DownRightTeeVector:"\u295F",DownRightVector:"\u21C1",rhard:"\u21C1",rightharpoondown:"\u21C1",DownRightVectorBar:"\u2957",DownTee:"\u22A4",top:"\u22A4",DownTeeArrow:"\u21A7",mapstodown:"\u21A7",Dscr:"\u{1D49F}",Dstrok:"\u0110",ENG:"\u014A",ETH:"\xD0",Eacute:"\xC9",Ecaron:"\u011A",Ecirc:"\xCA",Ecy:"\u042D",Edot:"\u0116",Efr:"\u{1D508}",Egrave:"\xC8",Element:"\u2208",in:"\u2208",isin:"\u2208",isinv:"\u2208",Emacr:"\u0112",EmptySmallSquare:"\u25FB",EmptyVerySmallSquare:"\u25AB",Eogon:"\u0118",Eopf:"\u{1D53C}",Epsilon:"\u0395",Equal:"\u2A75",EqualTilde:"\u2242",eqsim:"\u2242",esim:"\u2242",Equilibrium:"\u21CC",rightleftharpoons:"\u21CC",rlhar:"\u21CC",Escr:"\u2130",expectation:"\u2130",Esim:"\u2A73",Eta:"\u0397",Euml:"\xCB",Exists:"\u2203",exist:"\u2203",ExponentialE:"\u2147",ee:"\u2147",exponentiale:"\u2147",Fcy:"\u0424",Ffr:"\u{1D509}",FilledSmallSquare:"\u25FC",FilledVerySmallSquare:"\u25AA",blacksquare:"\u25AA",squarf:"\u25AA",squf:"\u25AA",Fopf:"\u{1D53D}",ForAll:"\u2200",forall:"\u2200",Fouriertrf:"\u2131",Fscr:"\u2131",GJcy:"\u0403",GT:">",gt:">",Gamma:"\u0393",Gammad:"\u03DC",Gbreve:"\u011E",Gcedil:"\u0122",Gcirc:"\u011C",Gcy:"\u0413",Gdot:"\u0120",Gfr:"\u{1D50A}",Gg:"\u22D9",ggg:"\u22D9",Gopf:"\u{1D53E}",GreaterEqual:"\u2265",ge:"\u2265",geq:"\u2265",GreaterEqualLess:"\u22DB",gel:"\u22DB",gtreqless:"\u22DB",GreaterFullEqual:"\u2267",gE:"\u2267",geqq:"\u2267",GreaterGreater:"\u2AA2",GreaterLess:"\u2277",gl:"\u2277",gtrless:"\u2277",GreaterSlantEqual:"\u2A7E",geqslant:"\u2A7E",ges:"\u2A7E",GreaterTilde:"\u2273",gsim:"\u2273",gtrsim:"\u2273",Gscr:"\u{1D4A2}",Gt:"\u226B",NestedGreaterGreater:"\u226B",gg:"\u226B",HARDcy:"\u042A",Hacek:"\u02C7",caron:"\u02C7",Hat:"^",Hcirc:"\u0124",Hfr:"\u210C",Poincareplane:"\u210C",HilbertSpace:"\u210B",Hscr:"\u210B",hamilt:"\u210B",Hopf:"\u210D",quaternions:"\u210D",HorizontalLine:"\u2500",boxh:"\u2500",Hstrok:"\u0126",HumpEqual:"\u224F",bumpe:"\u224F",bumpeq:"\u224F",IEcy:"\u0415",IJlig:"\u0132",IOcy:"\u0401",Iacute:"\xCD",Icirc:"\xCE",Icy:"\u0418",Idot:"\u0130",Ifr:"\u2111",Im:"\u2111",image:"\u2111",imagpart:"\u2111",Igrave:"\xCC",Imacr:"\u012A",ImaginaryI:"\u2148",ii:"\u2148",Int:"\u222C",Integral:"\u222B",int:"\u222B",Intersection:"\u22C2",bigcap:"\u22C2",xcap:"\u22C2",InvisibleComma:"\u2063",ic:"\u2063",InvisibleTimes:"\u2062",it:"\u2062",Iogon:"\u012E",Iopf:"\u{1D540}",Iota:"\u0399",Iscr:"\u2110",imagline:"\u2110",Itilde:"\u0128",Iukcy:"\u0406",Iuml:"\xCF",Jcirc:"\u0134",Jcy:"\u0419",Jfr:"\u{1D50D}",Jopf:"\u{1D541}",Jscr:"\u{1D4A5}",Jsercy:"\u0408",Jukcy:"\u0404",KHcy:"\u0425",KJcy:"\u040C",Kappa:"\u039A",Kcedil:"\u0136",Kcy:"\u041A",Kfr:"\u{1D50E}",Kopf:"\u{1D542}",Kscr:"\u{1D4A6}",LJcy:"\u0409",LT:"<",lt:"<",Lacute:"\u0139",Lambda:"\u039B",Lang:"\u27EA",Laplacetrf:"\u2112",Lscr:"\u2112",lagran:"\u2112",Larr:"\u219E",twoheadleftarrow:"\u219E",Lcaron:"\u013D",Lcedil:"\u013B",Lcy:"\u041B",LeftAngleBracket:"\u27E8",lang:"\u27E8",langle:"\u27E8",LeftArrow:"\u2190",ShortLeftArrow:"\u2190",larr:"\u2190",leftarrow:"\u2190",slarr:"\u2190",LeftArrowBar:"\u21E4",larrb:"\u21E4",LeftArrowRightArrow:"\u21C6",leftrightarrows:"\u21C6",lrarr:"\u21C6",LeftCeiling:"\u2308",lceil:"\u2308",LeftDoubleBracket:"\u27E6",lobrk:"\u27E6",LeftDownTeeVector:"\u2961",LeftDownVector:"\u21C3",dharl:"\u21C3",downharpoonleft:"\u21C3",LeftDownVectorBar:"\u2959",LeftFloor:"\u230A",lfloor:"\u230A",LeftRightArrow:"\u2194",harr:"\u2194",leftrightarrow:"\u2194",LeftRightVector:"\u294E",LeftTee:"\u22A3",dashv:"\u22A3",LeftTeeArrow:"\u21A4",mapstoleft:"\u21A4",LeftTeeVector:"\u295A",LeftTriangle:"\u22B2",vartriangleleft:"\u22B2",vltri:"\u22B2",LeftTriangleBar:"\u29CF",LeftTriangleEqual:"\u22B4",ltrie:"\u22B4",trianglelefteq:"\u22B4",LeftUpDownVector:"\u2951",LeftUpTeeVector:"\u2960",LeftUpVector:"\u21BF",uharl:"\u21BF",upharpoonleft:"\u21BF",LeftUpVectorBar:"\u2958",LeftVector:"\u21BC",leftharpoonup:"\u21BC",lharu:"\u21BC",LeftVectorBar:"\u2952",LessEqualGreater:"\u22DA",leg:"\u22DA",lesseqgtr:"\u22DA",LessFullEqual:"\u2266",lE:"\u2266",leqq:"\u2266",LessGreater:"\u2276",lessgtr:"\u2276",lg:"\u2276",LessLess:"\u2AA1",LessSlantEqual:"\u2A7D",leqslant:"\u2A7D",les:"\u2A7D",LessTilde:"\u2272",lesssim:"\u2272",lsim:"\u2272",Lfr:"\u{1D50F}",Ll:"\u22D8",Lleftarrow:"\u21DA",lAarr:"\u21DA",Lmidot:"\u013F",LongLeftArrow:"\u27F5",longleftarrow:"\u27F5",xlarr:"\u27F5",LongLeftRightArrow:"\u27F7",longleftrightarrow:"\u27F7",xharr:"\u27F7",LongRightArrow:"\u27F6",longrightarrow:"\u27F6",xrarr:"\u27F6",Lopf:"\u{1D543}",LowerLeftArrow:"\u2199",swarr:"\u2199",swarrow:"\u2199",LowerRightArrow:"\u2198",searr:"\u2198",searrow:"\u2198",Lsh:"\u21B0",lsh:"\u21B0",Lstrok:"\u0141",Lt:"\u226A",NestedLessLess:"\u226A",ll:"\u226A",Map:"\u2905",Mcy:"\u041C",MediumSpace:"\u205F",Mellintrf:"\u2133",Mscr:"\u2133",phmmat:"\u2133",Mfr:"\u{1D510}",MinusPlus:"\u2213",mnplus:"\u2213",mp:"\u2213",Mopf:"\u{1D544}",Mu:"\u039C",NJcy:"\u040A",Nacute:"\u0143",Ncaron:"\u0147",Ncedil:"\u0145",Ncy:"\u041D",NegativeMediumSpace:"\u200B",NegativeThickSpace:"\u200B",NegativeThinSpace:"\u200B",NegativeVeryThinSpace:"\u200B",ZeroWidthSpace:"\u200B",NewLine:`
|
||
`,Nfr:"\u{1D511}",NoBreak:"\u2060",NonBreakingSpace:"\xA0",nbsp:"\xA0",Nopf:"\u2115",naturals:"\u2115",Not:"\u2AEC",NotCongruent:"\u2262",nequiv:"\u2262",NotCupCap:"\u226D",NotDoubleVerticalBar:"\u2226",npar:"\u2226",nparallel:"\u2226",nshortparallel:"\u2226",nspar:"\u2226",NotElement:"\u2209",notin:"\u2209",notinva:"\u2209",NotEqual:"\u2260",ne:"\u2260",NotEqualTilde:"\u2242\u0338",nesim:"\u2242\u0338",NotExists:"\u2204",nexist:"\u2204",nexists:"\u2204",NotGreater:"\u226F",ngt:"\u226F",ngtr:"\u226F",NotGreaterEqual:"\u2271",nge:"\u2271",ngeq:"\u2271",NotGreaterFullEqual:"\u2267\u0338",ngE:"\u2267\u0338",ngeqq:"\u2267\u0338",NotGreaterGreater:"\u226B\u0338",nGtv:"\u226B\u0338",NotGreaterLess:"\u2279",ntgl:"\u2279",NotGreaterSlantEqual:"\u2A7E\u0338",ngeqslant:"\u2A7E\u0338",nges:"\u2A7E\u0338",NotGreaterTilde:"\u2275",ngsim:"\u2275",NotHumpDownHump:"\u224E\u0338",nbump:"\u224E\u0338",NotHumpEqual:"\u224F\u0338",nbumpe:"\u224F\u0338",NotLeftTriangle:"\u22EA",nltri:"\u22EA",ntriangleleft:"\u22EA",NotLeftTriangleBar:"\u29CF\u0338",NotLeftTriangleEqual:"\u22EC",nltrie:"\u22EC",ntrianglelefteq:"\u22EC",NotLess:"\u226E",nless:"\u226E",nlt:"\u226E",NotLessEqual:"\u2270",nle:"\u2270",nleq:"\u2270",NotLessGreater:"\u2278",ntlg:"\u2278",NotLessLess:"\u226A\u0338",nLtv:"\u226A\u0338",NotLessSlantEqual:"\u2A7D\u0338",nleqslant:"\u2A7D\u0338",nles:"\u2A7D\u0338",NotLessTilde:"\u2274",nlsim:"\u2274",NotNestedGreaterGreater:"\u2AA2\u0338",NotNestedLessLess:"\u2AA1\u0338",NotPrecedes:"\u2280",npr:"\u2280",nprec:"\u2280",NotPrecedesEqual:"\u2AAF\u0338",npre:"\u2AAF\u0338",npreceq:"\u2AAF\u0338",NotPrecedesSlantEqual:"\u22E0",nprcue:"\u22E0",NotReverseElement:"\u220C",notni:"\u220C",notniva:"\u220C",NotRightTriangle:"\u22EB",nrtri:"\u22EB",ntriangleright:"\u22EB",NotRightTriangleBar:"\u29D0\u0338",NotRightTriangleEqual:"\u22ED",nrtrie:"\u22ED",ntrianglerighteq:"\u22ED",NotSquareSubset:"\u228F\u0338",NotSquareSubsetEqual:"\u22E2",nsqsube:"\u22E2",NotSquareSuperset:"\u2290\u0338",NotSquareSupersetEqual:"\u22E3",nsqsupe:"\u22E3",NotSubset:"\u2282\u20D2",nsubset:"\u2282\u20D2",vnsub:"\u2282\u20D2",NotSubsetEqual:"\u2288",nsube:"\u2288",nsubseteq:"\u2288",NotSucceeds:"\u2281",nsc:"\u2281",nsucc:"\u2281",NotSucceedsEqual:"\u2AB0\u0338",nsce:"\u2AB0\u0338",nsucceq:"\u2AB0\u0338",NotSucceedsSlantEqual:"\u22E1",nsccue:"\u22E1",NotSucceedsTilde:"\u227F\u0338",NotSuperset:"\u2283\u20D2",nsupset:"\u2283\u20D2",vnsup:"\u2283\u20D2",NotSupersetEqual:"\u2289",nsupe:"\u2289",nsupseteq:"\u2289",NotTilde:"\u2241",nsim:"\u2241",NotTildeEqual:"\u2244",nsime:"\u2244",nsimeq:"\u2244",NotTildeFullEqual:"\u2247",ncong:"\u2247",NotTildeTilde:"\u2249",nap:"\u2249",napprox:"\u2249",NotVerticalBar:"\u2224",nmid:"\u2224",nshortmid:"\u2224",nsmid:"\u2224",Nscr:"\u{1D4A9}",Ntilde:"\xD1",Nu:"\u039D",OElig:"\u0152",Oacute:"\xD3",Ocirc:"\xD4",Ocy:"\u041E",Odblac:"\u0150",Ofr:"\u{1D512}",Ograve:"\xD2",Omacr:"\u014C",Omega:"\u03A9",ohm:"\u03A9",Omicron:"\u039F",Oopf:"\u{1D546}",OpenCurlyDoubleQuote:"\u201C",ldquo:"\u201C",OpenCurlyQuote:"\u2018",lsquo:"\u2018",Or:"\u2A54",Oscr:"\u{1D4AA}",Oslash:"\xD8",Otilde:"\xD5",Otimes:"\u2A37",Ouml:"\xD6",OverBar:"\u203E",oline:"\u203E",OverBrace:"\u23DE",OverBracket:"\u23B4",tbrk:"\u23B4",OverParenthesis:"\u23DC",PartialD:"\u2202",part:"\u2202",Pcy:"\u041F",Pfr:"\u{1D513}",Phi:"\u03A6",Pi:"\u03A0",PlusMinus:"\xB1",plusmn:"\xB1",pm:"\xB1",Popf:"\u2119",primes:"\u2119",Pr:"\u2ABB",Precedes:"\u227A",pr:"\u227A",prec:"\u227A",PrecedesEqual:"\u2AAF",pre:"\u2AAF",preceq:"\u2AAF",PrecedesSlantEqual:"\u227C",prcue:"\u227C",preccurlyeq:"\u227C",PrecedesTilde:"\u227E",precsim:"\u227E",prsim:"\u227E",Prime:"\u2033",Product:"\u220F",prod:"\u220F",Proportional:"\u221D",prop:"\u221D",propto:"\u221D",varpropto:"\u221D",vprop:"\u221D",Pscr:"\u{1D4AB}",Psi:"\u03A8",QUOT:'"',quot:'"',Qfr:"\u{1D514}",Qopf:"\u211A",rationals:"\u211A",Qscr:"\u{1D4AC}",RBarr:"\u2910",drbkarow:"\u2910",REG:"\xAE",circledR:"\xAE",reg:"\xAE",Racute:"\u0154",Rang:"\u27EB",Rarr:"\u21A0",twoheadrightarrow:"\u21A0",Rarrtl:"\u2916",Rcaron:"\u0158",Rcedil:"\u0156",Rcy:"\u0420",Re:"\u211C",Rfr:"\u211C",real:"\u211C",realpart:"\u211C",ReverseElement:"\u220B",SuchThat:"\u220B",ni:"\u220B",niv:"\u220B",ReverseEquilibrium:"\u21CB",leftrightharpoons:"\u21CB",lrhar:"\u21CB",ReverseUpEquilibrium:"\u296F",duhar:"\u296F",Rho:"\u03A1",RightAngleBracket:"\u27E9",rang:"\u27E9",rangle:"\u27E9",RightArrow:"\u2192",ShortRightArrow:"\u2192",rarr:"\u2192",rightarrow:"\u2192",srarr:"\u2192",RightArrowBar:"\u21E5",rarrb:"\u21E5",RightArrowLeftArrow:"\u21C4",rightleftarrows:"\u21C4",rlarr:"\u21C4",RightCeiling:"\u2309",rceil:"\u2309",RightDoubleBracket:"\u27E7",robrk:"\u27E7",RightDownTeeVector:"\u295D",RightDownVector:"\u21C2",dharr:"\u21C2",downharpoonright:"\u21C2",RightDownVectorBar:"\u2955",RightFloor:"\u230B",rfloor:"\u230B",RightTee:"\u22A2",vdash:"\u22A2",RightTeeArrow:"\u21A6",map:"\u21A6",mapsto:"\u21A6",RightTeeVector:"\u295B",RightTriangle:"\u22B3",vartriangleright:"\u22B3",vrtri:"\u22B3",RightTriangleBar:"\u29D0",RightTriangleEqual:"\u22B5",rtrie:"\u22B5",trianglerighteq:"\u22B5",RightUpDownVector:"\u294F",RightUpTeeVector:"\u295C",RightUpVector:"\u21BE",uharr:"\u21BE",upharpoonright:"\u21BE",RightUpVectorBar:"\u2954",RightVector:"\u21C0",rharu:"\u21C0",rightharpoonup:"\u21C0",RightVectorBar:"\u2953",Ropf:"\u211D",reals:"\u211D",RoundImplies:"\u2970",Rrightarrow:"\u21DB",rAarr:"\u21DB",Rscr:"\u211B",realine:"\u211B",Rsh:"\u21B1",rsh:"\u21B1",RuleDelayed:"\u29F4",SHCHcy:"\u0429",SHcy:"\u0428",SOFTcy:"\u042C",Sacute:"\u015A",Sc:"\u2ABC",Scaron:"\u0160",Scedil:"\u015E",Scirc:"\u015C",Scy:"\u0421",Sfr:"\u{1D516}",ShortUpArrow:"\u2191",UpArrow:"\u2191",uarr:"\u2191",uparrow:"\u2191",Sigma:"\u03A3",SmallCircle:"\u2218",compfn:"\u2218",Sopf:"\u{1D54A}",Sqrt:"\u221A",radic:"\u221A",Square:"\u25A1",squ:"\u25A1",square:"\u25A1",SquareIntersection:"\u2293",sqcap:"\u2293",SquareSubset:"\u228F",sqsub:"\u228F",sqsubset:"\u228F",SquareSubsetEqual:"\u2291",sqsube:"\u2291",sqsubseteq:"\u2291",SquareSuperset:"\u2290",sqsup:"\u2290",sqsupset:"\u2290",SquareSupersetEqual:"\u2292",sqsupe:"\u2292",sqsupseteq:"\u2292",SquareUnion:"\u2294",sqcup:"\u2294",Sscr:"\u{1D4AE}",Star:"\u22C6",sstarf:"\u22C6",Sub:"\u22D0",Subset:"\u22D0",SubsetEqual:"\u2286",sube:"\u2286",subseteq:"\u2286",Succeeds:"\u227B",sc:"\u227B",succ:"\u227B",SucceedsEqual:"\u2AB0",sce:"\u2AB0",succeq:"\u2AB0",SucceedsSlantEqual:"\u227D",sccue:"\u227D",succcurlyeq:"\u227D",SucceedsTilde:"\u227F",scsim:"\u227F",succsim:"\u227F",Sum:"\u2211",sum:"\u2211",Sup:"\u22D1",Supset:"\u22D1",Superset:"\u2283",sup:"\u2283",supset:"\u2283",SupersetEqual:"\u2287",supe:"\u2287",supseteq:"\u2287",THORN:"\xDE",TRADE:"\u2122",trade:"\u2122",TSHcy:"\u040B",TScy:"\u0426",Tab:" ",Tau:"\u03A4",Tcaron:"\u0164",Tcedil:"\u0162",Tcy:"\u0422",Tfr:"\u{1D517}",Therefore:"\u2234",there4:"\u2234",therefore:"\u2234",Theta:"\u0398",ThickSpace:"\u205F\u200A",ThinSpace:"\u2009",thinsp:"\u2009",Tilde:"\u223C",sim:"\u223C",thicksim:"\u223C",thksim:"\u223C",TildeEqual:"\u2243",sime:"\u2243",simeq:"\u2243",TildeFullEqual:"\u2245",cong:"\u2245",TildeTilde:"\u2248",ap:"\u2248",approx:"\u2248",asymp:"\u2248",thickapprox:"\u2248",thkap:"\u2248",Topf:"\u{1D54B}",TripleDot:"\u20DB",tdot:"\u20DB",Tscr:"\u{1D4AF}",Tstrok:"\u0166",Uacute:"\xDA",Uarr:"\u219F",Uarrocir:"\u2949",Ubrcy:"\u040E",Ubreve:"\u016C",Ucirc:"\xDB",Ucy:"\u0423",Udblac:"\u0170",Ufr:"\u{1D518}",Ugrave:"\xD9",Umacr:"\u016A",UnderBar:"_",lowbar:"_",UnderBrace:"\u23DF",UnderBracket:"\u23B5",bbrk:"\u23B5",UnderParenthesis:"\u23DD",Union:"\u22C3",bigcup:"\u22C3",xcup:"\u22C3",UnionPlus:"\u228E",uplus:"\u228E",Uogon:"\u0172",Uopf:"\u{1D54C}",UpArrowBar:"\u2912",UpArrowDownArrow:"\u21C5",udarr:"\u21C5",UpDownArrow:"\u2195",updownarrow:"\u2195",varr:"\u2195",UpEquilibrium:"\u296E",udhar:"\u296E",UpTee:"\u22A5",bot:"\u22A5",bottom:"\u22A5",perp:"\u22A5",UpTeeArrow:"\u21A5",mapstoup:"\u21A5",UpperLeftArrow:"\u2196",nwarr:"\u2196",nwarrow:"\u2196",UpperRightArrow:"\u2197",nearr:"\u2197",nearrow:"\u2197",Upsi:"\u03D2",upsih:"\u03D2",Upsilon:"\u03A5",Uring:"\u016E",Uscr:"\u{1D4B0}",Utilde:"\u0168",Uuml:"\xDC",VDash:"\u22AB",Vbar:"\u2AEB",Vcy:"\u0412",Vdash:"\u22A9",Vdashl:"\u2AE6",Vee:"\u22C1",bigvee:"\u22C1",xvee:"\u22C1",Verbar:"\u2016",Vert:"\u2016",VerticalBar:"\u2223",mid:"\u2223",shortmid:"\u2223",smid:"\u2223",VerticalLine:"|",verbar:"|",vert:"|",VerticalSeparator:"\u2758",VerticalTilde:"\u2240",wr:"\u2240",wreath:"\u2240",VeryThinSpace:"\u200A",hairsp:"\u200A",Vfr:"\u{1D519}",Vopf:"\u{1D54D}",Vscr:"\u{1D4B1}",Vvdash:"\u22AA",Wcirc:"\u0174",Wedge:"\u22C0",bigwedge:"\u22C0",xwedge:"\u22C0",Wfr:"\u{1D51A}",Wopf:"\u{1D54E}",Wscr:"\u{1D4B2}",Xfr:"\u{1D51B}",Xi:"\u039E",Xopf:"\u{1D54F}",Xscr:"\u{1D4B3}",YAcy:"\u042F",YIcy:"\u0407",YUcy:"\u042E",Yacute:"\xDD",Ycirc:"\u0176",Ycy:"\u042B",Yfr:"\u{1D51C}",Yopf:"\u{1D550}",Yscr:"\u{1D4B4}",Yuml:"\u0178",ZHcy:"\u0416",Zacute:"\u0179",Zcaron:"\u017D",Zcy:"\u0417",Zdot:"\u017B",Zeta:"\u0396",Zfr:"\u2128",zeetrf:"\u2128",Zopf:"\u2124",integers:"\u2124",Zscr:"\u{1D4B5}",aacute:"\xE1",abreve:"\u0103",ac:"\u223E",mstpos:"\u223E",acE:"\u223E\u0333",acd:"\u223F",acirc:"\xE2",acy:"\u0430",aelig:"\xE6",afr:"\u{1D51E}",agrave:"\xE0",alefsym:"\u2135",aleph:"\u2135",alpha:"\u03B1",amacr:"\u0101",amalg:"\u2A3F",and:"\u2227",wedge:"\u2227",andand:"\u2A55",andd:"\u2A5C",andslope:"\u2A58",andv:"\u2A5A",ang:"\u2220",angle:"\u2220",ange:"\u29A4",angmsd:"\u2221",measuredangle:"\u2221",angmsdaa:"\u29A8",angmsdab:"\u29A9",angmsdac:"\u29AA",angmsdad:"\u29AB",angmsdae:"\u29AC",angmsdaf:"\u29AD",angmsdag:"\u29AE",angmsdah:"\u29AF",angrt:"\u221F",angrtvb:"\u22BE",angrtvbd:"\u299D",angsph:"\u2222",angzarr:"\u237C",aogon:"\u0105",aopf:"\u{1D552}",apE:"\u2A70",apacir:"\u2A6F",ape:"\u224A",approxeq:"\u224A",apid:"\u224B",apos:"'",aring:"\xE5",ascr:"\u{1D4B6}",ast:"*",midast:"*",atilde:"\xE3",auml:"\xE4",awint:"\u2A11",bNot:"\u2AED",backcong:"\u224C",bcong:"\u224C",backepsilon:"\u03F6",bepsi:"\u03F6",backprime:"\u2035",bprime:"\u2035",backsim:"\u223D",bsim:"\u223D",backsimeq:"\u22CD",bsime:"\u22CD",barvee:"\u22BD",barwed:"\u2305",barwedge:"\u2305",bbrktbrk:"\u23B6",bcy:"\u0431",bdquo:"\u201E",ldquor:"\u201E",bemptyv:"\u29B0",beta:"\u03B2",beth:"\u2136",between:"\u226C",twixt:"\u226C",bfr:"\u{1D51F}",bigcirc:"\u25EF",xcirc:"\u25EF",bigodot:"\u2A00",xodot:"\u2A00",bigoplus:"\u2A01",xoplus:"\u2A01",bigotimes:"\u2A02",xotime:"\u2A02",bigsqcup:"\u2A06",xsqcup:"\u2A06",bigstar:"\u2605",starf:"\u2605",bigtriangledown:"\u25BD",xdtri:"\u25BD",bigtriangleup:"\u25B3",xutri:"\u25B3",biguplus:"\u2A04",xuplus:"\u2A04",bkarow:"\u290D",rbarr:"\u290D",blacklozenge:"\u29EB",lozf:"\u29EB",blacktriangle:"\u25B4",utrif:"\u25B4",blacktriangledown:"\u25BE",dtrif:"\u25BE",blacktriangleleft:"\u25C2",ltrif:"\u25C2",blacktriangleright:"\u25B8",rtrif:"\u25B8",blank:"\u2423",blk12:"\u2592",blk14:"\u2591",blk34:"\u2593",block:"\u2588",bne:"=\u20E5",bnequiv:"\u2261\u20E5",bnot:"\u2310",bopf:"\u{1D553}",bowtie:"\u22C8",boxDL:"\u2557",boxDR:"\u2554",boxDl:"\u2556",boxDr:"\u2553",boxH:"\u2550",boxHD:"\u2566",boxHU:"\u2569",boxHd:"\u2564",boxHu:"\u2567",boxUL:"\u255D",boxUR:"\u255A",boxUl:"\u255C",boxUr:"\u2559",boxV:"\u2551",boxVH:"\u256C",boxVL:"\u2563",boxVR:"\u2560",boxVh:"\u256B",boxVl:"\u2562",boxVr:"\u255F",boxbox:"\u29C9",boxdL:"\u2555",boxdR:"\u2552",boxdl:"\u2510",boxdr:"\u250C",boxhD:"\u2565",boxhU:"\u2568",boxhd:"\u252C",boxhu:"\u2534",boxminus:"\u229F",minusb:"\u229F",boxplus:"\u229E",plusb:"\u229E",boxtimes:"\u22A0",timesb:"\u22A0",boxuL:"\u255B",boxuR:"\u2558",boxul:"\u2518",boxur:"\u2514",boxv:"\u2502",boxvH:"\u256A",boxvL:"\u2561",boxvR:"\u255E",boxvh:"\u253C",boxvl:"\u2524",boxvr:"\u251C",brvbar:"\xA6",bscr:"\u{1D4B7}",bsemi:"\u204F",bsol:"\\",bsolb:"\u29C5",bsolhsub:"\u27C8",bull:"\u2022",bullet:"\u2022",bumpE:"\u2AAE",cacute:"\u0107",cap:"\u2229",capand:"\u2A44",capbrcup:"\u2A49",capcap:"\u2A4B",capcup:"\u2A47",capdot:"\u2A40",caps:"\u2229\uFE00",caret:"\u2041",ccaps:"\u2A4D",ccaron:"\u010D",ccedil:"\xE7",ccirc:"\u0109",ccups:"\u2A4C",ccupssm:"\u2A50",cdot:"\u010B",cemptyv:"\u29B2",cent:"\xA2",cfr:"\u{1D520}",chcy:"\u0447",check:"\u2713",checkmark:"\u2713",chi:"\u03C7",cir:"\u25CB",cirE:"\u29C3",circ:"\u02C6",circeq:"\u2257",cire:"\u2257",circlearrowleft:"\u21BA",olarr:"\u21BA",circlearrowright:"\u21BB",orarr:"\u21BB",circledS:"\u24C8",oS:"\u24C8",circledast:"\u229B",oast:"\u229B",circledcirc:"\u229A",ocir:"\u229A",circleddash:"\u229D",odash:"\u229D",cirfnint:"\u2A10",cirmid:"\u2AEF",cirscir:"\u29C2",clubs:"\u2663",clubsuit:"\u2663",colon:":",comma:",",commat:"@",comp:"\u2201",complement:"\u2201",congdot:"\u2A6D",copf:"\u{1D554}",copysr:"\u2117",crarr:"\u21B5",cross:"\u2717",cscr:"\u{1D4B8}",csub:"\u2ACF",csube:"\u2AD1",csup:"\u2AD0",csupe:"\u2AD2",ctdot:"\u22EF",cudarrl:"\u2938",cudarrr:"\u2935",cuepr:"\u22DE",curlyeqprec:"\u22DE",cuesc:"\u22DF",curlyeqsucc:"\u22DF",cularr:"\u21B6",curvearrowleft:"\u21B6",cularrp:"\u293D",cup:"\u222A",cupbrcap:"\u2A48",cupcap:"\u2A46",cupcup:"\u2A4A",cupdot:"\u228D",cupor:"\u2A45",cups:"\u222A\uFE00",curarr:"\u21B7",curvearrowright:"\u21B7",curarrm:"\u293C",curlyvee:"\u22CE",cuvee:"\u22CE",curlywedge:"\u22CF",cuwed:"\u22CF",curren:"\xA4",cwint:"\u2231",cylcty:"\u232D",dHar:"\u2965",dagger:"\u2020",daleth:"\u2138",dash:"\u2010",hyphen:"\u2010",dbkarow:"\u290F",rBarr:"\u290F",dcaron:"\u010F",dcy:"\u0434",ddarr:"\u21CA",downdownarrows:"\u21CA",ddotseq:"\u2A77",eDDot:"\u2A77",deg:"\xB0",delta:"\u03B4",demptyv:"\u29B1",dfisht:"\u297F",dfr:"\u{1D521}",diamondsuit:"\u2666",diams:"\u2666",digamma:"\u03DD",gammad:"\u03DD",disin:"\u22F2",div:"\xF7",divide:"\xF7",divideontimes:"\u22C7",divonx:"\u22C7",djcy:"\u0452",dlcorn:"\u231E",llcorner:"\u231E",dlcrop:"\u230D",dollar:"$",dopf:"\u{1D555}",doteqdot:"\u2251",eDot:"\u2251",dotminus:"\u2238",minusd:"\u2238",dotplus:"\u2214",plusdo:"\u2214",dotsquare:"\u22A1",sdotb:"\u22A1",drcorn:"\u231F",lrcorner:"\u231F",drcrop:"\u230C",dscr:"\u{1D4B9}",dscy:"\u0455",dsol:"\u29F6",dstrok:"\u0111",dtdot:"\u22F1",dtri:"\u25BF",triangledown:"\u25BF",dwangle:"\u29A6",dzcy:"\u045F",dzigrarr:"\u27FF",eacute:"\xE9",easter:"\u2A6E",ecaron:"\u011B",ecir:"\u2256",eqcirc:"\u2256",ecirc:"\xEA",ecolon:"\u2255",eqcolon:"\u2255",ecy:"\u044D",edot:"\u0117",efDot:"\u2252",fallingdotseq:"\u2252",efr:"\u{1D522}",eg:"\u2A9A",egrave:"\xE8",egs:"\u2A96",eqslantgtr:"\u2A96",egsdot:"\u2A98",el:"\u2A99",elinters:"\u23E7",ell:"\u2113",els:"\u2A95",eqslantless:"\u2A95",elsdot:"\u2A97",emacr:"\u0113",empty:"\u2205",emptyset:"\u2205",emptyv:"\u2205",varnothing:"\u2205",emsp13:"\u2004",emsp14:"\u2005",emsp:"\u2003",eng:"\u014B",ensp:"\u2002",eogon:"\u0119",eopf:"\u{1D556}",epar:"\u22D5",eparsl:"\u29E3",eplus:"\u2A71",epsi:"\u03B5",epsilon:"\u03B5",epsiv:"\u03F5",straightepsilon:"\u03F5",varepsilon:"\u03F5",equals:"=",equest:"\u225F",questeq:"\u225F",equivDD:"\u2A78",eqvparsl:"\u29E5",erDot:"\u2253",risingdotseq:"\u2253",erarr:"\u2971",escr:"\u212F",eta:"\u03B7",eth:"\xF0",euml:"\xEB",euro:"\u20AC",excl:"!",fcy:"\u0444",female:"\u2640",ffilig:"\uFB03",fflig:"\uFB00",ffllig:"\uFB04",ffr:"\u{1D523}",filig:"\uFB01",fjlig:"fj",flat:"\u266D",fllig:"\uFB02",fltns:"\u25B1",fnof:"\u0192",fopf:"\u{1D557}",fork:"\u22D4",pitchfork:"\u22D4",forkv:"\u2AD9",fpartint:"\u2A0D",frac12:"\xBD",half:"\xBD",frac13:"\u2153",frac14:"\xBC",frac15:"\u2155",frac16:"\u2159",frac18:"\u215B",frac23:"\u2154",frac25:"\u2156",frac34:"\xBE",frac35:"\u2157",frac38:"\u215C",frac45:"\u2158",frac56:"\u215A",frac58:"\u215D",frac78:"\u215E",frasl:"\u2044",frown:"\u2322",sfrown:"\u2322",fscr:"\u{1D4BB}",gEl:"\u2A8C",gtreqqless:"\u2A8C",gacute:"\u01F5",gamma:"\u03B3",gap:"\u2A86",gtrapprox:"\u2A86",gbreve:"\u011F",gcirc:"\u011D",gcy:"\u0433",gdot:"\u0121",gescc:"\u2AA9",gesdot:"\u2A80",gesdoto:"\u2A82",gesdotol:"\u2A84",gesl:"\u22DB\uFE00",gesles:"\u2A94",gfr:"\u{1D524}",gimel:"\u2137",gjcy:"\u0453",glE:"\u2A92",gla:"\u2AA5",glj:"\u2AA4",gnE:"\u2269",gneqq:"\u2269",gnap:"\u2A8A",gnapprox:"\u2A8A",gne:"\u2A88",gneq:"\u2A88",gnsim:"\u22E7",gopf:"\u{1D558}",gscr:"\u210A",gsime:"\u2A8E",gsiml:"\u2A90",gtcc:"\u2AA7",gtcir:"\u2A7A",gtdot:"\u22D7",gtrdot:"\u22D7",gtlPar:"\u2995",gtquest:"\u2A7C",gtrarr:"\u2978",gvertneqq:"\u2269\uFE00",gvnE:"\u2269\uFE00",hardcy:"\u044A",harrcir:"\u2948",harrw:"\u21AD",leftrightsquigarrow:"\u21AD",hbar:"\u210F",hslash:"\u210F",planck:"\u210F",plankv:"\u210F",hcirc:"\u0125",hearts:"\u2665",heartsuit:"\u2665",hellip:"\u2026",mldr:"\u2026",hercon:"\u22B9",hfr:"\u{1D525}",hksearow:"\u2925",searhk:"\u2925",hkswarow:"\u2926",swarhk:"\u2926",hoarr:"\u21FF",homtht:"\u223B",hookleftarrow:"\u21A9",larrhk:"\u21A9",hookrightarrow:"\u21AA",rarrhk:"\u21AA",hopf:"\u{1D559}",horbar:"\u2015",hscr:"\u{1D4BD}",hstrok:"\u0127",hybull:"\u2043",iacute:"\xED",icirc:"\xEE",icy:"\u0438",iecy:"\u0435",iexcl:"\xA1",ifr:"\u{1D526}",igrave:"\xEC",iiiint:"\u2A0C",qint:"\u2A0C",iiint:"\u222D",tint:"\u222D",iinfin:"\u29DC",iiota:"\u2129",ijlig:"\u0133",imacr:"\u012B",imath:"\u0131",inodot:"\u0131",imof:"\u22B7",imped:"\u01B5",incare:"\u2105",infin:"\u221E",infintie:"\u29DD",intcal:"\u22BA",intercal:"\u22BA",intlarhk:"\u2A17",intprod:"\u2A3C",iprod:"\u2A3C",iocy:"\u0451",iogon:"\u012F",iopf:"\u{1D55A}",iota:"\u03B9",iquest:"\xBF",iscr:"\u{1D4BE}",isinE:"\u22F9",isindot:"\u22F5",isins:"\u22F4",isinsv:"\u22F3",itilde:"\u0129",iukcy:"\u0456",iuml:"\xEF",jcirc:"\u0135",jcy:"\u0439",jfr:"\u{1D527}",jmath:"\u0237",jopf:"\u{1D55B}",jscr:"\u{1D4BF}",jsercy:"\u0458",jukcy:"\u0454",kappa:"\u03BA",kappav:"\u03F0",varkappa:"\u03F0",kcedil:"\u0137",kcy:"\u043A",kfr:"\u{1D528}",kgreen:"\u0138",khcy:"\u0445",kjcy:"\u045C",kopf:"\u{1D55C}",kscr:"\u{1D4C0}",lAtail:"\u291B",lBarr:"\u290E",lEg:"\u2A8B",lesseqqgtr:"\u2A8B",lHar:"\u2962",lacute:"\u013A",laemptyv:"\u29B4",lambda:"\u03BB",langd:"\u2991",lap:"\u2A85",lessapprox:"\u2A85",laquo:"\xAB",larrbfs:"\u291F",larrfs:"\u291D",larrlp:"\u21AB",looparrowleft:"\u21AB",larrpl:"\u2939",larrsim:"\u2973",larrtl:"\u21A2",leftarrowtail:"\u21A2",lat:"\u2AAB",latail:"\u2919",late:"\u2AAD",lates:"\u2AAD\uFE00",lbarr:"\u290C",lbbrk:"\u2772",lbrace:"{",lcub:"{",lbrack:"[",lsqb:"[",lbrke:"\u298B",lbrksld:"\u298F",lbrkslu:"\u298D",lcaron:"\u013E",lcedil:"\u013C",lcy:"\u043B",ldca:"\u2936",ldrdhar:"\u2967",ldrushar:"\u294B",ldsh:"\u21B2",le:"\u2264",leq:"\u2264",leftleftarrows:"\u21C7",llarr:"\u21C7",leftthreetimes:"\u22CB",lthree:"\u22CB",lescc:"\u2AA8",lesdot:"\u2A7F",lesdoto:"\u2A81",lesdotor:"\u2A83",lesg:"\u22DA\uFE00",lesges:"\u2A93",lessdot:"\u22D6",ltdot:"\u22D6",lfisht:"\u297C",lfr:"\u{1D529}",lgE:"\u2A91",lharul:"\u296A",lhblk:"\u2584",ljcy:"\u0459",llhard:"\u296B",lltri:"\u25FA",lmidot:"\u0140",lmoust:"\u23B0",lmoustache:"\u23B0",lnE:"\u2268",lneqq:"\u2268",lnap:"\u2A89",lnapprox:"\u2A89",lne:"\u2A87",lneq:"\u2A87",lnsim:"\u22E6",loang:"\u27EC",loarr:"\u21FD",longmapsto:"\u27FC",xmap:"\u27FC",looparrowright:"\u21AC",rarrlp:"\u21AC",lopar:"\u2985",lopf:"\u{1D55D}",loplus:"\u2A2D",lotimes:"\u2A34",lowast:"\u2217",loz:"\u25CA",lozenge:"\u25CA",lpar:"(",lparlt:"\u2993",lrhard:"\u296D",lrm:"\u200E",lrtri:"\u22BF",lsaquo:"\u2039",lscr:"\u{1D4C1}",lsime:"\u2A8D",lsimg:"\u2A8F",lsquor:"\u201A",sbquo:"\u201A",lstrok:"\u0142",ltcc:"\u2AA6",ltcir:"\u2A79",ltimes:"\u22C9",ltlarr:"\u2976",ltquest:"\u2A7B",ltrPar:"\u2996",ltri:"\u25C3",triangleleft:"\u25C3",lurdshar:"\u294A",luruhar:"\u2966",lvertneqq:"\u2268\uFE00",lvnE:"\u2268\uFE00",mDDot:"\u223A",macr:"\xAF",strns:"\xAF",male:"\u2642",malt:"\u2720",maltese:"\u2720",marker:"\u25AE",mcomma:"\u2A29",mcy:"\u043C",mdash:"\u2014",mfr:"\u{1D52A}",mho:"\u2127",micro:"\xB5",midcir:"\u2AF0",minus:"\u2212",minusdu:"\u2A2A",mlcp:"\u2ADB",models:"\u22A7",mopf:"\u{1D55E}",mscr:"\u{1D4C2}",mu:"\u03BC",multimap:"\u22B8",mumap:"\u22B8",nGg:"\u22D9\u0338",nGt:"\u226B\u20D2",nLeftarrow:"\u21CD",nlArr:"\u21CD",nLeftrightarrow:"\u21CE",nhArr:"\u21CE",nLl:"\u22D8\u0338",nLt:"\u226A\u20D2",nRightarrow:"\u21CF",nrArr:"\u21CF",nVDash:"\u22AF",nVdash:"\u22AE",nacute:"\u0144",nang:"\u2220\u20D2",napE:"\u2A70\u0338",napid:"\u224B\u0338",napos:"\u0149",natur:"\u266E",natural:"\u266E",ncap:"\u2A43",ncaron:"\u0148",ncedil:"\u0146",ncongdot:"\u2A6D\u0338",ncup:"\u2A42",ncy:"\u043D",ndash:"\u2013",neArr:"\u21D7",nearhk:"\u2924",nedot:"\u2250\u0338",nesear:"\u2928",toea:"\u2928",nfr:"\u{1D52B}",nharr:"\u21AE",nleftrightarrow:"\u21AE",nhpar:"\u2AF2",nis:"\u22FC",nisd:"\u22FA",njcy:"\u045A",nlE:"\u2266\u0338",nleqq:"\u2266\u0338",nlarr:"\u219A",nleftarrow:"\u219A",nldr:"\u2025",nopf:"\u{1D55F}",not:"\xAC",notinE:"\u22F9\u0338",notindot:"\u22F5\u0338",notinvb:"\u22F7",notinvc:"\u22F6",notnivb:"\u22FE",notnivc:"\u22FD",nparsl:"\u2AFD\u20E5",npart:"\u2202\u0338",npolint:"\u2A14",nrarr:"\u219B",nrightarrow:"\u219B",nrarrc:"\u2933\u0338",nrarrw:"\u219D\u0338",nscr:"\u{1D4C3}",nsub:"\u2284",nsubE:"\u2AC5\u0338",nsubseteqq:"\u2AC5\u0338",nsup:"\u2285",nsupE:"\u2AC6\u0338",nsupseteqq:"\u2AC6\u0338",ntilde:"\xF1",nu:"\u03BD",num:"#",numero:"\u2116",numsp:"\u2007",nvDash:"\u22AD",nvHarr:"\u2904",nvap:"\u224D\u20D2",nvdash:"\u22AC",nvge:"\u2265\u20D2",nvgt:">\u20D2",nvinfin:"\u29DE",nvlArr:"\u2902",nvle:"\u2264\u20D2",nvlt:"<\u20D2",nvltrie:"\u22B4\u20D2",nvrArr:"\u2903",nvrtrie:"\u22B5\u20D2",nvsim:"\u223C\u20D2",nwArr:"\u21D6",nwarhk:"\u2923",nwnear:"\u2927",oacute:"\xF3",ocirc:"\xF4",ocy:"\u043E",odblac:"\u0151",odiv:"\u2A38",odsold:"\u29BC",oelig:"\u0153",ofcir:"\u29BF",ofr:"\u{1D52C}",ogon:"\u02DB",ograve:"\xF2",ogt:"\u29C1",ohbar:"\u29B5",olcir:"\u29BE",olcross:"\u29BB",olt:"\u29C0",omacr:"\u014D",omega:"\u03C9",omicron:"\u03BF",omid:"\u29B6",oopf:"\u{1D560}",opar:"\u29B7",operp:"\u29B9",or:"\u2228",vee:"\u2228",ord:"\u2A5D",order:"\u2134",orderof:"\u2134",oscr:"\u2134",ordf:"\xAA",ordm:"\xBA",origof:"\u22B6",oror:"\u2A56",orslope:"\u2A57",orv:"\u2A5B",oslash:"\xF8",osol:"\u2298",otilde:"\xF5",otimesas:"\u2A36",ouml:"\xF6",ovbar:"\u233D",para:"\xB6",parsim:"\u2AF3",parsl:"\u2AFD",pcy:"\u043F",percnt:"%",period:".",permil:"\u2030",pertenk:"\u2031",pfr:"\u{1D52D}",phi:"\u03C6",phiv:"\u03D5",straightphi:"\u03D5",varphi:"\u03D5",phone:"\u260E",pi:"\u03C0",piv:"\u03D6",varpi:"\u03D6",planckh:"\u210E",plus:"+",plusacir:"\u2A23",pluscir:"\u2A22",plusdu:"\u2A25",pluse:"\u2A72",plussim:"\u2A26",plustwo:"\u2A27",pointint:"\u2A15",popf:"\u{1D561}",pound:"\xA3",prE:"\u2AB3",prap:"\u2AB7",precapprox:"\u2AB7",precnapprox:"\u2AB9",prnap:"\u2AB9",precneqq:"\u2AB5",prnE:"\u2AB5",precnsim:"\u22E8",prnsim:"\u22E8",prime:"\u2032",profalar:"\u232E",profline:"\u2312",profsurf:"\u2313",prurel:"\u22B0",pscr:"\u{1D4C5}",psi:"\u03C8",puncsp:"\u2008",qfr:"\u{1D52E}",qopf:"\u{1D562}",qprime:"\u2057",qscr:"\u{1D4C6}",quatint:"\u2A16",quest:"?",rAtail:"\u291C",rHar:"\u2964",race:"\u223D\u0331",racute:"\u0155",raemptyv:"\u29B3",rangd:"\u2992",range:"\u29A5",raquo:"\xBB",rarrap:"\u2975",rarrbfs:"\u2920",rarrc:"\u2933",rarrfs:"\u291E",rarrpl:"\u2945",rarrsim:"\u2974",rarrtl:"\u21A3",rightarrowtail:"\u21A3",rarrw:"\u219D",rightsquigarrow:"\u219D",ratail:"\u291A",ratio:"\u2236",rbbrk:"\u2773",rbrace:"}",rcub:"}",rbrack:"]",rsqb:"]",rbrke:"\u298C",rbrksld:"\u298E",rbrkslu:"\u2990",rcaron:"\u0159",rcedil:"\u0157",rcy:"\u0440",rdca:"\u2937",rdldhar:"\u2969",rdsh:"\u21B3",rect:"\u25AD",rfisht:"\u297D",rfr:"\u{1D52F}",rharul:"\u296C",rho:"\u03C1",rhov:"\u03F1",varrho:"\u03F1",rightrightarrows:"\u21C9",rrarr:"\u21C9",rightthreetimes:"\u22CC",rthree:"\u22CC",ring:"\u02DA",rlm:"\u200F",rmoust:"\u23B1",rmoustache:"\u23B1",rnmid:"\u2AEE",roang:"\u27ED",roarr:"\u21FE",ropar:"\u2986",ropf:"\u{1D563}",roplus:"\u2A2E",rotimes:"\u2A35",rpar:")",rpargt:"\u2994",rppolint:"\u2A12",rsaquo:"\u203A",rscr:"\u{1D4C7}",rtimes:"\u22CA",rtri:"\u25B9",triangleright:"\u25B9",rtriltri:"\u29CE",ruluhar:"\u2968",rx:"\u211E",sacute:"\u015B",scE:"\u2AB4",scap:"\u2AB8",succapprox:"\u2AB8",scaron:"\u0161",scedil:"\u015F",scirc:"\u015D",scnE:"\u2AB6",succneqq:"\u2AB6",scnap:"\u2ABA",succnapprox:"\u2ABA",scnsim:"\u22E9",succnsim:"\u22E9",scpolint:"\u2A13",scy:"\u0441",sdot:"\u22C5",sdote:"\u2A66",seArr:"\u21D8",sect:"\xA7",semi:";",seswar:"\u2929",tosa:"\u2929",sext:"\u2736",sfr:"\u{1D530}",sharp:"\u266F",shchcy:"\u0449",shcy:"\u0448",shy:"\xAD",sigma:"\u03C3",sigmaf:"\u03C2",sigmav:"\u03C2",varsigma:"\u03C2",simdot:"\u2A6A",simg:"\u2A9E",simgE:"\u2AA0",siml:"\u2A9D",simlE:"\u2A9F",simne:"\u2246",simplus:"\u2A24",simrarr:"\u2972",smashp:"\u2A33",smeparsl:"\u29E4",smile:"\u2323",ssmile:"\u2323",smt:"\u2AAA",smte:"\u2AAC",smtes:"\u2AAC\uFE00",softcy:"\u044C",sol:"/",solb:"\u29C4",solbar:"\u233F",sopf:"\u{1D564}",spades:"\u2660",spadesuit:"\u2660",sqcaps:"\u2293\uFE00",sqcups:"\u2294\uFE00",sscr:"\u{1D4C8}",star:"\u2606",sub:"\u2282",subset:"\u2282",subE:"\u2AC5",subseteqq:"\u2AC5",subdot:"\u2ABD",subedot:"\u2AC3",submult:"\u2AC1",subnE:"\u2ACB",subsetneqq:"\u2ACB",subne:"\u228A",subsetneq:"\u228A",subplus:"\u2ABF",subrarr:"\u2979",subsim:"\u2AC7",subsub:"\u2AD5",subsup:"\u2AD3",sung:"\u266A",sup1:"\xB9",sup2:"\xB2",sup3:"\xB3",supE:"\u2AC6",supseteqq:"\u2AC6",supdot:"\u2ABE",supdsub:"\u2AD8",supedot:"\u2AC4",suphsol:"\u27C9",suphsub:"\u2AD7",suplarr:"\u297B",supmult:"\u2AC2",supnE:"\u2ACC",supsetneqq:"\u2ACC",supne:"\u228B",supsetneq:"\u228B",supplus:"\u2AC0",supsim:"\u2AC8",supsub:"\u2AD4",supsup:"\u2AD6",swArr:"\u21D9",swnwar:"\u292A",szlig:"\xDF",target:"\u2316",tau:"\u03C4",tcaron:"\u0165",tcedil:"\u0163",tcy:"\u0442",telrec:"\u2315",tfr:"\u{1D531}",theta:"\u03B8",thetasym:"\u03D1",thetav:"\u03D1",vartheta:"\u03D1",thorn:"\xFE",times:"\xD7",timesbar:"\u2A31",timesd:"\u2A30",topbot:"\u2336",topcir:"\u2AF1",topf:"\u{1D565}",topfork:"\u2ADA",tprime:"\u2034",triangle:"\u25B5",utri:"\u25B5",triangleq:"\u225C",trie:"\u225C",tridot:"\u25EC",triminus:"\u2A3A",triplus:"\u2A39",trisb:"\u29CD",tritime:"\u2A3B",trpezium:"\u23E2",tscr:"\u{1D4C9}",tscy:"\u0446",tshcy:"\u045B",tstrok:"\u0167",uHar:"\u2963",uacute:"\xFA",ubrcy:"\u045E",ubreve:"\u016D",ucirc:"\xFB",ucy:"\u0443",udblac:"\u0171",ufisht:"\u297E",ufr:"\u{1D532}",ugrave:"\xF9",uhblk:"\u2580",ulcorn:"\u231C",ulcorner:"\u231C",ulcrop:"\u230F",ultri:"\u25F8",umacr:"\u016B",uogon:"\u0173",uopf:"\u{1D566}",upsi:"\u03C5",upsilon:"\u03C5",upuparrows:"\u21C8",uuarr:"\u21C8",urcorn:"\u231D",urcorner:"\u231D",urcrop:"\u230E",uring:"\u016F",urtri:"\u25F9",uscr:"\u{1D4CA}",utdot:"\u22F0",utilde:"\u0169",uuml:"\xFC",uwangle:"\u29A7",vBar:"\u2AE8",vBarv:"\u2AE9",vangrt:"\u299C",varsubsetneq:"\u228A\uFE00",vsubne:"\u228A\uFE00",varsubsetneqq:"\u2ACB\uFE00",vsubnE:"\u2ACB\uFE00",varsupsetneq:"\u228B\uFE00",vsupne:"\u228B\uFE00",varsupsetneqq:"\u2ACC\uFE00",vsupnE:"\u2ACC\uFE00",vcy:"\u0432",veebar:"\u22BB",veeeq:"\u225A",vellip:"\u22EE",vfr:"\u{1D533}",vopf:"\u{1D567}",vscr:"\u{1D4CB}",vzigzag:"\u299A",wcirc:"\u0175",wedbar:"\u2A5F",wedgeq:"\u2259",weierp:"\u2118",wp:"\u2118",wfr:"\u{1D534}",wopf:"\u{1D568}",wscr:"\u{1D4CC}",xfr:"\u{1D535}",xi:"\u03BE",xnis:"\u22FB",xopf:"\u{1D569}",xscr:"\u{1D4CD}",yacute:"\xFD",yacy:"\u044F",ycirc:"\u0177",ycy:"\u044B",yen:"\xA5",yfr:"\u{1D536}",yicy:"\u0457",yopf:"\u{1D56A}",yscr:"\u{1D4CE}",yucy:"\u044E",yuml:"\xFF",zacute:"\u017A",zcaron:"\u017E",zcy:"\u0437",zdot:"\u017C",zeta:"\u03B6",zfr:"\u{1D537}",zhcy:"\u0436",zigrarr:"\u21DD",zopf:"\u{1D56B}",zscr:"\u{1D4CF}",zwj:"\u200D",zwnj:"\u200C"},CF="\uE500";P0.ngsp=CF;var o3=class{tokens;errors;nonNormalizedIcuExpressions;constructor(o,e,t){this.tokens=o,this.errors=e,this.nonNormalizedIcuExpressions=t}};function zq(n,o,e,t={}){let i=new r3(new ax(n,o),e,t);return i.tokenize(),new o3(qq(i.tokens),i.errors,i.nonNormalizedIcuExpressions)}var Lq=/\r\n?/g;function bg(n){return`Unexpected character "${n===or?"EOF":String.fromCharCode(n)}"`}function y6(n){return`Unknown entity "${n}" - use the "&#<decimal>;" or "&#x<hex>;" syntax`}function Vq(n,o){return`Unable to parse entity "${o}" - ${n} character reference entities must end with ";"`}var a3=(function(n){return n.HEX="hexadecimal",n.DEC="decimal",n})(a3||{}),Bq=["@if","@else","@for","@switch","@case","@default","@empty","@defer","@placeholder","@loading","@error"],hf={start:"{{",end:"}}"},r3=class{_getTagDefinition;_cursor;_tokenizeIcu;_leadingTriviaCodePoints;_currentTokenStart=null;_currentTokenType=null;_expansionCaseStack=[];_openDirectiveCount=0;_inInterpolation=!1;_preserveLineEndings;_i18nNormalizeLineEndingsInICUs;_tokenizeBlocks;_tokenizeLet;_selectorlessEnabled;tokens=[];errors=[];nonNormalizedIcuExpressions=[];constructor(o,e,t){this._getTagDefinition=e,this._tokenizeIcu=t.tokenizeExpansionForms||!1,this._leadingTriviaCodePoints=t.leadingTriviaChars&&t.leadingTriviaChars.map(a=>a.codePointAt(0)||0);let i=t.range||{endPos:o.content.length,startPos:0,startLine:0,startCol:0};this._cursor=t.escapedString?new s3(o,i):new xx(o,i),this._preserveLineEndings=t.preserveLineEndings||!1,this._i18nNormalizeLineEndingsInICUs=t.i18nNormalizeLineEndingsInICUs||!1,this._tokenizeBlocks=t.tokenizeBlocks??!0,this._tokenizeLet=t.tokenizeLet??!0,this._selectorlessEnabled=t.selectorlessEnabled??!1;try{this._cursor.init()}catch(a){this.handleError(a)}}_processCarriageReturns(o){return this._preserveLineEndings?o:o.replace(Lq,`
|
||
`)}tokenize(){for(;this._cursor.peek()!==or;){let o=this._cursor.clone();try{this._attemptCharCode(Ig)?this._attemptCharCode(LP)?this._attemptCharCode(Lc)?this._consumeCdata(o):this._attemptCharCode(ix)?this._consumeComment(o):this._consumeDocType(o):this._attemptCharCode(gl)?this._consumeTagClose(o):this._consumeTagOpen(o):this._tokenizeLet&&this._cursor.peek()===fg&&!this._inInterpolation&&this._isLetStart()?this._consumeLetDeclaration(o):this._tokenizeBlocks&&this._isBlockStart()?this._consumeBlockStart(o):this._tokenizeBlocks&&!this._inInterpolation&&!this._isInExpansionCase()&&!this._isInExpansionForm()&&this._attemptCharCode(es)?this._consumeBlockEnd(o):this._tokenizeIcu&&this._tokenizeExpansionForm()||this._consumeWithInterpolation(5,8,()=>this._isTextEnd(),()=>this._isTagStart())}catch(e){this.handleError(e)}}this._beginToken(41),this._endToken([])}_getBlockName(){let o=!1,e=this._cursor.clone();return this._attemptCharCodeUntilFn(t=>g0(t)?!o:Gq(t)?(o=!0,!1):!0),this._cursor.getChars(e).trim()}_consumeBlockStart(o){this._requireCharCode(fg),this._beginToken(24,o);let e=this._endToken([this._getBlockName()]);if(e.parts[0]==="default never"&&this._attemptCharCode(bs)){this._beginToken(25),this._endToken([]),this._beginToken(26),this._endToken([]);return}if(this._cursor.peek()===ns)if(this._cursor.advance(),this._consumeBlockParameters(),this._attemptCharCodeUntilFn(Uo),this._attemptCharCode(Ea))this._attemptCharCodeUntilFn(Uo);else{e.type=28;return}this._attemptCharCode(fl)?(this._beginToken(25),this._endToken([])):this._isBlockStart()&&(e.parts[0]==="case"||e.parts[0]==="default")?(this._beginToken(25),this._endToken([]),this._beginToken(26),this._endToken([])):e.type=28}_consumeBlockEnd(o){this._beginToken(26,o),this._endToken([])}_consumeBlockParameters(){for(this._attemptCharCodeUntilFn(M6);this._cursor.peek()!==Ea&&this._cursor.peek()!==or;){this._beginToken(27);let o=this._cursor.clone(),e=null,t=0;for(;this._cursor.peek()!==bs&&this._cursor.peek()!==or||e!==null;){let i=this._cursor.peek();if(i===Jp)this._cursor.advance();else if(i===e)e=null;else if(e===null&&Of(i))e=i;else if(i===ns&&e===null)t++;else if(i===Ea&&e===null){if(t===0)break;t>0&&t--}this._cursor.advance()}this._endToken([this._cursor.getChars(o)]),this._attemptCharCodeUntilFn(M6)}}_consumeLetDeclaration(o){if(this._requireStr("@let"),this._beginToken(29,o),g0(this._cursor.peek()))this._attemptCharCodeUntilFn(Uo);else{let i=this._endToken([this._cursor.getChars(o)]);i.type=32;return}let e=this._endToken([this._getLetDeclarationName()]);if(this._attemptCharCodeUntilFn(Uo),!this._attemptCharCode(nr)){e.type=32;return}this._attemptCharCodeUntilFn(i=>Uo(i)&&!ox(i)),this._consumeLetDeclarationValue(),this._cursor.peek()===bs?(this._beginToken(31),this._cursor.advance(),this._endToken([])):(e.type=32,e.sourceSpan=this._cursor.getSpan(o))}_getLetDeclarationName(){let o=this._cursor.clone(),e=!1;return this._attemptCharCodeUntilFn(t=>Nm(t)||t===zx||t===Bm||e&&hl(t)?(e=!0,!1):!0),this._cursor.getChars(o).trim()}_consumeLetDeclarationValue(){let o=this._cursor.clone();for(this._beginToken(30,o);this._cursor.peek()!==or;){let e=this._cursor.peek();if(e===bs)break;Of(e)&&(this._cursor.advance(),this._attemptCharCodeUntilFn(t=>t===Jp?(this._cursor.advance(),!1):t===e)),this._cursor.advance()}this._endToken([this._cursor.getChars(o)])}_tokenizeExpansionForm(){if(this.isExpansionFormStart())return this._consumeExpansionFormStart(),!0;if(Uq(this._cursor.peek())&&this._isInExpansionForm())return this._consumeExpansionCaseStart(),!0;if(this._cursor.peek()===es){if(this._isInExpansionCase())return this._consumeExpansionCaseEnd(),!0;if(this._isInExpansionForm())return this._consumeExpansionFormEnd(),!0}return!1}_beginToken(o,e=this._cursor.clone()){this._currentTokenStart=e,this._currentTokenType=o}_endToken(o,e){if(this._currentTokenStart===null)throw new dn(this._cursor.getSpan(e),"Programming error - attempted to end a token when there was no start to the token");if(this._currentTokenType===null)throw new dn(this._cursor.getSpan(this._currentTokenStart),"Programming error - attempted to end a token which has no token type");let t={type:this._currentTokenType,parts:o,sourceSpan:(e??this._cursor).getSpan(this._currentTokenStart,this._leadingTriviaCodePoints)};return this.tokens.push(t),this._currentTokenStart=null,this._currentTokenType=null,t}_createError(o,e){this._isInExpansionForm()&&(o+=` (Do you have an unescaped "{" in your template? Use "{{ '{' }}") to escape it.)`);let t=new dn(e,o);return this._currentTokenStart=null,this._currentTokenType=null,t}handleError(o){if(o instanceof T0&&(o=this._createError(o.msg,this._cursor.getSpan(o.cursor))),o instanceof dn)this.errors.push(o);else throw o}_attemptCharCode(o){return this._cursor.peek()===o?(this._cursor.advance(),!0):!1}_attemptCharCodeCaseInsensitive(o){return Wq(this._cursor.peek(),o)?(this._cursor.advance(),!0):!1}_requireCharCode(o){let e=this._cursor.clone();if(!this._attemptCharCode(o))throw this._createError(bg(this._cursor.peek()),this._cursor.getSpan(e))}_attemptStr(o){let e=o.length;if(this._cursor.charsLeft()<e)return!1;let t=this._cursor.clone();for(let i=0;i<e;i++)if(!this._attemptCharCode(o.charCodeAt(i)))return this._cursor=t,!1;return!0}_attemptStrCaseInsensitive(o){for(let e=0;e<o.length;e++)if(!this._attemptCharCodeCaseInsensitive(o.charCodeAt(e)))return!1;return!0}_requireStr(o){let e=this._cursor.clone();if(!this._attemptStr(o))throw this._createError(bg(this._cursor.peek()),this._cursor.getSpan(e))}_attemptCharCodeUntilFn(o){for(;!o(this._cursor.peek());)this._cursor.advance()}_requireCharCodeUntilFn(o,e){let t=this._cursor.clone();if(this._attemptCharCodeUntilFn(o),this._cursor.diff(t)<e)throw this._createError(bg(this._cursor.peek()),this._cursor.getSpan(t))}_attemptUntilChar(o){for(;this._cursor.peek()!==o;)this._cursor.advance()}_readChar(){let o=String.fromCodePoint(this._cursor.peek());return this._cursor.advance(),o}_peekStr(o){let e=o.length;if(this._cursor.charsLeft()<e)return!1;let t=this._cursor.clone();for(let i=0;i<e;i++){if(t.peek()!==o.charCodeAt(i))return!1;t.advance()}return!0}_isBlockStart(){return this._cursor.peek()===fg&&Bq.some(o=>this._peekStr(o))}_isLetStart(){return this._cursor.peek()===fg&&this._peekStr("@let")}_consumeEntity(o){this._beginToken(9);let e=this._cursor.clone();if(this._cursor.advance(),this._attemptCharCode(HN)){let t=this._attemptCharCode(YN)||this._attemptCharCode(nW),i=this._cursor.clone();if(this._attemptCharCodeUntilFn($q),this._cursor.peek()!=bs){this._cursor.advance();let s=t?a3.HEX:a3.DEC;throw this._createError(Vq(s,this._cursor.getChars(e)),this._cursor.getSpan())}let a=this._cursor.getChars(i);this._cursor.advance();try{let s=parseInt(a,t?16:10);this._endToken([String.fromCodePoint(s),this._cursor.getChars(e)])}catch{throw this._createError(y6(this._cursor.getChars(e)),this._cursor.getSpan())}}else{let t=this._cursor.clone();if(this._attemptCharCodeUntilFn(Hq),this._cursor.peek()!=bs)this._beginToken(o,e),this._cursor=t,this._endToken(["&"]);else{let i=this._cursor.getChars(t);this._cursor.advance();let a=P0.hasOwnProperty(i)&&P0[i];if(!a)throw this._createError(y6(i),this._cursor.getSpan(e));this._endToken([a,`&${i};`])}}}_consumeRawText(o,e){this._beginToken(o?6:7);let t=[];for(;;){let i=this._cursor.clone(),a=e();if(this._cursor=i,a)break;o&&this._cursor.peek()===nx?(this._endToken([this._processCarriageReturns(t.join(""))]),t.length=0,this._consumeEntity(6),this._beginToken(6)):t.push(this._readChar())}this._endToken([this._processCarriageReturns(t.join(""))])}_consumeComment(o){this._beginToken(10,o),this._requireCharCode(ix),this._endToken([]),this._consumeRawText(!1,()=>this._attemptStr("-->")),this._beginToken(11),this._requireStr("-->"),this._endToken([])}_consumeCdata(o){this._beginToken(12,o),this._requireStr("CDATA["),this._endToken([]),this._consumeRawText(!1,()=>this._attemptStr("]]>")),this._beginToken(13),this._requireStr("]]>"),this._endToken([])}_consumeDocType(o){this._beginToken(18,o);let e=this._cursor.clone();this._attemptUntilChar(Ws);let t=this._cursor.getChars(e);this._cursor.advance(),this._endToken([t])}_consumePrefixAndName(o){let e=this._cursor.clone(),t="";for(;this._cursor.peek()!==Fc&&!jq(this._cursor.peek());)this._cursor.advance();let i;this._cursor.peek()===Fc?(t=this._cursor.getChars(e),this._cursor.advance(),i=this._cursor.clone()):i=e,this._requireCharCodeUntilFn(o,t===""?0:1);let a=this._cursor.getChars(i);return[t,a]}_consumeTagOpen(o){let e,t,i,a;try{if(this._selectorlessEnabled&&mb(this._cursor.peek()))a=this._consumeComponentOpenStart(o),[i,t,e]=a.parts,t&&(i+=`:${t}`),e&&(i+=`:${e}`),this._attemptCharCodeUntilFn(Uo);else{if(!Nm(this._cursor.peek()))throw this._createError(bg(this._cursor.peek()),this._cursor.getSpan(o));a=this._consumeTagOpenStart(o),t=a.parts[0],e=i=a.parts[1],this._attemptCharCodeUntilFn(Uo)}for(;!k6(this._cursor.peek());)if(this._selectorlessEnabled&&this._cursor.peek()===fg){let d=this._cursor.clone(),p=d.clone();p.advance(),mb(p.peek())&&this._consumeDirective(d,p)}else this._consumeAttribute();a.type===33?this._consumeComponentOpenEnd():this._consumeTagOpenEnd()}catch(d){if(d instanceof dn){a?a.type=a.type===33?37:4:(this._beginToken(5,o),this._endToken(["<"]));return}throw d}let s=this._getTagDefinition(e).getContentType(t);s===Nc.RAW_TEXT?this._consumeRawTextWithTagClose(a,i,!1):s===Nc.ESCAPABLE_RAW_TEXT&&this._consumeRawTextWithTagClose(a,i,!0)}_consumeRawTextWithTagClose(o,e,t){this._consumeRawText(t,()=>!this._attemptCharCode(Ig)||!this._attemptCharCode(gl)||(this._attemptCharCodeUntilFn(Uo),!this._attemptStrCaseInsensitive(e))?!1:(this._attemptCharCodeUntilFn(Uo),this._attemptCharCode(Ws))),this._beginToken(o.type===33?36:3),this._requireCharCodeUntilFn(i=>i===Ws,3),this._cursor.advance(),this._endToken(o.parts)}_consumeTagOpenStart(o){this._beginToken(0,o);let e=this._consumePrefixAndName(Bp);return this._endToken(e)}_consumeComponentOpenStart(o){this._beginToken(33,o);let e=this._consumeComponentName();return this._endToken(e)}_consumeComponentName(){let o=this._cursor.clone();for(;S6(this._cursor.peek());)this._cursor.advance();let e=this._cursor.getChars(o),t="",i="";return this._cursor.peek()===Fc&&(this._cursor.advance(),[t,i]=this._consumePrefixAndName(Bp)),[e,t,i]}_consumeAttribute(){this._consumeAttributeName(),this._attemptCharCodeUntilFn(Uo),this._attemptCharCode(nr)&&(this._attemptCharCodeUntilFn(Uo),this._consumeAttributeValue()),this._attemptCharCodeUntilFn(Uo)}_consumeAttributeName(){let o=this._cursor.peek();if(o===u0||o===p0)throw this._createError(bg(o),this._cursor.getSpan());this._beginToken(14);let e;if(this._openDirectiveCount>0){let i=0;e=a=>{if(this._openDirectiveCount>0){if(a===ns)i++;else if(a===Ea){if(i===0)return!0;i--}}return Bp(a)}}else if(o===Lc){let i=0;e=a=>(a===Lc?i++:a===Od&&i--,i<=0?Bp(a):ox(a))}else e=Bp;let t=this._consumePrefixAndName(e);this._endToken(t)}_consumeAttributeValue(){if(this._cursor.peek()===u0||this._cursor.peek()===p0){let o=this._cursor.peek();this._consumeQuote(o);let e=()=>this._cursor.peek()===o;this._consumeWithInterpolation(16,17,e,e),this._consumeQuote(o)}else{let o=()=>Bp(this._cursor.peek());this._consumeWithInterpolation(16,17,o,o)}}_consumeQuote(o){this._beginToken(15),this._requireCharCode(o),this._endToken([String.fromCodePoint(o)])}_consumeTagOpenEnd(){let o=this._attemptCharCode(gl)?2:1;this._beginToken(o),this._requireCharCode(Ws),this._endToken([])}_consumeComponentOpenEnd(){let o=this._attemptCharCode(gl)?35:34;this._beginToken(o),this._requireCharCode(Ws),this._endToken([])}_consumeTagClose(o){if(this._selectorlessEnabled){let t=o.clone();for(;t.peek()!==Ws&&!mb(t.peek());)t.advance();if(mb(t.peek())){this._beginToken(36,o);let i=this._consumeComponentName();this._attemptCharCodeUntilFn(Uo),this._requireCharCode(Ws),this._endToken(i);return}}this._beginToken(3,o),this._attemptCharCodeUntilFn(Uo);let e=this._consumePrefixAndName(Bp);this._attemptCharCodeUntilFn(Uo),this._requireCharCode(Ws),this._endToken(e)}_consumeExpansionFormStart(){this._beginToken(19),this._requireCharCode(fl),this._endToken([]),this._expansionCaseStack.push(19),this._beginToken(7);let o=this._readUntil(Nr),e=this._processCarriageReturns(o);if(this._i18nNormalizeLineEndingsInICUs)this._endToken([e]);else{let i=this._endToken([o]);e!==o&&this.nonNormalizedIcuExpressions.push(i)}this._requireCharCode(Nr),this._attemptCharCodeUntilFn(Uo),this._beginToken(7);let t=this._readUntil(Nr);this._endToken([t]),this._requireCharCode(Nr),this._attemptCharCodeUntilFn(Uo)}_consumeExpansionCaseStart(){this._beginToken(20);let o=this._readUntil(fl).trim();this._endToken([o]),this._attemptCharCodeUntilFn(Uo),this._beginToken(21),this._requireCharCode(fl),this._endToken([]),this._attemptCharCodeUntilFn(Uo),this._expansionCaseStack.push(21)}_consumeExpansionCaseEnd(){this._beginToken(22),this._requireCharCode(es),this._endToken([]),this._attemptCharCodeUntilFn(Uo),this._expansionCaseStack.pop()}_consumeExpansionFormEnd(){this._beginToken(23),this._requireCharCode(es),this._endToken([]),this._expansionCaseStack.pop()}_consumeWithInterpolation(o,e,t,i){this._beginToken(o);let a=[];for(;!t();){let s=this._cursor.clone();this._attemptStr(hf.start)?(this._endToken([this._processCarriageReturns(a.join(""))],s),a.length=0,this._consumeInterpolation(e,s,i),this._beginToken(o)):this._cursor.peek()===nx?(this._endToken([this._processCarriageReturns(a.join(""))]),a.length=0,this._consumeEntity(o),this._beginToken(o)):a.push(this._readChar())}this._inInterpolation=!1,this._endToken([this._processCarriageReturns(a.join(""))])}_consumeInterpolation(o,e,t){let i=[];this._beginToken(o,e),i.push(hf.start);let a=this._cursor.clone(),s=null,d=!1;for(;this._cursor.peek()!==or&&(t===null||!t());){let p=this._cursor.clone();if(this._isTagStart()){this._cursor=p,i.push(this._getProcessedChars(a,p)),this._endToken(i);return}if(s===null)if(this._attemptStr(hf.end)){i.push(this._getProcessedChars(a,p)),i.push(hf.end),this._endToken(i);return}else this._attemptStr("//")&&(d=!0);let u=this._cursor.peek();this._cursor.advance(),u===Jp?this._cursor.advance():u===s?s=null:!d&&s===null&&Of(u)&&(s=u)}i.push(this._getProcessedChars(a,this._cursor)),this._endToken(i)}_consumeDirective(o,e){for(this._requireCharCode(fg),this._cursor.advance();S6(this._cursor.peek());)this._cursor.advance();this._beginToken(38,o);let t=this._cursor.getChars(e);if(this._endToken([t]),this._attemptCharCodeUntilFn(Uo),this._cursor.peek()===ns){for(this._openDirectiveCount++,this._beginToken(39),this._cursor.advance(),this._endToken([]),this._attemptCharCodeUntilFn(Uo);!k6(this._cursor.peek())&&this._cursor.peek()!==Ea;)this._consumeAttribute();if(this._attemptCharCodeUntilFn(Uo),this._openDirectiveCount--,this._cursor.peek()!==Ea){if(this._cursor.peek()===Ws||this._cursor.peek()===gl)return;throw this._createError(bg(this._cursor.peek()),this._cursor.getSpan(o))}this._beginToken(40),this._cursor.advance(),this._endToken([]),this._attemptCharCodeUntilFn(Uo)}}_getProcessedChars(o,e){return this._processCarriageReturns(e.getChars(o))}_isTextEnd(){return!!(this._isTagStart()||this._cursor.peek()===or||this._tokenizeIcu&&!this._inInterpolation&&(this.isExpansionFormStart()||this._cursor.peek()===es&&this._isInExpansionCase())||this._tokenizeBlocks&&!this._inInterpolation&&!this._isInExpansion()&&(this._isBlockStart()||this._isLetStart()||this._cursor.peek()===es))}_isTagStart(){if(this._cursor.peek()===Ig){let o=this._cursor.clone();o.advance();let e=o.peek();if(pu<=e&&e<=z0||Vm<=e&&e<=eh||e===gl||e===LP)return!0}return!1}_readUntil(o){let e=this._cursor.clone();return this._attemptUntilChar(o),this._cursor.getChars(e)}_isInExpansion(){return this._isInExpansionCase()||this._isInExpansionForm()}_isInExpansionCase(){return this._expansionCaseStack.length>0&&this._expansionCaseStack[this._expansionCaseStack.length-1]===21}_isInExpansionForm(){return this._expansionCaseStack.length>0&&this._expansionCaseStack[this._expansionCaseStack.length-1]===19}isExpansionFormStart(){if(this._cursor.peek()!==fl)return!1;let o=this._cursor.clone(),e=this._attemptStr(hf.start);return this._cursor=o,!e}};function Uo(n){return!g0(n)||n===or}function Bp(n){return g0(n)||n===Ws||n===Ig||n===gl||n===u0||n===p0||n===nr||n===or}function jq(n){return(n<pu||z0<n)&&(n<Vm||eh<n)&&(n<Z3||n>WN)}function $q(n){return n===bs||n===or||!rW(n)}function Hq(n){return n===bs||n===or||!(Nm(n)||hl(n))}function Uq(n){return n!==es}function Wq(n,o){return w6(n)===w6(o)}function w6(n){return n>=pu&&n<=z0?n-pu+Vm:n}function Gq(n){return Nm(n)||hl(n)||n===Bm}function M6(n){return n!==bs&&Uo(n)}function mb(n){return n===Bm||n>=Vm&&n<=eh}function S6(n){return Nm(n)||hl(n)||n===Bm}function k6(n){return n===gl||n===Ws||n===Ig||n===or}function qq(n){let o=[],e;for(let t=0;t<n.length;t++){let i=n[t];e&&e.type===5&&i.type===5||e&&e.type===16&&i.type===16?(e.parts[0]+=i.parts[0],e.sourceSpan.end=i.sourceSpan.end):(e=i,o.push(e))}return o}var xx=class n{state;file;input;end;constructor(o,e){if(o instanceof n){this.file=o.file,this.input=o.input,this.end=o.end;let t=o.state;this.state={peek:t.peek,offset:t.offset,line:t.line,column:t.column}}else{if(!e)throw new Error("Programming error: the range argument must be provided with a file argument.");this.file=o,this.input=o.content,this.end=e.endPos,this.state={peek:-1,offset:e.startPos,line:e.startLine,column:e.startCol}}}clone(){return new n(this)}peek(){return this.state.peek}charsLeft(){return this.end-this.state.offset}diff(o){return this.state.offset-o.state.offset}advance(){this.advanceState(this.state)}init(){this.updatePeek(this.state)}getSpan(o,e){o=o||this;let t=o;if(e)for(;this.diff(o)>0&&e.indexOf(o.peek())!==-1;)t===o&&(o=o.clone()),o.advance();let i=this.locationFromCursor(o),a=this.locationFromCursor(this),s=t!==o?this.locationFromCursor(t):i;return new In(i,a,s)}getChars(o){return this.input.substring(o.state.offset,this.state.offset)}charAt(o){return this.input.charCodeAt(o)}advanceState(o){if(o.offset>=this.end)throw this.state=o,new T0('Unexpected character "EOF"',this);let e=this.charAt(o.offset);e===Zp?(o.line++,o.column=0):ox(e)||o.column++,o.offset++,this.updatePeek(o)}updatePeek(o){o.peek=o.offset>=this.end?or:this.charAt(o.offset)}locationFromCursor(o){return new h0(o.file,o.state.offset,o.state.line,o.state.column)}},s3=class n extends xx{internalState;constructor(o,e){o instanceof n?(super(o),this.internalState=q({},o.internalState)):(super(o,e),this.internalState=this.state)}advance(){this.state=this.internalState,super.advance(),this.processEscapeSequence()}init(){super.init(),this.processEscapeSequence()}clone(){return new n(this)}getChars(o){let e=o.clone(),t="";for(;e.internalState.offset<this.internalState.offset;)t+=String.fromCodePoint(e.peek()),e.advance();return t}processEscapeSequence(){let o=()=>this.internalState.peek;if(o()===Jp)if(this.internalState=q({},this.state),this.advanceState(this.internalState),o()===GN)this.state.peek=Zp;else if(o()===qN)this.state.peek=Y3;else if(o()===XN)this.state.peek=BN;else if(o()===QN)this.state.peek=X3;else if(o()===oW)this.state.peek=YU;else if(o()===J3)this.state.peek=jN;else if(o()===KN)if(this.advanceState(this.internalState),o()===fl){this.advanceState(this.internalState);let e=this.clone(),t=0;for(;o()!==es;)this.advanceState(this.internalState),t++;this.state.peek=this.decodeHexDigits(e,t)}else{let e=this.clone();this.advanceState(this.internalState),this.advanceState(this.internalState),this.advanceState(this.internalState),this.state.peek=this.decodeHexDigits(e,4)}else if(o()===YN){this.advanceState(this.internalState);let e=this.clone();this.advanceState(this.internalState),this.state.peek=this.decodeHexDigits(e,2)}else if(e6(o())){let e="",t=0,i=this.clone();for(;e6(o())&&t<3;)i=this.clone(),e+=String.fromCodePoint(o()),this.advanceState(this.internalState),t++;this.state.peek=parseInt(e,8),this.internalState=i.internalState}else ox(this.internalState.peek)?(this.advanceState(this.internalState),this.state=this.internalState):this.state.peek=this.internalState.peek}decodeHexDigits(o,e){let t=this.input.slice(o.internalState.offset,o.internalState.offset+e),i=parseInt(t,16);if(isNaN(i))throw o.state=o.internalState,new T0("Invalid hexadecimal escape sequence",o);return i}},T0=class extends Error{msg;cursor;constructor(o,e){super(o),this.msg=o,this.cursor=e,Object.setPrototypeOf(this,new.target.prototype)}},ya=class n extends dn{elementName;static create(o,e,t){return new n(o,e,t)}constructor(o,e,t){super(e,t),this.elementName=o}},yx=class{rootNodes;errors;constructor(o,e){this.rootNodes=o,this.errors=e}},Qq=class{getTagDefinition;constructor(o){this.getTagDefinition=o}parse(o,e,t){let i=zq(o,e,this.getTagDefinition,t),a=new l3(i.tokens,this.getTagDefinition);return a.build(),new yx(a.rootNodes,[...i.errors,...a.errors])}},l3=class n{tokens;tagDefinitionResolver;_index=-1;_peek;_containerStack=[];rootNodes=[];errors=[];constructor(o,e){this.tokens=o,this.tagDefinitionResolver=e,this._advance()}build(){for(;this._peek.type!==41;)this._peek.type===0||this._peek.type===4?this._consumeElementStartTag(this._advance()):this._peek.type===3?this._consumeElementEndTag(this._advance()):this._peek.type===12?(this._closeVoidElement(),this._consumeCdata(this._advance())):this._peek.type===10?(this._closeVoidElement(),this._consumeComment(this._advance())):this._peek.type===5||this._peek.type===7||this._peek.type===6?(this._closeVoidElement(),this._consumeText(this._advance())):this._peek.type===19?this._consumeExpansion(this._advance()):this._peek.type===24?(this._closeVoidElement(),this._consumeBlockOpen(this._advance())):this._peek.type===26?(this._closeVoidElement(),this._consumeBlockClose(this._advance())):this._peek.type===28?(this._closeVoidElement(),this._consumeIncompleteBlock(this._advance())):this._peek.type===29?(this._closeVoidElement(),this._consumeLet(this._advance())):this._peek.type===32?(this._closeVoidElement(),this._consumeIncompleteLet(this._advance())):this._peek.type===33||this._peek.type===37?this._consumeComponentStartTag(this._advance()):this._peek.type===36?this._consumeComponentEndTag(this._advance()):this._advance();for(let o of this._containerStack)o instanceof _l&&this.errors.push(ya.create(o.name,o.sourceSpan,`Unclosed block "${o.name}"`))}_advance(){let o=this._peek;return this._index<this.tokens.length-1&&this._index++,this._peek=this.tokens[this._index],o}_advanceIf(o){return this._peek.type===o?this._advance():null}_consumeCdata(o){this._consumeText(this._advance()),this._advanceIf(13)}_consumeComment(o){let e=this._advanceIf(7),t=this._advanceIf(11),i=e!=null?e.parts[0].trim():null,a=t==null?o.sourceSpan:new In(o.sourceSpan.start,t.sourceSpan.end,o.sourceSpan.fullStart);this._addToParent(new k0(i,a))}_consumeExpansion(o){let e=this._advance(),t=this._advance(),i=[];for(;this._peek.type===20;){let s=this._parseExpansionCase();if(!s)return;i.push(s)}if(this._peek.type!==23){this.errors.push(ya.create(null,this._peek.sourceSpan,"Invalid ICU message. Missing '}'."));return}let a=new In(o.sourceSpan.start,this._peek.sourceSpan.end,o.sourceSpan.fullStart);this._addToParent(new eu(e.parts[0],t.parts[0],i,a,e.sourceSpan)),this._advance()}_parseExpansionCase(){let o=this._advance();if(this._peek.type!==21)return this.errors.push(ya.create(null,this._peek.sourceSpan,"Invalid ICU message. Missing '{'.")),null;let e=this._advance(),t=this._collectExpansionExpTokens(e);if(!t)return null;let i=this._advance();t.push({type:41,parts:[],sourceSpan:i.sourceSpan});let a=new n(t,this.tagDefinitionResolver);if(a.build(),a.errors.length>0)return this.errors=this.errors.concat(a.errors),null;let s=new In(o.sourceSpan.start,i.sourceSpan.end,o.sourceSpan.fullStart),d=new In(e.sourceSpan.start,i.sourceSpan.end,e.sourceSpan.fullStart);return new vx(o.parts[0],a.rootNodes,s,o.sourceSpan,d)}_collectExpansionExpTokens(o){let e=[],t=[21];for(;;){if((this._peek.type===19||this._peek.type===21)&&t.push(this._peek.type),this._peek.type===22)if(P6(t,21)){if(t.pop(),t.length===0)return e}else return this.errors.push(ya.create(null,o.sourceSpan,"Invalid ICU message. Missing '}'.")),null;if(this._peek.type===23)if(P6(t,19))t.pop();else return this.errors.push(ya.create(null,o.sourceSpan,"Invalid ICU message. Missing '}'.")),null;if(this._peek.type===41)return this.errors.push(ya.create(null,o.sourceSpan,"Invalid ICU message. Missing '}'.")),null;e.push(this._advance())}}_consumeText(o){let e=[o],t=o.sourceSpan,i=o.parts[0];if(i.length>0&&i[0]===`
|
||
`){let a=this._getContainer();a!=null&&a.children.length===0&&this._getTagDefinition(a)?.ignoreFirstLf&&(i=i.substring(1),e[0]={type:o.type,sourceSpan:o.sourceSpan,parts:[i]})}for(;this._peek.type===8||this._peek.type===5||this._peek.type===9;)o=this._advance(),e.push(o),o.type===8?i+=o.parts.join("").replace(/&([^;]+);/g,T6):o.type===9?i+=o.parts[0]:i+=o.parts.join("");if(i.length>0){let a=o.sourceSpan;this._addToParent(new fu(i,new In(t.start,a.end,t.fullStart,t.details),e))}}_closeVoidElement(){let o=this._getContainer();o!==null&&this._getTagDefinition(o)?.isVoid&&this._containerStack.pop()}_consumeElementStartTag(o){let e=[],t=[];this._consumeAttributesAndDirectives(e,t);let i=this._getElementFullName(o,this._getClosestElementLikeParent()),a=this._getTagDefinition(i),s=!1;this._peek.type===2?(this._advance(),s=!0,a?.canSelfClose||PP(i)!==null||a?.isVoid||this.errors.push(ya.create(i,o.sourceSpan,`Only void, custom and foreign elements can be self closed "${o.parts[1]}"`))):this._peek.type===1&&(this._advance(),s=!1);let d=this._peek.sourceSpan.fullStart,p=new In(o.sourceSpan.start,d,o.sourceSpan.fullStart),u=new In(o.sourceSpan.start,d,o.sourceSpan.fullStart),g=new ul(i,e,t,[],s,p,u,void 0,a?.isVoid??!1),C=this._getContainer(),M=C!==null&&!!this._getTagDefinition(C)?.isClosedByChild(g.name);this._pushContainer(g,M),s?this._popContainer(i,ul,p):o.type===4&&(this._popContainer(i,ul,null),this.errors.push(ya.create(i,p,`Opening tag "${i}" not terminated.`)))}_consumeComponentStartTag(o){let e=o.parts[0],t=[],i=[];this._consumeAttributesAndDirectives(t,i);let a=this._getClosestElementLikeParent(),s=this._getComponentTagName(o,a),d=this._getComponentFullName(o,a),p=this._peek.type===35;this._advance();let u=this._peek.sourceSpan.fullStart,g=new In(o.sourceSpan.start,u,o.sourceSpan.fullStart),C=new In(o.sourceSpan.start,u,o.sourceSpan.fullStart),M=new Jr(e,s,d,t,i,[],p,g,C,void 0),x=this._getContainer(),b=x!==null&&M.tagName!==null&&!!this._getTagDefinition(x)?.isClosedByChild(M.tagName);this._pushContainer(M,b),p?this._popContainer(d,Jr,g):o.type===37&&(this._popContainer(d,Jr,null),this.errors.push(ya.create(d,g,`Opening tag "${d}" not terminated.`)))}_consumeAttributesAndDirectives(o,e){for(;this._peek.type===14||this._peek.type===38;)this._peek.type===38?e.push(this._consumeDirective(this._peek)):o.push(this._consumeAttr(this._advance()))}_consumeComponentEndTag(o){let e=this._getComponentFullName(o,this._getClosestElementLikeParent());if(!this._popContainer(e,Jr,o.sourceSpan)){let t=this._containerStack[this._containerStack.length-1],i;t instanceof Jr&&t.componentName===o.parts[0]?i=`, did you mean "${t.fullName}"?`:i=". It may happen when the tag has already been closed by another tag.";let a=`Unexpected closing tag "${e}"${i}`;this.errors.push(ya.create(e,o.sourceSpan,a))}}_getTagDefinition(o){return typeof o=="string"?this.tagDefinitionResolver(o):o instanceof ul?this.tagDefinitionResolver(o.name):o instanceof Jr&&o.tagName!==null?this.tagDefinitionResolver(o.tagName):null}_pushContainer(o,e){e&&this._containerStack.pop(),this._addToParent(o),this._containerStack.push(o)}_consumeElementEndTag(o){let e=this._getElementFullName(o,this._getClosestElementLikeParent());if(this._getTagDefinition(e)?.isVoid)this.errors.push(ya.create(e,o.sourceSpan,`Void elements do not have end tags "${o.parts[1]}"`));else if(!this._popContainer(e,ul,o.sourceSpan)){let t=`Unexpected closing tag "${e}". It may happen when the tag has already been closed by another tag. For more info see https://www.w3.org/TR/html5/syntax.html#closing-elements-that-have-implied-end-tags`;this.errors.push(ya.create(e,o.sourceSpan,t))}}_popContainer(o,e,t){let i=!1;for(let a=this._containerStack.length-1;a>=0;a--){let s=this._containerStack[a];if(((s instanceof Jr?s.fullName:s.name)===o||o===null)&&s instanceof e)return s.endSourceSpan=t,s.sourceSpan.end=t!==null?t.end:s.sourceSpan.end,this._containerStack.splice(a,this._containerStack.length-a),!i;(s instanceof _l||!this._getTagDefinition(s)?.closedByParent)&&(i=!0)}return!1}_consumeAttr(o){let e=wb(o.parts[0],o.parts[1]),t=o.sourceSpan.end;this._peek.type===15&&this._advance();let i="",a=[],s,d;if(this._peek.type===16)for(s=this._peek.sourceSpan,d=this._peek.sourceSpan.end;this._peek.type===16||this._peek.type===17||this._peek.type===9;){let g=this._advance();a.push(g),g.type===17?i+=g.parts.join("").replace(/&([^;]+);/g,T6):g.type===9?i+=g.parts[0]:i+=g.parts.join(""),d=t=g.sourceSpan.end}this._peek.type===15&&(t=this._advance().sourceSpan.end);let u=s&&d&&new In(s.start,d,s.fullStart);return new n3(e,i,new In(o.sourceSpan.start,t,o.sourceSpan.fullStart),o.sourceSpan,u,a.length>0?a:void 0,void 0)}_consumeDirective(o){let e=[],t=o.sourceSpan.end,i=null;if(this._advance(),this._peek.type===39){for(t=this._peek.sourceSpan.end,this._advance();this._peek.type===14;)e.push(this._consumeAttr(this._advance()));this._peek.type===40?(i=this._peek.sourceSpan,this._advance()):this.errors.push(ya.create(null,o.sourceSpan,"Unterminated directive definition"))}let a=new In(o.sourceSpan.start,t,o.sourceSpan.fullStart),s=new In(a.start,i===null?o.sourceSpan.end:i.end,a.fullStart);return new i3(o.parts[0],e,s,a,i)}_consumeBlockOpen(o){let e=[];for(;this._peek.type===27;){let d=this._advance();e.push(new Cx(d.parts[0],d.sourceSpan))}this._peek.type===25&&this._advance();let t=this._peek.sourceSpan.fullStart,i=new In(o.sourceSpan.start,t,o.sourceSpan.fullStart),a=new In(o.sourceSpan.start,t,o.sourceSpan.fullStart),s=new _l(o.parts[0],e,[],i,o.sourceSpan,a);this._pushContainer(s,!1)}_consumeBlockClose(o){let e=this._containerStack.length,t=this._containerStack[e-1];if(!this._popContainer(null,_l,o.sourceSpan)){if(this._containerStack.length<e){let i=t instanceof Jr?t.fullName:t.name;this.errors.push(ya.create(null,o.sourceSpan,`Unexpected closing block. The block may have been closed earlier. Did you forget to close the <${i}> element? If you meant to write the \`}\` character, you should use the "}" HTML entity instead.`));return}this.errors.push(ya.create(null,o.sourceSpan,'Unexpected closing block. The block may have been closed earlier. If you meant to write the `}` character, you should use the "}" HTML entity instead.'))}}_consumeIncompleteBlock(o){let e=[];for(;this._peek.type===27;){let d=this._advance();e.push(new Cx(d.parts[0],d.sourceSpan))}let t=this._peek.sourceSpan.fullStart,i=new In(o.sourceSpan.start,t,o.sourceSpan.fullStart),a=new In(o.sourceSpan.start,t,o.sourceSpan.fullStart),s=new _l(o.parts[0],e,[],i,o.sourceSpan,a);this._pushContainer(s,!1),this._popContainer(null,_l,null),this.errors.push(ya.create(o.parts[0],i,`Incomplete block "${o.parts[0]}". If you meant to write the @ character, you should use the "@" HTML entity instead.`))}_consumeLet(o){let e=o.parts[0],t,i;if(this._peek.type!==30){this.errors.push(ya.create(o.parts[0],o.sourceSpan,`Invalid @let declaration "${e}". Declaration must have a value.`));return}else t=this._advance();if(this._peek.type!==31){this.errors.push(ya.create(o.parts[0],o.sourceSpan,`Unterminated @let declaration "${e}". Declaration must be terminated with a semicolon.`));return}else i=this._advance();let a=i.sourceSpan.end,s=new In(o.sourceSpan.start,a,o.sourceSpan.fullStart),d=o.sourceSpan.toString().lastIndexOf(e),p=o.sourceSpan.start.moveBy(d),u=new In(p,o.sourceSpan.end),g=new bx(e,t.parts[0],s,u,t.sourceSpan);this._addToParent(g)}_consumeIncompleteLet(o){let e=o.parts[0]??"",t=e?` "${e}"`:"";if(e.length>0){let i=o.sourceSpan.toString().lastIndexOf(e),a=o.sourceSpan.start.moveBy(i),s=new In(a,o.sourceSpan.end),d=new In(o.sourceSpan.start,o.sourceSpan.start.moveBy(0)),p=new bx(e,"",o.sourceSpan,s,d);this._addToParent(p)}this.errors.push(ya.create(o.parts[0],o.sourceSpan,`Incomplete @let declaration${t}. @let declarations must be written as \`@let <name> = <value>;\``))}_getContainer(){return this._containerStack.length>0?this._containerStack[this._containerStack.length-1]:null}_getClosestElementLikeParent(){for(let o=this._containerStack.length-1;o>-1;o--){let e=this._containerStack[o];if(e instanceof ul||e instanceof Jr)return e}return null}_addToParent(o){let e=this._getContainer();e===null?this.rootNodes.push(o):e.children.push(o)}_getElementFullName(o,e){let t=this._getPrefix(o,e);return wb(t,o.parts[1])}_getComponentFullName(o,e){let t=o.parts[0],i=this._getComponentTagName(o,e);return i===null?t:i.startsWith(":")?t+i:`${t}:${i}`}_getComponentTagName(o,e){let t=this._getPrefix(o,e),i=o.parts[2];return!t&&!i?null:!t&&i?i:wb(t,i||"ng-component")}_getPrefix(o,e){let t,i;if(o.type===33||o.type===37||o.type===36?(t=o.parts[1],i=o.parts[2]):(t=o.parts[0],i=o.parts[1]),t=t||this._getTagDefinition(i)?.implicitNamespacePrefix||"",!t&&e){let a=e instanceof ul?e.name:e.tagName;if(a!==null){let s=hr(a)[1],d=this._getTagDefinition(s);d!==null&&!d.preventNamespaceInheritance&&(t=PP(a))}}return t}};function P6(n,o){return n.length>0&&n[n.length-1]===o}function T6(n,o){return P0[o]!==void 0?P0[o]||n:/^#x[a-f0-9]+$/i.test(o)?String.fromCodePoint(parseInt(o.slice(2),16)):/^#\d+$/.test(o)?String.fromCodePoint(parseInt(o.slice(1),10)):n}var bF="ngPreserveWhitespaces",E6=new Set(["pre","template","textarea","script","style"]),xF=` \f
|
||
\r \v\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF`,Kq=new RegExp(`[^${xF}]`),Xq=new RegExp(`[${xF}]{2,}`,"g");function O6(n){return n.some(o=>o.name===bF)}function yF(n){return n.replace(new RegExp(CF,"g")," ")}var wx=class{preserveSignificantWhitespace;originalNodeMap;requireContext;icuExpansionDepth=0;constructor(o,e,t=!0){this.preserveSignificantWhitespace=o,this.originalNodeMap=e,this.requireContext=t}visitElement(o,e){if(E6.has(o.name)||O6(o.attrs)){let i=new ul(o.name,Dc(this,o.attrs),Dc(this,o.directives),o.children,o.isSelfClosing,o.sourceSpan,o.startSourceSpan,o.endSourceSpan,o.isVoid,o.i18n);return this.originalNodeMap?.set(i,o),i}let t=new ul(o.name,o.attrs,o.directives,Dc(this,o.children),o.isSelfClosing,o.sourceSpan,o.startSourceSpan,o.endSourceSpan,o.isVoid,o.i18n);return this.originalNodeMap?.set(t,o),t}visitAttribute(o,e){return o.name!==bF?o:null}visitText(o,e){let t=o.value.match(Kq),i=e&&(e.prev instanceof eu||e.next instanceof eu);if(this.icuExpansionDepth>0&&this.preserveSignificantWhitespace)return o;if(t||i){let s=o.tokens.map(g=>g.type===5?eQ(g):g);if(!this.preserveSignificantWhitespace&&s.length>0){let g=s[0];s.splice(0,1,Yq(g,e));let C=s[s.length-1];s.splice(s.length-1,1,Zq(C,e))}let d=MF(o.value),p=this.preserveSignificantWhitespace?d:Jq(d,e),u=new fu(p,o.sourceSpan,s,o.i18n);return this.originalNodeMap?.set(u,o),u}return null}visitComment(o,e){return o}visitExpansion(o,e){this.icuExpansionDepth++;let t;try{t=new eu(o.switchValue,o.type,Dc(this,o.cases),o.sourceSpan,o.switchValueSourceSpan,o.i18n)}finally{this.icuExpansionDepth--}return this.originalNodeMap?.set(t,o),t}visitExpansionCase(o,e){let t=new vx(o.value,Dc(this,o.expression),o.sourceSpan,o.valueSourceSpan,o.expSourceSpan);return this.originalNodeMap?.set(t,o),t}visitBlock(o,e){let t=new _l(o.name,o.parameters,Dc(this,o.children),o.sourceSpan,o.nameSpan,o.startSourceSpan,o.endSourceSpan);return this.originalNodeMap?.set(t,o),t}visitBlockParameter(o,e){return o}visitLetDeclaration(o,e){return o}visitComponent(o,e){if(o.tagName&&E6.has(o.tagName)||O6(o.attrs)){let i=new Jr(o.componentName,o.tagName,o.fullName,Dc(this,o.attrs),Dc(this,o.directives),o.children,o.isSelfClosing,o.sourceSpan,o.startSourceSpan,o.endSourceSpan,o.i18n);return this.originalNodeMap?.set(i,o),i}let t=new Jr(o.componentName,o.tagName,o.fullName,o.attrs,o.directives,Dc(this,o.children),o.isSelfClosing,o.sourceSpan,o.startSourceSpan,o.endSourceSpan,o.i18n);return this.originalNodeMap?.set(t,o),t}visitDirective(o,e){return o}visit(o,e){if(this.requireContext&&!e)throw new Error("WhitespaceVisitor requires context. Visit via `visitAllWithSiblings` to get this context.");return!1}};function Yq(n,o){return n.type!==5||!!o?.prev?n:wF(n,t=>t.trimStart())}function Zq(n,o){return n.type!==5||!!o?.next?n:wF(n,t=>t.trimEnd())}function Jq(n,o){let e=!o?.prev,t=!o?.next,i=e?n.trimStart():n;return t?i.trimEnd():i}function eQ({type:n,parts:o,sourceSpan:e}){return{type:n,parts:[MF(o[0])],sourceSpan:e}}function wF({type:n,parts:o,sourceSpan:e},t){return{type:n,parts:[t(o[0])],sourceSpan:e}}function MF(n){return yF(n).replace(Xq," ")}function Dc(n,o){let e=[];return o.forEach((t,i)=>{let a={prev:o[i-1],next:o[i+1]},s=t.visit(n,a);s&&e.push(s)}),e}var Cn=(function(n){return n[n.Character=0]="Character",n[n.Identifier=1]="Identifier",n[n.PrivateIdentifier=2]="PrivateIdentifier",n[n.Keyword=3]="Keyword",n[n.String=4]="String",n[n.Operator=5]="Operator",n[n.Number=6]="Number",n[n.RegExpBody=7]="RegExpBody",n[n.RegExpFlags=8]="RegExpFlags",n[n.Error=9]="Error",n})(Cn||{}),tu=(function(n){return n[n.Plain=0]="Plain",n[n.TemplateLiteralPart=1]="TemplateLiteralPart",n[n.TemplateLiteralEnd=2]="TemplateLiteralEnd",n})(tu||{}),tQ=["var","let","as","null","undefined","true","false","if","else","this","typeof","void","in","instanceof"],E0=class{tokenize(o){return new c3(o).scan()}},el=class{index;end;type;numValue;strValue;constructor(o,e,t,i,a){this.index=o,this.end=e,this.type=t,this.numValue=i,this.strValue=a}isCharacter(o){return this.type===Cn.Character&&this.numValue===o}isNumber(){return this.type===Cn.Number}isString(){return this.type===Cn.String}isOperator(o){return this.type===Cn.Operator&&this.strValue===o}isIdentifier(){return this.type===Cn.Identifier}isPrivateIdentifier(){return this.type===Cn.PrivateIdentifier}isKeyword(){return this.type===Cn.Keyword}isKeywordLet(){return this.type===Cn.Keyword&&this.strValue==="let"}isKeywordAs(){return this.type===Cn.Keyword&&this.strValue==="as"}isKeywordNull(){return this.type===Cn.Keyword&&this.strValue==="null"}isKeywordUndefined(){return this.type===Cn.Keyword&&this.strValue==="undefined"}isKeywordTrue(){return this.type===Cn.Keyword&&this.strValue==="true"}isKeywordFalse(){return this.type===Cn.Keyword&&this.strValue==="false"}isKeywordThis(){return this.type===Cn.Keyword&&this.strValue==="this"}isKeywordTypeof(){return this.type===Cn.Keyword&&this.strValue==="typeof"}isKeywordVoid(){return this.type===Cn.Keyword&&this.strValue==="void"}isKeywordIn(){return this.type===Cn.Keyword&&this.strValue==="in"}isKeywordInstanceOf(){return this.type===Cn.Keyword&&this.strValue==="instanceof"}isError(){return this.type===Cn.Error}isRegExpBody(){return this.type===Cn.RegExpBody}isRegExpFlags(){return this.type===Cn.RegExpFlags}toNumber(){return this.type===Cn.Number?this.numValue:-1}isTemplateLiteralPart(){return this.isString()&&this.kind===tu.TemplateLiteralPart}isTemplateLiteralEnd(){return this.isString()&&this.kind===tu.TemplateLiteralEnd}isTemplateLiteralInterpolationStart(){return this.isOperator("${")}toString(){switch(this.type){case Cn.Character:case Cn.Identifier:case Cn.Keyword:case Cn.Operator:case Cn.PrivateIdentifier:case Cn.String:case Cn.Error:case Cn.RegExpBody:case Cn.RegExpFlags:return this.strValue;case Cn.Number:return this.numValue.toString();default:return null}}},Df=class extends el{kind;constructor(o,e,t,i){super(o,e,Cn.String,0,t),this.kind=i}};function _f(n,o,e){return new el(n,o,Cn.Character,e,String.fromCharCode(e))}function nQ(n,o,e){return new el(n,o,Cn.Identifier,0,e)}function iQ(n,o,e){return new el(n,o,Cn.PrivateIdentifier,0,e)}function oQ(n,o,e){return new el(n,o,Cn.Keyword,0,e)}function vm(n,o,e){return new el(n,o,Cn.Operator,0,e)}function aQ(n,o,e){return new el(n,o,Cn.Number,e,"")}function rQ(n,o,e){return new el(n,o,Cn.Error,0,e)}function sQ(n,o,e){return new el(n,o,Cn.RegExpBody,0,e)}function lQ(n,o,e){return new el(n,o,Cn.RegExpFlags,0,e)}var ff=new el(-1,-1,Cn.Character,0,""),c3=class{input;tokens=[];length;peek=0;index=-1;braceStack=[];constructor(o){this.input=o,this.length=o.length,this.advance()}scan(){let o=this.scanToken();for(;o!==null;)this.tokens.push(o),o=this.scanToken();return this.tokens}advance(){this.peek=++this.index>=this.length?or:this.input.charCodeAt(this.index)}scanToken(){let o=this.input,e=this.length,t=this.peek,i=this.index;for(;t<=$N;)if(++i>=e){t=or;break}else t=o.charCodeAt(i);if(this.peek=t,this.index=i,i>=e)return null;if(D6(t))return this.scanIdentifier();if(hl(t))return this.scanNumber(i);let a=i;switch(t){case jp:return this.advance(),hl(this.peek)?this.scanNumber(a):this.peek!==jp?_f(a,this.index,jp):(this.advance(),this.peek===jp?(this.advance(),vm(a,this.index,"...")):this.error(`Unexpected character [${String.fromCharCode(t)}]`,0));case ns:case Ea:case Lc:case Od:case Nr:case Fc:case bs:return this.scanCharacter(a,t);case fl:return this.scanOpenBrace(a,t);case es:return this.scanCloseBrace(a,t);case u0:case p0:return this.scanString();case VP:return this.advance(),this.scanTemplateLiteralPart(a);case HN:return this.scanPrivateIdentifier();case UN:return this.scanComplexOperator(a,"+",nr,"=");case ix:return this.scanComplexOperator(a,"-",nr,"=");case gl:return this.isStartOfRegex()?this.scanRegex(i):this.scanComplexOperator(a,"/",nr,"=");case ZU:return this.scanComplexOperator(a,"%",nr,"=");case iW:return this.scanOperator(a,"^");case Y5:return this.scanStar(a);case Z5:return this.scanQuestion(a);case Ig:case Ws:return this.scanComplexOperator(a,String.fromCharCode(t),nr,"=");case LP:return this.scanComplexOperator(a,"!",nr,"=",nr,"=");case nr:return this.scanEquals(a);case nx:return this.scanComplexOperator(a,"&",nx,"&",nr,"=");case J5:return this.scanComplexOperator(a,"|",J5,"|",nr,"=");case ZN:for(;g0(this.peek);)this.advance();return this.scanToken()}return this.advance(),this.error(`Unexpected character [${String.fromCharCode(t)}]`,0)}scanCharacter(o,e){return this.advance(),_f(o,this.index,e)}scanOperator(o,e){return this.advance(),vm(o,this.index,e)}scanOpenBrace(o,e){return this.braceStack.push("expression"),this.advance(),_f(o,this.index,e)}scanCloseBrace(o,e){return this.advance(),this.braceStack.pop()==="interpolation"?(this.tokens.push(_f(o,this.index,es)),this.scanTemplateLiteralPart(this.index)):_f(o,this.index,e)}scanComplexOperator(o,e,t,i,a,s){this.advance();let d=e;return this.peek==t&&(this.advance(),d+=i),a!=null&&this.peek==a&&(this.advance(),d+=s),vm(o,this.index,d)}scanEquals(o){this.advance();let e="=";if(this.peek===nr)this.advance(),e+="=";else if(this.peek===Ws)return this.advance(),e+=">",vm(o,this.index,e);return this.peek===nr&&(this.advance(),e+="="),vm(o,this.index,e)}scanIdentifier(){let o=this.index;for(this.advance();I6(this.peek);)this.advance();let e=this.input.substring(o,this.index);return tQ.indexOf(e)>-1?oQ(o,this.index,e):nQ(o,this.index,e)}scanPrivateIdentifier(){let o=this.index;if(this.advance(),!D6(this.peek))return this.error("Invalid character [#]",-1);for(;I6(this.peek);)this.advance();let e=this.input.substring(o,this.index);return iQ(o,this.index,e)}scanNumber(o){let e=this.index===o,t=!1;for(this.advance();;){if(!hl(this.peek))if(this.peek===Bm){if(!hl(this.input.charCodeAt(this.index-1))||!hl(this.input.charCodeAt(this.index+1)))return this.error("Invalid numeric separator",0);t=!0}else if(this.peek===jp)e=!1;else if(cQ(this.peek)){if(this.advance(),dQ(this.peek)&&this.advance(),!hl(this.peek))return this.error("Invalid exponent",-1);e=!1}else break;this.advance()}let i=this.input.substring(o,this.index);t&&(i=i.replace(/_/g,""));let a=e?pQ(i):parseFloat(i);return aQ(o,this.index,a)}scanString(){let o=this.index,e=this.peek;this.advance();let t="",i=this.index,a=this.input;for(;this.peek!=e;)if(this.peek==Jp){let d=this.scanStringBackslash(t,i);if(typeof d!="string")return d;t=d,i=this.index}else{if(this.peek==or)return this.error("Unterminated quote",0);this.advance()}let s=a.substring(i,this.index);return this.advance(),new Df(o,this.index,t+s,tu.Plain)}scanQuestion(o){this.advance();let e="?";return this.peek===Z5?(e+="?",this.advance(),this.peek===nr&&(e+="=",this.advance())):this.peek===jp&&(e+=".",this.advance()),vm(o,this.index,e)}scanTemplateLiteralPart(o){let e="",t=this.index;for(;this.peek!==VP;)if(this.peek===Jp){let a=this.scanStringBackslash(e,t);if(typeof a!="string")return a;e=a,t=this.index}else if(this.peek===zx){let a=this.index;if(this.advance(),this.peek===fl)return this.braceStack.push("interpolation"),this.tokens.push(new Df(o,a,e+this.input.substring(t,a),tu.TemplateLiteralPart)),this.advance(),vm(a,this.index,this.input.substring(a,this.index))}else{if(this.peek===or)return this.error("Unterminated template literal",0);this.advance()}let i=this.input.substring(t,this.index);return this.advance(),new Df(o,this.index,e+i,tu.TemplateLiteralEnd)}error(o,e){let t=this.index+e;return rQ(t,this.index,`Lexer Error: ${o} at column ${t} in expression [${this.input}]`)}scanStringBackslash(o,e){o+=this.input.substring(e,this.index);let t;if(this.advance(),this.peek===KN){let i=this.input.substring(this.index+1,this.index+5);if(/^[0-9a-f]+$/i.test(i))t=parseInt(i,16);else return this.error(`Invalid unicode escape [\\u${i}]`,0);for(let a=0;a<5;a++)this.advance()}else t=mQ(this.peek),this.advance();return o+=String.fromCharCode(t),o}scanStar(o){this.advance();let e="*";return this.peek===Y5?(e+="*",this.advance(),this.peek===nr&&(e+="=",this.advance())):this.peek===nr&&(e+="=",this.advance()),vm(o,this.index,e)}isStartOfRegex(){if(this.tokens.length===0)return!0;let o=this.tokens[this.tokens.length-1];if(o.isOperator("!")){let e=this.tokens.length>1?this.tokens[this.tokens.length-2]:null;return e===null||e.type!==Cn.Identifier&&!e.isCharacter(Ea)&&!e.isCharacter(Od)}return o.type===Cn.Operator||o.isCharacter(ns)||o.isCharacter(Lc)||o.isCharacter(Nr)||o.isCharacter(Fc)}scanRegex(o){this.advance();let e=this.index,t=!1,i=!1;for(;;){let p=this.peek;if(p===or)return this.error("Unterminated regular expression",0);if(t)t=!1;else if(p===Jp)t=!0;else if(p===Lc)i=!0;else if(p===Od)i=!1;else if(p===gl&&!i)break;this.advance()}let a=this.input.substring(e,this.index);this.advance();let s=sQ(o,this.index,a),d=this.scanRegexFlags(this.index);return d!==null?(this.tokens.push(s),d):s}scanRegexFlags(o){if(!Nm(this.peek))return null;for(;Nm(this.peek);)this.advance();return lQ(o,this.index,this.input.substring(o,this.index))}};function D6(n){return pu<=n&&n<=z0||Vm<=n&&n<=eh||n==Bm||n==zx}function I6(n){return Nm(n)||hl(n)||n==Bm||n==zx}function cQ(n){return n==aW||n==eW}function dQ(n){return n==ix||n==UN}function mQ(n){switch(n){case GN:return Zp;case J3:return jN;case qN:return Y3;case QN:return X3;case XN:return BN;default:return n}}function pQ(n){let o=parseInt(n);if(isNaN(o))throw new Error("Invalid integer literal when parsing "+n);return o}var d3=class{strings;expressions;offsets;constructor(o,e,t){this.strings=o,this.expressions=e,this.offsets=t}},m3=class{templateBindings;warnings;errors;constructor(o,e,t){this.templateBindings=o,this.warnings=e,this.errors=t}};function wm(n){return n.start.toString()||"(unknown)"}var Mx=class{_lexer;_supportsDirectPipeReferences;constructor(o,e=!1){this._lexer=o,this._supportsDirectPipeReferences=e}parseAction(o,e,t){let i=[];this._checkNoInterpolation(i,o,e);let{stripped:a}=this._stripComments(o),s=this._lexer.tokenize(a),d=new Wp(o,e,t,s,1,i,0,this._supportsDirectPipeReferences).parseChain();return new xs(d,o,wm(e),t,i)}parseBinding(o,e,t){let i=[],a=this._parseBindingAst(o,e,t,i);return new xs(a,o,wm(e),t,i)}checkSimpleExpression(o){let e=new p3;return o.visit(e),e.errors}parseSimpleBinding(o,e,t){let i=[],a=this._parseBindingAst(o,e,t,i),s=this.checkSimpleExpression(a);return s.length>0&&i.push(Eg(`Host binding expression cannot contain ${s.join(" ")}`,o,"",e)),new xs(a,o,wm(e),t,i)}_parseBindingAst(o,e,t,i){this._checkNoInterpolation(i,o,e);let{stripped:a}=this._stripComments(o),s=this._lexer.tokenize(a);return new Wp(o,e,t,s,0,i,0,this._supportsDirectPipeReferences).parseChain()}parseTemplateBindings(o,e,t,i,a){let s=this._lexer.tokenize(e),d=[];return new Wp(e,t,a,s,0,d,0,this._supportsDirectPipeReferences).parseTemplateBindings({source:o,span:new qs(i,i+o.length)})}parseInterpolation(o,e,t,i){let a=[],{strings:s,expressions:d,offsets:p}=this.splitInterpolation(o,e,a,i);if(d.length===0)return null;let u=[];for(let g=0;g<d.length;++g){let C=i?.[g*2+1]?.sourceSpan,M=d[g].text,{stripped:x,hasComments:b}=this._stripComments(M),P=this._lexer.tokenize(x);if(b&&x.trim().length===0&&P.length===0){a.push(Eg("Interpolation expression cannot only contain a comment",o,`at column ${d[g].start} in`,e));continue}let k=new Wp(C?M:o,C||e,t,P,0,a,p[g],this._supportsDirectPipeReferences).parseChain();u.push(k)}return this.createInterpolationAst(s.map(g=>g.text),u,o,wm(e),t,a)}parseInterpolationExpression(o,e,t){let{stripped:i}=this._stripComments(o),a=this._lexer.tokenize(i),s=[],d=new Wp(o,e,t,a,0,s,0,this._supportsDirectPipeReferences).parseChain(),p=["",""];return this.createInterpolationAst(p,[d],o,wm(e),t,s)}createInterpolationAst(o,e,t,i,a,s){let d=new lu(0,t.length),p=new F0(d,d.toAbsolute(a),o,e);return new xs(p,t,i,a,s)}splitInterpolation(o,e,t,i){let a=[],s=[],d=[],p=i?uQ(i):null,u=0,g=!1,C=!1,M="{{",x="}}";for(;u<o.length;)if(g){let b=u,P=b+M.length,k=this._getInterpolationEndIndex(o,x,P);if(k===-1){g=!1,C=!0;break}let S=k+x.length,O=o.substring(P,k);O.trim().length===0&&t.push(Eg("Blank expressions are not allowed in interpolated strings",o,`at column ${u} in`,e)),s.push({text:O,start:b,end:S});let D=(p?.get(b)??b)+M.length;d.push(D),u=S,g=!1}else{let b=u;u=o.indexOf(M,u),u===-1&&(u=o.length);let P=o.substring(b,u);a.push({text:P,start:b,end:u}),g=!0}if(!g)if(C){let b=a[a.length-1];b.text+=o.substring(u),b.end=o.length}else a.push({text:o.substring(u),start:u,end:o.length});return new d3(a,s,d)}wrapLiteralPrimitive(o,e,t){let i=new lu(0,o==null?0:o.length);return new xs(new Cs(i,i.toAbsolute(t),o),o,typeof e=="string"?e:wm(e),t,[])}_stripComments(o){let e=this._commentStart(o);return e!=null?{stripped:o.substring(0,e),hasComments:!0}:{stripped:o,hasComments:!1}}_commentStart(o){let e=null;for(let t=0;t<o.length-1;t++){let i=o.charCodeAt(t),a=o.charCodeAt(t+1);if(i===gl&&a==gl&&e==null)return t;e===i?e=null:e==null&&Of(i)&&(e=i)}return null}_checkNoInterpolation(o,e,t){let i=-1,a=-1;for(let s of this._forEachUnquotedChar(e,0))if(i===-1)e.startsWith("{{")&&(i=s);else if(a=this._getInterpolationEndIndex(e,"}}",s),a>-1)break;i>-1&&a>-1&&o.push(Eg("Got interpolation ({{}}) where expression was expected",e,`at column ${i} in`,t))}_getInterpolationEndIndex(o,e,t){for(let i of this._forEachUnquotedChar(o,t)){if(o.startsWith(e,i))return i;if(o.startsWith("//",i))return o.indexOf(e,i)}return-1}*_forEachUnquotedChar(o,e){let t=null,i=0;for(let a=e;a<o.length;a++){let s=o[a];Of(o.charCodeAt(a))&&(t===null||t===s)&&i%2===0?t=t===null?s:null:t===null&&(yield a),i=s==="\\"?i+1:0}}},kf=(function(n){return n[n.None=0]="None",n[n.Writable=1]="Writable",n})(kf||{}),A6=new Set(["d","g","i","m","s","u","v","y"]),Wp=class{input;parseSourceSpan;absoluteOffset;tokens;parseFlags;errors;offset;supportsDirectPipeReferences;rparensExpected=0;rbracketsExpected=0;rbracesExpected=0;context=kf.None;sourceSpanCache=new Map;index=0;constructor(o,e,t,i,a,s,d,p){this.input=o,this.parseSourceSpan=e,this.absoluteOffset=t,this.tokens=i,this.parseFlags=a,this.errors=s,this.offset=d,this.supportsDirectPipeReferences=p}peek(o){let e=this.index+o;return e<this.tokens.length?this.tokens[e]:ff}get next(){return this.peek(0)}get atEOF(){return this.index>=this.tokens.length}get inputIndex(){return this.atEOF?this.currentEndIndex:this.next.index+this.offset}get currentEndIndex(){return this.index>0?this.peek(-1).end+this.offset:this.tokens.length===0?this.input.length+this.offset:this.next.index+this.offset}get currentAbsoluteOffset(){return this.absoluteOffset+this.inputIndex}span(o,e){let t=this.currentEndIndex;if(e!==void 0&&e>this.currentEndIndex&&(t=e),o>t){let i=t;t=o,o=i}return new lu(o,t)}sourceSpan(o,e){let t=`${o}@${this.inputIndex}:${e}`;return this.sourceSpanCache.has(t)||this.sourceSpanCache.set(t,this.span(o,e).toAbsolute(this.absoluteOffset)),this.sourceSpanCache.get(t)}advance(){this.index++}withContext(o,e){this.context|=o;let t=e();return this.context^=o,t}consumeOptionalCharacter(o){return this.next.isCharacter(o)?(this.advance(),!0):!1}peekKeywordLet(){return this.next.isKeywordLet()}peekKeywordAs(){return this.next.isKeywordAs()}expectCharacter(o){this.consumeOptionalCharacter(o)||this.error(`Missing expected ${String.fromCharCode(o)}`)}consumeOptionalOperator(o){return this.next.isOperator(o)?(this.advance(),!0):!1}isAssignmentOperator(o){return o.type===Cn.Operator&&Zr.isAssignmentOperation(o.strValue)}expectOperator(o){this.consumeOptionalOperator(o)||this.error(`Missing expected operator ${o}`)}prettyPrintToken(o){return o===ff?"end of input":`token ${o}`}expectIdentifierOrKeyword(){let o=this.next;return!o.isIdentifier()&&!o.isKeyword()?(o.isPrivateIdentifier()?this._reportErrorForPrivateIdentifier(o,"expected identifier or keyword"):this.error(`Unexpected ${this.prettyPrintToken(o)}, expected identifier or keyword`),null):(this.advance(),o.toString())}expectIdentifierOrKeywordOrString(){let o=this.next;return!o.isIdentifier()&&!o.isKeyword()&&!o.isString()?(o.isPrivateIdentifier()?this._reportErrorForPrivateIdentifier(o,"expected identifier, keyword or string"):this.error(`Unexpected ${this.prettyPrintToken(o)}, expected identifier, keyword, or string`),""):(this.advance(),o.toString())}parseChain(){let o=[],e=this.inputIndex;for(;this.index<this.tokens.length;){let t=this.parsePipe();if(o.push(t),this.consumeOptionalCharacter(bs))for(this.parseFlags&1||this.error("Binding expression cannot contain chained expression");this.consumeOptionalCharacter(bs););else if(this.index<this.tokens.length){let i=this.index;if(this.error(`Unexpected token '${this.next}'`),this.index===i)break}}if(o.length===0){let t=this.offset,i=this.offset+this.input.length;return new Ar(this.span(t,i),this.sourceSpan(t,i))}return o.length==1?o[0]:new Lg(this.span(e),this.sourceSpan(e),o)}parsePipe(){let o=this.inputIndex,e=this.parseExpression();if(this.consumeOptionalOperator("|")){this.parseFlags&1&&this.error("Cannot have a pipe in an action expression");do{let t=this.inputIndex,i=this.expectIdentifierOrKeyword(),a,s;i!==null?a=this.sourceSpan(t):(i="",s=this.next.index!==-1?this.next.index:this.input.length+this.offset,a=new lu(s,s).toAbsolute(this.absoluteOffset));let d=[];for(;this.consumeOptionalCharacter(Fc);)d.push(this.parseExpression());let p;if(this.supportsDirectPipeReferences){let u=i.charCodeAt(0);p=u===Bm||u>=Vm&&u<=eh?yb.ReferencedDirectly:yb.ReferencedByName}else p=yb.ReferencedByName;e=new jb(this.span(o),this.sourceSpan(o,s),e,i,d,p,a)}while(this.consumeOptionalOperator("|"))}return e}parseExpression(){return this.parseConditional()}parseConditional(){let o=this.inputIndex,e=this.parseLogicalOr();if(this.consumeOptionalOperator("?")){let t=this.parsePipe(),i;if(this.consumeOptionalCharacter(Fc))i=this.parsePipe();else{let a=this.inputIndex,s=this.input.substring(o,a);this.error(`Conditional expression ${s} requires all 3 expressions`),i=new Ar(this.span(o),this.sourceSpan(o))}return new Bb(this.span(o),this.sourceSpan(o),e,t,i)}else return e}parseLogicalOr(){let o=this.inputIndex,e=this.parseLogicalAnd();for(;this.consumeOptionalOperator("||");){let t=this.parseLogicalAnd();e=new Zr(this.span(o),this.sourceSpan(o),"||",e,t)}return e}parseLogicalAnd(){let o=this.inputIndex,e=this.parseNullishCoalescing();for(;this.consumeOptionalOperator("&&");){let t=this.parseNullishCoalescing();e=new Zr(this.span(o),this.sourceSpan(o),"&&",e,t)}return e}parseNullishCoalescing(){let o=this.inputIndex,e=this.parseEquality();for(;this.consumeOptionalOperator("??");){let t=this.parseEquality();e=new Zr(this.span(o),this.sourceSpan(o),"??",e,t)}return e}parseEquality(){let o=this.inputIndex,e=this.parseRelational();for(;this.next.type==Cn.Operator;){let t=this.next.strValue;switch(t){case"==":case"===":case"!=":case"!==":this.advance();let i=this.parseRelational();e=new Zr(this.span(o),this.sourceSpan(o),t,e,i);continue}break}return e}parseRelational(){let o=this.inputIndex,e=this.parseAdditive();for(;this.next.type==Cn.Operator||this.next.isKeywordIn()||this.next.isKeywordInstanceOf();){let t=this.next.strValue;switch(t){case"<":case">":case"<=":case">=":case"in":case"instanceof":this.advance();let i=this.parseAdditive();e=new Zr(this.span(o),this.sourceSpan(o),t,e,i);continue}break}return e}parseAdditive(){let o=this.inputIndex,e=this.parseMultiplicative();for(;this.next.type==Cn.Operator;){let t=this.next.strValue;switch(t){case"+":case"-":this.advance();let i=this.parseMultiplicative();e=new Zr(this.span(o),this.sourceSpan(o),t,e,i);continue}break}return e}parseMultiplicative(){let o=this.inputIndex,e=this.parseExponentiation();for(;this.next.type==Cn.Operator;){let t=this.next.strValue;switch(t){case"*":case"%":case"/":this.advance();let i=this.parseExponentiation();e=new Zr(this.span(o),this.sourceSpan(o),t,e,i);continue}break}return e}parseExponentiation(){let o=this.inputIndex,e=this.parsePrefix();for(;this.next.type==Cn.Operator&&this.next.strValue==="**";){(e instanceof Dg||e instanceof Kf||e instanceof Xf||e instanceof Yf)&&this.error("Unary operator used immediately before exponentiation expression. Parenthesis must be used to disambiguate operator precedence"),this.advance();let t=this.parseExponentiation();e=new Zr(this.span(o),this.sourceSpan(o),"**",e,t)}return e}parsePrefix(){if(this.next.type==Cn.Operator){let o=this.inputIndex,e=this.next.strValue,t;switch(e){case"+":return this.advance(),t=this.parsePrefix(),Dg.createPlus(this.span(o),this.sourceSpan(o),t);case"-":return this.advance(),t=this.parsePrefix(),Dg.createMinus(this.span(o),this.sourceSpan(o),t);case"!":return this.advance(),t=this.parsePrefix(),new Kf(this.span(o),this.sourceSpan(o),t)}}else if(this.next.isKeywordTypeof()){let o=this.inputIndex;this.advance();let e=this.parsePrefix();return new Xf(this.span(o),this.sourceSpan(o),e)}else if(this.next.isKeywordVoid()){let o=this.inputIndex;this.advance();let e=this.parsePrefix();return new Yf(this.span(o),this.sourceSpan(o),e)}return this.parseCallChain()}parseCallChain(){let o=this.inputIndex,e=this.parsePrimary();for(;;)if(this.consumeOptionalCharacter(jp))e=this.parseAccessMember(e,o,!1);else if(this.consumeOptionalOperator("?."))this.consumeOptionalCharacter(ns)?e=this.parseCall(e,o,!0):e=this.consumeOptionalCharacter(Lc)?this.parseKeyedReadOrWrite(e,o,!0):this.parseAccessMember(e,o,!0);else if(this.consumeOptionalCharacter(Lc))e=this.parseKeyedReadOrWrite(e,o,!1);else if(this.consumeOptionalCharacter(ns))e=this.parseCall(e,o,!1);else if(this.consumeOptionalOperator("!"))e=new Zf(this.span(o),this.sourceSpan(o),e);else if(this.next.isTemplateLiteralEnd())e=this.parseNoInterpolationTaggedTemplateLiteral(e,o);else if(this.next.isTemplateLiteralPart())e=this.parseTaggedTemplateLiteral(e,o);else return e}parsePrimary(){let o=this.inputIndex;if(this.isArrowFunction())return this.parseArrowFunction(o);if(this.consumeOptionalCharacter(ns)){this.rparensExpected++;let e=this.parsePipe();return this.consumeOptionalCharacter(Ea)||(this.error("Missing closing parentheses"),this.consumeOptionalCharacter(Ea)),this.rparensExpected--,new t0(this.span(o),this.sourceSpan(o),e)}else{if(this.next.isKeywordNull())return this.advance(),new Cs(this.span(o),this.sourceSpan(o),null);if(this.next.isKeywordUndefined())return this.advance(),new Cs(this.span(o),this.sourceSpan(o),void 0);if(this.next.isKeywordTrue())return this.advance(),new Cs(this.span(o),this.sourceSpan(o),!0);if(this.next.isKeywordFalse())return this.advance(),new Cs(this.span(o),this.sourceSpan(o),!1);if(this.next.isKeywordIn())return this.advance(),new Cs(this.span(o),this.sourceSpan(o),"in");if(this.next.isKeywordThis())return this.advance(),new Wf(this.span(o),this.sourceSpan(o));if(this.consumeOptionalCharacter(Lc))return this.parseLiteralArray(o);if(this.next.isCharacter(fl))return this.parseLiteralMap();if(this.next.isIdentifier())return this.parseAccessMember(new Hc(this.span(o),this.sourceSpan(o)),o,!1);if(this.next.isNumber()){let e=this.next.toNumber();return this.advance(),new Cs(this.span(o),this.sourceSpan(o),e)}else{if(this.next.isTemplateLiteralEnd())return this.parseNoInterpolationTemplateLiteral();if(this.next.isTemplateLiteralPart())return this.parseTemplateLiteral();if(this.next.isString()&&this.next.kind===tu.Plain){let e=this.next.toString();return this.advance(),new Cs(this.span(o),this.sourceSpan(o),e)}else return this.next.isPrivateIdentifier()?(this._reportErrorForPrivateIdentifier(this.next,null),new Ar(this.span(o),this.sourceSpan(o))):this.next.isRegExpBody()?this.parseRegularExpressionLiteral():this.index>=this.tokens.length?(this.error(`Unexpected end of expression: ${this.input}`),new Ar(this.span(o),this.sourceSpan(o))):(this.error(`Unexpected token ${this.next}`),new Ar(this.span(o),this.sourceSpan(o)))}}}parseLiteralArray(o){this.rbracketsExpected++;let e=[];do if(this.next.isOperator("..."))e.push(this.parseSpreadElement());else if(!this.next.isCharacter(Od))e.push(this.parsePipe());else break;while(this.consumeOptionalCharacter(Nr));return this.rbracketsExpected--,this.expectCharacter(Od),new Qf(this.span(o),this.sourceSpan(o),e)}parseLiteralMap(){let o=[],e=[],t=this.inputIndex;if(this.expectCharacter(fl),!this.consumeOptionalCharacter(es)){this.rbracesExpected++;do{let i=this.inputIndex;if(this.next.isOperator("...")){this.advance(),o.push({kind:"spread",span:this.span(i),sourceSpan:this.sourceSpan(i)}),e.push(this.parsePipe());continue}let a=this.next.isString(),s=this.expectIdentifierOrKeywordOrString(),d=this.span(i),p=this.sourceSpan(i),u={kind:"property",key:s,quoted:a,span:d,sourceSpan:p};o.push(u),a?(this.expectCharacter(Fc),e.push(this.parsePipe())):this.consumeOptionalCharacter(Fc)?e.push(this.parsePipe()):(u.isShorthandInitialized=!0,e.push(new zc(d,p,p,new Hc(d,p),s)))}while(this.consumeOptionalCharacter(Nr)&&!this.next.isCharacter(es));this.rbracesExpected--,this.expectCharacter(es)}return new du(this.span(t),this.sourceSpan(t),o,e)}parseAccessMember(o,e,t){let i=this.inputIndex,a=this.withContext(kf.Writable,()=>{let d=this.expectIdentifierOrKeyword()??"";return d.length===0&&this.error("Expected identifier for property access",o.span.end),d}),s=this.sourceSpan(i);if(t)return this.isAssignmentOperator(this.next)?(this.advance(),this.error("The '?.' operator cannot be used in the assignment"),new Ar(this.span(e),this.sourceSpan(e))):new Gf(this.span(e),this.sourceSpan(e),s,o,a);if(this.isAssignmentOperator(this.next)){let d=this.next.strValue;if(!(this.parseFlags&1))return this.advance(),this.error("Bindings cannot contain assignments"),new Ar(this.span(e),this.sourceSpan(e));let p=new zc(this.span(e),this.sourceSpan(e),s,o,a);this.advance();let u=this.parseConditional();return new Zr(this.span(e),this.sourceSpan(e),d,p,u)}else return new zc(this.span(e),this.sourceSpan(e),s,o,a)}parseCall(o,e,t){let i=this.inputIndex;this.rparensExpected++;let a=this.parseCallArguments(),s=this.span(i,this.inputIndex).toAbsolute(this.absoluteOffset);this.expectCharacter(Ea),this.rparensExpected--;let d=this.span(e),p=this.sourceSpan(e);return t?new Hb(d,p,o,a,s):new Vg(d,p,o,a,s)}parseCallArguments(){if(this.next.isCharacter(Ea))return[];let o=[];do o.push(this.next.isOperator("...")?this.parseSpreadElement():this.parsePipe());while(this.consumeOptionalCharacter(Nr));return o}parseSpreadElement(){this.next.isOperator("...")||this.error("Spread element must start with '...' operator");let o=this.inputIndex;this.advance();let e=this.parsePipe(),t=this.span(o),i=this.sourceSpan(o);return new $b(t,i,e)}expectTemplateBindingKey(){let o="",e=!1,t=this.currentAbsoluteOffset;do o+=this.expectIdentifierOrKeywordOrString(),e=this.consumeOptionalOperator("-"),e&&(o+="-");while(e);return{source:o,span:new qs(t,t+o.length)}}parseTemplateBindings(o){let e=[];for(e.push(...this.parseDirectiveKeywordBindings(o));this.index<this.tokens.length;){let t=this.parseLetBinding();if(t)e.push(t);else{let i=this.expectTemplateBindingKey(),a=this.parseAsBinding(i);a?e.push(a):(i.source=o.source+i.source.charAt(0).toUpperCase()+i.source.substring(1),e.push(...this.parseDirectiveKeywordBindings(i)))}this.consumeStatementTerminator()}return new m3(e,[],this.errors)}parseKeyedReadOrWrite(o,e,t){return this.withContext(kf.Writable,()=>{this.rbracketsExpected++;let i=this.parsePipe();if(i instanceof Ar&&this.error("Key access cannot be empty"),this.rbracketsExpected--,this.expectCharacter(Od),this.isAssignmentOperator(this.next)){let a=this.next.strValue;if(t)this.advance(),this.error("The '?.' operator cannot be used in the assignment");else{let s=new cu(this.span(e),this.sourceSpan(e),o,i);this.advance();let d=this.parseConditional();return new Zr(this.span(e),this.sourceSpan(e),a,s,d)}}else return t?new qf(this.span(e),this.sourceSpan(e),o,i):new cu(this.span(e),this.sourceSpan(e),o,i);return new Ar(this.span(e),this.sourceSpan(e))})}parseDirectiveKeywordBindings(o){let e=[];this.consumeOptionalCharacter(Fc);let t=this.getDirectiveBoundTarget(),i=this.currentAbsoluteOffset,a=this.parseAsBinding(o);a||(this.consumeStatementTerminator(),i=this.currentAbsoluteOffset);let s=new qs(o.span.start,i);return e.push(new MP(s,o,t)),a&&e.push(a),e}getDirectiveBoundTarget(){if(this.next===ff||this.peekKeywordAs()||this.peekKeywordLet())return null;let o=this.parsePipe(),{start:e,end:t}=o.span,i=this.input.substring(e,t);return new xs(o,i,wm(this.parseSourceSpan),this.absoluteOffset+e,this.errors)}parseAsBinding(o){if(!this.peekKeywordAs())return null;this.advance();let e=this.expectTemplateBindingKey();this.consumeStatementTerminator();let t=new qs(o.span.start,this.currentAbsoluteOffset);return new n0(t,e,o)}parseLetBinding(){if(!this.peekKeywordLet())return null;let o=this.currentAbsoluteOffset;this.advance();let e=this.expectTemplateBindingKey(),t=null;this.consumeOptionalOperator("=")&&(t=this.expectTemplateBindingKey()),this.consumeStatementTerminator();let i=new qs(o,this.currentAbsoluteOffset);return new n0(i,e,t)}parseNoInterpolationTaggedTemplateLiteral(o,e){let t=this.parseNoInterpolationTemplateLiteral();return new Jf(this.span(e),this.sourceSpan(e),o,t)}parseNoInterpolationTemplateLiteral(){let o=this.next.strValue,e=this.inputIndex;this.advance();let t=this.span(e),i=this.sourceSpan(e);return new e0(t,i,[new Ub(t,i,o)],[])}parseTaggedTemplateLiteral(o,e){let t=this.parseTemplateLiteral();return new Jf(this.span(e),this.sourceSpan(e),o,t)}parseTemplateLiteral(){let o=[],e=[],t=this.inputIndex;for(;this.next!==ff;){let i=this.next;if(i.isTemplateLiteralPart()||i.isTemplateLiteralEnd()){let a=this.inputIndex;if(this.advance(),o.push(new Ub(this.span(a),this.sourceSpan(a),i.strValue)),i.isTemplateLiteralEnd())break}else if(i.isTemplateLiteralInterpolationStart()){this.advance(),this.rbracesExpected++;let a=this.parsePipe();a instanceof Ar?this.error("Template literal interpolation cannot be empty"):e.push(a),this.rbracesExpected--}else this.advance()}return new e0(this.span(t),this.sourceSpan(t),o,e)}parseRegularExpressionLiteral(){let o=this.next;if(this.advance(),!o.isRegExpBody())return new Ar(this.span(this.inputIndex),this.sourceSpan(this.inputIndex));let e=null;if(this.next.isRegExpFlags()){e=this.next,this.advance();let a=new Set;for(let s=0;s<e.strValue.length;s++){let d=e.strValue[s];A6.has(d)?a.has(d)?this.error(`Duplicate regular expression flag "${d}"`,e.index+s):a.add(d):this.error(`Unsupported regular expression flag "${d}". The supported flags are: `+Array.from(A6,p=>`"${p}"`).join(", "),e.index+s)}}let t=o.index,i=e?e.end:o.end;return new Gb(this.span(t,i),this.sourceSpan(t,i),o.strValue,e?e.strValue:null)}parseArrowFunction(o){let e;if(this.next.isIdentifier()){let i=this.next;this.advance(),e=[this.getArrowFunctionIdentifierArg(i)]}else this.next.isCharacter(ns)?(this.rparensExpected++,this.advance(),e=this.parseArrowFunctionParameters(),this.rparensExpected--):(e=[],this.error(`Unexpected token ${this.next}`));this.expectOperator("=>");let t;if(this.next.isCharacter(fl))this.error("Multi-line arrow functions are not supported. If you meant to return an object literal, wrap it with parentheses."),t=new Ar(this.span(o),this.sourceSpan(o));else{let i=this.parseFlags;this.parseFlags=1,t=this.parseExpression(),this.parseFlags=i}return new Wb(this.span(o),this.sourceSpan(o),e,t)}parseArrowFunctionParameters(){let o=[];if(!this.consumeOptionalCharacter(Ea))for(;this.next!==ff;)if(this.next.isIdentifier()){let e=this.next;if(this.advance(),o.push(this.getArrowFunctionIdentifierArg(e)),this.consumeOptionalCharacter(Ea))break;this.expectCharacter(Nr)}else{this.error(`Unexpected token ${this.next}`);break}return o}getArrowFunctionIdentifierArg(o){return new wP(o.strValue,this.span(o.index),this.sourceSpan(o.index))}isArrowFunction(){let o=this.index,e=this.tokens;if(o>e.length-2)return!1;if(e[o].isIdentifier()&&e[o+1].isOperator("=>"))return!0;if(e[o].isCharacter(ns)){let t=o+1;for(t;t<e.length&&!(!e[t].isIdentifier()&&!e[t].isCharacter(Nr));t++);return t<e.length-1&&e[t].isCharacter(Ea)&&e[t+1].isOperator("=>")}return!1}consumeStatementTerminator(){this.consumeOptionalCharacter(bs)||this.consumeOptionalCharacter(Nr)}error(o,e=this.index){this.errors.push(Eg(o,this.input,this.getErrorLocationText(e),this.parseSourceSpan)),this.skip()}getErrorLocationText(o){return o<this.tokens.length?`at column ${this.tokens[o].index+1} in`:"at the end of the expression"}_reportErrorForPrivateIdentifier(o,e){let t=`Private identifiers are not supported. Unexpected private identifier: ${o}`;e!==null&&(t+=`, ${e}`),this.error(t)}skip(){let o=this.next;for(;this.index<this.tokens.length&&!o.isCharacter(bs)&&!o.isOperator("|")&&(this.rparensExpected<=0||!o.isCharacter(Ea))&&(this.rbracesExpected<=0||!o.isCharacter(es))&&(this.rbracketsExpected<=0||!o.isCharacter(Od))&&(!(this.context&kf.Writable)||!this.isAssignmentOperator(o));)this.next.isError()&&this.errors.push(Eg(this.next.toString(),this.input,this.getErrorLocationText(this.next.index),this.parseSourceSpan)),this.advance(),o=this.next}};function Eg(n,o,e,t){e.length>0&&(e=` ${e} `);let i=wm(t),a=`Parser Error: ${n}${e}[${o}] in ${i}`;return new dn(t,a)}var p3=class extends Bg{errors=[];visitPipe(){this.errors.push("pipes")}};function uQ(n){let o=new Map,e=0,t=0,i=0;for(;i<n.length;){let a=n[i];if(a.type===9){let[s,d]=a.parts;e+=d.length,t+=s.length}else{let s=a.parts.reduce((d,p)=>d+p.length,0);t+=s,e+=s}o.set(t,e),i++}return o}function gQ(n){return n.visit(new u3)}var u3=class{visitUnary(o,e){return`${o.operator}${o.expr.visit(this,e)}`}visitBinary(o,e){return`${o.left.visit(this,e)} ${o.operation} ${o.right.visit(this,e)}`}visitChain(o,e){return o.expressions.map(t=>t.visit(this,e)).join("; ")}visitConditional(o,e){return`${o.condition.visit(this,e)} ? ${o.trueExp.visit(this,e)} : ${o.falseExp.visit(this,e)}`}visitThisReceiver(){return"this"}visitImplicitReceiver(){return""}visitInterpolation(o,e){return _Q(o.strings,o.expressions.map(t=>t.visit(this,e))).join("")}visitKeyedRead(o,e){return`${o.receiver.visit(this,e)}[${o.key.visit(this,e)}]`}visitLiteralArray(o,e){return`[${o.expressions.map(t=>t.visit(this,e)).join(", ")}]`}visitLiteralMap(o,e){return`{${hQ(o.keys.map(t=>t.kind==="spread"?"...":t.quoted?`'${t.key}'`:t.key),o.values.map(t=>t.visit(this,e))).map(([t,i])=>`${t}: ${i}`).join(", ")}}`}visitLiteralPrimitive(o){if(o.value===null)return"null";switch(typeof o.value){case"number":case"boolean":return o.value.toString();case"undefined":return"undefined";case"string":return`'${o.value.replace(/'/g,"\\'")}'`;default:throw new Error(`Unsupported primitive type: ${o.value}`)}}visitPipe(o,e){return`${o.exp.visit(this,e)} | ${o.name}`}visitPrefixNot(o,e){return`!${o.expression.visit(this,e)}`}visitNonNullAssert(o,e){return`${o.expression.visit(this,e)}!`}visitPropertyRead(o,e){return o.receiver instanceof Hc||o.receiver instanceof Wf?o.name:`${o.receiver.visit(this,e)}.${o.name}`}visitSafePropertyRead(o,e){return`${o.receiver.visit(this,e)}?.${o.name}`}visitSafeKeyedRead(o,e){return`${o.receiver.visit(this,e)}?.[${o.key.visit(this,e)}]`}visitCall(o,e){return`${o.receiver.visit(this,e)}(${o.args.map(t=>t.visit(this,e)).join(", ")})`}visitSafeCall(o,e){return`${o.receiver.visit(this,e)}?.(${o.args.map(t=>t.visit(this,e)).join(", ")})`}visitTypeofExpression(o,e){return`typeof ${o.expression.visit(this,e)}`}visitVoidExpression(o,e){return`void ${o.expression.visit(this,e)}`}visitRegularExpressionLiteral(o,e){return`/${o.body}/${o.flags||""}`}visitArrowFunction(o,e){let t;return o.parameters.length===1?t=o.parameters[0].name:t=`(${o.parameters.map(i=>i.name).join(", ")})`,`${t} => ${o.body.visit(this,e)}`}visitASTWithSource(o,e){return o.ast.visit(this,e)}visitTemplateLiteral(o,e){let t="";for(let i=0;i<o.elements.length;i++){t+=o.elements[i].visit(this,e);let a=i<o.expressions.length?o.expressions[i]:null;a!==null&&(t+="${"+a.visit(this,e)+"}")}return"`"+t+"`"}visitTemplateLiteralElement(o,e){return o.text}visitTaggedTemplateLiteral(o,e){return o.tag.visit(this,e)+o.template.visit(this,e)}visitSpreadElement(o,e){return`...${o.expression.visit(this,e)}`}visitParenthesizedExpression(o,e){return"("+o.expression.visit(this,e)+")"}};function hQ(n,o){if(n.length!==o.length)throw new Error("Array lengths must match");return n.map((e,t)=>[e,o[t]])}function _Q(n,o){let e=[];for(let t=0;t<Math.max(n.length,o.length);t++)t<n.length&&e.push(n[t]),t<o.length&&e.push(o[t]);return e}var Bx="svg",jx="math",g3=class{},fQ="boolean",vQ="number",CQ="string",bQ="object";function vf(n){let o=n.toLowerCase(),[e,t]=hr(o,!1);return e===Bx||e===jx?`:${e}:${t}`:t}var xQ=["[Element]|textContent,%ariaActiveDescendantElement,%ariaAtomic,%ariaAutoComplete,%ariaBusy,%ariaChecked,%ariaColCount,%ariaColIndex,%ariaColIndexText,%ariaColSpan,%ariaControlsElements,%ariaCurrent,%ariaDescribedByElements,%ariaDescription,%ariaDetailsElements,%ariaDisabled,%ariaErrorMessageElements,%ariaExpanded,%ariaFlowToElements,%ariaHasPopup,%ariaHidden,%ariaInvalid,%ariaKeyShortcuts,%ariaLabel,%ariaLabelledByElements,%ariaLevel,%ariaLive,%ariaModal,%ariaMultiLine,%ariaMultiSelectable,%ariaOrientation,%ariaOwnsElements,%ariaPlaceholder,%ariaPosInSet,%ariaPressed,%ariaReadOnly,%ariaRelevant,%ariaRequired,%ariaRoleDescription,%ariaRowCount,%ariaRowIndex,%ariaRowIndexText,%ariaRowSpan,%ariaSelected,%ariaSetSize,%ariaSort,%ariaValueMax,%ariaValueMin,%ariaValueNow,%ariaValueText,%classList,className,elementTiming,id,innerHTML,*beforecopy,*beforecut,*beforepaste,*fullscreenchange,*fullscreenerror,*search,*webkitfullscreenchange,*webkitfullscreenerror,outerHTML,%part,#scrollLeft,#scrollTop,slot,*message,*mozfullscreenchange,*mozfullscreenerror,*mozpointerlockchange,*mozpointerlockerror,*webglcontextcreationerror,*webglcontextlost,*webglcontextrestored","[HTMLElement]^[Element]|accessKey,autocapitalize,!autofocus,contentEditable,dir,!draggable,enterKeyHint,!hidden,!inert,innerText,inputMode,lang,nonce,*abort,*animationend,*animationiteration,*animationstart,*auxclick,*beforexrselect,*blur,*cancel,*canplay,*canplaythrough,*change,*click,*close,*contextmenu,*copy,*cuechange,*cut,*dblclick,*drag,*dragend,*dragenter,*dragleave,*dragover,*dragstart,*drop,*durationchange,*emptied,*ended,*error,*focus,*formdata,*gotpointercapture,*input,*invalid,*keydown,*keypress,*keyup,*load,*loadeddata,*loadedmetadata,*loadstart,*lostpointercapture,*mousedown,*mouseenter,*mouseleave,*mousemove,*mouseout,*mouseover,*mouseup,*mousewheel,*paste,*pause,*play,*playing,*pointercancel,*pointerdown,*pointerenter,*pointerleave,*pointermove,*pointerout,*pointerover,*pointerrawupdate,*pointerup,*progress,*ratechange,*reset,*resize,*scroll,*securitypolicyviolation,*seeked,*seeking,*select,*selectionchange,*selectstart,*slotchange,*stalled,*submit,*suspend,*timeupdate,*toggle,*transitioncancel,*transitionend,*transitionrun,*transitionstart,*volumechange,*waiting,*webkitanimationend,*webkitanimationiteration,*webkitanimationstart,*webkittransitionend,*wheel,outerText,!spellcheck,%style,#tabIndex,title,!translate,virtualKeyboardPolicy","abbr,address,article,aside,b,bdi,bdo,cite,content,code,dd,dfn,dt,em,figcaption,figure,footer,header,hgroup,i,kbd,main,mark,nav,noscript,rb,rp,rt,rtc,ruby,s,samp,search,section,small,strong,sub,sup,u,var,wbr^[HTMLElement]|accessKey,autocapitalize,!autofocus,contentEditable,dir,!draggable,enterKeyHint,!hidden,innerText,inputMode,lang,nonce,*abort,*animationend,*animationiteration,*animationstart,*auxclick,*beforexrselect,*blur,*cancel,*canplay,*canplaythrough,*change,*click,*close,*contextmenu,*copy,*cuechange,*cut,*dblclick,*drag,*dragend,*dragenter,*dragleave,*dragover,*dragstart,*drop,*durationchange,*emptied,*ended,*error,*focus,*formdata,*gotpointercapture,*input,*invalid,*keydown,*keypress,*keyup,*load,*loadeddata,*loadedmetadata,*loadstart,*lostpointercapture,*mousedown,*mouseenter,*mouseleave,*mousemove,*mouseout,*mouseover,*mouseup,*mousewheel,*paste,*pause,*play,*playing,*pointercancel,*pointerdown,*pointerenter,*pointerleave,*pointermove,*pointerout,*pointerover,*pointerrawupdate,*pointerup,*progress,*ratechange,*reset,*resize,*scroll,*securitypolicyviolation,*seeked,*seeking,*select,*selectionchange,*selectstart,*slotchange,*stalled,*submit,*suspend,*timeupdate,*toggle,*transitioncancel,*transitionend,*transitionrun,*transitionstart,*volumechange,*waiting,*webkitanimationend,*webkitanimationiteration,*webkitanimationstart,*webkittransitionend,*wheel,outerText,!spellcheck,%style,#tabIndex,title,!translate,virtualKeyboardPolicy","media^[HTMLElement]|!autoplay,!controls,%controlsList,%crossOrigin,#currentTime,!defaultMuted,#defaultPlaybackRate,!disableRemotePlayback,!loop,!muted,*encrypted,*waitingforkey,#playbackRate,preload,!preservesPitch,src,%srcObject,#volume",":svg:^[HTMLElement]|!autofocus,nonce,*abort,*animationend,*animationiteration,*animationstart,*auxclick,*beforexrselect,*blur,*cancel,*canplay,*canplaythrough,*change,*click,*close,*contextmenu,*copy,*cuechange,*cut,*dblclick,*drag,*dragend,*dragenter,*dragleave,*dragover,*dragstart,*drop,*durationchange,*emptied,*ended,*error,*focus,*formdata,*gotpointercapture,*input,*invalid,*keydown,*keypress,*keyup,*load,*loadeddata,*loadedmetadata,*loadstart,*lostpointercapture,*mousedown,*mouseenter,*mouseleave,*mousemove,*mouseout,*mouseover,*mouseup,*mousewheel,*paste,*pause,*play,*playing,*pointercancel,*pointerdown,*pointerenter,*pointerleave,*pointermove,*pointerout,*pointerover,*pointerrawupdate,*pointerup,*progress,*ratechange,*reset,*resize,*scroll,*securitypolicyviolation,*seeked,*seeking,*select,*selectionchange,*selectstart,*slotchange,*stalled,*submit,*suspend,*timeupdate,*toggle,*transitioncancel,*transitionend,*transitionrun,*transitionstart,*volumechange,*waiting,*webkitanimationend,*webkitanimationiteration,*webkitanimationstart,*webkittransitionend,*wheel,%style,#tabIndex",":svg:graphics^:svg:|",":svg:animation^:svg:|*begin,*end,*repeat",":svg:geometry^:svg:|",":svg:componentTransferFunction^:svg:|",":svg:gradient^:svg:|",":svg:textContent^:svg:graphics|",":svg:textPositioning^:svg:textContent|","a^[HTMLElement]|charset,coords,download,hash,host,hostname,href,hreflang,name,password,pathname,ping,port,protocol,referrerPolicy,rel,%relList,rev,search,shape,target,text,type,username","area^[HTMLElement]|alt,coords,download,hash,host,hostname,href,!noHref,password,pathname,ping,port,protocol,referrerPolicy,rel,%relList,search,shape,target,username","audio^media|","br^[HTMLElement]|clear","base^[HTMLElement]|href,target","body^[HTMLElement]|aLink,background,bgColor,link,*afterprint,*beforeprint,*beforeunload,*blur,*error,*focus,*hashchange,*languagechange,*load,*message,*messageerror,*offline,*online,*pagehide,*pageshow,*popstate,*rejectionhandled,*resize,*scroll,*storage,*unhandledrejection,*unload,text,vLink","button^[HTMLElement]|!disabled,formAction,formEnctype,formMethod,!formNoValidate,formTarget,name,type,value","canvas^[HTMLElement]|#height,#width","content^[HTMLElement]|select","dl^[HTMLElement]|!compact","data^[HTMLElement]|value","datalist^[HTMLElement]|","details^[HTMLElement]|!open","dialog^[HTMLElement]|!open,returnValue","dir^[HTMLElement]|!compact","div^[HTMLElement]|align","embed^[HTMLElement]|align,height,name,src,type,width","fieldset^[HTMLElement]|!disabled,name","font^[HTMLElement]|color,face,size","form^[HTMLElement]|acceptCharset,action,autocomplete,encoding,enctype,method,name,!noValidate,target","frame^[HTMLElement]|frameBorder,longDesc,marginHeight,marginWidth,name,!noResize,scrolling,src","frameset^[HTMLElement]|cols,*afterprint,*beforeprint,*beforeunload,*blur,*error,*focus,*hashchange,*languagechange,*load,*message,*messageerror,*offline,*online,*pagehide,*pageshow,*popstate,*rejectionhandled,*resize,*scroll,*storage,*unhandledrejection,*unload,rows","geolocation^[HTMLElement]|accuracymode,!autolocate,*location,*promptaction,*promptdismiss,*validationstatuschange,!watch","hr^[HTMLElement]|align,color,!noShade,size,width","head^[HTMLElement]|","h1,h2,h3,h4,h5,h6^[HTMLElement]|align","html^[HTMLElement]|version","iframe^[HTMLElement]|align,allow,!allowFullscreen,!allowPaymentRequest,csp,frameBorder,height,loading,longDesc,marginHeight,marginWidth,name,referrerPolicy,%sandbox,scrolling,src,srcdoc,width","img^[HTMLElement]|align,alt,border,%crossOrigin,decoding,#height,#hspace,!isMap,loading,longDesc,lowsrc,name,referrerPolicy,sizes,src,srcset,useMap,#vspace,#width","input^[HTMLElement]|accept,align,alt,autocomplete,!checked,!defaultChecked,defaultValue,dirName,!disabled,%files,formAction,formEnctype,formMethod,!formNoValidate,formTarget,#height,!incremental,!indeterminate,max,#maxLength,min,#minLength,!multiple,name,pattern,placeholder,!readOnly,!required,selectionDirection,#selectionEnd,#selectionStart,#size,src,step,type,useMap,value,%valueAsDate,#valueAsNumber,#width","li^[HTMLElement]|type,#value","label^[HTMLElement]|htmlFor","legend^[HTMLElement]|align","link^[HTMLElement]|as,charset,%crossOrigin,!disabled,href,hreflang,imageSizes,imageSrcset,integrity,media,referrerPolicy,rel,%relList,rev,%sizes,target,type","map^[HTMLElement]|name","marquee^[HTMLElement]|behavior,bgColor,direction,height,#hspace,#loop,#scrollAmount,#scrollDelay,!trueSpeed,#vspace,width","menu^[HTMLElement]|!compact","meta^[HTMLElement]|content,httpEquiv,media,name,scheme","meter^[HTMLElement]|#high,#low,#max,#min,#optimum,#value","ins,del^[HTMLElement]|cite,dateTime","ol^[HTMLElement]|!compact,!reversed,#start,type","object^[HTMLElement]|align,archive,border,code,codeBase,codeType,data,!declare,height,#hspace,name,standby,type,useMap,#vspace,width","optgroup^[HTMLElement]|!disabled,label","option^[HTMLElement]|!defaultSelected,!disabled,label,!selected,text,value","output^[HTMLElement]|defaultValue,%htmlFor,name,value","p^[HTMLElement]|align","param^[HTMLElement]|name,type,value,valueType","picture^[HTMLElement]|","pre^[HTMLElement]|#width","progress^[HTMLElement]|#max,#value","q,blockquote,cite^[HTMLElement]|","script^[HTMLElement]|!async,charset,%crossOrigin,!defer,event,htmlFor,integrity,!noModule,%referrerPolicy,src,text,type","select^[HTMLElement]|autocomplete,!disabled,#length,!multiple,name,!required,#selectedIndex,#size,value","selectedcontent^[HTMLElement]|","slot^[HTMLElement]|name","source^[HTMLElement]|#height,media,sizes,src,srcset,type,#width","span^[HTMLElement]|","style^[HTMLElement]|!disabled,media,type","search^[HTMLELement]|","caption^[HTMLElement]|align","th,td^[HTMLElement]|abbr,align,axis,bgColor,ch,chOff,#colSpan,headers,height,!noWrap,#rowSpan,scope,vAlign,width","col,colgroup^[HTMLElement]|align,ch,chOff,#span,vAlign,width","table^[HTMLElement]|align,bgColor,border,%caption,cellPadding,cellSpacing,frame,rules,summary,%tFoot,%tHead,width","tr^[HTMLElement]|align,bgColor,ch,chOff,vAlign","tfoot,thead,tbody^[HTMLElement]|align,ch,chOff,vAlign","template^[HTMLElement]|","textarea^[HTMLElement]|autocomplete,#cols,defaultValue,dirName,!disabled,#maxLength,#minLength,name,placeholder,!readOnly,!required,#rows,selectionDirection,#selectionEnd,#selectionStart,value,wrap","time^[HTMLElement]|dateTime","title^[HTMLElement]|text","track^[HTMLElement]|!default,kind,label,src,srclang","ul^[HTMLElement]|!compact,type","unknown^[HTMLElement]|","video^media|!disablePictureInPicture,#height,*enterpictureinpicture,*leavepictureinpicture,!playsInline,poster,#width",":svg:a^:svg:graphics|",":svg:animate^:svg:animation|",":svg:animateMotion^:svg:animation|",":svg:animateTransform^:svg:animation|",":svg:circle^:svg:geometry|",":svg:clipPath^:svg:graphics|",":svg:defs^:svg:graphics|",":svg:desc^:svg:|",":svg:discard^:svg:|",":svg:ellipse^:svg:geometry|",":svg:feBlend^:svg:|",":svg:feColorMatrix^:svg:|",":svg:feComponentTransfer^:svg:|",":svg:feComposite^:svg:|",":svg:feConvolveMatrix^:svg:|",":svg:feDiffuseLighting^:svg:|",":svg:feDisplacementMap^:svg:|",":svg:feDistantLight^:svg:|",":svg:feDropShadow^:svg:|",":svg:feFlood^:svg:|",":svg:feFuncA^:svg:componentTransferFunction|",":svg:feFuncB^:svg:componentTransferFunction|",":svg:feFuncG^:svg:componentTransferFunction|",":svg:feFuncR^:svg:componentTransferFunction|",":svg:feGaussianBlur^:svg:|",":svg:feImage^:svg:|",":svg:feMerge^:svg:|",":svg:feMergeNode^:svg:|",":svg:feMorphology^:svg:|",":svg:feOffset^:svg:|",":svg:fePointLight^:svg:|",":svg:feSpecularLighting^:svg:|",":svg:feSpotLight^:svg:|",":svg:feTile^:svg:|",":svg:feTurbulence^:svg:|",":svg:filter^:svg:|",":svg:foreignObject^:svg:graphics|",":svg:g^:svg:graphics|",":svg:image^:svg:graphics|decoding",":svg:line^:svg:geometry|",":svg:linearGradient^:svg:gradient|",":svg:mpath^:svg:|",":svg:marker^:svg:|",":svg:mask^:svg:|",":svg:metadata^:svg:|",":svg:path^:svg:geometry|",":svg:pattern^:svg:|",":svg:polygon^:svg:geometry|",":svg:polyline^:svg:geometry|",":svg:radialGradient^:svg:gradient|",":svg:rect^:svg:geometry|",":svg:svg^:svg:graphics|#currentScale,#zoomAndPan",":svg:script^:svg:|type",":svg:set^:svg:animation|",":svg:stop^:svg:|",":svg:style^:svg:|!disabled,media,title,type",":svg:switch^:svg:graphics|",":svg:symbol^:svg:|",":svg:tspan^:svg:textPositioning|",":svg:text^:svg:textPositioning|",":svg:textPath^:svg:textContent|",":svg:title^:svg:|",":svg:use^:svg:graphics|",":svg:view^:svg:|#zoomAndPan","data^[HTMLElement]|value","keygen^[HTMLElement]|!autofocus,challenge,!disabled,form,keytype,name","menuitem^[HTMLElement]|type,label,icon,!disabled,!checked,radiogroup,!default","summary^[HTMLElement]|","time^[HTMLElement]|dateTime",":svg:cursor^:svg:|",":math:^[HTMLElement]|!autofocus,nonce,*abort,*animationend,*animationiteration,*animationstart,*auxclick,*beforeinput,*beforematch,*beforetoggle,*beforexrselect,*blur,*cancel,*canplay,*canplaythrough,*change,*click,*close,*contentvisibilityautostatechange,*contextlost,*contextmenu,*contextrestored,*copy,*cuechange,*cut,*dblclick,*drag,*dragend,*dragenter,*dragleave,*dragover,*dragstart,*drop,*durationchange,*emptied,*ended,*error,*focus,*formdata,*gotpointercapture,*input,*invalid,*keydown,*keypress,*keyup,*load,*loadeddata,*loadedmetadata,*loadstart,*lostpointercapture,*mousedown,*mouseenter,*mouseleave,*mousemove,*mouseout,*mouseover,*mouseup,*mousewheel,*paste,*pause,*play,*playing,*pointercancel,*pointerdown,*pointerenter,*pointerleave,*pointermove,*pointerout,*pointerover,*pointerrawupdate,*pointerup,*progress,*ratechange,*reset,*resize,*scroll,*scrollend,*securitypolicyviolation,*seeked,*seeking,*select,*selectionchange,*selectstart,*slotchange,*stalled,*submit,*suspend,*timeupdate,*toggle,*transitioncancel,*transitionend,*transitionrun,*transitionstart,*volumechange,*waiting,*webkitanimationend,*webkitanimationiteration,*webkitanimationstart,*webkittransitionend,*wheel,%style,#tabIndex",":math:math^:math:|",":math:maction^:math:|",":math:menclose^:math:|",":math:merror^:math:|",":math:mfenced^:math:|",":math:mfrac^:math:|",":math:mi^:math:|",":math:mmultiscripts^:math:|",":math:mn^:math:|",":math:mo^:math:|",":math:mover^:math:|",":math:mpadded^:math:|",":math:mphantom^:math:|",":math:mroot^:math:|",":math:mrow^:math:|",":math:ms^:math:|",":math:mspace^:math:|",":math:msqrt^:math:|",":math:mstyle^:math:|",":math:msub^:math:|",":math:msubsup^:math:|",":math:msup^:math:|",":math:mtable^:math:|",":math:mtd^:math:|",":math:mtext^:math:|",":math:mtr^:math:|",":math:munder^:math:|",":math:munderover^:math:|",":math:semantics^:math:|"],SF=new Map(Object.entries({class:"className",for:"htmlFor",formaction:"formAction",innerHtml:"innerHTML",readonly:"readOnly",tabindex:"tabIndex","aria-activedescendant":"ariaActiveDescendantElement","aria-atomic":"ariaAtomic","aria-autocomplete":"ariaAutoComplete","aria-busy":"ariaBusy","aria-checked":"ariaChecked","aria-colcount":"ariaColCount","aria-colindex":"ariaColIndex","aria-colindextext":"ariaColIndexText","aria-colspan":"ariaColSpan","aria-controls":"ariaControlsElements","aria-current":"ariaCurrent","aria-describedby":"ariaDescribedByElements","aria-description":"ariaDescription","aria-details":"ariaDetailsElements","aria-disabled":"ariaDisabled","aria-errormessage":"ariaErrorMessageElements","aria-expanded":"ariaExpanded","aria-flowto":"ariaFlowToElements","aria-haspopup":"ariaHasPopup","aria-hidden":"ariaHidden","aria-invalid":"ariaInvalid","aria-keyshortcuts":"ariaKeyShortcuts","aria-label":"ariaLabel","aria-labelledby":"ariaLabelledByElements","aria-level":"ariaLevel","aria-live":"ariaLive","aria-modal":"ariaModal","aria-multiline":"ariaMultiLine","aria-multiselectable":"ariaMultiSelectable","aria-orientation":"ariaOrientation","aria-owns":"ariaOwnsElements","aria-placeholder":"ariaPlaceholder","aria-posinset":"ariaPosInSet","aria-pressed":"ariaPressed","aria-readonly":"ariaReadOnly","aria-required":"ariaRequired","aria-roledescription":"ariaRoleDescription","aria-rowcount":"ariaRowCount","aria-rowindex":"ariaRowIndex","aria-rowindextext":"ariaRowIndexText","aria-rowspan":"ariaRowSpan","aria-selected":"ariaSelected","aria-setsize":"ariaSetSize","aria-sort":"ariaSort","aria-valuemax":"ariaValueMax","aria-valuemin":"ariaValueMin","aria-valuenow":"ariaValueNow","aria-valuetext":"ariaValueText"})),yQ=Array.from(SF).reduce((n,[o,e])=>(n.set(o,e),n),new Map),Yg=class extends g3{_schema=new Map;_eventSchema=new Map;constructor(){super(),xQ.forEach(o=>{let e=new Map,t=new Set,[i,a]=o.split("|"),s=a.split(","),[d,p]=i.split("^");d.split(",").forEach(g=>{this._schema.set(g.toLowerCase(),e),this._eventSchema.set(g.toLowerCase(),t)});let u=p&&this._schema.get(p.toLowerCase());if(u){for(let[g,C]of u)e.set(g,C);for(let g of this._eventSchema.get(p.toLowerCase()))t.add(g)}s.forEach(g=>{if(g.length>0)switch(g[0]){case"*":t.add(g.substring(1));break;case"!":e.set(g.substring(1),fQ);break;case"#":e.set(g.substring(1),vQ);break;case"%":e.set(g.substring(1),bQ);break;default:e.set(g,CQ)}})})}hasProperty(o,e,t){if(t.some(s=>s.name===N5.name))return!0;let i=vf(o);if(i.includes("-")){if(G5(i)||kP(i))return!1;if(t.some(s=>s.name===A5.name))return!0}return(this._schema.get(i)||this._schema.get("unknown")).has(e)}hasElement(o,e){if(e.some(i=>i.name===N5.name))return!0;let t=vf(o);return t.includes("-")&&(G5(t)||kP(t)||e.some(i=>i.name===A5.name))?!0:this._schema.has(t)}securityContext(o,e,t){t&&(e=this.getMappedPropName(e));let i=vf(o);e=e.toLowerCase();let[a]=hr(i,!1),s=HH();return s[i+"|"+e]??(a?s[`:${a}:*|${e}`]:void 0)??s["*|"+e]??gi.NONE}getMappedPropName(o){return SF.get(o)??o}getDefaultComponentElementName(){return"ng-component"}validateProperty(o){return o.toLowerCase().startsWith("on")?{error:!0,msg:`Binding to event property '${o}' is disallowed for security reasons, please use (${o.slice(2)})=...
|
||
If '${o}' is a directive input, make sure the directive is imported by the current module.`}:{error:!1}}validateAttribute(o){return o.toLowerCase().startsWith("on")?{error:!0,msg:`Binding to event attribute '${o}' is disallowed for security reasons, please use (${o.slice(2)})=...`}:{error:!1}}allKnownElementNames(){return Array.from(this._schema.keys())}allKnownAttributesOfElement(o){let e=vf(o),t=this._schema.get(e)||this._schema.get("unknown");return Array.from(t.keys()).map(i=>yQ.get(i)??i)}allKnownEventsOfElement(o){let e=vf(o);return Array.from(this._eventSchema.get(e)??[])}normalizeAnimationStyleProperty(o){return vU(o)}normalizeAnimationStyleValue(o,e,t){let i="",a=t.toString().trim(),s=null;if(wQ(o)&&t!==0&&t!=="0")if(typeof t=="number")i="px";else{let d=t.match(/^[+-]?[\d\.]+([a-z]*)$/);d&&d[1].length==0&&(s=`Please provide a CSS unit value for ${e}:${t}`)}return{error:s,value:a+i}}};function wQ(n){switch(n){case"width":case"height":case"minWidth":case"minHeight":case"maxWidth":case"maxHeight":case"left":case"top":case"bottom":case"right":case"fontSize":case"outlineWidth":case"outlineOffset":case"paddingTop":case"paddingLeft":case"paddingBottom":case"paddingRight":case"marginTop":case"marginLeft":case"marginBottom":case"marginRight":case"borderRadius":case"borderWidth":case"borderTopWidth":case"borderLeftWidth":case"borderRightWidth":case"borderBottomWidth":case"textIndent":return!0;default:return!1}}var ci=class{closedByChildren={};contentType;closedByParent=!1;implicitNamespacePrefix;isVoid;ignoreFirstLf;canSelfClose;preventNamespaceInheritance;constructor({closedByChildren:o,implicitNamespacePrefix:e,contentType:t=Nc.PARSABLE_DATA,closedByParent:i=!1,isVoid:a=!1,ignoreFirstLf:s=!1,preventNamespaceInheritance:d=!1,canSelfClose:p=!1}={}){o&&o.length>0&&o.forEach(u=>this.closedByChildren[u]=!0),this.isVoid=a,this.closedByParent=i||a,this.implicitNamespacePrefix=e||null,this.contentType=t,this.ignoreFirstLf=s,this.preventNamespaceInheritance=d,this.canSelfClose=p??a}isClosedByChild(o){return this.isVoid||o.toLowerCase()in this.closedByChildren}getContentType(o){return typeof this.contentType=="object"?(o===void 0?void 0:this.contentType[o])??this.contentType.default:this.contentType}},N6,xg;function h3(n){return xg||(N6=new ci({canSelfClose:!0}),xg=Object.assign(Object.create(null),{base:new ci({isVoid:!0}),meta:new ci({isVoid:!0}),area:new ci({isVoid:!0}),embed:new ci({isVoid:!0}),link:new ci({isVoid:!0}),img:new ci({isVoid:!0}),input:new ci({isVoid:!0}),param:new ci({isVoid:!0}),hr:new ci({isVoid:!0}),br:new ci({isVoid:!0}),source:new ci({isVoid:!0}),track:new ci({isVoid:!0}),wbr:new ci({isVoid:!0}),p:new ci({closedByChildren:["address","article","aside","blockquote","div","dl","fieldset","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","main","nav","ol","p","pre","section","table","ul"],closedByParent:!0}),thead:new ci({closedByChildren:["tbody","tfoot"]}),tbody:new ci({closedByChildren:["tbody","tfoot"],closedByParent:!0}),tfoot:new ci({closedByChildren:["tbody"],closedByParent:!0}),tr:new ci({closedByChildren:["tr"],closedByParent:!0}),td:new ci({closedByChildren:["td","th"],closedByParent:!0}),th:new ci({closedByChildren:["td","th"],closedByParent:!0}),col:new ci({isVoid:!0}),svg:new ci({implicitNamespacePrefix:"svg"}),foreignObject:new ci({implicitNamespacePrefix:"svg",preventNamespaceInheritance:!0}),math:new ci({implicitNamespacePrefix:"math"}),li:new ci({closedByChildren:["li"],closedByParent:!0}),dt:new ci({closedByChildren:["dt","dd"]}),dd:new ci({closedByChildren:["dt","dd"],closedByParent:!0}),rb:new ci({closedByChildren:["rb","rt","rtc","rp"],closedByParent:!0}),rt:new ci({closedByChildren:["rb","rt","rtc","rp"],closedByParent:!0}),rtc:new ci({closedByChildren:["rb","rtc","rp"],closedByParent:!0}),rp:new ci({closedByChildren:["rb","rt","rtc","rp"],closedByParent:!0}),optgroup:new ci({closedByChildren:["optgroup"],closedByParent:!0}),option:new ci({closedByChildren:["option","optgroup"],closedByParent:!0}),pre:new ci({ignoreFirstLf:!0}),listing:new ci({ignoreFirstLf:!0}),style:new ci({contentType:Nc.RAW_TEXT}),script:new ci({contentType:Nc.RAW_TEXT}),title:new ci({contentType:{default:Nc.ESCAPABLE_RAW_TEXT,svg:Nc.PARSABLE_DATA}}),textarea:new ci({contentType:Nc.ESCAPABLE_RAW_TEXT,ignoreFirstLf:!0})}),new Yg().allKnownElementNames().forEach(o=>{!xg[o]&&PP(o)===null&&(xg[o]=new ci({canSelfClose:!1}))})),xg[n]??xg[n.toLowerCase()]??N6}var F6={A:"LINK",B:"BOLD_TEXT",BR:"LINE_BREAK",EM:"EMPHASISED_TEXT",H1:"HEADING_LEVEL1",H2:"HEADING_LEVEL2",H3:"HEADING_LEVEL3",H4:"HEADING_LEVEL4",H5:"HEADING_LEVEL5",H6:"HEADING_LEVEL6",HR:"HORIZONTAL_RULE",I:"ITALIC_TEXT",LI:"LIST_ITEM",LINK:"MEDIA_LINK",OL:"ORDERED_LIST",P:"PARAGRAPH",Q:"QUOTATION",S:"STRIKETHROUGH_TEXT",SMALL:"SMALL_TEXT",SUB:"SUBSTRIPT",SUP:"SUPERSCRIPT",TBODY:"TABLE_BODY",TD:"TABLE_CELL",TFOOT:"TABLE_FOOTER",TH:"TABLE_HEADER_CELL",THEAD:"TABLE_HEADER",TR:"TABLE_ROW",TT:"MONOSPACED_TEXT",U:"UNDERLINED_TEXT",UL:"UNORDERED_LIST"},_3=class{_placeHolderNameCounts={};_signatureToName={};getStartTagPlaceholderName(o,e,t){let i=this._hashTag(o,e,t);if(this._signatureToName[i])return this._signatureToName[i];let a=o.toUpperCase(),s=F6[a]||`TAG_${a}`,d=this._generateUniqueName(t?s:`START_${s}`);return this._signatureToName[i]=d,d}getCloseTagPlaceholderName(o){let e=this._hashClosingTag(o);if(this._signatureToName[e])return this._signatureToName[e];let t=o.toUpperCase(),i=F6[t]||`TAG_${t}`,a=this._generateUniqueName(`CLOSE_${i}`);return this._signatureToName[e]=a,a}getPlaceholderName(o,e){let t=o.toUpperCase(),i=`PH: ${t}=${e}`;if(this._signatureToName[i])return this._signatureToName[i];let a=this._generateUniqueName(t);return this._signatureToName[i]=a,a}getUniquePlaceholder(o){return this._generateUniqueName(o.toUpperCase())}getStartBlockPlaceholderName(o,e){let t=this._hashBlock(o,e);if(this._signatureToName[t])return this._signatureToName[t];let i=this._generateUniqueName(`START_BLOCK_${this._toSnakeCase(o)}`);return this._signatureToName[t]=i,i}getCloseBlockPlaceholderName(o){let e=this._hashClosingBlock(o);if(this._signatureToName[e])return this._signatureToName[e];let t=this._generateUniqueName(`CLOSE_BLOCK_${this._toSnakeCase(o)}`);return this._signatureToName[e]=t,t}_hashTag(o,e,t){let i=`<${o}`,a=Object.keys(e).sort().map(d=>` ${d}=${e[d]}`).join(""),s=t?"/>":`></${o}>`;return i+a+s}_hashClosingTag(o){return this._hashTag(`/${o}`,{},!1)}_hashBlock(o,e){let t=e.length===0?"":` (${e.sort().join("; ")})`;return`@${o}${t} {}`}_hashClosingBlock(o){return this._hashBlock(`close_${o}`,[])}_toSnakeCase(o){return o.toUpperCase().replace(/[^A-Z0-9]/g,"_")}_generateUniqueName(o){if(!this._placeHolderNameCounts.hasOwnProperty(o))return this._placeHolderNameCounts[o]=1,o;let t=this._placeHolderNameCounts[o];return this._placeHolderNameCounts[o]=t+1,`${o}_${t}`}},MQ=new Mx(new E0);function SQ(n,o){let e=new f3(MQ,n,o);return(t,i,a,s,d)=>e.toI18nMessage(t,i,a,s,d)}function kQ(n,o){return o}var f3=class{_expressionParser;_retainEmptyTokens;_preserveExpressionWhitespace;constructor(o,e,t){this._expressionParser=o,this._retainEmptyTokens=e,this._preserveExpressionWhitespace=t}toI18nMessage(o,e="",t="",i="",a){let s={isIcu:o.length==1&&o[0]instanceof eu,icuDepth:0,placeholderRegistry:new _3,placeholderToContent:{},placeholderToMessage:{},visitNodeFn:a||kQ},d=ko(this,o,s);return new os(d,s.placeholderToContent,s.placeholderToMessage,e,t,i)}visitElement(o,e){return this._visitElementLike(o,e)}visitComponent(o,e){return this._visitElementLike(o,e)}visitDirective(o,e){throw new Error("Unreachable code")}visitAttribute(o,e){let t=o.valueTokens===void 0||o.valueTokens.length===1?new uf(o.value,o.valueSpan||o.sourceSpan):this._visitTextWithInterpolation(o.valueTokens,o.valueSpan||o.sourceSpan,e,o.i18n);return e.visitNodeFn(o,t)}visitText(o,e){let t=o.tokens.length===1?new uf(o.value,o.sourceSpan):this._visitTextWithInterpolation(o.tokens,o.sourceSpan,e,o.i18n);return e.visitNodeFn(o,t)}visitComment(o,e){return null}visitExpansion(o,e){e.icuDepth++;let t={},i=new tx(o.switchValue,o.type,t,o.sourceSpan);if(o.cases.forEach(d=>{t[d.value]=new Id(d.expression.map(p=>p.visit(this,e)),d.expSourceSpan)}),e.icuDepth--,e.isIcu||e.icuDepth>0){let d=e.placeholderRegistry.getUniquePlaceholder(`VAR_${o.type}`);return i.expressionPlaceholder=d,e.placeholderToContent[d]={text:o.switchValue,sourceSpan:o.switchValueSourceSpan},e.visitNodeFn(o,i)}let a=e.placeholderRegistry.getPlaceholderName("ICU",o.sourceSpan.toString());e.placeholderToMessage[a]=this.toI18nMessage([o],"","","",void 0);let s=new Wg(i,a,o.sourceSpan);return e.visitNodeFn(o,s)}visitExpansionCase(o,e){throw new Error("Unreachable code")}visitBlock(o,e){let t=ko(this,o.children,e);if(o.name==="switch")return new Id(t,o.sourceSpan);let i=o.parameters.map(p=>p.expression),a=e.placeholderRegistry.getStartBlockPlaceholderName(o.name,i),s=e.placeholderRegistry.getCloseBlockPlaceholderName(o.name);e.placeholderToContent[a]={text:o.startSourceSpan.toString(),sourceSpan:o.startSourceSpan},e.placeholderToContent[s]={text:o.endSourceSpan?o.endSourceSpan.toString():"}",sourceSpan:o.endSourceSpan??o.sourceSpan};let d=new Im(o.name,i,a,s,t,o.sourceSpan,o.startSourceSpan,o.endSourceSpan);return e.visitNodeFn(o,d)}visitBlockParameter(o,e){throw new Error("Unreachable code")}visitLetDeclaration(o,e){return null}_visitElementLike(o,e){let t=ko(this,o.children,e),i={},a=C=>{i[C.name]=C.value},s,d;o instanceof ul?(s=o.name,d=h3(o.name).isVoid):(s=o.fullName,d=o.tagName?h3(o.tagName).isVoid:!1),o.attrs.forEach(a),o.directives.forEach(C=>C.attrs.forEach(a));let p=e.placeholderRegistry.getStartTagPlaceholderName(s,i,d);e.placeholderToContent[p]={text:o.startSourceSpan.toString(),sourceSpan:o.startSourceSpan};let u="";d||(u=e.placeholderRegistry.getCloseTagPlaceholderName(s),e.placeholderToContent[u]={text:`</${s}>`,sourceSpan:o.endSourceSpan??o.sourceSpan});let g=new Dm(s,i,p,u,t,d,o.sourceSpan,o.startSourceSpan,o.endSourceSpan);return e.visitNodeFn(o,g)}_visitTextWithInterpolation(o,e,t,i){let a=[],s=!1;for(let d of o)switch(d.type){case 8:case 17:s=!0;let[p,u,g]=d.parts,C=DQ(u)||"INTERPOLATION",M=t.placeholderRegistry.getPlaceholderName(C,u);if(this._preserveExpressionWhitespace)t.placeholderToContent[M]={text:d.parts.join(""),sourceSpan:d.sourceSpan},a.push(new m0(u,M,d.sourceSpan));else{let x=this.normalizeExpression(d);t.placeholderToContent[M]={text:`${p}${x}${g}`,sourceSpan:d.sourceSpan},a.push(new m0(x,M,d.sourceSpan))}break;default:if(d.parts[0].length>0||this._retainEmptyTokens){let x=a[a.length-1];x instanceof uf?(x.value+=d.parts[0],x.sourceSpan=new In(x.sourceSpan.start,d.sourceSpan.end,x.sourceSpan.fullStart,x.sourceSpan.details)):a.push(new uf(d.parts[0],d.sourceSpan))}else this._retainEmptyTokens&&a.push(new uf(d.parts[0],d.sourceSpan));break}return s?(PQ(a,i),new Id(a,e)):a[0]}normalizeExpression(o){let e=o.parts[1],t=this._expressionParser.parseBinding(e,o.sourceSpan,o.sourceSpan.start.offset);return gQ(t)}};function PQ(n,o){if(o instanceof os&&(TQ(o),o=o.nodes[0]),o instanceof Id){EQ(o.children,n);for(let e=0;e<n.length;e++)n[e].sourceSpan=o.children[e].sourceSpan}}function TQ(n){let o=n.nodes;if(o.length!==1||!(o[0]instanceof Id))throw new Error("Unexpected previous i18n message - expected it to consist of only a single `Container` node.")}function EQ(n,o){if(n.length!==o.length)throw new Error(`
|
||
The number of i18n message children changed between first and second pass.
|
||
|
||
First pass (${n.length} tokens):
|
||
${n.map(e=>`"${e.sourceSpan.toString()}"`).join(`
|
||
`)}
|
||
|
||
Second pass (${o.length} tokens):
|
||
${o.map(e=>`"${e.sourceSpan.toString()}"`).join(`
|
||
`)}
|
||
`.trim());if(n.some((e,t)=>o[t].constructor!==e.constructor))throw new Error("The types of the i18n message children changed between first and second pass.")}var OQ=/\/\/[\s\S]*i18n[\s\S]*\([\s\S]*ph[\s\S]*=[\s\S]*("|')([\s\S]*?)\1[\s\S]*\)/g;function DQ(n){return n.split(OQ)[2]}var R6=new Set(["iframe|srcdoc","*|innerhtml","*|outerhtml","embed|src","iframe|src","object|codebase","object|data"]);function z6(n,o){return n=n.toLowerCase(),o=o.toLowerCase(),R6.has(n+"|"+o)||R6.has("*|"+o)}var IQ=n=>(o,e)=>{let t=n.get(o)??o;return t instanceof Rd&&(e instanceof Wg&&t.i18n instanceof os&&(e.previousMessage=t.i18n),t.i18n=e),e},Sx=class{keepI18nAttrs;enableI18nLegacyMessageIdFormat;preserveSignificantWhitespace;retainEmptyTokens;hasI18nMeta=!1;_errors=[];constructor(o=!1,e=!1,t=!0,i=!t){this.keepI18nAttrs=o,this.enableI18nLegacyMessageIdFormat=e,this.preserveSignificantWhitespace=t,this.retainEmptyTokens=i}_generateI18nMessage(o,e="",t){let{meaning:i,description:a,customId:s}=this._parseMetadata(e),p=SQ(this.retainEmptyTokens,this.preserveSignificantWhitespace)(o,i,a,s,t);return this._setMessageId(p,e),this._setLegacyIds(p,e),p}visitAllWithErrors(o){let e=o.map(t=>t.visit(this,null));return new yx(e,this._errors)}visitElement(o){return this._visitElementLike(o),o}visitComponent(o,e){return this._visitElementLike(o),o}visitExpansion(o,e){let t,i=o.i18n;if(this.hasI18nMeta=!0,i instanceof Wg){let a=i.name;t=this._generateI18nMessage([o],i);let s=LN(t);s.name=a,e!==null&&(e.placeholderToMessage[a]=t)}else t=this._generateI18nMessage([o],e||i);return o.i18n=t,o}visitText(o){return o}visitAttribute(o){return o}visitComment(o){return o}visitExpansionCase(o){return o}visitBlock(o,e){return ko(this,o.children,e),o}visitBlockParameter(o,e){return o}visitLetDeclaration(o,e){return o}visitDirective(o,e){return o}_visitElementLike(o){let e;if(GU(o)){this.hasI18nMeta=!0;let t=[],i={};for(let a of o.attrs)if(a.name===RN){let s=o.i18n||a.value,d=new Map,p=this.preserveSignificantWhitespace?o.children:Dc(new wx(!1,d),o.children);e=this._generateI18nMessage(p,s,IQ(d)),e.nodes.length===0&&(e=void 0),o.i18n=e}else if(a.name.startsWith(zP)){let s=a.name.slice(zP.length),d;o instanceof Jr?d=o.tagName===null?!1:z6(o.tagName,s):d=z6(o.name,s),d||zQ(s)?this._reportError(a,`Translating attribute '${s}' is disallowed for security reasons.`):i[s]=a.value}else t.push(a);if(Object.keys(i).length)for(let a of t){let s=i[a.name];s!==void 0&&a.value&&(a.i18n=this._generateI18nMessage([a],a.i18n||s))}this.keepI18nAttrs||(o.attrs=t)}ko(this,o.children,e)}_parseMetadata(o){return typeof o=="string"?FQ(o):o instanceof os?o:{}}_setMessageId(o,e){o.id||(o.id=e instanceof os&&e.id||QH(o))}_setLegacyIds(o,e){if(this.enableI18nLegacyMessageIdFormat)o.legacyIds=[qH(o),PN(o)];else if(typeof e!="string"){let t=e instanceof os?e:e instanceof Wg?e.previousMessage:void 0;o.legacyIds=t?t.legacyIds:[]}}_reportError(o,e){this._errors.push(new dn(o.sourceSpan,e))}},AQ="|",NQ="@@";function FQ(n=""){let o,e,t;if(n=n.trim(),n){let i=n.indexOf(NQ),a=n.indexOf(AQ),s;[s,o]=i>-1?[n.slice(0,i),n.slice(i+2)]:[n,""],[e,t]=a>-1?[s.slice(0,a),s.slice(a+1)]:["",s]}return{customId:o,meaning:e,description:t}}function RQ(n){let o=[];return n.description?o.push({tagName:"desc",text:n.description}):o.push({tagName:"suppress",text:"{msgDescriptions}"}),n.meaning&&o.push({tagName:"meaning",text:n.meaning}),cU(o)}function zQ(n){let o=n.toLowerCase();return o.length>2&&o!=="only"&&o.startsWith("on")}var LQ="goog.getMsg";function VQ(n,o,e,t){let i=jQ(o),a=[De(i)];Object.keys(t).length&&(a.push(e3(Q3(t,!0),!0)),a.push(e3({original_code:yl(Object.keys(t).map(p=>({key:R0(p),quoted:!0,value:o.placeholders[p]?De(o.placeholders[p].sourceSpan.toString()):De(o.placeholderToMessage[p].nodes.map(u=>u.sourceSpan.toString()).join(""))})))})));let s=new Ga(e.name,di(LQ).callFn(a),ic,ur.Final);s.addLeadingComment(RQ(o));let d=new fr(n.set(e));return[s,d]}var v3=class{formatPh(o){return`{$${R0(o)}}`}visitText(o){return o.value}visitContainer(o){return o.children.map(e=>e.visit(this)).join("")}visitIcu(o){return vF(o)}visitTagPlaceholder(o){return o.isVoid?this.formatPh(o.startName):`${this.formatPh(o.startName)}${o.children.map(e=>e.visit(this)).join("")}${this.formatPh(o.closeName)}`}visitPlaceholder(o){return this.formatPh(o.name)}visitBlockPlaceholder(o){return`${this.formatPh(o.startName)}${o.children.map(e=>e.visit(this)).join("")}${this.formatPh(o.closeName)}`}visitIcuPlaceholder(o,e){return this.formatPh(o.name)}},BQ=new v3;function jQ(n){return n.nodes.map(o=>o.visit(BQ,null)).join("")}function $Q(n,o,e){let{messageParts:t,placeHolders:i}=HQ(o),a=UQ(o),s=i.map(u=>e[u.text]),d=pU(o,t,i,s,a),p=n.set(d);return[new fr(p)]}var C3=class{placeholderToMessage;pieces;constructor(o,e){this.placeholderToMessage=o,this.pieces=e}visitText(o){if(this.pieces[this.pieces.length-1]instanceof Xp)this.pieces[this.pieces.length-1].text+=o.value;else{let e=new In(o.sourceSpan.fullStart,o.sourceSpan.end,o.sourceSpan.fullStart,o.sourceSpan.details);this.pieces.push(new Xp(o.value,e))}}visitContainer(o){o.children.forEach(e=>e.visit(this))}visitIcu(o){this.pieces.push(new Xp(vF(o),o.sourceSpan))}visitTagPlaceholder(o){this.pieces.push(this.createPlaceholderPiece(o.startName,o.startSourceSpan??o.sourceSpan)),o.isVoid||(o.children.forEach(e=>e.visit(this)),this.pieces.push(this.createPlaceholderPiece(o.closeName,o.endSourceSpan??o.sourceSpan)))}visitPlaceholder(o){this.pieces.push(this.createPlaceholderPiece(o.name,o.sourceSpan))}visitBlockPlaceholder(o){this.pieces.push(this.createPlaceholderPiece(o.startName,o.startSourceSpan??o.sourceSpan)),o.children.forEach(e=>e.visit(this)),this.pieces.push(this.createPlaceholderPiece(o.closeName,o.endSourceSpan??o.sourceSpan))}visitIcuPlaceholder(o){this.pieces.push(this.createPlaceholderPiece(o.name,o.sourceSpan,this.placeholderToMessage[o.name]))}createPlaceholderPiece(o,e,t){return new Og(R0(o,!1),e,t)}};function HQ(n){let o=[],e=new C3(n.placeholderToMessage,o);return n.nodes.forEach(t=>t.visit(e)),WQ(o)}function UQ(n){let o=n.nodes[0],e=n.nodes[n.nodes.length-1];return new In(o.sourceSpan.fullStart,e.sourceSpan.end,o.sourceSpan.fullStart,o.sourceSpan.details)}function WQ(n){let o=[],e=[];n[0]instanceof Og&&o.push(eP(n[0].sourceSpan.start));for(let t=0;t<n.length;t++){let i=n[t];i instanceof Xp?o.push(i):(e.push(i),n[t-1]instanceof Og&&o.push(eP(n[t-1].sourceSpan.end)))}return n[n.length-1]instanceof Og&&o.push(eP(n[n.length-1].sourceSpan.end)),{messageParts:o,placeHolders:e}}function eP(n){return new Xp("",new In(n,n))}var L6="ngI18nClosureMode",GQ="i18n_",qQ="I18N_EXP_",V6="\uFFFD",QQ="MSG_";function B6(n){return`${QQ}${n}`.toUpperCase()}function KQ(n){return new Ga(n.name,void 0,ic,void 0,n.sourceSpan)}function XQ(n){let o=n.relativeContextFilePath.replace(/[^A-Za-z0-9]/g,"_").toUpperCase()+"_",e=new Map,t=new Map,i=new Map,a=new Map;for(let p of n.units)for(let u of p.ops())if(u.kind===j.ExtractedAttribute&&u.i18nContext!==null){let g=e.get(u.i18nContext)??[];g.push(u),e.set(u.i18nContext,g)}else if(u.kind===j.I18nAttributes)t.set(u.target,u);else if(u.kind===j.I18nExpression&&u.usage===th.I18nAttribute){let g=i.get(u.target)??[];g.push(u),i.set(u.target,g)}else u.kind===j.I18nMessage&&a.set(u.xref,u);let s=new Map,d=new Map;for(let p of n.units)for(let u of p.create)if(u.kind===j.I18nMessage){if(u.messagePlaceholder===null){let{mainVar:g,statements:C}=kF(n,o,a,u);if(u.i18nBlock!==null){let M=n.addConst(g,C);d.set(u.i18nBlock,M)}else{n.constsInitializers.push(...C),s.set(u.i18nContext,g);let M=e.get(u.i18nContext);if(M!==void 0)for(let x of M)x.expression=g.clone()}}Je.remove(u)}for(let p of n.units)for(let u of p.create)if(Lm(u)){let g=t.get(u.xref);if(g===void 0)continue;let C=i.get(u.xref);if(C===void 0)throw new Error("AssertionError: Could not find any i18n expressions associated with an I18nAttributes instruction");let M=new Set;C=C.filter(b=>{let P=M.has(b.name);return M.add(b.name),!P});let x=C.flatMap(b=>{let P=s.get(b.context);if(P===void 0)throw new Error("AssertionError: Could not find i18n expression's value");return[De(b.name),P]});g.i18nAttributesConfig=n.addConst(new $c(x))}for(let p of n.units)for(let u of p.create)if(u.kind===j.I18nStart){let g=d.get(u.root);if(g===void 0)throw new Error("AssertionError: Could not find corresponding i18n block index for an i18n message op; was an i18n message incorrectly assumed to correspond to an attribute?");u.messageIndex=g}}function kF(n,o,e,t){let i=[],a=new Map;for(let u of t.subMessages){let g=e.get(u),{mainVar:C,statements:M}=kF(n,o,e,g);i.push(...M);let x=a.get(g.messagePlaceholder)??[];x.push(C),a.set(g.messagePlaceholder,x)}YQ(t,a),t.params=new Map([...t.params.entries()].sort());let s=di(n.pool.uniqueName(GQ)),d=eK(n.pool,t.message.id,o,n.i18nUseExternalIds),p;if(t.needsPostprocessing||t.postprocessingParams.size>0){let u=Object.fromEntries([...t.postprocessingParams.entries()].sort()),g=Q3(u,!1),C=[];t.postprocessingParams.size>0&&C.push(e3(g,!0)),p=M=>Ht(ge.i18nPostprocess).callFn([M,...C])}return i.push(...ZQ(t.message,s,d,t.params,p)),{mainVar:s,statements:i}}function YQ(n,o){for(let[e,t]of o)t.length===1?n.params.set(e,t[0]):(n.params.set(e,De(`${V6}${qQ}${e}${V6}`)),n.postprocessingParams.set(e,io(t)))}function ZQ(n,o,e,t,i){let a=Object.fromEntries(t),s=[KQ(o),Nx(JQ(),VQ(o,n,e,a),$Q(o,n,Q3(a,!1)))];return i&&s.push(new fr(o.set(i(o)))),s}function JQ(){return N0(di(L6)).notIdentical(De("undefined",W3)).and(di(L6))}function eK(n,o,e,t){let i,a=e;if(t){let s=B6("EXTERNAL_"),d=n.uniqueName(a);i=`${s}${Up(o)}$$${d}`}else{let s=B6(a);i=n.uniqueName(s)}return di(i)}function tK(n){for(let o of n.units){let e=null,t=null,i=new Map,a=new Map,s=new Map;for(let d of o.create)switch(d.kind){case j.I18nStart:if(d.context===null)throw Error("I18n op should have its context set.");e=d;break;case j.I18nEnd:e=null;break;case j.IcuStart:if(d.context===null)throw Error("Icu op should have its context set.");t=d;break;case j.IcuEnd:t=null;break;case j.Text:if(e!==null)if(i.set(d.xref,e),a.set(d.xref,t),d.icuPlaceholder!==null){let p=PG(n.allocateXrefId(),d.icuPlaceholder,[d.initialValue]);Je.replace(d,p),s.set(d.xref,p)}else Je.remove(d);break}for(let d of o.update)switch(d.kind){case j.InterpolateText:if(!i.has(d.target))continue;let p=i.get(d.target),u=a.get(d.target),g=s.get(d.target),C=u?u.context:p.context,M=u?f0.Postproccessing:f0.Creation,x=[];for(let b=0;b<d.interpolation.expressions.length;b++){let P=d.interpolation.expressions[b];x.push(oF(C,p.xref,p.xref,p.handle,P,g?.xref??null,d.interpolation.i18nPlaceholders[b]??null,M,th.I18nText,"",P.sourceSpan??d.sourceSpan))}Je.replaceWithMany(d,x),g!==void 0&&(g.strings=d.interpolation.strings);break}}}function nK(n){for(let o of n.units)for(let e of o.create)switch(e.kind){case j.ElementStart:case j.ConditionalCreate:case j.ConditionalBranchCreate:case j.Template:if(!Array.isArray(e.localRefs))throw new Error("AssertionError: expected localRefs to be an array still");if(e.numSlotsUsed+=e.localRefs.length,e.localRefs.length>0){let t=iK(e.localRefs);e.localRefs=n.addConst(t)}else e.localRefs=null;break}}function iK(n){let o=[];for(let e of n)o.push(De(e.name),De(e.target));return io(o)}function oK(n){for(let o of n.units){let e=Oa.HTML;for(let t of o.create)t.kind===j.ElementStart&&t.namespace!==e&&(Je.insertBefore(CG(t.namespace),t),e=t.namespace)}}function aK(n){let o=[],e=0,t=0,i=0,a=0,s=0,d=null;for(;e<n.length;)switch(n.charCodeAt(e++)){case 40:t++;break;case 41:t--;break;case 39:i===0?i=39:i===39&&n.charCodeAt(e-1)!==92&&(i=0);break;case 34:i===0?i=34:i===34&&n.charCodeAt(e-1)!==92&&(i=0);break;case 58:!d&&t===0&&i===0&&(d=PF(n.substring(s,e-1).trim()),a=e);break;case 59:if(d&&a>0&&t===0&&i===0){let u=n.substring(a,e-1).trim();o.push(d,u),s=e,a=0,d=null}break}if(d&&a){let p=n.slice(a).trim();o.push(d,p)}return o}function PF(n){return n.replace(/[a-z][A-Z]/g,o=>o.charAt(0)+"-"+o.charAt(1)).toLowerCase()}function rK(n){let o=new Map;for(let e of n.units)for(let t of e.create)Lm(t)&&o.set(t.xref,t);for(let e of n.units)for(let t of e.create)if(t.kind===j.ExtractedAttribute&&t.bindingKind===Qt.Attribute&&aF(t.expression)){let i=o.get(t.target);if(i!==void 0&&(i.kind===j.Template||i.kind===j.ConditionalCreate||i.kind===j.ConditionalBranchCreate)&&i.templateKind===ys.Structural)continue;if(t.name==="style"){let a=aK(t.expression.value);for(let s=0;s<a.length-1;s+=2)Je.insertBefore(Cl(t.target,Qt.StyleProperty,null,a[s],De(a[s+1]),null,null,gi.STYLE),t);Je.remove(t)}else if(t.name==="class"){let a=t.expression.value.trim().split(/\s+/g);for(let s of a)Je.insertBefore(Cl(t.target,Qt.ClassName,null,s,null,null,null,gi.NONE),t);Je.remove(t)}}}function sK(n){Pf(n.root,n.componentName,{index:0})}function Pf(n,o,e){n.fnName===null&&(n.fnName=n.job.pool.uniqueName(Up(`${o}_${n.job.fnSuffix}`),!1));let t=new Map;for(let i of n.ops())switch(i.kind){case j.Property:case j.DomProperty:i.bindingKind===Qt.LegacyAnimation&&(i.name="@"+i.name);break;case j.Animation:if(i.handlerFnName===null){let u=i.name.replace(".","");i.handlerFnName=`${n.fnName}_${u}_cb`,i.handlerFnName=Up(i.handlerFnName)}break;case j.AnimationListener:if(i.handlerFnName!==null)break;if(!i.hostListener&&i.targetSlot.slot===null)throw new Error("Expected a slot to be assigned");let a=i.name.replace(".","");i.hostListener?i.handlerFnName=`${o}_${a}_HostBindingHandler`:i.handlerFnName=`${n.fnName}_${i.tag.replace("-","_")}_${a}_${i.targetSlot.slot}_listener`,i.handlerFnName=Up(i.handlerFnName);break;case j.Listener:if(i.handlerFnName!==null)break;if(!i.hostListener&&i.targetSlot.slot===null)throw new Error("Expected a slot to be assigned");let s="";i.isLegacyAnimationListener&&(i.name=`@${i.name}.${i.legacyAnimationPhase}`,s="animation"),i.hostListener?i.handlerFnName=`${o}_${s}${i.name}_HostBindingHandler`:i.handlerFnName=`${n.fnName}_${i.tag.replace("-","_")}_${s}${i.name}_${i.targetSlot.slot}_listener`,i.handlerFnName=Up(i.handlerFnName);break;case j.TwoWayListener:if(i.handlerFnName!==null)break;if(i.targetSlot.slot===null)throw new Error("Expected a slot to be assigned");i.handlerFnName=Up(`${n.fnName}_${i.tag.replace("-","_")}_${i.name}_${i.targetSlot.slot}_listener`);break;case j.Variable:t.set(i.xref,lK(i.variable,e));break;case j.RepeaterCreate:if(!(n instanceof bl))throw new Error("AssertionError: must be compiling a component");if(i.handle.slot===null)throw new Error("Expected slot to be assigned");if(i.emptyView!==null){let u=n.job.views.get(i.emptyView);Pf(u,`${o}_${i.functionNameSuffix}Empty_${i.handle.slot+2}`,e)}Pf(n.job.views.get(i.xref),`${o}_${i.functionNameSuffix}_${i.handle.slot+1}`,e);break;case j.Projection:if(!(n instanceof bl))throw new Error("AssertionError: must be compiling a component");if(i.handle.slot===null)throw new Error("Expected slot to be assigned");if(i.fallbackView!==null){let u=n.job.views.get(i.fallbackView);Pf(u,`${o}_ProjectionFallback_${i.handle.slot}`,e)}break;case j.ConditionalCreate:case j.ConditionalBranchCreate:case j.Template:if(!(n instanceof bl))throw new Error("AssertionError: must be compiling a component");let d=n.job.views.get(i.xref);if(i.handle.slot===null)throw new Error("Expected slot to be assigned");let p=i.functionNameSuffix.length===0?"":`_${i.functionNameSuffix}`;Pf(d,`${o}${p}_${i.handle.slot}`,e);break;case j.StyleProp:i.name=j6(cK(i.name));break;case j.ClassProp:i.name=j6(i.name);break}for(let i of n.ops())wa(i,a=>{if(!(!(a instanceof Ad)||a.name!==null)){if(!t.has(a.xref))throw new Error(`Variable ${a.xref} not yet named`);a.name=t.get(a.xref)}})}function lK(n,o){if(n.name===null)switch(n.kind){case ar.Context:n.name=`ctx_r${o.index++}`;break;case ar.Identifier:let e=n.identifier===Zs?"i":"";n.name=`${n.identifier}_${e}r${++o.index}`;break;default:n.name=`_r${++o.index}`;break}return n.name}function cK(n){return n.startsWith("--")?n:PF(n)}function j6(n){let o=n.indexOf("!important");return o>-1?n.substring(0,o):n}function dK(n){for(let o of n.units){for(let e of o.functions)tP(e.ops);for(let e of o.create)(e.kind===j.Listener||e.kind===j.Animation||e.kind===j.AnimationListener||e.kind===j.TwoWayListener)&&tP(e.handlerOps);tP(o.update)}}function tP(n){for(let o of n){if(o.kind!==j.Statement||!(o.statement instanceof fr)||!(o.statement.expr instanceof cx))continue;let e=o.statement.expr.steps,t=!0;for(let i=o.next;i.kind!==j.ListEnd&&t;i=i.next)wa(i,(a,s)=>{if(!Gc(a))return a;if(t&&!(s&ai.InChildOperation))switch(a.kind){case Jt.NextContext:a.steps+=e,Je.remove(o),t=!1;break;case Jt.GetCurrentView:case Jt.Reference:case Jt.ContextLetReference:t=!1;break}})}}var mK="ng-container";function pK(n){for(let o of n.units){let e=new Set;for(let t of o.create)t.kind===j.ElementStart&&t.tag===mK&&(t.kind=j.ContainerStart,e.add(t.xref)),t.kind===j.ElementEnd&&e.has(t.xref)&&(t.kind=j.ContainerEnd)}}function uK(n,o){let e=n.get(o);if(e===void 0)throw new Error("All attributes should have an element-like target.");return e}function gK(n){let o=new Map;for(let e of n.units)for(let t of e.create)Lm(t)&&o.set(t.xref,t);for(let e of n.units)for(let t of e.create)(t.kind===j.ElementStart||t.kind===j.ContainerStart)&&t.nonBindable&&Je.insertAfter(gG(t.xref),t),(t.kind===j.ElementEnd||t.kind===j.ContainerEnd)&&uK(o,t.xref).nonBindable&&Je.insertBefore(hG(t.xref),t)}function Rc(n){return o=>o.kind===n}function If(n,o){return e=>e.kind===n&&o===e.expression instanceof aa}function hK(n){return n.kind===j.Listener&&!(n.hostListener&&n.isLegacyAnimationListener)||n.kind===j.TwoWayListener||n.kind===j.Animation||n.kind===j.AnimationListener}function _K(n){return(n.kind===j.Property||n.kind===j.TwoWayProperty)&&!(n.expression instanceof aa)}var fK=[{test:n=>n.kind===j.Listener&&n.hostListener&&n.isLegacyAnimationListener},{test:hK}],vK=[{test:Rc(j.StyleMap),transform:kx},{test:Rc(j.ClassMap),transform:kx},{test:Rc(j.StyleProp)},{test:Rc(j.ClassProp)},{test:If(j.Attribute,!0)},{test:If(j.Property,!0)},{test:_K},{test:If(j.Attribute,!1)},{test:Rc(j.Control)}],CK=[{test:If(j.DomProperty,!0)},{test:If(j.DomProperty,!1)},{test:Rc(j.Attribute)},{test:Rc(j.StyleMap),transform:kx},{test:Rc(j.ClassMap),transform:kx},{test:Rc(j.StyleProp)},{test:Rc(j.ClassProp)}],$6=new Set([j.Listener,j.TwoWayListener,j.AnimationListener,j.StyleMap,j.ClassMap,j.StyleProp,j.ClassProp,j.Property,j.TwoWayProperty,j.DomProperty,j.Attribute,j.Animation,j.Control]);function bK(n){for(let o of n.units){H6(o.create,fK);let e=o.job.kind===Dt.Host?CK:vK;H6(o.update,e)}}function H6(n,o){let e=[],t=null;for(let i of n){let a=v0(i)?i.target:null;(!$6.has(i.kind)||a!==t&&t!==null&&a!==null)&&(Je.insertBefore(U6(e,o),i),e=[],t=null),$6.has(i.kind)&&(e.push(i),Je.remove(i),t=a??t)}n.push(U6(e,o))}function U6(n,o){let e=Array.from(o,()=>new Array);for(let t of n){let i=o.findIndex(a=>a.test(t));e[i].push(t)}return e.flatMap((t,i)=>{let a=o[i].transform;return a?a(t):t})}function kx(n){return n.slice(n.length-1)}function xK(n){for(let o of n.units){let e=gF(o);for(let t of o.ops())if(t.kind===j.Binding){let i=wK(e,t.target);yK(t.name)&&i.kind===j.Projection&&Je.remove(t)}}}function yK(n){return n.toLowerCase()==="select"}function wK(n,o){let e=n.get(o);if(e===void 0)throw new Error("All attributes should have an slottable target.");return e}function MK(n){for(let o of n.units)SK(o)}function SK(n){for(let o of n.update)wa(o,(e,t)=>{if(!Gc(e)||e.kind!==Jt.PipeBinding)return;if(t&ai.InChildOperation)throw new Error("AssertionError: pipe bindings should not appear in child expressions");if(o.target==null)throw new Error("AssertionError: expected slot handle to be assigned for pipe creation");kK(n,o.target,e)})}function kK(n,o,e){for(let t=n.create.head.next;t.kind!==j.ListEnd;t=t.next){if(!nh(t)||t.xref!==o)continue;for(;t.next.kind===j.Pipe;)t=t.next;let i=vG(e.target,e.targetSlot,e.name);Je.insertBefore(i,t.next);return}throw new Error(`AssertionError: unable to find insertion point for pipe ${e.name}`)}function PK(n){for(let o of n.units)for(let e of o.update)ra(e,t=>!(t instanceof hu)||t.args.length<=4?t:new y0(t.target,t.targetSlot,t.name,io(t.args),t.args.length),ai.None)}function TK(n){TF(n.root,0)}function TF(n,o){let e=null;for(let t of n.create)switch(t.kind){case j.I18nStart:t.subTemplateIndex=o===0?null:o,e=t;break;case j.I18nEnd:e.subTemplateIndex===null&&(o=0),e=null;break;case j.ConditionalCreate:case j.ConditionalBranchCreate:case j.Template:o=pb(n.job.views.get(t.xref),e,t.i18nPlaceholder,o);break;case j.RepeaterCreate:let i=n.job.views.get(t.xref);o=pb(i,e,t.i18nPlaceholder,o),t.emptyView!==null&&(o=pb(n.job.views.get(t.emptyView),e,t.emptyI18nPlaceholder,o));break;case j.Projection:t.fallbackView!==null&&(o=pb(n.job.views.get(t.fallbackView),e,t.fallbackViewI18nPlaceholder,o));break}return o}function pb(n,o,e,t){if(e!==void 0){if(o===null)throw Error("Expected template with i18n placeholder to be in an i18n block.");t++,EK(n,o)}return TF(n,t)}function EK(n,o){if(n.create.head.next?.kind!==j.I18nStart){let e=n.job.allocateXrefId();Je.insertAfter(Lx(e,o.message,o.root,null),n.create.head),Je.insertBefore(Vx(e,null),n.create.tail)}}function OK(n){for(let o of n.units)for(let e of o.ops())wa(e,t=>{if(!(t instanceof gu)||t.body===null)return;let i=new b3(t.args.length);t.fn=n.pool.getSharedConstant(i,t.body),t.body=null})}var b3=class extends Hf{numArgs;constructor(o){super(),this.numArgs=o}keyOf(o){return o instanceof Rm?`param(${o.index})`:super.keyOf(o)}toSharedConstantDeclaration(o,e){let t=[];for(let a=0;a<this.numArgs;a++)t.push(new Da("a"+a,ws));let i=Bt(e,a=>a instanceof Rm?di("a"+a.index):a,ai.None);return new Ga(o,new vu(t,i),void 0,ur.Final)}};function DK(n){for(let o of n.units)for(let e of o.update)ra(e,(t,i)=>i&ai.InChildOperation?t:t instanceof $c?IK(t):t instanceof rc?AK(t):t,ai.None)}function IK(n){let o=[],e=[];for(let t of n.entries){if(t instanceof ru){if(t.expression.isConstant())o.push(t);else{let i=e.length;e.push(t.expression),o.push(new ru(new Rm(i)))}continue}if(t.isConstant())o.push(t);else{let i=e.length;e.push(t),o.push(new Rm(i))}}return new gu(io(o),e)}function AK(n){let o=[],e=[];for(let t of n.entries){if(t instanceof Tm){if(t.expression.isConstant())o.push(t);else{let i=e.length;e.push(t.expression),o.push(new Tm(new Rm(i)))}continue}if(t.value.isConstant())o.push(t);else{let i=e.length;e.push(t.value),o.push(new Rg(t.key,new Rm(i),t.quoted))}}return new gu(new rc(o),e)}function NK(n){for(let o of n.units)for(let e of o.ops())ra(e,t=>t instanceof Fg&&(t.flags===null||!t.flags.includes("g"))?n.pool.getSharedConstant(new x3,t):t,ai.None)}var x3=class extends Hf{toSharedConstantDeclaration(o,e){return new Ga(o,e,void 0,ur.Final)}};function FK(n,o,e,t,i){return jm(ge.element,n,o,e,t,i)}function RK(n,o,e,t,i){return jm(ge.elementStart,n,o,e,t,i)}function jm(n,o,e,t,i,a){let s=[De(o)];return e!==null&&s.push(De(e)),i!==null?s.push(De(t),De(i)):t!==null&&s.push(De(t)),$n(n,s,a)}function EF(n,o,e,t,i,a,s,d,p){let u=[De(o),e,De(t),De(i),De(a),De(s)];for(d!==null&&(u.push(De(d)),u.push(Ht(ge.templateRefExtractor)));u[u.length-1].isEquivalent(zg);)u.pop();return $n(n,u,p)}function oT(n,o,e,t,i){let a=[De(o)];return e instanceof aa?a.push(ih(e,i)):a.push(e),t!==null&&a.push(t),$n(n,a,i)}function zK(n){return $n(ge.elementEnd,[],n)}function LK(n,o,e,t){return jm(ge.elementContainerStart,n,null,o,e,t)}function VK(n,o,e,t){return jm(ge.elementContainer,n,null,o,e,t)}function BK(){return $n(ge.elementContainerEnd,[],null)}function jK(n,o,e,t,i,a,s,d){return EF(ge.templateCreate,n,o,e,t,i,a,s,d)}function $K(){return $n(ge.disableBindings,[],null)}function HK(){return $n(ge.enableBindings,[],null)}function UK(n,o,e,t,i){let a=[De(n),o];return e!==null&&a.push(Ht(e)),$n(t?ge.syntheticHostListener:ge.listener,a,i)}function W6(n,o){return Ht(ge.twoWayBindingSet).callFn([n,o])}function WK(n,o,e){return $n(ge.twoWayListener,[De(n),o],e)}function GK(n,o){return $n(ge.pipe,[De(n),De(o)],null)}function qK(){return $n(ge.namespaceHTML,[],null)}function QK(){return $n(ge.namespaceSVG,[],null)}function KK(){return $n(ge.namespaceMathML,[],null)}function XK(n,o){return $n(ge.advance,n>1?[De(n)]:[],o)}function YK(n){return Ht(ge.reference).callFn([De(n)])}function ZK(n){return Ht(ge.nextContext).callFn(n===1?[]:[De(n)])}function JK(){return Ht(ge.getCurrentView).callFn([])}function eX(n){return Ht(ge.restoreView).callFn([n])}function tX(n){return Ht(ge.resetView).callFn([n])}function nX(n,o,e){let t=[De(n,null)];return o!==""&&t.push(De(o)),$n(ge.text,t,e)}function iX(n,o,e,t,i,a,s,d,p,u,g){let C=[De(n),De(o),e??De(null),De(t),De(i),De(a),s??De(null),d??De(null),p?Ht(ge.deferEnableTimerScheduling):De(null),De(g)],M;for(;(M=C[C.length-1])!==null&&M instanceof _r&&M.value===null;)C.pop();return $n(ge.defer,C,u)}var oX=new Map([[lo.Idle,{none:ge.deferOnIdle,prefetch:ge.deferPrefetchOnIdle,hydrate:ge.deferHydrateOnIdle}],[lo.Immediate,{none:ge.deferOnImmediate,prefetch:ge.deferPrefetchOnImmediate,hydrate:ge.deferHydrateOnImmediate}],[lo.Timer,{none:ge.deferOnTimer,prefetch:ge.deferPrefetchOnTimer,hydrate:ge.deferHydrateOnTimer}],[lo.Hover,{none:ge.deferOnHover,prefetch:ge.deferPrefetchOnHover,hydrate:ge.deferHydrateOnHover}],[lo.Interaction,{none:ge.deferOnInteraction,prefetch:ge.deferPrefetchOnInteraction,hydrate:ge.deferHydrateOnInteraction}],[lo.Viewport,{none:ge.deferOnViewport,prefetch:ge.deferPrefetchOnViewport,hydrate:ge.deferHydrateOnViewport}],[lo.Never,{none:ge.deferHydrateNever,prefetch:ge.deferHydrateNever,hydrate:ge.deferHydrateNever}]]);function aX(n,o,e,t){let i=oX.get(n)?.[e];if(i===void 0)throw new Error(`Unable to determine instruction for trigger ${n}`);return $n(i,o,t)}function rX(n){return $n(ge.projectionDef,n?[n]:[],null)}function sX(n,o,e,t,i,a,s){let d=[De(n)];return(o!==0||e!==null||t!==null)&&(d.push(De(o)),e!==null&&d.push(e),t!==null&&(e===null&&d.push(De(null)),d.push(di(t),De(i),De(a)))),$n(ge.projection,d,s)}function lX(n,o,e,t){let i=[De(n),De(o)];return e!==null&&i.push(De(e)),$n(ge.i18nStart,i,t)}function cX(n,o,e,t,i,a,s,d){let p=[De(n),o,De(e),De(t),De(i),De(a)];for(s!==null&&(p.push(De(s)),p.push(Ht(ge.templateRefExtractor)));p[p.length-1].isEquivalent(zg);)p.pop();return $n(ge.conditionalCreate,p,d)}function dX(n,o,e,t,i,a,s,d){let p=[De(n),o,De(e),De(t),De(i),De(a)];for(s!==null&&(p.push(De(s)),p.push(Ht(ge.templateRefExtractor)));p[p.length-1].isEquivalent(zg);)p.pop();return $n(ge.conditionalBranchCreate,p,d)}function mX(n,o,e,t,i,a,s,d,p,u,g,C,M,x){let b=[De(n),di(o),De(e),De(t),De(i),De(a),s];return(d||p!==null)&&(b.push(De(d)),p!==null&&(b.push(di(p),De(u),De(g)),(C!==null||M!==null)&&b.push(De(C)),M!==null&&b.push(De(M)))),$n(ge.repeaterCreate,b,x)}function pX(n,o){return $n(ge.repeater,[n],o)}function uX(n,o,e){return n==="prefetch"?$n(ge.deferPrefetchWhen,[o],e):n==="hydrate"?$n(ge.deferHydrateWhen,[o],e):$n(ge.deferWhen,[o],e)}function gX(n,o){return $n(ge.declareLet,[De(n)],o)}function hX(n,o){return Ht(ge.storeLet).callFn([n],o)}function _X(n){return Ht(ge.readContextLet).callFn([De(n)])}function fX(n,o,e,t){let i=[De(n),De(o)];return e&&i.push(De(e)),$n(ge.i18n,i,t)}function vX(n){return $n(ge.i18nEnd,[],n)}function CX(n,o){let e=[De(n),De(o)];return $n(ge.i18nAttributes,e,null)}function bX(n,o,e){return oT(ge.ariaProperty,n,o,null,e)}function xX(n,o,e,t){return oT(ge.property,n,o,e,t)}function yX(n){return $n(ge.control,[],n)}function wX(n){return $n(ge.controlCreate,[],n)}function MX(n,o,e,t){let i=[De(n),o];return e!==null&&i.push(e),$n(ge.twoWayProperty,i,t)}function SX(n,o,e,t,i){let a=[De(n)];return o instanceof aa?a.push(ih(o,i)):a.push(o),(e!==null||t!==null)&&a.push(e??De(null)),t!==null&&a.push(De(t)),$n(ge.attribute,a,null)}function kX(n,o,e,t){let i=[De(n)];return o instanceof aa?i.push(ih(o,t)):i.push(o),e!==null&&i.push(De(e)),$n(ge.styleProp,i,t)}function PX(n,o,e){return $n(ge.classProp,[De(n),o],e)}function TX(n,o){let e=n instanceof aa?ih(n,o):n;return $n(ge.styleMap,[e],o)}function EX(n,o){let e=n instanceof aa?ih(n,o):n;return $n(ge.classMap,[e],o)}function OX(n,o,e,t,i){return jm(ge.domElement,n,o,e,t,i)}function DX(n,o,e,t,i){return jm(ge.domElementStart,n,o,e,t,i)}function IX(n){return $n(ge.domElementEnd,[],n)}function AX(n,o,e,t){return jm(ge.domElementContainerStart,n,null,o,e,t)}function NX(n,o,e,t){return jm(ge.domElementContainer,n,null,o,e,t)}function FX(){return $n(ge.domElementContainerEnd,[],null)}function RX(n,o,e,t){let i=[De(n),o];return e!==null&&i.push(Ht(e)),$n(ge.domListener,i,t)}function zX(n,o,e,t,i,a,s,d){return EF(ge.domTemplate,n,o,e,t,i,a,s,d)}var G6=[ge.pipeBind1,ge.pipeBind2,ge.pipeBind3,ge.pipeBind4];function LX(n,o,e){if(e.length<1||e.length>G6.length)throw new Error("pipeBind() argument count out of bounds");let t=G6[e.length-1];return Ht(t).callFn([De(n),De(o),...e])}function VX(n,o,e){return Ht(ge.pipeBindV).callFn([De(n),De(o),e])}function BX(n,o,e){let t=OF(n,o);return tY(ZX,[],t,e)}function jX(n,o){return $n(ge.i18nExp,[n],o)}function $X(n,o){return $n(ge.i18nApply,[De(n)],o)}function HX(n,o,e,t){return oT(ge.domProperty,n,o,e,t)}function UX(n,o,e,t){let i=[o];e!==null&&i.push(e);let a=n==="enter"?ge.animationEnter:ge.animationLeave;return $n(a,i,t)}function WX(n,o,e,t){let a=[o instanceof aa?ih(o,t):o];e!==null&&a.push(e);let s=n==="enter"?ge.animationEnter:ge.animationLeave;return $n(s,a,t)}function GX(n,o,e,t){let i=[o],a=n==="enter"?ge.animationEnterListener:ge.animationLeaveListener;return $n(a,i,t)}function qX(n,o,e){return $n(ge.syntheticHostProperty,[De(n),o],e)}function QX(n,o,e){return aT(eY,[De(n),o],e,null)}function KX(n,o){return $n(ge.attachSourceLocations,[De(n),o],null)}function XX(n,o,e){return Ht(ge.arrowFunction).callFn([De(n),o,e])}function OF(n,o){if(n.length<1||o.length!==n.length-1)throw new Error("AssertionError: expected specific shape of args for strings/expressions in interpolation");let e=[];if(o.length===1&&n[0]===""&&n[1]==="")e.push(o[0]);else{let t;for(t=0;t<o.length;t++)e.push(De(n[t]),o[t]);e.push(De(n[t]))}return e}function ih(n,o){let e=OF(n.strings,n.expressions);return aT(JX,[],e,o)}function $n(n,o,e){let t=Ht(n).callFn(o,e);return Js(new fr(t,e))}function YX(n,o,e){let t=[n];return o!==null&&t.push(o),$n(ge.conditional,t,e)}var ZX={constant:[ge.textInterpolate,ge.textInterpolate1,ge.textInterpolate2,ge.textInterpolate3,ge.textInterpolate4,ge.textInterpolate5,ge.textInterpolate6,ge.textInterpolate7,ge.textInterpolate8],variable:ge.textInterpolateV,mapping:n=>{if(n%2===0)throw new Error("Expected odd number of arguments");return(n-1)/2}},JX={constant:[ge.interpolate,ge.interpolate1,ge.interpolate2,ge.interpolate3,ge.interpolate4,ge.interpolate5,ge.interpolate6,ge.interpolate7,ge.interpolate8],variable:ge.interpolateV,mapping:n=>{if(n%2===0)throw new Error("Expected odd number of arguments");return(n-1)/2}},eY={constant:[ge.pureFunction0,ge.pureFunction1,ge.pureFunction2,ge.pureFunction3,ge.pureFunction4,ge.pureFunction5,ge.pureFunction6,ge.pureFunction7,ge.pureFunction8],variable:ge.pureFunctionV,mapping:n=>n};function aT(n,o,e,t){let i=n.mapping(e.length),a=e.at(-1);if(e.length>1&&a instanceof _r&&a.value===""&&e.pop(),i<n.constant.length)return Ht(n.constant[i]).callFn([...o,...e],t);if(n.variable!==null)return Ht(n.variable).callFn([...o,io(e)],t);throw new Error("AssertionError: unable to call variadic function")}function tY(n,o,e,t){return Js(aT(n,o,e,t).toStmt())}var nY=new Map([["window",ge.resolveWindow],["document",ge.resolveDocument],["body",ge.resolveBody]]),iY=new Map([["class","className"],["for","htmlFor"],["formaction","formAction"],["innerHtml","innerHTML"],["readonly","readOnly"],["tabindex","tabIndex"]]);function oY(n){for(let o of n.units)aY(o,o.create),$x(o,o.update)}function aY(n,o){for(let e of o)switch(ra(e,t=>DF(n,t),ai.None),e.kind){case j.Text:Je.replace(e,nX(e.handle.slot,e.initialValue,e.sourceSpan));break;case j.ElementStart:Je.replace(e,n.job.mode===vs.DomOnly?DX(e.handle.slot,e.tag,e.attributes,e.localRefs,e.startSourceSpan):RK(e.handle.slot,e.tag,e.attributes,e.localRefs,e.startSourceSpan));break;case j.Element:Je.replace(e,n.job.mode===vs.DomOnly?OX(e.handle.slot,e.tag,e.attributes,e.localRefs,e.wholeSourceSpan):FK(e.handle.slot,e.tag,e.attributes,e.localRefs,e.wholeSourceSpan));break;case j.ElementEnd:Je.replace(e,n.job.mode===vs.DomOnly?IX(e.sourceSpan):zK(e.sourceSpan));break;case j.ContainerStart:Je.replace(e,n.job.mode===vs.DomOnly?AX(e.handle.slot,e.attributes,e.localRefs,e.startSourceSpan):LK(e.handle.slot,e.attributes,e.localRefs,e.startSourceSpan));break;case j.Container:Je.replace(e,n.job.mode===vs.DomOnly?NX(e.handle.slot,e.attributes,e.localRefs,e.wholeSourceSpan):VK(e.handle.slot,e.attributes,e.localRefs,e.wholeSourceSpan));break;case j.ContainerEnd:Je.replace(e,n.job.mode===vs.DomOnly?FX():BK());break;case j.I18nStart:Je.replace(e,lX(e.handle.slot,e.messageIndex,e.subTemplateIndex,e.sourceSpan));break;case j.I18nEnd:Je.replace(e,vX(e.sourceSpan));break;case j.I18n:Je.replace(e,fX(e.handle.slot,e.messageIndex,e.subTemplateIndex,e.sourceSpan));break;case j.I18nAttributes:if(e.i18nAttributesConfig===null)throw new Error("AssertionError: i18nAttributesConfig was not set");Je.replace(e,CX(e.handle.slot,e.i18nAttributesConfig));break;case j.Template:if(!(n instanceof bl))throw new Error("AssertionError: must be compiling a component");if(Array.isArray(e.localRefs))throw new Error("AssertionError: local refs array should have been extracted into a constant");let t=n.job.views.get(e.xref);Je.replace(e,e.templateKind===ys.Block||n.job.mode===vs.DomOnly?zX(e.handle.slot,di(t.fnName),t.decls,t.vars,e.tag,e.attributes,e.localRefs,e.startSourceSpan):jK(e.handle.slot,di(t.fnName),t.decls,t.vars,e.tag,e.attributes,e.localRefs,e.startSourceSpan));break;case j.DisableBindings:Je.replace(e,$K());break;case j.EnableBindings:Je.replace(e,HK());break;case j.Pipe:Je.replace(e,GK(e.handle.slot,e.name));break;case j.DeclareLet:Je.replace(e,gX(e.handle.slot,e.sourceSpan));break;case j.AnimationString:Je.replace(e,WX(e.animationKind,e.expression,e.sanitizer,e.sourceSpan));break;case j.Animation:let i=ub(n,e.handlerFnName,e.handlerOps,!1);Je.replace(e,UX(e.animationKind,i,e.sanitizer,e.sourceSpan));break;case j.AnimationListener:let a=ub(n,e.handlerFnName,e.handlerOps,e.consumesDollarEvent);Je.replace(e,GX(e.animationKind,a,null,e.sourceSpan));break;case j.Listener:let s=ub(n,e.handlerFnName,e.handlerOps,e.consumesDollarEvent),d=e.eventTarget?nY.get(e.eventTarget):null;if(d===void 0)throw new Error(`Unexpected global target '${e.eventTarget}' defined for '${e.name}' event. Supported list of global targets: window,document,body.`);Je.replace(e,n.job.mode===vs.DomOnly&&!e.hostListener&&!e.isLegacyAnimationListener?RX(e.name,s,d,e.sourceSpan):UK(e.name,s,d,e.hostListener&&e.isLegacyAnimationListener,e.sourceSpan));break;case j.TwoWayListener:Je.replace(e,WK(e.name,ub(n,e.handlerFnName,e.handlerOps,!0),e.sourceSpan));break;case j.Variable:if(e.variable.name===null)throw new Error(`AssertionError: unnamed variable ${e.xref}`);Je.replace(e,Js(new Ga(e.variable.name,e.initializer,void 0,ur.Final)));break;case j.Namespace:switch(e.active){case Oa.HTML:Je.replace(e,qK());break;case Oa.SVG:Je.replace(e,QK());break;case Oa.Math:Je.replace(e,KK());break}break;case j.Defer:let p=!!e.loadingMinimumTime||!!e.loadingAfterTime||!!e.placeholderMinimumTime;Je.replace(e,iX(e.handle.slot,e.mainSlot.slot,e.resolverFn,e.loadingSlot?.slot??null,e.placeholderSlot?.slot??null,e.errorSlot?.slot??null,e.loadingConfig,e.placeholderConfig,p,e.sourceSpan,e.flags));break;case j.DeferOn:let u=[];switch(e.trigger.kind){case lo.Never:case lo.Idle:case lo.Immediate:break;case lo.Timer:u=[De(e.trigger.delay)];break;case lo.Viewport:e.modifier==="hydrate"?u=e.trigger.options?[e.trigger.options]:[]:(u=[De(e.trigger.targetSlot?.slot??null)],e.trigger.targetSlotViewSteps!==0?u.push(De(e.trigger.targetSlotViewSteps)):e.trigger.options&&u.push(De(null)),e.trigger.options&&u.push(e.trigger.options));break;case lo.Interaction:case lo.Hover:e.modifier==="hydrate"?u=[]:(u=[De(e.trigger.targetSlot?.slot??null)],e.trigger.targetSlotViewSteps!==0&&u.push(De(e.trigger.targetSlotViewSteps)));break;default:throw new Error(`AssertionError: Unsupported reification of defer trigger kind ${e.trigger.kind}`)}Je.replace(e,aX(e.trigger.kind,u,e.modifier,e.sourceSpan));break;case j.ProjectionDef:Je.replace(e,rX(e.def));break;case j.Projection:if(e.handle.slot===null)throw new Error("No slot was assigned for project instruction");let g=null,C=null,M=null;if(e.fallbackView!==null){if(!(n instanceof bl))throw new Error("AssertionError: must be compiling a component");let D=n.job.views.get(e.fallbackView);if(D===void 0)throw new Error("AssertionError: projection had fallback view xref, but fallback view was not found");if(D.fnName===null||D.decls===null||D.vars===null)throw new Error("AssertionError: expected projection fallback view to have been named and counted");g=D.fnName,C=D.decls,M=D.vars}Je.replace(e,sX(e.handle.slot,e.projectionSlotIndex,e.attributes,g,C,M,e.sourceSpan));break;case j.ConditionalCreate:if(!(n instanceof bl))throw new Error("AssertionError: must be compiling a component");if(Array.isArray(e.localRefs))throw new Error("AssertionError: local refs array should have been extracted into a constant");let x=n.job.views.get(e.xref);Je.replace(e,cX(e.handle.slot,di(x.fnName),x.decls,x.vars,e.tag,e.attributes,e.localRefs,e.startSourceSpan));break;case j.ConditionalBranchCreate:if(!(n instanceof bl))throw new Error("AssertionError: must be compiling a component");if(Array.isArray(e.localRefs))throw new Error("AssertionError: local refs array should have been extracted into a constant");let b=n.job.views.get(e.xref);Je.replace(e,dX(e.handle.slot,di(b.fnName),b.decls,b.vars,e.tag,e.attributes,e.localRefs,e.startSourceSpan));break;case j.RepeaterCreate:if(e.handle.slot===null)throw new Error("No slot was assigned for repeater instruction");if(!(n instanceof bl))throw new Error("AssertionError: must be compiling a component");let P=n.job.views.get(e.xref);if(P.fnName===null)throw new Error("AssertionError: expected repeater primary view to have been named");let k=null,S=null,O=null;if(e.emptyView!==null){let D=n.job.views.get(e.emptyView);if(D===void 0)throw new Error("AssertionError: repeater had empty view xref, but empty view was not found");if(D.fnName===null||D.decls===null||D.vars===null)throw new Error("AssertionError: expected repeater empty view to have been named and counted");k=D.fnName,S=D.decls,O=D.vars}Je.replace(e,mX(e.handle.slot,P.fnName,e.decls,e.vars,e.tag,e.attributes,lY(n,e),e.usesComponentInstance,k,S,O,e.emptyTag,e.emptyAttributes,e.wholeSourceSpan));break;case j.SourceLocation:let A=io(e.locations.map(({targetSlot:D,offset:F,line:I,column:B})=>{if(D.slot===null)throw new Error("No slot was assigned for source location");return io([De(D.slot),De(F),De(I),De(B)])}));Je.replace(e,KX(e.templatePath,A));break;case j.ControlCreate:Je.replace(e,wX(e.sourceSpan));break;case j.Statement:break;default:throw new Error(`AssertionError: Unsupported reification of create op ${j[e.kind]}`)}}function $x(n,o){for(let e of o)switch(ra(e,t=>DF(n,t),ai.None),e.kind){case j.Advance:Je.replace(e,XK(e.delta,e.sourceSpan));break;case j.Property:Je.replace(e,n.job.mode===vs.DomOnly&&e.bindingKind!==Qt.LegacyAnimation&&e.bindingKind!==Qt.Animation?q6(e):rY(e));break;case j.Control:Je.replace(e,sY(e));break;case j.TwoWayProperty:Je.replace(e,MX(e.name,e.expression,e.sanitizer,e.sourceSpan));break;case j.StyleProp:Je.replace(e,kX(e.name,e.expression,e.unit,e.sourceSpan));break;case j.ClassProp:Je.replace(e,PX(e.name,e.expression,e.sourceSpan));break;case j.StyleMap:Je.replace(e,TX(e.expression,e.sourceSpan));break;case j.ClassMap:Je.replace(e,EX(e.expression,e.sourceSpan));break;case j.I18nExpression:Je.replace(e,jX(e.expression,e.sourceSpan));break;case j.I18nApply:Je.replace(e,$X(e.handle.slot,e.sourceSpan));break;case j.InterpolateText:Je.replace(e,BX(e.interpolation.strings,e.interpolation.expressions,e.sourceSpan));break;case j.Attribute:Je.replace(e,SX(e.name,e.expression,e.sanitizer,e.namespace,e.sourceSpan));break;case j.DomProperty:if(e.expression instanceof aa)throw new Error("not yet handled");e.bindingKind===Qt.LegacyAnimation||e.bindingKind===Qt.Animation?Je.replace(e,qX(e.name,e.expression,e.sourceSpan)):Je.replace(e,q6(e));break;case j.Variable:if(e.variable.name===null)throw new Error(`AssertionError: unnamed variable ${e.xref}`);Je.replace(e,Js(new Ga(e.variable.name,e.initializer,void 0,ur.Final)));break;case j.Conditional:if(e.processed===null)throw new Error("Conditional test was not set.");Je.replace(e,YX(e.processed,e.contextValue,e.sourceSpan));break;case j.Repeater:Je.replace(e,pX(e.collection,e.sourceSpan));break;case j.DeferWhen:Je.replace(e,uX(e.modifier,e.expr,e.sourceSpan));break;case j.StoreLet:throw new Error(`AssertionError: unexpected storeLet ${e.declaredName}`);case j.Statement:break;default:throw new Error(`AssertionError: Unsupported reification of update op ${j[e.kind]}`)}}function q6(n){return HX(iY.get(n.name)??n.name,n.expression,n.sanitizer,n.sourceSpan)}function rY(n){return hF(n.name)?bX(n.name,n.expression,n.sourceSpan):xX(n.name,n.expression,n.sanitizer,n.sourceSpan)}function sY(n){return yX(n.sourceSpan)}function DF(n,o){if(!Gc(o))return o;switch(o.kind){case Jt.NextContext:return ZK(o.steps);case Jt.Reference:return YK(o.targetSlot.slot+1+o.offset);case Jt.LexicalRead:throw new Error(`AssertionError: unresolved LexicalRead of ${o.name}`);case Jt.TwoWayBindingSet:throw new Error("AssertionError: unresolved TwoWayBindingSet");case Jt.RestoreView:if(typeof o.view=="number")throw new Error("AssertionError: unresolved RestoreView");return eX(o.view);case Jt.ResetView:return tX(o.expr);case Jt.GetCurrentView:return JK();case Jt.ReadVariable:if(o.name===null)throw new Error(`Read of unnamed variable ${o.xref}`);return di(o.name);case Jt.ReadTemporaryExpr:if(o.name===null)throw new Error(`Read of unnamed temporary ${o.xref}`);return di(o.name);case Jt.AssignTemporaryExpr:if(o.name===null)throw new Error(`Assign of unnamed temporary ${o.xref}`);return di(o.name).set(o.expr);case Jt.PureFunctionExpr:if(o.fn===null)throw new Error("AssertionError: expected PureFunctions to have been extracted");return QX(o.varOffset,o.fn,o.args);case Jt.PureFunctionParameterExpr:throw new Error("AssertionError: expected PureFunctionParameterExpr to have been extracted");case Jt.PipeBinding:return LX(o.targetSlot.slot,o.varOffset,o.args);case Jt.PipeBindingVariadic:return VX(o.targetSlot.slot,o.varOffset,o.args);case Jt.SlotLiteralExpr:return De(o.slot.slot);case Jt.ContextLetReference:return _X(o.targetSlot.slot);case Jt.StoreLet:return hX(o.value,o.sourceSpan);case Jt.TrackContext:return di("this");case Jt.ArrowFunction:if(o.varOffset===null)throw new Error("AssertionError: variable offset was not assigned to arrow function");return XX(o.varOffset,n.job.pool.getSharedFunctionReference(cY(n,o),"arrowFn"),di(Zs));default:throw new Error(`AssertionError: Unsupported reification of ir.Expression kind: ${Jt[o.kind]}`)}}function ub(n,o,e,t){$x(n,e);let i=[];for(let s of e){if(s.kind!==j.Statement)throw new Error(`AssertionError: expected reified statements, but found op ${j[s.kind]}`);i.push(s.statement)}let a=[];return t&&a.push(new Da("$event",ws)),Em(a,i,void 0,void 0,o)}function lY(n,o){if(o.trackByFn!==null)return o.trackByFn;let e=[new Da("$index",iu),new Da("$item",ws)],t;if(o.trackByOps===null)t=o.usesComponentInstance?Em(e,[new Ia(o.track)]):Ys(e,o.track);else{$x(n,o.trackByOps);let i=[];for(let a of o.trackByOps){if(a.kind!==j.Statement)throw new Error(`AssertionError: expected reified statements, but found op ${j[a.kind]}`);i.push(a.statement)}t=o.usesComponentInstance||i.length!==1||!(i[0]instanceof Ia)?Em(e,i):Ys(e,i[0].value)}return o.trackByFn=n.job.pool.getSharedFunctionReference(t,"_forTrack"),o.trackByFn}function cY(n,o){$x(n,o.ops);let e=[];for(let i of o.ops){if(i.kind!==j.Statement)throw new Error(`AssertionError: expected reified statements, but found op ${j[i.kind]}`);e.push(i.statement)}let t=e.length===1&&e[0]instanceof Ia?e[0].value:e;return Ys([new Da(o.contextName,ws),new Da(o.currentViewName,ws)],Ys(o.parameters,t))}function dY(n){for(let o of n.units)for(let e of o.update)switch(e.kind){case j.Attribute:case j.Binding:case j.ClassProp:case j.ClassMap:case j.Property:case j.StyleProp:case j.StyleMap:e.expression instanceof w0&&Je.remove(e);break}}function mY(n){for(let o of n.units)for(let e of o.create)switch(e.kind){case j.I18nContext:Je.remove(e);break;case j.I18nStart:e.context=null;break}}function pY(n){for(let o of n.units)for(let e of o.update){if(e.kind!==j.Variable||e.variable.kind!==ar.Identifier||!(e.initializer instanceof C0))continue;let t=e.variable.identifier,i=e;for(;i&&i.kind!==j.ListEnd;)ra(i,a=>a instanceof ir&&a.name===t?De(void 0):a,ai.None),i=i.prev}}function uY(n){for(let o of n.units){let e=new Set;for(let t of o.update)t.kind===j.I18nExpression&&e.add(t.i18nOwner);for(let t of o.create)switch(t.kind){case j.I18nAttributes:if(e.has(t.xref))continue;Je.remove(t)}}}function gY(n){for(let o of n.units){for(let e of o.functions)Af(o,e.ops);Af(o,o.create),Af(o,o.update)}}function Af(n,o){let e=new Map;e.set(n.xref,di(Zs));for(let t of o)switch(t.kind){case j.Variable:t.variable.kind===ar.Context&&e.set(t.variable.view,new Ad(t.xref));break;case j.Animation:case j.AnimationListener:case j.Listener:case j.TwoWayListener:Af(n,t.handlerOps);break;case j.RepeaterCreate:t.trackByOps!==null&&Af(n,t.trackByOps);break}n===n.job.root&&e.set(n.xref,di(Zs));for(let t of o)ra(t,i=>{if(i instanceof Fm){if(!e.has(i.view))throw new Error(`No context found for reference to view ${i.view} from view ${n.xref}`);return e.get(i.view)}else return i},ai.None)}function hY(n){for(let o of n.units)for(let e of o.create)if(e.kind===j.Defer){if(e.resolverFn!==null)continue;if(e.ownResolverFn!==null){if(e.handle.slot===null)throw new Error("AssertionError: slot must be assigned before extracting defer deps functions");let t=o.fnName?.replace("_Template","");e.resolverFn=n.pool.getSharedFunctionReference(e.ownResolverFn,`${t}_Defer_${e.handle.slot}_DepsFn`,!1)}}}function _Y(n){for(let o of n.units)Q6(o.create),Q6(o.update)}function Q6(n){for(let o of n)(o.kind===j.Listener||o.kind===j.TwoWayListener||o.kind===j.AnimationListener)&&ra(o,e=>e instanceof ir&&e.name==="$event"?((o.kind===j.Listener||o.kind===j.AnimationListener)&&(o.consumesDollarEvent=!0),new oc(e.name)):e,ai.InChildOperation)}function fY(n){let o=new Map,e=new Map;for(let t of n.units)for(let i of t.create)switch(i.kind){case j.I18nContext:o.set(i.xref,i);break;case j.ElementStart:e.set(i.xref,i);break}Ic(n,n.root,o,e)}function Ic(n,o,e,t,i){let a=null,s=new Map;for(let d of o.create)switch(d.kind){case j.I18nStart:if(!d.context)throw Error("Could not find i18n context for i18n op");a={i18nBlock:d,i18nContext:e.get(d.context)};break;case j.I18nEnd:a=null;break;case j.ElementStart:if(d.i18nPlaceholder!==void 0){if(a===null)throw Error("i18n tag placeholder should only occur inside an i18n block");K6(d,a.i18nContext,a.i18nBlock,i),i&&d.i18nPlaceholder.closeName&&s.set(d.xref,i),i=void 0}break;case j.ElementEnd:let p=t.get(d.xref);if(p&&p.i18nPlaceholder!==void 0){if(a===null)throw Error("AssertionError: i18n tag placeholder should only occur inside an i18n block");X6(p,a.i18nContext,a.i18nBlock,s.get(d.xref)),s.delete(d.xref)}break;case j.Projection:if(d.i18nPlaceholder!==void 0){if(a===null)throw Error("i18n tag placeholder should only occur inside an i18n block");K6(d,a.i18nContext,a.i18nBlock,i),X6(d,a.i18nContext,a.i18nBlock,i),i=void 0}if(d.fallbackView!==null){let M=n.views.get(d.fallbackView);if(d.fallbackViewI18nPlaceholder===void 0)Ic(n,M,e,t);else{if(a===null)throw Error("i18n tag placeholder should only occur inside an i18n block");gb(n,M,d.handle.slot,d.fallbackViewI18nPlaceholder,a.i18nContext,a.i18nBlock,i),Ic(n,M,e,t),hb(n,M,d.handle.slot,d.fallbackViewI18nPlaceholder,a.i18nContext,a.i18nBlock,i),i=void 0}}break;case j.ConditionalCreate:case j.ConditionalBranchCreate:case j.Template:let u=n.views.get(d.xref);if(d.i18nPlaceholder===void 0)Ic(n,u,e,t);else{if(a===null)throw Error("i18n tag placeholder should only occur inside an i18n block");d.templateKind===ys.Structural?Ic(n,u,e,t,d):(gb(n,u,d.handle.slot,d.i18nPlaceholder,a.i18nContext,a.i18nBlock,i),Ic(n,u,e,t),hb(n,u,d.handle.slot,d.i18nPlaceholder,a.i18nContext,a.i18nBlock,i),i=void 0)}break;case j.RepeaterCreate:if(i!==void 0)throw Error("AssertionError: Unexpected structural directive associated with @for block");let g=d.handle.slot+1,C=n.views.get(d.xref);if(d.i18nPlaceholder===void 0)Ic(n,C,e,t);else{if(a===null)throw Error("i18n tag placeholder should only occur inside an i18n block");gb(n,C,g,d.i18nPlaceholder,a.i18nContext,a.i18nBlock,i),Ic(n,C,e,t),hb(n,C,g,d.i18nPlaceholder,a.i18nContext,a.i18nBlock,i),i=void 0}if(d.emptyView!==null){let M=d.handle.slot+2,x=n.views.get(d.emptyView);if(d.emptyI18nPlaceholder===void 0)Ic(n,x,e,t);else{if(a===null)throw Error("i18n tag placeholder should only occur inside an i18n block");gb(n,x,M,d.emptyI18nPlaceholder,a.i18nContext,a.i18nBlock,i),Ic(n,x,e,t),hb(n,x,M,d.emptyI18nPlaceholder,a.i18nContext,a.i18nBlock,i),i=void 0}}break}}function K6(n,o,e,t){let{startName:i,closeName:a}=n.i18nPlaceholder,s=go.ElementTag|go.OpenTag,d=n.handle.slot;t!==void 0&&(s|=go.TemplateTag,d={element:d,template:t.handle.slot}),a||(s|=go.CloseTag),Zg(o.params,i,d,e.subTemplateIndex,s)}function X6(n,o,e,t){let{closeName:i}=n.i18nPlaceholder;if(i){let a=go.ElementTag|go.CloseTag,s=n.handle.slot;t!==void 0&&(a|=go.TemplateTag,s={element:s,template:t.handle.slot}),Zg(o.params,i,s,e.subTemplateIndex,a)}}function gb(n,o,e,t,i,a,s){let{startName:d,closeName:p}=t,u=go.TemplateTag|go.OpenTag;p||(u|=go.CloseTag),s!==void 0&&Zg(i.params,d,s.handle.slot,a.subTemplateIndex,u),Zg(i.params,d,e,IF(n,a,o),u)}function hb(n,o,e,t,i,a,s){let{closeName:d}=t,p=go.TemplateTag|go.CloseTag;d&&(Zg(i.params,d,e,IF(n,a,o),p),s!==void 0&&Zg(i.params,d,s.handle.slot,a.subTemplateIndex,p))}function IF(n,o,e){for(let t of e.create)if(t.kind===j.I18nStart)return t.subTemplateIndex;return o.subTemplateIndex}function Zg(n,o,e,t,i){let a=n.get(o)??[];a.push({value:e,subTemplateIndex:t,flags:i}),n.set(o,a)}function vY(n){let o=new Map,e=new Map,t=new Map;for(let s of n.units)for(let d of s.create)switch(d.kind){case j.I18nStart:o.set(d.xref,d.subTemplateIndex);break;case j.I18nContext:e.set(d.xref,d);break;case j.IcuPlaceholder:t.set(d.xref,d);break}let i=new Map,a=s=>s.usage===th.I18nText?s.i18nOwner:s.context;for(let s of n.units)for(let d of s.update)if(d.kind===j.I18nExpression){let p=i.get(a(d))||0,u=o.get(d.i18nOwner)??null,g={value:p,subTemplateIndex:u,flags:go.ExpressionIndex};CY(d,g,e,t),i.set(a(d),p+1)}}function CY(n,o,e,t){if(n.i18nPlaceholder!==null){let i=e.get(n.context),a=n.resolutionTime===f0.Creation?i.params:i.postprocessingParams,s=a.get(n.i18nPlaceholder)||[];s.push(o),a.set(n.i18nPlaceholder,s)}n.icuPlaceholder!==null&&t.get(n.icuPlaceholder)?.expressionPlaceholders.push(o)}function bY(n){let o=new Map;for(let e of n.units)for(let t of e.ops())if(t.kind===j.ElementStart||t.kind===j.Template){let i=t.tag??"";switch(t.namespace){case Oa.SVG:i=`:${Bx}:${i}`;break;case Oa.Math:i=`:${jx}:${i}`;break}o.set(t.xref,i)}for(let e of n.units)for(let t of e.create)if(t.kind===j.ExtractedAttribute&&t.i18nContext!==null&&t.expression!==null){let i=o.get(t.target)??"",a=t.expression;switch(t.securityContext){case gi.HTML:a=Ht(ge.sanitizeHtml).callFn([a]);break;case gi.STYLE:a=Ht(ge.sanitizeStyle).callFn([a]);break;case gi.SCRIPT:a=Ht(ge.sanitizeScript).callFn([a]);break;case gi.URL:a=Ht(ge.sanitizeUrl).callFn([a]);break;case gi.RESOURCE_URL:a=Ht(ge.sanitizeResourceUrl).callFn([a]);break;case gi.ATTRIBUTE_NO_BINDING:a=Ht(ge.validateAttribute).callFn([a,De(i),De(t.name)]);break}t.expression=a}}function xY(n){for(let o of n.units){for(let e of o.functions)Nf(o,e.ops,null);Nf(o,o.create,null),Nf(o,o.update,null)}}function Nf(n,o,e){let t=new Map,i=new Map;for(let a of o)switch(a.kind){case j.Variable:switch(a.variable.kind){case ar.Identifier:if(a.variable.local){if(i.has(a.variable.identifier))continue;i.set(a.variable.identifier,a.xref)}else if(t.has(a.variable.identifier))continue;t.set(a.variable.identifier,a.xref);break;case ar.Alias:if(t.has(a.variable.identifier))continue;t.set(a.variable.identifier,a.xref);break;case ar.SavedView:e={view:a.variable.view,variable:a.xref};break}break;case j.Animation:case j.AnimationListener:case j.Listener:case j.TwoWayListener:Nf(n,a.handlerOps,e);break;case j.RepeaterCreate:a.trackByOps!==null&&Nf(n,a.trackByOps,e);break}for(let a of o)a.kind===j.Listener||a.kind===j.TwoWayListener||a.kind===j.Animation||a.kind===j.AnimationListener||ra(a,s=>{if(s instanceof ir)return i.has(s.name)?new Ad(i.get(s.name)):t.has(s.name)?new Ad(t.get(s.name)):new Xs(new Fm(n.job.root.xref),s.name);if(s instanceof x0&&typeof s.view=="number"){if(e===null||e.view!==s.view)throw new Error(`AssertionError: no saved view ${s.view} from view ${n.xref}`);return s.view=new Ad(e.variable),s}else return s},ai.None);for(let a of o)wa(a,s=>{if(s instanceof ir)throw new Error(`AssertionError: no lexical reads should remain, but found read of ${s.name}`)})}var yY=new Map([[gi.HTML,ge.sanitizeHtml],[gi.RESOURCE_URL,ge.sanitizeResourceUrl],[gi.SCRIPT,ge.sanitizeScript],[gi.STYLE,ge.sanitizeStyle],[gi.URL,ge.sanitizeUrl],[gi.ATTRIBUTE_NO_BINDING,ge.validateAttribute]]),wY=new Map([[gi.HTML,ge.trustConstantHtml],[gi.RESOURCE_URL,ge.trustConstantResourceUrl]]);function MY(n){for(let o of n.units){if(n.kind!==Dt.Host){for(let e of o.create)if(e.kind===j.ExtractedAttribute){let t=wY.get(Y6(e.securityContext))??null;e.trustedValueFn=t!==null?Ht(t):null}}for(let e of o.update)switch(e.kind){case j.Property:case j.Attribute:case j.DomProperty:case j.TwoWayProperty:let t=null;Array.isArray(e.securityContext)&&SY(e.securityContext)?t=ge.sanitizeUrlOrResourceUrl:t=yY.get(Y6(e.securityContext))??null,e.sanitizer=t!==null?Ht(t):null;break}}}function SY(n){let o=!1,e=!1,t=!1;for(let i of n)switch(i){case gi.URL:o=!0;break;case gi.RESOURCE_URL:e=!0;break;case gi.NONE:t=!0;break;default:return!1}return(o||e)&&t||o&&e}function Y6(n){if(!Array.isArray(n))return n;if(n.length<2)return n[0]??gi.NONE;let o=n.filter(e=>e!==gi.NONE);if(o.length>1)throw Error("AssertionError: Ambiguous security context");return o[0]??gi.NONE}function kY(n){for(let o of n.units){for(let e of o.functions)Z6(n,o,e.ops)&&J6(o,e.ops,di(e.currentViewName));o.create.prepend([Mm(o.job.allocateXrefId(),{kind:ar.SavedView,name:null,view:o.xref},new KP,vl.None)]);for(let e of o.create)(e.kind===j.Listener||e.kind===j.TwoWayListener||e.kind===j.Animation||e.kind===j.AnimationListener)&&Z6(n,o,e.handlerOps)&&J6(o,e.handlerOps,o.xref)}}function Z6(n,o,e){let t=o!==n.root;if(!t)for(let i of e)wa(i,a=>{(a instanceof lx||a instanceof b0)&&(t=!0)});return t}function J6(n,o,e){o.prepend([Mm(n.job.allocateXrefId(),{kind:ar.Context,name:null,view:n.xref},new x0(e),vl.None)]);for(let t of o)t.kind===j.Statement&&t.statement instanceof Ia&&(t.statement.value=new dx(t.statement.value))}function PY(n){let o=new Map;for(let e of n.units){let t=0;for(let i of e.create)nh(i)&&(i.handle.slot=t,o.set(i.xref,i.handle.slot),t+=i.numSlotsUsed);e.decls=t}for(let e of n.units)for(let t of e.ops())if(t.kind===j.Template||t.kind===j.ConditionalCreate||t.kind===j.ConditionalBranchCreate||t.kind===j.RepeaterCreate){let i=n.views.get(t.xref);t.decls=i.decls}}function TY(n){let o=new Set,e=new Map;for(let t of n.units)for(let i of t.ops())i.kind===j.DeclareLet&&e.set(i.xref,i),wa(i,a=>{a instanceof b0&&o.add(a.target)});for(let t of n.units)for(let i of t.update)ra(i,a=>a instanceof C0&&!o.has(a.target)?(EY(a)||Je.remove(e.get(a.target)),a.value):a,ai.None)}function EY(n){let o=!1;return Bt(n,e=>((e instanceof hu||e instanceof y0)&&(o=!0),e),ai.None),o}function OY(n){let o=new Set;for(let e of n.units)for(let t of e.ops())wa(t,i=>{if(i instanceof Pi)switch(i.operator){case lt.Exponentiation:DY(i,o);break;case lt.NullishCoalesce:IY(i,o);break;case lt.And:case lt.Or:AY(i,o)}});for(let e of n.units)for(let t of e.ops())ra(t,i=>i instanceof ac?o.has(i)?i:i.expr:i,ai.None)}function DY(n,o){n.lhs instanceof ac&&n.lhs.expr instanceof au&&o.add(n.lhs)}function IY(n,o){n.lhs instanceof ac&&(eN(n.lhs.expr)||n.lhs.expr instanceof jc)&&o.add(n.lhs),n.rhs instanceof ac&&(eN(n.rhs.expr)||n.rhs.expr instanceof jc)&&o.add(n.rhs)}function AY(n,o){n.lhs instanceof ac&&n.lhs.expr instanceof Pi&&n.lhs.expr.operator===lt.NullishCoalesce&&o.add(n.lhs)}function eN(n){return n instanceof Pi&&(n.operator===lt.And||n.operator===lt.Or)}function NY(n){for(let o of n.units)for(let e of o.update)if(e.kind===j.Binding)switch(e.bindingKind){case Qt.ClassName:if(e.expression instanceof aa)throw new Error("Unexpected interpolation in ClassName binding");Je.replace(e,tG(e.target,e.name,e.expression,e.sourceSpan));break;case Qt.StyleProperty:Je.replace(e,eG(e.target,e.name,e.expression,e.unit,e.sourceSpan));break;case Qt.Property:case Qt.Template:e.name==="style"?Je.replace(e,nG(e.target,e.expression,e.sourceSpan)):e.name==="class"&&Je.replace(e,iG(e.target,e.expression,e.sourceSpan));break}}function FY(n){for(let o of n.units){o.create.prepend(Ff(o.create)),o.update.prepend(Ff(o.update));for(let e of o.functions)e.ops.prepend(Ff(e.ops))}}function Ff(n){let o=0,e=[];for(let t of n){let i=new Map;wa(t,(u,g)=>{g&ai.InChildOperation||u instanceof zm&&i.set(u.xref,u)});let a=0,s=new Set,d=new Set,p=new Map;wa(t,(u,g)=>{g&ai.InChildOperation||(u instanceof qc?(s.has(u.xref)||(s.add(u.xref),p.set(u.xref,`tmp_${o}_${a++}`)),tN(p,u)):u instanceof zm&&(i.get(u.xref)===u&&(d.add(u.xref),a--),tN(p,u)))}),e.push(...Array.from(new Set(p.values())).map(u=>Js(new Ga(u)))),o++,t.kind===j.Listener||t.kind===j.Animation||t.kind===j.AnimationListener||t.kind===j.TwoWayListener?t.handlerOps.prepend(Ff(t.handlerOps)):t.kind===j.RepeaterCreate&&t.trackByOps!==null&&t.trackByOps.prepend(Ff(t.trackByOps))}return e}function tN(n,o){let e=n.get(o.xref);if(e===void 0)throw new Error(`Found xref with unassigned name: ${o.xref}`);o.name=e}function RY(n){for(let o of n.units)for(let e of o.create)if(e.kind===j.RepeaterCreate)if(e.track instanceof oc&&e.track.name==="$index")e.trackByFn=Ht(ge.repeaterTrackByIndex);else if(e.track instanceof oc&&e.track.name==="$item")e.trackByFn=Ht(ge.repeaterTrackByIdentity);else if(zY(n.root.xref,e.track))e.usesComponentInstance=!0,e.track.receiver.receiver.view===o.xref?e.trackByFn=e.track.receiver:(e.trackByFn=Ht(ge.componentInstance).callFn([]).prop(e.track.receiver.name),e.track=e.trackByFn);else{e.track=Bt(e.track,i=>{if(i instanceof hu||i instanceof y0)throw new Error("Illegal State: Pipes are not allowed in this context");return i instanceof Fm?(e.usesComponentInstance=!0,new QP(i.view)):i},ai.None);let t=new Je;t.push(Js(new Ia(e.track,e.track.sourceSpan))),e.trackByOps=t}}function zY(n,o){if(!(o instanceof Ms)||o.args.length===0||o.args.length>2||!(o.receiver instanceof Xs&&o.receiver.receiver instanceof Fm)||o.receiver.receiver.view!==n)return!1;let[e,t]=o.args;return!(e instanceof oc)||e.name!=="$index"?!1:o.args.length===1?!0:!(!(t instanceof oc)||t.name!=="$item")}function LY(n){for(let o of n.units)for(let e of o.create)e.kind===j.RepeaterCreate&&(e.track=Bt(e.track,t=>{if(t instanceof ir){if(e.varNames.$index.has(t.name))return di("$index");if(t.name===e.varNames.$implicit)return di("$item")}return t},ai.None))}function VY(n){for(let o of n.units)for(let e of o.create)e.kind===j.TwoWayListener&&ra(e,t=>{if(!(t instanceof mx))return t;let{target:i,value:a}=t;if(i instanceof Xs||i instanceof Fd)return W6(i,a).or(i.set(a));if(i instanceof Ad)return W6(i,a);throw new Error("Unsupported expression in two-way action binding.")},ai.InChildOperation)}function BY(n){for(let o of n.units){let e=0;for(let a of o.ops())Xk(a)&&(e+=jY(a));let t=a=>{Gc(a)&&(a instanceof gu||(l6(a)&&(a.varOffset=e),Xk(a)&&(e+=nN(a))))},i=a=>{!Gc(a)||!(a instanceof gu)||(l6(a)&&(a.varOffset=e),Xk(a)&&(e+=nN(a)))};for(let a of o.create)wa(a,t);for(let a of o.update)wa(a,t);for(let a of o.create)wa(a,i);for(let a of o.update)wa(a,i);o.vars=e}if(n instanceof S0)for(let o of n.units)for(let e of o.create){if(e.kind!==j.Template&&e.kind!==j.RepeaterCreate&&e.kind!==j.ConditionalCreate&&e.kind!==j.ConditionalBranchCreate)continue;let t=n.views.get(e.xref);e.vars=t.vars}}function jY(n){let o;switch(n.kind){case j.Attribute:return o=1,n.expression instanceof aa&&!$Y(n.expression)&&(o+=n.expression.expressions.length),o;case j.Property:case j.DomProperty:return o=1,n.expression instanceof aa&&(o+=n.expression.expressions.length),o;case j.Control:return 2;case j.TwoWayProperty:return 1;case j.StyleProp:case j.ClassProp:case j.StyleMap:case j.ClassMap:return o=2,n.expression instanceof aa&&(o+=n.expression.expressions.length),o;case j.InterpolateText:return n.interpolation.expressions.length;case j.I18nExpression:case j.Conditional:case j.DeferWhen:case j.StoreLet:return 1;case j.RepeaterCreate:return n.emptyView?1:0;default:throw new Error(`Unhandled op: ${j[n.kind]}`)}}function nN(n){switch(n.kind){case Jt.PureFunctionExpr:return 1+n.args.length;case Jt.PipeBinding:return 1+n.args.length;case Jt.PipeBindingVariadic:return 1+n.numArgs;case Jt.StoreLet:case Jt.ArrowFunction:return 1;default:throw new Error(`AssertionError: unhandled ConsumesVarsTrait expression ${n.constructor.name}`)}}function $Y(n){return!(n.expressions.length!==1||n.strings.length!==2||n.strings[0]!==""||n.strings[1]!=="")}function HY(n){for(let o of n.units){for(let e of o.functions)Cf(e.ops);Cf(o.create),Cf(o.update);for(let e of o.create)e.kind===j.Listener||e.kind===j.Animation||e.kind===j.AnimationListener||e.kind===j.TwoWayListener?Cf(e.handlerOps):e.kind===j.RepeaterCreate&&e.trackByOps!==null&&Cf(e.trackByOps);for(let e of o.functions)bf(e.ops,null),iN(e.ops);for(let e of o.create)e.kind===j.Listener||e.kind===j.Animation||e.kind===j.AnimationListener||e.kind===j.TwoWayListener?(bf(e.handlerOps,_b),iN(e.handlerOps)):e.kind===j.RepeaterCreate&&e.trackByOps!==null&&bf(e.trackByOps,_b);bf(o.create,_b),bf(o.update,_b)}}var Wa=(function(n){return n[n.None=0]="None",n[n.ViewContextRead=1]="ViewContextRead",n[n.ViewContextWrite=2]="ViewContextWrite",n[n.SideEffectful=4]="SideEffectful",n})(Wa||{});function _b(n){return!(n&ai.InArrowFunctionOperation)}function Cf(n){let o=new Map;for(let e of n)e.kind===j.Variable&&e.flags&vl.AlwaysInline&&(wa(e,t=>{if(Gc(t)&&rT(t)!==Wa.None)throw new Error("AssertionError: A context-sensitive variable was marked AlwaysInline")}),o.set(e.xref,e)),ra(e,t=>t instanceof Ad&&o.has(t.xref)?o.get(t.xref).initializer.clone():t,ai.None);for(let e of o.values())Je.remove(e)}function bf(n,o){let e=new Map,t=new Map,i=new Set,a=new Map;for(let u of n){if(u.kind===j.Variable){if(e.has(u.xref)||t.has(u.xref))throw new Error(`Should not see two declarations of the same variable: ${u.xref}`);e.set(u.xref,u),t.set(u.xref,0)}a.set(u,UY(u,o)),WY(u,t,i,o)}let s=!1;for(let u of n.reversed()){let g=a.get(u);if(u.kind===j.Variable&&t.get(u.xref)===0){if(s&&g.fences&Wa.ViewContextWrite||g.fences&Wa.SideEffectful){let C=Js(u.initializer.toStmt());a.set(C,g),Je.replace(u,C)}else GY(u,t),Je.remove(u);a.delete(u),e.delete(u.xref),t.delete(u.xref);continue}g.fences&Wa.ViewContextRead&&(s=!0)}let d=[];for(let[u,g]of t){let M=!!(e.get(u).flags&vl.AlwaysInline);g!==1||M||i.has(u)||d.push(u)}let p;for(;p=d.pop();){let u=e.get(p),g=a.get(u);if(!!(u.flags&vl.AlwaysInline))throw new Error("AssertionError: Found an 'AlwaysInline' variable after the always inlining pass.");for(let M=u.next;M.kind!==j.ListEnd;M=M.next){let x=a.get(M);if(x.variablesUsed.has(p)){if(!QY(u,M))break;if(qY(p,u.initializer,M,g.fences)){x.variablesUsed.delete(p);for(let b of g.variablesUsed)x.variablesUsed.add(b);x.fences|=g.fences,e.delete(p),t.delete(p),a.delete(u),Je.remove(u)}break}if(!AF(x.fences,g.fences))break}}}function rT(n){switch(n.kind){case Jt.NextContext:return Wa.ViewContextRead|Wa.ViewContextWrite;case Jt.RestoreView:return Wa.ViewContextRead|Wa.ViewContextWrite|Wa.SideEffectful;case Jt.StoreLet:return Wa.SideEffectful;case Jt.Reference:case Jt.ContextLetReference:return Wa.ViewContextRead;default:return Wa.None}}function UY(n,o){let e=Wa.None,t=new Set;return wa(n,(i,a)=>{!Gc(i)||o!==null&&!o(a)||(i.kind===Jt.ReadVariable?t.add(i.xref):e|=rT(i))}),{fences:e,variablesUsed:t}}function WY(n,o,e,t){wa(n,(i,a)=>{if(!Gc(i)||t!==null&&!t(a)||i.kind!==Jt.ReadVariable)return;let s=o.get(i.xref);s!==void 0&&(o.set(i.xref,s+1),a&ai.InChildOperation&&e.add(i.xref))})}function GY(n,o){wa(n,e=>{if(!Gc(e)||e.kind!==Jt.ReadVariable)return;let t=o.get(e.xref);if(t!==void 0){if(t===0)throw new Error(`Inaccurate variable count: ${e.xref} - found another read but count is already 0`);o.set(e.xref,t-1)}})}function AF(n,o){if(n&Wa.ViewContextWrite){if(o&Wa.ViewContextRead)return!1}else if(n&Wa.ViewContextRead&&o&Wa.ViewContextWrite)return!1;return!0}function qY(n,o,e,t){let i=!1,a=!0;return ra(e,(s,d)=>{if(!Gc(s)||i||!a)return s;if(d&ai.InChildOperation&&t&Wa.ViewContextRead)return s;switch(s.kind){case Jt.ReadVariable:if(s.xref===n)return i=!0,o;break;default:let p=rT(s);a=a&&AF(p,t);break}return s},ai.None),i}function QY(n,o){switch(n.variable.kind){case ar.Identifier:return n.initializer instanceof oc&&n.initializer.name===Zs;case ar.Context:return o.kind===j.Variable;default:return!0}}function iN(n){let o=n.head.next,e=n.tail.prev;o!==null&&e!==null&&o.next===e&&o.kind===j.Statement&&o.statement instanceof fr&&o.statement.expr instanceof x0&&e.kind===j.Statement&&e.statement instanceof Ia&&e.statement.value instanceof dx&&(Je.remove(o),e.statement.value=e.statement.value.expr)}function KY(n){for(let o of n.units){let e=null,t=null;for(let i of o.create)switch(i.kind){case j.I18nStart:e=i;break;case j.I18nEnd:e=null;break;case j.IcuStart:e===null&&(t=n.allocateXrefId(),Je.insertBefore(Lx(t,i.message,void 0,null),i));break;case j.IcuEnd:t!==null&&(Je.insertAfter(Vx(t,null),i),t=null);break}}}function XY(n){for(let o of n.units){for(let e of o.create)e.kind!==j.Animation&&e.kind!==j.AnimationListener&&e.kind!==j.Listener&&e.kind!==j.TwoWayListener&&oN(o,e);for(let e of o.update)oN(o,e)}}function oN(n,o){ra(o,(e,t)=>{if(!(e instanceof vu)||t&ai.InChildOperation)return e;if(Array.isArray(e.body))throw new Error("AssertionError: unexpected multi-line arrow function");let i=new XP(e.params,e.body);return n.functions.add(i),i},ai.None)}var YY=new Set(["formField"]);function ZY(n){for(let o of n.units)JY(o)}function JY(n){for(let o of n.update)o.kind===j.Property&&YY.has(o.name)&&iZ(n,o)}var eZ=new Set([j.Container,j.ContainerStart,j.ContainerEnd,j.Element,j.ElementStart,j.ElementEnd,j.Template]);function tZ(n){return eZ.has(n.kind)}function nZ(n,o){let e=null;for(let t of n.create)!tZ(t)||t.xref!==o||(e=t);return e}function iZ(n,o){let e=nZ(n,o.target);if(e===null)throw new Error(`No create instruction found for control target ${o.target}`);let t=EG(o.sourceSpan);Je.insertAfter(t,e),Je.insertAfter(cG(o.target,o.sourceSpan),o)}var oZ=[{kind:Dt.Tmpl,fn:xK},{kind:Dt.Both,fn:NK},{kind:Dt.Host,fn:Aq},{kind:Dt.Tmpl,fn:oK},{kind:Dt.Tmpl,fn:TK},{kind:Dt.Tmpl,fn:KY},{kind:Dt.Both,fn:tq},{kind:Dt.Both,fn:NY},{kind:Dt.Both,fn:BG},{kind:Dt.Tmpl,fn:ZY},{kind:Dt.Both,fn:YG},{kind:Dt.Both,fn:zG},{kind:Dt.Tmpl,fn:eq},{kind:Dt.Both,fn:rK},{kind:Dt.Tmpl,fn:dY},{kind:Dt.Both,fn:HG},{kind:Dt.Both,fn:bK},{kind:Dt.Tmpl,fn:UG},{kind:Dt.Tmpl,fn:MK},{kind:Dt.Tmpl,fn:nq},{kind:Dt.Tmpl,fn:PK},{kind:Dt.Both,fn:XY},{kind:Dt.Both,fn:DK},{kind:Dt.Tmpl,fn:Eq},{kind:Dt.Tmpl,fn:Tq},{kind:Dt.Tmpl,fn:Oq},{kind:Dt.Tmpl,fn:kY},{kind:Dt.Both,fn:DG},{kind:Dt.Both,fn:_Y},{kind:Dt.Tmpl,fn:LY},{kind:Dt.Tmpl,fn:pY},{kind:Dt.Both,fn:xY},{kind:Dt.Tmpl,fn:iq},{kind:Dt.Tmpl,fn:VY},{kind:Dt.Tmpl,fn:RY},{kind:Dt.Both,fn:gY},{kind:Dt.Both,fn:MY},{kind:Dt.Tmpl,fn:nK},{kind:Dt.Both,fn:lq},{kind:Dt.Both,fn:OY},{kind:Dt.Both,fn:FY},{kind:Dt.Both,fn:HY},{kind:Dt.Both,fn:TY},{kind:Dt.Tmpl,fn:tK},{kind:Dt.Tmpl,fn:JG},{kind:Dt.Tmpl,fn:uY},{kind:Dt.Tmpl,fn:FG},{kind:Dt.Tmpl,fn:AG},{kind:Dt.Tmpl,fn:PY},{kind:Dt.Tmpl,fn:fY},{kind:Dt.Tmpl,fn:vY},{kind:Dt.Tmpl,fn:wq},{kind:Dt.Tmpl,fn:XQ},{kind:Dt.Tmpl,fn:bY},{kind:Dt.Tmpl,fn:Dq},{kind:Dt.Both,fn:QG},{kind:Dt.Tmpl,fn:mY},{kind:Dt.Both,fn:BY},{kind:Dt.Tmpl,fn:Pq},{kind:Dt.Both,fn:sK},{kind:Dt.Tmpl,fn:hY},{kind:Dt.Tmpl,fn:dK},{kind:Dt.Tmpl,fn:pK},{kind:Dt.Tmpl,fn:sq},{kind:Dt.Tmpl,fn:RG},{kind:Dt.Tmpl,fn:gK},{kind:Dt.Both,fn:OK},{kind:Dt.Both,fn:oY},{kind:Dt.Both,fn:$G}];function NF(n,o){for(let e of oZ)(e.kind===o||e.kind===Dt.Both)&&e.fn(n)}function aZ(n,o){let e=RF(n.root);return FF(n.root,o),e}function FF(n,o){for(let e of n.job.units){if(e.parent!==n.xref)continue;FF(e,o);let t=RF(e);o.statements.push(t.toDeclStmt(t.name))}}function RF(n){if(n.fnName===null)throw new Error(`AssertionError: view ${n.xref} is unnamed`);let o=[];for(let a of n.create){if(a.kind!==j.Statement)throw new Error(`AssertionError: expected all create ops to have been compiled, but got ${j[a.kind]}`);o.push(a.statement)}let e=[];for(let a of n.update){if(a.kind!==j.Statement)throw new Error(`AssertionError: expected all update ops to have been compiled, but got ${j[a.kind]}`);e.push(a.statement)}let t=Px(1,o),i=Px(2,e);return Em([new Da(Jg,iu),new Da(Zs,ws)],[...t,...i],void 0,void 0,n.fnName)}function Px(n,o){return o.length===0?[]:[Nx(new Pi(lt.BitwiseAnd,di(Jg),De(n)),o)]}function rZ(n){if(n.root.fnName===null)throw new Error("AssertionError: host binding function is unnamed");let o=[];for(let a of n.root.create){if(a.kind!==j.Statement)throw new Error(`AssertionError: expected all create ops to have been compiled, but got ${j[a.kind]}`);o.push(a.statement)}let e=[];for(let a of n.root.update){if(a.kind!==j.Statement)throw new Error(`AssertionError: expected all update ops to have been compiled, but got ${j[a.kind]}`);e.push(a.statement)}if(o.length===0&&e.length===0)return null;let t=Px(1,o),i=Px(2,e);return Em([new Da(Jg,iu),new Da(Zs,ws)],[...t,...i],void 0,void 0,n.root.fnName)}var fb=".",sZ="attr",nP="animate",lZ="class",cZ="style",dZ="*",iP="animate-",y3=class{_exprParser;_schemaRegistry;errors;constructor(o,e,t){this._exprParser=o,this._schemaRegistry=e,this.errors=t}createBoundHostProperties(o,e){let t=[];for(let i of Object.keys(o)){let a=o[i];typeof a=="string"?this.parsePropertyBinding(i,a,!0,!1,e,e.start.offset,void 0,[],t,e):this._reportError(`Value of the host property binding "${i}" needs to be a string representing an expression but got "${a}" (${typeof a})`,e)}return t}createDirectiveHostEventAsts(o,e){let t=[];for(let i of Object.keys(o)){let a=o[i];typeof a=="string"?this.parseEvent(i,a,!1,e,e,[],t,e):this._reportError(`Value of the host listener "${i}" needs to be a string representing an expression but got "${a}" (${typeof a})`,e)}return t}parseInterpolation(o,e,t){let i=e.fullStart.offset;try{let a=this._exprParser.parseInterpolation(o,e,i,t);return a&&this.errors.push(...a.errors),a}catch(a){return this._reportError(`${a}`,e),this._exprParser.wrapLiteralPrimitive("ERROR",e,i)}}parseInterpolationExpression(o,e){let t=e.start.offset;try{let i=this._exprParser.parseInterpolationExpression(o,e,t);return i&&this.errors.push(...i.errors),i}catch(i){return this._reportError(`${i}`,e),this._exprParser.wrapLiteralPrimitive("ERROR",e,t)}}parseInlineTemplateBinding(o,e,t,i,a,s,d,p){let u=t.start.offset+dZ.length,g=this._parseTemplateBindings(o,e,t,u,i);for(let C of g){let M=Cm(t,C.sourceSpan),x=C.key.source,b=Cm(t,C.key.span);if(C instanceof n0){let P=C.value?C.value.source:"$implicit",k=C.value?Cm(t,C.value.span):void 0;d.push(new SP(x,P,M,b,k))}else if(C.value){let P=p?M:t,k=Cm(t,C.value.ast.sourceSpan);this._parsePropertyAst(x,C.value,!1,P,b,k,a,s)}else a.push([x,""]),this.parseLiteralAttr(x,null,b,i,void 0,a,s,b)}}_parseTemplateBindings(o,e,t,i,a){try{let s=this._exprParser.parseTemplateBindings(o,e,t,i,a);return s.errors.forEach(d=>this.errors.push(d)),s.warnings.forEach(d=>{this._reportError(d,t,Sm.WARNING)}),s.templateBindings}catch(s){return this._reportError(`${s}`,t),[]}}parseLiteralAttr(o,e,t,i,a,s,d,p){oP(o)?(o=o.substring(1),p!==void 0&&(p=Cm(p,new qs(p.start.offset+1,p.end.offset))),e&&this._reportError('Assigning animation triggers via @prop="exp" attributes with an expression is invalid. Use property bindings (e.g. [@prop]="exp") or use an attribute without a value (e.g. @prop) instead.',t,Sm.ERROR),this._parseLegacyAnimation(o,e,t,i,p,a,s,d)):d.push(new Sg(o,this._exprParser.wrapLiteralPrimitive(e,"",i),Ac.LITERAL_ATTR,t,p,a))}parsePropertyBinding(o,e,t,i,a,s,d,p,u,g){o.length===0&&this._reportError("Property name is missing in binding",a);let C=!1;o.startsWith(iP)?(C=!0,o=o.substring(iP.length),g!==void 0&&(g=Cm(g,new qs(g.start.offset+iP.length,g.end.offset)))):oP(o)&&(C=!0,o=o.substring(1),g!==void 0&&(g=Cm(g,new qs(g.start.offset+1,g.end.offset)))),C?this._parseLegacyAnimation(o,e,a,s,g,d,p,u):o.startsWith(`${nP}${fb}`)?this._parseAnimation(o,this.parseBinding(e,t,d||a,s),a,g,d,p,u):this._parsePropertyAst(o,this.parseBinding(e,t,d||a,s),i,a,g,d,p,u)}parsePropertyInterpolation(o,e,t,i,a,s,d,p){let u=this.parseInterpolation(e,i||t,p);return u?(this._parsePropertyAst(o,u,!1,t,d,i,a,s),!0):!1}_parsePropertyAst(o,e,t,i,a,s,d,p){d.push([o,e.source]),p.push(new Sg(o,e,t?Ac.TWO_WAY:Ac.DEFAULT,i,a,s))}_parseAnimation(o,e,t,i,a,s,d){s.push([o,e.source]),d.push(new Sg(o,e,Ac.ANIMATION,t,i,a))}_parseLegacyAnimation(o,e,t,i,a,s,d,p){o.length===0&&this._reportError("Animation trigger is missing",t);let u=this.parseBinding(e||"undefined",!1,s||t,i);d.push([o,u.source]),p.push(new Sg(o,u,Ac.LEGACY_ANIMATION,t,a,s))}parseBinding(o,e,t,i){try{let a=e?this._exprParser.parseSimpleBinding(o,t,i):this._exprParser.parseBinding(o,t,i);return a&&this.errors.push(...a.errors),a}catch(a){return this._reportError(`${a}`,t),this._exprParser.wrapLiteralPrimitive("ERROR",t,i)}}createBoundElementProperty(o,e,t=!1,i=!0){if(e.isLegacyAnimation)return new Qb(e.name,Fi.LegacyAnimation,gi.NONE,e.expression,null,e.sourceSpan,e.keySpan,e.valueSpan);let a=null,s,d=null,p=e.name.split(fb),u;if(p.length>1)if(p[0]==sZ){d=p.slice(1).join(fb),t||this._validatePropertyOrAttributeName(d,e.sourceSpan,!0),u=Mb(this._schemaRegistry,o,d,!0);let g=d.indexOf(":");if(g>-1){let C=d.substring(0,g),M=d.substring(g+1);d=wb(C,M)}s=Fi.Attribute}else p[0]==lZ?(d=p[1],s=Fi.Class,u=[gi.NONE]):p[0]==cZ?(a=p.length>2?p[2]:null,d=p[1],s=Fi.Style,u=[gi.STYLE]):p[0]==nP&&(d=e.name,s=Fi.Animation,u=[gi.NONE]);if(d===null){let g=this._schemaRegistry.getMappedPropName(e.name);d=i?g:e.name,u=Mb(this._schemaRegistry,o,g,!1),s=e.type===Ac.TWO_WAY?Fi.TwoWay:Fi.Property,t||this._validatePropertyOrAttributeName(g,e.sourceSpan,!1)}return new Qb(d,s,u[0],e.expression,a,e.sourceSpan,e.keySpan,e.valueSpan)}parseEvent(o,e,t,i,a,s,d,p){o.length===0&&this._reportError("Event name is missing in binding",i),oP(o)?(o=o.slice(1),p!==void 0&&(p=Cm(p,new qs(p.start.offset+1,p.end.offset))),this._parseLegacyAnimationEvent(o,e,i,a,d,p)):this._parseRegularEvent(o,e,t,i,a,s,d,p)}calcPossibleSecurityContexts(o,e,t){let i=this._schemaRegistry.getMappedPropName(e);return Mb(this._schemaRegistry,o,i,t)}parseEventListenerName(o){let[e,t]=CU(o,[null,o]);return{eventName:t,target:e}}parseLegacyAnimationEventName(o){let e=bU(o,[o,null]);return{eventName:e[0],phase:e[1]===null?null:e[1].toLowerCase()}}_parseLegacyAnimationEvent(o,e,t,i,a,s){let{eventName:d,phase:p}=this.parseLegacyAnimationEventName(o),u=this._parseAction(e,i);a.push(new qb(d,p,is.LegacyAnimation,u,t,i,s)),d.length===0&&this._reportError("Animation event name is missing in binding",t),p?p!=="start"&&p!=="done"&&this._reportError(`The provided animation output phase value "${p}" for "@${d}" is not supported (use start or done)`,t):this._reportError(`The animation trigger output event (@${d}) is missing its phase value name (start or done are currently supported)`,t)}_parseRegularEvent(o,e,t,i,a,s,d,p){let{eventName:u,target:g}=this.parseEventListenerName(o),C=this.errors.length,M=this._parseAction(e,a),x=this.errors.length===C;s.push([o,M.source]),t&&x&&!this._isAllowedAssignmentEvent(M)&&this._reportError("Unsupported expression in a two-way binding",i);let b=is.Regular;t&&(b=is.TwoWay),o.startsWith(`${nP}${fb}`)&&(b=is.Animation),d.push(new qb(u,g,b,M,i,a,p))}_parseAction(o,e){let t=e&&e.start?e.start.offset:0;try{let i=this._exprParser.parseAction(o,e,t);return i&&this.errors.push(...i.errors),!i||i.ast instanceof Ar?(this._reportError("Empty expressions are not allowed",e),this._exprParser.wrapLiteralPrimitive("ERROR",e,t)):i}catch(i){return this._reportError(`${i}`,e),this._exprParser.wrapLiteralPrimitive("ERROR",e,t)}}_reportError(o,e,t=Sm.ERROR){this.errors.push(new dn(e,o,t))}_validatePropertyOrAttributeName(o,e,t){let i=t?this._schemaRegistry.validateAttribute(o):this._schemaRegistry.validateProperty(o);i.error&&this._reportError(i.msg,e,Sm.ERROR)}_isAllowedAssignmentEvent(o){return o instanceof xs?this._isAllowedAssignmentEvent(o.ast):o instanceof Zf?this._isAllowedAssignmentEvent(o.expression):o instanceof Vg&&o.args.length===1&&o.receiver instanceof zc&&o.receiver.name==="$any"&&o.receiver.receiver instanceof Hc?this._isAllowedAssignmentEvent(o.args[0]):(o instanceof zc||o instanceof cu)&&!w3(o)}};function w3(n){return n instanceof Gf||n instanceof qf?!0:n instanceof t0?w3(n.expression):n instanceof zc||n instanceof cu||n instanceof Vg?w3(n.receiver):!1}function oP(n){return n[0]=="@"}function Mb(n,o,e,t){let i,[a,s]=o?hr(o,!1):[null,o],d=u=>{let[g,C]=hr(u,!1),M=g??a,x=M?`:${M}:${C}`:C;return n.securityContext(x,e,t)},p=n.allKnownElementNames();return s===null?i=p.map(d):(i=[],Ag.parse(s).forEach(u=>{let g=u.element?[u.element]:p;if(u.element&&!n.hasElement(u.element,[])){let x=`:${Bx}:${u.element}`,b=`:${jx}:${u.element}`;n.hasElement(x,[])?g=[x]:n.hasElement(b,[])&&(g=[b])}let C=new Set(u.notSelectors.filter(x=>x.isElementSelector()).map(x=>x.element?.toLowerCase())),M=g.filter(x=>{let b=x.toLowerCase();return!C.has(b)&&!C.has(hr(b)[1])});i.push(...M.map(d))})),i.length===0?[gi.NONE]:Array.from(new Set(i)).sort()}function Cm(n,o){let e=o.start-n.start.offset,t=o.end-n.end.offset;return new In(n.start.moveBy(e),n.end.moveBy(t),n.fullStart.moveBy(e),n.details)}var Nd=new Yg,nu="ng-template",mZ="animate.";function Sb(n){return n instanceof os}function pZ(n){return Sb(n)&&n.nodes.length===1&&n.nodes[0]instanceof tx}function uZ(n,o,e,t,i,a,s,d,p,u){let g=new S0(n,e,t,i,a,s,d,p,u);return zd(g.root,o),g}function gZ(n,o,e){let t=new fx(n.componentName,e,vs.DomOnly);for(let i of n.properties??[]){let a=Qt.Property;i.name.startsWith("attr.")&&(i.name=i.name.substring(5),a=Qt.Attribute),i.isLegacyAnimation&&(a=Qt.LegacyAnimation),i.isAnimation&&(a=Qt.Animation);let s=aN(o,n.componentSelector,i.name,a===Qt.Attribute);hZ(t,i,a,s)}for(let[i,a]of Object.entries(n.attributes)??[]){let s=aN(o,n.componentSelector,i,!0);_Z(t,i,a,s)}for(let i of n.events??[])fZ(t,i);return t}function aN(n,o,e,t){let i=n.calcPossibleSecurityContexts(o,e,t),a=Mb(Nd,null,Nd.getMappedPropName(e),t),s=a.filter(u=>u!==gi.NONE),d=s.length;return d!==a.length&&d>0||s.some(u=>!i.includes(u))?a:i.filter(u=>u!==gi.NONE)}function hZ(n,o,e,t){let i,a=o.expression.ast;a instanceof F0?i=new aa(a.strings,a.expressions.map(s=>Yn(s,n,o.sourceSpan)),[]):i=Yn(a,n,o.sourceSpan),n.root.update.push(uu(n.root.xref,e,o.name,i,null,t,!1,!1,null,null,o.sourceSpan))}function _Z(n,o,e,t){let i=uu(n.root.xref,Qt.Attribute,o,e,null,t,!0,!1,null,null,e.sourceSpan);n.root.update.push(i)}function fZ(n,o){let e;if(o.type===is.Animation)e=dF(n.root.xref,new vr,o.name,null,O0(n.root,o.handler,o.handlerSpan),o.name.endsWith("enter")?"enter":"leave",o.targetOrPhase,!0,o.sourceSpan);else{let[t,i]=o.type!==is.LegacyAnimation?[null,o.targetOrPhase]:[o.targetOrPhase,null];e=iT(n.root.xref,new vr,o.name,null,O0(n.root,o.handler,o.handlerSpan),t,i,!0,o.sourceSpan)}n.root.create.push(e)}function zd(n,o){for(let e of o)if(e instanceof Uc)vZ(n,e);else if(e instanceof Qs)CZ(n,e);else if(e instanceof Ug)bZ(n,e);else if(e instanceof Qp)zF(n,e,null);else if(e instanceof jg)LF(n,e,null);else if(e instanceof Jb)xZ(n,e);else if(e instanceof Zb)yZ(n,e);else if(e instanceof mu)wZ(n,e);else if(e instanceof FN)SZ(n,e);else if(e instanceof Hg)kZ(n,e);else if(e instanceof q3)TZ(n,e);else if(!(e instanceof Ef))throw new Error(`Unsupported template node: ${e.constructor.name}`)}function vZ(n,o){if(o.i18n!==void 0&&!(o.i18n instanceof os||o.i18n instanceof Dm))throw Error(`Unhandled i18n metadata type for element: ${o.i18n.constructor.name}`);let e=n.job.allocateXrefId(),[t,i]=hr(o.name),a=mG(i,e,_F(t),o.i18n instanceof Dm?o.i18n:void 0,o.startSourceSpan,o.sourceSpan);n.create.push(a),OZ(n,a,o),jF(a,o);let s=null;o.i18n instanceof os&&(s=n.job.allocateXrefId(),n.create.push(Lx(s,o.i18n,void 0,o.startSourceSpan))),zd(n,o.children);let d=uG(e,o.endSourceSpan??o.startSourceSpan);n.create.push(d),s!==null&&Je.insertBefore(Vx(s,o.endSourceSpan??o.startSourceSpan),d)}function CZ(n,o){if(o.i18n!==void 0&&!(o.i18n instanceof os||o.i18n instanceof Dm))throw Error(`Unhandled i18n metadata type for template: ${o.i18n.constructor.name}`);let e=n.job.allocateView(n.xref),t=o.tagName,i="";o.tagName&&([i,t]=hr(o.tagName));let a=o.i18n instanceof Dm?o.i18n:void 0,s=_F(i),d=t===null?"":qG(t,s),p=EZ(o)?ys.NgTemplate:ys.Structural,u=rF(e.xref,p,t,d,s,a,o.startSourceSpan,o.sourceSpan);n.create.push(u),DZ(n,u,o,p),jF(u,o),zd(e,o.children);for(let{name:g,value:C}of o.variables)e.contextVariables.set(g,C!==""?C:"$implicit");if(p===ys.NgTemplate&&o.i18n instanceof os){let g=n.job.allocateXrefId();Je.insertAfter(Lx(g,o.i18n,void 0,o.startSourceSpan),e.create.head),Je.insertBefore(Vx(g,o.endSourceSpan??o.startSourceSpan),e.create.tail)}}function bZ(n,o){if(o.i18n!==void 0&&!(o.i18n instanceof Dm))throw Error(`Unhandled i18n metadata type for element: ${o.i18n.constructor.name}`);let e=null;o.children.some(a=>!(a instanceof Rx)&&(!(a instanceof Qp)||a.value.trim().length>0))&&(e=n.job.allocateView(n.xref),zd(e,o.children));let t=n.job.allocateXrefId(),i=xG(t,o.selector,o.i18n,e?.xref??null,o.sourceSpan);for(let a of o.attributes){let s=Nd.securityContext(o.name,a.name,!0);n.update.push(uu(i.xref,Qt.Attribute,a.name,De(a.value),null,s,!0,!1,null,Dd(a.i18n),a.sourceSpan))}n.create.push(i)}function zF(n,o,e){n.create.push(cF(n.job.allocateXrefId(),o.value,e,o.sourceSpan))}function LF(n,o,e){let t=o.value;if(t instanceof xs&&(t=t.ast),!(t instanceof F0))throw new Error(`AssertionError: expected Interpolation for BoundText node, got ${t.constructor.name}`);if(o.i18n!==void 0&&!(o.i18n instanceof Id))throw Error(`Unhandled i18n metadata type for text interpolation: ${o.i18n?.constructor.name}`);let i=o.i18n instanceof Id?o.i18n.children.filter(s=>s instanceof m0).map(s=>s.name):[];if(i.length>0&&i.length!==t.expressions.length)throw Error(`Unexpected number of i18n placeholders (${t.expressions.length}) for BoundText with ${t.expressions.length} expressions`);let a=n.job.allocateXrefId();n.create.push(cF(a,"",e,o.sourceSpan)),n.update.push(YW(a,new aa(t.strings,t.expressions.map(s=>Yn(s,n.job,null)),i),o.sourceSpan))}function xZ(n,o){let e=null,t=[];for(let i=0;i<o.branches.length;i++){let a=o.branches[i],s=n.job.allocateView(n.xref),d=Tx(n,s.xref,a);a.expressionAlias!==null&&s.contextVariables.set(a.expressionAlias.name,uF);let p;if(a.i18n!==void 0){if(!(a.i18n instanceof Im))throw Error(`Unhandled i18n metadata type for if block: ${a.i18n?.constructor.name}`);p=a.i18n}let g=(i===0?sF:lF)(s.xref,ys.Block,d,"Conditional",Oa.HTML,p,a.startSourceSpan,a.sourceSpan);n.create.push(g),e===null&&(e=s.xref);let C=a.expression?Yn(a.expression,n.job,null):null,M=new ux(C,g.xref,g.handle,a.expressionAlias);t.push(M),zd(s,a.children)}n.update.push(iF(e,null,t,o.sourceSpan))}function yZ(n,o){if(o.groups.length===0)return;let e=null,t=[];for(let i=0;i<o.groups.length;i++){let a=o.groups[i],s=n.job.allocateView(n.xref),d=Tx(n,s.xref,a),p;if(a.i18n!==void 0){if(!(a.i18n instanceof Im))throw Error(`Unhandled i18n metadata type for switch block: ${a.i18n?.constructor.name}`);p=a.i18n}let g=(i===0?sF:lF)(s.xref,ys.Block,d,"Case",Oa.HTML,p,a.startSourceSpan,a.sourceSpan);n.create.push(g),e===null&&(e=s.xref);for(let C of a.cases){let M=C.expression?Yn(C.expression,n.job,o.startSourceSpan):null,x=new ux(M,g.xref,g.handle);t.push(x)}zd(s,a.children)}n.update.push(iF(e,Yn(o.expression,n.job,null),t,o.sourceSpan))}function vb(n,o,e,t,i){if(e!==void 0&&!(e instanceof Im))throw Error("Unhandled i18n metadata type for defer block");if(t===void 0)return null;let a=n.job.allocateView(n.xref);zd(a,t);let s=rF(a.xref,ys.Block,null,`Defer${o}`,Oa.HTML,e,i,i);return n.create.push(s),s}function wZ(n,o){let e=null;if(n.job.deferMeta.mode===0){if(!n.job.deferMeta.blocks.has(o))throw new Error("AssertionError: unable to find a dependency function for this deferred block");e=n.job.deferMeta.blocks.get(o)??null}let t=vb(n,"",o.i18n,o.children,o.sourceSpan),i=vb(n,"Loading",o.loading?.i18n,o.loading?.children,o.loading?.sourceSpan),a=vb(n,"Placeholder",o.placeholder?.i18n,o.placeholder?.children,o.placeholder?.sourceSpan),s=vb(n,"Error",o.error?.i18n,o.error?.children,o.error?.sourceSpan),d=n.job.allocateXrefId(),p=yG(d,t.xref,t.handle,e,n.job.allDeferrableDepsFn,o.sourceSpan);p.placeholderView=a?.xref??null,p.placeholderSlot=a?.handle??null,p.loadingSlot=i?.handle??null,p.errorSlot=s?.handle??null,p.placeholderMinimumTime=o.placeholder?.minimumTime??null,p.loadingMinimumTime=o.loading?.minimumTime??null,p.loadingAfterTime=o.loading?.afterTime??null,p.flags=MZ(o),n.create.push(p);let u=[],g=[];aP("hydrate",o.hydrateTriggers,u,g,n,d),aP("none",o.triggers,u,g,n,d),aP("prefetch",o.prefetchTriggers,u,g,n,d),u.some(M=>M.modifier==="none")||g.some(M=>M.modifier==="none")||u.push(xm(d,{kind:lo.Idle},"none",null)),n.create.push(u),n.update.push(g)}function MZ(n){return Object.keys(n.hydrateTriggers).length>0?1:null}function aP(n,o,e,t,i,a){if(o.idle!==void 0){let s=xm(a,{kind:lo.Idle},n,o.idle.sourceSpan);e.push(s)}if(o.immediate!==void 0){let s=xm(a,{kind:lo.Immediate},n,o.immediate.sourceSpan);e.push(s)}if(o.timer!==void 0){let s=xm(a,{kind:lo.Timer,delay:o.timer.delay},n,o.timer.sourceSpan);e.push(s)}if(o.hover!==void 0){let s=xm(a,{kind:lo.Hover,targetName:o.hover.reference,targetXref:null,targetSlot:null,targetView:null,targetSlotViewSteps:null},n,o.hover.sourceSpan);e.push(s)}if(o.interaction!==void 0){let s=xm(a,{kind:lo.Interaction,targetName:o.interaction.reference,targetXref:null,targetSlot:null,targetView:null,targetSlotViewSteps:null},n,o.interaction.sourceSpan);e.push(s)}if(o.viewport!==void 0){let s=xm(a,{kind:lo.Viewport,targetName:o.viewport.reference,targetXref:null,targetSlot:null,targetView:null,targetSlotViewSteps:null,options:o.viewport.options?Yn(o.viewport.options,i.job,o.viewport.sourceSpan):null},n,o.viewport.sourceSpan);e.push(s)}if(o.never!==void 0){let s=xm(a,{kind:lo.Never},n,o.never.sourceSpan);e.push(s)}if(o.when!==void 0){if(o.when.value instanceof F0)throw new Error("Unexpected interpolation in defer block when trigger");let s=rG(a,Yn(o.when.value,i.job,o.when.sourceSpan),n,o.when.sourceSpan);t.push(s)}}function SZ(n,o){if(o.i18n instanceof os&&pZ(o.i18n)){let e=n.job.allocateXrefId();n.create.push(SG(e,o.i18n,LN(o.i18n).name,null));for(let[t,i]of Object.entries(q(q({},o.vars),o.placeholders)))i instanceof jg?LF(n,i,t):zF(n,i,t);n.create.push(kG(e))}else throw Error(`Unhandled i18n metadata type for ICU: ${o.i18n?.constructor.name}`)}function kZ(n,o){let e=n.job.allocateView(n.xref),t=`\u0275$index_${e.xref}`,i=`\u0275$count_${e.xref}`,a=new Set;e.contextVariables.set(o.item.name,o.item.value);for(let S of o.contextVariables)S.value==="$index"&&a.add(S.name),S.name==="$index"?e.contextVariables.set("$index",S.value).set(t,S.value):S.name==="$count"?e.contextVariables.set("$count",S.value).set(i,S.value):e.aliases.add({kind:ar.Alias,name:null,identifier:S.name,expression:PZ(S,t,i)});let s=Ha(o.trackBy.span,o.sourceSpan),d=Yn(o.trackBy,n.job,s);zd(e,o.children);let p=null,u=null;o.empty!==null&&(p=n.job.allocateView(n.xref),zd(p,o.empty.children),u=Tx(n,p.xref,o.empty));let g={$index:a,$implicit:o.item.name};if(o.i18n!==void 0&&!(o.i18n instanceof Im))throw Error("AssertionError: Unhandled i18n metadata type or @for");if(o.empty?.i18n!==void 0&&!(o.empty.i18n instanceof Im))throw Error("AssertionError: Unhandled i18n metadata type or @empty");let C=o.i18n,M=o.empty?.i18n,x=Tx(n,e.xref,o),b=pG(e.xref,p?.xref??null,x,d,g,u,C,M,o.startSourceSpan,o.sourceSpan);n.create.push(b);let P=Yn(o.expression,n.job,Ha(o.expression.span,o.sourceSpan)),k=aG(b.xref,b.handle,P,o.sourceSpan);n.update.push(k)}function PZ(n,o,e){switch(n.value){case"$index":return new ir(o);case"$count":return new ir(e);case"$first":return new ir(o).identical(De(0));case"$last":return new ir(o).identical(new ir(e).minus(De(1)));case"$even":return new ir(o).modulo(De(2)).identical(De(0));case"$odd":return new ir(o).modulo(De(2)).notIdentical(De(0));default:throw new Error(`AssertionError: unknown @for loop variable ${n.value}`)}}function TZ(n,o){let e=n.job.allocateXrefId();n.create.push(wG(e,o.name,o.sourceSpan)),n.update.push(lG(e,o.name,Yn(o.value,n.job,o.valueSpan),o.sourceSpan))}function Yn(n,o,e){if(n instanceof xs)return Yn(n.ast,o,e);if(n instanceof zc)return n.receiver instanceof Hc?new ir(n.name):new Xs(Yn(n.receiver,o,e),n.name,null,Ha(n.span,e));if(n instanceof Vg){if(n.receiver instanceof Hc)throw new Error("Unexpected ImplicitReceiver");return new Ms(Yn(n.receiver,o,e),n.args.map(t=>Yn(t,o,e)),void 0,Ha(n.span,e))}else{if(n instanceof Cs)return De(n.value,void 0,Ha(n.span,e));if(n instanceof Dg)switch(n.operator){case"+":return new au(zf.Plus,Yn(n.expr,o,e),void 0,Ha(n.span,e));case"-":return new au(zf.Minus,Yn(n.expr,o,e),void 0,Ha(n.span,e));default:throw new Error(`AssertionError: unknown unary operator ${n.operator}`)}else if(n instanceof Zr){let t=WG.get(n.operation);if(t===void 0)throw new Error(`AssertionError: unknown binary operator ${n.operation}`);return new Pi(t,Yn(n.left,o,e),Yn(n.right,o,e),void 0,Ha(n.span,e))}else{if(n instanceof Wf)return new Fm(o.root.xref);if(n instanceof cu)return new Fd(Yn(n.receiver,o,e),Yn(n.key,o,e),void 0,Ha(n.span,e));if(n instanceof Lg)throw new Error("AssertionError: Chain in unknown context");if(n instanceof du){let t=n.keys.map((i,a)=>{let s=Yn(n.values[a],o,e);return i.kind==="spread"?new Tm(s):new Rg(i.key,s,i.quoted)});return new rc(t,void 0,Ha(n.span,e))}else{if(n instanceof Qf)return new $c(n.expressions.map(t=>Yn(t,o,e)));if(n instanceof Bb)return new jc(Yn(n.condition,o,e),Yn(n.trueExp,o,e),Yn(n.falseExp,o,e),void 0,Ha(n.span,e));if(n instanceof Zf)return Yn(n.expression,o,e);if(n instanceof jb)return new hu(o.allocateXrefId(),new vr,n.name,[Yn(n.exp,o,e),...n.args.map(t=>Yn(t,o,e))]);if(n instanceof qf)return new Qg(Yn(n.receiver,o,e),Yn(n.key,o,e),Ha(n.span,e));if(n instanceof Gf)return new qg(Yn(n.receiver,o,e),n.name);if(n instanceof Hb)return new _u(Yn(n.receiver,o,e),n.args.map(t=>Yn(t,o,e)));if(n instanceof Ar)return new w0(Ha(n.span,e));if(n instanceof Kf)return dU(Yn(n.expression,o,e),Ha(n.span,e));if(n instanceof Xf)return N0(Yn(n.expression,o,e));if(n instanceof Yf)return new Db(Yn(n.expression,o,e),void 0,Ha(n.span,e));if(n instanceof e0)return rN(n,o,e);if(n instanceof Jf)return new Lf(Yn(n.tag,o,e),rN(n.template,o,e),void 0,Ha(n.span,e));if(n instanceof t0)return new ac(Yn(n.expression,o,e),void 0,Ha(n.span,e));if(n instanceof Gb)return new Fg(n.body,n.flags,e);if(n instanceof $b)return new ru(Yn(n.expression,o,e));if(n instanceof Wb)return AZ(Ys(n.parameters.map(t=>new Da(t.name,ws)),Yn(n.body,o,e)));throw new Error(`Unhandled expression type "${n.constructor.name}" in file "${e?.start.file.url}"`)}}}}function rN(n,o,e){return new Bf(n.elements.map(t=>new Ib(t.text,Ha(t.span,e))),n.expressions.map(t=>Yn(t,o,e)),Ha(n.span,e))}function M3(n,o,e,t){let i;return o instanceof F0?i=new aa(o.strings,o.expressions.map(a=>Yn(a,n,null)),Object.keys(Dd(e)?.placeholders??{})):o instanceof co?i=Yn(o,n,null):i=De(o),i}var VF=new Map([[Fi.Property,Qt.Property],[Fi.TwoWay,Qt.TwoWayProperty],[Fi.Attribute,Qt.Attribute],[Fi.Class,Qt.ClassName],[Fi.Style,Qt.StyleProperty],[Fi.LegacyAnimation,Qt.LegacyAnimation],[Fi.Animation,Qt.Animation]]);function EZ(n){return hr(n.tagName??"")[1]===nu}function Dd(n){if(n==null)return null;if(!(n instanceof os))throw Error(`Expected i18n meta to be a Message, but got: ${n.constructor.name}`);return n}function OZ(n,o,e){let t=new Array,i=new Set;for(let a of e.attributes){let[s,d]=hr(e.name),p=s;if(!s)switch(o.namespace){case Oa.SVG:p=Bx;break;case Oa.Math:p=jx;break}let u=Nd.securityContext(p?`:${p}:${d}`:d,a.name,!0);t.push(uu(o.xref,Qt.Attribute,a.name,M3(n.job,a.value,a.i18n),null,u,!0,!1,null,Dd(a.i18n),a.sourceSpan)),a.i18n&&i.add(a.name)}for(let a of e.inputs)i.has(a.name)&&console.error(`On component ${n.job.componentName}, the binding ${a.name} is both an i18n attribute and a property. You may want to remove the property binding. This will become a compilation error in future versions of Angular.`),t.push(uu(o.xref,VF.get(a.type),a.name,M3(n.job,D0(a.value),a.i18n),a.unit,a.securityContext,!1,!1,null,Dd(a.i18n)??null,a.sourceSpan));n.create.push(t.filter(a=>a?.kind===j.ExtractedAttribute)),n.update.push(t.filter(a=>a?.kind===j.Binding));for(let a of e.outputs){if(a.type===is.LegacyAnimation&&a.phase===null)throw Error("Animation listener should have a phase");a.type===is.TwoWay?n.create.push(mF(o.xref,o.handle,a.name,o.tag,BF(n,a.handler,a.handlerSpan),a.sourceSpan)):a.type===is.Animation?n.create.push(dF(o.xref,o.handle,a.name,o.tag,O0(n,a.handler,a.handlerSpan),a.name.endsWith("enter")?"enter":"leave",a.target,!1,a.sourceSpan)):n.create.push(iT(o.xref,o.handle,a.name,o.tag,O0(n,a.handler,a.handlerSpan),a.phase,a.target,!1,a.sourceSpan))}t.some(a=>a?.i18nMessage)!==null&&n.create.push(pF(n.job.allocateXrefId(),new vr,o.xref))}function DZ(n,o,e,t){let i=new Array;for(let a of e.templateAttrs)if(a instanceof $g){let s=Nd.securityContext(nu,a.name,!0);i.push(Cb(n,o.xref,Fi.Attribute,a.name,a.value,null,s,!0,t,Dd(a.i18n),a.sourceSpan))}else i.push(Cb(n,o.xref,a.type,a.name,D0(a.value),a.unit,a.securityContext,!0,t,Dd(a.i18n),a.sourceSpan));for(let a of e.attributes){let s=Nd.securityContext(nu,a.name,!0);i.push(Cb(n,o.xref,Fi.Attribute,a.name,a.value,null,s,!1,t,Dd(a.i18n),a.sourceSpan))}for(let a of e.inputs)i.push(Cb(n,o.xref,a.type,a.name,D0(a.value),a.unit,a.securityContext,!1,t,Dd(a.i18n),a.sourceSpan));n.create.push(i.filter(a=>a?.kind===j.ExtractedAttribute)),n.update.push(i.filter(a=>a?.kind===j.Binding));for(let a of e.outputs){if(a.type===is.LegacyAnimation&&a.phase===null)throw Error("Animation listener should have a phase");if(t===ys.NgTemplate&&(a.type===is.TwoWay?n.create.push(mF(o.xref,o.handle,a.name,o.tag,BF(n,a.handler,a.handlerSpan),a.sourceSpan)):n.create.push(iT(o.xref,o.handle,a.name,o.tag,O0(n,a.handler,a.handlerSpan),a.phase,a.target,!1,a.sourceSpan))),t===ys.Structural&&a.type!==is.LegacyAnimation){let s=Nd.securityContext(nu,a.name,!1);n.create.push(Cl(o.xref,Qt.Property,null,a.name,null,null,null,s))}}i.some(a=>a?.i18nMessage)!==null&&n.create.push(pF(n.job.allocateXrefId(),new vr,o.xref))}function Cb(n,o,e,t,i,a,s,d,p,u,g){let C=typeof i=="string";if(p===ys.Structural){if(!d)switch(e){case Fi.Property:case Fi.Class:case Fi.Style:return Cl(o,Qt.Property,null,t,null,null,u,s);case Fi.TwoWay:return Cl(o,Qt.TwoWayProperty,null,t,null,null,u,s)}if(!C&&(e===Fi.Attribute||e===Fi.LegacyAnimation||e===Fi.Animation))return null}let M=VF.get(e);return p===ys.NgTemplate&&(e===Fi.Class||e===Fi.Style||e===Fi.Attribute&&!C)&&(M=Qt.Property),uu(o,M,t,M3(n.job,i,u),a,s,C,d,p,u,g)}function O0(n,o,e){o=D0(o);let t=new Array,i=o instanceof Lg?o.expressions:[o];if(i.length===0)throw new Error("Expected listener to have non-empty expression list.");let a=i.map(d=>Yn(d,n.job,e)),s=a.pop();return t.push(...a.map(d=>Js(new fr(d,d.sourceSpan)))),t.push(Js(new Ia(s,s.sourceSpan))),t}function BF(n,o,e){o=D0(o);let t=new Array;if(o instanceof Lg)if(o.expressions.length===1)o=o.expressions[0];else throw new Error("Expected two-way listener to have a single expression.");let i=Yn(o,n.job,e),a=new ir("$event"),s=new mx(i,a);return t.push(Js(new fr(s))),t.push(Js(new Ia(a))),t}function D0(n){return n instanceof xs?n.ast:n}function jF(n,o){IZ(n.localRefs);for(let{name:e,value:t}of o.references)n.localRefs.push({name:e,target:t})}function IZ(n){if(!Array.isArray(n))throw new Error("AssertionError: expected an array")}function Ha(n,o){if(o===null)return null;let e=o.start.moveBy(n.start),t=o.start.moveBy(n.end),i=o.fullStart.moveBy(n.start);return new In(e,t,i)}function Tx(n,o,e){let t=null;for(let i of e.children)if(!(i instanceof Rx||i instanceof q3)){if(t!==null)return null;if(i instanceof Uc||i instanceof Qs&&i.tagName!==null)t=i;else return null}if(t!==null){for(let a of t.attributes)if(!a.name.startsWith(mZ)){let s=Nd.securityContext(nu,a.name,!0);n.update.push(uu(o,Qt.Attribute,a.name,De(a.value),null,s,!0,!1,null,Dd(a.i18n),a.sourceSpan))}for(let a of t.inputs)if(a.type!==Fi.LegacyAnimation&&a.type!==Fi.Animation&&a.type!==Fi.Attribute){let s=Nd.securityContext(nu,a.name,!0);n.create.push(Cl(o,Qt.Property,null,a.name,null,null,null,s))}let i=t instanceof Uc?t.name:t.tagName;return i===nu?null:i}return null}function AZ(n){let o=new Set(n.params.map(e=>e.name));return Bt(n,e=>{if(e instanceof vu)for(let t of e.params)o.add(t.name);else if(e instanceof ir&&o.has(e.name))return di(e.name);return e},ai.None)}var NZ=!1;function FZ(){return NZ}function Ex(n,o){return Nx(di(Jg).bitwiseAnd(De(n),null),o)}function RZ(n){return(n.descendants?1:0)|(n.static?2:0)|(n.emitDistinctChangesOnly?4:0)}function zZ(n,o){if(Array.isArray(n.predicate)){let e=[];return n.predicate.forEach(t=>{let i=t.split(",").map(a=>De(a.trim()));e.push(...i)}),o.getConstLiteral(io(e),!0)}else switch(n.predicate.forwardRef){case 0:case 2:return n.predicate.expression;case 1:return Ht(ge.resolveForwardRef).callFn([n.predicate.expression])}}function $F(n,o,e){let t=[];return e!==void 0&&t.push(...e),n.isSignal&&t.push(new Xs(di(Zs),n.propertyName)),t.push(zZ(n,o),De(RZ(n))),n.read&&t.push(n.read),t}var sT=Symbol("queryAdvancePlaceholder");function HF(n){let o=[],e=0,t=()=>{e>0&&(o.unshift(Ht(ge.queryAdvance).callFn(e===1?[]:[De(e)]).toStmt()),e=0)};for(let i=n.length-1;i>=0;i--){let a=n[i];a===sT?e++:(t(),o.unshift(a))}return t(),o}function LZ(n,o,e){let t=[],i=[],a=VN(u=>i.push(u),K3),s=null,d=null;n.forEach(u=>{let g=$F(u,o);if(u.isSignal?(s??=Ht(ge.viewQuerySignal),s=s.callFn(g)):(d??=Ht(ge.viewQuery),d=d.callFn(g)),u.isSignal){i.push(sT);return}let C=a(),M=Ht(ge.loadQuery).callFn([]),x=Ht(ge.queryRefresh).callFn([C.set(M)]),b=di(Zs).prop(u.propertyName).set(u.first?C.prop("first"):C);i.push(x.and(b).toStmt())}),s!==null&&t.push(new fr(s)),d!==null&&t.push(new fr(d));let p=e?`${e}_Query`:null;return Em([new Da(Jg,iu),new Da(Zs,ws)],[Ex(1,t),Ex(2,HF(i))],ic,null,p)}function VZ(n,o,e){let t=[],i=[],a=VN(u=>i.push(u),K3),s=null,d=null;for(let u of n){let g=$F(u,o,[di("dirIndex")]);if(u.isSignal?(s??=Ht(ge.contentQuerySignal),s=s.callFn(g)):(d??=Ht(ge.contentQuery),d=d.callFn(g)),u.isSignal){i.push(sT);continue}let C=a(),M=Ht(ge.loadQuery).callFn([]),x=Ht(ge.queryRefresh).callFn([C.set(M)]),b=di(Zs).prop(u.propertyName).set(u.first?C.prop("first"):C);i.push(x.and(b).toStmt())}s!==null&&t.push(new fr(s)),d!==null&&t.push(new fr(d));let p=e?`${e}_ContentQueries`:null;return Em([new Da(Jg,iu),new Da(Zs,ws),new Da("dirIndex",iu)],[Ex(1,t),Ex(2,HF(i))],ic,null,p)}var S3=class extends Qq{constructor(){super(h3)}parse(o,e,t){return super.parse(o,e,t)}};function BZ(n){if(n==null||n.length===0||n[0]=="/")return!1;let o=n.match(jZ);return o===null||o[1]=="package"||o[1]=="asset"}var jZ=/^([^:/?#]+):/,$Z="select",HZ="link",UZ="rel",WZ="href",GZ="stylesheet",qZ="style",QZ=new Set([":svg:script","script"]),KZ="ngNonBindable",XZ="ngProjectAs";function UF(n){let o=null,e=null,t=null,i=!1,a="";for(let p of n.attrs){let u=p.name.toLowerCase();u==$Z?o=p.value:u==WZ?e=p.value:u==UZ?t=p.value:p.name==KZ?i=!0:p.name==XZ&&p.value.length>0&&(a=p.value)}o||="*";let s=n.name.toLowerCase(),d=Gs.OTHER;return kP(s)?d=Gs.NG_CONTENT:qZ===s?d=Gs.STYLE:QZ.has(s)?d=Gs.SCRIPT:s==HZ&&t==GZ&&(d=Gs.STYLESHEET),new k3(d,o,e,i,a)}var Gs=(function(n){return n[n.NG_CONTENT=0]="NG_CONTENT",n[n.STYLE=1]="STYLE",n[n.STYLESHEET=2]="STYLESHEET",n[n.SCRIPT=3]="SCRIPT",n[n.OTHER=4]="OTHER",n})(Gs||{}),k3=class{type;selectAttr;hrefAttr;nonBindable;projectAs;constructor(o,e,t,i,a){this.type=o,this.selectAttr=e,this.hrefAttr=t,this.nonBindable=i,this.projectAs=a}},YZ=/^\s*([0-9A-Za-z_$]*)\s+of\s+([\S\s]*)/,ZZ=/^track\s+([\S\s]*)/,JZ=/^(as\s+)(.*)/,Hx=/^else[^\S\r\n]+if/,eJ=/^let\s+([\S\s]*)/,tJ=/^[$A-Z_][0-9A-Z_$]*$/i,sN=/(\s*)(\S+)(\s*)/,Rf=new Set(["$index","$first","$last","$even","$odd","$count"]);function lN(n){return n==="empty"}function cN(n){return n==="else"||Hx.test(n)}function nJ(n,o,e,t){let i=lJ(o),a=[],s=dN(n,i,t);s!==null&&a.push(new Yp(s.expression,ko(e,n.children,n.children),s.expressionAlias,n.sourceSpan,n.startSourceSpan,n.endSourceSpan,n.nameSpan,n.i18n));for(let C of o)if(Hx.test(C.name)){let M=dN(C,i,t);if(M!==null){let x=ko(e,C.children,C.children);a.push(new Yp(M.expression,x,M.expressionAlias,C.sourceSpan,C.startSourceSpan,C.endSourceSpan,C.nameSpan,C.i18n))}}else if(C.name==="else"){let M=ko(e,C.children,C.children);a.push(new Yp(null,M,null,C.sourceSpan,C.startSourceSpan,C.endSourceSpan,C.nameSpan,C.i18n))}let d=a.length>0?a[0].startSourceSpan:n.startSourceSpan,p=a.length>0?a[a.length-1].endSourceSpan:n.endSourceSpan,u=n.sourceSpan,g=a[a.length-1];return g!==void 0&&(u=new In(d.start,g.sourceSpan.end)),{node:new Jb(a,u,n.startSourceSpan,p,n.nameSpan),errors:i}}function iJ(n,o,e,t){let i=[],a=aJ(n,i,t),s=null,d=null;for(let p of o)p.name==="empty"?d!==null?i.push(new dn(p.sourceSpan,"@for loop can only have one @empty block")):p.parameters.length>0?i.push(new dn(p.sourceSpan,"@empty block cannot have parameters")):d=new l0(ko(e,p.children,p.children),p.sourceSpan,p.startSourceSpan,p.endSourceSpan,p.nameSpan,p.i18n):i.push(new dn(p.sourceSpan,`Unrecognized @for loop block "${p.name}"`));if(a!==null)if(a.trackBy===null)i.push(new dn(n.startSourceSpan,'@for loop must have a "track" expression'));else{let p=d?.endSourceSpan??n.endSourceSpan,u=new In(n.sourceSpan.start,p?.end??n.sourceSpan.end);rJ(a.trackBy.expression,a.trackBy.keywordSpan,i),s=new Hg(a.itemName,a.expression,a.trackBy.expression,a.trackBy.keywordSpan,a.context,ko(e,n.children,n.children),d,u,n.sourceSpan,n.startSourceSpan,p,n.nameSpan,n.i18n)}return{node:s,errors:i}}function oJ(n,o,e){let t=cJ(n),i=n.parameters.length>0?I0(n.parameters[0],e):e.parseBinding("",!1,n.sourceSpan,0),a=[],s=[],d=[],p=null,u=null;for(let C of n.children){if(!(C instanceof _l))continue;if((C.name!=="case"||C.parameters.length===0)&&C.name!=="default"&&C.name!=="default never"){s.push(new ex(C.name,C.sourceSpan,C.nameSpan));continue}u!==null&&t.push(new dn(C.sourceSpan,'@default block with "never" parameter must be the last case in a switch'));let M=C.name==="case",x=null;if(M)x=I0(C.parameters[0],e);else if(C.name==="default never"){(C.children.length>0||C.endSourceSpan!==null&&C.endSourceSpan.start.offset!==C.endSourceSpan.end.offset)&&t.push(new dn(C.sourceSpan,'@default block with "never" parameter cannot have a body')),d.length>0&&t.push(new dn(C.sourceSpan,'A @case block with no body cannot be followed by a @default block with "never" parameter')),u=new FP(C.sourceSpan,C.startSourceSpan,C.endSourceSpan,C.nameSpan);continue}let b=new NP(x,C.sourceSpan,C.startSourceSpan,C.endSourceSpan,C.nameSpan);if(d.push(b),C.children.length===0&&C.endSourceSpan!==null&&C.endSourceSpan.start.offset===C.endSourceSpan.end.offset){p===null&&(p=C.sourceSpan);continue}let k=C.sourceSpan,S=C.startSourceSpan;p!==null&&(k=new In(p.start,C.sourceSpan.end),S=new In(p.start,C.startSourceSpan.end),p=null);let O=new s0(d,ko(o,C.children,C.children),k,S,C.endSourceSpan,C.nameSpan,C.i18n);a.push(O),d=[]}return{node:new Zb(i,a,s,u,n.sourceSpan,n.startSourceSpan,n.endSourceSpan,n.nameSpan),errors:t}}function aJ(n,o,e){if(n.parameters.length===0)return o.push(new dn(n.startSourceSpan,"@for loop does not have an expression")),null;let[t,...i]=n.parameters,a=dJ(t,o)?.match(YZ);if(!a||a[2].trim().length===0)return o.push(new dn(t.sourceSpan,'Cannot parse expression. @for loop expression must match the pattern "<identifier> of <expression>"')),null;let[,s,d]=a;Rf.has(s)&&o.push(new dn(t.sourceSpan,`@for loop item name cannot be one of ${Array.from(Rf).join(", ")}.`));let p=t.expression.split(" ")[0],u=new In(t.sourceSpan.start,t.sourceSpan.start.moveBy(p.length)),g={itemName:new Om(s,"$implicit",u,u),trackBy:null,expression:I0(t,e,d),context:Array.from(Rf,C=>{let M=new In(n.startSourceSpan.end,n.startSourceSpan.end);return new Om(C,C,M,M)})};for(let C of i){let M=C.expression.match(eJ);if(M!==null){let b=new In(C.sourceSpan.start.moveBy(M[0].length-M[1].length),C.sourceSpan.end);sJ(C.sourceSpan,M[1],b,s,g.context,o);continue}let x=C.expression.match(ZZ);if(x!==null){if(g.trackBy!==null)o.push(new dn(C.sourceSpan,'@for loop can only have one "track" expression'));else{let b=I0(C,e,x[1]);b.ast instanceof Ar&&o.push(new dn(n.startSourceSpan,'@for loop must have a "track" expression'));let P=new In(C.sourceSpan.start,C.sourceSpan.start.moveBy(5));g.trackBy={expression:b,keywordSpan:P}}continue}o.push(new dn(C.sourceSpan,`Unrecognized @for loop parameter "${C.expression}"`))}return g}function rJ(n,o,e){let t=new P3;n.ast.visit(t),t.hasPipe&&e.push(new dn(o,"Cannot use pipes in track expressions"))}function sJ(n,o,e,t,i,a){let s=o.split(","),d=e.start;for(let p of s){let u=p.split("="),g=u.length===2?u[0].trim():"",C=u.length===2?u[1].trim():"";if(g.length===0||C.length===0)a.push(new dn(n,'Invalid @for loop "let" parameter. Parameter should match the pattern "<name> = <variable name>"'));else if(!Rf.has(C))a.push(new dn(n,`Unknown "let" parameter variable "${C}". The allowed variables are: ${Array.from(Rf).join(", ")}`));else if(g===t)a.push(new dn(n,`Invalid @for loop "let" parameter. Variable cannot be called "${t}"`));else if(i.some(M=>M.name===g))a.push(new dn(n,`Duplicate "let" parameter variable "${C}"`));else{let[,M,x]=u[0].match(sN)??[],b=M!==void 0&&u.length===2?new In(d.moveBy(M.length),d.moveBy(M.length+x.length)):e,P;if(u.length===2){let[,S,O]=u[1].match(sN)??[];P=S!==void 0?new In(d.moveBy(u[0].length+1+S.length),d.moveBy(u[0].length+1+S.length+O.length)):void 0}let k=new In(b.start,P?.end??b.end);i.push(new Om(g,C,k,b,P))}d=d.moveBy(p.length+1)}}function lJ(n){let o=[],e=!1;for(let t=0;t<n.length;t++){let i=n[t];i.name==="else"?(e?o.push(new dn(i.startSourceSpan,"Conditional can only have one @else block")):n.length>1&&t<n.length-1?o.push(new dn(i.startSourceSpan,"@else block must be last inside the conditional")):i.parameters.length>0&&o.push(new dn(i.startSourceSpan,"@else block cannot have parameters")),e=!0):Hx.test(i.name)||o.push(new dn(i.startSourceSpan,`Unrecognized conditional block @${i.name}`))}return o}function cJ(n){let o=[],e=!1;if(n.parameters.length!==1)return o.push(new dn(n.startSourceSpan,"@switch block must have exactly one parameter")),o;for(let t of n.children)if(!(t instanceof k0||t instanceof fu&&t.value.trim().length===0)){if(!(t instanceof _l)||t.name!=="case"&&t.name!=="default"&&t.name!=="default never"){o.push(new dn(t.sourceSpan,"@switch block can only contain @case and @default blocks"));continue}t.name==="default never"?(e&&o.push(new dn(t.startSourceSpan,"@switch block can only have one @default block")),e=!0):t.name==="default"?(e?o.push(new dn(t.startSourceSpan,"@switch block can only have one @default block")):t.parameters.length>0&&o.push(new dn(t.startSourceSpan,"@default block cannot have parameters")),e=!0):t.name==="case"&&t.parameters.length!==1&&o.push(new dn(t.startSourceSpan,"@case block must have exactly one parameter"))}return o}function I0(n,o,e){let t,i;return typeof e=="string"?(t=Math.max(0,n.expression.lastIndexOf(e)),i=t+e.length):(t=0,i=n.expression.length),o.parseBinding(n.expression.slice(t,i),!1,n.sourceSpan,n.sourceSpan.start.offset+t)}function dN(n,o,e){if(n.parameters.length===0)return o.push(new dn(n.startSourceSpan,"Conditional block does not have an expression")),null;let t=I0(n.parameters[0],e),i=null;for(let a=1;a<n.parameters.length;a++){let s=n.parameters[a],d=s.expression.match(JZ);if(d===null)o.push(new dn(s.sourceSpan,`Unrecognized conditional parameter "${s.expression}"`));else if(n.name!=="if"&&!Hx.test(n.name))o.push(new dn(s.sourceSpan,'"as" expression is only allowed on `@if` and `@else if` blocks'));else if(i!==null)o.push(new dn(s.sourceSpan,'Conditional can only have one "as" expression'));else{let p=d[2].trim();if(tJ.test(p)){let u=s.sourceSpan.start.moveBy(d[1].length),g=new In(u,u.moveBy(p.length));i=new Om(p,p,g,g)}else o.push(new dn(s.sourceSpan,'"as" expression must be a valid JavaScript identifier'))}}return{expression:t,expressionAlias:i}}function dJ(n,o){let e=n.expression,t=/^\s$/,i=0,a=0,s=e.length-1;for(let d=0;d<e.length;d++){let p=e[d];if(p==="(")a=d+1,i++;else{if(t.test(p))continue;break}}if(i===0)return e;for(let d=e.length-1;d>-1;d--){let p=e[d];if(p===")"){if(s=d,i--,i===0)break}else{if(t.test(p))continue;break}}return i!==0?(o.push(new dn(n.sourceSpan,"Unclosed parentheses in expression")),null):e.slice(a,s)}var P3=class extends Bg{hasPipe=!1;visitPipe(){this.hasPipe=!0}},mJ=/^\d+\.?\d*(ms|s)?$/,pJ=/^\s$/,mN=new Map([[fl,es],[Lc,Od],[ns,Ea]]),ts=(function(n){return n.IDLE="idle",n.TIMER="timer",n.INTERACTION="interaction",n.IMMEDIATE="immediate",n.HOVER="hover",n.VIEWPORT="viewport",n.NEVER="never",n})(ts||{});function uJ({expression:n,sourceSpan:o},e,t){let i=n.indexOf("never"),a=new In(o.start.moveBy(i),o.start.moveBy(i+5)),s=lT(n,o),d=cT(n,o);i===-1?t.push(new dn(o,'Could not find "never" keyword in expression')):dT("never",e,t,new OP(a,o,s,null,d))}function rP({expression:n,sourceSpan:o},e,t,i){let a=n.indexOf("when"),s=new In(o.start.moveBy(a),o.start.moveBy(a+4)),d=lT(n,o),p=cT(n,o);if(a===-1)i.push(new dn(o,'Could not find "when" keyword in expression'));else{let u=A0(n,a+1),g=e.parseBinding(n.slice(u),!1,o,o.start.offset+u);dT("when",t,i,new Kb(g,o,d,s,p))}}function sP({expression:n,sourceSpan:o},e,t,i,a){let s=n.indexOf("on"),d=new In(o.start.moveBy(s),o.start.moveBy(s+2)),p=lT(n,o),u=cT(n,o);if(s===-1)i.push(new dn(o,'Could not find "on" keyword in expression'));else{let g=A0(n,s+1),C=n.startsWith("hydrate");new T3(n,e,g,o,t,i,C?xJ:bJ,C,p,d,u).parse()}}function lT(n,o){return n.startsWith("prefetch")?new In(o.start,o.start.moveBy(8)):null}function cT(n,o){return n.startsWith("hydrate")?new In(o.start,o.start.moveBy(7)):null}var T3=class{expression;bindingParser;start;span;triggers;errors;validator;isHydrationTrigger;prefetchSpan;onSourceSpan;hydrateSpan;index=0;tokens;constructor(o,e,t,i,a,s,d,p,u,g,C){this.expression=o,this.bindingParser=e,this.start=t,this.span=i,this.triggers=a,this.errors=s,this.validator=d,this.isHydrationTrigger=p,this.prefetchSpan=u,this.onSourceSpan=g,this.hydrateSpan=C,this.tokens=new E0().tokenize(o.slice(t))}parse(){for(;this.tokens.length>0&&this.index<this.tokens.length;){let o=this.token();if(!o.isIdentifier()){this.unexpectedToken(o);break}if(this.isFollowedByOrLast(Nr))this.consumeTrigger(o,[]),this.advance();else if(this.isFollowedByOrLast(ns)){this.advance();let e=this.errors.length,t=this.consumeParameters();if(this.errors.length!==e)break;this.consumeTrigger(o,t),this.advance()}else this.index<this.tokens.length-1&&this.unexpectedToken(this.tokens[this.index+1]);this.advance()}}advance(){this.index++}isFollowedByOrLast(o){return this.index===this.tokens.length-1?!0:this.tokens[this.index+1].isCharacter(o)}token(){return this.tokens[Math.min(this.index,this.tokens.length-1)]}consumeTrigger(o,e){let t=this.span.start.moveBy(this.start+o.index-this.tokens[0].index),i=new In(t,t.moveBy(o.strValue.length)),a=t.moveBy(this.token().end-o.index),s=o.index===0,d=s?this.onSourceSpan:null,p=s?this.prefetchSpan:null,u=s?this.hydrateSpan:null,g=new In(s?this.span.start:t,a);try{switch(o.toString()){case ts.IDLE:this.trackTrigger("idle",gJ(e,i,g,p,d,u));break;case ts.TIMER:this.trackTrigger("timer",hJ(e,i,g,this.prefetchSpan,this.onSourceSpan,this.hydrateSpan));break;case ts.INTERACTION:this.trackTrigger("interaction",vJ(e,i,g,this.prefetchSpan,this.onSourceSpan,this.hydrateSpan,this.validator));break;case ts.IMMEDIATE:this.trackTrigger("immediate",_J(e,i,g,this.prefetchSpan,this.onSourceSpan,this.hydrateSpan));break;case ts.HOVER:this.trackTrigger("hover",fJ(e,i,g,this.prefetchSpan,this.onSourceSpan,this.hydrateSpan,this.validator));break;case ts.VIEWPORT:this.trackTrigger("viewport",CJ(this.start,this.isHydrationTrigger,this.bindingParser,e,i,g,this.prefetchSpan,this.onSourceSpan,this.hydrateSpan,this.validator));break;default:throw new Error(`Unrecognized trigger type "${o}"`)}}catch(C){this.error(o,C.message)}}consumeParameters(){let o=[];if(!this.token().isCharacter(ns))return this.unexpectedToken(this.token()),o;this.advance();let e=[],t=[];for(;this.index<this.tokens.length;){let i=this.token();if(i.isCharacter(Ea)&&e.length===0){t.length&&o.push({expression:this.tokenRangeText(t),start:t[0].index});break}if(i.type===Cn.Character&&mN.has(i.numValue)&&e.push(mN.get(i.numValue)),e.length>0&&i.isCharacter(e[e.length-1])&&e.pop(),e.length===0&&i.isCharacter(Nr)&&t.length>0){o.push({expression:this.tokenRangeText(t),start:t[0].index}),this.advance(),t=[];continue}t.push(i),this.advance()}return(!this.token().isCharacter(Ea)||e.length>0)&&this.error(this.token(),"Unexpected end of expression"),this.index<this.tokens.length-1&&!this.tokens[this.index+1].isCharacter(Nr)&&this.unexpectedToken(this.tokens[this.index+1]),o}tokenRangeText(o){return o.length===0?"":this.expression.slice(this.start+o[0].index,this.start+o[o.length-1].end)}trackTrigger(o,e){dT(o,this.triggers,this.errors,e)}error(o,e){let t=this.span.start.moveBy(this.start+o.index),i=t.moveBy(o.end-o.index);this.errors.push(new dn(new In(t,i),e))}unexpectedToken(o){this.error(o,`Unexpected token "${o}"`)}};function dT(n,o,e,t){o[n]?e.push(new dn(t.sourceSpan,`Duplicate "${n}" trigger is not allowed`)):o[n]=t}function gJ(n,o,e,t,i,a){if(n.length>0)throw new Error(`"${ts.IDLE}" trigger cannot have parameters`);return new DP(o,e,t,i,a)}function hJ(n,o,e,t,i,a){if(n.length!==1)throw new Error(`"${ts.TIMER}" trigger must have exactly one parameter`);let s=Ox(n[0].expression);if(s===null)throw new Error(`Could not parse time value of trigger "${ts.TIMER}"`);return new AP(s,o,e,t,i,a)}function _J(n,o,e,t,i,a){if(n.length>0)throw new Error(`"${ts.IMMEDIATE}" trigger cannot have parameters`);return new IP(o,e,t,i,a)}function fJ(n,o,e,t,i,a,s){return s(ts.HOVER,n),new Xb(n[0]?.expression??null,o,e,t,i,a)}function vJ(n,o,e,t,i,a,s){return s(ts.INTERACTION,n),new Yb(n[0]?.expression??null,o,e,t,i,a)}function CJ(n,o,e,t,i,a,s,d,p,u){u(ts.VIEWPORT,t);let g,C;if(t.length===0)g=C=null;else if(!t[0].expression.startsWith("{"))g=t[0].expression,C=null;else{let M=e.parseBinding(t[0].expression,!1,a,a.start.offset+n+t[0].start);if(M.ast instanceof du){if(M.ast.keys.some(b=>b.kind==="spread"))throw new Error("Spread operator are not allowed in this context");if(M.ast.keys.some(b=>b.kind==="property"&&b.key==="root"))throw new Error('The "root" option is not supported in the options parameter of the "viewport" trigger')}else throw new Error('Options parameter of the "viewport" trigger must be an object literal');let x=M.ast.keys.findIndex(b=>b.kind==="property"&&b.key==="trigger");if(x===-1)g=null,C=M.ast;else{let b=M.ast.values[x],P=(k,S)=>S!==x;if(!(b instanceof zc)||!(b.receiver instanceof Hc))throw new Error('"trigger" option of the "viewport" trigger must be an identifier');g=b.name,C=new du(M.ast.span,M.ast.sourceSpan,M.ast.keys.filter(P),M.ast.values.filter(P))}}if(o&&g!==null)throw new Error('"viewport" hydration trigger cannot have a "trigger"');if(C){let M=E3.findDynamicNode(C);if(M!==null)throw new Error(`Options of the "viewport" trigger must be an object literal containing only literal values, but "${M.constructor.name}" was found`)}return new i0(g,C,i,a,s,d,p)}function bJ(n,o){if(o.length>1)throw new Error(`"${n}" trigger can only have zero or one parameters`)}function xJ(n,o){if(n===ts.VIEWPORT){if(o.length>1)throw new Error(`Hydration trigger "${n}" cannot have more than one parameter`);return}if(o.length>0)throw new Error(`Hydration trigger "${n}" cannot have parameters`)}function A0(n,o=0){let e=!1;for(let t=o;t<n.length;t++)if(pJ.test(n[t]))e=!0;else if(e)return t;return-1}function Ox(n){let o=n.match(mJ);if(!o)return null;let[e,t]=o;return parseFloat(e)*(t==="s"?1e3:1)}var E3=class n extends Bg{dynamicNode=null;static findDynamicNode(o){let e=new n;return e.visit(o),e.dynamicNode}visit(o){!(o instanceof xs)&&!(o instanceof Cs)&&!(o instanceof Qf)&&!(o instanceof du)?this.dynamicNode=o:super.visit(o)}},yJ=/^prefetch\s+when\s/,wJ=/^prefetch\s+on\s/,MJ=/^hydrate\s+when\s/,SJ=/^hydrate\s+on\s/,kJ=/^hydrate\s+never(\s*)$/,WF=/^minimum\s/,PJ=/^after\s/,TJ=/^when\s/,EJ=/^on\s/;function O3(n){return n==="placeholder"||n==="loading"||n==="error"}function OJ(n,o,e,t){let i=[],{placeholder:a,loading:s,error:d}=DJ(o,i,e),{triggers:p,prefetchTriggers:u,hydrateTriggers:g}=FJ(n,t,i),C=n.endSourceSpan,M=n.sourceSpan.end;if(o.length>0){let P=o[o.length-1];C=P.endSourceSpan,M=P.sourceSpan.end}let x=new In(n.sourceSpan.start,M);return{node:new mu(ko(e,n.children,n.children),p,u,g,a,s,d,n.nameSpan,x,n.sourceSpan,n.startSourceSpan,C,n.i18n),errors:i}}function DJ(n,o,e){let t=null,i=null,a=null;for(let s of n)try{if(!O3(s.name)){o.push(new dn(s.startSourceSpan,`Unrecognized block "@${s.name}"`));break}switch(s.name){case"placeholder":t!==null?o.push(new dn(s.startSourceSpan,"@defer block can only have one @placeholder block")):t=IJ(s,e);break;case"loading":i!==null?o.push(new dn(s.startSourceSpan,"@defer block can only have one @loading block")):i=AJ(s,e);break;case"error":a!==null?o.push(new dn(s.startSourceSpan,"@defer block can only have one @error block")):a=NJ(s,e);break}}catch(d){o.push(new dn(s.startSourceSpan,d.message))}return{placeholder:t,loading:i,error:a}}function IJ(n,o){let e=null;for(let t of n.parameters)if(WF.test(t.expression)){if(e!=null)throw new Error('@placeholder block can only have one "minimum" parameter');let i=Ox(t.expression.slice(A0(t.expression)));if(i===null)throw new Error('Could not parse time value of parameter "minimum"');e=i}else throw new Error(`Unrecognized parameter in @placeholder block: "${t.expression}"`);return new o0(ko(o,n.children,n.children),e,n.nameSpan,n.sourceSpan,n.startSourceSpan,n.endSourceSpan,n.i18n)}function AJ(n,o){let e=null,t=null;for(let i of n.parameters)if(PJ.test(i.expression)){if(e!=null)throw new Error('@loading block can only have one "after" parameter');let a=Ox(i.expression.slice(A0(i.expression)));if(a===null)throw new Error('Could not parse time value of parameter "after"');e=a}else if(WF.test(i.expression)){if(t!=null)throw new Error('@loading block can only have one "minimum" parameter');let a=Ox(i.expression.slice(A0(i.expression)));if(a===null)throw new Error('Could not parse time value of parameter "minimum"');t=a}else throw new Error(`Unrecognized parameter in @loading block: "${i.expression}"`);return new a0(ko(o,n.children,n.children),e,t,n.nameSpan,n.sourceSpan,n.startSourceSpan,n.endSourceSpan,n.i18n)}function NJ(n,o){if(n.parameters.length>0)throw new Error("@error block cannot have parameters");return new r0(ko(o,n.children,n.children),n.nameSpan,n.sourceSpan,n.startSourceSpan,n.endSourceSpan,n.i18n)}function FJ(n,o,e,t){let i={},a={},s={};for(let d of n.parameters)TJ.test(d.expression)?rP(d,o,i,e):EJ.test(d.expression)?sP(d,o,i,e):yJ.test(d.expression)?rP(d,o,a,e):wJ.test(d.expression)?sP(d,o,a,e):MJ.test(d.expression)?rP(d,o,s,e):SJ.test(d.expression)?sP(d,o,s,e):kJ.test(d.expression)?uJ(d,s,e):e.push(new dn(d.sourceSpan,"Unrecognized trigger"));return s.never&&Object.keys(s).length>1&&e.push(new dn(n.startSourceSpan,"Cannot specify additional `hydrate` triggers if `hydrate never` is present")),{triggers:i,prefetchTriggers:a,hydrateTriggers:s}}var RJ=/^(?:(bind-)|(let-)|(ref-|#)|(on-)|(bindon-)|(@))(.*)$/,pN=1,uN=2,gN=3,hN=4,_N=5,zJ=6,xf=7,bm={BANANA_BOX:{start:"[(",end:")]"},PROPERTY:{start:"[",end:"]"},EVENT:{start:"(",end:")"}},lP="*",LJ=new Set(["link","style","script","ng-template","ng-container","ng-content"]),VJ=new Set(["ngProjectAs","ngNonBindable"]);function BJ(n,o,e){let t=new D3(o,e),i=ko(t,n,n),a=o.errors.concat(t.errors),s={nodes:i,errors:a,styleUrls:t.styleUrls,styles:t.styles,ngContentSelectors:t.ngContentSelectors};return e.collectCommentNodes&&(s.commentNodes=t.commentNodes),s}var D3=class{bindingParser;options;errors=[];styles=[];styleUrls=[];ngContentSelectors=[];commentNodes=[];inI18nBlock=!1;processedNodes=new Set;constructor(o,e){this.bindingParser=o,this.options=e}visitElement(o){let e=Sb(o.i18n);e&&(this.inI18nBlock&&this.reportError("Cannot mark an element as translatable inside of a translatable section. Please remove the nested i18n marker.",o.sourceSpan),this.inI18nBlock=!0);let t=UF(o);if(t.type===Gs.SCRIPT)return null;if(t.type===Gs.STYLE){let S=jJ(o);return S!==null&&this.styles.push(S),null}else if(t.type===Gs.STYLESHEET&&BZ(t.hrefAttr))return this.styleUrls.push(t.hrefAttr),null;let i=jU(o.name),{attributes:a,boundEvents:s,references:d,variables:p,templateVariables:u,elementHasInlineTemplate:g,parsedProperties:C,templateParsedProperties:M,i18nAttrsMeta:x}=this.prepareAttributes(o.attrs,i),b=this.extractDirectives(o),P;t.nonBindable?P=ko(fN,o.children).flat(1/0):P=ko(this,o.children,o.children);let k;if(t.type===Gs.NG_CONTENT){let S=t.selectAttr,O=o.attrs.map(A=>this.visitAttribute(A));k=new Ug(S,O,P,o.isSelfClosing,o.sourceSpan,o.startSourceSpan,o.endSourceSpan,o.i18n),this.ngContentSelectors.push(S)}else if(i){let S=this.categorizePropertyAttributes(o.name,C,x);k=new Qs(o.name,a,S.bound,s,b,[],P,d,p,o.isSelfClosing,o.sourceSpan,o.startSourceSpan,o.endSourceSpan,o.i18n)}else{let S=this.categorizePropertyAttributes(o.name,C,x);if(o.name==="ng-container")for(let O of S.bound)O.type===Fi.Attribute&&this.reportError("Attribute bindings are not supported on ng-container. Use property bindings instead.",O.sourceSpan);k=new Uc(o.name,a,S.bound,s,b,P,d,o.isSelfClosing,o.sourceSpan,o.startSourceSpan,o.endSourceSpan,o.isVoid,o.i18n)}return g&&(k=this.wrapInTemplate(k,M,u,x,i,e)),e&&(this.inI18nBlock=!1),k}visitAttribute(o){return new $g(o.name,o.value,o.sourceSpan,o.keySpan,o.valueSpan,o.i18n)}visitText(o){return this.processedNodes.has(o)?null:this._visitTextWithInterpolation(o.value,o.sourceSpan,o.tokens,o.i18n)}visitExpansion(o){if(!o.i18n)return null;if(!Sb(o.i18n))throw new Error(`Invalid type "${o.i18n.constructor}" for "i18n" property of ${o.sourceSpan.toString()}. Expected a "Message"`);let e=o.i18n,t={},i={};return Object.keys(e.placeholders).forEach(a=>{let s=e.placeholders[a];if(a.startsWith(WU)){let d=a.trim(),p=this.bindingParser.parseInterpolationExpression(s.text,s.sourceSpan);t[d]=new jg(p,s.sourceSpan)}else i[a]=this._visitTextWithInterpolation(s.text,s.sourceSpan,null)}),new FN(t,i,o.sourceSpan,e)}visitExpansionCase(o){return null}visitComment(o){return this.options.collectCommentNodes&&this.commentNodes.push(new Rx(o.value||"",o.sourceSpan)),null}visitLetDeclaration(o,e){let t=this.bindingParser.parseBinding(o.value,!1,o.valueSpan,o.valueSpan.start.offset);return t.errors.length===0&&t.ast instanceof Ar&&this.reportError("@let declaration value cannot be empty",o.valueSpan),new q3(o.name,t,o.sourceSpan,o.nameSpan,o.valueSpan)}visitComponent(o){let e=Sb(o.i18n);if(e&&(this.inI18nBlock&&this.reportError("Cannot mark a component as translatable inside of a translatable section. Please remove the nested i18n marker.",o.sourceSpan),this.inI18nBlock=!0),o.tagName!==null&&LJ.has(o.tagName))return this.reportError(`Tag name "${o.tagName}" cannot be used as a component tag`,o.startSourceSpan),null;let{attributes:t,boundEvents:i,references:a,templateVariables:s,elementHasInlineTemplate:d,parsedProperties:p,templateParsedProperties:u,i18nAttrsMeta:g}=this.prepareAttributes(o.attrs,!1);this.validateSelectorlessReferences(a);let C=this.extractDirectives(o),M;o.attrs.find(P=>P.name==="ngNonBindable")?M=ko(fN,o.children).flat(1/0):M=ko(this,o.children,o.children);let x=this.categorizePropertyAttributes(o.tagName,p,g),b=new Ef(o.componentName,o.tagName,o.fullName,t,x.bound,i,C,M,a,o.isSelfClosing,o.sourceSpan,o.startSourceSpan,o.endSourceSpan,o.i18n);return d&&(b=this.wrapInTemplate(b,u,s,g,!1,e)),e&&(this.inI18nBlock=!1),b}visitDirective(){return null}visitBlockParameter(){return null}visitBlock(o,e){let t=Array.isArray(e)?e.indexOf(o):-1;if(t===-1)throw new Error("Visitor invoked incorrectly. Expecting visitBlock to be invoked siblings array as its context");if(this.processedNodes.has(o))return null;let i=null;switch(o.name){case"defer":i=OJ(o,this.findConnectedBlocks(t,e,O3),this,this.bindingParser);break;case"switch":i=oJ(o,this,this.bindingParser);break;case"for":i=iJ(o,this.findConnectedBlocks(t,e,lN),this,this.bindingParser);break;case"if":i=nJ(o,this.findConnectedBlocks(t,e,cN),this,this.bindingParser);break;default:let a;O3(o.name)?(a=`@${o.name} block can only be used after an @defer block.`,this.processedNodes.add(o)):lN(o.name)?(a=`@${o.name} block can only be used after an @for block.`,this.processedNodes.add(o)):cN(o.name)?(a=`@${o.name} block can only be used after an @if or @else if block.`,this.processedNodes.add(o)):a=`Unrecognized block @${o.name}.`,i={node:new ex(o.name,o.sourceSpan,o.nameSpan),errors:[new dn(o.sourceSpan,a)]};break}return this.errors.push(...i.errors),i.node}findConnectedBlocks(o,e,t){let i=[];for(let a=o+1;a<e.length;a++){let s=e[a];if(!(s instanceof k0)){if(s instanceof fu&&s.value.trim().length===0){this.processedNodes.add(s);continue}if(!(s instanceof _l)||!t(s.name))break;i.push(s),this.processedNodes.add(s)}}return i}categorizePropertyAttributes(o,e,t){let i=[],a=[];return e.forEach(s=>{let d=t[s.name];if(s.isLiteral)a.push(new $g(s.name,s.expression.source||"",s.sourceSpan,s.keySpan,s.valueSpan,d));else{let p=s.name.toLowerCase().startsWith("attr.on"),u=this.bindingParser.createBoundElementProperty(o,s,!p,!1);i.push(TP.fromBoundElementProperty(u,d))}}),{bound:i,literal:a}}prepareAttributes(o,e){let t=[],i=[],a=[],s=[],d=[],p={},u=[],g=[],C=!1;for(let M of o){let x=!1,b=vN(M.name),P=!1;if(M.i18n&&(p[M.name]=M.i18n),b.startsWith(lP)){C&&this.reportError("Can't have multiple template bindings on one element. Use only one attribute prefixed with *",M.sourceSpan),P=!0,C=!0;let k=M.value,S=b.substring(lP.length),O=[],A=M.valueSpan?M.valueSpan.fullStart.offset:M.sourceSpan.fullStart.offset+M.name.length;this.bindingParser.parseInlineTemplateBinding(S,k,M.sourceSpan,A,[],u,O,!0),g.push(...O.map(D=>new Om(D.name,D.value,D.sourceSpan,D.keySpan,D.valueSpan)))}else x=this.parseAttribute(e,M,[],t,i,a,s);!x&&!P&&d.push(this.visitAttribute(M))}return{attributes:d,boundEvents:i,references:s,variables:a,templateVariables:g,elementHasInlineTemplate:C,parsedProperties:t,templateParsedProperties:u,i18nAttrsMeta:p}}parseAttribute(o,e,t,i,a,s,d){let p=vN(e.name),u=e.value,g=e.sourceSpan,C=e.valueSpan?e.valueSpan.fullStart.offset:g.fullStart.offset;function M(S,O,A){let D=e.name.length-p.length,F=S.start.moveBy(O.length+D),I=F.moveBy(A.length);return new In(F,I,F,A)}let x=p.match(RJ);if(x){if(x[pN]!=null){let S=x[xf],O=M(g,x[pN],S);this.bindingParser.parsePropertyBinding(S,u,!1,!1,g,C,e.valueSpan,t,i,O)}else if(x[uN])if(o){let S=x[xf],O=M(g,x[uN],S);this.parseVariable(S,u,g,O,e.valueSpan,s)}else this.reportError('"let-" is only supported on ng-template elements.',g);else if(x[gN]){let S=x[xf],O=M(g,x[gN],S);this.parseReference(S,u,g,O,e.valueSpan,d)}else if(x[hN]){let S=[],O=x[xf],A=M(g,x[hN],O);this.bindingParser.parseEvent(O,u,!1,g,e.valueSpan||g,t,S,A),cP(S,a)}else if(x[_N]){let S=x[xf],O=M(g,x[_N],S);this.bindingParser.parsePropertyBinding(S,u,!1,!0,g,C,e.valueSpan,t,i,O),this.parseAssignmentEvent(S,u,g,e.valueSpan,t,a,O,C)}else if(x[zJ]){let S=M(g,"",p);this.bindingParser.parseLiteralAttr(p,u,g,C,e.valueSpan,t,i,S)}return!0}let b=null;if(p.startsWith(bm.BANANA_BOX.start)?b=bm.BANANA_BOX:p.startsWith(bm.PROPERTY.start)?b=bm.PROPERTY:p.startsWith(bm.EVENT.start)&&(b=bm.EVENT),b!==null&&p.endsWith(b.end)&&p.length>b.start.length+b.end.length){let S=p.substring(b.start.length,p.length-b.end.length),O=M(g,b.start,S);if(b.start===bm.BANANA_BOX.start)this.bindingParser.parsePropertyBinding(S,u,!1,!0,g,C,e.valueSpan,t,i,O),this.parseAssignmentEvent(S,u,g,e.valueSpan,t,a,O,C);else if(b.start===bm.PROPERTY.start)this.bindingParser.parsePropertyBinding(S,u,!1,!1,g,C,e.valueSpan,t,i,O);else{let A=[];this.bindingParser.parseEvent(S,u,!1,g,e.valueSpan||g,t,A,O),cP(A,a)}return!0}let P=M(g,"",p);return this.bindingParser.parsePropertyInterpolation(p,u,g,e.valueSpan,t,i,P,e.valueTokens??null)}extractDirectives(o){let e=o instanceof Jr?o.tagName:o.name,t=[],i=new Set;for(let a of o.directives){let s=!1;for(let x of a.attrs)x.name.startsWith(lP)?(s=!0,this.reportError(`Shorthand template syntax "${x.name}" is not supported inside a directive context`,x.sourceSpan)):VJ.has(x.name)&&(s=!0,this.reportError(`Attribute "${x.name}" is not supported in a directive context`,x.sourceSpan));if(!s&&i.has(a.name)&&(s=!0,this.reportError(`Cannot apply directive "${a.name}" multiple times on the same element`,a.sourceSpan)),s)continue;let{attributes:d,parsedProperties:p,boundEvents:u,references:g,i18nAttrsMeta:C}=this.prepareAttributes(a.attrs,!1);this.validateSelectorlessReferences(g);let{bound:M}=this.categorizePropertyAttributes(e,p,C);for(let x of M)x.type!==Fi.Property&&x.type!==Fi.TwoWay&&(s=!0,this.reportError("Binding is not supported in a directive context",x.sourceSpan));s||(i.add(a.name),t.push(new NN(a.name,d,M,u,g,a.sourceSpan,a.startSourceSpan,a.endSourceSpan,void 0)))}return t}filterAnimationAttributes(o){return o.filter(e=>!e.name.startsWith("animate."))}filterAnimationInputs(o){return o.filter(e=>e.type!==Fi.Animation)}wrapInTemplate(o,e,t,i,a,s){let d=this.categorizePropertyAttributes("ng-template",e,i),p=[];d.literal.forEach(M=>p.push(M)),d.bound.forEach(M=>p.push(M));let u={attributes:[],inputs:[],outputs:[]};(o instanceof Uc||o instanceof Ef)&&(u.attributes.push(...this.filterAnimationAttributes(o.attributes)),u.inputs.push(...this.filterAnimationInputs(o.inputs)),u.outputs.push(...o.outputs));let g=a&&s?void 0:o.i18n,C;return o instanceof Ef?C=o.tagName:o instanceof Qs?C=null:C=o.name,new Qs(C,u.attributes,u.inputs,u.outputs,[],p,[o],[],t,!1,o.sourceSpan,o.startSourceSpan,o.endSourceSpan,g)}_visitTextWithInterpolation(o,e,t,i){let a=yF(o),s=this.bindingParser.parseInterpolation(a,e,t);return s?new jg(s,e,i):new Qp(a,e)}parseVariable(o,e,t,i,a,s){o.indexOf("-")>-1?this.reportError('"-" is not allowed in variable names',t):o.length===0&&this.reportError("Variable does not have a name",t),s.push(new Om(o,e,t,i,a))}parseReference(o,e,t,i,a,s){o.indexOf("-")>-1?this.reportError('"-" is not allowed in reference names',t):o.length===0?this.reportError("Reference does not have a name",t):s.some(d=>d.name===o)&&this.reportError(`Reference "#${o}" is defined more than once`,t),s.push(new c0(o,e,t,i,a))}parseAssignmentEvent(o,e,t,i,a,s,d,p){let u=[];this.bindingParser.parseEvent(`${o}Change`,e,!0,t,i||t,a,u,d),cP(u,s)}validateSelectorlessReferences(o){if(o.length===0)return;let e=new Set;for(let t of o)t.value.length>0?this.reportError("Cannot specify a value for a local reference in this context",t.valueSpan||t.sourceSpan):e.has(t.name)?this.reportError("Duplicate reference names are not allowed",t.sourceSpan):e.add(t.name)}reportError(o,e,t=Sm.ERROR){this.errors.push(new dn(e,o,t))}},I3=class{visitElement(o){let e=UF(o);if(e.type===Gs.SCRIPT||e.type===Gs.STYLE||e.type===Gs.STYLESHEET)return null;let t=ko(this,o.children,null);return new Uc(o.name,ko(this,o.attrs),[],[],[],t,[],o.isSelfClosing,o.sourceSpan,o.startSourceSpan,o.endSourceSpan,o.isVoid)}visitComment(o){return null}visitAttribute(o){return new $g(o.name,o.value,o.sourceSpan,o.keySpan,o.valueSpan,o.i18n)}visitText(o){return new Qp(o.value,o.sourceSpan)}visitExpansion(o){return null}visitExpansionCase(o){return null}visitBlock(o,e){let t=[new Qp(o.startSourceSpan.toString(),o.startSourceSpan),...ko(this,o.children)];return o.endSourceSpan!==null&&t.push(new Qp(o.endSourceSpan.toString(),o.endSourceSpan)),t}visitBlockParameter(o,e){return null}visitLetDeclaration(o,e){return new Qp(`@let ${o.name} = ${o.value};`,o.sourceSpan)}visitComponent(o,e){let t=ko(this,o.children,null);return new Uc(o.fullName,ko(this,o.attrs),[],[],[],t,[],o.isSelfClosing,o.sourceSpan,o.startSourceSpan,o.endSourceSpan,!1)}visitDirective(o,e){return null}},fN=new I3;function vN(n){return/^data-/i.test(n)?n.substring(5):n}function cP(n,o){o.push(...n.map(e=>EP.fromParsedEvent(e)))}function jJ(n){return n.children.length!==1||!(n.children[0]instanceof fu)?null:n.children[0].value}var $J=[" ",`
|
||
`,"\r"," "];function HJ(n,o,e={}){let{preserveWhitespaces:t,enableI18nLegacyMessageIdFormat:i}=e,a=e.enableSelectorless??!1,s=Dx(a),p=new S3().parse(n,o,ze(q({leadingTriviaChars:$J},e),{tokenizeExpansionForms:!0,tokenizeBlocks:e.enableBlockSyntax??!0,tokenizeLet:e.enableLetSyntax??!0,selectorlessEnabled:a}));if(!e.alwaysAttemptHtmlToR3AstConversion&&p.errors&&p.errors.length>0){let D={preserveWhitespaces:t,errors:p.errors,nodes:[],styleUrls:[],styles:[],ngContentSelectors:[]};return e.collectCommentNodes&&(D.commentNodes=[]),D}let u=p.rootNodes,g=!(e.preserveSignificantWhitespace??!0),C=new Sx(!t,i,e.preserveSignificantWhitespace,g),M=C.visitAllWithErrors(u);if(!e.alwaysAttemptHtmlToR3AstConversion&&M.errors&&M.errors.length>0){let D={preserveWhitespaces:t,errors:M.errors,nodes:[],styleUrls:[],styles:[],ngContentSelectors:[]};return e.collectCommentNodes&&(D.commentNodes=[]),D}u=M.rootNodes,t||(u=ko(new wx(!0,void 0,!1),u),C.hasI18nMeta&&(u=ko(new Sx(!1,void 0,!0,g),u)));let{nodes:x,errors:b,styleUrls:P,styles:k,ngContentSelectors:S,commentNodes:O}=BJ(u,s,{collectCommentNodes:!!e.collectCommentNodes});b.push(...p.errors,...M.errors);let A={preserveWhitespaces:t,errors:b.length>0?b:null,nodes:x,styleUrls:P,styles:k,ngContentSelectors:S};return e.collectCommentNodes&&(A.commentNodes=O),A}var UJ=new Yg;function Dx(n=!1){return new y3(new Mx(new E0,n),UJ,[])}var GF="%COMP%",WJ=`_nghost-${GF}`,GJ=`_ngcontent-${GF}`;function qF(n,o,e){let t=new Am,i=H3(n.selector);return t.set("type",n.type.value),i.length>0&&t.set("selectors",kg(i)),n.queries.length>0&&t.set("contentQueries",VZ(n.queries,o,n.name)),n.viewQueries.length&&t.set("viewQuery",LZ(n.viewQueries,o,n.name)),t.set("hostBindings",eee(n.host,n.typeSourceSpan,e,o,n.selector||"",n.name,t)),t.set("inputs",q5(n.inputs,!0)),t.set("outputs",q5(n.outputs)),n.exportAs!==null&&t.set("exportAs",io(n.exportAs.map(a=>De(a)))),n.isStandalone===!1&&t.set("standalone",De(!1)),n.isSignal&&t.set("signals",De(!0)),t}function QF(n,o){let e=[],t=o.providers,i=o.viewProviders;if(t||i){let a=[t||new $c([])];i&&a.push(i),e.push(Ht(ge.ProvidersFeature).callFn(a))}if(o.hostDirectives?.length&&e.push(Ht(ge.HostDirectivesFeature).callFn([aee(o.hostDirectives)])),o.usesInheritance&&e.push(Ht(ge.InheritDefinitionFeature)),o.lifecycle.usesOnChanges&&e.push(Ht(ge.NgOnChangesFeature)),o.controlCreate!==null&&e.push(Ht(ge.ControlFeature).callFn([De(o.controlCreate.passThroughInput)])),"externalStyles"in o&&o.externalStyles?.length){let a=o.externalStyles.map(s=>De(s));e.push(Ht(ge.ExternalStylesFeature).callFn([io(a)]))}e.length&&n.set("features",io(e))}function qJ(n,o,e){let t=qF(n,o,e);QF(t,n);let i=Ht(ge.defineDirective).callFn([t.toLiteralMap()],void 0,!0),a=JJ(n);return{expression:i,type:a,statements:[]}}function QJ(n,o,e){let t=qF(n,o,e);QF(t,n);let i=n.selector&&Ag.parse(n.selector),a=i&&i[0];if(a){let b=a.getAttrs();b.length&&t.set("attrs",o.getConstLiteral(io(b.map(P=>P!=null?De(P):De(void 0))),!0))}let s=n.name,d=null;if(n.defer.mode===1&&n.defer.dependenciesFn!==null){let b=`${s}_DeferFn`;o.statements.push(new Ga(b,n.defer.dependenciesFn,void 0,ur.Final)),d=di(b)}let p=n.isStandalone&&!n.hasDirectiveDependencies?vs.DomOnly:vs.Full,u=uZ(n.name,n.template.nodes,o,p,n.relativeContextFilePath,n.i18nUseExternalIds,n.defer,d,n.relativeTemplatePath,FZ());NF(u,Dt.Tmpl);let g=aZ(u,o);if(u.contentSelectors!==null&&t.set("ngContentSelectors",u.contentSelectors),t.set("decls",De(u.root.decls)),t.set("vars",De(u.root.vars)),u.consts.length>0&&(u.constsInitializers.length>0?t.set("consts",Ys([],[...u.constsInitializers,new Ia(io(u.consts))])):t.set("consts",io(u.consts))),t.set("template",g),n.declarationListEmitMode!==3&&n.declarations.length>0)t.set("dependencies",XJ(io(n.declarations.map(b=>b.type)),n.declarationListEmitMode));else if(n.declarationListEmitMode===3){let b=[n.type.value];n.rawImports&&b.push(n.rawImports),t.set("dependencies",Ht(ge.getComponentDepsFactory).callFn(b))}n.encapsulation===null&&(n.encapsulation=$p.Emulated);let C=!!n.externalStyles?.length;if(n.styles&&n.styles.length){let P=(n.encapsulation==$p.Emulated?oee(n.styles,GJ,WJ):n.styles).reduce((k,S)=>(S.trim().length>0&&k.push(o.getConstLiteral(De(S))),k),[]);P.length>0&&(C=!0,t.set("styles",io(P)))}!C&&n.encapsulation===$p.Emulated&&(n.encapsulation=$p.None),n.encapsulation!==$p.Emulated&&t.set("encapsulation",De(n.encapsulation)),n.animations!==null&&t.set("data",yl([{key:"animation",value:n.animations,quoted:!1}])),n.changeDetection!==null&&(typeof n.changeDetection=="number"&&n.changeDetection!==$3.Default?t.set("changeDetection",De(n.changeDetection)):typeof n.changeDetection=="object"&&t.set("changeDetection",n.changeDetection));let M=Ht(ge.defineComponent).callFn([t.toLiteralMap()],void 0,!0),x=KJ(n);return{expression:M,type:x,statements:[]}}function KJ(n){let o=KF(n);return o.push(N3(n.template.ngContentSelectors)),o.push(gr(De(n.isStandalone))),o.push(XF(n)),n.isSignal&&o.push(gr(De(n.isSignal))),gr(Ht(ge.ComponentDeclaration,o))}function XJ(n,o){switch(o){case 0:return n;case 1:return Ys([],n);case 2:let e=n.prop("map").callFn([Ht(ge.resolveForwardRef)]);return Ys([],e);case 3:throw new Error("Unsupported with an array of pre-resolved dependencies")}}function YJ(n){return gr(De(n))}function A3(n){let o=Object.keys(n).map(e=>{let t=Array.isArray(n[e])?n[e][0]:n[e];return{key:e,value:De(t),quoted:!0}});return yl(o)}function N3(n){return n.length>0?gr(io(n.map(o=>De(o)))):Bc}function KF(n){let o=n.selector!==null?n.selector.replace(/\n/g,""):null;return[Fx(n.type.type,n.typeArgumentCount),o!==null?YJ(o):Bc,n.exportAs!==null?N3(n.exportAs):Bc,gr(ZJ(n)),gr(A3(n.outputs)),N3(n.queries.map(e=>e.propertyName))]}function ZJ(n){return yl(Object.keys(n.inputs).map(o=>{let e=n.inputs[o],t=[{key:"alias",value:De(e.bindingPropertyName),quoted:!0},{key:"required",value:De(e.required),quoted:!0}];return e.isSignal&&t.push({key:"isSignal",value:De(e.isSignal),quoted:!0}),{key:o,value:yl(t),quoted:!0}}))}function JJ(n){let o=KF(n);return o.push(Bc),o.push(gr(De(n.isStandalone))),o.push(XF(n)),n.isSignal&&o.push(gr(De(n.isSignal))),gr(Ht(ge.DirectiveDeclaration,o))}function eee(n,o,e,t,i,a,s){let d=e.createBoundHostProperties(n.properties,o),p=e.createDirectiveHostEventAsts(n.listeners,o);n.specialAttributes.styleAttr&&(n.attributes.style=De(n.specialAttributes.styleAttr)),n.specialAttributes.classAttr&&(n.attributes.class=De(n.specialAttributes.classAttr));let u=gZ({componentName:a,componentSelector:i,properties:d,events:p,attributes:n.attributes},e,t);NF(u,Dt.Host),s.set("hostAttrs",u.root.attributes);let g=u.root.vars;return g!==null&&g>0&&s.set("hostVars",De(g)),rZ(u)}function tee(n){let o={},e={},t={},i={};for(let a of Object.keys(n)){let s=n[a];if(a.startsWith("(")&&a.endsWith(")")){if(typeof s!="string")throw new Error("Event binding must be string");e[a.slice(1,-1)]=s}else if(a.startsWith("[")&&a.endsWith("]")){if(typeof s!="string")throw new Error("Property binding must be string");t[a.slice(1,-1)]=s}else switch(a){case"class":if(typeof s!="string")throw new Error("Class binding must be string");i.classAttr=s;break;case"style":if(typeof s!="string")throw new Error("Style binding must be string");i.styleAttr=s;break;default:typeof s=="string"?o[a]=De(s):o[a]=s}}return{attributes:o,listeners:e,properties:t,specialAttributes:i}}function nee(n,o){let e=Dx();return e.createDirectiveHostEventAsts(n.listeners,o),e.createBoundHostProperties(n.properties,o),iee(n,e,o),e.errors}function iee(n,o,e){for(let t in n.properties){let i=t.startsWith("attr."),a=i?t.slice(5):t;if(a.toLowerCase().startsWith("on")){let s=i?"attribute":"property",d=`(${a.slice(2)})=...`,p=`Binding to event ${s} '${a}' is disallowed for security reasons, please use ${d}`;i||(p+=`
|
||
If '${t}' is a directive input, make sure the directive is imported by the current module.`),o.errors.push(new dn(e,p))}}}function oee(n,o,e){let t=new UP;return n.map(i=>t.shimCssText(i,o,e))}function XF(n){return n.hostDirectives?.length?gr(io(n.hostDirectives.map(o=>yl([{key:"directive",value:N0(o.directive.type),quoted:!1},{key:"inputs",value:A3(o.inputs||{}),quoted:!1},{key:"outputs",value:A3(o.outputs||{}),quoted:!1}])))):Bc}function aee(n){let o=[],e=!1;for(let t of n){if(!t.inputs&&!t.outputs)o.push(t.directive.type);else{let i=[{key:"directive",value:t.directive.type,quoted:!1}];if(t.inputs){let a=CN(t.inputs);a&&i.push({key:"inputs",value:a,quoted:!1})}if(t.outputs){let a=CN(t.outputs);a&&i.push({key:"outputs",value:a,quoted:!1})}o.push(yl(i))}t.isForwardReference&&(e=!0)}return e?new Pm([],[new Ia(io(o))]):io(o)}function CN(n){let o=[];for(let e in n)n.hasOwnProperty(e)&&o.push(De(e),De(n[e]));return o.length>0?io(o):null}var F3=class extends Bg{visit(o){o instanceof xs?this.visit(o.ast):o.visit(this)}visitElement(o){this.visitAllTemplateNodes(o.attributes),this.visitAllTemplateNodes(o.inputs),this.visitAllTemplateNodes(o.outputs),this.visitAllTemplateNodes(o.directives),this.visitAllTemplateNodes(o.references),this.visitAllTemplateNodes(o.children)}visitTemplate(o){this.visitAllTemplateNodes(o.attributes),this.visitAllTemplateNodes(o.inputs),this.visitAllTemplateNodes(o.outputs),this.visitAllTemplateNodes(o.directives),this.visitAllTemplateNodes(o.templateAttrs),this.visitAllTemplateNodes(o.variables),this.visitAllTemplateNodes(o.references),this.visitAllTemplateNodes(o.children)}visitContent(o){this.visitAllTemplateNodes(o.children)}visitBoundAttribute(o){this.visit(o.value)}visitBoundEvent(o){this.visit(o.handler)}visitBoundText(o){this.visit(o.value)}visitIcu(o){Object.keys(o.vars).forEach(e=>this.visit(o.vars[e])),Object.keys(o.placeholders).forEach(e=>this.visit(o.placeholders[e]))}visitDeferredBlock(o){o.visitAll(this)}visitDeferredTrigger(o){o instanceof Kb?this.visit(o.value):o instanceof i0&&o.options!==null&&this.visit(o.options)}visitDeferredBlockPlaceholder(o){this.visitAllTemplateNodes(o.children)}visitDeferredBlockError(o){this.visitAllTemplateNodes(o.children)}visitDeferredBlockLoading(o){this.visitAllTemplateNodes(o.children)}visitSwitchBlock(o){this.visit(o.expression),this.visitAllTemplateNodes(o.groups)}visitSwitchBlockCase(o){o.expression&&this.visit(o.expression)}visitSwitchBlockCaseGroup(o){this.visitAllTemplateNodes(o.cases),this.visitAllTemplateNodes(o.children)}visitSwitchExhaustiveCheck(o){}visitForLoopBlock(o){o.item.visit(this),this.visitAllTemplateNodes(o.contextVariables),this.visit(o.expression),this.visitAllTemplateNodes(o.children),o.empty?.visit(this)}visitForLoopBlockEmpty(o){this.visitAllTemplateNodes(o.children)}visitIfBlock(o){this.visitAllTemplateNodes(o.branches)}visitIfBlockBranch(o){o.expression&&this.visit(o.expression),o.expressionAlias?.visit(this),this.visitAllTemplateNodes(o.children)}visitLetDeclaration(o){this.visit(o.value)}visitComponent(o){this.visitAllTemplateNodes(o.attributes),this.visitAllTemplateNodes(o.inputs),this.visitAllTemplateNodes(o.outputs),this.visitAllTemplateNodes(o.directives),this.visitAllTemplateNodes(o.references),this.visitAllTemplateNodes(o.children)}visitDirective(o){this.visitAllTemplateNodes(o.attributes),this.visitAllTemplateNodes(o.inputs),this.visitAllTemplateNodes(o.outputs),this.visitAllTemplateNodes(o.references)}visitVariable(o){}visitReference(o){}visitTextAttribute(o){}visitText(o){}visitUnknownBlock(o){}visitAllTemplateNodes(o){for(let e of o)this.visit(e)}};var R3=class{directiveMatcher;constructor(o){this.directiveMatcher=o}bind(o){if(!o.template&&!o.host)throw new Error("Empty bound targets are not supported");let e=new Map,t=[],i=new Set,a=new Map,s=new Map,d=new Map,p=new Map,u=new Map,g=new Map,C=new Set,M=new Set,x=[];if(o.template){let b=Ix.apply(o.template);ree(b,d),z3.apply(o.template,this.directiveMatcher,e,t,i,a,s),Ax.applyWithScope(o.template,b,p,u,g,C,M,x)}return o.host&&(e.set(o.host.node,o.host.directives),Ax.applyWithScope(o.host.node,Ix.apply(o.host.node),p,u,g,C,M,x)),new L3(o,e,t,i,a,s,p,u,g,d,C,M,x)}},Ix=class n{parentScope;rootNode;namedEntities=new Map;elementLikeInScope=new Set;childScopes=new Map;isDeferred;constructor(o,e){this.parentScope=o,this.rootNode=e,this.isDeferred=o!==null&&o.isDeferred?!0:e instanceof mu}static newRootScope(){return new n(null,null)}static apply(o){let e=n.newRootScope();return e.ingest(o),e}ingest(o){o instanceof Qs?(o.variables.forEach(e=>this.visitVariable(e)),o.children.forEach(e=>e.visit(this))):o instanceof Yp?(o.expressionAlias!==null&&this.visitVariable(o.expressionAlias),o.children.forEach(e=>e.visit(this))):o instanceof Hg?(this.visitVariable(o.item),o.contextVariables.forEach(e=>this.visitVariable(e)),o.children.forEach(e=>e.visit(this))):o instanceof s0||o instanceof l0||o instanceof mu||o instanceof r0||o instanceof o0||o instanceof a0||o instanceof Ug?o.children.forEach(e=>e.visit(this)):o instanceof d0||o.forEach(e=>e.visit(this))}visitElement(o){this.visitElementLike(o)}visitTemplate(o){o.directives.forEach(e=>e.visit(this)),o.references.forEach(e=>this.visitReference(e)),this.ingestScopedNode(o)}visitVariable(o){this.maybeDeclare(o)}visitReference(o){this.maybeDeclare(o)}visitDeferredBlock(o){this.ingestScopedNode(o),o.placeholder?.visit(this),o.loading?.visit(this),o.error?.visit(this)}visitDeferredBlockPlaceholder(o){this.ingestScopedNode(o)}visitDeferredBlockError(o){this.ingestScopedNode(o)}visitDeferredBlockLoading(o){this.ingestScopedNode(o)}visitSwitchBlock(o){o.groups.forEach(e=>e.visit(this))}visitSwitchBlockCase(o){}visitSwitchBlockCaseGroup(o){this.ingestScopedNode(o)}visitSwitchExhaustiveCheck(o){}visitForLoopBlock(o){this.ingestScopedNode(o),o.empty?.visit(this)}visitForLoopBlockEmpty(o){this.ingestScopedNode(o)}visitIfBlock(o){o.branches.forEach(e=>e.visit(this))}visitIfBlockBranch(o){this.ingestScopedNode(o)}visitContent(o){this.ingestScopedNode(o)}visitLetDeclaration(o){this.maybeDeclare(o)}visitComponent(o){this.visitElementLike(o)}visitDirective(o){o.references.forEach(e=>this.visitReference(e))}visitBoundAttribute(o){}visitBoundEvent(o){}visitBoundText(o){}visitText(o){}visitTextAttribute(o){}visitIcu(o){}visitDeferredTrigger(o){}visitUnknownBlock(o){}visitElementLike(o){o.directives.forEach(e=>e.visit(this)),o.references.forEach(e=>this.visitReference(e)),o.children.forEach(e=>e.visit(this)),this.elementLikeInScope.add(o)}maybeDeclare(o){this.namedEntities.has(o.name)||this.namedEntities.set(o.name,o)}lookup(o){return this.namedEntities.has(o)?this.namedEntities.get(o):this.parentScope!==null?this.parentScope.lookup(o):null}getChildScope(o){let e=this.childScopes.get(o);if(e===void 0)throw new Error(`Assertion error: child scope for ${o} not found`);return e}ingestScopedNode(o){let e=new n(this,o);e.ingest(o),this.childScopes.set(o,e)}},z3=class n{directiveMatcher;directives;eagerDirectives;missingDirectives;bindings;references;isInDeferBlock=!1;constructor(o,e,t,i,a,s){this.directiveMatcher=o,this.directives=e,this.eagerDirectives=t,this.missingDirectives=i,this.bindings=a,this.references=s}static apply(o,e,t,i,a,s,d){new n(e,t,i,a,s,d).ingest(o)}ingest(o){o.forEach(e=>e.visit(this))}visitElement(o){this.visitElementOrTemplate(o)}visitTemplate(o){this.visitElementOrTemplate(o)}visitDeferredBlock(o){let e=this.isInDeferBlock;this.isInDeferBlock=!0,o.children.forEach(t=>t.visit(this)),this.isInDeferBlock=e,o.placeholder?.visit(this),o.loading?.visit(this),o.error?.visit(this)}visitDeferredBlockPlaceholder(o){o.children.forEach(e=>e.visit(this))}visitDeferredBlockError(o){o.children.forEach(e=>e.visit(this))}visitDeferredBlockLoading(o){o.children.forEach(e=>e.visit(this))}visitSwitchBlock(o){o.groups.forEach(e=>e.visit(this))}visitSwitchBlockCase(o){}visitSwitchBlockCaseGroup(o){o.children.forEach(e=>e.visit(this))}visitSwitchExhaustiveCheck(o){}visitForLoopBlock(o){o.item.visit(this),o.contextVariables.forEach(e=>e.visit(this)),o.children.forEach(e=>e.visit(this)),o.empty?.visit(this)}visitForLoopBlockEmpty(o){o.children.forEach(e=>e.visit(this))}visitIfBlock(o){o.branches.forEach(e=>e.visit(this))}visitIfBlockBranch(o){o.expressionAlias?.visit(this),o.children.forEach(e=>e.visit(this))}visitContent(o){o.children.forEach(e=>e.visit(this))}visitComponent(o){if(this.directiveMatcher instanceof Pb){let e=this.directiveMatcher.match(o.componentName);e.length>0?this.trackSelectorlessMatchesAndDirectives(o,e):this.missingDirectives.add(o.componentName)}o.directives.forEach(e=>e.visit(this)),o.children.forEach(e=>e.visit(this))}visitDirective(o){if(this.directiveMatcher instanceof Pb){let e=this.directiveMatcher.match(o.name);e.length>0?this.trackSelectorlessMatchesAndDirectives(o,e):this.missingDirectives.add(o.name)}}visitElementOrTemplate(o){if(this.directiveMatcher instanceof kb){let e=[],t=QU(o);this.directiveMatcher.match(t,(i,a)=>e.push(...a)),this.trackSelectorBasedBindingsAndDirectives(o,e)}else o.references.forEach(e=>{e.value.trim()===""&&this.references.set(e,o)});o.directives.forEach(e=>e.visit(this)),o.children.forEach(e=>e.visit(this))}trackMatchedDirectives(o,e){e.length>0&&(this.directives.set(o,e),this.isInDeferBlock||this.eagerDirectives.push(...e))}trackSelectorlessMatchesAndDirectives(o,e){if(e.length===0)return;this.trackMatchedDirectives(o,e);let t=(i,a,s)=>{i[s].hasBindingPropertyName(a.name)&&this.bindings.set(a,i)};for(let i of e)o.inputs.forEach(a=>t(i,a,"inputs")),o.attributes.forEach(a=>t(i,a,"inputs")),o.outputs.forEach(a=>t(i,a,"outputs"));o.references.forEach(i=>this.references.set(i,{directive:e[0],node:o}))}trackSelectorBasedBindingsAndDirectives(o,e){this.trackMatchedDirectives(o,e),o.references.forEach(i=>{let a=null;if(i.value.trim()==="")a=e.find(s=>s.isComponent)||null;else if(a=e.find(s=>s.exportAs!==null&&s.exportAs.some(d=>d===i.value))||null,a===null)return;a!==null?this.references.set(i,{directive:a,node:o}):this.references.set(i,o)});let t=(i,a)=>{let s=e.find(p=>p[a].hasBindingPropertyName(i.name)),d=s!==void 0?s:o;this.bindings.set(i,d)};o.inputs.forEach(i=>t(i,"inputs")),o.attributes.forEach(i=>t(i,"inputs")),o instanceof Qs&&o.templateAttrs.forEach(i=>t(i,"inputs")),o.outputs.forEach(i=>t(i,"outputs"))}visitVariable(o){}visitReference(o){}visitTextAttribute(o){}visitBoundAttribute(o){}visitBoundEvent(o){}visitBoundAttributeOrEvent(o){}visitText(o){}visitBoundText(o){}visitIcu(o){}visitDeferredTrigger(o){}visitUnknownBlock(o){}visitLetDeclaration(o){}},Ax=class n extends F3{bindings;symbols;usedPipes;eagerPipes;deferBlocks;nestingLevel;scope;rootNode;level;visitNode=o=>o.visit(this);constructor(o,e,t,i,a,s,d,p,u){super(),this.bindings=o,this.symbols=e,this.usedPipes=t,this.eagerPipes=i,this.deferBlocks=a,this.nestingLevel=s,this.scope=d,this.rootNode=p,this.level=u}static applyWithScope(o,e,t,i,a,s,d,p){let u=o instanceof Qs?o:null;new n(t,i,s,d,p,a,e,u,0).ingest(o)}ingest(o){if(o instanceof Qs)o.variables.forEach(this.visitNode),o.children.forEach(this.visitNode),this.nestingLevel.set(o,this.level);else if(o instanceof Yp)o.expressionAlias!==null&&this.visitNode(o.expressionAlias),o.children.forEach(this.visitNode),this.nestingLevel.set(o,this.level);else if(o instanceof Hg)this.visitNode(o.item),o.contextVariables.forEach(e=>this.visitNode(e)),o.trackBy.visit(this),o.children.forEach(this.visitNode),this.nestingLevel.set(o,this.level);else if(o instanceof mu){if(this.scope.rootNode!==o)throw new Error(`Assertion error: resolved incorrect scope for deferred block ${o}`);this.deferBlocks.push([o,this.scope]),o.children.forEach(e=>e.visit(this)),this.nestingLevel.set(o,this.level)}else o instanceof s0||o instanceof l0||o instanceof r0||o instanceof o0||o instanceof a0||o instanceof Ug?(o.children.forEach(e=>e.visit(this)),this.nestingLevel.set(o,this.level)):o instanceof d0?this.nestingLevel.set(o,0):o.forEach(this.visitNode)}visitTemplate(o){o.inputs.forEach(this.visitNode),o.outputs.forEach(this.visitNode),o.directives.forEach(this.visitNode),o.templateAttrs.forEach(this.visitNode),o.references.forEach(this.visitNode),this.ingestScopedNode(o)}visitVariable(o){this.rootNode!==null&&this.symbols.set(o,this.rootNode)}visitReference(o){this.rootNode!==null&&this.symbols.set(o,this.rootNode)}visitDeferredBlock(o){this.ingestScopedNode(o),o.triggers.when?.value.visit(this),o.prefetchTriggers.when?.value.visit(this),o.hydrateTriggers.when?.value.visit(this),o.hydrateTriggers.never?.visit(this),o.placeholder&&this.visitNode(o.placeholder),o.loading&&this.visitNode(o.loading),o.error&&this.visitNode(o.error)}visitDeferredBlockPlaceholder(o){this.ingestScopedNode(o)}visitDeferredBlockError(o){this.ingestScopedNode(o)}visitDeferredBlockLoading(o){this.ingestScopedNode(o)}visitSwitchBlockCase(o){o.expression?.visit(this)}visitSwitchBlockCaseGroup(o){o.cases.forEach(e=>e.visit(this)),this.ingestScopedNode(o)}visitSwitchExhaustiveCheck(o){}visitForLoopBlock(o){o.expression.visit(this),this.ingestScopedNode(o),o.empty?.visit(this)}visitForLoopBlockEmpty(o){this.ingestScopedNode(o)}visitIfBlockBranch(o){o.expression?.visit(this),this.ingestScopedNode(o)}visitContent(o){this.ingestScopedNode(o)}visitLetDeclaration(o){super.visitLetDeclaration(o),this.rootNode!==null&&this.symbols.set(o,this.rootNode)}visitPipe(o,e){return this.usedPipes.add(o.name),this.scope.isDeferred||this.eagerPipes.add(o.name),super.visitPipe(o,e)}visitPropertyRead(o,e){return this.maybeMap(o,o.name),super.visitPropertyRead(o,e)}visitSafePropertyRead(o,e){return this.maybeMap(o,o.name),super.visitSafePropertyRead(o,e)}ingestScopedNode(o){let e=this.scope.getChildScope(o);new n(this.bindings,this.symbols,this.usedPipes,this.eagerPipes,this.deferBlocks,this.nestingLevel,e,o,this.level+1).ingest(o)}maybeMap(o,e){if(!(o.receiver instanceof Hc))return;let t=this.scope.lookup(e);t!==null&&this.bindings.set(o,t)}},L3=class{target;directives;eagerDirectives;missingDirectives;bindings;references;exprTargets;symbols;nestingLevel;scopedNodeEntities;usedPipes;eagerPipes;deferredBlocks;deferredScopes;constructor(o,e,t,i,a,s,d,p,u,g,C,M,x){this.target=o,this.directives=e,this.eagerDirectives=t,this.missingDirectives=i,this.bindings=a,this.references=s,this.exprTargets=d,this.symbols=p,this.nestingLevel=u,this.scopedNodeEntities=g,this.usedPipes=C,this.eagerPipes=M,this.deferredBlocks=x.map(b=>b[0]),this.deferredScopes=new Map(x)}getEntitiesInScope(o){return this.scopedNodeEntities.get(o)??new Set}getDirectivesOfNode(o){return this.directives.get(o)||null}getReferenceTarget(o){return this.references.get(o)||null}getConsumerOfBinding(o){return this.bindings.get(o)||null}getExpressionTarget(o){return this.exprTargets.get(o)||null}getDefinitionNodeOfSymbol(o){return this.symbols.get(o)||null}getNestingLevel(o){return this.nestingLevel.get(o)||0}getUsedDirectives(){let o=new Set;return this.directives.forEach(e=>e.forEach(t=>o.add(t))),Array.from(o.values())}getEagerlyUsedDirectives(){let o=new Set(this.eagerDirectives);return Array.from(o.values())}getUsedPipes(){return Array.from(this.usedPipes)}getEagerlyUsedPipes(){return Array.from(this.eagerPipes)}getDeferBlocks(){return this.deferredBlocks}getDeferredTriggerTarget(o,e){if(!(e instanceof Yb)&&!(e instanceof i0)&&!(e instanceof Xb))return null;let t=e.reference;if(t===null){let a=null;if(o.placeholder!==null){for(let s of o.placeholder.children)if(!(s instanceof Rx)){if(a!==null)return null;s instanceof Uc&&(a=s)}}return a}let i=this.findEntityInScope(o,t);if(i instanceof c0&&this.getDefinitionNodeOfSymbol(i)!==o){let a=this.getReferenceTarget(i);if(a!==null)return this.referenceTargetToElement(a)}if(o.placeholder!==null){let a=this.findEntityInScope(o.placeholder,t),s=a instanceof c0?this.getReferenceTarget(a):null;if(s!==null)return this.referenceTargetToElement(s)}return null}isDeferred(o){for(let e of this.deferredBlocks){if(!this.deferredScopes.has(e))continue;let t=[this.deferredScopes.get(e)];for(;t.length>0;){let i=t.pop();if(i.elementLikeInScope.has(o))return!0;t.push(...i.childScopes.values())}}return!1}referencedDirectiveExists(o){return!this.missingDirectives.has(o)}findEntityInScope(o,e){let t=this.getEntitiesInScope(o);for(let i of t)if(i.name===e)return i;return null}referenceTargetToElement(o){return o instanceof Uc?o:o instanceof Qs||o.node instanceof Ef||o.node instanceof NN||o.node instanceof d0?null:this.referenceTargetToElement(o.node)}};function ree(n,o){let e=new Map;function t(a){if(e.has(a.rootNode))return e.get(a.rootNode);let s=a.namedEntities,d;return a.parentScope!==null?d=new Map([...t(a.parentScope),...s]):d=new Map(s),e.set(a.rootNode,d),d}let i=[n];for(;i.length>0;){let a=i.pop();for(let s of a.childScopes.values())i.push(s);t(a)}for(let[a,s]of e)o.set(a,new Set(s.values()))}var V3=class{},B3=class{jitEvaluator;FactoryTarget=Ed;ResourceLoader=V3;elementSchemaRegistry=new Yg;constructor(o=new jP){this.jitEvaluator=o}compilePipe(o,e,t){let i={name:t.name,type:Ua(t.type),typeArgumentCount:0,pipeName:t.pipeName,pure:t.pure,isStandalone:t.isStandalone},a=o6(i);return this.jitExpression(a.expression,o,e,[])}compilePipeDeclaration(o,e,t){let i=wee(t),a=o6(i);return this.jitExpression(a.expression,o,e,[])}compileInjectable(o,e,t){let{expression:i,statements:a}=Q5({name:t.name,type:Ua(t.type),typeArgumentCount:t.typeArgumentCount,providedIn:SN(t.providedIn),useClass:yg(t,"useClass"),useFactory:MN(t,"useFactory"),useValue:yg(t,"useValue"),useExisting:yg(t,"useExisting"),deps:t.deps?.map(e8)},!0);return this.jitExpression(i,o,e,a)}compileInjectableDeclaration(o,e,t){let{expression:i,statements:a}=Q5({name:t.type.name,type:Ua(t.type),typeArgumentCount:0,providedIn:SN(t.providedIn),useClass:yg(t,"useClass"),useFactory:MN(t,"useFactory"),useValue:yg(t,"useValue"),useExisting:yg(t,"useExisting"),deps:t.deps?.map(kN)},!0);return this.jitExpression(i,o,e,a)}compileInjector(o,e,t){let i={type:Ua(t.type),providers:t.providers&&t.providers.length>0?new _i(t.providers):null,imports:t.imports.map(s=>new _i(s))},a=i6(i);return this.jitExpression(a.expression,o,e,[])}compileInjectorDeclaration(o,e,t){let i=Mee(t),a=i6(i);return this.jitExpression(a.expression,o,e,[])}compileNgModule(o,e,t){let i={kind:km.Global,type:Ua(t.type),bootstrap:t.bootstrap.map(Ua),declarations:t.declarations.map(Ua),publicDeclarationTypes:null,imports:t.imports.map(Ua),includeImportTypes:!0,exports:t.exports.map(Ua),selectorScopeMode:rx.Inline,containsForwardDecls:!1,schemas:t.schemas?t.schemas.map(Ua):null,id:t.id?new _i(t.id):null},a=gW(i);return this.jitExpression(a.expression,o,e,[])}compileNgModuleDeclaration(o,e,t){let i=hW(t);return this.jitExpression(i,o,e,[])}compileDirective(o,e,t){let i=yN(t);return this.compileDirectiveFromMeta(o,e,i)}compileDirectiveDeclaration(o,e,t){let i=this.createParseSourceSpan("Directive",t.type.name,e),a=ZF(t,i);return this.compileDirectiveFromMeta(o,e,a)}compileDirectiveFromMeta(o,e,t){let i=new zb,a=Dx(),s=qJ(t,i,a);return this.jitExpression(s.expression,o,e,i.statements)}compileComponent(o,e,t){let{template:i,defer:a}=JF(t.template,t.name,e,t.preserveWhitespaces,void 0),s=ze(q(q({},t),yN(t)),{selector:t.selector||this.elementSchemaRegistry.getDefaultComponentElementName(),template:i,declarations:t.declarations.map(dee),declarationListEmitMode:0,defer:a,styles:[...t.styles,...i.styles],encapsulation:t.encapsulation,changeDetection:t.changeDetection??null,animations:t.animations!=null?new _i(t.animations):null,viewProviders:t.viewProviders!=null?new _i(t.viewProviders):null,relativeContextFilePath:"",i18nUseExternalIds:!0,relativeTemplatePath:null}),d=`ng:///${t.name}.js`;return this.compileComponentFromMeta(o,d,s)}compileComponentDeclaration(o,e,t){let i=this.createParseSourceSpan("Component",t.type.name,e),a=cee(t,i,e);return this.compileComponentFromMeta(o,e,a)}compileComponentFromMeta(o,e,t){let i=new zb,a=Dx(),s=QJ(t,i,a);return this.jitExpression(s.expression,o,e,i.statements)}compileFactory(o,e,t){let i=Hp({name:t.name,type:Ua(t.type),typeArgumentCount:t.typeArgumentCount,deps:uee(t.deps),target:t.target});return this.jitExpression(i.expression,o,e,i.statements)}compileFactoryDeclaration(o,e,t){let i=Hp({name:t.type.name,type:Ua(t.type),typeArgumentCount:0,deps:Array.isArray(t.deps)?t.deps.map(kN):t.deps,target:t.target});return this.jitExpression(i.expression,o,e,i.statements)}createParseSourceSpan(o,e,t){return sW(o,e,t)}jitExpression(o,e,t,i){let a=[...i,new Ga("$def",o,void 0,ur.Exported)];return this.jitEvaluator.evaluateStatements(t,a,new HP(e),!0).$def}};function bN(n){return ze(q({},n),{isSignal:n.isSignal,predicate:YF(n.predicate),read:n.read?new _i(n.read):null,static:n.static,emitDistinctChangesOnly:n.emitDistinctChangesOnly})}function xN(n){return{propertyName:n.propertyName,first:n.first??!1,predicate:YF(n.predicate),descendants:n.descendants??!1,read:n.read?new _i(n.read):null,static:n.static??!1,emitDistinctChangesOnly:n.emitDistinctChangesOnly??!0,isSignal:!!n.isSignal}}function YF(n){return Array.isArray(n)?n:G3(new _i(n),1)}function yN(n){let o=yee(n.inputs||[]),e=mP(n.outputs||[]),t=n.propMetadata,i={},a={};for(let d in t)t.hasOwnProperty(d)&&t[d].forEach(p=>{vee(p)?i[d]={bindingPropertyName:p.alias||d,classPropertyName:d,required:p.required||!1,isSignal:!!p.isSignal,transformFunction:p.transform!=null?new _i(p.transform):null}:Cee(p)&&(a[d]=p.alias||d)});let s=n.hostDirectives?.length?n.hostDirectives.map(d=>typeof d=="function"?{directive:Ua(d),inputs:null,outputs:null,isForwardReference:!1}:{directive:Ua(d.directive),isForwardReference:!1,inputs:d.inputs?mP(d.inputs):null,outputs:d.outputs?mP(d.outputs):null}):null;return ze(q({},n),{typeArgumentCount:0,typeSourceSpan:n.typeSourceSpan,type:Ua(n.type),deps:null,host:q({},hee(n.propMetadata,n.typeSourceSpan,n.host)),inputs:q(q({},o),i),outputs:q(q({},e),a),queries:n.queries.map(bN),providers:n.providers!=null?new _i(n.providers):null,viewQueries:n.viewQueries.map(bN),hostDirectives:s})}function ZF(n,o){let e=n.hostDirectives?.length?n.hostDirectives.map(t=>({directive:Ua(t.directive),isForwardReference:!1,inputs:t.inputs?wN(t.inputs):null,outputs:t.outputs?wN(t.outputs):null})):null;return{name:n.type.name,type:Ua(n.type),typeSourceSpan:o,selector:n.selector??null,inputs:n.inputs?bee(n.inputs):{},outputs:n.outputs??{},host:see(n.host),queries:(n.queries??[]).map(xN),viewQueries:(n.viewQueries??[]).map(xN),providers:n.providers!==void 0?new _i(n.providers):null,exportAs:n.exportAs??null,usesInheritance:n.usesInheritance??!1,controlCreate:n.controlCreate??null,lifecycle:{usesOnChanges:n.usesOnChanges??!1},deps:null,typeArgumentCount:0,isStandalone:n.isStandalone??AN(n.version),isSignal:n.isSignal??!1,hostDirectives:e}}function see(n={}){return{attributes:lee(n.attributes??{}),listeners:n.listeners??{},properties:n.properties??{},specialAttributes:{classAttr:n.classAttribute,styleAttr:n.styleAttribute}}}function wN(n){let o=null;for(let e=1;e<n.length;e+=2)o=o||{},o[n[e-1]]=n[e];return o}function lee(n){let o={};for(let e of Object.keys(n))o[e]=new _i(n[e]);return o}function cee(n,o,e){let{template:t,defer:i}=JF(n.template,n.type.name,e,n.preserveWhitespaces??!1,n.deferBlockDependencies),a=[];if(n.dependencies)for(let d of n.dependencies)switch(d.kind){case"directive":case"component":a.push(dP(d));break;case"pipe":a.push(pee(d));break}else(n.components||n.directives||n.pipes)&&(n.components&&a.push(...n.components.map(d=>dP(d,!0))),n.directives&&a.push(...n.directives.map(d=>dP(d))),n.pipes&&a.push(...mee(n.pipes)));let s=a.some(({kind:d})=>d===Gg.Directive||d===Gg.NgModule);return ze(q({},ZF(n,o)),{template:t,styles:n.styles??[],declarations:a,viewProviders:n.viewProviders!==void 0?new _i(n.viewProviders):null,animations:n.animations!==void 0?new _i(n.animations):null,defer:i,changeDetection:n.changeDetection??$3.Default,encapsulation:n.encapsulation??$p.Emulated,declarationListEmitMode:2,relativeContextFilePath:"",i18nUseExternalIds:!0,relativeTemplatePath:null,hasDirectiveDependencies:s})}function dee(n){return ze(q({},n),{type:new _i(n.type)})}function dP(n,o=null){return{kind:Gg.Directive,isComponent:o||n.kind==="component",selector:n.selector,type:new _i(n.type),inputs:n.inputs??[],outputs:n.outputs??[],exportAs:n.exportAs??null}}function mee(n){return n?Object.keys(n).map(o=>({kind:Gg.Pipe,name:o,type:new _i(n[o])})):[]}function pee(n){return{kind:Gg.Pipe,name:n.name,type:new _i(n.type)}}function JF(n,o,e,t,i){let a=HJ(n,e,{preserveWhitespaces:t});if(a.errors!==null){let p=a.errors.map(u=>u.toString()).join(", ");throw new Error(`Errors during JIT compilation of template for ${o}: ${p}`)}let d=new R3(null).bind({template:a.nodes});return{template:a,defer:gee(d,i)}}function yg(n,o){if(n.hasOwnProperty(o))return G3(new _i(n[o]),0)}function MN(n,o){if(n.hasOwnProperty(o))return new _i(n[o])}function SN(n){let o=typeof n=="function"?new _i(n):new _r(n??null);return G3(o,0)}function uee(n){return n==null?null:n.map(e8)}function e8(n){let o=n.attribute!=null,e=n.token===null?null:new _i(n.token),t=o?new _i(n.attribute):e;return t8(t,o,n.host,n.optional,n.self,n.skipSelf)}function kN(n){let o=n.attribute??!1,e=n.token===null?null:new _i(n.token);return t8(e,o,n.host??!1,n.optional??!1,n.self??!1,n.skipSelf??!1)}function t8(n,o,e,t,i,a){let s=o?De("unknown"):null;return{token:n,attributeNameType:s,host:e,optional:t,self:i,skipSelf:a}}function gee(n,o){let e=n.getDeferBlocks(),t=new Map;for(let i=0;i<e.length;i++){let a=o?.[i];t.set(e[i],a?new _i(a):null)}return{mode:0,blocks:t}}function hee(n,o,e){let t=tee(e||{});for(let a in n)n.hasOwnProperty(a)&&n[a].forEach(s=>{_ee(s)?t.properties[s.hostPropertyName||a]=OU("this",a):fee(s)&&(t.listeners[s.eventName||a]=`${a}(${(s.args||[]).join(",")})`)});let i=nee(t,o);if(i.length)throw new Error(i.map(a=>a.msg).join(`
|
||
`));return t}function _ee(n){return n.ngMetadataName==="HostBinding"}function fee(n){return n.ngMetadataName==="HostListener"}function vee(n){return n.ngMetadataName==="Input"}function Cee(n){return n.ngMetadataName==="Output"}function bee(n){return Object.keys(n).reduce((o,e)=>{let t=n[e];return typeof t=="string"||Array.isArray(t)?o[e]=xee(t):o[e]={bindingPropertyName:t.publicName,classPropertyName:e,transformFunction:t.transformFunction!==null?new _i(t.transformFunction):null,required:t.isRequired,isSignal:t.isSignal},o},{})}function xee(n){return typeof n=="string"?{bindingPropertyName:n,classPropertyName:n,transformFunction:null,required:!1,isSignal:!1}:{bindingPropertyName:n[0],classPropertyName:n[1],transformFunction:n[2]?new _i(n[2]):null,required:!1,isSignal:!1}}function yee(n){return n.reduce((o,e)=>{if(typeof e=="string"){let[t,i]=n8(e);o[i]={bindingPropertyName:t,classPropertyName:i,required:!1,isSignal:!1,transformFunction:null}}else o[e.name]={bindingPropertyName:e.alias||e.name,classPropertyName:e.name,required:e.required||!1,isSignal:!1,transformFunction:e.transform!=null?new _i(e.transform):null};return o},{})}function mP(n){return n.reduce((o,e)=>{let[t,i]=n8(e);return o[i]=t,o},{})}function n8(n){let[o,e]=n.split(":",2).map(t=>t.trim());return[e??o,o]}function wee(n){return{name:n.type.name,type:Ua(n.type),typeArgumentCount:0,pipeName:n.name,deps:null,pure:n.pure??!0,isStandalone:n.isStandalone??AN(n.version)}}function Mee(n){return{name:n.type.name,type:Ua(n.type),providers:n.providers!==void 0&&n.providers.length>0?new _i(n.providers):null,imports:n.imports!==void 0?n.imports.map(o=>new _i(o)):[]}}function See(n){let o=n.ng||(n.ng={});o.\u0275compilerFacade=new B3}var j3=class{closedByParent=!1;implicitNamespacePrefix=null;isVoid=!1;ignoreFirstLf=!1;canSelfClose=!0;preventNamespaceInheritance=!1;requireExtraParent(o){return!1}isClosedByChild(o){return!1}getContentType(){return Nc.PARSABLE_DATA}},PHe=new j3;var THe=new vP("21.2.25");See(Tf);function uT(n){let o=n.cloneNode(!0),e=o.querySelectorAll("[id]"),t=n.nodeName.toLowerCase();o.removeAttribute("id");for(let i=0;i<e.length;i++)e[i].removeAttribute("id");return t==="canvas"?a8(n,o):(t==="input"||t==="select"||t==="textarea")&&o8(n,o),i8("canvas",n,o,a8),i8("input, textarea, select",n,o,o8),o}function i8(n,o,e,t){let i=o.querySelectorAll(n);if(i.length){let a=e.querySelectorAll(n);for(let s=0;s<i.length;s++)t(i[s],a[s])}}var kee=0;function o8(n,o){o.type!=="file"&&(o.value=n.value),o.type==="radio"&&o.name&&(o.name=`mat-clone-${o.name}-${kee++}`)}function a8(n,o){let e=o.getContext("2d");if(e)try{e.drawImage(n,0,0)}catch{}}function bT(n){let o=n.getBoundingClientRect();return{top:o.top,right:o.right,bottom:o.bottom,left:o.left,width:o.width,height:o.height,x:o.x,y:o.y}}function gT(n,o,e){let{top:t,bottom:i,left:a,right:s}=n;return e>=t&&e<=i&&o>=a&&o<=s}function Pee(n,o){let e=o.left<n.left,t=o.left+o.width>n.right,i=o.top<n.top,a=o.top+o.height>n.bottom;return e||t||i||a}function j0(n,o,e){n.top+=o,n.bottom=n.top+n.height,n.left+=e,n.right=n.left+n.width}function r8(n,o,e,t){let{top:i,right:a,bottom:s,left:d,width:p,height:u}=n,g=p*o,C=u*o;return t>i-C&&t<s+C&&e>d-g&&e<a+g}var Ux=class{_document;positions=new Map;constructor(o){this._document=o}clear(){this.positions.clear()}cache(o){this.clear(),this.positions.set(this._document,{scrollPosition:this.getViewportScrollPosition()}),o.forEach(e=>{this.positions.set(e,{scrollPosition:{top:e.scrollTop,left:e.scrollLeft},clientRect:bT(e)})})}handleScroll(o){let e=Rp(o),t=this.positions.get(e);if(!t)return null;let i=t.scrollPosition,a,s;if(e===this._document){let u=this.getViewportScrollPosition();a=u.top,s=u.left}else a=e.scrollTop,s=e.scrollLeft;let d=i.top-a,p=i.left-s;return this.positions.forEach((u,g)=>{u.clientRect&&e!==g&&e.contains(g)&&j0(u.clientRect,d,p)}),i.top=a,i.left=s,{top:d,left:p}}getViewportScrollPosition(){return{top:window.scrollY,left:window.scrollX}}};function f8(n,o){let e=n.rootNodes;if(e.length===1&&e[0].nodeType===o.ELEMENT_NODE)return e[0];let t=o.createElement("div");return e.forEach(i=>t.appendChild(i)),t}function xT(n,o,e){for(let t in o)if(o.hasOwnProperty(t)){let i=o[t];i?n.setProperty(t,i,e?.has(t)?"important":""):n.removeProperty(t)}return n}function oh(n,o){let e=o?"":"none";xT(n.style,{"touch-action":o?"":"none","-webkit-user-drag":o?"":"none","-webkit-tap-highlight-color":o?"":"transparent","user-select":e,"-ms-user-select":e,"-webkit-user-select":e,"-moz-user-select":e})}function s8(n,o,e){xT(n.style,{position:o?"":"fixed",top:o?"":"0",opacity:o?"":"0",left:o?"":"-999em"},e)}function Wx(n,o){return o&&o!="none"?n+" "+o:n}function l8(n,o){n.style.width=`${o.width}px`,n.style.height=`${o.height}px`,n.style.transform=$0(o.left,o.top)}function $0(n,o){return`translate3d(${Math.round(n)}px, ${Math.round(o)}px, 0)`}var V0={capture:!0},mT={passive:!1,capture:!0},Tee=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["ng-component"]],hostAttrs:["cdk-drag-resets-container",""],decls:0,vars:0,template:function(t,i){},styles:[`@layer cdk-resets {
|
||
.cdk-drag-preview {
|
||
background: none;
|
||
border: none;
|
||
padding: 0;
|
||
color: inherit;
|
||
inset: auto;
|
||
}
|
||
}
|
||
.cdk-drag-placeholder *,
|
||
.cdk-drag-preview * {
|
||
pointer-events: none !important;
|
||
}
|
||
`],encapsulation:2,changeDetection:0})}return n})(),qx=(()=>{class n{_ngZone=f(Gi);_document=f(Do);_styleLoader=f(Ta);_renderer=f(Fp).createRenderer(null,null);_cleanupDocumentTouchmove;_scroll=new Ye;_dropInstances=new Set;_dragInstances=new Set;_activeDragInstances=z([]);_globalListeners;_draggingPredicate=e=>e.isDragging();_domNodesToDirectives=null;pointerMove=new Ye;pointerUp=new Ye;constructor(){}registerDropContainer(e){this._dropInstances.has(e)||this._dropInstances.add(e)}registerDragItem(e){this._dragInstances.add(e),this._dragInstances.size===1&&this._ngZone.runOutsideAngular(()=>{this._cleanupDocumentTouchmove?.(),this._cleanupDocumentTouchmove=this._renderer.listen(this._document,"touchmove",this._persistentTouchmoveListener,mT)})}removeDropContainer(e){this._dropInstances.delete(e)}removeDragItem(e){this._dragInstances.delete(e),this.stopDragging(e),this._dragInstances.size===0&&this._cleanupDocumentTouchmove?.()}startDragging(e,t){if(!(this._activeDragInstances().indexOf(e)>-1)&&(this._styleLoader.load(Tee),this._activeDragInstances.update(i=>[...i,e]),this._activeDragInstances().length===1)){let i=t.type.startsWith("touch"),a=d=>this.pointerUp.next(d),s=[["scroll",d=>this._scroll.next(d),V0],["selectstart",this._preventDefaultWhileDragging,mT]];i?s.push(["touchend",a,V0],["touchcancel",a,V0]):s.push(["mouseup",a,V0]),i||s.push(["mousemove",d=>this.pointerMove.next(d),mT]),this._ngZone.runOutsideAngular(()=>{this._globalListeners=s.map(([d,p,u])=>this._renderer.listen(this._document,d,p,u))})}}stopDragging(e){this._activeDragInstances.update(t=>{let i=t.indexOf(e);return i>-1?(t.splice(i,1),[...t]):t}),this._activeDragInstances().length===0&&this._clearGlobalListeners()}isDragging(e){return this._activeDragInstances().indexOf(e)>-1}scrolled(e){let t=[this._scroll];return e&&e!==this._document&&t.push(new Sr(i=>this._ngZone.runOutsideAngular(()=>{let a=this._renderer.listen(e,"scroll",s=>{this._activeDragInstances().length&&i.next(s)},V0);return()=>{a()}}))),ro(...t)}registerDirectiveNode(e,t){this._domNodesToDirectives??=new WeakMap,this._domNodesToDirectives.set(e,t)}removeDirectiveNode(e){this._domNodesToDirectives?.delete(e)}getDragDirectiveForNode(e){return this._domNodesToDirectives?.get(e)||null}ngOnDestroy(){this._dragInstances.forEach(e=>this.removeDragItem(e)),this._dropInstances.forEach(e=>this.removeDropContainer(e)),this._domNodesToDirectives=null,this._clearGlobalListeners(),this.pointerMove.complete(),this.pointerUp.complete()}_preventDefaultWhileDragging=e=>{this._activeDragInstances().length>0&&e.preventDefault()};_persistentTouchmoveListener=e=>{this._activeDragInstances().length>0&&(this._activeDragInstances().some(this._draggingPredicate)&&e.preventDefault(),this.pointerMove.next(e))};_clearGlobalListeners(){this._globalListeners?.forEach(e=>e()),this._globalListeners=void 0}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();function c8(n){let o=n.toLowerCase().indexOf("ms")>-1?1:1e3;return parseFloat(n)*o}function Eee(n){let o=getComputedStyle(n),e=pT(o,"transition-property"),t=e.find(d=>d==="transform"||d==="all");if(!t)return 0;let i=e.indexOf(t),a=pT(o,"transition-duration"),s=pT(o,"transition-delay");return c8(a[i])+c8(s[i])}function pT(n,o){return n.getPropertyValue(o).split(",").map(t=>t.trim())}var Oee=new Set(["position"]),hT=class{_document;_rootElement;_direction;_initialDomRect;_previewTemplate;_previewClass;_pickupPositionOnPage;_initialTransform;_zIndex;_renderer;_previewEmbeddedView=null;_preview;get element(){return this._preview}constructor(o,e,t,i,a,s,d,p,u,g){this._document=o,this._rootElement=e,this._direction=t,this._initialDomRect=i,this._previewTemplate=a,this._previewClass=s,this._pickupPositionOnPage=d,this._initialTransform=p,this._zIndex=u,this._renderer=g}attach(o){this._preview=this._createPreview(),o.appendChild(this._preview),d8(this._preview)&&this._preview.showPopover()}destroy(){this._preview.remove(),this._previewEmbeddedView?.destroy(),this._preview=this._previewEmbeddedView=null}setTransform(o){this._preview.style.transform=o}getBoundingClientRect(){return this._preview.getBoundingClientRect()}addClass(o){this._preview.classList.add(o)}getTransitionDuration(){return Eee(this._preview)}addEventListener(o,e){return this._renderer.listen(this._preview,o,e)}_createPreview(){let o=this._previewTemplate,e=this._previewClass,t=o?o.template:null,i;if(t&&o){let a=o.matchSize?this._initialDomRect:null,s=o.viewContainer.createEmbeddedView(t,o.context);s.detectChanges(),i=f8(s,this._document),this._previewEmbeddedView=s,o.matchSize?l8(i,a):i.style.transform=$0(this._pickupPositionOnPage.x,this._pickupPositionOnPage.y)}else i=uT(this._rootElement),l8(i,this._initialDomRect),this._initialTransform&&(i.style.transform=this._initialTransform);return xT(i.style,{"pointer-events":"none",margin:d8(i)?"0 auto 0 0":"0",position:"fixed",top:"0",left:"0","z-index":this._zIndex+""},Oee),oh(i,!1),i.classList.add("cdk-drag-preview"),i.setAttribute("popover","manual"),i.setAttribute("dir",this._direction),e&&(Array.isArray(e)?e.forEach(a=>i.classList.add(a)):i.classList.add(e)),i}};function d8(n){return"showPopover"in n}var Dee={passive:!0},m8={passive:!1},Iee={passive:!1,capture:!0},Aee=800,p8="cdk-drag-placeholder",u8=new Set(["position"]);function v8(n,o,e={dragStartThreshold:5,pointerDirectionChangeThreshold:5}){let t=n.get(qi,null,{optional:!0})||n.get(Fp).createRenderer(null,null);return new _T(o,e,n.get(Do),n.get(Gi),n.get(kd),n.get(qx),t)}var _T=class{_config;_document;_ngZone;_viewportRuler;_dragDropRegistry;_renderer;_rootElementCleanups;_cleanupShadowRootSelectStart;_preview=null;_previewContainer;_placeholderRef=null;_placeholder;_pickupPositionInElement;_pickupPositionOnPage;_marker;_anchor=null;_passiveTransform={x:0,y:0};_activeTransform={x:0,y:0};_initialTransform;_hasStartedDragging=z(!1);_hasMoved=!1;_initialContainer;_initialIndex;_parentPositions;_moveEvents=new Ye;_pointerDirectionDelta;_pointerPositionAtLastDirectionChange;_lastKnownPointerPosition;_rootElement;_ownerSVGElement=null;_rootElementTapHighlight;_pointerMoveSubscription=Oo.EMPTY;_pointerUpSubscription=Oo.EMPTY;_scrollSubscription=Oo.EMPTY;_resizeSubscription=Oo.EMPTY;_lastTouchEventTime;_dragStartTime;_boundaryElement=null;_nativeInteractionsEnabled=!0;_initialDomRect;_previewRect;_boundaryRect;_previewTemplate;_placeholderTemplate;_handles=[];_disabledHandles=new Set;_dropContainer;_direction="ltr";_parentDragRef=null;_cachedShadowRoot;lockAxis=null;dragStartDelay=0;previewClass;scale=1;get disabled(){return this._disabled||!!(this._dropContainer&&this._dropContainer.disabled)}set disabled(o){o!==this._disabled&&(this._disabled=o,this._toggleNativeDragInteractions(),this._handles.forEach(e=>oh(e,o)))}_disabled=!1;beforeStarted=new Ye;started=new Ye;released=new Ye;ended=new Ye;entered=new Ye;exited=new Ye;dropped=new Ye;moved=this._moveEvents;data;constrainPosition;constructor(o,e,t,i,a,s,d){this._config=e,this._document=t,this._ngZone=i,this._viewportRuler=a,this._dragDropRegistry=s,this._renderer=d,this.withRootElement(o).withParent(e.parentDragRef||null),this._parentPositions=new Ux(t),s.registerDragItem(this)}getPlaceholderElement(){return this._placeholder}getRootElement(){return this._rootElement}getVisibleElement(){return this.isDragging()?this.getPlaceholderElement():this.getRootElement()}withHandles(o){this._handles=o.map(t=>cl(t)),this._handles.forEach(t=>oh(t,this.disabled)),this._toggleNativeDragInteractions();let e=new Set;return this._disabledHandles.forEach(t=>{this._handles.indexOf(t)>-1&&e.add(t)}),this._disabledHandles=e,this}withPreviewTemplate(o){return this._previewTemplate=o,this}withPlaceholderTemplate(o){return this._placeholderTemplate=o,this}withRootElement(o){let e=cl(o);if(e!==this._rootElement){this._removeRootElementListeners();let t=this._renderer;this._rootElementCleanups=this._ngZone.runOutsideAngular(()=>[t.listen(e,"mousedown",this._pointerDown,m8),t.listen(e,"touchstart",this._pointerDown,Dee),t.listen(e,"dragstart",this._nativeDragStart,m8)]),this._initialTransform=void 0,this._rootElement=e}return typeof SVGElement<"u"&&this._rootElement instanceof SVGElement&&(this._ownerSVGElement=this._rootElement.ownerSVGElement),this}withBoundaryElement(o){return this._boundaryElement=o?cl(o):null,this._resizeSubscription.unsubscribe(),o&&(this._resizeSubscription=this._viewportRuler.change(10).subscribe(()=>this._containInsideBoundaryOnResize())),this}withParent(o){return this._parentDragRef=o,this}dispose(){this._removeRootElementListeners(),this.isDragging()&&this._rootElement?.remove(),this._marker?.remove(),this._destroyPreview(),this._destroyPlaceholder(),this._dragDropRegistry.removeDragItem(this),this._removeListeners(),this.beforeStarted.complete(),this.started.complete(),this.released.complete(),this.ended.complete(),this.entered.complete(),this.exited.complete(),this.dropped.complete(),this._moveEvents.complete(),this._handles=[],this._disabledHandles.clear(),this._dropContainer=void 0,this._resizeSubscription.unsubscribe(),this._parentPositions.clear(),this._boundaryElement=this._rootElement=this._ownerSVGElement=this._placeholderTemplate=this._previewTemplate=this._marker=this._parentDragRef=null}isDragging(){return this._hasStartedDragging()&&this._dragDropRegistry.isDragging(this)}reset(){this._rootElement.style.transform=this._initialTransform||"",this._activeTransform={x:0,y:0},this._passiveTransform={x:0,y:0}}resetToBoundary(){if(this._boundaryElement&&this._rootElement&&Pee(this._boundaryElement.getBoundingClientRect(),this._rootElement.getBoundingClientRect())){let o=this._boundaryElement.getBoundingClientRect(),e=this._rootElement.getBoundingClientRect(),t=0,i=0;e.left<o.left?t=o.left-e.left:e.right>o.right&&(t=o.right-e.right),e.top<o.top?i=o.top-e.top:e.bottom>o.bottom&&(i=o.bottom-e.bottom);let a=this._activeTransform.x,s=this._activeTransform.y,d=a+t,p=s+i;this._rootElement.style.transform=$0(d,p),this._activeTransform={x:d,y:p},this._passiveTransform={x:d,y:p}}}disableHandle(o){!this._disabledHandles.has(o)&&this._handles.indexOf(o)>-1&&(this._disabledHandles.add(o),oh(o,!0))}enableHandle(o){this._disabledHandles.has(o)&&(this._disabledHandles.delete(o),oh(o,this.disabled))}withDirection(o){return this._direction=o,this}_withDropContainer(o){this._dropContainer=o}getFreeDragPosition(){let o=this.isDragging()?this._activeTransform:this._passiveTransform;return{x:o.x,y:o.y}}setFreeDragPosition(o){return this._activeTransform={x:0,y:0},this._passiveTransform.x=o.x,this._passiveTransform.y=o.y,this._dropContainer||this._applyRootElementTransform(o.x,o.y),this}withPreviewContainer(o){return this._previewContainer=o,this}_sortFromLastPointerPosition(){let o=this._lastKnownPointerPosition;o&&this._dropContainer&&this._updateActiveDropContainer(this._getConstrainedPointerPosition(o),o)}_removeListeners(){this._pointerMoveSubscription.unsubscribe(),this._pointerUpSubscription.unsubscribe(),this._scrollSubscription.unsubscribe(),this._cleanupShadowRootSelectStart?.(),this._cleanupShadowRootSelectStart=void 0}_destroyPreview(){this._preview?.destroy(),this._preview=null}_destroyPlaceholder(){this._anchor?.remove(),this._placeholder?.remove(),this._placeholderRef?.destroy(),this._placeholder=this._anchor=this._placeholderRef=null}_pointerDown=o=>{if(this.beforeStarted.next(),this._handles.length){let e=this._getTargetHandle(o);e&&!this._disabledHandles.has(e)&&!this.disabled&&this._initializeDragSequence(e,o)}else this.disabled||this._initializeDragSequence(this._rootElement,o)};_pointerMove=o=>{let e=this._getPointerPositionOnPage(o);if(!this._hasStartedDragging()){let i=Math.abs(e.x-this._pickupPositionOnPage.x),a=Math.abs(e.y-this._pickupPositionOnPage.y);if(i+a>=this._config.dragStartThreshold){let d=Date.now()>=this._dragStartTime+this._getDragStartDelay(o),p=this._dropContainer;if(!d){this._endDragSequence(o);return}(!p||!p.isDragging()&&!p.isReceiving())&&(o.cancelable&&o.preventDefault(),this._hasStartedDragging.set(!0),this._ngZone.run(()=>this._startDragSequence(o)))}return}o.cancelable&&o.preventDefault();let t=this._getConstrainedPointerPosition(e);if(this._hasMoved=!0,this._lastKnownPointerPosition=e,this._updatePointerDirectionDelta(t),this._dropContainer)this._updateActiveDropContainer(t,e);else{let i=this.constrainPosition?this._initialDomRect:this._pickupPositionOnPage,a=this._activeTransform;a.x=t.x-i.x+this._passiveTransform.x,a.y=t.y-i.y+this._passiveTransform.y,this._applyRootElementTransform(a.x,a.y)}this._moveEvents.observers.length&&this._ngZone.run(()=>{this._moveEvents.next({source:this,pointerPosition:t,event:o,distance:this._getDragDistance(t),delta:this._pointerDirectionDelta})})};_pointerUp=o=>{this._endDragSequence(o)};_endDragSequence(o){if(this._dragDropRegistry.isDragging(this)&&(this._removeListeners(),this._dragDropRegistry.stopDragging(this),this._toggleNativeDragInteractions(),this._handles&&(this._rootElement.style.webkitTapHighlightColor=this._rootElementTapHighlight),!!this._hasStartedDragging()))if(this.released.next({source:this,event:o}),this._dropContainer)this._dropContainer._stopScrolling(),this._animatePreviewToPlaceholder().then(()=>{this._cleanupDragArtifacts(o),this._cleanupCachedDimensions(),this._dragDropRegistry.stopDragging(this)});else{this._passiveTransform.x=this._activeTransform.x;let e=this._getPointerPositionOnPage(o);this._passiveTransform.y=this._activeTransform.y,this._ngZone.run(()=>{this.ended.next({source:this,distance:this._getDragDistance(e),dropPoint:e,event:o})}),this._cleanupCachedDimensions(),this._dragDropRegistry.stopDragging(this)}}_startDragSequence(o){B0(o)&&(this._lastTouchEventTime=Date.now()),this._toggleNativeDragInteractions();let e=this._getShadowRoot(),t=this._dropContainer;if(e&&this._ngZone.runOutsideAngular(()=>{this._cleanupShadowRootSelectStart=this._renderer.listen(e,"selectstart",Nee,Iee)}),t){let i=this._rootElement,a=i.parentNode,s=this._placeholder=this._createPlaceholderElement(),d=this._marker=this._marker||this._document.createComment("");a.insertBefore(d,i),this._initialTransform=i.style.transform||"",this._preview=new hT(this._document,this._rootElement,this._direction,this._initialDomRect,this._previewTemplate||null,this.previewClass||null,this._pickupPositionOnPage,this._initialTransform,this._config.zIndex||1e3,this._renderer),this._preview.attach(this._getPreviewInsertionPoint(a,e)),s8(i,!1,u8),this._document.body.appendChild(a.replaceChild(s,i)),this.started.next({source:this,event:o}),t.start(),this._initialContainer=t,this._initialIndex=t.getItemIndex(this)}else this.started.next({source:this,event:o}),this._initialContainer=this._initialIndex=void 0;this._parentPositions.cache(t?t.getScrollableParents():[])}_initializeDragSequence(o,e){this._parentDragRef&&e.stopPropagation();let t=this.isDragging(),i=B0(e),a=!i&&e.button!==0,s=this._rootElement,d=Rp(e),p=!i&&this._lastTouchEventTime&&this._lastTouchEventTime+Aee>Date.now(),u=i?OA(e):EA(e);if(d&&d.draggable&&e.type==="mousedown"&&e.preventDefault(),t||a||p||u)return;if(this._handles.length){let M=s.style;this._rootElementTapHighlight=M.webkitTapHighlightColor||"",M.webkitTapHighlightColor="transparent"}this._hasMoved=!1,this._hasStartedDragging.set(this._hasMoved),this._removeListeners(),this._initialDomRect=this._rootElement.getBoundingClientRect(),this._pointerMoveSubscription=this._dragDropRegistry.pointerMove.subscribe(this._pointerMove),this._pointerUpSubscription=this._dragDropRegistry.pointerUp.subscribe(this._pointerUp),this._scrollSubscription=this._dragDropRegistry.scrolled(this._getShadowRoot()).subscribe(M=>this._updateOnScroll(M)),this._boundaryElement&&(this._boundaryRect=bT(this._boundaryElement));let g=this._previewTemplate;this._pickupPositionInElement=g&&g.template&&!g.matchSize?{x:0,y:0}:this._getPointerPositionInElement(this._initialDomRect,o,e);let C=this._pickupPositionOnPage=this._lastKnownPointerPosition=this._getPointerPositionOnPage(e);this._pointerDirectionDelta={x:0,y:0},this._pointerPositionAtLastDirectionChange={x:C.x,y:C.y},this._dragStartTime=Date.now(),this._dragDropRegistry.startDragging(this,e)}_cleanupDragArtifacts(o){s8(this._rootElement,!0,u8),this._marker.parentNode.replaceChild(this._rootElement,this._marker),this._destroyPreview(),this._destroyPlaceholder(),this._initialDomRect=this._boundaryRect=this._previewRect=this._initialTransform=void 0,this._ngZone.run(()=>{let e=this._dropContainer,t=e.getItemIndex(this),i=this._getPointerPositionOnPage(o),a=this._getDragDistance(i),s=e._isOverContainer(i.x,i.y);this.ended.next({source:this,distance:a,dropPoint:i,event:o}),this.dropped.next({item:this,currentIndex:t,previousIndex:this._initialIndex,container:e,previousContainer:this._initialContainer,isPointerOverContainer:s,distance:a,dropPoint:i,event:o}),e.drop(this,t,this._initialIndex,this._initialContainer,s,a,i,o),this._dropContainer=this._initialContainer})}_updateActiveDropContainer({x:o,y:e},{x:t,y:i}){let a=this._initialContainer._getSiblingContainerFromPosition(this,o,e);!a&&this._dropContainer!==this._initialContainer&&this._initialContainer._isOverContainer(o,e)&&(a=this._initialContainer),a&&a!==this._dropContainer&&this._ngZone.run(()=>{let s=this._dropContainer.getItemIndex(this),d=this._dropContainer.getItemAtIndex(s+1)?.getVisibleElement()||null;this.exited.next({item:this,container:this._dropContainer}),this._dropContainer.exit(this),this._conditionallyInsertAnchor(a,this._dropContainer,d),this._dropContainer=a,this._dropContainer.enter(this,o,e,a===this._initialContainer&&a.sortingDisabled?this._initialIndex:void 0),this.entered.next({item:this,container:a,currentIndex:a.getItemIndex(this)})}),this.isDragging()&&(this._dropContainer._startScrollingIfNecessary(t,i),this._dropContainer._sortItem(this,o,e,this._pointerDirectionDelta),this.constrainPosition?this._applyPreviewTransform(o,e):this._applyPreviewTransform(o-this._pickupPositionInElement.x,e-this._pickupPositionInElement.y))}_animatePreviewToPlaceholder(){if(!this._hasMoved)return Promise.resolve();let o=this._placeholder.getBoundingClientRect();this._preview.addClass("cdk-drag-animating"),this._applyPreviewTransform(o.left,o.top);let e=this._preview.getTransitionDuration();return e===0?Promise.resolve():this._ngZone.runOutsideAngular(()=>new Promise(t=>{let i=d=>{(!d||this._preview&&Rp(d)===this._preview.element&&d.propertyName==="transform")&&(s(),t(),clearTimeout(a))},a=setTimeout(i,e*1.5),s=this._preview.addEventListener("transitionend",i)}))}_createPlaceholderElement(){let o=this._placeholderTemplate,e=o?o.template:null,t;return e?(this._placeholderRef=o.viewContainer.createEmbeddedView(e,o.context),this._placeholderRef.detectChanges(),t=f8(this._placeholderRef,this._document)):t=uT(this._rootElement),t.style.pointerEvents="none",t.classList.add(p8),t}_getPointerPositionInElement(o,e,t){let i=e===this._rootElement?null:e,a=i?i.getBoundingClientRect():o,s=B0(t)?t.targetTouches[0]:t,d=this._getViewportScrollPosition(),p=s.pageX-a.left-d.left,u=s.pageY-a.top-d.top;return{x:a.left-o.left+p,y:a.top-o.top+u}}_getPointerPositionOnPage(o){let e=this._getViewportScrollPosition(),t=B0(o)?o.touches[0]||o.changedTouches[0]||{pageX:0,pageY:0}:o,i=t.pageX-e.left,a=t.pageY-e.top;if(this._ownerSVGElement){let s=this._ownerSVGElement.getScreenCTM();if(s){let d=this._ownerSVGElement.createSVGPoint();return d.x=i,d.y=a,d.matrixTransform(s.inverse())}}return{x:i,y:a}}_getConstrainedPointerPosition(o){let e=this._dropContainer?this._dropContainer.lockAxis:null,{x:t,y:i}=this.constrainPosition?this.constrainPosition(o,this,this._initialDomRect,this._pickupPositionInElement):o;if(this.lockAxis==="x"||e==="x"?i=this._pickupPositionOnPage.y-(this.constrainPosition?this._pickupPositionInElement.y:0):(this.lockAxis==="y"||e==="y")&&(t=this._pickupPositionOnPage.x-(this.constrainPosition?this._pickupPositionInElement.x:0)),this._boundaryRect){let{x:a,y:s}=this.constrainPosition?{x:0,y:0}:this._pickupPositionInElement,d=this._boundaryRect,{width:p,height:u}=this._getPreviewRect(),g=d.top+s,C=d.bottom-(u-s),M=d.left+a,x=d.right-(p-a);t=g8(t,M,x),i=g8(i,g,C)}return{x:t,y:i}}_updatePointerDirectionDelta(o){let{x:e,y:t}=o,i=this._pointerDirectionDelta,a=this._pointerPositionAtLastDirectionChange,s=Math.abs(e-a.x),d=Math.abs(t-a.y);return s>this._config.pointerDirectionChangeThreshold&&(i.x=e>a.x?1:-1,a.x=e),d>this._config.pointerDirectionChangeThreshold&&(i.y=t>a.y?1:-1,a.y=t),i}_toggleNativeDragInteractions(){if(!this._rootElement||!this._handles)return;let o=this._handles.length>0||!this.isDragging();o!==this._nativeInteractionsEnabled&&(this._nativeInteractionsEnabled=o,oh(this._rootElement,o))}_removeRootElementListeners(){this._rootElementCleanups?.forEach(o=>o()),this._rootElementCleanups=void 0}_applyRootElementTransform(o,e){let t=1/this.scale,i=$0(o*t,e*t),a=this._rootElement.style;this._initialTransform==null&&(this._initialTransform=a.transform&&a.transform!="none"?a.transform:""),a.transform=Wx(i,this._initialTransform)}_applyPreviewTransform(o,e){let t=this._previewTemplate?.template?void 0:this._initialTransform,i=$0(o,e);this._preview.setTransform(Wx(i,t))}_getDragDistance(o){let e=this._pickupPositionOnPage;return e?{x:o.x-e.x,y:o.y-e.y}:{x:0,y:0}}_cleanupCachedDimensions(){this._boundaryRect=this._previewRect=void 0,this._parentPositions.clear()}_containInsideBoundaryOnResize(){let{x:o,y:e}=this._passiveTransform;if(o===0&&e===0||this.isDragging()||!this._boundaryElement)return;let t=this._rootElement.getBoundingClientRect(),i=this._boundaryElement.getBoundingClientRect();if(i.width===0&&i.height===0||t.width===0&&t.height===0)return;let a=i.left-t.left,s=t.right-i.right,d=i.top-t.top,p=t.bottom-i.bottom;i.width>t.width?(a>0&&(o+=a),s>0&&(o-=s)):o=0,i.height>t.height?(d>0&&(e+=d),p>0&&(e-=p)):e=0,(o!==this._passiveTransform.x||e!==this._passiveTransform.y)&&this.setFreeDragPosition({y:e,x:o})}_getDragStartDelay(o){let e=this.dragStartDelay;return typeof e=="number"?e:B0(o)?e.touch:e?e.mouse:0}_updateOnScroll(o){let e=this._parentPositions.handleScroll(o);if(e){let t=Rp(o);this._boundaryRect&&t!==this._boundaryElement&&t.contains(this._boundaryElement)&&j0(this._boundaryRect,e.top,e.left),this._pickupPositionOnPage.x+=e.left,this._pickupPositionOnPage.y+=e.top,this._dropContainer||(this._activeTransform.x-=e.left,this._activeTransform.y-=e.top,this._applyRootElementTransform(this._activeTransform.x,this._activeTransform.y))}}_getViewportScrollPosition(){return this._parentPositions.positions.get(this._document)?.scrollPosition||this._parentPositions.getViewportScrollPosition()}_getShadowRoot(){return this._cachedShadowRoot===void 0&&(this._cachedShadowRoot=jC(this._rootElement)),this._cachedShadowRoot}_getPreviewInsertionPoint(o,e){let t=this._previewContainer||"global";if(t==="parent")return o;if(t==="global"){let i=this._document;return e||i.fullscreenElement||i.webkitFullscreenElement||i.mozFullScreenElement||i.msFullscreenElement||i.body}return cl(t)}_getPreviewRect(){return(!this._previewRect||!this._previewRect.width&&!this._previewRect.height)&&(this._previewRect=this._preview?this._preview.getBoundingClientRect():this._initialDomRect),this._previewRect}_nativeDragStart=o=>{if(this._handles.length){let e=this._getTargetHandle(o);e&&!this._disabledHandles.has(e)&&!this.disabled&&o.preventDefault()}else this.disabled||o.preventDefault()};_getTargetHandle(o){return this._handles.find(e=>o.target&&(o.target===e||e.contains(o.target)))}_conditionallyInsertAnchor(o,e,t){if(o===this._initialContainer)this._anchor?.remove(),this._anchor=null;else if(e===this._initialContainer&&e.hasAnchor){let i=this._anchor??=uT(this._placeholder);i.classList.remove(p8),i.classList.add("cdk-drag-anchor"),i.style.transform="",t?t.before(i):cl(e.element).appendChild(i)}}};function g8(n,o,e){return Math.max(o,Math.min(e,n))}function B0(n){return n.type[0]==="t"}function Nee(n){n.preventDefault()}function C8(n,o,e){let t=h8(o,n.length-1),i=h8(e,n.length-1);if(t===i)return;let a=n[t],s=i<t?-1:1;for(let d=t;d!==i;d+=s)n[d]=n[d+s];n[i]=a}function h8(n,o){return Math.max(0,Math.min(o,n))}var Gx=class{_dragDropRegistry;_element;_sortPredicate;_itemPositions=[];_activeDraggables;orientation="vertical";direction="ltr";constructor(o){this._dragDropRegistry=o}_previousSwap={drag:null,delta:0,overlaps:!1};start(o){this.withItems(o)}sort(o,e,t,i){let a=this._itemPositions,s=this._getItemIndexFromPointerPosition(o,e,t,i);if(s===-1&&a.length>0)return null;let d=this.orientation==="horizontal",p=a.findIndex(k=>k.drag===o),u=a[s],g=a[p].clientRect,C=u.clientRect,M=p>s?1:-1,x=this._getItemOffsetPx(g,C,M),b=this._getSiblingOffsetPx(p,a,M),P=a.slice();return C8(a,p,s),a.forEach((k,S)=>{if(P[S]===k)return;let O=k.drag===o,A=O?x:b,D=O?o.getPlaceholderElement():k.drag.getRootElement();k.offset+=A;let F=Math.round(k.offset*(1/k.drag.scale));d?(D.style.transform=Wx(`translate3d(${F}px, 0, 0)`,k.initialTransform),j0(k.clientRect,0,A)):(D.style.transform=Wx(`translate3d(0, ${F}px, 0)`,k.initialTransform),j0(k.clientRect,A,0))}),this._previousSwap.overlaps=gT(C,e,t),this._previousSwap.drag=u.drag,this._previousSwap.delta=d?i.x:i.y,{previousIndex:p,currentIndex:s}}enter(o,e,t,i){let a=this._activeDraggables,s=a.indexOf(o),d=o.getPlaceholderElement();s>-1&&a.splice(s,1);let p=i==null||i<0?this._getItemIndexFromPointerPosition(o,e,t):i,u=a[p];if(u===o&&(u=a[p+1]),!u&&(p==null||p===-1||p<a.length-1)&&this._shouldEnterAsFirstChild(e,t)&&(u=a[0]),u&&!this._dragDropRegistry.isDragging(u)){let g=u.getRootElement();g.parentElement.insertBefore(d,g),a.splice(p,0,o)}else this._element.appendChild(d),a.push(o);d.style.transform="",this._cacheItemPositions()}withItems(o){this._activeDraggables=o.slice(),this._cacheItemPositions()}withSortPredicate(o){this._sortPredicate=o}reset(){this._activeDraggables?.forEach(o=>{let e=o.getRootElement();if(e){let t=this._itemPositions.find(i=>i.drag===o)?.initialTransform;e.style.transform=t||""}}),this._itemPositions=[],this._activeDraggables=[],this._previousSwap.drag=null,this._previousSwap.delta=0,this._previousSwap.overlaps=!1}getActiveItemsSnapshot(){return this._activeDraggables}getItemIndex(o){return this._getVisualItemPositions().findIndex(e=>e.drag===o)}getItemAtIndex(o){return this._getVisualItemPositions()[o]?.drag||null}updateOnScroll(o,e){this._itemPositions.forEach(({clientRect:t})=>{j0(t,o,e)}),this._itemPositions.forEach(({drag:t})=>{this._dragDropRegistry.isDragging(t)&&t._sortFromLastPointerPosition()})}withElementContainer(o){this._element=o}_cacheItemPositions(){let o=this.orientation==="horizontal";this._itemPositions=this._activeDraggables.map(e=>{let t=e.getVisibleElement();return{drag:e,offset:0,initialTransform:t.style.transform||"",clientRect:bT(t)}}).sort((e,t)=>o?e.clientRect.left-t.clientRect.left:e.clientRect.top-t.clientRect.top)}_getVisualItemPositions(){return this.orientation==="horizontal"&&this.direction==="rtl"?this._itemPositions.slice().reverse():this._itemPositions}_getItemOffsetPx(o,e,t){let i=this.orientation==="horizontal",a=i?e.left-o.left:e.top-o.top;return t===-1&&(a+=i?e.width-o.width:e.height-o.height),a}_getSiblingOffsetPx(o,e,t){let i=this.orientation==="horizontal",a=e[o].clientRect,s=e[o+t*-1],d=a[i?"width":"height"]*t;if(s){let p=i?"left":"top",u=i?"right":"bottom";t===-1?d-=s.clientRect[p]-a[u]:d+=a[p]-s.clientRect[u]}return d}_shouldEnterAsFirstChild(o,e){if(!this._activeDraggables.length)return!1;let t=this._itemPositions,i=this.orientation==="horizontal";if(t[0].drag!==this._activeDraggables[0]){let s=t[t.length-1].clientRect;return i?o>=s.right:e>=s.bottom}else{let s=t[0].clientRect;return i?o<=s.left:e<=s.top}}_getItemIndexFromPointerPosition(o,e,t,i){let a=this.orientation==="horizontal",s=this._itemPositions.findIndex(({drag:d,clientRect:p})=>{if(d===o)return!1;if(i){let u=a?i.x:i.y;if(d===this._previousSwap.drag&&this._previousSwap.overlaps&&u===this._previousSwap.delta)return!1}return a?e>=Math.floor(p.left)&&e<Math.floor(p.right):t>=Math.floor(p.top)&&t<Math.floor(p.bottom)});return s===-1||!this._sortPredicate(s,o)?-1:s}},fT=class{_document;_dragDropRegistry;_element;_sortPredicate;_rootNode;_activeItems;_previousSwap={drag:null,deltaX:0,deltaY:0,overlaps:!1};_relatedNodes=[];constructor(o,e){this._document=o,this._dragDropRegistry=e}start(o){let e=this._element.childNodes;this._relatedNodes=[];for(let t=0;t<e.length;t++){let i=e[t];this._relatedNodes.push([i,i.nextSibling])}this.withItems(o)}sort(o,e,t,i){let a=this._getItemIndexFromPointerPosition(o,e,t),s=this._previousSwap;if(a===-1||this._activeItems[a]===o)return null;let d=this._activeItems[a];if(s.drag===d&&s.overlaps&&s.deltaX===i.x&&s.deltaY===i.y)return null;let p=this.getItemIndex(o),u=o.getPlaceholderElement(),g=d.getRootElement();a>p?g.after(u):g.before(u),C8(this._activeItems,p,a);let C=this._getRootNode().elementFromPoint(e,t);return s.deltaX=i.x,s.deltaY=i.y,s.drag=d,s.overlaps=g===C||g.contains(C),{previousIndex:p,currentIndex:a}}enter(o,e,t,i){let a=this._activeItems.indexOf(o);a>-1&&this._activeItems.splice(a,1);let s=i==null||i<0?this._getItemIndexFromPointerPosition(o,e,t):i;s===-1&&(s=this._getClosestItemIndexToPointer(o,e,t));let d=this._activeItems[s];d&&!this._dragDropRegistry.isDragging(d)?(this._activeItems.splice(s,0,o),d.getRootElement().before(o.getPlaceholderElement())):(this._activeItems.push(o),this._element.appendChild(o.getPlaceholderElement()))}withItems(o){this._activeItems=o.slice()}withSortPredicate(o){this._sortPredicate=o}reset(){let o=this._element,e=this._previousSwap;for(let t=this._relatedNodes.length-1;t>-1;t--){let[i,a]=this._relatedNodes[t];i.parentNode===o&&i.nextSibling!==a&&(a===null?o.appendChild(i):a.parentNode===o&&o.insertBefore(i,a))}this._relatedNodes=[],this._activeItems=[],e.drag=null,e.deltaX=e.deltaY=0,e.overlaps=!1}getActiveItemsSnapshot(){return this._activeItems}getItemIndex(o){return this._activeItems.indexOf(o)}getItemAtIndex(o){return this._activeItems[o]||null}updateOnScroll(){this._activeItems.forEach(o=>{this._dragDropRegistry.isDragging(o)&&o._sortFromLastPointerPosition()})}withElementContainer(o){o!==this._element&&(this._element=o,this._rootNode=void 0)}_getItemIndexFromPointerPosition(o,e,t){let i=this._getRootNode().elementFromPoint(Math.floor(e),Math.floor(t)),a=i?this._activeItems.findIndex(s=>{let d=s.getRootElement();return i===d||d.contains(i)}):-1;return a===-1||!this._sortPredicate(a,o)?-1:a}_getRootNode(){return this._rootNode||(this._rootNode=jC(this._element)||this._document),this._rootNode}_getClosestItemIndexToPointer(o,e,t){if(this._activeItems.length===0)return-1;if(this._activeItems.length===1)return 0;let i=1/0,a=-1;for(let s=0;s<this._activeItems.length;s++){let d=this._activeItems[s];if(d!==o){let{x:p,y:u}=d.getRootElement().getBoundingClientRect(),g=Math.hypot(e-p,t-u);g<i&&(i=g,a=s)}}return a}},_8=.05,b8=.05,Ml=(function(n){return n[n.NONE=0]="NONE",n[n.UP=1]="UP",n[n.DOWN=2]="DOWN",n})(Ml||{}),as=(function(n){return n[n.NONE=0]="NONE",n[n.LEFT=1]="LEFT",n[n.RIGHT=2]="RIGHT",n})(as||{});function Fee(n,o){return new vT(o,n.get(qx),n.get(Do),n.get(Gi),n.get(kd))}var vT=class{_dragDropRegistry;_ngZone;_viewportRuler;element;disabled=!1;sortingDisabled=!1;lockAxis=null;autoScrollDisabled=!1;autoScrollStep=2;hasAnchor=!1;enterPredicate=()=>!0;sortPredicate=()=>!0;beforeStarted=new Ye;entered=new Ye;exited=new Ye;dropped=new Ye;sorted=new Ye;receivingStarted=new Ye;receivingStopped=new Ye;data;_container;_isDragging=!1;_parentPositions;_sortStrategy;_domRect;_draggables=[];_siblings=[];_activeSiblings=new Set;_viewportScrollSubscription=Oo.EMPTY;_verticalScrollDirection=Ml.NONE;_horizontalScrollDirection=as.NONE;_scrollNode;_stopScrollTimers=new Ye;_cachedShadowRoot=null;_document;_scrollableElements=[];_initialScrollSnap;_direction="ltr";constructor(o,e,t,i,a){this._dragDropRegistry=e,this._ngZone=i,this._viewportRuler=a;let s=this.element=cl(o);this._document=t,this.withOrientation("vertical").withElementContainer(s),e.registerDropContainer(this),this._parentPositions=new Ux(t)}dispose(){this._stopScrolling(),this._stopScrollTimers.complete(),this._viewportScrollSubscription.unsubscribe(),this.beforeStarted.complete(),this.entered.complete(),this.exited.complete(),this.dropped.complete(),this.sorted.complete(),this.receivingStarted.complete(),this.receivingStopped.complete(),this._activeSiblings.clear(),this._scrollNode=null,this._parentPositions.clear(),this._dragDropRegistry.removeDropContainer(this)}isDragging(){return this._isDragging}start(){this._draggingStarted(),this._notifyReceivingSiblings()}enter(o,e,t,i){this._draggingStarted(),i==null&&this.sortingDisabled&&(i=this._draggables.indexOf(o)),this._sortStrategy.enter(o,e,t,i),this._cacheParentPositions(),this._notifyReceivingSiblings(),this.entered.next({item:o,container:this,currentIndex:this.getItemIndex(o)})}exit(o){this._reset(),this.exited.next({item:o,container:this})}drop(o,e,t,i,a,s,d,p={}){this._reset(),this.dropped.next({item:o,currentIndex:e,previousIndex:t,container:this,previousContainer:i,isPointerOverContainer:a,distance:s,dropPoint:d,event:p})}withItems(o){let e=this._draggables;return this._draggables=o,o.forEach(t=>t._withDropContainer(this)),this.isDragging()&&(e.filter(i=>i.isDragging()).every(i=>o.indexOf(i)===-1)?this._reset():this._sortStrategy.withItems(this._draggables)),this}withDirection(o){return this._direction=o,this._sortStrategy instanceof Gx&&(this._sortStrategy.direction=o),this}connectedTo(o){return this._siblings=o.slice(),this}withOrientation(o){if(o==="mixed")this._sortStrategy=new fT(this._document,this._dragDropRegistry);else{let e=new Gx(this._dragDropRegistry);e.direction=this._direction,e.orientation=o,this._sortStrategy=e}return this._sortStrategy.withElementContainer(this._container),this._sortStrategy.withSortPredicate((e,t)=>this.sortPredicate(e,t,this)),this}withScrollableParents(o){let e=this._container;return this._scrollableElements=o.indexOf(e)===-1?[e,...o]:o.slice(),this}withElementContainer(o){if(o===this._container)return this;let e=cl(this.element),t=this._scrollableElements.indexOf(this._container),i=this._scrollableElements.indexOf(o);return t>-1&&this._scrollableElements.splice(t,1),i>-1&&this._scrollableElements.splice(i,1),this._sortStrategy&&this._sortStrategy.withElementContainer(o),this._cachedShadowRoot=null,this._scrollableElements.unshift(o),this._container=o,this}getScrollableParents(){return this._scrollableElements}getItemIndex(o){return this._isDragging?this._sortStrategy.getItemIndex(o):this._draggables.indexOf(o)}getItemAtIndex(o){return this._isDragging?this._sortStrategy.getItemAtIndex(o):this._draggables[o]||null}isReceiving(){return this._activeSiblings.size>0}_sortItem(o,e,t,i){if(this.sortingDisabled||!this._domRect||!r8(this._domRect,_8,e,t))return;let a=this._sortStrategy.sort(o,e,t,i);a&&this.sorted.next({previousIndex:a.previousIndex,currentIndex:a.currentIndex,container:this,item:o})}_startScrollingIfNecessary(o,e){if(this.autoScrollDisabled)return;let t,i=Ml.NONE,a=as.NONE;if(this._parentPositions.positions.forEach((s,d)=>{d===this._document||!s.clientRect||t||r8(s.clientRect,_8,o,e)&&([i,a]=Ree(d,s.clientRect,this._direction,o,e),(i||a)&&(t=d))}),!i&&!a){let{width:s,height:d}=this._viewportRuler.getViewportSize(),p={width:s,height:d,top:0,right:s,bottom:d,left:0};i=x8(p,e),a=y8(p,o),t=window}t&&(i!==this._verticalScrollDirection||a!==this._horizontalScrollDirection||t!==this._scrollNode)&&(this._verticalScrollDirection=i,this._horizontalScrollDirection=a,this._scrollNode=t,(i||a)&&t?this._ngZone.runOutsideAngular(this._startScrollInterval):this._stopScrolling())}_stopScrolling(){this._stopScrollTimers.next()}_draggingStarted(){let o=this._container.style;this.beforeStarted.next(),this._isDragging=!0,this._initialScrollSnap=o.msScrollSnapType||o.scrollSnapType||"",o.scrollSnapType=o.msScrollSnapType="none",this._sortStrategy.start(this._draggables),this._cacheParentPositions(),this._viewportScrollSubscription.unsubscribe(),this._listenToScrollEvents()}_cacheParentPositions(){this._parentPositions.cache(this._scrollableElements),this._domRect=this._parentPositions.positions.get(this._container).clientRect}_reset(){this._isDragging=!1;let o=this._container.style;o.scrollSnapType=o.msScrollSnapType=this._initialScrollSnap,this._siblings.forEach(e=>e._stopReceiving(this)),this._sortStrategy.reset(),this._stopScrolling(),this._viewportScrollSubscription.unsubscribe(),this._parentPositions.clear()}_startScrollInterval=()=>{this._stopScrolling(),DC(0,rl).pipe(He(this._stopScrollTimers)).subscribe(()=>{let o=this._scrollNode,e=this.autoScrollStep;this._verticalScrollDirection===Ml.UP?o.scrollBy(0,-e):this._verticalScrollDirection===Ml.DOWN&&o.scrollBy(0,e),this._horizontalScrollDirection===as.LEFT?o.scrollBy(-e,0):this._horizontalScrollDirection===as.RIGHT&&o.scrollBy(e,0)})};_isOverContainer(o,e){return this._domRect!=null&&gT(this._domRect,o,e)}_getSiblingContainerFromPosition(o,e,t){return this._siblings.find(i=>i._canReceive(o,e,t))}_canReceive(o,e,t){if(!this._domRect||!gT(this._domRect,e,t)||!this.enterPredicate(o,this))return!1;let i=this._getShadowRoot().elementFromPoint(e,t);return i?i===this._container||this._container.contains(i):!1}_startReceiving(o,e){let t=this._activeSiblings;!t.has(o)&&e.every(i=>this.enterPredicate(i,this)||this._draggables.indexOf(i)>-1)&&(t.add(o),this._cacheParentPositions(),this._listenToScrollEvents(),this.receivingStarted.next({initiator:o,receiver:this,items:e}))}_stopReceiving(o){this._activeSiblings.delete(o),this._viewportScrollSubscription.unsubscribe(),this.receivingStopped.next({initiator:o,receiver:this})}_listenToScrollEvents(){this._viewportScrollSubscription=this._dragDropRegistry.scrolled(this._getShadowRoot()).subscribe(o=>{if(this.isDragging()){let e=this._parentPositions.handleScroll(o);e&&this._sortStrategy.updateOnScroll(e.top,e.left)}else this.isReceiving()&&this._cacheParentPositions()})}_getShadowRoot(){if(!this._cachedShadowRoot){let o=jC(this._container);this._cachedShadowRoot=o||this._document}return this._cachedShadowRoot}_notifyReceivingSiblings(){let o=this._sortStrategy.getActiveItemsSnapshot().filter(e=>e.isDragging());this._siblings.forEach(e=>e._startReceiving(this,o))}};function x8(n,o){let{top:e,bottom:t,height:i}=n,a=i*b8;return o>=e-a&&o<=e+a?Ml.UP:o>=t-a&&o<=t+a?Ml.DOWN:Ml.NONE}function y8(n,o){let{left:e,right:t,width:i}=n,a=i*b8;return o>=e-a&&o<=e+a?as.LEFT:o>=t-a&&o<=t+a?as.RIGHT:as.NONE}function Ree(n,o,e,t,i){let a=x8(o,i),s=y8(o,t),d=Ml.NONE,p=as.NONE;if(a){let u=n.scrollTop;a===Ml.UP?u>0&&(d=Ml.UP):n.scrollHeight-u>n.clientHeight&&(d=Ml.DOWN)}if(s){let u=n.scrollLeft;e==="rtl"?s===as.RIGHT?u<0&&(p=as.RIGHT):n.scrollWidth+u>n.clientWidth&&(p=as.LEFT):s===as.LEFT?u>0&&(p=as.LEFT):n.scrollWidth-u>n.clientWidth&&(p=as.RIGHT)}return[d,p]}var zee=(()=>{class n{_injector=f(xa);constructor(){}createDrag(e,t){return v8(this._injector,e,t)}createDropList(e){return Fee(this._injector,e)}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})(),CT=new mn("CDK_DRAG_PARENT");var w8=new mn("CdkDragHandle"),M8=(()=>{class n{element=f(Kt);_parentDrag=f(CT,{optional:!0,skipSelf:!0});_dragDropRegistry=f(qx);_stateChanges=new Ye;get disabled(){return this._disabled}set disabled(e){this._disabled=e,this._stateChanges.next(this)}_disabled=!1;constructor(){this._parentDrag?._addHandle(this)}ngAfterViewInit(){if(!this._parentDrag){let e=this.element.nativeElement.parentElement;for(;e;){let t=this._dragDropRegistry.getDragDirectiveForNode(e);if(t){this._parentDrag=t,t._addHandle(this);break}e=e.parentElement}}}ngOnDestroy(){this._parentDrag?._removeHandle(this),this._stateChanges.complete()}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["","cdkDragHandle",""]],hostAttrs:[1,"cdk-drag-handle"],inputs:{disabled:[2,"cdkDragHandleDisabled","disabled",zt]},features:[un([{provide:w8,useExisting:n}])]})}return n})(),Lee=new mn("CDK_DRAG_CONFIG"),Vee=new mn("CdkDropList"),S8=(()=>{class n{element=f(Kt);dropContainer=f(Vee,{optional:!0,skipSelf:!0});_ngZone=f(Gi);_viewContainerRef=f(Wo);_dir=f(Kr,{optional:!0});_changeDetectorRef=f(oe);_selfHandle=f(w8,{optional:!0,self:!0});_parentDrag=f(CT,{optional:!0,skipSelf:!0});_dragDropRegistry=f(qx);_destroyed=new Ye;_handles=new cn([]);_previewTemplate=null;_placeholderTemplate=null;_dragRef;data;lockAxis=null;rootElementSelector;boundaryElement;dragStartDelay;freeDragPosition;get disabled(){return this._disabled||!!(this.dropContainer&&this.dropContainer.disabled)}set disabled(e){this._disabled=e,this._dragRef.disabled=this._disabled}_disabled=!1;constrainPosition;previewClass;previewContainer;scale=1;started=new be;released=new be;ended=new be;entered=new be;exited=new be;dropped=new be;moved=new Sr(e=>{let t=this._dragRef.moved.pipe(Pt(i=>({source:this,pointerPosition:i.pointerPosition,event:i.event,delta:i.delta,distance:i.distance}))).subscribe(e);return()=>{t.unsubscribe()}});_injector=f(xa);constructor(){let e=this.dropContainer,t=f(Lee,{optional:!0});this._dragRef=v8(this._injector,this.element,{dragStartThreshold:t&&t.dragStartThreshold!=null?t.dragStartThreshold:5,pointerDirectionChangeThreshold:t&&t.pointerDirectionChangeThreshold!=null?t.pointerDirectionChangeThreshold:5,zIndex:t?.zIndex}),this._dragRef.data=this,this._dragDropRegistry.registerDirectiveNode(this.element.nativeElement,this),t&&this._assignDefaults(t),e&&(e.addItem(this),e._dropListRef.beforeStarted.pipe(He(this._destroyed)).subscribe(()=>{this._dragRef.scale=this.scale})),this._syncInputs(this._dragRef),this._handleEvents(this._dragRef)}getPlaceholderElement(){return this._dragRef.getPlaceholderElement()}getRootElement(){return this._dragRef.getRootElement()}reset(){this._dragRef.reset()}resetToBoundary(){this._dragRef.resetToBoundary()}getFreeDragPosition(){return this._dragRef.getFreeDragPosition()}setFreeDragPosition(e){this._dragRef.setFreeDragPosition(e)}ngAfterViewInit(){Ya(()=>{this._updateRootElement(),this._setupHandlesListener(),this._dragRef.scale=this.scale,this.freeDragPosition&&this._dragRef.setFreeDragPosition(this.freeDragPosition)},{injector:this._injector})}ngOnChanges(e){let t=e.rootElementSelector,i=e.freeDragPosition;t&&!t.firstChange&&this._updateRootElement(),this._dragRef.scale=this.scale,i&&!i.firstChange&&this.freeDragPosition&&this._dragRef.setFreeDragPosition(this.freeDragPosition)}ngOnDestroy(){this.dropContainer&&this.dropContainer.removeItem(this),this._dragDropRegistry.removeDirectiveNode(this.element.nativeElement),this._ngZone.runOutsideAngular(()=>{this._handles.complete(),this._destroyed.next(),this._destroyed.complete(),this._dragRef.dispose()})}_addHandle(e){let t=this._handles.getValue();t.push(e),this._handles.next(t)}_removeHandle(e){let t=this._handles.getValue(),i=t.indexOf(e);i>-1&&(t.splice(i,1),this._handles.next(t))}_setPreviewTemplate(e){this._previewTemplate=e}_resetPreviewTemplate(e){e===this._previewTemplate&&(this._previewTemplate=null)}_setPlaceholderTemplate(e){this._placeholderTemplate=e}_resetPlaceholderTemplate(e){e===this._placeholderTemplate&&(this._placeholderTemplate=null)}_updateRootElement(){let e=this.element.nativeElement,t=e;this.rootElementSelector&&(t=e.closest!==void 0?e.closest(this.rootElementSelector):e.parentElement?.closest(this.rootElementSelector)),this._dragRef.withRootElement(t||e)}_getBoundaryElement(){let e=this.boundaryElement;return e?typeof e=="string"?this.element.nativeElement.closest(e):cl(e):null}_syncInputs(e){e.beforeStarted.subscribe(()=>{if(!e.isDragging()){let t=this._dir,i=this.dragStartDelay,a=this._placeholderTemplate?{template:this._placeholderTemplate.templateRef,context:this._placeholderTemplate.data,viewContainer:this._viewContainerRef}:null,s=this._previewTemplate?{template:this._previewTemplate.templateRef,context:this._previewTemplate.data,matchSize:this._previewTemplate.matchSize,viewContainer:this._viewContainerRef}:null;e.disabled=this.disabled,e.lockAxis=this.lockAxis,e.scale=this.scale,e.dragStartDelay=typeof i=="object"&&i?i:mm(i),e.constrainPosition=this.constrainPosition,e.previewClass=this.previewClass,e.withBoundaryElement(this._getBoundaryElement()).withPlaceholderTemplate(a).withPreviewTemplate(s).withPreviewContainer(this.previewContainer||"global"),t&&e.withDirection(t.value)}}),e.beforeStarted.pipe(Gr(1)).subscribe(()=>{if(this._parentDrag){e.withParent(this._parentDrag._dragRef);return}let t=this.element.nativeElement.parentElement;for(;t;){let i=this._dragDropRegistry.getDragDirectiveForNode(t);if(i){e.withParent(i._dragRef);break}t=t.parentElement}})}_handleEvents(e){e.started.subscribe(t=>{this.started.emit({source:this,event:t.event}),this._changeDetectorRef.markForCheck()}),e.released.subscribe(t=>{this.released.emit({source:this,event:t.event})}),e.ended.subscribe(t=>{this.ended.emit({source:this,distance:t.distance,dropPoint:t.dropPoint,event:t.event}),this._changeDetectorRef.markForCheck()}),e.entered.subscribe(t=>{this.entered.emit({container:t.container.data,item:this,currentIndex:t.currentIndex})}),e.exited.subscribe(t=>{this.exited.emit({container:t.container.data,item:this})}),e.dropped.subscribe(t=>{this.dropped.emit({previousIndex:t.previousIndex,currentIndex:t.currentIndex,previousContainer:t.previousContainer.data,container:t.container.data,isPointerOverContainer:t.isPointerOverContainer,item:this,distance:t.distance,dropPoint:t.dropPoint,event:t.event})})}_assignDefaults(e){let{lockAxis:t,dragStartDelay:i,constrainPosition:a,previewClass:s,boundaryElement:d,draggingDisabled:p,rootElementSelector:u,previewContainer:g}=e;this.disabled=p??!1,this.dragStartDelay=i||0,this.lockAxis=t||null,a&&(this.constrainPosition=a),s&&(this.previewClass=s),d&&(this.boundaryElement=d),u&&(this.rootElementSelector=u),g&&(this.previewContainer=g)}_setupHandlesListener(){this._handles.pipe(Qn(e=>{let t=e.map(i=>i.element);this._selfHandle&&this.rootElementSelector&&t.push(this.element),this._dragRef.withHandles(t)}),Dn(e=>ro(...e.map(t=>t._stateChanges.pipe(Di(t))))),He(this._destroyed)).subscribe(e=>{let t=this._dragRef,i=e.element.nativeElement;e.disabled?t.disableHandle(i):t.enableHandle(i)})}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["","cdkDrag",""]],hostAttrs:[1,"cdk-drag"],hostVars:4,hostBindings:function(t,i){t&2&&ne("cdk-drag-disabled",i.disabled)("cdk-drag-dragging",i._dragRef.isDragging())},inputs:{data:[0,"cdkDragData","data"],lockAxis:[0,"cdkDragLockAxis","lockAxis"],rootElementSelector:[0,"cdkDragRootElement","rootElementSelector"],boundaryElement:[0,"cdkDragBoundary","boundaryElement"],dragStartDelay:[0,"cdkDragStartDelay","dragStartDelay"],freeDragPosition:[0,"cdkDragFreeDragPosition","freeDragPosition"],disabled:[2,"cdkDragDisabled","disabled",zt],constrainPosition:[0,"cdkDragConstrainPosition","constrainPosition"],previewClass:[0,"cdkDragPreviewClass","previewClass"],previewContainer:[0,"cdkDragPreviewContainer","previewContainer"],scale:[2,"cdkDragScale","scale",qo]},outputs:{started:"cdkDragStarted",released:"cdkDragReleased",ended:"cdkDragEnded",entered:"cdkDragEntered",exited:"cdkDragExited",dropped:"cdkDragDropped",moved:"cdkDragMoved"},exportAs:["cdkDrag"],features:[un([{provide:CT,useExisting:n}]),Nn]})}return n})();var Qx=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=on({type:n});static \u0275inj=nn({providers:[zee],imports:[Lp]})}return n})();var jee=[[["caption"]],[["colgroup"],["col"]],"*"],$ee=["caption","colgroup, col","*"];function Hee(n,o){n&1&&Zt(0,2)}function Uee(n,o){n&1&&(r(0,"thead",0),li(1,1),l(),r(2,"tbody",0),li(3,2)(4,3),l(),r(5,"tfoot",0),li(6,4),l())}function Wee(n,o){n&1&&li(0,1)(1,2)(2,3)(3,4)}var sc=new mn("CDK_TABLE");var Yx=(()=>{class n{template=f(pa);constructor(){}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["","cdkCellDef",""]]})}return n})(),Zx=(()=>{class n{template=f(pa);constructor(){}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["","cdkHeaderCellDef",""]]})}return n})(),T8=(()=>{class n{template=f(pa);constructor(){}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["","cdkFooterCellDef",""]]})}return n})(),$m=(()=>{class n{_table=f(sc,{optional:!0});_hasStickyChanged=!1;get name(){return this._name}set name(e){this._setNameInput(e)}_name;get sticky(){return this._sticky}set sticky(e){e!==this._sticky&&(this._sticky=e,this._hasStickyChanged=!0)}_sticky=!1;get stickyEnd(){return this._stickyEnd}set stickyEnd(e){e!==this._stickyEnd&&(this._stickyEnd=e,this._hasStickyChanged=!0)}_stickyEnd=!1;cell;headerCell;footerCell;cssClassFriendlyName;_columnCssClassName;constructor(){}hasStickyChanged(){let e=this._hasStickyChanged;return this.resetStickyChanged(),e}resetStickyChanged(){this._hasStickyChanged=!1}_updateColumnCssClassName(){this._columnCssClassName=[`cdk-column-${this.cssClassFriendlyName}`]}_setNameInput(e){e&&(this._name=e,this.cssClassFriendlyName=e.replace(/[^a-z0-9_-]/gi,"-"),this._updateColumnCssClassName())}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["","cdkColumnDef",""]],contentQueries:function(t,i,a){if(t&1&&Zi(a,Yx,5)(a,Zx,5)(a,T8,5),t&2){let s;gt(s=ht())&&(i.cell=s.first),gt(s=ht())&&(i.headerCell=s.first),gt(s=ht())&&(i.footerCell=s.first)}},inputs:{name:[0,"cdkColumnDef","name"],sticky:[2,"sticky","sticky",zt],stickyEnd:[2,"stickyEnd","stickyEnd",zt]}})}return n})(),Xx=class{constructor(o,e){e.nativeElement.classList.add(...o._columnCssClassName)}},E8=(()=>{class n extends Xx{constructor(){super(f($m),f(Kt))}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["cdk-header-cell"],["th","cdk-header-cell",""]],hostAttrs:["role","columnheader",1,"cdk-header-cell"],features:[mi]})}return n})();var O8=(()=>{class n extends Xx{constructor(){let e=f($m),t=f(Kt);super(e,t);let i=e._table?._getCellRole();i&&t.nativeElement.setAttribute("role",i)}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["cdk-cell"],["td","cdk-cell",""]],hostAttrs:[1,"cdk-cell"],features:[mi]})}return n})();var wT=(()=>{class n{template=f(pa);_differs=f(Sd);columns;_columnsDiffer;constructor(){}ngOnChanges(e){if(!this._columnsDiffer){let t=e.columns&&e.columns.currentValue||[];this._columnsDiffer=this._differs.find(t).create(),this._columnsDiffer.diff(t)}}getColumnsDiff(){return this._columnsDiffer.diff(this.columns)}extractCellTemplate(e){return this instanceof U0?e.headerCell.template:this instanceof MT?e.footerCell.template:e.cell.template}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,features:[Nn]})}return n})(),U0=(()=>{class n extends wT{_table=f(sc,{optional:!0});_hasStickyChanged=!1;get sticky(){return this._sticky}set sticky(e){e!==this._sticky&&(this._sticky=e,this._hasStickyChanged=!0)}_sticky=!1;constructor(){super(f(pa),f(Sd))}ngOnChanges(e){super.ngOnChanges(e)}hasStickyChanged(){let e=this._hasStickyChanged;return this.resetStickyChanged(),e}resetStickyChanged(){this._hasStickyChanged=!1}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["","cdkHeaderRowDef",""]],inputs:{columns:[0,"cdkHeaderRowDef","columns"],sticky:[2,"cdkHeaderRowDefSticky","sticky",zt]},features:[mi,Nn]})}return n})(),MT=(()=>{class n extends wT{_table=f(sc,{optional:!0});_hasStickyChanged=!1;get sticky(){return this._sticky}set sticky(e){e!==this._sticky&&(this._sticky=e,this._hasStickyChanged=!0)}_sticky=!1;constructor(){super(f(pa),f(Sd))}ngOnChanges(e){super.ngOnChanges(e)}hasStickyChanged(){let e=this._hasStickyChanged;return this.resetStickyChanged(),e}resetStickyChanged(){this._hasStickyChanged=!1}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["","cdkFooterRowDef",""]],inputs:{columns:[0,"cdkFooterRowDef","columns"],sticky:[2,"cdkFooterRowDefSticky","sticky",zt]},features:[mi,Nn]})}return n})(),Jx=(()=>{class n extends wT{_table=f(sc,{optional:!0});when;constructor(){super(f(pa),f(Sd))}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["","cdkRowDef",""]],inputs:{columns:[0,"cdkRowDefColumns","columns"],when:[0,"cdkRowDefWhen","when"]},features:[mi]})}return n})(),bu=(()=>{class n{_viewContainer=f(Wo);cells;context;static mostRecentCellOutlet=null;constructor(){n.mostRecentCellOutlet=this}ngOnDestroy(){n.mostRecentCellOutlet===this&&(n.mostRecentCellOutlet=null)}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["","cdkCellOutlet",""]]})}return n})(),ST=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["cdk-header-row"],["tr","cdk-header-row",""]],hostAttrs:["role","row",1,"cdk-header-row"],decls:1,vars:0,consts:[["cdkCellOutlet",""]],template:function(t,i){t&1&&li(0,0)},dependencies:[bu],encapsulation:2})}return n})();var kT=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["cdk-row"],["tr","cdk-row",""]],hostAttrs:["role","row",1,"cdk-row"],decls:1,vars:0,consts:[["cdkCellOutlet",""]],template:function(t,i){t&1&&li(0,0)},dependencies:[bu],encapsulation:2})}return n})(),D8=(()=>{class n{templateRef=f(pa);_contentClassNames=["cdk-no-data-row","cdk-row"];_cellClassNames=["cdk-cell","cdk-no-data-cell"];_cellSelector="td, cdk-cell, [cdk-cell], .cdk-cell";constructor(){}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["ng-template","cdkNoDataRow",""]]})}return n})(),k8=["top","bottom","left","right"],yT=class{_isNativeHtmlTable;_stickCellCss;_isBrowser;_needsPositionStickyOnElement;direction;_positionListener;_tableInjector;_elemSizeCache=new WeakMap;_resizeObserver=globalThis?.ResizeObserver?new globalThis.ResizeObserver(o=>this._updateCachedSizes(o)):null;_updatedStickyColumnsParamsToReplay=[];_stickyColumnsReplayTimeout=null;_cachedCellWidths=[];_borderCellCss;_destroyed=!1;constructor(o,e,t=!0,i=!0,a,s,d){this._isNativeHtmlTable=o,this._stickCellCss=e,this._isBrowser=t,this._needsPositionStickyOnElement=i,this.direction=a,this._positionListener=s,this._tableInjector=d,this._borderCellCss={top:`${e}-border-elem-top`,bottom:`${e}-border-elem-bottom`,left:`${e}-border-elem-left`,right:`${e}-border-elem-right`}}clearStickyPositioning(o,e){(e.includes("left")||e.includes("right"))&&this._removeFromStickyColumnReplayQueue(o);let t=[];for(let i of o)i.nodeType===i.ELEMENT_NODE&&t.push(i,...Array.from(i.children));Ya({write:()=>{for(let i of t)this._removeStickyStyle(i,e)}},{injector:this._tableInjector})}updateStickyColumns(o,e,t,i=!0,a=!0){if(!o.length||!this._isBrowser||!(e.some(k=>k)||t.some(k=>k))){this._positionListener?.stickyColumnsUpdated({sizes:[]}),this._positionListener?.stickyEndColumnsUpdated({sizes:[]});return}let s=o[0],d=s.children.length,p=this.direction==="rtl",u=p?"right":"left",g=p?"left":"right",C=e.lastIndexOf(!0),M=t.indexOf(!0),x,b,P;a&&this._updateStickyColumnReplayQueue({rows:[...o],stickyStartStates:[...e],stickyEndStates:[...t]}),Ya({earlyRead:()=>{x=this._getCellWidths(s,i),b=this._getStickyStartColumnPositions(x,e),P=this._getStickyEndColumnPositions(x,t)},write:()=>{for(let k of o)for(let S=0;S<d;S++){let O=k.children[S];e[S]&&this._addStickyStyle(O,u,b[S],S===C),t[S]&&this._addStickyStyle(O,g,P[S],S===M)}this._positionListener&&x.some(k=>!!k)&&(this._positionListener.stickyColumnsUpdated({sizes:C===-1?[]:x.slice(0,C+1).map((k,S)=>e[S]?k:null)}),this._positionListener.stickyEndColumnsUpdated({sizes:M===-1?[]:x.slice(M).map((k,S)=>t[S+M]?k:null).reverse()}))}},{injector:this._tableInjector})}stickRows(o,e,t){if(!this._isBrowser)return;let i=t==="bottom"?o.slice().reverse():o,a=t==="bottom"?e.slice().reverse():e,s=[],d=[],p=[];Ya({earlyRead:()=>{for(let u=0,g=0;u<i.length;u++){if(!a[u])continue;s[u]=g;let C=i[u];p[u]=this._isNativeHtmlTable?Array.from(C.children):[C];let M=this._retrieveElementSize(C).height;g+=M,d[u]=M}},write:()=>{let u=a.lastIndexOf(!0);for(let g=0;g<i.length;g++){if(!a[g])continue;let C=s[g],M=g===u;for(let x of p[g])this._addStickyStyle(x,t,C,M)}t==="top"?this._positionListener?.stickyHeaderRowsUpdated({sizes:d,offsets:s,elements:p}):this._positionListener?.stickyFooterRowsUpdated({sizes:d,offsets:s,elements:p})}},{injector:this._tableInjector})}updateStickyFooterContainer(o,e){this._isNativeHtmlTable&&Ya({write:()=>{let t=o.querySelector("tfoot");t&&(e.some(i=>!i)?this._removeStickyStyle(t,["bottom"]):this._addStickyStyle(t,"bottom",0,!1))}},{injector:this._tableInjector})}destroy(){this._stickyColumnsReplayTimeout&&clearTimeout(this._stickyColumnsReplayTimeout),this._resizeObserver?.disconnect(),this._destroyed=!0}_removeStickyStyle(o,e){if(!o.classList.contains(this._stickCellCss))return;for(let i of e)o.style[i]="",o.classList.remove(this._borderCellCss[i]);k8.some(i=>e.indexOf(i)===-1&&o.style[i])?o.style.zIndex=this._getCalculatedZIndex(o):(o.style.zIndex="",this._needsPositionStickyOnElement&&(o.style.position=""),o.classList.remove(this._stickCellCss))}_addStickyStyle(o,e,t,i){o.classList.add(this._stickCellCss),i&&o.classList.add(this._borderCellCss[e]),o.style[e]=`${t}px`,o.style.zIndex=this._getCalculatedZIndex(o),this._needsPositionStickyOnElement&&(o.style.cssText+="position: -webkit-sticky; position: sticky; ")}_getCalculatedZIndex(o){let e={top:100,bottom:10,left:1,right:1},t=0;for(let i of k8)o.style[i]&&(t+=e[i]);return t?`${t}`:""}_getCellWidths(o,e=!0){if(!e&&this._cachedCellWidths.length)return this._cachedCellWidths;let t=[],i=o.children;for(let a=0;a<i.length;a++){let s=i[a];t.push(this._retrieveElementSize(s).width)}return this._cachedCellWidths=t,t}_getStickyStartColumnPositions(o,e){let t=[],i=0;for(let a=0;a<o.length;a++)e[a]&&(t[a]=i,i+=o[a]);return t}_getStickyEndColumnPositions(o,e){let t=[],i=0;for(let a=o.length;a>0;a--)e[a]&&(t[a]=i,i+=o[a]);return t}_retrieveElementSize(o){let e=this._elemSizeCache.get(o);if(e)return e;let t=o.getBoundingClientRect(),i={width:t.width,height:t.height};return this._resizeObserver&&(this._elemSizeCache.set(o,i),this._resizeObserver.observe(o,{box:"border-box"})),i}_updateStickyColumnReplayQueue(o){this._removeFromStickyColumnReplayQueue(o.rows),this._stickyColumnsReplayTimeout||this._updatedStickyColumnsParamsToReplay.push(o)}_removeFromStickyColumnReplayQueue(o){let e=new Set(o);for(let t of this._updatedStickyColumnsParamsToReplay)t.rows=t.rows.filter(i=>!e.has(i));this._updatedStickyColumnsParamsToReplay=this._updatedStickyColumnsParamsToReplay.filter(t=>!!t.rows.length)}_updateCachedSizes(o){let e=!1;for(let t of o){let i=t.borderBoxSize?.length?{width:t.borderBoxSize[0].inlineSize,height:t.borderBoxSize[0].blockSize}:{width:t.contentRect.width,height:t.contentRect.height};i.width!==this._elemSizeCache.get(t.target)?.width&&Gee(t.target)&&(e=!0),this._elemSizeCache.set(t.target,i)}e&&this._updatedStickyColumnsParamsToReplay.length&&(this._stickyColumnsReplayTimeout&&clearTimeout(this._stickyColumnsReplayTimeout),this._stickyColumnsReplayTimeout=setTimeout(()=>{if(!this._destroyed){for(let t of this._updatedStickyColumnsParamsToReplay)this.updateStickyColumns(t.rows,t.stickyStartStates,t.stickyEndStates,!0,!1);this._updatedStickyColumnsParamsToReplay=[],this._stickyColumnsReplayTimeout=null}},0))}};function Gee(n){return["cdk-cell","cdk-header-cell","cdk-footer-cell"].some(o=>n.classList.contains(o))}var H0=new mn("STICKY_POSITIONING_LISTENER");var PT=(()=>{class n{viewContainer=f(Wo);elementRef=f(Kt);constructor(){let e=f(sc);e._rowOutlet=this,e._outletAssigned()}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["","rowOutlet",""]]})}return n})(),TT=(()=>{class n{viewContainer=f(Wo);elementRef=f(Kt);constructor(){let e=f(sc);e._headerRowOutlet=this,e._outletAssigned()}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["","headerRowOutlet",""]]})}return n})(),ET=(()=>{class n{viewContainer=f(Wo);elementRef=f(Kt);constructor(){let e=f(sc);e._footerRowOutlet=this,e._outletAssigned()}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["","footerRowOutlet",""]]})}return n})(),OT=(()=>{class n{viewContainer=f(Wo);elementRef=f(Kt);constructor(){let e=f(sc);e._noDataRowOutlet=this,e._outletAssigned()}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["","noDataRowOutlet",""]]})}return n})(),DT=(()=>{class n{_differs=f(Sd);_changeDetectorRef=f(oe);_elementRef=f(Kt);_dir=f(Kr,{optional:!0});_platform=f(ja);_viewRepeater;_viewportRuler=f(kd);_injector=f(xa);_virtualScrollViewport=f(FA,{optional:!0,host:!0});_positionListener=f(H0,{optional:!0})||f(H0,{optional:!0,skipSelf:!0});_document=f(Do);_data;_renderedRange;_onDestroy=new Ye;_renderRows;_renderChangeSubscription=null;_columnDefsByName=new Map;_rowDefs;_headerRowDefs;_footerRowDefs;_dataDiffer;_defaultRowDef=null;_customColumnDefs=new Set;_customRowDefs=new Set;_customHeaderRowDefs=new Set;_customFooterRowDefs=new Set;_customNoDataRow=null;_headerRowDefChanged=!0;_footerRowDefChanged=!0;_stickyColumnStylesNeedReset=!0;_forceRecalculateCellWidths=!0;_cachedRenderRowsMap=new Map;_isNativeHtmlTable;_stickyStyler;stickyCssClass="cdk-table-sticky";needsPositionStickyOnElement=!0;_isServer;_isShowingNoDataRow=!1;_hasAllOutlets=!1;_hasInitialized=!1;_headerRowStickyUpdates=new Ye;_footerRowStickyUpdates=new Ye;_disableVirtualScrolling=!1;_getCellRole(){if(this._cellRoleInternal===void 0){let e=this._elementRef.nativeElement.getAttribute("role");return e==="grid"||e==="treegrid"?"gridcell":"cell"}return this._cellRoleInternal}_cellRoleInternal=void 0;get trackBy(){return this._trackByFn}set trackBy(e){this._trackByFn=e}_trackByFn;get dataSource(){return this._dataSource}set dataSource(e){this._dataSource!==e&&(this._switchDataSource(e),this._changeDetectorRef.markForCheck())}_dataSource;_dataSourceChanges=new Ye;_dataStream=new Ye;get multiTemplateDataRows(){return this._multiTemplateDataRows}set multiTemplateDataRows(e){this._multiTemplateDataRows=e,this._rowOutlet&&this._rowOutlet.viewContainer.length&&(this._forceRenderDataRows(),this.updateStickyColumnStyles())}_multiTemplateDataRows=!1;get fixedLayout(){return this._virtualScrollEnabled()?!0:this._fixedLayout}set fixedLayout(e){this._fixedLayout=e,this._forceRecalculateCellWidths=!0,this._stickyColumnStylesNeedReset=!0}_fixedLayout=!1;recycleRows=!1;contentChanged=new be;viewChange=new cn({start:0,end:Number.MAX_VALUE});_rowOutlet;_headerRowOutlet;_footerRowOutlet;_noDataRowOutlet;_contentColumnDefs;_contentRowDefs;_contentHeaderRowDefs;_contentFooterRowDefs;_noDataRow;constructor(){f(new cm("role"),{optional:!0})||this._elementRef.nativeElement.setAttribute("role","table"),this._isServer=!this._platform.isBrowser,this._isNativeHtmlTable=this._elementRef.nativeElement.nodeName==="TABLE",this._dataDiffer=this._differs.find([]).create((t,i)=>this.trackBy?this.trackBy(i.dataIndex,i.data):i)}ngOnInit(){this._setupStickyStyler(),this._viewportRuler.change().pipe(He(this._onDestroy)).subscribe(()=>{this._forceRecalculateCellWidths=!0})}ngAfterContentInit(){this._viewRepeater=this.recycleRows||this._virtualScrollEnabled()?new NA:new $A,this._virtualScrollEnabled()&&this._setupVirtualScrolling(this._virtualScrollViewport),this._hasInitialized=!0}ngAfterContentChecked(){this._canRender()&&this._render()}ngOnDestroy(){this._stickyStyler?.destroy(),[this._rowOutlet?.viewContainer,this._headerRowOutlet?.viewContainer,this._footerRowOutlet?.viewContainer,this._cachedRenderRowsMap,this._customColumnDefs,this._customRowDefs,this._customHeaderRowDefs,this._customFooterRowDefs,this._columnDefsByName].forEach(e=>{e?.clear()}),this._headerRowDefs=[],this._footerRowDefs=[],this._defaultRowDef=null,this._headerRowStickyUpdates.complete(),this._footerRowStickyUpdates.complete(),this._onDestroy.next(),this._onDestroy.complete(),sg(this.dataSource)&&this.dataSource.disconnect(this)}renderRows(){this._renderRows=this._getAllRenderRows();let e=this._dataDiffer.diff(this._renderRows);if(!e){this._updateNoDataRow(),this.contentChanged.next();return}let t=this._rowOutlet.viewContainer;this._viewRepeater.applyChanges(e,t,(i,a,s)=>this._getEmbeddedViewArgs(i.item,s),i=>i.item.data,i=>{i.operation===AA.INSERTED&&i.context&&this._renderCellTemplateForItem(i.record.item.rowDef,i.context)}),this._updateRowIndexContext(),e.forEachIdentityChange(i=>{let a=t.get(i.currentIndex);a.context.$implicit=i.item.data}),this._updateNoDataRow(),this.contentChanged.next(),this.updateStickyColumnStyles()}addColumnDef(e){this._customColumnDefs.add(e)}removeColumnDef(e){this._customColumnDefs.delete(e)}addRowDef(e){this._customRowDefs.add(e)}removeRowDef(e){this._customRowDefs.delete(e)}addHeaderRowDef(e){this._customHeaderRowDefs.add(e),this._headerRowDefChanged=!0}removeHeaderRowDef(e){this._customHeaderRowDefs.delete(e),this._headerRowDefChanged=!0}addFooterRowDef(e){this._customFooterRowDefs.add(e),this._footerRowDefChanged=!0}removeFooterRowDef(e){this._customFooterRowDefs.delete(e),this._footerRowDefChanged=!0}setNoDataRow(e){this._customNoDataRow=e}updateStickyHeaderRowStyles(){let e=this._getRenderedRows(this._headerRowOutlet);if(this._isNativeHtmlTable){let i=P8(this._headerRowOutlet,"thead");i&&(i.style.display=e.length?"":"none")}let t=this._headerRowDefs.map(i=>i.sticky);this._stickyStyler.clearStickyPositioning(e,["top"]),this._stickyStyler.stickRows(e,t,"top"),this._headerRowDefs.forEach(i=>i.resetStickyChanged())}updateStickyFooterRowStyles(){let e=this._getRenderedRows(this._footerRowOutlet);if(this._isNativeHtmlTable){let i=P8(this._footerRowOutlet,"tfoot");i&&(i.style.display=e.length?"":"none")}let t=this._footerRowDefs.map(i=>i.sticky);this._stickyStyler.clearStickyPositioning(e,["bottom"]),this._stickyStyler.stickRows(e,t,"bottom"),this._stickyStyler.updateStickyFooterContainer(this._elementRef.nativeElement,t),this._footerRowDefs.forEach(i=>i.resetStickyChanged())}updateStickyColumnStyles(){let e=this._getRenderedRows(this._headerRowOutlet),t=this._getRenderedRows(this._rowOutlet),i=this._getRenderedRows(this._footerRowOutlet);(this._isNativeHtmlTable&&!this.fixedLayout||this._stickyColumnStylesNeedReset)&&(this._stickyStyler.clearStickyPositioning([...e,...t,...i],["left","right"]),this._stickyColumnStylesNeedReset=!1),e.forEach((a,s)=>{this._addStickyColumnStyles([a],this._headerRowDefs[s])}),this._rowDefs.forEach(a=>{let s=[];for(let d=0;d<t.length;d++)this._renderRows[d].rowDef===a&&s.push(t[d]);this._addStickyColumnStyles(s,a)}),i.forEach((a,s)=>{this._addStickyColumnStyles([a],this._footerRowDefs[s])}),Array.from(this._columnDefsByName.values()).forEach(a=>a.resetStickyChanged())}stickyColumnsUpdated(e){this._positionListener?.stickyColumnsUpdated(e)}stickyEndColumnsUpdated(e){this._positionListener?.stickyEndColumnsUpdated(e)}stickyHeaderRowsUpdated(e){this._headerRowStickyUpdates.next(e),this._positionListener?.stickyHeaderRowsUpdated(e)}stickyFooterRowsUpdated(e){this._footerRowStickyUpdates.next(e),this._positionListener?.stickyFooterRowsUpdated(e)}_outletAssigned(){!this._hasAllOutlets&&this._rowOutlet&&this._headerRowOutlet&&this._footerRowOutlet&&this._noDataRowOutlet&&(this._hasAllOutlets=!0,this._canRender()&&this._render())}_canRender(){return this._hasAllOutlets&&this._hasInitialized}_render(){this._cacheRowDefs(),this._cacheColumnDefs(),!this._headerRowDefs.length&&!this._footerRowDefs.length&&this._rowDefs.length;let t=this._renderUpdatedColumns()||this._headerRowDefChanged||this._footerRowDefChanged;this._stickyColumnStylesNeedReset=this._stickyColumnStylesNeedReset||t,this._forceRecalculateCellWidths=t,this._headerRowDefChanged&&(this._forceRenderHeaderRows(),this._headerRowDefChanged=!1),this._footerRowDefChanged&&(this._forceRenderFooterRows(),this._footerRowDefChanged=!1),this.dataSource&&this._rowDefs.length>0&&!this._renderChangeSubscription?this._observeRenderChanges():this._stickyColumnStylesNeedReset&&this.updateStickyColumnStyles(),this._checkStickyStates()}_getAllRenderRows(){if(!Array.isArray(this._data)||!this._renderedRange)return[];let e=[],t=Math.min(this._data.length,this._renderedRange.end),i=this._cachedRenderRowsMap;this._cachedRenderRowsMap=new Map;for(let a=this._renderedRange.start;a<t;a++){let s=this._data[a],d=this._getRenderRowsForData(s,a,i.get(s));this._cachedRenderRowsMap.has(s)||this._cachedRenderRowsMap.set(s,new WeakMap);for(let p=0;p<d.length;p++){let u=d[p],g=this._cachedRenderRowsMap.get(u.data);g.has(u.rowDef)?g.get(u.rowDef).push(u):g.set(u.rowDef,[u]),e.push(u)}}return e}_getRenderRowsForData(e,t,i){return this._getRowDefs(e,t).map(s=>{let d=i&&i.has(s)?i.get(s):[];if(d.length){let p=d.shift();return p.dataIndex=t,p}else return{data:e,rowDef:s,dataIndex:t}})}_cacheColumnDefs(){this._columnDefsByName.clear(),Kx(this._getOwnDefs(this._contentColumnDefs),this._customColumnDefs).forEach(t=>{this._columnDefsByName.has(t.name),this._columnDefsByName.set(t.name,t)})}_cacheRowDefs(){this._headerRowDefs=Kx(this._getOwnDefs(this._contentHeaderRowDefs),this._customHeaderRowDefs),this._footerRowDefs=Kx(this._getOwnDefs(this._contentFooterRowDefs),this._customFooterRowDefs),this._rowDefs=Kx(this._getOwnDefs(this._contentRowDefs),this._customRowDefs);let e=this._rowDefs.filter(t=>!t.when);this._defaultRowDef=e[0]}_renderUpdatedColumns(){let e=(s,d)=>{let p=!!d.getColumnsDiff();return s||p},t=this._rowDefs.reduce(e,!1);t&&this._forceRenderDataRows();let i=this._headerRowDefs.reduce(e,!1);i&&this._forceRenderHeaderRows();let a=this._footerRowDefs.reduce(e,!1);return a&&this._forceRenderFooterRows(),t||i||a}_switchDataSource(e){this._data=[],sg(this.dataSource)&&this.dataSource.disconnect(this),this._renderChangeSubscription&&(this._renderChangeSubscription.unsubscribe(),this._renderChangeSubscription=null),e||(this._dataDiffer&&this._dataDiffer.diff([]),this._rowOutlet&&this._rowOutlet.viewContainer.clear()),this._dataSource=e}_observeRenderChanges(){if(!this.dataSource)return;let e;sg(this.dataSource)?e=this.dataSource.connect(this):af(this.dataSource)?e=this.dataSource:Array.isArray(this.dataSource)&&(e=Vt(this.dataSource)),this._renderChangeSubscription=mr([e,this.viewChange]).pipe(He(this._onDestroy)).subscribe(([t,i])=>{this._data=t||[],this._renderedRange=i,this._dataStream.next(t),this.renderRows()})}_forceRenderHeaderRows(){this._headerRowOutlet.viewContainer.length>0&&this._headerRowOutlet.viewContainer.clear(),this._headerRowDefs.forEach((e,t)=>this._renderRow(this._headerRowOutlet,e,t)),this.updateStickyHeaderRowStyles()}_forceRenderFooterRows(){this._footerRowOutlet.viewContainer.length>0&&this._footerRowOutlet.viewContainer.clear(),this._footerRowDefs.forEach((e,t)=>this._renderRow(this._footerRowOutlet,e,t)),this.updateStickyFooterRowStyles()}_addStickyColumnStyles(e,t){let i=Array.from(t?.columns||[]).map(d=>{let p=this._columnDefsByName.get(d);return p}),a=i.map(d=>d.sticky),s=i.map(d=>d.stickyEnd);this._stickyStyler.updateStickyColumns(e,a,s,!this.fixedLayout||this._forceRecalculateCellWidths)}_getRenderedRows(e){let t=[];for(let i=0;i<e.viewContainer.length;i++){let a=e.viewContainer.get(i);t.push(a.rootNodes[0])}return t}_getRowDefs(e,t){if(this._rowDefs.length===1)return[this._rowDefs[0]];let i=[];if(this.multiTemplateDataRows)i=this._rowDefs.filter(a=>!a.when||a.when(t,e));else{let a=this._rowDefs.find(s=>s.when&&s.when(t,e))||this._defaultRowDef;a&&i.push(a)}return i.length,i}_getEmbeddedViewArgs(e,t){let i=e.rowDef,a={$implicit:e.data};return{templateRef:i.template,context:a,index:t}}_renderRow(e,t,i,a={}){let s=e.viewContainer.createEmbeddedView(t.template,a,i);return this._renderCellTemplateForItem(t,a),s}_renderCellTemplateForItem(e,t){for(let i of this._getCellTemplates(e))bu.mostRecentCellOutlet&&bu.mostRecentCellOutlet._viewContainer.createEmbeddedView(i,t);this._changeDetectorRef.markForCheck()}_updateRowIndexContext(){let e=this._rowOutlet.viewContainer;for(let t=0,i=e.length;t<i;t++){let s=e.get(t).context;s.count=i,s.first=t===0,s.last=t===i-1,s.even=t%2===0,s.odd=!s.even,this.multiTemplateDataRows?(s.dataIndex=this._renderRows[t].dataIndex,s.renderIndex=t):s.index=this._renderRows[t].dataIndex}}_getCellTemplates(e){return!e||!e.columns?[]:Array.from(e.columns,t=>{let i=this._columnDefsByName.get(t);return e.extractCellTemplate(i)})}_forceRenderDataRows(){this._dataDiffer.diff([]),this._rowOutlet.viewContainer.clear(),this.renderRows()}_checkStickyStates(){let e=(t,i)=>t||i.hasStickyChanged();this._headerRowDefs.reduce(e,!1)&&this.updateStickyHeaderRowStyles(),this._footerRowDefs.reduce(e,!1)&&this.updateStickyFooterRowStyles(),Array.from(this._columnDefsByName.values()).reduce(e,!1)&&(this._stickyColumnStylesNeedReset=!0,this.updateStickyColumnStyles())}_setupStickyStyler(){let e=this._dir?this._dir.value:"ltr",t=this._injector;this._stickyStyler=new yT(this._isNativeHtmlTable,this.stickyCssClass,this._platform.isBrowser,this.needsPositionStickyOnElement,e,this,t),(this._dir?this._dir.change:Vt()).pipe(He(this._onDestroy)).subscribe(i=>{this._stickyStyler.direction=i,this.updateStickyColumnStyles()})}_setupVirtualScrolling(e){let t=typeof requestAnimationFrame<"u"?rl:J4;this.viewChange.next({start:0,end:0}),e.renderedRangeStream.pipe(sl(0,t),He(this._onDestroy)).subscribe(this.viewChange),e.attach({dataStream:this._dataStream,measureRangeSize:(i,a)=>this._measureRangeSize(i,a)}),mr([e.renderedContentOffset,this._headerRowStickyUpdates]).pipe(He(this._onDestroy)).subscribe(([i,a])=>{if(!(!a.sizes||!a.offsets||!a.elements))for(let s=0;s<a.elements.length;s++){let d=a.elements[s];if(d){let p=a.offsets[s],u=i!==0?Math.max(i-p,p):-p;for(let g of d)g.style.top=`${-u}px`}}}),mr([e.renderedContentOffset,this._footerRowStickyUpdates]).pipe(He(this._onDestroy)).subscribe(([i,a])=>{if(!(!a.sizes||!a.offsets||!a.elements))for(let s=0;s<a.elements.length;s++){let d=a.elements[s];if(d)for(let p of d)p.style.bottom=`${i+a.offsets[s]}px`}})}_getOwnDefs(e){return e.filter(t=>!t._table||t._table===this)}_updateNoDataRow(){let e=this._customNoDataRow||this._noDataRow;if(!e)return;let t=this._rowOutlet.viewContainer.length===0;if(t===this._isShowingNoDataRow)return;let i=this._noDataRowOutlet.viewContainer;if(t){let a=i.createEmbeddedView(e.templateRef),s=a.rootNodes[0];if(a.rootNodes.length===1&&s?.nodeType===this._document.ELEMENT_NODE){s.setAttribute("role","row"),s.classList.add(...e._contentClassNames);let d=s.querySelectorAll(e._cellSelector);for(let p=0;p<d.length;p++)d[p].classList.add(...e._cellClassNames)}}else i.clear();this._isShowingNoDataRow=t,this._changeDetectorRef.markForCheck()}_measureRangeSize(e,t){if(e.start>=e.end||t!=="vertical")return 0;let i=this.viewChange.value,a=this._rowOutlet.viewContainer;e.start<i.start||e.end>i.end;let s=e.start-i.start,d=e.end-e.start,p,u;for(let M=0;M<d;M++){let x=a.get(M+s);if(x&&x.rootNodes.length){p=u=x.rootNodes[0];break}}for(let M=d-1;M>-1;M--){let x=a.get(M+s);if(x&&x.rootNodes.length){u=x.rootNodes[x.rootNodes.length-1];break}}let g=p?.getBoundingClientRect?.(),C=u?.getBoundingClientRect?.();return g&&C?C.bottom-g.top:0}_virtualScrollEnabled(){return!this._disableVirtualScrolling&&this._virtualScrollViewport!=null}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["cdk-table"],["table","cdk-table",""]],contentQueries:function(t,i,a){if(t&1&&Zi(a,D8,5)(a,$m,5)(a,Jx,5)(a,U0,5)(a,MT,5),t&2){let s;gt(s=ht())&&(i._noDataRow=s.first),gt(s=ht())&&(i._contentColumnDefs=s),gt(s=ht())&&(i._contentRowDefs=s),gt(s=ht())&&(i._contentHeaderRowDefs=s),gt(s=ht())&&(i._contentFooterRowDefs=s)}},hostAttrs:[1,"cdk-table"],hostVars:2,hostBindings:function(t,i){t&2&&ne("cdk-table-fixed-layout",i.fixedLayout)},inputs:{trackBy:"trackBy",dataSource:"dataSource",multiTemplateDataRows:[2,"multiTemplateDataRows","multiTemplateDataRows",zt],fixedLayout:[2,"fixedLayout","fixedLayout",zt],recycleRows:[2,"recycleRows","recycleRows",zt]},outputs:{contentChanged:"contentChanged"},exportAs:["cdkTable"],features:[un([{provide:sc,useExisting:n},{provide:H0,useValue:null}])],ngContentSelectors:$ee,decls:5,vars:2,consts:[["role","rowgroup"],["headerRowOutlet",""],["rowOutlet",""],["noDataRowOutlet",""],["footerRowOutlet",""]],template:function(t,i){t&1&&(pi(jee),Zt(0),Zt(1,1),T(2,Hee,1,0),T(3,Uee,7,0)(4,Wee,4,0)),t&2&&(m(2),E(i._isServer?2:-1),m(),E(i._isNativeHtmlTable?3:4))},dependencies:[TT,PT,OT,ET],styles:[`.cdk-table-fixed-layout {
|
||
table-layout: fixed;
|
||
}
|
||
`],encapsulation:2})}return n})();function Kx(n,o){return n.concat(Array.from(o))}function P8(n,o){let e=o.toUpperCase(),t=n.viewContainer.element.nativeElement;for(;t;){let i=t.nodeType===1?t.nodeName:null;if(i===e)return t;if(i==="TABLE")break;t=t.parentNode}return null}var e1=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=on({type:n});static \u0275inj=nn({imports:[RA]})}return n})();var I8=["*"],qee=["content"],Qee=[[["mat-drawer"]],[["mat-drawer-content"]],"*"],Kee=["mat-drawer","mat-drawer-content","*"];function Xee(n,o){if(n&1){let e=R();r(0,"div",1),_("click",function(){y(e);let i=h();return w(i._onBackdropClicked())}),l()}if(n&2){let e=h();ne("mat-drawer-shown",e._isShowingBackdrop())}}function Yee(n,o){n&1&&(r(0,"mat-drawer-content"),Zt(1,2),l())}var Zee=new mn("MAT_DRAWER_DEFAULT_AUTOSIZE",{providedIn:"root",factory:()=>!1}),A8=new mn("MAT_DRAWER_CONTAINER"),W0=(()=>{class n extends $C{_platform=f(ja);_changeDetectorRef=f(oe);_container=f(AT);constructor(){let e=f(Kt),t=f(jk),i=f(Gi);super(e,t,i)}ngAfterContentInit(){this._container._contentMarginChanges.subscribe(()=>{this._changeDetectorRef.markForCheck()})}_shouldBeHidden(){if(this._platform.isBrowser)return!1;let{start:e,end:t}=this._container;return e!=null&&e.mode!=="over"&&e.opened||t!=null&&t.mode!=="over"&&t.opened}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["mat-drawer-content"]],hostAttrs:[1,"mat-drawer-content"],hostVars:6,hostBindings:function(t,i){t&2&&(Tt("margin-left",i._container._contentMargins.left,"px")("margin-right",i._container._contentMargins.right,"px"),ne("mat-drawer-content-hidden",i._shouldBeHidden()))},features:[un([{provide:$C,useExisting:n}]),mi],ngContentSelectors:I8,decls:1,vars:0,template:function(t,i){t&1&&(pi(),Zt(0))},encapsulation:2,changeDetection:0})}return n})(),IT=(()=>{class n{_elementRef=f(Kt);_focusTrapFactory=f(e5);_focusMonitor=f(hs);_platform=f(ja);_ngZone=f(Gi);_renderer=f(qi);_interactivityChecker=f(JA);_doc=f(Do);_container=f(A8,{optional:!0});_focusTrap=null;_elementFocusedBeforeDrawerWasOpened=null;_eventCleanups;_isAttached=!1;_anchor=null;get position(){return this._position}set position(e){e=e==="end"?"end":"start",e!==this._position&&(this._isAttached&&this._updatePositionInParent(e),this._position=e,this.onPositionChanged.emit())}_position="start";get mode(){return this._mode}set mode(e){this._mode=e,this._updateFocusTrapState(),this._modeChanged.next()}_mode="over";get disableClose(){return this._disableClose}set disableClose(e){this._disableClose=Or(e)}_disableClose=!1;get autoFocus(){let e=this._autoFocus;return e??(this.mode==="side"?"dialog":"first-tabbable")}set autoFocus(e){(e==="true"||e==="false"||e==null)&&(e=Or(e)),this._autoFocus=e}_autoFocus;get opened(){return this._opened()}set opened(e){this.toggle(Or(e))}_opened=z(!1);_openedVia=null;_animationStarted=new Ye;_animationEnd=new Ye;openedChange=new be(!0);_openedStream=this.openedChange.pipe(Yi(e=>e),Pt(()=>{}));openedStart=this._animationStarted.pipe(Yi(()=>this.opened),sf(void 0));_closedStream=this.openedChange.pipe(Yi(e=>!e),Pt(()=>{}));closedStart=this._animationStarted.pipe(Yi(()=>!this.opened),sf(void 0));_destroyed=new Ye;onPositionChanged=new be;_content;_modeChanged=new Ye;_injector=f(xa);_changeDetectorRef=f(oe);constructor(){this.openedChange.pipe(He(this._destroyed)).subscribe(e=>{e?(this._elementFocusedBeforeDrawerWasOpened=this._doc.activeElement,this._takeFocus()):this._isFocusWithinDrawer()&&this._restoreFocus(this._openedVia||"program")}),this._eventCleanups=this._ngZone.runOutsideAngular(()=>{let e=this._renderer,t=this._elementRef.nativeElement;return[e.listen(t,"keydown",i=>{i.keyCode===27&&!this.disableClose&&!gs(i)&&this._ngZone.run(()=>{this.close(),i.stopPropagation(),i.preventDefault()})}),e.listen(t,"transitionend",this._handleTransitionEvent),e.listen(t,"transitioncancel",this._handleTransitionEvent)]}),this._animationEnd.subscribe(()=>{this.openedChange.emit(this.opened)})}_forceFocus(e,t){this._interactivityChecker.isFocusable(e)||(e.tabIndex=-1,this._ngZone.runOutsideAngular(()=>{let i=()=>{a(),s(),e.removeAttribute("tabindex")},a=this._renderer.listen(e,"blur",i),s=this._renderer.listen(e,"mousedown",i)})),e.focus(t)}_focusByCssSelector(e,t){let i=this._elementRef.nativeElement.querySelector(e);i&&this._forceFocus(i,t)}_takeFocus(){if(!this._focusTrap)return;let e=this._elementRef.nativeElement;switch(this.autoFocus){case!1:case"dialog":return;case!0:case"first-tabbable":Ya(()=>{!this._focusTrap.focusInitialElement()&&typeof e.focus=="function"&&e.focus()},{injector:this._injector});break;case"first-heading":this._focusByCssSelector('h1, h2, h3, h4, h5, h6, [role="heading"]');break;default:this._focusByCssSelector(this.autoFocus);break}}_restoreFocus(e){this.autoFocus!=="dialog"&&(this._elementFocusedBeforeDrawerWasOpened?this._focusMonitor.focusVia(this._elementFocusedBeforeDrawerWasOpened,e):this._elementRef.nativeElement.blur(),this._elementFocusedBeforeDrawerWasOpened=null)}_isFocusWithinDrawer(){let e=this._doc.activeElement;return!!e&&this._elementRef.nativeElement.contains(e)}ngAfterViewInit(){this._isAttached=!0,this._position==="end"&&this._updatePositionInParent("end"),this._platform.isBrowser&&(this._focusTrap=this._focusTrapFactory.create(this._elementRef.nativeElement),this._updateFocusTrapState())}ngOnDestroy(){this._eventCleanups.forEach(e=>e()),this._focusTrap?.destroy(),this._anchor?.remove(),this._anchor=null,this._animationStarted.complete(),this._animationEnd.complete(),this._modeChanged.complete(),this._destroyed.next(),this._destroyed.complete()}open(e){return this.toggle(!0,e)}close(){return this.toggle(!1)}_closeViaBackdropClick(){return this._setOpen(!1,!0,"mouse")}toggle(e=!this.opened,t){e&&t&&(this._openedVia=t);let i=this._setOpen(e,!e&&this._isFocusWithinDrawer(),this._openedVia||"program");return e||(this._openedVia=null),i}_setOpen(e,t,i){return e===this.opened?Promise.resolve(e?"open":"close"):(this._opened.set(e),this._container?._transitionsEnabled?(this._setIsAnimating(!0),setTimeout(()=>this._animationStarted.next())):setTimeout(()=>{this._animationStarted.next(),this._animationEnd.next()}),this._elementRef.nativeElement.classList.toggle("mat-drawer-opened",e),!e&&t&&this._restoreFocus(i),this._changeDetectorRef.markForCheck(),this._updateFocusTrapState(),new Promise(a=>{this.openedChange.pipe(Gr(1)).subscribe(s=>a(s?"open":"close"))}))}_setIsAnimating(e){this._elementRef.nativeElement.classList.toggle("mat-drawer-animating",e)}_getWidth(){return this._elementRef.nativeElement.offsetWidth||0}_updateFocusTrapState(){this._focusTrap&&(this._focusTrap.enabled=this.opened&&!!this._container?._isShowingBackdrop())}_updatePositionInParent(e){if(!this._platform.isBrowser)return;let t=this._elementRef.nativeElement,i=t.parentNode;e==="end"?(this._anchor||(this._anchor=this._doc.createComment("mat-drawer-anchor"),i.insertBefore(this._anchor,t)),i.appendChild(t)):this._anchor&&this._anchor.parentNode.insertBefore(t,this._anchor)}_handleTransitionEvent=e=>{let t=this._elementRef.nativeElement;e.target===t&&this._ngZone.run(()=>{e.type==="transitionend"&&this._setIsAnimating(!1),this._animationEnd.next(e)})};static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["mat-drawer"]],viewQuery:function(t,i){if(t&1&&Kn(qee,5),t&2){let a;gt(a=ht())&&(i._content=a.first)}},hostAttrs:[1,"mat-drawer"],hostVars:12,hostBindings:function(t,i){t&2&&(Ce("align",null)("tabIndex",i.mode!=="side"?"-1":null),Tt("visibility",!i._container&&!i.opened?"hidden":null),ne("mat-drawer-end",i.position==="end")("mat-drawer-over",i.mode==="over")("mat-drawer-push",i.mode==="push")("mat-drawer-side",i.mode==="side"))},inputs:{position:"position",mode:"mode",disableClose:"disableClose",autoFocus:"autoFocus",opened:"opened"},outputs:{openedChange:"openedChange",_openedStream:"opened",openedStart:"openedStart",_closedStream:"closed",closedStart:"closedStart",onPositionChanged:"positionChanged"},exportAs:["matDrawer"],ngContentSelectors:I8,decls:3,vars:0,consts:[["content",""],["cdkScrollable","",1,"mat-drawer-inner-container"]],template:function(t,i){t&1&&(pi(),r(0,"div",1,0),Zt(2),l())},dependencies:[$C],encapsulation:2,changeDetection:0})}return n})(),AT=(()=>{class n{_dir=f(Kr,{optional:!0});_element=f(Kt);_ngZone=f(Gi);_changeDetectorRef=f(oe);_animationDisabled=$a();_transitionsEnabled=!1;_allDrawers;_drawers=new ec;_content;_userContent;get start(){return this._start}get end(){return this._end}get autosize(){return this._autosize}set autosize(e){this._autosize=Or(e)}_autosize=f(Zee);get hasBackdrop(){return this._drawerHasBackdrop(this._start)||this._drawerHasBackdrop(this._end)}set hasBackdrop(e){this._backdropOverride=e==null?null:Or(e)}_backdropOverride=null;backdropClick=new be;_start=null;_end=null;_left=null;_right=null;_destroyed=new Ye;_doCheckSubject=new Ye;_contentMargins={left:null,right:null};_contentMarginChanges=new Ye;get scrollable(){return this._userContent||this._content}_injector=f(xa);constructor(){let e=f(ja),t=f(kd);this._dir?.change.pipe(He(this._destroyed)).subscribe(()=>{this._validateDrawers(),this.updateContentMargins()}),t.change().pipe(He(this._destroyed)).subscribe(()=>this.updateContentMargins()),!this._animationDisabled&&e.isBrowser&&this._ngZone.runOutsideAngular(()=>{setTimeout(()=>{this._element.nativeElement.classList.add("mat-drawer-transition"),this._transitionsEnabled=!0},200)})}ngAfterContentInit(){this._allDrawers.changes.pipe(Di(this._allDrawers),He(this._destroyed)).subscribe(e=>{this._drawers.reset(e.filter(t=>!t._container||t._container===this)),this._drawers.notifyOnChanges()}),this._drawers.changes.pipe(Di(null)).subscribe(()=>{this._validateDrawers(),this._drawers.forEach(e=>{this._watchDrawerToggle(e),this._watchDrawerPosition(e),this._watchDrawerMode(e)}),(!this._drawers.length||this._isDrawerOpen(this._start)||this._isDrawerOpen(this._end))&&this.updateContentMargins(),this._changeDetectorRef.markForCheck()}),this._ngZone.runOutsideAngular(()=>{this._doCheckSubject.pipe(tg(10),He(this._destroyed)).subscribe(()=>this.updateContentMargins())})}ngOnDestroy(){this._contentMarginChanges.complete(),this._doCheckSubject.complete(),this._drawers.destroy(),this._destroyed.next(),this._destroyed.complete()}open(){this._drawers.forEach(e=>e.open())}close(){this._drawers.forEach(e=>e.close())}updateContentMargins(){let e=0,t=0;if(this._left&&this._left.opened){if(this._left.mode=="side")e+=this._left._getWidth();else if(this._left.mode=="push"){let i=this._left._getWidth();e+=i,t-=i}}if(this._right&&this._right.opened){if(this._right.mode=="side")t+=this._right._getWidth();else if(this._right.mode=="push"){let i=this._right._getWidth();t+=i,e-=i}}e=e||null,t=t||null,(e!==this._contentMargins.left||t!==this._contentMargins.right)&&(this._contentMargins={left:e,right:t},this._ngZone.run(()=>this._contentMarginChanges.next(this._contentMargins)))}ngDoCheck(){this._autosize&&this._isPushed()&&this._ngZone.runOutsideAngular(()=>this._doCheckSubject.next())}_watchDrawerToggle(e){e._animationStarted.pipe(He(this._drawers.changes)).subscribe(()=>{this.updateContentMargins(),this._changeDetectorRef.markForCheck()}),e.mode!=="side"&&e.openedChange.pipe(He(this._drawers.changes)).subscribe(()=>this._setContainerClass(e.opened))}_watchDrawerPosition(e){e.onPositionChanged.pipe(He(this._drawers.changes)).subscribe(()=>{Ya({read:()=>this._validateDrawers()},{injector:this._injector})})}_watchDrawerMode(e){e._modeChanged.pipe(He(ro(this._drawers.changes,this._destroyed))).subscribe(()=>{this.updateContentMargins(),this._changeDetectorRef.markForCheck()})}_setContainerClass(e){let t=this._element.nativeElement.classList,i="mat-drawer-container-has-open";e?t.add(i):t.remove(i)}_validateDrawers(){this._start=this._end=null,this._drawers.forEach(e=>{e.position=="end"?(this._end!=null,this._end=e):(this._start!=null,this._start=e)}),this._right=this._left=null,this._dir&&this._dir.value==="rtl"?(this._left=this._end,this._right=this._start):(this._left=this._start,this._right=this._end)}_isPushed(){return this._isDrawerOpen(this._start)&&this._start.mode!="over"||this._isDrawerOpen(this._end)&&this._end.mode!="over"}_onBackdropClicked(){this.backdropClick.emit(),this._closeModalDrawersViaBackdrop()}_closeModalDrawersViaBackdrop(){[this._start,this._end].filter(e=>e&&!e.disableClose&&this._drawerHasBackdrop(e)).forEach(e=>e._closeViaBackdropClick())}_isShowingBackdrop(){return this._isDrawerOpen(this._start)&&this._drawerHasBackdrop(this._start)||this._isDrawerOpen(this._end)&&this._drawerHasBackdrop(this._end)}_isDrawerOpen(e){return e!=null&&e.opened}_drawerHasBackdrop(e){return this._backdropOverride==null?!!e&&e.mode!=="side":this._backdropOverride}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["mat-drawer-container"]],contentQueries:function(t,i,a){if(t&1&&Zi(a,W0,5)(a,IT,5),t&2){let s;gt(s=ht())&&(i._content=s.first),gt(s=ht())&&(i._allDrawers=s)}},viewQuery:function(t,i){if(t&1&&Kn(W0,5),t&2){let a;gt(a=ht())&&(i._userContent=a.first)}},hostAttrs:[1,"mat-drawer-container"],hostVars:2,hostBindings:function(t,i){t&2&&ne("mat-drawer-container-explicit-backdrop",i._backdropOverride)},inputs:{autosize:"autosize",hasBackdrop:"hasBackdrop"},outputs:{backdropClick:"backdropClick"},exportAs:["matDrawerContainer"],features:[un([{provide:A8,useExisting:n}])],ngContentSelectors:Kee,decls:4,vars:2,consts:[[1,"mat-drawer-backdrop",3,"mat-drawer-shown"],[1,"mat-drawer-backdrop",3,"click"]],template:function(t,i){t&1&&(pi(Qee),T(0,Xee,1,2,"div",0),Zt(1),Zt(2,1),T(3,Yee,2,0,"mat-drawer-content")),t&2&&(E(i.hasBackdrop?0:-1),m(3),E(i._content?-1:3))},dependencies:[W0],styles:[`.mat-drawer-container {
|
||
position: relative;
|
||
z-index: 1;
|
||
color: var(--mat-sidenav-content-text-color, var(--mat-sys-on-background));
|
||
background-color: var(--mat-sidenav-content-background-color, var(--mat-sys-background));
|
||
box-sizing: border-box;
|
||
display: block;
|
||
overflow: hidden;
|
||
}
|
||
.mat-drawer-container[fullscreen] {
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
position: absolute;
|
||
}
|
||
.mat-drawer-container[fullscreen].mat-drawer-container-has-open {
|
||
overflow: hidden;
|
||
}
|
||
.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side {
|
||
z-index: 3;
|
||
}
|
||
.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,
|
||
.mat-drawer-container.ng-animate-disabled .mat-drawer-content, .ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,
|
||
.ng-animate-disabled .mat-drawer-container .mat-drawer-content {
|
||
transition: none;
|
||
}
|
||
|
||
.mat-drawer-backdrop {
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
position: absolute;
|
||
display: block;
|
||
z-index: 3;
|
||
visibility: hidden;
|
||
}
|
||
.mat-drawer-backdrop.mat-drawer-shown {
|
||
visibility: visible;
|
||
background-color: var(--mat-sidenav-scrim-color, color-mix(in srgb, var(--mat-sys-neutral-variant20) 40%, transparent));
|
||
}
|
||
.mat-drawer-transition .mat-drawer-backdrop {
|
||
transition-duration: 400ms;
|
||
transition-timing-function: cubic-bezier(0.25, 0.8, 0.25, 1);
|
||
transition-property: background-color, visibility;
|
||
}
|
||
@media (forced-colors: active) {
|
||
.mat-drawer-backdrop {
|
||
opacity: 0.5;
|
||
}
|
||
}
|
||
|
||
.mat-drawer-content {
|
||
position: relative;
|
||
z-index: 1;
|
||
display: block;
|
||
height: 100%;
|
||
overflow: auto;
|
||
}
|
||
.mat-drawer-content.mat-drawer-content-hidden {
|
||
opacity: 0;
|
||
}
|
||
.mat-drawer-transition .mat-drawer-content {
|
||
transition-duration: 400ms;
|
||
transition-timing-function: cubic-bezier(0.25, 0.8, 0.25, 1);
|
||
transition-property: transform, margin-left, margin-right;
|
||
}
|
||
|
||
.mat-drawer {
|
||
position: relative;
|
||
z-index: 4;
|
||
color: var(--mat-sidenav-container-text-color, var(--mat-sys-on-surface-variant));
|
||
box-shadow: var(--mat-sidenav-container-elevation-shadow, none);
|
||
background-color: var(--mat-sidenav-container-background-color, var(--mat-sys-surface));
|
||
border-top-right-radius: var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));
|
||
border-bottom-right-radius: var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));
|
||
width: var(--mat-sidenav-container-width, 360px);
|
||
display: block;
|
||
position: absolute;
|
||
top: 0;
|
||
bottom: 0;
|
||
z-index: 3;
|
||
outline: 0;
|
||
box-sizing: border-box;
|
||
overflow-y: auto;
|
||
transform: translate3d(-100%, 0, 0);
|
||
}
|
||
@media (forced-colors: active) {
|
||
.mat-drawer, [dir=rtl] .mat-drawer.mat-drawer-end {
|
||
border-right: solid 1px currentColor;
|
||
}
|
||
}
|
||
@media (forced-colors: active) {
|
||
[dir=rtl] .mat-drawer, .mat-drawer.mat-drawer-end {
|
||
border-left: solid 1px currentColor;
|
||
border-right: none;
|
||
}
|
||
}
|
||
.mat-drawer.mat-drawer-side {
|
||
z-index: 2;
|
||
}
|
||
.mat-drawer.mat-drawer-end {
|
||
right: 0;
|
||
transform: translate3d(100%, 0, 0);
|
||
border-top-left-radius: var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));
|
||
border-bottom-left-radius: var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));
|
||
border-top-right-radius: 0;
|
||
border-bottom-right-radius: 0;
|
||
}
|
||
[dir=rtl] .mat-drawer {
|
||
border-top-left-radius: var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));
|
||
border-bottom-left-radius: var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));
|
||
border-top-right-radius: 0;
|
||
border-bottom-right-radius: 0;
|
||
transform: translate3d(100%, 0, 0);
|
||
}
|
||
[dir=rtl] .mat-drawer.mat-drawer-end {
|
||
border-top-right-radius: var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));
|
||
border-bottom-right-radius: var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));
|
||
border-top-left-radius: 0;
|
||
border-bottom-left-radius: 0;
|
||
left: 0;
|
||
right: auto;
|
||
transform: translate3d(-100%, 0, 0);
|
||
}
|
||
.mat-drawer-transition .mat-drawer {
|
||
transition: transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1);
|
||
}
|
||
.mat-drawer:not(.mat-drawer-opened):not(.mat-drawer-animating) {
|
||
visibility: hidden;
|
||
box-shadow: none;
|
||
}
|
||
.mat-drawer:not(.mat-drawer-opened):not(.mat-drawer-animating) .mat-drawer-inner-container {
|
||
display: none;
|
||
}
|
||
.mat-drawer.mat-drawer-opened.mat-drawer-opened {
|
||
transform: none;
|
||
}
|
||
|
||
.mat-drawer-side {
|
||
box-shadow: none;
|
||
border-right-color: var(--mat-sidenav-container-divider-color, transparent);
|
||
border-right-width: 1px;
|
||
border-right-style: solid;
|
||
}
|
||
.mat-drawer-side.mat-drawer-end {
|
||
border-left-color: var(--mat-sidenav-container-divider-color, transparent);
|
||
border-left-width: 1px;
|
||
border-left-style: solid;
|
||
border-right: none;
|
||
}
|
||
[dir=rtl] .mat-drawer-side {
|
||
border-left-color: var(--mat-sidenav-container-divider-color, transparent);
|
||
border-left-width: 1px;
|
||
border-left-style: solid;
|
||
border-right: none;
|
||
}
|
||
[dir=rtl] .mat-drawer-side.mat-drawer-end {
|
||
border-right-color: var(--mat-sidenav-container-divider-color, transparent);
|
||
border-right-width: 1px;
|
||
border-right-style: solid;
|
||
border-left: none;
|
||
}
|
||
|
||
.mat-drawer-inner-container {
|
||
width: 100%;
|
||
height: 100%;
|
||
overflow: auto;
|
||
}
|
||
|
||
.mat-sidenav-fixed {
|
||
position: fixed;
|
||
}
|
||
`],encapsulation:2,changeDetection:0})}return n})();var n1=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=on({type:n});static \u0275inj=nn({imports:[Lp,Vi,Lp]})}return n})();var wi=(function(n){return n[n.State=0]="State",n[n.Transition=1]="Transition",n[n.Sequence=2]="Sequence",n[n.Group=3]="Group",n[n.Animate=4]="Animate",n[n.Keyframes=5]="Keyframes",n[n.Style=6]="Style",n[n.Trigger=7]="Trigger",n[n.Reference=8]="Reference",n[n.AnimateChild=9]="AnimateChild",n[n.AnimateRef=10]="AnimateRef",n[n.Query=11]="Query",n[n.Stagger=12]="Stagger",n})(wi||{}),lc="*";function N8(n,o=null){return{type:wi.Sequence,steps:n,options:o}}function NT(n){return{type:wi.Style,styles:n,offset:null}}var Vd=class{_onDoneFns=[];_onStartFns=[];_onDestroyFns=[];_originalOnDoneFns=[];_originalOnStartFns=[];_started=!1;_destroyed=!1;_finished=!1;_position=0;parentPlayer=null;totalTime;constructor(o=0,e=0){this.totalTime=o+e}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(o=>o()),this._onDoneFns=[])}onStart(o){this._originalOnStartFns.push(o),this._onStartFns.push(o)}onDone(o){this._originalOnDoneFns.push(o),this._onDoneFns.push(o)}onDestroy(o){this._onDestroyFns.push(o)}hasStarted(){return this._started}init(){}play(){this.hasStarted()||(this._onStart(),this.triggerMicrotask()),this._started=!0}triggerMicrotask(){queueMicrotask(()=>this._onFinish())}_onStart(){this._onStartFns.forEach(o=>o()),this._onStartFns=[]}pause(){}restart(){}finish(){this._onFinish()}destroy(){this._destroyed||(this._destroyed=!0,this.hasStarted()||this._onStart(),this.finish(),this._onDestroyFns.forEach(o=>o()),this._onDestroyFns=[])}reset(){this._started=!1,this._finished=!1,this._onStartFns=this._originalOnStartFns,this._onDoneFns=this._originalOnDoneFns}setPosition(o){this._position=this.totalTime?o*this.totalTime:1}getPosition(){return this.totalTime?this._position/this.totalTime:1}triggerCallback(o){let e=o=="start"?this._onStartFns:this._onDoneFns;e.forEach(t=>t()),e.length=0}},ah=class{_onDoneFns=[];_onStartFns=[];_finished=!1;_started=!1;_destroyed=!1;_onDestroyFns=[];parentPlayer=null;totalTime=0;players;constructor(o){this.players=o;let e=0,t=0,i=0,a=this.players.length;a==0?queueMicrotask(()=>this._onFinish()):this.players.forEach(s=>{s.onDone(()=>{++e==a&&this._onFinish()}),s.onDestroy(()=>{++t==a&&this._onDestroy()}),s.onStart(()=>{++i==a&&this._onStart()})}),this.totalTime=this.players.reduce((s,d)=>Math.max(s,d.totalTime),0)}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(o=>o()),this._onDoneFns=[])}init(){this.players.forEach(o=>o.init())}onStart(o){this._onStartFns.push(o)}_onStart(){this.hasStarted()||(this._started=!0,this._onStartFns.forEach(o=>o()),this._onStartFns=[])}onDone(o){this._onDoneFns.push(o)}onDestroy(o){this._onDestroyFns.push(o)}hasStarted(){return this._started}play(){this.parentPlayer||this.init(),this._onStart(),this.players.forEach(o=>o.play())}pause(){this.players.forEach(o=>o.pause())}restart(){this.players.forEach(o=>o.restart())}finish(){this._onFinish(),this.players.forEach(o=>o.finish())}destroy(){this._onDestroy()}_onDestroy(){this._destroyed||(this._destroyed=!0,this._onFinish(),this.players.forEach(o=>o.destroy()),this._onDestroyFns.forEach(o=>o()),this._onDestroyFns=[])}reset(){this.players.forEach(o=>o.reset()),this._destroyed=!1,this._finished=!1,this._started=!1}setPosition(o){let e=o*this.totalTime;this.players.forEach(t=>{let i=t.totalTime?Math.min(1,e/t.totalTime):1;t.setPosition(i)})}getPosition(){let o=this.players.reduce((e,t)=>e===null||t.totalTime>e.totalTime?t:e,null);return o!=null?o.getPosition():0}beforeDestroy(){this.players.forEach(o=>{o.beforeDestroy&&o.beforeDestroy()})}triggerCallback(o){let e=o=="start"?this._onStartFns:this._onDoneFns;e.forEach(t=>t()),e.length=0}},G0="!";function F8(n){return new Ii(3e3,!1)}function ete(){return new Ii(3100,!1)}function tte(){return new Ii(3101,!1)}function nte(n){return new Ii(3001,!1)}function ite(n){return new Ii(3003,!1)}function ote(n){return new Ii(3004,!1)}function z8(n,o){return new Ii(3005,!1)}function L8(){return new Ii(3006,!1)}function V8(){return new Ii(3007,!1)}function B8(n,o){return new Ii(3008,!1)}function j8(n){return new Ii(3002,!1)}function $8(n,o,e,t,i){return new Ii(3010,!1)}function H8(){return new Ii(3011,!1)}function U8(){return new Ii(3012,!1)}function W8(){return new Ii(3200,!1)}function G8(){return new Ii(3202,!1)}function q8(){return new Ii(3013,!1)}function Q8(n){return new Ii(3014,!1)}function K8(n){return new Ii(3015,!1)}function X8(n){return new Ii(3016,!1)}function Y8(n,o){return new Ii(3404,!1)}function ate(n){return new Ii(3502,!1)}function Z8(n){return new Ii(3503,!1)}function J8(){return new Ii(3300,!1)}function eR(n){return new Ii(3504,!1)}function tR(n){return new Ii(3301,!1)}function nR(n,o){return new Ii(3302,!1)}function iR(n){return new Ii(3303,!1)}function oR(n,o){return new Ii(3400,!1)}function aR(n){return new Ii(3401,!1)}function rR(n){return new Ii(3402,!1)}function sR(n,o){return new Ii(3505,!1)}function Bd(n){switch(n.length){case 0:return new Vd;case 1:return n[0];default:return new ah(n)}}function LT(n,o,e=new Map,t=new Map){let i=[],a=[],s=-1,d=null;if(o.forEach(p=>{let u=p.get("offset"),g=u==s,C=g&&d||new Map;p.forEach((M,x)=>{let b=x,P=M;if(x!=="offset")switch(b=n.normalizePropertyName(b,i),P){case G0:P=e.get(x);break;case lc:P=t.get(x);break;default:P=n.normalizeStyleValue(x,b,P,i);break}C.set(b,P)}),g||a.push(C),d=C,s=u}),i.length)throw ate(i);return a}function i1(n,o,e,t){switch(o){case"start":n.onStart(()=>t(e&&FT(e,"start",n)));break;case"done":n.onDone(()=>t(e&&FT(e,"done",n)));break;case"destroy":n.onDestroy(()=>t(e&&FT(e,"destroy",n)));break}}function FT(n,o,e){let t=e.totalTime,i=!!e.disabled,a=o1(n.element,n.triggerName,n.fromState,n.toState,o||n.phaseName,t??n.totalTime,i),s=n._data;return s!=null&&(a._data=s),a}function o1(n,o,e,t,i="",a=0,s){return{element:n,triggerName:o,fromState:e,toState:t,phaseName:i,totalTime:a,disabled:!!s}}function Ts(n,o,e){let t=n.get(o);return t||n.set(o,t=e),t}function VT(n){let o=n.indexOf(":"),e=n.substring(1,o),t=n.slice(o+1);return[e,t]}var rte=typeof document>"u"?null:document.documentElement;function a1(n){let o=n.parentNode||n.host||null;return o===rte?null:o}function ste(n){return n.substring(1,6)=="ebkit"}var xu=null,R8=!1;function lR(n){xu||(xu=lte()||{},R8=xu.style?"WebkitAppearance"in xu.style:!1);let o=!0;return xu.style&&!ste(n)&&(o=n in xu.style,!o&&R8&&(o="Webkit"+n.charAt(0).toUpperCase()+n.slice(1)in xu.style)),o}function lte(){return typeof document<"u"?document.body:null}function BT(n,o){for(;o;){if(o===n)return!0;o=a1(o)}return!1}function jT(n,o,e){if(e)return Array.from(n.querySelectorAll(o));let t=n.querySelector(o);return t?[t]:[]}var cte=1e3,$T="{{",dte="}}",HT="ng-enter",r1="ng-leave",q0="ng-trigger",Q0=".ng-trigger",UT="ng-animating",s1=".ng-animating";function Qc(n){if(typeof n=="number")return n;let o=n.match(/^(-?[\.\d]+)(m?s)/);return!o||o.length<2?0:RT(parseFloat(o[1]),o[2])}function RT(n,o){return o==="s"?n*cte:n}function K0(n,o,e){return n.hasOwnProperty("duration")?n:pte(n,o,e)}var mte=/^(-?[\.\d]+)(m?s)(?:\s+(-?[\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?$/i;function pte(n,o,e){let t,i=0,a="";if(typeof n=="string"){let s=n.match(mte);if(s===null)return o.push(F8(n)),{duration:0,delay:0,easing:""};t=RT(parseFloat(s[1]),s[2]);let d=s[3];d!=null&&(i=RT(parseFloat(d),s[4]));let p=s[5];p&&(a=p)}else t=n;if(!e){let s=!1,d=o.length;t<0&&(o.push(ete()),s=!0),i<0&&(o.push(tte()),s=!0),s&&o.splice(d,0,F8(n))}return{duration:t,delay:i,easing:a}}function cR(n){return n.length?n[0]instanceof Map?n:n.map(o=>new Map(Object.entries(o))):[]}function cc(n,o,e){o.forEach((t,i)=>{let a=l1(i);e&&!e.has(i)&&e.set(i,n.style[a]),n.style[a]=t})}function Hm(n,o){o.forEach((e,t)=>{let i=l1(t);n.style[i]=""})}function rh(n){return Array.isArray(n)?n.length==1?n[0]:N8(n):n}function dR(n,o,e){let t=o.params||{},i=WT(n);i.length&&i.forEach(a=>{t.hasOwnProperty(a)||e.push(nte(a))})}var zT=new RegExp(`${$T}\\s*(.+?)\\s*${dte}`,"g");function WT(n){let o=[];if(typeof n=="string"){let e;for(;e=zT.exec(n);)o.push(e[1]);zT.lastIndex=0}return o}function sh(n,o,e){let t=`${n}`,i=t.replace(zT,(a,s)=>{let d=o[s];return d==null&&(e.push(ite(s)),d=""),d.toString()});return i==t?n:i}var ute=/-+([a-z0-9])/g;function l1(n){return n.replace(ute,(...o)=>o[1].toUpperCase())}function mR(n,o){return n===0||o===0}function pR(n,o,e){if(e.size&&o.length){let t=o[0],i=[];if(e.forEach((a,s)=>{t.has(s)||i.push(s),t.set(s,a)}),i.length)for(let a=1;a<o.length;a++){let s=o[a];i.forEach(d=>s.set(d,c1(n,d)))}}return o}function Es(n,o,e){switch(o.type){case wi.Trigger:return n.visitTrigger(o,e);case wi.State:return n.visitState(o,e);case wi.Transition:return n.visitTransition(o,e);case wi.Sequence:return n.visitSequence(o,e);case wi.Group:return n.visitGroup(o,e);case wi.Animate:return n.visitAnimate(o,e);case wi.Keyframes:return n.visitKeyframes(o,e);case wi.Style:return n.visitStyle(o,e);case wi.Reference:return n.visitReference(o,e);case wi.AnimateChild:return n.visitAnimateChild(o,e);case wi.AnimateRef:return n.visitAnimateRef(o,e);case wi.Query:return n.visitQuery(o,e);case wi.Stagger:return n.visitStagger(o,e);default:throw ote(o.type)}}function c1(n,o){return window.getComputedStyle(n)[o]}var lE=(()=>{class n{validateStyleProperty(e){return lR(e)}containsElement(e,t){return BT(e,t)}getParentElement(e){return a1(e)}query(e,t,i){return jT(e,t,i)}computeStyle(e,t,i){return i||""}animate(e,t,i,a,s,d=[],p){return new Vd(i,a)}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})(),wu=class{static NOOP=new lE},Mu=class{};var gte=new Set(["width","height","minWidth","minHeight","maxWidth","maxHeight","left","top","bottom","right","fontSize","outlineWidth","outlineOffset","paddingTop","paddingLeft","paddingBottom","paddingRight","marginTop","marginLeft","marginBottom","marginRight","borderRadius","borderWidth","borderTopWidth","borderLeftWidth","borderRightWidth","borderBottomWidth","textIndent","perspective"]),g1=class extends Mu{normalizePropertyName(o,e){return l1(o)}normalizeStyleValue(o,e,t,i){let a="",s=t.toString().trim();if(gte.has(e)&&t!==0&&t!=="0")if(typeof t=="number")a="px";else{let d=t.match(/^[+-]?[\d\.]+([a-z]*)$/);d&&d[1].length==0&&i.push(z8(o,t))}return s+a}};var h1="*";function hte(n,o){let e=[];return typeof n=="string"?n.split(/\s*,\s*/).forEach(t=>_te(t,e,o)):e.push(n),e}function _te(n,o,e){if(n[0]==":"){let p=fte(n,e);if(typeof p=="function"){o.push(p);return}n=p}let t=n.match(/^(\*|[-\w]+)\s*(<?[=-]>)\s*(\*|[-\w]+)$/);if(t==null||t.length<4)return e.push(K8(n)),o;let i=t[1],a=t[2],s=t[3];o.push(uR(i,s));let d=i==h1&&s==h1;a[0]=="<"&&!d&&o.push(uR(s,i))}function fte(n,o){switch(n){case":enter":return"void => *";case":leave":return"* => void";case":increment":return(e,t)=>parseFloat(t)>parseFloat(e);case":decrement":return(e,t)=>parseFloat(t)<parseFloat(e);default:return o.push(X8(n)),"* => *"}}var d1=new Set(["true","1"]),m1=new Set(["false","0"]);function uR(n,o){let e=d1.has(n)||m1.has(n),t=d1.has(o)||m1.has(o);return(i,a)=>{let s=n==h1||n==i,d=o==h1||o==a;return!s&&e&&typeof i=="boolean"&&(s=i?d1.has(n):m1.has(n)),!d&&t&&typeof a=="boolean"&&(d=a?d1.has(o):m1.has(o)),s&&d}}var wR=":self",vte=new RegExp(`s*${wR}s*,?`,"g");function MR(n,o,e,t){return new YT(n).build(o,e,t)}var gR="",YT=class{_driver;constructor(o){this._driver=o}build(o,e,t){let i=new ZT(e);return this._resetContextStyleTimingState(i),Es(this,rh(o),i)}_resetContextStyleTimingState(o){o.currentQuerySelector=gR,o.collectedStyles=new Map,o.collectedStyles.set(gR,new Map),o.currentTime=0}visitTrigger(o,e){let t=e.queryCount=0,i=e.depCount=0,a=[],s=[];return o.name.charAt(0)=="@"&&e.errors.push(L8()),o.definitions.forEach(d=>{if(this._resetContextStyleTimingState(e),d.type==wi.State){let p=d,u=p.name;u.toString().split(/\s*,\s*/).forEach(g=>{p.name=g,a.push(this.visitState(p,e))}),p.name=u}else if(d.type==wi.Transition){let p=this.visitTransition(d,e);t+=p.queryCount,i+=p.depCount,s.push(p)}else e.errors.push(V8())}),{type:wi.Trigger,name:o.name,states:a,transitions:s,queryCount:t,depCount:i,options:null}}visitState(o,e){let t=this.visitStyle(o.styles,e),i=o.options&&o.options.params||null;if(t.containsDynamicStyles){let a=new Set,s=i||{};t.styles.forEach(d=>{d instanceof Map&&d.forEach(p=>{WT(p).forEach(u=>{s.hasOwnProperty(u)||a.add(u)})})}),a.size&&e.errors.push(B8(o.name,[...a.values()]))}return{type:wi.State,name:o.name,style:t,options:i?{params:i}:null}}visitTransition(o,e){e.queryCount=0,e.depCount=0;let t=Es(this,rh(o.animation),e),i=hte(o.expr,e.errors);return{type:wi.Transition,matchers:i,animation:t,queryCount:e.queryCount,depCount:e.depCount,options:yu(o.options)}}visitSequence(o,e){return{type:wi.Sequence,steps:o.steps.map(t=>Es(this,t,e)),options:yu(o.options)}}visitGroup(o,e){let t=e.currentTime,i=0,a=o.steps.map(s=>{e.currentTime=t;let d=Es(this,s,e);return i=Math.max(i,e.currentTime),d});return e.currentTime=i,{type:wi.Group,steps:a,options:yu(o.options)}}visitAnimate(o,e){let t=yte(o.timings,e.errors);e.currentAnimateTimings=t;let i,a=o.styles?o.styles:NT({});if(a.type==wi.Keyframes)i=this.visitKeyframes(a,e);else{let s=o.styles,d=!1;if(!s){d=!0;let u={};t.easing&&(u.easing=t.easing),s=NT(u)}e.currentTime+=t.duration+t.delay;let p=this.visitStyle(s,e);p.isEmptyStep=d,i=p}return e.currentAnimateTimings=null,{type:wi.Animate,timings:t,style:i,options:null}}visitStyle(o,e){let t=this._makeStyleAst(o,e);return this._validateStyleAst(t,e),t}_makeStyleAst(o,e){let t=[],i=Array.isArray(o.styles)?o.styles:[o.styles];for(let d of i)typeof d=="string"?d===lc?t.push(d):e.errors.push(j8(d)):t.push(new Map(Object.entries(d)));let a=!1,s=null;return t.forEach(d=>{if(d instanceof Map&&(d.has("easing")&&(s=d.get("easing"),d.delete("easing")),!a)){for(let p of d.values())if(p.toString().indexOf($T)>=0){a=!0;break}}}),{type:wi.Style,styles:t,easing:s,offset:o.offset,containsDynamicStyles:a,options:null}}_validateStyleAst(o,e){let t=e.currentAnimateTimings,i=e.currentTime,a=e.currentTime;t&&a>0&&(a-=t.duration+t.delay),o.styles.forEach(s=>{typeof s!="string"&&s.forEach((d,p)=>{let u=e.collectedStyles.get(e.currentQuerySelector),g=u.get(p),C=!0;g&&(a!=i&&a>=g.startTime&&i<=g.endTime&&(e.errors.push($8(p,g.startTime,g.endTime,a,i)),C=!1),a=g.startTime),C&&u.set(p,{startTime:a,endTime:i}),e.options&&dR(d,e.options,e.errors)})})}visitKeyframes(o,e){let t={type:wi.Keyframes,styles:[],options:null};if(!e.currentAnimateTimings)return e.errors.push(H8()),t;let i=1,a=0,s=[],d=!1,p=!1,u=0,g=o.steps.map(S=>{let O=this._makeStyleAst(S,e),A=O.offset!=null?O.offset:xte(O.styles),D=0;return A!=null&&(a++,D=O.offset=A),p=p||D<0||D>1,d=d||D<u,u=D,s.push(D),O});p&&e.errors.push(U8()),d&&e.errors.push(W8());let C=o.steps.length,M=0;a>0&&a<C?e.errors.push(G8()):a==0&&(M=i/(C-1));let x=C-1,b=e.currentTime,P=e.currentAnimateTimings,k=P.duration;return g.forEach((S,O)=>{let A=M>0?O==x?1:M*O:s[O],D=A*k;e.currentTime=b+P.delay+D,P.duration=D,this._validateStyleAst(S,e),S.offset=A,t.styles.push(S)}),t}visitReference(o,e){return{type:wi.Reference,animation:Es(this,rh(o.animation),e),options:yu(o.options)}}visitAnimateChild(o,e){return e.depCount++,{type:wi.AnimateChild,options:yu(o.options)}}visitAnimateRef(o,e){return{type:wi.AnimateRef,animation:this.visitReference(o.animation,e),options:yu(o.options)}}visitQuery(o,e){let t=e.currentQuerySelector,i=o.options||{};e.queryCount++,e.currentQuery=o;let[a,s]=Cte(o.selector);e.currentQuerySelector=t.length?t+" "+a:a,Ts(e.collectedStyles,e.currentQuerySelector,new Map);let d=Es(this,rh(o.animation),e);return e.currentQuery=null,e.currentQuerySelector=t,{type:wi.Query,selector:a,limit:i.limit||0,optional:!!i.optional,includeSelf:s,animation:d,originalSelector:o.selector,options:yu(o.options)}}visitStagger(o,e){e.currentQuery||e.errors.push(q8());let t=o.timings==="full"?{duration:0,delay:0,easing:"full"}:K0(o.timings,e.errors,!0);return{type:wi.Stagger,animation:Es(this,rh(o.animation),e),timings:t,options:null}}};function Cte(n){let o=!!n.split(/\s*,\s*/).find(e=>e==wR);return o&&(n=n.replace(vte,"")),n=n.replace(/@\*/g,Q0).replace(/@\w+/g,e=>Q0+"-"+e.slice(1)).replace(/:animating/g,s1),[n,o]}function bte(n){return n?q({},n):null}var ZT=class{errors;queryCount=0;depCount=0;currentTransition=null;currentQuery=null;currentQuerySelector=null;currentAnimateTimings=null;currentTime=0;collectedStyles=new Map;options=null;unsupportedCSSPropertiesFound=new Set;constructor(o){this.errors=o}};function xte(n){if(typeof n=="string")return null;let o=null;if(Array.isArray(n))n.forEach(e=>{if(e instanceof Map&&e.has("offset")){let t=e;o=parseFloat(t.get("offset")),t.delete("offset")}});else if(n instanceof Map&&n.has("offset")){let e=n;o=parseFloat(e.get("offset")),e.delete("offset")}return o}function yte(n,o){if(n.hasOwnProperty("duration"))return n;if(typeof n=="number"){let a=K0(n,o).duration;return GT(a,0,"")}let e=n;if(e.split(/\s+/).some(a=>a.charAt(0)=="{"&&a.charAt(1)=="{")){let a=GT(0,0,"");return a.dynamic=!0,a.strValue=e,a}let i=K0(e,o);return GT(i.duration,i.delay,i.easing)}function yu(n){return n?(n=q({},n),n.params&&(n.params=bte(n.params))):n={},n}function GT(n,o,e){return{duration:n,delay:o,easing:e}}function cE(n,o,e,t,i,a,s=null,d=!1){return{type:1,element:n,keyframes:o,preStyleProps:e,postStyleProps:t,duration:i,delay:a,totalTime:i+a,easing:s,subTimeline:d}}var Y0=class{_map=new Map;get(o){return this._map.get(o)||[]}append(o,e){let t=this._map.get(o);t||this._map.set(o,t=[]),t.push(...e)}has(o){return this._map.has(o)}clear(){this._map.clear()}},wte=1,Mte=":enter",Ste=new RegExp(Mte,"g"),kte=":leave",Pte=new RegExp(kte,"g");function SR(n,o,e,t,i,a=new Map,s=new Map,d,p,u=[]){return new JT().buildKeyframes(n,o,e,t,i,a,s,d,p,u)}var JT=class{buildKeyframes(o,e,t,i,a,s,d,p,u,g=[]){u=u||new Y0;let C=new eE(o,e,u,i,a,g,[]);C.options=p;let M=p.delay?Qc(p.delay):0;C.currentTimeline.delayNextStep(M),C.currentTimeline.setStyles([s],null,C.errors,p),Es(this,t,C);let x=C.timelines.filter(b=>b.containsAnimation());if(x.length&&d.size){let b;for(let P=x.length-1;P>=0;P--){let k=x[P];if(k.element===e){b=k;break}}b&&!b.allowOnlyTimelineStyles()&&b.setStyles([d],null,C.errors,p)}return x.length?x.map(b=>b.buildKeyframes()):[cE(e,[],[],[],0,M,"",!1)]}visitTrigger(o,e){}visitState(o,e){}visitTransition(o,e){}visitAnimateChild(o,e){let t=e.subInstructions.get(e.element);if(t){let i=e.createSubContext(o.options),a=e.currentTimeline.currentTime,s=this._visitSubInstructions(t,i,i.options);a!=s&&e.transformIntoNewTimeline(s)}e.previousNode=o}visitAnimateRef(o,e){let t=e.createSubContext(o.options);t.transformIntoNewTimeline(),this._applyAnimationRefDelays([o.options,o.animation.options],e,t),this.visitReference(o.animation,t),e.transformIntoNewTimeline(t.currentTimeline.currentTime),e.previousNode=o}_applyAnimationRefDelays(o,e,t){for(let i of o){let a=i?.delay;if(a){let s=typeof a=="number"?a:Qc(sh(a,i?.params??{},e.errors));t.delayNextStep(s)}}}_visitSubInstructions(o,e,t){let a=e.currentTimeline.currentTime,s=t.duration!=null?Qc(t.duration):null,d=t.delay!=null?Qc(t.delay):null;return s!==0&&o.forEach(p=>{let u=e.appendInstructionToTimeline(p,s,d);a=Math.max(a,u.duration+u.delay)}),a}visitReference(o,e){e.updateOptions(o.options,!0),Es(this,o.animation,e),e.previousNode=o}visitSequence(o,e){let t=e.subContextCount,i=e,a=o.options;if(a&&(a.params||a.delay)&&(i=e.createSubContext(a),i.transformIntoNewTimeline(),a.delay!=null)){i.previousNode.type==wi.Style&&(i.currentTimeline.snapshotCurrentStyles(),i.previousNode=_1);let s=Qc(a.delay);i.delayNextStep(s)}o.steps.length&&(o.steps.forEach(s=>Es(this,s,i)),i.currentTimeline.applyStylesToKeyframe(),i.subContextCount>t&&i.transformIntoNewTimeline()),e.previousNode=o}visitGroup(o,e){let t=[],i=e.currentTimeline.currentTime,a=o.options&&o.options.delay?Qc(o.options.delay):0;o.steps.forEach(s=>{let d=e.createSubContext(o.options);a&&d.delayNextStep(a),Es(this,s,d),i=Math.max(i,d.currentTimeline.currentTime),t.push(d.currentTimeline)}),t.forEach(s=>e.currentTimeline.mergeTimelineCollectedStyles(s)),e.transformIntoNewTimeline(i),e.previousNode=o}_visitTiming(o,e){if(o.dynamic){let t=o.strValue,i=e.params?sh(t,e.params,e.errors):t;return K0(i,e.errors)}else return{duration:o.duration,delay:o.delay,easing:o.easing}}visitAnimate(o,e){let t=e.currentAnimateTimings=this._visitTiming(o.timings,e),i=e.currentTimeline;t.delay&&(e.incrementTime(t.delay),i.snapshotCurrentStyles());let a=o.style;a.type==wi.Keyframes?this.visitKeyframes(a,e):(e.incrementTime(t.duration),this.visitStyle(a,e),i.applyStylesToKeyframe()),e.currentAnimateTimings=null,e.previousNode=o}visitStyle(o,e){let t=e.currentTimeline,i=e.currentAnimateTimings;!i&&t.hasCurrentStyleProperties()&&t.forwardFrame();let a=i&&i.easing||o.easing;o.isEmptyStep?t.applyEmptyStep(a):t.setStyles(o.styles,a,e.errors,e.options),e.previousNode=o}visitKeyframes(o,e){let t=e.currentAnimateTimings,i=e.currentTimeline.duration,a=t.duration,d=e.createSubContext().currentTimeline;d.easing=t.easing,o.styles.forEach(p=>{let u=p.offset||0;d.forwardTime(u*a),d.setStyles(p.styles,p.easing,e.errors,e.options),d.applyStylesToKeyframe()}),e.currentTimeline.mergeTimelineCollectedStyles(d),e.transformIntoNewTimeline(i+a),e.previousNode=o}visitQuery(o,e){let t=e.currentTimeline.currentTime,i=o.options||{},a=i.delay?Qc(i.delay):0;a&&(e.previousNode.type===wi.Style||t==0&&e.currentTimeline.hasCurrentStyleProperties())&&(e.currentTimeline.snapshotCurrentStyles(),e.previousNode=_1);let s=t,d=e.invokeQuery(o.selector,o.originalSelector,o.limit,o.includeSelf,!!i.optional,e.errors);e.currentQueryTotal=d.length;let p=null;d.forEach((u,g)=>{e.currentQueryIndex=g;let C=e.createSubContext(o.options,u);a&&C.delayNextStep(a),u===e.element&&(p=C.currentTimeline),Es(this,o.animation,C),C.currentTimeline.applyStylesToKeyframe();let M=C.currentTimeline.currentTime;s=Math.max(s,M)}),e.currentQueryIndex=0,e.currentQueryTotal=0,e.transformIntoNewTimeline(s),p&&(e.currentTimeline.mergeTimelineCollectedStyles(p),e.currentTimeline.snapshotCurrentStyles()),e.previousNode=o}visitStagger(o,e){let t=e.parentContext,i=e.currentTimeline,a=o.timings,s=Math.abs(a.duration),d=s*(e.currentQueryTotal-1),p=s*e.currentQueryIndex;switch(a.duration<0?"reverse":a.easing){case"reverse":p=d-p;break;case"full":p=t.currentStaggerTime;break}let g=e.currentTimeline;p&&g.delayNextStep(p);let C=g.currentTime;Es(this,o.animation,e),e.previousNode=o,t.currentStaggerTime=i.currentTime-C+(i.startTime-t.currentTimeline.startTime)}},_1={},eE=class n{_driver;element;subInstructions;_enterClassName;_leaveClassName;errors;timelines;parentContext=null;currentTimeline;currentAnimateTimings=null;previousNode=_1;subContextCount=0;options={};currentQueryIndex=0;currentQueryTotal=0;currentStaggerTime=0;constructor(o,e,t,i,a,s,d,p){this._driver=o,this.element=e,this.subInstructions=t,this._enterClassName=i,this._leaveClassName=a,this.errors=s,this.timelines=d,this.currentTimeline=p||new f1(this._driver,e,0),d.push(this.currentTimeline)}get params(){return this.options.params}updateOptions(o,e){if(!o)return;let t=o,i=this.options;t.duration!=null&&(i.duration=Qc(t.duration)),t.delay!=null&&(i.delay=Qc(t.delay));let a=t.params;if(a){let s=i.params;s||(s=this.options.params={}),Object.keys(a).forEach(d=>{(!e||!s.hasOwnProperty(d))&&(s[d]=sh(a[d],s,this.errors))})}}_copyOptions(){let o={};if(this.options){let e=this.options.params;if(e){let t=o.params={};Object.keys(e).forEach(i=>{t[i]=e[i]})}}return o}createSubContext(o=null,e,t){let i=e||this.element,a=new n(this._driver,i,this.subInstructions,this._enterClassName,this._leaveClassName,this.errors,this.timelines,this.currentTimeline.fork(i,t||0));return a.previousNode=this.previousNode,a.currentAnimateTimings=this.currentAnimateTimings,a.options=this._copyOptions(),a.updateOptions(o),a.currentQueryIndex=this.currentQueryIndex,a.currentQueryTotal=this.currentQueryTotal,a.parentContext=this,this.subContextCount++,a}transformIntoNewTimeline(o){return this.previousNode=_1,this.currentTimeline=this.currentTimeline.fork(this.element,o),this.timelines.push(this.currentTimeline),this.currentTimeline}appendInstructionToTimeline(o,e,t){let i={duration:e??o.duration,delay:this.currentTimeline.currentTime+(t??0)+o.delay,easing:""},a=new tE(this._driver,o.element,o.keyframes,o.preStyleProps,o.postStyleProps,i,o.stretchStartingKeyframe);return this.timelines.push(a),i}incrementTime(o){this.currentTimeline.forwardTime(this.currentTimeline.duration+o)}delayNextStep(o){o>0&&this.currentTimeline.delayNextStep(o)}invokeQuery(o,e,t,i,a,s){let d=[];if(i&&d.push(this.element),o.length>0){o=o.replace(Ste,"."+this._enterClassName),o=o.replace(Pte,"."+this._leaveClassName);let p=t!=1,u=this._driver.query(this.element,o,p);t!==0&&(u=t<0?u.slice(u.length+t,u.length):u.slice(0,t)),d.push(...u)}return!a&&d.length==0&&s.push(Q8(e)),d}},f1=class n{_driver;element;startTime;_elementTimelineStylesLookup;duration=0;easing=null;_previousKeyframe=new Map;_currentKeyframe=new Map;_keyframes=new Map;_styleSummary=new Map;_localTimelineStyles=new Map;_globalTimelineStyles;_pendingStyles=new Map;_backFill=new Map;_currentEmptyStepKeyframe=null;constructor(o,e,t,i){this._driver=o,this.element=e,this.startTime=t,this._elementTimelineStylesLookup=i,this._elementTimelineStylesLookup||(this._elementTimelineStylesLookup=new Map),this._globalTimelineStyles=this._elementTimelineStylesLookup.get(e),this._globalTimelineStyles||(this._globalTimelineStyles=this._localTimelineStyles,this._elementTimelineStylesLookup.set(e,this._localTimelineStyles)),this._loadKeyframe()}containsAnimation(){switch(this._keyframes.size){case 0:return!1;case 1:return this.hasCurrentStyleProperties();default:return!0}}hasCurrentStyleProperties(){return this._currentKeyframe.size>0}get currentTime(){return this.startTime+this.duration}delayNextStep(o){let e=this._keyframes.size===1&&this._pendingStyles.size;this.duration||e?(this.forwardTime(this.currentTime+o),e&&this.snapshotCurrentStyles()):this.startTime+=o}fork(o,e){return this.applyStylesToKeyframe(),new n(this._driver,o,e||this.currentTime,this._elementTimelineStylesLookup)}_loadKeyframe(){this._currentKeyframe&&(this._previousKeyframe=this._currentKeyframe),this._currentKeyframe=this._keyframes.get(this.duration),this._currentKeyframe||(this._currentKeyframe=new Map,this._keyframes.set(this.duration,this._currentKeyframe))}forwardFrame(){this.duration+=wte,this._loadKeyframe()}forwardTime(o){this.applyStylesToKeyframe(),this.duration=o,this._loadKeyframe()}_updateStyle(o,e){this._localTimelineStyles.set(o,e),this._globalTimelineStyles.set(o,e),this._styleSummary.set(o,{time:this.currentTime,value:e})}allowOnlyTimelineStyles(){return this._currentEmptyStepKeyframe!==this._currentKeyframe}applyEmptyStep(o){o&&this._previousKeyframe.set("easing",o);for(let[e,t]of this._globalTimelineStyles)this._backFill.set(e,t||lc),this._currentKeyframe.set(e,lc);this._currentEmptyStepKeyframe=this._currentKeyframe}setStyles(o,e,t,i){e&&this._previousKeyframe.set("easing",e);let a=i&&i.params||{},s=Tte(o,this._globalTimelineStyles);for(let[d,p]of s){let u=sh(p,a,t);this._pendingStyles.set(d,u),this._localTimelineStyles.has(d)||this._backFill.set(d,this._globalTimelineStyles.get(d)??lc),this._updateStyle(d,u)}}applyStylesToKeyframe(){this._pendingStyles.size!=0&&(this._pendingStyles.forEach((o,e)=>{this._currentKeyframe.set(e,o)}),this._pendingStyles.clear(),this._localTimelineStyles.forEach((o,e)=>{this._currentKeyframe.has(e)||this._currentKeyframe.set(e,o)}))}snapshotCurrentStyles(){for(let[o,e]of this._localTimelineStyles)this._pendingStyles.set(o,e),this._updateStyle(o,e)}getFinalKeyframe(){return this._keyframes.get(this.duration)}get properties(){let o=[];for(let e in this._currentKeyframe)o.push(e);return o}mergeTimelineCollectedStyles(o){o._styleSummary.forEach((e,t)=>{let i=this._styleSummary.get(t);(!i||e.time>i.time)&&this._updateStyle(t,e.value)})}buildKeyframes(){this.applyStylesToKeyframe();let o=new Set,e=new Set,t=this._keyframes.size===1&&this.duration===0,i=[];this._keyframes.forEach((d,p)=>{let u=new Map([...this._backFill,...d]);u.forEach((g,C)=>{g===G0?o.add(C):g===lc&&e.add(C)}),t||u.set("offset",p/this.duration),i.push(u)});let a=[...o.values()],s=[...e.values()];if(t){let d=i[0],p=new Map(d);d.set("offset",0),p.set("offset",1),i=[d,p]}return cE(this.element,i,a,s,this.duration,this.startTime,this.easing,!1)}},tE=class extends f1{keyframes;preStyleProps;postStyleProps;_stretchStartingKeyframe;timings;constructor(o,e,t,i,a,s,d=!1){super(o,e,s.delay),this.keyframes=t,this.preStyleProps=i,this.postStyleProps=a,this._stretchStartingKeyframe=d,this.timings={duration:s.duration,delay:s.delay,easing:s.easing}}containsAnimation(){return this.keyframes.length>1}buildKeyframes(){let o=this.keyframes,{delay:e,duration:t,easing:i}=this.timings;if(this._stretchStartingKeyframe&&e){let a=[],s=t+e,d=e/s,p=new Map(o[0]);p.set("offset",0),a.push(p);let u=new Map(o[0]);u.set("offset",hR(d)),a.push(u);let g=o.length-1;for(let C=1;C<=g;C++){let M=new Map(o[C]),x=M.get("offset"),b=e+x*t;M.set("offset",hR(b/s)),a.push(M)}t=s,e=0,i="",o=a}return cE(this.element,o,this.preStyleProps,this.postStyleProps,t,e,i,!0)}};function hR(n,o=3){let e=Math.pow(10,o-1);return Math.round(n*e)/e}function Tte(n,o){let e=new Map,t;return n.forEach(i=>{if(i==="*"){t??=o.keys();for(let a of t)e.set(a,lc)}else for(let[a,s]of i)e.set(a,s)}),e}function _R(n,o,e,t,i,a,s,d,p,u,g,C,M){return{type:0,element:n,triggerName:o,isRemovalTransition:i,fromState:e,fromStyles:a,toState:t,toStyles:s,timelines:d,queriedElements:p,preStyleProps:u,postStyleProps:g,totalTime:C,errors:M}}var qT={},v1=class{_triggerName;ast;_stateStyles;constructor(o,e,t){this._triggerName=o,this.ast=e,this._stateStyles=t}match(o,e,t,i){return Ete(this.ast.matchers,o,e,t,i)}buildStyles(o,e,t){let i=this._stateStyles.get("*");return o!==void 0&&(i=this._stateStyles.get(o?.toString())||i),i?i.buildStyles(e,t):new Map}build(o,e,t,i,a,s,d,p,u,g){let C=[],M=this.ast.options&&this.ast.options.params||qT,x=d&&d.params||qT,b=this.buildStyles(t,x,C),P=p&&p.params||qT,k=this.buildStyles(i,P,C),S=new Set,O=new Map,A=new Map,D=i==="void",F={params:kR(P,M),delay:this.ast.options?.delay},I=g?[]:SR(o,e,this.ast.animation,a,s,b,k,F,u,C),B=0;return I.forEach(le=>{B=Math.max(le.duration+le.delay,B)}),C.length?_R(e,this._triggerName,t,i,D,b,k,[],[],O,A,B,C):(I.forEach(le=>{let ae=le.element,W=Ts(O,ae,new Set);le.preStyleProps.forEach(ve=>W.add(ve));let G=Ts(A,ae,new Set);le.postStyleProps.forEach(ve=>G.add(ve)),ae!==e&&S.add(ae)}),_R(e,this._triggerName,t,i,D,b,k,I,[...S.values()],O,A,B))}};function Ete(n,o,e,t,i){return n.some(a=>a(o,e,t,i))}function kR(n,o){let e=q({},o);return Object.entries(n).forEach(([t,i])=>{i!=null&&(e[t]=i)}),e}var nE=class{styles;defaultParams;normalizer;constructor(o,e,t){this.styles=o,this.defaultParams=e,this.normalizer=t}buildStyles(o,e){let t=new Map,i=kR(o,this.defaultParams);return this.styles.styles.forEach(a=>{typeof a!="string"&&a.forEach((s,d)=>{s&&(s=sh(s,i,e));let p=this.normalizer.normalizePropertyName(d,e);s=this.normalizer.normalizeStyleValue(d,p,s,e),t.set(d,s)})}),t}};function Ote(n,o,e){return new iE(n,o,e)}var iE=class{name;ast;_normalizer;transitionFactories=[];fallbackTransition;states=new Map;constructor(o,e,t){this.name=o,this.ast=e,this._normalizer=t,e.states.forEach(i=>{let a=i.options&&i.options.params||{};this.states.set(i.name,new nE(i.style,a,t))}),fR(this.states,"true","1"),fR(this.states,"false","0"),e.transitions.forEach(i=>{this.transitionFactories.push(new v1(o,i,this.states))}),this.fallbackTransition=Dte(o,this.states)}get containsQueries(){return this.ast.queryCount>0}matchTransition(o,e,t,i){return this.transitionFactories.find(s=>s.match(o,e,t,i))||null}matchStyles(o,e,t){return this.fallbackTransition.buildStyles(o,e,t)}};function Dte(n,o,e){let t=[(s,d)=>!0],i={type:wi.Sequence,steps:[],options:null},a={type:wi.Transition,animation:i,matchers:t,options:null,queryCount:0,depCount:0};return new v1(n,a,o)}function fR(n,o,e){n.has(o)?n.has(e)||n.set(e,n.get(o)):n.has(e)&&n.set(o,n.get(e))}var Ite=new Y0,oE=class{bodyNode;_driver;_normalizer;_animations=new Map;_playersById=new Map;players=[];constructor(o,e,t){this.bodyNode=o,this._driver=e,this._normalizer=t}register(o,e){let t=[],i=[],a=MR(this._driver,e,t,i);if(t.length)throw Z8(t);this._animations.set(o,a)}_buildPlayer(o,e,t){let i=o.element,a=LT(this._normalizer,o.keyframes,e,t);return this._driver.animate(i,a,o.duration,o.delay,o.easing,[],!0)}create(o,e,t={}){let i=[],a=this._animations.get(o),s,d=new Map;if(a?(s=SR(this._driver,e,a,HT,r1,new Map,new Map,t,Ite,i),s.forEach(g=>{let C=Ts(d,g.element,new Map);g.postStyleProps.forEach(M=>C.set(M,null))})):(i.push(J8()),s=[]),i.length)throw eR(i);d.forEach((g,C)=>{g.forEach((M,x)=>{g.set(x,this._driver.computeStyle(C,x,lc))})});let p=s.map(g=>{let C=d.get(g.element);return this._buildPlayer(g,new Map,C)}),u=Bd(p);return this._playersById.set(o,u),u.onDestroy(()=>this.destroy(o)),this.players.push(u),u}destroy(o){let e=this._getPlayer(o);e.destroy(),this._playersById.delete(o);let t=this.players.indexOf(e);t>=0&&this.players.splice(t,1)}_getPlayer(o){let e=this._playersById.get(o);if(!e)throw tR(o);return e}listen(o,e,t,i){let a=o1(e,"","","");return i1(this._getPlayer(o),t,a,i),()=>{}}command(o,e,t,i){if(t=="register"){this.register(o,i[0]);return}if(t=="create"){let s=i[0]||{};this.create(o,e,s);return}let a=this._getPlayer(o);switch(t){case"play":a.play();break;case"pause":a.pause();break;case"reset":a.reset();break;case"restart":a.restart();break;case"finish":a.finish();break;case"init":a.init();break;case"setPosition":a.setPosition(parseFloat(i[0]));break;case"destroy":this.destroy(o);break}}},vR="ng-animate-queued",Ate=".ng-animate-queued",QT="ng-animate-disabled",Nte=".ng-animate-disabled",Fte="ng-star-inserted",Rte=".ng-star-inserted",zte=[],PR={namespaceId:"",setForRemoval:!1,setForMove:!1,hasAnimation:!1,removedBeforeQueried:!1},Lte={namespaceId:"",setForMove:!1,setForRemoval:!1,hasAnimation:!1,removedBeforeQueried:!0},dc="__ng_removed",Z0=class{namespaceId;value;options;get params(){return this.options.params}constructor(o,e=""){this.namespaceId=e;let t=o&&o.hasOwnProperty("value"),i=t?o.value:o;if(this.value=Bte(i),t){let a=o,{value:s}=a,d=EC(a,["value"]);this.options=d}else this.options={};this.options.params||(this.options.params={})}absorbOptions(o){let e=o.params;if(e){let t=this.options.params;Object.keys(e).forEach(i=>{t[i]==null&&(t[i]=e[i])})}}},X0="void",KT=new Z0(X0),aE=class{id;hostElement;_engine;players=[];_triggers=new Map;_queue=[];_elementListeners=new Map;_hostClassName;constructor(o,e,t){this.id=o,this.hostElement=e,this._engine=t,this._hostClassName="ng-tns-"+o,Sl(e,this._hostClassName)}listen(o,e,t,i){if(!this._triggers.has(e))throw nR(t,e);if(t==null||t.length==0)throw iR(e);if(!jte(t))throw oR(t,e);let a=Ts(this._elementListeners,o,[]),s={name:e,phase:t,callback:i};a.push(s);let d=Ts(this._engine.statesByElement,o,new Map);return d.has(e)||(Sl(o,q0),Sl(o,q0+"-"+e),d.set(e,KT)),()=>{this._engine.afterFlush(()=>{let p=a.indexOf(s);p>=0&&a.splice(p,1),this._triggers.has(e)||d.delete(e)})}}register(o,e){return this._triggers.has(o)?!1:(this._triggers.set(o,e),!0)}_getTrigger(o){let e=this._triggers.get(o);if(!e)throw aR(o);return e}trigger(o,e,t,i=!0){let a=this._getTrigger(e),s=new J0(this.id,e,o),d=this._engine.statesByElement.get(o);d||(Sl(o,q0),Sl(o,q0+"-"+e),this._engine.statesByElement.set(o,d=new Map));let p=d.get(e),u=new Z0(t,this.id);if(!(t&&t.hasOwnProperty("value"))&&p&&u.absorbOptions(p.options),d.set(e,u),p||(p=KT),!(u.value===X0)&&p.value===u.value){if(!Ute(p.params,u.params)){let P=[],k=a.matchStyles(p.value,p.params,P),S=a.matchStyles(u.value,u.params,P);P.length?this._engine.reportError(P):this._engine.afterFlush(()=>{Hm(o,k),cc(o,S)})}return}let M=Ts(this._engine.playersByElement,o,[]);M.forEach(P=>{P.namespaceId==this.id&&P.triggerName==e&&P.queued&&P.destroy()});let x=a.matchTransition(p.value,u.value,o,u.params),b=!1;if(!x){if(!i)return;x=a.fallbackTransition,b=!0}return this._engine.totalQueuedPlayers++,this._queue.push({element:o,triggerName:e,transition:x,fromState:p,toState:u,player:s,isFallbackTransition:b}),b||(Sl(o,vR),s.onStart(()=>{lh(o,vR)})),s.onDone(()=>{let P=this.players.indexOf(s);P>=0&&this.players.splice(P,1);let k=this._engine.playersByElement.get(o);if(k){let S=k.indexOf(s);S>=0&&k.splice(S,1)}}),this.players.push(s),M.push(s),s}deregister(o){this._triggers.delete(o),this._engine.statesByElement.forEach(e=>e.delete(o)),this._elementListeners.forEach((e,t)=>{this._elementListeners.set(t,e.filter(i=>i.name!=o))})}clearElementCache(o){this._engine.statesByElement.delete(o),this._elementListeners.delete(o);let e=this._engine.playersByElement.get(o);e&&(e.forEach(t=>t.destroy()),this._engine.playersByElement.delete(o))}_signalRemovalForInnerTriggers(o,e){let t=this._engine.driver.query(o,Q0,!0);t.forEach(i=>{if(i[dc])return;let a=this._engine.fetchNamespacesByElement(i);a.size?a.forEach(s=>s.triggerLeaveAnimation(i,e,!1,!0)):this.clearElementCache(i)}),this._engine.afterFlushAnimationsDone(()=>t.forEach(i=>this.clearElementCache(i)))}triggerLeaveAnimation(o,e,t,i){let a=this._engine.statesByElement.get(o),s=new Map;if(a){let d=[];if(a.forEach((p,u)=>{if(s.set(u,p.value),this._triggers.has(u)){let g=this.trigger(o,u,X0,i);g&&d.push(g)}}),d.length)return this._engine.markElementAsRemoved(this.id,o,!0,e,s),t&&Bd(d).onDone(()=>this._engine.processLeaveNode(o)),!0}return!1}prepareLeaveAnimationListeners(o){let e=this._elementListeners.get(o),t=this._engine.statesByElement.get(o);if(e&&t){let i=new Set;e.forEach(a=>{let s=a.name;if(i.has(s))return;i.add(s);let p=this._triggers.get(s).fallbackTransition,u=t.get(s)||KT,g=new Z0(X0),C=new J0(this.id,s,o);this._engine.totalQueuedPlayers++,this._queue.push({element:o,triggerName:s,transition:p,fromState:u,toState:g,player:C,isFallbackTransition:!0})})}}removeNode(o,e){let t=this._engine;if(o.childElementCount&&this._signalRemovalForInnerTriggers(o,e),this.triggerLeaveAnimation(o,e,!0))return;let i=!1;if(t.totalAnimations){let a=t.players.length?t.playersByQueriedElement.get(o):[];if(a&&a.length)i=!0;else{let s=o;for(;s=s.parentNode;)if(t.statesByElement.get(s)){i=!0;break}}}if(this.prepareLeaveAnimationListeners(o),i)t.markElementAsRemoved(this.id,o,!1,e);else{let a=o[dc];(!a||a===PR)&&(t.afterFlush(()=>this.clearElementCache(o)),t.destroyInnerAnimations(o),t._onRemovalComplete(o,e))}}insertNode(o,e){Sl(o,this._hostClassName)}drainQueuedTransitions(o){let e=[];return this._queue.forEach(t=>{let i=t.player;if(i.destroyed)return;let a=t.element,s=this._elementListeners.get(a);s&&s.forEach(d=>{if(d.name==t.triggerName){let p=o1(a,t.triggerName,t.fromState.value,t.toState.value);p._data=o,i1(t.player,d.phase,p,d.callback)}}),i.markedForDestroy?this._engine.afterFlush(()=>{i.destroy()}):e.push(t)}),this._queue=[],e.sort((t,i)=>{let a=t.transition.ast.depCount,s=i.transition.ast.depCount;return a==0||s==0?a-s:this._engine.driver.containsElement(t.element,i.element)?1:-1})}destroy(o){this.players.forEach(e=>e.destroy()),this._signalRemovalForInnerTriggers(this.hostElement,o)}},rE=class{bodyNode;driver;_normalizer;players=[];newHostElements=new Map;playersByElement=new Map;playersByQueriedElement=new Map;statesByElement=new Map;disabledNodes=new Set;totalAnimations=0;totalQueuedPlayers=0;_namespaceLookup={};_namespaceList=[];_flushFns=[];_whenQuietFns=[];namespacesByHostElement=new Map;collectedEnterElements=[];collectedLeaveElements=[];onRemovalComplete=(o,e)=>{};_onRemovalComplete(o,e){this.onRemovalComplete(o,e)}constructor(o,e,t){this.bodyNode=o,this.driver=e,this._normalizer=t}get queuedPlayers(){let o=[];return this._namespaceList.forEach(e=>{e.players.forEach(t=>{t.queued&&o.push(t)})}),o}createNamespace(o,e){let t=new aE(o,e,this);return this.bodyNode&&this.driver.containsElement(this.bodyNode,e)?this._balanceNamespaceList(t,e):(this.newHostElements.set(e,t),this.collectEnterElement(e)),this._namespaceLookup[o]=t}_balanceNamespaceList(o,e){let t=this._namespaceList,i=this.namespacesByHostElement;if(t.length-1>=0){let s=!1,d=this.driver.getParentElement(e);for(;d;){let p=i.get(d);if(p){let u=t.indexOf(p);t.splice(u+1,0,o),s=!0;break}d=this.driver.getParentElement(d)}s||t.unshift(o)}else t.push(o);return i.set(e,o),o}register(o,e){let t=this._namespaceLookup[o];return t||(t=this.createNamespace(o,e)),t}registerTrigger(o,e,t){let i=this._namespaceLookup[o];i&&i.register(e,t)&&this.totalAnimations++}destroy(o,e){o&&(this.afterFlush(()=>{}),this.afterFlushAnimationsDone(()=>{let t=this._fetchNamespace(o);this.namespacesByHostElement.delete(t.hostElement);let i=this._namespaceList.indexOf(t);i>=0&&this._namespaceList.splice(i,1),t.destroy(e),delete this._namespaceLookup[o]}))}_fetchNamespace(o){return this._namespaceLookup[o]}fetchNamespacesByElement(o){let e=new Set,t=this.statesByElement.get(o);if(t){for(let i of t.values())if(i.namespaceId){let a=this._fetchNamespace(i.namespaceId);a&&e.add(a)}}return e}trigger(o,e,t,i){if(p1(e)){let a=this._fetchNamespace(o);if(a)return a.trigger(e,t,i),!0}return!1}insertNode(o,e,t,i){if(!p1(e))return;let a=e[dc];if(a&&a.setForRemoval){a.setForRemoval=!1,a.setForMove=!0;let s=this.collectedLeaveElements.indexOf(e);s>=0&&this.collectedLeaveElements.splice(s,1)}if(o){let s=this._fetchNamespace(o);s&&s.insertNode(e,t)}i&&this.collectEnterElement(e)}collectEnterElement(o){this.collectedEnterElements.push(o)}markElementAsDisabled(o,e){e?this.disabledNodes.has(o)||(this.disabledNodes.add(o),Sl(o,QT)):this.disabledNodes.has(o)&&(this.disabledNodes.delete(o),lh(o,QT))}removeNode(o,e,t){if(p1(e)){let i=o?this._fetchNamespace(o):null;i?i.removeNode(e,t):this.markElementAsRemoved(o,e,!1,t);let a=this.namespacesByHostElement.get(e);a&&a.id!==o&&a.removeNode(e,t)}else this._onRemovalComplete(e,t)}markElementAsRemoved(o,e,t,i,a){this.collectedLeaveElements.push(e),e[dc]={namespaceId:o,setForRemoval:i,hasAnimation:t,removedBeforeQueried:!1,previousTriggersValues:a}}listen(o,e,t,i,a){return p1(e)?this._fetchNamespace(o).listen(e,t,i,a):()=>{}}_buildInstruction(o,e,t,i,a){return o.transition.build(this.driver,o.element,o.fromState.value,o.toState.value,t,i,o.fromState.options,o.toState.options,e,a)}destroyInnerAnimations(o){let e=this.driver.query(o,Q0,!0);e.forEach(t=>this.destroyActiveAnimationsForElement(t)),this.playersByQueriedElement.size!=0&&(e=this.driver.query(o,s1,!0),e.forEach(t=>this.finishActiveQueriedAnimationOnElement(t)))}destroyActiveAnimationsForElement(o){let e=this.playersByElement.get(o);e&&e.forEach(t=>{t.queued?t.markedForDestroy=!0:t.destroy()})}finishActiveQueriedAnimationOnElement(o){let e=this.playersByQueriedElement.get(o);e&&e.forEach(t=>t.finish())}whenRenderingDone(){return new Promise(o=>{if(this.players.length)return Bd(this.players).onDone(()=>o());o()})}processLeaveNode(o){let e=o[dc];if(e&&e.setForRemoval){if(o[dc]=PR,e.namespaceId){this.destroyInnerAnimations(o);let t=this._fetchNamespace(e.namespaceId);t&&t.clearElementCache(o)}this._onRemovalComplete(o,e.setForRemoval)}o.classList?.contains(QT)&&this.markElementAsDisabled(o,!1),this.driver.query(o,Nte,!0).forEach(t=>{this.markElementAsDisabled(t,!1)})}flush(o=-1){let e=[];if(this.newHostElements.size&&(this.newHostElements.forEach((t,i)=>this._balanceNamespaceList(t,i)),this.newHostElements.clear()),this.totalAnimations&&this.collectedEnterElements.length)for(let t=0;t<this.collectedEnterElements.length;t++){let i=this.collectedEnterElements[t];Sl(i,Fte)}if(this._namespaceList.length&&(this.totalQueuedPlayers||this.collectedLeaveElements.length)){let t=[];try{e=this._flushAnimations(t,o)}finally{for(let i=0;i<t.length;i++)t[i]()}}else for(let t=0;t<this.collectedLeaveElements.length;t++){let i=this.collectedLeaveElements[t];this.processLeaveNode(i)}if(this.totalQueuedPlayers=0,this.collectedEnterElements.length=0,this.collectedLeaveElements.length=0,this._flushFns.forEach(t=>t()),this._flushFns=[],this._whenQuietFns.length){let t=this._whenQuietFns;this._whenQuietFns=[],e.length?Bd(e).onDone(()=>{t.forEach(i=>i())}):t.forEach(i=>i())}}reportError(o){throw rR(o)}_flushAnimations(o,e){let t=new Y0,i=[],a=new Map,s=[],d=new Map,p=new Map,u=new Map,g=new Set;this.disabledNodes.forEach(ue=>{g.add(ue);let H=this.driver.query(ue,Ate,!0);for(let te=0;te<H.length;te++)g.add(H[te])});let C=this.bodyNode,M=Array.from(this.statesByElement.keys()),x=xR(M,this.collectedEnterElements),b=new Map,P=0;x.forEach((ue,H)=>{let te=HT+P++;b.set(H,te),ue.forEach(de=>Sl(de,te))});let k=[],S=new Set,O=new Set;for(let ue=0;ue<this.collectedLeaveElements.length;ue++){let H=this.collectedLeaveElements[ue],te=H[dc];te&&te.setForRemoval&&(k.push(H),S.add(H),te.hasAnimation?this.driver.query(H,Rte,!0).forEach(de=>S.add(de)):O.add(H))}let A=new Map,D=xR(M,Array.from(S));D.forEach((ue,H)=>{let te=r1+P++;A.set(H,te),ue.forEach(de=>Sl(de,te))}),o.push(()=>{x.forEach((ue,H)=>{let te=b.get(H);ue.forEach(de=>lh(de,te))}),D.forEach((ue,H)=>{let te=A.get(H);ue.forEach(de=>lh(de,te))}),k.forEach(ue=>{this.processLeaveNode(ue)})});let F=[],I=[];for(let ue=this._namespaceList.length-1;ue>=0;ue--)this._namespaceList[ue].drainQueuedTransitions(e).forEach(te=>{let de=te.player,me=te.element;if(F.push(de),this.collectedEnterElements.length){let Le=me[dc];if(Le&&Le.setForMove){if(Le.previousTriggersValues&&Le.previousTriggersValues.has(te.triggerName)){let Ze=Le.previousTriggersValues.get(te.triggerName),dt=this.statesByElement.get(te.element);if(dt&&dt.has(te.triggerName)){let Ot=dt.get(te.triggerName);Ot.value=Ze,dt.set(te.triggerName,Ot)}}de.destroy();return}}let Ie=!C||!this.driver.containsElement(C,me),$e=A.get(me),tt=b.get(me),et=this._buildInstruction(te,t,tt,$e,Ie);if(et.errors&&et.errors.length){I.push(et);return}if(Ie){de.onStart(()=>Hm(me,et.fromStyles)),de.onDestroy(()=>cc(me,et.toStyles)),i.push(de);return}if(te.isFallbackTransition){de.onStart(()=>Hm(me,et.fromStyles)),de.onDestroy(()=>cc(me,et.toStyles)),i.push(de);return}let Me=[];et.timelines.forEach(Le=>{Le.stretchStartingKeyframe=!0,this.disabledNodes.has(Le.element)||Me.push(Le)}),et.timelines=Me,t.append(me,et.timelines);let Z={instruction:et,player:de,element:me};s.push(Z),et.queriedElements.forEach(Le=>Ts(d,Le,[]).push(de)),et.preStyleProps.forEach((Le,Ze)=>{if(Le.size){let dt=p.get(Ze);dt||p.set(Ze,dt=new Set),Le.forEach((Ot,si)=>dt.add(si))}}),et.postStyleProps.forEach((Le,Ze)=>{let dt=u.get(Ze);dt||u.set(Ze,dt=new Set),Le.forEach((Ot,si)=>dt.add(si))})});if(I.length){let ue=[];I.forEach(H=>{ue.push(sR(H.triggerName,H.errors))}),F.forEach(H=>H.destroy()),this.reportError(ue)}let B=new Map,le=new Map;s.forEach(ue=>{let H=ue.element;t.has(H)&&(le.set(H,H),this._beforeAnimationBuild(ue.player.namespaceId,ue.instruction,B))}),i.forEach(ue=>{let H=ue.element;this._getPreviousPlayers(H,!1,ue.namespaceId,ue.triggerName,null).forEach(de=>{Ts(B,H,[]).push(de),de.destroy()})});let ae=k.filter(ue=>yR(ue,p,u)),W=new Map;bR(W,this.driver,O,u,lc).forEach(ue=>{yR(ue,p,u)&&ae.push(ue)});let ve=new Map;x.forEach((ue,H)=>{bR(ve,this.driver,new Set(ue),p,G0)}),ae.forEach(ue=>{let H=W.get(ue),te=ve.get(ue);W.set(ue,new Map([...H?.entries()??[],...te?.entries()??[]]))});let Se=[],pe=[],Ae={};s.forEach(ue=>{let{element:H,player:te,instruction:de}=ue;if(t.has(H)){if(g.has(H)){te.onDestroy(()=>cc(H,de.toStyles)),te.disabled=!0,te.overrideTotalTime(de.totalTime),i.push(te);return}let me=Ae;if(le.size>1){let $e=H,tt=[];for(;$e=$e.parentNode;){let et=le.get($e);if(et){me=et;break}tt.push($e)}tt.forEach(et=>le.set(et,me))}let Ie=this._buildAnimation(te.namespaceId,de,B,a,ve,W);if(te.setRealPlayer(Ie),me===Ae)Se.push(te);else{let $e=this.playersByElement.get(me);$e&&$e.length&&(te.parentPlayer=Bd($e)),i.push(te)}}else Hm(H,de.fromStyles),te.onDestroy(()=>cc(H,de.toStyles)),pe.push(te),g.has(H)&&i.push(te)}),pe.forEach(ue=>{let H=a.get(ue.element);if(H&&H.length){let te=Bd(H);ue.setRealPlayer(te)}}),i.forEach(ue=>{ue.parentPlayer?ue.syncPlayerEvents(ue.parentPlayer):ue.destroy()});for(let ue=0;ue<k.length;ue++){let H=k[ue],te=H[dc];if(lh(H,r1),te&&te.hasAnimation)continue;let de=[];if(d.size){let Ie=d.get(H);Ie&&Ie.length&&de.push(...Ie);let $e=this.driver.query(H,s1,!0);for(let tt=0;tt<$e.length;tt++){let et=d.get($e[tt]);et&&et.length&&de.push(...et)}}let me=de.filter(Ie=>!Ie.destroyed);me.length?$te(this,H,me):this.processLeaveNode(H)}return k.length=0,Se.forEach(ue=>{this.players.push(ue),ue.onDone(()=>{ue.destroy();let H=this.players.indexOf(ue);this.players.splice(H,1)}),ue.play()}),Se}afterFlush(o){this._flushFns.push(o)}afterFlushAnimationsDone(o){this._whenQuietFns.push(o)}_getPreviousPlayers(o,e,t,i,a){let s=[];if(e){let d=this.playersByQueriedElement.get(o);d&&(s=d)}else{let d=this.playersByElement.get(o);if(d){let p=!a||a==X0;d.forEach(u=>{u.queued||!p&&u.triggerName!=i||s.push(u)})}}return(t||i)&&(s=s.filter(d=>!(t&&t!=d.namespaceId||i&&i!=d.triggerName))),s}_beforeAnimationBuild(o,e,t){let i=e.triggerName,a=e.element,s=e.isRemovalTransition?void 0:o,d=e.isRemovalTransition?void 0:i;for(let p of e.timelines){let u=p.element,g=u!==a,C=Ts(t,u,[]);this._getPreviousPlayers(u,g,s,d,e.toState).forEach(x=>{let b=x.getRealPlayer();b.beforeDestroy&&b.beforeDestroy(),x.destroy(),C.push(x)})}Hm(a,e.fromStyles)}_buildAnimation(o,e,t,i,a,s){let d=e.triggerName,p=e.element,u=[],g=new Set,C=new Set,M=e.timelines.map(b=>{let P=b.element;g.add(P);let k=P[dc];if(k&&k.removedBeforeQueried)return new Vd(b.duration,b.delay);let S=P!==p,O=Hte((t.get(P)||zte).map(B=>B.getRealPlayer())).filter(B=>{let le=B;return le.element?le.element===P:!1}),A=a.get(P),D=s.get(P),F=LT(this._normalizer,b.keyframes,A,D),I=this._buildPlayer(b,F,O);if(b.subTimeline&&i&&C.add(P),S){let B=new J0(o,d,P);B.setRealPlayer(I),u.push(B)}return I});u.forEach(b=>{Ts(this.playersByQueriedElement,b.element,[]).push(b),b.onDone(()=>Vte(this.playersByQueriedElement,b.element,b))}),g.forEach(b=>Sl(b,UT));let x=Bd(M);return x.onDestroy(()=>{g.forEach(b=>lh(b,UT)),cc(p,e.toStyles)}),C.forEach(b=>{Ts(i,b,[]).push(x)}),x}_buildPlayer(o,e,t){return e.length>0?this.driver.animate(o.element,e,o.duration,o.delay,o.easing,t):new Vd(o.duration,o.delay)}},J0=class{namespaceId;triggerName;element;_player=new Vd;_containsRealPlayer=!1;_queuedCallbacks=new Map;destroyed=!1;parentPlayer=null;markedForDestroy=!1;disabled=!1;queued=!0;totalTime=0;constructor(o,e,t){this.namespaceId=o,this.triggerName=e,this.element=t}setRealPlayer(o){this._containsRealPlayer||(this._player=o,this._queuedCallbacks.forEach((e,t)=>{e.forEach(i=>i1(o,t,void 0,i))}),this._queuedCallbacks.clear(),this._containsRealPlayer=!0,this.overrideTotalTime(o.totalTime),this.queued=!1)}getRealPlayer(){return this._player}overrideTotalTime(o){this.totalTime=o}syncPlayerEvents(o){let e=this._player;e.triggerCallback&&o.onStart(()=>e.triggerCallback("start")),o.onDone(()=>this.finish()),o.onDestroy(()=>this.destroy())}_queueEvent(o,e){Ts(this._queuedCallbacks,o,[]).push(e)}onDone(o){this.queued&&this._queueEvent("done",o),this._player.onDone(o)}onStart(o){this.queued&&this._queueEvent("start",o),this._player.onStart(o)}onDestroy(o){this.queued&&this._queueEvent("destroy",o),this._player.onDestroy(o)}init(){this._player.init()}hasStarted(){return this.queued?!1:this._player.hasStarted()}play(){!this.queued&&this._player.play()}pause(){!this.queued&&this._player.pause()}restart(){!this.queued&&this._player.restart()}finish(){this._player.finish()}destroy(){this.destroyed=!0,this._player.destroy()}reset(){!this.queued&&this._player.reset()}setPosition(o){this.queued||this._player.setPosition(o)}getPosition(){return this.queued?0:this._player.getPosition()}triggerCallback(o){let e=this._player;e.triggerCallback&&e.triggerCallback(o)}};function Vte(n,o,e){let t=n.get(o);if(t){if(t.length){let i=t.indexOf(e);t.splice(i,1)}t.length==0&&n.delete(o)}return t}function Bte(n){return n??null}function p1(n){return n&&n.nodeType===1}function jte(n){return n=="start"||n=="done"}function CR(n,o){let e=n.style.display;return n.style.display=o??"none",e}function bR(n,o,e,t,i){let a=[];e.forEach(p=>a.push(CR(p)));let s=[];t.forEach((p,u)=>{let g=new Map;p.forEach(C=>{let M=o.computeStyle(u,C,i);g.set(C,M),(!M||M.length==0)&&(u[dc]=Lte,s.push(u))}),n.set(u,g)});let d=0;return e.forEach(p=>CR(p,a[d++])),s}function xR(n,o){let e=new Map;if(n.forEach(d=>e.set(d,[])),o.length==0)return e;let t=1,i=new Set(o),a=new Map;function s(d){if(!d)return t;let p=a.get(d);if(p)return p;let u=d.parentNode;return e.has(u)?p=u:i.has(u)?p=t:p=s(u),a.set(d,p),p}return o.forEach(d=>{let p=s(d);p!==t&&e.get(p).push(d)}),e}function Sl(n,o){n.classList?.add(o)}function lh(n,o){n.classList?.remove(o)}function $te(n,o,e){Bd(e).onDone(()=>n.processLeaveNode(o))}function Hte(n){let o=[];return TR(n,o),o}function TR(n,o){for(let e=0;e<n.length;e++){let t=n[e];t instanceof ah?TR(t.players,o):o.push(t)}}function Ute(n,o){let e=Object.keys(n),t=Object.keys(o);if(e.length!=t.length)return!1;for(let i=0;i<e.length;i++){let a=e[i];if(!o.hasOwnProperty(a)||n[a]!==o[a])return!1}return!0}function yR(n,o,e){let t=e.get(n);if(!t)return!1;let i=o.get(n);return i?t.forEach(a=>i.add(a)):o.set(n,t),e.delete(n),!0}var ch=class{_driver;_normalizer;_transitionEngine;_timelineEngine;_triggerCache={};onRemovalComplete=(o,e)=>{};constructor(o,e,t){this._driver=e,this._normalizer=t,this._transitionEngine=new rE(o.body,e,t),this._timelineEngine=new oE(o.body,e,t),this._transitionEngine.onRemovalComplete=(i,a)=>this.onRemovalComplete(i,a)}registerTrigger(o,e,t,i,a){let s=o+"-"+i,d=this._triggerCache[s];if(!d){let p=[],u=[],g=MR(this._driver,a,p,u);if(p.length)throw Y8(i,p);d=Ote(i,g,this._normalizer),this._triggerCache[s]=d}this._transitionEngine.registerTrigger(e,i,d)}register(o,e){this._transitionEngine.register(o,e)}destroy(o,e){this._transitionEngine.destroy(o,e)}onInsert(o,e,t,i){this._transitionEngine.insertNode(o,e,t,i)}onRemove(o,e,t){this._transitionEngine.removeNode(o,e,t)}disableAnimations(o,e){this._transitionEngine.markElementAsDisabled(o,e)}process(o,e,t,i){if(t.charAt(0)=="@"){let[a,s]=VT(t),d=i;this._timelineEngine.command(a,e,s,d)}else this._transitionEngine.trigger(o,e,t,i)}listen(o,e,t,i,a){if(t.charAt(0)=="@"){let[s,d]=VT(t);return this._timelineEngine.listen(s,e,d,a)}return this._transitionEngine.listen(o,e,t,i,a)}flush(o=-1){this._transitionEngine.flush(o)}get players(){return[...this._transitionEngine.players,...this._timelineEngine.players]}whenRenderingDone(){return this._transitionEngine.whenRenderingDone()}afterFlushAnimationsDone(o){this._transitionEngine.afterFlushAnimationsDone(o)}};function Wte(n,o){let e=null,t=null;return Array.isArray(o)&&o.length?(e=XT(o[0]),o.length>1&&(t=XT(o[o.length-1]))):o instanceof Map&&(e=XT(o)),e||t?new Gte(n,e,t):null}var Gte=(()=>{class n{_element;_startStyles;_endStyles;static initialStylesByElement=new WeakMap;_state=0;_initialStyles;constructor(e,t,i){this._element=e,this._startStyles=t,this._endStyles=i;let a=n.initialStylesByElement.get(e);a||n.initialStylesByElement.set(e,a=new Map),this._initialStyles=a}start(){this._state<1&&(this._startStyles&&cc(this._element,this._startStyles,this._initialStyles),this._state=1)}finish(){this.start(),this._state<2&&(cc(this._element,this._initialStyles),this._endStyles&&(cc(this._element,this._endStyles),this._endStyles=null),this._state=1)}destroy(){this.finish(),this._state<3&&(n.initialStylesByElement.delete(this._element),this._startStyles&&(Hm(this._element,this._startStyles),this._endStyles=null),this._endStyles&&(Hm(this._element,this._endStyles),this._endStyles=null),cc(this._element,this._initialStyles),this._state=3)}}return n})();function XT(n){let o=null;return n.forEach((e,t)=>{qte(t)&&(o=o||new Map,o.set(t,e))}),o}function qte(n){return n==="display"||n==="position"}var C1=class{element;keyframes;options;_specialStyles;_onDoneFns=[];_onStartFns=[];_onDestroyFns=[];_duration;_delay;_initialized=!1;_finished=!1;_started=!1;_destroyed=!1;_finalKeyframe;_originalOnDoneFns=[];_originalOnStartFns=[];domPlayer=null;time=0;parentPlayer=null;currentSnapshot=new Map;constructor(o,e,t,i){this.element=o,this.keyframes=e,this.options=t,this._specialStyles=i,this._duration=t.duration,this._delay=t.delay||0,this.time=this._duration+this._delay}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(o=>o()),this._onDoneFns=[])}init(){this._buildPlayer()&&this._preparePlayerBeforeStart()}_buildPlayer(){if(this._initialized)return this.domPlayer;this._initialized=!0;let o=this.keyframes,e=this._triggerWebAnimation(this.element,o,this.options);if(!e)return this._onFinish(),null;this.domPlayer=e,this._finalKeyframe=o.length?o[o.length-1]:new Map;let t=()=>this._onFinish();return e.addEventListener("finish",t),this.onDestroy(()=>{e.removeEventListener("finish",t)}),e}_preparePlayerBeforeStart(){this._delay?this._resetDomPlayerState():this.domPlayer?.pause()}_convertKeyframesToObject(o){let e=[];return o.forEach(t=>{e.push(Object.fromEntries(t))}),e}_triggerWebAnimation(o,e,t){let i=this._convertKeyframesToObject(e);try{return o.animate(i,t)}catch{return null}}onStart(o){this._originalOnStartFns.push(o),this._onStartFns.push(o)}onDone(o){this._originalOnDoneFns.push(o),this._onDoneFns.push(o)}onDestroy(o){this._onDestroyFns.push(o)}play(){let o=this._buildPlayer();o&&(this.hasStarted()||(this._onStartFns.forEach(e=>e()),this._onStartFns=[],this._started=!0,this._specialStyles&&this._specialStyles.start()),o.play())}pause(){this.init(),this.domPlayer?.pause()}finish(){this.init(),this.domPlayer&&(this._specialStyles&&this._specialStyles.finish(),this._onFinish(),this.domPlayer.finish())}reset(){this._resetDomPlayerState(),this._destroyed=!1,this._finished=!1,this._started=!1,this._onStartFns=this._originalOnStartFns,this._onDoneFns=this._originalOnDoneFns}_resetDomPlayerState(){this.domPlayer?.cancel()}restart(){this.reset(),this.play()}hasStarted(){return this._started}destroy(){this._destroyed||(this._destroyed=!0,this._resetDomPlayerState(),this._onFinish(),this._specialStyles&&this._specialStyles.destroy(),this._onDestroyFns.forEach(o=>o()),this._onDestroyFns=[])}setPosition(o){this.domPlayer||this.init(),this.domPlayer&&(this.domPlayer.currentTime=o*this.time)}getPosition(){return this.domPlayer?+(this.domPlayer.currentTime??0)/this.time:this._initialized?1:0}get totalTime(){return this._delay+this._duration}beforeDestroy(){let o=new Map;this.hasStarted()&&this._finalKeyframe.forEach((t,i)=>{i!=="offset"&&o.set(i,this._finished?t:c1(this.element,i))}),this.currentSnapshot=o}triggerCallback(o){let e=o==="start"?this._onStartFns:this._onDoneFns;e.forEach(t=>t()),e.length=0}},b1=class{validateStyleProperty(o){return!0}validateAnimatableStyleProperty(o){return!0}containsElement(o,e){return BT(o,e)}getParentElement(o){return a1(o)}query(o,e,t){return jT(o,e,t)}computeStyle(o,e,t){return c1(o,e)}animate(o,e,t,i,a,s=[]){let d=i==0?"both":"forwards",p={duration:t,delay:i,fill:d};a&&(p.easing=a);let u=new Map,g=s.filter(x=>x instanceof C1);mR(t,i)&&g.forEach(x=>{x.currentSnapshot.forEach((b,P)=>u.set(P,b))});let C=cR(e).map(x=>new Map(x));C=pR(o,C,u);let M=Wte(o,C);return new C1(o,C,p,M)}};var u1="@",ER="@.disabled",x1=class{namespaceId;delegate;engine;_onDestroy;\u0275type=0;constructor(o,e,t,i){this.namespaceId=o,this.delegate=e,this.engine=t,this._onDestroy=i}get data(){return this.delegate.data}destroyNode(o){this.delegate.destroyNode?.(o)}destroy(){this.engine.destroy(this.namespaceId,this.delegate),this.engine.afterFlushAnimationsDone(()=>{queueMicrotask(()=>{this.delegate.destroy()})}),this._onDestroy?.()}createElement(o,e){return this.delegate.createElement(o,e)}createComment(o){return this.delegate.createComment(o)}createText(o){return this.delegate.createText(o)}appendChild(o,e){this.delegate.appendChild(o,e),this.engine.onInsert(this.namespaceId,e,o,!1)}insertBefore(o,e,t,i=!0){this.delegate.insertBefore(o,e,t),this.engine.onInsert(this.namespaceId,e,o,i)}removeChild(o,e,t,i){if(i){this.delegate.removeChild(o,e,t,i);return}this.parentNode(e)&&this.engine.onRemove(this.namespaceId,e,this.delegate)}selectRootElement(o,e){return this.delegate.selectRootElement(o,e)}parentNode(o){return this.delegate.parentNode(o)}nextSibling(o){return this.delegate.nextSibling(o)}setAttribute(o,e,t,i){this.delegate.setAttribute(o,e,t,i)}removeAttribute(o,e,t){this.delegate.removeAttribute(o,e,t)}addClass(o,e){this.delegate.addClass(o,e)}removeClass(o,e){this.delegate.removeClass(o,e)}setStyle(o,e,t,i){this.delegate.setStyle(o,e,t,i)}removeStyle(o,e,t){this.delegate.removeStyle(o,e,t)}setProperty(o,e,t){e.charAt(0)==u1&&e==ER?this.disableAnimations(o,!!t):this.delegate.setProperty(o,e,t)}setValue(o,e){this.delegate.setValue(o,e)}listen(o,e,t,i){return this.delegate.listen(o,e,t,i)}disableAnimations(o,e){this.engine.disableAnimations(o,e)}},sE=class extends x1{factory;constructor(o,e,t,i,a){super(e,t,i,a),this.factory=o,this.namespaceId=e}setProperty(o,e,t){e.charAt(0)==u1?e.charAt(1)=="."&&e==ER?(t=t===void 0?!0:!!t,this.disableAnimations(o,t)):this.engine.process(this.namespaceId,o,e.slice(1),t):this.delegate.setProperty(o,e,t)}listen(o,e,t,i){if(e.charAt(0)==u1){let a=Qte(o),s=e.slice(1),d="";return s.charAt(0)!=u1&&([s,d]=Kte(s)),this.engine.listen(this.namespaceId,a,s,d,p=>{let u=p._data||-1;this.factory.scheduleListenerCallback(u,t,p)})}return this.delegate.listen(o,e,t,i)}};function Qte(n){switch(n){case"body":return document.body;case"document":return document;case"window":return window;default:return n}}function Kte(n){let o=n.indexOf("."),e=n.substring(0,o),t=n.slice(o+1);return[e,t]}var y1=class{delegate;engine;_zone;_currentId=0;_microtaskId=1;_animationCallbacksBuffer=[];_rendererCache=new Map;_cdRecurDepth=0;constructor(o,e,t){this.delegate=o,this.engine=e,this._zone=t,e.onRemovalComplete=(i,a)=>{a?.removeChild(null,i)}}createRenderer(o,e){let i=this.delegate.createRenderer(o,e);if(!o||!e?.data?.animation){let u=this._rendererCache,g=u.get(i);if(!g){let C=()=>u.delete(i);g=new x1("",i,this.engine,C),u.set(i,g)}return g}let a=e.id,s=e.id+"-"+this._currentId;this._currentId++,this.engine.register(s,o);let d=u=>{Array.isArray(u)?u.forEach(d):this.engine.registerTrigger(a,s,o,u.name,u)};return e.data.animation.forEach(d),new sE(this,s,i,this.engine)}begin(){this._cdRecurDepth++,this.delegate.begin&&this.delegate.begin()}_scheduleCountTask(){queueMicrotask(()=>{this._microtaskId++})}scheduleListenerCallback(o,e,t){if(o>=0&&o<this._microtaskId){this._zone.run(()=>e(t));return}let i=this._animationCallbacksBuffer;i.length==0&&queueMicrotask(()=>{this._zone.run(()=>{i.forEach(a=>{let[s,d]=a;s(d)}),this._animationCallbacksBuffer=[]})}),i.push([e,t])}end(){this._cdRecurDepth--,this._cdRecurDepth==0&&this._zone.runOutsideAngular(()=>{this._scheduleCountTask(),this.engine.flush(this._microtaskId)}),this.delegate.end&&this.delegate.end()}whenRenderingDone(){return this.engine.whenRenderingDone()}componentReplaced(o){this.engine.flush(),this.delegate.componentReplaced?.(o)}};var Yte=(()=>{class n extends ch{constructor(e,t,i){super(e,t,i)}ngOnDestroy(){this.flush()}static \u0275fac=function(t){return new(t||n)(_e(Do),_e(wu),_e(Mu))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();function Zte(){return new g1}function Jte(){return new y1(f(xA),f(ch),f(Gi))}var DR=[{provide:Mu,useFactory:Zte},{provide:ch,useClass:Yte},{provide:Fp,useFactory:Jte}],ene=[{provide:wu,useClass:lE},{provide:Bk,useValue:"NoopAnimations"},...DR],OR=[{provide:wu,useFactory:()=>new b1},{provide:Bk,useFactory:()=>"BrowserAnimations"},...DR],IR=(()=>{class n{static withConfig(e){return{ngModule:n,providers:e.disableAnimations?ene:OR}}static \u0275fac=function(t){return new(t||n)};static \u0275mod=on({type:n});static \u0275inj=nn({providers:OR,imports:[VC]})}return n})();var AR=void 0;typeof Object.create!="function"?AR=(function(n){var o=function(){};return function(e,t){if(e!==Object(e)&&e!==null)throw TypeError("Argument must be an object, or null");o.prototype=e||{};var i=new o;return o.prototype=null,t!==n&&Object.defineProperties(i,t),e===null&&(i.__proto__=null),i}})():AR=Object.create;var ev=["webkit","moz","ms","o"],nWe=(function(){if(typeof window>"u")return function(){};for(var n=0,o=ev.length;n<o&&!window.requestAnimationFrame;++n)window.requestAnimationFrame=window[ev[n]+"RequestAnimationFrame"];if(!window.requestAnimationFrame){var e=0;window.requestAnimationFrame=function(t){var i=new Date().getTime(),a=Math.max(0,16-i-e),s=window.setTimeout(function(){return t(i+a)},a);return e=i+a,s}}return window.requestAnimationFrame.bind(window)})(),iWe=(function(){if(typeof window>"u")return function(){};for(var n=0,o=ev.length;n<o&&!window.cancelAnimationFrame;++n)window.cancelAnimationFrame=window[ev[n]+"CancelAnimationFrame"]||window[ev[n]+"CancelRequestAnimationFrame"];return window.cancelAnimationFrame||(window.cancelAnimationFrame=function(e){window.clearTimeout(e)}),window.cancelAnimationFrame.bind(window)})();var NR=(()=>{class n{static{this.\u0275fac=function(t){return new(t||n)}}static{this.\u0275mod=on({type:n})}static{this.\u0275inj=nn({})}}return n})();function FR(n){setTimeout(()=>{throw n})}function dE(n,o){try{n()}catch(e){try{o()}catch(t){FR(t)}throw e}o()}var tv=class{constructor(o){this.rawFile=o;let e=o instanceof HTMLInputElement?o.value:o;this[`_createFrom${typeof e=="string"?"FakePath":"Object"}`](e)}_createFromFakePath(o){this.lastModifiedDate=void 0,this.size=void 0,this.type=`like/${o.slice(o.lastIndexOf(".")+1).toLowerCase()}`,this.name=o.slice(o.lastIndexOf("/")+o.lastIndexOf("\\")+2)}_createFromObject(o){this.size=o.size,this.type=o.type,this.name=o.name}},mE=class{constructor(o,e,t){this.url="/",this.headers=[],this.withCredentials=!0,this.formData=[],this.isReady=!1,this.isUploading=!1,this.isUploaded=!1,this.isSuccess=!1,this.isCancel=!1,this.isError=!1,this.progress=0,this.uploader=o,this.some=e,this.options=t,this.file=new tv(e),this._file=e,o.options&&(this.method=o.options.method||"POST",this.alias=o.options.itemAlias||"file"),this.url=o.options.url}upload(){try{this.uploader.uploadItem(this)}catch(o){try{dE(()=>this.uploader._onErrorItem(this,"",0,{}),()=>this.uploader._onCompleteItem(this,"",0,{}))}catch(e){FR(e)}throw o}}cancel(){this.uploader.cancelItem(this)}remove(){this.uploader.removeFromQueue(this)}onBeforeUpload(){}onBuildForm(o){return{form:o}}onProgress(o){return{progress:o}}onSuccess(o,e,t){return{response:o,status:e,headers:t}}onError(o,e,t){return{response:o,status:e,headers:t}}onCancel(o,e,t){return{response:o,status:e,headers:t}}onComplete(o,e,t){return{response:o,status:e,headers:t}}_onBeforeUpload(){this.isReady=!0,this.isUploading=!0,this.isUploaded=!1,this.isSuccess=!1,this.isCancel=!1,this.isError=!1,this.progress=0,this.onBeforeUpload()}_onBuildForm(o){this.onBuildForm(o)}_onProgress(o){this.progress=o,this.onProgress(o)}_onSuccess(o,e,t){this.isReady=!1,this.isUploading=!1,this.isUploaded=!0,this.isSuccess=!0,this.isCancel=!1,this.isError=!1,this.progress=100,this.index=void 0,this.onSuccess(o,e,t)}_onError(o,e,t){this.isReady=!1,this.isUploading=!1,this.isUploaded=!0,this.isSuccess=!1,this.isCancel=!1,this.isError=!0,this.progress=0,this.index=void 0,this.onError(o,e,t)}_onCancel(o,e,t){this.isReady=!1,this.isUploading=!1,this.isUploaded=!1,this.isSuccess=!1,this.isCancel=!0,this.isError=!1,this.progress=0,this.index=void 0,this.onCancel(o,e,t)}_onComplete(o,e,t){this.onComplete(o,e,t),this.uploader.options.removeAfterUpload&&this.remove()}_prepareToUploading(){this.index=this.index||++this.uploader._nextIndex,this.isReady=!0}},tne=(()=>{class n{static{this.mime_doc=["application/msword","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.openxmlformats-officedocument.wordprocessingml.template","application/vnd.ms-word.document.macroEnabled.12","application/vnd.ms-word.template.macroEnabled.12"]}static{this.mime_xsl=["application/vnd.ms-excel","application/vnd.ms-excel","application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.openxmlformats-officedocument.spreadsheetml.template","application/vnd.ms-excel.sheet.macroEnabled.12","application/vnd.ms-excel.template.macroEnabled.12","application/vnd.ms-excel.addin.macroEnabled.12","application/vnd.ms-excel.sheet.binary.macroEnabled.12"]}static{this.mime_ppt=["application/vnd.ms-powerpoint","application/vnd.ms-powerpoint","application/vnd.ms-powerpoint","application/vnd.ms-powerpoint","application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.openxmlformats-officedocument.presentationml.template","application/vnd.openxmlformats-officedocument.presentationml.slideshow","application/vnd.ms-powerpoint.addin.macroEnabled.12","application/vnd.ms-powerpoint.presentation.macroEnabled.12","application/vnd.ms-powerpoint.presentation.macroEnabled.12","application/vnd.ms-powerpoint.slideshow.macroEnabled.12"]}static{this.mime_psd=["image/photoshop","image/x-photoshop","image/psd","application/photoshop","application/psd","zz-application/zz-winassoc-psd"]}static{this.mime_compress=["application/x-gtar","application/x-gcompress","application/compress","application/x-tar","application/x-rar-compressed","application/octet-stream","application/x-zip-compressed","application/zip-compressed","application/x-7z-compressed","application/gzip","application/x-bzip2"]}static getMimeClass(e){let t="application";return e?.type&&this.mime_psd.indexOf(e.type)!==-1||e?.type?.match("image.*")?t="image":e?.type?.match("video.*")?t="video":e?.type?.match("audio.*")?t="audio":e?.type==="application/pdf"?t="pdf":e?.type&&this.mime_compress.indexOf(e.type)!==-1?t="compress":e?.type&&this.mime_doc.indexOf(e.type)!==-1?t="doc":e?.type&&this.mime_xsl.indexOf(e.type)!==-1?t="xls":e?.type&&this.mime_ppt.indexOf(e.type)!==-1&&(t="ppt"),t==="application"&&e?.name&&(t=this.fileTypeDetection(e.name)),t}static fileTypeDetection(e){let t={jpg:"image",jpeg:"image",tif:"image",psd:"image",bmp:"image",png:"image",nef:"image",tiff:"image",cr2:"image",dwg:"image",cdr:"image",ai:"image",indd:"image",pin:"image",cdp:"image",skp:"image",stp:"image","3dm":"image",mp3:"audio",wav:"audio",wma:"audio",mod:"audio",m4a:"audio",compress:"compress",zip:"compress",rar:"compress","7z":"compress",lz:"compress",z01:"compress",bz2:"compress",gz:"compress",pdf:"pdf",xls:"xls",xlsx:"xls",ods:"xls",mp4:"video",avi:"video",wmv:"video",mpg:"video",mts:"video",flv:"video","3gp":"video",vob:"video",m4v:"video",mpeg:"video",m2ts:"video",mov:"video",doc:"doc",docx:"doc",eps:"doc",txt:"doc",odt:"doc",rtf:"doc",ppt:"ppt",pptx:"ppt",pps:"ppt",ppsx:"ppt",odp:"ppt"},i=e.split(".");if(i.length<2)return"application";let a=i[i.length-1].toLowerCase();return t[a]===void 0?"application":t[a]}}return n})();function nne(n){return File&&n instanceof File}var kl=class{constructor(o){this.isUploading=!1,this.queue=[],this.progress=0,this._nextIndex=0,this.options={autoUpload:!1,isHTML5:!0,filters:[],removeAfterUpload:!1,disableMultipart:!1,formatDataFunction:e=>e._file,formatDataFunctionIsAsync:!1,url:""},this.setOptions(o),this.response=new be}setOptions(o){this.options=Object.assign(this.options,o),this.authToken=this.options.authToken,this.authTokenHeader=this.options.authTokenHeader||"Authorization",this.autoUpload=this.options.autoUpload;let e=[this._queueLimitFilter,this._fileSizeFilter,this._fileTypeFilter,this._mimeTypeFilter];this.options.filters=this.options.filters?.filter(t=>!e.includes(t.fn)),this.options.filters?.unshift({name:"queueLimit",fn:this._queueLimitFilter}),this.options.maxFileSize&&this.options.filters?.unshift({name:"fileSize",fn:this._fileSizeFilter}),this.options.allowedFileType&&this.options.filters?.unshift({name:"fileType",fn:this._fileTypeFilter}),this.options.allowedMimeType&&this.options.filters?.unshift({name:"mimeType",fn:this._mimeTypeFilter});for(let t=0;t<this.queue.length;t++)this.queue[t].url=this.options.url}addToQueue(o,e,t){let i=e,a=Array.from(o),s=this._getFilters(t),d=this.queue.length,p=[];a.map(u=>{i||(i=this.options);let g=new tv(u);if(this._isValidFile(g,s,i)){let C=new mE(this,u,i);p.push(C),this.queue.push(C),this._onAfterAddingFile(C)}else if(typeof this._failFilterIndex=="number"&&this._failFilterIndex>=0){let C=s[this._failFilterIndex];this._onWhenAddingFileFailed(g,C,i)}}),this.queue.length!==d&&(this._onAfterAddingAll(p),this.progress=this._getTotalProgress()),this._render(),this.options.autoUpload&&this.uploadAll()}removeFromQueue(o){let e=this.getIndexOfItem(o),t=this.queue[e];t.isUploading&&t.cancel(),this.queue.splice(e,1),this.progress=this._getTotalProgress()}clearQueue(){for(;this.queue.length;)this.queue[0].remove();this.progress=0}uploadItem(o){let e=this.getIndexOfItem(o),t=this.queue[e],i=this.options.isHTML5?"_xhrTransport":"_iframeTransport";t._prepareToUploading(),!this.isUploading&&(this.isUploading=!0,this[i](t))}cancelItem(o){let e=this.getIndexOfItem(o),t=this.queue[e];if(t){if(t.isUploading){(this.options.isHTML5?t._xhr:t._form).abort();return}t.isReady&&(this._onCancelItem(t,"",0,{}),t._onComplete("",0,{}),this.onCompleteItem(t,"",0,{}),this._render())}}uploadAll(){let o=this.getNotUploadedItems().filter(e=>!e.isUploading);o.length&&(o.map(e=>e._prepareToUploading()),o[0].upload())}cancelAll(){let o=this.getNotUploadedItems();o.filter(e=>!e.isUploading).forEach(e=>e.cancel()),o.filter(e=>e.isUploading).forEach(e=>e.cancel())}isFile(o){return nne(o)}isFileLikeObject(o){return o instanceof tv}getIndexOfItem(o){return typeof o=="number"?o:this.queue.indexOf(o)}getNotUploadedItems(){return this.queue.filter(o=>!o.isUploaded)}getReadyItems(){return this.queue.filter(o=>o.isReady&&!o.isUploading).sort((o,e)=>o.index-e.index)}onAfterAddingAll(o){return{fileItems:o}}onBuildItemForm(o,e){return{fileItem:o,form:e}}onAfterAddingFile(o){return{fileItem:o}}onWhenAddingFileFailed(o,e,t){return{item:o,filter:e,options:t}}onBeforeUploadItem(o){return{fileItem:o}}onProgressItem(o,e){return{fileItem:o,progress:e}}onProgressAll(o){return{progress:o}}onSuccessItem(o,e,t,i){return{item:o,response:e,status:t,headers:i}}onErrorItem(o,e,t,i){return{item:o,response:e,status:t,headers:i}}onCancelItem(o,e,t,i){return{item:o,response:e,status:t,headers:i}}onCompleteItem(o,e,t,i){return{item:o,response:e,status:t,headers:i}}onCompleteAll(){}_mimeTypeFilter(o){return this.options.allowedMimeType?o?.type?this.options.allowedMimeType.indexOf(o.type)!==-1:this.options.allowEmptyMimeType!==!1:!0}_fileSizeFilter(o){return!(this.options.maxFileSize&&o.size>this.options.maxFileSize)}_fileTypeFilter(o){return!(this.options.allowedFileType&&this.options.allowedFileType.indexOf(tne.getMimeClass(o))===-1)}_onErrorItem(o,e,t,i){o._onError(e,t,i),this.onErrorItem(o,e,t,i)}_onCompleteItem(o,e,t,i){dE(()=>{o._onComplete(e,t,i),this.onCompleteItem(o,e,t,i)},()=>this._uploadNext())}_finishItem(o,e,t,i,a){dE(()=>this[e](o,t,i,a),()=>this._onCompleteItem(o,t,i,a))}_uploadNext(){let o=this.getReadyItems()[0];if(this.isUploading=!1,o){o.upload();return}this.progress=this._getTotalProgress(),this.onCompleteAll(),this._render()}_headersGetter(o){return e=>e?o[e.toLowerCase()]||void 0:o}_xhrTransport(o){let e=o._xhr=new XMLHttpRequest,t;if(this._onBeforeUploadItem(o),typeof o._file.size!="number")throw new TypeError("The file specified is no longer valid");this.options.disableMultipart?this.options.formatDataFunction&&(t=this.options.formatDataFunction(o)):t=this._buildFormData(o,o._file),e.upload.onprogress=i=>{let a=Math.round(i.lengthComputable?i.loaded*100/i.total:0);this._onProgressItem(o,a)},e.onload=()=>{let i=this._parseHeaders(e.getAllResponseHeaders()),a=this._transformResponse(e.response);this._finishItem(o,this._isSuccessCode(e.status)?"_onSuccessItem":"_onErrorItem",a,e.status,i)},e.onerror=()=>{let i=this._parseHeaders(e.getAllResponseHeaders()),a=this._transformResponse(e.response);this._finishItem(o,"_onErrorItem",a,e.status,i)},e.onabort=()=>{let i=this._parseHeaders(e.getAllResponseHeaders()),a=this._transformResponse(e.response);this._finishItem(o,"_onCancelItem",a,e.status,i)},this._openRequest(e,o),this.options.formatDataFunctionIsAsync?t.then(i=>e.send(JSON.stringify(i))):e.send(t),this._render()}_buildFormData(o,e,t={}){let i=new FormData;this._onBuildItemForm(o,i),Object.keys(t).forEach(s=>i.append(s,t[s]));let a=()=>i.append(o.alias,e,o.file.name);return this.options.parametersBeforeFiles||a(),this.options.additionalParameter!==void 0&&Object.keys(this.options.additionalParameter).forEach(s=>{let d=this.options.additionalParameter?.[s];typeof d=="string"&&d.indexOf("{{file_name}}")>=0&&o.file?.name&&(d=d.replace("{{file_name}}",o.file.name)),i.append(s,d)}),a&&this.options.parametersBeforeFiles&&a(),i}_openRequest(o,e){let t=this;if(e.method&&e.url&&o.open(e.method,e.url,!0),o.withCredentials=e.withCredentials,this.options.headers)for(let i of this.options.headers)o.setRequestHeader(i.name,i.value);if(e.headers.length)for(let i of e.headers)o.setRequestHeader(i.name,i.value);this.authToken&&this.authTokenHeader&&o.setRequestHeader(this.authTokenHeader,this.authToken),o.onreadystatechange=function(){o.readyState==XMLHttpRequest.DONE&&t.response.emit(o.responseText)}}_getTotalProgress(o=0){if(this.options.removeAfterUpload)return o;let e=this.getNotUploadedItems().length,t=e?this.queue.length-e:this.queue.length,i=100/this.queue.length,a=o*i/100;return Math.round(t*i+a)}_getFilters(o){if(!o)return this.options?.filters||[];if(Array.isArray(o))return o;if(typeof o=="string"){let e=o.match(/[^\s,]+/g);return this.options?.filters||[].filter(t=>e?.indexOf(t.name)!==-1)}return this.options?.filters||[]}_render(){}_queueLimitFilter(){return this.options.queueLimit===void 0||this.queue.length<this.options.queueLimit}_isValidFile(o,e,t){return this._failFilterIndex=-1,e.length?e.every(i=>(typeof this._failFilterIndex=="number"&&this._failFilterIndex++,i.fn.call(this,o,t))):!0}_isSuccessCode(o){return o>=200&&o<300||o===304}_transformResponse(o){return o}_parseHeaders(o){let e={},t,i,a;return o&&o.split(`
|
||
`).map(s=>{a=s.indexOf(":"),t=s.slice(0,a).trim().toLowerCase(),i=s.slice(a+1).trim(),t&&(e[t]=e[t]?e[t]+", "+i:i)}),e}_onWhenAddingFileFailed(o,e,t){this.onWhenAddingFileFailed(o,e,t)}_onAfterAddingFile(o){this.onAfterAddingFile(o)}_onAfterAddingAll(o){this.onAfterAddingAll(o)}_onBeforeUploadItem(o){o._onBeforeUpload(),this.onBeforeUploadItem(o)}_onBuildItemForm(o,e){o._onBuildForm(e),this.onBuildItemForm(o,e)}_onProgressItem(o,e){let t=this._getTotalProgress(e);this.progress=t,o._onProgress(e),this.onProgressItem(o,e),this.onProgressAll(t),this._render()}_onSuccessItem(o,e,t,i){o._onSuccess(e,t,i),this.onSuccessItem(o,e,t,i)}_onCancelItem(o,e,t,i){o._onCancel(e,t,i),this.onCancelItem(o,e,t,i)}};var Kc=(()=>{class n{constructor(){this.uploader=ee(),this.onFileSelected=$o(),this.element=f(Kt)}getOptions(){return this.uploader()?.options}getFilters(){return""}isEmptyAfterSelection(){return!!this.element.nativeElement.attributes.multiple}onClick(){let e=this.element.nativeElement.files?.[0];e&&!this.uploader()?.queue.some(t=>t._file===e)&&(this.element.nativeElement.value="")}onChange(){let e=this.element.nativeElement.files,t=this.getOptions(),i=this.getFilters();this.uploader()?.addToQueue(e,t,i),this.onFileSelected.emit(e),this.isEmptyAfterSelection()&&(this.element.nativeElement.value="")}static{this.\u0275fac=function(t){return new(t||n)}}static{this.\u0275dir=yt({type:n,selectors:[["","ng2FileSelect",""]],hostBindings:function(t,i){t&1&&_("click",function(){return i.onClick()})("change",function(){return i.onChange()})},inputs:{uploader:[1,"uploader"]},outputs:{onFileSelected:"onFileSelected"}})}}return n})();var Pl=(()=>{class n{static{this.\u0275fac=function(t){return new(t||n)}}static{this.\u0275mod=on({type:n})}static{this.\u0275inj=nn({})}}return n})();var Su=class{visible;error;clear;constructor(o,e,t=!1){this.visible=o,this.error=e,this.clear=t}},mo=(()=>{class n{state=new cn(new Su(!1));constructor(){}setError(e){this.state.next(new Su(!1,e.error))}clear(){this.state.next(new Su(!1,null,!0))}activate(){this.state.next(new Su(!0))}deactivate(){this.state.next(new Su(!1))}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();function ine(n,o){n&1&&(r(0,"div",1),L(1,"mat-spinner",3),l())}function one(n,o){if(n&1){let e=R();r(0,"div",2)(1,"div",4)(2,"mat-icon"),c(3,"error_outline"),l()(),r(4,"div"),c(5),l(),r(6,"div")(7,"button",5),_("click",function(){y(e);let i=h(2);return w(i.refresh())}),r(8,"mat-icon"),c(9,"refresh"),l()(),r(10,"button",6)(11,"mat-icon"),c(12,"home"),l()()()()}if(n&2){let e,t=h(2);m(5),X("Error occurred: ",(e=t.error())==null?null:e.message)}}function ane(n,o){if(n&1&&(r(0,"div",0),T(1,ine,2,0,"div",1),T(2,one,13,1,"div",2),l()),n&2){let e=h();m(),E(e.visible()&&!e.error()?1:-1),m(),E(e.error()?2:-1)}}var Um=(()=>{class n{progressService=f(mo);router=f(Ft);visible=z(!1);error=z(null);routerSubscription;ngOnInit(){this.progressService.state.subscribe(e=>{this.visible.set(e.visible),e.error&&!this.error()&&this.error.set(e.error),e.clear&&this.error.set(null)}),this.routerSubscription=this.router.events.subscribe(()=>{this.progressService.clear()})}refresh(){this.router.navigateByUrl(this.router.url)}ngOnDestroy(){this.routerSubscription.unsubscribe()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-progress"]],decls:1,vars:1,consts:[[1,"overlay"],[1,"loading-spinner"],[1,"error-state"],["color","primary"],[1,"error-icon"],["mat-button","","matTooltip","Refresh page","matTooltipClass","custom-tooltip",3,"click"],["mat-button","","routerLink","/","matTooltip","Go to home","matTooltipClass","custom-tooltip"]],template:function(t,i){t&1&&T(0,ane,3,2,"div",0),t&2&&E(i.visible()||i.error()?0:-1)},dependencies:[fe,rt,mt,ie,ce,Y,he,st,pt,Co],styles:[".overlay[_ngcontent-%COMP%]{position:fixed;width:100%;height:100%;inset:0;background-color:color-mix(in srgb,var(--mat-sys-shadow) 50%,transparent);z-index:2000}.loading-spinner[_ngcontent-%COMP%], .error-state[_ngcontent-%COMP%]{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)}.error-state[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{text-align:center}.error-icon[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:64px;width:64px;height:64px}"],changeDetection:0})}return n})();var w1=(()=>{class n{document;router=f(Ft);controllerService=f(_t);progressService=f(mo);constructor(e){this.document=e}ngOnInit(){this.progressService.activate(),setTimeout(()=>{let e;parseInt(this.document.location.port,10)?e=parseInt(this.document.location.port,10):this.document.location.protocol=="https:"?e=443:e=80,this.controllerService.getLocalController(this.document.location.hostname,e).then(t=>{this.router.navigate(["/controller",t.id,"projects"]),this.progressService.deactivate()})},100)}static \u0275fac=function(t){return new(t||n)(Mt(Do))};static \u0275cmp=V({type:n,selectors:[["app-bundled-controller-finder"]],decls:1,vars:0,template:function(t,i){t&1&&L(0,"app-progress")},dependencies:[Um],encapsulation:2,changeDetection:0})}return n})();var rne=[[["caption"]],[["colgroup"],["col"]],"*"],sne=["caption","colgroup, col","*"];function lne(n,o){n&1&&Zt(0,2)}function cne(n,o){n&1&&(r(0,"thead",0),li(1,1),l(),r(2,"tbody",2),li(3,3)(4,4),l(),r(5,"tfoot",0),li(6,5),l())}function dne(n,o){n&1&&li(0,1)(1,3)(2,4)(3,5)}var bn=(()=>{class n extends DT{stickyCssClass="mat-mdc-table-sticky";needsPositionStickyOnElement=!1;static \u0275fac=(()=>{let e;return function(i){return(e||(e=yi(n)))(i||n)}})();static \u0275cmp=V({type:n,selectors:[["mat-table"],["table","mat-table",""]],hostAttrs:[1,"mat-mdc-table","mdc-data-table__table"],hostVars:2,hostBindings:function(t,i){t&2&&ne("mat-table-fixed-layout",i.fixedLayout)},exportAs:["matTable"],features:[un([{provide:DT,useExisting:n},{provide:sc,useExisting:n},{provide:H0,useValue:null}]),mi],ngContentSelectors:sne,decls:5,vars:2,consts:[["role","rowgroup"],["headerRowOutlet",""],["role","rowgroup",1,"mdc-data-table__content"],["rowOutlet",""],["noDataRowOutlet",""],["footerRowOutlet",""]],template:function(t,i){t&1&&(pi(rne),Zt(0),Zt(1,1),T(2,lne,1,0),T(3,cne,7,0)(4,dne,4,0)),t&2&&(m(2),E(i._isServer?2:-1),m(),E(i._isNativeHtmlTable?3:4))},dependencies:[TT,PT,OT,ET],styles:[`.mat-mdc-table-sticky {
|
||
position: sticky !important;
|
||
}
|
||
|
||
mat-table {
|
||
display: block;
|
||
}
|
||
|
||
mat-header-row {
|
||
min-height: var(--mat-table-header-container-height, 56px);
|
||
}
|
||
|
||
mat-row {
|
||
min-height: var(--mat-table-row-item-container-height, 52px);
|
||
}
|
||
|
||
mat-footer-row {
|
||
min-height: var(--mat-table-footer-container-height, 52px);
|
||
}
|
||
|
||
mat-row, mat-header-row, mat-footer-row {
|
||
display: flex;
|
||
border-width: 0;
|
||
border-bottom-width: 1px;
|
||
border-style: solid;
|
||
align-items: center;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
mat-cell:first-of-type, mat-header-cell:first-of-type, mat-footer-cell:first-of-type {
|
||
padding-left: 24px;
|
||
}
|
||
[dir=rtl] mat-cell:first-of-type:not(:only-of-type), [dir=rtl] mat-header-cell:first-of-type:not(:only-of-type), [dir=rtl] mat-footer-cell:first-of-type:not(:only-of-type) {
|
||
padding-left: 0;
|
||
padding-right: 24px;
|
||
}
|
||
mat-cell:last-of-type, mat-header-cell:last-of-type, mat-footer-cell:last-of-type {
|
||
padding-right: 24px;
|
||
}
|
||
[dir=rtl] mat-cell:last-of-type:not(:only-of-type), [dir=rtl] mat-header-cell:last-of-type:not(:only-of-type), [dir=rtl] mat-footer-cell:last-of-type:not(:only-of-type) {
|
||
padding-right: 0;
|
||
padding-left: 24px;
|
||
}
|
||
|
||
mat-cell, mat-header-cell, mat-footer-cell {
|
||
flex: 1;
|
||
display: flex;
|
||
align-items: center;
|
||
overflow: hidden;
|
||
word-wrap: break-word;
|
||
min-height: inherit;
|
||
}
|
||
|
||
.mat-mdc-table {
|
||
min-width: 100%;
|
||
border: 0;
|
||
border-spacing: 0;
|
||
table-layout: auto;
|
||
white-space: normal;
|
||
background-color: var(--mat-table-background-color, var(--mat-sys-surface));
|
||
}
|
||
|
||
.mat-table-fixed-layout {
|
||
table-layout: fixed;
|
||
}
|
||
|
||
.mdc-data-table__cell {
|
||
box-sizing: border-box;
|
||
overflow: hidden;
|
||
text-align: start;
|
||
text-overflow: ellipsis;
|
||
}
|
||
|
||
.mdc-data-table__cell,
|
||
.mdc-data-table__header-cell {
|
||
padding: 0 16px;
|
||
}
|
||
|
||
.mat-mdc-header-row {
|
||
-moz-osx-font-smoothing: grayscale;
|
||
-webkit-font-smoothing: antialiased;
|
||
height: var(--mat-table-header-container-height, 56px);
|
||
color: var(--mat-table-header-headline-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)));
|
||
font-family: var(--mat-table-header-headline-font, var(--mat-sys-title-small-font, Roboto, sans-serif));
|
||
line-height: var(--mat-table-header-headline-line-height, var(--mat-sys-title-small-line-height));
|
||
font-size: var(--mat-table-header-headline-size, var(--mat-sys-title-small-size, 14px));
|
||
font-weight: var(--mat-table-header-headline-weight, var(--mat-sys-title-small-weight, 500));
|
||
}
|
||
|
||
.mat-mdc-row {
|
||
height: var(--mat-table-row-item-container-height, 52px);
|
||
color: var(--mat-table-row-item-label-text-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)));
|
||
}
|
||
|
||
.mat-mdc-row,
|
||
.mdc-data-table__content {
|
||
-moz-osx-font-smoothing: grayscale;
|
||
-webkit-font-smoothing: antialiased;
|
||
font-family: var(--mat-table-row-item-label-text-font, var(--mat-sys-body-medium-font, Roboto, sans-serif));
|
||
line-height: var(--mat-table-row-item-label-text-line-height, var(--mat-sys-body-medium-line-height));
|
||
font-size: var(--mat-table-row-item-label-text-size, var(--mat-sys-body-medium-size, 14px));
|
||
font-weight: var(--mat-table-row-item-label-text-weight, var(--mat-sys-body-medium-weight));
|
||
}
|
||
|
||
.mat-mdc-footer-row {
|
||
-moz-osx-font-smoothing: grayscale;
|
||
-webkit-font-smoothing: antialiased;
|
||
height: var(--mat-table-footer-container-height, 52px);
|
||
color: var(--mat-table-row-item-label-text-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)));
|
||
font-family: var(--mat-table-footer-supporting-text-font, var(--mat-sys-body-medium-font, Roboto, sans-serif));
|
||
line-height: var(--mat-table-footer-supporting-text-line-height, var(--mat-sys-body-medium-line-height));
|
||
font-size: var(--mat-table-footer-supporting-text-size, var(--mat-sys-body-medium-size, 14px));
|
||
font-weight: var(--mat-table-footer-supporting-text-weight, var(--mat-sys-body-medium-weight));
|
||
letter-spacing: var(--mat-table-footer-supporting-text-tracking, var(--mat-sys-body-medium-tracking));
|
||
}
|
||
|
||
.mat-mdc-header-cell {
|
||
border-bottom-color: var(--mat-table-row-item-outline-color, var(--mat-sys-outline, rgba(0, 0, 0, 0.12)));
|
||
border-bottom-width: var(--mat-table-row-item-outline-width, 1px);
|
||
border-bottom-style: solid;
|
||
letter-spacing: var(--mat-table-header-headline-tracking, var(--mat-sys-title-small-tracking));
|
||
font-weight: inherit;
|
||
line-height: inherit;
|
||
box-sizing: border-box;
|
||
text-overflow: ellipsis;
|
||
overflow: hidden;
|
||
outline: none;
|
||
text-align: start;
|
||
}
|
||
.mdc-data-table__row:last-child > .mat-mdc-header-cell {
|
||
border-bottom: none;
|
||
}
|
||
|
||
.mat-mdc-cell {
|
||
border-bottom-color: var(--mat-table-row-item-outline-color, var(--mat-sys-outline, rgba(0, 0, 0, 0.12)));
|
||
border-bottom-width: var(--mat-table-row-item-outline-width, 1px);
|
||
border-bottom-style: solid;
|
||
letter-spacing: var(--mat-table-row-item-label-text-tracking, var(--mat-sys-body-medium-tracking));
|
||
line-height: inherit;
|
||
}
|
||
.mdc-data-table__row:last-child > .mat-mdc-cell {
|
||
border-bottom: none;
|
||
}
|
||
|
||
.mat-mdc-footer-cell {
|
||
letter-spacing: var(--mat-table-row-item-label-text-tracking, var(--mat-sys-body-medium-tracking));
|
||
}
|
||
|
||
mat-row.mat-mdc-row,
|
||
mat-header-row.mat-mdc-header-row,
|
||
mat-footer-row.mat-mdc-footer-row {
|
||
border-bottom: none;
|
||
}
|
||
|
||
.mat-mdc-table tbody,
|
||
.mat-mdc-table tfoot,
|
||
.mat-mdc-table thead,
|
||
.mat-mdc-cell,
|
||
.mat-mdc-footer-cell,
|
||
.mat-mdc-header-row,
|
||
.mat-mdc-row,
|
||
.mat-mdc-footer-row,
|
||
.mat-mdc-table .mat-mdc-header-cell {
|
||
background: inherit;
|
||
}
|
||
|
||
.mat-mdc-table mat-header-row.mat-mdc-header-row,
|
||
.mat-mdc-table mat-row.mat-mdc-row,
|
||
.mat-mdc-table mat-footer-row.mat-mdc-footer-cell {
|
||
height: unset;
|
||
}
|
||
|
||
mat-header-cell.mat-mdc-header-cell,
|
||
mat-cell.mat-mdc-cell,
|
||
mat-footer-cell.mat-mdc-footer-cell {
|
||
align-self: stretch;
|
||
}
|
||
`],encapsulation:2})}return n})(),xn=(()=>{class n extends Yx{static \u0275fac=(()=>{let e;return function(i){return(e||(e=yi(n)))(i||n)}})();static \u0275dir=yt({type:n,selectors:[["","matCellDef",""]],features:[un([{provide:Yx,useExisting:n}]),mi]})}return n})(),yn=(()=>{class n extends Zx{static \u0275fac=(()=>{let e;return function(i){return(e||(e=yi(n)))(i||n)}})();static \u0275dir=yt({type:n,selectors:[["","matHeaderCellDef",""]],features:[un([{provide:Zx,useExisting:n}]),mi]})}return n})();var wn=(()=>{class n extends $m{get name(){return this._name}set name(e){this._setNameInput(e)}_updateColumnCssClassName(){super._updateColumnCssClassName(),this._columnCssClassName.push(`mat-column-${this.cssClassFriendlyName}`)}static \u0275fac=(()=>{let e;return function(i){return(e||(e=yi(n)))(i||n)}})();static \u0275dir=yt({type:n,selectors:[["","matColumnDef",""]],inputs:{name:[0,"matColumnDef","name"]},features:[un([{provide:$m,useExisting:n}]),mi]})}return n})(),Mn=(()=>{class n extends E8{static \u0275fac=(()=>{let e;return function(i){return(e||(e=yi(n)))(i||n)}})();static \u0275dir=yt({type:n,selectors:[["mat-header-cell"],["th","mat-header-cell",""]],hostAttrs:["role","columnheader",1,"mat-mdc-header-cell","mdc-data-table__header-cell"],features:[mi]})}return n})();var Sn=(()=>{class n extends O8{static \u0275fac=(()=>{let e;return function(i){return(e||(e=yi(n)))(i||n)}})();static \u0275dir=yt({type:n,selectors:[["mat-cell"],["td","mat-cell",""]],hostAttrs:[1,"mat-mdc-cell","mdc-data-table__cell"],features:[mi]})}return n})();var kn=(()=>{class n extends U0{static \u0275fac=(()=>{let e;return function(i){return(e||(e=yi(n)))(i||n)}})();static \u0275dir=yt({type:n,selectors:[["","matHeaderRowDef",""]],inputs:{columns:[0,"matHeaderRowDef","columns"],sticky:[2,"matHeaderRowDefSticky","sticky",zt]},features:[un([{provide:U0,useExisting:n}]),mi]})}return n})();var Pn=(()=>{class n extends Jx{static \u0275fac=(()=>{let e;return function(i){return(e||(e=yi(n)))(i||n)}})();static \u0275dir=yt({type:n,selectors:[["","matRowDef",""]],inputs:{columns:[0,"matRowDefColumns","columns"],when:[0,"matRowDefWhen","when"]},features:[un([{provide:Jx,useExisting:n}]),mi]})}return n})(),Tn=(()=>{class n extends ST{static \u0275fac=(()=>{let e;return function(i){return(e||(e=yi(n)))(i||n)}})();static \u0275cmp=V({type:n,selectors:[["mat-header-row"],["tr","mat-header-row",""]],hostAttrs:["role","row",1,"mat-mdc-header-row","mdc-data-table__header-row"],exportAs:["matHeaderRow"],features:[un([{provide:ST,useExisting:n}]),mi],decls:1,vars:0,consts:[["cdkCellOutlet",""]],template:function(t,i){t&1&&li(0,0)},dependencies:[bu],encapsulation:2})}return n})();var En=(()=>{class n extends kT{static \u0275fac=(()=>{let e;return function(i){return(e||(e=yi(n)))(i||n)}})();static \u0275cmp=V({type:n,selectors:[["mat-row"],["tr","mat-row",""]],hostAttrs:["role","row",1,"mat-mdc-row","mdc-data-table__row"],exportAs:["matRow"],features:[un([{provide:kT,useExisting:n}]),mi],decls:1,vars:0,consts:[["cdkCellOutlet",""]],template:function(t,i){t&1&&li(0,0)},dependencies:[bu],encapsulation:2})}return n})();var _n=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=on({type:n});static \u0275inj=nn({imports:[e1,Vi]})}return n})(),mne=9007199254740991,Fr=class extends zp{_data;_renderData=new cn([]);_filter=new cn("");_internalPageChanges=new Ye;_renderChangesSubscription=null;filteredData;get data(){return this._data.value}set data(o){o=Array.isArray(o)?o:[],this._data.next(o),this._renderChangesSubscription||this._filterData(o)}get filter(){return this._filter.value}set filter(o){this._filter.next(o),this._renderChangesSubscription||this._filterData(this.data)}get sort(){return this._sort}set sort(o){this._sort=o,this._updateChangeSubscription()}_sort;get paginator(){return this._paginator}set paginator(o){this._paginator=o,this._updateChangeSubscription()}_paginator;sortingDataAccessor=(o,e)=>{let t=o[e];if(DA(t)){let i=Number(t);return i<mne?i:t}return t};sortData=(o,e)=>{let t=e.active,i=e.direction;return!t||i==""?o:o.sort((a,s)=>{let d=this.sortingDataAccessor(a,t),p=this.sortingDataAccessor(s,t),u=typeof d,g=typeof p;u!==g&&(u==="number"&&(d+=""),g==="number"&&(p+=""));let C=0;return d!=null&&p!=null?d>p?C=1:d<p&&(C=-1):d!=null?C=1:p!=null&&(C=-1),C*(i=="asc"?1:-1)})};filterPredicate=(o,e)=>{let t=e.trim().toLowerCase();return Object.values(o).some(i=>`${i}`.toLowerCase().includes(t))};constructor(o=[]){super(),this._data=new cn(o),this._updateChangeSubscription()}_updateChangeSubscription(){let o=this._sort?ro(this._sort.sortChange,this._sort.initialized):Vt(null),e=this._paginator?ro(this._paginator.page,this._internalPageChanges,this._paginator.initialized):Vt(null),t=this._data,i=mr([t,this._filter]).pipe(Pt(([d])=>this._filterData(d))),a=mr([i,o]).pipe(Pt(([d])=>this._orderData(d))),s=mr([a,e]).pipe(Pt(([d])=>this._pageData(d)));this._renderChangesSubscription?.unsubscribe(),this._renderChangesSubscription=s.subscribe(d=>this._renderData.next(d))}_filterData(o){return this.filteredData=this.filter==null||this.filter===""?o:o.filter(e=>this.filterPredicate(e,this.filter)),this.paginator&&this._updatePaginator(this.filteredData.length),this.filteredData}_orderData(o){return this.sort?this.sortData(o.slice(),this.sort):o}_pageData(o){if(!this.paginator)return o;let e=this.paginator.pageIndex*this.paginator.pageSize;return o.slice(e,e+this.paginator.pageSize)}_updatePaginator(o){Promise.resolve().then(()=>{let e=this.paginator;if(e&&(e.length=o,e.pageIndex>0)){let t=Math.ceil(e.length/e.pageSize)-1||0,i=Math.min(e.pageIndex,t);i!==e.pageIndex&&(e.pageIndex=i,this._internalPageChanges.next())}})}connect(){return this._renderChangesSubscription||this._updateChangeSubscription(),this._renderData}disconnect(){this._renderChangesSubscription?.unsubscribe(),this._renderChangesSubscription=null}};var RR=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["ng-component"]],hostAttrs:["cdk-text-field-style-loader",""],decls:0,vars:0,template:function(t,i){},styles:[`textarea.cdk-textarea-autosize {
|
||
resize: none;
|
||
}
|
||
|
||
textarea.cdk-textarea-autosize-measuring {
|
||
padding: 2px 0 !important;
|
||
box-sizing: content-box !important;
|
||
height: auto !important;
|
||
overflow: hidden !important;
|
||
}
|
||
|
||
textarea.cdk-textarea-autosize-measuring-firefox {
|
||
padding: 2px 0 !important;
|
||
box-sizing: content-box !important;
|
||
height: 0 !important;
|
||
}
|
||
|
||
@keyframes cdk-text-field-autofill-start { /*!*/ }
|
||
@keyframes cdk-text-field-autofill-end { /*!*/ }
|
||
.cdk-text-field-autofill-monitored:-webkit-autofill {
|
||
animation: cdk-text-field-autofill-start 0s 1ms;
|
||
}
|
||
|
||
.cdk-text-field-autofill-monitored:not(:-webkit-autofill) {
|
||
animation: cdk-text-field-autofill-end 0s 1ms;
|
||
}
|
||
`],encapsulation:2,changeDetection:0})}return n})(),pne={passive:!0},zR=(()=>{class n{_platform=f(ja);_ngZone=f(Gi);_renderer=f(Fp).createRenderer(null,null);_styleLoader=f(Ta);_monitoredElements=new Map;constructor(){}monitor(e){if(!this._platform.isBrowser)return eg;this._styleLoader.load(RR);let t=cl(e),i=this._monitoredElements.get(t);if(i)return i.subject;let a=new Ye,s="cdk-text-field-autofilled",d=u=>{u.animationName==="cdk-text-field-autofill-start"&&!t.classList.contains(s)?(t.classList.add(s),this._ngZone.run(()=>a.next({target:u.target,isAutofilled:!0}))):u.animationName==="cdk-text-field-autofill-end"&&t.classList.contains(s)&&(t.classList.remove(s),this._ngZone.run(()=>a.next({target:u.target,isAutofilled:!1})))},p=this._ngZone.runOutsideAngular(()=>(t.classList.add("cdk-text-field-autofill-monitored"),this._renderer.listen(t,"animationstart",d,pne)));return this._monitoredElements.set(t,{subject:a,unlisten:p}),a}stopMonitoring(e){let t=cl(e),i=this._monitoredElements.get(t);i&&(i.unlisten(),i.subject.complete(),t.classList.remove("cdk-text-field-autofill-monitored"),t.classList.remove("cdk-text-field-autofilled"),this._monitoredElements.delete(t))}ngOnDestroy(){this._monitoredElements.forEach((e,t)=>this.stopMonitoring(t))}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var Xc=(()=>{class n{_elementRef=f(Kt);_platform=f(ja);_ngZone=f(Gi);_renderer=f(qi);_resizeEvents=new Ye;_previousValue;_initialHeight;_destroyed=new Ye;_listenerCleanups;_minRows;_maxRows;_enabled=!0;_previousMinRows=-1;_textareaElement;get minRows(){return this._minRows}set minRows(e){this._minRows=mm(e),this._setMinHeight()}get maxRows(){return this._maxRows}set maxRows(e){this._maxRows=mm(e),this._setMaxHeight()}get enabled(){return this._enabled}set enabled(e){this._enabled!==e&&((this._enabled=e)?this.resizeToFitContent(!0):this.reset())}get placeholder(){return this._textareaElement.placeholder}set placeholder(e){this._cachedPlaceholderHeight=void 0,e?this._textareaElement.setAttribute("placeholder",e):this._textareaElement.removeAttribute("placeholder"),this._cacheTextareaPlaceholderHeight()}_cachedLineHeight;_cachedPlaceholderHeight;_document=f(Do);_hasFocus=!1;_isViewInited=!1;constructor(){f(Ta).load(RR),this._textareaElement=this._elementRef.nativeElement}_setMinHeight(){let e=this.minRows&&this._cachedLineHeight?`${this.minRows*this._cachedLineHeight}px`:null;e&&(this._textareaElement.style.minHeight=e)}_setMaxHeight(){let e=this.maxRows&&this._cachedLineHeight?`${this.maxRows*this._cachedLineHeight}px`:null;e&&(this._textareaElement.style.maxHeight=e)}ngAfterViewInit(){this._platform.isBrowser&&(this._initialHeight=this._textareaElement.style.height,this.resizeToFitContent(),this._ngZone.runOutsideAngular(()=>{this._listenerCleanups=[this._renderer.listen("window","resize",()=>this._resizeEvents.next()),this._renderer.listen(this._textareaElement,"focus",this._handleFocusEvent),this._renderer.listen(this._textareaElement,"blur",this._handleFocusEvent)],this._resizeEvents.pipe(sl(16)).subscribe(()=>{this._cachedLineHeight=this._cachedPlaceholderHeight=void 0,this.resizeToFitContent(!0)})}),this._isViewInited=!0,this.resizeToFitContent(!0))}ngOnDestroy(){this._listenerCleanups?.forEach(e=>e()),this._resizeEvents.complete(),this._destroyed.next(),this._destroyed.complete()}_cacheTextareaLineHeight(){if(this._cachedLineHeight)return;let e=this._textareaElement.cloneNode(!1),t=e.style;e.rows=1,t.position="absolute",t.visibility="hidden",t.border="none",t.padding="0",t.height="",t.minHeight="",t.maxHeight="",t.top=t.bottom=t.left=t.right="auto",t.overflow="hidden",this._textareaElement.parentNode.appendChild(e),this._cachedLineHeight=e.clientHeight,e.remove(),this._setMinHeight(),this._setMaxHeight()}_measureScrollHeight(){let e=this._textareaElement,t=e.style.marginBottom||"",i=this._platform.FIREFOX,a=this._hasFocus,s=i?"cdk-textarea-autosize-measuring-firefox":"cdk-textarea-autosize-measuring";a&&(e.style.marginBottom=`${e.clientHeight}px`),e.classList.add(s);let d=e.scrollHeight-4;return e.classList.remove(s),a&&(e.style.marginBottom=t),d}_cacheTextareaPlaceholderHeight(){if(!this._isViewInited||this._cachedPlaceholderHeight!=null)return;if(!this.placeholder){this._cachedPlaceholderHeight=0;return}let e=this._textareaElement.value;this._textareaElement.value=this._textareaElement.placeholder,this._cachedPlaceholderHeight=this._measureScrollHeight(),this._textareaElement.value=e}_handleFocusEvent=e=>{this._hasFocus=e.type==="focus"};ngDoCheck(){this._platform.isBrowser&&this.resizeToFitContent()}resizeToFitContent(e=!1){if(!this._enabled||(this._cacheTextareaLineHeight(),this._cacheTextareaPlaceholderHeight(),!this._cachedLineHeight))return;let t=this._elementRef.nativeElement,i=t.value;if(!e&&this._minRows===this._previousMinRows&&i===this._previousValue)return;let a=this._measureScrollHeight(),s=Math.max(a,this._cachedPlaceholderHeight||0);t.style.height=`${s}px`,this._ngZone.runOutsideAngular(()=>{typeof requestAnimationFrame<"u"?requestAnimationFrame(()=>this._scrollToCaretPosition(t)):setTimeout(()=>this._scrollToCaretPosition(t))}),this._previousValue=i,this._previousMinRows=this._minRows}reset(){this._initialHeight!==void 0&&(this._textareaElement.style.height=this._initialHeight)}_noopInputHandler(){}_scrollToCaretPosition(e){let{selectionStart:t,selectionEnd:i}=e;!this._destroyed.isStopped&&this._hasFocus&&e.setSelectionRange(t,i)}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["textarea","cdkTextareaAutosize",""]],hostAttrs:["rows","1",1,"cdk-textarea-autosize"],hostBindings:function(t,i){t&1&&_("input",function(){return i._noopInputHandler()})},inputs:{minRows:[0,"cdkAutosizeMinRows","minRows"],maxRows:[0,"cdkAutosizeMaxRows","maxRows"],enabled:[2,"cdkTextareaAutosize","enabled",zt],placeholder:"placeholder"},exportAs:["cdkTextareaAutosize"]})}return n})(),LR=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=on({type:n});static \u0275inj=nn({})}return n})();var VR=new mn("MAT_INPUT_VALUE_ACCESSOR");var une=["button","checkbox","file","hidden","image","radio","range","reset","submit"],gne=new mn("MAT_INPUT_CONFIG"),Ee=(()=>{class n{_elementRef=f(Kt);_platform=f(ja);ngControl=f(qC,{optional:!0,self:!0});_autofillMonitor=f(zR);_ngZone=f(Gi);_formField=f(ug,{optional:!0});_renderer=f(qi);_uid=f(ua).getId("mat-input-");_previousNativeValue;_inputValueAccessor;_signalBasedValueAccessor;_previousPlaceholder=null;_errorStateTracker;_config=f(gne,{optional:!0});_cleanupIosKeyup;_cleanupWebkitWheel;_isServer=!1;_isNativeSelect=!1;_isTextarea=!1;_isInFormField=!1;focused=!1;stateChanges=new Ye;controlType="mat-input";autofilled=!1;get disabled(){return this._disabled}set disabled(e){this._disabled=Or(e),this.focused&&(this.focused=!1,this.stateChanges.next())}_disabled=!1;get id(){return this._id}set id(e){this._id=e||this._uid}_id;placeholder;name;get required(){return this._required??this.ngControl?.control?.hasValidator(Ue.required)??!1}set required(e){this._required=Or(e)}_required;get type(){return this._type}set type(e){this._type=e||"text",this._validateType(),!this._isTextarea&&Hk().has(this._type)&&(this._elementRef.nativeElement.type=this._type)}_type="text";get errorStateMatcher(){return this._errorStateTracker.matcher}set errorStateMatcher(e){this._errorStateTracker.matcher=e}userAriaDescribedBy;get value(){return this._signalBasedValueAccessor?this._signalBasedValueAccessor.value():this._inputValueAccessor.value}set value(e){e!==this.value&&(this._signalBasedValueAccessor?this._signalBasedValueAccessor.value.set(e):this._inputValueAccessor.value=e,this.stateChanges.next())}get readonly(){return this._readonly}set readonly(e){this._readonly=Or(e)}_readonly=!1;disabledInteractive;get errorState(){return this._errorStateTracker.errorState}set errorState(e){this._errorStateTracker.errorState=e}_neverEmptyInputTypes=["date","datetime","datetime-local","month","time","week"].filter(e=>Hk().has(e));constructor(){let e=f(Ji,{optional:!0}),t=f(Ut,{optional:!0}),i=f(Td),a=f(VR,{optional:!0,self:!0}),s=this._elementRef.nativeElement,d=s.nodeName.toLowerCase();a?dA(a.value)?this._signalBasedValueAccessor=a:this._inputValueAccessor=a:this._inputValueAccessor=s,this._previousNativeValue=this.value,this.id=this.id,this._platform.IOS&&this._ngZone.runOutsideAngular(()=>{this._cleanupIosKeyup=this._renderer.listen(s,"keyup",this._iOSKeyupListener)}),this._errorStateTracker=new ib(i,this.ngControl,t,e,this.stateChanges),this._isServer=!this._platform.isBrowser,this._isNativeSelect=d==="select",this._isTextarea=d==="textarea",this._isInFormField=!!this._formField,this.disabledInteractive=this._config?.disabledInteractive||!1,this._isNativeSelect&&(this.controlType=s.multiple?"mat-native-select-multiple":"mat-native-select"),this._signalBasedValueAccessor&&Vn(()=>{this._signalBasedValueAccessor.value(),this.stateChanges.next()})}ngAfterViewInit(){this._platform.isBrowser&&this._autofillMonitor.monitor(this._elementRef.nativeElement).subscribe(e=>{this.autofilled=e.isAutofilled,this.stateChanges.next()})}ngOnChanges(){this.stateChanges.next()}ngOnDestroy(){this.stateChanges.complete(),this._platform.isBrowser&&this._autofillMonitor.stopMonitoring(this._elementRef.nativeElement),this._cleanupIosKeyup?.(),this._cleanupWebkitWheel?.()}ngDoCheck(){this.ngControl&&(this.updateErrorState(),this.ngControl.disabled!==null&&this.ngControl.disabled!==this.disabled&&(this.disabled=this.ngControl.disabled,this.stateChanges.next())),this._dirtyCheckNativeValue(),this._dirtyCheckPlaceholder()}focus(e){this._elementRef.nativeElement.focus(e)}updateErrorState(){this._errorStateTracker.updateErrorState()}_focusChanged(e){if(e!==this.focused){if(!this._isNativeSelect&&e&&this.disabled&&this.disabledInteractive){let t=this._elementRef.nativeElement;t.type==="number"?(t.type="text",t.setSelectionRange(0,0),t.type="number"):t.setSelectionRange(0,0)}this.focused=e,this.stateChanges.next()}}_onInput(){}_dirtyCheckNativeValue(){let e=this._elementRef.nativeElement.value;this._previousNativeValue!==e&&(this._previousNativeValue=e,this.stateChanges.next())}_dirtyCheckPlaceholder(){let e=this._getPlaceholder();if(e!==this._previousPlaceholder){let t=this._elementRef.nativeElement;this._previousPlaceholder=e,e?t.setAttribute("placeholder",e):t.removeAttribute("placeholder")}}_getPlaceholder(){return this.placeholder||null}_validateType(){une.indexOf(this._type)>-1}_isNeverEmpty(){return this._neverEmptyInputTypes.indexOf(this._type)>-1}_isBadInput(){let e=this._elementRef.nativeElement.validity;return e&&e.badInput}get empty(){return!this._isNeverEmpty()&&!this._elementRef.nativeElement.value&&!this._isBadInput()&&!this.autofilled}get shouldLabelFloat(){if(this._isNativeSelect){let e=this._elementRef.nativeElement,t=e.options[0];return this.focused||e.multiple||!this.empty||!!(e.selectedIndex>-1&&t&&t.label)}else return this.focused&&!this.disabled||!this.empty}get describedByIds(){return this._elementRef.nativeElement.getAttribute("aria-describedby")?.split(" ")||[]}setDescribedByIds(e){let t=this._elementRef.nativeElement;e.length?t.setAttribute("aria-describedby",e.join(" ")):t.removeAttribute("aria-describedby")}onContainerClick(){this.focused||this.focus()}_isInlineSelect(){let e=this._elementRef.nativeElement;return this._isNativeSelect&&(e.multiple||e.size>1)}_iOSKeyupListener=e=>{let t=e.target;!t.value&&t.selectionStart===0&&t.selectionEnd===0&&(t.setSelectionRange(1,1),t.setSelectionRange(0,0))};_getReadonlyAttribute(){return this._isNativeSelect?null:this.readonly||this.disabled&&this.disabledInteractive?"true":null}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["input","matInput",""],["textarea","matInput",""],["select","matNativeControl",""],["input","matNativeControl",""],["textarea","matNativeControl",""]],hostAttrs:[1,"mat-mdc-input-element"],hostVars:21,hostBindings:function(t,i){t&1&&_("focus",function(){return i._focusChanged(!0)})("blur",function(){return i._focusChanged(!1)})("input",function(){return i._onInput()}),t&2&&(pr("id",i.id)("disabled",i.disabled&&!i.disabledInteractive)("required",i.required),Ce("name",i.name||null)("readonly",i._getReadonlyAttribute())("aria-disabled",i.disabled&&i.disabledInteractive?"true":null)("aria-invalid",i.empty&&i.required?null:i.errorState)("aria-required",i.required)("id",i.id),ne("mat-input-server",i._isServer)("mat-mdc-form-field-textarea-control",i._isInFormField&&i._isTextarea)("mat-mdc-form-field-input-control",i._isInFormField)("mat-mdc-input-disabled-interactive",i.disabledInteractive)("mdc-text-field__input",i._isInFormField)("mat-mdc-native-select-inline",i._isInlineSelect()))},inputs:{disabled:"disabled",id:"id",placeholder:"placeholder",name:"name",required:"required",type:"type",errorStateMatcher:"errorStateMatcher",userAriaDescribedBy:[0,"aria-describedby","userAriaDescribedBy"],value:"value",readonly:"readonly",disabledInteractive:[2,"disabledInteractive","disabledInteractive",zt]},exportAs:["matInput"],features:[un([{provide:nb,useExisting:n}]),Nn]})}return n})(),ye=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=on({type:n});static \u0275inj=nn({imports:[we,we,LR,Vi]})}return n})();var hne=["switch"],_ne=["*"];function fne(n,o){n&1&&(r(0,"span",11),Mi(),r(1,"svg",13),L(2,"path",14),l(),r(3,"svg",15),L(4,"path",16),l()())}var vne=new mn("mat-slide-toggle-default-options",{providedIn:"root",factory:()=>({disableToggleValue:!1,hideIcon:!1,disabledInteractive:!1})}),M1=class{source;checked;constructor(o,e){this.source=o,this.checked=e}},Yc=(()=>{class n{_elementRef=f(Kt);_focusMonitor=f(hs);_changeDetectorRef=f(oe);defaults=f(vne);_onChange=e=>{};_onTouched=()=>{};_validatorOnChange=()=>{};_uniqueId;_checked=!1;_createChangeEvent(e){return new M1(this,e)}_labelId;get buttonId(){return`${this.id||this._uniqueId}-button`}_switchElement;focus(){this._switchElement.nativeElement.focus()}_noopAnimations=$a();_focused=!1;name=null;id;labelPosition="after";ariaLabel=null;ariaLabelledby=null;ariaDescribedby;required=!1;color;disabled=!1;disableRipple=!1;tabIndex=0;get checked(){return this._checked}set checked(e){this._checked=e,this._changeDetectorRef.markForCheck()}hideIcon;disabledInteractive;change=new be;toggleChange=new be;get inputId(){return`${this.id||this._uniqueId}-input`}constructor(){f(Ta).load(Xr);let e=f(new cm("tabindex"),{optional:!0}),t=this.defaults;this.tabIndex=e==null?0:parseInt(e)||0,this.color=t.color||"accent",this.id=this._uniqueId=f(ua).getId("mat-mdc-slide-toggle-"),this.hideIcon=t.hideIcon??!1,this.disabledInteractive=t.disabledInteractive??!1,this._labelId=this._uniqueId+"-label"}ngAfterContentInit(){this._focusMonitor.monitor(this._elementRef,!0).subscribe(e=>{e==="keyboard"||e==="program"?(this._focused=!0,this._changeDetectorRef.markForCheck()):e||Promise.resolve().then(()=>{this._focused=!1,this._onTouched(),this._changeDetectorRef.markForCheck()})})}ngOnChanges(e){e.required&&this._validatorOnChange()}ngOnDestroy(){this._focusMonitor.stopMonitoring(this._elementRef)}writeValue(e){this.checked=!!e}registerOnChange(e){this._onChange=e}registerOnTouched(e){this._onTouched=e}validate(e){return this.required&&e.value!==!0?{required:!0}:null}registerOnValidatorChange(e){this._validatorOnChange=e}setDisabledState(e){this.disabled=e,this._changeDetectorRef.markForCheck()}toggle(){this.checked=!this.checked,this._onChange(this.checked)}_emitChangeEvent(){this._onChange(this.checked),this.change.emit(this._createChangeEvent(this.checked))}_handleClick(){this.disabled||(this.toggleChange.emit(),this.defaults.disableToggleValue||(this.checked=!this.checked,this._onChange(this.checked),this.change.emit(new M1(this,this.checked))))}_getAriaLabelledBy(){return this.ariaLabelledby?this.ariaLabelledby:this.ariaLabel?null:this._labelId}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["mat-slide-toggle"]],viewQuery:function(t,i){if(t&1&&Kn(hne,5),t&2){let a;gt(a=ht())&&(i._switchElement=a.first)}},hostAttrs:[1,"mat-mdc-slide-toggle"],hostVars:13,hostBindings:function(t,i){t&2&&(pr("id",i.id),Ce("tabindex",null)("aria-label",null)("name",null)("aria-labelledby",null),Za(i.color?"mat-"+i.color:""),ne("mat-mdc-slide-toggle-focused",i._focused)("mat-mdc-slide-toggle-checked",i.checked)("_mat-animation-noopable",i._noopAnimations))},inputs:{name:"name",id:"id",labelPosition:"labelPosition",ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],ariaDescribedby:[0,"aria-describedby","ariaDescribedby"],required:[2,"required","required",zt],color:"color",disabled:[2,"disabled","disabled",zt],disableRipple:[2,"disableRipple","disableRipple",zt],tabIndex:[2,"tabIndex","tabIndex",e=>e==null?0:qo(e)],checked:[2,"checked","checked",zt],hideIcon:[2,"hideIcon","hideIcon",zt],disabledInteractive:[2,"disabledInteractive","disabledInteractive",zt]},outputs:{change:"change",toggleChange:"toggleChange"},exportAs:["matSlideToggle"],features:[un([{provide:Pd,useExisting:Pc(()=>n),multi:!0},{provide:HA,useExisting:n,multi:!0}]),Nn],ngContentSelectors:_ne,decls:14,vars:27,consts:[["switch",""],["mat-internal-form-field","",3,"labelPosition"],["role","switch","type","button",1,"mdc-switch",3,"click","tabIndex","disabled"],[1,"mat-mdc-slide-toggle-touch-target"],[1,"mdc-switch__track"],[1,"mdc-switch__handle-track"],[1,"mdc-switch__handle"],[1,"mdc-switch__shadow"],[1,"mdc-elevation-overlay"],[1,"mdc-switch__ripple"],["mat-ripple","",1,"mat-mdc-slide-toggle-ripple","mat-focus-indicator",3,"matRippleTrigger","matRippleDisabled","matRippleCentered"],[1,"mdc-switch__icons"],[1,"mdc-label",3,"click","for"],["viewBox","0 0 24 24","aria-hidden","true",1,"mdc-switch__icon","mdc-switch__icon--on"],["d","M19.69,5.23L8.96,15.96l-4.23-4.23L2.96,13.5l6,6L21.46,7L19.69,5.23z"],["viewBox","0 0 24 24","aria-hidden","true",1,"mdc-switch__icon","mdc-switch__icon--off"],["d","M20 13H4v-2h16v2z"]],template:function(t,i){if(t&1&&(pi(),r(0,"div",1)(1,"button",2,0),_("click",function(){return i._handleClick()}),L(3,"div",3)(4,"span",4),r(5,"span",5)(6,"span",6)(7,"span",7),L(8,"span",8),l(),r(9,"span",9),L(10,"span",10),l(),T(11,fne,5,0,"span",11),l()()(),r(12,"label",12),_("click",function(s){return s.stopPropagation()}),Zt(13),l()()),t&2){let a=Te(2);v("labelPosition",i.labelPosition),m(),ne("mdc-switch--selected",i.checked)("mdc-switch--unselected",!i.checked)("mdc-switch--checked",i.checked)("mdc-switch--disabled",i.disabled)("mat-mdc-slide-toggle-disabled-interactive",i.disabledInteractive),v("tabIndex",i.disabled&&!i.disabledInteractive?-1:i.tabIndex)("disabled",i.disabled&&!i.disabledInteractive),Ce("id",i.buttonId)("name",i.name)("aria-label",i.ariaLabel)("aria-labelledby",i._getAriaLabelledBy())("aria-describedby",i.ariaDescribedby)("aria-required",i.required||null)("aria-checked",i.checked)("aria-disabled",i.disabled&&i.disabledInteractive?"true":null),m(9),v("matRippleTrigger",a)("matRippleDisabled",i.disableRipple||i.disabled)("matRippleCentered",!0),m(),E(i.hideIcon?-1:11),m(),v("for",i.buttonId),Ce("id",i._labelId)}},dependencies:[um,ob],styles:[`.mdc-switch {
|
||
align-items: center;
|
||
background: none;
|
||
border: none;
|
||
cursor: pointer;
|
||
display: inline-flex;
|
||
flex-shrink: 0;
|
||
margin: 0;
|
||
outline: none;
|
||
overflow: visible;
|
||
padding: 0;
|
||
position: relative;
|
||
width: var(--mat-slide-toggle-track-width, 52px);
|
||
}
|
||
.mdc-switch.mdc-switch--disabled {
|
||
cursor: default;
|
||
pointer-events: none;
|
||
}
|
||
.mdc-switch.mat-mdc-slide-toggle-disabled-interactive {
|
||
pointer-events: auto;
|
||
}
|
||
|
||
.mdc-switch__track {
|
||
overflow: hidden;
|
||
position: relative;
|
||
width: 100%;
|
||
height: var(--mat-slide-toggle-track-height, 32px);
|
||
border-radius: var(--mat-slide-toggle-track-shape, var(--mat-sys-corner-full));
|
||
}
|
||
.mdc-switch--disabled.mdc-switch .mdc-switch__track {
|
||
opacity: var(--mat-slide-toggle-disabled-track-opacity, 0.12);
|
||
}
|
||
.mdc-switch__track::before, .mdc-switch__track::after {
|
||
border: 1px solid transparent;
|
||
border-radius: inherit;
|
||
box-sizing: border-box;
|
||
content: "";
|
||
height: 100%;
|
||
left: 0;
|
||
position: absolute;
|
||
width: 100%;
|
||
border-width: var(--mat-slide-toggle-track-outline-width, 2px);
|
||
border-color: var(--mat-slide-toggle-track-outline-color, var(--mat-sys-outline));
|
||
}
|
||
.mdc-switch--selected .mdc-switch__track::before, .mdc-switch--selected .mdc-switch__track::after {
|
||
border-width: var(--mat-slide-toggle-selected-track-outline-width, 2px);
|
||
border-color: var(--mat-slide-toggle-selected-track-outline-color, transparent);
|
||
}
|
||
.mdc-switch--disabled .mdc-switch__track::before, .mdc-switch--disabled .mdc-switch__track::after {
|
||
border-width: var(--mat-slide-toggle-disabled-unselected-track-outline-width, 2px);
|
||
border-color: var(--mat-slide-toggle-disabled-unselected-track-outline-color, var(--mat-sys-on-surface));
|
||
}
|
||
@media (forced-colors: active) {
|
||
.mdc-switch__track {
|
||
border-color: currentColor;
|
||
}
|
||
}
|
||
.mdc-switch__track::before {
|
||
transition: transform 75ms 0ms cubic-bezier(0, 0, 0.2, 1);
|
||
transform: translateX(0);
|
||
background: var(--mat-slide-toggle-unselected-track-color, var(--mat-sys-surface-variant));
|
||
}
|
||
.mdc-switch--selected .mdc-switch__track::before {
|
||
transition: transform 75ms 0ms cubic-bezier(0.4, 0, 0.6, 1);
|
||
transform: translateX(100%);
|
||
}
|
||
[dir=rtl] .mdc-switch--selected .mdc-switch--selected .mdc-switch__track::before {
|
||
transform: translateX(-100%);
|
||
}
|
||
.mdc-switch--selected .mdc-switch__track::before {
|
||
opacity: var(--mat-slide-toggle-hidden-track-opacity, 0);
|
||
transition: var(--mat-slide-toggle-hidden-track-transition, opacity 75ms);
|
||
}
|
||
.mdc-switch--unselected .mdc-switch__track::before {
|
||
opacity: var(--mat-slide-toggle-visible-track-opacity, 1);
|
||
transition: var(--mat-slide-toggle-visible-track-transition, opacity 75ms);
|
||
}
|
||
.mdc-switch:enabled:hover:not(:focus):not(:active) .mdc-switch__track::before {
|
||
background: var(--mat-slide-toggle-unselected-hover-track-color, var(--mat-sys-surface-variant));
|
||
}
|
||
.mdc-switch:enabled:focus:not(:active) .mdc-switch__track::before {
|
||
background: var(--mat-slide-toggle-unselected-focus-track-color, var(--mat-sys-surface-variant));
|
||
}
|
||
.mdc-switch:enabled:active .mdc-switch__track::before {
|
||
background: var(--mat-slide-toggle-unselected-pressed-track-color, var(--mat-sys-surface-variant));
|
||
}
|
||
.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:hover:not(:focus):not(:active) .mdc-switch__track::before, .mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:focus:not(:active) .mdc-switch__track::before, .mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:active .mdc-switch__track::before, .mdc-switch.mdc-switch--disabled .mdc-switch__track::before {
|
||
background: var(--mat-slide-toggle-disabled-unselected-track-color, var(--mat-sys-surface-variant));
|
||
}
|
||
.mdc-switch__track::after {
|
||
transform: translateX(-100%);
|
||
background: var(--mat-slide-toggle-selected-track-color, var(--mat-sys-primary));
|
||
}
|
||
[dir=rtl] .mdc-switch__track::after {
|
||
transform: translateX(100%);
|
||
}
|
||
.mdc-switch--selected .mdc-switch__track::after {
|
||
transform: translateX(0);
|
||
}
|
||
.mdc-switch--selected .mdc-switch__track::after {
|
||
opacity: var(--mat-slide-toggle-visible-track-opacity, 1);
|
||
transition: var(--mat-slide-toggle-visible-track-transition, opacity 75ms);
|
||
}
|
||
.mdc-switch--unselected .mdc-switch__track::after {
|
||
opacity: var(--mat-slide-toggle-hidden-track-opacity, 0);
|
||
transition: var(--mat-slide-toggle-hidden-track-transition, opacity 75ms);
|
||
}
|
||
.mdc-switch:enabled:hover:not(:focus):not(:active) .mdc-switch__track::after {
|
||
background: var(--mat-slide-toggle-selected-hover-track-color, var(--mat-sys-primary));
|
||
}
|
||
.mdc-switch:enabled:focus:not(:active) .mdc-switch__track::after {
|
||
background: var(--mat-slide-toggle-selected-focus-track-color, var(--mat-sys-primary));
|
||
}
|
||
.mdc-switch:enabled:active .mdc-switch__track::after {
|
||
background: var(--mat-slide-toggle-selected-pressed-track-color, var(--mat-sys-primary));
|
||
}
|
||
.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:hover:not(:focus):not(:active) .mdc-switch__track::after, .mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:focus:not(:active) .mdc-switch__track::after, .mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:active .mdc-switch__track::after, .mdc-switch.mdc-switch--disabled .mdc-switch__track::after {
|
||
background: var(--mat-slide-toggle-disabled-selected-track-color, var(--mat-sys-on-surface));
|
||
}
|
||
|
||
.mdc-switch__handle-track {
|
||
height: 100%;
|
||
pointer-events: none;
|
||
position: absolute;
|
||
top: 0;
|
||
transition: transform 75ms 0ms cubic-bezier(0.4, 0, 0.2, 1);
|
||
left: 0;
|
||
right: auto;
|
||
transform: translateX(0);
|
||
width: calc(100% - var(--mat-slide-toggle-handle-width));
|
||
}
|
||
[dir=rtl] .mdc-switch__handle-track {
|
||
left: auto;
|
||
right: 0;
|
||
}
|
||
.mdc-switch--selected .mdc-switch__handle-track {
|
||
transform: translateX(100%);
|
||
}
|
||
[dir=rtl] .mdc-switch--selected .mdc-switch__handle-track {
|
||
transform: translateX(-100%);
|
||
}
|
||
|
||
.mdc-switch__handle {
|
||
display: flex;
|
||
pointer-events: auto;
|
||
position: absolute;
|
||
top: 50%;
|
||
transform: translateY(-50%);
|
||
left: 0;
|
||
right: auto;
|
||
transition: width 75ms cubic-bezier(0.4, 0, 0.2, 1), height 75ms cubic-bezier(0.4, 0, 0.2, 1), margin 75ms cubic-bezier(0.4, 0, 0.2, 1);
|
||
width: var(--mat-slide-toggle-handle-width);
|
||
height: var(--mat-slide-toggle-handle-height);
|
||
border-radius: var(--mat-slide-toggle-handle-shape, var(--mat-sys-corner-full));
|
||
}
|
||
[dir=rtl] .mdc-switch__handle {
|
||
left: auto;
|
||
right: 0;
|
||
}
|
||
.mat-mdc-slide-toggle .mdc-switch--unselected .mdc-switch__handle {
|
||
width: var(--mat-slide-toggle-unselected-handle-size, 16px);
|
||
height: var(--mat-slide-toggle-unselected-handle-size, 16px);
|
||
margin: var(--mat-slide-toggle-unselected-handle-horizontal-margin, 0 8px);
|
||
}
|
||
.mat-mdc-slide-toggle .mdc-switch--unselected .mdc-switch__handle:has(.mdc-switch__icons) {
|
||
margin: var(--mat-slide-toggle-unselected-with-icon-handle-horizontal-margin, 0 4px);
|
||
}
|
||
.mat-mdc-slide-toggle .mdc-switch--selected .mdc-switch__handle {
|
||
width: var(--mat-slide-toggle-selected-handle-size, 24px);
|
||
height: var(--mat-slide-toggle-selected-handle-size, 24px);
|
||
margin: var(--mat-slide-toggle-selected-handle-horizontal-margin, 0 24px);
|
||
}
|
||
.mat-mdc-slide-toggle .mdc-switch--selected .mdc-switch__handle:has(.mdc-switch__icons) {
|
||
margin: var(--mat-slide-toggle-selected-with-icon-handle-horizontal-margin, 0 24px);
|
||
}
|
||
.mat-mdc-slide-toggle .mdc-switch__handle:has(.mdc-switch__icons) {
|
||
width: var(--mat-slide-toggle-with-icon-handle-size, 24px);
|
||
height: var(--mat-slide-toggle-with-icon-handle-size, 24px);
|
||
}
|
||
.mat-mdc-slide-toggle .mdc-switch:active:not(.mdc-switch--disabled) .mdc-switch__handle {
|
||
width: var(--mat-slide-toggle-pressed-handle-size, 28px);
|
||
height: var(--mat-slide-toggle-pressed-handle-size, 28px);
|
||
}
|
||
.mat-mdc-slide-toggle .mdc-switch--selected:active:not(.mdc-switch--disabled) .mdc-switch__handle {
|
||
margin: var(--mat-slide-toggle-selected-pressed-handle-horizontal-margin, 0 22px);
|
||
}
|
||
.mat-mdc-slide-toggle .mdc-switch--unselected:active:not(.mdc-switch--disabled) .mdc-switch__handle {
|
||
margin: var(--mat-slide-toggle-unselected-pressed-handle-horizontal-margin, 0 2px);
|
||
}
|
||
.mdc-switch--disabled.mdc-switch--selected .mdc-switch__handle::after {
|
||
opacity: var(--mat-slide-toggle-disabled-selected-handle-opacity, 1);
|
||
}
|
||
.mdc-switch--disabled.mdc-switch--unselected .mdc-switch__handle::after {
|
||
opacity: var(--mat-slide-toggle-disabled-unselected-handle-opacity, 0.38);
|
||
}
|
||
.mdc-switch__handle::before, .mdc-switch__handle::after {
|
||
border: 1px solid transparent;
|
||
border-radius: inherit;
|
||
box-sizing: border-box;
|
||
content: "";
|
||
width: 100%;
|
||
height: 100%;
|
||
left: 0;
|
||
position: absolute;
|
||
top: 0;
|
||
transition: background-color 75ms 0ms cubic-bezier(0.4, 0, 0.2, 1), border-color 75ms 0ms cubic-bezier(0.4, 0, 0.2, 1);
|
||
z-index: -1;
|
||
}
|
||
@media (forced-colors: active) {
|
||
.mdc-switch__handle::before, .mdc-switch__handle::after {
|
||
border-color: currentColor;
|
||
}
|
||
}
|
||
.mdc-switch--selected:enabled .mdc-switch__handle::after {
|
||
background: var(--mat-slide-toggle-selected-handle-color, var(--mat-sys-on-primary));
|
||
}
|
||
.mdc-switch--selected:enabled:hover:not(:focus):not(:active) .mdc-switch__handle::after {
|
||
background: var(--mat-slide-toggle-selected-hover-handle-color, var(--mat-sys-primary-container));
|
||
}
|
||
.mdc-switch--selected:enabled:focus:not(:active) .mdc-switch__handle::after {
|
||
background: var(--mat-slide-toggle-selected-focus-handle-color, var(--mat-sys-primary-container));
|
||
}
|
||
.mdc-switch--selected:enabled:active .mdc-switch__handle::after {
|
||
background: var(--mat-slide-toggle-selected-pressed-handle-color, var(--mat-sys-primary-container));
|
||
}
|
||
.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled.mdc-switch--selected:hover:not(:focus):not(:active) .mdc-switch__handle::after, .mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled.mdc-switch--selected:focus:not(:active) .mdc-switch__handle::after, .mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled.mdc-switch--selected:active .mdc-switch__handle::after, .mdc-switch--selected.mdc-switch--disabled .mdc-switch__handle::after {
|
||
background: var(--mat-slide-toggle-disabled-selected-handle-color, var(--mat-sys-surface));
|
||
}
|
||
.mdc-switch--unselected:enabled .mdc-switch__handle::after {
|
||
background: var(--mat-slide-toggle-unselected-handle-color, var(--mat-sys-outline));
|
||
}
|
||
.mdc-switch--unselected:enabled:hover:not(:focus):not(:active) .mdc-switch__handle::after {
|
||
background: var(--mat-slide-toggle-unselected-hover-handle-color, var(--mat-sys-on-surface-variant));
|
||
}
|
||
.mdc-switch--unselected:enabled:focus:not(:active) .mdc-switch__handle::after {
|
||
background: var(--mat-slide-toggle-unselected-focus-handle-color, var(--mat-sys-on-surface-variant));
|
||
}
|
||
.mdc-switch--unselected:enabled:active .mdc-switch__handle::after {
|
||
background: var(--mat-slide-toggle-unselected-pressed-handle-color, var(--mat-sys-on-surface-variant));
|
||
}
|
||
.mdc-switch--unselected.mdc-switch--disabled .mdc-switch__handle::after {
|
||
background: var(--mat-slide-toggle-disabled-unselected-handle-color, var(--mat-sys-on-surface));
|
||
}
|
||
.mdc-switch__handle::before {
|
||
background: var(--mat-slide-toggle-handle-surface-color);
|
||
}
|
||
|
||
.mdc-switch__shadow {
|
||
border-radius: inherit;
|
||
bottom: 0;
|
||
left: 0;
|
||
position: absolute;
|
||
right: 0;
|
||
top: 0;
|
||
}
|
||
.mdc-switch:enabled .mdc-switch__shadow {
|
||
box-shadow: var(--mat-slide-toggle-handle-elevation-shadow);
|
||
}
|
||
.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:hover:not(:focus):not(:active) .mdc-switch__shadow, .mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:focus:not(:active) .mdc-switch__shadow, .mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:active .mdc-switch__shadow, .mdc-switch.mdc-switch--disabled .mdc-switch__shadow {
|
||
box-shadow: var(--mat-slide-toggle-disabled-handle-elevation-shadow);
|
||
}
|
||
|
||
.mdc-switch__ripple {
|
||
left: 50%;
|
||
position: absolute;
|
||
top: 50%;
|
||
transform: translate(-50%, -50%);
|
||
z-index: -1;
|
||
width: var(--mat-slide-toggle-state-layer-size, 40px);
|
||
height: var(--mat-slide-toggle-state-layer-size, 40px);
|
||
}
|
||
.mdc-switch__ripple::after {
|
||
content: "";
|
||
opacity: 0;
|
||
}
|
||
.mdc-switch--disabled .mdc-switch__ripple::after {
|
||
display: none;
|
||
}
|
||
.mat-mdc-slide-toggle-disabled-interactive .mdc-switch__ripple::after {
|
||
display: block;
|
||
}
|
||
.mdc-switch:hover .mdc-switch__ripple::after {
|
||
transition: 75ms opacity cubic-bezier(0, 0, 0.2, 1);
|
||
}
|
||
.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:enabled:focus .mdc-switch__ripple::after, .mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:enabled:active .mdc-switch__ripple::after, .mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:enabled:hover:not(:focus) .mdc-switch__ripple::after, .mdc-switch--unselected:enabled:hover:not(:focus) .mdc-switch__ripple::after {
|
||
background: var(--mat-slide-toggle-unselected-hover-state-layer-color, var(--mat-sys-on-surface));
|
||
opacity: var(--mat-slide-toggle-unselected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity));
|
||
}
|
||
.mdc-switch--unselected:enabled:focus .mdc-switch__ripple::after {
|
||
background: var(--mat-slide-toggle-unselected-focus-state-layer-color, var(--mat-sys-on-surface));
|
||
opacity: var(--mat-slide-toggle-unselected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity));
|
||
}
|
||
.mdc-switch--unselected:enabled:active .mdc-switch__ripple::after {
|
||
background: var(--mat-slide-toggle-unselected-pressed-state-layer-color, var(--mat-sys-on-surface));
|
||
opacity: var(--mat-slide-toggle-unselected-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity));
|
||
transition: opacity 75ms linear;
|
||
}
|
||
.mdc-switch--selected:enabled:hover:not(:focus) .mdc-switch__ripple::after {
|
||
background: var(--mat-slide-toggle-selected-hover-state-layer-color, var(--mat-sys-primary));
|
||
opacity: var(--mat-slide-toggle-selected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity));
|
||
}
|
||
.mdc-switch--selected:enabled:focus .mdc-switch__ripple::after {
|
||
background: var(--mat-slide-toggle-selected-focus-state-layer-color, var(--mat-sys-primary));
|
||
opacity: var(--mat-slide-toggle-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity));
|
||
}
|
||
.mdc-switch--selected:enabled:active .mdc-switch__ripple::after {
|
||
background: var(--mat-slide-toggle-selected-pressed-state-layer-color, var(--mat-sys-primary));
|
||
opacity: var(--mat-slide-toggle-selected-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity));
|
||
transition: opacity 75ms linear;
|
||
}
|
||
|
||
.mdc-switch__icons {
|
||
position: relative;
|
||
height: 100%;
|
||
width: 100%;
|
||
z-index: 1;
|
||
transform: translateZ(0);
|
||
}
|
||
.mdc-switch--disabled.mdc-switch--unselected .mdc-switch__icons {
|
||
opacity: var(--mat-slide-toggle-disabled-unselected-icon-opacity, 0.38);
|
||
}
|
||
.mdc-switch--disabled.mdc-switch--selected .mdc-switch__icons {
|
||
opacity: var(--mat-slide-toggle-disabled-selected-icon-opacity, 0.38);
|
||
}
|
||
|
||
.mdc-switch__icon {
|
||
bottom: 0;
|
||
left: 0;
|
||
margin: auto;
|
||
position: absolute;
|
||
right: 0;
|
||
top: 0;
|
||
opacity: 0;
|
||
transition: opacity 30ms 0ms cubic-bezier(0.4, 0, 1, 1);
|
||
}
|
||
.mdc-switch--unselected .mdc-switch__icon {
|
||
width: var(--mat-slide-toggle-unselected-icon-size, 16px);
|
||
height: var(--mat-slide-toggle-unselected-icon-size, 16px);
|
||
fill: var(--mat-slide-toggle-unselected-icon-color, var(--mat-sys-surface-variant));
|
||
}
|
||
.mdc-switch--unselected.mdc-switch--disabled .mdc-switch__icon {
|
||
fill: var(--mat-slide-toggle-disabled-unselected-icon-color, var(--mat-sys-surface-variant));
|
||
}
|
||
.mdc-switch--selected .mdc-switch__icon {
|
||
width: var(--mat-slide-toggle-selected-icon-size, 16px);
|
||
height: var(--mat-slide-toggle-selected-icon-size, 16px);
|
||
fill: var(--mat-slide-toggle-selected-icon-color, var(--mat-sys-on-primary-container));
|
||
}
|
||
.mdc-switch--selected.mdc-switch--disabled .mdc-switch__icon {
|
||
fill: var(--mat-slide-toggle-disabled-selected-icon-color, var(--mat-sys-on-surface));
|
||
}
|
||
|
||
.mdc-switch--selected .mdc-switch__icon--on,
|
||
.mdc-switch--unselected .mdc-switch__icon--off {
|
||
opacity: 1;
|
||
transition: opacity 45ms 30ms cubic-bezier(0, 0, 0.2, 1);
|
||
}
|
||
|
||
.mat-mdc-slide-toggle {
|
||
-webkit-user-select: none;
|
||
user-select: none;
|
||
display: inline-block;
|
||
-webkit-tap-highlight-color: transparent;
|
||
outline: 0;
|
||
}
|
||
.mat-mdc-slide-toggle .mat-mdc-slide-toggle-ripple,
|
||
.mat-mdc-slide-toggle .mdc-switch__ripple::after {
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
position: absolute;
|
||
border-radius: 50%;
|
||
pointer-events: none;
|
||
}
|
||
.mat-mdc-slide-toggle .mat-mdc-slide-toggle-ripple:not(:empty),
|
||
.mat-mdc-slide-toggle .mdc-switch__ripple::after:not(:empty) {
|
||
transform: translateZ(0);
|
||
}
|
||
.mat-mdc-slide-toggle.mat-mdc-slide-toggle-focused .mat-focus-indicator::before {
|
||
content: "";
|
||
}
|
||
.mat-mdc-slide-toggle .mat-internal-form-field {
|
||
color: var(--mat-slide-toggle-label-text-color, var(--mat-sys-on-surface));
|
||
font-family: var(--mat-slide-toggle-label-text-font, var(--mat-sys-body-medium-font));
|
||
line-height: var(--mat-slide-toggle-label-text-line-height, var(--mat-sys-body-medium-line-height));
|
||
font-size: var(--mat-slide-toggle-label-text-size, var(--mat-sys-body-medium-size));
|
||
letter-spacing: var(--mat-slide-toggle-label-text-tracking, var(--mat-sys-body-medium-tracking));
|
||
font-weight: var(--mat-slide-toggle-label-text-weight, var(--mat-sys-body-medium-weight));
|
||
}
|
||
.mat-mdc-slide-toggle .mat-ripple-element {
|
||
opacity: 0.12;
|
||
}
|
||
.mat-mdc-slide-toggle .mat-focus-indicator::before {
|
||
border-radius: 50%;
|
||
}
|
||
.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__handle-track,
|
||
.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__icon,
|
||
.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__handle::before,
|
||
.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__handle::after,
|
||
.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__track::before,
|
||
.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__track::after {
|
||
transition: none;
|
||
}
|
||
.mat-mdc-slide-toggle .mdc-switch:enabled + .mdc-label {
|
||
cursor: pointer;
|
||
}
|
||
.mat-mdc-slide-toggle .mdc-switch--disabled + label {
|
||
color: var(--mat-slide-toggle-disabled-label-text-color, var(--mat-sys-on-surface));
|
||
}
|
||
.mat-mdc-slide-toggle label:empty {
|
||
display: none;
|
||
}
|
||
|
||
.mat-mdc-slide-toggle-touch-target {
|
||
position: absolute;
|
||
top: 50%;
|
||
left: 50%;
|
||
height: var(--mat-slide-toggle-touch-target-size, 48px);
|
||
width: 100%;
|
||
transform: translate(-50%, -50%);
|
||
display: var(--mat-slide-toggle-touch-target-display, block);
|
||
}
|
||
[dir=rtl] .mat-mdc-slide-toggle-touch-target {
|
||
left: auto;
|
||
right: 50%;
|
||
transform: translate(50%, -50%);
|
||
}
|
||
`],encapsulation:2,changeDetection:0})}return n})(),mc=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=on({type:n});static \u0275inj=nn({imports:[Yc,Vi]})}return n})();function Cne(n,o){if(n&1&&(r(0,"li"),c(1),l()),n&2){let e=o.$implicit;m(),N(e)}}function bne(n,o){if(n&1&&(r(0,"ul",4),Q(1,Cne,2,1,"li",null,Oe),l()),n&2){let e=h();m(),K(e.data.details)}}function xne(n,o){if(n&1){let e=R();r(0,"mat-checkbox",9),_("change",function(i){let a=y(e);return w(a.checked=i.checked)}),c(1),l()}if(n&2){let e=o;v("checked",e.checked),m(),X(" ",e.label," ")}}function yne(n,o){if(n&1&&(r(0,"p",6),c(1),l()),n&2){let e=h();m(),N(e.data.note)}}function wne(n,o){if(n&1){let e=R();r(0,"button",12),_("click",function(){y(e);let i=h(2);return w(i.onYesClick())}),c(1),l()}if(n&2){let e=h(2);m(),X(" ",e.confirmButtonText," ")}}function Mne(n,o){if(n&1){let e=R();r(0,"button",13),_("click",function(){y(e);let i=h(2);return w(i.onYesClick())}),c(1),l()}if(n&2){let e=h(2);m(),X(" ",e.confirmButtonText," ")}}function Sne(n,o){if(n&1&&T(0,wne,2,1,"button",10)(1,Mne,2,1,"button",11),n&2){let e=h();E(e.tone==="danger"?0:1)}}var jt=(()=>{class n{dialogRef;data;constructor(e,t){this.dialogRef=e,this.data=t}get title(){return this.data.title||"Confirm action"}get confirmButtonText(){return this.data.confirmButtonText||"Confirm"}get cancelButtonText(){return this.data.cancelButtonText||"Cancel"}get tone(){return this.data.tone||"danger"}get icon(){return this.data.icon?this.data.icon:this.tone==="danger"?"delete_forever":this.tone==="warning"?"warning":"help"}onNoClick(){this.dialogRef.close(!1)}onYesClick(){this.dialogRef.close(!0)}static \u0275fac=function(t){return new(t||n)(Mt(We),Mt(Wt))};static \u0275cmp=V({type:n,selectors:[["app-confirmation-dialog"]],decls:17,vars:12,consts:[[1,"confirmation-dialog"],["mat-dialog-title","",1,"confirmation-dialog__header"],["aria-hidden","true",1,"confirmation-dialog__icon"],[1,"confirmation-dialog__content"],[1,"confirmation-dialog__details"],[1,"confirmation-dialog__checkbox",3,"checked"],[1,"confirmation-dialog__note"],["align","end",1,"confirmation-dialog__actions"],["mat-stroked-button","","type","button","cdkFocusInitial","",1,"cancel-button",3,"click"],[1,"confirmation-dialog__checkbox",3,"change","checked"],["mat-flat-button","","type","button",1,"confirm-button","destructive-button"],["mat-flat-button","","type","button",1,"confirm-button"],["mat-flat-button","","type","button",1,"confirm-button","destructive-button",3,"click"],["mat-flat-button","","type","button",1,"confirm-button",3,"click"]],template:function(t,i){if(t&1&&(r(0,"div",0)(1,"div",1)(2,"span",2)(3,"mat-icon"),c(4),l()(),r(5,"h2"),c(6),l()(),r(7,"mat-dialog-content",3)(8,"p"),c(9),l(),T(10,bne,3,0,"ul",4),T(11,xne,2,2,"mat-checkbox",5),T(12,yne,2,1,"p",6),l(),r(13,"mat-dialog-actions",7)(14,"button",8),_("click",function(){return i.onNoClick()}),c(15),l(),T(16,Sne,2,1),l()()),t&2){let a;ne("confirmation-dialog--danger",i.tone==="danger")("confirmation-dialog--warning",i.tone==="warning"),m(4),N(i.icon),m(2),N(i.title),m(3),N(i.data.message),m(),E(i.data.details!=null&&i.data.details.length?10:-1),m(),E((a=i.data.checkbox)?11:-1,a),m(),E(i.data.note?12:-1),m(3),X(" ",i.cancelButtonText," "),m(),E(i.data.hideConfirm?-1:16)}},dependencies:[fe,ke,qe,Qe,bt,ie,ce,Y,he,Rt,Gt],styles:[".confirmation-dialog[_ngcontent-%COMP%]{--confirmation-accent: var(--mat-sys-primary);color:var(--mat-sys-on-surface)}.confirmation-dialog--danger[_ngcontent-%COMP%]{--confirmation-accent: var(--mat-sys-error)}.confirmation-dialog--warning[_ngcontent-%COMP%]{--confirmation-accent: var(--mat-sys-tertiary)}.confirmation-dialog__header[_ngcontent-%COMP%]{min-height:var(--gns3-density-section-header-height);margin:0;padding:var(--gns3-density-section-header-padding);display:flex;align-items:center;gap:var(--gns3-density-space-3);box-sizing:border-box;color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container);border-bottom:1px solid var(--mat-sys-outline-variant)}.confirmation-dialog__header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-primary-container);font-family:var(--gns3-density-section-header-font);font-size:var(--gns3-density-section-header-title-size);font-weight:650;line-height:1.2;letter-spacing:-.01em}.confirmation-dialog__icon[_ngcontent-%COMP%]{width:var(--gns3-density-dialog-icon-container);height:var(--gns3-density-dialog-icon-container);display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;color:var(--confirmation-accent);background:color-mix(in srgb,var(--confirmation-accent) 12%,transparent);border-radius:var(--gns3-density-radius-sm)}.confirmation-dialog__icon[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-density-dialog-icon-size);height:var(--gns3-density-dialog-icon-size);font-size:var(--gns3-density-dialog-icon-size)}.confirmation-dialog__content[_ngcontent-%COMP%]{padding:var(--gns3-density-space-4);color:var(--mat-sys-on-surface-variant);font:var(--mat-sys-body-medium);font-size:var(--gns3-density-dialog-body-size);line-height:1.45}.confirmation-dialog__content[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;white-space:pre-line}.confirmation-dialog__checkbox[_ngcontent-%COMP%]{display:block;margin-top:var(--gns3-density-space-3)}.confirmation-dialog__details[_ngcontent-%COMP%]{max-height:180px;margin:var(--gns3-density-space-3) 0 0;padding:var(--gns3-density-space-2) var(--gns3-density-space-3) var(--gns3-density-space-2) calc(var(--gns3-density-space-5) + var(--gns3-density-space-2));overflow-y:auto;background:var(--mat-sys-surface-container);border:1px solid var(--mat-sys-outline-variant);border-radius:var(--gns3-density-radius-sm)}.confirmation-dialog__content[_ngcontent-%COMP%] .confirmation-dialog__note[_ngcontent-%COMP%]{margin-top:var(--gns3-density-space-3);color:var(--confirmation-accent);font-weight:600}.confirmation-dialog__actions[_ngcontent-%COMP%] .confirm-button[_ngcontent-%COMP%]:not(.destructive-button){color:var(--mat-sys-on-primary);background:var(--mat-sys-primary)}html[data-density=compact][_nghost-%COMP%] .confirmation-dialog__header[_ngcontent-%COMP%], html[data-density=compact] [_nghost-%COMP%] .confirmation-dialog__header[_ngcontent-%COMP%]{gap:var(--gns3-density-space-2)}html[data-density=compact][_nghost-%COMP%] .confirmation-dialog__content[_ngcontent-%COMP%], html[data-density=compact] [_nghost-%COMP%] .confirmation-dialog__content[_ngcontent-%COMP%]{padding:var(--gns3-density-space-3) var(--gns3-density-space-4)}"],changeDetection:0})}return n})();function kne(n,o){n&1&&(r(0,"div",21),L(1,"mat-progress-spinner",24),r(2,"span"),c(3,"Loading computes\u2026"),l()())}function Pne(n,o){n&1&&(r(0,"mat-header-cell"),c(1,"Name"),l())}function Tne(n,o){if(n&1&&(r(0,"mat-cell")(1,"div",36)(2,"span",37)(3,"mat-icon"),c(4),l()(),r(5,"span",38)(6,"strong"),c(7),l(),r(8,"small"),c(9),l()()()()),n&2){let e=o.$implicit;m(4),N(e.compute_id==="local"?"computer":"dns"),m(3),N(e.name||e.compute_id),m(2),N(e.compute_id==="local"?"Local compute":e.compute_id)}}function Ene(n,o){n&1&&(r(0,"mat-header-cell"),c(1,"Status"),l())}function One(n,o){if(n&1&&(r(0,"mat-cell")(1,"span",39),L(2,"span"),c(3),l()()),n&2){let e=o.$implicit;m(),ne("computes-page__status--connected",e.connected),v("matTooltip",e.last_error||""),m(2),X(" ",e.connected?"Connected":"Disconnected"," ")}}function Dne(n,o){n&1&&(r(0,"mat-header-cell"),c(1,"Host"),l())}function Ine(n,o){if(n&1&&(r(0,"mat-cell")(1,"span",40),c(2),l()()),n&2){let e=o.$implicit,t=h(2);m(),v("matTooltip",e.protocol+"//"+t.formatHost(e)),m(),X(" ",t.formatHost(e)," ")}}function Ane(n,o){n&1&&(r(0,"mat-header-cell"),c(1,"Platform"),l())}function Nne(n,o){if(n&1&&(r(0,"mat-cell")(1,"span",41)(2,"mat-icon"),c(3,"memory"),l(),c(4),l()()),n&2){let e=o.$implicit,t=h(2);m(4),X(" ",t.getPlatform(e)," ")}}function Fne(n,o){n&1&&(r(0,"mat-header-cell"),c(1,"Resources"),l())}function Rne(n,o){if(n&1&&(r(0,"div",42)(1,"span",44)(2,"mat-icon"),c(3,"developer_board"),l(),c(4),l(),r(5,"span",45)(6,"mat-icon"),c(7,"memory"),l(),c(8),l(),r(9,"span",46)(10,"mat-icon"),c(11,"storage"),l(),c(12),l()()),n&2){let e=h().$implicit,t=h(2);m(4),N(t.formatPercent(e.cpu_usage_percent)),m(4),N(t.formatPercent(e.memory_usage_percent)),m(4),N(t.formatPercent(e.disk_usage_percent))}}function zne(n,o){n&1&&(r(0,"span",43),c(1,"Unavailable"),l())}function Lne(n,o){if(n&1&&(r(0,"mat-cell"),T(1,Rne,13,3,"div",42)(2,zne,2,0,"span",43),l()),n&2){let e=o.$implicit;m(),E(e.connected?1:2)}}function Vne(n,o){n&1&&(r(0,"mat-header-cell"),c(1,"Auto-connect"),l())}function Bne(n,o){if(n&1){let e=R();r(0,"mat-slide-toggle",49),_("change",function(i){y(e);let a=h().$implicit,s=h(2);return w(s.toggleAutoConnect(a,i.checked))}),l()}if(n&2){let e=h().$implicit;v("checked",e.auto_connect),Ce("aria-label","Auto connect "+(e.name||e.compute_id))}}function jne(n,o){n&1&&(r(0,"span",48),c(1,"\u2014"),l())}function $ne(n,o){if(n&1&&(r(0,"mat-cell"),T(1,Bne,1,2,"mat-slide-toggle",47)(2,jne,2,0,"span",48),l()),n&2){let e=o.$implicit;m(),E(e.compute_id!=="local"&&e.auto_connect!==void 0?1:2)}}function Hne(n,o){n&1&&(r(0,"mat-header-cell"),c(1,"Actions"),l())}function Une(n,o){if(n&1){let e=R();r(0,"button",56),_("click",function(){y(e);let i=h(2).$implicit,a=h(2);return w(a.disconnectCompute(i))}),r(1,"mat-icon"),c(2,"link_off"),l()()}if(n&2){let e=h(2).$implicit;Ce("aria-label","Disconnect "+(e.name||e.compute_id))}}function Wne(n,o){if(n&1){let e=R();r(0,"div",50)(1,"button",52),_("click",function(){y(e);let i=h().$implicit,a=h(2);return w(a.connectCompute(i))}),r(2,"mat-icon"),c(3,"link"),l()(),T(4,Une,3,1,"button",53),r(5,"button",54),_("click",function(){y(e);let i=h().$implicit,a=h(2);return w(a.openEditDialog(i))}),r(6,"mat-icon"),c(7,"edit"),l()(),r(8,"button",55),_("click",function(){y(e);let i=h().$implicit,a=h(2);return w(a.deleteCompute(i))}),r(9,"mat-icon"),c(10,"delete"),l()()()}if(n&2){let e=h().$implicit;m(),Ce("aria-label","Connect "+(e.name||e.compute_id)),m(3),E(e.connected&&e.auto_connect!==void 0?4:-1),m(),Ce("aria-label","Edit "+(e.name||e.compute_id)),m(3),Ce("aria-label","Delete "+(e.name||e.compute_id))}}function Gne(n,o){n&1&&(r(0,"span",51),c(1," Controller managed "),l())}function qne(n,o){if(n&1&&(r(0,"mat-cell"),T(1,Wne,11,4,"div",50)(2,Gne,2,0,"span",51),l()),n&2){let e=o.$implicit;m(),E(e.compute_id!=="local"?1:2)}}function Qne(n,o){n&1&&L(0,"mat-header-row")}function Kne(n,o){if(n&1&&L(0,"mat-row"),n&2){let e=o.$implicit;ne("computes-page__row--connected",e.connected)}}function Xne(n,o){if(n&1&&(r(0,"mat-table",22),Fe(1,25),se(2,Pne,2,0,"mat-header-cell",26)(3,Tne,10,3,"mat-cell",27),Re(),Fe(4,28),se(5,Ene,2,0,"mat-header-cell",26)(6,One,4,4,"mat-cell",27),Re(),Fe(7,29),se(8,Dne,2,0,"mat-header-cell",26)(9,Ine,3,2,"mat-cell",27),Re(),Fe(10,30),se(11,Ane,2,0,"mat-header-cell",26)(12,Nne,5,1,"mat-cell",27),Re(),Fe(13,31),se(14,Fne,2,0,"mat-header-cell",26)(15,Lne,3,1,"mat-cell",27),Re(),Fe(16,32),se(17,Vne,2,0,"mat-header-cell",26)(18,$ne,3,1,"mat-cell",27),Re(),Fe(19,33),se(20,Hne,2,0,"mat-header-cell",26)(21,qne,3,1,"mat-cell",27),Re(),se(22,Qne,1,0,"mat-header-row",34)(23,Kne,1,2,"mat-row",35),l()),n&2){let e=h();v("dataSource",e.filteredComputes())("trackBy",e.trackCompute),m(22),v("matHeaderRowDef",e.displayedColumns)("matHeaderRowDefSticky",!0),m(),v("matRowDefColumns",e.displayedColumns)}}function Yne(n,o){n&1&&c(0," Try changing the search or status filter. ")}function Zne(n,o){n&1&&c(0," Add a compute server to extend the controller's resources. ")}function Jne(n,o){if(n&1){let e=R();r(0,"button",58),_("click",function(){y(e);let i=h(2);return w(i.openAddDialog())}),r(1,"mat-icon"),c(2,"add"),l(),c(3," Add Compute "),l()}}function eie(n,o){if(n&1&&(r(0,"div",23)(1,"mat-icon"),c(2,"dns"),l(),r(3,"h3"),c(4,"No computes found"),l(),r(5,"p"),T(6,Yne,1,0)(7,Zne,1,0),l(),T(8,Jne,4,0,"button",57),l()),n&2){let e=h();m(6),E(e.searchText()||e.statusFilter()!=="all"?6:7),m(2),E(!e.searchText()&&e.statusFilter()==="all"?8:-1)}}var tie=(n,o)=>o.key;function nie(n,o){if(n&1&&(r(0,"mat-option",6),c(1),l()),n&2){let e=o.$implicit;v("value",e.key),m(),N(e.name)}}function iie(n,o){n&1&&(r(0,"mat-error"),c(1,"You must select a protocol"),l())}function oie(n,o){n&1&&(r(0,"mat-error"),c(1,"You must enter a host"),l())}function aie(n,o){n&1&&(r(0,"mat-error"),c(1,"You must enter a port"),l())}function rie(n,o){n&1&&(r(0,"mat-error"),c(1,"Port must be between 1 and 65535"),l())}var jR=(()=>{class n{route=f($t);controllerService=f(_t);computeService=f(ml);notificationService=f(_s);toasterService=f(re);dialog=f(Xe);cd=f(oe);controller;_computes=z([]);computes=Ne(()=>[...this._computes()].sort((t,i)=>t.compute_id==="local"?-1:i.compute_id==="local"?1:(t.name||"").localeCompare(i.name||"")));searchText=z("");statusFilter=z("all");filteredComputes=Ne(()=>{let e=this.searchText().trim().toLowerCase(),t=this.statusFilter();return this.computes().filter(i=>{let a=t==="all"||t==="connected"&&i.connected||t==="disconnected"&&!i.connected,s=[i.name,i.compute_id,i.host,i.port,i.protocol,i.capabilities?.platform,...i.capabilities?.node_types||[]].filter(d=>d!=null).join(" ").toLowerCase();return a&&(!e||s.includes(e))})});connectedCount=Ne(()=>this.computes().filter(e=>e.connected).length);displayedColumns=["name","status","host","platform","resources","autoConnect","actions"];loading=z(!0);subscription=new Oo;ngOnInit(){this.loadControllerAndComputes()}ngOnDestroy(){this.subscription.unsubscribe()}loadControllerAndComputes(){let e=this.route.snapshot.paramMap.get("controller_id");this.controllerService.get(parseInt(e,10)).then(t=>{if(this.controller=t,this.cd.markForCheck(),this.notificationService.hasCachedData()){let i=this.notificationService.getCachedComputes();this._computes.set(i),this.loading.set(!1),this.cd.markForCheck()}else this.loadComputes();this.subscription.add(this.notificationService.computeNotificationEmitter.subscribe(i=>{this.handleComputeNotification(i)})),this.subscription.add(this.notificationService.computeCacheUpdated.subscribe(i=>{this._computes.set(i),this.loading.set(!1),this.cd.markForCheck()}))},t=>{let i=t.error?.message||t.message||"Failed to load controller";this.toasterService.error(i),this.loading.set(!1),this.cd.markForCheck()})}handleComputeNotification(e){switch(e.action){case"compute.created":this._computes.update(t=>[...t,e.event]),this.toasterService.success(`Compute "${e.event.name}" added`);break;case"compute.updated":this._computes.update(t=>t.map(i=>i.compute_id===e.event.compute_id?e.event:i));break;case"compute.deleted":this._computes.update(t=>t.filter(i=>i.compute_id!==e.event.compute_id)),this.toasterService.success(`Compute "${e.event.name}" deleted`);break}this.cd.markForCheck()}loadComputes(){this.loading.set(!0),this.computeService.getComputes(this.controller).subscribe({next:e=>{this.notificationService.setInitialComputes(e),this._computes.set(e),this.loading.set(!1),this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load computes";this.loading.set(!1),this.toasterService.error(t),this.cd.markForCheck()}})}openAddDialog(){this.dialog.open(BR,{panelClass:["base-dialog-panel","simple-dialog-panel","dialog-medium-panel"],autoFocus:!1,disableClose:!0,data:{controller:this.controller}}).afterClosed().subscribe(t=>{t&&this.computeService.createCompute(this.controller,t).subscribe({next:()=>{this.toasterService.success("Compute added successfully"),this.loadComputes()},error:i=>{let a=i.error?.message||i.message||"Failed to add compute";this.toasterService.error(a),this.cd.markForCheck()}})})}openEditDialog(e){this.computeService.getCompute(this.controller,e.compute_id).subscribe({next:t=>{this.dialog.open(BR,{panelClass:["base-dialog-panel","simple-dialog-panel","dialog-medium-panel"],autoFocus:!1,disableClose:!0,data:{controller:this.controller,compute:t}}).afterClosed().subscribe(a=>{a&&this.computeService.updateCompute(this.controller,e.compute_id,a).subscribe({next:()=>{this.toasterService.success("Compute updated successfully"),this.loadComputes()},error:s=>{let d=s.error?.message||s.message||"Failed to update compute";this.toasterService.error(d),this.cd.markForCheck()}})})},error:t=>{let i=t.error?.message||t.message||"Failed to load compute details";this.toasterService.error(i),this.cd.markForCheck()}})}deleteCompute(e){this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-danger-panel","dialog-small-panel"],autoFocus:".cancel-button",disableClose:!0,data:{title:"Delete compute?",message:`Compute "${e.name||e.compute_id}" will be permanently deleted.`,note:"This action cannot be undone.",confirmButtonText:"Delete compute",tone:"danger"}}).afterClosed().subscribe(i=>{i&&this.computeService.deleteCompute(this.controller,e.compute_id).subscribe({next:()=>{this.toasterService.success("Compute deleted successfully"),this.loadComputes()},error:a=>{let s=a.error?.message||a.message||"Failed to delete compute";this.toasterService.error(s),this.cd.markForCheck()}})})}connectCompute(e){this.computeService.connectCompute(this.controller,e.compute_id).subscribe({next:()=>{this.toasterService.success("Connection request sent"),this.computeService.getCompute(this.controller,e.compute_id).subscribe({next:t=>{let i=this.computes().map(a=>a.compute_id===t.compute_id?t:a);this._computes.set(i),this.cd.markForCheck()},error:()=>{this.loadComputes()}})},error:t=>{let i=t.error?.message||t.message||"Failed to connect compute";this.toasterService.error(i),this.cd.markForCheck()}})}toggleAutoConnect(e,t){let i=e.auto_connect??!1;this._computes.update(a=>a.map(s=>s.compute_id===e.compute_id?ze(q({},s),{auto_connect:t}):s)),this.computeService.updateCompute(this.controller,e.compute_id,{auto_connect:t}).subscribe({error:a=>{this._computes.update(d=>d.map(p=>p.compute_id===e.compute_id?ze(q({},p),{auto_connect:i}):p));let s=a.error?.message||a.message||"Failed to update auto-connect setting";this.toasterService.error(s),this.cd.markForCheck()}})}disconnectCompute(e,t=!1){this.computeService.disconnectCompute(this.controller,e.compute_id,t).subscribe({next:()=>{this.toasterService.success("Disconnect request sent")},error:i=>{if(i.status===409)this.confirmForceDisconnect(e);else{let a=i.error?.message||i.message||"Failed to disconnect compute";this.toasterService.error(a),this.cd.markForCheck()}}})}confirmForceDisconnect(e){this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-danger-panel","dialog-small-panel"],autoFocus:".cancel-button",disableClose:!0,data:{title:"Force disconnect?",message:`Compute "${e.name||e.compute_id}" is used by opened projects.`,note:"Only the controller connection is closed \u2014 nodes keep running unmanaged.",confirmButtonText:"Force disconnect",tone:"danger"}}).afterClosed().subscribe(i=>{i&&this.disconnectCompute(e,!0)})}getStatusIcon(e){return e.connected?"check_circle":"cancel"}getStatusColor(e){return e.connected?"var(--mat-sys-primary)":"var(--mat-sys-error)"}formatPercent(e){return e!=null?`${e.toFixed(1)}%`:"--"}formatHost(e){return`${e.host}:${e.port}`}onSearchChange(e){this.searchText.set(e)}onStatusFilterChange(e){this.statusFilter.set(e)}trackCompute(e,t){return t.compute_id}getPlatform(e){return e.capabilities?.platform||"Unknown"}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-computes"]],decls:56,vars:10,consts:[[1,"computes-page"],[1,"computes-page__header"],[1,"computes-page__heading"],[1,"computes-page__title"],[1,"computes-page__header-actions"],["mat-raised-button","","color","primary",1,"computes-page__button",3,"click","disabled"],[1,"computes-page__toolbar"],["subscriptSizing","dynamic",1,"computes-page__search"],["matPrefix",""],["matInput","","placeholder","Search by name, host, platform, or node type",3,"input","value"],["subscriptSizing","dynamic",1,"computes-page__filter"],[3,"valueChange","value"],["value","all"],["value","connected"],["value","disconnected"],[1,"computes-page__main"],["aria-label","Compute summary",1,"computes-page__summary"],[1,"computes-page__summary-item"],[1,"computes-page__summary-item","computes-page__summary-item--connected"],[1,"computes-page__summary-item","computes-page__summary-item--disconnected"],[1,"computes-page__table-container"],[1,"computes-page__loading"],[3,"dataSource","trackBy"],[1,"computes-page__empty"],["diameter","42","mode","indeterminate"],["matColumnDef","name"],[4,"matHeaderCellDef"],[4,"matCellDef"],["matColumnDef","status"],["matColumnDef","host"],["matColumnDef","platform"],["matColumnDef","resources"],["matColumnDef","autoConnect"],["matColumnDef","actions"],[4,"matHeaderRowDef","matHeaderRowDefSticky"],[3,"computes-page__row--connected",4,"matRowDef","matRowDefColumns"],[1,"computes-page__name-cell"],[1,"computes-page__compute-icon"],[1,"computes-page__name-copy"],[1,"computes-page__status",3,"matTooltip"],[1,"computes-page__host",3,"matTooltip"],[1,"computes-page__platform"],[1,"computes-page__resources"],[1,"computes-page__unavailable"],["matTooltip","CPU usage"],["matTooltip","Memory usage"],["matTooltip","Disk usage"],["matTooltip","Automatically connect when the controller starts",3,"checked"],[1,"computes-page__auto-connect-na"],["matTooltip","Automatically connect when the controller starts",3,"change","checked"],[1,"computes-page__actions-cell"],["matTooltip","The local compute is managed by the controller",1,"computes-page__managed-label"],["mat-icon-button","","matTooltip","Connect compute",1,"computes-page__action","computes-page__action--connect",3,"click"],["mat-icon-button","","matTooltip","Disconnect compute",1,"computes-page__action","computes-page__action--disconnect"],["mat-icon-button","","matTooltip","Edit compute",1,"computes-page__action","computes-page__action--edit",3,"click"],["mat-icon-button","","matTooltip","Delete compute",1,"computes-page__action","computes-page__action--delete",3,"click"],["mat-icon-button","","matTooltip","Disconnect compute",1,"computes-page__action","computes-page__action--disconnect",3,"click"],["mat-raised-button","","color","primary",1,"computes-page__button"],["mat-raised-button","","color","primary",1,"computes-page__button",3,"click"]],template:function(t,i){t&1&&(r(0,"div",0)(1,"header",1)(2,"div",2)(3,"h1",3),c(4,"Computes"),l()(),r(5,"div",4)(6,"button",5),_("click",function(){return i.loadComputes()}),r(7,"mat-icon"),c(8,"refresh"),l(),c(9," Refresh "),l(),r(10,"button",5),_("click",function(){return i.openAddDialog()}),r(11,"mat-icon"),c(12,"add"),l(),c(13," Add Compute "),l()()(),r(14,"section",6)(15,"mat-form-field",7)(16,"mat-icon",8),c(17,"search"),l(),r(18,"input",9),_("input",function(s){return i.onSearchChange(s.target.value)}),l()(),r(19,"mat-form-field",10)(20,"mat-label"),c(21,"Status"),l(),r(22,"mat-select",11),_("valueChange",function(s){return i.onStatusFilterChange(s)}),r(23,"mat-option",12),c(24,"All statuses"),l(),r(25,"mat-option",13),c(26,"Connected"),l(),r(27,"mat-option",14),c(28,"Disconnected"),l()()()(),r(29,"main",15)(30,"section",16)(31,"div",17)(32,"mat-icon"),c(33,"dns"),l(),r(34,"span")(35,"strong"),c(36),l(),c(37," Total "),l()(),r(38,"div",18)(39,"mat-icon"),c(40,"check_circle"),l(),r(41,"span")(42,"strong"),c(43),l(),c(44," Connected "),l()(),r(45,"div",19)(46,"mat-icon"),c(47,"error_outline"),l(),r(48,"span")(49,"strong"),c(50),l(),c(51," Disconnected "),l()()(),r(52,"div",20),T(53,kne,4,0,"div",21)(54,Xne,24,5,"mat-table",22)(55,eie,9,2,"div",23),l()()()),t&2&&(m(6),v("disabled",i.loading()),m(4),v("disabled",!i.controller),m(8),v("value",i.searchText()),m(4),v("value",i.statusFilter()),m(14),N(i.computes().length),m(7),N(i.connectedCount()),m(7),N(i.computes().length-i.connectedCount()),m(2),ne("computes-page__table-container--loading",i.loading()),m(),E(i.loading()?53:i.filteredComputes().length?54:55))},dependencies:[fe,vn,Y,he,Be,ie,ce,it,_n,bn,yn,kn,wn,xn,Pn,Mn,Sn,Tn,En,st,pt,ke,we,Pe,Ve,Bi,ye,Ee,ot,ct,nt,rt,mt,mc,Yc,It],styles:["[_nghost-%COMP%]{display:block;width:100%;background:transparent}.computes-page[_ngcontent-%COMP%]{animation:none}.computes-page__header[_ngcontent-%COMP%], .computes-page__toolbar[_ngcontent-%COMP%], .computes-page__main[_ngcontent-%COMP%]{max-width:1600px;margin-inline:auto}.computes-page__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:24px 20px 16px}.computes-page__heading[_ngcontent-%COMP%]{min-width:0}.computes-page__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.computes-page__header-actions[_ngcontent-%COMP%], .computes-page__toolbar[_ngcontent-%COMP%], .computes-page__resources[_ngcontent-%COMP%], .computes-page__actions-cell[_ngcontent-%COMP%]{display:flex;align-items:center}.computes-page__header-actions[_ngcontent-%COMP%]{flex:0 0 auto;gap:var(--gns3-density-space-3)}button.computes-page__button[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing)}.computes-page__toolbar[_ngcontent-%COMP%]{gap:var(--gns3-density-card-gap);padding:0 20px 8px}.computes-page__search[_ngcontent-%COMP%]{flex:1;min-width:260px}.computes-page__filter[_ngcontent-%COMP%]{flex:0 0 190px}.computes-page__main[_ngcontent-%COMP%]{padding:0 20px 24px}.computes-page__summary[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--gns3-density-space-3);margin-bottom:var(--gns3-density-card-gap)}.computes-page__summary-item[_ngcontent-%COMP%]{display:flex;align-items:center;min-width:0;gap:var(--gns3-density-space-3);padding:14px 16px;border:1px solid var(--mat-sys-outline-variant);border-radius:14px;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container)}.computes-page__summary-item[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{display:grid;flex:0 0 38px;width:38px;height:38px;place-items:center;border-radius:10px;color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.computes-page__summary-item[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column;font-size:12px}.computes-page__summary-item[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:20px;line-height:1.15}.computes-page__summary-item--connected[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.computes-page__summary-item--disconnected[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-error-container);background:var(--mat-sys-error-container)}.computes-page__table-container[_ngcontent-%COMP%]{position:relative;min-width:0;border-radius:16px;background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;overflow-x:auto}.computes-page__table-container--loading[_ngcontent-%COMP%]{min-height:320px}.computes-page__loading[_ngcontent-%COMP%]{position:absolute;z-index:2;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:320px;gap:var(--gns3-density-card-gap);color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface)}mat-table[_ngcontent-%COMP%]{width:100%;min-width:1120px}.mat-mdc-row[_ngcontent-%COMP%], .mat-row[_ngcontent-%COMP%]{height:var(--mat-table-row-item-container-height);min-height:var(--mat-table-row-item-container-height)}.mat-header-row[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%]{position:sticky;z-index:10;top:0;background:color-mix(in srgb,var(--mat-sys-primary-container) 72%,var(--mat-sys-surface))}.mat-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);font-size:13px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}mat-row[_ngcontent-%COMP%]{border-left:3px solid var(--mat-sys-error);transition:background-color var(--gns3-motion-duration-standard) ease}mat-row[_ngcontent-%COMP%]:nth-child(2n){background:color-mix(in srgb,var(--mat-sys-on-surface) 1%,transparent)}mat-row[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}mat-row.computes-page__row--connected[_ngcontent-%COMP%]{border-left-color:var(--mat-sys-primary)}mat-cell[_ngcontent-%COMP%], mat-header-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:inherit;overflow:hidden;color:var(--mat-sys-on-surface);text-overflow:ellipsis;white-space:nowrap}.mat-column-name[_ngcontent-%COMP%]{flex:24 1 0;min-width:235px}.mat-column-status[_ngcontent-%COMP%]{flex:14 1 0;min-width:135px;justify-content:center}.mat-column-host[_ngcontent-%COMP%]{flex:17 1 0;min-width:150px;justify-content:center}.mat-column-platform[_ngcontent-%COMP%]{flex:14 1 0;min-width:130px;justify-content:center}.mat-column-resources[_ngcontent-%COMP%]{flex:20 1 0;min-width:225px;justify-content:center}.mat-column-autoConnect[_ngcontent-%COMP%]{flex:10 1 0;min-width:104px;justify-content:center}.mat-column-actions[_ngcontent-%COMP%]{flex:14 1 0;min-width:190px;justify-content:center}.computes-page__name-cell[_ngcontent-%COMP%], .computes-page__platform[_ngcontent-%COMP%]{display:flex;align-items:center}.computes-page__name-cell[_ngcontent-%COMP%]{min-width:0;gap:var(--gns3-density-space-3)}.computes-page__compute-icon[_ngcontent-%COMP%]{display:grid;flex:0 0 38px;width:38px;height:38px;place-items:center;border-radius:10px;color:var(--mat-sys-on-primary-container);background:color-mix(in srgb,var(--mat-sys-primary-container) 82%,var(--mat-sys-surface))}.computes-page__compute-icon[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:21px;height:21px;font-size:21px}.computes-page__name-copy[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column}.computes-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%], .computes-page__name-copy[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.computes-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-size:14px;font-weight:600}.computes-page__name-copy[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:11px}.computes-page__status[_ngcontent-%COMP%]{display:inline-flex;align-items:center;width:fit-content;gap:var(--gns3-density-space-2);padding:4px 10px;border:1px solid var(--mat-sys-error);border-radius:18px;color:var(--mat-sys-on-error-container);background:var(--mat-sys-error-container);font-size:12px;font-weight:600}.computes-page__status[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{width:7px;height:7px;border-radius:50%;background:currentColor}.computes-page__status--connected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.computes-page__host[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis}.computes-page__platform[_ngcontent-%COMP%]{gap:var(--gns3-density-space-2);color:var(--mat-sys-on-surface-variant);font-size:13px}.computes-page__platform[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:17px;height:17px;font-size:17px}.computes-page__resources[_ngcontent-%COMP%]{gap:var(--gns3-density-space-3)}.computes-page__resources[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;font-size:12px}.computes-page__resources[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:16px;height:16px;color:var(--mat-sys-on-surface-variant);font-size:16px}.computes-page__unavailable[_ngcontent-%COMP%], .computes-page__managed-label[_ngcontent-%COMP%], .computes-page__auto-connect-na[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:12px}.computes-page__actions-cell[_ngcontent-%COMP%]{gap:4px}button.computes-page__action[_ngcontent-%COMP%]{--compute-action-color: var(--mat-sys-on-surface-variant);width:var(--gns3-density-control-height-sm);height:var(--gns3-density-control-height-sm);--mat-icon-button-state-layer-size: var(--gns3-density-control-height-sm);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-control-height-sm)}button.computes-page__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}button.computes-page__action[_ngcontent-%COMP%]{color:var(--compute-action-color);--mat-icon-button-state-layer-color: var(--compute-action-color)}button.computes-page__action[_ngcontent-%COMP%]:not(:disabled) mat-icon[_ngcontent-%COMP%]{color:var(--compute-action-color)}button.computes-page__action[_ngcontent-%COMP%]:disabled mat-icon[_ngcontent-%COMP%]{color:var(--gns3-button-disabled-label-color)}button.computes-page__action--connect[_ngcontent-%COMP%]{--compute-action-color: var(--mat-sys-secondary)}button.computes-page__action--edit[_ngcontent-%COMP%]{--compute-action-color: var(--mat-sys-primary)}button.computes-page__action--delete[_ngcontent-%COMP%], button.computes-page__action--disconnect[_ngcontent-%COMP%]{--compute-action-color: var(--mat-sys-error)}.computes-page__empty[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:260px;padding:32px;color:var(--mat-sys-on-surface-variant);text-align:center}.computes-page__empty[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{width:48px;height:48px;font-size:48px;opacity:.55}.computes-page__empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:12px 0 0;color:var(--mat-sys-on-surface);font-size:17px}.computes-page__empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:5px 0 16px;font-size:14px}[data-density=compact][_nghost-%COMP%] button.computes-page__button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.computes-page__button[_ngcontent-%COMP%]{min-height:40px;height:40px}@media(max-width:900px){.computes-page__header[_ngcontent-%COMP%], .computes-page__toolbar[_ngcontent-%COMP%]{align-items:stretch;flex-direction:column}.computes-page__header-actions[_ngcontent-%COMP%]{width:100%}.computes-page__filter[_ngcontent-%COMP%]{flex:1}}@media(max-width:600px){.computes-page__header[_ngcontent-%COMP%]{padding:20px 16px 12px}.computes-page__toolbar[_ngcontent-%COMP%], .computes-page__main[_ngcontent-%COMP%]{padding-inline:16px}.computes-page__header-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}button.computes-page__button[_ngcontent-%COMP%]{width:100%}.computes-page__summary[_ngcontent-%COMP%]{grid-template-columns:1fr}}"],changeDetection:0})}return n})(),BR=(()=>{class n{dialogRef=f(We);data=f(Wt);protocols=[{key:"http",name:"HTTP"},{key:"https",name:"HTTPS"}];computeForm=new Qo({name:new Ge(""),protocol:new Ge("http",[Ue.required]),host:new Ge("",[Ue.required]),port:new Ge(3080,[Ue.required,Ue.min(1),Ue.max(65535)]),user:new Ge("gns3"),password:new Ge("gns3"),autoConnect:new Ge(!1)});isEditMode=!1;constructor(){this.data.compute&&(this.isEditMode=!0,this.computeForm.patchValue({name:this.data.compute.name,protocol:this.data.compute.protocol,host:this.data.compute.host,port:this.data.compute.port,user:this.data.compute.user,password:"",autoConnect:this.data.compute.auto_connect??!1}))}onSaveClick(){if(!this.computeForm.valid)return;let e=this.computeForm.value,t={protocol:e.protocol,host:e.host,port:e.port,user:e.user||void 0,name:e.name||void 0,auto_connect:!!e.autoConnect};e.password&&e.password.trim()!==""&&(t.password=e.password),this.dialogRef.close(t)}onCancelClick(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-add-compute-dialog"]],decls:41,vars:8,consts:[["mat-dialog-title",""],[3,"formGroup"],["mat-dialog-content","",1,"gns3-form-stack","gns3-form-layout-fixed"],["appearance","outline",1,"full-width-field"],["matInput","","tabindex","1","formControlName","name","placeholder","My Compute"],["formControlName","protocol"],[3,"value"],["matInput","","tabindex","1","formControlName","host","placeholder","192.168.1.100"],["matInput","","type","number","tabindex","1","formControlName","port","placeholder","3080"],["matInput","","tabindex","1","formControlName","user","placeholder","gns3"],["matInput","","type","password","tabindex","1","formControlName","password","placeholder","gns3"],["formControlName","autoConnect",1,"add-compute-dialog__auto-connect"],["mat-dialog-actions","","align","end"],["mat-button","","tabindex","-1","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"]],template:function(t,i){t&1&&(r(0,"h2",0),c(1),l(),r(2,"form",1)(3,"div",2)(4,"mat-form-field",3)(5,"mat-label"),c(6,"Name (optional)"),l(),L(7,"input",4),l(),r(8,"mat-form-field",3)(9,"mat-label"),c(10,"Protocol"),l(),r(11,"mat-select",5),Q(12,nie,2,2,"mat-option",6,tie),l(),T(14,iie,2,0,"mat-error"),l(),r(15,"mat-form-field",3)(16,"mat-label"),c(17,"Host"),l(),L(18,"input",7),T(19,oie,2,0,"mat-error"),l(),r(20,"mat-form-field",3)(21,"mat-label"),c(22,"Port"),l(),L(23,"input",8),T(24,aie,2,0,"mat-error"),T(25,rie,2,0,"mat-error"),l(),r(26,"mat-form-field",3)(27,"mat-label"),c(28,"User"),l(),L(29,"input",9),l(),r(30,"mat-form-field",3)(31,"mat-label"),c(32,"Password"),l(),L(33,"input",10),l(),r(34,"mat-slide-toggle",11),c(35," Automatically connect "),l()(),r(36,"div",12)(37,"button",13),_("click",function(){return i.onCancelClick()}),c(38,"Cancel"),l(),r(39,"button",14),_("click",function(){return i.onSaveClick()}),c(40),l()()()),t&2&&(m(),N(i.isEditMode?"Edit Compute":"Add Compute"),m(),v("formGroup",i.computeForm),m(10),K(i.protocols),m(2),E(i.computeForm.get("protocol").hasError("required")?14:-1),m(5),E(i.computeForm.get("host").hasError("required")?19:-1),m(5),E(i.computeForm.get("port").hasError("required")?24:-1),m(),E(i.computeForm.get("port").hasError("min")||i.computeForm.get("port").hasError("max")?25:-1),m(14),v("disabled",i.computeForm.invalid),m(),X(" ",i.isEditMode?"Update":"Add"," "))},dependencies:[fe,It,Ct,At,No,Nt,vt,Ut,Yt,ke,qe,Qe,bt,Y,he,we,Pe,Ve,Wn,ye,Ee,ot,ct,nt,mc,Yc],encapsulation:2,changeDetection:0})}return n})();var sie=["*"];var lie=[[["","mat-card-avatar",""],["","matCardAvatar",""]],[["mat-card-title"],["mat-card-subtitle"],["","mat-card-title",""],["","mat-card-subtitle",""],["","matCardTitle",""],["","matCardSubtitle",""]],"*"],cie=["[mat-card-avatar], [matCardAvatar]",`mat-card-title, mat-card-subtitle,
|
||
[mat-card-title], [mat-card-subtitle],
|
||
[matCardTitle], [matCardSubtitle]`,"*"],die=new mn("MAT_CARD_CONFIG"),Zn=(()=>{class n{appearance;constructor(){let e=f(die,{optional:!0});this.appearance=e?.appearance||"raised"}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["mat-card"]],hostAttrs:[1,"mat-mdc-card","mdc-card"],hostVars:8,hostBindings:function(t,i){t&2&&ne("mat-mdc-card-outlined",i.appearance==="outlined")("mdc-card--outlined",i.appearance==="outlined")("mat-mdc-card-filled",i.appearance==="filled")("mdc-card--filled",i.appearance==="filled")},inputs:{appearance:"appearance"},exportAs:["matCard"],ngContentSelectors:sie,decls:1,vars:0,template:function(t,i){t&1&&(pi(),Zt(0))},styles:[`.mat-mdc-card {
|
||
display: flex;
|
||
flex-direction: column;
|
||
box-sizing: border-box;
|
||
position: relative;
|
||
border-style: solid;
|
||
border-width: 0;
|
||
background-color: var(--mat-card-elevated-container-color, var(--mat-sys-surface-container-low));
|
||
border-color: var(--mat-card-elevated-container-color, var(--mat-sys-surface-container-low));
|
||
border-radius: var(--mat-card-elevated-container-shape, var(--mat-sys-corner-medium));
|
||
box-shadow: var(--mat-card-elevated-container-elevation, var(--mat-sys-level1));
|
||
}
|
||
.mat-mdc-card::after {
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
border: solid 1px transparent;
|
||
content: "";
|
||
display: block;
|
||
pointer-events: none;
|
||
box-sizing: border-box;
|
||
border-radius: var(--mat-card-elevated-container-shape, var(--mat-sys-corner-medium));
|
||
}
|
||
|
||
.mat-mdc-card-outlined {
|
||
background-color: var(--mat-card-outlined-container-color, var(--mat-sys-surface));
|
||
border-radius: var(--mat-card-outlined-container-shape, var(--mat-sys-corner-medium));
|
||
border-width: var(--mat-card-outlined-outline-width, 1px);
|
||
border-color: var(--mat-card-outlined-outline-color, var(--mat-sys-outline-variant));
|
||
box-shadow: var(--mat-card-outlined-container-elevation, var(--mat-sys-level0));
|
||
}
|
||
.mat-mdc-card-outlined::after {
|
||
border: none;
|
||
}
|
||
|
||
.mat-mdc-card-filled {
|
||
background-color: var(--mat-card-filled-container-color, var(--mat-sys-surface-container-highest));
|
||
border-radius: var(--mat-card-filled-container-shape, var(--mat-sys-corner-medium));
|
||
box-shadow: var(--mat-card-filled-container-elevation, var(--mat-sys-level0));
|
||
}
|
||
|
||
.mdc-card__media {
|
||
position: relative;
|
||
box-sizing: border-box;
|
||
background-repeat: no-repeat;
|
||
background-position: center;
|
||
background-size: cover;
|
||
}
|
||
.mdc-card__media::before {
|
||
display: block;
|
||
content: "";
|
||
}
|
||
.mdc-card__media:first-child {
|
||
border-top-left-radius: inherit;
|
||
border-top-right-radius: inherit;
|
||
}
|
||
.mdc-card__media:last-child {
|
||
border-bottom-left-radius: inherit;
|
||
border-bottom-right-radius: inherit;
|
||
}
|
||
|
||
.mat-mdc-card-actions {
|
||
display: flex;
|
||
flex-direction: row;
|
||
align-items: center;
|
||
box-sizing: border-box;
|
||
min-height: 52px;
|
||
padding: 8px;
|
||
}
|
||
|
||
.mat-mdc-card-title {
|
||
font-family: var(--mat-card-title-text-font, var(--mat-sys-title-large-font));
|
||
line-height: var(--mat-card-title-text-line-height, var(--mat-sys-title-large-line-height));
|
||
font-size: var(--mat-card-title-text-size, var(--mat-sys-title-large-size));
|
||
letter-spacing: var(--mat-card-title-text-tracking, var(--mat-sys-title-large-tracking));
|
||
font-weight: var(--mat-card-title-text-weight, var(--mat-sys-title-large-weight));
|
||
}
|
||
|
||
.mat-mdc-card-subtitle {
|
||
color: var(--mat-card-subtitle-text-color, var(--mat-sys-on-surface));
|
||
font-family: var(--mat-card-subtitle-text-font, var(--mat-sys-title-medium-font));
|
||
line-height: var(--mat-card-subtitle-text-line-height, var(--mat-sys-title-medium-line-height));
|
||
font-size: var(--mat-card-subtitle-text-size, var(--mat-sys-title-medium-size));
|
||
letter-spacing: var(--mat-card-subtitle-text-tracking, var(--mat-sys-title-medium-tracking));
|
||
font-weight: var(--mat-card-subtitle-text-weight, var(--mat-sys-title-medium-weight));
|
||
}
|
||
|
||
.mat-mdc-card-title,
|
||
.mat-mdc-card-subtitle {
|
||
display: block;
|
||
margin: 0;
|
||
}
|
||
.mat-mdc-card-avatar ~ .mat-mdc-card-header-text .mat-mdc-card-title,
|
||
.mat-mdc-card-avatar ~ .mat-mdc-card-header-text .mat-mdc-card-subtitle {
|
||
padding: 16px 16px 0;
|
||
}
|
||
|
||
.mat-mdc-card-header {
|
||
display: flex;
|
||
padding: 16px 16px 0;
|
||
}
|
||
|
||
.mat-mdc-card-content {
|
||
display: block;
|
||
padding: 0 16px;
|
||
}
|
||
.mat-mdc-card-content:first-child {
|
||
padding-top: 16px;
|
||
}
|
||
.mat-mdc-card-content:last-child {
|
||
padding-bottom: 16px;
|
||
}
|
||
|
||
.mat-mdc-card-title-group {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
width: 100%;
|
||
}
|
||
|
||
.mat-mdc-card-avatar {
|
||
height: 40px;
|
||
width: 40px;
|
||
border-radius: 50%;
|
||
flex-shrink: 0;
|
||
margin-bottom: 16px;
|
||
object-fit: cover;
|
||
}
|
||
.mat-mdc-card-avatar ~ .mat-mdc-card-header-text .mat-mdc-card-subtitle,
|
||
.mat-mdc-card-avatar ~ .mat-mdc-card-header-text .mat-mdc-card-title {
|
||
line-height: normal;
|
||
}
|
||
|
||
.mat-mdc-card-sm-image {
|
||
width: 80px;
|
||
height: 80px;
|
||
}
|
||
|
||
.mat-mdc-card-md-image {
|
||
width: 112px;
|
||
height: 112px;
|
||
}
|
||
|
||
.mat-mdc-card-lg-image {
|
||
width: 152px;
|
||
height: 152px;
|
||
}
|
||
|
||
.mat-mdc-card-xl-image {
|
||
width: 240px;
|
||
height: 240px;
|
||
}
|
||
|
||
.mat-mdc-card-subtitle ~ .mat-mdc-card-title,
|
||
.mat-mdc-card-title ~ .mat-mdc-card-subtitle,
|
||
.mat-mdc-card-header .mat-mdc-card-header-text .mat-mdc-card-title,
|
||
.mat-mdc-card-header .mat-mdc-card-header-text .mat-mdc-card-subtitle,
|
||
.mat-mdc-card-title-group .mat-mdc-card-title,
|
||
.mat-mdc-card-title-group .mat-mdc-card-subtitle {
|
||
padding-top: 0;
|
||
}
|
||
|
||
.mat-mdc-card-content > :last-child:not(.mat-mdc-card-footer) {
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
.mat-mdc-card-actions-align-end {
|
||
justify-content: flex-end;
|
||
}
|
||
`],encapsulation:2,changeDetection:0})}return n})(),Zc=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["mat-card-title"],["","mat-card-title",""],["","matCardTitle",""]],hostAttrs:[1,"mat-mdc-card-title"]})}return n})();var Tl=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["mat-card-content"]],hostAttrs:[1,"mat-mdc-card-content"]})}return n})();var k1=(()=>{class n{align="start";static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["mat-card-actions"]],hostAttrs:[1,"mat-mdc-card-actions","mdc-card__actions"],hostVars:2,hostBindings:function(t,i){t&2&&ne("mat-mdc-card-actions-align-end",i.align==="end")},inputs:{align:"align"},exportAs:["matCardActions"]})}return n})(),Jc=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["mat-card-header"]],hostAttrs:[1,"mat-mdc-card-header"],ngContentSelectors:cie,decls:4,vars:0,consts:[[1,"mat-mdc-card-header-text"]],template:function(t,i){t&1&&(pi(lie),Zt(0),ii(1,"div",0),Zt(2,1),Si(),Zt(3,2))},encapsulation:2,changeDetection:0})}return n})();var hn=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=on({type:n});static \u0275inj=nn({imports:[Vi]})}return n})();var dh=(()=>{class n{dataChange=new cn([]);constructor(){}get data(){return this.dataChange.value}addController(e){let t=this.data.slice();t.push(e),this.dataChange.next(t)}addControllers(e){this.dataChange.next(e)}remove(e){let t=this.data.indexOf(e);t>=0&&(this.data.splice(t,1),this.dataChange.next(this.data.slice()))}find(e){return this.data.find(t=>t.name===e)}findById(e){return this.data.find(t=>t.id===e)}findIndex(e){return this.data.findIndex(t=>t.name===e)}findIndexById(e){return this.data.findIndex(t=>t.id===e)}update(e){let t=this.findIndexById(e.id);t>=0&&(this.data[t]=e,this.dataChange.next(this.data.slice()))}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var $R=(n,o)=>o.key;function mie(n,o){n&1&&(r(0,"mat-error"),c(1,"You must enter a value"),l())}function pie(n,o){if(n&1&&(r(0,"mat-option",10),c(1),l()),n&2){let e=o.$implicit;v("value",e.key),m(),X(" ",e.name," ")}}function uie(n,o){if(n&1&&(r(0,"mat-option",10),c(1),l()),n&2){let e=o.$implicit;v("value",e.key),m(),X(" ",e.name," ")}}var P1=(()=>{class n{controllerService=f(_t);controllerDatabase=f(dh);route=f($t);router=f(Ft);toasterService=f(re);cdr=f(oe);controllerOptionsVisibility=z(!1);controllerIp;controllerPort;projectId;protocols=[{key:"http:",name:"HTTP"},{key:"https:",name:"HTTPS"}];locations=[{key:"local",name:"Local"},{key:"remote",name:"Remote"}];controllerForm=new Qo({name:new Ge("",[Ue.required]),location:new Ge(""),protocol:new Ge("http:")});constructor(){}async ngOnInit(){this.controllerService.isServiceInitialized&&this.getControllers(),this.controllerService.serviceInitialized.subscribe(async e=>{e&&this.getControllers()})}async getControllers(){this.controllerIp=this.route.snapshot.paramMap.get("controller_ip"),this.controllerPort=+this.route.snapshot.paramMap.get("controller_port"),this.projectId=this.route.snapshot.paramMap.get("project_id");try{let t=(await this.controllerService.findAll()).filter(i=>i.host===this.controllerIp&&i.port===this.controllerPort)[0];t?this.router.navigate(["/controller",t.id,"project",this.projectId]):(this.controllerOptionsVisibility.set(!0),this.cdr.markForCheck())}catch(e){let t=e.error?.message||e.message||"Failed to load controllers";this.toasterService.error(t),this.cdr.markForCheck()}}createController(){if(!this.controllerForm.get("name").hasError&&!this.controllerForm.get("location").hasError&&!this.controllerForm.get("protocol").hasError){this.toasterService.error("Please use correct values");return}let e=new m5;e.host=this.controllerIp,e.port=this.controllerPort,e.name=this.controllerForm.get("name").value,e.location=this.controllerForm.get("location").value,e.protocol=this.controllerForm.get("protocol").value,this.controllerService.create(e).then(t=>{this.toasterService.success(`Controller "${t.name}" added.`),this.router.navigate(["/controller",t.id,"project",this.projectId])},t=>{let i=t.error?.message||t.message||"Failed to create controller";this.toasterService.error(i),this.cdr.markForCheck()})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-direct-link"]],decls:22,vars:3,consts:[[1,"content",3,"hidden"],[1,"default-header"],[1,"row"],[1,"col"],[1,"default-content"],[1,"matCard"],[1,"gns3-form-stack","gns3-form-layout-fixed",3,"formGroup"],["appearance","outline"],["matInput","","tabindex","1","formControlName","name","placeholder","Name"],["placeholder","Location","formControlName","location"],[3,"value"],["placeholder","Protocol","formControlName","protocol"],[1,"buttons-bar"],["mat-raised-button","","color","primary",3,"click"]],template:function(t,i){t&1&&(r(0,"div",0)(1,"div",1)(2,"div",2)(3,"h1",3),c(4,"Add new controller"),l()()(),r(5,"div",4)(6,"mat-card",5)(7,"form",6)(8,"mat-form-field",7),L(9,"input",8),T(10,mie,2,0,"mat-error"),l(),r(11,"mat-form-field",7)(12,"mat-select",9),Q(13,pie,2,2,"mat-option",10,$R),l()(),r(15,"mat-form-field",7)(16,"mat-select",11),Q(17,uie,2,2,"mat-option",10,$R),l()()()(),r(19,"div",12)(20,"button",13),_("click",function(){return i.createController()}),c(21,"Add controller"),l()()()()),t&2&&(v("hidden",!i.controllerOptionsVisibility()),m(7),v("formGroup",i.controllerForm),m(3),E(i.controllerForm.get("name").hasError("required")?10:-1),m(3),K(i.locations),m(4),K(i.protocols))},dependencies:[fe,It,Ct,At,Nt,vt,Ut,Yt,vn,hn,Zn,we,Pe,Wn,ye,Ee,ot,ct,nt,Ho,Y,he],styles:["mat-form-field[_ngcontent-%COMP%]{width:100%}"],changeDetection:0})}return n})();var pE=new mn("CdkAccordion"),HR=(()=>{class n{_stateChanges=new Ye;_openCloseAllActions=new Ye;id=f(ua).getId("cdk-accordion-");multi=!1;openAll(){this.multi&&this._openCloseAllActions.next(!0)}closeAll(){this._openCloseAllActions.next(!1)}ngOnChanges(e){this._stateChanges.next(e)}ngOnDestroy(){this._stateChanges.complete(),this._openCloseAllActions.complete()}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["cdk-accordion"],["","cdkAccordion",""]],inputs:{multi:[2,"multi","multi",zt]},exportAs:["cdkAccordion"],features:[un([{provide:pE,useExisting:n}]),Nn]})}return n})(),UR=(()=>{class n{accordion=f(pE,{optional:!0,skipSelf:!0});_changeDetectorRef=f(oe);_expansionDispatcher=f(pg);_openCloseAllSubscription=Oo.EMPTY;closed=new be;opened=new be;destroyed=new be;expandedChange=new be;id=f(ua).getId("cdk-accordion-child-");get expanded(){return this._expanded}set expanded(e){if(this._expanded!==e){if(this._expanded=e,this.expandedChange.emit(e),e){this.opened.emit();let t=this.accordion?this.accordion.id:this.id;this._expansionDispatcher.notify(this.id,t)}else this.closed.emit();this._changeDetectorRef.markForCheck()}}_expanded=!1;get disabled(){return this._disabled()}set disabled(e){this._disabled.set(e)}_disabled=z(!1);_removeUniqueSelectionListener=()=>{};constructor(){}ngOnInit(){this._removeUniqueSelectionListener=this._expansionDispatcher.listen((e,t)=>{this.accordion&&!this.accordion.multi&&this.accordion.id===t&&this.id!==e&&(this.expanded=!1)}),this.accordion&&(this._openCloseAllSubscription=this._subscribeToOpenCloseAllActions())}ngOnDestroy(){this.opened.complete(),this.closed.complete(),this.destroyed.emit(),this.destroyed.complete(),this._removeUniqueSelectionListener(),this._openCloseAllSubscription.unsubscribe()}toggle(){this.disabled||(this.expanded=!this.expanded)}close(){this.disabled||(this.expanded=!1)}open(){this.disabled||(this.expanded=!0)}_subscribeToOpenCloseAllActions(){return this.accordion._openCloseAllActions.subscribe(e=>{this.disabled||(this.expanded=e)})}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["cdk-accordion-item"],["","cdkAccordionItem",""]],inputs:{expanded:[2,"expanded","expanded",zt],disabled:[2,"disabled","disabled",zt]},outputs:{closed:"closed",opened:"opened",destroyed:"destroyed",expandedChange:"expandedChange"},exportAs:["cdkAccordionItem"],features:[un([{provide:pE,useValue:void 0}])]})}return n})(),T1=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=on({type:n});static \u0275inj=nn({})}return n})();var gie=["body"],hie=["bodyWrapper"],_ie=[[["mat-expansion-panel-header"]],"*",[["mat-action-row"]]],fie=["mat-expansion-panel-header","*","mat-action-row"];function vie(n,o){}var Cie=[[["mat-panel-title"]],[["mat-panel-description"]],"*"],bie=["mat-panel-title","mat-panel-description","*"];function xie(n,o){n&1&&(ii(0,"span",1),Mi(),ii(1,"svg",2),kr(2,"path",3),Si()())}var uE=new mn("MAT_ACCORDION"),WR=new mn("MAT_EXPANSION_PANEL"),yie=(()=>{class n{_template=f(pa);_expansionPanel=f(WR,{optional:!0});constructor(){}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["ng-template","matExpansionPanelContent",""]]})}return n})(),GR=new mn("MAT_EXPANSION_PANEL_DEFAULT_OPTIONS"),jd=(()=>{class n extends UR{_viewContainerRef=f(Wo);_animationsDisabled=$a();_document=f(Do);_ngZone=f(Gi);_elementRef=f(Kt);_renderer=f(qi);_cleanupTransitionEnd;get hideToggle(){return this._hideToggle||this.accordion&&this.accordion.hideToggle}set hideToggle(e){this._hideToggle=e}_hideToggle=!1;get togglePosition(){return this._togglePosition||this.accordion&&this.accordion.togglePosition}set togglePosition(e){this._togglePosition=e}_togglePosition;afterExpand=new be;afterCollapse=new be;_inputChanges=new Ye;accordion=f(uE,{optional:!0,skipSelf:!0});_lazyContent;_body;_bodyWrapper;_portal;_headerId=f(ua).getId("mat-expansion-panel-header-");constructor(){super();let e=f(GR,{optional:!0});this._expansionDispatcher=f(pg),e&&(this.hideToggle=e.hideToggle)}_hasSpacing(){return this.accordion?this.expanded&&this.accordion.displayMode==="default":!1}_getExpandedState(){return this.expanded?"expanded":"collapsed"}toggle(){this.expanded=!this.expanded}close(){this.expanded=!1}open(){this.expanded=!0}ngAfterContentInit(){this._lazyContent&&this._lazyContent._expansionPanel===this&&this.opened.pipe(Di(null),Yi(()=>this.expanded&&!this._portal),Gr(1)).subscribe(()=>{this._portal=new lg(this._lazyContent._template,this._viewContainerRef)}),this._setupAnimationEvents()}ngOnChanges(e){this._inputChanges.next(e)}ngOnDestroy(){super.ngOnDestroy(),this._cleanupTransitionEnd?.(),this._inputChanges.complete()}_containsFocus(){if(this._body){let e=this._document.activeElement,t=this._body.nativeElement;return e===t||t.contains(e)}return!1}_transitionEndListener=({target:e,propertyName:t})=>{e===this._bodyWrapper?.nativeElement&&t==="grid-template-rows"&&this._ngZone.run(()=>{this.expanded?this.afterExpand.emit():this.afterCollapse.emit()})};_setupAnimationEvents(){this._ngZone.runOutsideAngular(()=>{this._animationsDisabled?(this.opened.subscribe(()=>this._ngZone.run(()=>this.afterExpand.emit())),this.closed.subscribe(()=>this._ngZone.run(()=>this.afterCollapse.emit()))):setTimeout(()=>{let e=this._elementRef.nativeElement;this._cleanupTransitionEnd=this._renderer.listen(e,"transitionend",this._transitionEndListener),e.classList.add("mat-expansion-panel-animations-enabled")},200)})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["mat-expansion-panel"]],contentQueries:function(t,i,a){if(t&1&&Zi(a,yie,5),t&2){let s;gt(s=ht())&&(i._lazyContent=s.first)}},viewQuery:function(t,i){if(t&1&&Kn(gie,5)(hie,5),t&2){let a;gt(a=ht())&&(i._body=a.first),gt(a=ht())&&(i._bodyWrapper=a.first)}},hostAttrs:[1,"mat-expansion-panel"],hostVars:4,hostBindings:function(t,i){t&2&&ne("mat-expanded",i.expanded)("mat-expansion-panel-spacing",i._hasSpacing())},inputs:{hideToggle:[2,"hideToggle","hideToggle",zt],togglePosition:"togglePosition"},outputs:{afterExpand:"afterExpand",afterCollapse:"afterCollapse"},exportAs:["matExpansionPanel"],features:[un([{provide:uE,useValue:void 0},{provide:WR,useExisting:n}]),mi,Nn],ngContentSelectors:fie,decls:9,vars:4,consts:[["bodyWrapper",""],["body",""],[1,"mat-expansion-panel-content-wrapper"],["role","region",1,"mat-expansion-panel-content",3,"id"],[1,"mat-expansion-panel-body"],[3,"cdkPortalOutlet"]],template:function(t,i){t&1&&(pi(_ie),Zt(0),r(1,"div",2,0)(3,"div",3,1)(5,"div",4),Zt(6,1),se(7,vie,0,0,"ng-template",5),l(),Zt(8,2),l()()),t&2&&(m(),Ce("inert",i.expanded?null:""),m(2),v("id",i.id),Ce("aria-labelledby",i._headerId),m(4),v("cdkPortalOutlet",i._portal))},dependencies:[HC],styles:[`.mat-expansion-panel {
|
||
box-sizing: content-box;
|
||
display: block;
|
||
margin: 0;
|
||
overflow: hidden;
|
||
}
|
||
.mat-expansion-panel.mat-expansion-panel-animations-enabled {
|
||
transition: margin 225ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);
|
||
}
|
||
.mat-expansion-panel {
|
||
position: relative;
|
||
background: var(--mat-expansion-container-background-color, var(--mat-sys-surface));
|
||
color: var(--mat-expansion-container-text-color, var(--mat-sys-on-surface));
|
||
border-radius: var(--mat-expansion-container-shape, 12px);
|
||
}
|
||
.mat-expansion-panel:not([class*=mat-elevation-z]) {
|
||
box-shadow: var(--mat-expansion-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12));
|
||
}
|
||
.mat-accordion .mat-expansion-panel:not(.mat-expanded), .mat-accordion .mat-expansion-panel:not(.mat-expansion-panel-spacing) {
|
||
border-radius: 0;
|
||
}
|
||
.mat-accordion .mat-expansion-panel:first-of-type {
|
||
border-top-right-radius: var(--mat-expansion-container-shape, 12px);
|
||
border-top-left-radius: var(--mat-expansion-container-shape, 12px);
|
||
}
|
||
.mat-accordion .mat-expansion-panel:last-of-type {
|
||
border-bottom-right-radius: var(--mat-expansion-container-shape, 12px);
|
||
border-bottom-left-radius: var(--mat-expansion-container-shape, 12px);
|
||
}
|
||
@media (forced-colors: active) {
|
||
.mat-expansion-panel {
|
||
outline: solid 1px;
|
||
}
|
||
}
|
||
|
||
.mat-expansion-panel-content-wrapper {
|
||
display: grid;
|
||
grid-template-rows: 0fr;
|
||
grid-template-columns: 100%;
|
||
}
|
||
.mat-expansion-panel-animations-enabled .mat-expansion-panel-content-wrapper {
|
||
transition: grid-template-rows 225ms cubic-bezier(0.4, 0, 0.2, 1);
|
||
}
|
||
.mat-expansion-panel.mat-expanded > .mat-expansion-panel-content-wrapper {
|
||
grid-template-rows: 1fr;
|
||
}
|
||
@supports not (grid-template-rows: 0fr) {
|
||
.mat-expansion-panel-content-wrapper {
|
||
height: 0;
|
||
}
|
||
.mat-expansion-panel.mat-expanded > .mat-expansion-panel-content-wrapper {
|
||
height: auto;
|
||
}
|
||
}
|
||
@media print {
|
||
.mat-expansion-panel-content-wrapper {
|
||
height: 0;
|
||
}
|
||
.mat-expansion-panel.mat-expanded > .mat-expansion-panel-content-wrapper {
|
||
height: auto;
|
||
}
|
||
}
|
||
|
||
.mat-expansion-panel-content {
|
||
display: flex;
|
||
flex-direction: column;
|
||
overflow: visible;
|
||
min-height: 0;
|
||
visibility: hidden;
|
||
}
|
||
.mat-expansion-panel-animations-enabled .mat-expansion-panel-content {
|
||
transition: visibility 190ms linear;
|
||
}
|
||
.mat-expansion-panel.mat-expanded > .mat-expansion-panel-content-wrapper > .mat-expansion-panel-content {
|
||
visibility: visible;
|
||
}
|
||
.mat-expansion-panel-content {
|
||
font-family: var(--mat-expansion-container-text-font, var(--mat-sys-body-large-font));
|
||
font-size: var(--mat-expansion-container-text-size, var(--mat-sys-body-large-size));
|
||
font-weight: var(--mat-expansion-container-text-weight, var(--mat-sys-body-large-weight));
|
||
line-height: var(--mat-expansion-container-text-line-height, var(--mat-sys-body-large-line-height));
|
||
letter-spacing: var(--mat-expansion-container-text-tracking, var(--mat-sys-body-large-tracking));
|
||
}
|
||
|
||
.mat-expansion-panel-body {
|
||
padding: 0 24px 16px;
|
||
}
|
||
|
||
.mat-expansion-panel-spacing {
|
||
margin: 16px 0;
|
||
}
|
||
.mat-accordion > .mat-expansion-panel-spacing:first-child, .mat-accordion > *:first-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing {
|
||
margin-top: 0;
|
||
}
|
||
.mat-accordion > .mat-expansion-panel-spacing:last-child, .mat-accordion > *:last-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing {
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
.mat-action-row {
|
||
border-top-style: solid;
|
||
border-top-width: 1px;
|
||
display: flex;
|
||
flex-direction: row;
|
||
justify-content: flex-end;
|
||
padding: 16px 8px 16px 24px;
|
||
border-top-color: var(--mat-expansion-actions-divider-color, var(--mat-sys-outline));
|
||
}
|
||
.mat-action-row .mat-button-base,
|
||
.mat-action-row .mat-mdc-button-base {
|
||
margin-left: 8px;
|
||
}
|
||
[dir=rtl] .mat-action-row .mat-button-base,
|
||
[dir=rtl] .mat-action-row .mat-mdc-button-base {
|
||
margin-left: 0;
|
||
margin-right: 8px;
|
||
}
|
||
`],encapsulation:2,changeDetection:0})}return n})();var $d=(()=>{class n{panel=f(jd,{host:!0});_element=f(Kt);_focusMonitor=f(hs);_changeDetectorRef=f(oe);_parentChangeSubscription=Oo.EMPTY;constructor(){f(Ta).load(Xr);let e=this.panel,t=f(GR,{optional:!0}),i=f(new cm("tabindex"),{optional:!0}),a=e.accordion?e.accordion._stateChanges.pipe(Yi(s=>!!(s.hideToggle||s.togglePosition))):eg;this.tabIndex=parseInt(i||"")||0,this._parentChangeSubscription=ro(e.opened,e.closed,a,e._inputChanges.pipe(Yi(s=>!!(s.hideToggle||s.disabled||s.togglePosition)))).subscribe(()=>this._changeDetectorRef.markForCheck()),e.closed.pipe(Yi(()=>e._containsFocus())).subscribe(()=>this._focusMonitor.focusVia(this._element,"program")),t&&(this.expandedHeight=t.expandedHeight,this.collapsedHeight=t.collapsedHeight)}expandedHeight;collapsedHeight;tabIndex=0;get disabled(){return this.panel.disabled}_toggle(){this.disabled||this.panel.toggle()}_isExpanded(){return this.panel.expanded}_getExpandedState(){return this.panel._getExpandedState()}_getPanelId(){return this.panel.id}_getTogglePosition(){return this.panel.togglePosition}_showToggle(){return!this.panel.hideToggle&&!this.panel.disabled}_getHeaderHeight(){let e=this._isExpanded();return e&&this.expandedHeight?this.expandedHeight:!e&&this.collapsedHeight?this.collapsedHeight:null}_keydown(e){switch(e.keyCode){case 32:case 13:gs(e)||(e.preventDefault(),this._toggle());break;default:this.panel.accordion&&this.panel.accordion._handleHeaderKeydown(e);return}}focus(e,t){e?this._focusMonitor.focusVia(this._element,e,t):this._element.nativeElement.focus(t)}ngAfterViewInit(){this._focusMonitor.monitor(this._element).subscribe(e=>{e&&this.panel.accordion&&this.panel.accordion._handleHeaderFocus(this)})}ngOnDestroy(){this._parentChangeSubscription.unsubscribe(),this._focusMonitor.stopMonitoring(this._element)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["mat-expansion-panel-header"]],hostAttrs:["role","button",1,"mat-expansion-panel-header","mat-focus-indicator"],hostVars:13,hostBindings:function(t,i){t&1&&_("click",function(){return i._toggle()})("keydown",function(s){return i._keydown(s)}),t&2&&(Ce("id",i.panel._headerId)("tabindex",i.disabled?-1:i.tabIndex)("aria-controls",i._getPanelId())("aria-expanded",i._isExpanded())("aria-disabled",i.panel.disabled),Tt("height",i._getHeaderHeight()),ne("mat-expanded",i._isExpanded())("mat-expansion-toggle-indicator-after",i._getTogglePosition()==="after")("mat-expansion-toggle-indicator-before",i._getTogglePosition()==="before"))},inputs:{expandedHeight:"expandedHeight",collapsedHeight:"collapsedHeight",tabIndex:[2,"tabIndex","tabIndex",e=>e==null?0:qo(e)]},ngContentSelectors:bie,decls:5,vars:3,consts:[[1,"mat-content"],[1,"mat-expansion-indicator"],["xmlns","http://www.w3.org/2000/svg","viewBox","0 -960 960 960","aria-hidden","true","focusable","false"],["d","M480-345 240-585l56-56 184 184 184-184 56 56-240 240Z"]],template:function(t,i){t&1&&(pi(Cie),ii(0,"span",0),Zt(1),Zt(2,1),Zt(3,2),Si(),T(4,xie,3,0,"span",1)),t&2&&(ne("mat-content-hide-toggle",!i._showToggle()),m(4),E(i._showToggle()?4:-1))},styles:[`.mat-expansion-panel-header {
|
||
display: flex;
|
||
flex-direction: row;
|
||
align-items: center;
|
||
padding: 0 24px;
|
||
border-radius: inherit;
|
||
}
|
||
.mat-expansion-panel-animations-enabled .mat-expansion-panel-header {
|
||
transition: height 225ms cubic-bezier(0.4, 0, 0.2, 1);
|
||
}
|
||
.mat-expansion-panel-header::before {
|
||
border-radius: inherit;
|
||
}
|
||
.mat-expansion-panel-header {
|
||
height: var(--mat-expansion-header-collapsed-state-height, 48px);
|
||
font-family: var(--mat-expansion-header-text-font, var(--mat-sys-title-medium-font));
|
||
font-size: var(--mat-expansion-header-text-size, var(--mat-sys-title-medium-size));
|
||
font-weight: var(--mat-expansion-header-text-weight, var(--mat-sys-title-medium-weight));
|
||
line-height: var(--mat-expansion-header-text-line-height, var(--mat-sys-title-medium-line-height));
|
||
letter-spacing: var(--mat-expansion-header-text-tracking, var(--mat-sys-title-medium-tracking));
|
||
}
|
||
.mat-expansion-panel-header.mat-expanded {
|
||
height: var(--mat-expansion-header-expanded-state-height, 64px);
|
||
}
|
||
.mat-expansion-panel-header[aria-disabled=true] {
|
||
color: var(--mat-expansion-header-disabled-state-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));
|
||
}
|
||
.mat-expansion-panel-header:not([aria-disabled=true]) {
|
||
cursor: pointer;
|
||
}
|
||
.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover {
|
||
background: var(--mat-expansion-header-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent));
|
||
}
|
||
@media (hover: none) {
|
||
.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover {
|
||
background: var(--mat-expansion-container-background-color, var(--mat-sys-surface));
|
||
}
|
||
}
|
||
.mat-expansion-panel .mat-expansion-panel-header:not([aria-disabled=true]).cdk-keyboard-focused, .mat-expansion-panel .mat-expansion-panel-header:not([aria-disabled=true]).cdk-program-focused {
|
||
background: var(--mat-expansion-header-focus-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent));
|
||
}
|
||
.mat-expansion-panel-header._mat-animation-noopable {
|
||
transition: none;
|
||
}
|
||
.mat-expansion-panel-header:focus, .mat-expansion-panel-header:hover {
|
||
outline: none;
|
||
}
|
||
.mat-expansion-panel-header.mat-expanded:focus, .mat-expansion-panel-header.mat-expanded:hover {
|
||
background: inherit;
|
||
}
|
||
.mat-expansion-panel-header.mat-expansion-toggle-indicator-before {
|
||
flex-direction: row-reverse;
|
||
}
|
||
.mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator {
|
||
margin: 0 16px 0 0;
|
||
}
|
||
[dir=rtl] .mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator {
|
||
margin: 0 0 0 16px;
|
||
}
|
||
|
||
.mat-content {
|
||
display: flex;
|
||
flex: 1;
|
||
flex-direction: row;
|
||
overflow: hidden;
|
||
}
|
||
.mat-content.mat-content-hide-toggle {
|
||
margin-right: 8px;
|
||
}
|
||
[dir=rtl] .mat-content.mat-content-hide-toggle {
|
||
margin-right: 0;
|
||
margin-left: 8px;
|
||
}
|
||
.mat-expansion-toggle-indicator-before .mat-content.mat-content-hide-toggle {
|
||
margin-left: 24px;
|
||
margin-right: 0;
|
||
}
|
||
[dir=rtl] .mat-expansion-toggle-indicator-before .mat-content.mat-content-hide-toggle {
|
||
margin-right: 24px;
|
||
margin-left: 0;
|
||
}
|
||
|
||
.mat-expansion-panel-header-title {
|
||
color: var(--mat-expansion-header-text-color, var(--mat-sys-on-surface));
|
||
}
|
||
|
||
.mat-expansion-panel-header-title,
|
||
.mat-expansion-panel-header-description {
|
||
display: flex;
|
||
flex-grow: 1;
|
||
flex-basis: 0;
|
||
margin-right: 16px;
|
||
align-items: center;
|
||
}
|
||
[dir=rtl] .mat-expansion-panel-header-title,
|
||
[dir=rtl] .mat-expansion-panel-header-description {
|
||
margin-right: 0;
|
||
margin-left: 16px;
|
||
}
|
||
.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title,
|
||
.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description {
|
||
color: inherit;
|
||
}
|
||
|
||
.mat-expansion-panel-header-description {
|
||
flex-grow: 2;
|
||
color: var(--mat-expansion-header-description-color, var(--mat-sys-on-surface-variant));
|
||
}
|
||
|
||
.mat-expansion-panel-animations-enabled .mat-expansion-indicator {
|
||
transition: transform 225ms cubic-bezier(0.4, 0, 0.2, 1);
|
||
}
|
||
.mat-expansion-panel-header.mat-expanded .mat-expansion-indicator {
|
||
transform: rotate(180deg);
|
||
}
|
||
.mat-expansion-indicator::after {
|
||
border-style: solid;
|
||
border-width: 0 2px 2px 0;
|
||
content: "";
|
||
padding: 3px;
|
||
transform: rotate(45deg);
|
||
vertical-align: middle;
|
||
color: var(--mat-expansion-header-indicator-color, var(--mat-sys-on-surface-variant));
|
||
display: var(--mat-expansion-legacy-header-indicator-display, none);
|
||
}
|
||
.mat-expansion-indicator svg {
|
||
width: 24px;
|
||
height: 24px;
|
||
margin: 0 -8px;
|
||
vertical-align: middle;
|
||
fill: var(--mat-expansion-header-indicator-color, var(--mat-sys-on-surface-variant));
|
||
display: var(--mat-expansion-header-indicator-display, inline-block);
|
||
}
|
||
|
||
@media (forced-colors: active) {
|
||
.mat-expansion-panel-content {
|
||
border-top: 1px solid;
|
||
border-top-left-radius: 0;
|
||
border-top-right-radius: 0;
|
||
}
|
||
}
|
||
`],encapsulation:2,changeDetection:0})}return n})(),qR=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["mat-panel-description"]],hostAttrs:[1,"mat-expansion-panel-header-description"]})}return n})(),Wm=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["mat-panel-title"]],hostAttrs:[1,"mat-expansion-panel-header-title"]})}return n})(),ph=(()=>{class n extends HR{_keyManager;_ownHeaders=new ec;_headers;hideToggle=!1;displayMode="default";togglePosition="after";ngAfterContentInit(){this._headers.changes.pipe(Di(this._headers)).subscribe(e=>{this._ownHeaders.reset(e.filter(t=>t.panel.accordion===this)),this._ownHeaders.notifyOnChanges()}),this._keyManager=new dg(this._ownHeaders).withWrap().withHomeAndEnd()}_handleHeaderKeydown(e){this._keyManager.onKeydown(e)}_handleHeaderFocus(e){this._keyManager.updateActiveItem(e)}ngOnDestroy(){super.ngOnDestroy(),this._keyManager?.destroy(),this._ownHeaders.destroy()}static \u0275fac=(()=>{let e;return function(i){return(e||(e=yi(n)))(i||n)}})();static \u0275dir=yt({type:n,selectors:[["mat-accordion"]],contentQueries:function(t,i,a){if(t&1&&Zi(a,$d,5),t&2){let s;gt(s=ht())&&(i._headers=s)}},hostAttrs:[1,"mat-accordion"],hostVars:2,hostBindings:function(t,i){t&2&&ne("mat-accordion-multi",i.multi)},inputs:{hideToggle:[2,"hideToggle","hideToggle",zt],displayMode:"displayMode",togglePosition:"togglePosition"},exportAs:["matAccordion"],features:[un([{provide:uE,useExisting:n}]),mi]})}return n})(),El=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=on({type:n});static \u0275inj=nn({imports:[T1,UC,Vi]})}return n})();var O1=(()=>{class n{httpClient=f(us);sanitizer=f(Pr);toasterService=f(re);cd=f(oe);thirdpartylicenses=z("");releasenotes=z("");ngOnInit(){this.httpClient.get(window.location.href+"/3rdpartylicenses.txt",{responseType:"text"}).subscribe({next:e=>{let t=e.replace(new RegExp(`
|
||
`,"g"),"<br />");this.thirdpartylicenses.set(this.sanitizer.bypassSecurityTrustHtml(t))},error:e=>{if(e.status===404)this.thirdpartylicenses.set("Download Solar-PuTTY");else{let t=e.error?.message||e.message||"Failed to load third party licenses";this.toasterService.error(t)}this.cd.markForCheck()}}),this.httpClient.get("ReleaseNotes.txt",{responseType:"text"}).subscribe({next:e=>{let t=e.replace(new RegExp(`
|
||
`,"g"),"<br />");this.releasenotes.set(this.sanitizer.bypassSecurityTrustHtml(t))},error:e=>{let t=e.error?.message||e.message||"Failed to load release notes";this.toasterService.error(t),this.cd.markForCheck()}})}goToDocumentation(){window.location.href="https://docs.gns3.com/docs-3.1-en"}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-help"]],decls:107,vars:2,consts:[[1,"help-page"],[1,"help-page__header"],[1,"help-page__title"],["mat-raised-button","","color","primary",1,"help-page__button",3,"click"],[1,"help-page__main"],[1,"help-page__overview"],[1,"help-page__overview-icon"],[1,"help-page__panel"],["multi",""],[1,"help-page__panel-title"],[1,"help-page__shortcuts"],[1,"help-page__shortcut"],["href","https://downloads.solarwinds.com/solarwinds/GNS3/Solar-PuTTY/Solar-PuTTY-Optional.exe",1,"help-page__link"],[3,"innerHTML"],[1,"help-page__release-notes",3,"innerHTML"]],template:function(t,i){t&1&&(r(0,"div",0)(1,"header",1)(2,"h1",2),c(3,"Help"),l(),r(4,"button",3),_("click",function(){return i.goToDocumentation()}),r(5,"mat-icon"),c(6,"open_in_new"),l(),c(7," Documentation "),l()(),r(8,"main",4)(9,"section",5)(10,"span",6)(11,"mat-icon"),c(12,"help_outline"),l()(),r(13,"div")(14,"h2"),c(15,"GNS3 Web UI help"),l(),r(16,"p"),c(17,"Find keyboard shortcuts, third-party component information, and release notes."),l()()(),r(18,"section",7)(19,"mat-accordion",8)(20,"mat-expansion-panel")(21,"mat-expansion-panel-header")(22,"mat-panel-title")(23,"span",9)(24,"mat-icon"),c(25,"keyboard"),l(),c(26," Useful shortcuts "),l()()(),r(27,"div",10)(28,"div",11)(29,"span")(30,"kbd"),c(31,"Ctrl"),l(),r(32,"kbd"),c(33,"+"),l()(),r(34,"span"),c(35,"Zoom in"),l()(),r(36,"div",11)(37,"span")(38,"kbd"),c(39,"Ctrl"),l(),r(40,"kbd"),c(41,"-"),l()(),r(42,"span"),c(43,"Zoom out"),l()(),r(44,"div",11)(45,"span")(46,"kbd"),c(47,"Ctrl"),l(),r(48,"kbd"),c(49,"0"),l()(),r(50,"span"),c(51,"Reset zoom"),l()(),r(52,"div",11)(53,"span")(54,"kbd"),c(55,"Ctrl"),l(),r(56,"kbd"),c(57,"H"),l()(),r(58,"span"),c(59,"Hide toolbar"),l()(),r(60,"div",11)(61,"span")(62,"kbd"),c(63,"Ctrl"),l(),r(64,"kbd"),c(65,"A"),l()(),r(66,"span"),c(67,"Select all map items"),l()(),r(68,"div",11)(69,"span")(70,"kbd"),c(71,"Ctrl"),l(),r(72,"kbd"),c(73,"Shift"),l(),r(74,"kbd"),c(75,"A"),l()(),r(76,"span"),c(77,"Deselect all map items"),l()(),r(78,"div",11)(79,"span")(80,"kbd"),c(81,"Ctrl"),l(),r(82,"kbd"),c(83,"Shift"),l(),r(84,"kbd"),c(85,"S"),l()(),r(86,"span"),c(87,"Open preferences"),l()()()(),r(88,"mat-expansion-panel")(89,"mat-expansion-panel-header")(90,"mat-panel-title")(91,"span",9)(92,"mat-icon"),c(93,"extension"),l(),c(94," Third-party components "),l()()(),r(95,"a",12)(96,"mat-icon"),c(97,"download"),l(),L(98,"span",13),l()(),r(99,"mat-expansion-panel")(100,"mat-expansion-panel-header")(101,"mat-panel-title")(102,"span",9)(103,"mat-icon"),c(104,"description"),l(),c(105," Release notes "),l()()(),L(106,"div",14),l()()()()()),t&2&&(m(98),v("innerHTML",i.thirdpartylicenses(),lf),m(8),v("innerHTML",i.releasenotes(),lf))},dependencies:[Y,he,El,ph,jd,$d,Wm,ie,ce],styles:["[_nghost-%COMP%]{display:block;width:100%;background:transparent}.help-page[_ngcontent-%COMP%]{animation:none}.help-page__header[_ngcontent-%COMP%], .help-page__main[_ngcontent-%COMP%]{max-width:1600px;margin-inline:auto}.help-page__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:24px 20px 16px}.help-page__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal;white-space:nowrap}button.help-page__button[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing)}.help-page__main[_ngcontent-%COMP%]{padding:0 20px 24px}.help-page__overview[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap);margin-bottom:var(--gns3-density-card-gap);padding:16px 18px;border:1px solid var(--mat-sys-outline-variant);border-radius:14px;background:var(--mat-sys-surface-container)}.help-page__overview[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:17px;font-weight:600}.help-page__overview[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:3px 0 0;color:var(--mat-sys-on-surface-variant);font-size:14px}.help-page__overview-icon[_ngcontent-%COMP%]{display:grid;flex:0 0 42px;width:42px;height:42px;place-items:center;border-radius:11px;color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.help-page__panel[_ngcontent-%COMP%]{overflow:hidden;border-radius:16px;background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none}.mat-expansion-panel[_ngcontent-%COMP%]{border-bottom:1px solid var(--mat-sys-outline-variant);border-radius:0;background:var(--mat-sys-surface);box-shadow:none}.mat-expansion-panel[_ngcontent-%COMP%]:last-child{border-bottom:0}.mat-expansion-panel-header[_ngcontent-%COMP%]{min-height:var(--gns3-density-section-header-height);padding-inline:20px;color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--mat-sys-primary-container) 28%,var(--mat-sys-surface))}.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-header[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary-container) 45%,var(--mat-sys-surface))}.mat-expansion-panel-header-title[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface)}.help-page__panel-title[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:var(--gns3-density-space-3);font-size:15px;font-weight:600}.help-page__panel-title[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.help-page__shortcuts[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;overflow:hidden;margin:4px 0 8px;border:1px solid var(--mat-sys-outline-variant);border-radius:12px;background:var(--mat-sys-outline-variant)}.help-page__shortcut[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;min-height:54px;gap:var(--gns3-density-card-gap);padding:10px 14px;color:var(--mat-sys-on-surface);background:var(--mat-sys-surface-container-low);font-size:14px}.help-page__shortcut[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]:first-child{display:flex;flex:0 0 auto;align-items:center;gap:5px}kbd[_ngcontent-%COMP%]{min-width:25px;padding:4px 7px;border:1px solid var(--mat-sys-outline-variant);border-bottom-width:2px;border-radius:6px;color:var(--mat-sys-on-surface);background:var(--mat-sys-surface-container-highest);font:inherit;font-size:12px;font-weight:600;line-height:1;text-align:center}.help-page__link[_ngcontent-%COMP%]{display:inline-flex;align-items:flex-start;max-width:100%;gap:8px;padding-block:8px;color:var(--mat-sys-primary);font-size:14px;text-decoration:none}.help-page__link[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{flex:0 0 auto;width:19px;height:19px;font-size:19px}.help-page__link[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{min-width:0;overflow-wrap:anywhere}.help-page__link[_ngcontent-%COMP%]:hover{text-decoration:underline}.help-page__release-notes[_ngcontent-%COMP%]{max-height:min(60vh,640px);overflow:auto;padding:8px 4px 12px;color:var(--mat-sys-on-surface);font-size:14px;line-height:1.6;overflow-wrap:anywhere}[data-density=compact][_nghost-%COMP%] button.help-page__button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.help-page__button[_ngcontent-%COMP%]{min-height:40px;height:40px}[data-density=compact][_nghost-%COMP%] .mat-expansion-panel-header[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .mat-expansion-panel-header[_ngcontent-%COMP%]{min-height:52px}@media(max-width:800px){.help-page__shortcuts[_ngcontent-%COMP%]{grid-template-columns:1fr}}@media(max-width:600px){.help-page__header[_ngcontent-%COMP%]{align-items:stretch;flex-direction:column;padding:20px 16px 12px}.help-page__main[_ngcontent-%COMP%]{padding-inline:16px}button.help-page__button[_ngcontent-%COMP%]{width:100%}.help-page__overview[_ngcontent-%COMP%]{align-items:flex-start}.help-page__shortcut[_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column;gap:8px}}"],changeDetection:0})}return n})();var D1=(()=>{class n{constructor(){}isWindows(){return navigator.platform.indexOf("Win")>-1}isLinux(){return navigator.platform.indexOf("Linux")>-1}isDarwin(){return navigator.platform.indexOf("Mac")>-1}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var I1=(()=>{class n{platformService;constructor(e){this.platformService=e}get(){return this.platformService.isWindows()?this.getForWindows():this.platformService.isDarwin()?this.getForDarwin():this.getForLinux()}getForWindows(){let e=[{name:"Wireshark",locations:["C:\\Program Files\\Wireshark\\Wireshark.exe"],type:"web",resource:"https://1.na.dl.wireshark.org/win64/all-versions/Wireshark-win64-2.6.3.exe",binary:"Wireshark.exe",sudo:!0,installation_arguments:[],installed:!1,installer:!0}],t={name:"SolarPuTTY",locations:["SolarPuTTY.exe","external\\SolarPuTTY.exe"],type:"web",resource:"",binary:"SolarPuTTY.exe",sudo:!1,installation_arguments:["--only-ask"],installed:!1,installer:!1};return zi.solarputty_download_url&&(t.resource=zi.solarputty_download_url,e.push(t)),e}getForLinux(){return[]}getForDarwin(){return[]}static \u0275fac=function(t){return new(t||n)(_e(D1))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var A1=(()=>{class n{externalSoftwareDefinition;constructor(e){this.externalSoftwareDefinition=e}list(){return this.externalSoftwareDefinition.get().map(t=>(t.installed=!1,t))}static \u0275fac=function(t){return new(t||n)(_e(I1))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Sie=(n,o)=>({hidden:n,lightTheme:o}),kie=/<a href="(.*)">(.*)<\/a><br\/>(.*)<br\/>\s*<button><a .*>(.*)<\/a>\s*<\/button>/i,N1=(()=>{class n{httpClient=f(us);themeService=f(Ni);location=f(ki);isVisible=z(!1);isLightThemeEnabled=z(!1);adUrl=z("https://try.solarwinds.com/gns3-free-toolset-giveaway?CMP=LEC-HAD-GNS3-SW_NA_X_NP_X_X_EN_STSGA_SW-ST-20200901_ST_OF1_TRY-NWSLTR");adBody=z("Network Config Generator makes it easy configure network devices, including VLANs without opening the CLI");buttonLabel=z("Check it out!");hide(){this.isVisible.set(!1)}ngOnInit(){this.location.path().includes("nodes")||(this.httpClient.get("https://servedbyadbutler.com/adserve/;ID=165803;size=0x0;setID=371476;type=json;").subscribe(e=>{if(e?.placements?.placement_1?.body)try{let t=e.placements.placement_1.body.replace(/(\r\n|\n|\r)/gm,""),i=kie.exec(t);this.adUrl.set(i[1].trim()),this.adBody.set(i[3].trim()),this.buttonLabel.set(i[4].trim())}catch{}this.isVisible.set(!0)},e=>{}),this.themeService.getActualTheme()==="light"?this.isLightThemeEnabled.set(!0):this.isLightThemeEnabled.set(!1),this.themeService.themeChanged.subscribe(()=>{this.themeService.getActualTheme()==="light"?this.isLightThemeEnabled.set(!0):this.isLightThemeEnabled.set(!1)}))}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-adbutler"]],decls:10,vars:8,consts:[[1,"ad",3,"ngClass"],[1,"adInnerContainer"],[1,"adBody"],["target","_blank",3,"href"],[1,"close-button",3,"click"]],template:function(t,i){t&1&&(r(0,"div",0)(1,"div",1)(2,"span",2)(3,"a",3),c(4),l()(),r(5,"button")(6,"a",3),c(7),l()()(),r(8,"mat-icon",4),_("click",function(){return i.hide()}),c(9,"close"),l()()),t&2&&(v("ngClass",Go(5,Sie,!i.isVisible(),i.isLightThemeEnabled())),m(3),v("href",i.adUrl(),Ba),m(),N(i.adBody()),m(2),v("href",i.adUrl(),Ba),m(),N(i.buttonLabel()))},dependencies:[fe,Ao,ie,ce],styles:[".ad[_ngcontent-%COMP%]{position:fixed;left:0;right:0;bottom:0;background-color:var(--mat-sys-primary-container);padding-top:10px;padding-bottom:10px;font-size:12px;font-weight:700;opacity:.8}.adInnerContainer[_ngcontent-%COMP%]{margin:auto;text-align:center}.adBody[_ngcontent-%COMP%]{padding-right:16px}.close-button[_ngcontent-%COMP%]{position:absolute;top:15px;right:15px;color:var(--mat-sys-on-surface)}.lightTheme[_ngcontent-%COMP%]{background-color:var(--mat-sys-surface)}.hidden[_ngcontent-%COMP%]{visibility:hidden}button[_ngcontent-%COMP%]{background-color:var(--mat-sys-primary);margin-top:2px;border:none;outline:none;color:var(--mat-sys-on-primary);font-weight:700;font-size:11px;padding:5px 15px;border-radius:6px}button[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary)}a[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface)}"],changeDetection:0})}return n})();function Pie(n,o){if(n&1&&(Fe(0),c(1),Re()),n&2){let e=h();m(),N(e.buttonText())}}var F1=(()=>{class n{software;installedChanged=new be;disabled=z(!1);readyToInstall=z(!0);buttonText=z("");constructor(){}ngOnInit(){this.updateButton()}ngOnChanges(){this.updateButton()}install(){this.disabled.set(!0),this.buttonText.set("Not supported")}updateButton(){this.disabled.set(this.software.installed),this.software.installed?this.buttonText.set("Installed"):this.buttonText.set("Install")}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-install-software"]],inputs:{software:"software"},outputs:{installedChanged:"installedChanged"},features:[Nn],decls:2,vars:2,consts:[["mat-button","","color","primary",3,"click","disabled"]],template:function(t,i){t&1&&(r(0,"button",0),_("click",function(){return i.install()}),T(1,Pie,2,1,"ng-container"),l()),t&2&&(v("disabled",i.disabled()),m(),E(i.readyToInstall()?1:-1))},dependencies:[fe,Y,he],encapsulation:2,changeDetection:0})}return n})();function Tie(n,o){n&1&&(r(0,"mat-header-cell"),c(1," Name "),l())}function Eie(n,o){if(n&1&&(Fe(0),c(1),Re()),n&2){let e=h().$implicit;m(),X(" ",e.name," ")}}function Oie(n,o){n&1&&(Fe(0),L(1,"app-adbutler",13),Re())}function Die(n,o){if(n&1&&(r(0,"mat-cell"),T(1,Eie,2,1,"ng-container"),T(2,Oie,2,0,"ng-container"),l()),n&2){let e=o.$implicit;m(),E(e.type!=="adbutler"?1:-1),m(),E(e.type==="adbutler"?2:-1)}}function Iie(n,o){n&1&&L(0,"mat-header-cell")}function Aie(n,o){if(n&1){let e=R();r(0,"app-install-software",16),_("installedChanged",function(i){y(e);let a=h(2);return w(a.onInstalled(i))}),l()}if(n&2){let e=h().$implicit;v("software",e)}}function Nie(n,o){if(n&1&&(r(0,"mat-cell",14),T(1,Aie,1,1,"app-install-software",15),l()),n&2){let e=o.$implicit;m(),E(e.type!=="adbutler"?1:-1)}}function Fie(n,o){n&1&&L(0,"mat-header-row")}function Rie(n,o){n&1&&L(0,"mat-row")}var R1=(()=>{class n{dataSource=z(null);displayedColumns=z(["name","actions"]);installedSoftwareService=f(A1);changeDetectorRef=f(oe);constructor(){}ngOnInit(){this.dataSource.set(new gE(this.installedSoftwareService))}onInstalled(e){this.dataSource()?.refresh(),this.changeDetectorRef.detectChanges()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-installed-software"]],decls:16,vars:3,consts:[["table",""],[1,"content"],[1,"default-header"],[1,"default-content"],[1,"container","mat-elevation-z8"],[3,"dataSource"],["matColumnDef","name"],[4,"matHeaderCellDef"],[4,"matCellDef"],["matColumnDef","actions"],["style","text-align: right",4,"matCellDef"],[4,"matHeaderRowDef"],[4,"matRowDef","matRowDefColumns"],["theme","dark"],[2,"text-align","right"],[3,"software"],[3,"installedChanged","software"]],template:function(t,i){t&1&&(r(0,"div",1)(1,"div",2)(2,"h1"),c(3,"Installed software"),l()(),r(4,"div",3)(5,"div",4)(6,"mat-table",5,0),Fe(8,6),se(9,Tie,2,0,"mat-header-cell",7)(10,Die,3,2,"mat-cell",8),Re(),Fe(11,9),se(12,Iie,1,0,"mat-header-cell",7)(13,Nie,2,1,"mat-cell",10),Re(),se(14,Fie,1,0,"mat-header-row",11)(15,Rie,1,0,"mat-row",12),l()()()()),t&2&&(m(6),v("dataSource",i.dataSource()),m(8),v("matHeaderRowDef",i.displayedColumns()),m(),v("matRowDefColumns",i.displayedColumns()))},dependencies:[fe,_n,bn,yn,kn,wn,xn,Pn,Mn,Sn,Tn,En,N1,F1],encapsulation:2,changeDetection:0})}return n})(),gE=class extends zp{installedSoftwareService;installed=new cn([]);constructor(o){super(),this.installedSoftwareService=o}connect(){return this.refresh(),this.installed}disconnect(){}refresh(){let o=this.installedSoftwareService.list();o.push({type:"adbutler"}),this.installed.next(o)}};var Ol=(()=>{class n{httpController;controller_id="";constructor(e){this.httpController=e}login(e,t,i){let a=new wA().set("username",t).set("password",i),s={headers:new BC().set("Content-Type","application/x-www-form-urlencoded")};return this.httpController.post(e,"/access/users/login",a,s)}getLoggedUser(e){return this.httpController.get(e,"/access/users/me").toPromise()}async getLoggedUserRefToken(e,t){return await this.httpController.post(e,"/access/users/authenticate",{username:t.username,password:t.password}).toPromise()}static \u0275fac=function(t){return new(t||n)(_e(sn))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var uh=(()=>{class n{httpController;constructor(e){this.httpController=e}get(e){return this.httpController.get(e,"/version")}static \u0275fac=function(t){return new(t||n)(_e(sn))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var ed=(()=>{class n{notificationService;currentController=null;constructor(e){this.notificationService=e}establishConnection(e){this.currentController&&this.currentController.id===e.id||(this.currentController&&this.disconnect(),this.notificationService.connectToComputeNotifications(e),this.currentController=e)}disconnect(){this.notificationService.disconnect(),this.currentController=null}getCurrentController(){return this.currentController}isConnectedTo(e){return this.currentController&&this.currentController.id===e.id}static \u0275fac=function(t){return new(t||n)(_e(_s))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var zie=["usernameInput"];function Lie(n,o){n&1&&L(0,"mat-icon",6)}function Vie(n,o){n&1&&L(0,"mat-icon",7)}function Bie(n,o){if(n&1&&(r(0,"span"),c(1),l()),n&2){let e=h();m(),X("v",e.version())}}function jie(n,o){if(n&1&&(r(0,"div",9)(1,"mat-icon",26),c(2,"storage"),l(),r(3,"div",27)(4,"span",28),c(5),l(),r(6,"span",29),c(7),l()()()),n&2){let e=h();m(5),N(e.controllerName),m(2),N(e.controllerAddress)}}function $ie(n,o){n&1&&(r(0,"mat-error"),c(1,"Username is required"),l())}function Hie(n,o){n&1&&(r(0,"mat-error"),c(1,"Password is required"),l())}function Uie(n,o){n&1&&(r(0,"div",16)(1,"mat-icon",30),c(2,"warning"),l(),r(3,"span"),c(4,"Caps Lock is on"),l()())}function Wie(n,o){n&1&&(L(0,"mat-progress-spinner",31),r(1,"span"),c(2,"Logging in\u2026"),l())}function Gie(n,o){n&1&&(r(0,"span"),c(1,"Login"),l())}function qie(n,o){n&1&&L(0,"mat-icon",24)}function Qie(n,o){n&1&&L(0,"mat-icon",25)}var z1=(()=>{class n{loginService=f(Ol);controllerService=f(_t);route=f($t);router=f(Ft);toasterService=f(re);versionService=f(uh);themeService=f(Ni);connectionManager=f(ed);cd=f(oe);controller;returnUrl=z("");usernameInput;version=z("");isLoading=z(!1);hidePassword=z(!0);isCapsLockOn=z(!1);isRememberMeChecked=z(!1);currentYear=new Date().getFullYear();isLightThemeEnabled=Ne(()=>this.themeService.getActualTheme()==="light");loginForm=new QC({username:new Ec("",{nonNullable:!0,validators:[Ue.required]}),password:new Ec("",{nonNullable:!0,validators:[Ue.required]})});ngOnInit(){let e=this.route.snapshot.paramMap.get("controller_id");this.returnUrl.set(this.route.snapshot.queryParams.returnUrl||"/"),this.controllerService.get(parseInt(e,10)).then(t=>{this.controller=t,t.authToken&&this.router.navigate(["/controller",this.controller.id,"systemstatus"]),this.versionService.get(this.controller).subscribe({next:i=>{this.version.set(i.version)},error:i=>{let a=i.error?.message||i.message||"Failed to load version";this.toasterService.error(a),this.cd.markForCheck()}})},t=>{let i=t.error?.message||t.message||"Failed to load controller";this.toasterService.error(i),this.cd.markForCheck()}),this.loadRememberMeData(),setTimeout(()=>{this.usernameInput&&this.usernameInput.nativeElement.focus()},100)}loadRememberMeData(){let e=localStorage.getItem("isRememberMe");if(e)try{let t=JSON.parse(e);t.isRememberMe&&(this.loginForm.controls.username.setValue(t.username),this.isRememberMeChecked.set(!0))}catch(t){console.error("Failed to parse remember me data",t)}}togglePasswordVisibility(){this.hidePassword.update(e=>!e)}onCapsLock(e){this.isCapsLockOn.set(e.getModifierState&&e.getModifierState("CapsLock"))}login(){if(this.loginForm.invalid){this.toasterService.error("Please enter username and password");return}let e=this.loginForm.value.username,t=this.loginForm.value.password;this.isLoading.set(!0),this.loginService.login(this.controller,e,t).subscribe({next:async i=>{let a=this.controller;a.authToken=i.access_token,i.refresh_token&&localStorage.setItem(`refresh_token_${a.id}`,i.refresh_token),a.username=e,a.password=t,a.tokenExpired=!1,await this.controllerService.update(a),this.connectionManager.establishConnection(a),this.handleRememberMe(e),this.isLoading.set(!1),this.cd.markForCheck(),this.returnUrl().length<=1?this.router.navigate(["/controller",this.controller.id,"systemstatus"]):this.router.navigateByUrl(this.returnUrl())},error:i=>{this.isLoading.set(!1);let a=i.error?.message||i.message||"Authentication failed";this.toasterService.error(a),this.cd.markForCheck()}})}handleRememberMe(e){if(this.isRememberMeChecked()){let t={username:e,isRememberMe:!0};localStorage.setItem("isRememberMe",JSON.stringify(t))}else localStorage.removeItem("isRememberMe")}onRememberMeChange(e){this.isRememberMeChecked.set(e)}get controllerName(){return this.controller?.name||""}get controllerAddress(){return this.controller?`${this.controller.host}:${this.controller.port}`:""}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-login"]],viewQuery:function(t,i){if(t&1&&Kn(zie,5),t&2){let a;gt(a=ht())&&(i.usernameInput=a.first)}},decls:46,vars:19,consts:[["usernameInput",""],[1,"login-page"],[1,"login-page__main"],["appearance","outlined",1,"login-card"],[1,"login-card__header"],[1,"login-card__logo"],["svgIcon","gns3",1,"login-card__icon"],["svgIcon","gns3black",1,"login-card__icon"],[1,"login-card__title"],[1,"login-card__controller-info"],[1,"login-card__form",3,"ngSubmit","formGroup"],["appearance","outline","subscriptSizing","dynamic",1,"login-card__form-field"],["matPrefix","",1,"login-card__field-icon"],["matInput","","formControlName","username","autocomplete","username"],["matInput","","formControlName","password","autocomplete","current-password",3,"keyup","type"],["mat-icon-button","","matSuffix","","type","button",1,"login-card__visibility-button",3,"click","matTooltip"],["role","status",1,"login-card__caps-lock-warning"],["color","primary",1,"login-card__checkbox",3,"change","checked"],["type","submit","mat-raised-button","","color","primary",1,"login-card__submit-button",3,"disabled"],[1,"login-page__footer"],[1,"login-page__social"],["mat-icon-button","","href","https://github.com/GNS3","target","_blank","rel","noopener noreferrer","matTooltip","GitHub","aria-label","GNS3 on GitHub"],["svgIcon","github"],["mat-icon-button","","href","https://www.gns3.com/","target","_blank","rel","noopener noreferrer","matTooltip","Website","aria-label","GNS3 website"],["svgIcon","gns3"],["svgIcon","gns3black"],[1,"login-card__controller-icon"],[1,"login-card__controller-details"],[1,"login-card__controller-name"],[1,"login-card__controller-address"],[1,"login-card__warning-icon"],["diameter","20","mode","indeterminate",1,"login-card__spinner"]],template:function(t,i){t&1&&(r(0,"div",1)(1,"main",2)(2,"mat-card",3)(3,"div",4)(4,"div",5),T(5,Lie,1,0,"mat-icon",6),T(6,Vie,1,0,"mat-icon",7),r(7,"div",8)(8,"h1"),c(9,"GNS3"),l(),T(10,Bie,2,1,"span"),l()()(),T(11,jie,8,2,"div",9),r(12,"form",10),_("ngSubmit",function(){return i.login()}),r(13,"mat-form-field",11)(14,"mat-label"),c(15,"Username"),l(),r(16,"mat-icon",12),c(17,"person"),l(),L(18,"input",13,0),T(20,$ie,2,0,"mat-error"),l(),r(21,"mat-form-field",11)(22,"mat-label"),c(23,"Password"),l(),r(24,"mat-icon",12),c(25,"lock"),l(),r(26,"input",14),_("keyup",function(s){return i.onCapsLock(s)}),l(),r(27,"button",15),_("click",function(){return i.togglePasswordVisibility()}),r(28,"mat-icon"),c(29),l()(),T(30,Hie,2,0,"mat-error"),l(),T(31,Uie,5,0,"div",16),r(32,"mat-checkbox",17),_("change",function(s){return i.onRememberMeChange(s.checked)}),c(33," Remember me "),l(),r(34,"button",18),T(35,Wie,3,0)(36,Gie,2,0,"span"),l()()(),r(37,"footer",19)(38,"div",20)(39,"a",21),L(40,"mat-icon",22),l(),r(41,"a",23),T(42,qie,1,0,"mat-icon",24),T(43,Qie,1,0,"mat-icon",25),l()(),r(44,"span"),c(45),l()()()()),t&2&&(m(5),E(i.isLightThemeEnabled()?-1:5),m(),E(i.isLightThemeEnabled()?6:-1),m(4),E(i.version()?10:-1),m(),E(i.controllerName?11:-1),m(),v("formGroup",i.loginForm),m(8),E(i.loginForm.controls.username.hasError("required")?20:-1),m(6),v("type",i.hidePassword()?"password":"text"),m(),v("matTooltip",i.hidePassword()?"Show password":"Hide password"),Ce("aria-label",i.hidePassword()?"Show password":"Hide password"),m(2),N(i.hidePassword()?"visibility_off":"visibility"),m(),E(i.loginForm.controls.password.hasError("required")?30:-1),m(),E(i.isCapsLockOn()?31:-1),m(),v("checked",i.isRememberMeChecked()),m(2),v("disabled",i.isLoading()),m(),E(i.isLoading()?35:36),m(7),E(i.isLightThemeEnabled()?-1:42),m(),E(i.isLightThemeEnabled()?43:-1),m(2),Un("GNS3 Web-UI \xA92018-",i.currentYear," v",i.version()))},dependencies:[It,Ct,At,Nt,vt,Ut,Yt,hn,Zn,we,Pe,Ve,Wn,Bi,oi,ye,Ee,Rt,Gt,Y,he,Be,ie,ce,rt,mt,st,pt],styles:["[_nghost-%COMP%]{display:block;min-height:100dvh;color:var(--mat-sys-on-background);background:var(--mat-sys-background)}.login-page[_ngcontent-%COMP%]{position:relative;box-sizing:border-box;min-height:100dvh;overflow:hidden auto;background:radial-gradient(circle at 18% 12%,color-mix(in srgb,var(--mat-sys-primary-container) 72%,transparent),transparent 34%),radial-gradient(circle at 86% 88%,color-mix(in srgb,var(--mat-sys-secondary-container) 58%,transparent),transparent 34%),var(--mat-sys-background)}.login-page__main[_ngcontent-%COMP%]{display:flex;width:100%;box-sizing:border-box;min-height:100dvh;align-items:center;justify-content:center;flex-direction:column;gap:24px;padding:32px 24px}.login-card[_ngcontent-%COMP%]{display:flex;width:min(460px,100%);box-sizing:border-box;flex-direction:column;gap:22px;padding:32px;border-color:var(--mat-sys-outline-variant);border-radius:20px;background:color-mix(in srgb,var(--mat-sys-surface-container-low) 94%,transparent);box-shadow:0 18px 48px color-mix(in srgb,var(--mat-sys-shadow) 18%,transparent),0 3px 10px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent);backdrop-filter:blur(18px);animation:_ngcontent-%COMP%_login-card-enter .24s ease-out}.login-card__header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:22px}.login-card__logo[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;gap:14px}.login-card__icon[_ngcontent-%COMP%]{display:grid;width:58px;height:58px;flex:0 0 58px;place-items:center;overflow:visible;font-size:58px}.login-card__title[_ngcontent-%COMP%]{min-width:0}.login-card__title[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-family:var(--mat-sys-display-small-font);font-size:32px;font-weight:600;line-height:1.1}.login-card__title[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{display:block;overflow:hidden;margin-top:3px;color:var(--mat-sys-on-surface-variant);font-size:13px;text-overflow:ellipsis;white-space:nowrap}.login-card__controller-info[_ngcontent-%COMP%]{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:12px;padding:12px 14px;border:1px solid var(--mat-sys-outline-variant);border-radius:12px;background:var(--mat-sys-surface-container)}.login-card__controller-icon[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.login-card__controller-details[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column;gap:2px}.login-card__controller-name[_ngcontent-%COMP%], .login-card__controller-address[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.login-card__controller-name[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:14px;font-weight:600}.login-card__controller-address[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:12px}.login-card__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:14px}.login-card__form-field[_ngcontent-%COMP%]{width:100%}.login-card__field-icon[_ngcontent-%COMP%]{margin-right:8px;color:var(--mat-sys-on-surface-variant)}.login-card__visibility-button[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant)}.login-card__caps-lock-warning[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:8px;color:var(--mat-sys-on-error-container);background:var(--mat-sys-error-container);font-size:13px}.login-card__warning-icon[_ngcontent-%COMP%]{width:18px;height:18px;font-size:18px}.login-card__checkbox[_ngcontent-%COMP%]{align-self:flex-start}.login-card__submit-button[_ngcontent-%COMP%]{width:100%;border-radius:8px;font-weight:600}.login-card__submit-button[_ngcontent-%COMP%] .login-card__spinner[_ngcontent-%COMP%]{margin-right:8px}.login-page__footer[_ngcontent-%COMP%]{display:flex;width:min(460px,100% - 40px);box-sizing:border-box;align-items:center;justify-content:center;flex-direction:column;gap:16px;margin:0;padding:0;color:var(--mat-sys-on-surface-variant);font-size:12px}.login-page__social[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px}.login-page__social[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container)}.login-page__social[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{color:var(--mat-sys-primary);background:var(--mat-sys-surface-container-high)}.login-page__social[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:19px;height:19px;overflow:visible;font-size:19px}[data-density=compact][_nghost-%COMP%] .login-page__main[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .login-page__main[_ngcontent-%COMP%]{gap:16px;padding:20px}[data-density=compact][_nghost-%COMP%] .login-page__footer[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .login-page__footer[_ngcontent-%COMP%]{width:min(420px,100%);gap:6px}[data-density=compact][_nghost-%COMP%] .login-card[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .login-card[_ngcontent-%COMP%]{width:min(420px,100%);gap:14px;padding:22px 24px;border-radius:16px}[data-density=compact][_nghost-%COMP%] .login-card__header[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .login-card__header[_ngcontent-%COMP%]{gap:14px}[data-density=compact][_nghost-%COMP%] .login-card__icon[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .login-card__icon[_ngcontent-%COMP%]{width:46px;height:46px;flex-basis:46px;font-size:46px}[data-density=compact][_nghost-%COMP%] .login-card__title[_ngcontent-%COMP%] h1[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .login-card__title[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{font-size:28px}[data-density=compact][_nghost-%COMP%] .login-card__controller-info[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .login-card__controller-info[_ngcontent-%COMP%]{padding:8px 10px}[data-density=compact][_nghost-%COMP%] .login-card__form[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .login-card__form[_ngcontent-%COMP%]{gap:9px}[data-density=compact][_nghost-%COMP%] .login-card__caps-lock-warning[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .login-card__caps-lock-warning[_ngcontent-%COMP%]{padding-block:6px}@media(max-width:600px){.login-page__main[_ngcontent-%COMP%]{padding:18px 14px}.login-card[_ngcontent-%COMP%]{gap:18px;padding:24px 20px;border-radius:16px}.login-page__footer[_ngcontent-%COMP%]{width:calc(100% - 28px)}}@media(prefers-reduced-motion:reduce){.login-card[_ngcontent-%COMP%]{animation:none}}@keyframes _ngcontent-%COMP%_login-card-enter{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}"],changeDetection:0})}return n})();var QR=(()=>{class n{constructor(){}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-page-not-found"]],decls:7,vars:0,consts:[[1,"content"],[1,"default-header"],["mat-button","","routerLink","/controllers"]],template:function(t,i){t&1&&(r(0,"div",0)(1,"div",1),L(2,"br"),r(3,"h1"),c(4,"404 Page not found"),l(),r(5,"button",2),c(6,"Navigate to homepage"),l()()())},dependencies:[Co],styles:["div[_ngcontent-%COMP%]{text-align:center}"],changeDetection:0})}return n})();function ji(n,o,e){(history.state?.navigationId??0)>1?n.back():o.navigate(e)}var Kie=["input"],Xie=["formField"],Yie=["*"],L1=class{source;value;constructor(o,e){this.source=o,this.value=e}},Zie={provide:Pd,useExisting:Pc(()=>la),multi:!0},KR=new mn("MatRadioGroup"),Jie=new mn("mat-radio-default-options",{providedIn:"root",factory:()=>({color:"accent",disabledInteractive:!1})}),la=(()=>{class n{_changeDetector=f(oe);_value=null;_name=f(ua).getId("mat-radio-group-");_selected=null;_isInitialized=!1;_labelPosition="after";_disabled=!1;_required=!1;_buttonChanges;_controlValueAccessorChangeFn=()=>{};onTouched=()=>{};change=new be;_radios;color;get name(){return this._name}set name(e){this._name=e,this._updateRadioButtonNames()}get labelPosition(){return this._labelPosition}set labelPosition(e){this._labelPosition=e==="before"?"before":"after",this._markRadiosForCheck()}get value(){return this._value}set value(e){this._value!==e&&(this._value=e,this._updateSelectedRadioFromValue(),this._checkSelectedRadioButton())}_checkSelectedRadioButton(){this._selected&&!this._selected.checked&&(this._selected.checked=!0)}get selected(){return this._selected}set selected(e){this._selected=e,this.value=e?e.value:null,this._checkSelectedRadioButton()}get disabled(){return this._disabled}set disabled(e){this._disabled=e,this._markRadiosForCheck()}get required(){return this._required}set required(e){this._required=e,this._markRadiosForCheck()}get disabledInteractive(){return this._disabledInteractive}set disabledInteractive(e){this._disabledInteractive=e,this._markRadiosForCheck()}_disabledInteractive=!1;constructor(){}ngAfterContentInit(){this._isInitialized=!0,this._buttonChanges=this._radios.changes.subscribe(()=>{this.selected&&!this._radios.find(e=>e===this.selected)&&(this._selected=null)})}ngOnDestroy(){this._buttonChanges?.unsubscribe()}_touch(){this.onTouched&&this.onTouched()}_updateRadioButtonNames(){this._radios&&this._radios.forEach(e=>{e.name=this.name,e._markForCheck()})}_updateSelectedRadioFromValue(){let e=this._selected!==null&&this._selected.value===this._value;this._radios&&!e&&(this._selected=null,this._radios.forEach(t=>{t.checked=this.value===t.value,t.checked&&(this._selected=t)}))}_emitChangeEvent(){this._isInitialized&&this.change.emit(new L1(this._selected,this._value))}_markRadiosForCheck(){this._radios&&this._radios.forEach(e=>e._markForCheck())}writeValue(e){this.value=e,this._changeDetector.markForCheck()}registerOnChange(e){this._controlValueAccessorChangeFn=e}registerOnTouched(e){this.onTouched=e}setDisabledState(e){this.disabled=e,this._changeDetector.markForCheck()}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["mat-radio-group"]],contentQueries:function(t,i,a){if(t&1&&Zi(a,Zo,5),t&2){let s;gt(s=ht())&&(i._radios=s)}},hostAttrs:["role","radiogroup",1,"mat-mdc-radio-group"],inputs:{color:"color",name:"name",labelPosition:"labelPosition",value:"value",selected:"selected",disabled:[2,"disabled","disabled",zt],required:[2,"required","required",zt],disabledInteractive:[2,"disabledInteractive","disabledInteractive",zt]},outputs:{change:"change"},exportAs:["matRadioGroup"],features:[un([Zie,{provide:KR,useExisting:n}])]})}return n})(),Zo=(()=>{class n{_elementRef=f(Kt);_changeDetector=f(oe);_focusMonitor=f(hs);_radioDispatcher=f(pg);_defaultOptions=f(Jie,{optional:!0});_ngZone=f(Gi);_renderer=f(qi);_uniqueId=f(ua).getId("mat-radio-");_cleanupClick;id=this._uniqueId;name;ariaLabel;ariaLabelledby;ariaDescribedby;disableRipple=!1;tabIndex=0;get checked(){return this._checked}set checked(e){this._checked!==e&&(this._checked=e,e&&this.radioGroup&&this.radioGroup.value!==this.value?this.radioGroup.selected=this:!e&&this.radioGroup&&this.radioGroup.value===this.value&&(this.radioGroup.selected=null),e&&this._radioDispatcher.notify(this.id,this.name),this._changeDetector.markForCheck())}get value(){return this._value}set value(e){this._value!==e&&(this._value=e,this.radioGroup!==null&&(this.checked||(this.checked=this.radioGroup.value===e),this.checked&&(this.radioGroup.selected=this)))}get labelPosition(){return this._labelPosition||this.radioGroup&&this.radioGroup.labelPosition||"after"}set labelPosition(e){this._labelPosition=e}_labelPosition;get disabled(){return this._disabled||this.radioGroup!==null&&this.radioGroup.disabled}set disabled(e){this._setDisabled(e)}get required(){return this._required||this.radioGroup&&this.radioGroup.required}set required(e){e!==this._required&&this._changeDetector.markForCheck(),this._required=e}get color(){return this._color||this.radioGroup&&this.radioGroup.color||this._defaultOptions&&this._defaultOptions.color||"accent"}set color(e){this._color=e}_color;get disabledInteractive(){return this._disabledInteractive||this.radioGroup!==null&&this.radioGroup.disabledInteractive}set disabledInteractive(e){this._disabledInteractive=e}_disabledInteractive;change=new be;radioGroup;get inputId(){return`${this.id||this._uniqueId}-input`}_checked=!1;_disabled=!1;_required=!1;_value=null;_removeUniqueSelectionListener=()=>{};_previousTabIndex;_inputElement;_rippleTrigger;_noopAnimations=$a();_injector=f(xa);constructor(){f(Ta).load(Xr);let e=f(KR,{optional:!0}),t=f(new cm("tabindex"),{optional:!0});this.radioGroup=e,this._disabledInteractive=this._defaultOptions?.disabledInteractive??!1,t&&(this.tabIndex=qo(t,0))}focus(e,t){t?this._focusMonitor.focusVia(this._inputElement,t,e):this._inputElement.nativeElement.focus(e)}_markForCheck(){this._changeDetector.markForCheck()}ngOnInit(){this.radioGroup&&(this.checked=this.radioGroup.value===this._value,this.checked&&(this.radioGroup.selected=this),this.name=this.radioGroup.name),this._removeUniqueSelectionListener=this._radioDispatcher.listen((e,t)=>{e!==this.id&&t===this.name&&(this.checked=!1)})}ngDoCheck(){this._updateTabIndex()}ngAfterViewInit(){this._updateTabIndex(),this._focusMonitor.monitor(this._elementRef,!0).subscribe(e=>{!e&&this.radioGroup&&this.radioGroup._touch()}),this._ngZone.runOutsideAngular(()=>{this._cleanupClick=this._renderer.listen(this._inputElement.nativeElement,"click",this._onInputClick)})}ngOnDestroy(){this._cleanupClick?.(),this._focusMonitor.stopMonitoring(this._elementRef),this._removeUniqueSelectionListener()}_emitChangeEvent(){this.change.emit(new L1(this,this._value))}_isRippleDisabled(){return this.disableRipple||this.disabled}_onInputInteraction(e){if(e.stopPropagation(),!this.checked&&!this.disabled){let t=this.radioGroup&&this.value!==this.radioGroup.value;this.checked=!0,this._emitChangeEvent(),this.radioGroup&&(this.radioGroup._controlValueAccessorChangeFn(this.value),t&&this.radioGroup._emitChangeEvent())}}_onTouchTargetClick(e){this._onInputInteraction(e),(!this.disabled||this.disabledInteractive)&&this._inputElement?.nativeElement.focus()}_setDisabled(e){this._disabled!==e&&(this._disabled=e,this._changeDetector.markForCheck())}_onInputClick=e=>{this.disabled&&this.disabledInteractive&&e.preventDefault()};_updateTabIndex(){let e=this.radioGroup,t;if(!e||!e.selected||this.disabled?t=this.tabIndex:t=e.selected===this?this.tabIndex:-1,t!==this._previousTabIndex){let i=this._inputElement?.nativeElement;i&&(i.setAttribute("tabindex",t+""),this._previousTabIndex=t,Ya(()=>{queueMicrotask(()=>{e&&e.selected&&e.selected!==this&&document.activeElement===i&&(e.selected?._inputElement.nativeElement.focus(),document.activeElement===i&&this._inputElement.nativeElement.blur())})},{injector:this._injector}))}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["mat-radio-button"]],viewQuery:function(t,i){if(t&1&&Kn(Kie,5)(Xie,7,Kt),t&2){let a;gt(a=ht())&&(i._inputElement=a.first),gt(a=ht())&&(i._rippleTrigger=a.first)}},hostAttrs:[1,"mat-mdc-radio-button"],hostVars:19,hostBindings:function(t,i){t&1&&_("focus",function(){return i._inputElement.nativeElement.focus()}),t&2&&(Ce("id",i.id)("tabindex",null)("aria-label",null)("aria-labelledby",null)("aria-describedby",null),ne("mat-primary",i.color==="primary")("mat-accent",i.color==="accent")("mat-warn",i.color==="warn")("mat-mdc-radio-checked",i.checked)("mat-mdc-radio-disabled",i.disabled)("mat-mdc-radio-disabled-interactive",i.disabledInteractive)("_mat-animation-noopable",i._noopAnimations))},inputs:{id:"id",name:"name",ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],ariaDescribedby:[0,"aria-describedby","ariaDescribedby"],disableRipple:[2,"disableRipple","disableRipple",zt],tabIndex:[2,"tabIndex","tabIndex",e=>e==null?0:qo(e)],checked:[2,"checked","checked",zt],value:"value",labelPosition:"labelPosition",disabled:[2,"disabled","disabled",zt],required:[2,"required","required",zt],color:"color",disabledInteractive:[2,"disabledInteractive","disabledInteractive",zt]},outputs:{change:"change"},exportAs:["matRadioButton"],ngContentSelectors:Yie,decls:13,vars:17,consts:[["formField",""],["input",""],["mat-internal-form-field","",3,"labelPosition"],[1,"mdc-radio"],["aria-hidden","true",1,"mat-mdc-radio-touch-target",3,"click"],["type","radio","aria-invalid","false",1,"mdc-radio__native-control",3,"change","id","checked","disabled","required"],["aria-hidden","true",1,"mdc-radio__background"],[1,"mdc-radio__outer-circle"],[1,"mdc-radio__inner-circle"],["mat-ripple","","aria-hidden","true",1,"mat-radio-ripple","mat-focus-indicator",3,"matRippleTrigger","matRippleDisabled","matRippleCentered"],[1,"mat-ripple-element","mat-radio-persistent-ripple"],[1,"mdc-label",3,"for"]],template:function(t,i){t&1&&(pi(),r(0,"div",2,0)(2,"div",3)(3,"div",4),_("click",function(s){return i._onTouchTargetClick(s)}),l(),r(4,"input",5,1),_("change",function(s){return i._onInputInteraction(s)}),l(),r(6,"div",6),L(7,"div",7)(8,"div",8),l(),r(9,"div",9),L(10,"div",10),l()(),r(11,"label",11),Zt(12),l()()),t&2&&(v("labelPosition",i.labelPosition),m(2),ne("mdc-radio--disabled",i.disabled),m(2),v("id",i.inputId)("checked",i.checked)("disabled",i.disabled&&!i.disabledInteractive)("required",i.required),Ce("name",i.name)("value",i.value)("aria-label",i.ariaLabel)("aria-labelledby",i.ariaLabelledby)("aria-describedby",i.ariaDescribedby)("aria-disabled",i.disabled&&i.disabledInteractive?"true":null),m(5),v("matRippleTrigger",i._rippleTrigger.nativeElement)("matRippleDisabled",i._isRippleDisabled())("matRippleCentered",!0),m(2),v("for",i.inputId))},dependencies:[um,ob],styles:[`.mat-mdc-radio-button {
|
||
-webkit-tap-highlight-color: transparent;
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio {
|
||
display: inline-block;
|
||
position: relative;
|
||
flex: 0 0 auto;
|
||
box-sizing: content-box;
|
||
width: 20px;
|
||
height: 20px;
|
||
cursor: pointer;
|
||
will-change: opacity, transform, border-color, color;
|
||
padding: calc((var(--mat-radio-state-layer-size, 40px) - 20px) / 2);
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio:hover > .mdc-radio__native-control:not([disabled]):not(:focus) ~ .mdc-radio__background::before {
|
||
opacity: 0.04;
|
||
transform: scale(1);
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio:hover > .mdc-radio__native-control:not([disabled]) ~ .mdc-radio__background > .mdc-radio__outer-circle {
|
||
border-color: var(--mat-radio-unselected-hover-icon-color, var(--mat-sys-on-surface));
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio:hover > .mdc-radio__native-control:enabled:checked + .mdc-radio__background > .mdc-radio__outer-circle {
|
||
border-color: var(--mat-radio-selected-hover-icon-color, var(--mat-sys-primary));
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio:hover > .mdc-radio__native-control:enabled:checked + .mdc-radio__background > .mdc-radio__inner-circle {
|
||
background-color: var(--mat-radio-selected-hover-icon-color, var(--mat-sys-primary, currentColor));
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio:active > .mdc-radio__native-control:enabled:not(:checked) + .mdc-radio__background > .mdc-radio__outer-circle {
|
||
border-color: var(--mat-radio-unselected-pressed-icon-color, var(--mat-sys-on-surface));
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio:active > .mdc-radio__native-control:enabled:checked + .mdc-radio__background > .mdc-radio__outer-circle {
|
||
border-color: var(--mat-radio-selected-pressed-icon-color, var(--mat-sys-primary));
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio:active > .mdc-radio__native-control:enabled:checked + .mdc-radio__background > .mdc-radio__inner-circle {
|
||
background-color: var(--mat-radio-selected-pressed-icon-color, var(--mat-sys-primary, currentColor));
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio__background {
|
||
display: inline-block;
|
||
position: relative;
|
||
box-sizing: border-box;
|
||
width: 20px;
|
||
height: 20px;
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio__background::before {
|
||
position: absolute;
|
||
transform: scale(0, 0);
|
||
border-radius: 50%;
|
||
opacity: 0;
|
||
pointer-events: none;
|
||
content: "";
|
||
transition: opacity 90ms cubic-bezier(0.4, 0, 0.6, 1), transform 90ms cubic-bezier(0.4, 0, 0.6, 1);
|
||
width: var(--mat-radio-state-layer-size, 40px);
|
||
height: var(--mat-radio-state-layer-size, 40px);
|
||
top: calc(-1 * (var(--mat-radio-state-layer-size, 40px) - 20px) / 2);
|
||
left: calc(-1 * (var(--mat-radio-state-layer-size, 40px) - 20px) / 2);
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio__outer-circle {
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
box-sizing: border-box;
|
||
width: 100%;
|
||
height: 100%;
|
||
border-width: 2px;
|
||
border-style: solid;
|
||
border-radius: 50%;
|
||
transition: border-color 90ms cubic-bezier(0.4, 0, 0.6, 1);
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio__inner-circle {
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
box-sizing: border-box;
|
||
width: 100%;
|
||
height: 100%;
|
||
transform: scale(0);
|
||
border-radius: 50%;
|
||
transition: transform 90ms cubic-bezier(0.4, 0, 0.6, 1), background-color 90ms cubic-bezier(0.4, 0, 0.6, 1);
|
||
}
|
||
@media (forced-colors: active) {
|
||
.mat-mdc-radio-button .mdc-radio__inner-circle {
|
||
background-color: CanvasText !important;
|
||
}
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio__native-control {
|
||
position: absolute;
|
||
margin: 0;
|
||
padding: 0;
|
||
opacity: 0;
|
||
top: 0;
|
||
right: 0;
|
||
left: 0;
|
||
cursor: inherit;
|
||
z-index: 1;
|
||
width: var(--mat-radio-state-layer-size, 40px);
|
||
height: var(--mat-radio-state-layer-size, 40px);
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio__native-control:checked + .mdc-radio__background, .mat-mdc-radio-button .mdc-radio__native-control:disabled + .mdc-radio__background {
|
||
transition: opacity 90ms cubic-bezier(0, 0, 0.2, 1), transform 90ms cubic-bezier(0, 0, 0.2, 1);
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio__native-control:checked + .mdc-radio__background > .mdc-radio__outer-circle, .mat-mdc-radio-button .mdc-radio__native-control:disabled + .mdc-radio__background > .mdc-radio__outer-circle {
|
||
transition: border-color 90ms cubic-bezier(0, 0, 0.2, 1);
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio__native-control:checked + .mdc-radio__background > .mdc-radio__inner-circle, .mat-mdc-radio-button .mdc-radio__native-control:disabled + .mdc-radio__background > .mdc-radio__inner-circle {
|
||
transition: transform 90ms cubic-bezier(0, 0, 0.2, 1), background-color 90ms cubic-bezier(0, 0, 0.2, 1);
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio__native-control:focus + .mdc-radio__background::before {
|
||
transform: scale(1);
|
||
opacity: 0.12;
|
||
transition: opacity 90ms cubic-bezier(0, 0, 0.2, 1), transform 90ms cubic-bezier(0, 0, 0.2, 1);
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio__native-control:disabled:not(:checked) + .mdc-radio__background > .mdc-radio__outer-circle {
|
||
border-color: var(--mat-radio-disabled-unselected-icon-color, var(--mat-sys-on-surface));
|
||
opacity: var(--mat-radio-disabled-unselected-icon-opacity, 0.38);
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio__native-control:disabled + .mdc-radio__background {
|
||
cursor: default;
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio__native-control:disabled + .mdc-radio__background > .mdc-radio__outer-circle {
|
||
border-color: var(--mat-radio-disabled-selected-icon-color, var(--mat-sys-on-surface));
|
||
opacity: var(--mat-radio-disabled-selected-icon-opacity, 0.38);
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio__native-control:disabled + .mdc-radio__background > .mdc-radio__inner-circle {
|
||
background-color: var(--mat-radio-disabled-selected-icon-color, var(--mat-sys-on-surface, currentColor));
|
||
opacity: var(--mat-radio-disabled-selected-icon-opacity, 0.38);
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio__native-control:enabled:not(:checked) + .mdc-radio__background > .mdc-radio__outer-circle {
|
||
border-color: var(--mat-radio-unselected-icon-color, var(--mat-sys-on-surface-variant));
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio__native-control:enabled:checked + .mdc-radio__background > .mdc-radio__outer-circle {
|
||
border-color: var(--mat-radio-selected-icon-color, var(--mat-sys-primary));
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio__native-control:enabled:checked + .mdc-radio__background > .mdc-radio__inner-circle {
|
||
background-color: var(--mat-radio-selected-icon-color, var(--mat-sys-primary, currentColor));
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio__native-control:enabled:focus:checked + .mdc-radio__background > .mdc-radio__outer-circle {
|
||
border-color: var(--mat-radio-selected-focus-icon-color, var(--mat-sys-primary));
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio__native-control:enabled:focus:checked + .mdc-radio__background > .mdc-radio__inner-circle {
|
||
background-color: var(--mat-radio-selected-focus-icon-color, var(--mat-sys-primary, currentColor));
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio__native-control:checked + .mdc-radio__background > .mdc-radio__inner-circle {
|
||
transform: scale(0.5);
|
||
transition: transform 90ms cubic-bezier(0, 0, 0.2, 1), background-color 90ms cubic-bezier(0, 0, 0.2, 1);
|
||
}
|
||
.mat-mdc-radio-button.mat-mdc-radio-disabled-interactive .mdc-radio--disabled {
|
||
pointer-events: auto;
|
||
}
|
||
.mat-mdc-radio-button.mat-mdc-radio-disabled-interactive .mdc-radio--disabled .mdc-radio__native-control:not(:checked) + .mdc-radio__background > .mdc-radio__outer-circle {
|
||
border-color: var(--mat-radio-disabled-unselected-icon-color, var(--mat-sys-on-surface));
|
||
opacity: var(--mat-radio-disabled-unselected-icon-opacity, 0.38);
|
||
}
|
||
.mat-mdc-radio-button.mat-mdc-radio-disabled-interactive .mdc-radio--disabled:hover .mdc-radio__native-control:checked + .mdc-radio__background > .mdc-radio__outer-circle,
|
||
.mat-mdc-radio-button.mat-mdc-radio-disabled-interactive .mdc-radio--disabled .mdc-radio__native-control:checked:focus + .mdc-radio__background > .mdc-radio__outer-circle,
|
||
.mat-mdc-radio-button.mat-mdc-radio-disabled-interactive .mdc-radio--disabled .mdc-radio__native-control + .mdc-radio__background > .mdc-radio__outer-circle {
|
||
border-color: var(--mat-radio-disabled-selected-icon-color, var(--mat-sys-on-surface));
|
||
opacity: var(--mat-radio-disabled-selected-icon-opacity, 0.38);
|
||
}
|
||
.mat-mdc-radio-button.mat-mdc-radio-disabled-interactive .mdc-radio--disabled:hover .mdc-radio__native-control:checked + .mdc-radio__background > .mdc-radio__inner-circle,
|
||
.mat-mdc-radio-button.mat-mdc-radio-disabled-interactive .mdc-radio--disabled .mdc-radio__native-control:checked:focus + .mdc-radio__background > .mdc-radio__inner-circle,
|
||
.mat-mdc-radio-button.mat-mdc-radio-disabled-interactive .mdc-radio--disabled .mdc-radio__native-control + .mdc-radio__background > .mdc-radio__inner-circle {
|
||
background-color: var(--mat-radio-disabled-selected-icon-color, var(--mat-sys-on-surface, currentColor));
|
||
opacity: var(--mat-radio-disabled-selected-icon-opacity, 0.38);
|
||
}
|
||
.mat-mdc-radio-button._mat-animation-noopable .mdc-radio__background::before,
|
||
.mat-mdc-radio-button._mat-animation-noopable .mdc-radio__outer-circle,
|
||
.mat-mdc-radio-button._mat-animation-noopable .mdc-radio__inner-circle {
|
||
transition: none !important;
|
||
}
|
||
.mat-mdc-radio-button label {
|
||
cursor: pointer;
|
||
}
|
||
.mat-mdc-radio-button label:empty {
|
||
display: none;
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio__background::before {
|
||
background-color: var(--mat-radio-ripple-color, var(--mat-sys-on-surface));
|
||
}
|
||
.mat-mdc-radio-button.mat-mdc-radio-checked .mat-ripple-element,
|
||
.mat-mdc-radio-button.mat-mdc-radio-checked .mdc-radio__background::before {
|
||
background-color: var(--mat-radio-checked-ripple-color, var(--mat-sys-primary));
|
||
}
|
||
.mat-mdc-radio-button.mat-mdc-radio-disabled-interactive .mdc-radio--disabled .mat-ripple-element,
|
||
.mat-mdc-radio-button.mat-mdc-radio-disabled-interactive .mdc-radio--disabled .mdc-radio__background::before {
|
||
background-color: var(--mat-radio-ripple-color, var(--mat-sys-on-surface));
|
||
}
|
||
.mat-mdc-radio-button .mat-internal-form-field {
|
||
color: var(--mat-radio-label-text-color, var(--mat-sys-on-surface));
|
||
font-family: var(--mat-radio-label-text-font, var(--mat-sys-body-medium-font));
|
||
line-height: var(--mat-radio-label-text-line-height, var(--mat-sys-body-medium-line-height));
|
||
font-size: var(--mat-radio-label-text-size, var(--mat-sys-body-medium-size));
|
||
letter-spacing: var(--mat-radio-label-text-tracking, var(--mat-sys-body-medium-tracking));
|
||
font-weight: var(--mat-radio-label-text-weight, var(--mat-sys-body-medium-weight));
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio--disabled + label {
|
||
color: var(--mat-radio-disabled-label-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));
|
||
}
|
||
.mat-mdc-radio-button .mat-radio-ripple {
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
position: absolute;
|
||
pointer-events: none;
|
||
border-radius: 50%;
|
||
}
|
||
.mat-mdc-radio-button .mat-radio-ripple > .mat-ripple-element {
|
||
opacity: 0.14;
|
||
}
|
||
.mat-mdc-radio-button .mat-radio-ripple::before {
|
||
border-radius: 50%;
|
||
}
|
||
.mat-mdc-radio-button .mdc-radio > .mdc-radio__native-control:focus:enabled:not(:checked) ~ .mdc-radio__background > .mdc-radio__outer-circle {
|
||
border-color: var(--mat-radio-unselected-focus-icon-color, var(--mat-sys-on-surface));
|
||
}
|
||
.mat-mdc-radio-button.cdk-focused .mat-focus-indicator::before {
|
||
content: "";
|
||
}
|
||
|
||
.mat-mdc-radio-disabled {
|
||
cursor: default;
|
||
pointer-events: none;
|
||
}
|
||
.mat-mdc-radio-disabled.mat-mdc-radio-disabled-interactive {
|
||
pointer-events: auto;
|
||
}
|
||
|
||
.mat-mdc-radio-touch-target {
|
||
position: absolute;
|
||
top: 50%;
|
||
left: 50%;
|
||
height: var(--mat-radio-touch-target-size, 48px);
|
||
width: var(--mat-radio-touch-target-size, 48px);
|
||
transform: translate(-50%, -50%);
|
||
display: var(--mat-radio-touch-target-display, block);
|
||
}
|
||
[dir=rtl] .mat-mdc-radio-touch-target {
|
||
left: auto;
|
||
right: 50%;
|
||
transform: translate(50%, -50%);
|
||
}
|
||
`],encapsulation:2,changeDetection:0})}return n})(),Fo=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=on({type:n});static \u0275inj=nn({imports:[Oc,Zo,Vi]})}return n})();var V1,eoe=new Uint8Array(16);function _E(){if(!V1&&(V1=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!V1))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return V1(eoe)}var XR=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function toe(n){return typeof n=="string"&&XR.test(n)}var YR=toe;var Cr=[];for(B1=0;B1<256;++B1)Cr.push((B1+256).toString(16).substr(1));var B1;function noe(n){var o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,e=(Cr[n[o+0]]+Cr[n[o+1]]+Cr[n[o+2]]+Cr[n[o+3]]+"-"+Cr[n[o+4]]+Cr[n[o+5]]+"-"+Cr[n[o+6]]+Cr[n[o+7]]+"-"+Cr[n[o+8]]+Cr[n[o+9]]+"-"+Cr[n[o+10]]+Cr[n[o+11]]+Cr[n[o+12]]+Cr[n[o+13]]+Cr[n[o+14]]+Cr[n[o+15]]).toLowerCase();if(!YR(e))throw TypeError("Stringified UUID is invalid");return e}var ZR=noe;function ioe(n,o,e){n=n||{};var t=n.random||(n.rng||_E)();if(t[6]=t[6]&15|64,t[8]=t[8]&63|128,o){e=e||0;for(var i=0;i<16;++i)o[e+i]=t[i];return o}return ZR(t)}var xo=ioe;var Os=(()=>{class n{httpController;constructor(e){this.httpController=e}getTemplates(e){return this.httpController.get(e,"/templates")}getTemplate(e,t){return this.httpController.get(e,`/templates/${t}`)}addTemplate(e,t){return this.httpController.post(e,"/templates",t)}saveTemplate(e,t){return this.httpController.put(e,`/templates/${t.template_id}`,t)}static \u0275fac=function(t){return new(t||n)(_e(sn))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Rr=(()=>{class n{getQemuTemplate(){return Vt({adapter_type:"e1000",adapters:4,bios_image:"",boot_priority:"c",builtin:!1,category:"guest",cdrom_image:"",compute_id:"local",console_auto_start:!1,console_type:"telnet",aux_type:"none",cpu_throttling:0,cpus:1,maxcpus:1,create_config_disk:!1,custom_adapters:[],default_name_format:"{name}-{0}",first_port_name:"",hda_disk_image:"",hda_disk_interface:"ide",hdb_disk_image:"",hdb_disk_interface:"ide",hdc_disk_image:"",hdc_disk_interface:"ide",hdd_disk_image:"",hdd_disk_interface:"ide",initrd:"",kernel_command_line:"",kernel_image:"",linked_clone:!0,mac_address:"",name:"",on_close:"power_off",options:"-nographic",platform:"",port_name_format:"Ethernet{0}",port_segment_size:0,process_priority:"normal",qemu_path:"",ram:256,symbol:"qemu_guest",template_id:"",template_type:"qemu",usage:"",replicate_network_connection_state:!0,tpm:!1,uefi:!1,tags:[]})}getVpcsTemplate(){return Vt({base_script_file:"vpcs_base_config.txt",builtin:!1,category:"guest",compute_id:"local",console_auto_start:!1,console_type:"telnet",default_name_format:"PC{0}",name:"",symbol:"vpcs_guest",template_id:"",template_type:"vpcs",tags:[]})}getVirtualBoxTemplate(){return Vt({adapter_type:"Intel PRO/1000 MT Desktop (82540EM)",adapters:1,builtin:!1,category:"guest",compute_id:"local",console_auto_start:!1,console_type:"none",custom_adapters:[],default_name_format:"{name}-{0}",first_port_name:"",headless:!1,linked_clone:!1,name:"",on_close:"power_off",port_name_format:"Ethernet{0}",port_segment_size:0,ram:0,symbol:"vbox_guest",template_id:"",template_type:"virtualbox",usage:"",use_any_adapter:!1,vmname:"",tags:[]})}getCloudNodeTemplate(){return Vt({builtin:!1,category:"guest",compute_id:"local",default_name_format:"Cloud{0}",name:"",ports_mapping:[],remote_console_type:"none",symbol:"cloud",template_id:"",template_type:"cloud",tags:[]})}getEthernetHubTemplate(){return Vt({builtin:!1,category:"switch",compute_id:"local",default_name_format:"Hub{0}",name:"",ports_mapping:[],symbol:"hub",template_id:"",template_type:"ethernet_hub",tags:[]})}getEthernetSwitchTemplate(){return Vt({builtin:!1,category:"switch",compute_id:"local",console_type:"telnet",default_name_format:"Switch{0}",name:"",ports_mapping:[],symbol:"ethernet_switch",template_id:"",template_type:"ethernet_switch",tags:[]})}getIosTemplate(){return Vt({auto_delete_disks:!0,builtin:!1,category:"router",compute_id:"local",console_auto_start:!1,console_type:"telnet",aux_type:"none",default_name_format:"R{0}",disk0:0,disk1:0,exec_area:64,idlemax:500,idlepc:"",idlesleep:30,image:"",mac_addr:"",mmap:!0,name:"",nvram:128,platform:"",private_config:"",ram:128,sparsemem:!0,startup_config:"ios_base_startup-config.txt",symbol:"router",system_id:"FTX0945W0MY",template_id:"",template_type:"dynamips",usage:"",tags:[]})}getVmwareTemplate(){return Vt({adapter_type:"e1000",adapters:1,builtin:!1,category:"guest",compute_id:"local",console_auto_start:!1,console_type:"none",custom_adapters:[],default_name_format:"{name}-{0}",first_port_name:"",headless:!1,linked_clone:!1,name:"",on_close:"power_off",port_name_format:"Ethernet{0}",port_segment_size:0,symbol:"vmware_guest",template_id:"",template_type:"vmware",usage:"",use_any_adapter:!1,vmx_path:"",tags:[]})}getDockerTemplate(){return Vt({adapters:1,builtin:!1,category:"guest",compute_id:"vm",console_auto_start:!1,console_http_path:"/",console_http_port:80,console_resolution:"1024x768",console_type:"telnet",aux_type:"none",mac_address:"",custom_adapters:[],default_name_format:"{name}-{0}",environment:"",extra_hosts:"",extra_volumes:[],extra_configs:[],image:"",memory:0,cpus:0,name:"",start_command:"",symbol:"docker_guest",template_id:"",template_type:"docker",usage:"",tags:[]})}getIouTemplate(){return Vt({builtin:!1,category:"switch",compute_id:"vm",console_auto_start:!1,console_type:"telnet",default_name_format:"IOU{0}",ethernet_adapters:1,l1_keepalives:!1,name:"",nvram:128,path:"",private_config:"",ram:256,serial_adapters:0,startup_config:"iou_l2_base_startup-config.txt",symbol:"multilayer_switch",template_id:"",template_type:"iou",usage:"",use_default_iou_values:!0,tags:[]})}list(){return Vt([])}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var ooe=(n,o)=>o.value;function aoe(n,o){if(n&1){let e=R();r(0,"button",7),_("click",function(){let i=y(e).$implicit,a=h();return w(a.symbol.set(i.value))}),r(1,"mat-icon"),c(2),l(),r(3,"span"),c(4),l()()}if(n&2){let e=o.$implicit,t=h();ne("template-info-fields__option--selected",t.symbol()===e.value),Ce("aria-pressed",t.symbol()===e.value),m(2),N(e.icon),m(2),N(e.label)}}var Ds=(()=>{class n{usage=$("");symbol=$("computer");symbolOptions=[{value:"computer",icon:"computer",label:"Computer"},{value:"vpcs_guest",icon:"desktop_windows",label:"VPCS"},{value:"qemu_guest",icon:"desktop_windows",label:"Virtual machine"},{value:"docker_guest",icon:"deployed_code",label:"Container"},{value:"router",icon:"router",label:"Router"},{value:"multilayer_switch",icon:"hub",label:"Switch"},{value:"ethernet_switch",icon:"settings_ethernet",label:"Ethernet switch"},{value:"hub",icon:"device_hub",label:"Hub"},{value:"cloud",icon:"cloud",label:"Cloud"}];static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-template-info-fields"]],inputs:{usage:[1,"usage"],symbol:[1,"symbol"]},outputs:{usage:"usageChange",symbol:"symbolChange"},decls:11,vars:1,consts:[[1,"template-info-fields"],["appearance","outline","subscriptSizing","dynamic",1,"template-wizard__field"],["matInput","","rows","3","placeholder","Optional notes that help identify and use this template",3,"input","value"],[1,"template-info-fields__symbols"],[1,"template-info-fields__label"],["role","radiogroup","aria-label","Template icon",1,"template-info-fields__options"],["mat-stroked-button","","type","button",1,"template-info-fields__option",3,"template-info-fields__option--selected"],["mat-stroked-button","","type","button",1,"template-info-fields__option",3,"click"]],template:function(t,i){t&1&&(r(0,"div",0)(1,"mat-form-field",1)(2,"mat-label"),c(3,"Usage notes"),l(),r(4,"textarea",2),_("input",function(s){return i.usage.set(s.target.value)}),l()(),r(5,"div",3)(6,"span",4),c(7,"Template icon"),l(),r(8,"div",5),Q(9,aoe,5,5,"button",6,ooe),l()()()),t&2&&(m(4),v("value",i.usage()),m(5),K(i.symbolOptions))},dependencies:[Y,he,we,Pe,Ve,ie,ce,ye,Ee],styles:["[_nghost-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%] mat-form-field[_ngcontent-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%]{display:block;margin-top:6px}.template-info-fields[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:14px}.template-info-fields__symbols[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:10px}.template-info-fields__label[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:14px;font-weight:550}.template-info-fields__options[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:10px}button.template-info-fields__option[_ngcontent-%COMP%]{min-width:120px;height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing);color:var(--mat-sys-on-surface-variant);text-transform:none}button.template-info-fields__option[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{margin-right:7px}button.template-info-fields__option--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}@media(max-width:600px){button.template-info-fields__option[_ngcontent-%COMP%]{flex:1 1 130px}}"],changeDetection:0})}return n})();function roe(n,o){if(n&1){let e=R();r(0,"button",28),_("click",function(){y(e);let i=h();return w(i.goBack())}),r(1,"mat-icon"),c(2,"arrow_back"),l()()}}var j1=(()=>{class n{route=f($t);controllerService=f(_t);builtInTemplatesService=f(Os);router=f(Ft);location=f(ki);toasterService=f(re);templateMocksService=f(Rr);formBuilder=f(Ai);cd=f(oe);controller;templateName="";formGroup;isLocalComputerChosen=!0;usage=$("");symbol=$("cloud");constructor(){this.formGroup=this.formBuilder.group({templateName:new Ge("",Ue.required)})}ngOnInit(){let e=this.route.snapshot.paramMap.get("controller_id");this.controllerService.get(parseInt(e,10)).then(t=>{this.controller=t,this.cd.markForCheck()},t=>{let i=t.error?.message||t.message||"Failed to load controller";this.toasterService.error(i),this.cd.markForCheck()})}setControllerType(e){e==="local"&&(this.isLocalComputerChosen=!0)}goBack(){let e=this.controller?.id??parseInt(this.route.snapshot.paramMap.get("controller_id"),10);ji(this.location,this.router,["/controller",e,"preferences"])}addTemplate(){if(!this.formGroup.invalid&&this.controller){let e;this.templateMocksService.getCloudNodeTemplate().subscribe({next:t=>{e=t,e.template_id=xo(),e.name=this.formGroup.get("templateName").value,e.compute_id="local",e.usage=this.usage(),e.symbol=this.symbol(),this.builtInTemplatesService.addTemplate(this.controller,e).subscribe({next:()=>{this.goBack()},error:i=>{let a=i.error?.message||i.message||"Failed to add cloud node template";this.toasterService.error(a),this.cd.markForCheck()}})},error:t=>{let i=t.error?.message||t.message||"Failed to load template";this.toasterService.error(i),this.cd.markForCheck()}})}else this.toasterService.error("Fill all required fields")}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-cloud-nodes-add-template"]],inputs:{usage:[1,"usage"],symbol:[1,"symbol"]},outputs:{usage:"usageChange",symbol:"symbolChange"},decls:41,vars:6,consts:[[1,"cloud-nodes-add","template-wizard"],[1,"cloud-nodes-add__header","template-wizard__header"],["mat-icon-button","","aria-label","Back to cloud templates",1,"cloud-nodes-add__back-btn","template-wizard__back"],[1,"template-wizard__heading"],[1,"cloud-nodes-add__title","template-wizard__title"],[1,"cloud-nodes-add__content","template-wizard__body"],[1,"template-wizard__single-layout"],["aria-label","Template creation steps",1,"template-wizard__single-nav"],[1,"template-wizard__single-step","template-wizard__single-step--detailed"],[1,"template-wizard__single-step-index"],[1,"template-wizard__step-label"],[1,"template-wizard__step-label-text"],[1,"template-wizard__step-label-title"],[1,"template-wizard__step-label-description"],[1,"template-wizard__single-content"],[1,"cloud-nodes-add__form-card","template-wizard__panel"],[1,"template-wizard__section"],[1,"template-wizard__section-title"],[1,"template-wizard__section-copy"],[1,"cloud-nodes-add__radio-group"],["value","1",1,"cloud-nodes-add__radio",3,"click","checked"],[1,"cloud-nodes-add__form",3,"formGroup"],["appearance","outline","subscriptSizing","dynamic",1,"cloud-nodes-add__field","template-wizard__field"],["formControlName","templateName","matInput","","required","","type","text","placeholder","Template name"],[3,"usageChange","symbolChange","usage","symbol"],[1,"cloud-nodes-add__actions","template-wizard__actions"],["mat-stroked-button","",1,"cloud-nodes-add__cancel-btn",3,"click"],["mat-raised-button","","color","primary",1,"cloud-nodes-add__submit-btn",3,"click","disabled"],["mat-icon-button","","aria-label","Back to cloud templates",1,"cloud-nodes-add__back-btn","template-wizard__back",3,"click"]],template:function(t,i){t&1&&(r(0,"div",0)(1,"header",1),T(2,roe,3,0,"button",2),r(3,"div",3)(4,"h1",4),c(5,"New cloud node template"),l()()(),r(6,"main",5)(7,"div",6)(8,"aside",7)(9,"div",8)(10,"span",9),c(11,"1"),l(),r(12,"span",10)(13,"mat-icon"),c(14,"description"),l(),r(15,"span",11)(16,"span",12),c(17,"Template info"),l(),r(18,"span",13),c(19,"Basic details and name"),l()()()()(),r(20,"div",14)(21,"section",15)(22,"section",16)(23,"h2",17),c(24,"Template information"),l(),r(25,"p",18),c(26,"Choose a name and an optional usage note for your template."),l(),r(27,"mat-radio-group",19)(28,"mat-radio-button",20),_("click",function(){return i.setControllerType("local")}),c(29," Run the cloud node locally "),l()(),r(30,"form",21)(31,"mat-form-field",22)(32,"mat-label"),c(33,"Template name"),l(),L(34,"input",23),l()(),r(35,"app-template-info-fields",24),rn("usageChange",function(s){return Xt(i.usage,s)||(i.usage=s),s})("symbolChange",function(s){return Xt(i.symbol,s)||(i.symbol=s),s}),l()()()()(),r(36,"div",25)(37,"button",26),_("click",function(){return i.goBack()}),c(38,"Cancel"),l(),r(39,"button",27),_("click",function(){return i.addTemplate()}),c(40," Create template "),l()()()()),t&2&&(m(2),E(i.controller?2:-1),m(26),v("checked",!0),m(2),v("formGroup",i.formGroup),m(5),an("usage",i.usage)("symbol",i.symbol),m(4),v("disabled",i.formGroup.invalid||!i.controller))},dependencies:[It,Ct,At,Nt,vt,dl,Ut,Yt,ie,ce,Y,he,Be,Fo,la,Zo,we,Pe,Ve,ye,Ee,Ds],styles:["[_nghost-%COMP%]{display:block;width:100%;background:transparent}.cloud-nodes-add__header[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:32px 20px 16px;display:flex;align-items:center;gap:16px;animation:none}.cloud-nodes-add__back-btn[_ngcontent-%COMP%]{width:48px;height:48px;border-radius:12px;color:var(--mat-sys-on-surface);transition:all var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1)}.cloud-nodes-add__back-btn[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 8%,transparent)}.cloud-nodes-add__title[_ngcontent-%COMP%]{flex:1;font-size:32px;font-weight:500;color:var(--mat-sys-on-surface);margin:0}.cloud-nodes-add__content[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:0 20px 20px;animation:none}.cloud-nodes-add__form-card[_ngcontent-%COMP%]{background:var(--mat-sys-surface);border-radius:16px;overflow:hidden;box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 20%,transparent),0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent);padding:24px}.cloud-nodes-add__radio-group[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px;margin-bottom:24px}.cloud-nodes-add__radio[_ngcontent-%COMP%]{font-size:16px}.cloud-nodes-add__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px}.cloud-nodes-add__field[_ngcontent-%COMP%]{width:100%}.cloud-nodes-add__actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:12px;margin-top:24px}.cloud-nodes-add__cancel-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none}.cloud-nodes-add__submit-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none;letter-spacing:.5px}@media(max-width:768px){.cloud-nodes-add__header[_ngcontent-%COMP%]{padding:24px 16px 12px;gap:12px}.cloud-nodes-add__back-btn[_ngcontent-%COMP%]{width:44px;height:44px}.cloud-nodes-add__title[_ngcontent-%COMP%]{font-size:24px}.cloud-nodes-add__content[_ngcontent-%COMP%]{padding:0 16px 16px}.cloud-nodes-add__form-card[_ngcontent-%COMP%]{padding:16px}.cloud-nodes-add__actions[_ngcontent-%COMP%]{flex-direction:column}.cloud-nodes-add__cancel-btn[_ngcontent-%COMP%], .cloud-nodes-add__submit-btn[_ngcontent-%COMP%]{width:100%;height:44px}}",'[_nghost-%COMP%]{display:block;width:100%;background:transparent}.templates-page__content[_ngcontent-%COMP%]{animation:none}.templates-page__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:20px;max-width:1600px;margin:0 auto;padding:24px 20px 16px}.templates-page__heading[_ngcontent-%COMP%], .templates-page__header-actions[_ngcontent-%COMP%]{display:flex;align-items:center}.templates-page__heading[_ngcontent-%COMP%]{min-width:0;gap:var(--gns3-density-space-3)}.templates-page__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.templates-page__header-actions[_ngcontent-%COMP%]{gap:var(--gns3-density-space-3)}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);border-radius:12px;padding-inline:18px;font-size:15px;font-weight:500;letter-spacing:.3px;text-transform:none}[class*=-templates__header][_ngcontent-%COMP%]{box-sizing:border-box;width:100%;height:calc(var(--gns3-density-space-4) * 2 + (var(--gns3-density-section-title-size) + 2px) * 1.2 + 1px);max-width:none;margin:0;padding:0 var(--gns3-density-page-padding);gap:var(--gns3-density-space-3);color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container);border-bottom:1px solid var(--mat-sys-outline-variant)}[class*=-templates__back-btn][_ngcontent-%COMP%], [class*=-templates__add-btn][_ngcontent-%COMP%]{flex:0 0 auto;width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:12px}[class*=-templates__back-btn][_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container)}[class*=-templates__add-btn][_ngcontent-%COMP%]{color:var(--mat-sys-primary)}[class*=-templates__title][_ngcontent-%COMP%]{flex:1;min-width:0;margin:0;padding-bottom:0;color:var(--mat-sys-on-primary-container);font-size:calc(var(--gns3-density-section-title-size) + 2px);font-weight:650;line-height:1.2;letter-spacing:-.01em}.templates-page__scopes[_ngcontent-%COMP%]{display:flex;gap:4px;max-width:1560px;margin:0 auto 16px;padding:0 20px;border-bottom:1px solid var(--mat-sys-outline-variant)}.templates-page__scope[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center;gap:8px;min-height:48px;padding:0 16px;border:0;color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;font-size:14px;font-weight:550;cursor:pointer}.templates-page__scope[_ngcontent-%COMP%]:after{position:absolute;right:8px;bottom:-1px;left:8px;height:2px;border-radius:2px 2px 0 0;background:transparent;content:""}.templates-page__scope[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}.templates-page__scope[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{min-width:22px;padding:2px 6px;border-radius:12px;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-high);font-size:11px;text-align:center}.templates-page__scope--active[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%]:after{background:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap);max-width:1600px;margin:0 auto;padding:0 20px 8px}.templates-page__search[_ngcontent-%COMP%]{flex:1;min-width:240px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:flex;align-items:center;flex:0 0 auto;gap:var(--gns3-density-space-3)}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{width:155px}.templates-page__view-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px;padding:4px 2px;border-radius:8px;background:var(--mat-sys-surface-container-high)}button.templates-page__view-button[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:8px;color:var(--mat-sys-on-surface-variant);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);--mat-icon-button-icon-size: 22px}button.templates-page__view-button--active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__main[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:20px;max-width:1600px;margin:0 auto;padding:0 20px 20px}.templates-page__loading[_ngcontent-%COMP%]{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;min-height:320px;gap:var(--gns3-density-card-gap);color:var(--mat-sys-on-surface-variant)}.templates-page__table-container[_ngcontent-%COMP%]{flex:1;min-width:0;border-radius:16px;background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;overflow-x:auto}mat-table[_ngcontent-%COMP%]{width:100%;min-width:850px}.mat-mdc-row[_ngcontent-%COMP%], .mat-row[_ngcontent-%COMP%]{height:var(--mat-table-row-item-container-height);min-height:var(--mat-table-row-item-container-height)}.mat-header-row[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%]{position:sticky;top:0;z-index:10;background:var(--mat-sys-surface-container-highest);box-shadow:inset 0 -2px var(--mat-sys-primary);--mat-sort-arrow-color: var(--mat-sys-primary)}.mat-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:13px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}mat-row[_ngcontent-%COMP%]{cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease}mat-row[_ngcontent-%COMP%]:nth-child(2n){background:color-mix(in srgb,var(--mat-sys-on-surface) 1%,transparent)}mat-row[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}mat-row.templates-page__row--selected[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}mat-cell[_ngcontent-%COMP%], mat-header-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:inherit;color:var(--mat-sys-on-surface)}.mat-column-name[_ngcontent-%COMP%]{flex:2.4;min-width:240px;justify-content:flex-start}.mat-column-template_type[_ngcontent-%COMP%]{flex:1.1;min-width:130px}.mat-column-category[_ngcontent-%COMP%]{flex:1;min-width:110px}.mat-column-compute_id[_ngcontent-%COMP%]{flex:1;min-width:105px}.mat-column-builtin[_ngcontent-%COMP%]{flex:0 0 90px;min-width:90px;justify-content:center}.mat-column-actions[_ngcontent-%COMP%]{flex:0 0 180px;min-width:180px;box-sizing:border-box;justify-content:flex-start;padding-right:24px}.templates-page__name-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-width:0;gap:var(--gns3-density-space-3)}.templates-page__name-copy[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:14px;font-weight:600}.templates-page__symbol[_ngcontent-%COMP%]{display:grid;flex:0 0 52px;width:52px;height:52px;overflow:hidden;place-items:center;border-radius:14px;color:var(--mat-sys-on-primary-container);background:color-mix(in srgb,var(--mat-sys-primary-container) 82%,var(--mat-sys-surface))}.templates-page__symbol[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:78%;height:78%;object-fit:contain;filter:drop-shadow(0 2px 4px color-mix(in srgb,var(--mat-sys-shadow) 25%,transparent))}.templates-page__symbol[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:27px;height:27px;font-size:27px}.templates-page__symbol--small[_ngcontent-%COMP%]{flex-basis:38px;width:38px;height:38px;border-radius:10px}.templates-page__symbol--small[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:21px;height:21px;font-size:21px}.templates-page__type-badge[_ngcontent-%COMP%], .templates-page__source-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;width:fit-content;padding:4px 9px;border-radius:16px;font-size:12px;font-weight:600;white-space:nowrap}.templates-page__type-badge[_ngcontent-%COMP%]{color:var(--mat-sys-secondary);background:color-mix(in srgb,var(--mat-sys-secondary) 11%,transparent)}.templates-page__type-badge--qemu[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__type-badge--docker[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container)}.templates-page__type-badge--dynamips[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary-container);background:var(--mat-sys-tertiary-container)}.templates-page__type-badge--cloud[_ngcontent-%COMP%]{color:var(--mat-sys-on-error-container);background:var(--mat-sys-error-container)}.templates-page__type-badge--vpcs[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary);background:var(--mat-sys-primary)}.templates-page__type-badge--ethernet-hub[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary);background:var(--mat-sys-secondary)}.templates-page__type-badge--ethernet-switch[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary);background:var(--mat-sys-tertiary)}.templates-page__type-badge--iou[_ngcontent-%COMP%]{color:var(--mat-sys-on-error);background:var(--mat-sys-error)}.templates-page__type-badge--nat[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-highest)}.templates-page__source-badge[_ngcontent-%COMP%]{color:var(--mat-sys-primary);background:color-mix(in srgb,var(--mat-sys-primary) 11%,transparent)}.templates-page__source-badge--builtin[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary);background:color-mix(in srgb,var(--mat-sys-tertiary) 11%,transparent)}.templates-page__table-footer[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:var(--mat-table-footer-container-height);padding:0 12px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container))}.templates-page__table-footer[_ngcontent-%COMP%] mat-paginator[_ngcontent-%COMP%]{width:100%;--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__actions-cell[_ngcontent-%COMP%], .templates-page__card-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:3px}button.templates-page__action[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-on-surface-variant);width:var(--gns3-density-control-height-sm);height:var(--gns3-density-control-height-sm);--mat-icon-button-state-layer-size: var(--gns3-density-control-height-sm);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-control-height-sm)}button.templates-page__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}button.templates-page__action[_ngcontent-%COMP%]{color:var(--template-action-color);--mat-icon-button-state-layer-color: var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:not(:disabled) mat-icon[_ngcontent-%COMP%]{color:var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:disabled mat-icon[_ngcontent-%COMP%]{color:var(--gns3-button-disabled-label-color)}button.templates-page__action--details[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--edit[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-primary)}button.templates-page__action--duplicate[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--delete[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-error)}.templates-page__grid[_ngcontent-%COMP%]{flex:1;min-width:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-content:start;gap:var(--gns3-density-card-gap)}.templates-page__grid--with-details[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__card[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column;padding:16px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;background:var(--mat-sys-surface);cursor:pointer;transition:transform var(--gns3-motion-duration-standard) ease,box-shadow var(--gns3-motion-duration-standard) ease,border-color var(--gns3-motion-duration-standard) ease}.templates-page__card[_ngcontent-%COMP%]:hover{border-color:var(--mat-sys-outline-variant);background:var(--mat-sys-surface-container-low)}.templates-page__card--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);box-shadow:0 0 0 1px var(--mat-sys-primary)}.templates-page__card-header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--gns3-density-space-3)}.templates-page__card-body[_ngcontent-%COMP%]{flex:1;min-width:0;padding:14px 0 12px}.templates-page__card-body[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{display:-webkit-box;overflow:hidden;margin:0 0 9px;color:var(--mat-sys-on-surface);font-size:17px;font-weight:650;line-height:1.35;overflow-wrap:anywhere;-webkit-box-orient:vertical;-webkit-line-clamp:2}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%]{display:grid;gap:8px;margin:16px 0 0}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{min-width:0;margin:0;overflow:hidden;color:var(--mat-sys-on-surface);font-size:13px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] .templates-page__card-tags-row[_ngcontent-%COMP%]{align-items:flex-start}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd.templates-page__card-tags[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px;overflow:visible;white-space:normal}.templates-page__card-actions[_ngcontent-%COMP%]{justify-content:flex-end;min-height:33px;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__grid-paginator[_ngcontent-%COMP%]{grid-column:1/-1;width:100%;border-radius:12px;background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container));--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__empty[_ngcontent-%COMP%]{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:230px;padding:32px;color:var(--mat-sys-on-surface-variant);text-align:center}.templates-page__empty[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{width:48px;height:48px;font-size:48px;opacity:.55}.templates-page__empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:12px 0 0;color:var(--mat-sys-on-surface);font-size:17px}.templates-page__empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:5px 0 0;font-size:14px}.templates-page__details[_ngcontent-%COMP%]{position:sticky;top:16px;flex:0 0 clamp(390px,31vw,480px);display:flex;min-height:380px;max-height:calc(100vh - 176px);flex-direction:column;overflow:hidden;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 60%,transparent);border-radius:16px;background:var(--mat-sys-surface);box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent);animation:_ngcontent-%COMP%_templates-slide-in var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard)}.templates-page__details-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:var(--gns3-density-space-3);min-height:56px;box-sizing:border-box;padding:8px 10px 8px 16px;border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 72%,var(--mat-sys-surface))}.templates-page__details-header[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-primary-container)}.templates-page__details-heading[_ngcontent-%COMP%]{display:flex;min-width:0;align-items:center;gap:var(--gns3-density-space-3)}.templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;margin:0;color:var(--mat-sys-on-primary-container);font-size:19px;font-weight:650;line-height:1.25;text-overflow:ellipsis;white-space:nowrap}.templates-page__details-title-line[_ngcontent-%COMP%]{display:flex;flex:1;min-width:0;align-items:center;gap:var(--gns3-density-space-2)}.templates-page__details-title-line[_ngcontent-%COMP%] .templates-page__type-badge[_ngcontent-%COMP%]{flex:0 0 auto}.templates-page__details-body[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:12px 20px}.templates-page__description[_ngcontent-%COMP%]{padding:10px 0 14px;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__description[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.6px;text-transform:uppercase}.templates-page__description[_ngcontent-%COMP%] app-markdown-viewer[_ngcontent-%COMP%]{display:block;margin-top:8px;padding:2px 12px;border-radius:10px;background:var(--mat-sys-surface-container-low);overflow-wrap:anywhere;--markdown-viewer-font-size: 13px;--markdown-viewer-line-height: 1.5;--markdown-viewer-heading-scale: .85}.templates-page__detail-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:22px 105px minmax(0,1fr);align-items:center;gap:var(--gns3-density-space-3);min-height:40px;box-sizing:border-box;padding:8px 0;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__detail-row[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:19px;height:19px;color:var(--mat-sys-primary);font-size:19px}.templates-page__detail-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:12px;font-weight:650;letter-spacing:.5px;text-transform:uppercase;white-space:nowrap}.templates-page__detail-row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{min-width:0;color:var(--mat-sys-on-surface);font-size:14px;font-weight:500;line-height:1.45;text-align:right;overflow-wrap:anywhere}.templates-page__detail-row--stacked[_ngcontent-%COMP%]{align-items:start}.templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__mono[_ngcontent-%COMP%], .templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__path[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-family:var(--gns3-font-code);font-size:12px;word-break:break-all}.templates-page__tags[_ngcontent-%COMP%]{border-bottom:0}.templates-page__tags[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:7px}.templates-page__tag[_ngcontent-%COMP%]{padding:5px 9px;border-radius:14px;color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container);font-size:11px;font-weight:550}.templates-page__details-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(105px,1fr));gap:var(--gns3-density-space-2);padding:14px 16px 18px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-surface-container) 72%,transparent)}button.templates-page__details-action[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-on-surface-variant);height:40px;border-radius:12px;color:var(--details-action-color);border-color:color-mix(in srgb,var(--details-action-color) 48%,transparent);font-size:13px;font-weight:500}button.templates-page__details-action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--details-action-color)}button.templates-page__details-action--edit[_ngcontent-%COMP%], button.templates-page__details-action--duplicate[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-primary)}button.templates-page__details-action--delete[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-error)}[data-density=compact][_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%]{min-height:40px;height:40px}[data-density=compact][_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%]{width:40px;height:40px;--mat-icon-button-state-layer-size: 40px}[data-density=compact][_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%]{min-height:48px;padding-block:4px}[data-density=compact][_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:18px}[data-density=compact][_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%]{padding-block:8px}[data-density=compact][_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%]{min-height:36px;padding-block:6px}[data-density=compact][_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%]{padding:12px}@keyframes _ngcontent-%COMP%_templates-slide-in{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@media(max-width:1400px){.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__main[_ngcontent-%COMP%]{flex-direction:column}.templates-page__table-container[_ngcontent-%COMP%], .templates-page__grid[_ngcontent-%COMP%], .templates-page__details[_ngcontent-%COMP%]{width:100%}.templates-page__details[_ngcontent-%COMP%]{position:static;flex-basis:auto;max-height:none}}@media(max-width:900px){.templates-page__header[_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column}.templates-page__header-actions[_ngcontent-%COMP%]{width:100%}.templates-page__toolbar[_ngcontent-%COMP%]{align-items:stretch;flex-direction:column}.templates-page__toolbar-actions[_ngcontent-%COMP%]{width:100%}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{flex:1;width:auto}}@media(max-width:640px){.templates-page__header[_ngcontent-%COMP%]{padding:20px 16px 12px}.templates-page__header-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{width:100%;padding-inline:10px}.templates-page__scopes[_ngcontent-%COMP%]{overflow-x:auto;padding-inline:16px}.templates-page__scope[_ngcontent-%COMP%]{flex:0 0 auto;padding-inline:12px}.templates-page__toolbar[_ngcontent-%COMP%], .templates-page__main[_ngcontent-%COMP%]{padding-inline:16px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__view-toggle[_ngcontent-%COMP%]{grid-column:1/-1;justify-self:end}.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.templates-page__details[_ngcontent-%COMP%]{min-width:0}}'],changeDetection:0})}return n})();var loe=["*",[["mat-chip-avatar"],["","matChipAvatar",""]],[["mat-chip-trailing-icon"],["","matChipRemove",""],["","matChipTrailingIcon",""]]],coe=["*","mat-chip-avatar, [matChipAvatar]","mat-chip-trailing-icon,[matChipRemove],[matChipTrailingIcon]"];function doe(n,o){n&1&&(r(0,"span",3),Zt(1,1),l())}function moe(n,o){n&1&&(r(0,"span",6),Zt(1,2),l())}var poe=`.mdc-evolution-chip,
|
||
.mdc-evolution-chip__cell,
|
||
.mdc-evolution-chip__action {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
}
|
||
|
||
.mdc-evolution-chip {
|
||
position: relative;
|
||
max-width: 100%;
|
||
}
|
||
|
||
.mdc-evolution-chip__cell,
|
||
.mdc-evolution-chip__action {
|
||
height: 100%;
|
||
}
|
||
|
||
.mdc-evolution-chip__cell--primary {
|
||
flex-basis: 100%;
|
||
overflow-x: hidden;
|
||
}
|
||
|
||
.mdc-evolution-chip__cell--trailing {
|
||
flex: 1 0 auto;
|
||
}
|
||
|
||
.mdc-evolution-chip__action {
|
||
align-items: center;
|
||
background: none;
|
||
border: none;
|
||
box-sizing: content-box;
|
||
cursor: pointer;
|
||
display: inline-flex;
|
||
justify-content: center;
|
||
outline: none;
|
||
padding: 0;
|
||
text-decoration: none;
|
||
color: inherit;
|
||
}
|
||
|
||
.mdc-evolution-chip__action--presentational {
|
||
cursor: auto;
|
||
}
|
||
|
||
.mdc-evolution-chip--disabled,
|
||
.mdc-evolution-chip__action:disabled {
|
||
pointer-events: none;
|
||
}
|
||
@media (forced-colors: active) {
|
||
.mdc-evolution-chip--disabled,
|
||
.mdc-evolution-chip__action:disabled {
|
||
forced-color-adjust: none;
|
||
}
|
||
}
|
||
|
||
.mdc-evolution-chip__action--primary {
|
||
font: inherit;
|
||
letter-spacing: inherit;
|
||
white-space: inherit;
|
||
overflow-x: hidden;
|
||
}
|
||
.mat-mdc-standard-chip .mdc-evolution-chip__action--primary::before {
|
||
border-width: var(--mat-chip-outline-width, 1px);
|
||
border-radius: var(--mat-chip-container-shape-radius, 8px);
|
||
box-sizing: border-box;
|
||
content: "";
|
||
height: 100%;
|
||
left: 0;
|
||
position: absolute;
|
||
pointer-events: none;
|
||
top: 0;
|
||
width: 100%;
|
||
z-index: 1;
|
||
border-style: solid;
|
||
}
|
||
.mat-mdc-standard-chip .mdc-evolution-chip__action--primary {
|
||
padding-left: 12px;
|
||
padding-right: 12px;
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary {
|
||
padding-left: 0;
|
||
padding-right: 12px;
|
||
}
|
||
[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary {
|
||
padding-left: 12px;
|
||
padding-right: 0;
|
||
}
|
||
.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__action--primary::before {
|
||
border-color: var(--mat-chip-outline-color, var(--mat-sys-outline));
|
||
}
|
||
.mdc-evolution-chip__action--primary:not(.mdc-evolution-chip__action--presentational):not(.mdc-ripple-upgraded):focus::before {
|
||
border-color: var(--mat-chip-focus-outline-color, var(--mat-sys-on-surface-variant));
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__action--primary::before {
|
||
border-color: var(--mat-chip-disabled-outline-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent));
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--selected .mdc-evolution-chip__action--primary::before {
|
||
border-width: var(--mat-chip-flat-selected-outline-width, 0);
|
||
}
|
||
.mat-mdc-basic-chip .mdc-evolution-chip__action--primary {
|
||
font: inherit;
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__action--primary {
|
||
padding-left: 0;
|
||
padding-right: 12px;
|
||
}
|
||
[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__action--primary {
|
||
padding-left: 12px;
|
||
padding-right: 0;
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary {
|
||
padding-left: 12px;
|
||
padding-right: 0;
|
||
}
|
||
[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary {
|
||
padding-left: 0;
|
||
padding-right: 12px;
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary {
|
||
padding-left: 0;
|
||
padding-right: 0;
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary {
|
||
padding-left: 0;
|
||
padding-right: 0;
|
||
}
|
||
[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary {
|
||
padding-left: 0;
|
||
padding-right: 0;
|
||
}
|
||
.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary {
|
||
padding-left: 0;
|
||
padding-right: 12px;
|
||
}
|
||
[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary {
|
||
padding-left: 12px;
|
||
padding-right: 0;
|
||
}
|
||
.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary {
|
||
padding-left: 0;
|
||
padding-right: 0;
|
||
}
|
||
[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary {
|
||
padding-left: 0;
|
||
padding-right: 0;
|
||
}
|
||
|
||
.mdc-evolution-chip__action--secondary {
|
||
position: relative;
|
||
overflow: visible;
|
||
}
|
||
.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__action--secondary {
|
||
color: var(--mat-chip-with-trailing-icon-trailing-icon-color, var(--mat-sys-on-surface-variant));
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__action--secondary {
|
||
color: var(--mat-chip-with-trailing-icon-disabled-trailing-icon-color, var(--mat-sys-on-surface));
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary {
|
||
padding-left: 8px;
|
||
padding-right: 8px;
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary {
|
||
padding-left: 8px;
|
||
padding-right: 8px;
|
||
}
|
||
.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary {
|
||
padding-left: 8px;
|
||
padding-right: 8px;
|
||
}
|
||
[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary {
|
||
padding-left: 8px;
|
||
padding-right: 8px;
|
||
}
|
||
|
||
.mdc-evolution-chip__text-label {
|
||
-webkit-user-select: none;
|
||
user-select: none;
|
||
white-space: nowrap;
|
||
text-overflow: ellipsis;
|
||
overflow: hidden;
|
||
}
|
||
.mat-mdc-standard-chip .mdc-evolution-chip__text-label {
|
||
font-family: var(--mat-chip-label-text-font, var(--mat-sys-label-large-font));
|
||
line-height: var(--mat-chip-label-text-line-height, var(--mat-sys-label-large-line-height));
|
||
font-size: var(--mat-chip-label-text-size, var(--mat-sys-label-large-size));
|
||
font-weight: var(--mat-chip-label-text-weight, var(--mat-sys-label-large-weight));
|
||
letter-spacing: var(--mat-chip-label-text-tracking, var(--mat-sys-label-large-tracking));
|
||
}
|
||
.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__text-label {
|
||
color: var(--mat-chip-label-text-color, var(--mat-sys-on-surface-variant));
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--selected:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__text-label {
|
||
color: var(--mat-chip-selected-label-text-color, var(--mat-sys-on-secondary-container));
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__text-label, .mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled .mdc-evolution-chip__text-label {
|
||
color: var(--mat-chip-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));
|
||
}
|
||
|
||
.mdc-evolution-chip__graphic {
|
||
align-items: center;
|
||
display: inline-flex;
|
||
justify-content: center;
|
||
overflow: hidden;
|
||
pointer-events: none;
|
||
position: relative;
|
||
flex: 1 0 auto;
|
||
}
|
||
.mat-mdc-standard-chip .mdc-evolution-chip__graphic {
|
||
width: var(--mat-chip-with-avatar-avatar-size, 24px);
|
||
height: var(--mat-chip-with-avatar-avatar-size, 24px);
|
||
font-size: var(--mat-chip-with-avatar-avatar-size, 24px);
|
||
}
|
||
.mdc-evolution-chip--selecting .mdc-evolution-chip__graphic {
|
||
transition: width 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1);
|
||
}
|
||
.mdc-evolution-chip--selectable:not(.mdc-evolution-chip--selected):not(.mdc-evolution-chip--with-primary-icon) .mdc-evolution-chip__graphic {
|
||
width: 0;
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic {
|
||
padding-left: 6px;
|
||
padding-right: 6px;
|
||
}
|
||
.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic {
|
||
padding-left: 4px;
|
||
padding-right: 8px;
|
||
}
|
||
[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic {
|
||
padding-left: 8px;
|
||
padding-right: 4px;
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic {
|
||
padding-left: 6px;
|
||
padding-right: 6px;
|
||
}
|
||
.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic {
|
||
padding-left: 4px;
|
||
padding-right: 8px;
|
||
}
|
||
[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic {
|
||
padding-left: 8px;
|
||
padding-right: 4px;
|
||
}
|
||
.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__graphic {
|
||
padding-left: 0;
|
||
}
|
||
|
||
.mdc-evolution-chip__checkmark {
|
||
position: absolute;
|
||
opacity: 0;
|
||
top: 50%;
|
||
left: 50%;
|
||
height: 20px;
|
||
width: 20px;
|
||
}
|
||
.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__checkmark {
|
||
color: var(--mat-chip-with-icon-selected-icon-color, var(--mat-sys-on-secondary-container));
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__checkmark {
|
||
color: var(--mat-chip-with-icon-disabled-icon-color, var(--mat-sys-on-surface));
|
||
}
|
||
.mdc-evolution-chip--selecting .mdc-evolution-chip__checkmark {
|
||
transition: transform 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1);
|
||
transform: translate(-75%, -50%);
|
||
}
|
||
.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark {
|
||
transform: translate(-50%, -50%);
|
||
opacity: 1;
|
||
}
|
||
|
||
.mdc-evolution-chip__checkmark-svg {
|
||
display: block;
|
||
}
|
||
|
||
.mdc-evolution-chip__checkmark-path {
|
||
stroke-width: 2px;
|
||
stroke-dasharray: 29.7833385;
|
||
stroke-dashoffset: 29.7833385;
|
||
stroke: currentColor;
|
||
}
|
||
.mdc-evolution-chip--selecting .mdc-evolution-chip__checkmark-path {
|
||
transition: stroke-dashoffset 150ms 45ms cubic-bezier(0.4, 0, 0.2, 1);
|
||
}
|
||
.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark-path {
|
||
stroke-dashoffset: 0;
|
||
}
|
||
@media (forced-colors: active) {
|
||
.mdc-evolution-chip__checkmark-path {
|
||
stroke: CanvasText !important;
|
||
}
|
||
}
|
||
|
||
.mat-mdc-standard-chip .mdc-evolution-chip__icon--trailing {
|
||
height: 18px;
|
||
width: 18px;
|
||
font-size: 18px;
|
||
}
|
||
.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing.mat-mdc-chip-remove {
|
||
opacity: calc(var(--mat-chip-trailing-action-opacity, 1) * var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38));
|
||
}
|
||
.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing.mat-mdc-chip-remove:focus {
|
||
opacity: calc(var(--mat-chip-trailing-action-focus-opacity, 1) * var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38));
|
||
}
|
||
|
||
.mat-mdc-standard-chip {
|
||
border-radius: var(--mat-chip-container-shape-radius, 8px);
|
||
height: var(--mat-chip-container-height, 32px);
|
||
}
|
||
.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) {
|
||
background-color: var(--mat-chip-elevated-container-color, transparent);
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--disabled {
|
||
background-color: var(--mat-chip-elevated-disabled-container-color);
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--selected:not(.mdc-evolution-chip--disabled) {
|
||
background-color: var(--mat-chip-elevated-selected-container-color, var(--mat-sys-secondary-container));
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled {
|
||
background-color: var(--mat-chip-flat-disabled-selected-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent));
|
||
}
|
||
@media (forced-colors: active) {
|
||
.mat-mdc-standard-chip {
|
||
outline: solid 1px;
|
||
}
|
||
}
|
||
|
||
.mat-mdc-standard-chip .mdc-evolution-chip__icon--primary {
|
||
border-radius: var(--mat-chip-with-avatar-avatar-shape-radius, 24px);
|
||
width: var(--mat-chip-with-icon-icon-size, 18px);
|
||
height: var(--mat-chip-with-icon-icon-size, 18px);
|
||
font-size: var(--mat-chip-with-icon-icon-size, 18px);
|
||
}
|
||
.mdc-evolution-chip--selected .mdc-evolution-chip__icon--primary {
|
||
opacity: 0;
|
||
}
|
||
.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__icon--primary {
|
||
color: var(--mat-chip-with-icon-icon-color, var(--mat-sys-on-surface-variant));
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--primary {
|
||
color: var(--mat-chip-with-icon-disabled-icon-color, var(--mat-sys-on-surface));
|
||
}
|
||
|
||
.mat-mdc-chip-highlighted {
|
||
--mat-chip-with-icon-icon-color: var(--mat-chip-with-icon-selected-icon-color, var(--mat-sys-on-secondary-container));
|
||
--mat-chip-elevated-container-color: var(--mat-chip-elevated-selected-container-color, var(--mat-sys-secondary-container));
|
||
--mat-chip-label-text-color: var(--mat-chip-selected-label-text-color, var(--mat-sys-on-secondary-container));
|
||
--mat-chip-outline-width: var(--mat-chip-flat-selected-outline-width, 0);
|
||
}
|
||
|
||
.mat-mdc-chip-focus-overlay {
|
||
background: var(--mat-chip-focus-state-layer-color, var(--mat-sys-on-surface-variant));
|
||
}
|
||
.mat-mdc-chip-selected .mat-mdc-chip-focus-overlay, .mat-mdc-chip-highlighted .mat-mdc-chip-focus-overlay {
|
||
background: var(--mat-chip-selected-focus-state-layer-color, var(--mat-sys-on-secondary-container));
|
||
}
|
||
.mat-mdc-chip:hover .mat-mdc-chip-focus-overlay {
|
||
background: var(--mat-chip-hover-state-layer-color, var(--mat-sys-on-surface-variant));
|
||
opacity: var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity));
|
||
}
|
||
.mat-mdc-chip-focus-overlay .mat-mdc-chip-selected:hover, .mat-mdc-chip-highlighted:hover .mat-mdc-chip-focus-overlay {
|
||
background: var(--mat-chip-selected-hover-state-layer-color, var(--mat-sys-on-secondary-container));
|
||
opacity: var(--mat-chip-selected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity));
|
||
}
|
||
.mat-mdc-chip.cdk-focused .mat-mdc-chip-focus-overlay {
|
||
background: var(--mat-chip-focus-state-layer-color, var(--mat-sys-on-surface-variant));
|
||
opacity: var(--mat-chip-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity));
|
||
}
|
||
.mat-mdc-chip-selected.cdk-focused .mat-mdc-chip-focus-overlay, .mat-mdc-chip-highlighted.cdk-focused .mat-mdc-chip-focus-overlay {
|
||
background: var(--mat-chip-selected-focus-state-layer-color, var(--mat-sys-on-secondary-container));
|
||
opacity: var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity));
|
||
}
|
||
|
||
.mdc-evolution-chip--disabled:not(.mdc-evolution-chip--selected) .mat-mdc-chip-avatar {
|
||
opacity: var(--mat-chip-with-avatar-disabled-avatar-opacity, 0.38);
|
||
}
|
||
|
||
.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing {
|
||
opacity: var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38);
|
||
}
|
||
|
||
.mdc-evolution-chip--disabled.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark {
|
||
opacity: var(--mat-chip-with-icon-disabled-icon-opacity, 0.38);
|
||
}
|
||
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--disabled {
|
||
opacity: var(--mat-chip-disabled-container-opacity, 1);
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--selected .mdc-evolution-chip__icon--trailing, .mat-mdc-standard-chip.mat-mdc-chip-highlighted .mdc-evolution-chip__icon--trailing {
|
||
color: var(--mat-chip-selected-trailing-icon-color, var(--mat-sys-on-secondary-container));
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing, .mat-mdc-standard-chip.mat-mdc-chip-highlighted.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing {
|
||
color: var(--mat-chip-selected-disabled-trailing-icon-color, var(--mat-sys-on-surface));
|
||
}
|
||
|
||
.mat-mdc-chip-edit, .mat-mdc-chip-remove {
|
||
opacity: var(--mat-chip-trailing-action-opacity, 1);
|
||
}
|
||
.mat-mdc-chip-edit:focus, .mat-mdc-chip-remove:focus {
|
||
opacity: var(--mat-chip-trailing-action-focus-opacity, 1);
|
||
}
|
||
.mat-mdc-chip-edit::after, .mat-mdc-chip-remove::after {
|
||
background-color: var(--mat-chip-trailing-action-state-layer-color, var(--mat-sys-on-surface-variant));
|
||
}
|
||
.mat-mdc-chip-edit:hover::after, .mat-mdc-chip-remove:hover::after {
|
||
opacity: calc(var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)) + var(--mat-chip-trailing-action-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)));
|
||
}
|
||
.mat-mdc-chip-edit:focus::after, .mat-mdc-chip-remove:focus::after {
|
||
opacity: calc(var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)) + var(--mat-chip-trailing-action-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)));
|
||
}
|
||
|
||
.mat-mdc-chip-selected .mat-mdc-chip-remove::after,
|
||
.mat-mdc-chip-highlighted .mat-mdc-chip-remove::after {
|
||
background-color: var(--mat-chip-selected-trailing-action-state-layer-color, var(--mat-sys-on-secondary-container));
|
||
}
|
||
|
||
.mat-mdc-chip.cdk-focused .mat-mdc-chip-edit:focus::after, .mat-mdc-chip.cdk-focused .mat-mdc-chip-remove:focus::after {
|
||
opacity: calc(var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)) + var(--mat-chip-trailing-action-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)));
|
||
}
|
||
.mat-mdc-chip.cdk-focused .mat-mdc-chip-edit:hover::after, .mat-mdc-chip.cdk-focused .mat-mdc-chip-remove:hover::after {
|
||
opacity: calc(var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)) + var(--mat-chip-trailing-action-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)));
|
||
}
|
||
|
||
.mat-mdc-standard-chip {
|
||
-webkit-tap-highlight-color: transparent;
|
||
}
|
||
.mat-mdc-standard-chip .mat-mdc-chip-graphic,
|
||
.mat-mdc-standard-chip .mat-mdc-chip-trailing-icon {
|
||
box-sizing: content-box;
|
||
}
|
||
.mat-mdc-standard-chip._mat-animation-noopable,
|
||
.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__graphic,
|
||
.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__checkmark,
|
||
.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__checkmark-path {
|
||
transition-duration: 1ms;
|
||
animation-duration: 1ms;
|
||
}
|
||
|
||
.mat-mdc-chip-focus-overlay {
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
position: absolute;
|
||
pointer-events: none;
|
||
opacity: 0;
|
||
border-radius: inherit;
|
||
transition: opacity 150ms linear;
|
||
}
|
||
._mat-animation-noopable .mat-mdc-chip-focus-overlay {
|
||
transition: none;
|
||
}
|
||
.mat-mdc-basic-chip .mat-mdc-chip-focus-overlay {
|
||
display: none;
|
||
}
|
||
|
||
.mat-mdc-chip .mat-ripple.mat-mdc-chip-ripple {
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
position: absolute;
|
||
pointer-events: none;
|
||
border-radius: inherit;
|
||
}
|
||
|
||
.mat-mdc-chip-avatar {
|
||
text-align: center;
|
||
line-height: 1;
|
||
color: var(--mat-chip-with-icon-icon-color, currentColor);
|
||
}
|
||
|
||
.mat-mdc-chip {
|
||
position: relative;
|
||
z-index: 0;
|
||
}
|
||
|
||
.mat-mdc-chip-action-label {
|
||
text-align: left;
|
||
z-index: 1;
|
||
}
|
||
[dir=rtl] .mat-mdc-chip-action-label {
|
||
text-align: right;
|
||
}
|
||
.mat-mdc-chip.mdc-evolution-chip--with-trailing-action .mat-mdc-chip-action-label {
|
||
position: relative;
|
||
}
|
||
.mat-mdc-chip-action-label .mat-mdc-chip-primary-focus-indicator {
|
||
position: absolute;
|
||
top: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
left: 0;
|
||
pointer-events: none;
|
||
}
|
||
.mat-mdc-chip-action-label .mat-focus-indicator::before {
|
||
margin: calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px) * -1);
|
||
}
|
||
|
||
.mat-mdc-chip-edit::before, .mat-mdc-chip-remove::before {
|
||
margin: calc(var(--mat-focus-indicator-border-width, 3px) * -1);
|
||
left: 8px;
|
||
right: 8px;
|
||
}
|
||
.mat-mdc-chip-edit::after, .mat-mdc-chip-remove::after {
|
||
content: "";
|
||
display: block;
|
||
opacity: 0;
|
||
position: absolute;
|
||
top: -3px;
|
||
bottom: -3px;
|
||
left: 5px;
|
||
right: 5px;
|
||
border-radius: 50%;
|
||
box-sizing: border-box;
|
||
padding: 12px;
|
||
margin: -12px;
|
||
background-clip: content-box;
|
||
}
|
||
.mat-mdc-chip-edit .mat-icon, .mat-mdc-chip-remove .mat-icon {
|
||
width: 18px;
|
||
height: 18px;
|
||
font-size: 18px;
|
||
box-sizing: content-box;
|
||
}
|
||
|
||
.mat-chip-edit-input {
|
||
cursor: text;
|
||
display: inline-block;
|
||
color: inherit;
|
||
outline: 0;
|
||
}
|
||
|
||
@media (forced-colors: active) {
|
||
.mat-mdc-chip-selected:not(.mat-mdc-chip-multiple) {
|
||
outline-width: 3px;
|
||
}
|
||
}
|
||
|
||
.mat-mdc-chip-action:focus-visible .mat-focus-indicator::before {
|
||
content: "";
|
||
}
|
||
|
||
.mdc-evolution-chip__icon, .mat-mdc-chip-edit .mat-icon, .mat-mdc-chip-remove .mat-icon {
|
||
min-height: fit-content;
|
||
}
|
||
|
||
img.mdc-evolution-chip__icon {
|
||
min-height: 0;
|
||
}
|
||
`,uoe=[[["","matChipEdit",""]],[["mat-chip-avatar"],["","matChipAvatar",""]],[["","matChipEditInput",""]],"*",[["mat-chip-trailing-icon"],["","matChipRemove",""],["","matChipTrailingIcon",""]]],goe=["[matChipEdit]","mat-chip-avatar, [matChipAvatar]","[matChipEditInput]","*","mat-chip-trailing-icon,[matChipRemove],[matChipTrailingIcon]"];function hoe(n,o){n&1&&L(0,"span",0)}function _oe(n,o){n&1&&(r(0,"span",1),Zt(1),l())}function foe(n,o){n&1&&(r(0,"span",3),Zt(1,1),l())}function voe(n,o){n&1&&Zt(0,2)}function Coe(n,o){n&1&&L(0,"span",7)}function boe(n,o){if(n&1&&T(0,voe,1,0)(1,Coe,1,0,"span",7),n&2){let e=h();E(e.contentEditInput?0:1)}}function xoe(n,o){n&1&&Zt(0,3)}function yoe(n,o){n&1&&(r(0,"span",6),Zt(1,4),l())}var iz=["*"],woe=`.mat-mdc-chip-set {
|
||
display: flex;
|
||
}
|
||
.mat-mdc-chip-set:focus {
|
||
outline: none;
|
||
}
|
||
.mat-mdc-chip-set .mdc-evolution-chip-set__chips {
|
||
min-width: 100%;
|
||
margin-left: -8px;
|
||
margin-right: 0;
|
||
}
|
||
.mat-mdc-chip-set .mdc-evolution-chip {
|
||
margin: 4px 0 4px 8px;
|
||
}
|
||
[dir=rtl] .mat-mdc-chip-set .mdc-evolution-chip-set__chips {
|
||
margin-left: 0;
|
||
margin-right: -8px;
|
||
}
|
||
[dir=rtl] .mat-mdc-chip-set .mdc-evolution-chip {
|
||
margin-left: 0;
|
||
margin-right: 8px;
|
||
}
|
||
|
||
.mdc-evolution-chip-set__chips {
|
||
display: flex;
|
||
flex-flow: wrap;
|
||
min-width: 0;
|
||
}
|
||
|
||
.mat-mdc-chip-set-stacked {
|
||
flex-direction: column;
|
||
align-items: flex-start;
|
||
}
|
||
.mat-mdc-chip-set-stacked .mat-mdc-chip {
|
||
width: 100%;
|
||
}
|
||
.mat-mdc-chip-set-stacked .mdc-evolution-chip__graphic {
|
||
flex-grow: 0;
|
||
}
|
||
.mat-mdc-chip-set-stacked .mdc-evolution-chip__action--primary {
|
||
flex-basis: 100%;
|
||
justify-content: start;
|
||
}
|
||
|
||
input.mat-mdc-chip-input {
|
||
flex: 1 0 150px;
|
||
margin-left: 8px;
|
||
}
|
||
[dir=rtl] input.mat-mdc-chip-input {
|
||
margin-left: 0;
|
||
margin-right: 8px;
|
||
}
|
||
.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::placeholder {
|
||
opacity: 1;
|
||
}
|
||
.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::-moz-placeholder {
|
||
opacity: 1;
|
||
}
|
||
.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::-webkit-input-placeholder {
|
||
opacity: 1;
|
||
}
|
||
.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input:-ms-input-placeholder {
|
||
opacity: 1;
|
||
}
|
||
.mat-mdc-chip-set + input.mat-mdc-chip-input {
|
||
margin-left: 0;
|
||
margin-right: 0;
|
||
}
|
||
`,oz=new mn("mat-chips-default-options",{providedIn:"root",factory:()=>({separatorKeyCodes:[13]})}),JR=new mn("MatChipAvatar"),ez=new mn("MatChipTrailingIcon"),tz=new mn("MatChipEdit"),vE=new mn("MatChipRemove"),yE=new mn("MatChip"),az=(()=>{class n{_elementRef=f(Kt);_parentChip=f(yE);_isPrimary=!0;_isLeading=!1;get disabled(){return this._disabled||this._parentChip?.disabled||!1}set disabled(e){this._disabled=e}_disabled=!1;tabIndex=-1;_allowFocusWhenDisabled=!1;_getDisabledAttribute(){return this.disabled&&!this._allowFocusWhenDisabled?"":null}constructor(){f(Ta).load(Xr),this._elementRef.nativeElement.nodeName==="BUTTON"&&this._elementRef.nativeElement.setAttribute("type","button")}focus(){this._elementRef.nativeElement.focus()}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["","matChipContent",""]],hostAttrs:[1,"mat-mdc-chip-action","mdc-evolution-chip__action","mdc-evolution-chip__action--presentational"],hostVars:8,hostBindings:function(t,i){t&2&&(Ce("disabled",i._getDisabledAttribute())("aria-disabled",i.disabled),ne("mdc-evolution-chip__action--primary",i._isPrimary)("mdc-evolution-chip__action--secondary",!i._isPrimary)("mdc-evolution-chip__action--trailing",!i._isPrimary&&!i._isLeading))},inputs:{disabled:[2,"disabled","disabled",zt],tabIndex:[2,"tabIndex","tabIndex",e=>e==null?-1:qo(e)],_allowFocusWhenDisabled:"_allowFocusWhenDisabled"}})}return n})(),wE=(()=>{class n extends az{_getTabindex(){return this.disabled&&!this._allowFocusWhenDisabled?null:this.tabIndex.toString()}_handleClick(e){!this.disabled&&this._isPrimary&&(e.preventDefault(),this._parentChip._handlePrimaryActionInteraction())}_handleKeydown(e){(e.keyCode===13||e.keyCode===32)&&!this.disabled&&this._isPrimary&&!this._parentChip._isEditing&&(e.preventDefault(),this._parentChip._handlePrimaryActionInteraction())}static \u0275fac=(()=>{let e;return function(i){return(e||(e=yi(n)))(i||n)}})();static \u0275dir=yt({type:n,selectors:[["","matChipAction",""]],hostVars:3,hostBindings:function(t,i){t&1&&_("click",function(s){return i._handleClick(s)})("keydown",function(s){return i._handleKeydown(s)}),t&2&&(Ce("tabindex",i._getTabindex()),ne("mdc-evolution-chip__action--presentational",!1))},features:[mi]})}return n})();var hi=(()=>{class n extends wE{_isPrimary=!1;_handleClick(e){this.disabled||(e.stopPropagation(),e.preventDefault(),this._parentChip.remove())}_handleKeydown(e){(e.keyCode===13||e.keyCode===32)&&!this.disabled&&(e.stopPropagation(),e.preventDefault(),this._parentChip.remove())}static \u0275fac=(()=>{let e;return function(i){return(e||(e=yi(n)))(i||n)}})();static \u0275dir=yt({type:n,selectors:[["","matChipRemove",""]],hostAttrs:["role","button",1,"mat-mdc-chip-remove","mat-mdc-chip-trailing-icon","mat-focus-indicator","mdc-evolution-chip__icon","mdc-evolution-chip__icon--trailing"],hostVars:1,hostBindings:function(t,i){t&2&&Ce("aria-hidden",null)},features:[un([{provide:vE,useExisting:n}]),mi]})}return n})(),av=(()=>{class n{_changeDetectorRef=f(oe);_elementRef=f(Kt);_tagName=f(_A);_ngZone=f(Gi);_focusMonitor=f(hs);_globalRippleOptions=f(eb,{optional:!0});_document=f(Do);_onFocus=new Ye;_onBlur=new Ye;_isBasicChip=!1;role=null;_hasFocusInternal=!1;_pendingFocus=!1;_actionChanges;_animationsDisabled=$a();_allLeadingIcons;_allTrailingIcons;_allEditIcons;_allRemoveIcons;_hasFocus(){return this._hasFocusInternal}id=f(ua).getId("mat-mdc-chip-");ariaLabel=null;ariaDescription=null;_chipListDisabled=!1;_hadFocusOnRemove=!1;_textElement;get value(){return this._value!==void 0?this._value:this._textElement.textContent.trim()}set value(e){this._value=e}_value;color;removable=!0;highlighted=!1;disableRipple=!1;get disabled(){return this._disabled||this._chipListDisabled}set disabled(e){this._disabled=e}_disabled=!1;removed=new be;destroyed=new be;basicChipAttrName="mat-basic-chip";leadingIcon;editIcon;trailingIcon;removeIcon;primaryAction;_rippleLoader=f(d5);_injector=f(xa);constructor(){let e=f(Ta);e.load(Xr),e.load(KC),this._monitorFocus(),this._rippleLoader?.configureRipple(this._elementRef.nativeElement,{className:"mat-mdc-chip-ripple",disabled:this._isRippleDisabled()})}ngOnInit(){this._isBasicChip=this._elementRef.nativeElement.hasAttribute(this.basicChipAttrName)||this._tagName.toLowerCase()===this.basicChipAttrName}ngAfterViewInit(){this._textElement=this._elementRef.nativeElement.querySelector(".mat-mdc-chip-action-label"),this._pendingFocus&&(this._pendingFocus=!1,this.focus())}ngAfterContentInit(){this._actionChanges=ro(this._allLeadingIcons.changes,this._allTrailingIcons.changes,this._allEditIcons.changes,this._allRemoveIcons.changes).subscribe(()=>this._changeDetectorRef.markForCheck())}ngDoCheck(){this._rippleLoader.setDisabled(this._elementRef.nativeElement,this._isRippleDisabled())}ngOnDestroy(){this._focusMonitor.stopMonitoring(this._elementRef),this._rippleLoader?.destroyRipple(this._elementRef.nativeElement),this._actionChanges?.unsubscribe(),this.destroyed.emit({chip:this}),this.destroyed.complete()}remove(){this.removable&&(this._hadFocusOnRemove=this._hasFocus(),this.removed.emit({chip:this}))}_isRippleDisabled(){return this.disabled||this.disableRipple||this._animationsDisabled||this._isBasicChip||!this._hasInteractiveActions()||!!this._globalRippleOptions?.disabled}_hasTrailingIcon(){return!!(this.trailingIcon||this.removeIcon)}_handleKeydown(e){(e.keyCode===8&&!e.repeat||e.keyCode===46)&&(e.preventDefault(),this.remove())}focus(){this.disabled||(this.primaryAction?this.primaryAction.focus():this._pendingFocus=!0)}_getSourceAction(e){return this._getActions().find(t=>{let i=t._elementRef.nativeElement;return i===e||i.contains(e)})}_getActions(){let e=[];return this.editIcon&&e.push(this.editIcon),this.primaryAction&&e.push(this.primaryAction),this.removeIcon&&e.push(this.removeIcon),e}_handlePrimaryActionInteraction(){}_hasInteractiveActions(){return this._getActions().length>0}_edit(e){}_monitorFocus(){this._focusMonitor.monitor(this._elementRef,!0).subscribe(e=>{let t=e!==null;t!==this._hasFocusInternal&&(this._hasFocusInternal=t,t?this._onFocus.next({chip:this}):(this._changeDetectorRef.markForCheck(),setTimeout(()=>this._ngZone.run(()=>this._onBlur.next({chip:this})))))})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["mat-basic-chip"],["","mat-basic-chip",""],["mat-chip"],["","mat-chip",""]],contentQueries:function(t,i,a){if(t&1&&Zi(a,JR,5)(a,tz,5)(a,ez,5)(a,vE,5)(a,JR,5)(a,ez,5)(a,tz,5)(a,vE,5),t&2){let s;gt(s=ht())&&(i.leadingIcon=s.first),gt(s=ht())&&(i.editIcon=s.first),gt(s=ht())&&(i.trailingIcon=s.first),gt(s=ht())&&(i.removeIcon=s.first),gt(s=ht())&&(i._allLeadingIcons=s),gt(s=ht())&&(i._allTrailingIcons=s),gt(s=ht())&&(i._allEditIcons=s),gt(s=ht())&&(i._allRemoveIcons=s)}},viewQuery:function(t,i){if(t&1&&Kn(wE,5),t&2){let a;gt(a=ht())&&(i.primaryAction=a.first)}},hostAttrs:[1,"mat-mdc-chip"],hostVars:31,hostBindings:function(t,i){t&1&&_("keydown",function(s){return i._handleKeydown(s)}),t&2&&(pr("id",i.id),Ce("role",i.role)("aria-label",i.ariaLabel),Za("mat-"+(i.color||"primary")),ne("mdc-evolution-chip",!i._isBasicChip)("mdc-evolution-chip--disabled",i.disabled)("mdc-evolution-chip--with-trailing-action",i._hasTrailingIcon())("mdc-evolution-chip--with-primary-graphic",i.leadingIcon)("mdc-evolution-chip--with-primary-icon",i.leadingIcon)("mdc-evolution-chip--with-avatar",i.leadingIcon)("mat-mdc-chip-with-avatar",i.leadingIcon)("mat-mdc-chip-highlighted",i.highlighted)("mat-mdc-chip-disabled",i.disabled)("mat-mdc-basic-chip",i._isBasicChip)("mat-mdc-standard-chip",!i._isBasicChip)("mat-mdc-chip-with-trailing-icon",i._hasTrailingIcon())("_mat-animation-noopable",i._animationsDisabled))},inputs:{role:"role",id:"id",ariaLabel:[0,"aria-label","ariaLabel"],ariaDescription:[0,"aria-description","ariaDescription"],value:"value",color:"color",removable:[2,"removable","removable",zt],highlighted:[2,"highlighted","highlighted",zt],disableRipple:[2,"disableRipple","disableRipple",zt],disabled:[2,"disabled","disabled",zt]},outputs:{removed:"removed",destroyed:"destroyed"},exportAs:["matChip"],features:[un([{provide:yE,useExisting:n}])],ngContentSelectors:coe,decls:8,vars:2,consts:[[1,"mat-mdc-chip-focus-overlay"],[1,"mdc-evolution-chip__cell","mdc-evolution-chip__cell--primary"],["matChipContent",""],[1,"mdc-evolution-chip__graphic","mat-mdc-chip-graphic"],[1,"mdc-evolution-chip__text-label","mat-mdc-chip-action-label"],[1,"mat-mdc-chip-primary-focus-indicator","mat-focus-indicator"],[1,"mdc-evolution-chip__cell","mdc-evolution-chip__cell--trailing"]],template:function(t,i){t&1&&(pi(loe),L(0,"span",0),r(1,"span",1)(2,"span",2),T(3,doe,2,0,"span",3),r(4,"span",4),Zt(5),L(6,"span",5),l()()(),T(7,moe,2,0,"span",6)),t&2&&(m(3),E(i.leadingIcon?3:-1),m(4),E(i._hasTrailingIcon()?7:-1))},dependencies:[az],styles:[`.mdc-evolution-chip,
|
||
.mdc-evolution-chip__cell,
|
||
.mdc-evolution-chip__action {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
}
|
||
|
||
.mdc-evolution-chip {
|
||
position: relative;
|
||
max-width: 100%;
|
||
}
|
||
|
||
.mdc-evolution-chip__cell,
|
||
.mdc-evolution-chip__action {
|
||
height: 100%;
|
||
}
|
||
|
||
.mdc-evolution-chip__cell--primary {
|
||
flex-basis: 100%;
|
||
overflow-x: hidden;
|
||
}
|
||
|
||
.mdc-evolution-chip__cell--trailing {
|
||
flex: 1 0 auto;
|
||
}
|
||
|
||
.mdc-evolution-chip__action {
|
||
align-items: center;
|
||
background: none;
|
||
border: none;
|
||
box-sizing: content-box;
|
||
cursor: pointer;
|
||
display: inline-flex;
|
||
justify-content: center;
|
||
outline: none;
|
||
padding: 0;
|
||
text-decoration: none;
|
||
color: inherit;
|
||
}
|
||
|
||
.mdc-evolution-chip__action--presentational {
|
||
cursor: auto;
|
||
}
|
||
|
||
.mdc-evolution-chip--disabled,
|
||
.mdc-evolution-chip__action:disabled {
|
||
pointer-events: none;
|
||
}
|
||
@media (forced-colors: active) {
|
||
.mdc-evolution-chip--disabled,
|
||
.mdc-evolution-chip__action:disabled {
|
||
forced-color-adjust: none;
|
||
}
|
||
}
|
||
|
||
.mdc-evolution-chip__action--primary {
|
||
font: inherit;
|
||
letter-spacing: inherit;
|
||
white-space: inherit;
|
||
overflow-x: hidden;
|
||
}
|
||
.mat-mdc-standard-chip .mdc-evolution-chip__action--primary::before {
|
||
border-width: var(--mat-chip-outline-width, 1px);
|
||
border-radius: var(--mat-chip-container-shape-radius, 8px);
|
||
box-sizing: border-box;
|
||
content: "";
|
||
height: 100%;
|
||
left: 0;
|
||
position: absolute;
|
||
pointer-events: none;
|
||
top: 0;
|
||
width: 100%;
|
||
z-index: 1;
|
||
border-style: solid;
|
||
}
|
||
.mat-mdc-standard-chip .mdc-evolution-chip__action--primary {
|
||
padding-left: 12px;
|
||
padding-right: 12px;
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary {
|
||
padding-left: 0;
|
||
padding-right: 12px;
|
||
}
|
||
[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary {
|
||
padding-left: 12px;
|
||
padding-right: 0;
|
||
}
|
||
.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__action--primary::before {
|
||
border-color: var(--mat-chip-outline-color, var(--mat-sys-outline));
|
||
}
|
||
.mdc-evolution-chip__action--primary:not(.mdc-evolution-chip__action--presentational):not(.mdc-ripple-upgraded):focus::before {
|
||
border-color: var(--mat-chip-focus-outline-color, var(--mat-sys-on-surface-variant));
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__action--primary::before {
|
||
border-color: var(--mat-chip-disabled-outline-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent));
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--selected .mdc-evolution-chip__action--primary::before {
|
||
border-width: var(--mat-chip-flat-selected-outline-width, 0);
|
||
}
|
||
.mat-mdc-basic-chip .mdc-evolution-chip__action--primary {
|
||
font: inherit;
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__action--primary {
|
||
padding-left: 0;
|
||
padding-right: 12px;
|
||
}
|
||
[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__action--primary {
|
||
padding-left: 12px;
|
||
padding-right: 0;
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary {
|
||
padding-left: 12px;
|
||
padding-right: 0;
|
||
}
|
||
[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary {
|
||
padding-left: 0;
|
||
padding-right: 12px;
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary {
|
||
padding-left: 0;
|
||
padding-right: 0;
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary {
|
||
padding-left: 0;
|
||
padding-right: 0;
|
||
}
|
||
[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary {
|
||
padding-left: 0;
|
||
padding-right: 0;
|
||
}
|
||
.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary {
|
||
padding-left: 0;
|
||
padding-right: 12px;
|
||
}
|
||
[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary {
|
||
padding-left: 12px;
|
||
padding-right: 0;
|
||
}
|
||
.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary {
|
||
padding-left: 0;
|
||
padding-right: 0;
|
||
}
|
||
[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary {
|
||
padding-left: 0;
|
||
padding-right: 0;
|
||
}
|
||
|
||
.mdc-evolution-chip__action--secondary {
|
||
position: relative;
|
||
overflow: visible;
|
||
}
|
||
.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__action--secondary {
|
||
color: var(--mat-chip-with-trailing-icon-trailing-icon-color, var(--mat-sys-on-surface-variant));
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__action--secondary {
|
||
color: var(--mat-chip-with-trailing-icon-disabled-trailing-icon-color, var(--mat-sys-on-surface));
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary {
|
||
padding-left: 8px;
|
||
padding-right: 8px;
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary {
|
||
padding-left: 8px;
|
||
padding-right: 8px;
|
||
}
|
||
.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary {
|
||
padding-left: 8px;
|
||
padding-right: 8px;
|
||
}
|
||
[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary {
|
||
padding-left: 8px;
|
||
padding-right: 8px;
|
||
}
|
||
|
||
.mdc-evolution-chip__text-label {
|
||
-webkit-user-select: none;
|
||
user-select: none;
|
||
white-space: nowrap;
|
||
text-overflow: ellipsis;
|
||
overflow: hidden;
|
||
}
|
||
.mat-mdc-standard-chip .mdc-evolution-chip__text-label {
|
||
font-family: var(--mat-chip-label-text-font, var(--mat-sys-label-large-font));
|
||
line-height: var(--mat-chip-label-text-line-height, var(--mat-sys-label-large-line-height));
|
||
font-size: var(--mat-chip-label-text-size, var(--mat-sys-label-large-size));
|
||
font-weight: var(--mat-chip-label-text-weight, var(--mat-sys-label-large-weight));
|
||
letter-spacing: var(--mat-chip-label-text-tracking, var(--mat-sys-label-large-tracking));
|
||
}
|
||
.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__text-label {
|
||
color: var(--mat-chip-label-text-color, var(--mat-sys-on-surface-variant));
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--selected:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__text-label {
|
||
color: var(--mat-chip-selected-label-text-color, var(--mat-sys-on-secondary-container));
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__text-label, .mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled .mdc-evolution-chip__text-label {
|
||
color: var(--mat-chip-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));
|
||
}
|
||
|
||
.mdc-evolution-chip__graphic {
|
||
align-items: center;
|
||
display: inline-flex;
|
||
justify-content: center;
|
||
overflow: hidden;
|
||
pointer-events: none;
|
||
position: relative;
|
||
flex: 1 0 auto;
|
||
}
|
||
.mat-mdc-standard-chip .mdc-evolution-chip__graphic {
|
||
width: var(--mat-chip-with-avatar-avatar-size, 24px);
|
||
height: var(--mat-chip-with-avatar-avatar-size, 24px);
|
||
font-size: var(--mat-chip-with-avatar-avatar-size, 24px);
|
||
}
|
||
.mdc-evolution-chip--selecting .mdc-evolution-chip__graphic {
|
||
transition: width 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1);
|
||
}
|
||
.mdc-evolution-chip--selectable:not(.mdc-evolution-chip--selected):not(.mdc-evolution-chip--with-primary-icon) .mdc-evolution-chip__graphic {
|
||
width: 0;
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic {
|
||
padding-left: 6px;
|
||
padding-right: 6px;
|
||
}
|
||
.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic {
|
||
padding-left: 4px;
|
||
padding-right: 8px;
|
||
}
|
||
[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic {
|
||
padding-left: 8px;
|
||
padding-right: 4px;
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic {
|
||
padding-left: 6px;
|
||
padding-right: 6px;
|
||
}
|
||
.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic {
|
||
padding-left: 4px;
|
||
padding-right: 8px;
|
||
}
|
||
[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic {
|
||
padding-left: 8px;
|
||
padding-right: 4px;
|
||
}
|
||
.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__graphic {
|
||
padding-left: 0;
|
||
}
|
||
|
||
.mdc-evolution-chip__checkmark {
|
||
position: absolute;
|
||
opacity: 0;
|
||
top: 50%;
|
||
left: 50%;
|
||
height: 20px;
|
||
width: 20px;
|
||
}
|
||
.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__checkmark {
|
||
color: var(--mat-chip-with-icon-selected-icon-color, var(--mat-sys-on-secondary-container));
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__checkmark {
|
||
color: var(--mat-chip-with-icon-disabled-icon-color, var(--mat-sys-on-surface));
|
||
}
|
||
.mdc-evolution-chip--selecting .mdc-evolution-chip__checkmark {
|
||
transition: transform 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1);
|
||
transform: translate(-75%, -50%);
|
||
}
|
||
.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark {
|
||
transform: translate(-50%, -50%);
|
||
opacity: 1;
|
||
}
|
||
|
||
.mdc-evolution-chip__checkmark-svg {
|
||
display: block;
|
||
}
|
||
|
||
.mdc-evolution-chip__checkmark-path {
|
||
stroke-width: 2px;
|
||
stroke-dasharray: 29.7833385;
|
||
stroke-dashoffset: 29.7833385;
|
||
stroke: currentColor;
|
||
}
|
||
.mdc-evolution-chip--selecting .mdc-evolution-chip__checkmark-path {
|
||
transition: stroke-dashoffset 150ms 45ms cubic-bezier(0.4, 0, 0.2, 1);
|
||
}
|
||
.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark-path {
|
||
stroke-dashoffset: 0;
|
||
}
|
||
@media (forced-colors: active) {
|
||
.mdc-evolution-chip__checkmark-path {
|
||
stroke: CanvasText !important;
|
||
}
|
||
}
|
||
|
||
.mat-mdc-standard-chip .mdc-evolution-chip__icon--trailing {
|
||
height: 18px;
|
||
width: 18px;
|
||
font-size: 18px;
|
||
}
|
||
.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing.mat-mdc-chip-remove {
|
||
opacity: calc(var(--mat-chip-trailing-action-opacity, 1) * var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38));
|
||
}
|
||
.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing.mat-mdc-chip-remove:focus {
|
||
opacity: calc(var(--mat-chip-trailing-action-focus-opacity, 1) * var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38));
|
||
}
|
||
|
||
.mat-mdc-standard-chip {
|
||
border-radius: var(--mat-chip-container-shape-radius, 8px);
|
||
height: var(--mat-chip-container-height, 32px);
|
||
}
|
||
.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) {
|
||
background-color: var(--mat-chip-elevated-container-color, transparent);
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--disabled {
|
||
background-color: var(--mat-chip-elevated-disabled-container-color);
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--selected:not(.mdc-evolution-chip--disabled) {
|
||
background-color: var(--mat-chip-elevated-selected-container-color, var(--mat-sys-secondary-container));
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled {
|
||
background-color: var(--mat-chip-flat-disabled-selected-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent));
|
||
}
|
||
@media (forced-colors: active) {
|
||
.mat-mdc-standard-chip {
|
||
outline: solid 1px;
|
||
}
|
||
}
|
||
|
||
.mat-mdc-standard-chip .mdc-evolution-chip__icon--primary {
|
||
border-radius: var(--mat-chip-with-avatar-avatar-shape-radius, 24px);
|
||
width: var(--mat-chip-with-icon-icon-size, 18px);
|
||
height: var(--mat-chip-with-icon-icon-size, 18px);
|
||
font-size: var(--mat-chip-with-icon-icon-size, 18px);
|
||
}
|
||
.mdc-evolution-chip--selected .mdc-evolution-chip__icon--primary {
|
||
opacity: 0;
|
||
}
|
||
.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__icon--primary {
|
||
color: var(--mat-chip-with-icon-icon-color, var(--mat-sys-on-surface-variant));
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--primary {
|
||
color: var(--mat-chip-with-icon-disabled-icon-color, var(--mat-sys-on-surface));
|
||
}
|
||
|
||
.mat-mdc-chip-highlighted {
|
||
--mat-chip-with-icon-icon-color: var(--mat-chip-with-icon-selected-icon-color, var(--mat-sys-on-secondary-container));
|
||
--mat-chip-elevated-container-color: var(--mat-chip-elevated-selected-container-color, var(--mat-sys-secondary-container));
|
||
--mat-chip-label-text-color: var(--mat-chip-selected-label-text-color, var(--mat-sys-on-secondary-container));
|
||
--mat-chip-outline-width: var(--mat-chip-flat-selected-outline-width, 0);
|
||
}
|
||
|
||
.mat-mdc-chip-focus-overlay {
|
||
background: var(--mat-chip-focus-state-layer-color, var(--mat-sys-on-surface-variant));
|
||
}
|
||
.mat-mdc-chip-selected .mat-mdc-chip-focus-overlay, .mat-mdc-chip-highlighted .mat-mdc-chip-focus-overlay {
|
||
background: var(--mat-chip-selected-focus-state-layer-color, var(--mat-sys-on-secondary-container));
|
||
}
|
||
.mat-mdc-chip:hover .mat-mdc-chip-focus-overlay {
|
||
background: var(--mat-chip-hover-state-layer-color, var(--mat-sys-on-surface-variant));
|
||
opacity: var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity));
|
||
}
|
||
.mat-mdc-chip-focus-overlay .mat-mdc-chip-selected:hover, .mat-mdc-chip-highlighted:hover .mat-mdc-chip-focus-overlay {
|
||
background: var(--mat-chip-selected-hover-state-layer-color, var(--mat-sys-on-secondary-container));
|
||
opacity: var(--mat-chip-selected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity));
|
||
}
|
||
.mat-mdc-chip.cdk-focused .mat-mdc-chip-focus-overlay {
|
||
background: var(--mat-chip-focus-state-layer-color, var(--mat-sys-on-surface-variant));
|
||
opacity: var(--mat-chip-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity));
|
||
}
|
||
.mat-mdc-chip-selected.cdk-focused .mat-mdc-chip-focus-overlay, .mat-mdc-chip-highlighted.cdk-focused .mat-mdc-chip-focus-overlay {
|
||
background: var(--mat-chip-selected-focus-state-layer-color, var(--mat-sys-on-secondary-container));
|
||
opacity: var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity));
|
||
}
|
||
|
||
.mdc-evolution-chip--disabled:not(.mdc-evolution-chip--selected) .mat-mdc-chip-avatar {
|
||
opacity: var(--mat-chip-with-avatar-disabled-avatar-opacity, 0.38);
|
||
}
|
||
|
||
.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing {
|
||
opacity: var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38);
|
||
}
|
||
|
||
.mdc-evolution-chip--disabled.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark {
|
||
opacity: var(--mat-chip-with-icon-disabled-icon-opacity, 0.38);
|
||
}
|
||
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--disabled {
|
||
opacity: var(--mat-chip-disabled-container-opacity, 1);
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--selected .mdc-evolution-chip__icon--trailing, .mat-mdc-standard-chip.mat-mdc-chip-highlighted .mdc-evolution-chip__icon--trailing {
|
||
color: var(--mat-chip-selected-trailing-icon-color, var(--mat-sys-on-secondary-container));
|
||
}
|
||
.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing, .mat-mdc-standard-chip.mat-mdc-chip-highlighted.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing {
|
||
color: var(--mat-chip-selected-disabled-trailing-icon-color, var(--mat-sys-on-surface));
|
||
}
|
||
|
||
.mat-mdc-chip-edit, .mat-mdc-chip-remove {
|
||
opacity: var(--mat-chip-trailing-action-opacity, 1);
|
||
}
|
||
.mat-mdc-chip-edit:focus, .mat-mdc-chip-remove:focus {
|
||
opacity: var(--mat-chip-trailing-action-focus-opacity, 1);
|
||
}
|
||
.mat-mdc-chip-edit::after, .mat-mdc-chip-remove::after {
|
||
background-color: var(--mat-chip-trailing-action-state-layer-color, var(--mat-sys-on-surface-variant));
|
||
}
|
||
.mat-mdc-chip-edit:hover::after, .mat-mdc-chip-remove:hover::after {
|
||
opacity: calc(var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)) + var(--mat-chip-trailing-action-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)));
|
||
}
|
||
.mat-mdc-chip-edit:focus::after, .mat-mdc-chip-remove:focus::after {
|
||
opacity: calc(var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)) + var(--mat-chip-trailing-action-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)));
|
||
}
|
||
|
||
.mat-mdc-chip-selected .mat-mdc-chip-remove::after,
|
||
.mat-mdc-chip-highlighted .mat-mdc-chip-remove::after {
|
||
background-color: var(--mat-chip-selected-trailing-action-state-layer-color, var(--mat-sys-on-secondary-container));
|
||
}
|
||
|
||
.mat-mdc-chip.cdk-focused .mat-mdc-chip-edit:focus::after, .mat-mdc-chip.cdk-focused .mat-mdc-chip-remove:focus::after {
|
||
opacity: calc(var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)) + var(--mat-chip-trailing-action-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)));
|
||
}
|
||
.mat-mdc-chip.cdk-focused .mat-mdc-chip-edit:hover::after, .mat-mdc-chip.cdk-focused .mat-mdc-chip-remove:hover::after {
|
||
opacity: calc(var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)) + var(--mat-chip-trailing-action-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)));
|
||
}
|
||
|
||
.mat-mdc-standard-chip {
|
||
-webkit-tap-highlight-color: transparent;
|
||
}
|
||
.mat-mdc-standard-chip .mat-mdc-chip-graphic,
|
||
.mat-mdc-standard-chip .mat-mdc-chip-trailing-icon {
|
||
box-sizing: content-box;
|
||
}
|
||
.mat-mdc-standard-chip._mat-animation-noopable,
|
||
.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__graphic,
|
||
.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__checkmark,
|
||
.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__checkmark-path {
|
||
transition-duration: 1ms;
|
||
animation-duration: 1ms;
|
||
}
|
||
|
||
.mat-mdc-chip-focus-overlay {
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
position: absolute;
|
||
pointer-events: none;
|
||
opacity: 0;
|
||
border-radius: inherit;
|
||
transition: opacity 150ms linear;
|
||
}
|
||
._mat-animation-noopable .mat-mdc-chip-focus-overlay {
|
||
transition: none;
|
||
}
|
||
.mat-mdc-basic-chip .mat-mdc-chip-focus-overlay {
|
||
display: none;
|
||
}
|
||
|
||
.mat-mdc-chip .mat-ripple.mat-mdc-chip-ripple {
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
position: absolute;
|
||
pointer-events: none;
|
||
border-radius: inherit;
|
||
}
|
||
|
||
.mat-mdc-chip-avatar {
|
||
text-align: center;
|
||
line-height: 1;
|
||
color: var(--mat-chip-with-icon-icon-color, currentColor);
|
||
}
|
||
|
||
.mat-mdc-chip {
|
||
position: relative;
|
||
z-index: 0;
|
||
}
|
||
|
||
.mat-mdc-chip-action-label {
|
||
text-align: left;
|
||
z-index: 1;
|
||
}
|
||
[dir=rtl] .mat-mdc-chip-action-label {
|
||
text-align: right;
|
||
}
|
||
.mat-mdc-chip.mdc-evolution-chip--with-trailing-action .mat-mdc-chip-action-label {
|
||
position: relative;
|
||
}
|
||
.mat-mdc-chip-action-label .mat-mdc-chip-primary-focus-indicator {
|
||
position: absolute;
|
||
top: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
left: 0;
|
||
pointer-events: none;
|
||
}
|
||
.mat-mdc-chip-action-label .mat-focus-indicator::before {
|
||
margin: calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px) * -1);
|
||
}
|
||
|
||
.mat-mdc-chip-edit::before, .mat-mdc-chip-remove::before {
|
||
margin: calc(var(--mat-focus-indicator-border-width, 3px) * -1);
|
||
left: 8px;
|
||
right: 8px;
|
||
}
|
||
.mat-mdc-chip-edit::after, .mat-mdc-chip-remove::after {
|
||
content: "";
|
||
display: block;
|
||
opacity: 0;
|
||
position: absolute;
|
||
top: -3px;
|
||
bottom: -3px;
|
||
left: 5px;
|
||
right: 5px;
|
||
border-radius: 50%;
|
||
box-sizing: border-box;
|
||
padding: 12px;
|
||
margin: -12px;
|
||
background-clip: content-box;
|
||
}
|
||
.mat-mdc-chip-edit .mat-icon, .mat-mdc-chip-remove .mat-icon {
|
||
width: 18px;
|
||
height: 18px;
|
||
font-size: 18px;
|
||
box-sizing: content-box;
|
||
}
|
||
|
||
.mat-chip-edit-input {
|
||
cursor: text;
|
||
display: inline-block;
|
||
color: inherit;
|
||
outline: 0;
|
||
}
|
||
|
||
@media (forced-colors: active) {
|
||
.mat-mdc-chip-selected:not(.mat-mdc-chip-multiple) {
|
||
outline-width: 3px;
|
||
}
|
||
}
|
||
|
||
.mat-mdc-chip-action:focus-visible .mat-focus-indicator::before {
|
||
content: "";
|
||
}
|
||
|
||
.mdc-evolution-chip__icon, .mat-mdc-chip-edit .mat-icon, .mat-mdc-chip-remove .mat-icon {
|
||
min-height: fit-content;
|
||
}
|
||
|
||
img.mdc-evolution-chip__icon {
|
||
min-height: 0;
|
||
}
|
||
`],encapsulation:2,changeDetection:0})}return n})();var fE=(()=>{class n{_elementRef=f(Kt);_document=f(Do);constructor(){}initialize(e){this.getNativeElement().focus(),this.setValue(e)}getNativeElement(){return this._elementRef.nativeElement}setValue(e){this.getNativeElement().textContent=e,this._moveCursorToEndOfInput()}getValue(){return this.getNativeElement().textContent||""}_moveCursorToEndOfInput(){let e=this._document.createRange();e.selectNodeContents(this.getNativeElement()),e.collapse(!1);let t=window.getSelection();t.removeAllRanges(),t.addRange(e)}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["span","matChipEditInput",""]],hostAttrs:["role","textbox","tabindex","-1","contenteditable","true",1,"mat-chip-edit-input"]})}return n})(),fi=(()=>{class n extends av{basicChipAttrName="mat-basic-chip-row";_renderer=f(qi);_cleanupMousedown;_editStartPending=!1;editable=!1;edited=new be;defaultEditInput;contentEditInput;_alreadyFocused=!1;_isEditing=!1;constructor(){super(),this.role="row",this._onBlur.pipe(He(this.destroyed)).subscribe(()=>{this._isEditing&&!this._editStartPending&&this._onEditFinish(),this._alreadyFocused=!1})}ngAfterViewInit(){super.ngAfterViewInit(),this._cleanupMousedown=this._ngZone.runOutsideAngular(()=>this._renderer.listen(this._elementRef.nativeElement,"mousedown",()=>{this._alreadyFocused=this._hasFocus()}))}ngOnDestroy(){super.ngOnDestroy(),this._cleanupMousedown?.()}_hasLeadingActionIcon(){return!this._isEditing&&!!this.editIcon}_hasTrailingIcon(){return!this._isEditing&&super._hasTrailingIcon()}_handleFocus(){!this._isEditing&&!this.disabled&&this.focus()}_handleKeydown(e){e.keyCode===13&&!this.disabled?this._isEditing?(e.preventDefault(),this._onEditFinish()):this.editable&&this._startEditing(e):this._isEditing?e.stopPropagation():super._handleKeydown(e)}_handleClick(e){!this.disabled&&this.editable&&!this._isEditing&&this._alreadyFocused&&(e.preventDefault(),e.stopPropagation(),this._startEditing(e))}_handleDoubleclick(e){!this.disabled&&this.editable&&this._startEditing(e)}_edit(){this._changeDetectorRef.markForCheck(),this._startEditing()}_startEditing(e){if(!this.primaryAction||this.removeIcon&&e&&this._getSourceAction(e.target)===this.removeIcon)return;let t=this.value;this._isEditing=this._editStartPending=!0,Ya(()=>{this._getEditInput().initialize(t),setTimeout(()=>this._ngZone.run(()=>this._editStartPending=!1))},{injector:this._injector})}_onEditFinish(){this._isEditing=this._editStartPending=!1,this.edited.emit({chip:this,value:this._getEditInput().getValue()}),(this._document.activeElement===this._getEditInput().getNativeElement()||this._document.activeElement===this._document.body)&&this.primaryAction.focus()}_isRippleDisabled(){return super._isRippleDisabled()||this._isEditing}_getEditInput(){return this.contentEditInput||this.defaultEditInput}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["mat-chip-row"],["","mat-chip-row",""],["mat-basic-chip-row"],["","mat-basic-chip-row",""]],contentQueries:function(t,i,a){if(t&1&&Zi(a,fE,5),t&2){let s;gt(s=ht())&&(i.contentEditInput=s.first)}},viewQuery:function(t,i){if(t&1&&Kn(fE,5),t&2){let a;gt(a=ht())&&(i.defaultEditInput=a.first)}},hostAttrs:[1,"mat-mdc-chip","mat-mdc-chip-row","mdc-evolution-chip"],hostVars:29,hostBindings:function(t,i){t&1&&_("focus",function(){return i._handleFocus()})("click",function(s){return i._hasInteractiveActions()?i._handleClick(s):null})("dblclick",function(s){return i._handleDoubleclick(s)}),t&2&&(pr("id",i.id),Ce("tabindex",i.disabled?null:-1)("aria-label",null)("aria-description",null)("role",i.role),ne("mat-mdc-chip-with-avatar",i.leadingIcon)("mat-mdc-chip-disabled",i.disabled)("mat-mdc-chip-editing",i._isEditing)("mat-mdc-chip-editable",i.editable)("mdc-evolution-chip--disabled",i.disabled)("mdc-evolution-chip--with-leading-action",i._hasLeadingActionIcon())("mdc-evolution-chip--with-trailing-action",i._hasTrailingIcon())("mdc-evolution-chip--with-primary-graphic",i.leadingIcon)("mdc-evolution-chip--with-primary-icon",i.leadingIcon)("mdc-evolution-chip--with-avatar",i.leadingIcon)("mat-mdc-chip-highlighted",i.highlighted)("mat-mdc-chip-with-trailing-icon",i._hasTrailingIcon()))},inputs:{editable:"editable"},outputs:{edited:"edited"},features:[un([{provide:av,useExisting:n},{provide:yE,useExisting:n}]),mi],ngContentSelectors:goe,decls:9,vars:8,consts:[[1,"mat-mdc-chip-focus-overlay"],["role","gridcell",1,"mdc-evolution-chip__cell","mdc-evolution-chip__cell--leading"],["role","gridcell","matChipAction","",1,"mdc-evolution-chip__cell","mdc-evolution-chip__cell--primary",3,"disabled"],[1,"mdc-evolution-chip__graphic","mat-mdc-chip-graphic"],[1,"mdc-evolution-chip__text-label","mat-mdc-chip-action-label"],["aria-hidden","true",1,"mat-mdc-chip-primary-focus-indicator","mat-focus-indicator"],["role","gridcell",1,"mdc-evolution-chip__cell","mdc-evolution-chip__cell--trailing"],["matChipEditInput",""]],template:function(t,i){t&1&&(pi(uoe),T(0,hoe,1,0,"span",0),T(1,_oe,2,0,"span",1),r(2,"span",2),T(3,foe,2,0,"span",3),r(4,"span",4),T(5,boe,2,1)(6,xoe,1,0),L(7,"span",5),l()(),T(8,yoe,2,0,"span",6)),t&2&&(E(i._isEditing?-1:0),m(),E(i._hasLeadingActionIcon()?1:-1),m(),v("disabled",i.disabled),Ce("aria-description",i.ariaDescription)("aria-label",i.ariaLabel),m(),E(i.leadingIcon?3:-1),m(2),E(i._isEditing?5:6),m(3),E(i._hasTrailingIcon()?8:-1))},dependencies:[wE,fE],styles:[poe],encapsulation:2,changeDetection:0})}return n})(),ME=(()=>{class n{_elementRef=f(Kt);_changeDetectorRef=f(oe);_dir=f(Kr,{optional:!0});_lastDestroyedFocusedChipIndex=null;_keyManager;_destroyed=new Ye;_defaultRole="presentation";get chipFocusChanges(){return this._getChipStream(e=>e._onFocus)}get chipDestroyedChanges(){return this._getChipStream(e=>e.destroyed)}get chipRemovedChanges(){return this._getChipStream(e=>e.removed)}get disabled(){return this._disabled}set disabled(e){this._disabled=e,this._syncChipsState()}_disabled=!1;get empty(){return!this._chips||this._chips.length===0}get role(){return this._explicitRole?this._explicitRole:this.empty?null:this._defaultRole}tabIndex=0;set role(e){this._explicitRole=e}_explicitRole=null;get focused(){return this._hasFocusedChip()}_chips;_chipActions=new ec;constructor(){}ngAfterViewInit(){this._setUpFocusManagement(),this._trackChipSetChanges(),this._trackDestroyedFocusedChip()}ngOnDestroy(){this._keyManager?.destroy(),this._chipActions.destroy(),this._destroyed.next(),this._destroyed.complete()}_hasFocusedChip(){return this._chips&&this._chips.some(e=>e._hasFocus())}_syncChipsState(){this._chips?.forEach(e=>{e._chipListDisabled=this._disabled,e._changeDetectorRef.markForCheck()})}focus(){}_handleKeydown(e){this._originatesFromChip(e)&&this._keyManager.onKeydown(e)}_isValidIndex(e){return e>=0&&e<this._chips.length}_allowFocusEscape(){let e=this._elementRef.nativeElement.tabIndex;e!==-1&&(this._elementRef.nativeElement.tabIndex=-1,setTimeout(()=>this._elementRef.nativeElement.tabIndex=e))}_getChipStream(e){return this._chips.changes.pipe(Di(null),Dn(()=>ro(...this._chips.map(e))))}_originatesFromChip(e){let t=e.target;for(;t&&t!==this._elementRef.nativeElement;){if(t.classList.contains("mat-mdc-chip"))return!0;t=t.parentElement}return!1}_setUpFocusManagement(){this._chips.changes.pipe(Di(this._chips)).subscribe(e=>{let t=[];e.forEach(i=>i._getActions().forEach(a=>t.push(a))),this._chipActions.reset(t),this._chipActions.notifyOnChanges()}),this._keyManager=new dg(this._chipActions).withVerticalOrientation().withHorizontalOrientation(this._dir?this._dir.value:"ltr").withHomeAndEnd().skipPredicate(e=>this._skipPredicate(e)),this.chipFocusChanges.pipe(He(this._destroyed)).subscribe(({chip:e})=>{let t=e._getSourceAction(document.activeElement);t&&this._keyManager.updateActiveItem(t)}),this._dir?.change.pipe(He(this._destroyed)).subscribe(e=>this._keyManager.withHorizontalOrientation(e))}_skipPredicate(e){return e.disabled}_trackChipSetChanges(){this._chips.changes.pipe(Di(null),He(this._destroyed)).subscribe(()=>{this.disabled&&Promise.resolve().then(()=>this._syncChipsState()),this._redirectDestroyedChipFocus()})}_trackDestroyedFocusedChip(){this.chipDestroyedChanges.pipe(He(this._destroyed)).subscribe(e=>{let i=this._chips.toArray().indexOf(e.chip),a=e.chip._hasFocus(),s=e.chip._hadFocusOnRemove&&this._keyManager.activeItem&&e.chip._getActions().includes(this._keyManager.activeItem),d=a||s;this._isValidIndex(i)&&d&&(this._lastDestroyedFocusedChipIndex=i)})}_redirectDestroyedChipFocus(){if(this._lastDestroyedFocusedChipIndex!=null){if(this._chips.length){let e=Math.min(this._lastDestroyedFocusedChipIndex,this._chips.length-1),t=this._chips.toArray()[e];t.disabled?this._chips.length===1?this.focus():this._keyManager.setPreviousItemActive():t.focus()}else this.focus();this._lastDestroyedFocusedChipIndex=null}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["mat-chip-set"]],contentQueries:function(t,i,a){if(t&1&&Zi(a,av,5),t&2){let s;gt(s=ht())&&(i._chips=s)}},hostAttrs:[1,"mat-mdc-chip-set","mdc-evolution-chip-set"],hostVars:1,hostBindings:function(t,i){t&1&&_("keydown",function(s){return i._handleKeydown(s)}),t&2&&Ce("role",i.role)},inputs:{disabled:[2,"disabled","disabled",zt],role:"role",tabIndex:[2,"tabIndex","tabIndex",e=>e==null?0:qo(e)]},ngContentSelectors:iz,decls:2,vars:0,consts:[["role","presentation",1,"mdc-evolution-chip-set__chips"]],template:function(t,i){t&1&&(pi(),ii(0,"div",0),Zt(1),Si())},styles:[`.mat-mdc-chip-set {
|
||
display: flex;
|
||
}
|
||
.mat-mdc-chip-set:focus {
|
||
outline: none;
|
||
}
|
||
.mat-mdc-chip-set .mdc-evolution-chip-set__chips {
|
||
min-width: 100%;
|
||
margin-left: -8px;
|
||
margin-right: 0;
|
||
}
|
||
.mat-mdc-chip-set .mdc-evolution-chip {
|
||
margin: 4px 0 4px 8px;
|
||
}
|
||
[dir=rtl] .mat-mdc-chip-set .mdc-evolution-chip-set__chips {
|
||
margin-left: 0;
|
||
margin-right: -8px;
|
||
}
|
||
[dir=rtl] .mat-mdc-chip-set .mdc-evolution-chip {
|
||
margin-left: 0;
|
||
margin-right: 8px;
|
||
}
|
||
|
||
.mdc-evolution-chip-set__chips {
|
||
display: flex;
|
||
flex-flow: wrap;
|
||
min-width: 0;
|
||
}
|
||
|
||
.mat-mdc-chip-set-stacked {
|
||
flex-direction: column;
|
||
align-items: flex-start;
|
||
}
|
||
.mat-mdc-chip-set-stacked .mat-mdc-chip {
|
||
width: 100%;
|
||
}
|
||
.mat-mdc-chip-set-stacked .mdc-evolution-chip__graphic {
|
||
flex-grow: 0;
|
||
}
|
||
.mat-mdc-chip-set-stacked .mdc-evolution-chip__action--primary {
|
||
flex-basis: 100%;
|
||
justify-content: start;
|
||
}
|
||
|
||
input.mat-mdc-chip-input {
|
||
flex: 1 0 150px;
|
||
margin-left: 8px;
|
||
}
|
||
[dir=rtl] input.mat-mdc-chip-input {
|
||
margin-left: 0;
|
||
margin-right: 8px;
|
||
}
|
||
.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::placeholder {
|
||
opacity: 1;
|
||
}
|
||
.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::-moz-placeholder {
|
||
opacity: 1;
|
||
}
|
||
.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::-webkit-input-placeholder {
|
||
opacity: 1;
|
||
}
|
||
.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input:-ms-input-placeholder {
|
||
opacity: 1;
|
||
}
|
||
.mat-mdc-chip-set + input.mat-mdc-chip-input {
|
||
margin-left: 0;
|
||
margin-right: 0;
|
||
}
|
||
`],encapsulation:2,changeDetection:0})}return n})();var CE=class{source;value;constructor(o,e){this.source=o,this.value=e}},bi=(()=>{class n extends ME{ngControl=f(qC,{optional:!0,self:!0});controlType="mat-chip-grid";_chipInput;_defaultRole="grid";_errorStateTracker;_uid=f(ua).getId("mat-chip-grid-");_ariaDescribedbyIds=[];_onTouched=()=>{};_onChange=()=>{};get disabled(){return this.ngControl?!!this.ngControl.disabled:this._disabled}set disabled(e){this._disabled=e,this._syncChipsState(),this.stateChanges.next()}get id(){return this._chipInput?this._chipInput.id:this._uid}get empty(){return(!this._chipInput||this._chipInput.empty)&&(!this._chips||this._chips.length===0)}get placeholder(){return this._chipInput?this._chipInput.placeholder:this._placeholder}set placeholder(e){this._placeholder=e,this.stateChanges.next()}_placeholder="";get focused(){return this._chipInput?.focused||this._hasFocusedChip()}get required(){return this._required??this.ngControl?.control?.hasValidator(Ue.required)??!1}set required(e){this._required=e,this.stateChanges.next()}_required;get shouldLabelFloat(){return!this.empty||this.focused}get value(){return this._value}set value(e){this._value=e}_value=[];get errorStateMatcher(){return this._errorStateTracker.matcher}set errorStateMatcher(e){this._errorStateTracker.matcher=e}get chipBlurChanges(){return this._getChipStream(e=>e._onBlur)}change=new be;valueChange=new be;_chips=void 0;stateChanges=new Ye;get errorState(){return this._errorStateTracker.errorState}set errorState(e){this._errorStateTracker.errorState=e}constructor(){super();let e=f(Ji,{optional:!0}),t=f(Ut,{optional:!0}),i=f(Td);this.ngControl&&(this.ngControl.valueAccessor=this),this._errorStateTracker=new ib(i,this.ngControl,t,e,this.stateChanges)}ngAfterContentInit(){this.chipBlurChanges.pipe(He(this._destroyed)).subscribe(()=>{this._blur(),this.stateChanges.next()}),ro(this.chipFocusChanges,this._chips.changes).pipe(He(this._destroyed)).subscribe(()=>this.stateChanges.next())}ngDoCheck(){this.ngControl&&this.updateErrorState()}ngOnDestroy(){super.ngOnDestroy(),this.stateChanges.complete()}registerInput(e){this._chipInput=e,this._chipInput.setDescribedByIds(this._ariaDescribedbyIds),this._elementRef.nativeElement.removeAttribute("aria-describedby")}onContainerClick(e){!this.disabled&&!this._originatesFromChip(e)&&this.focus()}focus(){if(!(this.disabled||this._chipInput?.focused)){if(!this._chips.length||this._chips.first.disabled){if(!this._chipInput)return;Promise.resolve().then(()=>this._chipInput.focus())}else{let e=this._keyManager.activeItem;e?e.focus():this._keyManager.setFirstItemActive()}this.stateChanges.next()}}get describedByIds(){if(this._chipInput)return this._chipInput.describedByIds||[];let e=this._elementRef.nativeElement.getAttribute("aria-describedby");return e?e.split(" "):[]}setDescribedByIds(e){this._ariaDescribedbyIds=e,this._chipInput?this._chipInput.setDescribedByIds(e):e.length?this._elementRef.nativeElement.setAttribute("aria-describedby",e.join(" ")):this._elementRef.nativeElement.removeAttribute("aria-describedby")}writeValue(e){this._value=e}registerOnChange(e){this._onChange=e}registerOnTouched(e){this._onTouched=e}setDisabledState(e){this.disabled=e,this.stateChanges.next()}updateErrorState(){this._errorStateTracker.updateErrorState()}_blur(){this.disabled||setTimeout(()=>{this.focused||(this._propagateChanges(),this._markAsTouched())})}_allowFocusEscape(){this._chipInput?.focused||super._allowFocusEscape()}_handleKeydown(e){let t=e.keyCode,i=this._keyManager.activeItem;if(t===9)this._chipInput?.focused&&gs(e,"shiftKey")&&this._chips.length&&!this._chips.last.disabled?(e.preventDefault(),i?this._keyManager.setActiveItem(i):this._focusLastChip()):super._allowFocusEscape();else if(!this._chipInput?.focused)if((t===38||t===40)&&i){let a=this._chipActions.filter(p=>p._isPrimary===i._isPrimary&&!this._skipPredicate(p)),s=a.indexOf(i),d=e.keyCode===38?-1:1;e.preventDefault(),s>-1&&this._isValidIndex(s+d)&&this._keyManager.setActiveItem(a[s+d])}else super._handleKeydown(e);this.stateChanges.next()}_focusLastChip(){this._chips.length&&this._chips.last.focus()}_propagateChanges(){let e=this._chips.length?this._chips.toArray().map(t=>t.value):[];this._value=e,this.change.emit(new CE(this,e)),this.valueChange.emit(e),this._onChange(e),this._changeDetectorRef.markForCheck()}_markAsTouched(){this._onTouched(),this._changeDetectorRef.markForCheck(),this.stateChanges.next()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["mat-chip-grid"]],contentQueries:function(t,i,a){if(t&1&&Zi(a,fi,5),t&2){let s;gt(s=ht())&&(i._chips=s)}},hostAttrs:[1,"mat-mdc-chip-set","mat-mdc-chip-grid","mdc-evolution-chip-set"],hostVars:10,hostBindings:function(t,i){t&1&&_("focus",function(){return i.focus()})("blur",function(){return i._blur()}),t&2&&(Ce("role",i.role)("tabindex",i.disabled||i._chips&&i._chips.length===0?-1:i.tabIndex)("aria-disabled",i.disabled.toString())("aria-invalid",i.errorState),ne("mat-mdc-chip-list-disabled",i.disabled)("mat-mdc-chip-list-invalid",i.errorState)("mat-mdc-chip-list-required",i.required))},inputs:{disabled:[2,"disabled","disabled",zt],placeholder:"placeholder",required:[2,"required","required",zt],value:"value",errorStateMatcher:"errorStateMatcher"},outputs:{change:"change",valueChange:"valueChange"},features:[un([{provide:nb,useExisting:n}]),mi],ngContentSelectors:iz,decls:2,vars:0,consts:[["role","presentation",1,"mdc-evolution-chip-set__chips"]],template:function(t,i){t&1&&(pi(),ii(0,"div",0),Zt(1),Si())},styles:[woe],encapsulation:2,changeDetection:0})}return n})(),xi=(()=>{class n{_elementRef=f(Kt);focused=!1;get chipGrid(){return this._chipGrid}set chipGrid(e){e&&(this._chipGrid=e,this._chipGrid.registerInput(this))}_chipGrid;addOnBlur=!1;separatorKeyCodes;chipEnd=new be;placeholder="";id=f(ua).getId("mat-mdc-chip-list-input-");get disabled(){return this._disabled||this._chipGrid&&this._chipGrid.disabled}set disabled(e){this._disabled=e}_disabled=!1;readonly=!1;disabledInteractive;get empty(){return!this.inputElement.value}inputElement;constructor(){let e=f(oz),t=f(ug,{optional:!0});this.inputElement=this._elementRef.nativeElement,this.separatorKeyCodes=e.separatorKeyCodes,this.disabledInteractive=e.inputDisabledInteractive??!1,t&&this.inputElement.classList.add("mat-mdc-form-field-input-control")}ngOnChanges(){this._chipGrid.stateChanges.next()}ngOnDestroy(){this.chipEnd.complete()}_keydown(e){this.empty&&e.keyCode===8?(e.repeat||this._chipGrid._focusLastChip(),e.preventDefault()):this._emitChipEnd(e)}_blur(){this.addOnBlur&&this._emitChipEnd(),this.focused=!1,this._chipGrid.focused||this._chipGrid._blur(),this._chipGrid.stateChanges.next()}_focus(){this.focused=!0,this._chipGrid.stateChanges.next()}_emitChipEnd(e){(!e||this._isSeparatorKey(e)&&!e.repeat)&&(this.chipEnd.emit({input:this.inputElement,value:this.inputElement.value,chipInput:this}),e?.preventDefault())}_onInput(){this._chipGrid.stateChanges.next()}focus(){this.inputElement.focus()}clear(){this.inputElement.value=""}get describedByIds(){return this._elementRef.nativeElement.getAttribute("aria-describedby")?.split(" ")||[]}setDescribedByIds(e){let t=this._elementRef.nativeElement;e.length?t.setAttribute("aria-describedby",e.join(" ")):t.removeAttribute("aria-describedby")}_isSeparatorKey(e){if(!this.separatorKeyCodes)return!1;for(let t of this.separatorKeyCodes){let i,a;typeof t=="number"?(i=t,a=null):(i=t.keyCode,a=t.modifiers);let s=a?.length?gs(e,...a):!gs(e);if(i===e.keyCode&&s)return!0}return!1}_getReadonlyAttribute(){return this.readonly||this.disabled&&this.disabledInteractive?"true":null}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["input","matChipInputFor",""]],hostAttrs:[1,"mat-mdc-chip-input","mat-mdc-input-element","mdc-text-field__input","mat-input-element"],hostVars:8,hostBindings:function(t,i){t&1&&_("keydown",function(s){return i._keydown(s)})("blur",function(){return i._blur()})("focus",function(){return i._focus()})("input",function(){return i._onInput()}),t&2&&(pr("id",i.id),Ce("disabled",i.disabled&&!i.disabledInteractive?"":null)("placeholder",i.placeholder||null)("aria-invalid",i._chipGrid&&i._chipGrid.ngControl?i._chipGrid.ngControl.invalid:null)("aria-required",i._chipGrid&&i._chipGrid.required||null)("aria-disabled",i.disabled&&i.disabledInteractive?"true":null)("readonly",i._getReadonlyAttribute())("required",i._chipGrid&&i._chipGrid.required||null))},inputs:{chipGrid:[0,"matChipInputFor","chipGrid"],addOnBlur:[2,"matChipInputAddOnBlur","addOnBlur",zt],separatorKeyCodes:[0,"matChipInputSeparatorKeyCodes","separatorKeyCodes"],placeholder:"placeholder",id:"id",disabled:[2,"disabled","disabled",zt],readonly:[2,"readonly","readonly",zt],disabledInteractive:[2,"matChipInputDisabledInteractive","disabledInteractive",zt]},outputs:{chipEnd:"matChipInputTokenEnd"},exportAs:["matChipInput","matChipInputFor"],features:[Nn]})}return n})();var ri=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=on({type:n});static \u0275inj=nn({providers:[Td,{provide:oz,useValue:{separatorKeyCodes:[13]}}],imports:[Oc,Vi]})}return n})();var zr=(()=>{class n{getCategoriesForCloudNodes(){return[["Default","guest"],["Routers","router"],["Switches","switch"],["End devices","guest"],["Security devices","firewall"]]}getConsoleTypesForCloudNodes(){return["telnet","ssh","vnc","spice","http","https","none"]}getCategoriesForEthernetHubs(){return[["Default","guest"],["Routers","router"],["Switches","switch"],["End devices","guest"],["Security devices","firewall"]]}getCategoriesForEthernetSwitches(){return[["Default","guest"],["Routers","router"],["Switches","switch"],["End devices","guest"],["Security devices","firewall"]]}getConsoleTypesForEthernetSwitches(){return["telnet","none"]}getPortTypesForEthernetSwitches(){return["access","dot1q","qinq"]}getEtherTypesForEthernetSwitches(){return["0x8100","0x88A8","0x9100","0x9200"]}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Hn=(()=>{class n{errorMessages={required:e=>`${e} is required`,portInvalid:"Port must be a non-negative integer",portOutOfRange:(e,t)=>`Port must be between ${e} and ${t}`,numberInvalid:e=>`${e} must be a valid number`,numberOutOfRange:(e,t,i)=>`${e} must be between ${t} and ${i}`,numberTooSmall:(e,t)=>`${e} must be at least ${t}`,formatInvalid:(e,t)=>`${e} must match the format: ${t}`,duplicate:"This entry already exists",mappingFormat:e=>e==="VC"?"Mapping must be in format: port:vpi:vci (e.g., 0:0:100)":"Mapping must be in format: port:vpi (e.g., 0:0)"};required(e,t="Field"){let i=e!=null&&e.trim()!=="";return{isValid:i,errorMessage:i?void 0:this.errorMessages.required(t)}}validatePort(e){if(!e||e.trim()==="")return{isValid:!1,errorMessage:this.errorMessages.required("Port")};let t=parseInt(e,10),i=!isNaN(t)&&t>=0&&t===parseFloat(e);return{isValid:i,errorMessage:i?void 0:this.errorMessages.portInvalid}}createIntegerValidator(e,t){return i=>{if(!i||i.trim()==="")return{isValid:!1,errorMessage:`${e} is required`};let a=parseInt(i,10),s=!isNaN(a)&&a>=t&&a===parseFloat(i),d=t===0?"non-negative":`positive (>= ${t})`;return{isValid:s,errorMessage:s?void 0:`${e} must be a ${d} integer`}}}validatePortRange(e,t=0,i=65535){let a=this.validatePort(e);if(!a.isValid)return a;let s=parseInt(e,10),d=s>=t&&s<=i;return{isValid:d,errorMessage:d?void 0:this.errorMessages.portOutOfRange(t,i)}}validatePositiveInteger(e,t="Value"){if(!e||e.trim()==="")return{isValid:!1,errorMessage:this.errorMessages.required(t)};let i=parseInt(e,10),a=!isNaN(i)&&i>=1&&i===parseFloat(e);return{isValid:a,errorMessage:a?void 0:this.errorMessages.numberTooSmall(t,1)}}validateNumberRange(e,t,i,a="Value"){if(!e||e.trim()==="")return{isValid:!1,errorMessage:this.errorMessages.required(a)};let s=parseFloat(e),d=!isNaN(s)&&s>=t&&s<=i;return{isValid:d,errorMessage:d?void 0:this.errorMessages.numberOutOfRange(a,t,i)}}validateAtmVcMapping(e){if(!e||e.trim()==="")return{isValid:!1,errorMessage:this.errorMessages.required("Mapping")};let i=/^([0-9]*):([0-9]*):([0-9]*)$/.test(e);return{isValid:i,errorMessage:i?void 0:this.errorMessages.mappingFormat("VC")}}validateAtmVpMapping(e){if(!e||e.trim()==="")return{isValid:!1,errorMessage:this.errorMessages.required("Mapping")};let t=e.split(":");if(t.length!==2)return{isValid:!1,errorMessage:this.errorMessages.mappingFormat("VP")};let[i,a]=t,s=this.validatePort(i),d=this.validatePort(a),p=s.isValid&&d.isValid;return{isValid:p,errorMessage:p?void 0:this.errorMessages.mappingFormat("VP")}}validateFrameRelayMapping(e){if(!e||e.trim()==="")return{isValid:!1,errorMessage:this.errorMessages.required("Mapping")};let t=e.split(":");if(t.length!==2)return{isValid:!1,errorMessage:"Mapping must be in format: port:dlci (e.g., 0:100)"};let[i,a]=t;if(!this.validatePort(i).isValid)return{isValid:!1,errorMessage:"Invalid port number"};let d=parseInt(a,10),p=!isNaN(d)&&d>=16&&d<=1007;return{isValid:p,errorMessage:p?void 0:"DLCI must be between 16 and 1007"}}validateIpAddress(e){if(!e||e.trim()==="")return{isValid:!1,errorMessage:"IP address is required"};let i=/^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(e);return{isValid:i,errorMessage:i?void 0:"Invalid IP address format"}}validateUnique(e,t,i){let a=i!==void 0?t.includes(e)&&e!==i:t.includes(e);return{isValid:!a,errorMessage:a?this.errorMessages.duplicate:void 0}}validateHostname(e){if(!e||e.trim()==="")return{isValid:!1,errorMessage:"Hostname is required"};let i=/^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)*[a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?$/.test(e)&&e.length<=253;return{isValid:i,errorMessage:i?void 0:"Invalid hostname format (use letters, numbers, hyphens, and dots)"}}macRegex=/^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$/;validateMacAddress(e){return!e||e.trim()===""?{isValid:!0}:this.macRegex.test(e)?{isValid:!0}:{isValid:!1,errorMessage:"Invalid MAC address format (expected XX:XX:XX:XX:XX:XX)"}}validatePattern(e,t,i="Field",a){if(!e||e.trim()==="")return{isValid:!1,errorMessage:this.errorMessages.required(i)};let s=t.test(e);return{isValid:s,errorMessage:s?void 0:a||this.errorMessages.formatInvalid(i,t.toString())}}validateNetmikoDeviceType(e){if(!e||e.trim()==="")return{isValid:!0};let t=/^[a-z0-9_]+$/.test(e.trim());return{isValid:t,errorMessage:t?void 0:"Netmiko device type must only contain lowercase letters, digits and underscores (e.g. cisco_xr)"}}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var SE=(()=>{class n{base=f(Hn);validateSourcePort=this.base.createIntegerValidator("Source Port",0);validateDestinationPort=this.base.createIntegerValidator("Destination Port",0);validateSourceVci=this.base.createIntegerValidator("Source VCI",1);validateDestinationVci=this.base.createIntegerValidator("Destination VCI",1);validateSourceVpi=this.base.createIntegerValidator("Source VPI",1);validateDestinationVpi=this.base.createIntegerValidator("Destination VPI",1);validateVcMapping(e){if(!e||e.trim()==="")return{isValid:!1,errorMessage:"Mapping is required"};if(!/^([0-9]*):([0-9]*):([0-9]*)$/.test(e))return{isValid:!1,errorMessage:"VC mapping must be in format: port:vpi:vci (e.g., 0:0:100)"};let a=e.split(":"),[s,d,p]=a;return s&&!this.base.validatePort(s).isValid?{isValid:!1,errorMessage:"Port must be a non-negative integer"}:d&&!this.base.validatePort(d).isValid?{isValid:!1,errorMessage:"VPI must be a non-negative integer"}:p&&!this.base.validatePositiveInteger(p,"VCI").isValid?{isValid:!1,errorMessage:"VCI must be a positive integer (>= 1)"}:{isValid:!0}}validateVpMapping(e){if(!e||e.trim()==="")return{isValid:!1,errorMessage:"Mapping is required"};let t=e.split(":");if(t.length!==2)return{isValid:!1,errorMessage:"VP mapping must be in format: port:vpi (e.g., 0:0)"};let[i,a]=t;return this.base.validatePort(i).isValid?this.base.validatePort(a).isValid?{isValid:!0}:{isValid:!1,errorMessage:"VPI must be a non-negative integer"}:{isValid:!1,errorMessage:"Port must be a non-negative integer"}}validateMappingEntry(e,t,i,a,s,d,p){let u=this.validateSourcePort(e);if(!u.isValid)return u;let g=this.validateSourceVci(t);if(!g.isValid)return g;let C=this.validateDestinationPort(i);if(!C.isValid)return C;let M=this.validateDestinationVci(a);if(!M.isValid)return M;if(!p){let x=this.validateSourceVpi(s);if(!x.isValid)return x;let b=this.validateDestinationVpi(d);if(!b.isValid)return b}return{isValid:!0}}validateUniqueMapping(e,t){return t.some(a=>a.portIn===e)?{isValid:!1,errorMessage:"This mapping already exists"}:{isValid:!0}}validateGeneratedMapping(e,t,i){return i?this.validateVpMapping(e):this.validateVcMapping(e)}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var rv=(()=>{class n{base=f(Hn);validateName(e){return this.base.required(e,"Name")}validateRemoteConsolePort(e){return!e||e.trim()===""?{isValid:!0}:this.base.validatePortRange(e,1,65535)}validateInterfaceName(e,t=!1){return!e||e.trim()===""?{isValid:!1,errorMessage:"Interface name is required"}:t&&(e.length>15||/[^a-zA-Z0-9_.:-]/.test(e))?{isValid:!1,errorMessage:"A bridged TAP name must be 1-15 letters, digits, underscores, dots, colons or hyphens"}:{isValid:!0}}validateUniqueInterface(e,t){return t.includes(e)?{isValid:!1,errorMessage:`Interface ${e} already configured.`}:{isValid:!0}}validateConsoleType(e,t){return!e||e.trim()===""?{isValid:!1,errorMessage:"Console type is required"}:t.includes(e)?{isValid:!0}:{isValid:!1,errorMessage:`Invalid console type. Must be one of: ${t.join(", ")}`}}validateRemoteConsoleHost(e){return!e||e.trim()===""?{isValid:!0}:/^[a-zA-Z0-9.-]+$/.test(e)?{isValid:!0}:{isValid:!1,errorMessage:"Invalid hostname or IP address format"}}validateRemoteConsoleHttpPath(e){return!e||e.trim()===""?{isValid:!0}:e&&!e.startsWith("/")?{isValid:!1,errorMessage:"HTTP path must start with /"}:{isValid:!0}}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var sv=(()=>{class n{base=f(Hn);macRegex=/^([0-9a-fA-F]{2}[:]){5}([0-9a-fA-F]{2})$/;resolutionRegex=/^[0-9]+x[0-9]+$/;validateName(e){return this.base.required(e,"Name")}validateAdapters(e,t=99){if(!e||e.trim()==="")return{isValid:!1,errorMessage:"Adapters is required"};let i=parseInt(e,10);return isNaN(i)||i<0||i!==parseFloat(e)?{isValid:!1,errorMessage:`Adapters must be a non-negative integer (0-${t})`}:i>t?{isValid:!1,errorMessage:`Adapters must not exceed ${t}`}:{isValid:!0}}validateMacAddress(e){return!e||e.trim()===""?{isValid:!0}:this.macRegex.test(e)?{isValid:!0}:{isValid:!1,errorMessage:"Invalid MAC address format (expected XX:XX:XX:XX:XX:XX)"}}validateMemory(e){return!e||e.trim()===""?{isValid:!0}:this.base.validatePort(e).isValid?{isValid:!0}:{isValid:!1,errorMessage:"Memory must be a non-negative integer"}}validateCpus(e){if(!e||e.trim()==="")return{isValid:!0};let t=parseFloat(e);return isNaN(t)||t<0?{isValid:!1,errorMessage:"CPUs must be a non-negative number"}:{isValid:!0}}validateConsoleHttpPort(e){return!e||e.trim()===""?{isValid:!0}:this.base.validatePortRange(e,1,65535)}validateConsoleHttpPath(e){return this.base.required(e,"Console HTTP path")}validateConsoleResolution(e){return!e||e.trim()===""?{isValid:!0}:this.resolutionRegex.test(e)?{isValid:!0}:{isValid:!1,errorMessage:"Invalid resolution format (expected WIDTHxHEIGHT, e.g. 1024x768)"}}validateEnvironment(e,t="Environment"){if(!e||e.trim()==="")return{isValid:!0};let i=e.split(`
|
||
`);for(let a=0;a<i.length;a++){let s=i[a].trim();if(!s)continue;let d=s.indexOf("=");if(d<=0)return{isValid:!1,errorMessage:`${t}, line ${a+1}: Invalid format (expected KEY=VALUE)`};let p=s.substring(0,d);if(p!==p.toUpperCase())return{isValid:!1,errorMessage:`${t}, line ${a+1}: Variable name "${p}" should be uppercase (e.g., ${p.toUpperCase()}=value)`}}return{isValid:!0}}validateExtraConfigs(e){let t=new Set;for(let i=0;i<e.length;i++){let a=(e[i].target||"").trim(),s=(e[i].content||"").trim(),d=i+1;if(!a){if(s)return{isValid:!1,errorMessage:`Extra files, row ${d}: file content requires a container target path`};continue}if(!a.startsWith("/"))return{isValid:!1,errorMessage:`Extra files, row ${d}: target "${a}" must be an absolute path (e.g., /firstboot.cfg)`};if(a.split("/").includes(".."))return{isValid:!1,errorMessage:`Extra files, row ${d}: target "${a}" must not contain '..'`};if(t.has(a))return{isValid:!1,errorMessage:`Extra files, row ${d}: duplicate target path "${a}"`};t.add(a)}return{isValid:!0}}validateConsolePort(e){return!e||e.trim()===""?{isValid:!0}:this.base.validatePortRange(e,1,65535)}validateNetmikoDeviceType(e){return this.base.validateNetmikoDeviceType(e)}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var lv=(()=>{class n{base=f(Hn);idlePcRegex=/^(0x[0-9a-fA-F]+)?$/;platformRamLimits={c7200:{min:512,max:512},c3725:{min:128,max:256},c3745:{min:128,max:256},c2691:{min:128,max:256},c3600:{min:192,max:192},c2600:{min:160,max:160},c1700:{min:160,max:160}};platformNvramDefaults={c7200:512,c3725:256,c3745:256,c2691:256,c3600:256,c2600:256,c1700:256};validateName(e){return this.base.required(e,"Name")}validateImagePath(e){return this.base.required(e,"IOS image path")}validateRam(e){let t=this.base.required(e,"RAM");if(!t.isValid)return t;let i=parseInt(e,10);return isNaN(i)||i<0||i!==parseFloat(e)?{isValid:!1,errorMessage:"RAM must be a non-negative integer"}:{isValid:!0}}validateNvram(e){let t=this.base.required(e,"NVRAM");if(!t.isValid)return t;let i=parseInt(e,10);return isNaN(i)||i<0||i!==parseFloat(e)?{isValid:!1,errorMessage:"NVRAM must be a non-negative integer"}:{isValid:!0}}validateIdlepc(e){return!e||e.trim()===""?{isValid:!0}:this.idlePcRegex.test(e)?{isValid:!0}:{isValid:!1,errorMessage:"Invalid Idle-PC format (expected 0x..., e.g. 0x1234)"}}validateMacAddress(e){return!e||e.trim()===""?{isValid:!0}:/^([0-9a-fA-F]{4}\.){2}[0-9a-fA-F]{4}$/.test(e)?{isValid:!0}:{isValid:!1,errorMessage:"Invalid MAC address format (expected XXXX.XXXX.XXXX)"}}validateRamForPlatform(e,t){let i=this.validateRam(e);if(!i.isValid)return i;let a=this.platformRamLimits[t];if(a){let s=parseInt(e,10);if(s<a.min||s>a.max)return{isValid:!1,errorMessage:`RAM for ${t} should be ${a.min} MB${a.max!==a.min?` (${a.min}-${a.max})`:""}`}}return{isValid:!0}}validateNvramForPlatform(e,t){let i=this.validateNvram(e);if(!i.isValid)return i;let a=this.platformNvramDefaults[t];if(a){let s=parseInt(e,10);if(s>a*2)return{isValid:!1,errorMessage:`NVRAM for ${t} is typically ${a} KB. Value ${s} seems unusually high.`}}return{isValid:!0}}validateIomem(e){if(!e||e.trim()==="")return{isValid:!0};let t=parseInt(e,10);return isNaN(t)||t<0||t>100||t!==parseFloat(e)?{isValid:!1,errorMessage:"I/O memory must be an integer between 0 and 100"}:{isValid:!0}}validateDisk(e,t){if(!e||e.trim()==="")return{isValid:!0};let i=parseInt(e,10);return isNaN(i)||i<0||i!==parseFloat(e)?{isValid:!1,errorMessage:`${t} must be a non-negative integer`}:{isValid:!0}}validateNonNegative(e,t){if(!e||e.trim()==="")return{isValid:!0};let i=parseInt(e,10);return isNaN(i)||i<0||i!==parseFloat(e)?{isValid:!1,errorMessage:`${t} must be a non-negative integer`}:{isValid:!0}}validateNetmikoDeviceType(e){return this.base.validateNetmikoDeviceType(e)}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var cv=(()=>{class n{base=f(Hn);validateName(e){return this.base.required(e,"Name")}validatePath(e){return this.base.required(e,"IOU image path")}validateEthernetAdapters(e){let t=this.base.required(e,"Ethernet adapters");if(!t.isValid)return t;let i=parseInt(e,10);return isNaN(i)||i<0||i!==parseFloat(e)?{isValid:!1,errorMessage:"Ethernet adapters must be a non-negative integer"}:{isValid:!0}}validateSerialAdapters(e){let t=this.base.required(e,"Serial adapters");if(!t.isValid)return t;let i=parseInt(e,10);return isNaN(i)||i<0||i!==parseFloat(e)?{isValid:!1,errorMessage:"Serial adapters must be a non-negative integer"}:{isValid:!0}}validateRam(e){if(!e||e.trim()==="")return{isValid:!0};let t=parseInt(e,10);return isNaN(t)||t<0||t!==parseFloat(e)?{isValid:!1,errorMessage:"RAM must be a non-negative integer"}:{isValid:!0}}validateNvram(e){if(!e||e.trim()==="")return{isValid:!0};let t=parseInt(e,10);return isNaN(t)||t<0||t!==parseFloat(e)?{isValid:!1,errorMessage:"NVRAM must be a non-negative integer"}:{isValid:!0}}validateNetmikoDeviceType(e){return this.base.validateNetmikoDeviceType(e)}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var Moe=/\{(?:[01]|adapter|port[0-8]|segment[0-8])\}/g,kE=(()=>{class n{base=f(Hn);validateName(e){return this.base.required(e,"Name")}validateRequiredRam(e){return this.base.required(e,"RAM")}validateCpus(e){if(!e||e.trim()==="")return{isValid:!0};let t=parseInt(e,10);return isNaN(t)||t<1||t>255||t!==parseFloat(e)?{isValid:!1,errorMessage:"CPUs must be an integer between 1 and 255"}:{isValid:!0}}validateAdapters(e){if(!e||e.trim()==="")return{isValid:!0};let t=parseInt(e,10);return isNaN(t)||t<0||t>275||t!==parseFloat(e)?{isValid:!1,errorMessage:"Adapters must be an integer between 0 and 275"}:{isValid:!0}}validateCpuThrottling(e){if(!e||e.trim()==="")return{isValid:!0};let t=parseInt(e,10);return isNaN(t)||t<0||t>800||t!==parseFloat(e)?{isValid:!1,errorMessage:"CPU throttling must be between 0 and 800"}:{isValid:!0}}validateMacAddress(e){return!e||e.trim()===""?{isValid:!0}:this.base.validateMacAddress(e)}validatePortSegmentSize(e){if(!e||e.trim()==="")return{isValid:!0};let t=parseInt(e,10);return isNaN(t)||t<0||t!==parseFloat(e)?{isValid:!1,errorMessage:"Port segment size must be a non-negative integer"}:{isValid:!0}}validateFirstPortName(e){return!e||e.trim()===""?{isValid:!0}:/[{}\0]/.test(e)?{isValid:!1,errorMessage:"First port name should not contain placeholder {0} or special characters"}:{isValid:!0}}validatePortNameFormat(e){if(!e||e.trim()==="")return{isValid:!0};let t=e.replace(Moe,"");return t.includes("{")||t.includes("}")?{isValid:!1,errorMessage:`Unsupported placeholder "${t.match(/\{[^{}]*\}/)?.[0]??t.match(/[{}]/)?.[0]??""}" in port name format. Supported: {0}, {1}, {adapter}, {port0}-{port8}, {segment0}-{segment8}`}:t===e?{isValid:!1,errorMessage:"Port name format must include at least one placeholder (e.g., Ethernet{0})"}:{isValid:!0}}validateMaxcpus(e){if(!e||e.trim()==="")return{isValid:!0};let t=parseInt(e,10);return isNaN(t)||t<1||t>255||t!==parseFloat(e)?{isValid:!1,errorMessage:"Max CPUs must be an integer between 1 and 255"}:{isValid:!0}}validateNetmikoDeviceType(e){return this.base.validateNetmikoDeviceType(e)}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var Soe=1,Lr=(()=>{class n{httpController;symbols=new cn([]);cache;cachedControllerKey="";builtinCache;builtinControllerKey="";dimensionsCache=new Map;blobUrlCache=new Map;maximumSymbolSize=80;constructor(e){this.httpController=e}getMaximumSymbolSize(){return this.maximumSymbolSize}get(e){return this.symbols.getValue().find(t=>t.symbol_id===e)}getDimensions(e,t){let i=`${e.host}:${e.port}:${t}`;if(!this.dimensionsCache.has(i)){let a=encodeURI(t);this.dimensionsCache.set(i,this.httpController.get(e,`/symbols/${a}/dimensions`).pipe(wd(1)))}return this.dimensionsCache.get(i)}getSymbolBlobUrl(e,t){return this.blobUrlCache.has(t)||this.blobUrlCache.set(t,this.httpController.getBlob(e,t).pipe(Pt(i=>URL.createObjectURL(i)),wd(1))),this.blobUrlCache.get(t)}scaleDimensionsForNode(e){let t=e.width>e.height?this.maximumSymbolSize/e.width:this.maximumSymbolSize/e.height;return{width:e.width*t,height:e.height*t}}getByFilename(e){return this.symbols.getValue().find(t=>t.filename===e)}add(e,t,i){return this.cache=null,this.cachedControllerKey="",this.httpController.post(e,`/symbols/${t}/raw`,i)}addFile(e,t,i){return this.cache=null,this.cachedControllerKey="",this.httpController.postBlob(e,`/symbols/${t}/raw`,i)}delete(e,t){this.cache=null,this.cachedControllerKey="";let i=encodeURI(t);return this.httpController.delete(e,`/symbols/${i}`)}load(e){return this.httpController.get(e,"/symbols")}list(e){let t=`${e.host}:${e.port}`;return(!this.cache||this.cachedControllerKey!==t)&&(this.cachedControllerKey=t,this.cache=this.load(e).pipe(wd(Soe))),this.cache}listBuiltinSymbols(e){let t=`${e.host}:${e.port}`;return(!this.builtinCache||this.builtinControllerKey!==t)&&(this.builtinControllerKey=t,this.builtinCache=this.load(e).pipe(Pt(i=>i.filter(a=>a.builtin)),wd(1))),this.builtinCache}listCustomSymbols(e){return this.load(e).pipe(Pt(t=>t.filter(i=>!i.builtin)))}raw(e,t){let i=encodeURI(t);return this.httpController.getText(e,`/symbols/${i}/raw`)}getSymbolFromTemplate(e,t){return`${e.protocol}//${e.host}:${e.port}/${zi.current_version}/symbols/${t.symbol}/raw`}static \u0275fac=function(t){return new(t||n)(_e(sn))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var rz=(()=>{class n{transform(e,t){return e?t?(t=t.toLowerCase(),e.filter(i=>i.filename.toLowerCase().includes(t))):e:[]}static \u0275fac=function(t){return new(t||n)};static \u0275pipe=qr({name:"filenamefilter",type:n,pure:!0})}return n})();var Poe=(n,o)=>o.symbol_id;function Toe(n,o){if(n&1&&(r(0,"p",16),c(1),l()),n&2){let e=h(2);ne("success",e.uploadSuccess())("error",!e.uploadSuccess()),m(),X(" ",e.uploadStatus()," ")}}function Eoe(n,o){if(n&1){let e=R();r(0,"div",9)(1,"p",10),c(2,"Select an image file to upload as a new symbol."),l(),r(3,"p",11)(4,"strong"),c(5,"Supported formats:"),l(),c(6," SVG, PNG, JPG, JPEG, GIF"),l(),r(7,"p",12)(8,"strong"),c(9,"Recommended size:"),l(),c(10," 128\xD7128 pixels (max 256\xD7256)"),l(),r(11,"input",13,0),_("change",function(i){y(e);let a=h();return w(a.uploadSymbolFile(i))}),l(),r(13,"button",14),_("click",function(){y(e);let i=Te(12);return w(i.click())}),r(14,"mat-icon"),c(15,"add"),l(),c(16," Choose File to Upload "),l(),T(17,Toe,2,5,"p",15),l()}if(n&2){let e=h();m(17),E(e.uploadStatus()?17:-1)}}function Ooe(n,o){n&1&&(r(0,"div",23),c(1,"Loading symbols..."),l())}function Doe(n,o){n&1&&(r(0,"div",24)(1,"mat-icon"),c(2,"info"),l(),r(3,"p"),c(4,'No custom symbols found. Upload symbols using the "Add Symbol" tab.'),l()())}function Ioe(n,o){if(n&1){let e=R();r(0,"div",27),_("click",function(){let i=y(e).$implicit,a=h(3);return w(a.toggleSelection(i.symbol_id))}),L(1,"img",28),r(2,"span",29),c(3),l()()}if(n&2){let e=o.$implicit,t=h(3);ne("selected",t.isSymbolSelected(e.symbol_id)),m(),v("src",t.getImageSource(e.symbol_id),Ba)("alt",e.symbol_id),m(2),N(e.symbol_id)}}function Aoe(n,o){if(n&1&&(r(0,"div",25),Q(1,Ioe,4,5,"div",26,Poe),l()),n&2){let e=h(2);m(),K(e.customSymbols())}}function Noe(n,o){if(n&1){let e=R();r(0,"div",17)(1,"div",18)(2,"p",10),c(3,"Select custom symbols to delete:"),l(),r(4,"div",19)(5,"button",20),_("click",function(){y(e);let i=h();return w(i.deleteSelectedSymbols())}),r(6,"mat-icon"),c(7,"delete"),l(),c(8),l(),r(9,"button",21),_("click",function(){y(e);let i=h();return w(i.selectAllCustom())}),c(10," Select all "),l(),r(11,"button",22),_("click",function(){y(e);let i=h();return w(i.clearSelection())}),c(12," Clear "),l()()(),T(13,Ooe,2,0,"div",23)(14,Doe,5,0,"div",24)(15,Aoe,3,0,"div",25),l()}if(n&2){let e=h();m(5),v("disabled",!e.hasSelectedSymbols()),m(3),X(" Delete (",e.selectedForDeletion().size,") "),m(5),E(e.isLoading()?13:e.customSymbols().length===0?14:15)}}var sz=(()=>{class n{dialogRef=f(We);cd=f(oe);symbolService=f(Lr);toasterService=f(re);data=f(Wt);controller=z(void 0);activeTab=z(0);symbolsUpdated=new be;uploadStatus=z("");uploadSuccess=z(!1);customSymbols=z([]);selectedForDeletion=z(new Set);isLoading=z(!1);symbolBlobUrls=new Map;constructor(){this.data?.controller&&(this.controller.set(this.data.controller),this.loadCustomSymbols())}onCloseClick(){this.dialogRef.close()}onTabChange(e){this.activeTab.set(e),e===1&&this.loadCustomSymbols(),this.cd.markForCheck()}loadCustomSymbols(){this.controller()&&this.symbolService.list(this.controller()).subscribe({next:e=>{let t=e.filter(i=>!i.builtin);this.customSymbols.set(t),this.loadSymbolBlobs(t),this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load symbols";this.toasterService.error(t),this.cd.markForCheck()}})}loadSymbolBlobs(e){let t=new Map;e.forEach(a=>{let s=`/symbols/${a.symbol_id}/raw`;t.set(a.symbol_id,s)});let i=Array.from(t.values());Ci(i.map(a=>this.symbolService.getSymbolBlobUrl(this.controller(),a))).subscribe({next:a=>{i.forEach((s,d)=>{for(let[p,u]of t.entries())if(u===s){this.symbolBlobUrls.set(p,a[d]);break}}),this.cd.markForCheck()},error:a=>{let s=a.error?.message||a.message||"Failed to load symbol images";this.toasterService.error(s),this.cd.markForCheck()}})}getImageSource(e){return this.symbolBlobUrls.get(e)||""}toggleSelection(e){let t=this.selectedForDeletion(),i=new Set(t);i.has(e)?i.delete(e):i.add(e),this.selectedForDeletion.set(i),this.cd.markForCheck()}isSymbolSelected(e){return this.selectedForDeletion().has(e)}selectAllCustom(){let e=new Set(this.customSymbols().map(t=>t.symbol_id));this.selectedForDeletion.set(e),this.cd.markForCheck()}clearSelection(){this.selectedForDeletion.set(new Set),this.cd.markForCheck()}hasSelectedSymbols(){return this.selectedForDeletion().size>0}deleteSelectedSymbols(){let e=this.customSymbols().filter(i=>this.selectedForDeletion().has(i.symbol_id));if(e.length===0)return;let t=e.map(i=>this.symbolService.delete(this.controller(),i.symbol_id));Ci(t).subscribe({next:()=>{this.toasterService.success(`${e.length} ${e.length===1?"symbol":"symbols"} deleted.`),this.selectedForDeletion.set(new Set),this.loadCustomSymbols(),this.symbolsUpdated.emit()},error:i=>{let a=i.error?.message||i.message||"Failed to delete symbols";this.toasterService.error(a),this.cd.markForCheck()}})}uploadSymbolFile(e){let t=e.target,i=t.files[0];if(!i)return;let a=i.name,s=a.split(".").pop()?.toLowerCase();if(this.uploadStatus.set(`Uploading ${a}...`),this.uploadSuccess.set(!1),this.cd.markForCheck(),s==="svg"||s==="svgz"){let d=new FileReader;d.onloadend=()=>{let p=d.result;this.symbolService.add(this.controller(),a,p).subscribe({next:()=>{this.uploadStatus.set(`Successfully uploaded ${a}`),this.uploadSuccess.set(!0),this.symbolsUpdated.emit(),this.cd.markForCheck(),setTimeout(()=>{this.uploadStatus.set(""),this.cd.markForCheck()},3e3)},error:u=>{let g=u.error?.message||u.message||"Failed to upload symbol";this.uploadStatus.set(`Failed to upload ${a}: ${g}`),this.uploadSuccess.set(!1),this.cd.markForCheck()}})},d.readAsText(i)}else if(s==="png"||s==="jpg"||s==="jpeg"||s==="gif"){let d=new Blob([i],{type:i.type});this.symbolService.addFile(this.controller(),a,d).subscribe({next:()=>{this.uploadStatus.set(`Successfully uploaded ${a}`),this.uploadSuccess.set(!0),this.symbolsUpdated.emit(),this.cd.markForCheck(),setTimeout(()=>{this.uploadStatus.set(""),this.cd.markForCheck()},3e3)},error:p=>{let u=p.error?.message||p.message||"Failed to upload symbol";this.uploadStatus.set(`Failed to upload ${a}: ${u}`),this.uploadSuccess.set(!1),this.cd.markForCheck()}})}else{let d=new Blob([i],{type:i.type||"application/octet-stream"});this.symbolService.addFile(this.controller(),a,d).subscribe({next:()=>{this.uploadStatus.set(`Successfully uploaded ${a}`),this.uploadSuccess.set(!0),this.symbolsUpdated.emit(),this.cd.markForCheck(),setTimeout(()=>{this.uploadStatus.set(""),this.cd.markForCheck()},3e3)},error:p=>{let u=p.error?.message||p.message||"Failed to upload symbol";this.uploadStatus.set(`Failed to upload ${a}: ${u}`),this.uploadSuccess.set(!1),this.cd.markForCheck()}})}t.value=""}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-symbols-manager-dialog"]],decls:11,vars:1,consts:[["file",""],["mat-dialog-title",""],[1,"symbols-manager-content"],[3,"selectedIndexChange","selectedIndex"],["label","Add Symbol"],["matTabContent",""],["label","Manage Symbols"],["align","end"],["mat-button","",3,"click"],[1,"add-symbol-section"],[1,"instructions"],[1,"supported-formats"],[1,"recommended-size"],["type","file","accept",".svg,.svgz,.png,.jpg,.jpeg,.gif",1,"non-visible",3,"change"],["mat-raised-button","","color","primary",3,"click"],[1,"upload-status",3,"success","error"],[1,"upload-status"],[1,"manage-symbols-section"],[1,"manage-header"],[1,"delete-actions"],["mat-flat-button","","type","button",1,"manage-action","manage-action--delete",3,"click","disabled"],["mat-raised-button","","color","primary","type","button","matTooltip","Select all custom symbols",1,"manage-action","manage-action--select",3,"click"],["mat-raised-button","","color","primary","type","button","matTooltip","Clear selection",1,"manage-action","manage-action--clear",3,"click"],[1,"loading-message"],[1,"empty-message"],[1,"symbols-grid"],[1,"symbol-item",3,"selected"],[1,"symbol-item",3,"click"],[3,"src","alt"],[1,"symbol-name"]],template:function(t,i){t&1&&(r(0,"h2",1),c(1,"Symbols Manager"),l(),r(2,"mat-dialog-content",2)(3,"mat-tab-group",3),rn("selectedIndexChange",function(s){return Xt(i.activeTab,s)||(i.activeTab=s),s}),_("selectedIndexChange",function(s){return i.onTabChange(s)}),r(4,"mat-tab",4),se(5,Eoe,18,1,"ng-template",5),l(),r(6,"mat-tab",6),se(7,Noe,16,3,"ng-template",5),l()()(),r(8,"mat-dialog-actions",7)(9,"button",8),_("click",function(){return i.onCloseClick()}),c(10,"Close"),l()()),t&2&&(m(3),an("selectedIndex",i.activeTab))},dependencies:[fe,Y,he,ie,ce,ke,qe,Qe,bt,bo,rb,Xo,Yo,st,pt],styles:[".symbols-manager-content[_ngcontent-%COMP%]{overflow:auto}.manage-symbols-section[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-card-gap);padding:var(--gns3-density-card-padding)}.manage-symbols-section[_ngcontent-%COMP%] .manage-header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-card-gap);margin-bottom:var(--gns3-density-card-gap)}.manage-symbols-section[_ngcontent-%COMP%] .manage-header[_ngcontent-%COMP%] .instructions[_ngcontent-%COMP%]{font-size:16px;color:var(--mat-sys-on-surface);margin:0}.manage-symbols-section[_ngcontent-%COMP%] .manage-header[_ngcontent-%COMP%] .delete-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-2);flex-wrap:wrap}.manage-symbols-section[_ngcontent-%COMP%] .manage-header[_ngcontent-%COMP%] button.manage-action[_ngcontent-%COMP%]{min-width:96px;height:var(--gns3-density-control-height-sm);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-sm);font-weight:600;text-transform:none}.manage-symbols-section[_ngcontent-%COMP%] .manage-header[_ngcontent-%COMP%] button.manage-action--delete[_ngcontent-%COMP%]:not([disabled]){--mat-button-filled-container-color: var(--mat-sys-error);--mat-button-filled-label-text-color: var(--mat-sys-on-error);--mat-button-filled-state-layer-color: var(--mat-sys-on-error);--mat-button-filled-ripple-color: color-mix(in srgb, var(--mat-sys-on-error) 12%, transparent)}.manage-symbols-section[_ngcontent-%COMP%] .loading-message[_ngcontent-%COMP%], .manage-symbols-section[_ngcontent-%COMP%] .empty-message[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--gns3-density-card-gap);padding:60px 20px;color:var(--mat-sys-on-surface-variant);text-align:center}.manage-symbols-section[_ngcontent-%COMP%] .loading-message[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], .manage-symbols-section[_ngcontent-%COMP%] .empty-message[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:48px;width:48px;height:48px;color:var(--mat-sys-primary)}.manage-symbols-section[_ngcontent-%COMP%] .loading-message[_ngcontent-%COMP%] p[_ngcontent-%COMP%], .manage-symbols-section[_ngcontent-%COMP%] .empty-message[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:16px}.manage-symbols-section[_ngcontent-%COMP%] .symbols-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:var(--gns3-density-space-3);padding:16px 0;max-height:400px;overflow-y:auto}.add-symbol-section[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--gns3-density-card-gap);padding:40px 20px}.add-symbol-section[_ngcontent-%COMP%] .instructions[_ngcontent-%COMP%]{font-size:16px;color:var(--mat-sys-on-surface);text-align:center;margin:0}.add-symbol-section[_ngcontent-%COMP%] .supported-formats[_ngcontent-%COMP%], .add-symbol-section[_ngcontent-%COMP%] .recommended-size[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface-variant);text-align:center;margin:0}.add-symbol-section[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{margin-top:16px}.add-symbol-section[_ngcontent-%COMP%] .upload-status[_ngcontent-%COMP%]{margin-top:16px;padding:12px 16px;border-radius:8px;font-size:14px;text-align:center}.add-symbol-section[_ngcontent-%COMP%] .upload-status.success[_ngcontent-%COMP%]{background-color:var(--mat-sys-primary-container);color:var(--mat-sys-on-primary-container)}.add-symbol-section[_ngcontent-%COMP%] .upload-status.error[_ngcontent-%COMP%]{background-color:var(--mat-sys-error-container);color:var(--mat-sys-on-error-container)}.symbol-item[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:var(--gns3-density-space-2);padding:12px;border:2px solid transparent;border-radius:8px;cursor:pointer;transition:all var(--gns3-motion-duration-standard) ease;background-color:var(--mat-sys-surface-container)}.symbol-item[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-surface-container-high);border-color:var(--mat-sys-outline)}.symbol-item.selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-error);background-color:var(--mat-sys-error-container);box-shadow:0 0 0 2px var(--mat-sys-error)}.symbol-item[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:48px;height:48px;object-fit:contain}.symbol-item[_ngcontent-%COMP%] .symbol-name[_ngcontent-%COMP%]{font-size:12px;color:var(--mat-sys-on-surface);text-align:center;word-break:break-all;max-width:100%;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.non-visible[_ngcontent-%COMP%]{display:none}"],changeDetection:0})}return n})();var yo=(()=>{class n{configs=new Map;constructor(){this.registerDefaultConfigs()}sizeConfig(e){return{panelClass:["base-dialog-panel",`dialog-${e}-panel`],autoFocus:!1,maxWidth:"calc(100vw - 32px)",maxHeight:"calc(100vh - 32px)"}}registerDefaultConfigs(){let e=this.sizeConfig("small"),t=this.sizeConfig("medium"),i=this.sizeConfig("large"),a=this.sizeConfig("extra-large"),s=q({},e),d=ze(q({},i),{panelClass:["base-dialog-panel","dialog-large-panel","configurator-dialog-panel"]}),p=ze(q({},t),{panelClass:["base-dialog-panel","dialog-medium-panel","simple-dialog-panel"]});this.configs.set("changeSymbol",ze(q({},d),{panelClass:["base-dialog-panel","dialog-medium-panel","change-symbol-dialog-panel"]})),this.configs.set("templateSymbol",ze(q({},d),{panelClass:["base-dialog-panel","dialog-medium-panel","change-symbol-dialog-panel"]})),this.configs.set("symbolsManager",ze(q({},d),{panelClass:["base-dialog-panel","dialog-large-panel","configurator-dialog-panel"]})),this.configs.set("confirmation",ze(q({},e),{panelClass:["base-confirmation-dialog-panel","dialog-small-panel","confirmation-danger-panel"]})),this.configs.set("editController",ze(q({},s),{panelClass:["base-dialog-panel","dialog-medium-panel","edit-controller-dialog-panel"]})),this.configs.set("addController",ze(q({},s),{panelClass:["base-dialog-panel","dialog-medium-panel","add-controller-dialog-panel"]})),this.configs.set("customAdapters",ze(q({},a),{panelClass:["base-dialog-panel","dialog-extra-large-panel","custom-adapters-dialog-panel"]})),this.configs.set("editProject",ze(q({},d),{panelClass:["base-dialog-panel","dialog-large-panel","edit-project-dialog-panel"]})),this.configs.set("addAce",ze(q({},d),{panelClass:["base-dialog-panel","dialog-extra-large-panel","add-ace-dialog-panel"]})),this.configs.set("startCapture",ze(q({},p),{panelClass:["base-dialog-panel","dialog-medium-panel","simple-dialog-panel"]})),this.configs.set("linkStyleEditor",ze(q({},e),{panelClass:["base-dialog-panel","dialog-small-panel","simple-dialog-panel"]})),this.configs.set("packetFilters",ze(q({},i),{panelClass:["base-dialog-panel","dialog-large-panel","simple-dialog-panel"]})),this.configs.set("helpDialog",ze(q({},p),{panelClass:["base-dialog-panel","dialog-medium-panel","simple-dialog-panel"]}))}getConfig(e){let t=this.configs.get(e);return t?q({},t):(console.warn(`DialogConfigService: No config found for "${e}", using base config`),this.sizeConfig("small"))}openConfig(e,t){let i=this.getConfig(e);return t?q(q({},i),t):i}registerConfig(e,t){this.configs.set(e,t)}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var Foe=(n,o,e)=>({buttonSelected:n,"in-delete-mode":o,"delete-selected":e}),Roe=n=>({imageSelected:n}),zoe=(n,o)=>o.theme,Loe=(n,o)=>o.symbol_id;function Voe(n,o){if(n&1){let e=R();r(0,"mat-radio-group",12)(1,"mat-radio-button",13),_("click",function(){y(e);let i=h();return w(i.setFilter("all"))}),c(2,"All symbols"),l(),r(3,"mat-radio-button",14),_("click",function(){y(e);let i=h();return w(i.setFilter("builtin"))}),c(4,"Built-in symbols"),l(),r(5,"mat-radio-button",15),_("click",function(){y(e);let i=h();return w(i.setFilter("custom"))}),c(6,"Custom symbols"),l()(),r(7,"button",16),_("click",function(){y(e);let i=h();return w(i.openSymbolsManager())}),r(8,"mat-icon"),c(9,"settings"),l(),c(10," Symbols Manager "),l()}}function Boe(n,o){if(n&1){let e=R();r(0,"div",1)(1,"button",17),_("click",function(){y(e);let i=h();return w(i.deleteSelectedSymbols())}),r(2,"mat-icon"),c(3,"delete"),l(),c(4),l(),r(5,"span",18),c(6),l(),r(7,"button",19),_("click",function(){y(e);let i=h();return w(i.selectAllVisible())}),c(8,"Select all"),l(),r(9,"button",20),_("click",function(){y(e);let i=h();return w(i.clearSelection())}),c(10,"Clear"),l(),r(11,"button",16),_("click",function(){y(e);let i=h();return w(i.toggleDeleteMode())}),c(12,"Cancel"),l()()}if(n&2){let e=h();m(),v("disabled",!e.hasSelectedSymbols()),m(3),X(" Delete (",e.selectedForDeletion().size,") "),m(2),X("",e.selectedForDeletion().size," selected")}}function joe(n,o){if(n&1){let e=R();r(0,"div",23)(1,"div",24)(2,"button",25),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.isDeleteMode()&&a.canDeleteSymbol(i)?a.toggleSelection(i.symbol_id):a.setSelected(i.symbol_id))}),L(3,"img",26),l()()()}if(n&2){let e=o.$implicit,t=h(2);m(),ne("delete-mode",t.isDeleteMode()),m(),v("ngClass",zC(5,Foe,t.isSelected===e.symbol_id,t.isDeleteMode(),t.isDeleteMode()&&t.isSymbolSelected(e.symbol_id))),m(),v("ngClass",tn(9,Roe,t.isSelected===e.symbol_id))("src",t.getImageSourceForTemplate(e.symbol_id),Ba)}}function $oe(n,o){if(n&1){let e=R();r(0,"mat-expansion-panel",11)(1,"mat-expansion-panel-header",21),_("click",function(){let i=y(e).$implicit,a=h();return w(a.toggleTheme(i.theme))}),r(2,"mat-panel-title"),c(3),l(),r(4,"mat-panel-description"),c(5),l()(),r(6,"div",22),Q(7,joe,4,11,"div",23,Loe),Et(9,"filenamefilter"),l()()}if(n&2){let e=o.$implicit,t=h();v("expanded",t.isThemeExpanded(e.theme)),m(3),X(" ",e.theme," "),m(2),X(" ",e.symbols.length," symbols "),m(2),K(Io(9,3,e.symbols,t.searchText()))}}var Gm=(()=>{class n{symbolService=f(Lr);toasterService=f(re);cd=f(oe);dialog=f(Xe);dialogConfig=f(yo);controller=ee(void 0);symbol=ee(void 0);symbolChanged=new be;symbols=[];filteredSymbols=[];symbolGroups=[];isSelected="";selectedForDeletion=z(new Set);searchText=$("");expandedThemes=z([]);zoomLevel=z(1);isDeleteMode=z(!1);previousFilter="";symbolBlobUrls=new Map;Math=Math;ngOnInit(){this.isSelected=this.symbol(),this.loadSymbols()}toggleTheme(e){let t=this.expandedThemes();t.includes(e)?this.expandedThemes.set(t.filter(i=>i!==e)):this.expandedThemes.set([...t,e])}isThemeExpanded(e){return this.expandedThemes().includes(e)}setFilter(e){e==="all"?this.filteredSymbols=this.symbols:e==="builtin"?this.filteredSymbols=this.symbols.filter(t=>t.builtin):this.filteredSymbols=this.symbols.filter(t=>!t.builtin),this.updateSymbolGroups()}setSelected(e){this.isSelected=e,this.symbolChanged.emit(this.isSelected)}loadSymbols(){this.symbolService.list(this.controller()).subscribe({next:e=>{this.symbols=e,this.filteredSymbols=e,this.loadSymbolBlobs(e),this.updateSymbolGroups(),this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load symbols";this.toasterService.error(t),this.cd.markForCheck()}})}loadSymbolBlobs(e){let t=new Map;e.forEach(a=>{let s=`/symbols/${a.symbol_id}/raw`;t.set(a.symbol_id,s)});let i=Array.from(t.values());Ci(i.map(a=>this.symbolService.getSymbolBlobUrl(this.controller(),a))).subscribe({next:a=>{i.forEach((s,d)=>{for(let[p,u]of t.entries())if(u===s){this.symbolBlobUrls.set(p,a[d]);break}}),this.cd.markForCheck()},error:a=>{let s=a.error?.message||a.message||"Failed to load symbol images";this.toasterService.error(s),this.cd.markForCheck()}})}updateSymbolGroups(){let e=new Map;for(let t of this.filteredSymbols){let i=t.theme||"Other";e.has(i)||e.set(i,[]),e.get(i).push(t)}this.symbolGroups=Array.from(e.entries()).map(([t,i])=>({theme:t,symbols:i})).sort((t,i)=>t.theme.localeCompare(i.theme))}getImageSourceForTemplate(e){return this.symbolBlobUrls.get(e)||""}canDeleteSymbol(e){return!e.builtin}deleteSymbol(e,t){t.stopPropagation();let i={title:"Delete Symbol",message:`Are you sure you want to delete the symbol "${e.symbol_id}"?`,confirmButtonText:"Delete",cancelButtonText:"Cancel"};this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-danger-panel","dialog-small-panel"],data:i}).afterClosed().subscribe(s=>{s&&this.symbolService.delete(this.controller(),e.symbol_id).subscribe({next:()=>{this.toasterService.success(`Symbol "${e.filename}" deleted.`),this.loadSymbols()},error:d=>{let p=d.error?.message||d.message||"Failed to delete symbol";this.toasterService.error(p),this.cd.markForCheck()}})})}zoomIn(){let e=this.zoomLevel();e<2&&this.zoomLevel.set(Math.min(2,e+.1))}zoomOut(){let e=this.zoomLevel();e>.5&&this.zoomLevel.set(Math.max(.5,e-.1))}resetZoom(){this.zoomLevel.set(1)}toggleSelection(e){let t=this.selectedForDeletion(),i=new Set(t);i.has(e)?i.delete(e):i.add(e),this.selectedForDeletion.set(i),this.cd.markForCheck()}isSymbolSelected(e){return this.selectedForDeletion().has(e)}toggleDeleteMode(){let e=this.isDeleteMode();this.isDeleteMode.update(t=>!t),!e&&this.isDeleteMode()?(this.previousFilter="all",this.setFilter("custom")):e&&!this.isDeleteMode()&&(this.selectedForDeletion.set(new Set),this.previousFilter&&this.setFilter(this.previousFilter)),this.cd.markForCheck()}selectAllVisible(){let e=this.filteredSymbols.filter(i=>!i.builtin),t=new Set(e.map(i=>i.symbol_id));this.selectedForDeletion.set(t),this.cd.markForCheck()}clearSelection(){this.selectedForDeletion.set(new Set),this.cd.markForCheck()}hasSelectedSymbols(){return this.selectedForDeletion().size>0}deleteSelectedSymbols(){let e=this.filteredSymbols.filter(s=>this.selectedForDeletion().has(s.symbol_id));if(e.length===0)return;let i={title:"Delete Symbols",message:e.length===1?`Are you sure you want to delete the symbol "${e[0].symbol_id}"?`:`Are you sure you want to delete ${e.length} symbols?`,confirmButtonText:"Delete",cancelButtonText:"Cancel"};this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-danger-panel","dialog-small-panel"],data:i}).afterClosed().subscribe(s=>{if(s){let d=e.map(p=>this.symbolService.delete(this.controller(),p.symbol_id));Ci(d).subscribe({next:()=>{this.toasterService.success(`${e.length} ${e.length===1?"symbol":"symbols"} deleted.`),this.selectedForDeletion.set(new Set),this.loadSymbols()},error:p=>{let u=p.error?.message||p.message||"Failed to delete symbols";this.toasterService.error(u),this.cd.markForCheck()}})}})}openSymbolsManager(){let e=this.dialogConfig.openConfig("symbolsManager",{data:{controller:this.controller()}});this.dialog.open(sz,e).afterClosed().subscribe(()=>{this.loadSymbols()})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-symbols"]],inputs:{controller:[1,"controller"],symbol:[1,"symbol"],searchText:[1,"searchText"]},outputs:{symbolChanged:"symbolChanged",searchText:"searchTextChange"},decls:21,vars:8,consts:[[1,"menu"],[1,"delete-actions"],[1,"example-full-width"],["matInput","","placeholder","Search by filename",3,"input","value"],[1,"zoom-controls"],["mat-icon-button","","matTooltip","Zoom out",3,"click","disabled"],[1,"zoom-level"],["mat-icon-button","","matTooltip","Zoom in",3,"click","disabled"],["mat-button","",3,"click","disabled"],[1,"symbolsWrapper"],["multi",""],[3,"expanded"],["aria-label","Select an option",1,"radio-selection"],["value","1","checked","",3,"click"],["value","2",3,"click"],["value","3",3,"click"],["mat-button","",3,"click"],["mat-button","","color","warn","mat-raised-button","",3,"click","disabled"],[1,"selected-count"],["mat-button","","matTooltip","Select all custom symbols",3,"click"],["mat-button","","matTooltip","Clear selection",3,"click"],[3,"click"],[1,"wrapper"],[1,"buttonWrapper"],[1,"symbol-item"],[1,"button",3,"click","ngClass"],["lazyimg","",1,"image",3,"ngClass","src"]],template:function(t,i){t&1&&(r(0,"div",0),T(1,Voe,11,0)(2,Boe,13,3,"div",1),l(),r(3,"form")(4,"mat-form-field",2)(5,"input",3),_("input",function(s){return i.searchText.set(s.target.value)}),l()()(),r(6,"div",4)(7,"button",5),_("click",function(){return i.zoomOut()}),r(8,"mat-icon"),c(9,"remove"),l()(),r(10,"span",6),c(11),l(),r(12,"button",7),_("click",function(){return i.zoomIn()}),r(13,"mat-icon"),c(14,"add"),l()(),r(15,"button",8),_("click",function(){return i.resetZoom()}),c(16,"Reset"),l()(),r(17,"div",9)(18,"mat-accordion",10),Q(19,$oe,10,6,"mat-expansion-panel",11,zoe),l()()),t&2&&(m(),E(i.isDeleteMode()?2:1),m(4),v("value",i.searchText()),m(2),v("disabled",i.zoomLevel()<=.5),m(4),X("",i.Math.round(i.zoomLevel()*100),"%"),m(),v("disabled",i.zoomLevel()>=2),m(3),v("disabled",i.zoomLevel()===1),m(2),Tt("--zoom-level",i.zoomLevel()),m(2),K(i.symbolGroups))},dependencies:[fe,Ao,St,Ct,vt,Ji,Y,he,Be,ie,ce,ye,Ee,Pe,Fo,la,Zo,El,ph,jd,$d,Wm,qR,ke,st,pt,rz],styles:[".symbolsWrapper[_ngcontent-%COMP%]{overflow:visible;--zoom-level: 1}.zoom-controls[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;margin-bottom:16px;padding:8px;background-color:var(--mat-sys-surface-container);border-radius:8px}.zoom-controls[_ngcontent-%COMP%] .zoom-level[_ngcontent-%COMP%]{min-width:50px;text-align:center;font-size:14px;font-weight:500}.wrapper[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fill,minmax(calc(60px * var(--zoom-level)),1fr));gap:calc(4px * var(--zoom-level));transition:gap var(--gns3-motion-duration-standard) ease}.buttonWrapper[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;outline:none;padding:calc(4px * var(--zoom-level))}.symbol-item[_ngcontent-%COMP%]{position:relative;width:100%;height:100%}.buttonSelected[_ngcontent-%COMP%]{background-color:var(--mat-sys-secondary-container)}.image[_ngcontent-%COMP%]{width:calc(45px * var(--zoom-level));height:calc(45px * var(--zoom-level));object-fit:contain}.imageSelected[_ngcontent-%COMP%]{outline:2px solid var(--mat-sys-primary);outline-offset:1px}.delete-button[_ngcontent-%COMP%]{position:absolute;top:calc(-2px * var(--zoom-level));right:calc(-2px * var(--zoom-level));width:calc(16px * var(--zoom-level));height:calc(16px * var(--zoom-level));padding:0;display:flex;align-items:center;justify-content:center;background-color:transparent;transition:transform var(--gns3-motion-duration-standard) ease;z-index:1}.delete-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:calc(12px * var(--zoom-level));width:auto;height:auto}.delete-button[_ngcontent-%COMP%]:hover{transform:scale(1.2);background-color:transparent}.menu[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;flex-wrap:wrap;gap:8px}.radio-selection[_ngcontent-%COMP%]{display:flex;gap:8px}.delete-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;width:100%}.delete-actions[_ngcontent-%COMP%] .selected-count[_ngcontent-%COMP%]{font-size:14px;font-weight:500;color:var(--mat-sys-on-surface)}.example-full-width[_ngcontent-%COMP%]{width:100%;margin-bottom:8px}.non-visible[_ngcontent-%COMP%]{display:none}.symbol-item.delete-mode[_ngcontent-%COMP%]{padding:2px;border-radius:4px}.button[_ngcontent-%COMP%]{background:border-box;border-width:0;outline:none;width:100%;height:100%;padding:calc(4px * var(--zoom-level))}.button.in-delete-mode[_ngcontent-%COMP%]{cursor:pointer}.button.delete-selected[_ngcontent-%COMP%]{outline:2px solid var(--mat-sys-error);outline-offset:-2px;box-shadow:0 0 0 2px var(--mat-sys-error)}.button[_ngcontent-%COMP%]:focus-visible, .delete-button[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--mat-sys-primary);outline-offset:2px}"],changeDetection:0})}return n})();var rr=(()=>{class n{dialogRef=f(We);cd=f(oe);controller;symbol="";constructor(){let e=f(Wt);this.controller=e.controller,this.symbol=e.symbol}ngOnInit(){this.cd.markForCheck()}symbolChanged(e){this.symbol=e,this.cd.markForCheck()}onCloseClick(){this.dialogRef.close()}onSelectClick(){this.dialogRef.close(this.symbol)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-template-symbol-dialog"]],decls:9,vars:2,consts:[["mat-dialog-title",""],[1,"modal-form-container"],[3,"symbolChanged","controller","symbol"],["mat-dialog-actions",""],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click"]],template:function(t,i){t&1&&(r(0,"h1",0),c(1,"Select symbol"),l(),r(2,"div",1)(3,"app-symbols",2),_("symbolChanged",function(s){return i.symbolChanged(s)}),l()(),r(4,"div",3)(5,"button",4),_("click",function(){return i.onCloseClick()}),c(6,"Cancel"),l(),r(7,"button",5),_("click",function(){return i.onSelectClick()}),c(8,"Choose symbol"),l()()),t&2&&(m(3),v("controller",i.controller)("symbol",i.symbol))},dependencies:[ke,qe,Qe,Y,he,Gm],styles:[".modal-form-container[_ngcontent-%COMP%]{padding:16px;overflow-y:auto;max-height:500px}.menu[_ngcontent-%COMP%]{display:flex;justify-content:space-between}.radio-selection[_ngcontent-%COMP%]{width:90%}.mat-radio-button[_ngcontent-%COMP%] ~ .mat-radio-button[_ngcontent-%COMP%]{margin-left:16px}.non-visible[_ngcontent-%COMP%]{display:none}.example-full-width[_ngcontent-%COMP%]{width:100%}"],changeDetection:0})}return n})();var lz=(n,o)=>o.name;function Hoe(n,o){if(n&1){let e=R();r(0,"mat-chip-row",38),_("removed",function(){let i=y(e).$implicit,a=h(3);return w(a.removeTag(i))}),c(1),r(2,"button",39)(3,"mat-icon"),c(4,"cancel"),l()()()}if(n&2){let e=o.$implicit;v("editable",!1),Ce("title",e),m(),X(" ",e," "),m(),Ce("aria-label","Remove tag "+e)}}function Uoe(n,o){if(n&1&&(r(0,"mat-option",34),c(1),l()),n&2){let e=o.$implicit;v("value",e[1]),m(),N(e[0])}}function Woe(n,o){if(n&1&&(r(0,"mat-option",34),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function Goe(n,o){if(n&1){let e=R();r(0,"form",16)(1,"mat-form-field",21)(2,"mat-label"),c(3,"Template name"),l(),r(4,"input",22),_("input",function(i){y(e);let a=h(2);return w(a.name.set(i.target.value))}),l()(),r(5,"mat-form-field",21)(6,"mat-label"),c(7,"Default name format"),l(),r(8,"input",23),_("input",function(i){y(e);let a=h(2);return w(a.defaultNameFormat.set(i.target.value))}),l()(),r(9,"div",24)(10,"mat-form-field",25)(11,"mat-label"),c(12,"Symbol"),l(),r(13,"input",26),_("input",function(i){y(e);let a=h(2);return w(a.symbol.set(i.target.value))}),l()(),r(14,"button",27),_("click",function(){y(e);let i=h(2);return w(i.chooseSymbol())}),r(15,"mat-icon"),c(16,"add"),l(),c(17," Choose symbol "),l()(),r(18,"div",28)(19,"mat-form-field",29)(20,"mat-label"),c(21,"Tags"),l(),r(22,"input",30),_("matChipInputTokenEnd",function(i){y(e);let a=h(2);return w(a.addTag(i))}),l()(),r(23,"mat-chip-grid",31,0),Q(25,Hoe,5,4,"mat-chip-row",32,Oe),l()(),r(27,"mat-form-field",21)(28,"mat-label"),c(29,"Category"),l(),r(30,"mat-select",33),_("selectionChange",function(i){y(e);let a=h(2);return w(a.category.set(i.value))}),Q(31,Uoe,2,2,"mat-option",34,ni),l()(),r(33,"mat-form-field",21)(34,"mat-label"),c(35,"Console type"),l(),r(36,"mat-select",33),_("selectionChange",function(i){y(e);let a=h(2);return w(a.consoleType.set(i.value))}),Q(37,Woe,2,2,"mat-option",34,Oe),l()(),r(39,"mat-form-field",21)(40,"mat-label"),c(41,"Console host"),l(),r(42,"input",35),_("input",function(i){y(e);let a=h(2);return w(a.consoleHost.set(i.target.value))}),l()(),r(43,"mat-form-field",21)(44,"mat-label"),c(45,"Console port"),l(),r(46,"input",36),_("input",function(i){y(e);let a=h(2);return w(a.consolePort.set(+i.target.value))}),l()(),r(47,"mat-form-field",21)(48,"mat-label"),c(49,"Console HTTP path"),l(),r(50,"input",37),_("input",function(i){y(e);let a=h(2);return w(a.consoleHttpPath.set(i.target.value))}),l()()()}if(n&2){let e=Te(24),t=h(2);m(4),v("value",t.name()),m(4),v("value",t.defaultNameFormat()),m(5),v("value",t.symbol()),m(9),v("matChipInputFor",e)("matChipInputSeparatorKeyCodes",t.separatorKeysCodes),m(),ne("gns3-chip-field__values--empty",t.tags().length===0),m(2),K(t.tags()),m(5),v("value",t.category()),m(),K(t.categories),m(5),v("value",t.consoleType()),m(),K(t.consoleTypes),m(5),v("value",t.consoleHost()),m(4),v("value",t.consolePort()),m(4),v("value",t.consoleHttpPath())}}function qoe(n,o){n&1&&(r(0,"mat-option",41),c(1,"Loading interfaces..."),l())}function Qoe(n,o){if(n&1&&(r(0,"mat-option",34),c(1),l()),n&2){let e=o.$implicit;v("value",e.name),m(),N(e.name)}}function Koe(n,o){n&1&&(r(0,"mat-option",41),c(1,"No Ethernet interfaces available"),l())}function Xoe(n,o){if(n&1&&Q(0,Qoe,2,2,"mat-option",34,lz,!1,Koe,2,0,"mat-option",41),n&2){let e=h(3);K(e.availableEthernetInterfaces())}}function Yoe(n,o){n&1&&(r(0,"th",50),c(1,"Interface"),l())}function Zoe(n,o){if(n&1&&(r(0,"td",51),c(1),l()),n&2){let e=o.$implicit;m(),N(e.name)}}function Joe(n,o){n&1&&(r(0,"th",50),c(1,"Actions"),l())}function eae(n,o){if(n&1){let e=R();r(0,"td",51)(1,"button",52),_("click",function(){let i=y(e).$implicit,a=h(3);return w(a.onDeleteEthernetInterface(i))}),r(2,"mat-icon",53),c(3,"delete"),l()()()}}function tae(n,o){n&1&&L(0,"tr",54)}function nae(n,o){n&1&&L(0,"tr",55)}function iae(n,o){if(n&1){let e=R();r(0,"div",16)(1,"div",40)(2,"mat-form-field",25)(3,"mat-label"),c(4,"Ethernet interface"),l(),r(5,"mat-select",33),_("selectionChange",function(i){y(e);let a=h(2);return w(a.ethernetInterface.set(i.value))}),T(6,qoe,2,0,"mat-option",41)(7,Xoe,3,1),l()(),r(8,"button",42),_("click",function(){y(e);let i=h(2);return w(i.onAddEthernetInterface())}),r(9,"mat-icon"),c(10,"add"),l(),c(11," Add "),l()(),r(12,"table",43),Fe(13,44),se(14,Yoe,2,0,"th",45)(15,Zoe,2,1,"td",46),Re(),Fe(16,47),se(17,Joe,2,0,"th",45)(18,eae,4,0,"td",46),Re(),se(19,tae,1,0,"tr",48)(20,nae,1,0,"tr",49),l()()}if(n&2){let e=h(2);m(5),v("value",e.ethernetInterface()),m(),E(e.networkInterfacesLoading()?6:7),m(2),v("disabled",!e.ethernetInterface()),m(4),v("dataSource",e.portsMappingEthernet),m(7),v("matHeaderRowDef",e.ethernetDisplayColumns),m(),v("matRowDefColumns",e.ethernetDisplayColumns)}}function oae(n,o){n&1&&(r(0,"mat-option",41),c(1,"Loading interfaces..."),l())}function aae(n,o){if(n&1&&(r(0,"mat-option",34),c(1),l()),n&2){let e=o.$implicit;v("value",e.name),m(),N(e.name)}}function rae(n,o){n&1&&(r(0,"mat-option",41),c(1,"No TAP interfaces available"),l())}function sae(n,o){if(n&1&&Q(0,aae,2,2,"mat-option",34,lz,!1,rae,2,0,"mat-option",41),n&2){let e=h(3);K(e.availableTapInterfaces())}}function lae(n,o){n&1&&(r(0,"th",50),c(1,"Interface"),l())}function cae(n,o){if(n&1&&(r(0,"td",51),c(1),l()),n&2){let e=o.$implicit;m(),N(e.name)}}function dae(n,o){n&1&&(r(0,"th",50),c(1,"Actions"),l())}function mae(n,o){if(n&1){let e=R();r(0,"td",51)(1,"button",52),_("click",function(){let i=y(e).$implicit,a=h(3);return w(a.onDeleteTapInterface(i))}),r(2,"mat-icon",53),c(3,"delete"),l()()()}}function pae(n,o){n&1&&L(0,"tr",54)}function uae(n,o){n&1&&L(0,"tr",55)}function gae(n,o){if(n&1){let e=R();r(0,"div",16)(1,"div",40)(2,"mat-form-field",25)(3,"mat-label"),c(4,"TAP interface"),l(),r(5,"mat-select",33),_("selectionChange",function(i){y(e);let a=h(2);return w(a.tapInterface.set(i.value))}),T(6,oae,2,0,"mat-option",41)(7,sae,3,1),l()(),r(8,"button",42),_("click",function(){y(e);let i=h(2);return w(i.onAddTapInterface())}),r(9,"mat-icon"),c(10,"add"),l(),c(11," Add "),l()(),r(12,"table",43),Fe(13,44),se(14,lae,2,0,"th",45)(15,cae,2,1,"td",46),Re(),Fe(16,47),se(17,dae,2,0,"th",45)(18,mae,4,0,"td",46),Re(),se(19,pae,1,0,"tr",48)(20,uae,1,0,"tr",49),l()()}if(n&2){let e=h(2);m(5),v("value",e.tapInterface()),m(),E(e.networkInterfacesLoading()?6:7),m(2),v("disabled",!e.tapInterface()),m(4),v("dataSource",e.portsMappingTap),m(7),v("matHeaderRowDef",e.tapDisplayColumns),m(),v("matRowDefColumns",e.tapDisplayColumns)}}function hae(n,o){n&1&&(r(0,"th",50),c(1,"Name"),l())}function _ae(n,o){if(n&1&&(r(0,"td",51),c(1),l()),n&2){let e=o.$implicit;m(),N(e.name)}}function fae(n,o){n&1&&(r(0,"th",50),c(1,"Local port"),l())}function vae(n,o){if(n&1&&(r(0,"td",51),c(1),l()),n&2){let e=o.$implicit;m(),N(e.lport)}}function Cae(n,o){n&1&&(r(0,"th",50),c(1,"Remote host"),l())}function bae(n,o){if(n&1&&(r(0,"td",51),c(1),l()),n&2){let e=o.$implicit;m(),N(e.rhost)}}function xae(n,o){n&1&&(r(0,"th",50),c(1,"Remote port"),l())}function yae(n,o){if(n&1&&(r(0,"td",51),c(1),l()),n&2){let e=o.$implicit;m(),N(e.rport)}}function wae(n,o){n&1&&(r(0,"th",50),c(1,"Actions"),l())}function Mae(n,o){if(n&1){let e=R();r(0,"td",51)(1,"button",68),_("click",function(){let i=y(e).$implicit,a=h(3);return w(a.deleteUdpInterface(i))}),r(2,"mat-icon",69),c(3,"delete"),l()()()}}function Sae(n,o){n&1&&L(0,"tr",54)}function kae(n,o){n&1&&L(0,"tr",55)}function Pae(n,o){if(n&1){let e=R();r(0,"div",16)(1,"div",56)(2,"mat-form-field",57)(3,"mat-label"),c(4,"Name"),l(),r(5,"input",58),_("input",function(i){y(e);let a=h(2);return w(a.newPortName.set(i.target.value))}),l()(),r(6,"mat-form-field",57)(7,"mat-label"),c(8,"Remote host"),l(),r(9,"input",59),_("input",function(i){y(e);let a=h(2);return w(a.newPortRhost.set(i.target.value))}),l()(),r(10,"mat-form-field",57)(11,"mat-label"),c(12,"Local port"),l(),r(13,"input",60),_("input",function(i){y(e);let a=h(2);return w(a.newPortLport.set(+i.target.value))}),l()(),r(14,"mat-form-field",57)(15,"mat-label"),c(16,"Remote port"),l(),r(17,"input",61),_("input",function(i){y(e);let a=h(2);return w(a.newPortRport.set(+i.target.value))}),l()()(),r(18,"div",62)(19,"button",63),_("click",function(){y(e);let i=h(2);return w(i.onAddUdpInterface())}),c(20,"Add UDP tunnel"),l()(),r(21,"table",43),Fe(22,44),se(23,hae,2,0,"th",45)(24,_ae,2,1,"td",46),Re(),Fe(25,64),se(26,fae,2,0,"th",45)(27,vae,2,1,"td",46),Re(),Fe(28,65),se(29,Cae,2,0,"th",45)(30,bae,2,1,"td",46),Re(),Fe(31,66),se(32,xae,2,0,"th",45)(33,yae,2,1,"td",46),Re(),Fe(34,67),se(35,wae,2,0,"th",45)(36,Mae,4,0,"td",46),Re(),se(37,Sae,1,0,"tr",48)(38,kae,1,0,"tr",49),l()()}if(n&2){let e=h(2);m(5),v("value",e.newPortName()),m(4),v("value",e.newPortRhost()),m(4),v("value",e.newPortLport()),m(4),v("value",e.newPortRport()),m(4),v("dataSource",e.dataSourceUdp),m(16),v("matHeaderRowDef",e.displayColumnsUdp),m(),v("matRowDefColumns",e.displayColumnsUdp)}}function Tae(n,o){if(n&1){let e=R();r(0,"div",17)(1,"mat-form-field",70)(2,"mat-label"),c(3,"Usage"),l(),r(4,"textarea",71),_("input",function(i){y(e);let a=h(2);return w(a.usage.set(i.target.value))}),l()()()}if(n&2){let e=h(2);m(4),v("value",e.usage())}}function Eae(n,o){if(n&1){let e=R();r(0,"main",9)(1,"nav",10)(2,"button",11),_("click",function(){y(e);let i=h();return w(i.selectSection("general"))}),c(3," General "),l(),r(4,"button",11),_("click",function(){y(e);let i=h();return w(i.selectSection("ethernet"))}),c(5," Ethernet interfaces "),l(),r(6,"button",11),_("click",function(){y(e);let i=h();return w(i.selectSection("tap"))}),c(7," TAP interfaces "),l(),r(8,"button",11),_("click",function(){y(e);let i=h();return w(i.selectSection("udp"))}),c(9," UDP tunnels "),l(),r(10,"button",11),_("click",function(){y(e);let i=h();return w(i.selectSection("usage"))}),c(11," Usage "),l()(),r(12,"section",12)(13,"div",13),_("click",function(){y(e);let i=h();return w(i.toggleSection("general"))}),r(14,"h3",14),c(15,"General"),l(),r(16,"mat-icon",15),c(17),l()(),T(18,Goe,51,12,"form",16),l(),r(19,"section",12)(20,"div",13),_("click",function(){y(e);let i=h();return w(i.toggleSection("ethernet"))}),r(21,"h3",14),c(22,"Ethernet interfaces"),l(),r(23,"mat-icon",15),c(24),l()(),T(25,iae,21,6,"div",16),l(),r(26,"section",12)(27,"div",13),_("click",function(){y(e);let i=h();return w(i.toggleSection("tap"))}),r(28,"h3",14),c(29,"TAP interfaces"),l(),r(30,"mat-icon",15),c(31),l()(),T(32,gae,21,6,"div",16),l(),r(33,"section",12)(34,"div",13),_("click",function(){y(e);let i=h();return w(i.toggleSection("udp"))}),r(35,"h3",14),c(36,"UDP tunnels"),l(),r(37,"mat-icon",15),c(38),l()(),T(39,Pae,39,7,"div",16),l(),r(40,"section",12)(41,"div",13),_("click",function(){y(e);let i=h();return w(i.toggleSection("usage"))}),r(42,"h3",14),c(43,"Usage"),l(),r(44,"mat-icon",15),c(45),l()(),T(46,Tae,5,1,"div",17),l(),r(47,"div",18)(48,"button",19),_("click",function(){y(e);let i=h();return w(i.goBack())}),c(49,"Cancel"),l(),r(50,"button",20),_("click",function(){y(e);let i=h();return w(i.onSave())}),c(51,"Save"),l()()()}if(n&2){let e=h();m(2),ne("is-active",e.activeSection==="general"),m(2),ne("is-active",e.activeSection==="ethernet"),m(2),ne("is-active",e.activeSection==="tap"),m(2),ne("is-active",e.activeSection==="udp"),m(2),ne("is-active",e.activeSection==="usage"),m(7),N(e.generalExpanded?"expand_less":"expand_more"),m(),E(e.activeSection==="general"?18:-1),m(6),N(e.ethernetExpanded?"expand_less":"expand_more"),m(),E(e.activeSection==="ethernet"?25:-1),m(6),N(e.tapExpanded?"expand_less":"expand_more"),m(),E(e.activeSection==="tap"?32:-1),m(6),N(e.udpExpanded?"expand_less":"expand_more"),m(),E(e.activeSection==="udp"?39:-1),m(6),N(e.usageExpanded?"expand_less":"expand_more"),m(),E(e.activeSection==="usage"?46:-1)}}var $1=(()=>{class n{route=f($t);controllerService=f(_t);computeService=f(ml);builtInTemplatesService=f(Os);toasterService=f(re);builtInTemplatesConfigurationService=f(zr);validationService=f(rv);router=f(Ft);location=f(ki);cd=f(oe);dialog=f(Xe);dialogConfig=f(yo);controller;cloudNodeTemplate;separatorKeysCodes=[13,188];categories=[];consoleTypes=[];ethernetDisplayColumns=["name","actions"];tapDisplayColumns=["name","actions"];displayColumnsUdp=["name","lport","rhost","rport","action"];generalExpanded=!1;ethernetExpanded=!1;tapExpanded=!1;udpExpanded=!1;usageExpanded=!1;activeSection="general";name=$("");defaultNameFormat=$("");symbol=$("");category=$("");consoleType=$("");consoleHost=$("");consolePort=$(0);consoleHttpPath=$("");usage=$("");tags=$([]);ethernetInterface=$("");tapInterface=$("");availableEthernetInterfaces=z([]);availableTapInterfaces=z([]);networkInterfacesLoading=z(!1);portsMappingEthernet=[];portsMappingTap=[];portsMappingUdp=[];dataSourceUdp=[];newPortName=$("");newPortLport=$(0);newPortRhost=$("");newPortRport=$(0);ngOnInit(){let e=this.route.snapshot.paramMap.get("controller_id"),t=this.route.snapshot.paramMap.get("template_id");this.controllerService.get(parseInt(e,10)).then(i=>{this.controller=i,this.cd.markForCheck(),this.getConfiguration(),this.builtInTemplatesService.getTemplate(this.controller,t).subscribe({next:a=>{this.cloudNodeTemplate=a,this.cloudNodeTemplate.tags||(this.cloudNodeTemplate.tags=[]),this.name.set(a.name||""),this.defaultNameFormat.set(a.default_name_format||""),this.symbol.set(a.symbol||""),this.category.set(a.category||""),this.consoleType.set(a.remote_console_type||""),this.consoleHost.set(a.remote_console_host||""),this.consolePort.set(a.remote_console_port||0),this.consoleHttpPath.set(a.remote_console_http_path||""),this.usage.set(a.usage||""),this.tags.set(a.tags||[]);let s=this.cloudNodeTemplate.ports_mapping??[];this.portsMappingEthernet=s.filter(d=>d.type==="ethernet"),this.portsMappingTap=s.filter(d=>d.type==="tap"),this.portsMappingUdp=s.filter(d=>d.type==="udp"),this.dataSourceUdp=[...this.portsMappingUdp],this.loadNetworkInterfaces(a.compute_id||"local"),this.cd.markForCheck()},error:a=>{let s=a.error?.message||a.message||"Failed to load template";this.toasterService.error(s),this.cd.markForCheck()}})},i=>{let a=i.error?.message||i.message||"Failed to load controller";this.toasterService.error(a),this.cd.markForCheck()})}goBack(){ji(this.location,this.router,["/controller",this.controller.id,"preferences"])}toggleSection(e){switch(e){case"general":this.generalExpanded=!this.generalExpanded;break;case"ethernet":this.ethernetExpanded=!this.ethernetExpanded;break;case"tap":this.tapExpanded=!this.tapExpanded;break;case"udp":this.udpExpanded=!this.udpExpanded;break;case"usage":this.usageExpanded=!this.usageExpanded;break}}selectSection(e){this.activeSection=e}getConfiguration(){this.categories=this.builtInTemplatesConfigurationService.getCategoriesForCloudNodes(),this.consoleTypes=this.builtInTemplatesConfigurationService.getConsoleTypesForCloudNodes()}loadNetworkInterfaces(e){this.networkInterfacesLoading.set(!0),this.computeService.getNetworkInterfaces(this.controller,e).subscribe({next:t=>{let i=t??[];this.availableEthernetInterfaces.set(i.filter(a=>a.type==="ethernet")),this.availableTapInterfaces.set(i.filter(a=>a.type==="tap")),this.networkInterfacesLoading.set(!1),this.cd.markForCheck()},error:t=>{this.availableEthernetInterfaces.set([]),this.availableTapInterfaces.set([]),this.networkInterfacesLoading.set(!1);let i=t.error?.message||t.message||"Failed to load network interfaces";this.toasterService.warning(i),this.cd.markForCheck()}})}onAddEthernetInterface(){let e=this.ethernetInterface();if(e){let t=this.validationService.validateInterfaceName(e);if(!t.isValid){this.toasterService.error(t.errorMessage||"Invalid interface name");return}let i=this.portsMappingEthernet.map(s=>s.name),a=this.validationService.validateUniqueInterface(e,i);if(!a.isValid){this.toasterService.error(a.errorMessage||`Interface ${e} already configured.`);return}this.portsMappingEthernet=[...this.portsMappingEthernet,{interface:e,name:e,port_number:0,type:"ethernet"}],this.ethernetInterface.set(""),this.cd.markForCheck()}}onDeleteEthernetInterface(e){this.portsMappingEthernet=this.portsMappingEthernet.filter(t=>t!==e),this.cd.markForCheck()}onAddTapInterface(){let e=this.tapInterface();if(e){let t=this.validationService.validateInterfaceName(e);if(!t.isValid){this.toasterService.error(t.errorMessage||"Invalid interface name");return}let i=this.portsMappingTap.map(s=>s.name),a=this.validationService.validateUniqueInterface(e,i);if(!a.isValid){this.toasterService.error(a.errorMessage||`Interface ${e} already configured.`);return}this.portsMappingTap=[...this.portsMappingTap,{interface:e,name:e,port_number:0,type:"tap"}],this.tapInterface.set(""),this.cd.markForCheck()}}onDeleteTapInterface(e){this.portsMappingTap=this.portsMappingTap.filter(t=>t!==e),this.cd.markForCheck()}onAddUdpInterface(){if(!this.newPortRhost()||this.newPortRhost().trim()===""){this.toasterService.error("Remote host is required");return}if(this.newPortLport()<1||this.newPortLport()>65535){this.toasterService.error("Local port must be between 1 and 65535");return}if(this.newPortRport()<1||this.newPortRport()>65535){this.toasterService.error("Remote port must be between 1 and 65535");return}let e={name:this.newPortName(),lport:this.newPortLport(),rhost:this.newPortRhost(),rport:this.newPortRport(),port_number:0,type:"udp"};this.portsMappingUdp.push(e),this.dataSourceUdp=[...this.portsMappingUdp],this.newPortName.set(""),this.newPortLport.set(0),this.newPortRhost.set(""),this.newPortRport.set(0),this.cd.markForCheck()}deleteUdpInterface(e){this.portsMappingUdp=this.portsMappingUdp.filter(t=>t!==e),this.dataSourceUdp=[...this.portsMappingUdp],this.cd.markForCheck()}onSave(){let e=this.validationService.validateName(this.name());if(!e.isValid){this.toasterService.error(e.errorMessage||"Name is required");return}if(this.consolePort()){let i=this.validationService.validateRemoteConsolePort(this.consolePort().toString());if(!i.isValid){this.toasterService.error(i.errorMessage||"Remote console port must be between 1 and 65535");return}}let t=this.validationService.validateConsoleType(this.consoleType(),this.consoleTypes);if(!t.isValid){this.toasterService.error(t.errorMessage||"Invalid console type");return}if(this.consoleHost()){let i=this.validationService.validateRemoteConsoleHost(this.consoleHost());if(!i.isValid){this.toasterService.error(i.errorMessage||"Invalid remote console host");return}}if(this.consoleHttpPath()){let i=this.validationService.validateRemoteConsoleHttpPath(this.consoleHttpPath());if(!i.isValid){this.toasterService.error(i.errorMessage||"Invalid HTTP path");return}}this.cloudNodeTemplate.name=this.name(),this.cloudNodeTemplate.default_name_format=this.defaultNameFormat(),this.cloudNodeTemplate.symbol=this.symbol(),this.cloudNodeTemplate.category=this.category(),this.cloudNodeTemplate.remote_console_type=this.consoleType(),this.cloudNodeTemplate.remote_console_host=this.consoleHost(),this.cloudNodeTemplate.remote_console_port=this.consolePort(),this.cloudNodeTemplate.remote_console_http_path=this.consoleHttpPath(),this.cloudNodeTemplate.usage=this.usage(),this.cloudNodeTemplate.tags=this.tags(),this.cloudNodeTemplate.ports_mapping=[...this.portsMappingEthernet,...this.portsMappingTap,...this.portsMappingUdp],this.builtInTemplatesService.saveTemplate(this.controller,this.cloudNodeTemplate).subscribe({next:()=>{this.toasterService.success("Changes saved"),this.goBack()},error:i=>{let a=i.error?.message||i.message||"Failed to save template";this.toasterService.error(a),this.cd.markForCheck()}})}chooseSymbol(){let e=this.dialogConfig.openConfig("templateSymbol",{autoFocus:!1,disableClose:!1,data:{controller:this.controller,symbol:this.symbol()}});this.dialog.open(rr,e).afterClosed().subscribe(i=>{i&&this.symbol.set(i)})}addTag(e){let t=(e.value||"").trim(),i=this.tags();t&&this.tags.set([...i,t]),e.chipInput&&e.chipInput.clear()}removeTag(e){let t=this.tags(),i=t.indexOf(e);if(i>=0){let a=[...t];a.splice(i,1),this.tags.set(a)}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-cloud-nodes-template-details"]],inputs:{name:[1,"name"],defaultNameFormat:[1,"defaultNameFormat"],symbol:[1,"symbol"],category:[1,"category"],consoleType:[1,"consoleType"],consoleHost:[1,"consoleHost"],consolePort:[1,"consolePort"],consoleHttpPath:[1,"consoleHttpPath"],usage:[1,"usage"],tags:[1,"tags"],ethernetInterface:[1,"ethernetInterface"],tapInterface:[1,"tapInterface"],newPortName:[1,"newPortName"],newPortLport:[1,"newPortLport"],newPortRhost:[1,"newPortRhost"],newPortRport:[1,"newPortRport"]},outputs:{name:"nameChange",defaultNameFormat:"defaultNameFormatChange",symbol:"symbolChange",category:"categoryChange",consoleType:"consoleTypeChange",consoleHost:"consoleHostChange",consolePort:"consolePortChange",consoleHttpPath:"consoleHttpPathChange",usage:"usageChange",tags:"tagsChange",ethernetInterface:"ethernetInterfaceChange",tapInterface:"tapInterfaceChange",newPortName:"newPortNameChange",newPortLport:"newPortLportChange",newPortRhost:"newPortRhostChange",newPortRport:"newPortRportChange"},decls:17,vars:1,consts:[["chipList",""],[1,"cloud-nodes-details"],[1,"cloud-nodes-details__header"],[1,"cloud-nodes-details__heading-row"],[1,"cloud-nodes-details__breadcrumb"],["type","button","mat-button","",3,"click"],[1,"cloud-nodes-details__title"],[1,"cloud-nodes-details__header-actions"],["type","button","mat-raised-button","","color","primary",3,"click"],[1,"cloud-nodes-details__content"],["aria-label","Template settings",1,"template-edit-tabs"],["type","button",3,"click"],[1,"cloud-nodes-details__form-card"],[1,"cloud-nodes-details__section-header",3,"click"],[1,"cloud-nodes-details__section-title"],[1,"cloud-nodes-details__expand-icon"],[1,"cloud-nodes-details__form"],[1,"preferences__usage-form"],[1,"cloud-nodes-details__actions"],["mat-button","",1,"cloud-nodes-details__cancel-btn",3,"click"],["mat-raised-button","","color","primary",1,"cloud-nodes-details__save-btn",3,"click"],["appearance","outline","subscriptSizing","dynamic",1,"cloud-nodes-details__field"],["matInput","","type","text","placeholder","Template name",3,"input","value"],["matInput","","type","text","placeholder","Default name format",3,"input","value"],[1,"cloud-nodes-details__symbol-row"],["appearance","outline","subscriptSizing","dynamic",1,"cloud-nodes-details__field","cloud-nodes-details__field--flex"],["matInput","","type","text","placeholder","Symbol",3,"input","value"],["mat-raised-button","","color","primary",1,"cloud-nodes-details__symbol-btn",3,"click"],[1,"gns3-chip-field"],["floatLabel","always","appearance","outline","subscriptSizing","dynamic",1,"cloud-nodes-details__field"],["matInput","","placeholder","Add tags",3,"matChipInputTokenEnd","matChipInputFor","matChipInputSeparatorKeyCodes"],["aria-label","Tags",1,"gns3-chip-field__values"],[3,"editable"],[3,"selectionChange","value"],[3,"value"],["matInput","","type","text","placeholder","Console host",3,"input","value"],["matInput","","type","number","placeholder","Console port",3,"input","value"],["matInput","","type","text","placeholder","Console HTTP path",3,"input","value"],[3,"removed","editable"],["matChipRemove","","type","button"],[1,"cloud-nodes-details__add-row"],["disabled",""],["type","button","mat-flat-button","","color","primary",1,"cloud-nodes-details__add-btn",3,"click","disabled"],["mat-table","",1,"cloud-nodes-details__table",3,"dataSource"],["matColumnDef","name"],["mat-header-cell","",4,"matHeaderCellDef"],["mat-cell","",4,"matCellDef"],["matColumnDef","actions"],["mat-header-row","",4,"matHeaderRowDef"],["mat-row","",4,"matRowDef","matRowDefColumns"],["mat-header-cell",""],["mat-cell",""],["mat-icon-button","","matTooltip","Delete interface",3,"click"],["aria-label","Delete interface"],["mat-header-row",""],["mat-row",""],[1,"udp-tunnels__input-grid","gns3-form-layout-fixed"],["appearance","outline","subscriptSizing","fixed"],["matInput","","type","text","placeholder","Name",3,"input","value"],["matInput","","type","text","placeholder","Remote host",3,"input","value"],["matInput","","type","number","min","1","max","65535","placeholder","Local port",3,"input","value"],["matInput","","type","number","min","1","max","65535","placeholder","Remote port",3,"input","value"],[1,"udp-tunnels__add-btn"],["mat-stroked-button","","type","button",3,"click"],["matColumnDef","lport"],["matColumnDef","rhost"],["matColumnDef","rport"],["matColumnDef","action"],["mat-icon-button","","matTooltip","Delete port",3,"click"],["aria-label","Delete port"],["appearance","outline","subscriptSizing","dynamic",1,"preferences__usage-field--full"],["matInput","","type","text",3,"input","value"]],template:function(t,i){t&1&&(r(0,"div",1)(1,"header",2)(2,"div",3)(3,"div")(4,"div",4)(5,"button",5),_("click",function(){return i.goBack()}),c(6,"Templates"),l(),r(7,"mat-icon"),c(8,"chevron_right"),l(),r(9,"span"),c(10,"Edit"),l()(),r(11,"h1",6),c(12,"Edit template"),l()(),r(13,"div",7)(14,"button",8),_("click",function(){return i.goBack()}),c(15,"Back to templates"),l()()()(),T(16,Eae,52,20,"main",9),l()),t&2&&(m(16),E(i.cloudNodeTemplate?16:-1))},dependencies:[fe,St,Ct,vt,Ji,vn,ie,ce,Y,he,Be,we,Pe,Ve,ye,Ee,ot,ct,nt,ri,bi,xi,hi,fi,_n,bn,yn,kn,wn,xn,Pn,Mn,Sn,Tn,En,st,pt],styles:["[_nghost-%COMP%]{display:block;width:100%;background:transparent}.cloud-nodes-details__header[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:32px 20px 16px;display:flex;align-items:center;gap:var(--gns3-density-card-gap);animation:none}.cloud-nodes-details__back-btn[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:12px;color:var(--mat-sys-on-surface);transition:all var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1)}.cloud-nodes-details__back-btn[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 8%,transparent)}.cloud-nodes-details__title[_ngcontent-%COMP%]{flex:1;font-size:28px;font-weight:500;color:var(--mat-sys-on-surface);margin:0}.cloud-nodes-details__content[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:0 20px 20px;animation:none}.cloud-nodes-details--hidden[_ngcontent-%COMP%]{opacity:.5;pointer-events:none}.cloud-nodes-details__form-card[_ngcontent-%COMP%]{background:var(--mat-sys-surface);border-radius:16px;overflow:hidden;box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 20%,transparent),0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent);margin-bottom:var(--gns3-density-card-gap)}.cloud-nodes-details__section-header[_ngcontent-%COMP%]{padding:var(--gns3-density-section-header-padding);display:flex;align-items:center;justify-content:space-between;cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline) 30%,transparent)}.cloud-nodes-details__section-header[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 5%,transparent)}.cloud-nodes-details__section-title[_ngcontent-%COMP%]{margin:0;font-size:16px;font-weight:500;color:var(--mat-sys-on-surface-variant)}.cloud-nodes-details__expand-icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);transition:transform var(--gns3-motion-duration-standard) ease}.cloud-nodes-details__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-card-gap);padding:var(--gns3-density-card-padding) var(--gns3-density-card-padding) 24px}.cloud-nodes-details__field[_ngcontent-%COMP%]{width:100%}.cloud-nodes-details__field--flex[_ngcontent-%COMP%]{flex:1}.cloud-nodes-details__field--full[_ngcontent-%COMP%]{width:100%;padding:0}.cloud-nodes-details__symbol-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap)}.cloud-nodes-details__symbol-btn[_ngcontent-%COMP%]{align-self:stretch}.cloud-nodes-details__port-item[_ngcontent-%COMP%]{padding:8px 0;font-size:14px;color:var(--mat-sys-on-surface-variant)}.cloud-nodes-details__add-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap)}.cloud-nodes-details__add-btn[_ngcontent-%COMP%]{min-height:var(--gns3-density-control-height);flex:0 0 auto}.udp-tunnels__input-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:0 var(--gns3-density-card-gap)}.udp-tunnels__add-btn[_ngcontent-%COMP%]{display:flex;justify-content:center}.cloud-nodes-details__table[_ngcontent-%COMP%]{width:100%;background:transparent}.cloud-nodes-details__table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{font-size:12px;font-weight:500;color:var(--mat-sys-on-surface-variant)}.cloud-nodes-details__table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface)}.cloud-nodes-details__actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:var(--gns3-density-space-3);margin-top:24px}.cloud-nodes-details__cancel-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none}.cloud-nodes-details__save-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none;letter-spacing:.5px}@media(max-width:768px){.cloud-nodes-details__header[_ngcontent-%COMP%]{padding:24px 16px 12px;gap:12px}.cloud-nodes-details__back-btn[_ngcontent-%COMP%]{width:44px;height:44px}.cloud-nodes-details__title[_ngcontent-%COMP%]{font-size:22px}.cloud-nodes-details__content[_ngcontent-%COMP%]{padding:0 16px 16px}.cloud-nodes-details__section-header[_ngcontent-%COMP%]{padding:12px 16px}.cloud-nodes-details__form[_ngcontent-%COMP%]{padding:16px}.cloud-nodes-details__symbol-row[_ngcontent-%COMP%], .cloud-nodes-details__add-row[_ngcontent-%COMP%]{flex-direction:column}.cloud-nodes-details__symbol-btn[_ngcontent-%COMP%], .cloud-nodes-details__add-btn[_ngcontent-%COMP%]{width:100%}.cloud-nodes-details__actions[_ngcontent-%COMP%]{flex-direction:column}.cloud-nodes-details__cancel-btn[_ngcontent-%COMP%], .cloud-nodes-details__save-btn[_ngcontent-%COMP%]{width:100%;height:44px}}",'[_nghost-%COMP%]{display:block;width:100%;background:transparent}.templates-page__content[_ngcontent-%COMP%]{animation:none}.templates-page__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:20px;max-width:1600px;margin:0 auto;padding:24px 20px 16px}.templates-page__heading[_ngcontent-%COMP%], .templates-page__header-actions[_ngcontent-%COMP%]{display:flex;align-items:center}.templates-page__heading[_ngcontent-%COMP%]{min-width:0;gap:var(--gns3-density-space-3)}.templates-page__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.templates-page__header-actions[_ngcontent-%COMP%]{gap:var(--gns3-density-space-3)}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);border-radius:12px;padding-inline:18px;font-size:15px;font-weight:500;letter-spacing:.3px;text-transform:none}[class*=-templates__header][_ngcontent-%COMP%]{box-sizing:border-box;width:100%;height:calc(var(--gns3-density-space-4) * 2 + (var(--gns3-density-section-title-size) + 2px) * 1.2 + 1px);max-width:none;margin:0;padding:0 var(--gns3-density-page-padding);gap:var(--gns3-density-space-3);color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container);border-bottom:1px solid var(--mat-sys-outline-variant)}[class*=-templates__back-btn][_ngcontent-%COMP%], [class*=-templates__add-btn][_ngcontent-%COMP%]{flex:0 0 auto;width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:12px}[class*=-templates__back-btn][_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container)}[class*=-templates__add-btn][_ngcontent-%COMP%]{color:var(--mat-sys-primary)}[class*=-templates__title][_ngcontent-%COMP%]{flex:1;min-width:0;margin:0;padding-bottom:0;color:var(--mat-sys-on-primary-container);font-size:calc(var(--gns3-density-section-title-size) + 2px);font-weight:650;line-height:1.2;letter-spacing:-.01em}.templates-page__scopes[_ngcontent-%COMP%]{display:flex;gap:4px;max-width:1560px;margin:0 auto 16px;padding:0 20px;border-bottom:1px solid var(--mat-sys-outline-variant)}.templates-page__scope[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center;gap:8px;min-height:48px;padding:0 16px;border:0;color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;font-size:14px;font-weight:550;cursor:pointer}.templates-page__scope[_ngcontent-%COMP%]:after{position:absolute;right:8px;bottom:-1px;left:8px;height:2px;border-radius:2px 2px 0 0;background:transparent;content:""}.templates-page__scope[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}.templates-page__scope[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{min-width:22px;padding:2px 6px;border-radius:12px;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-high);font-size:11px;text-align:center}.templates-page__scope--active[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%]:after{background:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap);max-width:1600px;margin:0 auto;padding:0 20px 8px}.templates-page__search[_ngcontent-%COMP%]{flex:1;min-width:240px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:flex;align-items:center;flex:0 0 auto;gap:var(--gns3-density-space-3)}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{width:155px}.templates-page__view-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px;padding:4px 2px;border-radius:8px;background:var(--mat-sys-surface-container-high)}button.templates-page__view-button[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:8px;color:var(--mat-sys-on-surface-variant);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);--mat-icon-button-icon-size: 22px}button.templates-page__view-button--active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__main[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:20px;max-width:1600px;margin:0 auto;padding:0 20px 20px}.templates-page__loading[_ngcontent-%COMP%]{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;min-height:320px;gap:var(--gns3-density-card-gap);color:var(--mat-sys-on-surface-variant)}.templates-page__table-container[_ngcontent-%COMP%]{flex:1;min-width:0;border-radius:16px;background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;overflow-x:auto}mat-table[_ngcontent-%COMP%]{width:100%;min-width:850px}.mat-mdc-row[_ngcontent-%COMP%], .mat-row[_ngcontent-%COMP%]{height:var(--mat-table-row-item-container-height);min-height:var(--mat-table-row-item-container-height)}.mat-header-row[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%]{position:sticky;top:0;z-index:10;background:var(--mat-sys-surface-container-highest);box-shadow:inset 0 -2px var(--mat-sys-primary);--mat-sort-arrow-color: var(--mat-sys-primary)}.mat-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:13px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}mat-row[_ngcontent-%COMP%]{cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease}mat-row[_ngcontent-%COMP%]:nth-child(2n){background:color-mix(in srgb,var(--mat-sys-on-surface) 1%,transparent)}mat-row[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}mat-row.templates-page__row--selected[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}mat-cell[_ngcontent-%COMP%], mat-header-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:inherit;color:var(--mat-sys-on-surface)}.mat-column-name[_ngcontent-%COMP%]{flex:2.4;min-width:240px;justify-content:flex-start}.mat-column-template_type[_ngcontent-%COMP%]{flex:1.1;min-width:130px}.mat-column-category[_ngcontent-%COMP%]{flex:1;min-width:110px}.mat-column-compute_id[_ngcontent-%COMP%]{flex:1;min-width:105px}.mat-column-builtin[_ngcontent-%COMP%]{flex:0 0 90px;min-width:90px;justify-content:center}.mat-column-actions[_ngcontent-%COMP%]{flex:0 0 180px;min-width:180px;box-sizing:border-box;justify-content:flex-start;padding-right:24px}.templates-page__name-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-width:0;gap:var(--gns3-density-space-3)}.templates-page__name-copy[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:14px;font-weight:600}.templates-page__symbol[_ngcontent-%COMP%]{display:grid;flex:0 0 52px;width:52px;height:52px;overflow:hidden;place-items:center;border-radius:14px;color:var(--mat-sys-on-primary-container);background:color-mix(in srgb,var(--mat-sys-primary-container) 82%,var(--mat-sys-surface))}.templates-page__symbol[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:78%;height:78%;object-fit:contain;filter:drop-shadow(0 2px 4px color-mix(in srgb,var(--mat-sys-shadow) 25%,transparent))}.templates-page__symbol[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:27px;height:27px;font-size:27px}.templates-page__symbol--small[_ngcontent-%COMP%]{flex-basis:38px;width:38px;height:38px;border-radius:10px}.templates-page__symbol--small[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:21px;height:21px;font-size:21px}.templates-page__type-badge[_ngcontent-%COMP%], .templates-page__source-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;width:fit-content;padding:4px 9px;border-radius:16px;font-size:12px;font-weight:600;white-space:nowrap}.templates-page__type-badge[_ngcontent-%COMP%]{color:var(--mat-sys-secondary);background:color-mix(in srgb,var(--mat-sys-secondary) 11%,transparent)}.templates-page__type-badge--qemu[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__type-badge--docker[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container)}.templates-page__type-badge--dynamips[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary-container);background:var(--mat-sys-tertiary-container)}.templates-page__type-badge--cloud[_ngcontent-%COMP%]{color:var(--mat-sys-on-error-container);background:var(--mat-sys-error-container)}.templates-page__type-badge--vpcs[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary);background:var(--mat-sys-primary)}.templates-page__type-badge--ethernet-hub[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary);background:var(--mat-sys-secondary)}.templates-page__type-badge--ethernet-switch[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary);background:var(--mat-sys-tertiary)}.templates-page__type-badge--iou[_ngcontent-%COMP%]{color:var(--mat-sys-on-error);background:var(--mat-sys-error)}.templates-page__type-badge--nat[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-highest)}.templates-page__source-badge[_ngcontent-%COMP%]{color:var(--mat-sys-primary);background:color-mix(in srgb,var(--mat-sys-primary) 11%,transparent)}.templates-page__source-badge--builtin[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary);background:color-mix(in srgb,var(--mat-sys-tertiary) 11%,transparent)}.templates-page__table-footer[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:var(--mat-table-footer-container-height);padding:0 12px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container))}.templates-page__table-footer[_ngcontent-%COMP%] mat-paginator[_ngcontent-%COMP%]{width:100%;--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__actions-cell[_ngcontent-%COMP%], .templates-page__card-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:3px}button.templates-page__action[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-on-surface-variant);width:var(--gns3-density-control-height-sm);height:var(--gns3-density-control-height-sm);--mat-icon-button-state-layer-size: var(--gns3-density-control-height-sm);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-control-height-sm)}button.templates-page__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}button.templates-page__action[_ngcontent-%COMP%]{color:var(--template-action-color);--mat-icon-button-state-layer-color: var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:not(:disabled) mat-icon[_ngcontent-%COMP%]{color:var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:disabled mat-icon[_ngcontent-%COMP%]{color:var(--gns3-button-disabled-label-color)}button.templates-page__action--details[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--edit[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-primary)}button.templates-page__action--duplicate[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--delete[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-error)}.templates-page__grid[_ngcontent-%COMP%]{flex:1;min-width:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-content:start;gap:var(--gns3-density-card-gap)}.templates-page__grid--with-details[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__card[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column;padding:16px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;background:var(--mat-sys-surface);cursor:pointer;transition:transform var(--gns3-motion-duration-standard) ease,box-shadow var(--gns3-motion-duration-standard) ease,border-color var(--gns3-motion-duration-standard) ease}.templates-page__card[_ngcontent-%COMP%]:hover{border-color:var(--mat-sys-outline-variant);background:var(--mat-sys-surface-container-low)}.templates-page__card--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);box-shadow:0 0 0 1px var(--mat-sys-primary)}.templates-page__card-header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--gns3-density-space-3)}.templates-page__card-body[_ngcontent-%COMP%]{flex:1;min-width:0;padding:14px 0 12px}.templates-page__card-body[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{display:-webkit-box;overflow:hidden;margin:0 0 9px;color:var(--mat-sys-on-surface);font-size:17px;font-weight:650;line-height:1.35;overflow-wrap:anywhere;-webkit-box-orient:vertical;-webkit-line-clamp:2}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%]{display:grid;gap:8px;margin:16px 0 0}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{min-width:0;margin:0;overflow:hidden;color:var(--mat-sys-on-surface);font-size:13px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] .templates-page__card-tags-row[_ngcontent-%COMP%]{align-items:flex-start}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd.templates-page__card-tags[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px;overflow:visible;white-space:normal}.templates-page__card-actions[_ngcontent-%COMP%]{justify-content:flex-end;min-height:33px;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__grid-paginator[_ngcontent-%COMP%]{grid-column:1/-1;width:100%;border-radius:12px;background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container));--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__empty[_ngcontent-%COMP%]{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:230px;padding:32px;color:var(--mat-sys-on-surface-variant);text-align:center}.templates-page__empty[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{width:48px;height:48px;font-size:48px;opacity:.55}.templates-page__empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:12px 0 0;color:var(--mat-sys-on-surface);font-size:17px}.templates-page__empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:5px 0 0;font-size:14px}.templates-page__details[_ngcontent-%COMP%]{position:sticky;top:16px;flex:0 0 clamp(390px,31vw,480px);display:flex;min-height:380px;max-height:calc(100vh - 176px);flex-direction:column;overflow:hidden;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 60%,transparent);border-radius:16px;background:var(--mat-sys-surface);box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent);animation:_ngcontent-%COMP%_templates-slide-in var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard)}.templates-page__details-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:var(--gns3-density-space-3);min-height:56px;box-sizing:border-box;padding:8px 10px 8px 16px;border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 72%,var(--mat-sys-surface))}.templates-page__details-header[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-primary-container)}.templates-page__details-heading[_ngcontent-%COMP%]{display:flex;min-width:0;align-items:center;gap:var(--gns3-density-space-3)}.templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;margin:0;color:var(--mat-sys-on-primary-container);font-size:19px;font-weight:650;line-height:1.25;text-overflow:ellipsis;white-space:nowrap}.templates-page__details-title-line[_ngcontent-%COMP%]{display:flex;flex:1;min-width:0;align-items:center;gap:var(--gns3-density-space-2)}.templates-page__details-title-line[_ngcontent-%COMP%] .templates-page__type-badge[_ngcontent-%COMP%]{flex:0 0 auto}.templates-page__details-body[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:12px 20px}.templates-page__description[_ngcontent-%COMP%]{padding:10px 0 14px;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__description[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.6px;text-transform:uppercase}.templates-page__description[_ngcontent-%COMP%] app-markdown-viewer[_ngcontent-%COMP%]{display:block;margin-top:8px;padding:2px 12px;border-radius:10px;background:var(--mat-sys-surface-container-low);overflow-wrap:anywhere;--markdown-viewer-font-size: 13px;--markdown-viewer-line-height: 1.5;--markdown-viewer-heading-scale: .85}.templates-page__detail-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:22px 105px minmax(0,1fr);align-items:center;gap:var(--gns3-density-space-3);min-height:40px;box-sizing:border-box;padding:8px 0;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__detail-row[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:19px;height:19px;color:var(--mat-sys-primary);font-size:19px}.templates-page__detail-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:12px;font-weight:650;letter-spacing:.5px;text-transform:uppercase;white-space:nowrap}.templates-page__detail-row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{min-width:0;color:var(--mat-sys-on-surface);font-size:14px;font-weight:500;line-height:1.45;text-align:right;overflow-wrap:anywhere}.templates-page__detail-row--stacked[_ngcontent-%COMP%]{align-items:start}.templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__mono[_ngcontent-%COMP%], .templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__path[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-family:var(--gns3-font-code);font-size:12px;word-break:break-all}.templates-page__tags[_ngcontent-%COMP%]{border-bottom:0}.templates-page__tags[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:7px}.templates-page__tag[_ngcontent-%COMP%]{padding:5px 9px;border-radius:14px;color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container);font-size:11px;font-weight:550}.templates-page__details-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(105px,1fr));gap:var(--gns3-density-space-2);padding:14px 16px 18px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-surface-container) 72%,transparent)}button.templates-page__details-action[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-on-surface-variant);height:40px;border-radius:12px;color:var(--details-action-color);border-color:color-mix(in srgb,var(--details-action-color) 48%,transparent);font-size:13px;font-weight:500}button.templates-page__details-action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--details-action-color)}button.templates-page__details-action--edit[_ngcontent-%COMP%], button.templates-page__details-action--duplicate[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-primary)}button.templates-page__details-action--delete[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-error)}[data-density=compact][_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%]{min-height:40px;height:40px}[data-density=compact][_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%]{width:40px;height:40px;--mat-icon-button-state-layer-size: 40px}[data-density=compact][_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%]{min-height:48px;padding-block:4px}[data-density=compact][_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:18px}[data-density=compact][_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%]{padding-block:8px}[data-density=compact][_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%]{min-height:36px;padding-block:6px}[data-density=compact][_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%]{padding:12px}@keyframes _ngcontent-%COMP%_templates-slide-in{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@media(max-width:1400px){.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__main[_ngcontent-%COMP%]{flex-direction:column}.templates-page__table-container[_ngcontent-%COMP%], .templates-page__grid[_ngcontent-%COMP%], .templates-page__details[_ngcontent-%COMP%]{width:100%}.templates-page__details[_ngcontent-%COMP%]{position:static;flex-basis:auto;max-height:none}}@media(max-width:900px){.templates-page__header[_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column}.templates-page__header-actions[_ngcontent-%COMP%]{width:100%}.templates-page__toolbar[_ngcontent-%COMP%]{align-items:stretch;flex-direction:column}.templates-page__toolbar-actions[_ngcontent-%COMP%]{width:100%}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{flex:1;width:auto}}@media(max-width:640px){.templates-page__header[_ngcontent-%COMP%]{padding:20px 16px 12px}.templates-page__header-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{width:100%;padding-inline:10px}.templates-page__scopes[_ngcontent-%COMP%]{overflow-x:auto;padding-inline:16px}.templates-page__scope[_ngcontent-%COMP%]{flex:0 0 auto;padding-inline:12px}.templates-page__toolbar[_ngcontent-%COMP%], .templates-page__main[_ngcontent-%COMP%]{padding-inline:16px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__view-toggle[_ngcontent-%COMP%]{grid-column:1/-1;justify-self:end}.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.templates-page__details[_ngcontent-%COMP%]{min-width:0}}',"[_nghost-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%] mat-form-field[_ngcontent-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%]{display:block;width:100%;background:transparent}.template-edit-legacy-label[_ngcontent-%COMP%], .template-edit-legacy-control[_ngcontent-%COMP%]{display:none}[class$=__header][_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-4);max-width:1440px;margin:0 auto;padding:var(--gns3-density-space-5) var(--gns3-density-space-5) 14px}[class$=__breadcrumb][_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;margin-bottom:8px;color:var(--mat-sys-primary);font-size:14px;font-weight:600}[class$=__breadcrumb][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{min-height:28px;padding:0 4px;color:inherit;font:inherit}[class$=__breadcrumb][_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:18px;height:18px;font-size:18px;color:var(--mat-sys-on-surface-variant)}[class$=__heading-row][_ngcontent-%COMP%]{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--gns3-density-space-5);width:100%}[class$=__title][_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal;flex:1;min-width:0}[class$=__header-actions][_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-3);flex-shrink:0}[class$=__header-actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{min-height:var(--gns3-density-control-height);border-radius:var(--gns3-density-radius-md);padding:0 var(--gns3-density-space-4)}[class$=__back-btn][_ngcontent-%COMP%]{flex:0 0 auto;width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-icon-button)}[class$=__back-btn][_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}[class$=__back-btn][_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant)}[class$=__content][_ngcontent-%COMP%]{display:grid;grid-template-columns:220px minmax(0,1fr);align-items:start;column-gap:var(--gns3-density-card-gap);row-gap:var(--gns3-density-space-3);max-width:1440px;margin:0 auto;padding:0 var(--gns3-density-space-5) 32px}.template-edit-tabs[_ngcontent-%COMP%]{position:sticky;top:var(--gns3-density-app-header-height);display:flex;grid-column:1;grid-row:1/span 2;align-self:start;flex-direction:column;gap:var(--gns3-density-space-2);padding:var(--gns3-density-space-3);border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:var(--gns3-density-radius-xl);background:color-mix(in srgb,var(--mat-sys-primary-container) 18%,var(--mat-sys-surface))}.template-edit-tabs[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:flex-start;min-height:var(--gns3-density-control-height);border:0;border-radius:var(--gns3-density-radius-sm);padding:0 var(--gns3-density-space-3);color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;font-weight:600;text-align:left;cursor:pointer}.template-edit-tabs[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}.template-edit-tabs[_ngcontent-%COMP%] button.is-active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}[class$=__content][_ngcontent-%COMP%] > [class*=__form-card][_ngcontent-%COMP%]{grid-column:2;grid-row:1}[class$=__content][_ngcontent-%COMP%] > [class*=__form-card][_ngcontent-%COMP%]:not(:has(>:nth-child(2))){display:none}.vpcs-template-details__form-card[_ngcontent-%COMP%]:not(.template-edit-panel-active){display:none}[class*=__form-card][_ngcontent-%COMP%]{margin:0 0 18px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;overflow:hidden;border-radius:var(--gns3-density-radius-lg);background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none}[class$=__section-header][_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;min-height:var(--gns3-density-section-header-height);box-sizing:border-box;padding:var(--gns3-density-section-header-padding);border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 28%,var(--mat-sys-surface));cursor:default}[class$=__expand-icon][_ngcontent-%COMP%]{display:none}[class$=__section-title][_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-section-title-size);font-weight:650}[class$=__form][_ngcontent-%COMP%], .form-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-card-gap);padding:var(--gns3-density-card-padding)}.qemu-template-details__form[_ngcontent-%COMP%]{padding-inline:var(--gns3-density-card-padding)}.qemu-template-details__subsection[_ngcontent-%COMP%]{width:100%;box-sizing:border-box}.two-column-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--gns3-density-card-gap)}[class$=__field][_ngcontent-%COMP%], .form-field[_ngcontent-%COMP%]{width:100%}[class$=__actions][_ngcontent-%COMP%]{display:flex;width:100%;box-sizing:border-box;justify-content:flex-end;gap:var(--gns3-density-space-3);margin-top:0;padding:4px 0 8px}[class$=__content][_ngcontent-%COMP%] > [class$=__actions][_ngcontent-%COMP%]{grid-column:2;justify-content:flex-end}[class*=__save-btn][_ngcontent-%COMP%], [class*=__cancel-btn][_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing)}button[class*=__save-btn].mat-mdc-raised-button[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-primary);background-color:var(--mat-sys-primary);--mat-button-protected-label-text-color: var(--mat-sys-on-primary);--mat-button-protected-container-color: var(--mat-sys-primary);--mat-button-protected-state-layer-color: var(--mat-sys-on-primary)}button[class*=__cancel-btn].mat-mdc-button[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-surface);border-color:var(--mat-sys-outline);--mat-button-outlined-label-text-color: var(--mat-sys-on-surface);--mat-button-outlined-state-layer-color: var(--mat-sys-on-surface)}button[class*=__cancel-btn].mat-mdc-button[_ngcontent-%COMP%]{border:1px solid var(--mat-sys-outline)}button[class*=__config-btn][_ngcontent-%COMP%], button.docker-details__extra-config-btn[_ngcontent-%COMP%], .udp-tunnels__add-btn[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing);width:fit-content;max-width:100%;align-self:center;border-radius:var(--mat-sys-corner-full, 999px)}.preferences__usage-form[_ngcontent-%COMP%]{width:100%;box-sizing:border-box;padding:var(--gns3-density-card-padding)}.preferences__usage-field--full[_ngcontent-%COMP%]{display:block;width:100%}.preferences__usage-field--full[_ngcontent-%COMP%] textarea.mat-mdc-input-element[_ngcontent-%COMP%]{width:100%;min-height:140px;box-sizing:border-box;resize:vertical}[class$=__form][_ngcontent-%COMP%] [class*=__file-row][_ngcontent-%COMP%]{padding:0}[class*=__file-row][_ngcontent-%COMP%]{align-items:flex-start}[class$=__symbol-row][_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:var(--gns3-density-card-gap)}[class$=__symbol-row][_ngcontent-%COMP%] [class*=__symbol-btn][_ngcontent-%COMP%], [class$=__symbol-row][_ngcontent-%COMP%] [class*=__action-btn][_ngcontent-%COMP%], [class*=__file-row][_ngcontent-%COMP%] > button[class*=__browse-btn][_ngcontent-%COMP%], .docker-details__image-row[_ngcontent-%COMP%] > button.docker-details__pull-btn[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing);border-radius:var(--mat-sys-corner-full, 999px);width:fit-content;max-width:100%;flex:0 0 auto;align-self:flex-start;margin-top:var(--template-field-action-offset, calc((var(--gns3-density-form-field-height) - var(--gns3-density-control-height)) / 2))}[data-density=compact][_nghost-%COMP%] [class$=__heading-row][_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] [class$=__heading-row][_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column;gap:var(--gns3-density-space-3)}[data-density=compact][_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%]{width:100%}[data-density=compact][_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex:1}@media(max-width:768px){[class$=__symbol-row][_ngcontent-%COMP%], [class*=__file-row][_ngcontent-%COMP%], .docker-details__image-row[_ngcontent-%COMP%]{--template-field-action-offset: 0px}}@media(max-width:760px){[class$=__header][_ngcontent-%COMP%]{padding-inline:16px}[class$=__content][_ngcontent-%COMP%]{padding-inline:16px;grid-template-columns:1fr}.template-edit-tabs[_ngcontent-%COMP%]{position:static;grid-column:1;grid-row:auto;flex-direction:row;overflow-x:auto}.template-edit-tabs[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex:0 0 auto}[class$=__content][_ngcontent-%COMP%] > [class*=__form-card][_ngcontent-%COMP%]{grid-column:1;grid-row:auto}.two-column-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}[class$=__symbol-row][_ngcontent-%COMP%]{flex-direction:column}[class$=__actions][_ngcontent-%COMP%]{flex-direction:row;align-items:center;justify-content:flex-end}[class$=__actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:auto}[class$=__content][_ngcontent-%COMP%] > [class$=__actions][_ngcontent-%COMP%]{grid-column:1}.preferences__usage-form[_ngcontent-%COMP%]{padding:16px}[class*=__save-btn][_ngcontent-%COMP%], [class*=__cancel-btn][_ngcontent-%COMP%]{width:auto}}"],changeDetection:0})}return n})();function Oae(n,o){if(n&1){let e=R();r(0,"button",29),_("click",function(){y(e);let i=h();return w(i.goBack())}),r(1,"mat-icon"),c(2,"arrow_back"),l()()}}var H1=(()=>{class n{route=f($t);controllerService=f(_t);builtInTemplatesService=f(Os);router=f(Ft);location=f(ki);toasterService=f(re);templateMocksService=f(Rr);formBuilder=f(Ai);cd=f(oe);controller;templateName="";formGroup;isLocalComputerChosen=!0;usage=$("");symbol=$("hub");constructor(){this.formGroup=this.formBuilder.group({templateName:new Ge("",Ue.required),numberOfPorts:new Ge(8,Ue.required)})}ngOnInit(){let e=this.route.snapshot.paramMap.get("controller_id");this.controllerService.get(parseInt(e,10)).then(t=>{this.controller=t,this.cd.markForCheck()},t=>{let i=t.error?.message||t.message||"Failed to load controller";this.toasterService.error(i),this.cd.markForCheck()})}setControllerType(e){e==="local"&&(this.isLocalComputerChosen=!0)}goBack(){let e=this.controller?.id??parseInt(this.route.snapshot.paramMap.get("controller_id"),10);ji(this.location,this.router,["/controller",e,"preferences"])}addTemplate(){!this.formGroup.invalid&&this.controller?this.templateMocksService.getEthernetHubTemplate().subscribe({next:e=>{e.template_id=xo(),e.name=this.formGroup.get("templateName").value,e.compute_id="local",e.usage=this.usage(),e.symbol=this.symbol();for(let t=0;t<this.formGroup.get("numberOfPorts").value;t++)e.ports_mapping.push({name:`Ethernet${t}`,port_number:t});this.builtInTemplatesService.addTemplate(this.controller,e).subscribe({next:()=>{this.goBack()},error:t=>{let i=t.error?.message||t.message||"Failed to add ethernet hub template";this.toasterService.error(i),this.cd.markForCheck()}})},error:e=>{let t=e.error?.message||e.message||"Failed to load template";this.toasterService.error(t),this.cd.markForCheck()}}):this.toasterService.error("Fill all required fields")}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-ethernet-hubs-add-template"]],inputs:{usage:[1,"usage"],symbol:[1,"symbol"]},outputs:{usage:"usageChange",symbol:"symbolChange"},decls:45,vars:6,consts:[[1,"ethernet-hub-add","template-wizard"],[1,"ethernet-hub-add__header","template-wizard__header"],["mat-icon-button","","aria-label","Back to Ethernet hub templates",1,"ethernet-hub-add__back-btn","template-wizard__back"],[1,"template-wizard__heading"],[1,"ethernet-hub-add__title","template-wizard__title"],[1,"ethernet-hub-add__content","template-wizard__body"],[1,"template-wizard__single-layout"],["aria-label","Template creation steps",1,"template-wizard__single-nav"],[1,"template-wizard__single-step","template-wizard__single-step--detailed"],[1,"template-wizard__single-step-index"],[1,"template-wizard__step-label"],[1,"template-wizard__step-label-text"],[1,"template-wizard__step-label-title"],[1,"template-wizard__step-label-description"],[1,"template-wizard__single-content"],[1,"ethernet-hub-add__form-card","template-wizard__panel"],[1,"template-wizard__section"],[1,"template-wizard__section-title"],[1,"template-wizard__section-copy"],[1,"ethernet-hub-add__radio-group"],["value","1",1,"ethernet-hub-add__radio",3,"click","checked"],[1,"ethernet-hub-add__form",3,"formGroup"],["appearance","outline","subscriptSizing","dynamic",1,"ethernet-hub-add__field","template-wizard__field"],["formControlName","templateName","matInput","","required","","type","text","placeholder","Template name"],["formControlName","numberOfPorts","matInput","","required","","type","number","min","0","placeholder","Number of ports"],[3,"usageChange","symbolChange","usage","symbol"],[1,"ethernet-hub-add__actions","template-wizard__actions"],["mat-stroked-button","",1,"ethernet-hub-add__cancel-btn",3,"click"],["mat-raised-button","","color","primary",1,"ethernet-hub-add__submit-btn",3,"click","disabled"],["mat-icon-button","","aria-label","Back to Ethernet hub templates",1,"ethernet-hub-add__back-btn","template-wizard__back",3,"click"]],template:function(t,i){t&1&&(r(0,"div",0)(1,"header",1),T(2,Oae,3,0,"button",2),r(3,"div",3)(4,"h1",4),c(5,"New Ethernet hub template"),l()()(),r(6,"main",5)(7,"div",6)(8,"aside",7)(9,"div",8)(10,"span",9),c(11,"1"),l(),r(12,"span",10)(13,"mat-icon"),c(14,"description"),l(),r(15,"span",11)(16,"span",12),c(17,"Template info"),l(),r(18,"span",13),c(19,"Basic details and name"),l()()()()(),r(20,"div",14)(21,"section",15)(22,"section",16)(23,"h2",17),c(24,"Template information"),l(),r(25,"p",18),c(26,"Choose a name and an optional usage note for your template."),l(),r(27,"mat-radio-group",19)(28,"mat-radio-button",20),_("click",function(){return i.setControllerType("local")}),c(29," Run the Ethernet Hub locally "),l()(),r(30,"form",21)(31,"mat-form-field",22)(32,"mat-label"),c(33,"Template name"),l(),L(34,"input",23),l(),r(35,"mat-form-field",22)(36,"mat-label"),c(37,"Number of ports"),l(),L(38,"input",24),l()(),r(39,"app-template-info-fields",25),rn("usageChange",function(s){return Xt(i.usage,s)||(i.usage=s),s})("symbolChange",function(s){return Xt(i.symbol,s)||(i.symbol=s),s}),l()()()()(),r(40,"div",26)(41,"button",27),_("click",function(){return i.goBack()}),c(42,"Cancel"),l(),r(43,"button",28),_("click",function(){return i.addTemplate()}),c(44," Create template "),l()()()()),t&2&&(m(2),E(i.controller?2:-1),m(26),v("checked",!0),m(2),v("formGroup",i.formGroup),m(9),an("usage",i.usage)("symbol",i.symbol),m(4),v("disabled",i.formGroup.invalid||!i.controller))},dependencies:[It,Ct,At,No,Nt,vt,dl,Er,Ut,Yt,ie,ce,Y,he,Be,Fo,la,Zo,we,Pe,Ve,ye,Ee,Ds],styles:["[_nghost-%COMP%]{display:block;width:100%;background:transparent}.ethernet-hub-add__header[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:32px 20px 16px;display:flex;align-items:center;gap:16px;animation:none}.ethernet-hub-add__back-btn[_ngcontent-%COMP%]{width:48px;height:48px;border-radius:12px;color:var(--mat-sys-on-surface);transition:all var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1)}.ethernet-hub-add__back-btn[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 8%,transparent)}.ethernet-hub-add__title[_ngcontent-%COMP%]{flex:1;font-size:32px;font-weight:500;color:var(--mat-sys-on-surface);margin:0}.ethernet-hub-add__content[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:0 20px 20px;animation:none}.ethernet-hub-add__form-card[_ngcontent-%COMP%]{background:var(--mat-sys-surface);border-radius:16px;overflow:hidden;box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 20%,transparent),0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent);padding:24px}.ethernet-hub-add__radio-group[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px;margin-bottom:24px}.ethernet-hub-add__radio[_ngcontent-%COMP%]{font-size:16px}.ethernet-hub-add__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px}.ethernet-hub-add__field[_ngcontent-%COMP%]{width:100%}.ethernet-hub-add__actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:12px;margin-top:24px}.ethernet-hub-add__cancel-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none}.ethernet-hub-add__submit-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none;letter-spacing:.5px}@media(max-width:768px){.ethernet-hub-add__header[_ngcontent-%COMP%]{padding:24px 16px 12px;gap:12px}.ethernet-hub-add__back-btn[_ngcontent-%COMP%]{width:44px;height:44px}.ethernet-hub-add__title[_ngcontent-%COMP%]{font-size:24px}.ethernet-hub-add__content[_ngcontent-%COMP%]{padding:0 16px 16px}.ethernet-hub-add__form-card[_ngcontent-%COMP%]{padding:16px}.ethernet-hub-add__actions[_ngcontent-%COMP%]{flex-direction:column}.ethernet-hub-add__cancel-btn[_ngcontent-%COMP%], .ethernet-hub-add__submit-btn[_ngcontent-%COMP%]{width:100%;height:44px}}"],changeDetection:0})}return n})();function Dae(n,o){if(n&1){let e=R();r(0,"mat-chip-row",36),_("removed",function(){let i=y(e).$implicit,a=h(3);return w(a.removeTag(i))}),c(1),r(2,"button",37)(3,"mat-icon"),c(4,"cancel"),l()()()}if(n&2){let e=o.$implicit;v("editable",!1),Ce("title",e),m(),X(" ",e," "),m(),Ce("aria-label","Remove tag "+e)}}function Iae(n,o){if(n&1&&(r(0,"mat-option",34),c(1),l()),n&2){let e=o.$implicit;v("value",e[1]),m(),X(" ",e[0]," ")}}function Aae(n,o){if(n&1){let e=R();r(0,"form",16)(1,"mat-form-field",21)(2,"mat-label"),c(3,"Template name"),l(),r(4,"input",22),_("input",function(i){y(e);let a=h(2);return w(a.templateName.set(i.target.value))}),l()(),r(5,"mat-form-field",21)(6,"mat-label"),c(7,"Default name format"),l(),r(8,"input",23),_("input",function(i){y(e);let a=h(2);return w(a.defaultName.set(i.target.value))}),l()(),r(9,"div",24)(10,"mat-form-field",25)(11,"mat-label"),c(12,"Symbol"),l(),r(13,"input",26),_("input",function(i){y(e);let a=h(2);return w(a.symbol.set(i.target.value))}),l()(),r(14,"button",27),_("click",function(){y(e);let i=h(2);return w(i.chooseSymbol())}),r(15,"mat-icon"),c(16,"add"),l(),c(17," Choose symbol "),l()(),r(18,"div",28)(19,"mat-form-field",29)(20,"mat-label"),c(21,"Tags"),l(),r(22,"input",30),_("matChipInputTokenEnd",function(i){y(e);let a=h(2);return w(a.addTag(i))}),l()(),r(23,"mat-chip-grid",31,0),Q(25,Dae,5,4,"mat-chip-row",32,Oe),l()(),r(27,"mat-form-field",21)(28,"mat-label"),c(29,"Category"),l(),r(30,"mat-select",33),_("selectionChange",function(i){y(e);let a=h(2);return w(a.category.set(i.value))}),Q(31,Iae,2,2,"mat-option",34,ni),l()(),r(33,"mat-form-field",21)(34,"mat-label"),c(35,"Number of ports"),l(),r(36,"input",35),_("input",function(i){y(e);let a=h(2);return w(a.numberOfPorts.set(+i.target.value))}),l()()()}if(n&2){let e=Te(24),t=h(2);m(4),v("value",t.templateName()),m(4),v("value",t.defaultName()),m(5),v("value",t.symbol()),m(9),v("matChipInputFor",e)("matChipInputSeparatorKeyCodes",t.separatorKeysCodes),m(),ne("gns3-chip-field__values--empty",t.tags().length===0),m(2),K(t.tags()),m(5),v("value",t.category()),m(),K(t.categories),m(5),v("value",t.numberOfPorts())}}function Nae(n,o){if(n&1){let e=R();r(0,"div",17)(1,"mat-form-field",38)(2,"mat-label"),c(3,"Usage notes"),l(),r(4,"textarea",39),_("input",function(i){y(e);let a=h(2);return w(a.usage.set(i.target.value))}),l()()()}if(n&2){let e=h(2);m(4),v("value",e.usage())}}function Fae(n,o){if(n&1){let e=R();r(0,"main",9)(1,"nav",10)(2,"button",11),_("click",function(){y(e);let i=h();return w(i.selectSection("general"))}),c(3," General settings "),l(),r(4,"button",11),_("click",function(){y(e);let i=h();return w(i.selectSection("usage"))}),c(5," Usage "),l()(),r(6,"section",12)(7,"div",13),_("click",function(){y(e);let i=h();return w(i.toggleSection("general"))}),r(8,"h3",14),c(9,"General settings"),l(),r(10,"mat-icon",15),c(11),l()(),T(12,Aae,37,9,"form",16),l(),r(13,"section",12)(14,"div",13),_("click",function(){y(e);let i=h();return w(i.toggleSection("usage"))}),r(15,"h3",14),c(16,"Usage"),l(),r(17,"mat-icon",15),c(18),l()(),T(19,Nae,5,1,"div",17),l(),r(20,"div",18)(21,"button",19),_("click",function(){y(e);let i=h();return w(i.goBack())}),c(22,"Cancel"),l(),r(23,"button",20),_("click",function(){y(e);let i=h();return w(i.onSave())}),c(24,"Save"),l()()()}if(n&2){let e=h();m(2),ne("is-active",e.activeSection==="general"),m(2),ne("is-active",e.activeSection==="usage"),m(7),N(e.generalSettingsExpanded()?"expand_less":"expand_more"),m(),E(e.activeSection==="general"?12:-1),m(6),N(e.usageExpanded()?"expand_less":"expand_more"),m(),E(e.activeSection==="usage"?19:-1)}}var U1=(()=>{class n{route=f($t);controllerService=f(_t);builtInTemplatesService=f(Os);toasterService=f(re);builtInTemplatesConfigurationService=f(zr);validationService=f(Hn);router=f(Ft);location=f(ki);cd=f(oe);dialog=f(Xe);dialogConfig=f(yo);controller;ethernetHubTemplate;separatorKeysCodes=[13,188];categories=[];templateName=$("");defaultName=$("");symbol=$("");category=$("");numberOfPorts=$(0);tags=$([]);usage=$("");generalSettingsExpanded=$(!1);usageExpanded=$(!1);activeSection="general";ngOnInit(){let e=this.route.snapshot.paramMap.get("controller_id"),t=this.route.snapshot.paramMap.get("template_id");this.controllerService.get(parseInt(e,10)).then(i=>{this.controller=i,this.cd.markForCheck(),this.categories=this.builtInTemplatesConfigurationService.getCategoriesForEthernetHubs(),this.builtInTemplatesService.getTemplate(this.controller,t).subscribe({next:a=>{this.ethernetHubTemplate=a,this.ethernetHubTemplate.ports_mapping||(this.ethernetHubTemplate.ports_mapping=[]),this.ethernetHubTemplate.tags||(this.ethernetHubTemplate.tags=[]),this.templateName.set(a.name||""),this.defaultName.set(a.default_name_format||""),this.symbol.set(a.symbol||""),this.category.set(a.category||""),this.numberOfPorts.set(a.ports_mapping.length||0),this.tags.set(a.tags||[]),this.usage.set(a.usage||""),this.cd.markForCheck()},error:a=>{let s=a.error?.message||a.message||"Failed to load template";this.toasterService.error(s),this.cd.markForCheck()}})},i=>{let a=i.error?.message||i.message||"Failed to load controller";this.toasterService.error(a),this.cd.markForCheck()})}goBack(){ji(this.location,this.router,["/controller",this.controller.id,"preferences"])}onSave(){let e=this.validationService.required(this.templateName(),"Template name");if(!e.isValid){this.toasterService.error(e.errorMessage||"Template name is required");return}this.ethernetHubTemplate.name=this.templateName(),this.ethernetHubTemplate.default_name_format=this.defaultName(),this.ethernetHubTemplate.symbol=this.symbol(),this.ethernetHubTemplate.category=this.category(),this.ethernetHubTemplate.tags=this.tags(),this.ethernetHubTemplate.usage=this.usage();let t=this.numberOfPorts();this.ethernetHubTemplate.ports_mapping=[];for(let i=0;i<t;i++)this.ethernetHubTemplate.ports_mapping.push({name:`Ethernet${i}`,port_number:i});this.builtInTemplatesService.saveTemplate(this.controller,this.ethernetHubTemplate).subscribe({next:()=>{this.toasterService.success("Changes saved"),this.goBack()},error:i=>{let a=i.error?.message||i.message||"Failed to save template";this.toasterService.error(a),this.cd.markForCheck()}})}chooseSymbol(){let e=this.dialogConfig.openConfig("templateSymbol",{autoFocus:!1,disableClose:!1,data:{controller:this.controller,symbol:this.symbol()}});this.dialog.open(rr,e).afterClosed().subscribe(i=>{i&&this.symbol.set(i)})}addTag(e){let t=(e.value||"").trim(),i=this.tags();t&&this.tags.set([...i,t]),e.chipInput&&e.chipInput.clear()}removeTag(e){let t=this.tags(),i=t.indexOf(e);if(i>=0){let a=[...t];a.splice(i,1),this.tags.set(a)}}toggleSection(e){switch(e){case"general":this.generalSettingsExpanded.set(!this.generalSettingsExpanded());break;case"usage":this.usageExpanded.set(!this.usageExpanded());break}}selectSection(e){this.activeSection=e}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-ethernet-hubs-template-details"]],inputs:{templateName:[1,"templateName"],defaultName:[1,"defaultName"],symbol:[1,"symbol"],category:[1,"category"],numberOfPorts:[1,"numberOfPorts"],tags:[1,"tags"],usage:[1,"usage"],generalSettingsExpanded:[1,"generalSettingsExpanded"],usageExpanded:[1,"usageExpanded"]},outputs:{templateName:"templateNameChange",defaultName:"defaultNameChange",symbol:"symbolChange",category:"categoryChange",numberOfPorts:"numberOfPortsChange",tags:"tagsChange",usage:"usageChange",generalSettingsExpanded:"generalSettingsExpandedChange",usageExpanded:"usageExpandedChange"},decls:17,vars:1,consts:[["chipList",""],[1,"ethernet-hub-details"],[1,"ethernet-hub-details__header"],[1,"ethernet-hub-details__heading-row"],[1,"ethernet-hub-details__breadcrumb"],["type","button","mat-button","",3,"click"],[1,"ethernet-hub-details__title"],[1,"ethernet-hub-details__header-actions"],["type","button","mat-raised-button","","color","primary",3,"click"],[1,"ethernet-hub-details__content"],["aria-label","Template settings",1,"template-edit-tabs"],["type","button",3,"click"],[1,"ethernet-hub-details__form-card"],[1,"ethernet-hub-details__section-header",3,"click"],[1,"ethernet-hub-details__section-title"],[1,"ethernet-hub-details__expand-icon"],[1,"ethernet-hub-details__form"],[1,"preferences__usage-form"],[1,"ethernet-hub-details__actions"],["mat-button","",1,"ethernet-hub-details__cancel-btn",3,"click"],["mat-raised-button","","color","primary",1,"ethernet-hub-details__save-btn",3,"click"],["appearance","outline","subscriptSizing","dynamic",1,"ethernet-hub-details__field"],["matInput","","type","text","placeholder","Template name",3,"input","value"],["matInput","","type","text","placeholder","Default name format",3,"input","value"],[1,"ethernet-hub-details__symbol-row"],["appearance","outline","subscriptSizing","dynamic",1,"ethernet-hub-details__field","ethernet-hub-details__field--flex"],["matInput","","type","text","placeholder","Symbol",3,"input","value"],["mat-raised-button","","color","primary",1,"ethernet-hub-details__symbol-btn",3,"click"],[1,"gns3-chip-field"],["floatLabel","always","appearance","outline","subscriptSizing","dynamic",1,"ethernet-hub-details__field"],["matInput","","placeholder","Add tags",3,"matChipInputTokenEnd","matChipInputFor","matChipInputSeparatorKeyCodes"],["aria-label","Tags",1,"gns3-chip-field__values"],[3,"editable"],[3,"selectionChange","value"],[3,"value"],["matInput","","type","number","placeholder","Number of ports",3,"input","value"],[3,"removed","editable"],["matChipRemove","","type","button"],["appearance","outline","subscriptSizing","dynamic",1,"preferences__usage-field--full"],["matInput","","type","text",3,"input","value"]],template:function(t,i){t&1&&(r(0,"div",1)(1,"header",2)(2,"div",3)(3,"div")(4,"div",4)(5,"button",5),_("click",function(){return i.goBack()}),c(6,"Templates"),l(),r(7,"mat-icon"),c(8,"chevron_right"),l(),r(9,"span"),c(10,"Edit"),l()(),r(11,"h1",6),c(12,"Edit template"),l()(),r(13,"div",7)(14,"button",8),_("click",function(){return i.goBack()}),c(15,"Back to templates"),l()()()(),T(16,Fae,25,8,"main",9),l()),t&2&&(m(16),E(i.ethernetHubTemplate?16:-1))},dependencies:[fe,St,Ct,vt,Ji,vn,ie,ce,Y,he,we,Pe,Ve,ye,Ee,ot,ct,nt,ri,bi,xi,hi,fi],styles:["[_nghost-%COMP%]{display:block;width:100%;background:transparent}.ethernet-hub-details__header[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:32px 20px 16px;display:flex;align-items:center;gap:var(--gns3-density-card-gap);animation:none}.ethernet-hub-details__back-btn[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:12px;color:var(--mat-sys-on-surface);transition:all var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1)}.ethernet-hub-details__back-btn[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 8%,transparent)}.ethernet-hub-details__title[_ngcontent-%COMP%]{flex:1;font-size:28px;font-weight:500;color:var(--mat-sys-on-surface);margin:0}.ethernet-hub-details__content[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:0 20px 20px;animation:none}.ethernet-hub-details--hidden[_ngcontent-%COMP%]{opacity:.5;pointer-events:none}.ethernet-hub-details__form-card[_ngcontent-%COMP%]{background:var(--mat-sys-surface);border-radius:16px;overflow:hidden;box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 20%,transparent),0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent);margin-bottom:var(--gns3-density-card-gap)}.ethernet-hub-details__section-header[_ngcontent-%COMP%]{padding:var(--gns3-density-section-header-padding);display:flex;align-items:center;justify-content:space-between;cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline) 30%,transparent)}.ethernet-hub-details__section-header[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 5%,transparent)}.ethernet-hub-details__section-title[_ngcontent-%COMP%]{margin:0;font-size:16px;font-weight:500;color:var(--mat-sys-on-surface-variant)}.ethernet-hub-details__expand-icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);transition:transform var(--gns3-motion-duration-standard) ease}.ethernet-hub-details__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-card-gap);padding:var(--gns3-density-card-padding) var(--gns3-density-card-padding) 24px}.ethernet-hub-details__field[_ngcontent-%COMP%]{width:100%}.ethernet-hub-details__field--flex[_ngcontent-%COMP%]{flex:1}.ethernet-hub-details__symbol-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap)}.ethernet-hub-details__symbol-btn[_ngcontent-%COMP%]{align-self:stretch}.ethernet-hub-details__actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:var(--gns3-density-space-3);margin-top:24px}.ethernet-hub-details__cancel-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none}.ethernet-hub-details__save-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none;letter-spacing:.5px}@media(max-width:768px){.ethernet-hub-details__header[_ngcontent-%COMP%]{padding:24px 16px 12px;gap:12px}.ethernet-hub-details__back-btn[_ngcontent-%COMP%]{width:44px;height:44px}.ethernet-hub-details__title[_ngcontent-%COMP%]{font-size:22px}.ethernet-hub-details__content[_ngcontent-%COMP%]{padding:0 16px 16px}.ethernet-hub-details__section-header[_ngcontent-%COMP%]{padding:12px 16px}.ethernet-hub-details__form[_ngcontent-%COMP%]{padding:16px}.ethernet-hub-details__symbol-row[_ngcontent-%COMP%], .ethernet-hub-details__actions[_ngcontent-%COMP%]{flex-direction:column}.ethernet-hub-details__cancel-btn[_ngcontent-%COMP%], .ethernet-hub-details__save-btn[_ngcontent-%COMP%]{width:100%;height:44px}}",'[_nghost-%COMP%]{display:block;width:100%;background:transparent}.templates-page__content[_ngcontent-%COMP%]{animation:none}.templates-page__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:20px;max-width:1600px;margin:0 auto;padding:24px 20px 16px}.templates-page__heading[_ngcontent-%COMP%], .templates-page__header-actions[_ngcontent-%COMP%]{display:flex;align-items:center}.templates-page__heading[_ngcontent-%COMP%]{min-width:0;gap:var(--gns3-density-space-3)}.templates-page__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.templates-page__header-actions[_ngcontent-%COMP%]{gap:var(--gns3-density-space-3)}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);border-radius:12px;padding-inline:18px;font-size:15px;font-weight:500;letter-spacing:.3px;text-transform:none}[class*=-templates__header][_ngcontent-%COMP%]{box-sizing:border-box;width:100%;height:calc(var(--gns3-density-space-4) * 2 + (var(--gns3-density-section-title-size) + 2px) * 1.2 + 1px);max-width:none;margin:0;padding:0 var(--gns3-density-page-padding);gap:var(--gns3-density-space-3);color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container);border-bottom:1px solid var(--mat-sys-outline-variant)}[class*=-templates__back-btn][_ngcontent-%COMP%], [class*=-templates__add-btn][_ngcontent-%COMP%]{flex:0 0 auto;width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:12px}[class*=-templates__back-btn][_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container)}[class*=-templates__add-btn][_ngcontent-%COMP%]{color:var(--mat-sys-primary)}[class*=-templates__title][_ngcontent-%COMP%]{flex:1;min-width:0;margin:0;padding-bottom:0;color:var(--mat-sys-on-primary-container);font-size:calc(var(--gns3-density-section-title-size) + 2px);font-weight:650;line-height:1.2;letter-spacing:-.01em}.templates-page__scopes[_ngcontent-%COMP%]{display:flex;gap:4px;max-width:1560px;margin:0 auto 16px;padding:0 20px;border-bottom:1px solid var(--mat-sys-outline-variant)}.templates-page__scope[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center;gap:8px;min-height:48px;padding:0 16px;border:0;color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;font-size:14px;font-weight:550;cursor:pointer}.templates-page__scope[_ngcontent-%COMP%]:after{position:absolute;right:8px;bottom:-1px;left:8px;height:2px;border-radius:2px 2px 0 0;background:transparent;content:""}.templates-page__scope[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}.templates-page__scope[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{min-width:22px;padding:2px 6px;border-radius:12px;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-high);font-size:11px;text-align:center}.templates-page__scope--active[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%]:after{background:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap);max-width:1600px;margin:0 auto;padding:0 20px 8px}.templates-page__search[_ngcontent-%COMP%]{flex:1;min-width:240px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:flex;align-items:center;flex:0 0 auto;gap:var(--gns3-density-space-3)}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{width:155px}.templates-page__view-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px;padding:4px 2px;border-radius:8px;background:var(--mat-sys-surface-container-high)}button.templates-page__view-button[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:8px;color:var(--mat-sys-on-surface-variant);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);--mat-icon-button-icon-size: 22px}button.templates-page__view-button--active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__main[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:20px;max-width:1600px;margin:0 auto;padding:0 20px 20px}.templates-page__loading[_ngcontent-%COMP%]{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;min-height:320px;gap:var(--gns3-density-card-gap);color:var(--mat-sys-on-surface-variant)}.templates-page__table-container[_ngcontent-%COMP%]{flex:1;min-width:0;border-radius:16px;background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;overflow-x:auto}mat-table[_ngcontent-%COMP%]{width:100%;min-width:850px}.mat-mdc-row[_ngcontent-%COMP%], .mat-row[_ngcontent-%COMP%]{height:var(--mat-table-row-item-container-height);min-height:var(--mat-table-row-item-container-height)}.mat-header-row[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%]{position:sticky;top:0;z-index:10;background:var(--mat-sys-surface-container-highest);box-shadow:inset 0 -2px var(--mat-sys-primary);--mat-sort-arrow-color: var(--mat-sys-primary)}.mat-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:13px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}mat-row[_ngcontent-%COMP%]{cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease}mat-row[_ngcontent-%COMP%]:nth-child(2n){background:color-mix(in srgb,var(--mat-sys-on-surface) 1%,transparent)}mat-row[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}mat-row.templates-page__row--selected[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}mat-cell[_ngcontent-%COMP%], mat-header-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:inherit;color:var(--mat-sys-on-surface)}.mat-column-name[_ngcontent-%COMP%]{flex:2.4;min-width:240px;justify-content:flex-start}.mat-column-template_type[_ngcontent-%COMP%]{flex:1.1;min-width:130px}.mat-column-category[_ngcontent-%COMP%]{flex:1;min-width:110px}.mat-column-compute_id[_ngcontent-%COMP%]{flex:1;min-width:105px}.mat-column-builtin[_ngcontent-%COMP%]{flex:0 0 90px;min-width:90px;justify-content:center}.mat-column-actions[_ngcontent-%COMP%]{flex:0 0 180px;min-width:180px;box-sizing:border-box;justify-content:flex-start;padding-right:24px}.templates-page__name-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-width:0;gap:var(--gns3-density-space-3)}.templates-page__name-copy[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:14px;font-weight:600}.templates-page__symbol[_ngcontent-%COMP%]{display:grid;flex:0 0 52px;width:52px;height:52px;overflow:hidden;place-items:center;border-radius:14px;color:var(--mat-sys-on-primary-container);background:color-mix(in srgb,var(--mat-sys-primary-container) 82%,var(--mat-sys-surface))}.templates-page__symbol[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:78%;height:78%;object-fit:contain;filter:drop-shadow(0 2px 4px color-mix(in srgb,var(--mat-sys-shadow) 25%,transparent))}.templates-page__symbol[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:27px;height:27px;font-size:27px}.templates-page__symbol--small[_ngcontent-%COMP%]{flex-basis:38px;width:38px;height:38px;border-radius:10px}.templates-page__symbol--small[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:21px;height:21px;font-size:21px}.templates-page__type-badge[_ngcontent-%COMP%], .templates-page__source-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;width:fit-content;padding:4px 9px;border-radius:16px;font-size:12px;font-weight:600;white-space:nowrap}.templates-page__type-badge[_ngcontent-%COMP%]{color:var(--mat-sys-secondary);background:color-mix(in srgb,var(--mat-sys-secondary) 11%,transparent)}.templates-page__type-badge--qemu[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__type-badge--docker[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container)}.templates-page__type-badge--dynamips[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary-container);background:var(--mat-sys-tertiary-container)}.templates-page__type-badge--cloud[_ngcontent-%COMP%]{color:var(--mat-sys-on-error-container);background:var(--mat-sys-error-container)}.templates-page__type-badge--vpcs[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary);background:var(--mat-sys-primary)}.templates-page__type-badge--ethernet-hub[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary);background:var(--mat-sys-secondary)}.templates-page__type-badge--ethernet-switch[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary);background:var(--mat-sys-tertiary)}.templates-page__type-badge--iou[_ngcontent-%COMP%]{color:var(--mat-sys-on-error);background:var(--mat-sys-error)}.templates-page__type-badge--nat[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-highest)}.templates-page__source-badge[_ngcontent-%COMP%]{color:var(--mat-sys-primary);background:color-mix(in srgb,var(--mat-sys-primary) 11%,transparent)}.templates-page__source-badge--builtin[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary);background:color-mix(in srgb,var(--mat-sys-tertiary) 11%,transparent)}.templates-page__table-footer[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:var(--mat-table-footer-container-height);padding:0 12px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container))}.templates-page__table-footer[_ngcontent-%COMP%] mat-paginator[_ngcontent-%COMP%]{width:100%;--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__actions-cell[_ngcontent-%COMP%], .templates-page__card-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:3px}button.templates-page__action[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-on-surface-variant);width:var(--gns3-density-control-height-sm);height:var(--gns3-density-control-height-sm);--mat-icon-button-state-layer-size: var(--gns3-density-control-height-sm);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-control-height-sm)}button.templates-page__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}button.templates-page__action[_ngcontent-%COMP%]{color:var(--template-action-color);--mat-icon-button-state-layer-color: var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:not(:disabled) mat-icon[_ngcontent-%COMP%]{color:var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:disabled mat-icon[_ngcontent-%COMP%]{color:var(--gns3-button-disabled-label-color)}button.templates-page__action--details[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--edit[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-primary)}button.templates-page__action--duplicate[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--delete[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-error)}.templates-page__grid[_ngcontent-%COMP%]{flex:1;min-width:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-content:start;gap:var(--gns3-density-card-gap)}.templates-page__grid--with-details[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__card[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column;padding:16px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;background:var(--mat-sys-surface);cursor:pointer;transition:transform var(--gns3-motion-duration-standard) ease,box-shadow var(--gns3-motion-duration-standard) ease,border-color var(--gns3-motion-duration-standard) ease}.templates-page__card[_ngcontent-%COMP%]:hover{border-color:var(--mat-sys-outline-variant);background:var(--mat-sys-surface-container-low)}.templates-page__card--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);box-shadow:0 0 0 1px var(--mat-sys-primary)}.templates-page__card-header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--gns3-density-space-3)}.templates-page__card-body[_ngcontent-%COMP%]{flex:1;min-width:0;padding:14px 0 12px}.templates-page__card-body[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{display:-webkit-box;overflow:hidden;margin:0 0 9px;color:var(--mat-sys-on-surface);font-size:17px;font-weight:650;line-height:1.35;overflow-wrap:anywhere;-webkit-box-orient:vertical;-webkit-line-clamp:2}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%]{display:grid;gap:8px;margin:16px 0 0}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{min-width:0;margin:0;overflow:hidden;color:var(--mat-sys-on-surface);font-size:13px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] .templates-page__card-tags-row[_ngcontent-%COMP%]{align-items:flex-start}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd.templates-page__card-tags[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px;overflow:visible;white-space:normal}.templates-page__card-actions[_ngcontent-%COMP%]{justify-content:flex-end;min-height:33px;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__grid-paginator[_ngcontent-%COMP%]{grid-column:1/-1;width:100%;border-radius:12px;background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container));--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__empty[_ngcontent-%COMP%]{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:230px;padding:32px;color:var(--mat-sys-on-surface-variant);text-align:center}.templates-page__empty[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{width:48px;height:48px;font-size:48px;opacity:.55}.templates-page__empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:12px 0 0;color:var(--mat-sys-on-surface);font-size:17px}.templates-page__empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:5px 0 0;font-size:14px}.templates-page__details[_ngcontent-%COMP%]{position:sticky;top:16px;flex:0 0 clamp(390px,31vw,480px);display:flex;min-height:380px;max-height:calc(100vh - 176px);flex-direction:column;overflow:hidden;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 60%,transparent);border-radius:16px;background:var(--mat-sys-surface);box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent);animation:_ngcontent-%COMP%_templates-slide-in var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard)}.templates-page__details-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:var(--gns3-density-space-3);min-height:56px;box-sizing:border-box;padding:8px 10px 8px 16px;border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 72%,var(--mat-sys-surface))}.templates-page__details-header[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-primary-container)}.templates-page__details-heading[_ngcontent-%COMP%]{display:flex;min-width:0;align-items:center;gap:var(--gns3-density-space-3)}.templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;margin:0;color:var(--mat-sys-on-primary-container);font-size:19px;font-weight:650;line-height:1.25;text-overflow:ellipsis;white-space:nowrap}.templates-page__details-title-line[_ngcontent-%COMP%]{display:flex;flex:1;min-width:0;align-items:center;gap:var(--gns3-density-space-2)}.templates-page__details-title-line[_ngcontent-%COMP%] .templates-page__type-badge[_ngcontent-%COMP%]{flex:0 0 auto}.templates-page__details-body[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:12px 20px}.templates-page__description[_ngcontent-%COMP%]{padding:10px 0 14px;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__description[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.6px;text-transform:uppercase}.templates-page__description[_ngcontent-%COMP%] app-markdown-viewer[_ngcontent-%COMP%]{display:block;margin-top:8px;padding:2px 12px;border-radius:10px;background:var(--mat-sys-surface-container-low);overflow-wrap:anywhere;--markdown-viewer-font-size: 13px;--markdown-viewer-line-height: 1.5;--markdown-viewer-heading-scale: .85}.templates-page__detail-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:22px 105px minmax(0,1fr);align-items:center;gap:var(--gns3-density-space-3);min-height:40px;box-sizing:border-box;padding:8px 0;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__detail-row[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:19px;height:19px;color:var(--mat-sys-primary);font-size:19px}.templates-page__detail-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:12px;font-weight:650;letter-spacing:.5px;text-transform:uppercase;white-space:nowrap}.templates-page__detail-row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{min-width:0;color:var(--mat-sys-on-surface);font-size:14px;font-weight:500;line-height:1.45;text-align:right;overflow-wrap:anywhere}.templates-page__detail-row--stacked[_ngcontent-%COMP%]{align-items:start}.templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__mono[_ngcontent-%COMP%], .templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__path[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-family:var(--gns3-font-code);font-size:12px;word-break:break-all}.templates-page__tags[_ngcontent-%COMP%]{border-bottom:0}.templates-page__tags[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:7px}.templates-page__tag[_ngcontent-%COMP%]{padding:5px 9px;border-radius:14px;color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container);font-size:11px;font-weight:550}.templates-page__details-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(105px,1fr));gap:var(--gns3-density-space-2);padding:14px 16px 18px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-surface-container) 72%,transparent)}button.templates-page__details-action[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-on-surface-variant);height:40px;border-radius:12px;color:var(--details-action-color);border-color:color-mix(in srgb,var(--details-action-color) 48%,transparent);font-size:13px;font-weight:500}button.templates-page__details-action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--details-action-color)}button.templates-page__details-action--edit[_ngcontent-%COMP%], button.templates-page__details-action--duplicate[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-primary)}button.templates-page__details-action--delete[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-error)}[data-density=compact][_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%]{min-height:40px;height:40px}[data-density=compact][_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%]{width:40px;height:40px;--mat-icon-button-state-layer-size: 40px}[data-density=compact][_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%]{min-height:48px;padding-block:4px}[data-density=compact][_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:18px}[data-density=compact][_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%]{padding-block:8px}[data-density=compact][_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%]{min-height:36px;padding-block:6px}[data-density=compact][_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%]{padding:12px}@keyframes _ngcontent-%COMP%_templates-slide-in{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@media(max-width:1400px){.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__main[_ngcontent-%COMP%]{flex-direction:column}.templates-page__table-container[_ngcontent-%COMP%], .templates-page__grid[_ngcontent-%COMP%], .templates-page__details[_ngcontent-%COMP%]{width:100%}.templates-page__details[_ngcontent-%COMP%]{position:static;flex-basis:auto;max-height:none}}@media(max-width:900px){.templates-page__header[_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column}.templates-page__header-actions[_ngcontent-%COMP%]{width:100%}.templates-page__toolbar[_ngcontent-%COMP%]{align-items:stretch;flex-direction:column}.templates-page__toolbar-actions[_ngcontent-%COMP%]{width:100%}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{flex:1;width:auto}}@media(max-width:640px){.templates-page__header[_ngcontent-%COMP%]{padding:20px 16px 12px}.templates-page__header-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{width:100%;padding-inline:10px}.templates-page__scopes[_ngcontent-%COMP%]{overflow-x:auto;padding-inline:16px}.templates-page__scope[_ngcontent-%COMP%]{flex:0 0 auto;padding-inline:12px}.templates-page__toolbar[_ngcontent-%COMP%], .templates-page__main[_ngcontent-%COMP%]{padding-inline:16px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__view-toggle[_ngcontent-%COMP%]{grid-column:1/-1;justify-self:end}.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.templates-page__details[_ngcontent-%COMP%]{min-width:0}}',"[_nghost-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%] mat-form-field[_ngcontent-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%]{display:block;width:100%;background:transparent}.template-edit-legacy-label[_ngcontent-%COMP%], .template-edit-legacy-control[_ngcontent-%COMP%]{display:none}[class$=__header][_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-4);max-width:1440px;margin:0 auto;padding:var(--gns3-density-space-5) var(--gns3-density-space-5) 14px}[class$=__breadcrumb][_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;margin-bottom:8px;color:var(--mat-sys-primary);font-size:14px;font-weight:600}[class$=__breadcrumb][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{min-height:28px;padding:0 4px;color:inherit;font:inherit}[class$=__breadcrumb][_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:18px;height:18px;font-size:18px;color:var(--mat-sys-on-surface-variant)}[class$=__heading-row][_ngcontent-%COMP%]{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--gns3-density-space-5);width:100%}[class$=__title][_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal;flex:1;min-width:0}[class$=__header-actions][_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-3);flex-shrink:0}[class$=__header-actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{min-height:var(--gns3-density-control-height);border-radius:var(--gns3-density-radius-md);padding:0 var(--gns3-density-space-4)}[class$=__back-btn][_ngcontent-%COMP%]{flex:0 0 auto;width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-icon-button)}[class$=__back-btn][_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}[class$=__back-btn][_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant)}[class$=__content][_ngcontent-%COMP%]{display:grid;grid-template-columns:220px minmax(0,1fr);align-items:start;column-gap:var(--gns3-density-card-gap);row-gap:var(--gns3-density-space-3);max-width:1440px;margin:0 auto;padding:0 var(--gns3-density-space-5) 32px}.template-edit-tabs[_ngcontent-%COMP%]{position:sticky;top:var(--gns3-density-app-header-height);display:flex;grid-column:1;grid-row:1/span 2;align-self:start;flex-direction:column;gap:var(--gns3-density-space-2);padding:var(--gns3-density-space-3);border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:var(--gns3-density-radius-xl);background:color-mix(in srgb,var(--mat-sys-primary-container) 18%,var(--mat-sys-surface))}.template-edit-tabs[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:flex-start;min-height:var(--gns3-density-control-height);border:0;border-radius:var(--gns3-density-radius-sm);padding:0 var(--gns3-density-space-3);color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;font-weight:600;text-align:left;cursor:pointer}.template-edit-tabs[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}.template-edit-tabs[_ngcontent-%COMP%] button.is-active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}[class$=__content][_ngcontent-%COMP%] > [class*=__form-card][_ngcontent-%COMP%]{grid-column:2;grid-row:1}[class$=__content][_ngcontent-%COMP%] > [class*=__form-card][_ngcontent-%COMP%]:not(:has(>:nth-child(2))){display:none}.vpcs-template-details__form-card[_ngcontent-%COMP%]:not(.template-edit-panel-active){display:none}[class*=__form-card][_ngcontent-%COMP%]{margin:0 0 18px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;overflow:hidden;border-radius:var(--gns3-density-radius-lg);background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none}[class$=__section-header][_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;min-height:var(--gns3-density-section-header-height);box-sizing:border-box;padding:var(--gns3-density-section-header-padding);border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 28%,var(--mat-sys-surface));cursor:default}[class$=__expand-icon][_ngcontent-%COMP%]{display:none}[class$=__section-title][_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-section-title-size);font-weight:650}[class$=__form][_ngcontent-%COMP%], .form-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-card-gap);padding:var(--gns3-density-card-padding)}.qemu-template-details__form[_ngcontent-%COMP%]{padding-inline:var(--gns3-density-card-padding)}.qemu-template-details__subsection[_ngcontent-%COMP%]{width:100%;box-sizing:border-box}.two-column-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--gns3-density-card-gap)}[class$=__field][_ngcontent-%COMP%], .form-field[_ngcontent-%COMP%]{width:100%}[class$=__actions][_ngcontent-%COMP%]{display:flex;width:100%;box-sizing:border-box;justify-content:flex-end;gap:var(--gns3-density-space-3);margin-top:0;padding:4px 0 8px}[class$=__content][_ngcontent-%COMP%] > [class$=__actions][_ngcontent-%COMP%]{grid-column:2;justify-content:flex-end}[class*=__save-btn][_ngcontent-%COMP%], [class*=__cancel-btn][_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing)}button[class*=__save-btn].mat-mdc-raised-button[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-primary);background-color:var(--mat-sys-primary);--mat-button-protected-label-text-color: var(--mat-sys-on-primary);--mat-button-protected-container-color: var(--mat-sys-primary);--mat-button-protected-state-layer-color: var(--mat-sys-on-primary)}button[class*=__cancel-btn].mat-mdc-button[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-surface);border-color:var(--mat-sys-outline);--mat-button-outlined-label-text-color: var(--mat-sys-on-surface);--mat-button-outlined-state-layer-color: var(--mat-sys-on-surface)}button[class*=__cancel-btn].mat-mdc-button[_ngcontent-%COMP%]{border:1px solid var(--mat-sys-outline)}button[class*=__config-btn][_ngcontent-%COMP%], button.docker-details__extra-config-btn[_ngcontent-%COMP%], .udp-tunnels__add-btn[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing);width:fit-content;max-width:100%;align-self:center;border-radius:var(--mat-sys-corner-full, 999px)}.preferences__usage-form[_ngcontent-%COMP%]{width:100%;box-sizing:border-box;padding:var(--gns3-density-card-padding)}.preferences__usage-field--full[_ngcontent-%COMP%]{display:block;width:100%}.preferences__usage-field--full[_ngcontent-%COMP%] textarea.mat-mdc-input-element[_ngcontent-%COMP%]{width:100%;min-height:140px;box-sizing:border-box;resize:vertical}[class$=__form][_ngcontent-%COMP%] [class*=__file-row][_ngcontent-%COMP%]{padding:0}[class*=__file-row][_ngcontent-%COMP%]{align-items:flex-start}[class$=__symbol-row][_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:var(--gns3-density-card-gap)}[class$=__symbol-row][_ngcontent-%COMP%] [class*=__symbol-btn][_ngcontent-%COMP%], [class$=__symbol-row][_ngcontent-%COMP%] [class*=__action-btn][_ngcontent-%COMP%], [class*=__file-row][_ngcontent-%COMP%] > button[class*=__browse-btn][_ngcontent-%COMP%], .docker-details__image-row[_ngcontent-%COMP%] > button.docker-details__pull-btn[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing);border-radius:var(--mat-sys-corner-full, 999px);width:fit-content;max-width:100%;flex:0 0 auto;align-self:flex-start;margin-top:var(--template-field-action-offset, calc((var(--gns3-density-form-field-height) - var(--gns3-density-control-height)) / 2))}[data-density=compact][_nghost-%COMP%] [class$=__heading-row][_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] [class$=__heading-row][_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column;gap:var(--gns3-density-space-3)}[data-density=compact][_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%]{width:100%}[data-density=compact][_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex:1}@media(max-width:768px){[class$=__symbol-row][_ngcontent-%COMP%], [class*=__file-row][_ngcontent-%COMP%], .docker-details__image-row[_ngcontent-%COMP%]{--template-field-action-offset: 0px}}@media(max-width:760px){[class$=__header][_ngcontent-%COMP%]{padding-inline:16px}[class$=__content][_ngcontent-%COMP%]{padding-inline:16px;grid-template-columns:1fr}.template-edit-tabs[_ngcontent-%COMP%]{position:static;grid-column:1;grid-row:auto;flex-direction:row;overflow-x:auto}.template-edit-tabs[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex:0 0 auto}[class$=__content][_ngcontent-%COMP%] > [class*=__form-card][_ngcontent-%COMP%]{grid-column:1;grid-row:auto}.two-column-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}[class$=__symbol-row][_ngcontent-%COMP%]{flex-direction:column}[class$=__actions][_ngcontent-%COMP%]{flex-direction:row;align-items:center;justify-content:flex-end}[class$=__actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:auto}[class$=__content][_ngcontent-%COMP%] > [class$=__actions][_ngcontent-%COMP%]{grid-column:1}.preferences__usage-form[_ngcontent-%COMP%]{padding:16px}[class*=__save-btn][_ngcontent-%COMP%], [class*=__cancel-btn][_ngcontent-%COMP%]{width:auto}}"],changeDetection:0})}return n})();function Rae(n,o){if(n&1){let e=R();r(0,"button",29),_("click",function(){y(e);let i=h();return w(i.goBack())}),r(1,"mat-icon"),c(2,"arrow_back"),l()()}}var W1=(()=>{class n{route=f($t);controllerService=f(_t);builtInTemplatesService=f(Os);router=f(Ft);location=f(ki);toasterService=f(re);formBuilder=f(Ai);cd=f(oe);controller;formGroup;isLocalComputerChosen=!0;usage=$("");symbol=$("ethernet_switch");constructor(){this.formGroup=this.formBuilder.group({templateName:new Ge("",Ue.required),numberOfPorts:new Ge(8,Ue.required)})}ngOnInit(){let e=this.route.snapshot.paramMap.get("controller_id");this.controllerService.get(parseInt(e,10)).then(t=>{this.controller=t,this.cd.markForCheck()},t=>{let i=t.error?.message||t.message||"Failed to load controller";this.toasterService.error(i),this.cd.markForCheck()})}setControllerType(e){e==="local"&&(this.isLocalComputerChosen=!0)}goBack(){let e=this.controller?.id??parseInt(this.route.snapshot.paramMap.get("controller_id"),10);ji(this.location,this.router,["/controller",e,"preferences"])}addTemplate(){if(!this.formGroup.invalid&&this.controller){let e={template_id:xo(),builtin:!1,name:this.formGroup.get("templateName").value,compute_id:"local",template_type:"ethernet_switch",category:"switch",console_type:"none",default_name_format:"Switch{0}",symbol:this.symbol(),ports_mapping:[],tags:[],usage:this.usage()},t=this.formGroup.get("numberOfPorts").value;for(let i=0;i<t;i++)e.ports_mapping.push({name:`Ethernet${i}`,port_number:i,ethertype:"0x8100",type:"access",vlan:1});this.builtInTemplatesService.addTemplate(this.controller,e).subscribe({next:()=>{this.toasterService.success("Template added successfully"),this.goBack()},error:i=>{let a=i.error?.message||i.message||"Failed to add ethernet switch template";this.toasterService.error(a),this.cd.markForCheck()}})}else this.toasterService.error("Fill all required fields")}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-ethernet-switches-add-template"]],inputs:{usage:[1,"usage"],symbol:[1,"symbol"]},outputs:{usage:"usageChange",symbol:"symbolChange"},decls:45,vars:6,consts:[[1,"ethernet-switch-add","template-wizard"],[1,"ethernet-switch-add__header","template-wizard__header"],["mat-icon-button","","aria-label","Back to Ethernet switch templates",1,"ethernet-switch-add__back-btn","template-wizard__back"],[1,"template-wizard__heading"],[1,"ethernet-switch-add__title","template-wizard__title"],[1,"ethernet-switch-add__content","template-wizard__body"],[1,"template-wizard__single-layout"],["aria-label","Template creation steps",1,"template-wizard__single-nav"],[1,"template-wizard__single-step","template-wizard__single-step--detailed"],[1,"template-wizard__single-step-index"],[1,"template-wizard__step-label"],[1,"template-wizard__step-label-text"],[1,"template-wizard__step-label-title"],[1,"template-wizard__step-label-description"],[1,"template-wizard__single-content"],[1,"ethernet-switch-add__form-card","template-wizard__panel"],[1,"template-wizard__section"],[1,"template-wizard__section-title"],[1,"template-wizard__section-copy"],[1,"ethernet-switch-add__radio-group"],["value","1",1,"ethernet-switch-add__radio",3,"click","checked"],[1,"ethernet-switch-add__form",3,"formGroup"],["appearance","outline","subscriptSizing","dynamic",1,"ethernet-switch-add__field","template-wizard__field"],["formControlName","templateName","matInput","","required","","type","text","placeholder","Template name"],["formControlName","numberOfPorts","matInput","","required","","type","number","min","0","placeholder","Number of ports"],[3,"usageChange","symbolChange","usage","symbol"],[1,"ethernet-switch-add__actions","template-wizard__actions"],["mat-stroked-button","",1,"ethernet-switch-add__cancel-btn",3,"click"],["mat-raised-button","","color","primary",1,"ethernet-switch-add__submit-btn",3,"click","disabled"],["mat-icon-button","","aria-label","Back to Ethernet switch templates",1,"ethernet-switch-add__back-btn","template-wizard__back",3,"click"]],template:function(t,i){t&1&&(r(0,"div",0)(1,"header",1),T(2,Rae,3,0,"button",2),r(3,"div",3)(4,"h1",4),c(5,"New Ethernet switch template"),l()()(),r(6,"main",5)(7,"div",6)(8,"aside",7)(9,"div",8)(10,"span",9),c(11,"1"),l(),r(12,"span",10)(13,"mat-icon"),c(14,"description"),l(),r(15,"span",11)(16,"span",12),c(17,"Template info"),l(),r(18,"span",13),c(19,"Basic details and name"),l()()()()(),r(20,"div",14)(21,"section",15)(22,"section",16)(23,"h2",17),c(24,"Template information"),l(),r(25,"p",18),c(26,"Choose a name and an optional usage note for your template."),l(),r(27,"mat-radio-group",19)(28,"mat-radio-button",20),_("click",function(){return i.setControllerType("local")}),c(29," Run the Ethernet switch locally "),l()(),r(30,"form",21)(31,"mat-form-field",22)(32,"mat-label"),c(33,"Template name"),l(),L(34,"input",23),l(),r(35,"mat-form-field",22)(36,"mat-label"),c(37,"Number of ports"),l(),L(38,"input",24),l()(),r(39,"app-template-info-fields",25),rn("usageChange",function(s){return Xt(i.usage,s)||(i.usage=s),s})("symbolChange",function(s){return Xt(i.symbol,s)||(i.symbol=s),s}),l()()()()(),r(40,"div",26)(41,"button",27),_("click",function(){return i.goBack()}),c(42,"Cancel"),l(),r(43,"button",28),_("click",function(){return i.addTemplate()}),c(44," Create template "),l()()()()),t&2&&(m(2),E(i.controller?2:-1),m(26),v("checked",!0),m(2),v("formGroup",i.formGroup),m(9),an("usage",i.usage)("symbol",i.symbol),m(4),v("disabled",i.formGroup.invalid||!i.controller))},dependencies:[It,Ct,At,No,Nt,vt,dl,Er,Ut,Yt,ie,ce,Y,he,Be,Fo,la,Zo,we,Pe,Ve,ye,Ee,Ds],styles:["[_nghost-%COMP%]{display:block;width:100%;background:transparent}.ethernet-switch-add__header[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:32px 20px 16px;display:flex;align-items:center;gap:16px;animation:none}.ethernet-switch-add__back-btn[_ngcontent-%COMP%]{width:48px;height:48px;border-radius:12px;color:var(--mat-sys-on-surface);transition:all var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1)}.ethernet-switch-add__back-btn[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 8%,transparent)}.ethernet-switch-add__title[_ngcontent-%COMP%]{flex:1;font-size:28px;font-weight:500;color:var(--mat-sys-on-surface);margin:0}.ethernet-switch-add__content[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:0 20px 20px;animation:none}.ethernet-switch-add__form-card[_ngcontent-%COMP%]{background:var(--mat-sys-surface);border-radius:16px;overflow:hidden;box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 20%,transparent),0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent);padding:24px}.ethernet-switch-add__radio-group[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px;margin-bottom:24px}.ethernet-switch-add__radio[_ngcontent-%COMP%]{font-size:16px}.ethernet-switch-add__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px}.ethernet-switch-add__field[_ngcontent-%COMP%]{width:100%}.ethernet-switch-add__actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:12px;margin-top:24px}.ethernet-switch-add__cancel-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none}.ethernet-switch-add__submit-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none;letter-spacing:.5px}@media(max-width:768px){.ethernet-switch-add__header[_ngcontent-%COMP%]{padding:24px 16px 12px;gap:12px}.ethernet-switch-add__back-btn[_ngcontent-%COMP%]{width:44px;height:44px}.ethernet-switch-add__title[_ngcontent-%COMP%]{font-size:22px}.ethernet-switch-add__content[_ngcontent-%COMP%]{padding:0 16px 16px}.ethernet-switch-add__form-card[_ngcontent-%COMP%]{padding:16px}.ethernet-switch-add__actions[_ngcontent-%COMP%]{flex-direction:column}.ethernet-switch-add__cancel-btn[_ngcontent-%COMP%], .ethernet-switch-add__submit-btn[_ngcontent-%COMP%]{width:100%;height:44px}}"],changeDetection:0})}return n})();function zae(n,o){if(n&1&&(r(0,"mat-option",7),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function Lae(n,o){if(n&1&&(r(0,"mat-option",7),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function Vae(n,o){if(n&1){let e=R();r(0,"th",28)(1,"mat-checkbox",29),_("change",function(i){y(e);let a=h();return w(a.toggleAll(i.checked))}),l()()}if(n&2){let e=h();m(),v("checked",e.allPortsSelected())("indeterminate",e.somePortsSelected())}}function Bae(n,o){if(n&1){let e=R();r(0,"td",30)(1,"mat-checkbox",31),_("change",function(i){let a=y(e).$implicit,s=h();return w(s.togglePort(a,i.checked))}),l()()}if(n&2){let e=o.$implicit,t=h();m(),Hs("aria-label","Select port "+e.port_number),v("checked",t.selectedPorts.has(e))}}function jae(n,o){n&1&&(r(0,"th",28),c(1,"Port number"),l())}function $ae(n,o){if(n&1&&(r(0,"td",30),c(1),l()),n&2){let e=o.$implicit;m(),N(e.port_number)}}function Hae(n,o){n&1&&(r(0,"th",28),c(1,"VLAN"),l())}function Uae(n,o){if(n&1){let e=R();r(0,"td",30)(1,"input",32),_("change",function(i){let a=y(e).$implicit,s=h();return w(s.updateVlan(a,i.target.valueAsNumber,i.target))}),l()()}if(n&2){let e=o.$implicit;m(),v("value",e.vlan),Ce("aria-label","VLAN for port "+e.port_number)}}function Wae(n,o){n&1&&(r(0,"th",28),c(1,"Type"),l())}function Gae(n,o){if(n&1&&(r(0,"mat-option",7),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function qae(n,o){if(n&1){let e=R();r(0,"td",30)(1,"mat-select",33),_("selectionChange",function(i){let a=y(e).$implicit,s=h();return w(s.updatePortType(a,i.value))}),Q(2,Gae,2,2,"mat-option",7,Oe),l()()}if(n&2){let e=o.$implicit,t=h();m(),v("value",e.type),Hs("aria-label","Type for port "+e.port_number),m(),K(t.portTypes())}}function Qae(n,o){n&1&&(r(0,"th",28),c(1,"EtherType"),l())}function Kae(n,o){if(n&1&&(r(0,"mat-option",7),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function Xae(n,o){if(n&1){let e=R();r(0,"td",30)(1,"mat-select",33),_("selectionChange",function(i){let a=y(e).$implicit,s=h();return w(s.updatePortEthertype(a,i.value))}),Q(2,Kae,2,2,"mat-option",7,Oe),l()()}if(n&2){let e=o.$implicit,t=h();m(),v("value",e.ethertype),Hs("aria-label","EtherType for port "+e.port_number),m(),K(t.etherTypes())}}function Yae(n,o){n&1&&(r(0,"th",28),c(1,"Actions"),l())}function Zae(n,o){if(n&1){let e=R();r(0,"td",30)(1,"button",34),_("click",function(){let i=y(e).$implicit,a=h();return w(a.delete(i))}),r(2,"mat-icon",35),c(3,"delete"),l()()()}}function Jae(n,o){n&1&&L(0,"tr",36)}function ere(n,o){n&1&&L(0,"tr",37)}function tre(n,o){if(n&1&&(r(0,"mat-option",7),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function nre(n,o){if(n&1&&(r(0,"mat-option",7),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}var gh=(()=>{class n{ethernetPorts=[];ethernetPortsChange=new be;static defaultEthertype="0x8100";static qinqPortType="qinq";newPortNumber=$(0);newPortVlan=$(1);newPortType=$("access");newPortEthertype=$(n.defaultEthertype);newPortCount=$(1);bulkVlan=$(null);bulkType=$("");bulkEthertype=$("");builtInTemplatesConfigurationService=f(zr);toasterService=f(re);portTypes=z([]);etherTypes=z([]);selectedPorts=new Set;displayedColumns=["select","port_number","vlan","type","ethertype","action"];ngOnInit(){this.getConfiguration(),this.setNextPortNumber()}ngOnChanges(e){e.ethernetPorts&&(this.removeStaleSelections(),this.setNextPortNumber())}getConfiguration(){this.etherTypes.set(this.builtInTemplatesConfigurationService.getEtherTypesForEthernetSwitches()),this.portTypes.set(this.builtInTemplatesConfigurationService.getPortTypesForEthernetSwitches())}onAdd(){let e=this.newPortNumber(),t=this.newPortCount();if(!Number.isInteger(e)||e<0){this.toasterService.error("Port number must be a non-negative integer.");return}if(!Number.isInteger(t)||t<1){this.toasterService.error("Number of ports must be at least 1.");return}if(!this.isValidVlan(this.newPortVlan())){this.toasterService.error("VLAN must be between 1 and 4094.");return}let i=Array.from({length:t},(u,g)=>e+g),a=i.find(u=>this.ethernetPorts.some(g=>g.port_number===u));if(a!==void 0){this.toasterService.error(`Port number ${a} already exists.`);return}let s=this.newPortEthertype(),d=s===n.defaultEthertype?this.newPortType():n.qinqPortType,p=i.map(u=>({name:`Ethernet${u}`,port_number:u,vlan:this.newPortVlan(),type:d,ethertype:s}));this.setPorts([...this.ethernetPorts,...p].sort((u,g)=>u.port_number-g.port_number)),this.setNextPortNumber()}delete(e){this.selectedPorts.delete(e),this.setPorts(this.ethernetPorts.filter(t=>t!==e)),this.setNextPortNumber()}togglePort(e,t){t?this.selectedPorts.add(e):this.selectedPorts.delete(e)}toggleAll(e){this.selectedPorts.clear(),e&&this.ethernetPorts.forEach(t=>this.selectedPorts.add(t))}allPortsSelected(){return this.ethernetPorts.length>0&&this.selectedPorts.size===this.ethernetPorts.length}somePortsSelected(){return this.selectedPorts.size>0&&!this.allPortsSelected()}updateBulkType(e){this.bulkType.set(e),e&&e!==n.qinqPortType&&this.bulkEthertype()!==n.defaultEthertype&&this.bulkEthertype.set("")}updateBulkEthertype(e){this.bulkEthertype.set(e),e&&e!==n.defaultEthertype&&this.bulkType.set(n.qinqPortType)}applyBulkChanges(){if(!this.selectedPorts.size){this.toasterService.error("Select at least one port to update.");return}if(this.bulkVlan()===null&&!this.bulkType()&&!this.bulkEthertype()){this.toasterService.error("Choose at least one value to update.");return}let e=this.bulkVlan();if(e!==null&&!this.isValidVlan(e)){this.toasterService.error("VLAN must be between 1 and 4094.");return}this.selectedPorts.forEach(t=>{e!==null&&(t.vlan=e),this.bulkType()&&(t.type=this.bulkType()),this.bulkEthertype()&&(t.ethertype=this.bulkEthertype(),t.ethertype!==n.defaultEthertype&&(t.type=n.qinqPortType)),t.type!==n.qinqPortType&&(t.ethertype=n.defaultEthertype)}),this.setPorts([...this.ethernetPorts])}updateVlan(e,t,i){if(!this.isValidVlan(t)){this.toasterService.error("VLAN must be between 1 and 4094."),i&&(i.value=e.vlan?.toString()??"");return}e.vlan=t,this.emitPortsChange()}updatePortType(e,t){e.type=t,t!==n.qinqPortType&&(e.ethertype=n.defaultEthertype),this.emitPortsChange()}updatePortEthertype(e,t){e.ethertype=t,t!==n.defaultEthertype&&(e.type=n.qinqPortType),this.emitPortsChange()}updateNewPortType(e){this.newPortType.set(e),e!==n.qinqPortType&&this.newPortEthertype.set(n.defaultEthertype)}updateNewPortEthertype(e){this.newPortEthertype.set(e),e!==n.defaultEthertype&&this.newPortType.set(n.qinqPortType)}isValidVlan(e){return Number.isInteger(e)&&e>=1&&e<=4094}setNextPortNumber(){let e=new Set(this.ethernetPorts.map(i=>i.port_number)),t=0;for(;e.has(t);)t++;this.newPortNumber.set(t)}removeStaleSelections(){let e=new Set(this.ethernetPorts);this.selectedPorts.forEach(t=>{e.has(t)||this.selectedPorts.delete(t)})}setPorts(e){this.ethernetPorts=e,this.emitPortsChange()}emitPortsChange(){this.ethernetPortsChange.emit(this.ethernetPorts)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-ports"]],inputs:{ethernetPorts:"ethernetPorts",newPortNumber:[1,"newPortNumber"],newPortVlan:[1,"newPortVlan"],newPortType:[1,"newPortType"],newPortEthertype:[1,"newPortEthertype"],newPortCount:[1,"newPortCount"],bulkVlan:[1,"bulkVlan"],bulkType:[1,"bulkType"],bulkEthertype:[1,"bulkEthertype"]},outputs:{ethernetPortsChange:"ethernetPortsChange",newPortNumber:"newPortNumberChange",newPortVlan:"newPortVlanChange",newPortType:"newPortTypeChange",newPortEthertype:"newPortEthertypeChange",newPortCount:"newPortCountChange",bulkVlan:"bulkVlanChange",bulkType:"bulkTypeChange",bulkEthertype:"bulkEthertypeChange"},features:[Nn],decls:71,vars:12,consts:[[1,"ports"],["role","group","aria-label","Bulk port update",1,"ports__bulk-toolbar"],[1,"ports__selection-count"],["appearance","outline","subscriptSizing","dynamic",1,"ports__field"],["matInput","","type","number","min","1","max","4094",3,"input","value"],[3,"selectionChange","value"],["value",""],[3,"value"],["mat-flat-button","","color","primary","type","button",1,"ports__bulk-btn",3,"click"],[1,"ports__table-container"],["mat-table","",1,"ports__table",3,"dataSource"],["matColumnDef","select"],["mat-header-cell","",4,"matHeaderCellDef"],["mat-cell","",4,"matCellDef"],["matColumnDef","port_number"],["matColumnDef","vlan"],["matColumnDef","type"],["matColumnDef","ethertype"],["matColumnDef","action"],["mat-header-row","",4,"matHeaderRowDef"],["mat-row","",4,"matRowDef","matRowDefColumns"],["role","group","aria-label","Add ports",1,"ports__add-row"],["matInput","","type","number","min","0","placeholder","Port",3,"input","value"],["matInput","","type","number","min","1",3,"input","value"],["matInput","","type","number","min","1","max","4094","placeholder","VLAN",3,"input","value"],["placeholder","Type",3,"selectionChange","value"],["placeholder","EtherType",3,"selectionChange","value"],["mat-flat-button","","color","primary","type","button",1,"ports__add-btn",3,"click"],["mat-header-cell",""],["aria-label","Select all ports",3,"change","checked","indeterminate"],["mat-cell",""],[3,"change","aria-label","checked"],["type","number","min","1","max","4094",1,"ports__cell-input",3,"change","value"],[1,"ports__cell-select",3,"selectionChange","value","aria-label"],["mat-icon-button","","type","button","aria-label","Delete port","matTooltip","Delete port","matTooltipClass","custom-tooltip",3,"click"],["aria-hidden","true"],["mat-header-row",""],["mat-row",""]],template:function(t,i){t&1&&(r(0,"div",0)(1,"div",1)(2,"span",2),c(3),l(),r(4,"mat-form-field",3)(5,"mat-label"),c(6,"VLAN"),l(),r(7,"input",4),_("input",function(s){return i.bulkVlan.set(s.target.value===""?null:+s.target.value)}),l()(),r(8,"mat-form-field",3)(9,"mat-label"),c(10,"Type"),l(),r(11,"mat-select",5),_("selectionChange",function(s){return i.updateBulkType(s.value)}),r(12,"mat-option",6),c(13,"No change"),l(),Q(14,zae,2,2,"mat-option",7,Oe),l()(),r(16,"mat-form-field",3)(17,"mat-label"),c(18,"EtherType"),l(),r(19,"mat-select",5),_("selectionChange",function(s){return i.updateBulkEthertype(s.value)}),r(20,"mat-option",6),c(21,"No change"),l(),Q(22,Lae,2,2,"mat-option",7,Oe),l()(),r(24,"button",8),_("click",function(){return i.applyBulkChanges()}),c(25," Apply to ports "),l()(),r(26,"div",9)(27,"table",10),Fe(28,11),se(29,Vae,2,2,"th",12)(30,Bae,2,2,"td",13),Re(),Fe(31,14),se(32,jae,2,0,"th",12)(33,$ae,2,1,"td",13),Re(),Fe(34,15),se(35,Hae,2,0,"th",12)(36,Uae,2,2,"td",13),Re(),Fe(37,16),se(38,Wae,2,0,"th",12)(39,qae,4,2,"td",13),Re(),Fe(40,17),se(41,Qae,2,0,"th",12)(42,Xae,4,2,"td",13),Re(),Fe(43,18),se(44,Yae,2,0,"th",12)(45,Zae,4,0,"td",13),Re(),se(46,Jae,1,0,"tr",19)(47,ere,1,0,"tr",20),l()(),r(48,"div",21)(49,"mat-form-field",3)(50,"mat-label"),c(51,"Starting port"),l(),r(52,"input",22),_("input",function(s){return i.newPortNumber.set(s.target.valueAsNumber)}),l()(),r(53,"mat-form-field",3)(54,"mat-label"),c(55,"Number of ports"),l(),r(56,"input",23),_("input",function(s){return i.newPortCount.set(s.target.valueAsNumber)}),l()(),r(57,"mat-form-field",3)(58,"mat-label"),c(59,"VLAN"),l(),r(60,"input",24),_("input",function(s){return i.newPortVlan.set(s.target.valueAsNumber)}),l()(),r(61,"mat-form-field",3)(62,"mat-select",25),_("selectionChange",function(s){return i.updateNewPortType(s.value)}),Q(63,tre,2,2,"mat-option",7,Oe),l()(),r(65,"mat-form-field",3)(66,"mat-select",26),_("selectionChange",function(s){return i.updateNewPortEthertype(s.value)}),Q(67,nre,2,2,"mat-option",7,Oe),l()(),r(69,"button",27),_("click",function(){return i.onAdd()}),c(70,"Add ports"),l()()()),t&2&&(m(3),X("",i.selectedPorts.size," selected"),m(4),v("value",i.bulkVlan()??""),m(4),v("value",i.bulkType()),m(3),K(i.portTypes()),m(5),v("value",i.bulkEthertype()),m(3),K(i.etherTypes()),m(5),v("dataSource",i.ethernetPorts),m(19),v("matHeaderRowDef",i.displayedColumns),m(),v("matRowDefColumns",i.displayedColumns),m(5),v("value",i.newPortNumber()),m(4),v("value",i.newPortCount()),m(4),v("value",i.newPortVlan()),m(2),v("value",i.newPortType()),m(),K(i.portTypes()),m(3),v("value",i.newPortEthertype()),m(),K(i.etherTypes()))},dependencies:[_n,bn,yn,kn,wn,xn,Pn,Mn,Sn,Tn,En,Y,he,Be,ie,ce,we,Pe,Ve,ye,Ee,ot,ct,nt,st,pt,Ho,Rt,Gt],styles:[".ports[_ngcontent-%COMP%]{display:block;width:100%;flex-shrink:0}.ports__table-container[_ngcontent-%COMP%]{overflow-x:auto}.ports__table[_ngcontent-%COMP%]{width:100%;min-width:720px}.ports__table[_ngcontent-%COMP%] .mat-mdc-header-row[_ngcontent-%COMP%]{height:var(--mat-table-header-container-height);min-height:var(--mat-table-header-container-height)}.ports__table[_ngcontent-%COMP%] .mat-mdc-row[_ngcontent-%COMP%]{height:var(--mat-table-row-item-container-height);min-height:var(--mat-table-row-item-container-height)}.ports__table[_ngcontent-%COMP%] :is(.mat-mdc-header-cell[_ngcontent-%COMP%], .mat-mdc-cell[_ngcontent-%COMP%]){padding-block:0;padding-inline:var(--gns3-density-space-4)}.ports__bulk-toolbar[_ngcontent-%COMP%], .ports__add-row[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:var(--gns3-density-space-2);align-items:flex-start;padding:var(--gns3-density-space-4) var(--gns3-density-space-5)}.ports__bulk-toolbar[_ngcontent-%COMP%]{align-items:center;background:var(--mat-sys-surface-container-low)}.ports__selection-count[_ngcontent-%COMP%]{min-width:80px}.ports__field[_ngcontent-%COMP%]{min-width:120px;flex:1 1 140px}.ports__bulk-btn[_ngcontent-%COMP%], .ports__add-btn[_ngcontent-%COMP%]{align-self:center;white-space:nowrap}.ports__cell-input[_ngcontent-%COMP%]{width:80px;height:var(--gns3-density-control-height-sm);box-sizing:border-box;padding:var(--gns3-density-space-2);font:inherit;color:inherit;background:transparent;border:1px solid currentColor;border-radius:4px}.ports__cell-select[_ngcontent-%COMP%]{min-width:90px;padding-block:var(--gns3-density-space-2)}.ports__add-row[_ngcontent-%COMP%]{flex-wrap:nowrap;align-items:center;border-top:1px solid var(--mat-sys-outline-variant)}.ports__add-row[_ngcontent-%COMP%] .ports__field[_ngcontent-%COMP%]{min-width:0;flex:1 1 0}.ports__add-row[_ngcontent-%COMP%] .ports__add-btn[_ngcontent-%COMP%]{flex:0 0 auto}@media(max-width:768px){.ports__add-row[_ngcontent-%COMP%], .ports__bulk-toolbar[_ngcontent-%COMP%]{flex-direction:column;padding:var(--gns3-density-space-4)}.ports__add-row[_ngcontent-%COMP%]{align-items:stretch}.ports__field[_ngcontent-%COMP%]{width:100%}}"],changeDetection:0})}return n})();function ire(n,o){if(n&1){let e=R();r(0,"mat-chip-row",36),_("removed",function(){let i=y(e).$implicit,a=h(3);return w(a.removeTag(i))}),c(1),r(2,"button",37)(3,"mat-icon"),c(4,"cancel"),l()()()}if(n&2){let e=o.$implicit;v("editable",!1),Ce("title",e),m(),X(" ",e," "),m(),Ce("aria-label","Remove tag "+e)}}function ore(n,o){if(n&1&&(r(0,"mat-option",35),c(1),l()),n&2){let e=o.$implicit;v("value",e[1]),m(),X(" ",e[0]," ")}}function are(n,o){if(n&1&&(r(0,"mat-option",35),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function rre(n,o){if(n&1){let e=R();r(0,"form",16)(1,"mat-form-field",22)(2,"mat-label"),c(3,"Template name"),l(),r(4,"input",23),_("input",function(i){y(e);let a=h(2);return w(a.templateName.set(i.target.value))}),l()(),r(5,"mat-form-field",22)(6,"mat-label"),c(7,"Default name format"),l(),r(8,"input",24),_("input",function(i){y(e);let a=h(2);return w(a.defaultName.set(i.target.value))}),l()(),r(9,"div",25)(10,"mat-form-field",26)(11,"mat-label"),c(12,"Symbol"),l(),r(13,"input",27),_("input",function(i){y(e);let a=h(2);return w(a.symbol.set(i.target.value))}),l()(),r(14,"button",28),_("click",function(){y(e);let i=h(2);return w(i.chooseSymbol())}),r(15,"mat-icon"),c(16,"add"),l(),c(17," Choose symbol "),l()(),r(18,"div",29)(19,"mat-form-field",30)(20,"mat-label"),c(21,"Tags"),l(),r(22,"input",31),_("matChipInputTokenEnd",function(i){y(e);let a=h(2);return w(a.addTag(i))}),l()(),r(23,"mat-chip-grid",32,0),Q(25,ire,5,4,"mat-chip-row",33,Oe),l()(),r(27,"mat-form-field",22)(28,"mat-label"),c(29,"Category"),l(),r(30,"mat-select",34),_("selectionChange",function(i){y(e);let a=h(2);return w(a.category.set(i.value))}),Q(31,ore,2,2,"mat-option",35,ni),l()(),r(33,"mat-form-field",22)(34,"mat-label"),c(35,"Console type"),l(),r(36,"mat-select",34),_("selectionChange",function(i){y(e);let a=h(2);return w(a.consoleType.set(i.value))}),Q(37,are,2,2,"mat-option",35,Oe),l()()()}if(n&2){let e=Te(24),t=h(2);m(4),v("value",t.templateName()),m(4),v("value",t.defaultName()),m(5),v("value",t.symbol()),m(9),v("matChipInputFor",e)("matChipInputSeparatorKeyCodes",t.separatorKeysCodes),m(),ne("gns3-chip-field__values--empty",t.tags().length===0),m(2),K(t.tags()),m(5),v("value",t.category()),m(),K(t.categories),m(5),v("value",t.consoleType()),m(),K(t.consoleTypes)}}function sre(n,o){if(n&1){let e=R();r(0,"app-ports",38),_("ethernetPortsChange",function(i){y(e);let a=h(2);return w(a.ethernetSwitchTemplate.ports_mapping=i)}),l()}if(n&2){let e=h(2);v("ethernetPorts",e.ethernetSwitchTemplate.ports_mapping)}}function lre(n,o){if(n&1){let e=R();r(0,"div",18)(1,"mat-form-field",39)(2,"mat-label"),c(3,"Usage notes"),l(),r(4,"textarea",40),_("input",function(i){y(e);let a=h(2);return w(a.usage.set(i.target.value))}),l()()()}if(n&2){let e=h(2);m(4),v("value",e.usage())}}function cre(n,o){if(n&1){let e=R();r(0,"main",9)(1,"nav",10)(2,"button",11),_("click",function(){y(e);let i=h();return w(i.selectSection("general"))}),c(3," General settings "),l(),r(4,"button",11),_("click",function(){y(e);let i=h();return w(i.selectSection("ports"))}),c(5," Port settings "),l(),r(6,"button",11),_("click",function(){y(e);let i=h();return w(i.selectSection("usage"))}),c(7," Usage "),l()(),r(8,"section",12)(9,"div",13),_("click",function(){y(e);let i=h();return w(i.selectSection("general"))}),r(10,"h3",14),c(11,"General settings"),l(),r(12,"mat-icon",15),c(13),l()(),T(14,rre,39,9,"form",16),l(),r(15,"section",12)(16,"div",13),_("click",function(){y(e);let i=h();return w(i.selectSection("ports"))}),r(17,"h3",14),c(18,"Port settings"),l(),r(19,"mat-icon",15),c(20),l()(),T(21,sre,1,1,"app-ports",17),l(),r(22,"section",12)(23,"div",13),_("click",function(){y(e);let i=h();return w(i.selectSection("usage"))}),r(24,"h3",14),c(25,"Usage"),l(),r(26,"mat-icon",15),c(27),l()(),T(28,lre,5,1,"div",18),l(),r(29,"div",19)(30,"button",20),_("click",function(){y(e);let i=h();return w(i.goBack())}),c(31,"Cancel"),l(),r(32,"button",21),_("click",function(){y(e);let i=h();return w(i.onSave())}),c(33," Save "),l()()()}if(n&2){let e=h();m(2),ne("is-active",e.activeSection==="general"),m(2),ne("is-active",e.activeSection==="ports"),m(2),ne("is-active",e.activeSection==="usage"),m(7),N(e.activeSection==="general"?"expand_less":"expand_more"),m(),E(e.activeSection==="general"?14:-1),m(6),N(e.activeSection==="ports"?"expand_less":"expand_more"),m(),E(e.activeSection==="ports"?21:-1),m(6),N(e.activeSection==="usage"?"expand_less":"expand_more"),m(),E(e.activeSection==="usage"?28:-1)}}var G1=(()=>{class n{route=f($t);controllerService=f(_t);builtInTemplatesService=f(Os);toasterService=f(re);builtInTemplatesConfigurationService=f(zr);router=f(Ft);location=f(ki);cd=f(oe);dialog=f(Xe);dialogConfig=f(yo);controller;ethernetSwitchTemplate;separatorKeysCodes=[13,188];categories=[];consoleTypes=[];templateName=$("");defaultName=$("");symbol=$("");category=$("");consoleType=$("");tags=$([]);usage=$("");activeSection="general";ngOnInit(){let e=this.route.snapshot.paramMap.get("controller_id"),t=this.route.snapshot.paramMap.get("template_id");this.controllerService.get(parseInt(e,10)).then(i=>{this.controller=i,this.cd.markForCheck(),this.getConfiguration(),this.builtInTemplatesService.getTemplate(this.controller,t).subscribe({next:a=>{this.ethernetSwitchTemplate=a,this.ethernetSwitchTemplate.tags||(this.ethernetSwitchTemplate.tags=[]),this.templateName.set(a.name||""),this.defaultName.set(a.default_name_format||""),this.symbol.set(a.symbol||""),this.category.set(a.category||""),this.consoleType.set(a.console_type||""),this.tags.set(a.tags||[]),this.usage.set(a.usage||""),this.cd.markForCheck()},error:a=>{let s=a.error?.message||a.message||"Failed to load template";this.toasterService.error(s),this.cd.markForCheck()}})},i=>{let a=i.error?.message||i.message||"Failed to load controller";this.toasterService.error(a),this.cd.markForCheck()})}getConfiguration(){this.categories=this.builtInTemplatesConfigurationService.getCategoriesForEthernetSwitches(),this.consoleTypes=this.builtInTemplatesConfigurationService.getConsoleTypesForEthernetSwitches()}goBack(){ji(this.location,this.router,["/controller",this.controller.id,"preferences"])}onSave(){this.ethernetSwitchTemplate.name=this.templateName(),this.ethernetSwitchTemplate.default_name_format=this.defaultName(),this.ethernetSwitchTemplate.symbol=this.symbol(),this.ethernetSwitchTemplate.category=this.category(),this.ethernetSwitchTemplate.console_type=this.consoleType(),this.ethernetSwitchTemplate.tags=this.tags(),this.ethernetSwitchTemplate.usage=this.usage(),this.builtInTemplatesService.saveTemplate(this.controller,this.ethernetSwitchTemplate).subscribe({next:()=>{this.toasterService.success("Changes saved"),this.goBack()},error:e=>{let t=e.error?.message||e.message||"Failed to save template";this.toasterService.error(t),this.cd.markForCheck()}})}chooseSymbol(){let e=this.dialogConfig.openConfig("templateSymbol",{autoFocus:!1,disableClose:!1,data:{controller:this.controller,symbol:this.symbol()}});this.dialog.open(rr,e).afterClosed().subscribe(i=>{i&&this.symbol.set(i)})}addTag(e){let t=(e.value||"").trim(),i=this.tags();t&&this.tags.set([...i,t]),e.chipInput&&e.chipInput.clear()}removeTag(e){let t=this.tags(),i=t.indexOf(e);if(i>=0){let a=[...t];a.splice(i,1),this.tags.set(a)}}selectSection(e){this.activeSection=e}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-ethernet-switches-template-details"]],inputs:{templateName:[1,"templateName"],defaultName:[1,"defaultName"],symbol:[1,"symbol"],category:[1,"category"],consoleType:[1,"consoleType"],tags:[1,"tags"],usage:[1,"usage"]},outputs:{templateName:"templateNameChange",defaultName:"defaultNameChange",symbol:"symbolChange",category:"categoryChange",consoleType:"consoleTypeChange",tags:"tagsChange",usage:"usageChange"},decls:17,vars:1,consts:[["chipList",""],[1,"ethernet-switch-details"],[1,"ethernet-switch-details__header"],[1,"ethernet-switch-details__heading-row"],[1,"ethernet-switch-details__breadcrumb"],["type","button","mat-button","",3,"click"],[1,"ethernet-switch-details__title"],[1,"ethernet-switch-details__header-actions"],["type","button","mat-raised-button","","color","primary",3,"click"],[1,"ethernet-switch-details__content"],["aria-label","Template settings",1,"template-edit-tabs"],["type","button",3,"click"],[1,"ethernet-switch-details__form-card"],[1,"ethernet-switch-details__section-header",3,"click"],[1,"ethernet-switch-details__section-title"],[1,"ethernet-switch-details__expand-icon"],[1,"ethernet-switch-details__form"],[3,"ethernetPorts"],[1,"preferences__usage-form"],[1,"ethernet-switch-details__actions"],["mat-button","",1,"ethernet-switch-details__cancel-btn",3,"click"],["mat-raised-button","","color","primary",1,"ethernet-switch-details__save-btn",3,"click"],["appearance","outline","subscriptSizing","dynamic",1,"ethernet-switch-details__field"],["matInput","","type","text","placeholder","Template name",3,"input","value"],["matInput","","type","text","placeholder","Default name format",3,"input","value"],[1,"ethernet-switch-details__symbol-row"],["appearance","outline","subscriptSizing","dynamic",1,"ethernet-switch-details__field","ethernet-switch-details__field--flex"],["matInput","","type","text","placeholder","Symbol",3,"input","value"],["mat-raised-button","","color","primary","type","button",1,"ethernet-switch-details__symbol-btn",3,"click"],[1,"gns3-chip-field"],["floatLabel","always","appearance","outline","subscriptSizing","dynamic",1,"ethernet-switch-details__field"],["matInput","","placeholder","Add tags",3,"matChipInputTokenEnd","matChipInputFor","matChipInputSeparatorKeyCodes"],["aria-label","Tags",1,"gns3-chip-field__values"],[3,"editable"],[3,"selectionChange","value"],[3,"value"],[3,"removed","editable"],["matChipRemove","","type","button"],[3,"ethernetPortsChange","ethernetPorts"],["appearance","outline","subscriptSizing","dynamic",1,"preferences__usage-field--full"],["matInput","","type","text",3,"input","value"]],template:function(t,i){t&1&&(r(0,"div",1)(1,"header",2)(2,"div",3)(3,"div")(4,"div",4)(5,"button",5),_("click",function(){return i.goBack()}),c(6,"Templates"),l(),r(7,"mat-icon"),c(8,"chevron_right"),l(),r(9,"span"),c(10,"Edit"),l()(),r(11,"h1",6),c(12,"Edit template"),l()(),r(13,"div",7)(14,"button",8),_("click",function(){return i.goBack()}),c(15,"Back to templates"),l()()()(),T(16,cre,34,12,"main",9),l()),t&2&&(m(16),E(i.ethernetSwitchTemplate?16:-1))},dependencies:[vn,ie,ce,Y,he,we,Pe,Ve,ye,Ee,ot,ct,nt,ri,bi,xi,hi,fi,gh],styles:["[_nghost-%COMP%]{display:block;width:100%;background:transparent}.ethernet-switch-details__header[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:32px 20px 16px;display:flex;align-items:center;gap:var(--gns3-density-card-gap);animation:none}.ethernet-switch-details__title[_ngcontent-%COMP%]{flex:1;font-size:28px;font-weight:500;color:var(--mat-sys-on-surface);margin:0}.ethernet-switch-details__content[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:0 20px 20px;animation:none}.ethernet-switch-details__form-card[_ngcontent-%COMP%]{background:var(--mat-sys-surface);border-radius:16px;overflow:hidden;box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 20%,transparent),0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent);margin-bottom:var(--gns3-density-card-gap);display:flex;flex-direction:column}.ethernet-switch-details__section-header[_ngcontent-%COMP%]{padding:var(--gns3-density-section-header-padding);display:flex;align-items:center;justify-content:space-between;cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline) 30%,transparent)}.ethernet-switch-details__section-header[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 5%,transparent)}.ethernet-switch-details__section-title[_ngcontent-%COMP%]{margin:0;font-size:16px;font-weight:500;color:var(--mat-sys-on-surface-variant)}.ethernet-switch-details__expand-icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);transition:transform var(--gns3-motion-duration-standard) ease}.ethernet-switch-details__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-card-gap);padding:var(--gns3-density-card-padding) var(--gns3-density-card-padding) 24px}.ethernet-switch-details__field[_ngcontent-%COMP%]{width:100%}.ethernet-switch-details__field--flex[_ngcontent-%COMP%]{flex:1}.ethernet-switch-details__symbol-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap)}.ethernet-switch-details__symbol-btn[_ngcontent-%COMP%]{align-self:stretch}.ethernet-switch-details__actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:var(--gns3-density-space-3);margin-top:24px}.ethernet-switch-details__cancel-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none}.ethernet-switch-details__save-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none;letter-spacing:.5px}@media(max-width:768px){.ethernet-switch-details__header[_ngcontent-%COMP%]{padding:24px 16px 12px;gap:12px}.ethernet-switch-details__title[_ngcontent-%COMP%]{font-size:22px}.ethernet-switch-details__content[_ngcontent-%COMP%]{padding:0 16px 16px}.ethernet-switch-details__section-header[_ngcontent-%COMP%]{padding:12px 16px}.ethernet-switch-details__form[_ngcontent-%COMP%]{padding:16px}.ethernet-switch-details__symbol-row[_ngcontent-%COMP%], .ethernet-switch-details__actions[_ngcontent-%COMP%]{flex-direction:column}.ethernet-switch-details__cancel-btn[_ngcontent-%COMP%], .ethernet-switch-details__save-btn[_ngcontent-%COMP%]{width:100%;height:44px}}",'[_nghost-%COMP%]{display:block;width:100%;background:transparent}.templates-page__content[_ngcontent-%COMP%]{animation:none}.templates-page__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:20px;max-width:1600px;margin:0 auto;padding:24px 20px 16px}.templates-page__heading[_ngcontent-%COMP%], .templates-page__header-actions[_ngcontent-%COMP%]{display:flex;align-items:center}.templates-page__heading[_ngcontent-%COMP%]{min-width:0;gap:var(--gns3-density-space-3)}.templates-page__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.templates-page__header-actions[_ngcontent-%COMP%]{gap:var(--gns3-density-space-3)}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);border-radius:12px;padding-inline:18px;font-size:15px;font-weight:500;letter-spacing:.3px;text-transform:none}[class*=-templates__header][_ngcontent-%COMP%]{box-sizing:border-box;width:100%;height:calc(var(--gns3-density-space-4) * 2 + (var(--gns3-density-section-title-size) + 2px) * 1.2 + 1px);max-width:none;margin:0;padding:0 var(--gns3-density-page-padding);gap:var(--gns3-density-space-3);color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container);border-bottom:1px solid var(--mat-sys-outline-variant)}[class*=-templates__back-btn][_ngcontent-%COMP%], [class*=-templates__add-btn][_ngcontent-%COMP%]{flex:0 0 auto;width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:12px}[class*=-templates__back-btn][_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container)}[class*=-templates__add-btn][_ngcontent-%COMP%]{color:var(--mat-sys-primary)}[class*=-templates__title][_ngcontent-%COMP%]{flex:1;min-width:0;margin:0;padding-bottom:0;color:var(--mat-sys-on-primary-container);font-size:calc(var(--gns3-density-section-title-size) + 2px);font-weight:650;line-height:1.2;letter-spacing:-.01em}.templates-page__scopes[_ngcontent-%COMP%]{display:flex;gap:4px;max-width:1560px;margin:0 auto 16px;padding:0 20px;border-bottom:1px solid var(--mat-sys-outline-variant)}.templates-page__scope[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center;gap:8px;min-height:48px;padding:0 16px;border:0;color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;font-size:14px;font-weight:550;cursor:pointer}.templates-page__scope[_ngcontent-%COMP%]:after{position:absolute;right:8px;bottom:-1px;left:8px;height:2px;border-radius:2px 2px 0 0;background:transparent;content:""}.templates-page__scope[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}.templates-page__scope[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{min-width:22px;padding:2px 6px;border-radius:12px;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-high);font-size:11px;text-align:center}.templates-page__scope--active[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%]:after{background:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap);max-width:1600px;margin:0 auto;padding:0 20px 8px}.templates-page__search[_ngcontent-%COMP%]{flex:1;min-width:240px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:flex;align-items:center;flex:0 0 auto;gap:var(--gns3-density-space-3)}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{width:155px}.templates-page__view-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px;padding:4px 2px;border-radius:8px;background:var(--mat-sys-surface-container-high)}button.templates-page__view-button[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:8px;color:var(--mat-sys-on-surface-variant);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);--mat-icon-button-icon-size: 22px}button.templates-page__view-button--active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__main[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:20px;max-width:1600px;margin:0 auto;padding:0 20px 20px}.templates-page__loading[_ngcontent-%COMP%]{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;min-height:320px;gap:var(--gns3-density-card-gap);color:var(--mat-sys-on-surface-variant)}.templates-page__table-container[_ngcontent-%COMP%]{flex:1;min-width:0;border-radius:16px;background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;overflow-x:auto}mat-table[_ngcontent-%COMP%]{width:100%;min-width:850px}.mat-mdc-row[_ngcontent-%COMP%], .mat-row[_ngcontent-%COMP%]{height:var(--mat-table-row-item-container-height);min-height:var(--mat-table-row-item-container-height)}.mat-header-row[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%]{position:sticky;top:0;z-index:10;background:var(--mat-sys-surface-container-highest);box-shadow:inset 0 -2px var(--mat-sys-primary);--mat-sort-arrow-color: var(--mat-sys-primary)}.mat-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:13px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}mat-row[_ngcontent-%COMP%]{cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease}mat-row[_ngcontent-%COMP%]:nth-child(2n){background:color-mix(in srgb,var(--mat-sys-on-surface) 1%,transparent)}mat-row[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}mat-row.templates-page__row--selected[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}mat-cell[_ngcontent-%COMP%], mat-header-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:inherit;color:var(--mat-sys-on-surface)}.mat-column-name[_ngcontent-%COMP%]{flex:2.4;min-width:240px;justify-content:flex-start}.mat-column-template_type[_ngcontent-%COMP%]{flex:1.1;min-width:130px}.mat-column-category[_ngcontent-%COMP%]{flex:1;min-width:110px}.mat-column-compute_id[_ngcontent-%COMP%]{flex:1;min-width:105px}.mat-column-builtin[_ngcontent-%COMP%]{flex:0 0 90px;min-width:90px;justify-content:center}.mat-column-actions[_ngcontent-%COMP%]{flex:0 0 180px;min-width:180px;box-sizing:border-box;justify-content:flex-start;padding-right:24px}.templates-page__name-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-width:0;gap:var(--gns3-density-space-3)}.templates-page__name-copy[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:14px;font-weight:600}.templates-page__symbol[_ngcontent-%COMP%]{display:grid;flex:0 0 52px;width:52px;height:52px;overflow:hidden;place-items:center;border-radius:14px;color:var(--mat-sys-on-primary-container);background:color-mix(in srgb,var(--mat-sys-primary-container) 82%,var(--mat-sys-surface))}.templates-page__symbol[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:78%;height:78%;object-fit:contain;filter:drop-shadow(0 2px 4px color-mix(in srgb,var(--mat-sys-shadow) 25%,transparent))}.templates-page__symbol[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:27px;height:27px;font-size:27px}.templates-page__symbol--small[_ngcontent-%COMP%]{flex-basis:38px;width:38px;height:38px;border-radius:10px}.templates-page__symbol--small[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:21px;height:21px;font-size:21px}.templates-page__type-badge[_ngcontent-%COMP%], .templates-page__source-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;width:fit-content;padding:4px 9px;border-radius:16px;font-size:12px;font-weight:600;white-space:nowrap}.templates-page__type-badge[_ngcontent-%COMP%]{color:var(--mat-sys-secondary);background:color-mix(in srgb,var(--mat-sys-secondary) 11%,transparent)}.templates-page__type-badge--qemu[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__type-badge--docker[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container)}.templates-page__type-badge--dynamips[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary-container);background:var(--mat-sys-tertiary-container)}.templates-page__type-badge--cloud[_ngcontent-%COMP%]{color:var(--mat-sys-on-error-container);background:var(--mat-sys-error-container)}.templates-page__type-badge--vpcs[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary);background:var(--mat-sys-primary)}.templates-page__type-badge--ethernet-hub[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary);background:var(--mat-sys-secondary)}.templates-page__type-badge--ethernet-switch[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary);background:var(--mat-sys-tertiary)}.templates-page__type-badge--iou[_ngcontent-%COMP%]{color:var(--mat-sys-on-error);background:var(--mat-sys-error)}.templates-page__type-badge--nat[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-highest)}.templates-page__source-badge[_ngcontent-%COMP%]{color:var(--mat-sys-primary);background:color-mix(in srgb,var(--mat-sys-primary) 11%,transparent)}.templates-page__source-badge--builtin[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary);background:color-mix(in srgb,var(--mat-sys-tertiary) 11%,transparent)}.templates-page__table-footer[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:var(--mat-table-footer-container-height);padding:0 12px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container))}.templates-page__table-footer[_ngcontent-%COMP%] mat-paginator[_ngcontent-%COMP%]{width:100%;--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__actions-cell[_ngcontent-%COMP%], .templates-page__card-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:3px}button.templates-page__action[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-on-surface-variant);width:var(--gns3-density-control-height-sm);height:var(--gns3-density-control-height-sm);--mat-icon-button-state-layer-size: var(--gns3-density-control-height-sm);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-control-height-sm)}button.templates-page__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}button.templates-page__action[_ngcontent-%COMP%]{color:var(--template-action-color);--mat-icon-button-state-layer-color: var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:not(:disabled) mat-icon[_ngcontent-%COMP%]{color:var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:disabled mat-icon[_ngcontent-%COMP%]{color:var(--gns3-button-disabled-label-color)}button.templates-page__action--details[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--edit[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-primary)}button.templates-page__action--duplicate[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--delete[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-error)}.templates-page__grid[_ngcontent-%COMP%]{flex:1;min-width:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-content:start;gap:var(--gns3-density-card-gap)}.templates-page__grid--with-details[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__card[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column;padding:16px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;background:var(--mat-sys-surface);cursor:pointer;transition:transform var(--gns3-motion-duration-standard) ease,box-shadow var(--gns3-motion-duration-standard) ease,border-color var(--gns3-motion-duration-standard) ease}.templates-page__card[_ngcontent-%COMP%]:hover{border-color:var(--mat-sys-outline-variant);background:var(--mat-sys-surface-container-low)}.templates-page__card--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);box-shadow:0 0 0 1px var(--mat-sys-primary)}.templates-page__card-header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--gns3-density-space-3)}.templates-page__card-body[_ngcontent-%COMP%]{flex:1;min-width:0;padding:14px 0 12px}.templates-page__card-body[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{display:-webkit-box;overflow:hidden;margin:0 0 9px;color:var(--mat-sys-on-surface);font-size:17px;font-weight:650;line-height:1.35;overflow-wrap:anywhere;-webkit-box-orient:vertical;-webkit-line-clamp:2}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%]{display:grid;gap:8px;margin:16px 0 0}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{min-width:0;margin:0;overflow:hidden;color:var(--mat-sys-on-surface);font-size:13px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] .templates-page__card-tags-row[_ngcontent-%COMP%]{align-items:flex-start}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd.templates-page__card-tags[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px;overflow:visible;white-space:normal}.templates-page__card-actions[_ngcontent-%COMP%]{justify-content:flex-end;min-height:33px;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__grid-paginator[_ngcontent-%COMP%]{grid-column:1/-1;width:100%;border-radius:12px;background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container));--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__empty[_ngcontent-%COMP%]{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:230px;padding:32px;color:var(--mat-sys-on-surface-variant);text-align:center}.templates-page__empty[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{width:48px;height:48px;font-size:48px;opacity:.55}.templates-page__empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:12px 0 0;color:var(--mat-sys-on-surface);font-size:17px}.templates-page__empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:5px 0 0;font-size:14px}.templates-page__details[_ngcontent-%COMP%]{position:sticky;top:16px;flex:0 0 clamp(390px,31vw,480px);display:flex;min-height:380px;max-height:calc(100vh - 176px);flex-direction:column;overflow:hidden;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 60%,transparent);border-radius:16px;background:var(--mat-sys-surface);box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent);animation:_ngcontent-%COMP%_templates-slide-in var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard)}.templates-page__details-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:var(--gns3-density-space-3);min-height:56px;box-sizing:border-box;padding:8px 10px 8px 16px;border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 72%,var(--mat-sys-surface))}.templates-page__details-header[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-primary-container)}.templates-page__details-heading[_ngcontent-%COMP%]{display:flex;min-width:0;align-items:center;gap:var(--gns3-density-space-3)}.templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;margin:0;color:var(--mat-sys-on-primary-container);font-size:19px;font-weight:650;line-height:1.25;text-overflow:ellipsis;white-space:nowrap}.templates-page__details-title-line[_ngcontent-%COMP%]{display:flex;flex:1;min-width:0;align-items:center;gap:var(--gns3-density-space-2)}.templates-page__details-title-line[_ngcontent-%COMP%] .templates-page__type-badge[_ngcontent-%COMP%]{flex:0 0 auto}.templates-page__details-body[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:12px 20px}.templates-page__description[_ngcontent-%COMP%]{padding:10px 0 14px;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__description[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.6px;text-transform:uppercase}.templates-page__description[_ngcontent-%COMP%] app-markdown-viewer[_ngcontent-%COMP%]{display:block;margin-top:8px;padding:2px 12px;border-radius:10px;background:var(--mat-sys-surface-container-low);overflow-wrap:anywhere;--markdown-viewer-font-size: 13px;--markdown-viewer-line-height: 1.5;--markdown-viewer-heading-scale: .85}.templates-page__detail-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:22px 105px minmax(0,1fr);align-items:center;gap:var(--gns3-density-space-3);min-height:40px;box-sizing:border-box;padding:8px 0;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__detail-row[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:19px;height:19px;color:var(--mat-sys-primary);font-size:19px}.templates-page__detail-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:12px;font-weight:650;letter-spacing:.5px;text-transform:uppercase;white-space:nowrap}.templates-page__detail-row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{min-width:0;color:var(--mat-sys-on-surface);font-size:14px;font-weight:500;line-height:1.45;text-align:right;overflow-wrap:anywhere}.templates-page__detail-row--stacked[_ngcontent-%COMP%]{align-items:start}.templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__mono[_ngcontent-%COMP%], .templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__path[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-family:var(--gns3-font-code);font-size:12px;word-break:break-all}.templates-page__tags[_ngcontent-%COMP%]{border-bottom:0}.templates-page__tags[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:7px}.templates-page__tag[_ngcontent-%COMP%]{padding:5px 9px;border-radius:14px;color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container);font-size:11px;font-weight:550}.templates-page__details-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(105px,1fr));gap:var(--gns3-density-space-2);padding:14px 16px 18px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-surface-container) 72%,transparent)}button.templates-page__details-action[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-on-surface-variant);height:40px;border-radius:12px;color:var(--details-action-color);border-color:color-mix(in srgb,var(--details-action-color) 48%,transparent);font-size:13px;font-weight:500}button.templates-page__details-action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--details-action-color)}button.templates-page__details-action--edit[_ngcontent-%COMP%], button.templates-page__details-action--duplicate[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-primary)}button.templates-page__details-action--delete[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-error)}[data-density=compact][_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%]{min-height:40px;height:40px}[data-density=compact][_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%]{width:40px;height:40px;--mat-icon-button-state-layer-size: 40px}[data-density=compact][_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%]{min-height:48px;padding-block:4px}[data-density=compact][_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:18px}[data-density=compact][_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%]{padding-block:8px}[data-density=compact][_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%]{min-height:36px;padding-block:6px}[data-density=compact][_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%]{padding:12px}@keyframes _ngcontent-%COMP%_templates-slide-in{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@media(max-width:1400px){.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__main[_ngcontent-%COMP%]{flex-direction:column}.templates-page__table-container[_ngcontent-%COMP%], .templates-page__grid[_ngcontent-%COMP%], .templates-page__details[_ngcontent-%COMP%]{width:100%}.templates-page__details[_ngcontent-%COMP%]{position:static;flex-basis:auto;max-height:none}}@media(max-width:900px){.templates-page__header[_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column}.templates-page__header-actions[_ngcontent-%COMP%]{width:100%}.templates-page__toolbar[_ngcontent-%COMP%]{align-items:stretch;flex-direction:column}.templates-page__toolbar-actions[_ngcontent-%COMP%]{width:100%}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{flex:1;width:auto}}@media(max-width:640px){.templates-page__header[_ngcontent-%COMP%]{padding:20px 16px 12px}.templates-page__header-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{width:100%;padding-inline:10px}.templates-page__scopes[_ngcontent-%COMP%]{overflow-x:auto;padding-inline:16px}.templates-page__scope[_ngcontent-%COMP%]{flex:0 0 auto;padding-inline:12px}.templates-page__toolbar[_ngcontent-%COMP%], .templates-page__main[_ngcontent-%COMP%]{padding-inline:16px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__view-toggle[_ngcontent-%COMP%]{grid-column:1/-1;justify-self:end}.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.templates-page__details[_ngcontent-%COMP%]{min-width:0}}',"[_nghost-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%] mat-form-field[_ngcontent-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%]{display:block;width:100%;background:transparent}.template-edit-legacy-label[_ngcontent-%COMP%], .template-edit-legacy-control[_ngcontent-%COMP%]{display:none}[class$=__header][_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-4);max-width:1440px;margin:0 auto;padding:var(--gns3-density-space-5) var(--gns3-density-space-5) 14px}[class$=__breadcrumb][_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;margin-bottom:8px;color:var(--mat-sys-primary);font-size:14px;font-weight:600}[class$=__breadcrumb][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{min-height:28px;padding:0 4px;color:inherit;font:inherit}[class$=__breadcrumb][_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:18px;height:18px;font-size:18px;color:var(--mat-sys-on-surface-variant)}[class$=__heading-row][_ngcontent-%COMP%]{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--gns3-density-space-5);width:100%}[class$=__title][_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal;flex:1;min-width:0}[class$=__header-actions][_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-3);flex-shrink:0}[class$=__header-actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{min-height:var(--gns3-density-control-height);border-radius:var(--gns3-density-radius-md);padding:0 var(--gns3-density-space-4)}[class$=__back-btn][_ngcontent-%COMP%]{flex:0 0 auto;width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-icon-button)}[class$=__back-btn][_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}[class$=__back-btn][_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant)}[class$=__content][_ngcontent-%COMP%]{display:grid;grid-template-columns:220px minmax(0,1fr);align-items:start;column-gap:var(--gns3-density-card-gap);row-gap:var(--gns3-density-space-3);max-width:1440px;margin:0 auto;padding:0 var(--gns3-density-space-5) 32px}.template-edit-tabs[_ngcontent-%COMP%]{position:sticky;top:var(--gns3-density-app-header-height);display:flex;grid-column:1;grid-row:1/span 2;align-self:start;flex-direction:column;gap:var(--gns3-density-space-2);padding:var(--gns3-density-space-3);border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:var(--gns3-density-radius-xl);background:color-mix(in srgb,var(--mat-sys-primary-container) 18%,var(--mat-sys-surface))}.template-edit-tabs[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:flex-start;min-height:var(--gns3-density-control-height);border:0;border-radius:var(--gns3-density-radius-sm);padding:0 var(--gns3-density-space-3);color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;font-weight:600;text-align:left;cursor:pointer}.template-edit-tabs[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}.template-edit-tabs[_ngcontent-%COMP%] button.is-active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}[class$=__content][_ngcontent-%COMP%] > [class*=__form-card][_ngcontent-%COMP%]{grid-column:2;grid-row:1}[class$=__content][_ngcontent-%COMP%] > [class*=__form-card][_ngcontent-%COMP%]:not(:has(>:nth-child(2))){display:none}.vpcs-template-details__form-card[_ngcontent-%COMP%]:not(.template-edit-panel-active){display:none}[class*=__form-card][_ngcontent-%COMP%]{margin:0 0 18px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;overflow:hidden;border-radius:var(--gns3-density-radius-lg);background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none}[class$=__section-header][_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;min-height:var(--gns3-density-section-header-height);box-sizing:border-box;padding:var(--gns3-density-section-header-padding);border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 28%,var(--mat-sys-surface));cursor:default}[class$=__expand-icon][_ngcontent-%COMP%]{display:none}[class$=__section-title][_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-section-title-size);font-weight:650}[class$=__form][_ngcontent-%COMP%], .form-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-card-gap);padding:var(--gns3-density-card-padding)}.qemu-template-details__form[_ngcontent-%COMP%]{padding-inline:var(--gns3-density-card-padding)}.qemu-template-details__subsection[_ngcontent-%COMP%]{width:100%;box-sizing:border-box}.two-column-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--gns3-density-card-gap)}[class$=__field][_ngcontent-%COMP%], .form-field[_ngcontent-%COMP%]{width:100%}[class$=__actions][_ngcontent-%COMP%]{display:flex;width:100%;box-sizing:border-box;justify-content:flex-end;gap:var(--gns3-density-space-3);margin-top:0;padding:4px 0 8px}[class$=__content][_ngcontent-%COMP%] > [class$=__actions][_ngcontent-%COMP%]{grid-column:2;justify-content:flex-end}[class*=__save-btn][_ngcontent-%COMP%], [class*=__cancel-btn][_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing)}button[class*=__save-btn].mat-mdc-raised-button[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-primary);background-color:var(--mat-sys-primary);--mat-button-protected-label-text-color: var(--mat-sys-on-primary);--mat-button-protected-container-color: var(--mat-sys-primary);--mat-button-protected-state-layer-color: var(--mat-sys-on-primary)}button[class*=__cancel-btn].mat-mdc-button[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-surface);border-color:var(--mat-sys-outline);--mat-button-outlined-label-text-color: var(--mat-sys-on-surface);--mat-button-outlined-state-layer-color: var(--mat-sys-on-surface)}button[class*=__cancel-btn].mat-mdc-button[_ngcontent-%COMP%]{border:1px solid var(--mat-sys-outline)}button[class*=__config-btn][_ngcontent-%COMP%], button.docker-details__extra-config-btn[_ngcontent-%COMP%], .udp-tunnels__add-btn[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing);width:fit-content;max-width:100%;align-self:center;border-radius:var(--mat-sys-corner-full, 999px)}.preferences__usage-form[_ngcontent-%COMP%]{width:100%;box-sizing:border-box;padding:var(--gns3-density-card-padding)}.preferences__usage-field--full[_ngcontent-%COMP%]{display:block;width:100%}.preferences__usage-field--full[_ngcontent-%COMP%] textarea.mat-mdc-input-element[_ngcontent-%COMP%]{width:100%;min-height:140px;box-sizing:border-box;resize:vertical}[class$=__form][_ngcontent-%COMP%] [class*=__file-row][_ngcontent-%COMP%]{padding:0}[class*=__file-row][_ngcontent-%COMP%]{align-items:flex-start}[class$=__symbol-row][_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:var(--gns3-density-card-gap)}[class$=__symbol-row][_ngcontent-%COMP%] [class*=__symbol-btn][_ngcontent-%COMP%], [class$=__symbol-row][_ngcontent-%COMP%] [class*=__action-btn][_ngcontent-%COMP%], [class*=__file-row][_ngcontent-%COMP%] > button[class*=__browse-btn][_ngcontent-%COMP%], .docker-details__image-row[_ngcontent-%COMP%] > button.docker-details__pull-btn[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing);border-radius:var(--mat-sys-corner-full, 999px);width:fit-content;max-width:100%;flex:0 0 auto;align-self:flex-start;margin-top:var(--template-field-action-offset, calc((var(--gns3-density-form-field-height) - var(--gns3-density-control-height)) / 2))}[data-density=compact][_nghost-%COMP%] [class$=__heading-row][_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] [class$=__heading-row][_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column;gap:var(--gns3-density-space-3)}[data-density=compact][_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%]{width:100%}[data-density=compact][_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex:1}@media(max-width:768px){[class$=__symbol-row][_ngcontent-%COMP%], [class*=__file-row][_ngcontent-%COMP%], .docker-details__image-row[_ngcontent-%COMP%]{--template-field-action-offset: 0px}}@media(max-width:760px){[class$=__header][_ngcontent-%COMP%]{padding-inline:16px}[class$=__content][_ngcontent-%COMP%]{padding-inline:16px;grid-template-columns:1fr}.template-edit-tabs[_ngcontent-%COMP%]{position:static;grid-column:1;grid-row:auto;flex-direction:row;overflow-x:auto}.template-edit-tabs[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex:0 0 auto}[class$=__content][_ngcontent-%COMP%] > [class*=__form-card][_ngcontent-%COMP%]{grid-column:1;grid-row:auto}.two-column-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}[class$=__symbol-row][_ngcontent-%COMP%]{flex-direction:column}[class$=__actions][_ngcontent-%COMP%]{flex-direction:row;align-items:center;justify-content:flex-end}[class$=__actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:auto}[class$=__content][_ngcontent-%COMP%] > [class$=__actions][_ngcontent-%COMP%]{grid-column:1}.preferences__usage-form[_ngcontent-%COMP%]{padding:16px}[class*=__save-btn][_ngcontent-%COMP%], [class*=__cancel-btn][_ngcontent-%COMP%]{width:auto}}"],changeDetection:0})}return n})();var dre=["*"];function mre(n,o){n&1&&Zt(0)}var PE=(()=>{class n{_elementRef=f(Kt);constructor(){}focus(){this._elementRef.nativeElement.focus()}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["","cdkStepHeader",""]],hostAttrs:["role","tab"]})}return n})(),TE=(()=>{class n{template=f(pa);constructor(){}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["","cdkStepLabel",""]]})}return n})();var ku={NUMBER:"number",EDIT:"edit",DONE:"done",ERROR:"error"},pre=new mn("STEPPER_GLOBAL_OPTIONS"),q1=(()=>{class n{_stepperOptions;_stepper=f(Q1);_displayDefaultIndicatorType;stepLabel;_childForms;content;stepControl;get interacted(){return this._interacted()}set interacted(e){this._interacted.set(e)}_interacted=z(!1);interactedStream=new be;label;errorMessage;ariaLabel;ariaLabelledby;get state(){return this._state()}set state(e){this._state.set(e)}_state=z(void 0);get editable(){return this._editable()}set editable(e){this._editable.set(e)}_editable=z(!0);optional=!1;get completed(){let e=this._completedOverride(),t=this._interacted();return e??(t&&(!this.stepControl||this.stepControl.valid))}set completed(e){this._completedOverride.set(e)}_completedOverride=z(null);index=z(-1);isSelected=Ne(()=>this._stepper.selectedIndex===this.index());indicatorType=Ne(()=>{let e=this.isSelected(),t=this.completed,i=this._state()??ku.NUMBER,a=this._editable();return this._showError()&&this.hasError&&!e?ku.ERROR:this._displayDefaultIndicatorType?!t||e?ku.NUMBER:a?ku.EDIT:ku.DONE:t&&!e?ku.DONE:t&&e?i:a&&e?ku.EDIT:i});isNavigable=Ne(()=>{let e=this.isSelected();return this.completed||e||!this._stepper.linear});get hasError(){let e=this._customError();return e??this._getDefaultError()}set hasError(e){this._customError.set(e)}_customError=z(null);_getDefaultError(){return this.interacted&&!!this.stepControl?.invalid}constructor(){let e=f(pre,{optional:!0});this._stepperOptions=e||{},this._displayDefaultIndicatorType=this._stepperOptions.displayDefaultIndicatorType!==!1}select(){this._stepper.selected=this}reset(){this._interacted.set(!1),this._completedOverride()!=null&&this._completedOverride.set(!1),this._customError()!=null&&this._customError.set(!1),this.stepControl&&(this._childForms?.forEach(e=>e.resetForm?.()),this.stepControl.reset())}ngOnChanges(){this._stepper._stateChanged()}_markAsInteracted(){this._interacted()||(this._interacted.set(!0),this.interactedStream.emit(this))}_showError(){return this._stepperOptions.showError??this._customError()!=null}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["cdk-step"]],contentQueries:function(t,i,a){if(t&1&&Zi(a,TE,5)(a,UA,5),t&2){let s;gt(s=ht())&&(i.stepLabel=s.first),gt(s=ht())&&(i._childForms=s)}},viewQuery:function(t,i){if(t&1&&Kn(pa,7),t&2){let a;gt(a=ht())&&(i.content=a.first)}},inputs:{stepControl:"stepControl",label:"label",errorMessage:"errorMessage",ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],state:"state",editable:[2,"editable","editable",zt],optional:[2,"optional","optional",zt],completed:[2,"completed","completed",zt],hasError:[2,"hasError","hasError",zt]},outputs:{interactedStream:"interacted"},exportAs:["cdkStep"],features:[Nn],ngContentSelectors:dre,decls:1,vars:0,template:function(t,i){t&1&&(pi(),NC(0,mre,1,0,"ng-template"))},encapsulation:2,changeDetection:0})}return n})(),Q1=(()=>{class n{_dir=f(Kr,{optional:!0});_changeDetectorRef=f(oe);_elementRef=f(Kt);_destroyed=new Ye;_keyManager;_steps;steps=new ec;_stepHeader;_sortedHeaders=new ec;get linear(){return this._linear()}set linear(e){this._linear.set(e)}_linear=z(!1);get selectedIndex(){return this._selectedIndex()}set selectedIndex(e){this._steps?(this._isValidIndex(e),this.selectedIndex!==e&&(this.selected?._markAsInteracted(),!this._anyControlsInvalidOrPending(e)&&(e>=this.selectedIndex||this.steps.toArray()[e].editable)&&this._updateSelectedItemIndex(e))):this._selectedIndex.set(e)}_selectedIndex=z(0);get selected(){return this.steps?this.steps.toArray()[this.selectedIndex]:void 0}set selected(e){this.selectedIndex=e&&this.steps?this.steps.toArray().indexOf(e):-1}selectionChange=new be;selectedIndexChange=new be;_groupId=f(ua).getId("cdk-stepper-");get orientation(){return this._orientation}set orientation(e){this._orientation=e,this._keyManager&&this._keyManager.withVerticalOrientation(e==="vertical")}_orientation="horizontal";constructor(){}ngAfterContentInit(){this._steps.changes.pipe(Di(this._steps),He(this._destroyed)).subscribe(e=>{this.steps.reset(e.filter(t=>t._stepper===this)),this.steps.forEach((t,i)=>t.index.set(i)),this.steps.notifyOnChanges()})}ngAfterViewInit(){if(this._stepHeader.changes.pipe(Di(this._stepHeader),He(this._destroyed)).subscribe(e=>{this._sortedHeaders.reset(e.toArray().sort((t,i)=>t._elementRef.nativeElement.compareDocumentPosition(i._elementRef.nativeElement)&Node.DOCUMENT_POSITION_FOLLOWING?-1:1)),this._sortedHeaders.notifyOnChanges()}),this._keyManager=new dg(this._sortedHeaders).withWrap().withHomeAndEnd().withVerticalOrientation(this._orientation==="vertical"),this._keyManager.updateActiveItem(this.selectedIndex),(this._dir?this._dir.change:Vt()).pipe(Di(this._layoutDirection()),He(this._destroyed)).subscribe(e=>this._keyManager?.withHorizontalOrientation(e)),this._keyManager.updateActiveItem(this.selectedIndex),this.steps.changes.subscribe(()=>{this.selected||this._selectedIndex.set(Math.max(this.selectedIndex-1,0))}),this._isValidIndex(this.selectedIndex)||this._selectedIndex.set(0),this.linear&&this.selectedIndex>0){let e=this.steps.toArray().slice(0,this._selectedIndex());for(let t of e)t._markAsInteracted()}}ngOnDestroy(){this._keyManager?.destroy(),this.steps.destroy(),this._sortedHeaders.destroy(),this._destroyed.next(),this._destroyed.complete()}next(){this.selectedIndex=Math.min(this._selectedIndex()+1,this.steps.length-1)}previous(){this.selectedIndex=Math.max(this._selectedIndex()-1,0)}reset(){this._updateSelectedItemIndex(0),this.steps.forEach(e=>e.reset()),this._stateChanged()}_getStepLabelId(e){return`${this._groupId}-label-${e}`}_getStepContentId(e){return`${this._groupId}-content-${e}`}_stateChanged(){this._changeDetectorRef.markForCheck()}_getAnimationDirection(e){let t=e-this._selectedIndex();return t<0?this._layoutDirection()==="rtl"?"next":"previous":t>0?this._layoutDirection()==="rtl"?"previous":"next":"current"}_getFocusIndex(){return this._keyManager?this._keyManager.activeItemIndex:this._selectedIndex()}_updateSelectedItemIndex(e){let t=this.steps.toArray(),i=this._selectedIndex();this.selectionChange.emit({selectedIndex:e,previouslySelectedIndex:i,selectedStep:t[e],previouslySelectedStep:t[i]}),this._keyManager&&(this._containsFocus()?this._keyManager.setActiveItem(e):this._keyManager.updateActiveItem(e)),this._selectedIndex.set(e),this.selectedIndexChange.emit(e),this._stateChanged()}_onKeydown(e){let t=gs(e),i=e.keyCode,a=this._keyManager;a?.activeItemIndex!=null&&!t&&(i===32||i===13)?(this.selectedIndex=a.activeItemIndex,e.preventDefault()):a?.setFocusOrigin("keyboard").onKeydown(e)}_anyControlsInvalidOrPending(e){return this.linear&&e>=0?this.steps.toArray().slice(0,e).some(t=>{let i=t.stepControl;return(i?i.invalid||i.pending||!t.interacted:!t.completed)&&!t.optional&&!t._completedOverride()}):!1}_layoutDirection(){return this._dir&&this._dir.value==="rtl"?"rtl":"ltr"}_containsFocus(){let e=this._elementRef.nativeElement,t=df();return e===t||e.contains(t)}_isValidIndex(e){return e>-1&&(!this.steps||e<this.steps.length)}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["","cdkStepper",""]],contentQueries:function(t,i,a){if(t&1&&Zi(a,q1,5)(a,PE,5),t&2){let s;gt(s=ht())&&(i._steps=s),gt(s=ht())&&(i._stepHeader=s)}},inputs:{linear:[2,"linear","linear",zt],selectedIndex:[2,"selectedIndex","selectedIndex",qo],selected:"selected",orientation:"orientation"},outputs:{selectionChange:"selectionChange",selectedIndexChange:"selectedIndexChange"},exportAs:["cdkStepper"]})}return n})();var cz=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=on({type:n});static \u0275inj=nn({imports:[Vi]})}return n})();var ure=(n,o,e)=>({index:n,active:o,optional:e});function gre(n,o){if(n&1&&li(0,2),n&2){let e=h();v("ngTemplateOutlet",e.iconOverrides[e.state])("ngTemplateOutletContext",zC(2,ure,e.index,e.active,e.optional))}}function hre(n,o){if(n&1&&(r(0,"span",7),c(1),l()),n&2){let e=h(2);m(),N(e._getDefaultTextForState(e.state))}}function _re(n,o){if(n&1&&(r(0,"span",8),c(1),l()),n&2){let e=h(3);m(),N(e._intl.completedLabel)}}function fre(n,o){if(n&1&&(r(0,"span",8),c(1),l()),n&2){let e=h(3);m(),N(e._intl.editableLabel)}}function vre(n,o){if(n&1&&(T(0,_re,2,1,"span",8)(1,fre,2,1,"span",8),r(2,"mat-icon",7),c(3),l()),n&2){let e=h(2);E(e.state==="done"?0:e.state==="edit"?1:-1),m(3),N(e._getDefaultTextForState(e.state))}}function Cre(n,o){if(n&1&&T(0,hre,2,1,"span",7)(1,vre,4,2),n&2){let e,t=h();E((e=t.state)==="number"?0:1)}}function bre(n,o){n&1&&(r(0,"div",4),li(1,9),l()),n&2&&(m(),v("ngTemplateOutlet",o.template))}function xre(n,o){if(n&1&&(r(0,"div",4),c(1),l()),n&2){let e=h();m(),N(e.label)}}function yre(n,o){if(n&1&&(r(0,"div",5),c(1),l()),n&2){let e=h();m(),N(e._intl.optionalLabel)}}function wre(n,o){if(n&1&&(r(0,"div",6),c(1),l()),n&2){let e=h();m(),N(e.errorMessage)}}var dz=["*"];function Mre(n,o){}function Sre(n,o){if(n&1&&(Zt(0),se(1,Mre,0,0,"ng-template",0)),n&2){let e=h();m(),v("cdkPortalOutlet",e._portal)}}var kre=["animatedContainer"],mz=n=>({steps:n}),pz=n=>({step:n});function Pre(n,o){n&1&&Zt(0)}function Tre(n,o){if(n&1&&(r(0,"div",5),li(1,9)(2,6),l()),n&2){let e=h(2),t=Te(6);m(),v("ngTemplateOutlet",e.headerPrefix()),m(),v("ngTemplateOutlet",t)("ngTemplateOutletContext",tn(3,mz,e.steps))}}function Ere(n,o){if(n&1&&li(0,6),n&2){let e=h(2),t=Te(6);v("ngTemplateOutlet",t)("ngTemplateOutletContext",tn(2,mz,e.steps))}}function Ore(n,o){if(n&1&&(r(0,"div",10,2),li(2,9),l()),n&2){let e=o.$implicit,t=o.$index,i=h(2);Za("mat-horizontal-stepper-content-"+i._getAnimationDirection(t)),v("id",i._getStepContentId(t)),Ce("aria-labelledby",i._getStepLabelId(t))("inert",i.selectedIndex===t?null:""),m(2),v("ngTemplateOutlet",e.content)}}function Dre(n,o){if(n&1&&(r(0,"div",3),T(1,Tre,3,5,"div",5)(2,Ere,1,4,"ng-container",6),r(3,"div",7),Q(4,Ore,3,6,"div",8,Oe),l()()),n&2){let e=h();m(),E(e.headerPrefix()?1:2),m(3),K(e.steps)}}function Ire(n,o){if(n&1&&li(0,9),n&2){let e=h(2);v("ngTemplateOutlet",e.headerPrefix())}}function Are(n,o){if(n&1&&(r(0,"div",11),li(1,6),r(2,"div",12,2)(4,"div",13)(5,"div",14),li(6,9),l()()()()),n&2){let e=o.$implicit,t=o.$index,i=o.$index,a=o.$count,s=h(2),d=Te(4);m(),v("ngTemplateOutlet",d)("ngTemplateOutletContext",tn(11,pz,e)),m(),ne("mat-stepper-vertical-line",i!==a-1)("mat-vertical-content-container-active",s.selectedIndex===t),Ce("inert",s.selectedIndex===t?null:"")("aria-label",s.ariaLabel),m(2),v("id",s._getStepContentId(t)),Ce("aria-labelledby",s._getStepLabelId(t)),m(2),v("ngTemplateOutlet",e.content)}}function Nre(n,o){if(n&1&&(r(0,"div",4),T(1,Ire,1,1,"ng-container",9),Q(2,Are,7,13,"div",11,Oe),l()),n&2){let e=h();m(),E(e.headerPrefix()?1:-1),m(),K(e.steps)}}function Fre(n,o){if(n&1){let e=R();r(0,"mat-step-header",15),_("click",function(){let i=y(e).step;return w(i.select())})("keydown",function(i){y(e);let a=h();return w(a._onKeydown(i))}),l()}if(n&2){let e=o.step,t=h();ne("mat-horizontal-stepper-header",t.orientation==="horizontal")("mat-vertical-stepper-header",t.orientation==="vertical"),v("tabIndex",t._getFocusIndex()===e.index()?0:-1)("id",t._getStepLabelId(e.index()))("index",e.index())("state",e.indicatorType())("label",e.stepLabel||e.label)("selected",e.isSelected())("active",e.isNavigable())("optional",e.optional)("errorMessage",e.errorMessage)("iconOverrides",t._iconOverrides)("disableRipple",t.disableRipple||!e.isNavigable())("color",e.color||t.color),Ce("role",t.orientation==="horizontal"?"tab":"button")("aria-posinset",t.orientation==="horizontal"?e.index()+1:null)("aria-setsize",t.orientation==="horizontal"?t.steps.length:null)("aria-selected",t.orientation==="horizontal"?e.isSelected():null)("aria-current",t.orientation==="vertical"&&e.isSelected()?"step":null)("aria-disabled",t.orientation==="vertical"&&e.isSelected()?"true":null)("aria-expanded",t.orientation==="vertical"?e.isSelected():null)("aria-controls",t._getStepContentId(e.index()))("aria-label",e.ariaLabel||null)("aria-labelledby",!e.ariaLabel&&e.ariaLabelledby?e.ariaLabelledby:null)("aria-disabled",e.isNavigable()?null:!0)}}function Rre(n,o){n&1&&L(0,"div",17)}function zre(n,o){if(n&1&&(li(0,6),T(1,Rre,1,0,"div",17)),n&2){let e=o.$implicit,t=o.$index,i=o.$count;h(2);let a=Te(4);v("ngTemplateOutlet",a)("ngTemplateOutletContext",tn(3,pz,e)),m(),E(t!==i-1?1:-1)}}function Lre(n,o){if(n&1&&(r(0,"div",16),Q(1,zre,2,5,null,null,Oe),l()),n&2){let e=o.steps,t=h();Ce("aria-label",t.ariaLabel),m(),K(e)}}var tl=(()=>{class n extends TE{static \u0275fac=(()=>{let e;return function(i){return(e||(e=yi(n)))(i||n)}})();static \u0275dir=yt({type:n,selectors:[["","matStepLabel",""]],features:[mi]})}return n})(),Vre=(()=>{class n{changes=new Ye;optionalLabel="Optional";completedLabel="Completed";editableLabel="Editable";static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})(),EE=(()=>{class n extends PE{_intl=f(Vre);_focusMonitor=f(hs);_intlSubscription;state;label;errorMessage;iconOverrides;index;selected=!1;active=!1;optional=!1;disableRipple=!1;color;constructor(){super();let e=f(Ta);e.load(Xr),e.load(KC);let t=f(oe);this._intlSubscription=this._intl.changes.subscribe(()=>t.markForCheck())}ngAfterViewInit(){this._focusMonitor.monitor(this._elementRef,!0)}ngOnDestroy(){this._intlSubscription.unsubscribe(),this._focusMonitor.stopMonitoring(this._elementRef)}focus(e,t){e?this._focusMonitor.focusVia(this._elementRef,e,t):this._elementRef.nativeElement.focus(t)}_stringLabel(){return this.label instanceof tl?null:this.label}_templateLabel(){return this.label instanceof tl?this.label:null}_getHostElement(){return this._elementRef.nativeElement}_getDefaultTextForState(e){return e=="number"?`${this.index+1}`:e=="edit"?"create":e=="error"?"warning":e}_hasEmptyLabel(){return!this._stringLabel()&&!this._templateLabel()&&!this._hasOptionalLabel()&&!this._hasErrorLabel()}_hasOptionalLabel(){return this.optional&&this.state!=="error"}_hasErrorLabel(){return this.state==="error"}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["mat-step-header"]],hostAttrs:["role","",1,"mat-step-header"],hostVars:4,hostBindings:function(t,i){t&2&&(Za("mat-"+(i.color||"primary")),ne("mat-step-header-empty-label",i._hasEmptyLabel()))},inputs:{state:"state",label:"label",errorMessage:"errorMessage",iconOverrides:"iconOverrides",index:"index",selected:"selected",active:"active",optional:"optional",disableRipple:"disableRipple",color:"color"},features:[mi],decls:10,vars:17,consts:[["matRipple","",1,"mat-step-header-ripple","mat-focus-indicator",3,"matRippleTrigger","matRippleDisabled"],[1,"mat-step-icon-content"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"mat-step-label"],[1,"mat-step-text-label"],[1,"mat-step-optional"],[1,"mat-step-sub-label-error"],["aria-hidden","true"],[1,"cdk-visually-hidden"],[3,"ngTemplateOutlet"]],template:function(t,i){if(t&1&&(L(0,"div",0),r(1,"div")(2,"div",1),T(3,gre,1,6,"ng-container",2)(4,Cre,2,1),l()(),r(5,"div",3),T(6,bre,2,1,"div",4)(7,xre,2,1,"div",4),T(8,yre,2,1,"div",5),T(9,wre,2,1,"div",6),l()),t&2){let a;v("matRippleTrigger",i._getHostElement())("matRippleDisabled",i.disableRipple),m(),Za(ka("mat-step-icon-state-",i.state," mat-step-icon")),ne("mat-step-icon-selected",i.selected),m(2),E(i.iconOverrides&&i.iconOverrides[i.state]?3:4),m(2),ne("mat-step-label-active",i.active)("mat-step-label-selected",i.selected)("mat-step-label-error",i.state=="error"),m(),E((a=i._templateLabel())?6:i._stringLabel()?7:-1,a),m(2),E(i._hasOptionalLabel()?8:-1),m(),E(i._hasErrorLabel()?9:-1)}},dependencies:[um,tc,ce],styles:[`.mat-step-header {
|
||
overflow: hidden;
|
||
outline: none;
|
||
cursor: pointer;
|
||
position: relative;
|
||
box-sizing: content-box;
|
||
-webkit-tap-highlight-color: transparent;
|
||
}
|
||
.mat-step-header:focus-visible .mat-focus-indicator::before {
|
||
content: "";
|
||
}
|
||
.mat-step-header:hover[aria-disabled=true] {
|
||
cursor: default;
|
||
}
|
||
.mat-step-header:hover:not([aria-disabled]), .mat-step-header:hover[aria-disabled=false] {
|
||
background-color: var(--mat-stepper-header-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent));
|
||
border-radius: var(--mat-stepper-header-hover-state-layer-shape, var(--mat-sys-corner-medium));
|
||
}
|
||
.mat-step-header.cdk-keyboard-focused, .mat-step-header.cdk-program-focused {
|
||
background-color: var(--mat-stepper-header-focus-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent));
|
||
border-radius: var(--mat-stepper-header-focus-state-layer-shape, var(--mat-sys-corner-medium));
|
||
}
|
||
@media (hover: none) {
|
||
.mat-step-header:hover {
|
||
background: none;
|
||
}
|
||
}
|
||
@media (forced-colors: active) {
|
||
.mat-step-header {
|
||
outline: solid 1px;
|
||
}
|
||
.mat-step-header[aria-selected=true] .mat-step-label {
|
||
text-decoration: underline;
|
||
}
|
||
.mat-step-header[aria-disabled=true] {
|
||
outline-color: GrayText;
|
||
}
|
||
.mat-step-header[aria-disabled=true] .mat-step-label,
|
||
.mat-step-header[aria-disabled=true] .mat-step-icon,
|
||
.mat-step-header[aria-disabled=true] .mat-step-optional {
|
||
color: GrayText;
|
||
}
|
||
}
|
||
|
||
.mat-step-optional {
|
||
font-size: 12px;
|
||
color: var(--mat-stepper-header-optional-label-text-color, var(--mat-sys-on-surface-variant));
|
||
}
|
||
|
||
.mat-step-sub-label-error {
|
||
font-size: 12px;
|
||
font-weight: normal;
|
||
}
|
||
|
||
.mat-step-icon {
|
||
border-radius: 50%;
|
||
height: 24px;
|
||
width: 24px;
|
||
flex-shrink: 0;
|
||
position: relative;
|
||
color: var(--mat-stepper-header-icon-foreground-color, var(--mat-sys-surface));
|
||
background-color: var(--mat-stepper-header-icon-background-color, var(--mat-sys-on-surface-variant));
|
||
}
|
||
|
||
.mat-step-icon-content {
|
||
position: absolute;
|
||
top: 50%;
|
||
left: 50%;
|
||
transform: translate(-50%, -50%);
|
||
display: flex;
|
||
}
|
||
|
||
.mat-step-icon .mat-icon {
|
||
font-size: 16px;
|
||
height: 16px;
|
||
width: 16px;
|
||
}
|
||
|
||
.mat-step-icon-state-error {
|
||
background-color: var(--mat-stepper-header-error-state-icon-background-color, transparent);
|
||
color: var(--mat-stepper-header-error-state-icon-foreground-color, var(--mat-sys-error));
|
||
}
|
||
.mat-step-icon-state-error .mat-icon {
|
||
font-size: 24px;
|
||
height: 24px;
|
||
width: 24px;
|
||
}
|
||
|
||
.mat-step-label {
|
||
display: inline-block;
|
||
white-space: nowrap;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
min-width: 50px;
|
||
vertical-align: middle;
|
||
font-family: var(--mat-stepper-header-label-text-font, var(--mat-sys-title-small-font));
|
||
font-size: var(--mat-stepper-header-label-text-size, var(--mat-sys-title-small-size));
|
||
font-weight: var(--mat-stepper-header-label-text-weight, var(--mat-sys-title-small-weight));
|
||
color: var(--mat-stepper-header-label-text-color, var(--mat-sys-on-surface-variant));
|
||
}
|
||
.mat-step-label.mat-step-label-active {
|
||
color: var(--mat-stepper-header-selected-state-label-text-color, var(--mat-sys-on-surface-variant));
|
||
}
|
||
.mat-step-label.mat-step-label-error {
|
||
color: var(--mat-stepper-header-error-state-label-text-color, var(--mat-sys-error));
|
||
font-size: var(--mat-stepper-header-error-state-label-text-size, var(--mat-sys-title-small-size));
|
||
}
|
||
.mat-step-label.mat-step-label-selected {
|
||
font-size: var(--mat-stepper-header-selected-state-label-text-size, var(--mat-sys-title-small-size));
|
||
font-weight: var(--mat-stepper-header-selected-state-label-text-weight, var(--mat-sys-title-small-weight));
|
||
}
|
||
.mat-step-header-empty-label .mat-step-label {
|
||
min-width: 0;
|
||
}
|
||
|
||
.mat-step-text-label {
|
||
text-overflow: ellipsis;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.mat-step-header .mat-step-header-ripple {
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
position: absolute;
|
||
pointer-events: none;
|
||
}
|
||
|
||
.mat-step-icon-selected {
|
||
background-color: var(--mat-stepper-header-selected-state-icon-background-color, var(--mat-sys-primary));
|
||
color: var(--mat-stepper-header-selected-state-icon-foreground-color, var(--mat-sys-on-primary));
|
||
}
|
||
|
||
.mat-step-icon-state-done {
|
||
background-color: var(--mat-stepper-header-done-state-icon-background-color, var(--mat-sys-primary));
|
||
color: var(--mat-stepper-header-done-state-icon-foreground-color, var(--mat-sys-on-primary));
|
||
}
|
||
|
||
.mat-step-icon-state-edit {
|
||
background-color: var(--mat-stepper-header-edit-state-icon-background-color, var(--mat-sys-primary));
|
||
color: var(--mat-stepper-header-edit-state-icon-foreground-color, var(--mat-sys-on-primary));
|
||
}
|
||
`],encapsulation:2,changeDetection:0})}return n})(),uc=(()=>{class n{templateRef=f(pa);name;constructor(){}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["ng-template","matStepperIcon",""]],inputs:{name:[0,"matStepperIcon","name"]}})}return n})(),Bre=(()=>{class n{_template=f(pa);constructor(){}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["ng-template","matStepContent",""]]})}return n})(),gc=(()=>{class n extends q1{_errorStateMatcher=f(Td,{skipSelf:!0});_viewContainerRef=f(Wo);_isSelected=Oo.EMPTY;stepLabel=void 0;color;_lazyContent;_portal;ngAfterContentInit(){this._isSelected=this._stepper.steps.changes.pipe(Dn(()=>this._stepper.selectionChange.pipe(Pt(e=>e.selectedStep===this),Di(this._stepper.selected===this)))).subscribe(e=>{e&&this._lazyContent&&!this._portal&&(this._portal=new lg(this._lazyContent._template,this._viewContainerRef))})}ngOnDestroy(){this._isSelected.unsubscribe()}isErrorState(e,t){let i=this._errorStateMatcher.isErrorState(e,t),a=!!(e&&e.invalid&&this.interacted);return i||a}static \u0275fac=(()=>{let e;return function(i){return(e||(e=yi(n)))(i||n)}})();static \u0275cmp=V({type:n,selectors:[["mat-step"]],contentQueries:function(t,i,a){if(t&1&&Zi(a,tl,5)(a,Bre,5),t&2){let s;gt(s=ht())&&(i.stepLabel=s.first),gt(s=ht())&&(i._lazyContent=s.first)}},hostAttrs:["hidden",""],inputs:{color:"color"},exportAs:["matStep"],features:[un([{provide:Td,useExisting:n},{provide:q1,useExisting:n}]),mi],ngContentSelectors:dz,decls:1,vars:0,consts:[[3,"cdkPortalOutlet"]],template:function(t,i){t&1&&(pi(),se(0,Sre,2,1,"ng-template"))},dependencies:[HC],encapsulation:2,changeDetection:0})}return n})(),hc=(()=>{class n extends Q1{_ngZone=f(Gi);_renderer=f(qi);_animationsDisabled=$a();_cleanupTransition;_isAnimating=z(!1);_stepHeader=void 0;_animatedContainers;_steps=void 0;steps=new ec;_icons;animationDone=new be;disableRipple=!1;color;labelPosition="end";headerPosition="top";ariaLabel=null;headerPrefix=ee(null);_iconOverrides={};get animationDuration(){return this._animationDuration}set animationDuration(e){this._animationDuration=/^\d+$/.test(e)?e+"ms":e}_animationDuration="";_isServer=!f(ja).isBrowser;constructor(){super();let t=f(Kt).nativeElement.nodeName.toLowerCase();this.orientation=t==="mat-vertical-stepper"?"vertical":"horizontal"}ngAfterContentInit(){super.ngAfterContentInit(),this._icons.forEach(({name:e,templateRef:t})=>this._iconOverrides[e]=t),this.steps.changes.pipe(He(this._destroyed)).subscribe(()=>this._stateChanged()),this.selectedIndexChange.pipe(He(this._destroyed)).subscribe(()=>{let e=this._getAnimationDuration();e==="0ms"||e==="0s"?this._onAnimationDone():this._isAnimating.set(!0)}),this._ngZone.runOutsideAngular(()=>{this._animationsDisabled||setTimeout(()=>{this._elementRef.nativeElement.classList.add("mat-stepper-animations-enabled"),this._cleanupTransition=this._renderer.listen(this._elementRef.nativeElement,"transitionend",this._handleTransitionend)},200)})}ngAfterViewInit(){if(super.ngAfterViewInit(),typeof queueMicrotask=="function"){let e=!1;this._animatedContainers.changes.pipe(Di(null),He(this._destroyed)).subscribe(()=>queueMicrotask(()=>{e||(e=!0,this.animationDone.emit()),this._stateChanged()}))}}ngOnDestroy(){super.ngOnDestroy(),this._cleanupTransition?.()}_getAnimationDuration(){return this._animationsDisabled?"0ms":this.animationDuration?this.animationDuration:this.orientation==="horizontal"?"500ms":"225ms"}_handleTransitionend=e=>{let t=e.target;if(!t)return;let i=this.orientation==="horizontal"&&e.propertyName==="transform"&&t.classList.contains("mat-horizontal-stepper-content-current"),a=this.orientation==="vertical"&&e.propertyName==="grid-template-rows"&&t.classList.contains("mat-vertical-content-container-active");(i||a)&&this._animatedContainers.find(d=>d.nativeElement===t)&&this._onAnimationDone()};_onAnimationDone(){this._isAnimating.set(!1),this.animationDone.emit()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["mat-stepper"],["mat-vertical-stepper"],["mat-horizontal-stepper"],["","matStepper",""]],contentQueries:function(t,i,a){if(t&1&&Zi(a,gc,5)(a,uc,5),t&2){let s;gt(s=ht())&&(i._steps=s),gt(s=ht())&&(i._icons=s)}},viewQuery:function(t,i){if(t&1&&Kn(EE,5)(kre,5),t&2){let a;gt(a=ht())&&(i._stepHeader=a),gt(a=ht())&&(i._animatedContainers=a)}},hostVars:14,hostBindings:function(t,i){t&2&&(Tt("--mat-stepper-animation-duration",i._getAnimationDuration()),ne("mat-stepper-horizontal",i.orientation==="horizontal")("mat-stepper-vertical",i.orientation==="vertical")("mat-stepper-label-position-end",i.orientation==="horizontal"&&i.labelPosition=="end")("mat-stepper-label-position-bottom",i.orientation==="horizontal"&&i.labelPosition=="bottom")("mat-stepper-header-position-bottom",i.headerPosition==="bottom")("mat-stepper-animating",i._isAnimating()))},inputs:{disableRipple:"disableRipple",color:"color",labelPosition:"labelPosition",headerPosition:"headerPosition",ariaLabel:[0,"aria-label","ariaLabel"],headerPrefix:[1,"headerPrefix"],animationDuration:"animationDuration"},outputs:{animationDone:"animationDone"},exportAs:["matStepper","matVerticalStepper","matHorizontalStepper"],features:[un([{provide:Q1,useExisting:n}]),mi],ngContentSelectors:dz,decls:7,vars:2,consts:[["stepTemplate",""],["horizontalStepsTemplate",""],["animatedContainer",""],[1,"mat-horizontal-stepper-wrapper"],[1,"mat-vertical-stepper-wrapper"],[1,"mat-horizontal-stepper-header-wrapper"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"mat-horizontal-content-container"],["role","tabpanel",1,"mat-horizontal-stepper-content",3,"id","class"],[3,"ngTemplateOutlet"],["role","tabpanel",1,"mat-horizontal-stepper-content",3,"id"],[1,"mat-step"],[1,"mat-vertical-content-container"],["role","region",1,"mat-vertical-stepper-content",3,"id"],[1,"mat-vertical-content"],[3,"click","keydown","tabIndex","id","index","state","label","selected","active","optional","errorMessage","iconOverrides","disableRipple","color"],["aria-orientation","horizontal","role","tablist",1,"mat-horizontal-stepper-header-container"],[1,"mat-stepper-horizontal-line"]],template:function(t,i){if(t&1&&(pi(),T(0,Pre,1,0),T(1,Dre,6,1,"div",3)(2,Nre,4,1,"div",4),se(3,Fre,1,27,"ng-template",null,0,Qr)(5,Lre,3,1,"ng-template",null,1,Qr)),t&2){let a;E(i._isServer?0:-1),m(),E((a=i.orientation)==="horizontal"?1:a==="vertical"?2:-1)}},dependencies:[tc,EE],styles:[`.mat-stepper-vertical,
|
||
.mat-stepper-horizontal {
|
||
display: block;
|
||
font-family: var(--mat-stepper-container-text-font, var(--mat-sys-body-medium-font));
|
||
background: var(--mat-stepper-container-color, var(--mat-sys-surface));
|
||
}
|
||
|
||
.mat-horizontal-stepper-header-wrapper {
|
||
align-items: center;
|
||
display: flex;
|
||
}
|
||
|
||
.mat-horizontal-stepper-header-container {
|
||
white-space: nowrap;
|
||
display: flex;
|
||
align-items: center;
|
||
flex-grow: 1;
|
||
}
|
||
.mat-stepper-label-position-bottom .mat-horizontal-stepper-header-container {
|
||
align-items: flex-start;
|
||
}
|
||
.mat-stepper-header-position-bottom .mat-horizontal-stepper-header-container {
|
||
order: 1;
|
||
}
|
||
|
||
.mat-stepper-horizontal-line {
|
||
border-top-width: 1px;
|
||
border-top-style: solid;
|
||
flex: auto;
|
||
height: 0;
|
||
margin: 0 -16px;
|
||
min-width: 32px;
|
||
border-top-color: var(--mat-stepper-line-color, var(--mat-sys-outline));
|
||
}
|
||
.mat-stepper-label-position-bottom .mat-stepper-horizontal-line {
|
||
margin: 0;
|
||
min-width: 0;
|
||
position: relative;
|
||
top: calc(calc((var(--mat-stepper-header-height, 72px) - 24px) / 2) + 12px);
|
||
}
|
||
|
||
.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before, [dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before, .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after, [dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after {
|
||
border-top-width: 1px;
|
||
border-top-style: solid;
|
||
content: "";
|
||
display: inline-block;
|
||
height: 0;
|
||
position: absolute;
|
||
width: calc(50% - 20px);
|
||
}
|
||
|
||
.mat-horizontal-stepper-header {
|
||
display: flex;
|
||
overflow: hidden;
|
||
align-items: center;
|
||
padding: 0 24px;
|
||
height: var(--mat-stepper-header-height, 72px);
|
||
}
|
||
.mat-horizontal-stepper-header .mat-step-icon {
|
||
margin-right: 8px;
|
||
flex: none;
|
||
}
|
||
[dir=rtl] .mat-horizontal-stepper-header .mat-step-icon {
|
||
margin-right: 0;
|
||
margin-left: 8px;
|
||
}
|
||
.mat-horizontal-stepper-header.mat-step-header-empty-label .mat-step-icon {
|
||
margin: 0;
|
||
}
|
||
.mat-horizontal-stepper-header::before, .mat-horizontal-stepper-header::after {
|
||
border-top-color: var(--mat-stepper-line-color, var(--mat-sys-outline));
|
||
}
|
||
.mat-stepper-label-position-bottom .mat-horizontal-stepper-header {
|
||
padding: calc((var(--mat-stepper-header-height, 72px) - 24px) / 2) 24px;
|
||
}
|
||
.mat-stepper-label-position-bottom .mat-horizontal-stepper-header::before, .mat-stepper-label-position-bottom .mat-horizontal-stepper-header::after {
|
||
top: calc(calc((var(--mat-stepper-header-height, 72px) - 24px) / 2) + 12px);
|
||
}
|
||
.mat-stepper-label-position-bottom .mat-horizontal-stepper-header {
|
||
box-sizing: border-box;
|
||
flex-direction: column;
|
||
height: auto;
|
||
}
|
||
.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after, [dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after {
|
||
right: 0;
|
||
}
|
||
.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before, [dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before {
|
||
left: 0;
|
||
}
|
||
[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:last-child::before, [dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:first-child::after {
|
||
display: none;
|
||
}
|
||
.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-icon {
|
||
margin-right: 0;
|
||
margin-left: 0;
|
||
}
|
||
.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-label {
|
||
padding: 16px 0 0 0;
|
||
text-align: center;
|
||
width: 100%;
|
||
}
|
||
|
||
.mat-vertical-stepper-header {
|
||
display: flex;
|
||
align-items: center;
|
||
height: 24px;
|
||
padding: calc((var(--mat-stepper-header-height, 72px) - 24px) / 2) 24px;
|
||
}
|
||
.mat-vertical-stepper-header .mat-step-icon {
|
||
margin-right: 12px;
|
||
}
|
||
[dir=rtl] .mat-vertical-stepper-header .mat-step-icon {
|
||
margin-right: 0;
|
||
margin-left: 12px;
|
||
}
|
||
|
||
.mat-horizontal-stepper-wrapper {
|
||
display: flex;
|
||
flex-direction: column;
|
||
}
|
||
|
||
.mat-horizontal-stepper-content {
|
||
visibility: hidden;
|
||
overflow: hidden;
|
||
outline: 0;
|
||
height: 0;
|
||
}
|
||
.mat-stepper-animations-enabled .mat-horizontal-stepper-content {
|
||
transition: transform var(--mat-stepper-animation-duration, 0) cubic-bezier(0.35, 0, 0.25, 1);
|
||
}
|
||
.mat-horizontal-stepper-content.mat-horizontal-stepper-content-previous {
|
||
transform: translate3d(-100%, 0, 0);
|
||
}
|
||
.mat-horizontal-stepper-content.mat-horizontal-stepper-content-next {
|
||
transform: translate3d(100%, 0, 0);
|
||
}
|
||
.mat-horizontal-stepper-content.mat-horizontal-stepper-content-current {
|
||
visibility: visible;
|
||
transform: none;
|
||
height: auto;
|
||
}
|
||
.mat-stepper-horizontal:not(.mat-stepper-animating) .mat-horizontal-stepper-content.mat-horizontal-stepper-content-current {
|
||
overflow: visible;
|
||
}
|
||
|
||
.mat-horizontal-content-container {
|
||
overflow: hidden;
|
||
padding: 0 24px 24px 24px;
|
||
}
|
||
@media (forced-colors: active) {
|
||
.mat-horizontal-content-container {
|
||
outline: solid 1px;
|
||
}
|
||
}
|
||
.mat-stepper-header-position-bottom .mat-horizontal-content-container {
|
||
padding: 24px 24px 0 24px;
|
||
}
|
||
|
||
.mat-vertical-content-container {
|
||
display: grid;
|
||
grid-template-rows: 0fr;
|
||
grid-template-columns: 100%;
|
||
margin-left: 36px;
|
||
border: 0;
|
||
position: relative;
|
||
}
|
||
.mat-stepper-animations-enabled .mat-vertical-content-container {
|
||
transition: grid-template-rows var(--mat-stepper-animation-duration, 0) cubic-bezier(0.4, 0, 0.2, 1);
|
||
}
|
||
.mat-vertical-content-container.mat-vertical-content-container-active {
|
||
grid-template-rows: 1fr;
|
||
}
|
||
.mat-step:last-child .mat-vertical-content-container {
|
||
border: none;
|
||
}
|
||
@media (forced-colors: active) {
|
||
.mat-vertical-content-container {
|
||
outline: solid 1px;
|
||
}
|
||
}
|
||
[dir=rtl] .mat-vertical-content-container {
|
||
margin-left: 0;
|
||
margin-right: 36px;
|
||
}
|
||
@supports not (grid-template-rows: 0fr) {
|
||
.mat-vertical-content-container {
|
||
height: 0;
|
||
}
|
||
.mat-vertical-content-container.mat-vertical-content-container-active {
|
||
height: auto;
|
||
}
|
||
}
|
||
|
||
.mat-stepper-vertical-line::before {
|
||
content: "";
|
||
position: absolute;
|
||
left: 0;
|
||
border-left-width: 1px;
|
||
border-left-style: solid;
|
||
border-left-color: var(--mat-stepper-line-color, var(--mat-sys-outline));
|
||
top: calc(8px - calc((var(--mat-stepper-header-height, 72px) - 24px) / 2));
|
||
bottom: calc(8px - calc((var(--mat-stepper-header-height, 72px) - 24px) / 2));
|
||
}
|
||
[dir=rtl] .mat-stepper-vertical-line::before {
|
||
left: auto;
|
||
right: 0;
|
||
}
|
||
|
||
.mat-vertical-stepper-content {
|
||
overflow: hidden;
|
||
outline: 0;
|
||
visibility: hidden;
|
||
}
|
||
.mat-stepper-animations-enabled .mat-vertical-stepper-content {
|
||
transition: visibility var(--mat-stepper-animation-duration, 0) linear;
|
||
}
|
||
.mat-vertical-content-container-active > .mat-vertical-stepper-content {
|
||
visibility: visible;
|
||
}
|
||
|
||
.mat-vertical-content {
|
||
padding: 0 24px 24px 24px;
|
||
}
|
||
`],encapsulation:2,changeDetection:0})}return n})();var Il=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=on({type:n});static \u0275inj=nn({providers:[Td],imports:[UC,cz,ie,Oc,hc,EE,Vi]})}return n})();var jre=["panel"],$re=["*"];function Hre(n,o){if(n&1&&(ii(0,"div",1,0),Zt(2),Si()),n&2){let e=o.id,t=h();Za(t._classList),ne("mat-mdc-autocomplete-visible",t.showPanel)("mat-mdc-autocomplete-hidden",!t.showPanel)("mat-autocomplete-panel-animations-enabled",!t._animationsDisabled)("mat-primary",t._color==="primary")("mat-accent",t._color==="accent")("mat-warn",t._color==="warn"),pr("id",t.id),Ce("aria-label",t.ariaLabel||null)("aria-labelledby",t._getPanelAriaLabelledby(e))}}var OE=class{source;option;constructor(o,e){this.source=o,this.option=e}},uz=new mn("mat-autocomplete-default-options",{providedIn:"root",factory:()=>({autoActiveFirstOption:!1,autoSelectActiveOption:!1,hideSingleSelectionIndicator:!1,requireSelection:!1,hasBackdrop:!1})}),ha=(()=>{class n{_changeDetectorRef=f(oe);_elementRef=f(Kt);_defaults=f(uz);_animationsDisabled=$a();_activeOptionChanges=Oo.EMPTY;_keyManager;showPanel=!1;get isOpen(){return this._isOpen&&this.showPanel}_isOpen=!1;_latestOpeningTrigger;_setColor(e){this._color=e,this._changeDetectorRef.markForCheck()}_color;template;panel;options;optionGroups;ariaLabel;ariaLabelledby;displayWith=null;autoActiveFirstOption;autoSelectActiveOption;requireSelection;panelWidth;disableRipple=!1;optionSelected=new be;opened=new be;closed=new be;optionActivated=new be;set classList(e){this._classList=e,this._elementRef.nativeElement.className=""}_classList;get hideSingleSelectionIndicator(){return this._hideSingleSelectionIndicator}set hideSingleSelectionIndicator(e){this._hideSingleSelectionIndicator=e,this._syncParentProperties()}_hideSingleSelectionIndicator;_syncParentProperties(){if(this.options)for(let e of this.options)e._changeDetectorRef.markForCheck()}id=f(ua).getId("mat-autocomplete-");inertGroups;constructor(){let e=f(ja);this.inertGroups=e?.SAFARI||!1,this.autoActiveFirstOption=!!this._defaults.autoActiveFirstOption,this.autoSelectActiveOption=!!this._defaults.autoSelectActiveOption,this.requireSelection=!!this._defaults.requireSelection,this._hideSingleSelectionIndicator=this._defaults.hideSingleSelectionIndicator??!1}ngAfterContentInit(){this._keyManager=new t5(this.options).withWrap().skipPredicate(this._skipPredicate),this._activeOptionChanges=this._keyManager.change.subscribe(e=>{this.isOpen&&this.optionActivated.emit({source:this,option:this.options.toArray()[e]||null})}),this._setVisibility()}ngOnDestroy(){this._keyManager?.destroy(),this._activeOptionChanges.unsubscribe()}_setScrollTop(e){this.panel&&(this.panel.nativeElement.scrollTop=e)}_getScrollTop(){return this.panel?this.panel.nativeElement.scrollTop:0}_setVisibility(){this.showPanel=!!this.options?.length,this._changeDetectorRef.markForCheck()}_emitSelectEvent(e){let t=new OE(this,e);this.optionSelected.emit(t)}_getPanelAriaLabelledby(e){if(this.ariaLabel)return null;let t=e?e+" ":"";return this.ariaLabelledby?t+this.ariaLabelledby:e}_skipPredicate(){return!1}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["mat-autocomplete"]],contentQueries:function(t,i,a){if(t&1&&Zi(a,nt,5)(a,h5,5),t&2){let s;gt(s=ht())&&(i.options=s),gt(s=ht())&&(i.optionGroups=s)}},viewQuery:function(t,i){if(t&1&&Kn(pa,7)(jre,5),t&2){let a;gt(a=ht())&&(i.template=a.first),gt(a=ht())&&(i.panel=a.first)}},hostAttrs:[1,"mat-mdc-autocomplete"],inputs:{ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],displayWith:"displayWith",autoActiveFirstOption:[2,"autoActiveFirstOption","autoActiveFirstOption",zt],autoSelectActiveOption:[2,"autoSelectActiveOption","autoSelectActiveOption",zt],requireSelection:[2,"requireSelection","requireSelection",zt],panelWidth:"panelWidth",disableRipple:[2,"disableRipple","disableRipple",zt],classList:[0,"class","classList"],hideSingleSelectionIndicator:[2,"hideSingleSelectionIndicator","hideSingleSelectionIndicator",zt]},outputs:{optionSelected:"optionSelected",opened:"opened",closed:"closed",optionActivated:"optionActivated"},exportAs:["matAutocomplete"],features:[un([{provide:g5,useExisting:n}])],ngContentSelectors:$re,decls:1,vars:0,consts:[["panel",""],["role","listbox",1,"mat-mdc-autocomplete-panel","mdc-menu-surface","mdc-menu-surface--open",3,"id"]],template:function(t,i){t&1&&(pi(),NC(0,Hre,3,17,"ng-template"))},styles:[`div.mat-mdc-autocomplete-panel {
|
||
width: 100%;
|
||
max-height: 256px;
|
||
visibility: hidden;
|
||
transform-origin: center top;
|
||
overflow: auto;
|
||
padding: 8px 0;
|
||
box-sizing: border-box;
|
||
position: relative;
|
||
border-radius: var(--mat-autocomplete-container-shape, var(--mat-sys-corner-extra-small));
|
||
box-shadow: var(--mat-autocomplete-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12));
|
||
background-color: var(--mat-autocomplete-background-color, var(--mat-sys-surface-container));
|
||
}
|
||
@media (forced-colors: active) {
|
||
div.mat-mdc-autocomplete-panel {
|
||
outline: solid 1px;
|
||
}
|
||
}
|
||
.cdk-overlay-pane:not(.mat-mdc-autocomplete-panel-above) div.mat-mdc-autocomplete-panel {
|
||
border-top-left-radius: 0;
|
||
border-top-right-radius: 0;
|
||
}
|
||
.mat-mdc-autocomplete-panel-above div.mat-mdc-autocomplete-panel {
|
||
border-bottom-left-radius: 0;
|
||
border-bottom-right-radius: 0;
|
||
transform-origin: center bottom;
|
||
}
|
||
div.mat-mdc-autocomplete-panel.mat-mdc-autocomplete-visible {
|
||
visibility: visible;
|
||
}
|
||
|
||
div.mat-mdc-autocomplete-panel.mat-mdc-autocomplete-hidden,
|
||
.cdk-overlay-pane:has(> .mat-mdc-autocomplete-hidden) {
|
||
visibility: hidden;
|
||
pointer-events: none;
|
||
}
|
||
|
||
@keyframes _mat-autocomplete-enter {
|
||
from {
|
||
opacity: 0;
|
||
transform: scaleY(0.8);
|
||
}
|
||
to {
|
||
opacity: 1;
|
||
transform: none;
|
||
}
|
||
}
|
||
.mat-autocomplete-panel-animations-enabled {
|
||
animation: _mat-autocomplete-enter 120ms cubic-bezier(0, 0, 0.2, 1);
|
||
}
|
||
|
||
mat-autocomplete {
|
||
display: none;
|
||
}
|
||
`],encapsulation:2,changeDetection:0})}return n})();var Ure={provide:Pd,useExisting:Pc(()=>ho),multi:!0};var Wre=new mn("mat-autocomplete-scroll-strategy",{providedIn:"root",factory:()=>{let n=f(xa);return()=>LA(n)}}),ho=(()=>{class n{_environmentInjector=f(lA);_element=f(Kt);_injector=f(xa);_viewContainerRef=f(Wo);_zone=f(Gi);_changeDetectorRef=f(oe);_dir=f(Kr,{optional:!0});_formField=f(ug,{optional:!0,host:!0});_viewportRuler=f(kd);_scrollStrategy=f(Wre);_renderer=f(qi);_animationsDisabled=$a();_defaults=f(uz,{optional:!0});_overlayRef=null;_portal;_componentDestroyed=!1;_initialized=new Ye;_keydownSubscription;_outsideClickSubscription;_cleanupWindowBlur;_previousValue=null;_valueOnAttach=null;_valueOnLastKeydown=null;_positionStrategy;_manuallyFloatingLabel=!1;_closingActionsSubscription;_viewportSubscription=Oo.EMPTY;_breakpointObserver=f(XC);_handsetLandscapeSubscription=Oo.EMPTY;_canOpenOnNextFocus=!0;_valueBeforeAutoSelection;_pendingAutoselectedOption=null;_closeKeyEventStream=new Ye;_overlayPanelClass=zA(this._defaults?.overlayPanelClass||[]);_windowBlurHandler=()=>{this._canOpenOnNextFocus=this.panelOpen||!this._hasFocus()};_onChange=()=>{};_onTouched=()=>{};autocomplete;position="auto";connectedTo;autocompleteAttribute="off";autocompleteDisabled=!1;constructor(){}_aboveClass="mat-mdc-autocomplete-panel-above";ngAfterViewInit(){this._initialized.next(),this._initialized.complete(),this._cleanupWindowBlur=this._renderer.listen("window","blur",this._windowBlurHandler)}ngOnChanges(e){e.position&&this._positionStrategy&&(this._setStrategyPositions(this._positionStrategy),this.panelOpen&&this._overlayRef.updatePosition())}ngOnDestroy(){this._cleanupWindowBlur?.(),this._handsetLandscapeSubscription.unsubscribe(),this._viewportSubscription.unsubscribe(),this._componentDestroyed=!0,this._destroyPanel(),this._closeKeyEventStream.complete(),this._clearFromModal()}get panelOpen(){return this._overlayAttached&&this.autocomplete.showPanel}_overlayAttached=!1;openPanel(){this._openPanelInternal()}closePanel(){this._resetLabel(),this._overlayAttached&&(this.panelOpen&&this._zone.run(()=>{this.autocomplete.closed.emit()}),this.autocomplete._latestOpeningTrigger===this&&(this.autocomplete._isOpen=!1,this.autocomplete._latestOpeningTrigger=null),this._overlayAttached=!1,this._pendingAutoselectedOption=null,this._overlayRef&&this._overlayRef.hasAttached()&&(this._overlayRef.detach(),this._closingActionsSubscription.unsubscribe()),this._updatePanelState(),this._componentDestroyed||this._changeDetectorRef.detectChanges(),this._trackedModal&&ZC(this._trackedModal,"aria-owns",this.autocomplete.id))}updatePosition(){this._overlayAttached&&this._overlayRef.updatePosition()}get panelClosingActions(){return ro(this.optionSelections,this.autocomplete._keyManager.tabOut.pipe(Yi(()=>this._overlayAttached)),this._closeKeyEventStream,this._getOutsideClickStream(),this._overlayRef?this._overlayRef.detachments().pipe(Yi(()=>this._overlayAttached)):Vt()).pipe(Pt(e=>e instanceof _5?e:null))}optionSelections=nA(()=>{let e=this.autocomplete?this.autocomplete.options:null;return e?e.changes.pipe(Di(e),Dn(()=>ro(...e.map(t=>t.onSelectionChange)))):this._initialized.pipe(Dn(()=>this.optionSelections))});get activeOption(){return this.autocomplete&&this.autocomplete._keyManager?this.autocomplete._keyManager.activeItem:null}_getOutsideClickStream(){return new Sr(e=>{let t=a=>{let s=Rp(a),d=this._formField?this._formField.getConnectedOverlayOrigin().nativeElement:null,p=this.connectedTo?this.connectedTo.elementRef.nativeElement:null;this._overlayAttached&&s!==this._element.nativeElement&&!this._hasFocus()&&(!d||!d.contains(s))&&(!p||!p.contains(s))&&this._overlayRef&&!this._overlayRef.overlayElement.contains(s)&&e.next(a)},i=[this._renderer.listen("document","click",t),this._renderer.listen("document","auxclick",t),this._renderer.listen("document","touchend",t)];return()=>{i.forEach(a=>a())}})}writeValue(e){Promise.resolve(null).then(()=>this._assignOptionValue(e))}registerOnChange(e){this._onChange=e}registerOnTouched(e){this._onTouched=e}setDisabledState(e){this._element.nativeElement.disabled=e}_handleKeydown(e){let t=e,i=t.keyCode,a=gs(t);if(i===27&&!a&&t.preventDefault(),this._valueOnLastKeydown=this._element.nativeElement.value,this.activeOption&&i===13&&this.panelOpen&&!a)this.activeOption._selectViaInteraction(),this._resetActiveItem(),t.preventDefault();else if(this.autocomplete){let s=this.autocomplete._keyManager.activeItem,d=i===38||i===40;i===9||d&&!a&&this.panelOpen?this.autocomplete._keyManager.onKeydown(t):d&&this._canOpen()&&this._openPanelInternal(this._valueOnLastKeydown),(d||this.autocomplete._keyManager.activeItem!==s)&&(this._scrollToOption(this.autocomplete._keyManager.activeItemIndex||0),this.autocomplete.autoSelectActiveOption&&this.activeOption&&(this._pendingAutoselectedOption||(this._valueBeforeAutoSelection=this._valueOnLastKeydown),this._pendingAutoselectedOption=this.activeOption,this._assignOptionValue(this.activeOption.value)))}}_handleInput(e){let t=e.target,i=t.value;if(t.type==="number"&&(i=i==""?null:parseFloat(i)),this._previousValue!==i){if(this._previousValue=i,this._pendingAutoselectedOption=null,(!this.autocomplete||!this.autocomplete.requireSelection)&&this._onChange(i),!i)this._clearPreviousSelectedOption(null,!1);else if(this.panelOpen&&!this.autocomplete.requireSelection){let a=this.autocomplete.options?.find(s=>s.selected);if(a){let s=this._getDisplayValue(a.value);i!==s&&a.deselect(!1)}}if(this._canOpen()&&this._hasFocus()){let a=this._valueOnLastKeydown??this._element.nativeElement.value;this._valueOnLastKeydown=null,this._openPanelInternal(a)}}}_handleFocus(){this._canOpenOnNextFocus?this._canOpen()&&(this._previousValue=this._element.nativeElement.value,this._attachOverlay(this._previousValue),this._floatLabel(!0)):this._canOpenOnNextFocus=!0}_handleClick(){this._canOpen()&&!this.panelOpen&&this._openPanelInternal()}_hasFocus(){return df()===this._element.nativeElement}_floatLabel(e=!1){this._formField&&this._formField.floatLabel==="auto"&&(e?this._formField._animateAndLockLabel():this._formField.floatLabel="always",this._manuallyFloatingLabel=!0)}_resetLabel(){this._manuallyFloatingLabel&&(this._formField&&(this._formField.floatLabel="auto"),this._manuallyFloatingLabel=!1)}_subscribeToClosingActions(){let e=new Sr(i=>{Ya(()=>{i.next()},{injector:this._environmentInjector})}),t=this.autocomplete.options?.changes.pipe(Qn(()=>this._positionStrategy.reapplyLastPosition()),oA(0))??Vt();return ro(e,t).pipe(Dn(()=>this._zone.run(()=>{let i=this.panelOpen;return this._resetActiveItem(),this._updatePanelState(),this._changeDetectorRef.detectChanges(),this.panelOpen&&this._overlayRef.updatePosition(),i!==this.panelOpen&&(this.panelOpen?this._emitOpened():this.autocomplete.closed.emit()),this.panelClosingActions})),Gr(1)).subscribe(i=>this._setValueAndClose(i))}_emitOpened(){this.autocomplete.opened.emit()}_destroyPanel(){this._overlayRef&&(this.closePanel(),this._overlayRef.dispose(),this._overlayRef=null)}_getDisplayValue(e){let t=this.autocomplete;return t&&t.displayWith?t.displayWith(e):e}_assignOptionValue(e){let t=this._getDisplayValue(e);e==null&&this._clearPreviousSelectedOption(null,!1),this._updateNativeInputValue(t??"")}_updateNativeInputValue(e){this._formField?this._formField._control.value=e:this._element.nativeElement.value=e,this._previousValue=e}_setValueAndClose(e){let t=this.autocomplete,i=e?e.source:this._pendingAutoselectedOption;i?(this._clearPreviousSelectedOption(i),this._assignOptionValue(i.value),this._onChange(i.value),t._emitSelectEvent(i),this._element.nativeElement.focus()):t.requireSelection&&this._element.nativeElement.value!==this._valueOnAttach&&(this._clearPreviousSelectedOption(null),this._assignOptionValue(null),this._onChange(null)),this.closePanel()}_clearPreviousSelectedOption(e,t){this.autocomplete?.options?.forEach(i=>{i!==e&&i.selected&&i.deselect(t)})}_openPanelInternal(e=this._element.nativeElement.value){if(this._attachOverlay(e),this._floatLabel(),this._trackedModal){let t=this.autocomplete.id;$k(this._trackedModal,"aria-owns",t)}}_attachOverlay(e){if(!this.autocomplete)return;let t=this._overlayRef;t?(this._positionStrategy.setOrigin(this._getConnectedElement()),t.updateSize({width:this._getPanelWidth()})):(this._portal=new lg(this.autocomplete.template,this._viewContainerRef,{id:this._formField?.getLabelId()}),t=jA(this._injector,this._getOverlayConfig()),this._overlayRef=t,this._viewportSubscription=this._viewportRuler.change().subscribe(()=>{this.panelOpen&&t&&t.updateSize({width:this._getPanelWidth()})}),this._handsetLandscapeSubscription=this._breakpointObserver.observe(mf.HandsetLandscape).subscribe(a=>{a.matches?this._positionStrategy.withFlexibleDimensions(!0).withGrowAfterOpen(!0).withViewportMargin(8):this._positionStrategy.withFlexibleDimensions(!1).withGrowAfterOpen(!1).withViewportMargin(0)})),t&&!t.hasAttached()&&(t.attach(this._portal),this._valueOnAttach=e,this._valueOnLastKeydown=null,this._closingActionsSubscription=this._subscribeToClosingActions());let i=this.panelOpen;this.autocomplete._isOpen=this._overlayAttached=!0,this.autocomplete._latestOpeningTrigger=this,this.autocomplete._setColor(this._formField?.color),this._updatePanelState(),this._applyModalPanelOwnership(),this.panelOpen&&i!==this.panelOpen&&this._emitOpened()}_handlePanelKeydown=e=>{(e.keyCode===27&&!gs(e)||e.keyCode===38&&gs(e,"altKey"))&&(this._pendingAutoselectedOption&&(this._updateNativeInputValue(this._valueBeforeAutoSelection??""),this._pendingAutoselectedOption=null),this._closeKeyEventStream.next(),this._resetActiveItem(),e.stopPropagation(),e.preventDefault())};_updatePanelState(){if(this.autocomplete._setVisibility(),this.panelOpen){let e=this._overlayRef;this._keydownSubscription||(this._keydownSubscription=e.keydownEvents().subscribe(this._handlePanelKeydown)),this._outsideClickSubscription||(this._outsideClickSubscription=e.outsidePointerEvents().subscribe())}else this._keydownSubscription?.unsubscribe(),this._outsideClickSubscription?.unsubscribe(),this._keydownSubscription=this._outsideClickSubscription=void 0}_getOverlayConfig(){return new VA({positionStrategy:this._getOverlayPosition(),scrollStrategy:this._scrollStrategy(),width:this._getPanelWidth(),direction:this._dir??void 0,hasBackdrop:this._defaults?.hasBackdrop,backdropClass:this._defaults?.backdropClass||"cdk-overlay-transparent-backdrop",panelClass:this._overlayPanelClass,disableAnimations:this._animationsDisabled})}_getOverlayPosition(){let e=BA(this._injector,this._getConnectedElement()).withFlexibleDimensions(!1).withPush(!1).withPopoverLocation("inline");return this._setStrategyPositions(e),this._positionStrategy=e,e}_setStrategyPositions(e){let t=[{originX:"start",originY:"bottom",overlayX:"start",overlayY:"top"},{originX:"end",originY:"bottom",overlayX:"end",overlayY:"top"}],i=this._aboveClass,a=[{originX:"start",originY:"top",overlayX:"start",overlayY:"bottom",panelClass:i},{originX:"end",originY:"top",overlayX:"end",overlayY:"bottom",panelClass:i}],s;this.position==="above"?s=a:this.position==="below"?s=t:s=[...t,...a],e.withPositions(s)}_getConnectedElement(){return this.connectedTo?this.connectedTo.elementRef:this._formField?this._formField.getConnectedOverlayOrigin():this._element}_getPanelWidth(){return this.autocomplete.panelWidth||this._getHostWidth()}_getHostWidth(){return this._getConnectedElement().nativeElement.getBoundingClientRect().width}_resetActiveItem(){let e=this.autocomplete;if(e.autoActiveFirstOption){let t=-1;for(let i=0;i<e.options.length;i++)if(!e.options.get(i).disabled){t=i;break}e._keyManager.setActiveItem(t)}else e._keyManager.setActiveItem(-1)}_canOpen(){let e=this._element.nativeElement;return!e.readOnly&&!e.disabled&&!this.autocompleteDisabled}_scrollToOption(e){let t=this.autocomplete,i=f5(e,t.options,t.optionGroups);if(e===0&&i===1)t._setScrollTop(0);else if(t.panel){let a=t.options.toArray()[e];if(a){let s=a._getHostElement(),d=v5(s.offsetTop,s.offsetHeight,t._getScrollTop(),t.panel.nativeElement.offsetHeight);t._setScrollTop(d)}}}_trackedModal=null;_applyModalPanelOwnership(){let e=this._element.nativeElement.closest('body > .cdk-overlay-container [aria-modal="true"]');if(!e)return;let t=this.autocomplete.id;this._trackedModal&&ZC(this._trackedModal,"aria-owns",t),$k(e,"aria-owns",t),this._trackedModal=e}_clearFromModal(){if(this._trackedModal){let e=this.autocomplete.id;ZC(this._trackedModal,"aria-owns",e),this._trackedModal=null}}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["input","matAutocomplete",""],["textarea","matAutocomplete",""]],hostAttrs:[1,"mat-mdc-autocomplete-trigger"],hostVars:7,hostBindings:function(t,i){t&1&&_("focusin",function(){return i._handleFocus()})("blur",function(){return i._onTouched()})("input",function(s){return i._handleInput(s)})("keydown",function(s){return i._handleKeydown(s)})("click",function(){return i._handleClick()}),t&2&&Ce("autocomplete",i.autocompleteAttribute)("role",i.autocompleteDisabled?null:"combobox")("aria-autocomplete",i.autocompleteDisabled?null:"list")("aria-activedescendant",i.panelOpen&&i.activeOption?i.activeOption.id:null)("aria-expanded",i.autocompleteDisabled?null:i.panelOpen.toString())("aria-controls",i.autocompleteDisabled||!i.panelOpen||i.autocomplete==null?null:i.autocomplete.id)("aria-haspopup",i.autocompleteDisabled?null:"listbox")},inputs:{autocomplete:[0,"matAutocomplete","autocomplete"],position:[0,"matAutocompletePosition","position"],connectedTo:[0,"matAutocompleteConnectedTo","connectedTo"],autocompleteAttribute:[0,"autocomplete","autocompleteAttribute"],autocompleteDisabled:[2,"matAutocompleteDisabled","autocompleteDisabled",zt]},exportAs:["matAutocompleteTrigger"],features:[un([Ure]),Nn]})}return n})(),Jo=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=on({type:n});static \u0275inj=nn({imports:[GC,Ho,Lp,Ho,Vi]})}return n})();var gz=(()=>{class n{httpController=f(sn);cache=new Map;getDeviceTypes(e){let t=e.id.toString(),i=this.cache.get(t);return i?Vt(i):this.httpController.get(e,"/netmiko/device_types").pipe(Pt(a=>({deviceTypes:a.device_types??[],netmikoVersion:a.netmiko_version??null})),ei(()=>Vt({deviceTypes:null,netmikoVersion:null})),Qn(a=>this.cache.set(t,a)))}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var Gre=(n,o)=>o.vendor,qre=(n,o)=>o.name;function Qre(n,o){n&1&&(r(0,"span",4),c(1,"not in list"),l())}function Kre(n,o){n&1&&(r(0,"span",8),c(1,"telnet"),l())}function Xre(n,o){if(n&1&&(r(0,"mat-option",7),c(1),T(2,Kre,2,0,"span",8),l()),n&2){let e=o.$implicit;v("value",e.name),m(),X(" ",e.name," "),m(),E(e.telnet?2:-1)}}function Yre(n,o){if(n&1&&(r(0,"mat-optgroup",6),Q(1,Xre,3,3,"mat-option",7,qre),l()),n&2){let e=o.$implicit;v("label",e.vendor),m(),K(e.types)}}function Zre(n,o){if(n&1){let e=R();r(0,"input",3),_("input",function(i){y(e);let a=h();return w(a.onInput(i))})("focus",function(){y(e);let i=h();return w(i.load())}),l(),T(1,Qre,2,0,"span",4),r(2,"mat-autocomplete",5,0),_("optionSelected",function(i){y(e);let a=h();return w(a.onOptionSelected(i.option.value))}),Q(4,Yre,3,1,"mat-optgroup",6,Gre),l()}if(n&2){let e=Te(3),t=h();v("value",t.value())("matAutocomplete",e),m(),E(t.notInList()?1:-1),m(3),K(t.groups())}}function Jre(n,o){if(n&1){let e=R();r(0,"input",9),_("input",function(i){y(e);let a=h();return w(a.onInput(i))})("focus",function(){y(e);let i=h();return w(i.load())}),l()}if(n&2){let e=h();v("value",e.value())}}var po=(()=>{class n{value=$("");controller=ee(void 0);appearance=ee("outline");subscriptSizing=ee("fixed");netmikoDeviceTypesService=f(gz);state=z("idle");deviceTypes=z(null);hasList=Ne(()=>this.state()==="ready");groups=Ne(()=>{let e=this.deviceTypes()??[],t=this.value().trim().toLowerCase(),i=t?e.filter(s=>s.name.toLowerCase().includes(t)):e,a=new Map;for(let s of i){let d=s.name.split("_")[0],p=a.get(d);p?p.push(s):a.set(d,[s])}return[...a.entries()].sort(([s],[d])=>s.localeCompare(d)).map(([s,d])=>({vendor:s,types:d}))});notInList=Ne(()=>{let e=this.deviceTypes(),t=this.value().trim();return!e||!t?!1:!e.some(i=>i.name===t)});constructor(){Vn(()=>{this.controller()&&this.state()==="idle"&&this.load()})}load(){let e=this.controller();!e||this.state()!=="idle"||(this.state.set("loading"),this.netmikoDeviceTypesService.getDeviceTypes(e).subscribe(t=>{t.deviceTypes?(this.deviceTypes.set(t.deviceTypes),this.state.set("ready")):this.state.set("unavailable")}))}onInput(e){this.value.set(e.target.value)}onOptionSelected(e){this.value.set(e)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-netmiko-device-type-select"]],inputs:{value:[1,"value"],controller:[1,"controller"],appearance:[1,"appearance"],subscriptSizing:[1,"subscriptSizing"]},outputs:{value:"valueChange"},decls:5,vars:3,consts:[["deviceTypeAuto","matAutocomplete"],[1,"netmiko-device-type-select__field",3,"appearance","subscriptSizing"],["matInput","","type","text","placeholder","e.g. cisco_xr, nokia_srl",3,"value"],["matInput","","type","text","placeholder","Search device type\u2026",3,"input","focus","value","matAutocomplete"],["matSuffix","",1,"netmiko-device-type-select__not-in-list"],[3,"optionSelected"],[3,"label"],[3,"value"],[1,"netmiko-device-type-select__telnet"],["matInput","","type","text","placeholder","e.g. cisco_xr, nokia_srl",3,"input","focus","value"]],template:function(t,i){t&1&&(r(0,"mat-form-field",1)(1,"mat-label"),c(2,"Netmiko device type"),l(),T(3,Zre,6,3)(4,Jre,1,1,"input",2),l()),t&2&&(v("appearance",i.appearance())("subscriptSizing",i.subscriptSizing()),m(3),E(i.hasList()?3:4))},dependencies:[Jo,ha,nt,gm,ho,we,Pe,Ve,oi,ye,Ee],styles:["[_nghost-%COMP%]{display:block}.netmiko-device-type-select__field[_ngcontent-%COMP%]{width:100%}.netmiko-device-type-select__telnet[_ngcontent-%COMP%]{margin-left:8px;font-size:11px;line-height:16px;color:var(--mat-sys-on-surface-variant);border:1px solid var(--mat-sys-outline-variant);border-radius:4px;padding:0 4px}.netmiko-device-type-select__not-in-list[_ngcontent-%COMP%]{font-size:11px;color:var(--mat-sys-on-surface-variant);white-space:nowrap}"],changeDetection:0})}return n})();var qm=(()=>{class n{getConsoleTypes(){return["telnet","ssh","vnc","http","https","docker_exec","none"]}getAuxConsoleTypes(){return["telnet","ssh","none"]}getCategories(){return[["Default","guest"],["Routers","router"],["Switches","switch"],["End devices","guest"],["Security devices","firewall"]]}getConsoleResolutions(){return["2560x1440","1920x1080","1680x1050","1440x900","1366x768","1280x1024","1280x800","1024x768","800x600","640x480"]}getMacAddrRegex(){return/^([0-9a-fA-F]{2}[:]){5}([0-9a-fA-F]{2})$/}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var td=(()=>{class n{httpController;constructor(e){this.httpController=e}getTemplates(e){return this.httpController.get(e,"/templates")}getTemplate(e,t){return this.httpController.get(e,`/templates/${t}`)}getImages(e){return this.httpController.get(e,`/computes/${zi.compute_id}/docker/images`)}getImagesForCompute(e,t){return this.httpController.get(e,`/computes/${t}/docker/images`)}pullImage(e,t,i){return this.httpController.post(e,`/computes/${i}/docker/images/pull`,{image:t})}addTemplate(e,t){let i=this.prepareTemplate(t);return this.httpController.post(e,"/templates",i)}saveTemplate(e,t){let i=this.prepareTemplate(t);return this.httpController.put(e,`/templates/${t.template_id}`,i)}prepareTemplate(e){return ze(q({},e),{custom_adapters:e.custom_adapters||[]})}static \u0275fac=function(t){return new(t||n)(_e(sn))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var ese=(n,o)=>o.image;function tse(n,o){if(n&1&&c(0),n&2){let e=o.index;N(e+1)}}function nse(n,o){if(n&1&&c(0),n&2){let e=o.index;N(e+1)}}function ise(n,o){n&1&&(r(0,"span",39)(1,"mat-icon"),c(2,"dns"),l(),r(3,"span",40)(4,"span",41),c(5,"Controller type"),l(),r(6,"span",42),c(7,"Choose the execution host"),l()()())}function ose(n,o){n&1&&(r(0,"span",39)(1,"mat-icon"),c(2,"inventory_2"),l(),r(3,"span",40)(4,"span",41),c(5,"Docker image"),l(),r(6,"span",42),c(7,"Select or name an image"),l()()())}function ase(n,o){if(n&1&&(r(0,"mat-option",29),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e.image)}}function rse(n,o){if(n&1){let e=R();r(0,"mat-form-field",21)(1,"mat-label"),c(2,"Image list"),l(),r(3,"mat-select",43),_("selectionChange",function(i){y(e);let a=h();return w(a.selectedImage=i.value)}),Q(4,ase,2,2,"mat-option",29,ese),l()()}if(n&2){let e=h();m(3),v("value",e.selectedImage),m(),K(e.dockerImages)}}function sse(n,o){if(n&1){let e=R();r(0,"div",22)(1,"mat-form-field",21)(2,"mat-label"),c(3,"Image name"),l(),r(4,"input",44),_("input",function(i){y(e);let a=h();return w(a.filename.set(i.target.value))}),l()(),r(5,"button",45),_("click",function(){y(e);let i=h();return w(i.pullImage())}),r(6,"mat-icon"),c(7,"cloud_download"),l(),c(8),l()()}if(n&2){let e=h();m(4),v("value",e.filename()),m(),v("disabled",e.isPulling()||!e.filename().trim()),m(3),X(" ",e.isPulling()?"Pulling\u2026":"Pull image"," ")}}function lse(n,o){n&1&&(r(0,"span",39)(1,"mat-icon"),c(2,"description"),l(),r(3,"span",40)(4,"span",41),c(5,"Container name"),l(),r(6,"span",42),c(7,"Basic details and icon"),l()()())}function cse(n,o){n&1&&(r(0,"span",39)(1,"mat-icon"),c(2,"settings_ethernet"),l(),r(3,"span",40)(4,"span",41),c(5,"Network adapters"),l(),r(6,"span",42),c(7,"Configure network ports"),l()()())}function dse(n,o){n&1&&(r(0,"span",39)(1,"mat-icon"),c(2,"terminal"),l(),r(3,"span",40)(4,"span",41),c(5,"Start command"),l(),r(6,"span",42),c(7,"Optional launch command"),l()()())}function mse(n,o){n&1&&(r(0,"span",39)(1,"mat-icon"),c(2,"desktop_windows"),l(),r(3,"span",40)(4,"span",41),c(5,"Console type"),l(),r(6,"span",42),c(7,"Select the primary console"),l()()())}function pse(n,o){if(n&1&&(r(0,"mat-option",29),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function use(n,o){n&1&&(r(0,"span",39)(1,"mat-icon"),c(2,"developer_board"),l(),r(3,"span",40)(4,"span",41),c(5,"Auxiliary console"),l(),r(6,"span",42),c(7,"Optional second console"),l()()())}function gse(n,o){if(n&1&&(r(0,"mat-option",29),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function hse(n,o){n&1&&(r(0,"span",39)(1,"mat-icon"),c(2,"tune"),l(),r(3,"span",40)(4,"span",41),c(5,"Environment"),l(),r(6,"span",42),c(7,"Set optional variables"),l()()())}function _se(n,o){n&1&&(r(0,"span",39)(1,"mat-icon"),c(2,"settings_ethernet"),l(),r(3,"span",40)(4,"span",41),c(5,"Netmiko device type"),l(),r(6,"span",42),c(7,"Optional device type"),l()()())}function fse(n,o){if(n&1){let e=R();r(0,"button",46),_("click",function(){y(e),h();let i=Te(11);return w(i.previous())}),r(1,"mat-icon"),c(2,"arrow_back"),l(),c(3," Back "),l()}}function vse(n,o){if(n&1){let e=R();r(0,"button",47),_("click",function(){y(e),h();let i=Te(11);return w(i.next())}),c(1," Next "),r(2,"mat-icon",48),c(3,"arrow_forward"),l()()}if(n&2){let e=h();v("disabled",!e.canAdvance())}}function Cse(n,o){if(n&1){let e=R();r(0,"button",49),_("click",function(){y(e);let i=h();return w(i.addTemplate())}),c(1," Create template "),r(2,"mat-icon",48),c(3,"arrow_forward"),l()()}if(n&2){let e=h();v("disabled",!e.canCreateTemplate())}}var K1=(()=>{class n{route=f($t);controllerService=f(_t);dockerService=f(td);toasterService=f(re);router=f(Ft);location=f(ki);templateMocksService=f(Rr);configurationService=f(qm);validationService=f(Hn);cd=f(oe);controller;dockerTemplate;consoleTypes=[];auxConsoleTypes=[];dockerImages=[];selectedImage;newImageSelected=!1;isLocalComputerChosen=!0;selectedStepIndex=z(0);isPulling=z(!1);filename=$("");templateName=$("");adapters=$(1);startCommand=$("");consoleType=$("");auxConsoleType=$("");environment=$("");netmikoDeviceType=$("");usage=$("");symbol=$("docker_guest");ngOnInit(){let e=this.route.snapshot.paramMap.get("controller_id");this.controllerService.get(parseInt(e,10)).then(t=>{this.controller=t,this.cd.markForCheck(),this.consoleTypes=this.configurationService.getConsoleTypes(),this.auxConsoleTypes=this.configurationService.getAuxConsoleTypes(),this.templateMocksService.getDockerTemplate().subscribe({next:i=>{this.dockerTemplate=i,this.cd.markForCheck()},error:i=>{let a=i.error?.message||i.message||"Failed to load template";this.toasterService.error(a),this.cd.markForCheck()}}),this.dockerService.getImages(t).subscribe({next:i=>{this.dockerImages=i,this.cd.markForCheck()},error:i=>{let a=i.error?.message||i.message||"Failed to load docker images";this.toasterService.error(a),this.cd.markForCheck()}})},t=>{let i=t.error?.message||t.message||"Failed to load controller";this.toasterService.error(i),this.cd.markForCheck()})}setControllerType(e){e==="local"&&(this.isLocalComputerChosen=!0)}setDiskImage(e){this.newImageSelected=e==="newImage"}pullImage(){let e=this.filename().trim(),t=this.controller;!e||!t||this.isPulling()||(this.isPulling.set(!0),this.dockerService.pullImage(t,e,"local").pipe(ig(()=>{this.isPulling.set(!1),this.cd.markForCheck()})).subscribe({next:()=>{this.toasterService.success(`Docker image '${e}' pulled`),this.dockerService.getImages(t).subscribe({next:i=>{this.dockerImages=i,this.cd.markForCheck()},error:()=>{}})},error:i=>{let a=i.error?.message||i.message||`Failed to pull Docker image '${e}'`;this.toasterService.error(a)}}))}canAdvance(){switch(this.selectedStepIndex()){case 0:return this.isLocalComputerChosen;case 1:return this.newImageSelected?!!this.filename():!!this.selectedImage;case 2:return!!this.templateName();case 3:return this.adapters()>0;default:return!0}}canCreateTemplate(){let e=this.newImageSelected?!!this.filename():!!this.selectedImage;return!!this.controller&&!!this.dockerTemplate&&e&&!!this.templateName()&&this.adapters()>0}goBack(){let e=this.controller?.id??parseInt(this.route.snapshot.paramMap.get("controller_id"),10);ji(this.location,this.router,["/controller",e,"preferences"])}addTemplate(){let e=this.controller,t=this.dockerTemplate,i=this.selectedImage;if(!this.canCreateTemplate()||!e||!t||!this.newImageSelected&&!i){this.toasterService.error("Fill all required fields");return}let a=this.validationService.validateNetmikoDeviceType(this.netmikoDeviceType());if(!a.isValid){this.toasterService.error(a.errorMessage);return}t.template_id=xo(),t.image=this.newImageSelected?this.filename():i.image,t.name=this.templateName(),t.adapters=this.adapters(),t.compute_id="local",t.start_command=this.startCommand(),t.console_type=this.consoleType()||"none",t.aux_type=this.auxConsoleType()||"none",t.environment=this.environment(),t.netmiko_device_type=this.netmikoDeviceType().trim()||null,t.usage=this.usage(),t.symbol=this.symbol(),this.dockerService.addTemplate(e,t).subscribe({next:()=>{this.goBack()},error:s=>{let d=s.error?.message||s.message||"Failed to add template";this.toasterService.error(d),this.cd.markForCheck()}})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-add-docker-template"]],inputs:{filename:[1,"filename"],templateName:[1,"templateName"],adapters:[1,"adapters"],startCommand:[1,"startCommand"],consoleType:[1,"consoleType"],auxConsoleType:[1,"auxConsoleType"],environment:[1,"environment"],netmikoDeviceType:[1,"netmikoDeviceType"],usage:[1,"usage"],symbol:[1,"symbol"]},outputs:{filename:"filenameChange",templateName:"templateNameChange",adapters:"adaptersChange",startCommand:"startCommandChange",consoleType:"consoleTypeChange",auxConsoleType:"auxConsoleTypeChange",environment:"environmentChange",netmikoDeviceType:"netmikoDeviceTypeChange",usage:"usageChange",symbol:"symbolChange"},decls:136,vars:26,consts:[["stepper",""],[1,"docker-add","template-wizard"],[1,"docker-add__header","template-wizard__header"],["mat-icon-button","","aria-label","Back to Docker templates",1,"template-wizard__back",3,"click"],[1,"template-wizard__heading"],[1,"docker-add__title","template-wizard__title"],[1,"docker-add__content","template-wizard__body"],[1,"docker-add__stepper-card","template-wizard__stepper-card"],[1,"docker-add__stepper","template-wizard__stepper",3,"selectionChange","linear"],["matStepperIcon","edit"],["matStepperIcon","done"],[3,"completed"],["matStepLabel",""],[1,"docker-add__step-content","template-wizard__panel"],[1,"template-wizard__section"],[1,"template-wizard__section-title"],[1,"template-wizard__section-copy"],[1,"docker-add__radio-group"],["value","1",1,"docker-add__radio",3,"click","checked"],[1,"docker-add__form"],["value","2",1,"docker-add__radio",3,"click"],["appearance","outline","subscriptSizing","dynamic",1,"docker-add__field"],[1,"docker-add__image-row"],["matInput","","required","","type","text","placeholder","Container name",1,"templatename",3,"input","value"],[3,"usageChange","symbolChange","usage","symbol"],["matInput","","required","","type","number","min","1","placeholder","Adapters",1,"networkadapter",3,"input","value"],[3,"optional"],["matInput","","type","text","placeholder","Start command",3,"input","value"],["placeholder","Console type",3,"selectionChange","value"],[3,"value"],["placeholder","Auxiliary console type",3,"selectionChange","value"],["matInput","","rows","1","cdkTextareaAutosize","","cdkAutosizeMinRows","1","cdkAutosizeMaxRows","12","type","text","placeholder","Environment variables (one per line, KEY=VALUE format). Supports: %vm-name%, %vm-id%, %project-id%, %project-path%",3,"input","value"],["subscriptSizing","dynamic","appearance","outline",1,"docker-add__field",3,"valueChange","value","controller"],[1,"docker-add__actions","template-wizard__actions"],["mat-stroked-button","",1,"docker-add__cancel-btn",3,"click"],[1,"template-wizard__step-actions"],["mat-button","","type","button",1,"template-wizard__previous"],["mat-raised-button","","color","primary","type","button",1,"template-wizard__next",3,"disabled"],["mat-raised-button","","color","primary",1,"docker-add__submit-btn",3,"disabled"],[1,"template-wizard__step-label"],[1,"template-wizard__step-label-text"],[1,"template-wizard__step-label-title"],[1,"template-wizard__step-label-description"],["required","","placeholder","Image list",3,"selectionChange","value"],["matInput","","required","","type","text","placeholder","Image name",1,"filename",3,"input","value"],["mat-raised-button","","color","primary","type","button",1,"docker-add__pull-btn",3,"click","disabled"],["mat-button","","type","button",1,"template-wizard__previous",3,"click"],["mat-raised-button","","color","primary","type","button",1,"template-wizard__next",3,"click","disabled"],["iconPositionEnd",""],["mat-raised-button","","color","primary",1,"docker-add__submit-btn",3,"click","disabled"]],template:function(t,i){if(t&1){let a=R();r(0,"div",1)(1,"header",2)(2,"button",3),_("click",function(){return i.goBack()}),r(3,"mat-icon"),c(4,"arrow_back"),l()(),r(5,"div",4)(6,"h1",5),c(7,"New Docker container template"),l()()(),r(8,"main",6)(9,"section",7)(10,"mat-horizontal-stepper",8,0),_("selectionChange",function(d){return i.selectedStepIndex.set(d.selectedIndex)}),se(12,tse,1,1,"ng-template",9)(13,nse,1,1,"ng-template",10),r(14,"mat-step",11),se(15,ise,8,0,"ng-template",12),r(16,"div",13)(17,"section",14)(18,"h2",15),c(19,"Controller type"),l(),r(20,"p",16),c(21,"Choose where this Docker container will run."),l(),r(22,"mat-radio-group",17)(23,"mat-radio-button",18),_("click",function(){return i.setControllerType("local")}),c(24," Run this Docker container locally "),l()()()()(),r(25,"mat-step",11),se(26,ose,8,0,"ng-template",12),r(27,"div",13)(28,"section",14)(29,"h2",15),c(30,"Docker image"),l(),r(31,"p",16),c(32,"Select an existing image or enter a new image name."),l(),r(33,"div",19)(34,"mat-radio-group",17)(35,"mat-radio-button",18),_("click",function(){return i.setDiskImage("existingImage")}),c(36," Existing image "),l(),r(37,"mat-radio-button",20),_("click",function(){return i.setDiskImage("newImage")}),c(38," New image "),l()(),T(39,rse,6,1,"mat-form-field",21),T(40,sse,9,3,"div",22),l()()()(),r(41,"mat-step",11),se(42,lse,8,0,"ng-template",12),r(43,"div",13)(44,"section",14)(45,"h2",15),c(46,"Template information"),l(),r(47,"p",16),c(48,"Choose a name and an optional usage note for your template."),l(),r(49,"div",19)(50,"mat-form-field",21)(51,"mat-label"),c(52,"Container name"),l(),r(53,"input",23),_("input",function(d){return i.templateName.set(d.target.value)}),l()()(),r(54,"app-template-info-fields",24),rn("usageChange",function(d){return y(a),Xt(i.usage,d)||(i.usage=d),w(d)})("symbolChange",function(d){return y(a),Xt(i.symbol,d)||(i.symbol=d),w(d)}),l()()()(),r(55,"mat-step",11),se(56,cse,8,0,"ng-template",12),r(57,"div",13)(58,"section",14)(59,"h2",15),c(60,"Network adapters"),l(),r(61,"p",16),c(62,"Set the default number of network adapters."),l(),r(63,"div",19)(64,"mat-form-field",21)(65,"mat-label"),c(66,"Adapters"),l(),r(67,"input",25),_("input",function(d){return i.adapters.set(+d.target.value)}),l()()()()()(),r(68,"mat-step",26),se(69,dse,8,0,"ng-template",12),r(70,"div",13)(71,"section",14)(72,"h2",15),c(73,"Start command"),l(),r(74,"p",16),c(75,"Enter a command to run when the container starts."),l(),r(76,"mat-form-field",21)(77,"mat-label"),c(78,"Start command"),l(),r(79,"input",27),_("input",function(d){return i.startCommand.set(d.target.value)}),l()()()()(),r(80,"mat-step",26),se(81,mse,8,0,"ng-template",12),r(82,"div",13)(83,"section",14)(84,"h2",15),c(85,"Console"),l(),r(86,"p",16),c(87,"Choose the primary console type for this container."),l(),r(88,"mat-form-field",21)(89,"mat-label"),c(90,"Console type"),l(),r(91,"mat-select",28),_("selectionChange",function(d){return i.consoleType.set(d.value)}),Q(92,pse,2,2,"mat-option",29,Oe),l()()()()(),r(94,"mat-step",26),se(95,use,8,0,"ng-template",12),r(96,"div",13)(97,"section",14)(98,"h2",15),c(99,"Auxiliary console"),l(),r(100,"p",16),c(101,"Choose an optional second console type."),l(),r(102,"mat-form-field",21)(103,"mat-label"),c(104,"Auxiliary console type"),l(),r(105,"mat-select",30),_("selectionChange",function(d){return i.auxConsoleType.set(d.value)}),Q(106,gse,2,2,"mat-option",29,Oe),l()()()()(),r(108,"mat-step",26),se(109,hse,8,0,"ng-template",12),r(110,"div",13)(111,"section",14)(112,"h2",15),c(113,"Environment"),l(),r(114,"p",16),c(115,"Define optional environment variables for the container."),l(),r(116,"mat-form-field",21)(117,"mat-label"),c(118,"Environment"),l(),r(119,"textarea",31),_("input",function(d){return i.environment.set(d.target.value)}),l()()()()(),r(120,"mat-step",26),se(121,_se,8,0,"ng-template",12),r(122,"div",13)(123,"section",14)(124,"h2",15),c(125,"Netmiko device type"),l(),r(126,"p",16),c(127," Default device type used for netmiko-driven configuration pushes. "),l(),r(128,"app-netmiko-device-type-select",32),rn("valueChange",function(d){return y(a),Xt(i.netmikoDeviceType,d)||(i.netmikoDeviceType=d),w(d)}),l()()()()()(),r(129,"div",33)(130,"button",34),_("click",function(){return i.goBack()}),c(131,"Cancel"),l(),r(132,"div",35),T(133,fse,4,0,"button",36),T(134,vse,4,1,"button",37)(135,Cse,4,1,"button",38),l()()()()}t&2&&(m(10),v("linear",!0),m(4),v("completed",i.isLocalComputerChosen),m(9),v("checked",!0),m(2),v("completed",i.selectedImage||i.filename()),m(10),v("checked",!i.newImageSelected),m(4),E(i.newImageSelected?-1:39),m(),E(i.newImageSelected?40:-1),m(),v("completed",i.templateName()),m(12),v("value",i.templateName()),m(),an("usage",i.usage)("symbol",i.symbol),m(),v("completed",i.adapters()),m(12),v("value",i.adapters()),m(),v("optional",!0),m(11),v("value",i.startCommand()),m(),v("optional",!0),m(11),v("value",i.consoleType()),m(),K(i.consoleTypes),m(2),v("optional",!0),m(11),v("value",i.auxConsoleType()),m(),K(i.auxConsoleTypes),m(2),v("optional",!0),m(11),v("value",i.environment()),m(),v("optional",!0),m(8),an("value",i.netmikoDeviceType),v("controller",i.controller),m(5),E(i.selectedStepIndex()>0?133:-1),m(),E(i.selectedStepIndex()<8?134:135))},dependencies:[po,ie,ce,Y,he,Be,Fo,la,Zo,we,Pe,Ve,ye,Ee,Xc,ot,ct,nt,Il,gc,tl,hc,uc,Ds],styles:["[_nghost-%COMP%]{display:block;width:100%;background:transparent}.docker-add__header[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:32px 20px 16px;display:flex;align-items:center;gap:16px;animation:none}.docker-add__title[_ngcontent-%COMP%]{flex:1;font-size:32px;font-weight:500;color:var(--mat-sys-on-surface);margin:0}.docker-add__content[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:0 20px 20px;animation:none}.docker-add__stepper-card[_ngcontent-%COMP%]{background:var(--mat-sys-surface);border-radius:16px;overflow:hidden;box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 20%,transparent),0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent)}.docker-add__stepper[_ngcontent-%COMP%]{background:transparent}.docker-add__step-content[_ngcontent-%COMP%]{padding:16px 24px 24px;display:flex;flex-direction:column;gap:16px}.docker-add__radio-group[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px}.docker-add__radio[_ngcontent-%COMP%]{font-size:16px}.docker-add__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px}.docker-add__field[_ngcontent-%COMP%]{width:100%}.docker-add__image-row[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:var(--gns3-density-card-gap)}.docker-add__image-row[_ngcontent-%COMP%] .docker-add__field[_ngcontent-%COMP%]{flex:1}.docker-add__image-row[_ngcontent-%COMP%] .docker-add__pull-btn[_ngcontent-%COMP%]{height:var(--gns3-density-control-height-sm);min-height:var(--gns3-density-control-height-sm);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height-sm);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height-sm);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height-sm);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height-sm);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing);align-self:flex-start;margin-top:calc((var(--gns3-density-form-field-height) - var(--gns3-density-control-height-sm)) / 2);white-space:nowrap}.docker-add__actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:12px;margin-top:24px}.docker-add__cancel-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none}.docker-add__submit-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none;letter-spacing:.5px}@media(max-width:768px){.docker-add__header[_ngcontent-%COMP%]{padding:24px 16px 12px;gap:12px}.docker-add__title[_ngcontent-%COMP%]{font-size:24px}.docker-add__content[_ngcontent-%COMP%]{padding:0 16px 16px}.docker-add__step-content[_ngcontent-%COMP%]{padding:12px 16px 20px}.docker-add__image-row[_ngcontent-%COMP%]{flex-direction:column}.docker-add__image-row[_ngcontent-%COMP%] .docker-add__pull-btn[_ngcontent-%COMP%]{width:100%;margin-top:0}.docker-add__actions[_ngcontent-%COMP%]{flex-direction:column}.docker-add__cancel-btn[_ngcontent-%COMP%], .docker-add__submit-btn[_ngcontent-%COMP%]{width:100%;height:44px}}",'[_nghost-%COMP%]{display:block;width:100%;background:transparent}.templates-page__content[_ngcontent-%COMP%]{animation:none}.templates-page__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:20px;max-width:1600px;margin:0 auto;padding:24px 20px 16px}.templates-page__heading[_ngcontent-%COMP%], .templates-page__header-actions[_ngcontent-%COMP%]{display:flex;align-items:center}.templates-page__heading[_ngcontent-%COMP%]{min-width:0;gap:var(--gns3-density-space-3)}.templates-page__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.templates-page__header-actions[_ngcontent-%COMP%]{gap:var(--gns3-density-space-3)}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);border-radius:12px;padding-inline:18px;font-size:15px;font-weight:500;letter-spacing:.3px;text-transform:none}[class*=-templates__header][_ngcontent-%COMP%]{box-sizing:border-box;width:100%;height:calc(var(--gns3-density-space-4) * 2 + (var(--gns3-density-section-title-size) + 2px) * 1.2 + 1px);max-width:none;margin:0;padding:0 var(--gns3-density-page-padding);gap:var(--gns3-density-space-3);color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container);border-bottom:1px solid var(--mat-sys-outline-variant)}[class*=-templates__back-btn][_ngcontent-%COMP%], [class*=-templates__add-btn][_ngcontent-%COMP%]{flex:0 0 auto;width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:12px}[class*=-templates__back-btn][_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container)}[class*=-templates__add-btn][_ngcontent-%COMP%]{color:var(--mat-sys-primary)}[class*=-templates__title][_ngcontent-%COMP%]{flex:1;min-width:0;margin:0;padding-bottom:0;color:var(--mat-sys-on-primary-container);font-size:calc(var(--gns3-density-section-title-size) + 2px);font-weight:650;line-height:1.2;letter-spacing:-.01em}.templates-page__scopes[_ngcontent-%COMP%]{display:flex;gap:4px;max-width:1560px;margin:0 auto 16px;padding:0 20px;border-bottom:1px solid var(--mat-sys-outline-variant)}.templates-page__scope[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center;gap:8px;min-height:48px;padding:0 16px;border:0;color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;font-size:14px;font-weight:550;cursor:pointer}.templates-page__scope[_ngcontent-%COMP%]:after{position:absolute;right:8px;bottom:-1px;left:8px;height:2px;border-radius:2px 2px 0 0;background:transparent;content:""}.templates-page__scope[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}.templates-page__scope[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{min-width:22px;padding:2px 6px;border-radius:12px;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-high);font-size:11px;text-align:center}.templates-page__scope--active[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%]:after{background:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap);max-width:1600px;margin:0 auto;padding:0 20px 8px}.templates-page__search[_ngcontent-%COMP%]{flex:1;min-width:240px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:flex;align-items:center;flex:0 0 auto;gap:var(--gns3-density-space-3)}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{width:155px}.templates-page__view-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px;padding:4px 2px;border-radius:8px;background:var(--mat-sys-surface-container-high)}button.templates-page__view-button[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:8px;color:var(--mat-sys-on-surface-variant);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);--mat-icon-button-icon-size: 22px}button.templates-page__view-button--active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__main[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:20px;max-width:1600px;margin:0 auto;padding:0 20px 20px}.templates-page__loading[_ngcontent-%COMP%]{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;min-height:320px;gap:var(--gns3-density-card-gap);color:var(--mat-sys-on-surface-variant)}.templates-page__table-container[_ngcontent-%COMP%]{flex:1;min-width:0;border-radius:16px;background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;overflow-x:auto}mat-table[_ngcontent-%COMP%]{width:100%;min-width:850px}.mat-mdc-row[_ngcontent-%COMP%], .mat-row[_ngcontent-%COMP%]{height:var(--mat-table-row-item-container-height);min-height:var(--mat-table-row-item-container-height)}.mat-header-row[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%]{position:sticky;top:0;z-index:10;background:var(--mat-sys-surface-container-highest);box-shadow:inset 0 -2px var(--mat-sys-primary);--mat-sort-arrow-color: var(--mat-sys-primary)}.mat-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:13px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}mat-row[_ngcontent-%COMP%]{cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease}mat-row[_ngcontent-%COMP%]:nth-child(2n){background:color-mix(in srgb,var(--mat-sys-on-surface) 1%,transparent)}mat-row[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}mat-row.templates-page__row--selected[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}mat-cell[_ngcontent-%COMP%], mat-header-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:inherit;color:var(--mat-sys-on-surface)}.mat-column-name[_ngcontent-%COMP%]{flex:2.4;min-width:240px;justify-content:flex-start}.mat-column-template_type[_ngcontent-%COMP%]{flex:1.1;min-width:130px}.mat-column-category[_ngcontent-%COMP%]{flex:1;min-width:110px}.mat-column-compute_id[_ngcontent-%COMP%]{flex:1;min-width:105px}.mat-column-builtin[_ngcontent-%COMP%]{flex:0 0 90px;min-width:90px;justify-content:center}.mat-column-actions[_ngcontent-%COMP%]{flex:0 0 180px;min-width:180px;box-sizing:border-box;justify-content:flex-start;padding-right:24px}.templates-page__name-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-width:0;gap:var(--gns3-density-space-3)}.templates-page__name-copy[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:14px;font-weight:600}.templates-page__symbol[_ngcontent-%COMP%]{display:grid;flex:0 0 52px;width:52px;height:52px;overflow:hidden;place-items:center;border-radius:14px;color:var(--mat-sys-on-primary-container);background:color-mix(in srgb,var(--mat-sys-primary-container) 82%,var(--mat-sys-surface))}.templates-page__symbol[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:78%;height:78%;object-fit:contain;filter:drop-shadow(0 2px 4px color-mix(in srgb,var(--mat-sys-shadow) 25%,transparent))}.templates-page__symbol[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:27px;height:27px;font-size:27px}.templates-page__symbol--small[_ngcontent-%COMP%]{flex-basis:38px;width:38px;height:38px;border-radius:10px}.templates-page__symbol--small[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:21px;height:21px;font-size:21px}.templates-page__type-badge[_ngcontent-%COMP%], .templates-page__source-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;width:fit-content;padding:4px 9px;border-radius:16px;font-size:12px;font-weight:600;white-space:nowrap}.templates-page__type-badge[_ngcontent-%COMP%]{color:var(--mat-sys-secondary);background:color-mix(in srgb,var(--mat-sys-secondary) 11%,transparent)}.templates-page__type-badge--qemu[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__type-badge--docker[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container)}.templates-page__type-badge--dynamips[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary-container);background:var(--mat-sys-tertiary-container)}.templates-page__type-badge--cloud[_ngcontent-%COMP%]{color:var(--mat-sys-on-error-container);background:var(--mat-sys-error-container)}.templates-page__type-badge--vpcs[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary);background:var(--mat-sys-primary)}.templates-page__type-badge--ethernet-hub[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary);background:var(--mat-sys-secondary)}.templates-page__type-badge--ethernet-switch[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary);background:var(--mat-sys-tertiary)}.templates-page__type-badge--iou[_ngcontent-%COMP%]{color:var(--mat-sys-on-error);background:var(--mat-sys-error)}.templates-page__type-badge--nat[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-highest)}.templates-page__source-badge[_ngcontent-%COMP%]{color:var(--mat-sys-primary);background:color-mix(in srgb,var(--mat-sys-primary) 11%,transparent)}.templates-page__source-badge--builtin[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary);background:color-mix(in srgb,var(--mat-sys-tertiary) 11%,transparent)}.templates-page__table-footer[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:var(--mat-table-footer-container-height);padding:0 12px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container))}.templates-page__table-footer[_ngcontent-%COMP%] mat-paginator[_ngcontent-%COMP%]{width:100%;--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__actions-cell[_ngcontent-%COMP%], .templates-page__card-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:3px}button.templates-page__action[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-on-surface-variant);width:var(--gns3-density-control-height-sm);height:var(--gns3-density-control-height-sm);--mat-icon-button-state-layer-size: var(--gns3-density-control-height-sm);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-control-height-sm)}button.templates-page__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}button.templates-page__action[_ngcontent-%COMP%]{color:var(--template-action-color);--mat-icon-button-state-layer-color: var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:not(:disabled) mat-icon[_ngcontent-%COMP%]{color:var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:disabled mat-icon[_ngcontent-%COMP%]{color:var(--gns3-button-disabled-label-color)}button.templates-page__action--details[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--edit[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-primary)}button.templates-page__action--duplicate[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--delete[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-error)}.templates-page__grid[_ngcontent-%COMP%]{flex:1;min-width:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-content:start;gap:var(--gns3-density-card-gap)}.templates-page__grid--with-details[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__card[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column;padding:16px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;background:var(--mat-sys-surface);cursor:pointer;transition:transform var(--gns3-motion-duration-standard) ease,box-shadow var(--gns3-motion-duration-standard) ease,border-color var(--gns3-motion-duration-standard) ease}.templates-page__card[_ngcontent-%COMP%]:hover{border-color:var(--mat-sys-outline-variant);background:var(--mat-sys-surface-container-low)}.templates-page__card--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);box-shadow:0 0 0 1px var(--mat-sys-primary)}.templates-page__card-header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--gns3-density-space-3)}.templates-page__card-body[_ngcontent-%COMP%]{flex:1;min-width:0;padding:14px 0 12px}.templates-page__card-body[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{display:-webkit-box;overflow:hidden;margin:0 0 9px;color:var(--mat-sys-on-surface);font-size:17px;font-weight:650;line-height:1.35;overflow-wrap:anywhere;-webkit-box-orient:vertical;-webkit-line-clamp:2}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%]{display:grid;gap:8px;margin:16px 0 0}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{min-width:0;margin:0;overflow:hidden;color:var(--mat-sys-on-surface);font-size:13px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] .templates-page__card-tags-row[_ngcontent-%COMP%]{align-items:flex-start}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd.templates-page__card-tags[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px;overflow:visible;white-space:normal}.templates-page__card-actions[_ngcontent-%COMP%]{justify-content:flex-end;min-height:33px;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__grid-paginator[_ngcontent-%COMP%]{grid-column:1/-1;width:100%;border-radius:12px;background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container));--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__empty[_ngcontent-%COMP%]{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:230px;padding:32px;color:var(--mat-sys-on-surface-variant);text-align:center}.templates-page__empty[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{width:48px;height:48px;font-size:48px;opacity:.55}.templates-page__empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:12px 0 0;color:var(--mat-sys-on-surface);font-size:17px}.templates-page__empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:5px 0 0;font-size:14px}.templates-page__details[_ngcontent-%COMP%]{position:sticky;top:16px;flex:0 0 clamp(390px,31vw,480px);display:flex;min-height:380px;max-height:calc(100vh - 176px);flex-direction:column;overflow:hidden;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 60%,transparent);border-radius:16px;background:var(--mat-sys-surface);box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent);animation:_ngcontent-%COMP%_templates-slide-in var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard)}.templates-page__details-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:var(--gns3-density-space-3);min-height:56px;box-sizing:border-box;padding:8px 10px 8px 16px;border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 72%,var(--mat-sys-surface))}.templates-page__details-header[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-primary-container)}.templates-page__details-heading[_ngcontent-%COMP%]{display:flex;min-width:0;align-items:center;gap:var(--gns3-density-space-3)}.templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;margin:0;color:var(--mat-sys-on-primary-container);font-size:19px;font-weight:650;line-height:1.25;text-overflow:ellipsis;white-space:nowrap}.templates-page__details-title-line[_ngcontent-%COMP%]{display:flex;flex:1;min-width:0;align-items:center;gap:var(--gns3-density-space-2)}.templates-page__details-title-line[_ngcontent-%COMP%] .templates-page__type-badge[_ngcontent-%COMP%]{flex:0 0 auto}.templates-page__details-body[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:12px 20px}.templates-page__description[_ngcontent-%COMP%]{padding:10px 0 14px;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__description[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.6px;text-transform:uppercase}.templates-page__description[_ngcontent-%COMP%] app-markdown-viewer[_ngcontent-%COMP%]{display:block;margin-top:8px;padding:2px 12px;border-radius:10px;background:var(--mat-sys-surface-container-low);overflow-wrap:anywhere;--markdown-viewer-font-size: 13px;--markdown-viewer-line-height: 1.5;--markdown-viewer-heading-scale: .85}.templates-page__detail-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:22px 105px minmax(0,1fr);align-items:center;gap:var(--gns3-density-space-3);min-height:40px;box-sizing:border-box;padding:8px 0;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__detail-row[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:19px;height:19px;color:var(--mat-sys-primary);font-size:19px}.templates-page__detail-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:12px;font-weight:650;letter-spacing:.5px;text-transform:uppercase;white-space:nowrap}.templates-page__detail-row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{min-width:0;color:var(--mat-sys-on-surface);font-size:14px;font-weight:500;line-height:1.45;text-align:right;overflow-wrap:anywhere}.templates-page__detail-row--stacked[_ngcontent-%COMP%]{align-items:start}.templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__mono[_ngcontent-%COMP%], .templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__path[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-family:var(--gns3-font-code);font-size:12px;word-break:break-all}.templates-page__tags[_ngcontent-%COMP%]{border-bottom:0}.templates-page__tags[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:7px}.templates-page__tag[_ngcontent-%COMP%]{padding:5px 9px;border-radius:14px;color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container);font-size:11px;font-weight:550}.templates-page__details-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(105px,1fr));gap:var(--gns3-density-space-2);padding:14px 16px 18px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-surface-container) 72%,transparent)}button.templates-page__details-action[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-on-surface-variant);height:40px;border-radius:12px;color:var(--details-action-color);border-color:color-mix(in srgb,var(--details-action-color) 48%,transparent);font-size:13px;font-weight:500}button.templates-page__details-action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--details-action-color)}button.templates-page__details-action--edit[_ngcontent-%COMP%], button.templates-page__details-action--duplicate[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-primary)}button.templates-page__details-action--delete[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-error)}[data-density=compact][_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%]{min-height:40px;height:40px}[data-density=compact][_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%]{width:40px;height:40px;--mat-icon-button-state-layer-size: 40px}[data-density=compact][_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%]{min-height:48px;padding-block:4px}[data-density=compact][_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:18px}[data-density=compact][_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%]{padding-block:8px}[data-density=compact][_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%]{min-height:36px;padding-block:6px}[data-density=compact][_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%]{padding:12px}@keyframes _ngcontent-%COMP%_templates-slide-in{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@media(max-width:1400px){.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__main[_ngcontent-%COMP%]{flex-direction:column}.templates-page__table-container[_ngcontent-%COMP%], .templates-page__grid[_ngcontent-%COMP%], .templates-page__details[_ngcontent-%COMP%]{width:100%}.templates-page__details[_ngcontent-%COMP%]{position:static;flex-basis:auto;max-height:none}}@media(max-width:900px){.templates-page__header[_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column}.templates-page__header-actions[_ngcontent-%COMP%]{width:100%}.templates-page__toolbar[_ngcontent-%COMP%]{align-items:stretch;flex-direction:column}.templates-page__toolbar-actions[_ngcontent-%COMP%]{width:100%}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{flex:1;width:auto}}@media(max-width:640px){.templates-page__header[_ngcontent-%COMP%]{padding:20px 16px 12px}.templates-page__header-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{width:100%;padding-inline:10px}.templates-page__scopes[_ngcontent-%COMP%]{overflow-x:auto;padding-inline:16px}.templates-page__scope[_ngcontent-%COMP%]{flex:0 0 auto;padding-inline:12px}.templates-page__toolbar[_ngcontent-%COMP%], .templates-page__main[_ngcontent-%COMP%]{padding-inline:16px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__view-toggle[_ngcontent-%COMP%]{grid-column:1/-1;justify-self:end}.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.templates-page__details[_ngcontent-%COMP%]{min-width:0}}'],changeDetection:0})}return n})();function rs(n,o){let e=n?.[o];return e==null||e===""?"":String(e)}function nd(n,o,e){let t=q({},n||{});return e.trim()!==""?t[o]=e:delete t[o],Object.keys(t).length>0?t:null}var DE=class{_document;_textarea;constructor(o,e){this._document=e;let t=this._textarea=this._document.createElement("textarea"),i=t.style;i.position="fixed",i.top=i.opacity="0",i.left="-999em",t.setAttribute("aria-hidden","true"),t.value=o,t.readOnly=!0,(this._document.fullscreenElement||this._document.body).appendChild(t)}copy(){let o=this._textarea,e=!1;try{if(o){let t=this._document.activeElement;o.select(),o.setSelectionRange(0,o.value.length),e=this._document.execCommand("copy"),t&&t.focus()}}catch{}return e}destroy(){let o=this._textarea;o&&(o.remove(),this._textarea=void 0)}},Hd=(()=>{class n{_document=f(Do);constructor(){}copy(e){let t=this.beginCopy(e),i=t.copy();return t.destroy(),i}beginCopy(e){return new DE(e,this._document)}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})(),bse=new mn("CDK_COPY_TO_CLIPBOARD_CONFIG"),hz=(()=>{class n{_clipboard=f(Hd);_ngZone=f(Gi);text="";attempts=1;copied=new be;_pending=new Set;_destroyed=!1;_currentTimeout;constructor(){let e=f(bse,{optional:!0});e&&e.attempts!=null&&(this.attempts=e.attempts)}copy(e=this.attempts){if(e>1){let t=e,i=this._clipboard.beginCopy(this.text);this._pending.add(i);let a=()=>{let s=i.copy();!s&&--t&&!this._destroyed?this._currentTimeout=this._ngZone.runOutsideAngular(()=>setTimeout(a,1)):(this._currentTimeout=null,this._pending.delete(i),i.destroy(),this.copied.emit(s))};a()}else this.copied.emit(this._clipboard.copy(this.text))}ngOnDestroy(){this._currentTimeout&&clearTimeout(this._currentTimeout),this._pending.forEach(e=>e.destroy()),this._pending.clear(),this._destroyed=!0}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["","cdkCopyToClipboard",""]],hostBindings:function(t,i){t&1&&_("click",function(){return i.copy()})},inputs:{text:[0,"cdkCopyToClipboard","text"],attempts:[0,"cdkCopyToClipboardAttempts","attempts"]},outputs:{copied:"cdkCopyToClipboardCopied"}})}return n})(),X1=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=on({type:n});static \u0275inj=nn({})}return n})();var yse=(n,o)=>o.field;function wse(n,o){if(n&1){let e=R();r(0,"textarea",11),_("input",function(i){y(e);let a=h().$implicit,s=h();return w(s.onInput(a.field,i))}),l()}if(n&2){let e=h().$implicit,t=h();v("value",t.formValues()[e.field]||"")("placeholder",e.placeholder||"")}}function Mse(n,o){if(n&1){let e=R();r(0,"input",12),_("input",function(i){y(e);let a=h().$implicit,s=h();return w(s.onInput(a.field,i))}),l()}if(n&2){let e=h().$implicit,t=h();v("value",t.formValues()[e.field]||"")("placeholder",e.placeholder||"")}}function Sse(n,o){if(n&1){let e=R();r(0,"button",13),_("click",function(){y(e);let i=h().$implicit,a=h();return w(a.copy(i.field,i.label))}),r(1,"mat-icon"),c(2,"content_copy"),l()()}if(n&2){let e=h().$implicit;v("matTooltip",ka("Copy ",e.label))}}function kse(n,o){if(n&1){let e=R();r(0,"button",14),_("click",function(){y(e);let i=h().$implicit,a=h();return w(a.openLink(i.field))}),r(1,"mat-icon"),c(2,"open_in_new"),l()()}}function Pse(n,o){if(n&1&&(r(0,"mat-form-field",6)(1,"mat-label"),c(2),l(),T(3,wse,1,2,"textarea",7)(4,Mse,1,2,"input",8),T(5,Sse,3,2,"button",9),T(6,kse,3,0,"button",10),l()),n&2){let e=o.$implicit,t=h();ne("template-metadata__field--full",e.multiline),m(2),N(e.label),m(),E(e.multiline?3:4),m(2),E(e.copy&&t.text(e.field)?5:-1),m(),E(e.link&&t.text(e.field)?6:-1)}}var Y1=[{field:"description",label:"Description",multiline:!0},{field:"vendor_name",label:"Vendor name"},{field:"vendor_url",label:"Vendor URL",link:!0,placeholder:"https://\u2026"},{field:"vendor_logo_url",label:"Vendor logo URL",link:!0,placeholder:"https://\u2026"},{field:"documentation_url",label:"Documentation URL",link:!0,placeholder:"https://\u2026"},{field:"product_name",label:"Product name"},{field:"product_url",label:"Product URL",link:!0,placeholder:"https://\u2026"},{field:"status",label:"Status",placeholder:"stable / experimental / broken"},{field:"availability",label:"Availability",placeholder:"free / service-contract / \u2026"},{field:"maintainer",label:"Maintainer"},{field:"maintainer_email",label:"Maintainer email"},{field:"installation_instructions",label:"Installation instructions",multiline:!0}],id=(()=>{class n{metadata=$(null);fields=Y1;formValues=z({});clipboard=f(Hd);snackBar=f(pl);lastEmitted;constructor(){Vn(()=>{let e=this.metadata();e!==this.lastEmitted&&this.syncForm(e)})}isTruthy(e){return e!=null&&e!==""}text(e){let t=this.metadata()?.[e];return this.isTruthy(t)?String(t):""}openLink(e){let t=this.text(e);t&&window.open(t,"_blank","noopener,noreferrer")}copy(e,t){let i=this.text(e);i&&(this.clipboard.copy(i)?this.snackBar.open(`${t} copied to clipboard`,"Close",{duration:3e3}):this.snackBar.open(`Failed to copy. Please copy the ${t.toLowerCase()} manually.`,"Close",{duration:5e3}))}onInput(e,t){let i=t.target.value;this.setField(e,i)}setField(e,t){this.formValues.update(a=>ze(q({},a),{[e]:t}));let i=this.rebuild();this.lastEmitted=i,this.metadata.set(i)}remove(){this.lastEmitted=null,this.metadata.set(null),this.syncForm(null)}rebuild(){let e=this.metadata(),t={},i=this.formValues();for(let{field:a}of Y1){let s=(i[a]||"").trim();s!==""&&(t[a]=s)}if(e)for(let[a,s]of Object.entries(e))a==="appliance_id"?this.isTruthy(s)&&(t[a]=s):!Y1.some(d=>d.field===a)&&this.isTruthy(s)&&(t[a]=s);return Object.keys(t).length>0?t:null}syncForm(e){let t={};for(let{field:i}of Y1){let a=e?.[i];t[i]=this.isTruthy(a)?String(a):""}this.formValues.set(t)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-template-metadata-section"]],inputs:{metadata:[1,"metadata"]},outputs:{metadata:"metadataChange"},decls:10,vars:0,consts:[[1,"template-metadata"],[1,"template-metadata__form"],[1,"template-metadata__two-column-grid","gns3-form-grid","gns3-form-layout-fixed"],["appearance","outline","subscriptSizing","fixed",1,"template-metadata__field",3,"template-metadata__field--full"],[1,"template-metadata__actions"],["mat-flat-button","","type","button",1,"template-metadata__remove-btn",3,"click"],["appearance","outline","subscriptSizing","fixed",1,"template-metadata__field"],["matInput","","rows","3",3,"value","placeholder"],["matInput","","type","text",3,"value","placeholder"],["mat-icon-button","","matSuffix","","type","button",3,"matTooltip"],["mat-icon-button","","matSuffix","","type","button","matTooltip","Open link"],["matInput","","rows","3",3,"input","value","placeholder"],["matInput","","type","text",3,"input","value","placeholder"],["mat-icon-button","","matSuffix","","type","button",3,"click","matTooltip"],["mat-icon-button","","matSuffix","","type","button","matTooltip","Open link",3,"click"]],template:function(t,i){t&1&&(r(0,"div",0)(1,"div",1)(2,"div",2),Q(3,Pse,7,6,"mat-form-field",3,yse),l(),r(5,"div",4)(6,"button",5),_("click",function(){return i.remove()}),r(7,"mat-icon"),c(8,"delete"),l(),c(9," Remove metadata "),l()()()()),t&2&&(m(3),K(i.fields))},dependencies:[Y,he,Be,we,Pe,Ve,oi,ie,ce,ye,Ee,st,pt],styles:['@charset "UTF-8";.template-metadata[_ngcontent-%COMP%]{display:block}.template-metadata__form[_ngcontent-%COMP%]{padding:var(--gns3-density-card-padding);display:flex;flex-direction:column}.template-metadata__two-column-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 var(--gns3-density-space-4)}.template-metadata__field[_ngcontent-%COMP%]{width:100%}.template-metadata__field--full[_ngcontent-%COMP%]{grid-column:1/-1}.template-metadata__actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end}.template-metadata__remove-btn[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing)}.template-metadata__remove-btn[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-error);background-color:var(--mat-sys-error);--mat-button-filled-label-text-color: var(--mat-sys-on-error);--mat-button-filled-container-color: var(--mat-sys-error);--mat-button-filled-state-layer-color: var(--mat-sys-on-error)}@media(max-width:768px){.template-metadata__two-column-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}}'],changeDetection:0})}return n})();var ft=(()=>{class n{httpController;http;linksDataSource;constructor(e,t,i){this.httpController=e,this.http=t,this.linksDataSource=i}getNodeById(e,t,i){return this.httpController.get(e,`/projects/${t}/nodes/${i}`)}isolate(e,t){return this.httpController.post(e,`/projects/${t.project_id}/nodes/${t.node_id}/isolate`,{})}unisolate(e,t){return this.httpController.post(e,`/projects/${t.project_id}/nodes/${t.node_id}/unisolate`,{})}start(e,t){return this.httpController.post(e,`/projects/${t.project_id}/nodes/${t.node_id}/start`,{})}startAll(e,t){return this.httpController.post(e,`/projects/${t.project_id}/nodes/start`,{})}stop(e,t){return this.httpController.post(e,`/projects/${t.project_id}/nodes/${t.node_id}/stop`,{})}stopAll(e,t){return this.httpController.post(e,`/projects/${t.project_id}/nodes/stop`,{})}suspend(e,t){return this.httpController.post(e,`/projects/${t.project_id}/nodes/${t.node_id}/suspend`,{})}suspendAll(e,t){return this.httpController.post(e,`/projects/${t.project_id}/nodes/suspend`,{})}reload(e,t){return this.httpController.post(e,`/projects/${t.project_id}/nodes/${t.node_id}/reload`,{})}reloadAll(e,t){return this.httpController.post(e,`/projects/${t.project_id}/nodes/reload`,{})}resetAllNodes(e,t){return this.httpController.post(e,`/projects/${t.project_id}/nodes/console/reset`,{})}createFromTemplate(e,t,i,a,s,d){return d?this.httpController.post(e,`/projects/${t.project_id}/templates/${i.template_id}`,{x:Math.round(a),y:Math.round(s),compute_id:d}):this.httpController.post(e,`/projects/${t.project_id}/templates/${i.template_id}`,{x:Math.round(a),y:Math.round(s),compute_id:"local"})}updatePosition(e,t,i,a,s){let d=Math.round(a),p=Math.round(s);return t.snap_to_grid&&(d=Math.round((d+i.width/2)/t.grid_size)*t.grid_size,p=Math.round((p+i.height/2)/t.grid_size)*t.grid_size,d=Math.round(d-i.width/2),p=Math.round(p-i.height/2)),this.httpController.put(e,`/projects/${i.project_id}/nodes/${i.node_id}`,{x:d,y:p})}updateLabel(e,t,i){return this.httpController.put(e,`/projects/${t.project_id}/nodes/${t.node_id}`,{label:{rotation:i.rotation,style:i.style,text:i.text,x:Math.round(i.x),y:Math.round(i.y)}})}updateSymbol(e,t,i){return this.httpController.put(e,`/projects/${t.project_id}/nodes/${t.node_id}`,{symbol:i})}update(e,t){return this.httpController.put(e,`/projects/${t.project_id}/nodes/${t.node_id}`,{x:Math.round(t.x),y:Math.round(t.y),z:t.z})}updateNode(e,t,i){let a=this.validateConnectedPorts(t);return a?jo(()=>new Error(a)):this.httpController.put(e,`/projects/${t.project_id}/nodes/${t.node_id}`,ze(q(ze(q(q({},t.console_type?{console_type:t.console_type}:{}),t.aux_type?{aux_type:t.aux_type}:{}),{console_auto_start:t.console_auto_start,locked:t.locked}),i!==void 0?{custom_adapters:i}:{}),{name:t.name,properties:t.properties,tags:t.tags,netmiko_device_type:t.netmiko_device_type,default_username:t.default_username,default_password:t.default_password}))}updateNodeWithCustomAdapters(e,t){let i=(t.custom_adapters||[]).map(({adapter_number:a,adapter_type:s,port_name:d,mac_address:p})=>q(q({adapter_number:a,adapter_type:s},d!=null?{port_name:d}:{}),p!=null?{mac_address:p}:{}));return this.updateNode(e,t,i)}validateConnectedPorts(e,t=e.properties?.adapters){let i=e.properties;if(i){for(let a of this.linksDataSource.getItems())if(a.project_id===e.project_id)for(let s of a.nodes){if(s.node_id!==e.node_id)continue;let d=!1;if(t!==void 0)d=s.adapter_number>=t;else if(e.node_type==="iou"){let p=e.ports?.find(g=>g.adapter_number===s.adapter_number&&g.port_number===s.port_number),u=Math.min(...(e.ports||[]).filter(g=>g.link_type==="serial").map(g=>g.adapter_number));d=p?.link_type==="serial"?i.ethernet_adapters!==u||s.adapter_number>=i.ethernet_adapters+i.serial_adapters:s.adapter_number>=i.ethernet_adapters}else if(i.ports_mapping!==void 0){let p=i.ports_mapping[s.port_number];d=!p||["ethernet_switch","ethernet_hub"].includes(e.node_type)&&p.port_number!==s.port_number}if(d)return`Cannot remove connected adapter ${s.adapter_number}, port ${s.port_number}. Disconnect its links first.`}}}delete(e,t){return this.httpController.delete(e,`/projects/${t.project_id}/nodes/${t.node_id}`)}duplicate(e,t){return this.httpController.post(e,`/projects/${t.project_id}/nodes/${t.node_id}/duplicate`,{x:t.x+10,y:t.y+10,z:t.z})}getNode(e,t){return this.httpController.get(e,`/projects/${t.project_id}/nodes/${t.node_id}`)}getDefaultCommand(){return'putty.exe -telnet %h %p -wt "%d" -gns3 5 -skin 4'}uploadNodeFile(e,t,i,a,s){return this.httpController.post(e,`/projects/${t}/nodes/${i}/files/${encodeURIComponent(a)}`,s)}uploadNodeFileWithProgress(e,t,i,a,s){let p=`${e.protocol||location.protocol}//${e.host}:${e.port}/${zi.current_version}/projects/${t}/nodes/${i}/files/${encodeURIComponent(a)}`,u={};return e.authToken&&!e.tokenExpired&&(u.Authorization=`Bearer ${e.authToken}`),this.http.post(p,s,{headers:u,reportProgress:!0,observe:"events"}).pipe(Pt(g=>g.type===ag.UploadProgress?Math.round(100*g.loaded/(g.total||1)):g.type===ag.Response?100:0),ei(g=>{let C=g.error?.message||g.message||"Failed to upload file";return jo(()=>new Error(C))}))}getNodeFiles(e,t,i,a){let s=`/projects/${t}/nodes/${i}/files`,d=a?`?path=${encodeURIComponent(a)}`:"";return this.httpController.get(e,`${s}${d}`)}getNodeFilesRecursive(e,t,i){return this.httpController.get(e,`/projects/${t}/nodes/${i}/files?recursive=true`)}deleteNodeFile(e,t,i,a){return this.httpController.delete(e,`/projects/${t}/nodes/${i}/files/${encodeURIComponent(a)}`)}getNodeFileContent(e,t,i,a){return this.httpController.get(e,`/projects/${t}/nodes/${i}/files/${encodeURIComponent(a)}`,{responseType:"text"})}saveNodeFileContent(e,t,i,a,s){return this.httpController.post(e,`/projects/${t}/nodes/${i}/files/${encodeURIComponent(a)}`,s)}downloadNodeFile(e,t,i,a){return this.httpController.getBlob(e,`/projects/${t}/nodes/${i}/files/${encodeURIComponent(a)}`)}async streamNodeFileToFile(e,t,i,a,s,d){let u=`${e.protocol||location.protocol}//${e.host}:${e.port}/${zi.current_version}/projects/${t}/nodes/${i}/files/${encodeURIComponent(a)}`,g={};e.authToken&&!e.tokenExpired&&(g.Authorization=`Bearer ${e.authToken}`);let C=await fetch(u,{headers:g});if(!C.ok)throw new Error(`Download failed: ${C.status}`);let M=C.body.getReader(),x=await s.createWritable(),b=0;try{for(;;){let{done:P,value:k}=await M.read();if(P)break;await x.write(k),b+=k.length,d?.(b)}}finally{await x.close()}}getNetworkConfiguration(e,t){return this.httpController.get(e,`/projects/${t.project_id}/nodes/${t.node_id}/files/etc/network/interfaces`,{responseType:"text"})}saveNetworkConfiguration(e,t,i){return this.httpController.post(e,`/projects/${t.project_id}/nodes/${t.node_id}/files/etc/network/interfaces`,i)}getStartupConfiguration(e,t){let i=`/projects/${t.project_id}/nodes/${t.node_id}`;return t.node_type==="vpcs"?i+="/files/startup.vpc":t.node_type==="iou"?i+="/files/startup-config.cfg":t.node_type==="dynamips"&&(i+=`/files/configs/i${t.properties.dynamips_id}_startup-config.cfg`),this.httpController.get(e,i,{responseType:"text"})}getPrivateConfiguration(e,t){let i=`/projects/${t.project_id}/nodes/${t.node_id}`;return t.node_type==="iou"?i+="/files/private-config.cfg":t.node_type==="dynamips"&&(i+=`/files/configs/i${t.properties.dynamips_id}_private-config.cfg`),this.httpController.get(e,i,{responseType:"text"})}saveConfiguration(e,t,i){let a=`/projects/${t.project_id}/nodes/${t.node_id}`;return t.node_type==="vpcs"?a+="/files/startup.vpc":t.node_type==="iou"?a+="/files/startup-config.cfg":t.node_type==="dynamips"&&(a+=`/files/configs/i${t.properties.dynamips_id}_startup-config.cfg`),this.httpController.post(e,a,i)}savePrivateConfiguration(e,t,i){let a=`/projects/${t.project_id}/nodes/${t.node_id}`;return t.node_type==="iou"?a+="/files/private-config.cfg":t.node_type==="dynamips"&&(a+=`/files/configs/i${t.properties.dynamips_id}_private-config.cfg`),this.httpController.post(e,a,i)}getIdlePCProposals(e,t){return this.httpController.get(e,`/projects/${t.project_id}/nodes/${t.node_id}/dynamips/idlepc_proposals`)}getAutoIdlePC(e,t){return this.httpController.get(e,`/projects/${t.project_id}/nodes/${t.node_id}/dynamips/auto_idlepc`)}static \u0275fac=function(t){return new(t||n)(_e(sn),_e(us),_e(so))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Ese=(n,o)=>o.adapter_number;function Ose(n,o){n&1&&(r(0,"mat-error",21)(1,"mat-icon",23),c(2,"error_outline"),l(),r(3,"span"),c(4,"Invalid MAC address format"),l()())}function Dse(n,o){if(n&1){let e=R();r(0,"div",7)(1,"span",15),c(2),l(),r(3,"div",16)(4,"span",17),c(5,"Port name"),l(),r(6,"mat-form-field",18)(7,"input",19),_("input",function(i){let a=y(e).$implicit,s=h();return w(s.onPortNameChange(a.adapter_number,i.target.value))}),l()()(),r(8,"div",16)(9,"span",17),c(10,"MAC address"),l(),r(11,"mat-form-field",18)(12,"input",20),_("input",function(i){let a=y(e).$implicit,s=h();return w(s.onMacAddressChange(a.adapter_number,i.target.value))}),l(),T(13,Ose,5,0,"mat-error",21),l()(),r(14,"button",22),_("click",function(){let i=y(e).$implicit,a=h();return w(a.removeAdapter(i.adapter_number))}),r(15,"mat-icon"),c(16,"delete"),l()()()}if(n&2){let e=o.$implicit,t=o.$index,i=h();m(2),X("Adapter ",e.adapter_number),m(5),v("name",ka("port_name_",t))("placeholder",ka("eth",e.adapter_number))("value",e.port_name),Ce("aria-label","Port name for adapter "+e.adapter_number),m(5),v("name",ka("mac_address_",t))("value",e.mac_address),Ce("aria-label","MAC address for adapter "+e.adapter_number),m(),E(e.mac_address&&!i.isMacAddressValid(e.mac_address)?13:-1)}}function Ise(n,o){n&1&&L(0,"mat-spinner",14)}function Ase(n,o){n&1&&c(0," Apply ")}var hh=(()=>{class n{dialogRef=f(We);nodeService=f(ft);toasterService=f(re);validationService=f(Hn);cdr=f(oe);controller;node;saveHandler;validateAdapterCount;adapters=$([]);isApplying=z(!1);ngOnInit(){let e=this.adapters();e.length===0&&this.node?(this.node.custom_adapters?e.push(...this.node.custom_adapters.map(t=>ze(q({},t),{port_name:t.port_name||"",mac_address:t.mac_address||""}))):this.node.ports.forEach((t,i)=>{e.push({adapter_number:i,port_name:t?.name||"",mac_address:""})}),this.adapters.set(e)):e.length>0&&this.adapters.update(t=>t.map(i=>ze(q({},i),{port_name:i.port_name||"",mac_address:i.mac_address||""})))}onMacAddressChange(e,t){this.adapters.update(i=>i.map(a=>a.adapter_number===e?ze(q({},a),{mac_address:t}):a)),this.cdr.markForCheck()}onPortNameChange(e,t){this.adapters.update(i=>i.map(a=>a.adapter_number===e?ze(q({},a),{port_name:t}):a)),this.cdr.markForCheck()}addAdapter(){let e=this.adapters().reduce((t,i)=>Math.max(t,i.adapter_number),-1);this.adapters.update(t=>[...t,{adapter_number:e+1,port_name:"",mac_address:""}])}removeAdapter(e){this.adapters.update(t=>t.filter(i=>i.adapter_number!==e)),this.cdr.markForCheck()}isMacAddressValid(e){return this.validationService.validateMacAddress(e).isValid}hasInvalidMac(){return this.adapters().some(e=>e.mac_address&&!this.validationService.validateMacAddress(e.mac_address).isValid)}onSaveClick(){if(this.isApplying())return;if(this.hasInvalidMac()){this.toasterService.error("One or more MAC addresses are invalid (expected XX:XX:XX:XX:XX:XX)");return}let e=this.adapters().length;if(this.adapters().some((i,a)=>i.adapter_number!==a)){this.toasterService.error("Only adapters at the end can be removed. Removing adapters in the middle would renumber the remaining ports.");return}let t=this.validateAdapterCount?this.validateAdapterCount(e):this.node&&this.nodeService.validateConnectedPorts(this.node,e);if(t){this.toasterService.error(t);return}this.saveHandler?(this.saveHandler(this.adapters()),this.onCancelClick()):this.node&&(this.node.properties.adapters=e,this.node.custom_adapters=this.adapters().map(i=>ze(q({},i),{port_name:i.port_name||void 0,mac_address:i.mac_address||null})),this.isApplying.set(!0),this.dialogRef.disableClose=!0,this.nodeService.updateNodeWithCustomAdapters(this.controller,this.node).subscribe({next:()=>{this.onCancelClick(),this.toasterService.success(`Configuration saved for node ${this.node.name}`),this.cdr.markForCheck()},error:i=>{let a=i.error?.message||i.message||"Failed to update node with custom adapters";this.toasterService.error(a),this.isApplying.set(!1),this.dialogRef.disableClose=!1,this.cdr.markForCheck()}}))}onCancelClick(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-configure-custom-adapters"]],inputs:{adapters:[1,"adapters"]},outputs:{adapters:"adaptersChange"},decls:27,vars:3,consts:[["mat-dialog-title",""],["mat-dialog-content","",1,"content"],[1,"adapter-form"],[1,"adapter-header"],[1,"adapter-header-label"],[1,"adapter-header-field"],[1,"adapter-header-actions"],[1,"adapter-item"],[1,"add-adapter-row"],["mat-stroked-button","","color","primary","type","button",1,"add-btn",3,"click"],[1,"info-note-text","gns3-helper-text"],["mat-dialog-actions","","align","end"],["mat-button","",3,"click"],["mat-raised-button","","color","primary",3,"click","disabled"],["diameter","20"],[1,"adapter-label"],[1,"adapter-field-group"],[1,"adapter-field-label"],["appearance","outline","subscriptSizing","dynamic",1,"adapter-field"],["matInput","",3,"input","value","name","placeholder"],["matInput","","placeholder","XX:XX:XX:XX:XX:XX",3,"input","value","name"],[1,"gns3-validation-message"],["mat-icon-button","","matTooltip","Delete",1,"adapter-actions",3,"click"],["aria-hidden","true"]],template:function(t,i){t&1&&(r(0,"h1",0),c(1),l(),r(2,"div",1)(3,"div",2)(4,"div",3)(5,"span",4),c(6,"Adapter"),l(),r(7,"span",5),c(8,"Port name"),l(),r(9,"span",5),c(10,"MAC address"),l(),L(11,"span",6),l(),Q(12,Dse,17,12,"div",7,Ese),l(),r(14,"div",8)(15,"button",9),_("click",function(){return i.addAdapter()}),r(16,"mat-icon"),c(17,"add"),l(),c(18," Add adapter "),l(),r(19,"div",10),c(20," Port names label each adapter in the topology (the in-container interface stays eth0, eth1\u2026). Only unused adapters at the end can be removed. Remaining adapter numbers are preserved. "),l()()(),r(21,"div",11)(22,"button",12),_("click",function(){return i.onCancelClick()}),c(23,"Cancel"),l(),r(24,"button",13),_("click",function(){return i.onSaveClick()}),T(25,Ise,1,0,"mat-spinner",14)(26,Ase,1,0),l()()),t&2&&(m(),X("Configure custom adapters",i.node?" for node "+i.node.name:""),m(11),K(i.adapters()),m(12),v("disabled",i.isApplying()),m(),E(i.isApplying()?25:26))},dependencies:[fe,ke,qe,Qe,bt,Y,he,Be,ie,ce,st,pt,ye,Ee,Pe,Wn,we,rt,mt],styles:["[_nghost-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%] mat-form-field[_ngcontent-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%]{--gns3-adapter-columns: 100px 120px minmax(0, 1fr) var(--gns3-density-icon-button);display:block;min-width:0}.content[_ngcontent-%COMP%]{min-width:0;container:adapter-dialog/inline-size}.adapter-form[_ngcontent-%COMP%]{min-width:0}.adapter-header[_ngcontent-%COMP%], .adapter-item[_ngcontent-%COMP%]{display:grid;grid-template-columns:var(--gns3-adapter-columns);gap:var(--gns3-density-space-3);box-sizing:border-box;padding-inline:var(--gns3-density-space-4)}.adapter-header[_ngcontent-%COMP%]{border-inline:1px solid transparent}.adapter-item[_ngcontent-%COMP%]{align-items:start}.adapter-field-group[_ngcontent-%COMP%], .adapter-field[_ngcontent-%COMP%]{width:100%;min-width:0}.adapter-field-label[_ngcontent-%COMP%]{display:none;margin-bottom:var(--gns3-density-space-1);color:var(--mat-sys-on-surface-variant);font-size:13px;font-weight:500}.adapter-label[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;min-height:var(--gns3-density-form-field-height)}.adapter-header-actions[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button)}button.adapter-actions[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-icon-button)}button.adapter-actions[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}button.adapter-actions[_ngcontent-%COMP%]{margin-top:calc((var(--gns3-density-form-field-height) - var(--gns3-density-icon-button)) / 2)}@container adapter-dialog (max-width: 640px){.adapter-header[_ngcontent-%COMP%]{display:none}.adapter-item[_ngcontent-%COMP%]{grid-template-columns:minmax(0,1fr) var(--gns3-density-icon-button)}.adapter-label[_ngcontent-%COMP%]{grid-column:1;grid-row:1;justify-content:flex-start;min-height:var(--gns3-density-icon-button)}button.adapter-actions[_ngcontent-%COMP%]{grid-column:2;grid-row:1;margin-top:0}.adapter-field-group[_ngcontent-%COMP%]{grid-column:1/-1}.adapter-field[_ngcontent-%COMP%]{text-align:left}.adapter-field-label[_ngcontent-%COMP%]{display:block}.add-adapter-row[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:stretch;gap:var(--gns3-density-space-2)}.add-adapter-row[_ngcontent-%COMP%] .add-btn[_ngcontent-%COMP%]{margin-top:0}.info-note-text[_ngcontent-%COMP%]{min-width:0;overflow-wrap:anywhere}}.adapter-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-space-3);max-height:500px;overflow-y:auto}.adapter-item[_ngcontent-%COMP%]{padding-block:var(--gns3-density-space-3);background:var(--mat-sys-surface-container-lowest);border-radius:12px;border:1px solid color-mix(in srgb,var(--mat-sys-outline) 15%,transparent)}.adapter-item[_ngcontent-%COMP%]:hover{border-color:color-mix(in srgb,var(--mat-sys-primary) 30%,transparent)}.adapter-header[_ngcontent-%COMP%]{align-items:center;padding-block:var(--gns3-density-space-2);margin-bottom:8px;border-bottom:2px solid color-mix(in srgb,var(--mat-sys-outline) 30%,transparent);position:sticky;top:0;z-index:10;background:var(--mat-sys-surface)}.adapter-header-label[_ngcontent-%COMP%], .adapter-header-field[_ngcontent-%COMP%]{font-size:13px;font-weight:600;color:var(--mat-sys-on-surface-variant);text-transform:uppercase;letter-spacing:.5px;text-align:center}.adapter-field[_ngcontent-%COMP%]{margin:0}.adapter-field[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{font-size:16px}.adapter-label[_ngcontent-%COMP%]{font-size:16px;font-weight:500;color:var(--mat-sys-on-surface);text-align:center}.adapter-actions[_ngcontent-%COMP%]{margin:0}.add-adapter-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:var(--gns3-density-space-4);margin-top:var(--gns3-density-space-4)}.info-note-text[_ngcontent-%COMP%]{min-width:0;margin:0;padding:0}.add-btn[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing);flex-shrink:0;width:auto;margin:0}@media(max-width:700px){.add-adapter-row[_ngcontent-%COMP%]{grid-template-columns:1fr}}"],changeDetection:0})}return n})();function Nse(n,o){if(n&1&&(r(0,"mat-option",33),c(1),l()),n&2){let e=o.$implicit;v("value",e[1]),m(),N(e[0])}}function Fse(n,o){if(n&1){let e=R();r(0,"mat-chip-row",60),_("removed",function(){let i=y(e).$implicit,a=h(3);return w(a.removeTag(i))}),c(1),r(2,"button",61)(3,"mat-icon"),c(4,"cancel"),l()()()}if(n&2){let e=o.$implicit;v("editable",!1),Ce("title",e),m(),X(" ",e," "),m(),Ce("aria-label","Remove tag "+e)}}function Rse(n,o){if(n&1&&(r(0,"mat-option",33),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function zse(n,o){if(n&1&&(r(0,"mat-option",33),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function Lse(n,o){if(n&1&&(r(0,"mat-option",33),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function Vse(n,o){if(n&1){let e=R();r(0,"form",16)(1,"div",23)(2,"mat-form-field",24)(3,"mat-label"),c(4,"Template name"),l(),r(5,"input",25),_("input",function(i){y(e);let a=h(2);return w(a.name.set(i.target.value))}),l()(),r(6,"mat-form-field",24)(7,"mat-label"),c(8,"Default name format"),l(),r(9,"input",26),_("input",function(i){y(e);let a=h(2);return w(a.defaultNameFormat.set(i.target.value))}),l()()(),r(10,"div",27)(11,"mat-form-field",28)(12,"mat-label"),c(13,"Image"),l(),r(14,"input",29),_("input",function(i){y(e);let a=h(2);return w(a.image.set(i.target.value))}),l()(),r(15,"button",30),_("click",function(){y(e);let i=h(2);return w(i.pullImage())}),r(16,"mat-icon"),c(17,"cloud_download"),l(),c(18),l()(),r(19,"div",31)(20,"mat-form-field",28)(21,"mat-label"),c(22,"Category"),l(),r(23,"mat-select",32),_("selectionChange",function(i){y(e);let a=h(2);return w(a.category.set(i.value))}),Q(24,Nse,2,2,"mat-option",33,ni),l()(),r(26,"mat-form-field",34)(27,"mat-label"),c(28,"Symbol"),l(),r(29,"input",35),_("input",function(i){y(e);let a=h(2);return w(a.symbol.set(i.target.value))}),l()(),r(30,"button",36),_("click",function(){y(e);let i=h(2);return w(i.chooseSymbol())}),r(31,"mat-icon"),c(32,"add"),l(),c(33," Choose symbol "),l()(),r(34,"div",37)(35,"mat-form-field",38)(36,"mat-label"),c(37,"Tags"),l(),r(38,"input",39),_("matChipInputTokenEnd",function(i){y(e);let a=h(2);return w(a.addTag(i))}),l()(),r(39,"mat-chip-grid",40,0),Q(41,Fse,5,4,"mat-chip-row",41,Oe),l()(),r(43,"div",42)(44,"mat-form-field",24)(45,"mat-label"),c(46,"Adapters"),l(),r(47,"input",43),_("input",function(i){y(e);let a=h(2);return w(a.adaptersCount.set(+i.target.value))}),l()(),r(48,"mat-form-field",24)(49,"mat-label"),c(50,"Base MAC"),l(),r(51,"input",44),_("input",function(i){y(e);let a=h(2);return w(a.macAddress.set(i.target.value))}),l()(),r(52,"mat-form-field",24)(53,"mat-label"),c(54,"Maximum memory"),l(),r(55,"input",45),_("input",function(i){y(e);let a=h(2);return w(a.memory.set(i.target.value))}),l(),r(56,"span",46),c(57,"MB"),l()(),r(58,"mat-form-field",24)(59,"mat-label"),c(60,"Maximum CPUs"),l(),r(61,"input",47),_("input",function(i){y(e);let a=h(2);return w(a.cpus.set(i.target.value))}),l()(),r(62,"mat-form-field",24)(63,"mat-label"),c(64,"Console type"),l(),r(65,"mat-select",48),_("selectionChange",function(i){y(e);let a=h(2);return w(a.consoleType.set(i.value))}),Q(66,Rse,2,2,"mat-option",33,Oe),l()(),r(68,"mat-form-field",24)(69,"mat-label"),c(70,"Auxiliary console type"),l(),r(71,"mat-select",49),_("selectionChange",function(i){y(e);let a=h(2);return w(a.auxConsoleType.set(i.value))}),Q(72,zse,2,2,"mat-option",33,Oe),l()(),r(74,"mat-form-field",24)(75,"mat-label"),c(76,"VNC console resolution"),l(),r(77,"mat-select",50),_("selectionChange",function(i){y(e);let a=h(2);return w(a.consoleResolution.set(i.value))}),Q(78,Lse,2,2,"mat-option",33,Oe),l()(),r(80,"mat-form-field",24)(81,"mat-label"),c(82,"HTTP port in the container"),l(),r(83,"input",51),_("input",function(i){y(e);let a=h(2);return w(a.consoleHttpPort.set(i.target.value))}),l()(),r(84,"mat-form-field",52)(85,"mat-label"),c(86,"HTTP path"),l(),r(87,"input",53),_("input",function(i){y(e);let a=h(2);return w(a.consoleHttpPath.set(i.target.value))}),l()(),r(88,"div",54)(89,"app-netmiko-device-type-select",55),rn("valueChange",function(i){y(e);let a=h(2);return Xt(a.netmikoDeviceType,i)||(a.netmikoDeviceType=i),w(i)}),l(),r(90,"mat-form-field",24)(91,"mat-label"),c(92,"Default username"),l(),r(93,"input",56),_("input",function(i){y(e);let a=h(2);return w(a.onCredentialInput("default_username",i))}),l()(),r(94,"mat-form-field",24)(95,"mat-label"),c(96,"Default password"),l(),r(97,"input",57),_("input",function(i){y(e);let a=h(2);return w(a.onCredentialInput("default_password",i))}),l()()(),r(98,"mat-checkbox",58),_("change",function(i){y(e);let a=h(2);return w(a.consoleAutoStart.set(i.checked))}),c(99," Auto start console "),l()(),r(100,"button",59),_("click",function(){y(e);let i=h(2);return w(i.editCustomAdapters())}),c(101," Configure custom adapters "),l()()}if(n&2){let e=Te(40),t=h(2);m(5),v("value",t.name()),m(4),v("value",t.defaultNameFormat()),m(5),v("value",t.image()),m(),v("disabled",t.isPulling()||!t.image().trim()),m(3),X(" ",t.isPulling()?"Pulling\u2026":"Pull image"," "),m(5),v("value",t.category()),m(),K(t.categories),m(5),v("value",t.symbol()),m(9),v("matChipInputFor",e)("matChipInputSeparatorKeyCodes",t.separatorKeysCodes),m(),ne("gns3-chip-field__values--empty",t.tags().length===0),m(2),K(t.tags()),m(6),v("value",t.adaptersCount()),m(4),v("value",t.macAddress()),m(4),v("value",t.memory()),m(6),v("value",t.cpus()),m(4),v("value",t.consoleType()),m(),K(t.consoleTypes),m(5),v("value",t.auxConsoleType()),m(),K(t.auxConsoleTypes),m(5),v("value",t.consoleResolution()),m(),K(t.consoleResolutions),m(5),v("value",t.consoleHttpPort()),m(4),v("value",t.consoleHttpPath()),m(2),an("value",t.netmikoDeviceType),v("controller",t.controller),m(4),v("value",t.defaultUsername()),m(4),v("value",t.defaultPassword()),m(),v("checked",t.consoleAutoStart())}}function Bse(n,o){if(n&1){let e=R();r(0,"div",16)(1,"h6",62),c(2,"Start command"),l(),r(3,"mat-form-field",28)(4,"textarea",63),_("input",function(i){y(e);let a=h(2);return w(a.startCommand.set(i.target.value))}),l()(),r(5,"h6",62),c(6,"Environment"),l(),r(7,"mat-form-field",28)(8,"textarea",64),_("input",function(i){y(e);let a=h(2);return w(a.environment.set(i.target.value))}),l()(),r(9,"h6",62),c(10,"Extra volumes"),l(),r(11,"mat-form-field",28)(12,"textarea",65),_("input",function(i){y(e);let a=h(2);return w(a.extraVolumes.set(i.target.value))}),l()(),r(13,"h6",62),c(14,"Extra hosts"),l(),r(15,"mat-form-field",28)(16,"textarea",66),_("input",function(i){y(e);let a=h(2);return w(a.extraHosts.set(i.target.value))}),l()()()}if(n&2){let e=h(2);m(4),v("value",e.startCommand()),m(4),v("value",e.environment()),m(4),v("value",e.extraVolumes()),m(4),v("value",e.extraHosts())}}function jse(n,o){if(n&1){let e=R();r(0,"mat-form-field",28)(1,"mat-label"),c(2,"Container target path"),l(),r(3,"input",68),_("input",function(i){let a=y(e).$index,s=h(3);return w(s.updateExtraConfigTarget(a,i.target.value))}),l(),r(4,"button",69),_("click",function(){let i=y(e).$index,a=h(3);return w(a.removeExtraConfig(i))}),r(5,"mat-icon"),c(6,"delete"),l()()(),r(7,"mat-form-field",28)(8,"mat-label"),c(9,"File content"),l(),r(10,"textarea",70),_("input",function(i){let a=y(e).$index,s=h(3);return w(s.updateExtraConfigContent(a,i.target.value))}),l()()}if(n&2){let e=o.$implicit;m(3),v("value",e.target),m(7),v("value",e.content||"")}}function $se(n,o){if(n&1){let e=R();r(0,"div",16)(1,"h6",62),c(2,"Configuration files"),l(),Q(3,jse,11,2,null,null,ni),r(5,"button",67),_("click",function(){y(e);let i=h(2);return w(i.addExtraConfig())}),r(6,"mat-icon"),c(7,"add"),l(),c(8," Add configuration file "),l()()}if(n&2){let e=h(2);m(3),K(e.extraConfigs())}}function Hse(n,o){if(n&1){let e=R();r(0,"div",17)(1,"mat-form-field",71)(2,"mat-label"),c(3,"Usage"),l(),r(4,"textarea",72),_("input",function(i){y(e);let a=h(2);return w(a.usage.set(i.target.value))}),l()()()}if(n&2){let e=h(2);m(4),v("value",e.usage())}}function Use(n,o){if(n&1){let e=R();r(0,"app-template-metadata-section",73),rn("metadataChange",function(i){y(e);let a=h(2);return Xt(a.applianceMetadata,i)||(a.applianceMetadata=i),w(i)}),l()}if(n&2){let e=h(2);an("metadata",e.applianceMetadata)}}function Wse(n,o){if(n&1){let e=R();r(0,"main",9)(1,"nav",10)(2,"button",11),_("click",function(){y(e);let i=h();return w(i.selectSection("general"))}),c(3," General settings "),l(),r(4,"button",11),_("click",function(){y(e);let i=h();return w(i.selectSection("advanced"))}),c(5," Advanced "),l(),r(6,"button",11),_("click",function(){y(e);let i=h();return w(i.selectSection("extraFiles"))}),c(7," Extra files "),l(),r(8,"button",11),_("click",function(){y(e);let i=h();return w(i.selectSection("usage"))}),c(9," Usage "),l(),r(10,"button",11),_("click",function(){y(e);let i=h();return w(i.selectSection("metadata"))}),c(11," Metadata "),l()(),r(12,"section",12)(13,"div",13),_("click",function(){y(e);let i=h();return w(i.toggleSection("general"))}),r(14,"h3",14),c(15,"General settings"),l(),r(16,"mat-icon",15),c(17),l()(),T(18,Vse,102,25,"form",16),l(),r(19,"section",12)(20,"div",13),_("click",function(){y(e);let i=h();return w(i.toggleSection("advanced"))}),r(21,"h3",14),c(22,"Advanced"),l(),r(23,"mat-icon",15),c(24),l()(),T(25,Bse,17,4,"div",16),l(),r(26,"section",12)(27,"div",13),_("click",function(){y(e);let i=h();return w(i.selectSection("extraFiles"))}),r(28,"h3",14),c(29,"Extra files"),l(),r(30,"mat-icon",15),c(31),l()(),T(32,$se,9,0,"div",16),l(),r(33,"section",12)(34,"div",13),_("click",function(){y(e);let i=h();return w(i.toggleSection("usage"))}),r(35,"h3",14),c(36,"Usage"),l(),r(37,"mat-icon",15),c(38),l()(),T(39,Hse,5,1,"div",17),l(),r(40,"section",12)(41,"div",18)(42,"h3",14),c(43,"Appliance metadata"),l()(),T(44,Use,1,1,"app-template-metadata-section",19),l(),r(45,"div",20)(46,"button",21),_("click",function(){y(e);let i=h();return w(i.goBack())}),c(47,"Cancel"),l(),r(48,"button",22),_("click",function(){y(e);let i=h();return w(i.onSave())}),c(49,"Save"),l()()()}if(n&2){let e=h();m(2),ne("is-active",e.activeSection==="general"),m(2),ne("is-active",e.activeSection==="advanced"),m(2),ne("is-active",e.activeSection==="extraFiles"),m(2),ne("is-active",e.activeSection==="usage"),m(2),ne("is-active",e.activeSection==="metadata"),m(7),N(e.generalSettingsExpanded?"expand_less":"expand_more"),m(),E(e.activeSection==="general"?18:-1),m(6),N(e.advancedExpanded?"expand_less":"expand_more"),m(),E(e.activeSection==="advanced"?25:-1),m(6),N(e.activeSection==="extraFiles"?"expand_less":"expand_more"),m(),E(e.activeSection==="extraFiles"?32:-1),m(6),N(e.usageExpanded?"expand_less":"expand_more"),m(),E(e.activeSection==="usage"?39:-1),m(5),E(e.activeSection==="metadata"?44:-1)}}var Z1=(()=>{class n{route=f($t);controllerService=f(_t);dockerService=f(td);toasterService=f(re);validationService=f(sv);configurationService=f(qm);router=f(Ft);location=f(ki);cd=f(oe);dialog=f(Xe);dialogConfig=f(yo);controller;dockerTemplate;separatorKeysCodes=[13,188];generalSettingsExpanded=!1;advancedExpanded=!1;usageExpanded=!1;activeSection="general";consoleTypes=[];auxConsoleTypes=[];consoleResolutions=[];categories=[];displayedColumns=["adapter_number","port_name"];name=$("");defaultNameFormat=$("");category=$("");symbol=$("");tags=$([]);image=$("");startCommand=$("");macAddress=$("");adaptersCount=$(0);memory=$(0);cpus=$(0);consoleType=$("");auxConsoleType=$("");consoleAutoStart=$(!1);consoleResolution=$("");consoleHttpPort=$(0);consoleHttpPath=$("");environment=$("");extraHosts=$("");extraVolumes=$("");extraConfigs=z([]);usage=$("");netmikoDeviceType=$("");applianceMetadata=z(null);defaultUsername=Ne(()=>rs(this.applianceMetadata(),"default_username"));defaultPassword=Ne(()=>rs(this.applianceMetadata(),"default_password"));isPulling=z(!1);constructor(){}ngOnInit(){let e=this.route.snapshot.paramMap.get("controller_id"),t=this.route.snapshot.paramMap.get("template_id");this.controllerService.get(parseInt(e,10)).then(i=>{this.controller=i,this.cd.markForCheck(),this.getConfiguration(),this.dockerService.getTemplate(this.controller,t).subscribe({next:a=>{this.dockerTemplate=a,this.name.set(a.name||""),this.defaultNameFormat.set(a.default_name_format||""),this.category.set(a.category||""),this.symbol.set(a.symbol||""),this.tags.set(a.tags||[]),this.image.set(a.image||""),this.startCommand.set(a.start_command||""),this.macAddress.set(a.mac_address||""),this.adaptersCount.set(a.adapters||0),this.consoleType.set(a.console_type||""),this.auxConsoleType.set(a.aux_type||""),this.consoleAutoStart.set(a.console_auto_start||!1),this.consoleResolution.set(a.console_resolution||""),this.consoleHttpPort.set(a.console_http_port||0),this.consoleHttpPath.set(a.console_http_path||""),this.memory.set(a.memory||0),this.cpus.set(a.cpus||0),this.environment.set(a.environment||""),this.extraHosts.set(a.extra_hosts||""),this.extraVolumes.set((a.extra_volumes||[]).join(`
|
||
`)),this.extraConfigs.set((a.extra_configs||[]).map(s=>({target:s.target||"",content:s.content??""}))),this.usage.set(a.usage||""),this.netmikoDeviceType.set(a.netmiko_device_type||""),this.applianceMetadata.set(a.appliance_metadata??null),this.cd.markForCheck()},error:a=>{let s=a.error?.message||a.message||"Failed to load template";this.toasterService.error(s),this.cd.markForCheck()}})},i=>{let a=i.error?.message||i.message||"Failed to load controller";this.toasterService.error(a),this.cd.markForCheck()})}getConfiguration(){this.consoleTypes=this.configurationService.getConsoleTypes(),this.auxConsoleTypes=this.configurationService.getAuxConsoleTypes(),this.categories=this.configurationService.getCategories(),this.consoleResolutions=this.configurationService.getConsoleResolutions()}goBack(){ji(this.location,this.router,["/controller",this.controller.id,"preferences"])}toggleSection(e){switch(e){case"general":this.generalSettingsExpanded=!this.generalSettingsExpanded;break;case"advanced":this.advancedExpanded=!this.advancedExpanded;break;case"usage":this.usageExpanded=!this.usageExpanded;break}}onCredentialInput(e,t){let i=t.target.value;this.applianceMetadata.set(nd(this.applianceMetadata(),e,i))}selectSection(e){this.activeSection=e}onSave(){let e=this.validationService.validateName(this.name());if(!e.isValid){this.toasterService.error(e.errorMessage||"Name is required");return}if(!this.validationService.validateName(this.image()).isValid){this.toasterService.error("Image is required");return}let i=this.validationService.validateAdapters(this.adaptersCount().toString(),100);if(!i.isValid){this.toasterService.error(i.errorMessage);return}let a=this.validationService.validateMacAddress(this.macAddress());if(!a.isValid){this.toasterService.error(a.errorMessage);return}let s=this.validationService.validateMemory(this.memory().toString());if(!s.isValid){this.toasterService.error(s.errorMessage);return}let d=this.validationService.validateCpus(this.cpus().toString());if(!d.isValid){this.toasterService.error(d.errorMessage);return}if(this.consoleHttpPort()){let M=this.validationService.validateConsoleHttpPort(this.consoleHttpPort().toString());if(!M.isValid){this.toasterService.error(M.errorMessage||"Console HTTP port must be between 1 and 65535");return}}let p=this.validationService.validateEnvironment(this.environment(),"Advanced > Environment");if(!p.isValid){this.toasterService.error(p.errorMessage);return}let u=this.validationService.validateExtraConfigs(this.extraConfigs());if(!u.isValid){this.toasterService.error(u.errorMessage);return}let g=this.validationService.validateNetmikoDeviceType(this.netmikoDeviceType());if(!g.isValid){this.toasterService.error(g.errorMessage);return}this.dockerTemplate.name=this.name(),this.dockerTemplate.default_name_format=this.defaultNameFormat(),this.dockerTemplate.category=this.category(),this.dockerTemplate.symbol=this.symbol(),this.dockerTemplate.tags=this.tags(),this.dockerTemplate.image=this.image(),this.dockerTemplate.start_command=this.startCommand(),this.dockerTemplate.mac_address=this.macAddress(),this.dockerTemplate.adapters=this.adaptersCount(),this.dockerTemplate.console_type=this.consoleType(),this.dockerTemplate.aux_type=this.auxConsoleType(),this.dockerTemplate.console_auto_start=this.consoleAutoStart(),this.dockerTemplate.console_resolution=this.consoleResolution(),this.dockerTemplate.console_http_port=this.consoleHttpPort(),this.dockerTemplate.console_http_path=this.consoleHttpPath(),this.dockerTemplate.memory=this.memory(),this.dockerTemplate.cpus=this.cpus(),this.dockerTemplate.environment=this.environment(),this.dockerTemplate.extra_hosts=this.extraHosts(),this.dockerTemplate.extra_volumes=this.extraVolumes()?this.extraVolumes().split(`
|
||
`).filter(M=>M.trim()):[];let C=this.extraConfigs().filter(M=>(M.target||"").trim()).map(M=>({target:M.target.trim(),content:M.content??""}));this.dockerTemplate.extra_configs=C,this.extraConfigs.set(C),this.dockerTemplate.usage=this.usage(),this.dockerTemplate.netmiko_device_type=this.netmikoDeviceType().trim()||null,this.dockerTemplate.appliance_metadata=this.applianceMetadata(),this.dockerService.saveTemplate(this.controller,this.dockerTemplate).subscribe({next:()=>{this.toasterService.success("Changes saved"),this.goBack()},error:M=>{let x=M.error?.message||M.message||"Failed to save template";this.toasterService.error(x),this.cd.markForCheck()}})}pullImage(){let e=this.image().trim();!e||this.isPulling()||(this.isPulling.set(!0),this.dockerService.pullImage(this.controller,e,this.dockerTemplate.compute_id).pipe(ig(()=>{this.isPulling.set(!1),this.cd.markForCheck()})).subscribe({next:()=>{this.toasterService.success(`Docker image '${e}' updated`)},error:t=>{let i=t.error?.message||t.message||`Failed to pull Docker image '${e}'`;this.toasterService.error(i)}}))}editCustomAdapters(){let e=Array.from({length:this.adaptersCount()},(s,d)=>q({adapter_number:d,port_name:"",adapter_type:""},this.dockerTemplate.custom_adapters?.find(p=>p.adapter_number===d))),t=this.dialogConfig.openConfig("base",{autoFocus:!1,panelClass:["base-dialog-panel","docker-configurator-dialog-panel","dialog-extra-large-panel"],disableClose:!0,data:{}});t.data={};let a=this.dialog.open(hh,ze(q({},t),{data:{}})).componentInstance;a.adapters.set(e),a.saveHandler=s=>{this.dockerTemplate.custom_adapters=s.map(d=>ze(q({},d),{port_name:d.port_name||void 0,mac_address:d.mac_address||null})),this.adaptersCount.set(s.length)}}chooseSymbol(){let e=this.dialogConfig.openConfig("templateSymbol",{autoFocus:!1,disableClose:!1,data:{controller:this.controller,symbol:this.symbol()}});this.dialog.open(rr,e).afterClosed().subscribe(i=>{i&&this.symbol.set(i)})}addExtraConfig(){this.extraConfigs.update(e=>[...e,{target:"",content:""}])}removeExtraConfig(e){this.extraConfigs.update(t=>t.filter((i,a)=>a!==e))}updateExtraConfigTarget(e,t){this.extraConfigs.update(i=>i.map((a,s)=>s===e?ze(q({},a),{target:t}):a))}updateExtraConfigContent(e,t){this.extraConfigs.update(i=>i.map((a,s)=>s===e?ze(q({},a),{content:t}):a))}addTag(e){let t=(e.value||"").trim();t&&this.dockerTemplate&&(this.dockerTemplate.tags||(this.dockerTemplate.tags=[]),this.dockerTemplate.tags.push(t)),e.chipInput&&e.chipInput.clear()}removeTag(e){if(!this.dockerTemplate.tags)return;let t=this.dockerTemplate.tags.indexOf(e);t>=0&&this.dockerTemplate.tags.splice(t,1)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-docker-template-details"]],inputs:{name:[1,"name"],defaultNameFormat:[1,"defaultNameFormat"],category:[1,"category"],symbol:[1,"symbol"],tags:[1,"tags"],image:[1,"image"],startCommand:[1,"startCommand"],macAddress:[1,"macAddress"],adaptersCount:[1,"adaptersCount"],memory:[1,"memory"],cpus:[1,"cpus"],consoleType:[1,"consoleType"],auxConsoleType:[1,"auxConsoleType"],consoleAutoStart:[1,"consoleAutoStart"],consoleResolution:[1,"consoleResolution"],consoleHttpPort:[1,"consoleHttpPort"],consoleHttpPath:[1,"consoleHttpPath"],environment:[1,"environment"],extraHosts:[1,"extraHosts"],extraVolumes:[1,"extraVolumes"],usage:[1,"usage"],netmikoDeviceType:[1,"netmikoDeviceType"]},outputs:{name:"nameChange",defaultNameFormat:"defaultNameFormatChange",category:"categoryChange",symbol:"symbolChange",tags:"tagsChange",image:"imageChange",startCommand:"startCommandChange",macAddress:"macAddressChange",adaptersCount:"adaptersCountChange",memory:"memoryChange",cpus:"cpusChange",consoleType:"consoleTypeChange",auxConsoleType:"auxConsoleTypeChange",consoleAutoStart:"consoleAutoStartChange",consoleResolution:"consoleResolutionChange",consoleHttpPort:"consoleHttpPortChange",consoleHttpPath:"consoleHttpPathChange",environment:"environmentChange",extraHosts:"extraHostsChange",extraVolumes:"extraVolumesChange",usage:"usageChange",netmikoDeviceType:"netmikoDeviceTypeChange"},decls:17,vars:1,consts:[["chipList",""],[1,"docker-details"],[1,"docker-details__header"],[1,"docker-details__heading-row"],[1,"docker-details__breadcrumb"],["type","button","mat-button","",3,"click"],[1,"docker-details__title"],[1,"docker-details__header-actions"],["type","button","mat-raised-button","","color","primary",3,"click"],[1,"docker-details__content"],["aria-label","Template settings",1,"template-edit-tabs"],["type","button",3,"click"],[1,"docker-details__form-card"],[1,"docker-details__section-header",3,"click"],[1,"docker-details__section-title"],[1,"docker-details__expand-icon"],[1,"form-container"],[1,"preferences__usage-form"],[1,"docker-details__section-header"],[3,"metadata"],[1,"docker-details__actions"],["mat-button","",1,"docker-details__cancel-btn",3,"click"],["mat-raised-button","","color","primary",1,"docker-details__save-btn",3,"click"],[1,"two-column-grid","gns3-form-layout-fixed"],["appearance","outline","subscriptSizing","fixed",1,"form-field"],["matInput","","type","text","placeholder","Template name",3,"input","value"],["matInput","","type","text","placeholder","Default name format",3,"input","value"],[1,"docker-details__image-row"],["appearance","outline","subscriptSizing","dynamic",1,"form-field"],["matInput","","type","text","placeholder","Docker image name",3,"input","value"],["mat-raised-button","","color","primary","type","button",1,"docker-details__pull-btn",3,"click","disabled"],[1,"docker-details__symbol-row"],["placeholder","Category",3,"selectionChange","value"],[3,"value"],["appearance","outline","subscriptSizing","dynamic",1,"form-field","form-field--flex"],["matInput","","type","text","placeholder","Symbol",3,"input","value"],["mat-raised-button","","color","primary",1,"docker-details__symbol-btn",3,"click"],[1,"gns3-chip-field"],["floatLabel","always","appearance","outline","subscriptSizing","dynamic",1,"form-field"],["matInput","","placeholder","Add tags",3,"matChipInputTokenEnd","matChipInputFor","matChipInputSeparatorKeyCodes"],["aria-label","Tags",1,"gns3-chip-field__values"],[3,"editable"],[1,"two-column-grid"],["matInput","","type","text","placeholder","Adapters",3,"input","value"],["matInput","","type","text","placeholder","Base MAC",3,"input","value"],["matInput","","type","text","min","0","placeholder","Memory",3,"input","value"],["matSuffix",""],["matInput","","type","text","min","0","placeholder","CPUs",3,"input","value"],["placeholder","Console type",3,"selectionChange","value"],["placeholder","Auxiliary console type",3,"selectionChange","value"],["placeholder","VNC console resolution",3,"selectionChange","value"],["matInput","","type","text","placeholder","HTTP port in the container",3,"input","value"],["appearance","outline","subscriptSizing","fixed",1,"form-field","grid-span-2"],["matInput","","type","text","placeholder","HTTP path",3,"input","value"],[1,"three-column-grid","grid-span-2"],["subscriptSizing","fixed","appearance","outline",1,"form-field",3,"valueChange","value","controller"],["matInput","","type","text","placeholder","Username to log into this node",3,"input","value"],["matInput","","type","text","placeholder","Password to log into this node",3,"input","value"],[1,"grid-span-2",3,"change","checked"],["mat-raised-button","","color","primary",1,"docker-details__config-btn",3,"click"],[3,"removed","editable"],["matChipRemove","","type","button"],[1,"docker-details__section-subtitle"],["matInput","","rows","1","cdkTextareaAutosize","","cdkAutosizeMinRows","1","cdkAutosizeMaxRows","12","type","text","placeholder",'Command to run when the container starts (overrides image default CMD). E.g., python app.py, nginx -g "daemon off;"',3,"input","value"],["matInput","","rows","1","cdkTextareaAutosize","","cdkAutosizeMinRows","1","cdkAutosizeMaxRows","12","type","text","placeholder","Environment variables (one per line, KEY=VALUE format). Supports: %vm-name%, %vm-id%, %project-id%, %project-path%",3,"input","value"],["matInput","","rows","1","cdkTextareaAutosize","","cdkAutosizeMinRows","1","cdkAutosizeMaxRows","12","type","text","placeholder","Container directories to persist, one per line (e.g., /data/config)",3,"input","value"],["matInput","","rows","1","cdkTextareaAutosize","","cdkAutosizeMinRows","1","cdkAutosizeMaxRows","12","type","text","placeholder","Hostname to IP mappings, one per line (e.g., gns3.com:192.168.100.10)",3,"input","value"],["mat-raised-button","","color","primary","type","button",1,"docker-details__extra-config-btn",3,"click"],["matInput","","type","text","placeholder","/first_boot.cfg",3,"input","value"],["matSuffix","","mat-icon-button","","type","button","aria-label","Remove configuration file",3,"click"],["matInput","","rows","1","cdkTextareaAutosize","","cdkAutosizeMinRows","1","cdkAutosizeMaxRows","12","placeholder","File contents injected (read-only) into the container at the target path",3,"input","value"],["appearance","outline","subscriptSizing","dynamic",1,"preferences__usage-field--full"],["matInput","","rows","1","cdkTextareaAutosize","","cdkAutosizeMinRows","1","cdkAutosizeMaxRows","12","type","text",3,"input","value"],[3,"metadataChange","metadata"]],template:function(t,i){t&1&&(r(0,"div",1)(1,"header",2)(2,"div",3)(3,"div")(4,"div",4)(5,"button",5),_("click",function(){return i.goBack()}),c(6,"Templates"),l(),r(7,"mat-icon"),c(8,"chevron_right"),l(),r(9,"span"),c(10,"Edit"),l()(),r(11,"h1",6),c(12,"Edit template"),l()(),r(13,"div",7)(14,"button",8),_("click",function(){return i.goBack()}),c(15,"Back to templates"),l()()()(),T(16,Wse,50,19,"main",9),l()),t&2&&(m(16),E(i.dockerTemplate?16:-1))},dependencies:[fe,St,Ct,vt,Ji,vn,ie,ce,Y,he,Be,id,we,Pe,Ve,oi,ye,Ee,Xc,ot,ct,nt,ri,bi,xi,hi,fi,Rt,Gt,po],styles:["[_nghost-%COMP%]{display:block;width:100%;background:transparent}.docker-details__header[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:32px 20px 16px;display:flex;align-items:center;gap:var(--gns3-density-card-gap);animation:none}.docker-details__back-btn[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:12px;color:var(--mat-sys-on-surface);transition:all var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1)}.docker-details__back-btn[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 8%,transparent)}.docker-details__title[_ngcontent-%COMP%]{flex:1;font-size:28px;font-weight:500;color:var(--mat-sys-on-surface);margin:0}.docker-details__content[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:0 20px 20px;animation:none}.docker-details--hidden[_ngcontent-%COMP%]{opacity:.5;pointer-events:none}.docker-details__form-card[_ngcontent-%COMP%]{background:var(--mat-sys-surface);border-radius:16px;overflow:hidden;box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 20%,transparent),0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent);margin-bottom:var(--gns3-density-card-gap)}.docker-details__section-header[_ngcontent-%COMP%]{padding:var(--gns3-density-section-header-padding);display:flex;align-items:center;justify-content:space-between;cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline) 30%,transparent)}.docker-details__section-header[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 5%,transparent)}.docker-details__section-title[_ngcontent-%COMP%]{margin:0;font-size:16px;font-weight:500;color:var(--mat-sys-on-surface-variant)}.docker-details__expand-icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);transition:transform var(--gns3-motion-duration-standard) ease}.docker-details__form[_ngcontent-%COMP%], .form-container[_ngcontent-%COMP%]{padding:var(--gns3-density-card-padding) var(--gns3-density-card-padding) 24px;display:flex;flex-direction:column;gap:var(--gns3-density-card-gap)}.docker-details__form[_ngcontent-%COMP%] .two-column-grid[_ngcontent-%COMP%], .form-container[_ngcontent-%COMP%] .two-column-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:var(--gns3-density-card-gap)}.docker-details__form[_ngcontent-%COMP%] .two-column-grid[_ngcontent-%COMP%] .grid-span-2[_ngcontent-%COMP%], .form-container[_ngcontent-%COMP%] .two-column-grid[_ngcontent-%COMP%] .grid-span-2[_ngcontent-%COMP%]{grid-column:1/-1}.docker-details__form[_ngcontent-%COMP%] .three-column-grid[_ngcontent-%COMP%], .form-container[_ngcontent-%COMP%] .three-column-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;align-items:start}.docker-details__field[_ngcontent-%COMP%], .form-field[_ngcontent-%COMP%]{width:100%}.docker-details__field--flex[_ngcontent-%COMP%]{flex:1}.docker-details__field--full[_ngcontent-%COMP%]{width:100%;padding:0}.docker-details__symbol-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap)}.docker-details__symbol-row[_ngcontent-%COMP%] .form-field[_ngcontent-%COMP%]{flex:1}.docker-details__image-row[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:var(--gns3-density-card-gap)}.docker-details__image-row[_ngcontent-%COMP%] .form-field[_ngcontent-%COMP%]{flex:1}.docker-details__image-row[_ngcontent-%COMP%] .docker-details__pull-btn[_ngcontent-%COMP%]{white-space:nowrap}.docker-details__symbol-btn[_ngcontent-%COMP%]{align-self:stretch;white-space:nowrap}.docker-details__section-subtitle[_ngcontent-%COMP%]{font-size:12px;font-weight:600;color:var(--mat-sys-on-surface-variant);text-transform:uppercase;letter-spacing:.5px;margin:var(--gns3-density-space-2) 0}.docker-details__checkbox[_ngcontent-%COMP%]{margin-top:var(--gns3-density-space-2)}.docker-details__actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:var(--gns3-density-space-3);margin-top:var(--gns3-density-space-5)}.docker-details__cancel-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none}.docker-details__save-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none;letter-spacing:.5px}@media(max-width:768px){.docker-details__header[_ngcontent-%COMP%]{padding:24px 16px 12px;gap:12px}.docker-details__back-btn[_ngcontent-%COMP%]{width:44px;height:44px}.docker-details__title[_ngcontent-%COMP%]{font-size:22px}.docker-details__content[_ngcontent-%COMP%]{padding:0 16px 16px}.docker-details__section-header[_ngcontent-%COMP%]{padding:12px 16px}.docker-details__form[_ngcontent-%COMP%], .form-container[_ngcontent-%COMP%]{padding:16px}.docker-details__symbol-row[_ngcontent-%COMP%], .docker-details__image-row[_ngcontent-%COMP%]{flex-direction:column}.docker-details__pull-btn[_ngcontent-%COMP%], .docker-details__symbol-btn[_ngcontent-%COMP%]{width:100%}.docker-details__actions[_ngcontent-%COMP%]{flex-direction:column}.docker-details__cancel-btn[_ngcontent-%COMP%], .docker-details__save-btn[_ngcontent-%COMP%]{width:100%;height:44px}}",'[_nghost-%COMP%]{display:block;width:100%;background:transparent}.templates-page__content[_ngcontent-%COMP%]{animation:none}.templates-page__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:20px;max-width:1600px;margin:0 auto;padding:24px 20px 16px}.templates-page__heading[_ngcontent-%COMP%], .templates-page__header-actions[_ngcontent-%COMP%]{display:flex;align-items:center}.templates-page__heading[_ngcontent-%COMP%]{min-width:0;gap:var(--gns3-density-space-3)}.templates-page__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.templates-page__header-actions[_ngcontent-%COMP%]{gap:var(--gns3-density-space-3)}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);border-radius:12px;padding-inline:18px;font-size:15px;font-weight:500;letter-spacing:.3px;text-transform:none}[class*=-templates__header][_ngcontent-%COMP%]{box-sizing:border-box;width:100%;height:calc(var(--gns3-density-space-4) * 2 + (var(--gns3-density-section-title-size) + 2px) * 1.2 + 1px);max-width:none;margin:0;padding:0 var(--gns3-density-page-padding);gap:var(--gns3-density-space-3);color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container);border-bottom:1px solid var(--mat-sys-outline-variant)}[class*=-templates__back-btn][_ngcontent-%COMP%], [class*=-templates__add-btn][_ngcontent-%COMP%]{flex:0 0 auto;width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:12px}[class*=-templates__back-btn][_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container)}[class*=-templates__add-btn][_ngcontent-%COMP%]{color:var(--mat-sys-primary)}[class*=-templates__title][_ngcontent-%COMP%]{flex:1;min-width:0;margin:0;padding-bottom:0;color:var(--mat-sys-on-primary-container);font-size:calc(var(--gns3-density-section-title-size) + 2px);font-weight:650;line-height:1.2;letter-spacing:-.01em}.templates-page__scopes[_ngcontent-%COMP%]{display:flex;gap:4px;max-width:1560px;margin:0 auto 16px;padding:0 20px;border-bottom:1px solid var(--mat-sys-outline-variant)}.templates-page__scope[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center;gap:8px;min-height:48px;padding:0 16px;border:0;color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;font-size:14px;font-weight:550;cursor:pointer}.templates-page__scope[_ngcontent-%COMP%]:after{position:absolute;right:8px;bottom:-1px;left:8px;height:2px;border-radius:2px 2px 0 0;background:transparent;content:""}.templates-page__scope[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}.templates-page__scope[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{min-width:22px;padding:2px 6px;border-radius:12px;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-high);font-size:11px;text-align:center}.templates-page__scope--active[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%]:after{background:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap);max-width:1600px;margin:0 auto;padding:0 20px 8px}.templates-page__search[_ngcontent-%COMP%]{flex:1;min-width:240px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:flex;align-items:center;flex:0 0 auto;gap:var(--gns3-density-space-3)}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{width:155px}.templates-page__view-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px;padding:4px 2px;border-radius:8px;background:var(--mat-sys-surface-container-high)}button.templates-page__view-button[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:8px;color:var(--mat-sys-on-surface-variant);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);--mat-icon-button-icon-size: 22px}button.templates-page__view-button--active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__main[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:20px;max-width:1600px;margin:0 auto;padding:0 20px 20px}.templates-page__loading[_ngcontent-%COMP%]{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;min-height:320px;gap:var(--gns3-density-card-gap);color:var(--mat-sys-on-surface-variant)}.templates-page__table-container[_ngcontent-%COMP%]{flex:1;min-width:0;border-radius:16px;background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;overflow-x:auto}mat-table[_ngcontent-%COMP%]{width:100%;min-width:850px}.mat-mdc-row[_ngcontent-%COMP%], .mat-row[_ngcontent-%COMP%]{height:var(--mat-table-row-item-container-height);min-height:var(--mat-table-row-item-container-height)}.mat-header-row[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%]{position:sticky;top:0;z-index:10;background:var(--mat-sys-surface-container-highest);box-shadow:inset 0 -2px var(--mat-sys-primary);--mat-sort-arrow-color: var(--mat-sys-primary)}.mat-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:13px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}mat-row[_ngcontent-%COMP%]{cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease}mat-row[_ngcontent-%COMP%]:nth-child(2n){background:color-mix(in srgb,var(--mat-sys-on-surface) 1%,transparent)}mat-row[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}mat-row.templates-page__row--selected[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}mat-cell[_ngcontent-%COMP%], mat-header-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:inherit;color:var(--mat-sys-on-surface)}.mat-column-name[_ngcontent-%COMP%]{flex:2.4;min-width:240px;justify-content:flex-start}.mat-column-template_type[_ngcontent-%COMP%]{flex:1.1;min-width:130px}.mat-column-category[_ngcontent-%COMP%]{flex:1;min-width:110px}.mat-column-compute_id[_ngcontent-%COMP%]{flex:1;min-width:105px}.mat-column-builtin[_ngcontent-%COMP%]{flex:0 0 90px;min-width:90px;justify-content:center}.mat-column-actions[_ngcontent-%COMP%]{flex:0 0 180px;min-width:180px;box-sizing:border-box;justify-content:flex-start;padding-right:24px}.templates-page__name-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-width:0;gap:var(--gns3-density-space-3)}.templates-page__name-copy[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:14px;font-weight:600}.templates-page__symbol[_ngcontent-%COMP%]{display:grid;flex:0 0 52px;width:52px;height:52px;overflow:hidden;place-items:center;border-radius:14px;color:var(--mat-sys-on-primary-container);background:color-mix(in srgb,var(--mat-sys-primary-container) 82%,var(--mat-sys-surface))}.templates-page__symbol[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:78%;height:78%;object-fit:contain;filter:drop-shadow(0 2px 4px color-mix(in srgb,var(--mat-sys-shadow) 25%,transparent))}.templates-page__symbol[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:27px;height:27px;font-size:27px}.templates-page__symbol--small[_ngcontent-%COMP%]{flex-basis:38px;width:38px;height:38px;border-radius:10px}.templates-page__symbol--small[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:21px;height:21px;font-size:21px}.templates-page__type-badge[_ngcontent-%COMP%], .templates-page__source-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;width:fit-content;padding:4px 9px;border-radius:16px;font-size:12px;font-weight:600;white-space:nowrap}.templates-page__type-badge[_ngcontent-%COMP%]{color:var(--mat-sys-secondary);background:color-mix(in srgb,var(--mat-sys-secondary) 11%,transparent)}.templates-page__type-badge--qemu[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__type-badge--docker[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container)}.templates-page__type-badge--dynamips[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary-container);background:var(--mat-sys-tertiary-container)}.templates-page__type-badge--cloud[_ngcontent-%COMP%]{color:var(--mat-sys-on-error-container);background:var(--mat-sys-error-container)}.templates-page__type-badge--vpcs[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary);background:var(--mat-sys-primary)}.templates-page__type-badge--ethernet-hub[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary);background:var(--mat-sys-secondary)}.templates-page__type-badge--ethernet-switch[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary);background:var(--mat-sys-tertiary)}.templates-page__type-badge--iou[_ngcontent-%COMP%]{color:var(--mat-sys-on-error);background:var(--mat-sys-error)}.templates-page__type-badge--nat[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-highest)}.templates-page__source-badge[_ngcontent-%COMP%]{color:var(--mat-sys-primary);background:color-mix(in srgb,var(--mat-sys-primary) 11%,transparent)}.templates-page__source-badge--builtin[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary);background:color-mix(in srgb,var(--mat-sys-tertiary) 11%,transparent)}.templates-page__table-footer[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:var(--mat-table-footer-container-height);padding:0 12px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container))}.templates-page__table-footer[_ngcontent-%COMP%] mat-paginator[_ngcontent-%COMP%]{width:100%;--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__actions-cell[_ngcontent-%COMP%], .templates-page__card-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:3px}button.templates-page__action[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-on-surface-variant);width:var(--gns3-density-control-height-sm);height:var(--gns3-density-control-height-sm);--mat-icon-button-state-layer-size: var(--gns3-density-control-height-sm);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-control-height-sm)}button.templates-page__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}button.templates-page__action[_ngcontent-%COMP%]{color:var(--template-action-color);--mat-icon-button-state-layer-color: var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:not(:disabled) mat-icon[_ngcontent-%COMP%]{color:var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:disabled mat-icon[_ngcontent-%COMP%]{color:var(--gns3-button-disabled-label-color)}button.templates-page__action--details[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--edit[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-primary)}button.templates-page__action--duplicate[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--delete[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-error)}.templates-page__grid[_ngcontent-%COMP%]{flex:1;min-width:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-content:start;gap:var(--gns3-density-card-gap)}.templates-page__grid--with-details[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__card[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column;padding:16px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;background:var(--mat-sys-surface);cursor:pointer;transition:transform var(--gns3-motion-duration-standard) ease,box-shadow var(--gns3-motion-duration-standard) ease,border-color var(--gns3-motion-duration-standard) ease}.templates-page__card[_ngcontent-%COMP%]:hover{border-color:var(--mat-sys-outline-variant);background:var(--mat-sys-surface-container-low)}.templates-page__card--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);box-shadow:0 0 0 1px var(--mat-sys-primary)}.templates-page__card-header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--gns3-density-space-3)}.templates-page__card-body[_ngcontent-%COMP%]{flex:1;min-width:0;padding:14px 0 12px}.templates-page__card-body[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{display:-webkit-box;overflow:hidden;margin:0 0 9px;color:var(--mat-sys-on-surface);font-size:17px;font-weight:650;line-height:1.35;overflow-wrap:anywhere;-webkit-box-orient:vertical;-webkit-line-clamp:2}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%]{display:grid;gap:8px;margin:16px 0 0}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{min-width:0;margin:0;overflow:hidden;color:var(--mat-sys-on-surface);font-size:13px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] .templates-page__card-tags-row[_ngcontent-%COMP%]{align-items:flex-start}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd.templates-page__card-tags[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px;overflow:visible;white-space:normal}.templates-page__card-actions[_ngcontent-%COMP%]{justify-content:flex-end;min-height:33px;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__grid-paginator[_ngcontent-%COMP%]{grid-column:1/-1;width:100%;border-radius:12px;background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container));--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__empty[_ngcontent-%COMP%]{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:230px;padding:32px;color:var(--mat-sys-on-surface-variant);text-align:center}.templates-page__empty[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{width:48px;height:48px;font-size:48px;opacity:.55}.templates-page__empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:12px 0 0;color:var(--mat-sys-on-surface);font-size:17px}.templates-page__empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:5px 0 0;font-size:14px}.templates-page__details[_ngcontent-%COMP%]{position:sticky;top:16px;flex:0 0 clamp(390px,31vw,480px);display:flex;min-height:380px;max-height:calc(100vh - 176px);flex-direction:column;overflow:hidden;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 60%,transparent);border-radius:16px;background:var(--mat-sys-surface);box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent);animation:_ngcontent-%COMP%_templates-slide-in var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard)}.templates-page__details-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:var(--gns3-density-space-3);min-height:56px;box-sizing:border-box;padding:8px 10px 8px 16px;border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 72%,var(--mat-sys-surface))}.templates-page__details-header[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-primary-container)}.templates-page__details-heading[_ngcontent-%COMP%]{display:flex;min-width:0;align-items:center;gap:var(--gns3-density-space-3)}.templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;margin:0;color:var(--mat-sys-on-primary-container);font-size:19px;font-weight:650;line-height:1.25;text-overflow:ellipsis;white-space:nowrap}.templates-page__details-title-line[_ngcontent-%COMP%]{display:flex;flex:1;min-width:0;align-items:center;gap:var(--gns3-density-space-2)}.templates-page__details-title-line[_ngcontent-%COMP%] .templates-page__type-badge[_ngcontent-%COMP%]{flex:0 0 auto}.templates-page__details-body[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:12px 20px}.templates-page__description[_ngcontent-%COMP%]{padding:10px 0 14px;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__description[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.6px;text-transform:uppercase}.templates-page__description[_ngcontent-%COMP%] app-markdown-viewer[_ngcontent-%COMP%]{display:block;margin-top:8px;padding:2px 12px;border-radius:10px;background:var(--mat-sys-surface-container-low);overflow-wrap:anywhere;--markdown-viewer-font-size: 13px;--markdown-viewer-line-height: 1.5;--markdown-viewer-heading-scale: .85}.templates-page__detail-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:22px 105px minmax(0,1fr);align-items:center;gap:var(--gns3-density-space-3);min-height:40px;box-sizing:border-box;padding:8px 0;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__detail-row[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:19px;height:19px;color:var(--mat-sys-primary);font-size:19px}.templates-page__detail-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:12px;font-weight:650;letter-spacing:.5px;text-transform:uppercase;white-space:nowrap}.templates-page__detail-row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{min-width:0;color:var(--mat-sys-on-surface);font-size:14px;font-weight:500;line-height:1.45;text-align:right;overflow-wrap:anywhere}.templates-page__detail-row--stacked[_ngcontent-%COMP%]{align-items:start}.templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__mono[_ngcontent-%COMP%], .templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__path[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-family:var(--gns3-font-code);font-size:12px;word-break:break-all}.templates-page__tags[_ngcontent-%COMP%]{border-bottom:0}.templates-page__tags[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:7px}.templates-page__tag[_ngcontent-%COMP%]{padding:5px 9px;border-radius:14px;color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container);font-size:11px;font-weight:550}.templates-page__details-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(105px,1fr));gap:var(--gns3-density-space-2);padding:14px 16px 18px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-surface-container) 72%,transparent)}button.templates-page__details-action[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-on-surface-variant);height:40px;border-radius:12px;color:var(--details-action-color);border-color:color-mix(in srgb,var(--details-action-color) 48%,transparent);font-size:13px;font-weight:500}button.templates-page__details-action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--details-action-color)}button.templates-page__details-action--edit[_ngcontent-%COMP%], button.templates-page__details-action--duplicate[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-primary)}button.templates-page__details-action--delete[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-error)}[data-density=compact][_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%]{min-height:40px;height:40px}[data-density=compact][_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%]{width:40px;height:40px;--mat-icon-button-state-layer-size: 40px}[data-density=compact][_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%]{min-height:48px;padding-block:4px}[data-density=compact][_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:18px}[data-density=compact][_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%]{padding-block:8px}[data-density=compact][_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%]{min-height:36px;padding-block:6px}[data-density=compact][_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%]{padding:12px}@keyframes _ngcontent-%COMP%_templates-slide-in{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@media(max-width:1400px){.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__main[_ngcontent-%COMP%]{flex-direction:column}.templates-page__table-container[_ngcontent-%COMP%], .templates-page__grid[_ngcontent-%COMP%], .templates-page__details[_ngcontent-%COMP%]{width:100%}.templates-page__details[_ngcontent-%COMP%]{position:static;flex-basis:auto;max-height:none}}@media(max-width:900px){.templates-page__header[_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column}.templates-page__header-actions[_ngcontent-%COMP%]{width:100%}.templates-page__toolbar[_ngcontent-%COMP%]{align-items:stretch;flex-direction:column}.templates-page__toolbar-actions[_ngcontent-%COMP%]{width:100%}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{flex:1;width:auto}}@media(max-width:640px){.templates-page__header[_ngcontent-%COMP%]{padding:20px 16px 12px}.templates-page__header-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{width:100%;padding-inline:10px}.templates-page__scopes[_ngcontent-%COMP%]{overflow-x:auto;padding-inline:16px}.templates-page__scope[_ngcontent-%COMP%]{flex:0 0 auto;padding-inline:12px}.templates-page__toolbar[_ngcontent-%COMP%], .templates-page__main[_ngcontent-%COMP%]{padding-inline:16px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__view-toggle[_ngcontent-%COMP%]{grid-column:1/-1;justify-self:end}.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.templates-page__details[_ngcontent-%COMP%]{min-width:0}}',"[_nghost-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%] mat-form-field[_ngcontent-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%]{display:block;width:100%;background:transparent}.template-edit-legacy-label[_ngcontent-%COMP%], .template-edit-legacy-control[_ngcontent-%COMP%]{display:none}[class$=__header][_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-4);max-width:1440px;margin:0 auto;padding:var(--gns3-density-space-5) var(--gns3-density-space-5) 14px}[class$=__breadcrumb][_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;margin-bottom:8px;color:var(--mat-sys-primary);font-size:14px;font-weight:600}[class$=__breadcrumb][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{min-height:28px;padding:0 4px;color:inherit;font:inherit}[class$=__breadcrumb][_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:18px;height:18px;font-size:18px;color:var(--mat-sys-on-surface-variant)}[class$=__heading-row][_ngcontent-%COMP%]{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--gns3-density-space-5);width:100%}[class$=__title][_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal;flex:1;min-width:0}[class$=__header-actions][_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-3);flex-shrink:0}[class$=__header-actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{min-height:var(--gns3-density-control-height);border-radius:var(--gns3-density-radius-md);padding:0 var(--gns3-density-space-4)}[class$=__back-btn][_ngcontent-%COMP%]{flex:0 0 auto;width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-icon-button)}[class$=__back-btn][_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}[class$=__back-btn][_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant)}[class$=__content][_ngcontent-%COMP%]{display:grid;grid-template-columns:220px minmax(0,1fr);align-items:start;column-gap:var(--gns3-density-card-gap);row-gap:var(--gns3-density-space-3);max-width:1440px;margin:0 auto;padding:0 var(--gns3-density-space-5) 32px}.template-edit-tabs[_ngcontent-%COMP%]{position:sticky;top:var(--gns3-density-app-header-height);display:flex;grid-column:1;grid-row:1/span 2;align-self:start;flex-direction:column;gap:var(--gns3-density-space-2);padding:var(--gns3-density-space-3);border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:var(--gns3-density-radius-xl);background:color-mix(in srgb,var(--mat-sys-primary-container) 18%,var(--mat-sys-surface))}.template-edit-tabs[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:flex-start;min-height:var(--gns3-density-control-height);border:0;border-radius:var(--gns3-density-radius-sm);padding:0 var(--gns3-density-space-3);color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;font-weight:600;text-align:left;cursor:pointer}.template-edit-tabs[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}.template-edit-tabs[_ngcontent-%COMP%] button.is-active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}[class$=__content][_ngcontent-%COMP%] > [class*=__form-card][_ngcontent-%COMP%]{grid-column:2;grid-row:1}[class$=__content][_ngcontent-%COMP%] > [class*=__form-card][_ngcontent-%COMP%]:not(:has(>:nth-child(2))){display:none}.vpcs-template-details__form-card[_ngcontent-%COMP%]:not(.template-edit-panel-active){display:none}[class*=__form-card][_ngcontent-%COMP%]{margin:0 0 18px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;overflow:hidden;border-radius:var(--gns3-density-radius-lg);background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none}[class$=__section-header][_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;min-height:var(--gns3-density-section-header-height);box-sizing:border-box;padding:var(--gns3-density-section-header-padding);border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 28%,var(--mat-sys-surface));cursor:default}[class$=__expand-icon][_ngcontent-%COMP%]{display:none}[class$=__section-title][_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-section-title-size);font-weight:650}[class$=__form][_ngcontent-%COMP%], .form-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-card-gap);padding:var(--gns3-density-card-padding)}.qemu-template-details__form[_ngcontent-%COMP%]{padding-inline:var(--gns3-density-card-padding)}.qemu-template-details__subsection[_ngcontent-%COMP%]{width:100%;box-sizing:border-box}.two-column-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--gns3-density-card-gap)}[class$=__field][_ngcontent-%COMP%], .form-field[_ngcontent-%COMP%]{width:100%}[class$=__actions][_ngcontent-%COMP%]{display:flex;width:100%;box-sizing:border-box;justify-content:flex-end;gap:var(--gns3-density-space-3);margin-top:0;padding:4px 0 8px}[class$=__content][_ngcontent-%COMP%] > [class$=__actions][_ngcontent-%COMP%]{grid-column:2;justify-content:flex-end}[class*=__save-btn][_ngcontent-%COMP%], [class*=__cancel-btn][_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing)}button[class*=__save-btn].mat-mdc-raised-button[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-primary);background-color:var(--mat-sys-primary);--mat-button-protected-label-text-color: var(--mat-sys-on-primary);--mat-button-protected-container-color: var(--mat-sys-primary);--mat-button-protected-state-layer-color: var(--mat-sys-on-primary)}button[class*=__cancel-btn].mat-mdc-button[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-surface);border-color:var(--mat-sys-outline);--mat-button-outlined-label-text-color: var(--mat-sys-on-surface);--mat-button-outlined-state-layer-color: var(--mat-sys-on-surface)}button[class*=__cancel-btn].mat-mdc-button[_ngcontent-%COMP%]{border:1px solid var(--mat-sys-outline)}button[class*=__config-btn][_ngcontent-%COMP%], button.docker-details__extra-config-btn[_ngcontent-%COMP%], .udp-tunnels__add-btn[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing);width:fit-content;max-width:100%;align-self:center;border-radius:var(--mat-sys-corner-full, 999px)}.preferences__usage-form[_ngcontent-%COMP%]{width:100%;box-sizing:border-box;padding:var(--gns3-density-card-padding)}.preferences__usage-field--full[_ngcontent-%COMP%]{display:block;width:100%}.preferences__usage-field--full[_ngcontent-%COMP%] textarea.mat-mdc-input-element[_ngcontent-%COMP%]{width:100%;min-height:140px;box-sizing:border-box;resize:vertical}[class$=__form][_ngcontent-%COMP%] [class*=__file-row][_ngcontent-%COMP%]{padding:0}[class*=__file-row][_ngcontent-%COMP%]{align-items:flex-start}[class$=__symbol-row][_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:var(--gns3-density-card-gap)}[class$=__symbol-row][_ngcontent-%COMP%] [class*=__symbol-btn][_ngcontent-%COMP%], [class$=__symbol-row][_ngcontent-%COMP%] [class*=__action-btn][_ngcontent-%COMP%], [class*=__file-row][_ngcontent-%COMP%] > button[class*=__browse-btn][_ngcontent-%COMP%], .docker-details__image-row[_ngcontent-%COMP%] > button.docker-details__pull-btn[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing);border-radius:var(--mat-sys-corner-full, 999px);width:fit-content;max-width:100%;flex:0 0 auto;align-self:flex-start;margin-top:var(--template-field-action-offset, calc((var(--gns3-density-form-field-height) - var(--gns3-density-control-height)) / 2))}[data-density=compact][_nghost-%COMP%] [class$=__heading-row][_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] [class$=__heading-row][_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column;gap:var(--gns3-density-space-3)}[data-density=compact][_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%]{width:100%}[data-density=compact][_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex:1}@media(max-width:768px){[class$=__symbol-row][_ngcontent-%COMP%], [class*=__file-row][_ngcontent-%COMP%], .docker-details__image-row[_ngcontent-%COMP%]{--template-field-action-offset: 0px}}@media(max-width:760px){[class$=__header][_ngcontent-%COMP%]{padding-inline:16px}[class$=__content][_ngcontent-%COMP%]{padding-inline:16px;grid-template-columns:1fr}.template-edit-tabs[_ngcontent-%COMP%]{position:static;grid-column:1;grid-row:auto;flex-direction:row;overflow-x:auto}.template-edit-tabs[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex:0 0 auto}[class$=__content][_ngcontent-%COMP%] > [class*=__form-card][_ngcontent-%COMP%]{grid-column:1;grid-row:auto}.two-column-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}[class$=__symbol-row][_ngcontent-%COMP%]{flex-direction:column}[class$=__actions][_ngcontent-%COMP%]{flex-direction:row;align-items:center;justify-content:flex-end}[class$=__actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:auto}[class$=__content][_ngcontent-%COMP%] > [class$=__actions][_ngcontent-%COMP%]{grid-column:1}.preferences__usage-form[_ngcontent-%COMP%]{padding:16px}[class*=__save-btn][_ngcontent-%COMP%], [class*=__cancel-btn][_ngcontent-%COMP%]{width:auto}}"],changeDetection:0})}return n})();var Al=(()=>{class n{countSource=new Ye;currentCount=this.countSource.asObservable();cancelItem=new Ye;currentCancelItemDetails=this.cancelItem.asObservable();messageSource=new cn("");currentMessage=this.messageSource.asObservable();computingSource=new cn(!1);currentComputing=this.computingSource.asObservable();constructor(){}processBarCount(e){this.countSource.next(e)}cancelFileUploading(e){this.cancelItem.next(e)}setMessage(e){this.messageSource.next(e)}setComputing(e){this.computingSource.next(e)}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();function Gse(n,o){n&1&&kr(0,"div",2)}var qse=new mn("MAT_PROGRESS_BAR_DEFAULT_OPTIONS");var od=(()=>{class n{_elementRef=f(Kt);_ngZone=f(Gi);_changeDetectorRef=f(oe);_renderer=f(qi);_cleanupTransitionEnd;constructor(){let e=o5(),t=f(qse,{optional:!0});this._isNoopAnimation=e==="di-disabled",e==="reduced-motion"&&this._elementRef.nativeElement.classList.add("mat-progress-bar-reduced-motion"),t&&(t.color&&(this.color=this._defaultColor=t.color),this.mode=t.mode||this.mode)}_isNoopAnimation;get color(){return this._color||this._defaultColor}set color(e){this._color=e}_color;_defaultColor="primary";get value(){return this._value}set value(e){this._value=fz(e||0),this._changeDetectorRef.markForCheck()}_value=0;get bufferValue(){return this._bufferValue||0}set bufferValue(e){this._bufferValue=fz(e||0),this._changeDetectorRef.markForCheck()}_bufferValue=0;animationEnd=new be;get mode(){return this._mode}set mode(e){this._mode=e,this._changeDetectorRef.markForCheck()}_mode="determinate";ngAfterViewInit(){this._ngZone.runOutsideAngular(()=>{this._cleanupTransitionEnd=this._renderer.listen(this._elementRef.nativeElement,"transitionend",this._transitionendHandler)})}ngOnDestroy(){this._cleanupTransitionEnd?.()}_getPrimaryBarTransform(){return`scaleX(${this._isIndeterminate()?1:this.value/100})`}_getBufferBarFlexBasis(){return`${this.mode==="buffer"?this.bufferValue:100}%`}_isIndeterminate(){return this.mode==="indeterminate"||this.mode==="query"}_transitionendHandler=e=>{this.animationEnd.observers.length===0||!e.target||!e.target.classList.contains("mdc-linear-progress__primary-bar")||(this.mode==="determinate"||this.mode==="buffer")&&this._ngZone.run(()=>this.animationEnd.next({value:this.value}))};static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["mat-progress-bar"]],hostAttrs:["role","progressbar","aria-valuemin","0","aria-valuemax","100","tabindex","-1",1,"mat-mdc-progress-bar","mdc-linear-progress"],hostVars:10,hostBindings:function(t,i){t&2&&(Ce("aria-valuenow",i._isIndeterminate()?null:i.value)("mode",i.mode),Za("mat-"+i.color),ne("_mat-animation-noopable",i._isNoopAnimation)("mdc-linear-progress--animation-ready",!i._isNoopAnimation)("mdc-linear-progress--indeterminate",i._isIndeterminate()))},inputs:{color:"color",value:[2,"value","value",qo],bufferValue:[2,"bufferValue","bufferValue",qo],mode:"mode"},outputs:{animationEnd:"animationEnd"},exportAs:["matProgressBar"],decls:7,vars:5,consts:[["aria-hidden","true",1,"mdc-linear-progress__buffer"],[1,"mdc-linear-progress__buffer-bar"],[1,"mdc-linear-progress__buffer-dots"],["aria-hidden","true",1,"mdc-linear-progress__bar","mdc-linear-progress__primary-bar"],[1,"mdc-linear-progress__bar-inner"],["aria-hidden","true",1,"mdc-linear-progress__bar","mdc-linear-progress__secondary-bar"]],template:function(t,i){t&1&&(ii(0,"div",0),kr(1,"div",1),T(2,Gse,1,0,"div",2),Si(),ii(3,"div",3),kr(4,"span",4),Si(),ii(5,"div",5),kr(6,"span",4),Si()),t&2&&(m(),Tt("flex-basis",i._getBufferBarFlexBasis()),m(),E(i.mode==="buffer"?2:-1),m(),Tt("transform",i._getPrimaryBarTransform()))},styles:[`.mat-mdc-progress-bar {
|
||
--mat-progress-bar-animation-multiplier: 1;
|
||
display: block;
|
||
text-align: start;
|
||
}
|
||
.mat-mdc-progress-bar[mode=query] {
|
||
transform: scaleX(-1);
|
||
}
|
||
.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__buffer-dots,
|
||
.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__primary-bar,
|
||
.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__secondary-bar,
|
||
.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__bar-inner.mdc-linear-progress__bar-inner {
|
||
animation: none;
|
||
}
|
||
.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__primary-bar,
|
||
.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__buffer-bar {
|
||
transition: transform 1ms;
|
||
}
|
||
|
||
.mat-progress-bar-reduced-motion {
|
||
--mat-progress-bar-animation-multiplier: 2;
|
||
}
|
||
|
||
.mdc-linear-progress {
|
||
position: relative;
|
||
width: 100%;
|
||
transform: translateZ(0);
|
||
outline: 1px solid transparent;
|
||
overflow-x: hidden;
|
||
transition: opacity 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);
|
||
height: max(var(--mat-progress-bar-track-height, 4px), var(--mat-progress-bar-active-indicator-height, 4px));
|
||
}
|
||
@media (forced-colors: active) {
|
||
.mdc-linear-progress {
|
||
outline-color: CanvasText;
|
||
}
|
||
}
|
||
|
||
.mdc-linear-progress__bar {
|
||
position: absolute;
|
||
top: 0;
|
||
bottom: 0;
|
||
margin: auto 0;
|
||
width: 100%;
|
||
animation: none;
|
||
transform-origin: top left;
|
||
transition: transform 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);
|
||
height: var(--mat-progress-bar-active-indicator-height, 4px);
|
||
}
|
||
.mdc-linear-progress--indeterminate .mdc-linear-progress__bar {
|
||
transition: none;
|
||
}
|
||
[dir=rtl] .mdc-linear-progress__bar {
|
||
right: 0;
|
||
transform-origin: center right;
|
||
}
|
||
|
||
.mdc-linear-progress__bar-inner {
|
||
display: inline-block;
|
||
position: absolute;
|
||
width: 100%;
|
||
animation: none;
|
||
border-top-style: solid;
|
||
border-color: var(--mat-progress-bar-active-indicator-color, var(--mat-sys-primary));
|
||
border-top-width: var(--mat-progress-bar-active-indicator-height, 4px);
|
||
}
|
||
|
||
.mdc-linear-progress__buffer {
|
||
display: flex;
|
||
position: absolute;
|
||
top: 0;
|
||
bottom: 0;
|
||
margin: auto 0;
|
||
width: 100%;
|
||
overflow: hidden;
|
||
height: var(--mat-progress-bar-track-height, 4px);
|
||
border-radius: var(--mat-progress-bar-track-shape, var(--mat-sys-corner-none));
|
||
}
|
||
|
||
.mdc-linear-progress__buffer-dots {
|
||
background-image: radial-gradient(circle, var(--mat-progress-bar-track-color, var(--mat-sys-surface-variant)) calc(var(--mat-progress-bar-track-height, 4px) / 2), transparent 0);
|
||
background-repeat: repeat-x;
|
||
background-size: calc(calc(var(--mat-progress-bar-track-height, 4px) / 2) * 5);
|
||
background-position: left;
|
||
flex: auto;
|
||
transform: rotate(180deg);
|
||
animation: mdc-linear-progress-buffering calc(250ms * var(--mat-progress-bar-animation-multiplier)) infinite linear;
|
||
}
|
||
@media (forced-colors: active) {
|
||
.mdc-linear-progress__buffer-dots {
|
||
background-color: ButtonBorder;
|
||
}
|
||
}
|
||
[dir=rtl] .mdc-linear-progress__buffer-dots {
|
||
animation: mdc-linear-progress-buffering-reverse calc(250ms * var(--mat-progress-bar-animation-multiplier)) infinite linear;
|
||
transform: rotate(0);
|
||
}
|
||
|
||
.mdc-linear-progress__buffer-bar {
|
||
flex: 0 1 100%;
|
||
transition: flex-basis 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);
|
||
background-color: var(--mat-progress-bar-track-color, var(--mat-sys-surface-variant));
|
||
}
|
||
|
||
.mdc-linear-progress__primary-bar {
|
||
transform: scaleX(0);
|
||
}
|
||
.mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar {
|
||
left: -145.166611%;
|
||
}
|
||
.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar {
|
||
animation: mdc-linear-progress-primary-indeterminate-translate calc(2s * var(--mat-progress-bar-animation-multiplier)) infinite linear;
|
||
}
|
||
.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar > .mdc-linear-progress__bar-inner {
|
||
animation: mdc-linear-progress-primary-indeterminate-scale calc(2s * var(--mat-progress-bar-animation-multiplier)) infinite linear;
|
||
}
|
||
[dir=rtl] .mdc-linear-progress.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar {
|
||
animation-name: mdc-linear-progress-primary-indeterminate-translate-reverse;
|
||
}
|
||
[dir=rtl] .mdc-linear-progress.mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar {
|
||
right: -145.166611%;
|
||
left: auto;
|
||
}
|
||
|
||
.mdc-linear-progress__secondary-bar {
|
||
display: none;
|
||
}
|
||
.mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar {
|
||
left: -54.888891%;
|
||
display: block;
|
||
}
|
||
.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar {
|
||
animation: mdc-linear-progress-secondary-indeterminate-translate calc(2s * var(--mat-progress-bar-animation-multiplier)) infinite linear;
|
||
}
|
||
.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar > .mdc-linear-progress__bar-inner {
|
||
animation: mdc-linear-progress-secondary-indeterminate-scale calc(2s * var(--mat-progress-bar-animation-multiplier)) infinite linear;
|
||
}
|
||
[dir=rtl] .mdc-linear-progress.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar {
|
||
animation-name: mdc-linear-progress-secondary-indeterminate-translate-reverse;
|
||
}
|
||
[dir=rtl] .mdc-linear-progress.mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar {
|
||
right: -54.888891%;
|
||
left: auto;
|
||
}
|
||
|
||
@keyframes mdc-linear-progress-buffering {
|
||
from {
|
||
transform: rotate(180deg) translateX(calc(var(--mat-progress-bar-track-height, 4px) * -2.5));
|
||
}
|
||
}
|
||
@keyframes mdc-linear-progress-primary-indeterminate-translate {
|
||
0% {
|
||
transform: translateX(0);
|
||
}
|
||
20% {
|
||
animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819);
|
||
transform: translateX(0);
|
||
}
|
||
59.15% {
|
||
animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);
|
||
transform: translateX(83.67142%);
|
||
}
|
||
100% {
|
||
transform: translateX(200.611057%);
|
||
}
|
||
}
|
||
@keyframes mdc-linear-progress-primary-indeterminate-scale {
|
||
0% {
|
||
transform: scaleX(0.08);
|
||
}
|
||
36.65% {
|
||
animation-timing-function: cubic-bezier(0.334731, 0.12482, 0.785844, 1);
|
||
transform: scaleX(0.08);
|
||
}
|
||
69.15% {
|
||
animation-timing-function: cubic-bezier(0.06, 0.11, 0.6, 1);
|
||
transform: scaleX(0.661479);
|
||
}
|
||
100% {
|
||
transform: scaleX(0.08);
|
||
}
|
||
}
|
||
@keyframes mdc-linear-progress-secondary-indeterminate-translate {
|
||
0% {
|
||
animation-timing-function: cubic-bezier(0.15, 0, 0.515058, 0.409685);
|
||
transform: translateX(0);
|
||
}
|
||
25% {
|
||
animation-timing-function: cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);
|
||
transform: translateX(37.651913%);
|
||
}
|
||
48.35% {
|
||
animation-timing-function: cubic-bezier(0.4, 0.627035, 0.6, 0.902026);
|
||
transform: translateX(84.386165%);
|
||
}
|
||
100% {
|
||
transform: translateX(160.277782%);
|
||
}
|
||
}
|
||
@keyframes mdc-linear-progress-secondary-indeterminate-scale {
|
||
0% {
|
||
animation-timing-function: cubic-bezier(0.205028, 0.057051, 0.57661, 0.453971);
|
||
transform: scaleX(0.08);
|
||
}
|
||
19.15% {
|
||
animation-timing-function: cubic-bezier(0.152313, 0.196432, 0.648374, 1.004315);
|
||
transform: scaleX(0.457104);
|
||
}
|
||
44.15% {
|
||
animation-timing-function: cubic-bezier(0.257759, -0.003163, 0.211762, 1.38179);
|
||
transform: scaleX(0.72796);
|
||
}
|
||
100% {
|
||
transform: scaleX(0.08);
|
||
}
|
||
}
|
||
@keyframes mdc-linear-progress-primary-indeterminate-translate-reverse {
|
||
0% {
|
||
transform: translateX(0);
|
||
}
|
||
20% {
|
||
animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819);
|
||
transform: translateX(0);
|
||
}
|
||
59.15% {
|
||
animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);
|
||
transform: translateX(-83.67142%);
|
||
}
|
||
100% {
|
||
transform: translateX(-200.611057%);
|
||
}
|
||
}
|
||
@keyframes mdc-linear-progress-secondary-indeterminate-translate-reverse {
|
||
0% {
|
||
animation-timing-function: cubic-bezier(0.15, 0, 0.515058, 0.409685);
|
||
transform: translateX(0);
|
||
}
|
||
25% {
|
||
animation-timing-function: cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);
|
||
transform: translateX(-37.651913%);
|
||
}
|
||
48.35% {
|
||
animation-timing-function: cubic-bezier(0.4, 0.627035, 0.6, 0.902026);
|
||
transform: translateX(-84.386165%);
|
||
}
|
||
100% {
|
||
transform: translateX(-160.277782%);
|
||
}
|
||
}
|
||
@keyframes mdc-linear-progress-buffering-reverse {
|
||
from {
|
||
transform: translateX(-10px);
|
||
}
|
||
}
|
||
`],encapsulation:2,changeDetection:0})}return n})();function fz(n,o=0,e=100){return Math.max(o,Math.min(e,n))}var Is=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=on({type:n});static \u0275inj=nn({imports:[Vi]})}return n})();var Nl=(()=>{class n{data;_snackRef=f(x5);_US=f(Al);uploadProgress=z(0);label=z("");isComputing=z(!1);subscription;upload_file_type;constructor(e){this.data=e}ngOnInit(){this.upload_file_type=this.data.upload_file_type,this.subscription=this._US.currentCount.subscribe(e=>{this.uploadProgress.set(e),(this.uploadProgress()==null||this.uploadProgress()===100&&!this.isComputing())&&this.dismiss()}),this.subscription.add(this._US.currentMessage.subscribe(e=>this.label.set(e))),this.subscription.add(this._US.currentComputing.subscribe(e=>this.isComputing.set(e)))}dismiss(){this._snackRef.dismiss()}cancelItem(){this._US.cancelFileUploading(!0)}ngOnDestroy(){this.subscription.unsubscribe()}static \u0275fac=function(t){return new(t||n)(Mt(y5))};static \u0275cmp=V({type:n,selectors:[["app-uploading-processbar"]],decls:8,vars:3,consts:[[1,"row","proccessBar-row"],[1,"col-md-9","proccessBar-col"],["mode","determinate","aria-valuemin","0","aria-valuemax","100",3,"value"],[1,"col-md-3","proccessBar-col"],["mat-button","","color","primary",1,"file-button",3,"click"]],template:function(t,i){t&1&&(r(0,"p"),c(1),l(),r(2,"div",0)(3,"div",1),L(4,"mat-progress-bar",2),l(),r(5,"div",3)(6,"button",4),_("click",function(){return i.cancelItem()}),c(7,"Cancel"),l()()()),t&2&&(m(),Un("",i.label()?i.label():i.upload_file_type+" Uploading please wait"," .... ",i.uploadProgress(),"%"),m(3),v("value",i.uploadProgress()))},dependencies:[Y,he,Is,od],styles:[".mat-snack-bar-container[_ngcontent-%COMP%]{min-width:450px}.proccessBar-row[_ngcontent-%COMP%]{display:flex}.proccessBar-col[_ngcontent-%COMP%]{margin:auto}"],changeDetection:0})}return n})();var _h=class{auto_delete_disks;builtin;category;chassis;compute_id;console_auto_start;console_type;aux_type;default_name_format;disk0;disk1;exec_area;idlemax;idlepc;idlesleep;image;iomem;mac_addr;mmap;name;nvram;platform;private_config;ram;slot0;slot1;slot2;slot3;slot4;slot5;slot6;slot7;sparsemem;startup_config;symbol;system_id;template_id;template_type;usage;wic0;wic1;wic2;tags;netmiko_device_type;appliance_metadata};var Qm=(()=>{class n{c2600_nms=["NM-1FE-TX","NM-1E","NM-4E","NM-16ESW"];c3600_nms=["NM-1FE-TX","NM-1E","NM-4E","NM-16ESW","NM-4T"];c3700_nms=["NM-1FE-TX","NM-4T","NM-16ESW"];c7200_pas=["PA-A1","PA-FE-TX","PA-2FE-TX","PA-GE","PA-4T+","PA-8T","PA-4E","PA-8E","PA-POS-OC3"];c7200_io=["C7200-IO-FE","C7200-IO-2FE","C7200-IO-GE-E"];c1700_wics=["WIC-1T","WIC-2T","WIC-1ENET"];c2600_wics=["WIC-1T","WIC-2T"];c3700_wics=["WIC-1T","WIC-2T"];getConsoleTypes(){return["telnet","ssh","none"]}getCategories(){return[["Default","guest"],["Routers","router"],["Switches","switch"],["End devices","guest"],["Security devices","firewall"]]}getDefaultRamSettings(){return{c1700:160,c2600:160,c2691:192,c3600:192,c3725:128,c3745:256,c7200:512}}getDefaultNvRamSettings(){return{c1700:128,c2600:128,c2691:256,c3600:256,c3725:256,c3745:256,c7200:512}}getAvailablePlatforms(){return["c1700","c2600","c2691","c3725","c3745","c3600","c7200"]}getPlatformsWithEtherSwitchRouterOption(){return{c1700:!1,c2600:!0,c2691:!0,c3725:!0,c3745:!0,c3600:!0,c7200:!1}}getPlatformsWithChassis(){return{c1700:!0,c2600:!0,c2691:!1,c3725:!1,c3745:!1,c3600:!0,c7200:!1}}getChassis(){return{c1700:["1720","1721","1750","1751","1760"],c2600:["2610","2611","2620","2621","2610XM","2611XM","2620XM","2621XM","2650XM","2651XM"],c3600:["3620","3640","3660"]}}getNPETypes(){return["npe-100","npe-150","npe-175","npe-200","npe-225","npe-300","npe-400","npe-g2"]}getMidplaneTypes(){return["std","vxr"]}getAdapterMatrix(){let e={};for(let t of["c1700","c2600","c2691","c3725","c3745","c3600","c7200"])e[t]={};for(let t of["1720","1721","1750","1751","1760"])e.c1700[t]={0:["C1700-MB-1FE"]};for(let t of["1751","1760"])e.c1700[t][1]=["C1700-MB-WIC1"];for(let t of["2620","2610XM","2620XM","2650XM"])e.c2600[t]={0:["C2600-MB-1FE"],1:this.c2600_nms};for(let t of["2621","2611XM","2621XM","2651XM"])e.c2600[t]={0:["C2600-MB-2FE"],1:this.c2600_nms};e.c2600[2610]={0:["C2600-MB-1E"],1:this.c2600_nms},e.c2600[2611]={0:["C2600-MB-2E"],1:this.c2600_nms},e.c2691[""]={0:["GT96100-FE"],1:this.c3700_nms},e.c3600[3620]={};for(let t=0;t<2;t++)e.c3600[3620][t]=this.c3600_nms;e.c3600[3640]={};for(let t=0;t<4;t++)e.c3600[3640][t]=this.c3600_nms;e.c3600[3660]={0:["Leopard-2FE"]};for(let t=1;t<7;t++)e.c3600[3660][t]=this.c3600_nms;e.c3725[""]={0:["GT96100-FE"]};for(let t=1;t<3;t++)e.c3725[""][t]=this.c3700_nms;e.c3745[""]={0:["GT96100-FE"]};for(let t=1;t<5;t++)e.c3745[""][t]=this.c3700_nms;e.c7200[""]={0:this.c7200_io};for(let t=1;t<7;t++)e.c7200[""][t]=this.c7200_pas;return e}getWicMatrix(){let e={};return e.c1700={0:this.c1700_wics,1:this.c1700_wics},e.c2600={0:this.c2600_wics,1:this.c2600_wics,2:this.c2600_wics},e.c2691={0:this.c3700_wics,1:this.c3700_wics,2:this.c3700_wics},e.c3725={0:this.c3700_wics,1:this.c3700_wics,2:this.c3700_wics},e.c3745={0:this.c3700_wics,1:this.c3700_wics,2:this.c3700_wics},e}getIdlepcRegex(){return/^(0x[0-9a-fA-F]+)?$|^$/}getMacAddrRegex(){return/^([0-9a-fA-F]{4}\.){2}[0-9a-fA-F]{4}$|^$/}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Km=(()=>{class n{httpController;constructor(e){this.httpController=e}getImages(e){return this.httpController.get(e,"/images?image_type=ios")}getImagePath(e,t){return`${e.protocol}//${e.host}:${e.port}/${zi.current_version}/images/upload/${t}`}getTemplates(e){return this.httpController.get(e,"/templates")}getTemplate(e,t){return this.httpController.get(e,`/templates/${t}`)}addTemplate(e,t){return this.httpController.post(e,"/templates",t)}saveTemplate(e,t){return this.httpController.put(e,`/templates/${t.template_id}`,t)}findIdlePC(e,t){return this.httpController.post(e,`/computes/${zi.compute_id}/dynamips/auto_idlepc`,t)}static \u0275fac=function(t){return new(t||n)(_e(sn))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Qse=()=>[0,1,2,3,4,5,6],Kse=()=>[0,1,2],Xse=(n,o)=>o.filename;function Yse(n,o){if(n&1){let e=R();r(0,"button",8),_("click",function(){y(e);let i=h();return w(i.goBack())}),r(1,"mat-icon"),c(2,"arrow_back"),l()()}}function Zse(n,o){if(n&1&&c(0),n&2){let e=o.index;N(e+1)}}function Jse(n,o){if(n&1&&c(0),n&2){let e=o.index;N(e+1)}}function ele(n,o){n&1&&(r(0,"span",49)(1,"mat-icon"),c(2,"dns"),l(),r(3,"span",50)(4,"span",51),c(5,"Controller type"),l(),r(6,"span",52),c(7,"Choose the execution host"),l()()())}function tle(n,o){n&1&&(r(0,"span",49)(1,"mat-icon"),c(2,"hard_drive"),l(),r(3,"span",50)(4,"span",51),c(5,"IOS image"),l(),r(6,"span",52),c(7,"Select an image or browse"),l()()())}function nle(n,o){if(n&1&&(r(0,"mat-option",28),c(1),l()),n&2){let e=o.$implicit;v("value",e.filename),m(),X(" ",e.filename," ")}}function ile(n,o){n&1&&(r(0,"span",49)(1,"mat-icon"),c(2,"description"),l(),r(3,"span",50)(4,"span",51),c(5,"Name and platform"),l(),r(6,"span",52),c(7,"Define the router model"),l()()())}function ole(n,o){if(n&1&&(r(0,"mat-option",28),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function ale(n,o){if(n&1&&(r(0,"mat-option",28),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function rle(n,o){if(n&1){let e=R();r(0,"mat-form-field",26)(1,"mat-label"),c(2,"Chassis"),l(),r(3,"mat-select",53),_("selectionChange",function(i){y(e);let a=h(2);return a.chassis.set(i.value),w(a.onChassisChosen())}),Q(4,ale,2,2,"mat-option",28,Oe),l()()}if(n&2){let e=h(2);m(3),v("value",e.chassis()),m(),K(e.chassisOptions()[e.platform()])}}function sle(n,o){if(n&1){let e=R();r(0,"mat-checkbox",54),_("change",function(i){y(e);let a=h(2);return w(a.isEtherSwitchRouter.set(i.checked))}),c(1," This is an EtherSwitch router "),l()}if(n&2){let e=h(2);v("checked",e.isEtherSwitchRouter())}}function lle(n,o){n&1&&(r(0,"span",49)(1,"mat-icon"),c(2,"memory"),l(),r(3,"span",50)(4,"span",51),c(5,"Memory"),l(),r(6,"span",52),c(7,"Set the default RAM"),l()()())}function cle(n,o){n&1&&(r(0,"span",49)(1,"mat-icon"),c(2,"settings_ethernet"),l(),r(3,"span",50)(4,"span",51),c(5,"Network adapters"),l(),r(6,"span",52),c(7,"Configure router slots"),l()()())}function dle(n,o){n&1&&L(0,"mat-option",28)}function mle(n,o){if(n&1&&(r(0,"mat-option",28),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function ple(n,o){if(n&1){let e=R();r(0,"mat-form-field",26)(1,"mat-label"),c(2),l(),r(3,"mat-select",55),_("selectionChange",function(i){y(e);let a=h().$implicit,s=h(3);return w(s.onAdapterChange(a,i.value))}),T(4,dle,1,0,"mat-option",28),Q(5,mle,2,2,"mat-option",28,Oe),l()()}if(n&2){let e=h().$implicit,t=h(3);m(2),X("Slot ",e),m(),v("placeholder",ka("Slot ",e))("value",t.networkAdaptersForTemplate()[e]||""),m(),E(t.adapterMatrix()[t.platform()][t.chassis()||""][e].length>1&&!t.adapterMatrix()[t.platform()][t.chassis()||""][e][0].startsWith("C7200")?4:-1),m(),K(t.adapterMatrix()[t.platform()][t.chassis()||""][e])}}function ule(n,o){if(n&1&&T(0,ple,7,5,"mat-form-field",26),n&2){let e=o.$implicit,t=h(3);E(t.adapterMatrix()[t.platform()][t.chassis()||""][e]?0:-1)}}function gle(n,o){n&1&&(r(0,"div",39),Q(1,ule,1,1,null,null,Oe),l()),n&2&&(m(),K(at(0,Qse)))}function hle(n,o){n&1&&(r(0,"span",49)(1,"mat-icon"),c(2,"developer_board"),l(),r(3,"span",50)(4,"span",51),c(5,"WIC modules"),l(),r(6,"span",52),c(7,"Optional interface cards"),l()()())}function _le(n,o){if(n&1&&(r(0,"mat-option",28),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function fle(n,o){if(n&1){let e=R();r(0,"mat-form-field",26)(1,"mat-label"),c(2),l(),r(3,"mat-select",55),_("selectionChange",function(i){y(e);let a=h().$implicit,s=h(3);return w(s.onWicChange(a,i.value))}),r(4,"mat-option",28),c(5),l(),Q(6,_le,2,2,"mat-option",28,Oe),l()()}if(n&2){let e=h().$implicit,t=h(3);m(2),X("WIC ",e),m(),v("placeholder",ka("WIC ",e))("value",t.wicsForTemplate()[e]||""),m(2),X(" ",""," "),m(),K(t.wicMatrix()[t.platform()][e])}}function vle(n,o){if(n&1&&T(0,fle,8,5,"mat-form-field",26),n&2){let e=o.$implicit,t=h(3);E(t.wicMatrix()[t.platform()]&&t.wicMatrix()[t.platform()][e]?0:-1)}}function Cle(n,o){n&1&&(r(0,"mat-step",38),se(1,hle,8,0,"ng-template",14),r(2,"div",15)(3,"section",16)(4,"h2",17),c(5,"WIC modules"),l(),r(6,"p",18),c(7,"Configure optional WAN interface cards."),l(),r(8,"div",39),Q(9,vle,1,1,null,null,Oe),l()()()()),n&2&&(v("optional",!0),m(9),K(at(1,Kse)))}function ble(n,o){n&1&&(r(0,"span",49)(1,"mat-icon"),c(2,"speed"),l(),r(3,"span",50)(4,"span",51),c(5,"Idle-PC"),l(),r(6,"span",52),c(7,"Optional CPU optimization"),l()()())}function xle(n,o){n&1&&(r(0,"span",49)(1,"mat-icon"),c(2,"settings_ethernet"),l(),r(3,"span",50)(4,"span",51),c(5,"Netmiko device type"),l(),r(6,"span",52),c(7,"Optional device type"),l()()())}function yle(n,o){if(n&1){let e=R();r(0,"button",56),_("click",function(){y(e),h();let i=Te(3);return w(i.previous())}),r(1,"mat-icon"),c(2,"arrow_back"),l(),c(3," Back "),l()}}function wle(n,o){if(n&1){let e=R();r(0,"button",57),_("click",function(){y(e),h();let i=Te(3);return w(i.next())}),c(1," Next "),r(2,"mat-icon",58),c(3,"arrow_forward"),l()()}if(n&2){let e=h(2);v("disabled",!e.canAdvance())}}function Mle(n,o){if(n&1){let e=R();r(0,"button",59),_("click",function(){y(e);let i=h(2);return w(i.addTemplate())}),c(1," Create template "),r(2,"mat-icon",58),c(3,"arrow_forward"),l()()}if(n&2){let e=h(2);v("disabled",!e.canCreateTemplate())}}function Sle(n,o){if(n&1){let e=R();r(0,"main",7)(1,"section",9)(2,"mat-horizontal-stepper",10,0),_("selectionChange",function(i){y(e);let a=h();return w(a.selectedStepIndex.set(i.selectedIndex))}),se(4,Zse,1,1,"ng-template",11)(5,Jse,1,1,"ng-template",12),r(6,"mat-step",13),se(7,ele,8,0,"ng-template",14),r(8,"div",15)(9,"section",16)(10,"h2",17),c(11,"Controller type"),l(),r(12,"p",18),c(13,"Choose where this IOS router will run."),l(),r(14,"mat-radio-group",19)(15,"mat-radio-button",20),_("click",function(){y(e);let i=h();return w(i.setControllerType("local"))}),c(16," Run this IOS router locally "),l()()()()(),r(17,"mat-step",13),se(18,tle,8,0,"ng-template",14),r(19,"div",15)(20,"section",16)(21,"h2",17),c(22,"IOS image"),l(),r(23,"p",18),c(24,"Select an existing IOS image or upload a new one."),l(),r(25,"input",21,1),_("change",function(i){y(e);let a=h();return w(a.addImage(i))}),l(),r(27,"div",22)(28,"button",23),_("click",function(){y(e);let i=Te(26);return w(i.click())}),c(29," Click to add image "),l(),r(30,"span",24),c(31,"or create from existing one"),l()(),r(32,"div",25)(33,"mat-form-field",26)(34,"mat-label"),c(35,"Image"),l(),r(36,"mat-select",27),_("selectionChange",function(i){y(e);let a=h();return a.imageName.set(i.value),w(a.onImageChosen())}),Q(37,nle,2,2,"mat-option",28,Xse),l()()()()()(),r(39,"mat-step",13),se(40,ile,8,0,"ng-template",14),r(41,"div",15)(42,"section",16)(43,"h2",17),c(44,"Template information"),l(),r(45,"p",18),c(46,"Choose a name and an optional usage note for your template."),l(),r(47,"div",29)(48,"mat-form-field",26)(49,"mat-label"),c(50,"Name"),l(),r(51,"input",30),_("input",function(i){y(e);let a=h();return w(a.templateName.set(i.target.value))}),l()(),r(52,"mat-form-field",26)(53,"mat-label"),c(54,"Platform"),l(),r(55,"mat-select",31),_("selectionChange",function(i){y(e);let a=h();return a.platform.set(i.value),w(a.onPlatformChosen())}),Q(56,ole,2,2,"mat-option",28,Oe),l()(),T(58,rle,6,1,"mat-form-field",26),l(),T(59,sle,2,1,"mat-checkbox",32),r(60,"app-template-info-fields",33),rn("usageChange",function(i){y(e);let a=h();return Xt(a.usage,i)||(a.usage=i),w(i)})("symbolChange",function(i){y(e);let a=h();return Xt(a.symbol,i)||(a.symbol=i),w(i)}),l()()()(),r(61,"mat-step",13),se(62,lle,8,0,"ng-template",14),r(63,"div",15)(64,"section",16)(65,"h2",17),c(66,"Memory"),l(),r(67,"p",18),c(68,"Set the default RAM allocated to the router."),l(),r(69,"div",29)(70,"mat-form-field",26)(71,"mat-label"),c(72,"Default RAM"),l(),r(73,"input",34),_("input",function(i){y(e);let a=h();return w(a.memory.set(i.target.value))}),l(),r(74,"span",35),c(75,"MB"),l()(),r(76,"mat-label",36)(77,"a",37),c(78,"Check for minimum and maximum RAM requirement"),l()()()()()(),r(79,"mat-step",38),se(80,cle,8,0,"ng-template",14),r(81,"div",15)(82,"section",16)(83,"h2",17),c(84,"Network adapters"),l(),r(85,"p",18),c(86,"Configure the modules installed in the router slots."),l(),T(87,gle,3,1,"div",39),l()()(),T(88,Cle,11,2,"mat-step",38),r(89,"mat-step",38),se(90,ble,8,0,"ng-template",14),r(91,"div",15)(92,"section",16)(93,"h2",17),c(94,"Idle-PC"),l(),r(95,"p",18),c(96,"Set or calculate an optional CPU optimization value."),l(),r(97,"div",29)(98,"mat-form-field",26)(99,"mat-label"),c(100,"Idle-PC"),l(),r(101,"input",40),_("input",function(i){y(e);let a=h();return w(a.idlepc.set(i.target.value))}),l()(),r(102,"button",41),_("click",function(){y(e);let i=h();return w(i.findIdlePC())}),c(103,"Idle-PC finder"),l()()()()(),r(104,"mat-step",38),se(105,xle,8,0,"ng-template",14),r(106,"div",15)(107,"section",16)(108,"h2",17),c(109,"Netmiko device type"),l(),r(110,"p",18),c(111," Default device type used for netmiko-driven configuration pushes. "),l(),r(112,"div",29)(113,"app-netmiko-device-type-select",42),rn("valueChange",function(i){y(e);let a=h();return Xt(a.netmikoDeviceType,i)||(a.netmikoDeviceType=i),w(i)}),l()()()()()()(),r(114,"div",43)(115,"button",44),_("click",function(){y(e);let i=h();return w(i.goBack())}),c(116,"Cancel"),l(),r(117,"div",45),T(118,yle,4,0,"button",46),T(119,wle,4,1,"button",47)(120,Mle,4,1,"button",48),l()()()}if(n&2){let e=Te(3),t=h();m(2),v("linear",!0),m(4),v("completed",t.isLocalComputerChosen()),m(9),v("checked",!0),m(2),v("completed",t.imageStepCompleted()),m(8),v("uploader",t.uploader()),m(11),v("value",t.imageName()),m(),K(t.iosImages()),m(2),v("completed",t.namePlatformStepCompleted()),m(12),v("value",t.templateName()),m(4),v("value",t.platform()),m(),K(t.platforms()),m(2),E(t.chassisOptions()[t.platform()]?58:-1),m(),E(t.platformsWithEtherSwitchRouterOption()[t.iosTemplate().platform]?59:-1),m(),an("usage",t.usage)("symbol",t.symbol),m(),v("completed",t.memoryStepCompleted()),m(12),v("value",t.memory()),m(4),v("href",t.ciscoUrl,Ba),m(2),v("optional",!0),m(8),E(t.platform()&&t.adapterMatrix()[t.platform()]&&t.adapterMatrix()[t.platform()][t.chassis()||""]?87:-1),m(),E(t.platform()&&t.wicMatrix()[t.platform()]?88:-1),m(),v("optional",!0),m(12),v("value",t.idlepc()),m(3),v("optional",!0),m(9),an("value",t.netmikoDeviceType),v("controller",t.controller()),m(5),E(t.selectedStepIndex()>0?118:-1),m(),E(t.selectedStepIndex()<e.steps.length-1?119:120)}}var J1=(()=>{class n{route=f($t);controllerService=f(_t);iosService=f(Km);toasterService=f(re);validationService=f(Hn);router=f(Ft);location=f(ki);templateMocksService=f(Rr);iosConfigurationService=f(Qm);uploadServiceService=f(Al);progressService=f(mo);snackBar=f(pl);cd=f(oe);controller=z(void 0);iosTemplate=z(new _h);isEtherSwitchRouter=z(!1);imageName=$("");templateName=$("");platform=$("");chassis=$("");memory=$("");idlepc=$("");netmikoDeviceType=$("");usage=$("");symbol=$("router");iosImages=z([]);platforms=z([]);platformsWithEtherSwitchRouterOption=z({});chassisOptions=z({});defaultRam=z({});networkAdaptersForTemplate=z([]);wicsForTemplate=z([]);adapterMatrix=z({});wicMatrix=z({});ciscoUrl="https://cfn.cloudapps.cisco.com/ITDIT/CFN/jsp/SearchBySoftware.jsp";uploader=z(void 0);isLocalComputerChosen=z(!0);selectedStepIndex=z(0);subscription;imageStepCompleted=Ne(()=>!!this.imageName());namePlatformStepCompleted=Ne(()=>!!this.templateName()&&!!this.platform());memoryStepCompleted=Ne(()=>!!this.memory());canAdvance(){switch(this.selectedStepIndex()){case 0:return this.isLocalComputerChosen();case 1:return this.imageStepCompleted();case 2:return this.namePlatformStepCompleted();case 3:return this.memoryStepCompleted();default:return!0}}canCreateTemplate(){return!!this.controller()&&this.imageStepCompleted()&&this.namePlatformStepCompleted()&&this.memoryStepCompleted()}ngOnInit(){this.uploader.set(new kl({url:""})),this.uploader().onAfterAddingFile=t=>{t.withCredentials=!1},this.uploader().onErrorItem=(t,i,a,s)=>{this.toasterService.error("An error occured: "+i)},this.uploader().onSuccessItem=(t,i,a,s)=>{this.getImages(),this.toasterService.success("Image uploaded")},this.uploader().onProgressItem=t=>{this.uploadServiceService.processBarCount(t.progress)},this.subscription=this.uploadServiceService.currentCancelItemDetails.subscribe(t=>{t&&this.cancelUploading()});let e=this.route.snapshot.paramMap.get("controller_id");this.controllerService.get(parseInt(e,10)).then(t=>{this.controller.set(t),this.getImages(),this.templateMocksService.getIosTemplate().subscribe({next:i=>{this.iosTemplate.set(i),this.platforms.set(this.iosConfigurationService.getAvailablePlatforms()),this.platformsWithEtherSwitchRouterOption.set(this.iosConfigurationService.getPlatformsWithEtherSwitchRouterOption()),this.chassisOptions.set(this.iosConfigurationService.getChassis()),this.defaultRam.set(this.iosConfigurationService.getDefaultRamSettings()),this.adapterMatrix.set(this.iosConfigurationService.getAdapterMatrix()),this.wicMatrix.set(this.iosConfigurationService.getWicMatrix())},error:i=>{let a=i.error?.message||i.message||"Failed to load template";this.toasterService.error(a),this.cd.markForCheck()}})},t=>{let i=t.error?.message||t.message||"Failed to load controller";this.toasterService.error(i),this.cd.markForCheck()})}fillDefaultSlots(){if(!this.platform())return;let t=this.adapterMatrix()[this.platform()];if(!t)return;let i=this.chassisOptions()[this.platform()];if(i&&!this.chassis())return;let a=i?this.chassis():"",s=t[a];if(s)for(let d=0;d<=6;d++){let p=s[d];if(p&&(p.length===1||p[0].startsWith("C7200"))){let u=[...this.networkAdaptersForTemplate()];u[d]=p[0],this.networkAdaptersForTemplate.set(u)}}}setControllerType(e){e==="local"&&this.isLocalComputerChosen.set(!0)}getImages(){this.iosService.getImages(this.controller()).subscribe({next:e=>{this.iosImages.set(e)},error:e=>{let t=e.error?.message||e.message||"Failed to load images";this.toasterService.error(t),this.cd.markForCheck()}})}addImage(e){let t=e.target.files[0].name.split("-")[0];this.templateName.set(t);let i=e.target.files[0].name,a=this.iosService.getImagePath(this.controller(),i);this.uploader().queue.forEach(d=>d.url=a);let s=this.uploader().queue[0];s.options&&(s.options.disableMultipart=!0),s.options.headers=[{name:"Authorization",value:"Bearer "+this.controller().authToken}],this.uploader().uploadItem(s),this.snackBar.openFromComponent(Nl,{panelClass:"uplaoding-file-snackabar",data:{upload_file_type:"Image"}})}addTemplate(){if(this.canCreateTemplate()){let e=this.validationService.validateNetmikoDeviceType(this.netmikoDeviceType());if(!e.isValid){this.toasterService.error(e.errorMessage);return}let t=this.iosTemplate();t.template_id=xo(),t.image=this.imageName(),t.name=this.templateName(),t.platform=this.platform(),t.usage=this.usage(),t.symbol=this.symbol(),this.chassisOptions()[this.platform()]&&(t.chassis=this.chassis()),t.ram=+this.memory(),this.isEtherSwitchRouter()&&(t.symbol="multilayer_switch",t.category="switch"),this.networkAdaptersForTemplate().length>0&&this.completeAdaptersData(t),this.wicsForTemplate().length>0&&this.completeWicsData(t),this.idlepc()&&(t.idlepc=this.idlepc()),t.netmiko_device_type=this.netmikoDeviceType().trim()||null,t.compute_id="local",this.iosService.addTemplate(this.controller(),t).subscribe({next:()=>{this.goBack()},error:i=>{let a=i.error?.message||i.message||"Failed to add ios template";this.toasterService.error(a),this.cd.markForCheck()}})}else this.toasterService.error("Fill all required fields")}completeAdaptersData(e){let t=this.adapterMatrix();for(let i=0;i<=6;i++)t[e.platform][e.chassis||""][i]&&(this.networkAdaptersForTemplate()[i]===void 0?e[`slot${i}`]="":e[`slot${i}`]=this.networkAdaptersForTemplate()[i])}completeWicsData(e){let t=this.wicMatrix();for(let i=0;i<=3;i++)t[e.platform][i]&&(this.wicsForTemplate()[i]===void 0?e[`wic${i}`]="":e[`wic${i}`]=this.wicsForTemplate()[i])}goBack(){let e=this.controller()?.id??parseInt(this.route.snapshot.paramMap.get("controller_id"),10);ji(this.location,this.router,["/controller",e,"preferences"])}onImageChosen(){let e=this.imageName().split("-")[0];this.templateName.set(e);let t=e.substring(1);if(["c1700","c2600","c2691","c3725","c3745","c3600","c7200"].includes(e))this.platform.set(e),e==="c1700"?this.chassis.set("1760"):e==="c2600"?this.chassis.set("2651XM"):this.chassis.set("");else if(e.startsWith("c36")){this.platform.set("c3600");let a=["3620","3640","3660"];a.includes(t)?this.chassis.set(t):(this.chassis.set(""),this.toasterService.warning(`Invalid chassis '${t}' for platform c3600. Please select a valid chassis: ${a.join(", ")}`))}else if(e.startsWith("c17")){this.platform.set("c1700");let a=["1720","1721","1750","1751","1760"];a.includes(t)?this.chassis.set(t):(this.chassis.set(""),this.toasterService.warning(`Invalid chassis '${t}' for platform c1700. Please select a valid chassis: ${a.join(", ")}`))}else e.startsWith("c26")?(this.platform.set("c2600"),["2610","2611","2620","2621","2610XM","2611XM","2620XM","2621XM","2650XM","2651XM"].includes(t)?this.chassis.set(t):(this.chassis.set(""),this.toasterService.warning(`Invalid chassis '${t}' for platform c2600. Please select a valid chassis.`))):(this.platform.set(e),this.chassis.set(""),this.toasterService.warning(`Unknown platform '${e}'. Supported platforms are: c1700, c2600, c2691, c3600, c3725, c3745, c7200. Please verify the platform manually.`));this.memory.set(String(this.defaultRam()[this.platform()])),this.fillDefaultSlots()}onPlatformChosen(){let e=this.iosTemplate();e.chassis="",this.iosTemplate.set(q({},e)),this.networkAdaptersForTemplate.set([]),this.wicsForTemplate.set([]),this.chassisOptions()[this.platform()]||this.fillDefaultSlots()}onChassisChosen(){this.networkAdaptersForTemplate.set([]),this.chassisOptions()[this.platform()]&&this.fillDefaultSlots()}cancelUploading(){this.uploader().clearQueue(),this.uploadServiceService.processBarCount(null),this.toasterService.warning("File upload cancelled")}onAdapterChange(e,t){this.networkAdaptersForTemplate.update(i=>{let a=[...i];return a[e]=t,a})}onWicChange(e,t){this.wicsForTemplate.update(i=>{let a=[...i];return a[e]=t,a})}findIdlePC(){let e={image:this.imageName(),platform:this.platform(),ram:+this.memory()};this.progressService.activate(),this.iosService.findIdlePC(this.controller(),e).subscribe(t=>{this.progressService.deactivate(),t.idlepc!==null&&(this.idlepc.set(t.idlepc),this.toasterService.success(`Idle-PC value found: ${t.idlepc}`))},t=>{this.progressService.deactivate(),this.toasterService.error("Error while finding an idle-PC value")})}ngOnDestroy(){this.subscription.unsubscribe()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-add-ios-template"]],inputs:{imageName:[1,"imageName"],templateName:[1,"templateName"],platform:[1,"platform"],chassis:[1,"chassis"],memory:[1,"memory"],idlepc:[1,"idlepc"],netmikoDeviceType:[1,"netmikoDeviceType"],usage:[1,"usage"],symbol:[1,"symbol"]},outputs:{imageName:"imageNameChange",templateName:"templateNameChange",platform:"platformChange",chassis:"chassisChange",memory:"memoryChange",idlepc:"idlepcChange",netmikoDeviceType:"netmikoDeviceTypeChange",usage:"usageChange",symbol:"symbolChange"},decls:7,vars:2,consts:[["stepper",""],["file",""],[1,"ios-add","template-wizard"],[1,"ios-add__header","template-wizard__header"],["mat-icon-button","","aria-label","Back to IOS templates",1,"ios-add__back-btn","template-wizard__back"],[1,"template-wizard__heading"],[1,"ios-add__title","template-wizard__title"],[1,"ios-add__content","template-wizard__body"],["mat-icon-button","","aria-label","Back to IOS templates",1,"ios-add__back-btn","template-wizard__back",3,"click"],[1,"ios-add__stepper-card","template-wizard__stepper-card"],[1,"ios-add__stepper","template-wizard__stepper",3,"selectionChange","linear"],["matStepperIcon","edit"],["matStepperIcon","done"],[3,"completed"],["matStepLabel",""],[1,"ios-add__step-content","template-wizard__panel"],[1,"template-wizard__section"],[1,"template-wizard__section-title"],[1,"template-wizard__section-copy"],[1,"ios-add__radio-group"],["value","1",1,"ios-add__radio",3,"click","checked"],["type","file","accept",".bin, .image","ng2FileSelect","",1,"ios-add__file-input",3,"change","uploader"],[1,"ios-add__image-source-row"],["mat-raised-button","","color","primary",1,"ios-add__upload-btn",3,"click"],[1,"ios-add__or-text"],[1,"ios-add__form","ios-add__image-select"],["appearance","outline","subscriptSizing","dynamic",1,"ios-add__field"],["required","","placeholder","Image",3,"selectionChange","value"],[3,"value"],[1,"ios-add__form"],["matInput","","required","","type","text","placeholder","Name",3,"input","value"],["required","","placeholder","Platform",3,"selectionChange","value"],[1,"ios-add__checkbox",3,"checked"],[3,"usageChange","symbolChange","usage","symbol"],["matInput","","required","","type","number","min","1","placeholder","Default RAM",3,"input","value"],["matTextSuffix","",1,"template-wizard__unit-suffix"],[1,"ios-add__ram-link"],[3,"href"],[3,"optional"],[1,"ios-add__adapters"],["matInput","","type","text","placeholder","Idle-PC",3,"input","value"],["mat-raised-button","","color","primary","type","button",1,"ios-add__action-btn",3,"click"],["subscriptSizing","dynamic","appearance","outline",1,"ios-add__field",3,"valueChange","value","controller"],[1,"ios-add__actions","template-wizard__actions"],["mat-stroked-button","",1,"ios-add__cancel-btn",3,"click"],[1,"template-wizard__step-actions"],["mat-button","","type","button",1,"template-wizard__previous"],["mat-raised-button","","color","primary","type","button",1,"template-wizard__next",3,"disabled"],["mat-raised-button","","color","primary",1,"ios-add__submit-btn",3,"disabled"],[1,"template-wizard__step-label"],[1,"template-wizard__step-label-text"],[1,"template-wizard__step-label-title"],[1,"template-wizard__step-label-description"],["required","","placeholder","Chassis",3,"selectionChange","value"],[1,"ios-add__checkbox",3,"change","checked"],[3,"selectionChange","placeholder","value"],["mat-button","","type","button",1,"template-wizard__previous",3,"click"],["mat-raised-button","","color","primary","type","button",1,"template-wizard__next",3,"click","disabled"],["iconPositionEnd",""],["mat-raised-button","","color","primary",1,"ios-add__submit-btn",3,"click","disabled"]],template:function(t,i){t&1&&(r(0,"div",2)(1,"header",3),T(2,Yse,3,0,"button",4),r(3,"div",5)(4,"h1",6),c(5,"New IOS router template"),l()()(),T(6,Sle,121,26,"main",7),l()),t&2&&(m(2),E(i.controller()?2:-1),m(4),E(i.iosTemplate()?6:-1))},dependencies:[po,ie,ce,Y,he,Be,Rt,Gt,Fo,la,Zo,we,Pe,Ve,oi,ye,Ee,ot,ct,nt,Il,gc,tl,hc,uc,Pl,Kc,Ds],styles:["[_nghost-%COMP%]{display:block;width:100%;background:transparent}.ios-add__header[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:32px 20px 16px;display:flex;align-items:center;gap:16px;animation:none}.ios-add__back-btn[_ngcontent-%COMP%]{width:48px;height:48px;border-radius:12px;color:var(--mat-sys-on-surface);transition:all var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1)}.ios-add__back-btn[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 8%,transparent)}.ios-add__title[_ngcontent-%COMP%]{flex:1;font-size:32px;font-weight:500;color:var(--mat-sys-on-surface);margin:0}.ios-add__content[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:0 20px 20px;animation:none}.ios-add__stepper-card[_ngcontent-%COMP%]{background:var(--mat-sys-surface);border-radius:16px;overflow:hidden;box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 20%,transparent),0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent)}.ios-add__stepper[_ngcontent-%COMP%]{background:transparent}.ios-add__step-content[_ngcontent-%COMP%]{padding:16px 24px 24px;display:flex;flex-direction:column;gap:16px}.ios-add__radio-group[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px}.ios-add__radio[_ngcontent-%COMP%]{font-size:16px}.ios-add__file-input[_ngcontent-%COMP%]{display:none}.ios-add__upload-btn[_ngcontent-%COMP%]{align-self:flex-start}.ios-add__image-source-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:16px}.ios-add__image-select[_ngcontent-%COMP%]{margin-top:16px}.ios-add__or-text[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface-variant)}.ios-add__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px}.ios-add__field[_ngcontent-%COMP%]{width:100%}.ios-add__checkbox[_ngcontent-%COMP%]{margin-top:8px}.ios-add__ram-link[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-primary)}.ios-add__ram-link[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:var(--mat-sys-primary);text-decoration:none}.ios-add__ram-link[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{text-decoration:underline}.ios-add__adapters[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:16px}.ios-add__action-btn[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing);border-radius:var(--mat-sys-corner-full, 999px);align-self:flex-start}.ios-add__actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:12px;margin-top:24px}.ios-add__cancel-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none}.ios-add__submit-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none;letter-spacing:.5px}@media(max-width:768px){.ios-add__header[_ngcontent-%COMP%]{padding:24px 16px 12px;gap:12px}.ios-add__back-btn[_ngcontent-%COMP%]{width:44px;height:44px}.ios-add__title[_ngcontent-%COMP%]{font-size:24px}.ios-add__content[_ngcontent-%COMP%]{padding:0 16px 16px}.ios-add__step-content[_ngcontent-%COMP%]{padding:12px 16px 20px}.ios-add__image-source-row[_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column;gap:10px}.ios-add__adapters[_ngcontent-%COMP%]{grid-template-columns:1fr}.ios-add__actions[_ngcontent-%COMP%]{flex-direction:column}.ios-add__cancel-btn[_ngcontent-%COMP%], .ios-add__submit-btn[_ngcontent-%COMP%]{width:100%;height:44px}}",'[_nghost-%COMP%]{display:block;width:100%;background:transparent}.templates-page__content[_ngcontent-%COMP%]{animation:none}.templates-page__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:20px;max-width:1600px;margin:0 auto;padding:24px 20px 16px}.templates-page__heading[_ngcontent-%COMP%], .templates-page__header-actions[_ngcontent-%COMP%]{display:flex;align-items:center}.templates-page__heading[_ngcontent-%COMP%]{min-width:0;gap:var(--gns3-density-space-3)}.templates-page__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.templates-page__header-actions[_ngcontent-%COMP%]{gap:var(--gns3-density-space-3)}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);border-radius:12px;padding-inline:18px;font-size:15px;font-weight:500;letter-spacing:.3px;text-transform:none}[class*=-templates__header][_ngcontent-%COMP%]{box-sizing:border-box;width:100%;height:calc(var(--gns3-density-space-4) * 2 + (var(--gns3-density-section-title-size) + 2px) * 1.2 + 1px);max-width:none;margin:0;padding:0 var(--gns3-density-page-padding);gap:var(--gns3-density-space-3);color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container);border-bottom:1px solid var(--mat-sys-outline-variant)}[class*=-templates__back-btn][_ngcontent-%COMP%], [class*=-templates__add-btn][_ngcontent-%COMP%]{flex:0 0 auto;width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:12px}[class*=-templates__back-btn][_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container)}[class*=-templates__add-btn][_ngcontent-%COMP%]{color:var(--mat-sys-primary)}[class*=-templates__title][_ngcontent-%COMP%]{flex:1;min-width:0;margin:0;padding-bottom:0;color:var(--mat-sys-on-primary-container);font-size:calc(var(--gns3-density-section-title-size) + 2px);font-weight:650;line-height:1.2;letter-spacing:-.01em}.templates-page__scopes[_ngcontent-%COMP%]{display:flex;gap:4px;max-width:1560px;margin:0 auto 16px;padding:0 20px;border-bottom:1px solid var(--mat-sys-outline-variant)}.templates-page__scope[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center;gap:8px;min-height:48px;padding:0 16px;border:0;color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;font-size:14px;font-weight:550;cursor:pointer}.templates-page__scope[_ngcontent-%COMP%]:after{position:absolute;right:8px;bottom:-1px;left:8px;height:2px;border-radius:2px 2px 0 0;background:transparent;content:""}.templates-page__scope[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}.templates-page__scope[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{min-width:22px;padding:2px 6px;border-radius:12px;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-high);font-size:11px;text-align:center}.templates-page__scope--active[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%]:after{background:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap);max-width:1600px;margin:0 auto;padding:0 20px 8px}.templates-page__search[_ngcontent-%COMP%]{flex:1;min-width:240px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:flex;align-items:center;flex:0 0 auto;gap:var(--gns3-density-space-3)}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{width:155px}.templates-page__view-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px;padding:4px 2px;border-radius:8px;background:var(--mat-sys-surface-container-high)}button.templates-page__view-button[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:8px;color:var(--mat-sys-on-surface-variant);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);--mat-icon-button-icon-size: 22px}button.templates-page__view-button--active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__main[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:20px;max-width:1600px;margin:0 auto;padding:0 20px 20px}.templates-page__loading[_ngcontent-%COMP%]{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;min-height:320px;gap:var(--gns3-density-card-gap);color:var(--mat-sys-on-surface-variant)}.templates-page__table-container[_ngcontent-%COMP%]{flex:1;min-width:0;border-radius:16px;background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;overflow-x:auto}mat-table[_ngcontent-%COMP%]{width:100%;min-width:850px}.mat-mdc-row[_ngcontent-%COMP%], .mat-row[_ngcontent-%COMP%]{height:var(--mat-table-row-item-container-height);min-height:var(--mat-table-row-item-container-height)}.mat-header-row[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%]{position:sticky;top:0;z-index:10;background:var(--mat-sys-surface-container-highest);box-shadow:inset 0 -2px var(--mat-sys-primary);--mat-sort-arrow-color: var(--mat-sys-primary)}.mat-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:13px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}mat-row[_ngcontent-%COMP%]{cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease}mat-row[_ngcontent-%COMP%]:nth-child(2n){background:color-mix(in srgb,var(--mat-sys-on-surface) 1%,transparent)}mat-row[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}mat-row.templates-page__row--selected[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}mat-cell[_ngcontent-%COMP%], mat-header-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:inherit;color:var(--mat-sys-on-surface)}.mat-column-name[_ngcontent-%COMP%]{flex:2.4;min-width:240px;justify-content:flex-start}.mat-column-template_type[_ngcontent-%COMP%]{flex:1.1;min-width:130px}.mat-column-category[_ngcontent-%COMP%]{flex:1;min-width:110px}.mat-column-compute_id[_ngcontent-%COMP%]{flex:1;min-width:105px}.mat-column-builtin[_ngcontent-%COMP%]{flex:0 0 90px;min-width:90px;justify-content:center}.mat-column-actions[_ngcontent-%COMP%]{flex:0 0 180px;min-width:180px;box-sizing:border-box;justify-content:flex-start;padding-right:24px}.templates-page__name-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-width:0;gap:var(--gns3-density-space-3)}.templates-page__name-copy[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:14px;font-weight:600}.templates-page__symbol[_ngcontent-%COMP%]{display:grid;flex:0 0 52px;width:52px;height:52px;overflow:hidden;place-items:center;border-radius:14px;color:var(--mat-sys-on-primary-container);background:color-mix(in srgb,var(--mat-sys-primary-container) 82%,var(--mat-sys-surface))}.templates-page__symbol[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:78%;height:78%;object-fit:contain;filter:drop-shadow(0 2px 4px color-mix(in srgb,var(--mat-sys-shadow) 25%,transparent))}.templates-page__symbol[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:27px;height:27px;font-size:27px}.templates-page__symbol--small[_ngcontent-%COMP%]{flex-basis:38px;width:38px;height:38px;border-radius:10px}.templates-page__symbol--small[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:21px;height:21px;font-size:21px}.templates-page__type-badge[_ngcontent-%COMP%], .templates-page__source-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;width:fit-content;padding:4px 9px;border-radius:16px;font-size:12px;font-weight:600;white-space:nowrap}.templates-page__type-badge[_ngcontent-%COMP%]{color:var(--mat-sys-secondary);background:color-mix(in srgb,var(--mat-sys-secondary) 11%,transparent)}.templates-page__type-badge--qemu[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__type-badge--docker[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container)}.templates-page__type-badge--dynamips[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary-container);background:var(--mat-sys-tertiary-container)}.templates-page__type-badge--cloud[_ngcontent-%COMP%]{color:var(--mat-sys-on-error-container);background:var(--mat-sys-error-container)}.templates-page__type-badge--vpcs[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary);background:var(--mat-sys-primary)}.templates-page__type-badge--ethernet-hub[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary);background:var(--mat-sys-secondary)}.templates-page__type-badge--ethernet-switch[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary);background:var(--mat-sys-tertiary)}.templates-page__type-badge--iou[_ngcontent-%COMP%]{color:var(--mat-sys-on-error);background:var(--mat-sys-error)}.templates-page__type-badge--nat[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-highest)}.templates-page__source-badge[_ngcontent-%COMP%]{color:var(--mat-sys-primary);background:color-mix(in srgb,var(--mat-sys-primary) 11%,transparent)}.templates-page__source-badge--builtin[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary);background:color-mix(in srgb,var(--mat-sys-tertiary) 11%,transparent)}.templates-page__table-footer[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:var(--mat-table-footer-container-height);padding:0 12px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container))}.templates-page__table-footer[_ngcontent-%COMP%] mat-paginator[_ngcontent-%COMP%]{width:100%;--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__actions-cell[_ngcontent-%COMP%], .templates-page__card-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:3px}button.templates-page__action[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-on-surface-variant);width:var(--gns3-density-control-height-sm);height:var(--gns3-density-control-height-sm);--mat-icon-button-state-layer-size: var(--gns3-density-control-height-sm);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-control-height-sm)}button.templates-page__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}button.templates-page__action[_ngcontent-%COMP%]{color:var(--template-action-color);--mat-icon-button-state-layer-color: var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:not(:disabled) mat-icon[_ngcontent-%COMP%]{color:var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:disabled mat-icon[_ngcontent-%COMP%]{color:var(--gns3-button-disabled-label-color)}button.templates-page__action--details[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--edit[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-primary)}button.templates-page__action--duplicate[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--delete[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-error)}.templates-page__grid[_ngcontent-%COMP%]{flex:1;min-width:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-content:start;gap:var(--gns3-density-card-gap)}.templates-page__grid--with-details[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__card[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column;padding:16px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;background:var(--mat-sys-surface);cursor:pointer;transition:transform var(--gns3-motion-duration-standard) ease,box-shadow var(--gns3-motion-duration-standard) ease,border-color var(--gns3-motion-duration-standard) ease}.templates-page__card[_ngcontent-%COMP%]:hover{border-color:var(--mat-sys-outline-variant);background:var(--mat-sys-surface-container-low)}.templates-page__card--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);box-shadow:0 0 0 1px var(--mat-sys-primary)}.templates-page__card-header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--gns3-density-space-3)}.templates-page__card-body[_ngcontent-%COMP%]{flex:1;min-width:0;padding:14px 0 12px}.templates-page__card-body[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{display:-webkit-box;overflow:hidden;margin:0 0 9px;color:var(--mat-sys-on-surface);font-size:17px;font-weight:650;line-height:1.35;overflow-wrap:anywhere;-webkit-box-orient:vertical;-webkit-line-clamp:2}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%]{display:grid;gap:8px;margin:16px 0 0}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{min-width:0;margin:0;overflow:hidden;color:var(--mat-sys-on-surface);font-size:13px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] .templates-page__card-tags-row[_ngcontent-%COMP%]{align-items:flex-start}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd.templates-page__card-tags[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px;overflow:visible;white-space:normal}.templates-page__card-actions[_ngcontent-%COMP%]{justify-content:flex-end;min-height:33px;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__grid-paginator[_ngcontent-%COMP%]{grid-column:1/-1;width:100%;border-radius:12px;background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container));--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__empty[_ngcontent-%COMP%]{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:230px;padding:32px;color:var(--mat-sys-on-surface-variant);text-align:center}.templates-page__empty[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{width:48px;height:48px;font-size:48px;opacity:.55}.templates-page__empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:12px 0 0;color:var(--mat-sys-on-surface);font-size:17px}.templates-page__empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:5px 0 0;font-size:14px}.templates-page__details[_ngcontent-%COMP%]{position:sticky;top:16px;flex:0 0 clamp(390px,31vw,480px);display:flex;min-height:380px;max-height:calc(100vh - 176px);flex-direction:column;overflow:hidden;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 60%,transparent);border-radius:16px;background:var(--mat-sys-surface);box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent);animation:_ngcontent-%COMP%_templates-slide-in var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard)}.templates-page__details-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:var(--gns3-density-space-3);min-height:56px;box-sizing:border-box;padding:8px 10px 8px 16px;border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 72%,var(--mat-sys-surface))}.templates-page__details-header[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-primary-container)}.templates-page__details-heading[_ngcontent-%COMP%]{display:flex;min-width:0;align-items:center;gap:var(--gns3-density-space-3)}.templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;margin:0;color:var(--mat-sys-on-primary-container);font-size:19px;font-weight:650;line-height:1.25;text-overflow:ellipsis;white-space:nowrap}.templates-page__details-title-line[_ngcontent-%COMP%]{display:flex;flex:1;min-width:0;align-items:center;gap:var(--gns3-density-space-2)}.templates-page__details-title-line[_ngcontent-%COMP%] .templates-page__type-badge[_ngcontent-%COMP%]{flex:0 0 auto}.templates-page__details-body[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:12px 20px}.templates-page__description[_ngcontent-%COMP%]{padding:10px 0 14px;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__description[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.6px;text-transform:uppercase}.templates-page__description[_ngcontent-%COMP%] app-markdown-viewer[_ngcontent-%COMP%]{display:block;margin-top:8px;padding:2px 12px;border-radius:10px;background:var(--mat-sys-surface-container-low);overflow-wrap:anywhere;--markdown-viewer-font-size: 13px;--markdown-viewer-line-height: 1.5;--markdown-viewer-heading-scale: .85}.templates-page__detail-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:22px 105px minmax(0,1fr);align-items:center;gap:var(--gns3-density-space-3);min-height:40px;box-sizing:border-box;padding:8px 0;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__detail-row[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:19px;height:19px;color:var(--mat-sys-primary);font-size:19px}.templates-page__detail-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:12px;font-weight:650;letter-spacing:.5px;text-transform:uppercase;white-space:nowrap}.templates-page__detail-row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{min-width:0;color:var(--mat-sys-on-surface);font-size:14px;font-weight:500;line-height:1.45;text-align:right;overflow-wrap:anywhere}.templates-page__detail-row--stacked[_ngcontent-%COMP%]{align-items:start}.templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__mono[_ngcontent-%COMP%], .templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__path[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-family:var(--gns3-font-code);font-size:12px;word-break:break-all}.templates-page__tags[_ngcontent-%COMP%]{border-bottom:0}.templates-page__tags[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:7px}.templates-page__tag[_ngcontent-%COMP%]{padding:5px 9px;border-radius:14px;color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container);font-size:11px;font-weight:550}.templates-page__details-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(105px,1fr));gap:var(--gns3-density-space-2);padding:14px 16px 18px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-surface-container) 72%,transparent)}button.templates-page__details-action[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-on-surface-variant);height:40px;border-radius:12px;color:var(--details-action-color);border-color:color-mix(in srgb,var(--details-action-color) 48%,transparent);font-size:13px;font-weight:500}button.templates-page__details-action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--details-action-color)}button.templates-page__details-action--edit[_ngcontent-%COMP%], button.templates-page__details-action--duplicate[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-primary)}button.templates-page__details-action--delete[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-error)}[data-density=compact][_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%]{min-height:40px;height:40px}[data-density=compact][_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%]{width:40px;height:40px;--mat-icon-button-state-layer-size: 40px}[data-density=compact][_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%]{min-height:48px;padding-block:4px}[data-density=compact][_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:18px}[data-density=compact][_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%]{padding-block:8px}[data-density=compact][_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%]{min-height:36px;padding-block:6px}[data-density=compact][_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%]{padding:12px}@keyframes _ngcontent-%COMP%_templates-slide-in{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@media(max-width:1400px){.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__main[_ngcontent-%COMP%]{flex-direction:column}.templates-page__table-container[_ngcontent-%COMP%], .templates-page__grid[_ngcontent-%COMP%], .templates-page__details[_ngcontent-%COMP%]{width:100%}.templates-page__details[_ngcontent-%COMP%]{position:static;flex-basis:auto;max-height:none}}@media(max-width:900px){.templates-page__header[_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column}.templates-page__header-actions[_ngcontent-%COMP%]{width:100%}.templates-page__toolbar[_ngcontent-%COMP%]{align-items:stretch;flex-direction:column}.templates-page__toolbar-actions[_ngcontent-%COMP%]{width:100%}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{flex:1;width:auto}}@media(max-width:640px){.templates-page__header[_ngcontent-%COMP%]{padding:20px 16px 12px}.templates-page__header-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{width:100%;padding-inline:10px}.templates-page__scopes[_ngcontent-%COMP%]{overflow-x:auto;padding-inline:16px}.templates-page__scope[_ngcontent-%COMP%]{flex:0 0 auto;padding-inline:12px}.templates-page__toolbar[_ngcontent-%COMP%], .templates-page__main[_ngcontent-%COMP%]{padding-inline:16px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__view-toggle[_ngcontent-%COMP%]{grid-column:1/-1;justify-self:end}.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.templates-page__details[_ngcontent-%COMP%]{min-width:0}}'],changeDetection:0})}return n})();var kle=()=>["c1700","c2600","c2691","c3600","c3725","c3745"],Ple=()=>[0,1,2,3,4,5,6],Tle=()=>[0,1,2];function Ele(n,o){if(n&1&&(r(0,"mat-option",30),c(1),l()),n&2){let e=o.$implicit;v("value",e[1]),m(),N(e[0])}}function Ole(n,o){if(n&1&&(r(0,"div",34)(1,"span",35),c(2,"Chassis"),l(),r(3,"span",36),c(4),l()()),n&2){let e=h(3);m(4),N(e.iosTemplate.chassis)}}function Dle(n,o){if(n&1){let e=R();r(0,"mat-chip-row",51),_("removed",function(){let i=y(e).$implicit,a=h(3);return w(a.removeTag(i))}),c(1),r(2,"button",52)(3,"mat-icon"),c(4,"cancel"),l()()()}if(n&2){let e=o.$implicit;v("editable",!1),Ce("title",e),m(),X(" ",e," "),m(),Ce("aria-label","Remove tag "+e)}}function Ile(n,o){if(n&1&&(r(0,"mat-option",30),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function Ale(n,o){if(n&1&&(r(0,"mat-option",30),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function Nle(n,o){if(n&1){let e=R();r(0,"div",16)(1,"div",23)(2,"mat-form-field",24)(3,"mat-label"),c(4,"Template name"),l(),r(5,"input",25),_("input",function(i){y(e);let a=h(2);return w(a.templateName.set(i.target.value))}),l()(),r(6,"mat-form-field",24)(7,"mat-label"),c(8,"Default name format"),l(),r(9,"input",26),_("input",function(i){y(e);let a=h(2);return w(a.defaultName.set(i.target.value))}),l()()(),r(10,"div",27)(11,"mat-form-field",28)(12,"mat-label"),c(13,"Category"),l(),r(14,"mat-select",29),_("valueChange",function(i){y(e);let a=h(2);return w(a.iosTemplate.category=i)}),Q(15,Ele,2,2,"mat-option",30,Oe),l()(),r(17,"mat-form-field",31)(18,"mat-label"),c(19,"Symbol"),l(),r(20,"input",32),_("input",function(i){y(e);let a=h(2);return w(a.symbol.set(i.target.value))}),l()(),r(21,"button",33),_("click",function(){y(e);let i=h(2);return w(i.chooseSymbol())}),r(22,"mat-icon"),c(23,"add"),l(),c(24," Choose symbol "),l()(),r(25,"div",34)(26,"span",35),c(27,"Platform"),l(),r(28,"span",36),c(29),l()(),T(30,Ole,5,1,"div",34),r(31,"div",37)(32,"mat-form-field",38)(33,"mat-label"),c(34,"Tags"),l(),r(35,"input",39),_("matChipInputTokenEnd",function(i){y(e);let a=h(2);return w(a.addTag(i))}),l()(),r(36,"mat-chip-grid",40,0),Q(38,Dle,5,4,"mat-chip-row",41,Oe),l()(),r(40,"mat-form-field",42)(41,"mat-label"),c(42,"IOS image path"),l(),r(43,"input",43),_("input",function(i){y(e);let a=h(2);return w(a.imagePath.set(i.target.value))}),l()(),r(44,"mat-form-field",42)(45,"mat-label"),c(46,"Initial startup-config"),l(),r(47,"input",44),_("input",function(i){y(e);let a=h(2);return w(a.initialConfig.set(i.target.value))}),l(),r(48,"mat-hint"),c(49,"Filename only (e.g. ios-startup-config.txt)"),l()(),r(50,"mat-form-field",42)(51,"mat-label"),c(52,"Initial private-config"),l(),r(53,"input",45),_("input",function(i){y(e);let a=h(2);return w(a.iosTemplate.private_config=i.target.value)}),l(),r(54,"mat-hint"),c(55,"Filename only (e.g. ios-private-config.txt)"),l()(),r(56,"div",23)(57,"mat-form-field",24)(58,"mat-label"),c(59,"Console type"),l(),r(60,"mat-select",29),_("valueChange",function(i){y(e);let a=h(2);return w(a.iosTemplate.console_type=i)}),Q(61,Ile,2,2,"mat-option",30,Oe),l()(),r(63,"mat-form-field",24)(64,"mat-label"),c(65,"Auxiliary console type"),l(),r(66,"mat-select",29),_("valueChange",function(i){y(e);let a=h(2);return w(a.iosTemplate.aux_type=i)}),Q(67,Ale,2,2,"mat-option",30,Oe),l()()(),r(69,"div",46)(70,"app-netmiko-device-type-select",47),rn("valueChange",function(i){y(e);let a=h(2);return Xt(a.netmikoDeviceType,i)||(a.netmikoDeviceType=i),w(i)}),l(),r(71,"mat-form-field",24)(72,"mat-label"),c(73,"Default username"),l(),r(74,"input",48),_("input",function(i){y(e);let a=h(2);return w(a.onCredentialInput("default_username",i))}),l()(),r(75,"mat-form-field",24)(76,"mat-label"),c(77,"Default password"),l(),r(78,"input",49),_("input",function(i){y(e);let a=h(2);return w(a.onCredentialInput("default_password",i))}),l()()(),r(79,"mat-checkbox",50),_("change",function(i){y(e);let a=h(2);return w(a.iosTemplate.console_auto_start=i.checked)}),c(80,"Auto start console"),l()()}if(n&2){let e=Te(37),t=h(2);m(5),v("value",t.templateName()),m(4),v("value",t.defaultName()),m(5),v("value",t.iosTemplate.category),m(),K(t.categories),m(5),v("value",t.symbol()),m(9),N(t.iosTemplate.platform),m(),E(t.iosTemplate.chassis?30:-1),m(5),v("matChipInputFor",e)("matChipInputSeparatorKeyCodes",t.separatorKeysCodes),m(),ne("gns3-chip-field__values--empty",((t.iosTemplate==null||t.iosTemplate.tags==null?null:t.iosTemplate.tags.length)??0)===0),m(2),K(t.iosTemplate==null?null:t.iosTemplate.tags),m(5),v("value",t.imagePath()),m(4),v("value",t.initialConfig()),m(6),v("value",t.iosTemplate.private_config),m(7),v("value",t.iosTemplate.console_type),m(),K(t.consoleTypes),m(5),v("value",t.iosTemplate.aux_type),m(),K(t.consoleTypes),m(3),an("value",t.netmikoDeviceType),v("controller",t.controller),m(4),v("value",t.defaultUsername()),m(4),v("value",t.defaultPassword()),m(),v("checked",t.iosTemplate.console_auto_start)}}function Fle(n,o){if(n&1){let e=R();r(0,"mat-form-field",42)(1,"mat-label"),c(2,"I/O memory"),l(),r(3,"input",61),_("input",function(i){y(e);let a=h(3);return w(a.iomemory.set(i.target.value))}),l(),r(4,"mat-hint"),c(5,"Percentage of RAM for I/O memory"),l()()}if(n&2){let e=h(3);m(3),v("value",e.iomemory())}}function Rle(n,o){if(n&1){let e=R();r(0,"div",16)(1,"h6",53),c(2,"Memory"),l(),r(3,"div",54)(4,"mat-form-field",42)(5,"mat-label"),c(6,"RAM size"),l(),r(7,"input",55),_("input",function(i){y(e);let a=h(2);return w(a.ram.set(i.target.value))}),l(),r(8,"span",56),c(9,"MB"),l()(),r(10,"mat-form-field",42)(11,"mat-label"),c(12,"NVRAM size"),l(),r(13,"input",57),_("input",function(i){y(e);let a=h(2);return w(a.nvram.set(i.target.value))}),l(),r(14,"span",56),c(15,"KB"),l()(),T(16,Fle,6,1,"mat-form-field",42),l(),r(17,"h6",53),c(18,"Disk"),l(),r(19,"div",54)(20,"mat-form-field",42)(21,"mat-label"),c(22,"PCMCIA disk0"),l(),r(23,"input",58),_("input",function(i){y(e);let a=h(2);return w(a.disk0.set(i.target.value))}),l()(),r(24,"mat-form-field",42)(25,"mat-label"),c(26,"PCMCIA disk1"),l(),r(27,"input",59),_("input",function(i){y(e);let a=h(2);return w(a.disk1.set(i.target.value))}),l()()(),r(28,"mat-checkbox",60),c(29,"Automatically delete NVRAM and disk files"),l()()}if(n&2){let e=h(2);m(7),v("value",e.ram()),m(6),v("value",e.nvram()),m(3),E(at(5,kle).includes(e.iosTemplate.platform)?16:-1),m(7),v("value",e.disk0()),m(4),v("value",e.disk1())}}function zle(n,o){n&1&&(r(0,"mat-option",30),c(1),l()),n&2&&(m(),N(""))}function Lle(n,o){if(n&1&&(r(0,"mat-option",30),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function Vle(n,o){if(n&1){let e=R();r(0,"mat-form-field",42)(1,"mat-label"),c(2),l(),r(3,"mat-select",62),_("selectionChange",function(i){y(e);let a=h().$implicit,s=h(3);return w(s.networkAdaptersForTemplate[a]=i.value)}),T(4,zle,2,1,"mat-option",30),Q(5,Lle,2,2,"mat-option",30,Oe),l()()}if(n&2){let e=h().$implicit,t=h(3);m(2),X("Slot ",e),m(),v("placeholder",ka("Slot ",e))("value",t.networkAdaptersForTemplate[e]),m(),E(t.adapterMatrix[t.iosTemplate.platform][t.iosTemplate.chassis||""][e].length>1&&!t.adapterMatrix[t.iosTemplate.platform][t.iosTemplate.chassis||""][e][0].startsWith("C7200")?4:-1),m(),K(t.adapterMatrix[t.iosTemplate.platform][t.iosTemplate.chassis||""][e])}}function Ble(n,o){if(n&1&&T(0,Vle,7,5,"mat-form-field",42),n&2){let e=o.$implicit,t=h(3);E(t.adapterMatrix[t.iosTemplate.platform]&&t.adapterMatrix[t.iosTemplate.platform][t.iosTemplate.chassis||""]&&t.adapterMatrix[t.iosTemplate.platform][t.iosTemplate.chassis||""][e]?0:-1)}}function jle(n,o){if(n&1&&(r(0,"mat-option",30),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function $le(n,o){if(n&1){let e=R();r(0,"mat-form-field",42)(1,"mat-label"),c(2),l(),r(3,"mat-select",62),_("selectionChange",function(i){y(e);let a=h().$implicit,s=h(4);return w(s.wicsForTemplate[a]=i.value)}),r(4,"mat-option",30),c(5),l(),Q(6,jle,2,2,"mat-option",30,Oe),l()()}if(n&2){let e=h().$implicit,t=h(4);m(2),X("WIC ",e),m(),v("placeholder",ka("WIC ",e))("value",t.wicsForTemplate[e]),m(2),N(""),m(),K(t.wicMatrix[t.iosTemplate.platform][e])}}function Hle(n,o){if(n&1&&T(0,$le,8,5,"mat-form-field",42),n&2){let e=o.$implicit,t=h(4);E(t.wicMatrix[t.iosTemplate.platform]&&t.wicMatrix[t.iosTemplate.platform][e]?0:-1)}}function Ule(n,o){n&1&&(r(0,"h6",53),c(1,"WICs"),l(),r(2,"div",54),Q(3,Hle,1,1,null,null,Oe),l()),n&2&&(m(3),K(at(0,Tle)))}function Wle(n,o){if(n&1&&(r(0,"div",16)(1,"h6",53),c(2,"Adapters"),l(),r(3,"div",54),Q(4,Ble,1,1,null,null,Oe),l(),T(6,Ule,5,1),l()),n&2){let e=h(2);m(4),K(at(1,Ple)),m(2),E(e.wicMatrix[e.iosTemplate.platform]?6:-1)}}function Gle(n,o){if(n&1){let e=R();r(0,"div",16)(1,"mat-form-field",42)(2,"mat-label"),c(3,"System ID"),l(),r(4,"input",63),_("input",function(i){y(e);let a=h(2);return w(a.systemId.set(i.target.value))}),l()(),r(5,"div",27)(6,"mat-form-field",31)(7,"mat-label"),c(8,"Base MAC (format: xxxx.xxxx.xxxx)"),l(),r(9,"input",64),_("input",function(i){y(e);let a=h(2);return w(a.baseMac.set(i.target.value))}),l(),r(10,"mat-hint"),c(11,"Example: aaaa.bbbb.cccc (leave empty to let the server allocate a MAC address)."),l()(),r(12,"button",65),_("click",function(){y(e);let i=h(2);return w(i.generateBaseMAC())}),c(13,"Generate Base MAC"),l()(),r(14,"div",27)(15,"mat-form-field",31)(16,"mat-label"),c(17,"Idle-PC"),l(),r(18,"input",66),_("input",function(i){y(e);let a=h(2);return w(a.idlepc.set(i.target.value))}),l()(),r(19,"button",65),_("click",function(){y(e);let i=h(2);return w(i.findIdlePC())}),c(20,"Idle-PC finder"),l()(),r(21,"div",67)(22,"mat-form-field",24)(23,"mat-label"),c(24,"Idlemax"),l(),r(25,"input",68),_("input",function(i){y(e);let a=h(2);return w(a.idlemax.set(i.target.value))}),l()(),r(26,"mat-form-field",24)(27,"mat-label"),c(28,"Idlesleep"),l(),r(29,"input",69),_("input",function(i){y(e);let a=h(2);return w(a.idlesleep.set(i.target.value))}),l()(),r(30,"mat-form-field",24)(31,"mat-label"),c(32,"Exec area"),l(),r(33,"input",70),_("input",function(i){y(e);let a=h(2);return w(a.execArea.set(i.target.value))}),l()()(),r(34,"div",71)(35,"mat-checkbox",50),_("change",function(i){y(e);let a=h(2);return w(a.mmap.set(i.checked))}),c(36,"Enable mmap support"),l(),r(37,"mat-checkbox",50),_("change",function(i){y(e);let a=h(2);return w(a.sparsemem.set(i.checked))}),c(38,"Enable sparse memory support"),l()()()}if(n&2){let e=h(2);m(4),v("value",e.systemId()),m(5),v("value",e.baseMac()),m(9),v("value",e.idlepc()),m(7),v("value",e.idlemax()),m(4),v("value",e.idlesleep()),m(4),v("value",e.execArea()),m(2),v("checked",e.mmap()),m(2),v("checked",e.sparsemem())}}function qle(n,o){if(n&1){let e=R();r(0,"div",17)(1,"mat-form-field",72)(2,"mat-label"),c(3,"Usage"),l(),r(4,"textarea",73),_("input",function(i){y(e);let a=h(2);return w(a.usage.set(i.target.value))}),l()()()}if(n&2){let e=h(2);m(4),v("value",e.usage())}}function Qle(n,o){if(n&1){let e=R();r(0,"app-template-metadata-section",74),rn("metadataChange",function(i){y(e);let a=h(2);return Xt(a.applianceMetadata,i)||(a.applianceMetadata=i),w(i)}),l()}if(n&2){let e=h(2);an("metadata",e.applianceMetadata)}}function Kle(n,o){if(n&1){let e=R();r(0,"main",9)(1,"nav",10)(2,"button",11),_("click",function(){y(e);let i=h();return w(i.selectSection("general"))}),c(3," General settings "),l(),r(4,"button",11),_("click",function(){y(e);let i=h();return w(i.selectSection("memory"))}),c(5," Memories and disks "),l(),r(6,"button",11),_("click",function(){y(e);let i=h();return w(i.selectSection("slots"))}),c(7," Slots "),l(),r(8,"button",11),_("click",function(){y(e);let i=h();return w(i.selectSection("advanced"))}),c(9," Advanced "),l(),r(10,"button",11),_("click",function(){y(e);let i=h();return w(i.selectSection("usage"))}),c(11," Usage "),l(),r(12,"button",11),_("click",function(){y(e);let i=h();return w(i.selectSection("metadata"))}),c(13," Metadata "),l()(),r(14,"section",12)(15,"div",13),_("click",function(){y(e);let i=h();return w(i.toggleSection("general"))}),r(16,"h3",14),c(17,"General settings"),l(),r(18,"mat-icon",15),c(19),l()(),T(20,Nle,81,20,"div",16),l(),r(21,"section",12)(22,"div",13),_("click",function(){y(e);let i=h();return w(i.toggleSection("memory"))}),r(23,"h3",14),c(24,"Memories and disks"),l(),r(25,"mat-icon",15),c(26),l()(),T(27,Rle,30,6,"div",16),l(),r(28,"section",12)(29,"div",13),_("click",function(){y(e);let i=h();return w(i.toggleSection("slots"))}),r(30,"h3",14),c(31,"Slots"),l(),r(32,"mat-icon",15),c(33),l()(),T(34,Wle,7,2,"div",16),l(),r(35,"section",12)(36,"div",13),_("click",function(){y(e);let i=h();return w(i.toggleSection("advanced"))}),r(37,"h3",14),c(38,"Advanced"),l(),r(39,"mat-icon",15),c(40),l()(),T(41,Gle,39,8,"div",16),l(),r(42,"section",12)(43,"div",13),_("click",function(){y(e);let i=h();return w(i.toggleSection("usage"))}),r(44,"h3",14),c(45,"Usage"),l(),r(46,"mat-icon",15),c(47),l()(),T(48,qle,5,1,"div",17),l(),r(49,"section",12)(50,"div",18)(51,"h3",14),c(52,"Appliance metadata"),l()(),T(53,Qle,1,1,"app-template-metadata-section",19),l(),r(54,"div",20)(55,"button",21),_("click",function(){y(e);let i=h();return w(i.goBack())}),c(56,"Cancel"),l(),r(57,"button",22),_("click",function(){y(e);let i=h();return w(i.onSave())}),c(58,"Save"),l()()()}if(n&2){let e=h();m(2),ne("is-active",e.activeSection==="general"),m(2),ne("is-active",e.activeSection==="memory"),m(2),ne("is-active",e.activeSection==="slots"),m(2),ne("is-active",e.activeSection==="advanced"),m(2),ne("is-active",e.activeSection==="usage"),m(2),ne("is-active",e.activeSection==="metadata"),m(7),N(e.generalSettingsExpanded?"expand_less":"expand_more"),m(),E(e.activeSection==="general"?20:-1),m(6),N(e.memoryExpanded?"expand_less":"expand_more"),m(),E(e.activeSection==="memory"?27:-1),m(6),N(e.slotsExpanded?"expand_less":"expand_more"),m(),E(e.activeSection==="slots"?34:-1),m(6),N(e.advancedExpanded?"expand_less":"expand_more"),m(),E(e.activeSection==="advanced"?41:-1),m(6),N(e.usageExpanded?"expand_less":"expand_more"),m(),E(e.activeSection==="usage"?48:-1),m(5),E(e.activeSection==="metadata"?53:-1)}}var ey=(()=>{class n{route=f($t);controllerService=f(_t);iosService=f(Km);toasterService=f(re);iosConfigurationService=f(Qm);progressService=f(mo);router=f(Ft);location=f(ki);cd=f(oe);dialog=f(Xe);dialogConfig=f(yo);validationService=f(lv);controller;iosTemplate;platforms=[];consoleTypes=[];categories=[];platformsWithEtherSwitchRouterOption={};platformsWithChassis={};chassis={};defaultRam={};defaultNvram={};networkAdaptersForTemplate=[];wicsForTemplate=[];adapterMatrix={};wicMatrix={};separatorKeysCodes=[13,188];generalSettingsExpanded=!1;memoryExpanded=!1;slotsExpanded=!1;advancedExpanded=!1;usageExpanded=!1;activeSection="general";templateName=$("");defaultName=$("");symbol=$("");imagePath=$("");initialConfig=$("");ram=$("");nvram=$("");iomemory=$("");disk0=$("");disk1=$("");systemId=$("");idlemax=$("");idlesleep=$("");execArea=$("");idlepc=$("");baseMac=$("");mmap=$(!0);sparsemem=$(!0);usage=$("");netmikoDeviceType=$("");applianceMetadata=z(null);defaultUsername=Ne(()=>rs(this.applianceMetadata(),"default_username"));defaultPassword=Ne(()=>rs(this.applianceMetadata(),"default_password"));ngOnInit(){let e=this.route.snapshot.paramMap.get("controller_id"),t=this.route.snapshot.paramMap.get("template_id");this.controllerService.get(parseInt(e,10)).then(i=>{this.controller=i,this.cd.markForCheck(),this.getConfiguration(),this.iosService.getTemplate(this.controller,t).subscribe({next:a=>{this.iosTemplate=a,this.iosTemplate.tags||(this.iosTemplate.tags=[]),this.fillSlotsData(),this.populateForms(),this.cd.markForCheck()},error:a=>{let s=a.error?.message||a.message||"Failed to load template";this.toasterService.error(s),this.cd.markForCheck()}})},i=>{let a=i.error?.message||i.message||"Failed to load controller";this.toasterService.error(a),this.cd.markForCheck()})}getConfiguration(){this.platforms=this.iosConfigurationService.getAvailablePlatforms(),this.platformsWithEtherSwitchRouterOption=this.iosConfigurationService.getPlatformsWithEtherSwitchRouterOption(),this.platformsWithChassis=this.iosConfigurationService.getPlatformsWithChassis(),this.chassis=this.iosConfigurationService.getChassis(),this.defaultRam=this.iosConfigurationService.getDefaultRamSettings(),this.consoleTypes=this.iosConfigurationService.getConsoleTypes(),this.categories=this.iosConfigurationService.getCategories(),this.adapterMatrix=this.iosConfigurationService.getAdapterMatrix(),this.wicMatrix=this.iosConfigurationService.getWicMatrix()}findIdlePC(){let e={image:this.iosTemplate.image,platform:this.iosTemplate.platform,ram:this.iosTemplate.ram};this.progressService.activate(),this.iosService.findIdlePC(this.controller,e).subscribe(t=>{this.progressService.deactivate(),t.idlepc!==null&&(this.iosTemplate.idlepc=t.idlepc,this.idlepc.set(t.idlepc),this.toasterService.success(`Idle-PC value found: ${t.idlepc}`))},t=>{this.progressService.deactivate(),this.toasterService.error("Error while finding an idle-PC value")})}generateBaseMAC(){let e="0123456789abcdef",t=new Uint8Array(6);crypto.getRandomValues(t);let i="";for(let a=0;a<3;a++){for(let s=0;s<4;s++){let d=a*2+Math.floor(s/2),p=s%2,u=t[d]>>p*4&15;i+=e[u]}a<2&&(i+=".")}this.iosTemplate.mac_addr=i,this.baseMac.set(i),this.toasterService.success(`Base MAC generated: ${i}`)}fillSlotsData(){for(let e=0;e<=6;e++)this.iosTemplate[`slot${e}`]&&(this.networkAdaptersForTemplate[e]=this.iosTemplate[`slot${e}`]);for(let e=0;e<=3;e++)this.iosTemplate[`wic${e}`]&&(this.wicsForTemplate[e]=this.iosTemplate[`wic${e}`])}populateForms(){this.templateName.set(this.iosTemplate.name||""),this.defaultName.set(this.iosTemplate.default_name_format||""),this.symbol.set(this.iosTemplate.symbol||""),this.imagePath.set(this.iosTemplate.image||""),this.initialConfig.set(this.iosTemplate.startup_config||""),this.ram.set(this.iosTemplate.ram?.toString()||""),this.nvram.set(this.iosTemplate.nvram?.toString()||""),this.iomemory.set(this.iosTemplate.iomem?.toString()||""),this.disk0.set(this.iosTemplate.disk0?.toString()||""),this.disk1.set(this.iosTemplate.disk1?.toString()||""),this.systemId.set(this.iosTemplate.system_id||""),this.idlemax.set(this.iosTemplate.idlemax?.toString()||""),this.idlesleep.set(this.iosTemplate.idlesleep?.toString()||""),this.execArea.set(this.iosTemplate.exec_area?.toString()||""),this.idlepc.set(this.iosTemplate.idlepc||""),this.baseMac.set(this.iosTemplate.mac_addr||""),this.mmap.set(this.iosTemplate.mmap??!0),this.sparsemem.set(this.iosTemplate.sparsemem??!0),this.usage.set(this.iosTemplate.usage||""),this.netmikoDeviceType.set(this.iosTemplate.netmiko_device_type||""),this.applianceMetadata.set(this.iosTemplate.appliance_metadata??null)}saveSlotsData(){for(let e=0;e<=6;e++)this.adapterMatrix?.[this.iosTemplate.platform]?.[this.iosTemplate.chassis||""]?.[e]?this.networkAdaptersForTemplate[e]===void 0?this.iosTemplate[`slot${e}`]="":this.iosTemplate[`slot${e}`]=this.networkAdaptersForTemplate[e]:delete this.iosTemplate[`slot${e}`];for(let e=0;e<=3;e++)this.wicMatrix?.[this.iosTemplate.platform]?.[e]?this.wicsForTemplate[e]===void 0?this.iosTemplate[`wic${e}`]="":this.iosTemplate[`wic${e}`]=this.wicsForTemplate[e]:delete this.iosTemplate[`wic${e}`]}onCredentialInput(e,t){let i=t.target.value;this.applianceMetadata.set(nd(this.applianceMetadata(),e,i))}onSave(){let e=this.validationService.validateName(this.templateName());if(!e.isValid){this.toasterService.error(e.errorMessage);return}let t=this.validationService.validateImagePath(this.imagePath());if(!t.isValid){this.toasterService.error(t.errorMessage);return}let i=this.iosTemplate.platform,a=this.validationService.validateRamForPlatform(this.ram(),i);if(!a.isValid){this.toasterService.error(a.errorMessage);return}let s=this.validationService.validateNvramForPlatform(this.nvram(),i);if(!s.isValid){this.toasterService.error(s.errorMessage);return}let d=this.validationService.validateMacAddress(this.baseMac());if(!d.isValid){this.toasterService.error(d.errorMessage);return}let p=this.validationService.validateIdlepc(this.idlepc());if(!p.isValid){this.toasterService.error(p.errorMessage);return}let u=this.validationService.validateNetmikoDeviceType(this.netmikoDeviceType());if(!u.isValid){this.toasterService.error(u.errorMessage);return}this.saveSlotsData(),this.iosTemplate.name=this.templateName(),this.iosTemplate.default_name_format=this.defaultName(),this.iosTemplate.symbol=this.symbol(),this.iosTemplate.image=this.imagePath(),this.iosTemplate.startup_config=this.initialConfig(),this.iosTemplate.ram=parseInt(this.ram(),10)||0,this.iosTemplate.nvram=parseInt(this.nvram(),10)||0,this.iosTemplate.iomem=this.iomemory()?parseInt(this.iomemory(),10):void 0,this.iosTemplate.disk0=parseInt(this.disk0(),10)||0,this.iosTemplate.disk1=parseInt(this.disk1(),10)||0,this.iosTemplate.system_id=this.systemId(),this.iosTemplate.idlemax=parseInt(this.idlemax(),10)||0,this.iosTemplate.idlesleep=parseInt(this.idlesleep(),10)||0,this.iosTemplate.exec_area=parseInt(this.execArea(),10)||0,this.iosTemplate.idlepc=this.idlepc(),this.iosTemplate.mac_addr=this.baseMac(),this.iosTemplate.mmap=this.mmap(),this.iosTemplate.sparsemem=this.sparsemem(),this.iosTemplate.usage=this.usage(),this.iosTemplate.netmiko_device_type=this.netmikoDeviceType().trim()||null,this.iosTemplate.appliance_metadata=this.applianceMetadata(),this.iosService.saveTemplate(this.controller,this.iosTemplate).subscribe({next:()=>{this.toasterService.success("Changes saved"),this.goBack()},error:g=>{let C=g.error?.message||g.message||"Failed to save template";this.toasterService.error(C),this.cd.markForCheck()}})}goBack(){ji(this.location,this.router,["/controller",this.controller.id,"preferences"])}chooseSymbol(){let e=this.dialogConfig.openConfig("templateSymbol",{autoFocus:!1,disableClose:!1,data:{controller:this.controller,symbol:this.iosTemplate.symbol}});this.dialog.open(rr,e).afterClosed().subscribe(i=>{i&&(this.iosTemplate.symbol=i,this.symbol.set(i))})}addTag(e){let t=(e.value||"").trim();t&&this.iosTemplate&&(this.iosTemplate.tags||(this.iosTemplate.tags=[]),this.iosTemplate.tags.push(t)),e.chipInput&&e.chipInput.clear()}removeTag(e){if(!this.iosTemplate.tags)return;let t=this.iosTemplate.tags.indexOf(e);t>=0&&this.iosTemplate.tags.splice(t,1)}toggleSection(e){switch(e){case"general":this.generalSettingsExpanded=!this.generalSettingsExpanded;break;case"memory":this.memoryExpanded=!this.memoryExpanded;break;case"slots":this.slotsExpanded=!this.slotsExpanded;break;case"advanced":this.advancedExpanded=!this.advancedExpanded;break;case"usage":this.usageExpanded=!this.usageExpanded;break}}selectSection(e){this.activeSection=e}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-ios-template-details"]],inputs:{templateName:[1,"templateName"],defaultName:[1,"defaultName"],symbol:[1,"symbol"],imagePath:[1,"imagePath"],initialConfig:[1,"initialConfig"],ram:[1,"ram"],nvram:[1,"nvram"],iomemory:[1,"iomemory"],disk0:[1,"disk0"],disk1:[1,"disk1"],systemId:[1,"systemId"],idlemax:[1,"idlemax"],idlesleep:[1,"idlesleep"],execArea:[1,"execArea"],idlepc:[1,"idlepc"],baseMac:[1,"baseMac"],mmap:[1,"mmap"],sparsemem:[1,"sparsemem"],usage:[1,"usage"],netmikoDeviceType:[1,"netmikoDeviceType"]},outputs:{templateName:"templateNameChange",defaultName:"defaultNameChange",symbol:"symbolChange",imagePath:"imagePathChange",initialConfig:"initialConfigChange",ram:"ramChange",nvram:"nvramChange",iomemory:"iomemoryChange",disk0:"disk0Change",disk1:"disk1Change",systemId:"systemIdChange",idlemax:"idlemaxChange",idlesleep:"idlesleepChange",execArea:"execAreaChange",idlepc:"idlepcChange",baseMac:"baseMacChange",mmap:"mmapChange",sparsemem:"sparsememChange",usage:"usageChange",netmikoDeviceType:"netmikoDeviceTypeChange"},decls:17,vars:1,consts:[["chipList",""],[1,"ios-details"],[1,"ios-details__header"],[1,"ios-details__heading-row"],[1,"ios-details__breadcrumb"],["type","button","mat-button","",3,"click"],[1,"ios-details__title"],[1,"ios-details__header-actions"],["type","button","mat-raised-button","","color","primary",3,"click"],[1,"ios-details__content"],["aria-label","Template settings",1,"template-edit-tabs"],["type","button",3,"click"],[1,"ios-details__form-card"],[1,"ios-details__section-header",3,"click"],[1,"ios-details__section-title"],[1,"ios-details__expand-icon"],[1,"ios-details__form"],[1,"preferences__usage-form"],[1,"ios-details__section-header"],[3,"metadata"],[1,"ios-details__actions"],["mat-button","",1,"ios-details__cancel-btn",3,"click"],["mat-raised-button","","color","primary",1,"ios-details__save-btn",3,"click"],[1,"two-column-grid","gns3-form-layout-fixed"],["appearance","outline","subscriptSizing","fixed",1,"ios-details__field"],["matInput","","type","text","placeholder","Template name",3,"input","value"],["matInput","","type","text","placeholder","Default name format",3,"input","value"],[1,"ios-details__symbol-row"],["appearance","outline","subscriptSizing","dynamic",1,"ios-details__field","ios-details__field--category"],[3,"valueChange","value"],[3,"value"],["appearance","outline","subscriptSizing","dynamic",1,"ios-details__field","ios-details__field--flex"],["matInput","","type","text","placeholder","Symbol",3,"input","value"],["mat-raised-button","","color","primary",1,"ios-details__symbol-btn",3,"click"],[1,"ios-details__info-row"],[1,"ios-details__info-label"],[1,"ios-details__info-value"],[1,"gns3-chip-field"],["floatLabel","always","appearance","outline","subscriptSizing","dynamic",1,"ios-details__field"],["matInput","","placeholder","Add tags",3,"matChipInputTokenEnd","matChipInputFor","matChipInputSeparatorKeyCodes"],["aria-label","Tags",1,"gns3-chip-field__values"],[3,"editable"],["appearance","outline","subscriptSizing","dynamic",1,"ios-details__field"],["matInput","","type","text","placeholder","IOS image path",3,"input","value"],["matInput","","type","text","placeholder","Initial startup-config",3,"input","value"],["matInput","","type","text","placeholder","Initial private-config",3,"input","value"],[1,"three-column-grid"],["subscriptSizing","fixed","appearance","outline",1,"ios-details__field",3,"valueChange","value","controller"],["matInput","","type","text","placeholder","Username to log into this node",3,"input","value"],["matInput","","type","text","placeholder","Password to log into this node",3,"input","value"],[1,"ios-details__checkbox",3,"change","checked"],[3,"removed","editable"],["matChipRemove","","type","button"],[1,"ios-details__section-subtitle"],[1,"ios-details__adapters"],["matInput","","type","text","min","32","step","32","placeholder","RAM size",3,"input","value"],["matSuffix",""],["matInput","","type","text","min","32","step","32","placeholder","NVRAM size",3,"input","value"],["matInput","","type","text","min","0","step","4","placeholder","PCMCIA disk0",3,"input","value"],["matInput","","type","text","min","0","step","4","placeholder","PCMCIA disk1",3,"input","value"],[1,"ios-details__checkbox"],["matInput","","type","text","min","0","max","100","step","5","placeholder","I/O memory",3,"input","value"],[3,"selectionChange","placeholder","value"],["matInput","","type","text","placeholder","System ID",3,"input","value"],["matInput","","type","text","placeholder","Base MAC",3,"input","value"],["mat-raised-button","","color","primary","type","button",1,"ios-details__action-btn",3,"click"],["matInput","","type","text","placeholder","Idle-PC",3,"input","value"],[1,"three-column-grid","gns3-form-layout-fixed"],["matInput","","type","text","min","100","step","100","placeholder","Idlemax",3,"input","value"],["matInput","","type","text","min","1","step","10","placeholder","Idlesleep",3,"input","value"],["matInput","","type","text","min","0","step","4","placeholder","Exec area",3,"input","value"],[1,"two-column-grid"],["appearance","outline","subscriptSizing","dynamic",1,"preferences__usage-field--full"],["matInput","","type","text",3,"input","value"],[3,"metadataChange","metadata"]],template:function(t,i){t&1&&(r(0,"div",1)(1,"header",2)(2,"div",3)(3,"div")(4,"div",4)(5,"button",5),_("click",function(){return i.goBack()}),c(6,"Templates"),l(),r(7,"mat-icon"),c(8,"chevron_right"),l(),r(9,"span"),c(10,"Edit"),l()(),r(11,"h1",6),c(12,"Edit template"),l()(),r(13,"div",7)(14,"button",8),_("click",function(){return i.goBack()}),c(15,"Back to templates"),l()()()(),T(16,Kle,59,23,"main",9),l()),t&2&&(m(16),E(i.iosTemplate?16:-1))},dependencies:[fe,St,vn,ri,bi,xi,hi,fi,we,Pe,Ve,Dr,oi,ye,Ee,ot,ct,nt,Y,he,id,ie,ce,El,Rt,Gt,po],styles:["[_nghost-%COMP%]{display:block;width:100%;background:transparent}.ios-details__header[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:32px 20px 16px;display:flex;align-items:center;gap:var(--gns3-density-card-gap);animation:none}.ios-details__back-btn[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:12px;color:var(--mat-sys-on-surface);transition:all var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1)}.ios-details__back-btn[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 8%,transparent)}.ios-details__title[_ngcontent-%COMP%]{flex:1;font-size:28px;font-weight:500;color:var(--mat-sys-on-surface);margin:0}.ios-details__content[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:0 20px 20px;animation:none}.ios-details--hidden[_ngcontent-%COMP%]{opacity:.5;pointer-events:none}.ios-details__form-card[_ngcontent-%COMP%]{background:var(--mat-sys-surface);border-radius:16px;overflow:hidden;box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 20%,transparent),0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent);margin-bottom:var(--gns3-density-card-gap)}.ios-details__section-header[_ngcontent-%COMP%]{padding:var(--gns3-density-section-header-padding);display:flex;align-items:center;justify-content:space-between;cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline) 30%,transparent)}.ios-details__section-header[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 5%,transparent)}.ios-details__section-title[_ngcontent-%COMP%]{margin:0;font-size:16px;font-weight:500;color:var(--mat-sys-on-surface-variant)}.ios-details__expand-icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);transition:transform var(--gns3-motion-duration-standard) ease}.ios-details__form[_ngcontent-%COMP%]{padding:var(--gns3-density-card-padding) var(--gns3-density-card-padding) 24px;display:flex;flex-direction:column;gap:var(--gns3-density-card-gap)}.ios-details__form[_ngcontent-%COMP%] .two-column-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:var(--gns3-density-card-gap)}.ios-details__form[_ngcontent-%COMP%] .two-column-grid[_ngcontent-%COMP%] .grid-span-2[_ngcontent-%COMP%]{grid-column:1/-1}.ios-details__field[_ngcontent-%COMP%]{width:100%}.ios-details__field--flex[_ngcontent-%COMP%]{flex:1}.ios-details__field--category[_ngcontent-%COMP%]{flex:0 0 150px}.three-column-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr 1fr;gap:var(--gns3-density-card-gap)}.ios-details__field--full[_ngcontent-%COMP%]{width:100%;padding:0 24px 24px}.ios-details__symbol-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap)}.ios-details__symbol-btn[_ngcontent-%COMP%], .ios-details__action-btn[_ngcontent-%COMP%]{align-self:stretch}.ios-details__info-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap);padding:8px 0}.ios-details__info-label[_ngcontent-%COMP%]{font-size:14px;font-weight:500;color:var(--mat-sys-on-surface-variant);min-width:100px}.ios-details__info-value[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface)}.ios-details__section-subtitle[_ngcontent-%COMP%]{font-size:12px;font-weight:600;color:var(--mat-sys-on-surface-variant);text-transform:uppercase;letter-spacing:.5px;margin:8px 0}.ios-details__adapters[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--gns3-density-card-gap)}.ios-details__checkbox[_ngcontent-%COMP%]{margin-top:8px}.ios-details__actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:var(--gns3-density-space-3);margin-top:24px}.ios-details__cancel-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none}.ios-details__save-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none;letter-spacing:.5px}@media(max-width:768px){.ios-details__header[_ngcontent-%COMP%]{padding:24px 16px 12px;gap:12px}.ios-details__back-btn[_ngcontent-%COMP%]{width:44px;height:44px}.ios-details__title[_ngcontent-%COMP%]{font-size:22px}.ios-details__content[_ngcontent-%COMP%]{padding:0 16px 16px}.ios-details__section-header[_ngcontent-%COMP%]{padding:12px 16px}.ios-details__form[_ngcontent-%COMP%]{padding:16px}.ios-details__field--full[_ngcontent-%COMP%]{padding:0 16px 16px}.ios-details__symbol-row[_ngcontent-%COMP%]{flex-direction:column}.ios-details__symbol-btn[_ngcontent-%COMP%], .ios-details__action-btn[_ngcontent-%COMP%]{width:100%}.ios-details__adapters[_ngcontent-%COMP%]{grid-template-columns:1fr}.ios-details__actions[_ngcontent-%COMP%]{flex-direction:column}.ios-details__cancel-btn[_ngcontent-%COMP%], .ios-details__save-btn[_ngcontent-%COMP%]{width:100%;height:44px}}",'[_nghost-%COMP%]{display:block;width:100%;background:transparent}.templates-page__content[_ngcontent-%COMP%]{animation:none}.templates-page__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:20px;max-width:1600px;margin:0 auto;padding:24px 20px 16px}.templates-page__heading[_ngcontent-%COMP%], .templates-page__header-actions[_ngcontent-%COMP%]{display:flex;align-items:center}.templates-page__heading[_ngcontent-%COMP%]{min-width:0;gap:var(--gns3-density-space-3)}.templates-page__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.templates-page__header-actions[_ngcontent-%COMP%]{gap:var(--gns3-density-space-3)}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);border-radius:12px;padding-inline:18px;font-size:15px;font-weight:500;letter-spacing:.3px;text-transform:none}[class*=-templates__header][_ngcontent-%COMP%]{box-sizing:border-box;width:100%;height:calc(var(--gns3-density-space-4) * 2 + (var(--gns3-density-section-title-size) + 2px) * 1.2 + 1px);max-width:none;margin:0;padding:0 var(--gns3-density-page-padding);gap:var(--gns3-density-space-3);color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container);border-bottom:1px solid var(--mat-sys-outline-variant)}[class*=-templates__back-btn][_ngcontent-%COMP%], [class*=-templates__add-btn][_ngcontent-%COMP%]{flex:0 0 auto;width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:12px}[class*=-templates__back-btn][_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container)}[class*=-templates__add-btn][_ngcontent-%COMP%]{color:var(--mat-sys-primary)}[class*=-templates__title][_ngcontent-%COMP%]{flex:1;min-width:0;margin:0;padding-bottom:0;color:var(--mat-sys-on-primary-container);font-size:calc(var(--gns3-density-section-title-size) + 2px);font-weight:650;line-height:1.2;letter-spacing:-.01em}.templates-page__scopes[_ngcontent-%COMP%]{display:flex;gap:4px;max-width:1560px;margin:0 auto 16px;padding:0 20px;border-bottom:1px solid var(--mat-sys-outline-variant)}.templates-page__scope[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center;gap:8px;min-height:48px;padding:0 16px;border:0;color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;font-size:14px;font-weight:550;cursor:pointer}.templates-page__scope[_ngcontent-%COMP%]:after{position:absolute;right:8px;bottom:-1px;left:8px;height:2px;border-radius:2px 2px 0 0;background:transparent;content:""}.templates-page__scope[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}.templates-page__scope[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{min-width:22px;padding:2px 6px;border-radius:12px;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-high);font-size:11px;text-align:center}.templates-page__scope--active[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%]:after{background:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap);max-width:1600px;margin:0 auto;padding:0 20px 8px}.templates-page__search[_ngcontent-%COMP%]{flex:1;min-width:240px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:flex;align-items:center;flex:0 0 auto;gap:var(--gns3-density-space-3)}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{width:155px}.templates-page__view-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px;padding:4px 2px;border-radius:8px;background:var(--mat-sys-surface-container-high)}button.templates-page__view-button[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:8px;color:var(--mat-sys-on-surface-variant);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);--mat-icon-button-icon-size: 22px}button.templates-page__view-button--active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__main[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:20px;max-width:1600px;margin:0 auto;padding:0 20px 20px}.templates-page__loading[_ngcontent-%COMP%]{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;min-height:320px;gap:var(--gns3-density-card-gap);color:var(--mat-sys-on-surface-variant)}.templates-page__table-container[_ngcontent-%COMP%]{flex:1;min-width:0;border-radius:16px;background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;overflow-x:auto}mat-table[_ngcontent-%COMP%]{width:100%;min-width:850px}.mat-mdc-row[_ngcontent-%COMP%], .mat-row[_ngcontent-%COMP%]{height:var(--mat-table-row-item-container-height);min-height:var(--mat-table-row-item-container-height)}.mat-header-row[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%]{position:sticky;top:0;z-index:10;background:var(--mat-sys-surface-container-highest);box-shadow:inset 0 -2px var(--mat-sys-primary);--mat-sort-arrow-color: var(--mat-sys-primary)}.mat-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:13px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}mat-row[_ngcontent-%COMP%]{cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease}mat-row[_ngcontent-%COMP%]:nth-child(2n){background:color-mix(in srgb,var(--mat-sys-on-surface) 1%,transparent)}mat-row[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}mat-row.templates-page__row--selected[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}mat-cell[_ngcontent-%COMP%], mat-header-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:inherit;color:var(--mat-sys-on-surface)}.mat-column-name[_ngcontent-%COMP%]{flex:2.4;min-width:240px;justify-content:flex-start}.mat-column-template_type[_ngcontent-%COMP%]{flex:1.1;min-width:130px}.mat-column-category[_ngcontent-%COMP%]{flex:1;min-width:110px}.mat-column-compute_id[_ngcontent-%COMP%]{flex:1;min-width:105px}.mat-column-builtin[_ngcontent-%COMP%]{flex:0 0 90px;min-width:90px;justify-content:center}.mat-column-actions[_ngcontent-%COMP%]{flex:0 0 180px;min-width:180px;box-sizing:border-box;justify-content:flex-start;padding-right:24px}.templates-page__name-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-width:0;gap:var(--gns3-density-space-3)}.templates-page__name-copy[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:14px;font-weight:600}.templates-page__symbol[_ngcontent-%COMP%]{display:grid;flex:0 0 52px;width:52px;height:52px;overflow:hidden;place-items:center;border-radius:14px;color:var(--mat-sys-on-primary-container);background:color-mix(in srgb,var(--mat-sys-primary-container) 82%,var(--mat-sys-surface))}.templates-page__symbol[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:78%;height:78%;object-fit:contain;filter:drop-shadow(0 2px 4px color-mix(in srgb,var(--mat-sys-shadow) 25%,transparent))}.templates-page__symbol[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:27px;height:27px;font-size:27px}.templates-page__symbol--small[_ngcontent-%COMP%]{flex-basis:38px;width:38px;height:38px;border-radius:10px}.templates-page__symbol--small[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:21px;height:21px;font-size:21px}.templates-page__type-badge[_ngcontent-%COMP%], .templates-page__source-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;width:fit-content;padding:4px 9px;border-radius:16px;font-size:12px;font-weight:600;white-space:nowrap}.templates-page__type-badge[_ngcontent-%COMP%]{color:var(--mat-sys-secondary);background:color-mix(in srgb,var(--mat-sys-secondary) 11%,transparent)}.templates-page__type-badge--qemu[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__type-badge--docker[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container)}.templates-page__type-badge--dynamips[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary-container);background:var(--mat-sys-tertiary-container)}.templates-page__type-badge--cloud[_ngcontent-%COMP%]{color:var(--mat-sys-on-error-container);background:var(--mat-sys-error-container)}.templates-page__type-badge--vpcs[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary);background:var(--mat-sys-primary)}.templates-page__type-badge--ethernet-hub[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary);background:var(--mat-sys-secondary)}.templates-page__type-badge--ethernet-switch[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary);background:var(--mat-sys-tertiary)}.templates-page__type-badge--iou[_ngcontent-%COMP%]{color:var(--mat-sys-on-error);background:var(--mat-sys-error)}.templates-page__type-badge--nat[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-highest)}.templates-page__source-badge[_ngcontent-%COMP%]{color:var(--mat-sys-primary);background:color-mix(in srgb,var(--mat-sys-primary) 11%,transparent)}.templates-page__source-badge--builtin[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary);background:color-mix(in srgb,var(--mat-sys-tertiary) 11%,transparent)}.templates-page__table-footer[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:var(--mat-table-footer-container-height);padding:0 12px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container))}.templates-page__table-footer[_ngcontent-%COMP%] mat-paginator[_ngcontent-%COMP%]{width:100%;--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__actions-cell[_ngcontent-%COMP%], .templates-page__card-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:3px}button.templates-page__action[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-on-surface-variant);width:var(--gns3-density-control-height-sm);height:var(--gns3-density-control-height-sm);--mat-icon-button-state-layer-size: var(--gns3-density-control-height-sm);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-control-height-sm)}button.templates-page__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}button.templates-page__action[_ngcontent-%COMP%]{color:var(--template-action-color);--mat-icon-button-state-layer-color: var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:not(:disabled) mat-icon[_ngcontent-%COMP%]{color:var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:disabled mat-icon[_ngcontent-%COMP%]{color:var(--gns3-button-disabled-label-color)}button.templates-page__action--details[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--edit[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-primary)}button.templates-page__action--duplicate[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--delete[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-error)}.templates-page__grid[_ngcontent-%COMP%]{flex:1;min-width:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-content:start;gap:var(--gns3-density-card-gap)}.templates-page__grid--with-details[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__card[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column;padding:16px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;background:var(--mat-sys-surface);cursor:pointer;transition:transform var(--gns3-motion-duration-standard) ease,box-shadow var(--gns3-motion-duration-standard) ease,border-color var(--gns3-motion-duration-standard) ease}.templates-page__card[_ngcontent-%COMP%]:hover{border-color:var(--mat-sys-outline-variant);background:var(--mat-sys-surface-container-low)}.templates-page__card--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);box-shadow:0 0 0 1px var(--mat-sys-primary)}.templates-page__card-header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--gns3-density-space-3)}.templates-page__card-body[_ngcontent-%COMP%]{flex:1;min-width:0;padding:14px 0 12px}.templates-page__card-body[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{display:-webkit-box;overflow:hidden;margin:0 0 9px;color:var(--mat-sys-on-surface);font-size:17px;font-weight:650;line-height:1.35;overflow-wrap:anywhere;-webkit-box-orient:vertical;-webkit-line-clamp:2}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%]{display:grid;gap:8px;margin:16px 0 0}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{min-width:0;margin:0;overflow:hidden;color:var(--mat-sys-on-surface);font-size:13px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] .templates-page__card-tags-row[_ngcontent-%COMP%]{align-items:flex-start}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd.templates-page__card-tags[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px;overflow:visible;white-space:normal}.templates-page__card-actions[_ngcontent-%COMP%]{justify-content:flex-end;min-height:33px;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__grid-paginator[_ngcontent-%COMP%]{grid-column:1/-1;width:100%;border-radius:12px;background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container));--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__empty[_ngcontent-%COMP%]{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:230px;padding:32px;color:var(--mat-sys-on-surface-variant);text-align:center}.templates-page__empty[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{width:48px;height:48px;font-size:48px;opacity:.55}.templates-page__empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:12px 0 0;color:var(--mat-sys-on-surface);font-size:17px}.templates-page__empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:5px 0 0;font-size:14px}.templates-page__details[_ngcontent-%COMP%]{position:sticky;top:16px;flex:0 0 clamp(390px,31vw,480px);display:flex;min-height:380px;max-height:calc(100vh - 176px);flex-direction:column;overflow:hidden;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 60%,transparent);border-radius:16px;background:var(--mat-sys-surface);box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent);animation:_ngcontent-%COMP%_templates-slide-in var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard)}.templates-page__details-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:var(--gns3-density-space-3);min-height:56px;box-sizing:border-box;padding:8px 10px 8px 16px;border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 72%,var(--mat-sys-surface))}.templates-page__details-header[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-primary-container)}.templates-page__details-heading[_ngcontent-%COMP%]{display:flex;min-width:0;align-items:center;gap:var(--gns3-density-space-3)}.templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;margin:0;color:var(--mat-sys-on-primary-container);font-size:19px;font-weight:650;line-height:1.25;text-overflow:ellipsis;white-space:nowrap}.templates-page__details-title-line[_ngcontent-%COMP%]{display:flex;flex:1;min-width:0;align-items:center;gap:var(--gns3-density-space-2)}.templates-page__details-title-line[_ngcontent-%COMP%] .templates-page__type-badge[_ngcontent-%COMP%]{flex:0 0 auto}.templates-page__details-body[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:12px 20px}.templates-page__description[_ngcontent-%COMP%]{padding:10px 0 14px;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__description[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.6px;text-transform:uppercase}.templates-page__description[_ngcontent-%COMP%] app-markdown-viewer[_ngcontent-%COMP%]{display:block;margin-top:8px;padding:2px 12px;border-radius:10px;background:var(--mat-sys-surface-container-low);overflow-wrap:anywhere;--markdown-viewer-font-size: 13px;--markdown-viewer-line-height: 1.5;--markdown-viewer-heading-scale: .85}.templates-page__detail-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:22px 105px minmax(0,1fr);align-items:center;gap:var(--gns3-density-space-3);min-height:40px;box-sizing:border-box;padding:8px 0;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__detail-row[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:19px;height:19px;color:var(--mat-sys-primary);font-size:19px}.templates-page__detail-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:12px;font-weight:650;letter-spacing:.5px;text-transform:uppercase;white-space:nowrap}.templates-page__detail-row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{min-width:0;color:var(--mat-sys-on-surface);font-size:14px;font-weight:500;line-height:1.45;text-align:right;overflow-wrap:anywhere}.templates-page__detail-row--stacked[_ngcontent-%COMP%]{align-items:start}.templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__mono[_ngcontent-%COMP%], .templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__path[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-family:var(--gns3-font-code);font-size:12px;word-break:break-all}.templates-page__tags[_ngcontent-%COMP%]{border-bottom:0}.templates-page__tags[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:7px}.templates-page__tag[_ngcontent-%COMP%]{padding:5px 9px;border-radius:14px;color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container);font-size:11px;font-weight:550}.templates-page__details-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(105px,1fr));gap:var(--gns3-density-space-2);padding:14px 16px 18px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-surface-container) 72%,transparent)}button.templates-page__details-action[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-on-surface-variant);height:40px;border-radius:12px;color:var(--details-action-color);border-color:color-mix(in srgb,var(--details-action-color) 48%,transparent);font-size:13px;font-weight:500}button.templates-page__details-action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--details-action-color)}button.templates-page__details-action--edit[_ngcontent-%COMP%], button.templates-page__details-action--duplicate[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-primary)}button.templates-page__details-action--delete[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-error)}[data-density=compact][_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%]{min-height:40px;height:40px}[data-density=compact][_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%]{width:40px;height:40px;--mat-icon-button-state-layer-size: 40px}[data-density=compact][_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%]{min-height:48px;padding-block:4px}[data-density=compact][_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:18px}[data-density=compact][_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%]{padding-block:8px}[data-density=compact][_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%]{min-height:36px;padding-block:6px}[data-density=compact][_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%]{padding:12px}@keyframes _ngcontent-%COMP%_templates-slide-in{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@media(max-width:1400px){.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__main[_ngcontent-%COMP%]{flex-direction:column}.templates-page__table-container[_ngcontent-%COMP%], .templates-page__grid[_ngcontent-%COMP%], .templates-page__details[_ngcontent-%COMP%]{width:100%}.templates-page__details[_ngcontent-%COMP%]{position:static;flex-basis:auto;max-height:none}}@media(max-width:900px){.templates-page__header[_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column}.templates-page__header-actions[_ngcontent-%COMP%]{width:100%}.templates-page__toolbar[_ngcontent-%COMP%]{align-items:stretch;flex-direction:column}.templates-page__toolbar-actions[_ngcontent-%COMP%]{width:100%}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{flex:1;width:auto}}@media(max-width:640px){.templates-page__header[_ngcontent-%COMP%]{padding:20px 16px 12px}.templates-page__header-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{width:100%;padding-inline:10px}.templates-page__scopes[_ngcontent-%COMP%]{overflow-x:auto;padding-inline:16px}.templates-page__scope[_ngcontent-%COMP%]{flex:0 0 auto;padding-inline:12px}.templates-page__toolbar[_ngcontent-%COMP%], .templates-page__main[_ngcontent-%COMP%]{padding-inline:16px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__view-toggle[_ngcontent-%COMP%]{grid-column:1/-1;justify-self:end}.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.templates-page__details[_ngcontent-%COMP%]{min-width:0}}',"[_nghost-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%] mat-form-field[_ngcontent-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%]{display:block;width:100%;background:transparent}.template-edit-legacy-label[_ngcontent-%COMP%], .template-edit-legacy-control[_ngcontent-%COMP%]{display:none}[class$=__header][_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-4);max-width:1440px;margin:0 auto;padding:var(--gns3-density-space-5) var(--gns3-density-space-5) 14px}[class$=__breadcrumb][_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;margin-bottom:8px;color:var(--mat-sys-primary);font-size:14px;font-weight:600}[class$=__breadcrumb][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{min-height:28px;padding:0 4px;color:inherit;font:inherit}[class$=__breadcrumb][_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:18px;height:18px;font-size:18px;color:var(--mat-sys-on-surface-variant)}[class$=__heading-row][_ngcontent-%COMP%]{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--gns3-density-space-5);width:100%}[class$=__title][_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal;flex:1;min-width:0}[class$=__header-actions][_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-3);flex-shrink:0}[class$=__header-actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{min-height:var(--gns3-density-control-height);border-radius:var(--gns3-density-radius-md);padding:0 var(--gns3-density-space-4)}[class$=__back-btn][_ngcontent-%COMP%]{flex:0 0 auto;width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-icon-button)}[class$=__back-btn][_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}[class$=__back-btn][_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant)}[class$=__content][_ngcontent-%COMP%]{display:grid;grid-template-columns:220px minmax(0,1fr);align-items:start;column-gap:var(--gns3-density-card-gap);row-gap:var(--gns3-density-space-3);max-width:1440px;margin:0 auto;padding:0 var(--gns3-density-space-5) 32px}.template-edit-tabs[_ngcontent-%COMP%]{position:sticky;top:var(--gns3-density-app-header-height);display:flex;grid-column:1;grid-row:1/span 2;align-self:start;flex-direction:column;gap:var(--gns3-density-space-2);padding:var(--gns3-density-space-3);border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:var(--gns3-density-radius-xl);background:color-mix(in srgb,var(--mat-sys-primary-container) 18%,var(--mat-sys-surface))}.template-edit-tabs[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:flex-start;min-height:var(--gns3-density-control-height);border:0;border-radius:var(--gns3-density-radius-sm);padding:0 var(--gns3-density-space-3);color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;font-weight:600;text-align:left;cursor:pointer}.template-edit-tabs[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}.template-edit-tabs[_ngcontent-%COMP%] button.is-active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}[class$=__content][_ngcontent-%COMP%] > [class*=__form-card][_ngcontent-%COMP%]{grid-column:2;grid-row:1}[class$=__content][_ngcontent-%COMP%] > [class*=__form-card][_ngcontent-%COMP%]:not(:has(>:nth-child(2))){display:none}.vpcs-template-details__form-card[_ngcontent-%COMP%]:not(.template-edit-panel-active){display:none}[class*=__form-card][_ngcontent-%COMP%]{margin:0 0 18px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;overflow:hidden;border-radius:var(--gns3-density-radius-lg);background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none}[class$=__section-header][_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;min-height:var(--gns3-density-section-header-height);box-sizing:border-box;padding:var(--gns3-density-section-header-padding);border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 28%,var(--mat-sys-surface));cursor:default}[class$=__expand-icon][_ngcontent-%COMP%]{display:none}[class$=__section-title][_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-section-title-size);font-weight:650}[class$=__form][_ngcontent-%COMP%], .form-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-card-gap);padding:var(--gns3-density-card-padding)}.qemu-template-details__form[_ngcontent-%COMP%]{padding-inline:var(--gns3-density-card-padding)}.qemu-template-details__subsection[_ngcontent-%COMP%]{width:100%;box-sizing:border-box}.two-column-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--gns3-density-card-gap)}[class$=__field][_ngcontent-%COMP%], .form-field[_ngcontent-%COMP%]{width:100%}[class$=__actions][_ngcontent-%COMP%]{display:flex;width:100%;box-sizing:border-box;justify-content:flex-end;gap:var(--gns3-density-space-3);margin-top:0;padding:4px 0 8px}[class$=__content][_ngcontent-%COMP%] > [class$=__actions][_ngcontent-%COMP%]{grid-column:2;justify-content:flex-end}[class*=__save-btn][_ngcontent-%COMP%], [class*=__cancel-btn][_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing)}button[class*=__save-btn].mat-mdc-raised-button[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-primary);background-color:var(--mat-sys-primary);--mat-button-protected-label-text-color: var(--mat-sys-on-primary);--mat-button-protected-container-color: var(--mat-sys-primary);--mat-button-protected-state-layer-color: var(--mat-sys-on-primary)}button[class*=__cancel-btn].mat-mdc-button[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-surface);border-color:var(--mat-sys-outline);--mat-button-outlined-label-text-color: var(--mat-sys-on-surface);--mat-button-outlined-state-layer-color: var(--mat-sys-on-surface)}button[class*=__cancel-btn].mat-mdc-button[_ngcontent-%COMP%]{border:1px solid var(--mat-sys-outline)}button[class*=__config-btn][_ngcontent-%COMP%], button.docker-details__extra-config-btn[_ngcontent-%COMP%], .udp-tunnels__add-btn[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing);width:fit-content;max-width:100%;align-self:center;border-radius:var(--mat-sys-corner-full, 999px)}.preferences__usage-form[_ngcontent-%COMP%]{width:100%;box-sizing:border-box;padding:var(--gns3-density-card-padding)}.preferences__usage-field--full[_ngcontent-%COMP%]{display:block;width:100%}.preferences__usage-field--full[_ngcontent-%COMP%] textarea.mat-mdc-input-element[_ngcontent-%COMP%]{width:100%;min-height:140px;box-sizing:border-box;resize:vertical}[class$=__form][_ngcontent-%COMP%] [class*=__file-row][_ngcontent-%COMP%]{padding:0}[class*=__file-row][_ngcontent-%COMP%]{align-items:flex-start}[class$=__symbol-row][_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:var(--gns3-density-card-gap)}[class$=__symbol-row][_ngcontent-%COMP%] [class*=__symbol-btn][_ngcontent-%COMP%], [class$=__symbol-row][_ngcontent-%COMP%] [class*=__action-btn][_ngcontent-%COMP%], [class*=__file-row][_ngcontent-%COMP%] > button[class*=__browse-btn][_ngcontent-%COMP%], .docker-details__image-row[_ngcontent-%COMP%] > button.docker-details__pull-btn[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing);border-radius:var(--mat-sys-corner-full, 999px);width:fit-content;max-width:100%;flex:0 0 auto;align-self:flex-start;margin-top:var(--template-field-action-offset, calc((var(--gns3-density-form-field-height) - var(--gns3-density-control-height)) / 2))}[data-density=compact][_nghost-%COMP%] [class$=__heading-row][_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] [class$=__heading-row][_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column;gap:var(--gns3-density-space-3)}[data-density=compact][_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%]{width:100%}[data-density=compact][_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex:1}@media(max-width:768px){[class$=__symbol-row][_ngcontent-%COMP%], [class*=__file-row][_ngcontent-%COMP%], .docker-details__image-row[_ngcontent-%COMP%]{--template-field-action-offset: 0px}}@media(max-width:760px){[class$=__header][_ngcontent-%COMP%]{padding-inline:16px}[class$=__content][_ngcontent-%COMP%]{padding-inline:16px;grid-template-columns:1fr}.template-edit-tabs[_ngcontent-%COMP%]{position:static;grid-column:1;grid-row:auto;flex-direction:row;overflow-x:auto}.template-edit-tabs[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex:0 0 auto}[class$=__content][_ngcontent-%COMP%] > [class*=__form-card][_ngcontent-%COMP%]{grid-column:1;grid-row:auto}.two-column-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}[class$=__symbol-row][_ngcontent-%COMP%]{flex-direction:column}[class$=__actions][_ngcontent-%COMP%]{flex-direction:row;align-items:center;justify-content:flex-end}[class$=__actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:auto}[class$=__content][_ngcontent-%COMP%] > [class$=__actions][_ngcontent-%COMP%]{grid-column:1}.preferences__usage-form[_ngcontent-%COMP%]{padding:16px}[class*=__save-btn][_ngcontent-%COMP%], [class*=__cancel-btn][_ngcontent-%COMP%]{width:auto}}"],changeDetection:0})}return n})();var fh=class{builtin;category;compute_id;console_auto_start;console_type;default_name_format;ethernet_adapters;l1_keepalives;name;nvram;path;private_config;ram;serial_adapters;startup_config;symbol;template_id;template_type;usage;use_default_iou_values;tags;netmiko_device_type;appliance_metadata};var Xm=(()=>{class n{httpController;constructor(e){this.httpController=e}getTemplates(e){return this.httpController.get(e,"/templates")}getTemplate(e,t){return this.httpController.get(e,`/templates/${t}`)}getImages(e){return this.httpController.get(e,"/images?image_type=iou")}getImagePath(e,t){return`${e.protocol}//${e.host}:${e.port}/${zi.current_version}/images/upload/${t}`}addTemplate(e,t){return this.httpController.post(e,"/templates",t)}saveTemplate(e,t){return this.httpController.put(e,`/templates/${t.template_id}`,t)}static \u0275fac=function(t){return new(t||n)(_e(sn))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Xle=(n,o)=>o.path;function Yle(n,o){if(n&1){let e=R();r(0,"button",38),_("click",function(){y(e);let i=h();return w(i.goBack())}),r(1,"mat-icon"),c(2,"arrow_back"),l()()}}function Zle(n,o){if(n&1&&c(0),n&2){let e=o.index;N(e+1)}}function Jle(n,o){if(n&1&&c(0),n&2){let e=o.index;N(e+1)}}function ece(n,o){n&1&&(r(0,"span",39)(1,"mat-icon"),c(2,"dns"),l(),r(3,"span",40)(4,"span",41),c(5,"Controller type"),l(),r(6,"span",42),c(7,"Choose the execution host"),l()()())}function tce(n,o){n&1&&(r(0,"span",39)(1,"mat-icon"),c(2,"description"),l(),r(3,"span",40)(4,"span",41),c(5,"Template info"),l(),r(6,"span",42),c(7,"Basic details and icon"),l()()())}function nce(n,o){n&1&&(r(0,"span",39)(1,"mat-icon"),c(2,"hard_drive"),l(),r(3,"span",40)(4,"span",41),c(5,"IOU image"),l(),r(6,"span",42),c(7,"Select an image or browse"),l()()())}function ice(n,o){if(n&1&&(r(0,"mat-option",27),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function oce(n,o){if(n&1&&(r(0,"mat-option",27),c(1),l()),n&2){let e=o.$implicit;v("value",e.path),m(),X(" ",e.path," ")}}function ace(n,o){if(n&1){let e=R();r(0,"mat-form-field",25)(1,"mat-label"),c(2,"IOU image"),l(),r(3,"mat-select",43),_("selectionChange",function(i){y(e);let a=h();return w(a.iouTemplate.update(s=>ze(q({},s),{path:i.value})))}),Q(4,oce,2,2,"mat-option",27,Xle),l()()}if(n&2){let e=h();m(3),v("value",e.iouTemplate().path),m(),K(e.iouImages())}}function rce(n,o){if(n&1){let e=R();r(0,"div",28)(1,"input",44,1),_("change",function(i){y(e);let a=h();return w(a.uploadImageFile(i))}),l(),r(3,"button",45),_("click",function(){y(e);let i=Te(2);return w(i.click())}),c(4," Browse "),l(),r(5,"mat-form-field",46)(6,"mat-label"),c(7,"IOU image"),l(),r(8,"input",47),_("input",function(i){y(e);let a=h();return w(a.imageName.set(i.target.value))}),l()()()}if(n&2){let e=h();m(),v("uploader",e.uploader()),m(7),v("value",e.imageName())}}function sce(n,o){n&1&&(r(0,"span",39)(1,"mat-icon"),c(2,"settings_ethernet"),l(),r(3,"span",40)(4,"span",41),c(5,"Netmiko device type"),l(),r(6,"span",42),c(7,"Optional device type"),l()()())}function lce(n,o){if(n&1){let e=R();r(0,"button",48),_("click",function(){y(e),h();let i=Te(9);return w(i.previous())}),r(1,"mat-icon"),c(2,"arrow_back"),l(),c(3," Back "),l()}}function cce(n,o){if(n&1){let e=R();r(0,"button",49),_("click",function(){y(e),h();let i=Te(9);return w(i.next())}),c(1," Next "),r(2,"mat-icon",50),c(3,"arrow_forward"),l()()}if(n&2){let e=h();v("disabled",!e.canAdvance())}}function dce(n,o){if(n&1){let e=R();r(0,"button",51),_("click",function(){y(e);let i=h();return w(i.addTemplate())}),c(1," Create template "),r(2,"mat-icon",50),c(3,"arrow_forward"),l()()}if(n&2){let e=h();v("disabled",!e.canCreateTemplate())}}var ty=(()=>{class n{route=f($t);controllerService=f(_t);iouService=f(Xm);toasterService=f(re);validationService=f(Hn);router=f(Ft);location=f(ki);templateMocksService=f(Rr);uploadServiceService=f(Al);snackBar=f(pl);cd=f(oe);controller=z(void 0);iouTemplate=z(new fh);newImageSelected=z(!1);types=z(["L2 image","L3 image"]);iouImages=z([]);uploader=z(void 0);isLocalComputerChosen=z(!0);selectedStepIndex=z(0);subscription;templateName=$("");imageName=$("");selectedType=$("");netmikoDeviceType=$("");usage=$("");symbol=$("multilayer_switch");nameStepCompleted=Ne(()=>!!this.templateName());imageStepCompleted=Ne(()=>this.newImageSelected()?!!this.imageName():!!this.iouTemplate().path);ngOnInit(){this.uploader.set(new kl({url:""})),this.uploader().onAfterAddingFile=t=>{t.withCredentials=!1},this.uploader().onErrorItem=(t,i,a,s)=>{this.toasterService.error("An error occured: "+i)},this.uploader().onProgressItem=t=>{this.uploadServiceService.processBarCount(t.progress)},this.uploader().onSuccessItem=(t,i,a,s)=>{this.getImages(),this.toasterService.success("Image uploaded")};let e=this.route.snapshot.paramMap.get("controller_id");this.controllerService.get(parseInt(e,10)).then(t=>{this.controller.set(t),this.getImages(),this.templateMocksService.getIouTemplate().subscribe({next:i=>{this.iouTemplate.set(i)},error:()=>{this.toasterService.error("Failed to load IOU template"),this.cd.markForCheck()}})},t=>{let i=t.error?.message||t.message||"Failed to load controller";this.toasterService.error(i),this.cd.markForCheck()}),this.subscription=this.uploadServiceService.currentCancelItemDetails.subscribe(t=>{t&&this.cancelUploading()})}getImages(){this.iouService.getImages(this.controller()).subscribe({next:e=>{this.iouImages.set(e)},error:e=>{let t=e.error?.message||e.message||"Failed to load IOU images";this.toasterService.error(t),this.cd.markForCheck()}})}setControllerType(e){e==="local"&&this.isLocalComputerChosen.set(!0)}setDiskImage(e){this.newImageSelected.set(e==="newImage")}canAdvance(){return this.selectedStepIndex()===0?this.isLocalComputerChosen():this.nameStepCompleted()}canCreateTemplate(){return!!this.controller()&&this.nameStepCompleted()&&this.imageStepCompleted()}uploadImageFile(e){let t=e.target.files[0].name;this.imageName.set(t);let i=this.iouService.getImagePath(this.controller(),t);this.uploader().queue.forEach(s=>s.url=i);let a=this.uploader().queue[0];a.options&&(a.options.disableMultipart=!0),a.options.headers=[{name:"Authorization",value:"Bearer "+this.controller().authToken}],this.uploader().uploadItem(a),this.snackBar.openFromComponent(Nl,{panelClass:"uplaoding-file-snackabar",data:{upload_file_type:"Image"}})}cancelUploading(){this.uploader().clearQueue(),this.uploadServiceService.processBarCount(100),this.toasterService.warning("File upload cancelled")}goBack(){let e=this.controller()?.id??parseInt(this.route.snapshot.paramMap.get("controller_id"),10);ji(this.location,this.router,["/controller",e,"preferences"])}addTemplate(){if(this.canCreateTemplate()){let e=this.validationService.validateNetmikoDeviceType(this.netmikoDeviceType());if(!e.isValid){this.toasterService.error(e.errorMessage);return}let t=this.iouTemplate();t.template_id=xo(),t.name=this.templateName(),t.usage=this.usage(),t.symbol=this.symbol(),this.newImageSelected()&&(t.path=this.imageName()),t.compute_id="local",this.selectedType()==="L2 image"?(t.ethernet_adapters=4,t.serial_adapters=0):this.selectedType()==="L3 image"&&(t.ethernet_adapters=2,t.serial_adapters=2),t.netmiko_device_type=this.netmikoDeviceType().trim()||null,this.iouService.addTemplate(this.controller(),t).subscribe({next:()=>{this.goBack()},error:i=>{let a=i.error?.message||i.message||"Failed to add iou template";this.toasterService.error(a),this.cd.markForCheck()}})}else this.toasterService.error("Fill all required fields")}ngOnDestroy(){this.subscription.unsubscribe()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-add-iou-template"]],inputs:{templateName:[1,"templateName"],imageName:[1,"imageName"],selectedType:[1,"selectedType"],netmikoDeviceType:[1,"netmikoDeviceType"],usage:[1,"usage"],symbol:[1,"symbol"]},outputs:{templateName:"templateNameChange",imageName:"imageNameChange",selectedType:"selectedTypeChange",netmikoDeviceType:"netmikoDeviceTypeChange",usage:"usageChange",symbol:"symbolChange"},decls:74,vars:19,consts:[["stepper",""],["file",""],[1,"iou-add","template-wizard"],[1,"iou-add__header","template-wizard__header"],["mat-icon-button","","aria-label","Back to IOU templates",1,"iou-add__back-btn","template-wizard__back"],[1,"template-wizard__heading"],[1,"iou-add__title","template-wizard__title"],[1,"iou-add__content","template-wizard__body"],[1,"iou-add__form-card","template-wizard__stepper-card"],[1,"iou-add__stepper","template-wizard__stepper",3,"selectionChange","linear"],["matStepperIcon","edit"],["matStepperIcon","done"],[3,"completed"],["matStepLabel",""],[1,"iou-add__step-content","template-wizard__panel"],[1,"template-wizard__section"],[1,"template-wizard__section-title"],[1,"template-wizard__section-copy"],[1,"iou-add__radio-group"],["value","1",1,"iou-add__radio",3,"click","checked"],[1,"iou-add__form","template-wizard__panel"],["appearance","outline","subscriptSizing","dynamic",1,"iou-add__field","template-wizard__field"],["matInput","","required","","placeholder","Name","type","text",3,"input","value"],[3,"usageChange","symbolChange","usage","symbol"],["value","2",1,"iou-add__radio",3,"click","checked"],["appearance","outline","subscriptSizing","dynamic",1,"iou-add__field"],["placeholder","Type",3,"selectionChange","value"],[3,"value"],[1,"iou-add__file-row"],[3,"optional"],[1,"iou-add__form"],["subscriptSizing","dynamic","appearance","outline",1,"iou-add__field",3,"valueChange","value","controller"],[1,"iou-add__actions","template-wizard__actions"],["mat-stroked-button","",1,"iou-add__cancel-btn",3,"click"],[1,"template-wizard__step-actions"],["mat-button","","type","button",1,"template-wizard__previous"],["mat-raised-button","","color","primary","type","button",1,"template-wizard__next",3,"disabled"],["mat-raised-button","","color","primary",1,"iou-add__submit-btn",3,"disabled"],["mat-icon-button","","aria-label","Back to IOU templates",1,"iou-add__back-btn","template-wizard__back",3,"click"],[1,"template-wizard__step-label"],[1,"template-wizard__step-label-text"],[1,"template-wizard__step-label-title"],[1,"template-wizard__step-label-description"],["required","","placeholder","IOU image",3,"selectionChange","value"],["type","file","accept",".bin, .image, .iol","ng2FileSelect","",1,"iou-add__file-input",3,"change","uploader"],["mat-raised-button","","color","primary",1,"iou-add__browse-btn",3,"click"],["appearance","outline","subscriptSizing","dynamic",1,"iou-add__field","iou-add__field--flex"],["matInput","","required","","type","text","placeholder","IOU image",3,"input","value"],["mat-button","","type","button",1,"template-wizard__previous",3,"click"],["mat-raised-button","","color","primary","type","button",1,"template-wizard__next",3,"click","disabled"],["iconPositionEnd",""],["mat-raised-button","","color","primary",1,"iou-add__submit-btn",3,"click","disabled"]],template:function(t,i){if(t&1){let a=R();r(0,"div",2)(1,"header",3),T(2,Yle,3,0,"button",4),r(3,"div",5)(4,"h1",6),c(5,"New IOU device template"),l()()(),r(6,"main",7)(7,"section",8)(8,"mat-horizontal-stepper",9,0),_("selectionChange",function(d){return i.selectedStepIndex.set(d.selectedIndex)}),se(10,Zle,1,1,"ng-template",10)(11,Jle,1,1,"ng-template",11),r(12,"mat-step",12),se(13,ece,8,0,"ng-template",13),r(14,"div",14)(15,"section",15)(16,"h2",16),c(17,"Controller type"),l(),r(18,"p",17),c(19,"Choose where this IOU device will run."),l(),r(20,"mat-radio-group",18)(21,"mat-radio-button",19),_("click",function(){return i.setControllerType("local")}),c(22," Run this IOU device locally "),l()()()()(),r(23,"mat-step",12),se(24,tce,8,0,"ng-template",13),r(25,"div",20)(26,"section",15)(27,"h2",16),c(28,"Template information"),l(),r(29,"p",17),c(30,"Choose a name and an optional usage note for your template."),l(),r(31,"mat-form-field",21)(32,"mat-label"),c(33,"Template name"),l(),r(34,"input",22),_("input",function(d){return i.templateName.set(d.target.value)}),l()(),r(35,"app-template-info-fields",23),rn("usageChange",function(d){return y(a),Xt(i.usage,d)||(i.usage=d),w(d)})("symbolChange",function(d){return y(a),Xt(i.symbol,d)||(i.symbol=d),w(d)}),l()()()(),r(36,"mat-step",12),se(37,nce,8,0,"ng-template",13),r(38,"div",20)(39,"section",15)(40,"h2",16),c(41,"IOU image"),l(),r(42,"p",17),c(43,"Select an existing IOU image or upload a new one."),l(),r(44,"mat-radio-group",18)(45,"mat-radio-button",19),_("click",function(){return i.setDiskImage("existingImage")}),c(46," Existing image "),l(),r(47,"mat-radio-button",24),_("click",function(){return i.setDiskImage("newImage")}),c(48," New image "),l()(),r(49,"mat-form-field",25)(50,"mat-label"),c(51,"Type"),l(),r(52,"mat-select",26),_("selectionChange",function(d){return i.selectedType.set(d.value)}),Q(53,ice,2,2,"mat-option",27,Oe),l()(),T(55,ace,6,1,"mat-form-field",25),T(56,rce,9,2,"div",28),l()()(),r(57,"mat-step",29),se(58,sce,8,0,"ng-template",13),r(59,"div",14)(60,"section",15)(61,"h2",16),c(62,"Netmiko device type"),l(),r(63,"p",17),c(64," Default device type used for netmiko-driven configuration pushes. "),l(),r(65,"div",30)(66,"app-netmiko-device-type-select",31),rn("valueChange",function(d){return y(a),Xt(i.netmikoDeviceType,d)||(i.netmikoDeviceType=d),w(d)}),l()()()()()()(),r(67,"div",32)(68,"button",33),_("click",function(){return i.goBack()}),c(69,"Cancel"),l(),r(70,"div",34),T(71,lce,4,0,"button",35),T(72,cce,4,1,"button",36)(73,dce,4,1,"button",37),l()()()()}t&2&&(m(2),E(i.controller()?2:-1),m(6),v("linear",!0),m(4),v("completed",i.isLocalComputerChosen()),m(9),v("checked",!0),m(2),v("completed",i.nameStepCompleted()),m(11),v("value",i.templateName()),m(),an("usage",i.usage)("symbol",i.symbol),m(),v("completed",i.imageStepCompleted()),m(9),v("checked",!i.newImageSelected()),m(2),v("checked",i.newImageSelected()),m(5),v("value",i.selectedType()),m(),K(i.types()),m(2),E(i.newImageSelected()?-1:55),m(),E(i.newImageSelected()?56:-1),m(),v("optional",!0),m(9),an("value",i.netmikoDeviceType),v("controller",i.controller()),m(5),E(i.selectedStepIndex()>0?71:-1),m(),E(i.selectedStepIndex()<3?72:73))},dependencies:[po,ie,ce,Y,he,Be,Fo,la,Zo,we,Pe,Ve,ye,Ee,ot,ct,nt,Il,gc,tl,hc,uc,Pl,Kc,Ds],styles:["[_nghost-%COMP%]{display:block;width:100%;background:transparent}.iou-add__header[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:32px 20px 16px;display:flex;align-items:center;gap:16px;animation:none}.iou-add__back-btn[_ngcontent-%COMP%]{width:48px;height:48px;border-radius:12px;color:var(--mat-sys-on-surface);transition:all var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1)}.iou-add__back-btn[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 8%,transparent)}.iou-add__title[_ngcontent-%COMP%]{flex:1;font-size:32px;font-weight:500;color:var(--mat-sys-on-surface);margin:0}.iou-add__content[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:0 20px 20px;animation:none}.iou-add__form-card[_ngcontent-%COMP%]{background:var(--mat-sys-surface);border-radius:16px;overflow:hidden;box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 20%,transparent),0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent);padding:24px}.iou-add__stepper[_ngcontent-%COMP%]{background:transparent}.iou-add__radio-group[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px;margin-bottom:24px}.iou-add__radio[_ngcontent-%COMP%]{font-size:16px}.iou-add__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px}.iou-add__field[_ngcontent-%COMP%]{width:100%}.iou-add__field--flex[_ngcontent-%COMP%]{flex:1}.iou-add__file-row[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:16px}.iou-add__file-input[_ngcontent-%COMP%]{display:none}.iou-add__browse-btn[_ngcontent-%COMP%]{margin-top:0;height:var(--gns3-density-control-height)}.iou-add__actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:12px;margin-top:24px}.iou-add__cancel-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none}.iou-add__submit-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none;letter-spacing:.5px}@media(max-width:768px){.iou-add__header[_ngcontent-%COMP%]{padding:24px 16px 12px;gap:12px}.iou-add__back-btn[_ngcontent-%COMP%]{width:44px;height:44px}.iou-add__title[_ngcontent-%COMP%]{font-size:24px}.iou-add__content[_ngcontent-%COMP%]{padding:0 16px 16px}.iou-add__form-card[_ngcontent-%COMP%]{padding:16px}.iou-add__file-row[_ngcontent-%COMP%], .iou-add__actions[_ngcontent-%COMP%]{flex-direction:column}.iou-add__cancel-btn[_ngcontent-%COMP%], .iou-add__submit-btn[_ngcontent-%COMP%]{width:100%;height:44px}}",'[_nghost-%COMP%]{display:block;width:100%;background:transparent}.templates-page__content[_ngcontent-%COMP%]{animation:none}.templates-page__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:20px;max-width:1600px;margin:0 auto;padding:24px 20px 16px}.templates-page__heading[_ngcontent-%COMP%], .templates-page__header-actions[_ngcontent-%COMP%]{display:flex;align-items:center}.templates-page__heading[_ngcontent-%COMP%]{min-width:0;gap:var(--gns3-density-space-3)}.templates-page__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.templates-page__header-actions[_ngcontent-%COMP%]{gap:var(--gns3-density-space-3)}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);border-radius:12px;padding-inline:18px;font-size:15px;font-weight:500;letter-spacing:.3px;text-transform:none}[class*=-templates__header][_ngcontent-%COMP%]{box-sizing:border-box;width:100%;height:calc(var(--gns3-density-space-4) * 2 + (var(--gns3-density-section-title-size) + 2px) * 1.2 + 1px);max-width:none;margin:0;padding:0 var(--gns3-density-page-padding);gap:var(--gns3-density-space-3);color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container);border-bottom:1px solid var(--mat-sys-outline-variant)}[class*=-templates__back-btn][_ngcontent-%COMP%], [class*=-templates__add-btn][_ngcontent-%COMP%]{flex:0 0 auto;width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:12px}[class*=-templates__back-btn][_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container)}[class*=-templates__add-btn][_ngcontent-%COMP%]{color:var(--mat-sys-primary)}[class*=-templates__title][_ngcontent-%COMP%]{flex:1;min-width:0;margin:0;padding-bottom:0;color:var(--mat-sys-on-primary-container);font-size:calc(var(--gns3-density-section-title-size) + 2px);font-weight:650;line-height:1.2;letter-spacing:-.01em}.templates-page__scopes[_ngcontent-%COMP%]{display:flex;gap:4px;max-width:1560px;margin:0 auto 16px;padding:0 20px;border-bottom:1px solid var(--mat-sys-outline-variant)}.templates-page__scope[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center;gap:8px;min-height:48px;padding:0 16px;border:0;color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;font-size:14px;font-weight:550;cursor:pointer}.templates-page__scope[_ngcontent-%COMP%]:after{position:absolute;right:8px;bottom:-1px;left:8px;height:2px;border-radius:2px 2px 0 0;background:transparent;content:""}.templates-page__scope[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}.templates-page__scope[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{min-width:22px;padding:2px 6px;border-radius:12px;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-high);font-size:11px;text-align:center}.templates-page__scope--active[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%]:after{background:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap);max-width:1600px;margin:0 auto;padding:0 20px 8px}.templates-page__search[_ngcontent-%COMP%]{flex:1;min-width:240px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:flex;align-items:center;flex:0 0 auto;gap:var(--gns3-density-space-3)}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{width:155px}.templates-page__view-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px;padding:4px 2px;border-radius:8px;background:var(--mat-sys-surface-container-high)}button.templates-page__view-button[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:8px;color:var(--mat-sys-on-surface-variant);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);--mat-icon-button-icon-size: 22px}button.templates-page__view-button--active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__main[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:20px;max-width:1600px;margin:0 auto;padding:0 20px 20px}.templates-page__loading[_ngcontent-%COMP%]{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;min-height:320px;gap:var(--gns3-density-card-gap);color:var(--mat-sys-on-surface-variant)}.templates-page__table-container[_ngcontent-%COMP%]{flex:1;min-width:0;border-radius:16px;background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;overflow-x:auto}mat-table[_ngcontent-%COMP%]{width:100%;min-width:850px}.mat-mdc-row[_ngcontent-%COMP%], .mat-row[_ngcontent-%COMP%]{height:var(--mat-table-row-item-container-height);min-height:var(--mat-table-row-item-container-height)}.mat-header-row[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%]{position:sticky;top:0;z-index:10;background:var(--mat-sys-surface-container-highest);box-shadow:inset 0 -2px var(--mat-sys-primary);--mat-sort-arrow-color: var(--mat-sys-primary)}.mat-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:13px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}mat-row[_ngcontent-%COMP%]{cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease}mat-row[_ngcontent-%COMP%]:nth-child(2n){background:color-mix(in srgb,var(--mat-sys-on-surface) 1%,transparent)}mat-row[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}mat-row.templates-page__row--selected[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}mat-cell[_ngcontent-%COMP%], mat-header-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:inherit;color:var(--mat-sys-on-surface)}.mat-column-name[_ngcontent-%COMP%]{flex:2.4;min-width:240px;justify-content:flex-start}.mat-column-template_type[_ngcontent-%COMP%]{flex:1.1;min-width:130px}.mat-column-category[_ngcontent-%COMP%]{flex:1;min-width:110px}.mat-column-compute_id[_ngcontent-%COMP%]{flex:1;min-width:105px}.mat-column-builtin[_ngcontent-%COMP%]{flex:0 0 90px;min-width:90px;justify-content:center}.mat-column-actions[_ngcontent-%COMP%]{flex:0 0 180px;min-width:180px;box-sizing:border-box;justify-content:flex-start;padding-right:24px}.templates-page__name-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-width:0;gap:var(--gns3-density-space-3)}.templates-page__name-copy[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:14px;font-weight:600}.templates-page__symbol[_ngcontent-%COMP%]{display:grid;flex:0 0 52px;width:52px;height:52px;overflow:hidden;place-items:center;border-radius:14px;color:var(--mat-sys-on-primary-container);background:color-mix(in srgb,var(--mat-sys-primary-container) 82%,var(--mat-sys-surface))}.templates-page__symbol[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:78%;height:78%;object-fit:contain;filter:drop-shadow(0 2px 4px color-mix(in srgb,var(--mat-sys-shadow) 25%,transparent))}.templates-page__symbol[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:27px;height:27px;font-size:27px}.templates-page__symbol--small[_ngcontent-%COMP%]{flex-basis:38px;width:38px;height:38px;border-radius:10px}.templates-page__symbol--small[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:21px;height:21px;font-size:21px}.templates-page__type-badge[_ngcontent-%COMP%], .templates-page__source-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;width:fit-content;padding:4px 9px;border-radius:16px;font-size:12px;font-weight:600;white-space:nowrap}.templates-page__type-badge[_ngcontent-%COMP%]{color:var(--mat-sys-secondary);background:color-mix(in srgb,var(--mat-sys-secondary) 11%,transparent)}.templates-page__type-badge--qemu[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__type-badge--docker[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container)}.templates-page__type-badge--dynamips[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary-container);background:var(--mat-sys-tertiary-container)}.templates-page__type-badge--cloud[_ngcontent-%COMP%]{color:var(--mat-sys-on-error-container);background:var(--mat-sys-error-container)}.templates-page__type-badge--vpcs[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary);background:var(--mat-sys-primary)}.templates-page__type-badge--ethernet-hub[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary);background:var(--mat-sys-secondary)}.templates-page__type-badge--ethernet-switch[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary);background:var(--mat-sys-tertiary)}.templates-page__type-badge--iou[_ngcontent-%COMP%]{color:var(--mat-sys-on-error);background:var(--mat-sys-error)}.templates-page__type-badge--nat[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-highest)}.templates-page__source-badge[_ngcontent-%COMP%]{color:var(--mat-sys-primary);background:color-mix(in srgb,var(--mat-sys-primary) 11%,transparent)}.templates-page__source-badge--builtin[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary);background:color-mix(in srgb,var(--mat-sys-tertiary) 11%,transparent)}.templates-page__table-footer[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:var(--mat-table-footer-container-height);padding:0 12px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container))}.templates-page__table-footer[_ngcontent-%COMP%] mat-paginator[_ngcontent-%COMP%]{width:100%;--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__actions-cell[_ngcontent-%COMP%], .templates-page__card-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:3px}button.templates-page__action[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-on-surface-variant);width:var(--gns3-density-control-height-sm);height:var(--gns3-density-control-height-sm);--mat-icon-button-state-layer-size: var(--gns3-density-control-height-sm);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-control-height-sm)}button.templates-page__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}button.templates-page__action[_ngcontent-%COMP%]{color:var(--template-action-color);--mat-icon-button-state-layer-color: var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:not(:disabled) mat-icon[_ngcontent-%COMP%]{color:var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:disabled mat-icon[_ngcontent-%COMP%]{color:var(--gns3-button-disabled-label-color)}button.templates-page__action--details[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--edit[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-primary)}button.templates-page__action--duplicate[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--delete[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-error)}.templates-page__grid[_ngcontent-%COMP%]{flex:1;min-width:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-content:start;gap:var(--gns3-density-card-gap)}.templates-page__grid--with-details[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__card[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column;padding:16px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;background:var(--mat-sys-surface);cursor:pointer;transition:transform var(--gns3-motion-duration-standard) ease,box-shadow var(--gns3-motion-duration-standard) ease,border-color var(--gns3-motion-duration-standard) ease}.templates-page__card[_ngcontent-%COMP%]:hover{border-color:var(--mat-sys-outline-variant);background:var(--mat-sys-surface-container-low)}.templates-page__card--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);box-shadow:0 0 0 1px var(--mat-sys-primary)}.templates-page__card-header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--gns3-density-space-3)}.templates-page__card-body[_ngcontent-%COMP%]{flex:1;min-width:0;padding:14px 0 12px}.templates-page__card-body[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{display:-webkit-box;overflow:hidden;margin:0 0 9px;color:var(--mat-sys-on-surface);font-size:17px;font-weight:650;line-height:1.35;overflow-wrap:anywhere;-webkit-box-orient:vertical;-webkit-line-clamp:2}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%]{display:grid;gap:8px;margin:16px 0 0}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{min-width:0;margin:0;overflow:hidden;color:var(--mat-sys-on-surface);font-size:13px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] .templates-page__card-tags-row[_ngcontent-%COMP%]{align-items:flex-start}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd.templates-page__card-tags[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px;overflow:visible;white-space:normal}.templates-page__card-actions[_ngcontent-%COMP%]{justify-content:flex-end;min-height:33px;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__grid-paginator[_ngcontent-%COMP%]{grid-column:1/-1;width:100%;border-radius:12px;background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container));--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__empty[_ngcontent-%COMP%]{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:230px;padding:32px;color:var(--mat-sys-on-surface-variant);text-align:center}.templates-page__empty[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{width:48px;height:48px;font-size:48px;opacity:.55}.templates-page__empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:12px 0 0;color:var(--mat-sys-on-surface);font-size:17px}.templates-page__empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:5px 0 0;font-size:14px}.templates-page__details[_ngcontent-%COMP%]{position:sticky;top:16px;flex:0 0 clamp(390px,31vw,480px);display:flex;min-height:380px;max-height:calc(100vh - 176px);flex-direction:column;overflow:hidden;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 60%,transparent);border-radius:16px;background:var(--mat-sys-surface);box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent);animation:_ngcontent-%COMP%_templates-slide-in var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard)}.templates-page__details-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:var(--gns3-density-space-3);min-height:56px;box-sizing:border-box;padding:8px 10px 8px 16px;border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 72%,var(--mat-sys-surface))}.templates-page__details-header[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-primary-container)}.templates-page__details-heading[_ngcontent-%COMP%]{display:flex;min-width:0;align-items:center;gap:var(--gns3-density-space-3)}.templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;margin:0;color:var(--mat-sys-on-primary-container);font-size:19px;font-weight:650;line-height:1.25;text-overflow:ellipsis;white-space:nowrap}.templates-page__details-title-line[_ngcontent-%COMP%]{display:flex;flex:1;min-width:0;align-items:center;gap:var(--gns3-density-space-2)}.templates-page__details-title-line[_ngcontent-%COMP%] .templates-page__type-badge[_ngcontent-%COMP%]{flex:0 0 auto}.templates-page__details-body[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:12px 20px}.templates-page__description[_ngcontent-%COMP%]{padding:10px 0 14px;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__description[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.6px;text-transform:uppercase}.templates-page__description[_ngcontent-%COMP%] app-markdown-viewer[_ngcontent-%COMP%]{display:block;margin-top:8px;padding:2px 12px;border-radius:10px;background:var(--mat-sys-surface-container-low);overflow-wrap:anywhere;--markdown-viewer-font-size: 13px;--markdown-viewer-line-height: 1.5;--markdown-viewer-heading-scale: .85}.templates-page__detail-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:22px 105px minmax(0,1fr);align-items:center;gap:var(--gns3-density-space-3);min-height:40px;box-sizing:border-box;padding:8px 0;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__detail-row[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:19px;height:19px;color:var(--mat-sys-primary);font-size:19px}.templates-page__detail-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:12px;font-weight:650;letter-spacing:.5px;text-transform:uppercase;white-space:nowrap}.templates-page__detail-row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{min-width:0;color:var(--mat-sys-on-surface);font-size:14px;font-weight:500;line-height:1.45;text-align:right;overflow-wrap:anywhere}.templates-page__detail-row--stacked[_ngcontent-%COMP%]{align-items:start}.templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__mono[_ngcontent-%COMP%], .templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__path[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-family:var(--gns3-font-code);font-size:12px;word-break:break-all}.templates-page__tags[_ngcontent-%COMP%]{border-bottom:0}.templates-page__tags[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:7px}.templates-page__tag[_ngcontent-%COMP%]{padding:5px 9px;border-radius:14px;color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container);font-size:11px;font-weight:550}.templates-page__details-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(105px,1fr));gap:var(--gns3-density-space-2);padding:14px 16px 18px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-surface-container) 72%,transparent)}button.templates-page__details-action[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-on-surface-variant);height:40px;border-radius:12px;color:var(--details-action-color);border-color:color-mix(in srgb,var(--details-action-color) 48%,transparent);font-size:13px;font-weight:500}button.templates-page__details-action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--details-action-color)}button.templates-page__details-action--edit[_ngcontent-%COMP%], button.templates-page__details-action--duplicate[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-primary)}button.templates-page__details-action--delete[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-error)}[data-density=compact][_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%]{min-height:40px;height:40px}[data-density=compact][_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%]{width:40px;height:40px;--mat-icon-button-state-layer-size: 40px}[data-density=compact][_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%]{min-height:48px;padding-block:4px}[data-density=compact][_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:18px}[data-density=compact][_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%]{padding-block:8px}[data-density=compact][_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%]{min-height:36px;padding-block:6px}[data-density=compact][_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%]{padding:12px}@keyframes _ngcontent-%COMP%_templates-slide-in{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@media(max-width:1400px){.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__main[_ngcontent-%COMP%]{flex-direction:column}.templates-page__table-container[_ngcontent-%COMP%], .templates-page__grid[_ngcontent-%COMP%], .templates-page__details[_ngcontent-%COMP%]{width:100%}.templates-page__details[_ngcontent-%COMP%]{position:static;flex-basis:auto;max-height:none}}@media(max-width:900px){.templates-page__header[_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column}.templates-page__header-actions[_ngcontent-%COMP%]{width:100%}.templates-page__toolbar[_ngcontent-%COMP%]{align-items:stretch;flex-direction:column}.templates-page__toolbar-actions[_ngcontent-%COMP%]{width:100%}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{flex:1;width:auto}}@media(max-width:640px){.templates-page__header[_ngcontent-%COMP%]{padding:20px 16px 12px}.templates-page__header-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{width:100%;padding-inline:10px}.templates-page__scopes[_ngcontent-%COMP%]{overflow-x:auto;padding-inline:16px}.templates-page__scope[_ngcontent-%COMP%]{flex:0 0 auto;padding-inline:12px}.templates-page__toolbar[_ngcontent-%COMP%], .templates-page__main[_ngcontent-%COMP%]{padding-inline:16px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__view-toggle[_ngcontent-%COMP%]{grid-column:1/-1;justify-self:end}.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.templates-page__details[_ngcontent-%COMP%]{min-width:0}}'],changeDetection:0})}return n})();var vh=(()=>{class n{getConsoleTypes(){return["telnet","ssh","none"]}getCategories(){return[["Default","guest"],["Routers","router"],["Switches","switch"],["End devices","guest"],["Security devices","firewall"]]}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();function mce(n,o){if(n&1&&(r(0,"mat-option",31),c(1),l()),n&2){let e=o.$implicit;v("value",e[1]),m(),N(e[0])}}function pce(n,o){if(n&1){let e=R();r(0,"mat-chip-row",52),_("removed",function(){let i=y(e).$implicit,a=h(3);return w(a.removeTag(i))}),c(1),r(2,"button",53)(3,"mat-icon"),c(4,"cancel"),l()()()}if(n&2){let e=o.$implicit;v("editable",!1),Ce("title",e),m(),X(" ",e," "),m(),Ce("aria-label","Remove tag "+e)}}function uce(n,o){if(n&1&&(r(0,"mat-option",31),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function gce(n,o){if(n&1){let e=R();r(0,"div",24)(1,"mat-form-field",25)(2,"mat-label"),c(3,"RAM size"),l(),r(4,"input",54),_("input",function(i){y(e);let a=h(3);return w(a.ram.set(+i.target.value))}),l(),r(5,"span",55),c(6,"MB"),l()(),r(7,"mat-form-field",25)(8,"mat-label"),c(9,"NVRAM size"),l(),r(10,"input",56),_("input",function(i){y(e);let a=h(3);return w(a.nvram.set(+i.target.value))}),l(),r(11,"span",55),c(12,"KB"),l()()()}if(n&2){let e=h(3);m(4),v("value",e.ram()),m(6),v("value",e.nvram())}}function hce(n,o){if(n&1){let e=R();r(0,"form",17)(1,"div",24)(2,"mat-form-field",25)(3,"mat-label"),c(4,"Template name"),l(),r(5,"input",26),_("input",function(i){y(e);let a=h(2);return w(a.templateName.set(i.target.value))}),l()(),r(6,"mat-form-field",25)(7,"mat-label"),c(8,"Default name format"),l(),r(9,"input",27),_("input",function(i){y(e);let a=h(2);return w(a.defaultName.set(i.target.value))}),l()()(),r(10,"div",28)(11,"mat-form-field",29)(12,"mat-label"),c(13,"Category"),l(),r(14,"mat-select",30),_("selectionChange",function(i){y(e);let a=h(2);return w(a.category.set(i.value))}),Q(15,mce,2,2,"mat-option",31,ni),l()(),r(17,"mat-form-field",32)(18,"mat-label"),c(19,"Symbol"),l(),r(20,"input",33),_("input",function(i){y(e);let a=h(2);return w(a.symbol.set(i.target.value))}),l()(),r(21,"button",34),_("click",function(){y(e);let i=h(2);return w(i.chooseSymbol())}),r(22,"mat-icon"),c(23,"add"),l(),c(24," Choose symbol "),l()(),r(25,"div",35)(26,"mat-form-field",36)(27,"mat-label"),c(28,"Tags"),l(),r(29,"input",37),_("matChipInputTokenEnd",function(i){y(e);let a=h(2);return w(a.addTag(i))}),l()(),r(30,"mat-chip-grid",38,0),Q(32,pce,5,4,"mat-chip-row",39,Oe),l()(),r(34,"div",40)(35,"input",41,1),_("change",function(i){y(e);let a=h(2);return w(a.uploadImageFile(i))}),l(),r(37,"button",42),_("click",function(){y(e);let i=Te(36);return w(i.click())}),c(38," Browse "),l(),r(39,"mat-form-field",32)(40,"mat-label"),c(41,"IOU image path"),l(),r(42,"input",43),_("input",function(i){y(e);let a=h(2);return w(a.path.set(i.target.value))}),l()()(),r(43,"mat-form-field",44)(44,"mat-label"),c(45,"Startup config"),l(),r(46,"input",45),_("input",function(i){y(e);let a=h(2);return w(a.initialConfig.set(i.target.value))}),l()(),r(47,"mat-form-field",44)(48,"mat-label"),c(49,"Private config"),l(),r(50,"input",46),_("input",function(i){y(e);let a=h(2);return w(a.privateConfig.set(i.target.value))}),l()(),r(51,"mat-form-field",44)(52,"mat-label"),c(53,"Console type"),l(),r(54,"mat-select",30),_("selectionChange",function(i){y(e);let a=h(2);return w(a.consoleType.set(i.value))}),Q(55,uce,2,2,"mat-option",31,Oe),l()(),r(57,"div",47)(58,"app-netmiko-device-type-select",48),rn("valueChange",function(i){y(e);let a=h(2);return Xt(a.netmikoDeviceType,i)||(a.netmikoDeviceType=i),w(i)}),l(),r(59,"mat-form-field",25)(60,"mat-label"),c(61,"Default username"),l(),r(62,"input",49),_("input",function(i){y(e);let a=h(2);return w(a.onCredentialInput("default_username",i))}),l()(),r(63,"mat-form-field",25)(64,"mat-label"),c(65,"Default password"),l(),r(66,"input",50),_("input",function(i){y(e);let a=h(2);return w(a.onCredentialInput("default_password",i))}),l()()(),r(67,"mat-checkbox",51),_("change",function(i){y(e);let a=h(2);return w(a.consoleAutoStart.set(i.checked))}),c(68," Auto start console "),l(),r(69,"mat-checkbox",51),_("change",function(i){y(e);let a=h(2);return w(a.l1Keepalives.set(i.checked))}),c(70," Enable Layer 1 keepalive messages "),l(),r(71,"mat-checkbox",51),_("change",function(i){y(e);let a=h(2);return w(a.useDefaultIouValues.set(i.checked))}),c(72," Use default IOU values for memories "),l(),T(73,gce,13,2,"div",24),l()}if(n&2){let e=Te(31),t=h(2);m(5),v("value",t.templateName()),m(4),v("value",t.defaultName()),m(5),v("value",t.category()),m(),K(t.categories),m(5),v("value",t.symbol()),m(9),v("matChipInputFor",e)("matChipInputSeparatorKeyCodes",t.separatorKeysCodes),m(),ne("gns3-chip-field__values--empty",t.tags().length===0),m(2),K(t.tags()),m(10),v("value",t.path()),m(4),v("value",t.initialConfig()),m(4),v("value",t.privateConfig()),m(4),v("value",t.consoleType()),m(),K(t.consoleTypes),m(3),an("value",t.netmikoDeviceType),v("controller",t.controller),m(4),v("value",t.defaultUsername()),m(4),v("value",t.defaultPassword()),m(),v("checked",t.consoleAutoStart()),m(2),v("checked",t.l1Keepalives()),m(2),v("checked",t.useDefaultIouValues()),m(2),E(t.useDefaultIouValues()?-1:73)}}function _ce(n,o){if(n&1){let e=R();r(0,"form",17)(1,"mat-form-field",44)(2,"mat-label"),c(3,"Ethernet adapters"),l(),r(4,"input",57),_("input",function(i){y(e);let a=h(2);return w(a.ethernetAdapters.set(+i.target.value))}),l()(),r(5,"mat-form-field",44)(6,"mat-label"),c(7,"Serial adapters"),l(),r(8,"input",58),_("input",function(i){y(e);let a=h(2);return w(a.serialAdapters.set(+i.target.value))}),l()()()}if(n&2){let e=h(2);m(4),v("value",e.ethernetAdapters()),m(4),v("value",e.serialAdapters())}}function fce(n,o){if(n&1){let e=R();r(0,"div",18)(1,"mat-form-field",59)(2,"mat-label"),c(3,"Usage notes"),l(),r(4,"textarea",60),_("input",function(i){y(e);let a=h(2);return w(a.usage.set(i.target.value))}),l()()()}if(n&2){let e=h(2);m(4),v("value",e.usage())}}function vce(n,o){if(n&1){let e=R();r(0,"app-template-metadata-section",61),rn("metadataChange",function(i){y(e);let a=h(2);return Xt(a.applianceMetadata,i)||(a.applianceMetadata=i),w(i)}),l()}if(n&2){let e=h(2);an("metadata",e.applianceMetadata)}}function Cce(n,o){if(n&1){let e=R();r(0,"main",10)(1,"nav",11)(2,"button",12),_("click",function(){y(e);let i=h();return w(i.selectSection("general"))}),c(3," General settings "),l(),r(4,"button",12),_("click",function(){y(e);let i=h();return w(i.selectSection("network"))}),c(5," Network "),l(),r(6,"button",12),_("click",function(){y(e);let i=h();return w(i.selectSection("usage"))}),c(7," Usage "),l(),r(8,"button",12),_("click",function(){y(e);let i=h();return w(i.selectSection("metadata"))}),c(9," Metadata "),l()(),r(10,"section",13)(11,"div",14),_("click",function(){y(e);let i=h();return w(i.toggleSection("general"))}),r(12,"h3",15),c(13,"General settings"),l(),r(14,"mat-icon",16),c(15),l()(),T(16,hce,74,20,"form",17),l(),r(17,"section",13)(18,"div",14),_("click",function(){y(e);let i=h();return w(i.toggleSection("network"))}),r(19,"h3",15),c(20,"Network"),l(),r(21,"mat-icon",16),c(22),l()(),T(23,_ce,9,2,"form",17),l(),r(24,"section",13)(25,"div",14),_("click",function(){y(e);let i=h();return w(i.toggleSection("usage"))}),r(26,"h3",15),c(27,"Usage"),l(),r(28,"mat-icon",16),c(29),l()(),T(30,fce,5,1,"div",18),l(),r(31,"section",13)(32,"div",19)(33,"h3",15),c(34,"Appliance metadata"),l()(),T(35,vce,1,1,"app-template-metadata-section",20),l(),r(36,"div",21)(37,"button",22),_("click",function(){y(e);let i=h();return w(i.goBack())}),c(38,"Cancel"),l(),r(39,"button",23),_("click",function(){y(e);let i=h();return w(i.onSave())}),c(40,"Save"),l()()()}if(n&2){let e=h();m(2),ne("is-active",e.activeSection==="general"),m(2),ne("is-active",e.activeSection==="network"),m(2),ne("is-active",e.activeSection==="usage"),m(2),ne("is-active",e.activeSection==="metadata"),m(7),N(e.generalSettingsExpanded()?"expand_less":"expand_more"),m(),E(e.activeSection==="general"?16:-1),m(6),N(e.networkExpanded()?"expand_less":"expand_more"),m(),E(e.activeSection==="network"?23:-1),m(6),N(e.usageExpanded()?"expand_less":"expand_more"),m(),E(e.activeSection==="usage"?30:-1),m(5),E(e.activeSection==="metadata"?35:-1)}}var ny=(()=>{class n{route=f($t);controllerService=f(_t);iouService=f(Xm);toasterService=f(re);configurationService=f(vh);router=f(Ft);location=f(ki);cd=f(oe);dialog=f(Xe);dialogConfig=f(yo);validationService=f(cv);controller;iouTemplate;separatorKeysCodes=[13,188];consoleTypes=[];categories=[];templateName=$("");defaultName=$("");symbol=$("");path=$("");initialConfig=$("");privateConfig=$("");category=$("");consoleType=$("");consoleAutoStart=$(!1);l1Keepalives=$(!1);useDefaultIouValues=$(!1);ram=$(256);nvram=$(128);ethernetAdapters=$(0);serialAdapters=$(0);usage=$("");netmikoDeviceType=$("");applianceMetadata=z(null);defaultUsername=Ne(()=>rs(this.applianceMetadata(),"default_username"));defaultPassword=Ne(()=>rs(this.applianceMetadata(),"default_password"));tags=$([]);generalSettingsExpanded=$(!1);networkExpanded=$(!1);usageExpanded=$(!1);activeSection="general";ngOnInit(){let e=this.route.snapshot.paramMap.get("controller_id"),t=this.route.snapshot.paramMap.get("template_id");this.controllerService.get(parseInt(e,10)).then(i=>{this.controller=i,this.cd.markForCheck(),this.getConfiguration(),this.iouService.getTemplate(this.controller,t).subscribe({next:a=>{this.iouTemplate=a,this.iouTemplate.tags||(this.iouTemplate.tags=[]),this.templateName.set(a.name||""),this.defaultName.set(a.default_name_format||""),this.symbol.set(a.symbol||""),this.path.set(a.path||""),this.initialConfig.set(a.startup_config||""),this.privateConfig.set(a.private_config||""),this.category.set(a.category||""),this.consoleType.set(a.console_type||""),this.consoleAutoStart.set(a.console_auto_start||!1),this.l1Keepalives.set(a.l1_keepalives||!1),this.useDefaultIouValues.set(a.use_default_iou_values!==!1),this.ram.set(a.ram||256),this.nvram.set(a.nvram||128),this.ethernetAdapters.set(a.ethernet_adapters||0),this.serialAdapters.set(a.serial_adapters||0),this.usage.set(a.usage||""),this.netmikoDeviceType.set(a.netmiko_device_type||""),this.applianceMetadata.set(a.appliance_metadata??null),this.tags.set(a.tags||[]),this.cd.markForCheck()},error:a=>{let s=a.error?.message||a.message||"Failed to load IOU template";this.toasterService.error(s),this.cd.markForCheck()}})},i=>{let a=i.error?.message||i.message||"Failed to load controller";this.toasterService.error(a),this.cd.markForCheck()})}getConfiguration(){this.consoleTypes=this.configurationService.getConsoleTypes(),this.categories=this.configurationService.getCategories()}goBack(){ji(this.location,this.router,["/controller",this.controller.id,"preferences"])}onCredentialInput(e,t){let i=t.target.value;this.applianceMetadata.set(nd(this.applianceMetadata(),e,i))}onSave(){let e=this.validationService.validateName(this.templateName());if(!e.isValid){this.toasterService.error(e.errorMessage);return}let t=this.validationService.validatePath(this.path());if(!t.isValid){this.toasterService.error(t.errorMessage);return}let i=this.validationService.validateNetmikoDeviceType(this.netmikoDeviceType());if(!i.isValid){this.toasterService.error(i.errorMessage);return}this.iouTemplate.name=this.templateName(),this.iouTemplate.default_name_format=this.defaultName(),this.iouTemplate.symbol=this.symbol(),this.iouTemplate.path=this.path(),this.iouTemplate.startup_config=this.initialConfig(),this.iouTemplate.private_config=this.privateConfig(),this.iouTemplate.category=this.category(),this.iouTemplate.console_type=this.consoleType(),this.iouTemplate.console_auto_start=this.consoleAutoStart(),this.iouTemplate.l1_keepalives=this.l1Keepalives(),this.iouTemplate.use_default_iou_values=this.useDefaultIouValues(),this.iouTemplate.ram=this.ram(),this.iouTemplate.nvram=this.nvram(),this.iouTemplate.ethernet_adapters=this.ethernetAdapters(),this.iouTemplate.serial_adapters=this.serialAdapters(),this.iouTemplate.usage=this.usage(),this.iouTemplate.netmiko_device_type=this.netmikoDeviceType().trim()||null,this.iouTemplate.appliance_metadata=this.applianceMetadata(),this.iouTemplate.tags=this.tags(),this.iouService.saveTemplate(this.controller,this.iouTemplate).subscribe({next:()=>{this.toasterService.success("Changes saved"),this.goBack()},error:a=>{let s=a.error?.message||a.message||"Failed to save IOU template";this.toasterService.error(s),this.cd.markForCheck()}})}uploadImageFile(e){let t=e.target;t.files&&t.files.length>0&&this.path.set(t.files[0].name)}chooseSymbol(){let e=this.dialogConfig.openConfig("templateSymbol",{autoFocus:!1,disableClose:!1,data:{controller:this.controller,symbol:this.symbol()}});this.dialog.open(rr,e).afterClosed().subscribe(i=>{i&&this.symbol.set(i)})}addTag(e){let t=(e.value||"").trim(),i=this.tags();t&&this.tags.set([...i,t]),e.chipInput&&e.chipInput.clear()}removeTag(e){let t=this.tags(),i=t.indexOf(e);if(i>=0){let a=[...t];a.splice(i,1),this.tags.set(a)}}toggleSection(e){switch(e){case"general":this.generalSettingsExpanded.set(!this.generalSettingsExpanded());break;case"network":this.networkExpanded.set(!this.networkExpanded());break;case"usage":this.usageExpanded.set(!this.usageExpanded());break}}selectSection(e){this.activeSection=e}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-iou-template-details"]],inputs:{templateName:[1,"templateName"],defaultName:[1,"defaultName"],symbol:[1,"symbol"],path:[1,"path"],initialConfig:[1,"initialConfig"],privateConfig:[1,"privateConfig"],category:[1,"category"],consoleType:[1,"consoleType"],consoleAutoStart:[1,"consoleAutoStart"],l1Keepalives:[1,"l1Keepalives"],useDefaultIouValues:[1,"useDefaultIouValues"],ram:[1,"ram"],nvram:[1,"nvram"],ethernetAdapters:[1,"ethernetAdapters"],serialAdapters:[1,"serialAdapters"],usage:[1,"usage"],netmikoDeviceType:[1,"netmikoDeviceType"],tags:[1,"tags"],generalSettingsExpanded:[1,"generalSettingsExpanded"],networkExpanded:[1,"networkExpanded"],usageExpanded:[1,"usageExpanded"]},outputs:{templateName:"templateNameChange",defaultName:"defaultNameChange",symbol:"symbolChange",path:"pathChange",initialConfig:"initialConfigChange",privateConfig:"privateConfigChange",category:"categoryChange",consoleType:"consoleTypeChange",consoleAutoStart:"consoleAutoStartChange",l1Keepalives:"l1KeepalivesChange",useDefaultIouValues:"useDefaultIouValuesChange",ram:"ramChange",nvram:"nvramChange",ethernetAdapters:"ethernetAdaptersChange",serialAdapters:"serialAdaptersChange",usage:"usageChange",netmikoDeviceType:"netmikoDeviceTypeChange",tags:"tagsChange",generalSettingsExpanded:"generalSettingsExpandedChange",networkExpanded:"networkExpandedChange",usageExpanded:"usageExpandedChange"},decls:17,vars:1,consts:[["chipList",""],["file",""],[1,"iou-template-details"],[1,"iou-template-details__header"],[1,"iou-template-details__heading-row"],[1,"iou-template-details__breadcrumb"],["type","button","mat-button","",3,"click"],[1,"iou-template-details__title"],[1,"iou-template-details__header-actions"],["type","button","mat-raised-button","","color","primary",3,"click"],[1,"iou-template-details__content"],["aria-label","Template settings",1,"template-edit-tabs"],["type","button",3,"click"],[1,"iou-template-details__form-card"],[1,"iou-template-details__section-header",3,"click"],[1,"iou-template-details__section-title"],[1,"iou-template-details__expand-icon"],[1,"iou-template-details__form"],[1,"preferences__usage-form"],[1,"iou-template-details__section-header"],[3,"metadata"],[1,"iou-template-details__actions"],["mat-button","",1,"iou-template-details__cancel-btn",3,"click"],["mat-raised-button","","color","primary",1,"iou-template-details__save-btn",3,"click"],[1,"two-column-grid","gns3-form-layout-fixed"],["appearance","outline","subscriptSizing","fixed",1,"iou-template-details__field"],["matInput","","type","text","placeholder","Template name",3,"input","value"],["matInput","","type","text","placeholder","Default name format",3,"input","value"],[1,"iou-template-details__symbol-row"],["appearance","outline","subscriptSizing","dynamic",1,"iou-template-details__field","iou-template-details__field--category"],[3,"selectionChange","value"],[3,"value"],["appearance","outline","subscriptSizing","dynamic",1,"iou-template-details__field","iou-template-details__field--flex"],["matInput","","type","text","placeholder","Symbol",3,"input","value"],["mat-raised-button","","color","primary",1,"iou-template-details__symbol-btn",3,"click"],[1,"gns3-chip-field"],["floatLabel","always","appearance","outline","subscriptSizing","dynamic",1,"iou-template-details__field"],["matInput","","placeholder","Add tags",3,"matChipInputTokenEnd","matChipInputFor","matChipInputSeparatorKeyCodes"],["aria-label","Tags",1,"gns3-chip-field__values"],[3,"editable"],[1,"iou-template-details__file-row"],["type","file","accept",".bin, .image, .iol",1,"iou-template-details__file-input",3,"change"],["mat-raised-button","","color","primary",1,"iou-template-details__browse-btn",3,"click"],["matInput","","type","text","placeholder","IOU image path",3,"input","value"],["appearance","outline","subscriptSizing","dynamic",1,"iou-template-details__field"],["matInput","","type","text","placeholder","Startup config",3,"input","value"],["matInput","","type","text","placeholder","Private config",3,"input","value"],[1,"three-column-grid"],["subscriptSizing","fixed","appearance","outline",1,"iou-template-details__field",3,"valueChange","value","controller"],["matInput","","type","text","placeholder","Username to log into this node",3,"input","value"],["matInput","","type","text","placeholder","Password to log into this node",3,"input","value"],[3,"change","checked"],[3,"removed","editable"],["matChipRemove","","type","button"],["matInput","","type","number","min","1","placeholder","RAM size",3,"input","value"],["matSuffix",""],["matInput","","type","number","min","1","placeholder","NVRAM size",3,"input","value"],["matInput","","type","number","placeholder","Ethernet adapters",3,"input","value"],["matInput","","type","number","placeholder","Serial adapters",3,"input","value"],["appearance","outline","subscriptSizing","dynamic",1,"preferences__usage-field--full"],["matInput","","type","text",3,"input","value"],[3,"metadataChange","metadata"]],template:function(t,i){t&1&&(r(0,"div",2)(1,"header",3)(2,"div",4)(3,"div")(4,"div",5)(5,"button",6),_("click",function(){return i.goBack()}),c(6,"Templates"),l(),r(7,"mat-icon"),c(8,"chevron_right"),l(),r(9,"span"),c(10,"Edit"),l()(),r(11,"h1",7),c(12,"Edit template"),l()(),r(13,"div",8)(14,"button",9),_("click",function(){return i.goBack()}),c(15,"Back to templates"),l()()()(),T(16,Cce,41,15,"main",10),l()),t&2&&(m(16),E(i.iouTemplate?16:-1))},dependencies:[fe,St,Ct,vt,Ji,vn,ie,ce,Y,he,id,we,Pe,Ve,oi,ye,Ee,ot,ct,nt,ri,bi,xi,hi,fi,Rt,Gt,po],styles:["[_nghost-%COMP%]{display:block;width:100%;background:transparent}.iou-template-details__header[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:32px 20px 16px;display:flex;align-items:center;gap:var(--gns3-density-card-gap);animation:none}.iou-template-details__back-btn[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:12px;color:var(--mat-sys-on-surface);transition:all var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1)}.iou-template-details__back-btn[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 8%,transparent)}.iou-template-details__title[_ngcontent-%COMP%]{flex:1;font-size:28px;font-weight:500;color:var(--mat-sys-on-surface);margin:0}.iou-template-details__content[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:0 20px 20px;animation:none}.iou-template-details--hidden[_ngcontent-%COMP%]{opacity:.5;pointer-events:none}.iou-template-details__form-card[_ngcontent-%COMP%]{background:var(--mat-sys-surface);border-radius:16px;overflow:hidden;box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 20%,transparent),0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent);margin-bottom:var(--gns3-density-card-gap)}.iou-template-details__form[_ngcontent-%COMP%]{padding:var(--gns3-density-card-padding);display:flex;flex-direction:column;gap:var(--gns3-density-card-gap)}.iou-template-details__form[_ngcontent-%COMP%] .two-column-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:var(--gns3-density-card-gap)}.iou-template-details__form[_ngcontent-%COMP%] .three-column-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;align-items:start}.iou-template-details__field[_ngcontent-%COMP%]{width:100%}.iou-template-details__field--flex[_ngcontent-%COMP%]{flex:1}.iou-template-details__field--category[_ngcontent-%COMP%]{flex:0 0 150px}.iou-template-details__field--full[_ngcontent-%COMP%]{width:100%}.iou-template-details__section-title[_ngcontent-%COMP%]{margin:0;font-size:16px;font-weight:500;color:var(--mat-sys-on-surface-variant)}.iou-template-details__section-header[_ngcontent-%COMP%]{padding:var(--gns3-density-section-header-padding);display:flex;align-items:center;justify-content:space-between;cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline) 30%,transparent)}.iou-template-details__section-header[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 5%,transparent)}.iou-template-details__expand-icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);transition:transform var(--gns3-motion-duration-standard) ease}.iou-template-details__symbol-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap)}.iou-template-details__symbol-btn[_ngcontent-%COMP%]{align-self:stretch}.iou-template-details__file-row[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:var(--gns3-density-card-gap)}.iou-template-details__file-input[_ngcontent-%COMP%]{display:none}.iou-template-details__browse-btn[_ngcontent-%COMP%]{align-self:stretch;white-space:nowrap}.iou-template-details__actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:var(--gns3-density-space-3);margin-top:24px}.iou-template-details__cancel-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none}.iou-template-details__save-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none;letter-spacing:.5px}@media(max-width:768px){.iou-template-details__header[_ngcontent-%COMP%]{padding:24px 16px 12px;gap:12px}.iou-template-details__back-btn[_ngcontent-%COMP%]{width:44px;height:44px}.iou-template-details__title[_ngcontent-%COMP%]{font-size:22px}.iou-template-details__content[_ngcontent-%COMP%]{padding:0 16px 16px}.iou-template-details__form[_ngcontent-%COMP%]{padding:16px}.iou-template-details__section-header[_ngcontent-%COMP%]{padding:12px 16px}.iou-template-details__symbol-row[_ngcontent-%COMP%], .iou-template-details__file-row[_ngcontent-%COMP%], .iou-template-details__actions[_ngcontent-%COMP%]{flex-direction:column}.iou-template-details__cancel-btn[_ngcontent-%COMP%], .iou-template-details__save-btn[_ngcontent-%COMP%]{width:100%;height:44px}}",'[_nghost-%COMP%]{display:block;width:100%;background:transparent}.templates-page__content[_ngcontent-%COMP%]{animation:none}.templates-page__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:20px;max-width:1600px;margin:0 auto;padding:24px 20px 16px}.templates-page__heading[_ngcontent-%COMP%], .templates-page__header-actions[_ngcontent-%COMP%]{display:flex;align-items:center}.templates-page__heading[_ngcontent-%COMP%]{min-width:0;gap:var(--gns3-density-space-3)}.templates-page__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.templates-page__header-actions[_ngcontent-%COMP%]{gap:var(--gns3-density-space-3)}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);border-radius:12px;padding-inline:18px;font-size:15px;font-weight:500;letter-spacing:.3px;text-transform:none}[class*=-templates__header][_ngcontent-%COMP%]{box-sizing:border-box;width:100%;height:calc(var(--gns3-density-space-4) * 2 + (var(--gns3-density-section-title-size) + 2px) * 1.2 + 1px);max-width:none;margin:0;padding:0 var(--gns3-density-page-padding);gap:var(--gns3-density-space-3);color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container);border-bottom:1px solid var(--mat-sys-outline-variant)}[class*=-templates__back-btn][_ngcontent-%COMP%], [class*=-templates__add-btn][_ngcontent-%COMP%]{flex:0 0 auto;width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:12px}[class*=-templates__back-btn][_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container)}[class*=-templates__add-btn][_ngcontent-%COMP%]{color:var(--mat-sys-primary)}[class*=-templates__title][_ngcontent-%COMP%]{flex:1;min-width:0;margin:0;padding-bottom:0;color:var(--mat-sys-on-primary-container);font-size:calc(var(--gns3-density-section-title-size) + 2px);font-weight:650;line-height:1.2;letter-spacing:-.01em}.templates-page__scopes[_ngcontent-%COMP%]{display:flex;gap:4px;max-width:1560px;margin:0 auto 16px;padding:0 20px;border-bottom:1px solid var(--mat-sys-outline-variant)}.templates-page__scope[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center;gap:8px;min-height:48px;padding:0 16px;border:0;color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;font-size:14px;font-weight:550;cursor:pointer}.templates-page__scope[_ngcontent-%COMP%]:after{position:absolute;right:8px;bottom:-1px;left:8px;height:2px;border-radius:2px 2px 0 0;background:transparent;content:""}.templates-page__scope[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}.templates-page__scope[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{min-width:22px;padding:2px 6px;border-radius:12px;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-high);font-size:11px;text-align:center}.templates-page__scope--active[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%]:after{background:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap);max-width:1600px;margin:0 auto;padding:0 20px 8px}.templates-page__search[_ngcontent-%COMP%]{flex:1;min-width:240px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:flex;align-items:center;flex:0 0 auto;gap:var(--gns3-density-space-3)}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{width:155px}.templates-page__view-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px;padding:4px 2px;border-radius:8px;background:var(--mat-sys-surface-container-high)}button.templates-page__view-button[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:8px;color:var(--mat-sys-on-surface-variant);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);--mat-icon-button-icon-size: 22px}button.templates-page__view-button--active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__main[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:20px;max-width:1600px;margin:0 auto;padding:0 20px 20px}.templates-page__loading[_ngcontent-%COMP%]{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;min-height:320px;gap:var(--gns3-density-card-gap);color:var(--mat-sys-on-surface-variant)}.templates-page__table-container[_ngcontent-%COMP%]{flex:1;min-width:0;border-radius:16px;background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;overflow-x:auto}mat-table[_ngcontent-%COMP%]{width:100%;min-width:850px}.mat-mdc-row[_ngcontent-%COMP%], .mat-row[_ngcontent-%COMP%]{height:var(--mat-table-row-item-container-height);min-height:var(--mat-table-row-item-container-height)}.mat-header-row[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%]{position:sticky;top:0;z-index:10;background:var(--mat-sys-surface-container-highest);box-shadow:inset 0 -2px var(--mat-sys-primary);--mat-sort-arrow-color: var(--mat-sys-primary)}.mat-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:13px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}mat-row[_ngcontent-%COMP%]{cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease}mat-row[_ngcontent-%COMP%]:nth-child(2n){background:color-mix(in srgb,var(--mat-sys-on-surface) 1%,transparent)}mat-row[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}mat-row.templates-page__row--selected[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}mat-cell[_ngcontent-%COMP%], mat-header-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:inherit;color:var(--mat-sys-on-surface)}.mat-column-name[_ngcontent-%COMP%]{flex:2.4;min-width:240px;justify-content:flex-start}.mat-column-template_type[_ngcontent-%COMP%]{flex:1.1;min-width:130px}.mat-column-category[_ngcontent-%COMP%]{flex:1;min-width:110px}.mat-column-compute_id[_ngcontent-%COMP%]{flex:1;min-width:105px}.mat-column-builtin[_ngcontent-%COMP%]{flex:0 0 90px;min-width:90px;justify-content:center}.mat-column-actions[_ngcontent-%COMP%]{flex:0 0 180px;min-width:180px;box-sizing:border-box;justify-content:flex-start;padding-right:24px}.templates-page__name-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-width:0;gap:var(--gns3-density-space-3)}.templates-page__name-copy[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:14px;font-weight:600}.templates-page__symbol[_ngcontent-%COMP%]{display:grid;flex:0 0 52px;width:52px;height:52px;overflow:hidden;place-items:center;border-radius:14px;color:var(--mat-sys-on-primary-container);background:color-mix(in srgb,var(--mat-sys-primary-container) 82%,var(--mat-sys-surface))}.templates-page__symbol[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:78%;height:78%;object-fit:contain;filter:drop-shadow(0 2px 4px color-mix(in srgb,var(--mat-sys-shadow) 25%,transparent))}.templates-page__symbol[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:27px;height:27px;font-size:27px}.templates-page__symbol--small[_ngcontent-%COMP%]{flex-basis:38px;width:38px;height:38px;border-radius:10px}.templates-page__symbol--small[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:21px;height:21px;font-size:21px}.templates-page__type-badge[_ngcontent-%COMP%], .templates-page__source-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;width:fit-content;padding:4px 9px;border-radius:16px;font-size:12px;font-weight:600;white-space:nowrap}.templates-page__type-badge[_ngcontent-%COMP%]{color:var(--mat-sys-secondary);background:color-mix(in srgb,var(--mat-sys-secondary) 11%,transparent)}.templates-page__type-badge--qemu[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__type-badge--docker[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container)}.templates-page__type-badge--dynamips[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary-container);background:var(--mat-sys-tertiary-container)}.templates-page__type-badge--cloud[_ngcontent-%COMP%]{color:var(--mat-sys-on-error-container);background:var(--mat-sys-error-container)}.templates-page__type-badge--vpcs[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary);background:var(--mat-sys-primary)}.templates-page__type-badge--ethernet-hub[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary);background:var(--mat-sys-secondary)}.templates-page__type-badge--ethernet-switch[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary);background:var(--mat-sys-tertiary)}.templates-page__type-badge--iou[_ngcontent-%COMP%]{color:var(--mat-sys-on-error);background:var(--mat-sys-error)}.templates-page__type-badge--nat[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-highest)}.templates-page__source-badge[_ngcontent-%COMP%]{color:var(--mat-sys-primary);background:color-mix(in srgb,var(--mat-sys-primary) 11%,transparent)}.templates-page__source-badge--builtin[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary);background:color-mix(in srgb,var(--mat-sys-tertiary) 11%,transparent)}.templates-page__table-footer[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:var(--mat-table-footer-container-height);padding:0 12px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container))}.templates-page__table-footer[_ngcontent-%COMP%] mat-paginator[_ngcontent-%COMP%]{width:100%;--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__actions-cell[_ngcontent-%COMP%], .templates-page__card-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:3px}button.templates-page__action[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-on-surface-variant);width:var(--gns3-density-control-height-sm);height:var(--gns3-density-control-height-sm);--mat-icon-button-state-layer-size: var(--gns3-density-control-height-sm);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-control-height-sm)}button.templates-page__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}button.templates-page__action[_ngcontent-%COMP%]{color:var(--template-action-color);--mat-icon-button-state-layer-color: var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:not(:disabled) mat-icon[_ngcontent-%COMP%]{color:var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:disabled mat-icon[_ngcontent-%COMP%]{color:var(--gns3-button-disabled-label-color)}button.templates-page__action--details[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--edit[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-primary)}button.templates-page__action--duplicate[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--delete[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-error)}.templates-page__grid[_ngcontent-%COMP%]{flex:1;min-width:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-content:start;gap:var(--gns3-density-card-gap)}.templates-page__grid--with-details[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__card[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column;padding:16px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;background:var(--mat-sys-surface);cursor:pointer;transition:transform var(--gns3-motion-duration-standard) ease,box-shadow var(--gns3-motion-duration-standard) ease,border-color var(--gns3-motion-duration-standard) ease}.templates-page__card[_ngcontent-%COMP%]:hover{border-color:var(--mat-sys-outline-variant);background:var(--mat-sys-surface-container-low)}.templates-page__card--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);box-shadow:0 0 0 1px var(--mat-sys-primary)}.templates-page__card-header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--gns3-density-space-3)}.templates-page__card-body[_ngcontent-%COMP%]{flex:1;min-width:0;padding:14px 0 12px}.templates-page__card-body[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{display:-webkit-box;overflow:hidden;margin:0 0 9px;color:var(--mat-sys-on-surface);font-size:17px;font-weight:650;line-height:1.35;overflow-wrap:anywhere;-webkit-box-orient:vertical;-webkit-line-clamp:2}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%]{display:grid;gap:8px;margin:16px 0 0}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{min-width:0;margin:0;overflow:hidden;color:var(--mat-sys-on-surface);font-size:13px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] .templates-page__card-tags-row[_ngcontent-%COMP%]{align-items:flex-start}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd.templates-page__card-tags[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px;overflow:visible;white-space:normal}.templates-page__card-actions[_ngcontent-%COMP%]{justify-content:flex-end;min-height:33px;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__grid-paginator[_ngcontent-%COMP%]{grid-column:1/-1;width:100%;border-radius:12px;background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container));--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__empty[_ngcontent-%COMP%]{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:230px;padding:32px;color:var(--mat-sys-on-surface-variant);text-align:center}.templates-page__empty[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{width:48px;height:48px;font-size:48px;opacity:.55}.templates-page__empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:12px 0 0;color:var(--mat-sys-on-surface);font-size:17px}.templates-page__empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:5px 0 0;font-size:14px}.templates-page__details[_ngcontent-%COMP%]{position:sticky;top:16px;flex:0 0 clamp(390px,31vw,480px);display:flex;min-height:380px;max-height:calc(100vh - 176px);flex-direction:column;overflow:hidden;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 60%,transparent);border-radius:16px;background:var(--mat-sys-surface);box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent);animation:_ngcontent-%COMP%_templates-slide-in var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard)}.templates-page__details-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:var(--gns3-density-space-3);min-height:56px;box-sizing:border-box;padding:8px 10px 8px 16px;border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 72%,var(--mat-sys-surface))}.templates-page__details-header[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-primary-container)}.templates-page__details-heading[_ngcontent-%COMP%]{display:flex;min-width:0;align-items:center;gap:var(--gns3-density-space-3)}.templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;margin:0;color:var(--mat-sys-on-primary-container);font-size:19px;font-weight:650;line-height:1.25;text-overflow:ellipsis;white-space:nowrap}.templates-page__details-title-line[_ngcontent-%COMP%]{display:flex;flex:1;min-width:0;align-items:center;gap:var(--gns3-density-space-2)}.templates-page__details-title-line[_ngcontent-%COMP%] .templates-page__type-badge[_ngcontent-%COMP%]{flex:0 0 auto}.templates-page__details-body[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:12px 20px}.templates-page__description[_ngcontent-%COMP%]{padding:10px 0 14px;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__description[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.6px;text-transform:uppercase}.templates-page__description[_ngcontent-%COMP%] app-markdown-viewer[_ngcontent-%COMP%]{display:block;margin-top:8px;padding:2px 12px;border-radius:10px;background:var(--mat-sys-surface-container-low);overflow-wrap:anywhere;--markdown-viewer-font-size: 13px;--markdown-viewer-line-height: 1.5;--markdown-viewer-heading-scale: .85}.templates-page__detail-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:22px 105px minmax(0,1fr);align-items:center;gap:var(--gns3-density-space-3);min-height:40px;box-sizing:border-box;padding:8px 0;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__detail-row[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:19px;height:19px;color:var(--mat-sys-primary);font-size:19px}.templates-page__detail-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:12px;font-weight:650;letter-spacing:.5px;text-transform:uppercase;white-space:nowrap}.templates-page__detail-row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{min-width:0;color:var(--mat-sys-on-surface);font-size:14px;font-weight:500;line-height:1.45;text-align:right;overflow-wrap:anywhere}.templates-page__detail-row--stacked[_ngcontent-%COMP%]{align-items:start}.templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__mono[_ngcontent-%COMP%], .templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__path[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-family:var(--gns3-font-code);font-size:12px;word-break:break-all}.templates-page__tags[_ngcontent-%COMP%]{border-bottom:0}.templates-page__tags[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:7px}.templates-page__tag[_ngcontent-%COMP%]{padding:5px 9px;border-radius:14px;color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container);font-size:11px;font-weight:550}.templates-page__details-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(105px,1fr));gap:var(--gns3-density-space-2);padding:14px 16px 18px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-surface-container) 72%,transparent)}button.templates-page__details-action[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-on-surface-variant);height:40px;border-radius:12px;color:var(--details-action-color);border-color:color-mix(in srgb,var(--details-action-color) 48%,transparent);font-size:13px;font-weight:500}button.templates-page__details-action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--details-action-color)}button.templates-page__details-action--edit[_ngcontent-%COMP%], button.templates-page__details-action--duplicate[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-primary)}button.templates-page__details-action--delete[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-error)}[data-density=compact][_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%]{min-height:40px;height:40px}[data-density=compact][_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%]{width:40px;height:40px;--mat-icon-button-state-layer-size: 40px}[data-density=compact][_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%]{min-height:48px;padding-block:4px}[data-density=compact][_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:18px}[data-density=compact][_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%]{padding-block:8px}[data-density=compact][_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%]{min-height:36px;padding-block:6px}[data-density=compact][_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%]{padding:12px}@keyframes _ngcontent-%COMP%_templates-slide-in{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@media(max-width:1400px){.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__main[_ngcontent-%COMP%]{flex-direction:column}.templates-page__table-container[_ngcontent-%COMP%], .templates-page__grid[_ngcontent-%COMP%], .templates-page__details[_ngcontent-%COMP%]{width:100%}.templates-page__details[_ngcontent-%COMP%]{position:static;flex-basis:auto;max-height:none}}@media(max-width:900px){.templates-page__header[_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column}.templates-page__header-actions[_ngcontent-%COMP%]{width:100%}.templates-page__toolbar[_ngcontent-%COMP%]{align-items:stretch;flex-direction:column}.templates-page__toolbar-actions[_ngcontent-%COMP%]{width:100%}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{flex:1;width:auto}}@media(max-width:640px){.templates-page__header[_ngcontent-%COMP%]{padding:20px 16px 12px}.templates-page__header-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{width:100%;padding-inline:10px}.templates-page__scopes[_ngcontent-%COMP%]{overflow-x:auto;padding-inline:16px}.templates-page__scope[_ngcontent-%COMP%]{flex:0 0 auto;padding-inline:12px}.templates-page__toolbar[_ngcontent-%COMP%], .templates-page__main[_ngcontent-%COMP%]{padding-inline:16px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__view-toggle[_ngcontent-%COMP%]{grid-column:1/-1;justify-self:end}.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.templates-page__details[_ngcontent-%COMP%]{min-width:0}}',"[_nghost-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%] mat-form-field[_ngcontent-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%]{display:block;width:100%;background:transparent}.template-edit-legacy-label[_ngcontent-%COMP%], .template-edit-legacy-control[_ngcontent-%COMP%]{display:none}[class$=__header][_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-4);max-width:1440px;margin:0 auto;padding:var(--gns3-density-space-5) var(--gns3-density-space-5) 14px}[class$=__breadcrumb][_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;margin-bottom:8px;color:var(--mat-sys-primary);font-size:14px;font-weight:600}[class$=__breadcrumb][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{min-height:28px;padding:0 4px;color:inherit;font:inherit}[class$=__breadcrumb][_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:18px;height:18px;font-size:18px;color:var(--mat-sys-on-surface-variant)}[class$=__heading-row][_ngcontent-%COMP%]{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--gns3-density-space-5);width:100%}[class$=__title][_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal;flex:1;min-width:0}[class$=__header-actions][_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-3);flex-shrink:0}[class$=__header-actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{min-height:var(--gns3-density-control-height);border-radius:var(--gns3-density-radius-md);padding:0 var(--gns3-density-space-4)}[class$=__back-btn][_ngcontent-%COMP%]{flex:0 0 auto;width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-icon-button)}[class$=__back-btn][_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}[class$=__back-btn][_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant)}[class$=__content][_ngcontent-%COMP%]{display:grid;grid-template-columns:220px minmax(0,1fr);align-items:start;column-gap:var(--gns3-density-card-gap);row-gap:var(--gns3-density-space-3);max-width:1440px;margin:0 auto;padding:0 var(--gns3-density-space-5) 32px}.template-edit-tabs[_ngcontent-%COMP%]{position:sticky;top:var(--gns3-density-app-header-height);display:flex;grid-column:1;grid-row:1/span 2;align-self:start;flex-direction:column;gap:var(--gns3-density-space-2);padding:var(--gns3-density-space-3);border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:var(--gns3-density-radius-xl);background:color-mix(in srgb,var(--mat-sys-primary-container) 18%,var(--mat-sys-surface))}.template-edit-tabs[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:flex-start;min-height:var(--gns3-density-control-height);border:0;border-radius:var(--gns3-density-radius-sm);padding:0 var(--gns3-density-space-3);color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;font-weight:600;text-align:left;cursor:pointer}.template-edit-tabs[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}.template-edit-tabs[_ngcontent-%COMP%] button.is-active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}[class$=__content][_ngcontent-%COMP%] > [class*=__form-card][_ngcontent-%COMP%]{grid-column:2;grid-row:1}[class$=__content][_ngcontent-%COMP%] > [class*=__form-card][_ngcontent-%COMP%]:not(:has(>:nth-child(2))){display:none}.vpcs-template-details__form-card[_ngcontent-%COMP%]:not(.template-edit-panel-active){display:none}[class*=__form-card][_ngcontent-%COMP%]{margin:0 0 18px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;overflow:hidden;border-radius:var(--gns3-density-radius-lg);background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none}[class$=__section-header][_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;min-height:var(--gns3-density-section-header-height);box-sizing:border-box;padding:var(--gns3-density-section-header-padding);border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 28%,var(--mat-sys-surface));cursor:default}[class$=__expand-icon][_ngcontent-%COMP%]{display:none}[class$=__section-title][_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-section-title-size);font-weight:650}[class$=__form][_ngcontent-%COMP%], .form-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-card-gap);padding:var(--gns3-density-card-padding)}.qemu-template-details__form[_ngcontent-%COMP%]{padding-inline:var(--gns3-density-card-padding)}.qemu-template-details__subsection[_ngcontent-%COMP%]{width:100%;box-sizing:border-box}.two-column-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--gns3-density-card-gap)}[class$=__field][_ngcontent-%COMP%], .form-field[_ngcontent-%COMP%]{width:100%}[class$=__actions][_ngcontent-%COMP%]{display:flex;width:100%;box-sizing:border-box;justify-content:flex-end;gap:var(--gns3-density-space-3);margin-top:0;padding:4px 0 8px}[class$=__content][_ngcontent-%COMP%] > [class$=__actions][_ngcontent-%COMP%]{grid-column:2;justify-content:flex-end}[class*=__save-btn][_ngcontent-%COMP%], [class*=__cancel-btn][_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing)}button[class*=__save-btn].mat-mdc-raised-button[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-primary);background-color:var(--mat-sys-primary);--mat-button-protected-label-text-color: var(--mat-sys-on-primary);--mat-button-protected-container-color: var(--mat-sys-primary);--mat-button-protected-state-layer-color: var(--mat-sys-on-primary)}button[class*=__cancel-btn].mat-mdc-button[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-surface);border-color:var(--mat-sys-outline);--mat-button-outlined-label-text-color: var(--mat-sys-on-surface);--mat-button-outlined-state-layer-color: var(--mat-sys-on-surface)}button[class*=__cancel-btn].mat-mdc-button[_ngcontent-%COMP%]{border:1px solid var(--mat-sys-outline)}button[class*=__config-btn][_ngcontent-%COMP%], button.docker-details__extra-config-btn[_ngcontent-%COMP%], .udp-tunnels__add-btn[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing);width:fit-content;max-width:100%;align-self:center;border-radius:var(--mat-sys-corner-full, 999px)}.preferences__usage-form[_ngcontent-%COMP%]{width:100%;box-sizing:border-box;padding:var(--gns3-density-card-padding)}.preferences__usage-field--full[_ngcontent-%COMP%]{display:block;width:100%}.preferences__usage-field--full[_ngcontent-%COMP%] textarea.mat-mdc-input-element[_ngcontent-%COMP%]{width:100%;min-height:140px;box-sizing:border-box;resize:vertical}[class$=__form][_ngcontent-%COMP%] [class*=__file-row][_ngcontent-%COMP%]{padding:0}[class*=__file-row][_ngcontent-%COMP%]{align-items:flex-start}[class$=__symbol-row][_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:var(--gns3-density-card-gap)}[class$=__symbol-row][_ngcontent-%COMP%] [class*=__symbol-btn][_ngcontent-%COMP%], [class$=__symbol-row][_ngcontent-%COMP%] [class*=__action-btn][_ngcontent-%COMP%], [class*=__file-row][_ngcontent-%COMP%] > button[class*=__browse-btn][_ngcontent-%COMP%], .docker-details__image-row[_ngcontent-%COMP%] > button.docker-details__pull-btn[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing);border-radius:var(--mat-sys-corner-full, 999px);width:fit-content;max-width:100%;flex:0 0 auto;align-self:flex-start;margin-top:var(--template-field-action-offset, calc((var(--gns3-density-form-field-height) - var(--gns3-density-control-height)) / 2))}[data-density=compact][_nghost-%COMP%] [class$=__heading-row][_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] [class$=__heading-row][_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column;gap:var(--gns3-density-space-3)}[data-density=compact][_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%]{width:100%}[data-density=compact][_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex:1}@media(max-width:768px){[class$=__symbol-row][_ngcontent-%COMP%], [class*=__file-row][_ngcontent-%COMP%], .docker-details__image-row[_ngcontent-%COMP%]{--template-field-action-offset: 0px}}@media(max-width:760px){[class$=__header][_ngcontent-%COMP%]{padding-inline:16px}[class$=__content][_ngcontent-%COMP%]{padding-inline:16px;grid-template-columns:1fr}.template-edit-tabs[_ngcontent-%COMP%]{position:static;grid-column:1;grid-row:auto;flex-direction:row;overflow-x:auto}.template-edit-tabs[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex:0 0 auto}[class$=__content][_ngcontent-%COMP%] > [class*=__form-card][_ngcontent-%COMP%]{grid-column:1;grid-row:auto}.two-column-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}[class$=__symbol-row][_ngcontent-%COMP%]{flex-direction:column}[class$=__actions][_ngcontent-%COMP%]{flex-direction:row;align-items:center;justify-content:flex-end}[class$=__actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:auto}[class$=__content][_ngcontent-%COMP%] > [class$=__actions][_ngcontent-%COMP%]{grid-column:1}.preferences__usage-form[_ngcontent-%COMP%]{padding:16px}[class*=__save-btn][_ngcontent-%COMP%], [class*=__cancel-btn][_ngcontent-%COMP%]{width:auto}}"],changeDetection:0})}return n})();function bce(n,o){if(n&1&&(r(0,"mat-option",17),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function xce(n,o){if(n&1){let e=R();r(0,"mat-form-field",14)(1,"mat-select",16,0),_("selectionChange",function(i){y(e);let a=h(2);return w(a._changePageSize(i.value))}),Q(3,bce,2,2,"mat-option",17,Oe),l(),r(5,"div",18),_("click",function(){y(e);let i=Te(2);return w(i.open())}),l()()}if(n&2){let e=h(2);v("appearance",e._formFieldAppearance)("color",e.color),m(),v("value",e.pageSize)("disabled",e.disabled),Hs("aria-labelledby",e._pageSizeLabelId),v("panelClass",e.selectConfig.panelClass||"")("disableOptionCentering",e.selectConfig.disableOptionCentering),m(2),K(e._displayedPageSizeOptions)}}function yce(n,o){if(n&1&&(r(0,"div",15),c(1),l()),n&2){let e=h(2);m(),N(e.pageSize)}}function wce(n,o){if(n&1&&(r(0,"div",3)(1,"div",13),c(2),l(),T(3,xce,6,7,"mat-form-field",14),T(4,yce,2,1,"div",15),l()),n&2){let e=h();m(),Ce("id",e._pageSizeLabelId),m(),X(" ",e._intl.itemsPerPageLabel," "),m(),E(e._displayedPageSizeOptions.length>1?3:-1),m(),E(e._displayedPageSizeOptions.length<=1?4:-1)}}function Mce(n,o){if(n&1){let e=R();r(0,"button",19),_("click",function(){y(e);let i=h();return w(i._buttonClicked(0,i._previousButtonsDisabled()))}),Mi(),r(1,"svg",8),L(2,"path",20),l()()}if(n&2){let e=h();v("matTooltip",e._intl.firstPageLabel)("matTooltipDisabled",e._previousButtonsDisabled())("disabled",e._previousButtonsDisabled())("tabindex",e._previousButtonsDisabled()?-1:null),Ce("aria-label",e._intl.firstPageLabel)}}function Sce(n,o){if(n&1){let e=R();r(0,"button",21),_("click",function(){y(e);let i=h();return w(i._buttonClicked(i.getNumberOfPages()-1,i._nextButtonsDisabled()))}),Mi(),r(1,"svg",8),L(2,"path",22),l()()}if(n&2){let e=h();v("matTooltip",e._intl.lastPageLabel)("matTooltipDisabled",e._nextButtonsDisabled())("disabled",e._nextButtonsDisabled())("tabindex",e._nextButtonsDisabled()?-1:null),Ce("aria-label",e._intl.lastPageLabel)}}var kce=(()=>{class n{changes=new Ye;itemsPerPageLabel="Items per page:";nextPageLabel="Next page";previousPageLabel="Previous page";firstPageLabel="First page";lastPageLabel="Last page";getRangeLabel=(e,t,i)=>{if(i==0||t==0)return`0 of ${i}`;i=Math.max(i,0);let a=e*t,s=a<i?Math.min(a+t,i):a+t;return`${a+1} \u2013 ${s} of ${i}`};static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})(),Pce=50;var Tce=new mn("MAT_PAGINATOR_DEFAULT_OPTIONS"),ea=(()=>{class n{_intl=f(kce);_changeDetectorRef=f(oe);_formFieldAppearance;_pageSizeLabelId=f(ua).getId("mat-paginator-page-size-label-");_intlChanges;_isInitialized=!1;_initializedStream=new Ju(1);color;get pageIndex(){return this._pageIndex}set pageIndex(e){this._pageIndex=Math.max(e||0,0),this._changeDetectorRef.markForCheck()}_pageIndex=0;get length(){return this._length}set length(e){this._length=e||0,this._changeDetectorRef.markForCheck()}_length=0;get pageSize(){return this._pageSize}set pageSize(e){this._pageSize=Math.max(e||0,0),this._updateDisplayedPageSizeOptions()}_pageSize;get pageSizeOptions(){return this._pageSizeOptions}set pageSizeOptions(e){this._pageSizeOptions=(e||[]).map(t=>qo(t,0)),this._updateDisplayedPageSizeOptions()}_pageSizeOptions=[];hidePageSize=!1;showFirstLastButtons=!1;selectConfig={};disabled=!1;page=new be;_displayedPageSizeOptions;initialized=this._initializedStream;constructor(){let e=this._intl,t=f(Tce,{optional:!0});if(this._intlChanges=e.changes.subscribe(()=>this._changeDetectorRef.markForCheck()),t){let{pageSize:i,pageSizeOptions:a,hidePageSize:s,showFirstLastButtons:d}=t;i!=null&&(this._pageSize=i),a!=null&&(this._pageSizeOptions=a),s!=null&&(this.hidePageSize=s),d!=null&&(this.showFirstLastButtons=d)}this._formFieldAppearance=t?.formFieldAppearance||"outline"}ngOnInit(){this._isInitialized=!0,this._updateDisplayedPageSizeOptions(),this._initializedStream.next()}ngOnDestroy(){this._initializedStream.complete(),this._intlChanges.unsubscribe()}nextPage(){this.hasNextPage()&&this._navigate(this.pageIndex+1)}previousPage(){this.hasPreviousPage()&&this._navigate(this.pageIndex-1)}firstPage(){this.hasPreviousPage()&&this._navigate(0)}lastPage(){this.hasNextPage()&&this._navigate(this.getNumberOfPages()-1)}hasPreviousPage(){return this.pageIndex>=1&&this.pageSize!=0}hasNextPage(){let e=this.getNumberOfPages()-1;return this.pageIndex<e&&this.pageSize!=0}getNumberOfPages(){return this.pageSize?Math.ceil(this.length/this.pageSize):0}_changePageSize(e){let t=this.pageIndex*this.pageSize,i=this.pageIndex;this.pageIndex=Math.floor(t/e)||0,this.pageSize=e,this._emitPageEvent(i)}_nextButtonsDisabled(){return this.disabled||!this.hasNextPage()}_previousButtonsDisabled(){return this.disabled||!this.hasPreviousPage()}_updateDisplayedPageSizeOptions(){this._isInitialized&&(this.pageSize||(this._pageSize=this.pageSizeOptions.length!=0?this.pageSizeOptions[0]:Pce),this._displayedPageSizeOptions=this.pageSizeOptions.slice(),this._displayedPageSizeOptions.indexOf(this.pageSize)===-1&&this._displayedPageSizeOptions.push(this.pageSize),this._displayedPageSizeOptions.sort((e,t)=>e-t),this._changeDetectorRef.markForCheck())}_emitPageEvent(e){this.page.emit({previousPageIndex:e,pageIndex:this.pageIndex,pageSize:this.pageSize,length:this.length})}_navigate(e){let t=this.pageIndex;e!==t&&(this.pageIndex=e,this._emitPageEvent(t))}_buttonClicked(e,t){t||this._navigate(e)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["mat-paginator"]],hostAttrs:["role","group",1,"mat-mdc-paginator"],inputs:{color:"color",pageIndex:[2,"pageIndex","pageIndex",qo],length:[2,"length","length",qo],pageSize:[2,"pageSize","pageSize",qo],pageSizeOptions:"pageSizeOptions",hidePageSize:[2,"hidePageSize","hidePageSize",zt],showFirstLastButtons:[2,"showFirstLastButtons","showFirstLastButtons",zt],selectConfig:"selectConfig",disabled:[2,"disabled","disabled",zt]},outputs:{page:"page"},exportAs:["matPaginator"],decls:14,vars:14,consts:[["selectRef",""],[1,"mat-mdc-paginator-outer-container"],[1,"mat-mdc-paginator-container"],[1,"mat-mdc-paginator-page-size"],[1,"mat-mdc-paginator-range-actions"],["aria-atomic","true","aria-live","polite","role","status",1,"mat-mdc-paginator-range-label"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-first",3,"matTooltip","matTooltipDisabled","disabled","tabindex"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-previous",3,"click","matTooltip","matTooltipDisabled","disabled","tabindex"],["viewBox","0 0 24 24","focusable","false","aria-hidden","true",1,"mat-mdc-paginator-icon"],["d","M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-next",3,"click","matTooltip","matTooltipDisabled","disabled","tabindex"],["d","M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-last",3,"matTooltip","matTooltipDisabled","disabled","tabindex"],["aria-hidden","true",1,"mat-mdc-paginator-page-size-label"],[1,"mat-mdc-paginator-page-size-select",3,"appearance","color"],[1,"mat-mdc-paginator-page-size-value"],["hideSingleSelectionIndicator","",3,"selectionChange","value","disabled","aria-labelledby","panelClass","disableOptionCentering"],[3,"value"],[1,"mat-mdc-paginator-touch-target",3,"click"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-first",3,"click","matTooltip","matTooltipDisabled","disabled","tabindex"],["d","M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-last",3,"click","matTooltip","matTooltipDisabled","disabled","tabindex"],["d","M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z"]],template:function(t,i){t&1&&(r(0,"div",1)(1,"div",2),T(2,wce,5,4,"div",3),r(3,"div",4)(4,"div",5),c(5),l(),T(6,Mce,3,5,"button",6),r(7,"button",7),_("click",function(){return i._buttonClicked(i.pageIndex-1,i._previousButtonsDisabled())}),Mi(),r(8,"svg",8),L(9,"path",9),l()(),Xa(),r(10,"button",10),_("click",function(){return i._buttonClicked(i.pageIndex+1,i._nextButtonsDisabled())}),Mi(),r(11,"svg",8),L(12,"path",11),l()(),T(13,Sce,3,5,"button",12),l()()()),t&2&&(m(2),E(i.hidePageSize?-1:2),m(3),X(" ",i._intl.getRangeLabel(i.pageIndex,i.pageSize,i.length)," "),m(),E(i.showFirstLastButtons?6:-1),m(),v("matTooltip",i._intl.previousPageLabel)("matTooltipDisabled",i._previousButtonsDisabled())("disabled",i._previousButtonsDisabled())("tabindex",i._previousButtonsDisabled()?-1:null),Ce("aria-label",i._intl.previousPageLabel),m(3),v("matTooltip",i._intl.nextPageLabel)("matTooltipDisabled",i._nextButtonsDisabled())("disabled",i._nextButtonsDisabled())("tabindex",i._nextButtonsDisabled()?-1:null),Ce("aria-label",i._intl.nextPageLabel),m(3),E(i.showFirstLastButtons?13:-1))},dependencies:[Pe,ct,nt,Be,pt],styles:[`.mat-mdc-paginator {
|
||
display: block;
|
||
-moz-osx-font-smoothing: grayscale;
|
||
-webkit-font-smoothing: antialiased;
|
||
color: var(--mat-paginator-container-text-color, var(--mat-sys-on-surface));
|
||
background-color: var(--mat-paginator-container-background-color, var(--mat-sys-surface));
|
||
font-family: var(--mat-paginator-container-text-font, var(--mat-sys-body-small-font));
|
||
line-height: var(--mat-paginator-container-text-line-height, var(--mat-sys-body-small-line-height));
|
||
font-size: var(--mat-paginator-container-text-size, var(--mat-sys-body-small-size));
|
||
font-weight: var(--mat-paginator-container-text-weight, var(--mat-sys-body-small-weight));
|
||
letter-spacing: var(--mat-paginator-container-text-tracking, var(--mat-sys-body-small-tracking));
|
||
--mat-form-field-container-height: var(--mat-paginator-form-field-container-height, 40px);
|
||
--mat-form-field-container-vertical-padding: var(--mat-paginator-form-field-container-vertical-padding, 8px);
|
||
}
|
||
.mat-mdc-paginator .mat-mdc-select-value {
|
||
font-size: var(--mat-paginator-select-trigger-text-size, var(--mat-sys-body-small-size));
|
||
}
|
||
.mat-mdc-paginator .mat-mdc-form-field-subscript-wrapper {
|
||
display: none;
|
||
}
|
||
.mat-mdc-paginator .mat-mdc-select {
|
||
line-height: 1.5;
|
||
}
|
||
|
||
.mat-mdc-paginator-outer-container {
|
||
display: flex;
|
||
}
|
||
|
||
.mat-mdc-paginator-container {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: flex-end;
|
||
padding: 0 8px;
|
||
flex-wrap: wrap;
|
||
width: 100%;
|
||
min-height: var(--mat-paginator-container-size, 56px);
|
||
}
|
||
|
||
.mat-mdc-paginator-page-size {
|
||
display: flex;
|
||
align-items: baseline;
|
||
margin-right: 8px;
|
||
}
|
||
[dir=rtl] .mat-mdc-paginator-page-size {
|
||
margin-right: 0;
|
||
margin-left: 8px;
|
||
}
|
||
|
||
.mat-mdc-paginator-page-size-label {
|
||
margin: 0 4px;
|
||
}
|
||
|
||
.mat-mdc-paginator-page-size-select {
|
||
margin: 0 4px;
|
||
width: var(--mat-paginator-page-size-select-width, 84px);
|
||
}
|
||
|
||
.mat-mdc-paginator-range-label {
|
||
margin: 0 32px 0 24px;
|
||
}
|
||
|
||
.mat-mdc-paginator-range-actions {
|
||
display: flex;
|
||
align-items: center;
|
||
}
|
||
|
||
.mat-mdc-paginator-icon {
|
||
display: inline-block;
|
||
width: 28px;
|
||
fill: var(--mat-paginator-enabled-icon-color, var(--mat-sys-on-surface-variant));
|
||
}
|
||
.mat-mdc-icon-button[aria-disabled] .mat-mdc-paginator-icon {
|
||
fill: var(--mat-paginator-disabled-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));
|
||
}
|
||
[dir=rtl] .mat-mdc-paginator-icon {
|
||
transform: rotate(180deg);
|
||
}
|
||
|
||
@media (forced-colors: active) {
|
||
.mat-mdc-icon-button[aria-disabled] .mat-mdc-paginator-icon,
|
||
.mat-mdc-paginator-icon {
|
||
fill: currentColor;
|
||
}
|
||
.mat-mdc-paginator-range-actions .mat-mdc-icon-button {
|
||
outline: solid 1px;
|
||
}
|
||
.mat-mdc-paginator-range-actions .mat-mdc-icon-button[aria-disabled] {
|
||
color: GrayText;
|
||
}
|
||
}
|
||
.mat-mdc-paginator-touch-target {
|
||
display: var(--mat-paginator-touch-target-display, block);
|
||
position: absolute;
|
||
top: 50%;
|
||
left: 50%;
|
||
width: var(--mat-paginator-page-size-select-width, 84px);
|
||
height: var(--mat-paginator-page-size-select-touch-target-height, 48px);
|
||
background-color: transparent;
|
||
transform: translate(-50%, -50%);
|
||
cursor: pointer;
|
||
}
|
||
`],encapsulation:2,changeDetection:0})}return n})(),As=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=on({type:n});static \u0275inj=nn({imports:[Y,ot,st,ea]})}return n})();var Ece=["mat-sort-header",""],Oce=["*",[["","matSortHeaderIcon",""]]],Dce=["*","[matSortHeaderIcon]"];function Ice(n,o){n&1&&(Mi(),ii(0,"svg",3),kr(1,"path",4),Si())}function Ace(n,o){n&1&&(ii(0,"div",2),Zt(1,1,null,Ice,2,0),Si())}var vz=new mn("MAT_SORT_DEFAULT_OPTIONS"),Ro=(()=>{class n{_defaultOptions;_initializedStream=new Ju(1);sortables=new Map;_stateChanges=new Ye;active;start="asc";get direction(){return this._direction}set direction(e){this._direction=e}_direction="";disableClear;disabled=!1;sortChange=new be;initialized=this._initializedStream;constructor(e){this._defaultOptions=e}register(e){this.sortables.set(e.id,e)}deregister(e){this.sortables.delete(e.id)}sort(e){this.active!=e.id?(this.active=e.id,this.direction=e.start?e.start:this.start):this.direction=this.getNextSortDirection(e),this.sortChange.emit({active:this.active,direction:this.direction})}getNextSortDirection(e){if(!e)return"";let t=e?.disableClear??this.disableClear??!!this._defaultOptions?.disableClear,i=Nce(e.start||this.start,t),a=i.indexOf(this.direction)+1;return a>=i.length&&(a=0),i[a]}ngOnInit(){this._initializedStream.next()}ngOnChanges(){this._stateChanges.next()}ngOnDestroy(){this._stateChanges.complete(),this._initializedStream.complete()}static \u0275fac=function(t){return new(t||n)(Mt(vz,8))};static \u0275dir=yt({type:n,selectors:[["","matSort",""]],hostAttrs:[1,"mat-sort"],inputs:{active:[0,"matSortActive","active"],start:[0,"matSortStart","start"],direction:[0,"matSortDirection","direction"],disableClear:[2,"matSortDisableClear","disableClear",zt],disabled:[2,"matSortDisabled","disabled",zt]},outputs:{sortChange:"matSortChange"},exportAs:["matSort"],features:[Nn]})}return n})();function Nce(n,o){let e=["asc","desc"];return n=="desc"&&e.reverse(),o||e.push(""),e}var Aa=(()=>{class n{_sort=f(Ro,{optional:!0});_columnDef=f($m,{optional:!0});_changeDetectorRef=f(oe);_focusMonitor=f(hs);_elementRef=f(Kt);_ariaDescriber=f(i5,{optional:!0});_renderChanges;_animationsDisabled=$a();_recentlyCleared=z(null);_sortButton;id;arrowPosition="after";start;disabled=!1;get sortActionDescription(){return this._sortActionDescription}set sortActionDescription(e){this._updateSortActionDescription(e)}_sortActionDescription="Sort";disableClear;constructor(){f(Ta).load(Xr);let e=f(vz,{optional:!0});this._sort,e?.arrowPosition&&(this.arrowPosition=e?.arrowPosition)}ngOnInit(){!this.id&&this._columnDef&&(this.id=this._columnDef.name),this._sort.register(this),this._renderChanges=ro(this._sort._stateChanges,this._sort.sortChange).subscribe(()=>this._changeDetectorRef.markForCheck()),this._sortButton=this._elementRef.nativeElement.querySelector(".mat-sort-header-container"),this._updateSortActionDescription(this._sortActionDescription)}ngAfterViewInit(){this._focusMonitor.monitor(this._elementRef,!0).subscribe(()=>{Promise.resolve().then(()=>this._recentlyCleared.set(null))})}ngOnDestroy(){this._focusMonitor.stopMonitoring(this._elementRef),this._sort.deregister(this),this._renderChanges?.unsubscribe(),this._sortButton&&this._ariaDescriber?.removeDescription(this._sortButton,this._sortActionDescription)}_toggleOnInteraction(){if(!this._isDisabled()){let e=this._isSorted(),t=this._sort.direction;this._sort.sort(this),this._recentlyCleared.set(e&&!this._isSorted()?t:null)}}_handleKeydown(e){(e.keyCode===32||e.keyCode===13)&&(e.preventDefault(),this._toggleOnInteraction())}_isSorted(){return this._sort.active==this.id&&(this._sort.direction==="asc"||this._sort.direction==="desc")}_isDisabled(){return this._sort.disabled||this.disabled}_getAriaSortAttribute(){return this._isSorted()?this._sort.direction=="asc"?"ascending":"descending":"none"}_renderArrow(){return!this._isDisabled()||this._isSorted()}_updateSortActionDescription(e){this._sortButton&&(this._ariaDescriber?.removeDescription(this._sortButton,this._sortActionDescription),this._ariaDescriber?.describe(this._sortButton,e)),this._sortActionDescription=e}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["","mat-sort-header",""]],hostAttrs:[1,"mat-sort-header"],hostVars:3,hostBindings:function(t,i){t&1&&_("click",function(){return i._toggleOnInteraction()})("keydown",function(s){return i._handleKeydown(s)})("mouseleave",function(){return i._recentlyCleared.set(null)}),t&2&&(Ce("aria-sort",i._getAriaSortAttribute()),ne("mat-sort-header-disabled",i._isDisabled()))},inputs:{id:[0,"mat-sort-header","id"],arrowPosition:"arrowPosition",start:"start",disabled:[2,"disabled","disabled",zt],sortActionDescription:"sortActionDescription",disableClear:[2,"disableClear","disableClear",zt]},exportAs:["matSortHeader"],attrs:Ece,ngContentSelectors:Dce,decls:4,vars:17,consts:[[1,"mat-sort-header-container","mat-focus-indicator"],[1,"mat-sort-header-content"],[1,"mat-sort-header-arrow"],["viewBox","0 -960 960 960","focusable","false","aria-hidden","true"],["d","M440-240v-368L296-464l-56-56 240-240 240 240-56 56-144-144v368h-80Z"]],template:function(t,i){t&1&&(pi(Oce),ii(0,"div",0)(1,"div",1),Zt(2),Si(),T(3,Ace,3,0,"div",2),Si()),t&2&&(ne("mat-sort-header-sorted",i._isSorted())("mat-sort-header-position-before",i.arrowPosition==="before")("mat-sort-header-descending",i._sort.direction==="desc")("mat-sort-header-ascending",i._sort.direction==="asc")("mat-sort-header-recently-cleared-ascending",i._recentlyCleared()==="asc")("mat-sort-header-recently-cleared-descending",i._recentlyCleared()==="desc")("mat-sort-header-animations-disabled",i._animationsDisabled),Ce("tabindex",i._isDisabled()?null:0)("role",i._isDisabled()?null:"button"),m(3),E(i._renderArrow()?3:-1))},styles:[`.mat-sort-header {
|
||
cursor: pointer;
|
||
}
|
||
|
||
.mat-sort-header-disabled {
|
||
cursor: default;
|
||
}
|
||
|
||
.mat-sort-header-container {
|
||
display: flex;
|
||
align-items: center;
|
||
letter-spacing: normal;
|
||
outline: 0;
|
||
}
|
||
[mat-sort-header].cdk-keyboard-focused .mat-sort-header-container, [mat-sort-header].cdk-program-focused .mat-sort-header-container {
|
||
border-bottom: solid 1px currentColor;
|
||
}
|
||
.mat-sort-header-container::before {
|
||
margin: calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px) * -1);
|
||
}
|
||
|
||
.mat-sort-header-content {
|
||
display: flex;
|
||
align-items: center;
|
||
}
|
||
|
||
.mat-sort-header-position-before {
|
||
flex-direction: row-reverse;
|
||
}
|
||
|
||
@keyframes _mat-sort-header-recently-cleared-ascending {
|
||
from {
|
||
transform: translateY(0);
|
||
opacity: 1;
|
||
}
|
||
to {
|
||
transform: translateY(-25%);
|
||
opacity: 0;
|
||
}
|
||
}
|
||
@keyframes _mat-sort-header-recently-cleared-descending {
|
||
from {
|
||
transform: translateY(0) rotate(180deg);
|
||
opacity: 1;
|
||
}
|
||
to {
|
||
transform: translateY(25%) rotate(180deg);
|
||
opacity: 0;
|
||
}
|
||
}
|
||
.mat-sort-header-arrow {
|
||
height: 12px;
|
||
width: 12px;
|
||
position: relative;
|
||
transition: transform 225ms cubic-bezier(0.4, 0, 0.2, 1), opacity 225ms cubic-bezier(0.4, 0, 0.2, 1);
|
||
opacity: 0;
|
||
overflow: visible;
|
||
color: var(--mat-sort-arrow-color, var(--mat-sys-on-surface));
|
||
}
|
||
.mat-sort-header.cdk-keyboard-focused .mat-sort-header-arrow, .mat-sort-header.cdk-program-focused .mat-sort-header-arrow, .mat-sort-header:hover .mat-sort-header-arrow {
|
||
opacity: 0.54;
|
||
}
|
||
.mat-sort-header .mat-sort-header-sorted .mat-sort-header-arrow {
|
||
opacity: 1;
|
||
}
|
||
.mat-sort-header-descending .mat-sort-header-arrow {
|
||
transform: rotate(180deg);
|
||
}
|
||
.mat-sort-header-recently-cleared-ascending .mat-sort-header-arrow {
|
||
transform: translateY(-25%);
|
||
}
|
||
.mat-sort-header-recently-cleared-ascending .mat-sort-header-arrow {
|
||
transition: none;
|
||
animation: _mat-sort-header-recently-cleared-ascending 225ms cubic-bezier(0.4, 0, 0.2, 1) forwards;
|
||
}
|
||
.mat-sort-header-recently-cleared-descending .mat-sort-header-arrow {
|
||
transition: none;
|
||
animation: _mat-sort-header-recently-cleared-descending 225ms cubic-bezier(0.4, 0, 0.2, 1) forwards;
|
||
}
|
||
.mat-sort-header-animations-disabled .mat-sort-header-arrow {
|
||
transition-duration: 0ms;
|
||
animation-duration: 0ms;
|
||
}
|
||
.mat-sort-header-arrow > svg, .mat-sort-header-arrow [matSortHeaderIcon] {
|
||
width: 24px;
|
||
height: 24px;
|
||
fill: currentColor;
|
||
position: absolute;
|
||
top: 50%;
|
||
left: 50%;
|
||
margin: -12px 0 0 -12px;
|
||
transform: translateZ(0);
|
||
}
|
||
.mat-sort-header-arrow, [dir=rtl] .mat-sort-header-position-before .mat-sort-header-arrow {
|
||
margin: 0 0 0 6px;
|
||
}
|
||
.mat-sort-header-position-before .mat-sort-header-arrow, [dir=rtl] .mat-sort-header-arrow {
|
||
margin: 0 6px 0 0;
|
||
}
|
||
`],encapsulation:2,changeDetection:0})}return n})(),_a=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=on({type:n});static \u0275inj=nn({imports:[Vi]})}return n})();var fa=(()=>{class n{httpController;newTemplateCreated=new Ye;constructor(e){this.httpController=e}list(e){return this.httpController.get(e,"/templates")}deleteTemplate(e,t,i=!1){return this.httpController.delete(e,`/templates/${t}${i?"?prune_images=true":""}`,{observe:"body"})}duplicate(e,t,i){return this.httpController.get(e,`/templates/${t}`).pipe(Dn(a=>this.httpController.post(e,"/templates",ze(q({},a),{template_id:xo(),name:i}))))}static \u0275fac=function(t){return new(t||n)(_e(sn))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();function wo(n){n||(n=f(Va));let o=new Sr(e=>{if(n.destroyed){e.next();return}return n.onDestroy(e.next.bind(e))});return e=>e.pipe(He(o))}function Cz(n,o){let e=o?.injector??f(xa),t=new Ju(1),i=Vn(()=>{let a;try{a=n()}catch(s){cf(()=>t.error(s));return}cf(()=>t.next(a))},{injector:e,manualCleanup:!0});return e.get(Va).onDestroy(()=>{i.destroy(),t.complete()}),t.asObservable()}function bz(n,o){let t=!o?.manualCleanup?o?.injector?.get(Va)??f(Va):null,i=Fce(o?.equal),a;o?.requireSync?a=z({kind:0},{equal:i}):a=z({kind:1,value:o?.initialValue},{equal:i});let s,d=n.subscribe({next:p=>a.set({kind:1,value:p}),error:p=>{a.set({kind:2,error:p}),s?.()},complete:()=>{s?.()}});if(o?.requireSync&&a().kind===0)throw new Ii(601,!1);return s=t?.onDestroy(d.unsubscribe.bind(d)),Ne(()=>{let p=a();switch(p.kind){case 1:return p.value;case 2:throw p.error;case 0:throw new Ii(601,!1)}},{equal:o?.equal})}function Fce(n=Object.is){return(o,e)=>o.kind===1&&e.kind===1&&n(o.value,e.value)}function FE(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var Eu=FE();function Pz(n){Eu=n}var Pu={exec:()=>null};function $i(n,o=""){let e=typeof n=="string"?n:n.source,t={replace:(i,a)=>{let s=typeof a=="string"?a:a.source;return s=s.replace(ss.caret,"$1"),e=e.replace(i,s),t},getRegex:()=>new RegExp(e,o)};return t}var Rce=(()=>{try{return!!new RegExp("(?<=1)(?<!1)")}catch{return!1}})(),ss={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:n=>new RegExp(`^( {0,3}${n})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:n=>new RegExp(`^ {0,${Math.min(3,n-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:n=>new RegExp(`^ {0,${Math.min(3,n-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:n=>new RegExp(`^ {0,${Math.min(3,n-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:n=>new RegExp(`^ {0,${Math.min(3,n-1)}}#`),htmlBeginRegex:n=>new RegExp(`^ {0,${Math.min(3,n-1)}}<(?:[a-z].*>|!--)`,"i"),blockquoteBeginRegex:n=>new RegExp(`^ {0,${Math.min(3,n-1)}}>`)},zce=/^(?:[ \t]*(?:\n|$))+/,Lce=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,Vce=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,hv=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,Bce=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,RE=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,Tz=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,Ez=$i(Tz).replace(/bull/g,RE).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),jce=$i(Tz).replace(/bull/g,RE).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),zE=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,$ce=/^[^\n]+/,LE=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,Hce=$i(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",LE).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),Uce=$i(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,RE).getRegex(),ry="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",VE=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,Wce=$i("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",VE).replace("tag",ry).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Oz=$i(zE).replace("hr",hv).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",ry).getRegex(),Gce=$i(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",Oz).getRegex(),BE={blockquote:Gce,code:Lce,def:Hce,fences:Vce,heading:Bce,hr:hv,html:Wce,lheading:Ez,list:Uce,newline:zce,paragraph:Oz,table:Pu,text:$ce},xz=$i("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",hv).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",ry).getRegex(),qce=ze(q({},BE),{lheading:jce,table:xz,paragraph:$i(zE).replace("hr",hv).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",xz).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",ry).getRegex()}),Qce=ze(q({},BE),{html:$i(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",VE).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Pu,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:$i(zE).replace("hr",hv).replace("heading",` *#{1,6} *[^
|
||
]`).replace("lheading",Ez).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()}),Kce=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,Xce=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,Dz=/^( {2,}|\\)\n(?!\s*$)/,Yce=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,bh=/[\p{P}\p{S}]/u,sy=/[\s\p{P}\p{S}]/u,jE=/[^\s\p{P}\p{S}]/u,Zce=$i(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,sy).getRegex(),Iz=/(?!~)[\p{P}\p{S}]/u,Jce=/(?!~)[\s\p{P}\p{S}]/u,ede=/(?:[^\s\p{P}\p{S}]|~)/u,tde=$i(/link|precode-code|html/,"g").replace("link",/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",Rce?"(?<!`)()":"(^^|[^`])").replace("code",/(?<b>`+)[^`]+\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),Az=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,nde=$i(Az,"u").replace(/punct/g,bh).getRegex(),ide=$i(Az,"u").replace(/punct/g,Iz).getRegex(),Nz="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",ode=$i(Nz,"gu").replace(/notPunctSpace/g,jE).replace(/punctSpace/g,sy).replace(/punct/g,bh).getRegex(),ade=$i(Nz,"gu").replace(/notPunctSpace/g,ede).replace(/punctSpace/g,Jce).replace(/punct/g,Iz).getRegex(),rde=$i("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,jE).replace(/punctSpace/g,sy).replace(/punct/g,bh).getRegex(),sde=$i(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,bh).getRegex(),lde="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",cde=$i(lde,"gu").replace(/notPunctSpace/g,jE).replace(/punctSpace/g,sy).replace(/punct/g,bh).getRegex(),dde=$i(/\\(punct)/,"gu").replace(/punct/g,bh).getRegex(),mde=$i(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),pde=$i(VE).replace("(?:-->|$)","-->").getRegex(),ude=$i("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment",pde).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),oy=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,gde=$i(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label",oy).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Fz=$i(/^!?\[(label)\]\[(ref)\]/).replace("label",oy).replace("ref",LE).getRegex(),Rz=$i(/^!?\[(ref)\](?:\[\])?/).replace("ref",LE).getRegex(),hde=$i("reflink|nolink(?!\\()","g").replace("reflink",Fz).replace("nolink",Rz).getRegex(),yz=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,$E={_backpedal:Pu,anyPunctuation:dde,autolink:mde,blockSkip:tde,br:Dz,code:Xce,del:Pu,delLDelim:Pu,delRDelim:Pu,emStrongLDelim:nde,emStrongRDelimAst:ode,emStrongRDelimUnd:rde,escape:Kce,link:gde,nolink:Rz,punctuation:Zce,reflink:Fz,reflinkSearch:hde,tag:ude,text:Yce,url:Pu},_de=ze(q({},$E),{link:$i(/^!?\[(label)\]\((.*?)\)/).replace("label",oy).getRegex(),reflink:$i(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",oy).getRegex()}),IE=ze(q({},$E),{emStrongRDelimAst:ade,emStrongLDelim:ide,delLDelim:sde,delRDelim:cde,url:$i(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",yz).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:$i(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol",yz).getRegex()}),fde=ze(q({},IE),{br:$i(Dz).replace("{2,}","*").getRegex(),text:$i(IE.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()}),iy={normal:BE,gfm:qce,pedantic:Qce},pv={normal:$E,gfm:IE,breaks:fde,pedantic:_de},vde={"&":"&","<":"<",">":">",'"':""","'":"'"},wz=n=>vde[n];function rd(n,o){if(o){if(ss.escapeTest.test(n))return n.replace(ss.escapeReplace,wz)}else if(ss.escapeTestNoEncode.test(n))return n.replace(ss.escapeReplaceNoEncode,wz);return n}function Mz(n){try{n=encodeURI(n).replace(ss.percentDecode,"%")}catch{return null}return n}function Sz(n,o){let e=n.replace(ss.findPipe,(a,s,d)=>{let p=!1,u=s;for(;--u>=0&&d[u]==="\\";)p=!p;return p?"|":" |"}),t=e.split(ss.splitPipe),i=0;if(t[0].trim()||t.shift(),t.length>0&&!t.at(-1)?.trim()&&t.pop(),o)if(t.length>o)t.splice(o);else for(;t.length<o;)t.push("");for(;i<t.length;i++)t[i]=t[i].trim().replace(ss.slashPipe,"|");return t}function uv(n,o,e){let t=n.length;if(t===0)return"";let i=0;for(;i<t;){let a=n.charAt(t-i-1);if(a===o&&!e)i++;else if(a!==o&&e)i++;else break}return n.slice(0,t-i)}function Cde(n,o){if(n.indexOf(o[1])===-1)return-1;let e=0;for(let t=0;t<n.length;t++)if(n[t]==="\\")t++;else if(n[t]===o[0])e++;else if(n[t]===o[1]&&(e--,e<0))return t;return e>0?-2:-1}function bde(n,o=0){let e=o,t="";for(let i of n)if(i===" "){let a=4-e%4;t+=" ".repeat(a),e+=a}else t+=i,e++;return t}function kz(n,o,e,t,i){let a=o.href,s=o.title||null,d=n[1].replace(i.other.outputLinkReplace,"$1");t.state.inLink=!0;let p={type:n[0].charAt(0)==="!"?"image":"link",raw:e,href:a,title:s,text:d,tokens:t.inlineTokens(d)};return t.state.inLink=!1,p}function xde(n,o,e){let t=n.match(e.other.indentCodeCompensation);if(t===null)return o;let i=t[1];return o.split(`
|
||
`).map(a=>{let s=a.match(e.other.beginningSpace);if(s===null)return a;let[d]=s;return d.length>=i.length?a.slice(i.length):a}).join(`
|
||
`)}var ay=class{options;rules;lexer;constructor(n){this.options=n||Eu}space(n){let o=this.rules.block.newline.exec(n);if(o&&o[0].length>0)return{type:"space",raw:o[0]}}code(n){let o=this.rules.block.code.exec(n);if(o){let e=o[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:o[0],codeBlockStyle:"indented",text:this.options.pedantic?e:uv(e,`
|
||
`)}}}fences(n){let o=this.rules.block.fences.exec(n);if(o){let e=o[0],t=xde(e,o[3]||"",this.rules);return{type:"code",raw:e,lang:o[2]?o[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):o[2],text:t}}}heading(n){let o=this.rules.block.heading.exec(n);if(o){let e=o[2].trim();if(this.rules.other.endingHash.test(e)){let t=uv(e,"#");(this.options.pedantic||!t||this.rules.other.endingSpaceChar.test(t))&&(e=t.trim())}return{type:"heading",raw:o[0],depth:o[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(n){let o=this.rules.block.hr.exec(n);if(o)return{type:"hr",raw:uv(o[0],`
|
||
`)}}blockquote(n){let o=this.rules.block.blockquote.exec(n);if(o){let e=uv(o[0],`
|
||
`).split(`
|
||
`),t="",i="",a=[];for(;e.length>0;){let s=!1,d=[],p;for(p=0;p<e.length;p++)if(this.rules.other.blockquoteStart.test(e[p]))d.push(e[p]),s=!0;else if(!s)d.push(e[p]);else break;e=e.slice(p);let u=d.join(`
|
||
`),g=u.replace(this.rules.other.blockquoteSetextReplace,`
|
||
$1`).replace(this.rules.other.blockquoteSetextReplace2,"");t=t?`${t}
|
||
${u}`:u,i=i?`${i}
|
||
${g}`:g;let C=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(g,a,!0),this.lexer.state.top=C,e.length===0)break;let M=a.at(-1);if(M?.type==="code")break;if(M?.type==="blockquote"){let x=M,b=x.raw+`
|
||
`+e.join(`
|
||
`),P=this.blockquote(b);a[a.length-1]=P,t=t.substring(0,t.length-x.raw.length)+P.raw,i=i.substring(0,i.length-x.text.length)+P.text;break}else if(M?.type==="list"){let x=M,b=x.raw+`
|
||
`+e.join(`
|
||
`),P=this.list(b);a[a.length-1]=P,t=t.substring(0,t.length-M.raw.length)+P.raw,i=i.substring(0,i.length-x.raw.length)+P.raw,e=b.substring(a.at(-1).raw.length).split(`
|
||
`);continue}}return{type:"blockquote",raw:t,tokens:a,text:i}}}list(n){let o=this.rules.block.list.exec(n);if(o){let e=o[1].trim(),t=e.length>1,i={type:"list",raw:"",ordered:t,start:t?+e.slice(0,-1):"",loose:!1,items:[]};e=t?`\\d{1,9}\\${e.slice(-1)}`:`\\${e}`,this.options.pedantic&&(e=t?e:"[*+-]");let a=this.rules.other.listItemRegex(e),s=!1;for(;n;){let p=!1,u="",g="";if(!(o=a.exec(n))||this.rules.block.hr.test(n))break;u=o[0],n=n.substring(u.length);let C=bde(o[2].split(`
|
||
`,1)[0],o[1].length),M=n.split(`
|
||
`,1)[0],x=!C.trim(),b=0;if(this.options.pedantic?(b=2,g=C.trimStart()):x?b=o[1].length+1:(b=C.search(this.rules.other.nonSpaceChar),b=b>4?1:b,g=C.slice(b),b+=o[1].length),x&&this.rules.other.blankLine.test(M)&&(u+=M+`
|
||
`,n=n.substring(M.length+1),p=!0),!p){let P=this.rules.other.nextBulletRegex(b),k=this.rules.other.hrRegex(b),S=this.rules.other.fencesBeginRegex(b),O=this.rules.other.headingBeginRegex(b),A=this.rules.other.htmlBeginRegex(b),D=this.rules.other.blockquoteBeginRegex(b);for(;n;){let F=n.split(`
|
||
`,1)[0],I;if(M=F,this.options.pedantic?(M=M.replace(this.rules.other.listReplaceNesting," "),I=M):I=M.replace(this.rules.other.tabCharGlobal," "),S.test(M)||O.test(M)||A.test(M)||D.test(M)||P.test(M)||k.test(M))break;if(I.search(this.rules.other.nonSpaceChar)>=b||!M.trim())g+=`
|
||
`+I.slice(b);else{if(x||C.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||S.test(C)||O.test(C)||k.test(C))break;g+=`
|
||
`+M}x=!M.trim(),u+=F+`
|
||
`,n=n.substring(F.length+1),C=I.slice(b)}}i.loose||(s?i.loose=!0:this.rules.other.doubleBlankLine.test(u)&&(s=!0)),i.items.push({type:"list_item",raw:u,task:!!this.options.gfm&&this.rules.other.listIsTask.test(g),loose:!1,text:g,tokens:[]}),i.raw+=u}let d=i.items.at(-1);if(d)d.raw=d.raw.trimEnd(),d.text=d.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let p of i.items){if(this.lexer.state.top=!1,p.tokens=this.lexer.blockTokens(p.text,[]),p.task){if(p.text=p.text.replace(this.rules.other.listReplaceTask,""),p.tokens[0]?.type==="text"||p.tokens[0]?.type==="paragraph"){p.tokens[0].raw=p.tokens[0].raw.replace(this.rules.other.listReplaceTask,""),p.tokens[0].text=p.tokens[0].text.replace(this.rules.other.listReplaceTask,"");for(let g=this.lexer.inlineQueue.length-1;g>=0;g--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[g].src)){this.lexer.inlineQueue[g].src=this.lexer.inlineQueue[g].src.replace(this.rules.other.listReplaceTask,"");break}}let u=this.rules.other.listTaskCheckbox.exec(p.raw);if(u){let g={type:"checkbox",raw:u[0]+" ",checked:u[0]!=="[ ]"};p.checked=g.checked,i.loose?p.tokens[0]&&["paragraph","text"].includes(p.tokens[0].type)&&"tokens"in p.tokens[0]&&p.tokens[0].tokens?(p.tokens[0].raw=g.raw+p.tokens[0].raw,p.tokens[0].text=g.raw+p.tokens[0].text,p.tokens[0].tokens.unshift(g)):p.tokens.unshift({type:"paragraph",raw:g.raw,text:g.raw,tokens:[g]}):p.tokens.unshift(g)}}if(!i.loose){let u=p.tokens.filter(C=>C.type==="space"),g=u.length>0&&u.some(C=>this.rules.other.anyLine.test(C.raw));i.loose=g}}if(i.loose)for(let p of i.items){p.loose=!0;for(let u of p.tokens)u.type==="text"&&(u.type="paragraph")}return i}}html(n){let o=this.rules.block.html.exec(n);if(o)return{type:"html",block:!0,raw:o[0],pre:o[1]==="pre"||o[1]==="script"||o[1]==="style",text:o[0]}}def(n){let o=this.rules.block.def.exec(n);if(o){let e=o[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),t=o[2]?o[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",i=o[3]?o[3].substring(1,o[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):o[3];return{type:"def",tag:e,raw:o[0],href:t,title:i}}}table(n){let o=this.rules.block.table.exec(n);if(!o||!this.rules.other.tableDelimiter.test(o[2]))return;let e=Sz(o[1]),t=o[2].replace(this.rules.other.tableAlignChars,"").split("|"),i=o[3]?.trim()?o[3].replace(this.rules.other.tableRowBlankLine,"").split(`
|
||
`):[],a={type:"table",raw:o[0],header:[],align:[],rows:[]};if(e.length===t.length){for(let s of t)this.rules.other.tableAlignRight.test(s)?a.align.push("right"):this.rules.other.tableAlignCenter.test(s)?a.align.push("center"):this.rules.other.tableAlignLeft.test(s)?a.align.push("left"):a.align.push(null);for(let s=0;s<e.length;s++)a.header.push({text:e[s],tokens:this.lexer.inline(e[s]),header:!0,align:a.align[s]});for(let s of i)a.rows.push(Sz(s,a.header.length).map((d,p)=>({text:d,tokens:this.lexer.inline(d),header:!1,align:a.align[p]})));return a}}lheading(n){let o=this.rules.block.lheading.exec(n);if(o){let e=o[1].trim();return{type:"heading",raw:o[0],depth:o[2].charAt(0)==="="?1:2,text:e,tokens:this.lexer.inline(e)}}}paragraph(n){let o=this.rules.block.paragraph.exec(n);if(o){let e=o[1].charAt(o[1].length-1)===`
|
||
`?o[1].slice(0,-1):o[1];return{type:"paragraph",raw:o[0],text:e,tokens:this.lexer.inline(e)}}}text(n){let o=this.rules.block.text.exec(n);if(o)return{type:"text",raw:o[0],text:o[0],tokens:this.lexer.inline(o[0])}}escape(n){let o=this.rules.inline.escape.exec(n);if(o)return{type:"escape",raw:o[0],text:o[1]}}tag(n){let o=this.rules.inline.tag.exec(n);if(o)return!this.lexer.state.inLink&&this.rules.other.startATag.test(o[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(o[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(o[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(o[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:o[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:o[0]}}link(n){let o=this.rules.inline.link.exec(n);if(o){let e=o[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(e)){if(!this.rules.other.endAngleBracket.test(e))return;let a=uv(e.slice(0,-1),"\\");if((e.length-a.length)%2===0)return}else{let a=Cde(o[2],"()");if(a===-2)return;if(a>-1){let s=(o[0].indexOf("!")===0?5:4)+o[1].length+a;o[2]=o[2].substring(0,a),o[0]=o[0].substring(0,s).trim(),o[3]=""}}let t=o[2],i="";if(this.options.pedantic){let a=this.rules.other.pedanticHrefTitle.exec(t);a&&(t=a[1],i=a[3])}else i=o[3]?o[3].slice(1,-1):"";return t=t.trim(),this.rules.other.startAngleBracket.test(t)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(e)?t=t.slice(1):t=t.slice(1,-1)),kz(o,{href:t&&t.replace(this.rules.inline.anyPunctuation,"$1"),title:i&&i.replace(this.rules.inline.anyPunctuation,"$1")},o[0],this.lexer,this.rules)}}reflink(n,o){let e;if((e=this.rules.inline.reflink.exec(n))||(e=this.rules.inline.nolink.exec(n))){let t=(e[2]||e[1]).replace(this.rules.other.multipleSpaceGlobal," "),i=o[t.toLowerCase()];if(!i){let a=e[0].charAt(0);return{type:"text",raw:a,text:a}}return kz(e,i,e[0],this.lexer,this.rules)}}emStrong(n,o,e=""){let t=this.rules.inline.emStrongLDelim.exec(n);if(!(!t||!t[1]&&!t[2]&&!t[3]&&!t[4]||t[4]&&e.match(this.rules.other.unicodeAlphaNumeric))&&(!(t[1]||t[3])||!e||this.rules.inline.punctuation.exec(e))){let i=[...t[0]].length-1,a,s,d=i,p=0,u=t[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(u.lastIndex=0,o=o.slice(-1*n.length+i);(t=u.exec(o))!=null;){if(a=t[1]||t[2]||t[3]||t[4]||t[5]||t[6],!a)continue;if(s=[...a].length,t[3]||t[4]){d+=s;continue}else if((t[5]||t[6])&&i%3&&!((i+s)%3)){p+=s;continue}if(d-=s,d>0)continue;s=Math.min(s,s+d+p);let g=[...t[0]][0].length,C=n.slice(0,i+t.index+g+s);if(Math.min(i,s)%2){let x=C.slice(1,-1);return{type:"em",raw:C,text:x,tokens:this.lexer.inlineTokens(x)}}let M=C.slice(2,-2);return{type:"strong",raw:C,text:M,tokens:this.lexer.inlineTokens(M)}}}}codespan(n){let o=this.rules.inline.code.exec(n);if(o){let e=o[2].replace(this.rules.other.newLineCharGlobal," "),t=this.rules.other.nonSpaceChar.test(e),i=this.rules.other.startingSpaceChar.test(e)&&this.rules.other.endingSpaceChar.test(e);return t&&i&&(e=e.substring(1,e.length-1)),{type:"codespan",raw:o[0],text:e}}}br(n){let o=this.rules.inline.br.exec(n);if(o)return{type:"br",raw:o[0]}}del(n,o,e=""){let t=this.rules.inline.delLDelim.exec(n);if(t&&(!t[1]||!e||this.rules.inline.punctuation.exec(e))){let i=[...t[0]].length-1,a,s,d=i,p=this.rules.inline.delRDelim;for(p.lastIndex=0,o=o.slice(-1*n.length+i);(t=p.exec(o))!=null;){if(a=t[1]||t[2]||t[3]||t[4]||t[5]||t[6],!a||(s=[...a].length,s!==i))continue;if(t[3]||t[4]){d+=s;continue}if(d-=s,d>0)continue;s=Math.min(s,s+d);let u=[...t[0]][0].length,g=n.slice(0,i+t.index+u+s),C=g.slice(i,-i);return{type:"del",raw:g,text:C,tokens:this.lexer.inlineTokens(C)}}}}autolink(n){let o=this.rules.inline.autolink.exec(n);if(o){let e,t;return o[2]==="@"?(e=o[1],t="mailto:"+e):(e=o[1],t=e),{type:"link",raw:o[0],text:e,href:t,tokens:[{type:"text",raw:e,text:e}]}}}url(n){let o;if(o=this.rules.inline.url.exec(n)){let e,t;if(o[2]==="@")e=o[0],t="mailto:"+e;else{let i;do i=o[0],o[0]=this.rules.inline._backpedal.exec(o[0])?.[0]??"";while(i!==o[0]);e=o[0],o[1]==="www."?t="http://"+o[0]:t=o[0]}return{type:"link",raw:o[0],text:e,href:t,tokens:[{type:"text",raw:e,text:e}]}}}inlineText(n){let o=this.rules.inline.text.exec(n);if(o){let e=this.lexer.state.inRawBlock;return{type:"text",raw:o[0],text:o[0],escaped:e}}}},fc=class AE{tokens;options;state;inlineQueue;tokenizer;constructor(o){this.tokens=[],this.tokens.links=Object.create(null),this.options=o||Eu,this.options.tokenizer=this.options.tokenizer||new ay,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let e={other:ss,block:iy.normal,inline:pv.normal};this.options.pedantic?(e.block=iy.pedantic,e.inline=pv.pedantic):this.options.gfm&&(e.block=iy.gfm,this.options.breaks?e.inline=pv.breaks:e.inline=pv.gfm),this.tokenizer.rules=e}static get rules(){return{block:iy,inline:pv}}static lex(o,e){return new AE(e).lex(o)}static lexInline(o,e){return new AE(e).inlineTokens(o)}lex(o){o=o.replace(ss.carriageReturn,`
|
||
`),this.blockTokens(o,this.tokens);for(let e=0;e<this.inlineQueue.length;e++){let t=this.inlineQueue[e];this.inlineTokens(t.src,t.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(o,e=[],t=!1){for(this.tokenizer.lexer=this,this.options.pedantic&&(o=o.replace(ss.tabCharGlobal," ").replace(ss.spaceLine,""));o;){let i;if(this.options.extensions?.block?.some(s=>(i=s.call({lexer:this},o,e))?(o=o.substring(i.raw.length),e.push(i),!0):!1))continue;if(i=this.tokenizer.space(o)){o=o.substring(i.raw.length);let s=e.at(-1);i.raw.length===1&&s!==void 0?s.raw+=`
|
||
`:e.push(i);continue}if(i=this.tokenizer.code(o)){o=o.substring(i.raw.length);let s=e.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=(s.raw.endsWith(`
|
||
`)?"":`
|
||
`)+i.raw,s.text+=`
|
||
`+i.text,this.inlineQueue.at(-1).src=s.text):e.push(i);continue}if(i=this.tokenizer.fences(o)){o=o.substring(i.raw.length),e.push(i);continue}if(i=this.tokenizer.heading(o)){o=o.substring(i.raw.length),e.push(i);continue}if(i=this.tokenizer.hr(o)){o=o.substring(i.raw.length),e.push(i);continue}if(i=this.tokenizer.blockquote(o)){o=o.substring(i.raw.length),e.push(i);continue}if(i=this.tokenizer.list(o)){o=o.substring(i.raw.length),e.push(i);continue}if(i=this.tokenizer.html(o)){o=o.substring(i.raw.length),e.push(i);continue}if(i=this.tokenizer.def(o)){o=o.substring(i.raw.length);let s=e.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=(s.raw.endsWith(`
|
||
`)?"":`
|
||
`)+i.raw,s.text+=`
|
||
`+i.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[i.tag]||(this.tokens.links[i.tag]={href:i.href,title:i.title},e.push(i));continue}if(i=this.tokenizer.table(o)){o=o.substring(i.raw.length),e.push(i);continue}if(i=this.tokenizer.lheading(o)){o=o.substring(i.raw.length),e.push(i);continue}let a=o;if(this.options.extensions?.startBlock){let s=1/0,d=o.slice(1),p;this.options.extensions.startBlock.forEach(u=>{p=u.call({lexer:this},d),typeof p=="number"&&p>=0&&(s=Math.min(s,p))}),s<1/0&&s>=0&&(a=o.substring(0,s+1))}if(this.state.top&&(i=this.tokenizer.paragraph(a))){let s=e.at(-1);t&&s?.type==="paragraph"?(s.raw+=(s.raw.endsWith(`
|
||
`)?"":`
|
||
`)+i.raw,s.text+=`
|
||
`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):e.push(i),t=a.length!==o.length,o=o.substring(i.raw.length);continue}if(i=this.tokenizer.text(o)){o=o.substring(i.raw.length);let s=e.at(-1);s?.type==="text"?(s.raw+=(s.raw.endsWith(`
|
||
`)?"":`
|
||
`)+i.raw,s.text+=`
|
||
`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):e.push(i);continue}if(o){let s="Infinite loop on byte: "+o.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,e}inline(o,e=[]){return this.inlineQueue.push({src:o,tokens:e}),e}inlineTokens(o,e=[]){this.tokenizer.lexer=this;let t=o,i=null;if(this.tokens.links){let p=Object.keys(this.tokens.links);if(p.length>0)for(;(i=this.tokenizer.rules.inline.reflinkSearch.exec(t))!=null;)p.includes(i[0].slice(i[0].lastIndexOf("[")+1,-1))&&(t=t.slice(0,i.index)+"["+"a".repeat(i[0].length-2)+"]"+t.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(i=this.tokenizer.rules.inline.anyPunctuation.exec(t))!=null;)t=t.slice(0,i.index)+"++"+t.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let a;for(;(i=this.tokenizer.rules.inline.blockSkip.exec(t))!=null;)a=i[2]?i[2].length:0,t=t.slice(0,i.index+a)+"["+"a".repeat(i[0].length-a-2)+"]"+t.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);t=this.options.hooks?.emStrongMask?.call({lexer:this},t)??t;let s=!1,d="";for(;o;){s||(d=""),s=!1;let p;if(this.options.extensions?.inline?.some(g=>(p=g.call({lexer:this},o,e))?(o=o.substring(p.raw.length),e.push(p),!0):!1))continue;if(p=this.tokenizer.escape(o)){o=o.substring(p.raw.length),e.push(p);continue}if(p=this.tokenizer.tag(o)){o=o.substring(p.raw.length),e.push(p);continue}if(p=this.tokenizer.link(o)){o=o.substring(p.raw.length),e.push(p);continue}if(p=this.tokenizer.reflink(o,this.tokens.links)){o=o.substring(p.raw.length);let g=e.at(-1);p.type==="text"&&g?.type==="text"?(g.raw+=p.raw,g.text+=p.text):e.push(p);continue}if(p=this.tokenizer.emStrong(o,t,d)){o=o.substring(p.raw.length),e.push(p);continue}if(p=this.tokenizer.codespan(o)){o=o.substring(p.raw.length),e.push(p);continue}if(p=this.tokenizer.br(o)){o=o.substring(p.raw.length),e.push(p);continue}if(p=this.tokenizer.del(o,t,d)){o=o.substring(p.raw.length),e.push(p);continue}if(p=this.tokenizer.autolink(o)){o=o.substring(p.raw.length),e.push(p);continue}if(!this.state.inLink&&(p=this.tokenizer.url(o))){o=o.substring(p.raw.length),e.push(p);continue}let u=o;if(this.options.extensions?.startInline){let g=1/0,C=o.slice(1),M;this.options.extensions.startInline.forEach(x=>{M=x.call({lexer:this},C),typeof M=="number"&&M>=0&&(g=Math.min(g,M))}),g<1/0&&g>=0&&(u=o.substring(0,g+1))}if(p=this.tokenizer.inlineText(u)){o=o.substring(p.raw.length),p.raw.slice(-1)!=="_"&&(d=p.raw.slice(-1)),s=!0;let g=e.at(-1);g?.type==="text"?(g.raw+=p.raw,g.text+=p.text):e.push(p);continue}if(o){let g="Infinite loop on byte: "+o.charCodeAt(0);if(this.options.silent){console.error(g);break}else throw new Error(g)}}return e}},Ym=class{options;parser;constructor(n){this.options=n||Eu}space(n){return""}code({text:n,lang:o,escaped:e}){let t=(o||"").match(ss.notSpaceStart)?.[0],i=n.replace(ss.endingNewline,"")+`
|
||
`;return t?'<pre><code class="language-'+rd(t)+'">'+(e?i:rd(i,!0))+`</code></pre>
|
||
`:"<pre><code>"+(e?i:rd(i,!0))+`</code></pre>
|
||
`}blockquote({tokens:n}){return`<blockquote>
|
||
${this.parser.parse(n)}</blockquote>
|
||
`}html({text:n}){return n}def(n){return""}heading({tokens:n,depth:o}){return`<h${o}>${this.parser.parseInline(n)}</h${o}>
|
||
`}hr(n){return`<hr>
|
||
`}list(n){let o=n.ordered,e=n.start,t="";for(let s=0;s<n.items.length;s++){let d=n.items[s];t+=this.listitem(d)}let i=o?"ol":"ul",a=o&&e!==1?' start="'+e+'"':"";return"<"+i+a+`>
|
||
`+t+"</"+i+`>
|
||
`}listitem(n){return`<li>${this.parser.parse(n.tokens)}</li>
|
||
`}checkbox({checked:n}){return"<input "+(n?'checked="" ':"")+'disabled="" type="checkbox"> '}paragraph({tokens:n}){return`<p>${this.parser.parseInline(n)}</p>
|
||
`}table(n){let o="",e="";for(let i=0;i<n.header.length;i++)e+=this.tablecell(n.header[i]);o+=this.tablerow({text:e});let t="";for(let i=0;i<n.rows.length;i++){let a=n.rows[i];e="";for(let s=0;s<a.length;s++)e+=this.tablecell(a[s]);t+=this.tablerow({text:e})}return t&&(t=`<tbody>${t}</tbody>`),`<table>
|
||
<thead>
|
||
`+o+`</thead>
|
||
`+t+`</table>
|
||
`}tablerow({text:n}){return`<tr>
|
||
${n}</tr>
|
||
`}tablecell(n){let o=this.parser.parseInline(n.tokens),e=n.header?"th":"td";return(n.align?`<${e} align="${n.align}">`:`<${e}>`)+o+`</${e}>
|
||
`}strong({tokens:n}){return`<strong>${this.parser.parseInline(n)}</strong>`}em({tokens:n}){return`<em>${this.parser.parseInline(n)}</em>`}codespan({text:n}){return`<code>${rd(n,!0)}</code>`}br(n){return"<br>"}del({tokens:n}){return`<del>${this.parser.parseInline(n)}</del>`}link({href:n,title:o,tokens:e}){let t=this.parser.parseInline(e),i=Mz(n);if(i===null)return t;n=i;let a='<a href="'+n+'"';return o&&(a+=' title="'+rd(o)+'"'),a+=">"+t+"</a>",a}image({href:n,title:o,text:e,tokens:t}){t&&(e=this.parser.parseInline(t,this.parser.textRenderer));let i=Mz(n);if(i===null)return rd(e);n=i;let a=`<img src="${n}" alt="${rd(e)}"`;return o&&(a+=` title="${rd(o)}"`),a+=">",a}text(n){return"tokens"in n&&n.tokens?this.parser.parseInline(n.tokens):"escaped"in n&&n.escaped?n.text:rd(n.text)}},HE=class{strong({text:n}){return n}em({text:n}){return n}codespan({text:n}){return n}del({text:n}){return n}html({text:n}){return n}text({text:n}){return n}link({text:n}){return""+n}image({text:n}){return""+n}br(){return""}checkbox({raw:n}){return n}},vc=class NE{options;renderer;textRenderer;constructor(o){this.options=o||Eu,this.options.renderer=this.options.renderer||new Ym,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new HE}static parse(o,e){return new NE(e).parse(o)}static parseInline(o,e){return new NE(e).parseInline(o)}parse(o){this.renderer.parser=this;let e="";for(let t=0;t<o.length;t++){let i=o[t];if(this.options.extensions?.renderers?.[i.type]){let s=i,d=this.options.extensions.renderers[s.type].call({parser:this},s);if(d!==!1||!["space","hr","heading","code","table","blockquote","list","html","def","paragraph","text"].includes(s.type)){e+=d||"";continue}}let a=i;switch(a.type){case"space":{e+=this.renderer.space(a);break}case"hr":{e+=this.renderer.hr(a);break}case"heading":{e+=this.renderer.heading(a);break}case"code":{e+=this.renderer.code(a);break}case"table":{e+=this.renderer.table(a);break}case"blockquote":{e+=this.renderer.blockquote(a);break}case"list":{e+=this.renderer.list(a);break}case"checkbox":{e+=this.renderer.checkbox(a);break}case"html":{e+=this.renderer.html(a);break}case"def":{e+=this.renderer.def(a);break}case"paragraph":{e+=this.renderer.paragraph(a);break}case"text":{e+=this.renderer.text(a);break}default:{let s='Token with "'+a.type+'" type was not found.';if(this.options.silent)return console.error(s),"";throw new Error(s)}}}return e}parseInline(o,e=this.renderer){this.renderer.parser=this;let t="";for(let i=0;i<o.length;i++){let a=o[i];if(this.options.extensions?.renderers?.[a.type]){let d=this.options.extensions.renderers[a.type].call({parser:this},a);if(d!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(a.type)){t+=d||"";continue}}let s=a;switch(s.type){case"escape":{t+=e.text(s);break}case"html":{t+=e.html(s);break}case"link":{t+=e.link(s);break}case"image":{t+=e.image(s);break}case"checkbox":{t+=e.checkbox(s);break}case"strong":{t+=e.strong(s);break}case"em":{t+=e.em(s);break}case"codespan":{t+=e.codespan(s);break}case"br":{t+=e.br(s);break}case"del":{t+=e.del(s);break}case"text":{t+=e.text(s);break}default:{let d='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(d),"";throw new Error(d)}}}return t}},gv=class{options;block;constructor(n){this.options=n||Eu}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens","emStrongMask"]);static passThroughHooksRespectAsync=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(n){return n}postprocess(n){return n}processAllTokens(n){return n}emStrongMask(n){return n}provideLexer(){return this.block?fc.lex:fc.lexInline}provideParser(){return this.block?vc.parse:vc.parseInline}},yde=class{defaults=FE();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=vc;Renderer=Ym;TextRenderer=HE;Lexer=fc;Tokenizer=ay;Hooks=gv;constructor(...n){this.use(...n)}walkTokens(n,o){let e=[];for(let t of n)switch(e=e.concat(o.call(this,t)),t.type){case"table":{let i=t;for(let a of i.header)e=e.concat(this.walkTokens(a.tokens,o));for(let a of i.rows)for(let s of a)e=e.concat(this.walkTokens(s.tokens,o));break}case"list":{let i=t;e=e.concat(this.walkTokens(i.items,o));break}default:{let i=t;this.defaults.extensions?.childTokens?.[i.type]?this.defaults.extensions.childTokens[i.type].forEach(a=>{let s=i[a].flat(1/0);e=e.concat(this.walkTokens(s,o))}):i.tokens&&(e=e.concat(this.walkTokens(i.tokens,o)))}}return e}use(...n){let o=this.defaults.extensions||{renderers:{},childTokens:{}};return n.forEach(e=>{let t=q({},e);if(t.async=this.defaults.async||t.async||!1,e.extensions&&(e.extensions.forEach(i=>{if(!i.name)throw new Error("extension name required");if("renderer"in i){let a=o.renderers[i.name];a?o.renderers[i.name]=function(...s){let d=i.renderer.apply(this,s);return d===!1&&(d=a.apply(this,s)),d}:o.renderers[i.name]=i.renderer}if("tokenizer"in i){if(!i.level||i.level!=="block"&&i.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let a=o[i.level];a?a.unshift(i.tokenizer):o[i.level]=[i.tokenizer],i.start&&(i.level==="block"?o.startBlock?o.startBlock.push(i.start):o.startBlock=[i.start]:i.level==="inline"&&(o.startInline?o.startInline.push(i.start):o.startInline=[i.start]))}"childTokens"in i&&i.childTokens&&(o.childTokens[i.name]=i.childTokens)}),t.extensions=o),e.renderer){let i=this.defaults.renderer||new Ym(this.defaults);for(let a in e.renderer){if(!(a in i))throw new Error(`renderer '${a}' does not exist`);if(["options","parser"].includes(a))continue;let s=a,d=e.renderer[s],p=i[s];i[s]=(...u)=>{let g=d.apply(i,u);return g===!1&&(g=p.apply(i,u)),g||""}}t.renderer=i}if(e.tokenizer){let i=this.defaults.tokenizer||new ay(this.defaults);for(let a in e.tokenizer){if(!(a in i))throw new Error(`tokenizer '${a}' does not exist`);if(["options","rules","lexer"].includes(a))continue;let s=a,d=e.tokenizer[s],p=i[s];i[s]=(...u)=>{let g=d.apply(i,u);return g===!1&&(g=p.apply(i,u)),g}}t.tokenizer=i}if(e.hooks){let i=this.defaults.hooks||new gv;for(let a in e.hooks){if(!(a in i))throw new Error(`hook '${a}' does not exist`);if(["options","block"].includes(a))continue;let s=a,d=e.hooks[s],p=i[s];gv.passThroughHooks.has(a)?i[s]=u=>{if(this.defaults.async&&gv.passThroughHooksRespectAsync.has(a))return(async()=>{let C=await d.call(i,u);return p.call(i,C)})();let g=d.call(i,u);return p.call(i,g)}:i[s]=(...u)=>{if(this.defaults.async)return(async()=>{let C=await d.apply(i,u);return C===!1&&(C=await p.apply(i,u)),C})();let g=d.apply(i,u);return g===!1&&(g=p.apply(i,u)),g}}t.hooks=i}if(e.walkTokens){let i=this.defaults.walkTokens,a=e.walkTokens;t.walkTokens=function(s){let d=[];return d.push(a.call(this,s)),i&&(d=d.concat(i.call(this,s))),d}}this.defaults=q(q({},this.defaults),t)}),this}setOptions(n){return this.defaults=q(q({},this.defaults),n),this}lexer(n,o){return fc.lex(n,o??this.defaults)}parser(n,o){return vc.parse(n,o??this.defaults)}parseMarkdown(n){return(o,e)=>{let t=q({},e),i=q(q({},this.defaults),t),a=this.onError(!!i.silent,!!i.async);if(this.defaults.async===!0&&t.async===!1)return a(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof o>"u"||o===null)return a(new Error("marked(): input parameter is undefined or null"));if(typeof o!="string")return a(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(o)+", string expected"));if(i.hooks&&(i.hooks.options=i,i.hooks.block=n),i.async)return(async()=>{let s=i.hooks?await i.hooks.preprocess(o):o,d=await(i.hooks?await i.hooks.provideLexer():n?fc.lex:fc.lexInline)(s,i),p=i.hooks?await i.hooks.processAllTokens(d):d;i.walkTokens&&await Promise.all(this.walkTokens(p,i.walkTokens));let u=await(i.hooks?await i.hooks.provideParser():n?vc.parse:vc.parseInline)(p,i);return i.hooks?await i.hooks.postprocess(u):u})().catch(a);try{i.hooks&&(o=i.hooks.preprocess(o));let s=(i.hooks?i.hooks.provideLexer():n?fc.lex:fc.lexInline)(o,i);i.hooks&&(s=i.hooks.processAllTokens(s)),i.walkTokens&&this.walkTokens(s,i.walkTokens);let d=(i.hooks?i.hooks.provideParser():n?vc.parse:vc.parseInline)(s,i);return i.hooks&&(d=i.hooks.postprocess(d)),d}catch(s){return a(s)}}}onError(n,o){return e=>{if(e.message+=`
|
||
Please report this to https://github.com/markedjs/marked.`,n){let t="<p>An error occurred:</p><pre>"+rd(e.message+"",!0)+"</pre>";return o?Promise.resolve(t):t}if(o)return Promise.reject(e);throw e}}},Tu=new yde;function Ki(n,o){return Tu.parse(n,o)}Ki.options=Ki.setOptions=function(n){return Tu.setOptions(n),Ki.defaults=Tu.defaults,Pz(Ki.defaults),Ki};Ki.getDefaults=FE;Ki.defaults=Eu;Ki.use=function(...n){return Tu.use(...n),Ki.defaults=Tu.defaults,Pz(Ki.defaults),Ki};Ki.walkTokens=function(n,o){return Tu.walkTokens(n,o)};Ki.parseInline=Tu.parseInline;Ki.Parser=vc;Ki.parser=vc.parse;Ki.Renderer=Ym;Ki.TextRenderer=HE;Ki.Lexer=fc;Ki.lexer=fc.lex;Ki.Tokenizer=ay;Ki.Hooks=gv;Ki.parse=Ki;var glt=Ki.options,hlt=Ki.setOptions,_lt=Ki.use,flt=Ki.walkTokens,vlt=Ki.parseInline;var Clt=vc.parse,blt=fc.lex;var wde=["*"],Mde="Copy",Sde="Copied",kde=(()=>{class n{constructor(){this._buttonClick$=new Ye,this.copied=bz(this._buttonClick$.pipe(Dn(()=>ro(Vt(!0),La(3e3).pipe(sf(!1)))),ng(),wd(1))),this.copiedText=Ne(()=>this.copied()?Sde:Mde)}onCopyToClipboardClick(){this._buttonClick$.next()}static{this.\u0275fac=function(t){return new(t||n)}}static{this.\u0275cmp=V({type:n,selectors:[["markdown-clipboard"]],decls:2,vars:3,consts:[[1,"markdown-clipboard-button",3,"click"]],template:function(t,i){t&1&&(ii(0,"button",0),Tc("click",function(){return i.onCopyToClipboardClick()}),c(1),Si()),t&2&&(ne("copied",i.copied()),m(),N(i.copiedText()))},encapsulation:2,changeDetection:0})}}return n})(),Pde=new mn("CLIPBOARD_OPTIONS");var Tde=new mn("MARKED_EXTENSIONS"),Ede=new mn("MARKED_OPTIONS"),Ode=new mn("MERMAID_OPTIONS"),Dde=new mn("SANITIZE");function Ide(n){return typeof n=="function"}var Ade="[ngx-markdown] When using the `emoji` attribute you *have to* include Emoji-Toolkit files to `angular.json` or use imports. See README for more information",Nde="[ngx-markdown] When using the `katex` attribute you *have to* include KaTeX files to `angular.json` or use imports. See README for more information",Fde="[ngx-markdown] When using the `mermaid` attribute you *have to* include Mermaid files to `angular.json` or use imports. See README for more information",Rde="[ngx-markdown] When using the `clipboard` attribute you *have to* include Clipboard files to `angular.json` or use imports. See README for more information",zde="[ngx-markdown] When using the `clipboard` attribute you *have to* provide the `viewContainerRef` parameter to `MarkdownService.render()` function",Lde="[ngx-markdown] When using the `src` attribute you *have to* pass the `HttpClient` as a parameter of the `forRoot` method. See README for more information";var zz=(()=>{class n{get options(){return this._options}set options(e){this._options=q(q({},this.DEFAULT_MARKED_OPTIONS),e)}get renderer(){return this.options.renderer}set renderer(e){this.options.renderer=e}constructor(){this.clipboardOptions=f(Pde,{optional:!0}),this.extensions=f(Tde,{optional:!0}),this.http=f(us,{optional:!0}),this.mermaidOptions=f(Ode,{optional:!0}),this.platform=f(IC),this.sanitize=f(Dde,{optional:!0}),this.sanitizer=f(Pr),this.DEFAULT_MARKED_OPTIONS={renderer:new Ym},this.DEFAULT_KATEX_OPTIONS={delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1},{left:"\\(",right:"\\)",display:!1},{left:"\\begin{equation}",right:"\\end{equation}",display:!0},{left:"\\begin{align}",right:"\\end{align}",display:!0},{left:"\\begin{alignat}",right:"\\end{alignat}",display:!0},{left:"\\begin{gather}",right:"\\end{gather}",display:!0},{left:"\\begin{CD}",right:"\\end{CD}",display:!0},{left:"\\[",right:"\\]",display:!0}]},this.DEFAULT_MERMAID_OPTIONS={startOnLoad:!1},this.DEFAULT_CLIPBOARD_OPTIONS={buttonComponent:void 0},this.DEFAULT_PARSE_OPTIONS={decodeHtml:!1,inline:!1,emoji:!1,mermaid:!1,markedOptions:void 0,disableSanitizer:!1},this.DEFAULT_RENDER_OPTIONS={clipboard:!1,clipboardOptions:void 0,katex:!1,katexOptions:void 0,mermaid:!1,mermaidOptions:void 0},this.DEFAULT_SECURITY_CONTEXT=Vk.HTML,this._options=null,this._reload$=new Ye,this.reload$=this._reload$.asObservable(),this.options=f(Ede,{optional:!0})}parse(e,t=this.DEFAULT_PARSE_OPTIONS){let{decodeHtml:i,inline:a,emoji:s,mermaid:d,disableSanitizer:p}=t,u=q(q({},this.options),t.markedOptions),g=u.renderer||this.renderer||new Ym;this.extensions&&(this.renderer=this.extendsRendererForExtensions(g)),d&&(this.renderer=this.extendsRendererForMermaid(g));let C=this.trimIndentation(e),M=i?this.decodeHtml(C):C,x=s?this.parseEmoji(M):M,b=this.parseMarked(x,u,a);return p?b:this.sanitizeHtml(b)}render(e,t=this.DEFAULT_RENDER_OPTIONS,i){let{clipboard:a,clipboardOptions:s,katex:d,katexOptions:p,mermaid:u,mermaidOptions:g}=t;d&&this.renderKatex(e,q(q({},this.DEFAULT_KATEX_OPTIONS),p)),u&&this.renderMermaid(e,q(q(q({},this.DEFAULT_MERMAID_OPTIONS),this.mermaidOptions),g)),a&&this.renderClipboard(e,i,q(q(q({},this.DEFAULT_CLIPBOARD_OPTIONS),this.clipboardOptions),s)),this.highlight(e)}reload(){this._reload$.next()}getSource(e){if(!this.http)throw new Error(Lde);return this.http.get(e,{responseType:"text"}).pipe(Pt(t=>this.handleExtension(e,t)))}highlight(e){if(!nc(this.platform)||typeof Prism>"u"||typeof Prism.highlightAllUnder>"u")return;e||(e=document);let t=e.querySelectorAll('pre code:not([class*="language-"])');Array.prototype.forEach.call(t,i=>i.classList.add("language-none")),Prism.highlightAllUnder(e)}decodeHtml(e){if(!nc(this.platform))return e;let t=document.createElement("textarea");return t.innerHTML=e,t.value}extendsRendererForExtensions(e){let t=e;return t.\u0275NgxMarkdownRendererExtendedForExtensions===!0||(this.extensions&&this.extensions.length>0&&Ki.use(...this.extensions),t.\u0275NgxMarkdownRendererExtendedForExtensions=!0),e}extendsRendererForMermaid(e){let t=e;if(t.\u0275NgxMarkdownRendererExtendedForMermaid===!0)return e;let i=e.code;return e.code=a=>a.lang==="mermaid"?`<div class="mermaid">${a.text}</div>`:i(a),t.\u0275NgxMarkdownRendererExtendedForMermaid=!0,e}handleExtension(e,t){let i=e.lastIndexOf("://"),a=i>-1?e.substring(i+4):e,s=a.lastIndexOf("/"),d=s>-1?a.substring(s+1).split("?")[0]:"",p=d.lastIndexOf("."),u=p>-1?d.substring(p+1):"";return u&&u!=="md"?"```"+u+`
|
||
`+t+"\n```":t}parseMarked(e,t,i=!1){if(t.renderer){let a=q({},t.renderer);delete a.\u0275NgxMarkdownRendererExtendedForExtensions,delete a.\u0275NgxMarkdownRendererExtendedForMermaid,delete t.renderer,Ki.use({renderer:a})}return i?Ki.parseInline(e,t):Ki.parse(e,t)}parseEmoji(e){if(!nc(this.platform))return e;if(typeof joypixels>"u"||typeof joypixels.shortnameToUnicode>"u")throw new Error(Ade);return joypixels.shortnameToUnicode(e)}renderKatex(e,t){if(nc(this.platform)){if(typeof katex>"u"||typeof renderMathInElement>"u")throw new Error(Nde);renderMathInElement(e,t)}}renderClipboard(e,t,i){if(!nc(this.platform))return;if(typeof ClipboardJS>"u")throw new Error(Rde);if(!t)throw new Error(zde);let{buttonComponent:a,buttonTemplate:s}=i,d=e.querySelectorAll("pre");for(let p=0;p<d.length;p++){let u=d.item(p),g=document.createElement("div");g.style.position="relative",u.parentNode.insertBefore(g,u),g.appendChild(u);let C=document.createElement("div");C.classList.add("markdown-clipboard-toolbar"),C.style.position="absolute",C.style.top=".5em",C.style.right=".5em",C.style.zIndex="1",g.insertAdjacentElement("beforeend",C),g.onmouseenter=()=>C.classList.add("hover"),g.onmouseleave=()=>C.classList.remove("hover");let M;if(a){let b=t.createComponent(a);M=b.hostView,b.changeDetectorRef.markForCheck()}else if(s)M=t.createEmbeddedView(s);else{let b=t.createComponent(kde);M=b.hostView,b.changeDetectorRef.markForCheck()}let x;M.rootNodes.forEach(b=>{C.appendChild(b),x=new ClipboardJS(b,{text:()=>u.innerText})}),M.onDestroy(()=>x.destroy())}}renderMermaid(e,t=this.DEFAULT_MERMAID_OPTIONS){if(!nc(this.platform))return;if(typeof mermaid>"u"||typeof mermaid.initialize>"u")throw new Error(Fde);let i=e.querySelectorAll(".mermaid");i.length!==0&&(mermaid.initialize(t),mermaid.run({nodes:i}))}trimIndentation(e){if(!e)return"";let t;return e.split(`
|
||
`).map(i=>{let a=t;return i.length>0&&(a=isNaN(a)?i.search(/\S|$/):Math.min(i.search(/\S|$/),a)),isNaN(t)&&(t=a),a?i.substring(a):i}).join(`
|
||
`)}async sanitizeHtml(e){return Ide(this.sanitize)?this.sanitize(await e):this.sanitize!==Vk.NONE?this.sanitizer.sanitize(this.sanitize??this.DEFAULT_SECURITY_CONTEXT,e)??"":e}static{this.\u0275fac=function(t){return new(t||n)}}static{this.\u0275prov=J({token:n,factory:n.\u0275fac})}}return n})(),UE=(function(n){return n.CommandLine="command-line",n.LineHighlight="line-highlight",n.LineNumbers="line-numbers",n})(UE||{}),Lz=(()=>{class n{constructor(){this.element=f(Kt),this.markdownService=f(zz),this.viewContainerRef=f(Wo),this.error=new be,this.load=new be,this.ready=new be,this._clipboard=!1,this._commandLine=!1,this._disableSanitizer=!1,this._emoji=!1,this._inline=!1,this._katex=!1,this._lineHighlight=!1,this._lineNumbers=!1,this._mermaid=!1,this.destroyed$=new Ye}get disableSanitizer(){return this._disableSanitizer}set disableSanitizer(e){this._disableSanitizer=this.coerceBooleanProperty(e)}get inline(){return this._inline}set inline(e){this._inline=this.coerceBooleanProperty(e)}get clipboard(){return this._clipboard}set clipboard(e){this._clipboard=this.coerceBooleanProperty(e)}get emoji(){return this._emoji}set emoji(e){this._emoji=this.coerceBooleanProperty(e)}get katex(){return this._katex}set katex(e){this._katex=this.coerceBooleanProperty(e)}get mermaid(){return this._mermaid}set mermaid(e){this._mermaid=this.coerceBooleanProperty(e)}get lineHighlight(){return this._lineHighlight}set lineHighlight(e){this._lineHighlight=this.coerceBooleanProperty(e)}get lineNumbers(){return this._lineNumbers}set lineNumbers(e){this._lineNumbers=this.coerceBooleanProperty(e)}get commandLine(){return this._commandLine}set commandLine(e){this._commandLine=this.coerceBooleanProperty(e)}ngOnChanges(){this.loadContent()}loadContent(){if(this.data!=null){this.handleData();return}if(this.src!=null){this.handleSrc();return}}ngAfterViewInit(){!this.data&&!this.src&&this.handleTransclusion(),this.markdownService.reload$.pipe(He(this.destroyed$)).subscribe(()=>this.loadContent())}ngOnDestroy(){this.destroyed$.next(),this.destroyed$.complete()}async render(e,t=!1){let i={decodeHtml:t,inline:this.inline,emoji:this.emoji,mermaid:this.mermaid,disableSanitizer:this.disableSanitizer},a={clipboard:this.clipboard,clipboardOptions:this.getClipboardOptions(),katex:this.katex,katexOptions:this.katexOptions,mermaid:this.mermaid,mermaidOptions:this.mermaidOptions},s=await this.markdownService.parse(e,i);this.element.nativeElement.innerHTML=s,this.handlePlugins(),this.markdownService.render(this.element.nativeElement,a,this.viewContainerRef),this.ready.emit()}coerceBooleanProperty(e){return e!=null&&`${String(e)}`!="false"}getClipboardOptions(){if(this.clipboardButtonComponent||this.clipboardButtonTemplate)return{buttonComponent:this.clipboardButtonComponent,buttonTemplate:this.clipboardButtonTemplate}}handleData(){this.render(this.data)}handleSrc(){this.markdownService.getSource(this.src).subscribe({next:e=>{this.render(e).then(()=>{this.load.emit(e)})},error:e=>this.error.emit(e)})}handleTransclusion(){this.render(this.element.nativeElement.innerHTML,!0)}handlePlugins(){this.commandLine&&(this.setPluginClass(this.element.nativeElement,UE.CommandLine),this.setPluginOptions(this.element.nativeElement,{dataFilterOutput:this.filterOutput,dataHost:this.host,dataPrompt:this.prompt,dataOutput:this.output,dataUser:this.user})),this.lineHighlight&&this.setPluginOptions(this.element.nativeElement,{dataLine:this.line,dataLineOffset:this.lineOffset}),this.lineNumbers&&(this.setPluginClass(this.element.nativeElement,UE.LineNumbers),this.setPluginOptions(this.element.nativeElement,{dataStart:this.start}))}setPluginClass(e,t){let i=e.querySelectorAll("pre");for(let a=0;a<i.length;a++){let s=t instanceof Array?t:[t];i.item(a).classList.add(...s)}}setPluginOptions(e,t){let i=e.querySelectorAll("pre");for(let a=0;a<i.length;a++)Object.keys(t).forEach(s=>{let d=t[s];if(d){let p=this.toLispCase(s);i.item(a).setAttribute(p,d.toString())}})}toLispCase(e){let t=e.match(/([A-Z])/g);if(!t)return e;let i=e.toString();for(let a=0,s=t.length;a<s;a++)i=i.replace(new RegExp(t[a]),"-"+t[a].toLowerCase());return i.slice(0,1)==="-"&&(i=i.slice(1)),i}static{this.\u0275fac=function(t){return new(t||n)}}static{this.\u0275cmp=V({type:n,selectors:[["markdown"],["","markdown",""]],inputs:{data:"data",src:"src",disableSanitizer:"disableSanitizer",inline:"inline",clipboard:"clipboard",clipboardButtonComponent:"clipboardButtonComponent",clipboardButtonTemplate:"clipboardButtonTemplate",emoji:"emoji",katex:"katex",katexOptions:"katexOptions",mermaid:"mermaid",mermaidOptions:"mermaidOptions",lineHighlight:"lineHighlight",line:"line",lineOffset:"lineOffset",lineNumbers:"lineNumbers",start:"start",commandLine:"commandLine",filterOutput:"filterOutput",host:"host",prompt:"prompt",output:"output",user:"user"},outputs:{error:"error",load:"load",ready:"ready"},features:[Nn],ngContentSelectors:wde,decls:1,vars:0,template:function(t,i){t&1&&(pi(),Zt(0))},encapsulation:2})}}return n})();function Vde(n){return[zz,n?.loader??[],n?.clipboardOptions??[],n?.markedOptions??[],n?.mermaidOptions??[],n?.markedExtensions??[],n?.sanitize??[]]}var ly=(()=>{class n{static forRoot(e){return{ngModule:n,providers:[Vde(e)]}}static forChild(){return{ngModule:n}}static{this.\u0275fac=function(t){return new(t||n)}}static{this.\u0275mod=on({type:n})}static{this.\u0275inj=nn({})}}return n})();function jde(n,o){if(n&1&&(r(0,"span",3),c(1),l()),n&2){let e=h();m(),N(e.data.language)}}var Vz=(()=>{class n{dialogRef;data;constructor(e,t){this.dialogRef=e,this.data=t}close(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)(Mt(We),Mt(Wt))};static \u0275cmp=V({type:n,selectors:[["app-code-block-dialog"]],decls:15,vars:2,consts:[["mat-dialog-title","",1,"code-block-dialog__title"],[1,"code-block-dialog__icon"],[1,"code-block-dialog__title-text"],[1,"code-block-dialog__language"],[1,"code-block-dialog__content"],[1,"code-block-dialog__code"],[3,"innerHTML"],["align","end"],["mat-button","",1,"code-block-dialog__close-btn",3,"click"]],template:function(t,i){t&1&&(r(0,"h2",0)(1,"mat-icon",1),c(2,"code"),l(),r(3,"span",2),c(4,"Code Block"),l(),T(5,jde,2,1,"span",3),l(),r(6,"mat-dialog-content",4)(7,"pre",5),L(8,"code",6),l()(),r(9,"mat-dialog-actions",7)(10,"button",8),_("click",function(){return i.close()}),r(11,"mat-icon"),c(12,"close"),l(),r(13,"span"),c(14,"Close"),l()()()),t&2&&(m(5),E(i.data.language?5:-1),m(3),v("innerHTML",i.data.code,lf))},dependencies:[qe,bt,Qe,Y,he,ie,ce],styles:[".code-block-dialog__title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px}.code-block-dialog__icon[_ngcontent-%COMP%]{color:var(--mat-sys-primary);font-size:24px;width:24px;height:24px;flex-shrink:0}.code-block-dialog__title-text[_ngcontent-%COMP%]{font-size:18px;font-weight:500;color:var(--mat-sys-on-surface)}.code-block-dialog__language[_ngcontent-%COMP%]{margin-left:auto;font-size:11px;color:var(--mat-sys-primary);background:var(--mat-sys-primary-container);padding:4px 10px;border-radius:12px;font-weight:500;text-transform:uppercase;letter-spacing:.5px}.code-block-dialog__content[_ngcontent-%COMP%]{padding:0;max-height:70vh;overflow:auto}.code-block-dialog__code[_ngcontent-%COMP%]{display:block;background-color:var(--mat-sys-surface-container-highest);color:var(--mat-sys-on-surface);padding:20px;margin:0;font-size:14px;line-height:1.6;border-radius:0;overflow-x:auto;white-space:pre}.code-block-dialog__code[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{font-family:var(--gns3-font-code);font-size:14px}.code-block-dialog__close-btn[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;color:var(--mat-sys-on-surface-variant);font-weight:500}.code-block-dialog__close-btn[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-surface-container-low);color:var(--mat-sys-on-surface)}.code-block-dialog__close-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px}"],changeDetection:0})}return n})();var Fl=(()=>{class n{data=ee.required();dialog=f(Xe);elementRef=f(Kt);onRenderReady(){this.processCodeBlocks(),this.wrapTables()}processCodeBlocks(){this.elementRef.nativeElement.querySelectorAll("pre").forEach(t=>{if(t.hasAttribute("data-code-processed"))return;let i=t.querySelector("code");if(!i)return;let a=i.textContent?.split(`
|
||
`).length||0;t.setAttribute("data-code-processed","true"),a>50&&(t.classList.add("code-block-collapsible"),t.setAttribute("title",`Click to view full code (${a} lines)`),t.addEventListener("click",s=>{s.preventDefault(),s.stopPropagation(),this.openCodeBlockDialog(i.innerHTML,i.className)}))})}wrapTables(){this.elementRef.nativeElement.querySelectorAll("table").forEach(t=>{if(t.parentElement?.classList.contains("markdown-table-wrapper"))return;let i=document.createElement("div");i.className="markdown-table-wrapper",t.parentNode?.insertBefore(i,t),i.appendChild(t)})}openCodeBlockDialog(e,t){let i=t.match(/language-(\w+)/)?.[1]||void 0,a={code:e,language:i};this.dialog.open(Vz,{data:a,panelClass:["base-dialog-panel","code-block-dialog-panel","dialog-extra-large-panel"]})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-markdown-viewer"]],inputs:{data:[1,"data"]},decls:1,vars:1,consts:[[3,"ready","data"]],template:function(t,i){t&1&&(r(0,"markdown",0),_("ready",function(){return i.onRenderReady()}),l()),t&2&&v("data",i.data())},dependencies:[ly,Lz],styles:["[_nghost-%COMP%]{display:block}"],changeDetection:0})}return n})();var Bz=(()=>{class n{dialogRef;data;fb;form;constructor(e,t,i){this.dialogRef=e,this.data=t,this.fb=i,this.form=this.fb.nonNullable.group({templateName:[`Copy of ${t.templateName}`,Ue.required]})}submit(){this.form.invalid||this.dialogRef.close(this.form.getRawValue().templateName.trim())}cancel(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)(Mt(We),Mt(Wt),Mt(cg))};static \u0275cmp=V({type:n,selectors:[["app-copy-template-dialog"]],decls:15,vars:3,consts:[["mat-dialog-title",""],[1,"copy-template-dialog__hint"],[3,"ngSubmit","formGroup"],[1,"form-field"],["matInput","","type","text","formControlName","templateName","cdkFocusInitial",""],["align","end"],["mat-button","","type","button",3,"click"],["mat-flat-button","","color","primary","type","submit",3,"click","disabled"]],template:function(t,i){t&1&&(r(0,"h2",0),c(1,"Copy template"),l(),r(2,"mat-dialog-content")(3,"p",1),c(4),l(),r(5,"form",2),_("ngSubmit",function(){return i.submit()}),r(6,"mat-form-field",3)(7,"mat-label"),c(8,"Template name"),l(),L(9,"input",4),l()()(),r(10,"mat-dialog-actions",5)(11,"button",6),_("click",function(){return i.cancel()}),c(12,"Cancel"),l(),r(13,"button",7),_("click",function(){return i.submit()}),c(14," Copy template "),l()()),t&2&&(m(4),X(' The copy will inherit all settings from "',i.data.templateName,'". '),m(),v("formGroup",i.form),m(8),v("disabled",i.form.invalid))},dependencies:[ke,qe,Qe,bt,It,Ct,At,Nt,vt,Ut,Yt,we,Pe,Ve,ye,Ee,Y,he],styles:[".copy-template-dialog__hint[_ngcontent-%COMP%]{margin:0 0 14px;color:var(--mat-sys-on-surface-variant);font-size:14px;line-height:1.5}"],changeDetection:0})}return n})();var cy=(()=>{class n{controller=ee(void 0);deleteEvent=new be;templateService=f(fa);dialog=f(Xe);toasterService=f(re);deleteItem(e,t,i){let a=["qemu","dynamips","iou"].includes(i)?{label:"Also delete unused images belonging to this template",checked:!1}:void 0;this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-danger-panel","dialog-small-panel"],autoFocus:".cancel-button",data:{title:"Delete template?",message:`Template "${e}" will be permanently deleted.`,note:"This action cannot be undone.",confirmButtonText:"Delete template",tone:"danger",checkbox:a},disableClose:!0}).afterClosed().subscribe(d=>{d&&this.templateService.deleteTemplate(this.controller(),t,a?.checked??!1).subscribe({next:()=>{this.deleteEvent.emit(t),this.toasterService.success(`Template ${e} deleted.`)},error:p=>{let u=p.error?.message||p.message||"Failed to delete template";this.toasterService.error(u)}})})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-delete-template"]],inputs:{controller:[1,"controller"]},outputs:{deleteEvent:"deleteEvent"},decls:0,vars:0,template:function(t,i){},dependencies:[ke],encapsulation:2,changeDetection:0})}return n})();var $de=n=>["/controller",n,"preferences","new-template"],Hde=n=>["/controller",n,"preferences","qemu","addtemplate"],Ude=n=>["/controller",n,"preferences","docker","addtemplate"],Wde=n=>["/controller",n,"preferences","dynamips","templates","addtemplate"],Gde=n=>["/controller",n,"preferences","iou","addtemplate"],qde=n=>["/controller",n,"preferences","vpcs","addtemplate"],Qde=n=>["/controller",n,"preferences","builtin","ethernet-hubs","addtemplate"],Kde=n=>["/controller",n,"preferences","builtin","ethernet-switches","addtemplate"],Xde=n=>["/controller",n,"preferences","builtin","cloud-nodes","addtemplate"],Yde=(n,o)=>o.template_id;function Zde(n,o){if(n&1){let e=R();r(0,"div",31)(1,"button",32),_("click",function(){y(e);let i=h();return w(i.loadTemplates())}),r(2,"mat-icon"),c(3,"refresh"),l(),c(4," Refresh "),l(),r(5,"button",33)(6,"mat-icon"),c(7,"add"),l(),c(8," Install appliance "),l(),r(9,"button",34)(10,"mat-icon"),c(11,"build"),l(),c(12," Custom template "),r(13,"mat-icon",35),c(14,"arrow_drop_down"),l()()(),r(15,"mat-menu",null,2)(17,"a",36)(18,"mat-icon"),c(19,"memory"),l(),r(20,"span"),c(21,"QEMU VM"),l()(),r(22,"a",36)(23,"mat-icon"),c(24,"deployed_code"),l(),r(25,"span"),c(26,"Docker container"),l()(),r(27,"a",36)(28,"mat-icon"),c(29,"router"),l(),r(30,"span"),c(31,"Dynamips router"),l()(),r(32,"a",36)(33,"mat-icon"),c(34,"lan"),l(),r(35,"span"),c(36,"IOS on Unix"),l()(),r(37,"a",36)(38,"mat-icon"),c(39,"computer"),l(),r(40,"span"),c(41,"VPCS"),l()(),r(42,"button",37)(43,"mat-icon"),c(44,"settings_ethernet"),l(),r(45,"span"),c(46,"Built-in node"),l()()(),r(47,"mat-menu",null,3)(49,"a",36)(50,"mat-icon"),c(51,"device_hub"),l(),r(52,"span"),c(53,"Ethernet hub"),l()(),r(54,"a",36)(55,"mat-icon"),c(56,"settings_ethernet"),l(),r(57,"span"),c(58,"Ethernet switch"),l()(),r(59,"a",36)(60,"mat-icon"),c(61,"cloud"),l(),r(62,"span"),c(63,"Cloud node"),l()()()}if(n&2){let e=Te(16),t=Te(48),i=h();m(5),v("routerLink",tn(11,$de,i.controller.id)),m(4),v("matMenuTriggerFor",e),m(8),v("routerLink",tn(13,Hde,i.controller.id)),m(5),v("routerLink",tn(15,Ude,i.controller.id)),m(5),v("routerLink",tn(17,Wde,i.controller.id)),m(5),v("routerLink",tn(19,Gde,i.controller.id)),m(5),v("routerLink",tn(21,qde,i.controller.id)),m(5),v("matMenuTriggerFor",t),m(7),v("routerLink",tn(23,Qde,i.controller.id)),m(5),v("routerLink",tn(25,Kde,i.controller.id)),m(5),v("routerLink",tn(27,Xde,i.controller.id))}}function Jde(n,o){if(n&1&&(r(0,"mat-option",19),c(1),l()),n&2){let e=o.$implicit,t=h();v("value",e),m(),N(t.templateTypeLabel(e))}}function eme(n,o){n&1&&(r(0,"div",29),L(1,"mat-progress-spinner",38),r(2,"span"),c(3,"Loading templates\u2026"),l()())}function tme(n,o){n&1&&(r(0,"mat-header-cell",55),c(1,"Name"),l())}function nme(n,o){if(n&1&&L(0,"img",58),n&2){let e=h().$implicit;v("src",o,Ba)("alt",e.name+" symbol")}}function ime(n,o){if(n&1&&(r(0,"mat-icon"),c(1),l()),n&2){let e=h().$implicit,t=h(3);m(),N(t.templateTypeIcon(e.template_type))}}function ome(n,o){if(n&1&&(r(0,"mat-cell")(1,"div",56)(2,"span",57),T(3,nme,1,2,"img",58)(4,ime,2,1,"mat-icon"),l(),r(5,"span",59)(6,"strong"),c(7),l()()()()),n&2){let e,t=o.$implicit,i=h(3);m(3),E((e=i.getSymbolSource(t))?3:4,e),m(4),N(t.name)}}function ame(n,o){n&1&&(r(0,"mat-header-cell",55),c(1,"Type"),l())}function rme(n,o){if(n&1&&(r(0,"mat-cell")(1,"span",60),c(2),l()()),n&2){let e=o.$implicit,t=h(3);m(),v("ngClass",t.typeBadgeClass(e.template_type)),m(),N(t.templateTypeLabel(e.template_type))}}function sme(n,o){n&1&&(r(0,"mat-header-cell",55),c(1,"Category"),l())}function lme(n,o){if(n&1&&(r(0,"mat-cell"),c(1),l()),n&2){let e=o.$implicit;m(),N(e.category||"Uncategorized")}}function cme(n,o){n&1&&(r(0,"mat-header-cell",55),c(1,"Compute"),l())}function dme(n,o){if(n&1&&(r(0,"mat-cell"),c(1),l()),n&2){let e=o.$implicit;m(),N(e.compute_id||"local")}}function mme(n,o){n&1&&(r(0,"mat-header-cell"),c(1,"Source"),l())}function pme(n,o){if(n&1&&(r(0,"mat-cell")(1,"span",61),c(2),l()()),n&2){let e=o.$implicit;m(),ne("templates-page__source-badge--builtin",e.builtin),m(),X(" ",e.builtin?"Built-in":"Custom"," ")}}function ume(n,o){n&1&&(r(0,"mat-header-cell"),c(1,"Actions"),l())}function gme(n,o){if(n&1){let e=R();r(0,"button",67),_("click",function(i){y(e);let a=h().$implicit,s=h(3);return i.stopPropagation(),w(s.configureTemplate(a))}),r(1,"mat-icon"),c(2,"edit"),l()()}if(n&2){let e=h().$implicit;Ce("aria-label","Configure "+e.name)}}function hme(n,o){if(n&1){let e=R();r(0,"button",68),_("click",function(i){y(e);let a=h().$implicit,s=h(3);return i.stopPropagation(),w(s.duplicateTemplate(a))}),r(1,"mat-icon"),c(2,"content_copy"),l()()}if(n&2){let e=h().$implicit;Ce("aria-label","Duplicate "+e.name)}}function _me(n,o){if(n&1){let e=R();r(0,"button",69),_("click",function(i){y(e);let a=h().$implicit,s=h(3),d=Te(60);return i.stopPropagation(),w(s.deleteTemplate(a,d))}),r(1,"mat-icon"),c(2,"delete"),l()()}if(n&2){let e=h().$implicit;Ce("aria-label","Delete "+e.name)}}function fme(n,o){if(n&1){let e=R();r(0,"mat-cell")(1,"div",62)(2,"button",63),_("click",function(i){let a=y(e).$implicit,s=h(3);return i.stopPropagation(),w(s.selectTemplate(a))}),r(3,"mat-icon"),c(4,"info"),l()(),T(5,gme,3,1,"button",64),T(6,hme,3,1,"button",65),T(7,_me,3,1,"button",66),l()()}if(n&2){let e=o.$implicit,t=h(3);m(2),Ce("aria-label","View details for "+e.name),m(3),E(t.canConfigure(e)?5:-1),m(),E(t.canDuplicate(e)?6:-1),m(),E(e.builtin?-1:7)}}function vme(n,o){n&1&&L(0,"mat-header-row")}function Cme(n,o){if(n&1){let e=R();r(0,"mat-row",70),_("click",function(){let i=y(e).$implicit,a=h(3);return w(a.selectTemplate(i))}),l()}if(n&2){let e,t=o.$implicit,i=h(3);ne("templates-page__row--selected",((e=i.selectedTemplate())==null?null:e.template_id)===t.template_id)}}function bme(n,o){if(n&1){let e=R();r(0,"div",54)(1,"mat-paginator",71),_("page",function(i){y(e);let a=h(3);return w(a.onPageChange(i))}),l()()}if(n&2){let e=h(3);m(),v("length",e.filteredTemplates().length)("pageIndex",e.pageIndex())("pageSize",e.pageSize())("pageSizeOptions",e.pageSizeOptions)}}function xme(n,o){n&1&&li(0)}function yme(n,o){if(n&1&&se(0,xme,1,0,"ng-container",72),n&2){h(3);let e=Te(58);v("ngTemplateOutlet",e)}}function wme(n,o){if(n&1){let e=R();r(0,"div",39)(1,"mat-table",42),_("matSortChange",function(i){y(e);let a=h(2);return w(a.onSortChange(i))}),Fe(2,43),se(3,tme,2,0,"mat-header-cell",44)(4,ome,8,2,"mat-cell",45),Re(),Fe(5,46),se(6,ame,2,0,"mat-header-cell",44)(7,rme,3,2,"mat-cell",45),Re(),Fe(8,47),se(9,sme,2,0,"mat-header-cell",44)(10,lme,2,1,"mat-cell",45),Re(),Fe(11,48),se(12,cme,2,0,"mat-header-cell",44)(13,dme,2,1,"mat-cell",45),Re(),Fe(14,49),se(15,mme,2,0,"mat-header-cell",50)(16,pme,3,3,"mat-cell",45),Re(),Fe(17,51),se(18,ume,2,0,"mat-header-cell",50)(19,fme,8,4,"mat-cell",45),Re(),se(20,vme,1,0,"mat-header-row",52)(21,Cme,1,2,"mat-row",53),l(),T(22,bme,2,4,"div",54)(23,yme,1,1,"ng-container"),l()}if(n&2){let e=h(2);m(),v("dataSource",e.paginatedTemplates())("trackBy",e.trackTemplate)("matSortActive",e.sortActive())("matSortDirection",e.sortDirection()),m(19),v("matHeaderRowDef",e.displayedColumns)("matHeaderRowDefSticky",!0),m(),v("matRowDefColumns",e.displayedColumns),m(),E(e.filteredTemplates().length?22:23)}}function Mme(n,o){if(n&1&&L(0,"img",58),n&2){let e=h().$implicit;v("src",o,Ba)("alt",e.name+" symbol")}}function Sme(n,o){if(n&1&&(r(0,"mat-icon"),c(1),l()),n&2){let e=h().$implicit,t=h(3);m(),N(t.templateTypeIcon(e.template_type))}}function kme(n,o){if(n&1&&(r(0,"span",84),c(1),l()),n&2){let e=o.$implicit;m(),N(e)}}function Pme(n,o){if(n&1&&(r(0,"div",81)(1,"dt"),c(2,"Tags"),l(),r(3,"dd",83),Q(4,kme,2,1,"span",84,Oe),l()()),n&2){let e=h().$implicit;m(4),K(e.tags)}}function Tme(n,o){if(n&1){let e=R();r(0,"button",67),_("click",function(i){y(e);let a=h().$implicit,s=h(3);return i.stopPropagation(),w(s.configureTemplate(a))}),r(1,"mat-icon"),c(2,"edit"),l()()}if(n&2){let e=h().$implicit;Ce("aria-label","Configure "+e.name)}}function Eme(n,o){if(n&1){let e=R();r(0,"button",68),_("click",function(i){y(e);let a=h().$implicit,s=h(3);return i.stopPropagation(),w(s.duplicateTemplate(a))}),r(1,"mat-icon"),c(2,"content_copy"),l()()}if(n&2){let e=h().$implicit;Ce("aria-label","Duplicate "+e.name)}}function Ome(n,o){if(n&1){let e=R();r(0,"button",69),_("click",function(i){y(e);let a=h().$implicit,s=h(3),d=Te(60);return i.stopPropagation(),w(s.deleteTemplate(a,d))}),r(1,"mat-icon"),c(2,"delete"),l()()}if(n&2){let e=h().$implicit;Ce("aria-label","Delete "+e.name)}}function Dme(n,o){if(n&1){let e=R();r(0,"article",76),_("click",function(){let i=y(e).$implicit,a=h(3);return w(a.selectTemplate(i))}),r(1,"div",77)(2,"span",78),T(3,Mme,1,2,"img",58)(4,Sme,2,1,"mat-icon"),l(),r(5,"span",61),c(6),l()(),r(7,"div",79)(8,"h3",80),c(9),l(),r(10,"span",60),c(11),l(),r(12,"dl"),T(13,Pme,6,0,"div",81),r(14,"div")(15,"dt"),c(16,"Category"),l(),r(17,"dd"),c(18),l()(),r(19,"div")(20,"dt"),c(21,"Compute"),l(),r(22,"dd"),c(23),l()(),r(24,"div")(25,"dt"),c(26,"Resources"),l(),r(27,"dd",80),c(28),l()()()(),r(29,"div",82)(30,"button",63),_("click",function(i){let a=y(e).$implicit,s=h(3);return i.stopPropagation(),w(s.selectTemplate(a))}),r(31,"mat-icon"),c(32,"info"),l()(),T(33,Tme,3,1,"button",64),T(34,Eme,3,1,"button",65),T(35,Ome,3,1,"button",66),l()()}if(n&2){let e,t,i=o.$implicit,a=h(3);ne("templates-page__card--selected",((e=a.selectedTemplate())==null?null:e.template_id)===i.template_id),m(3),E((t=a.getSymbolSource(i))?3:4,t),m(2),ne("templates-page__source-badge--builtin",i.builtin),m(),X(" ",i.builtin?"Built-in":"Custom"," "),m(2),v("matTooltip",i.name),m(),N(i.name),m(),v("ngClass",a.typeBadgeClass(i.template_type)),m(),N(a.templateTypeLabel(i.template_type)),m(2),E(i.tags!=null&&i.tags.length?13:-1),m(5),N(i.category||"Uncategorized"),m(5),N(i.compute_id||"local"),m(4),v("matTooltip",a.getResourceSummary(i)),m(),N(a.getResourceSummary(i)),m(2),Ce("aria-label","View details for "+i.name),m(3),E(a.canConfigure(i)?33:-1),m(),E(a.canDuplicate(i)?34:-1),m(),E(i.builtin?-1:35)}}function Ime(n,o){n&1&&li(0)}function Ame(n,o){if(n&1&&se(0,Ime,1,0,"ng-container",72),n&2){h(3);let e=Te(58);v("ngTemplateOutlet",e)}}function Nme(n,o){if(n&1){let e=R();r(0,"mat-paginator",85),_("page",function(i){y(e);let a=h(3);return w(a.onPageChange(i))}),l()}if(n&2){let e=h(3);v("length",e.filteredTemplates().length)("pageIndex",e.pageIndex())("pageSize",e.pageSize())("pageSizeOptions",e.pageSizeOptions)}}function Fme(n,o){if(n&1&&(r(0,"div",73),Q(1,Dme,36,19,"article",74,Yde,!1,Ame,1,1,"ng-container"),T(4,Nme,1,4,"mat-paginator",75),l()),n&2){let e=h(2);ne("templates-page__grid--with-details",e.selectedTemplate()),m(),K(e.paginatedTemplates()),m(3),E(e.filteredTemplates().length?4:-1)}}function Rme(n,o){if(n&1&&L(0,"img",58),n&2){let e=h();v("src",o,Ba)("alt",e.name+" symbol")}}function zme(n,o){if(n&1&&(r(0,"mat-icon"),c(1),l()),n&2){let e=h(),t=h(2);m(),N(t.templateTypeIcon(e.template_type))}}function Lme(n,o){if(n&1&&(r(0,"section",91)(1,"span"),c(2,"Description"),l(),L(3,"app-markdown-viewer",98),l()),n&2){let e=h();m(3),v("data",e.usage)}}function Vme(n,o){if(n&1&&(r(0,"div",92)(1,"mat-icon"),c(2,"account_tree"),l(),r(3,"span"),c(4,"Node type"),l(),r(5,"strong"),c(6),l()()),n&2){let e=h();m(6),N(e.node_type)}}function Bme(n,o){if(n&1&&(r(0,"div",92)(1,"mat-icon"),c(2,"terminal"),l(),r(3,"span"),c(4,"Console"),l(),r(5,"strong"),c(6),l()()),n&2){let e=h();m(6),N(e.console_type)}}function jme(n,o){n&1&&(r(0,"div",94)(1,"mat-icon"),c(2,"hard_drive"),l(),r(3,"span"),c(4,"Image"),l(),r(5,"strong",95),c(6),l()()),n&2&&(m(6),N(o))}function $me(n,o){if(n&1&&(r(0,"span",84),c(1),l()),n&2){let e=o.$implicit;m(),N(e)}}function Hme(n,o){if(n&1&&(r(0,"div",96)(1,"mat-icon"),c(2,"sell"),l(),r(3,"span"),c(4,"Tags"),l(),r(5,"div",99),Q(6,$me,2,1,"span",84,Oe),l()()),n&2){let e=h();m(6),K(e.tags)}}function Ume(n,o){if(n&1){let e=R();r(0,"button",103),_("click",function(){y(e);let i=h(2),a=h(2);return w(a.configureTemplate(i))}),r(1,"mat-icon"),c(2,"edit"),l(),c(3," Configure "),l()}}function Wme(n,o){if(n&1){let e=R();r(0,"button",104),_("click",function(){y(e);let i=h(2),a=h(2);return w(a.duplicateTemplate(i))}),r(1,"mat-icon"),c(2,"content_copy"),l(),c(3," Duplicate "),l()}}function Gme(n,o){if(n&1){let e=R();r(0,"div",97),T(1,Ume,4,0,"button",100),T(2,Wme,4,0,"button",101),r(3,"button",102),_("click",function(){y(e);let i=h(),a=h(2),s=Te(60);return w(a.deleteTemplate(i,s))}),r(4,"mat-icon"),c(5,"delete"),l(),c(6," Delete "),l()()}if(n&2){let e=h(),t=h(2);m(),E(t.canConfigure(e)?1:-1),m(),E(t.canDuplicate(e)?2:-1)}}function qme(n,o){if(n&1){let e=R();r(0,"aside",41)(1,"div",86)(2,"div",87)(3,"span",57),T(4,Rme,1,2,"img",58)(5,zme,2,1,"mat-icon"),l(),r(6,"div",88)(7,"h2",80),c(8),l(),r(9,"span",60),c(10),l()()(),r(11,"button",89),_("click",function(){y(e);let i=h(2);return w(i.closeDetails())}),r(12,"mat-icon"),c(13,"close"),l()()(),r(14,"div",90),T(15,Lme,4,1,"section",91),r(16,"div",92)(17,"mat-icon"),c(18,"category"),l(),r(19,"span"),c(20,"Category"),l(),r(21,"strong"),c(22),l()(),r(23,"div",92)(24,"mat-icon"),c(25,"dns"),l(),r(26,"span"),c(27,"Compute"),l(),r(28,"strong"),c(29),l()(),r(30,"div",92)(31,"mat-icon"),c(32,"badge"),l(),r(33,"span"),c(34,"Source"),l(),r(35,"strong"),c(36),l()(),r(37,"div",92)(38,"mat-icon"),c(39,"drive_file_rename_outline"),l(),r(40,"span"),c(41,"Name format"),l(),r(42,"strong",93),c(43),l()(),T(44,Vme,7,1,"div",92),T(45,Bme,7,1,"div",92),r(46,"div",92)(47,"mat-icon"),c(48,"memory"),l(),r(49,"span"),c(50,"Resources"),l(),r(51,"strong"),c(52),l()(),T(53,jme,7,1,"div",94),r(54,"div",94)(55,"mat-icon"),c(56,"image"),l(),r(57,"span"),c(58,"Symbol"),l(),r(59,"strong",95),c(60),l()(),r(61,"div",94)(62,"mat-icon"),c(63,"fingerprint"),l(),r(64,"span"),c(65,"Template ID"),l(),r(66,"strong",93),c(67),l()(),T(68,Hme,8,0,"div",96),l(),T(69,Gme,7,2,"div",97),l()}if(n&2){let e,t,i=o,a=h(2);m(4),E((e=a.getSymbolSource(i))?4:5,e),m(3),v("matTooltip",i.name),m(),N(i.name),m(),v("ngClass",a.typeBadgeClass(i.template_type)),m(),N(a.templateTypeLabel(i.template_type)),m(5),E(i.usage?15:-1),m(7),N(i.category||"Uncategorized"),m(7),N(i.compute_id||"local"),m(7),N(i.builtin?"Built-in":"Custom"),m(7),N(i.default_name_format||"\u2014"),m(),E(i.node_type?44:-1),m(),E(i.console_type?45:-1),m(7),N(a.getResourceSummary(i)),m(),E((t=a.getImageName(i))?53:-1,t),m(7),N(i.symbol||"\u2014"),m(7),N(i.template_id),m(),E(i.tags!=null&&i.tags.length?68:-1),m(),E(i.builtin?-1:69)}}function Qme(n,o){if(n&1&&(T(0,wme,24,8,"div",39),T(1,Fme,5,4,"div",40),T(2,qme,70,18,"aside",41)),n&2){let e,t=h();E(t.viewMode()==="list"?0:-1),m(),E(t.viewMode()==="grid"?1:-1),m(),E((e=t.selectedTemplate())?2:-1,e)}}function Kme(n,o){n&1&&(r(0,"div",105)(1,"mat-icon"),c(2,"dashboard_customize"),l(),r(3,"h3"),c(4,"No templates found"),l(),r(5,"p"),c(6,"Try changing the search, scope, or template-type filter."),l()())}var dy=(()=>{class n{static SORT_COLUMNS=["name","template_type","category","compute_id"];static DEFAULT_PAGE_SIZE=25;static SEARCH_SYNC_DELAY_MS=300;controllerId="";controller;templates=z([]);loading=z(!0);searchText=z("");selectedType=z("all");selectedScope=z("all");viewMode=z("list");selectedTemplate=z(null);sortActive=z("name");sortDirection=z("asc");pageIndex=z(0);pageSize=z(n.DEFAULT_PAGE_SIZE);pageSizeOptions=[5,10,25,50,100];displayedColumns=["name","template_type","category","compute_id","builtin","actions"];symbolBlobUrls=z(new Map);templateTypes=Ne(()=>Array.from(new Set(this.templates().map(e=>e.template_type).filter(Boolean))).sort((e,t)=>this.templateTypeLabel(e).localeCompare(this.templateTypeLabel(t))));filteredTemplates=Ne(()=>{let e=this.searchText().trim().toLowerCase(),t=this.selectedType(),i=this.selectedScope(),a=this.templates();i==="custom"?a=a.filter(p=>!p.builtin):i==="builtin"&&(a=a.filter(p=>p.builtin)),t!=="all"&&(a=a.filter(p=>p.template_type===t)),e&&(a=a.filter(p=>[p.name,p.template_type,p.category,p.compute_id,p.usage,...p.tags||[]].filter(Boolean).some(u=>String(u).toLowerCase().includes(e))));let s=this.sortActive(),d=this.sortDirection();return!s||!d?a:[...a].sort((p,u)=>{let g=String(p[s]??"").toLowerCase(),C=String(u[s]??"").toLowerCase();return g.localeCompare(C,void 0,{numeric:!0,sensitivity:"base"})*(d==="asc"?1:-1)})});paginatedTemplates=Ne(()=>{let e=this.pageIndex()*this.pageSize();return this.filteredTemplates().slice(e,e+this.pageSize())});customTemplateCount=Ne(()=>this.templates().filter(e=>!e.builtin).length);builtinTemplateCount=Ne(()=>this.templates().filter(e=>e.builtin).length);route=f($t);router=f(Ft);dialog=f(Xe);controllerService=f(_t);templateService=f(fa);symbolService=f(Lr);toasterService=f(re);cd=f(oe);searchSyncTimer=null;ngOnInit(){this.controllerId=this.route.snapshot.paramMap.get("controller_id")??"",this.restoreFiltersFromUrl();let e=Number.parseInt(this.controllerId,10);this.controllerService.get(e).then(t=>{this.controller=t,this.loadTemplates()},t=>{this.loading.set(!1),this.toasterService.error(t.error?.message||t.message||"Failed to load controller"),this.cd.markForCheck()})}ngOnDestroy(){this.searchSyncTimer!==null&&(clearTimeout(this.searchSyncTimer),this.searchSyncTimer=null)}loadTemplates(){this.controller&&(this.loading.set(!0),this.templateService.list(this.controller).subscribe({next:e=>{this.templates.set(e||[]),this.loading.set(!1),this.dropStaleTypeFilter(),this.refreshSelectedTemplate(),this.ensureValidPage(),this.loadTemplateSymbols(e||[]),this.cd.markForCheck()},error:e=>{this.loading.set(!1),this.toasterService.error(e.error?.message||e.message||"Failed to load templates"),this.cd.markForCheck()}}))}setScope(e){this.selectedScope.set(e),this.resetPage(),this.syncFiltersToUrl()}setSearch(e){this.searchText.set(e),this.resetPage(),this.searchSyncTimer!==null&&clearTimeout(this.searchSyncTimer),this.searchSyncTimer=setTimeout(()=>{this.searchSyncTimer=null,this.syncFiltersToUrl()},n.SEARCH_SYNC_DELAY_MS)}setType(e){this.selectedType.set(e),this.resetPage(),this.syncFiltersToUrl()}setViewMode(e){this.viewMode.set(e),this.syncFiltersToUrl()}onSortByChange(e){this.sortActive.set(e),this.sortDirection()||this.sortDirection.set("asc"),this.resetPage(),this.syncFiltersToUrl()}onSortChange(e){this.sortActive.set(e.active||"name"),this.sortDirection.set(e.direction),this.resetPage(),this.syncFiltersToUrl()}onPageChange(e){this.pageIndex.set(e.pageIndex),this.pageSize.set(e.pageSize),this.syncFiltersToUrl()}selectTemplate(e){this.selectedTemplate.set(e)}closeDetails(){this.selectedTemplate.set(null)}templateTypeLabel(e){return{cloud:"Cloud",docker:"Docker",dynamips:"Dynamips",ethernet_hub:"Ethernet Hub",ethernet_switch:"Ethernet Switch",iou:"IOS on Unix",nat:"NAT",qemu:"QEMU",vpcs:"VPCS"}[e]||this.toTitleCase(e)}templateTypeIcon(e){return{cloud:"cloud",docker:"deployed_code",dynamips:"router",ethernet_hub:"device_hub",ethernet_switch:"settings_ethernet",iou:"lan",nat:"public",qemu:"memory",vpcs:"computer"}[e]||"developer_board"}typeBadgeClass(e){return{cloud:"templates-page__type-badge--cloud",docker:"templates-page__type-badge--docker",dynamips:"templates-page__type-badge--dynamips",ethernet_hub:"templates-page__type-badge--ethernet-hub",ethernet_switch:"templates-page__type-badge--ethernet-switch",iou:"templates-page__type-badge--iou",nat:"templates-page__type-badge--nat",qemu:"templates-page__type-badge--qemu",vpcs:"templates-page__type-badge--vpcs"}[e]||""}getSymbolSource(e){return e.symbol&&this.symbolBlobUrls().get(e.symbol)||null}getResourceSummary(e){let t=[],i=e.ram??e.memory;i&&t.push(`${i} MB RAM`),e.cpus&&t.push(`${e.cpus} CPU${e.cpus===1?"":"s"}`);let a=this.getAdapterCount(e);return a!==null&&t.push(`${a} adapter${a===1?"":"s"}`),t.join(" \xB7 ")||"Server defaults"}getAdapterCount(e){return typeof e.adapters=="number"?e.adapters:typeof e.ethernet_adapters=="number"||typeof e.serial_adapters=="number"?(e.ethernet_adapters||0)+(e.serial_adapters||0):Array.isArray(e.ports_mapping)?e.ports_mapping.length:null}getImageName(e){return e.image||e.path||e.hda_disk_image||""}canConfigure(e){return!e.builtin&&!!this.getDetailsRoute(e)}canDuplicate(e){return!e.builtin&&["docker","dynamips","iou","qemu"].includes(e.template_type)}configureTemplate(e){let t=this.getDetailsRoute(e);t&&this.router.navigate(t)}duplicateTemplate(e){this.canDuplicate(e)&&this.dialog.open(Bz,{panelClass:["base-dialog-panel","dialog-small-panel"],data:{templateName:e.name}}).afterClosed().pipe(Yi(Boolean)).subscribe(t=>{this.templateService.duplicate(this.controller,e.template_id,t).subscribe({next:i=>{this.templates.update(a=>[...a,i]),this.toasterService.success(`Template ${t} created.`)},error:i=>{this.toasterService.error(i.error?.message||i.message||"Failed to copy template")}})})}deleteTemplate(e,t){e.builtin||t.deleteItem(e.name,e.template_id,e.template_type)}onTemplateDeleted(e){this.templates.update(t=>t.filter(i=>i.template_id!==e)),this.selectedTemplate()?.template_id===e&&this.closeDetails(),this.ensureValidPage()}trackTemplate(e,t){return t.template_id}getDetailsRoute(e){let t=["/controller",this.controller.id,"preferences"];return{cloud:[...t,"builtin","cloud-nodes",e.template_id],docker:[...t,"docker","templates",e.template_id],dynamips:[...t,"dynamips","templates",e.template_id],ethernet_hub:[...t,"builtin","ethernet-hubs",e.template_id],ethernet_switch:[...t,"builtin","ethernet-switches",e.template_id],iou:[...t,"iou","templates",e.template_id],qemu:[...t,"qemu","templates",e.template_id],vpcs:[...t,"vpcs","templates",e.template_id]}[e.template_type]||null}loadTemplateSymbols(e){Array.from(new Set(e.map(i=>i.symbol).filter(Boolean))).forEach(i=>{this.symbolBlobUrls().has(i)||this.symbolService.getSymbolBlobUrl(this.controller,`/symbols/${i}/raw`).subscribe({next:a=>{this.symbolBlobUrls.update(s=>{let d=new Map(s);return d.set(i,a),d}),this.cd.markForCheck()},error:()=>{}})})}refreshSelectedTemplate(){let e=this.selectedTemplate()?.template_id;e&&this.selectedTemplate.set(this.templates().find(t=>t.template_id===e)||null)}resetPage(){this.pageIndex.set(0)}restoreFiltersFromUrl(){let e=this.route.snapshot.queryParamMap;this.searchText.set(e.get("search")??""),this.selectedType.set(e.get("type")??"all");let t=e.get("scope");this.selectedScope.set(t==="custom"||t==="builtin"?t:"all");let i=e.get("view");this.viewMode.set(i==="grid"?"grid":"list");let a=e.get("sort");this.sortActive.set(a&&n.SORT_COLUMNS.includes(a)?a:"name");let s=e.get("dir");this.sortDirection.set(s==="asc"||s==="desc"?s:"asc"),this.pageIndex.set(Math.max(0,Number.parseInt(e.get("page")??"0",10)||0));let d=Number.parseInt(e.get("size")??"",10);this.pageSize.set(this.pageSizeOptions.includes(d)?d:n.DEFAULT_PAGE_SIZE)}syncFiltersToUrl(){this.searchSyncTimer!==null&&(clearTimeout(this.searchSyncTimer),this.searchSyncTimer=null);let e={},t=this.searchText().trim();t&&(e.search=t),this.selectedType()!=="all"&&(e.type=this.selectedType()),this.selectedScope()!=="all"&&(e.scope=this.selectedScope()),this.viewMode()!=="list"&&(e.view=this.viewMode()),this.sortActive()!=="name"&&(e.sort=this.sortActive());let i=this.sortDirection();i&&i!=="asc"&&(e.dir=i),this.pageIndex()>0&&(e.page=this.pageIndex()),this.pageSize()!==n.DEFAULT_PAGE_SIZE&&(e.size=this.pageSize()),this.router.navigate([],{relativeTo:this.route,queryParams:e,replaceUrl:!0})}dropStaleTypeFilter(){let e=this.selectedType();e!=="all"&&!this.templateTypes().includes(e)&&this.selectedType.set("all")}ensureValidPage(){let e=Math.max(0,Math.ceil(this.filteredTemplates().length/this.pageSize())-1);this.pageIndex()>e&&this.pageIndex.set(e)}toTitleCase(e){return(e||"").replace(/[_-]+/g," ").replace(/\b\w/g,t=>t.toUpperCase())}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-preferences"]],decls:61,vars:19,consts:[["emptyState",""],["deleteComponent",""],["manualTemplateMenu","matMenu"],["builtInTemplateMenu","matMenu"],[1,"templates-page"],[1,"templates-page__content"],[1,"templates-page__header"],[1,"templates-page__heading"],[1,"templates-page__title"],["aria-label","Template scope",1,"templates-page__scopes"],["type","button",1,"templates-page__scope",3,"click"],[1,"templates-page__toolbar"],["appearance","fill","subscriptSizing","dynamic",1,"templates-page__search"],["matPrefix",""],["matInput","","placeholder","Search templates by name, type, category, or tag",3,"input","value"],[1,"templates-page__toolbar-actions"],["appearance","fill","subscriptSizing","dynamic",1,"templates-page__filter"],[3,"valueChange","value"],["value","all"],[3,"value"],["appearance","fill","subscriptSizing","dynamic",1,"templates-page__sort"],["value","name"],["value","template_type"],["value","category"],["value","compute_id"],["aria-label","Template view",1,"templates-page__view-toggle"],["mat-icon-button","","matTooltip","List view","aria-label","List view",1,"templates-page__view-button",3,"click"],["mat-icon-button","","matTooltip","Grid view","aria-label","Grid view",1,"templates-page__view-button",3,"click"],[1,"templates-page__main"],[1,"templates-page__loading"],[3,"deleteEvent","controller"],[1,"templates-page__header-actions"],["mat-raised-button","","color","primary",1,"templates-page__refresh",3,"click"],["mat-raised-button","","color","primary","matTooltip","Install an appliance from the registry or import an appliance file","matTooltipClass","custom-tooltip",1,"templates-page__new",3,"routerLink"],["mat-raised-button","","color","primary","matTooltip","Create a template manually for a specific emulator","matTooltipClass","custom-tooltip",1,"templates-page__manual",3,"matMenuTriggerFor"],["iconPositionEnd",""],["mat-menu-item","",3,"routerLink"],["mat-menu-item","",3,"matMenuTriggerFor"],["diameter","42","mode","indeterminate"],[1,"templates-page__table-container"],[1,"templates-page__grid",3,"templates-page__grid--with-details"],["aria-label","Template details",1,"templates-page__details"],["matSort","",3,"matSortChange","dataSource","trackBy","matSortActive","matSortDirection"],["matColumnDef","name"],["mat-sort-header","",4,"matHeaderCellDef"],[4,"matCellDef"],["matColumnDef","template_type"],["matColumnDef","category"],["matColumnDef","compute_id"],["matColumnDef","builtin"],[4,"matHeaderCellDef"],["matColumnDef","actions"],[4,"matHeaderRowDef","matHeaderRowDefSticky"],[3,"templates-page__row--selected","click",4,"matRowDef","matRowDefColumns"],[1,"templates-page__table-footer"],["mat-sort-header",""],[1,"templates-page__name-cell"],[1,"templates-page__symbol","templates-page__symbol--small"],[3,"src","alt"],[1,"templates-page__name-copy"],[1,"templates-page__type-badge",3,"ngClass"],[1,"templates-page__source-badge"],[1,"templates-page__actions-cell"],["mat-icon-button","","matTooltip","View template details",1,"templates-page__action","templates-page__action--details",3,"click"],["mat-icon-button","","matTooltip","Configure template",1,"templates-page__action","templates-page__action--edit"],["mat-icon-button","","matTooltip","Duplicate template",1,"templates-page__action","templates-page__action--duplicate"],["mat-icon-button","","matTooltip","Delete template",1,"templates-page__action","templates-page__action--delete"],["mat-icon-button","","matTooltip","Configure template",1,"templates-page__action","templates-page__action--edit",3,"click"],["mat-icon-button","","matTooltip","Duplicate template",1,"templates-page__action","templates-page__action--duplicate",3,"click"],["mat-icon-button","","matTooltip","Delete template",1,"templates-page__action","templates-page__action--delete",3,"click"],[3,"click"],["showFirstLastButtons","",3,"page","length","pageIndex","pageSize","pageSizeOptions"],[4,"ngTemplateOutlet"],[1,"templates-page__grid"],[1,"templates-page__card",3,"templates-page__card--selected"],["showFirstLastButtons","",1,"templates-page__grid-paginator",3,"length","pageIndex","pageSize","pageSizeOptions"],[1,"templates-page__card",3,"click"],[1,"templates-page__card-header"],[1,"templates-page__symbol"],[1,"templates-page__card-body"],[3,"matTooltip"],[1,"templates-page__card-tags-row"],[1,"templates-page__card-actions"],["aria-label","Template tags",1,"templates-page__card-tags"],[1,"templates-page__tag"],["showFirstLastButtons","",1,"templates-page__grid-paginator",3,"page","length","pageIndex","pageSize","pageSizeOptions"],[1,"templates-page__details-header"],[1,"templates-page__details-heading"],[1,"templates-page__details-title-line"],["mat-icon-button","","matTooltip","Close details","aria-label","Close details",3,"click"],[1,"templates-page__details-body"],[1,"templates-page__description"],[1,"templates-page__detail-row"],[1,"templates-page__mono"],[1,"templates-page__detail-row","templates-page__detail-row--stacked"],[1,"templates-page__path"],[1,"templates-page__detail-row","templates-page__tags"],[1,"templates-page__details-actions"],[3,"data"],["aria-label","Template tags"],["mat-raised-button","","color","primary",1,"templates-page__details-action","templates-page__details-action--edit"],["mat-raised-button","","color","primary",1,"templates-page__details-action","templates-page__details-action--duplicate"],["mat-stroked-button","",1,"templates-page__details-action","templates-page__details-action--delete",3,"click"],["mat-raised-button","","color","primary",1,"templates-page__details-action","templates-page__details-action--edit",3,"click"],["mat-raised-button","","color","primary",1,"templates-page__details-action","templates-page__details-action--duplicate",3,"click"],[1,"templates-page__empty"]],template:function(t,i){t&1&&(r(0,"div",4)(1,"div",5)(2,"header",6)(3,"div",7)(4,"div")(5,"h1",8),c(6,"Templates"),l()()(),T(7,Zde,64,29),l(),r(8,"nav",9)(9,"button",10),_("click",function(){return i.setScope("all")}),c(10," All Templates "),r(11,"span"),c(12),l()(),r(13,"button",10),_("click",function(){return i.setScope("custom")}),c(14," Custom "),r(15,"span"),c(16),l()(),r(17,"button",10),_("click",function(){return i.setScope("builtin")}),c(18," Built-in "),r(19,"span"),c(20),l()()(),r(21,"section",11)(22,"mat-form-field",12)(23,"mat-icon",13),c(24,"search"),l(),r(25,"input",14),_("input",function(s){return i.setSearch(s.target.value)}),l()(),r(26,"div",15)(27,"mat-form-field",16)(28,"mat-label"),c(29,"Template type"),l(),r(30,"mat-select",17),_("valueChange",function(s){return i.setType(s)}),r(31,"mat-option",18),c(32,"All types"),l(),Q(33,Jde,2,2,"mat-option",19,Oe),l()(),r(35,"mat-form-field",20)(36,"mat-label"),c(37,"Sort by"),l(),r(38,"mat-select",17),_("valueChange",function(s){return i.onSortByChange(s)}),r(39,"mat-option",21),c(40,"Name"),l(),r(41,"mat-option",22),c(42,"Type"),l(),r(43,"mat-option",23),c(44,"Category"),l(),r(45,"mat-option",24),c(46,"Compute"),l()()(),r(47,"div",25)(48,"button",26),_("click",function(){return i.setViewMode("list")}),r(49,"mat-icon"),c(50,"view_list"),l()(),r(51,"button",27),_("click",function(){return i.setViewMode("grid")}),r(52,"mat-icon"),c(53,"grid_view"),l()()()()(),r(54,"main",28),T(55,eme,4,0,"div",29)(56,Qme,3,3),l()()(),se(57,Kme,7,0,"ng-template",null,0,Qr),r(59,"app-delete-template",30,1),_("deleteEvent",function(s){return i.onTemplateDeleted(s)}),l()),t&2&&(m(7),E(i.controller?7:-1),m(2),ne("templates-page__scope--active",i.selectedScope()==="all"),m(3),N(i.templates().length),m(),ne("templates-page__scope--active",i.selectedScope()==="custom"),m(3),N(i.customTemplateCount()),m(),ne("templates-page__scope--active",i.selectedScope()==="builtin"),m(3),N(i.builtinTemplateCount()),m(5),v("value",i.searchText()),m(5),v("value",i.selectedType()),m(3),K(i.templateTypes()),m(5),v("value",i.sortActive()),m(10),ne("templates-page__view-button--active",i.viewMode()==="list"),m(3),ne("templates-page__view-button--active",i.viewMode()==="grid"),m(4),E(i.loading()?55:56),m(4),v("controller",i.controller))},dependencies:[fe,Ao,tc,vn,Co,Y,he,Be,ie,ce,ye,Ee,Pe,Ve,Bi,we,it,Ko,ut,eo,As,ea,rt,mt,ot,ct,nt,_a,Ro,Aa,_n,bn,yn,kn,wn,xn,Pn,Mn,Sn,Tn,En,st,pt,cy,Fl],styles:['[_nghost-%COMP%]{display:block;width:100%;background:transparent}.templates-page__content[_ngcontent-%COMP%]{animation:none}.templates-page__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:20px;max-width:1600px;margin:0 auto;padding:24px 20px 16px}.templates-page__heading[_ngcontent-%COMP%], .templates-page__header-actions[_ngcontent-%COMP%]{display:flex;align-items:center}.templates-page__heading[_ngcontent-%COMP%]{min-width:0;gap:var(--gns3-density-space-3)}.templates-page__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.templates-page__header-actions[_ngcontent-%COMP%]{gap:var(--gns3-density-space-3)}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);border-radius:12px;padding-inline:18px;font-size:15px;font-weight:500;letter-spacing:.3px;text-transform:none}[class*=-templates__header][_ngcontent-%COMP%]{box-sizing:border-box;width:100%;height:calc(var(--gns3-density-space-4) * 2 + (var(--gns3-density-section-title-size) + 2px) * 1.2 + 1px);max-width:none;margin:0;padding:0 var(--gns3-density-page-padding);gap:var(--gns3-density-space-3);color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container);border-bottom:1px solid var(--mat-sys-outline-variant)}[class*=-templates__back-btn][_ngcontent-%COMP%], [class*=-templates__add-btn][_ngcontent-%COMP%]{flex:0 0 auto;width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:12px}[class*=-templates__back-btn][_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container)}[class*=-templates__add-btn][_ngcontent-%COMP%]{color:var(--mat-sys-primary)}[class*=-templates__title][_ngcontent-%COMP%]{flex:1;min-width:0;margin:0;padding-bottom:0;color:var(--mat-sys-on-primary-container);font-size:calc(var(--gns3-density-section-title-size) + 2px);font-weight:650;line-height:1.2;letter-spacing:-.01em}.templates-page__scopes[_ngcontent-%COMP%]{display:flex;gap:4px;max-width:1560px;margin:0 auto 16px;padding:0 20px;border-bottom:1px solid var(--mat-sys-outline-variant)}.templates-page__scope[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center;gap:8px;min-height:48px;padding:0 16px;border:0;color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;font-size:14px;font-weight:550;cursor:pointer}.templates-page__scope[_ngcontent-%COMP%]:after{position:absolute;right:8px;bottom:-1px;left:8px;height:2px;border-radius:2px 2px 0 0;background:transparent;content:""}.templates-page__scope[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}.templates-page__scope[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{min-width:22px;padding:2px 6px;border-radius:12px;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-high);font-size:11px;text-align:center}.templates-page__scope--active[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%]:after{background:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap);max-width:1600px;margin:0 auto;padding:0 20px 8px}.templates-page__search[_ngcontent-%COMP%]{flex:1;min-width:240px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:flex;align-items:center;flex:0 0 auto;gap:var(--gns3-density-space-3)}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{width:155px}.templates-page__view-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px;padding:4px 2px;border-radius:8px;background:var(--mat-sys-surface-container-high)}button.templates-page__view-button[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:8px;color:var(--mat-sys-on-surface-variant);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);--mat-icon-button-icon-size: 22px}button.templates-page__view-button--active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__main[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:20px;max-width:1600px;margin:0 auto;padding:0 20px 20px}.templates-page__loading[_ngcontent-%COMP%]{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;min-height:320px;gap:var(--gns3-density-card-gap);color:var(--mat-sys-on-surface-variant)}.templates-page__table-container[_ngcontent-%COMP%]{flex:1;min-width:0;border-radius:16px;background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;overflow-x:auto}mat-table[_ngcontent-%COMP%]{width:100%;min-width:850px}.mat-mdc-row[_ngcontent-%COMP%], .mat-row[_ngcontent-%COMP%]{height:var(--mat-table-row-item-container-height);min-height:var(--mat-table-row-item-container-height)}.mat-header-row[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%]{position:sticky;top:0;z-index:10;background:var(--mat-sys-surface-container-highest);box-shadow:inset 0 -2px var(--mat-sys-primary);--mat-sort-arrow-color: var(--mat-sys-primary)}.mat-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:13px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}mat-row[_ngcontent-%COMP%]{cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease}mat-row[_ngcontent-%COMP%]:nth-child(2n){background:color-mix(in srgb,var(--mat-sys-on-surface) 1%,transparent)}mat-row[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}mat-row.templates-page__row--selected[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}mat-cell[_ngcontent-%COMP%], mat-header-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:inherit;color:var(--mat-sys-on-surface)}.mat-column-name[_ngcontent-%COMP%]{flex:2.4;min-width:240px;justify-content:flex-start}.mat-column-template_type[_ngcontent-%COMP%]{flex:1.1;min-width:130px}.mat-column-category[_ngcontent-%COMP%]{flex:1;min-width:110px}.mat-column-compute_id[_ngcontent-%COMP%]{flex:1;min-width:105px}.mat-column-builtin[_ngcontent-%COMP%]{flex:0 0 90px;min-width:90px;justify-content:center}.mat-column-actions[_ngcontent-%COMP%]{flex:0 0 180px;min-width:180px;box-sizing:border-box;justify-content:flex-start;padding-right:24px}.templates-page__name-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-width:0;gap:var(--gns3-density-space-3)}.templates-page__name-copy[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:14px;font-weight:600}.templates-page__symbol[_ngcontent-%COMP%]{display:grid;flex:0 0 52px;width:52px;height:52px;overflow:hidden;place-items:center;border-radius:14px;color:var(--mat-sys-on-primary-container);background:color-mix(in srgb,var(--mat-sys-primary-container) 82%,var(--mat-sys-surface))}.templates-page__symbol[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:78%;height:78%;object-fit:contain;filter:drop-shadow(0 2px 4px color-mix(in srgb,var(--mat-sys-shadow) 25%,transparent))}.templates-page__symbol[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:27px;height:27px;font-size:27px}.templates-page__symbol--small[_ngcontent-%COMP%]{flex-basis:38px;width:38px;height:38px;border-radius:10px}.templates-page__symbol--small[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:21px;height:21px;font-size:21px}.templates-page__type-badge[_ngcontent-%COMP%], .templates-page__source-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;width:fit-content;padding:4px 9px;border-radius:16px;font-size:12px;font-weight:600;white-space:nowrap}.templates-page__type-badge[_ngcontent-%COMP%]{color:var(--mat-sys-secondary);background:color-mix(in srgb,var(--mat-sys-secondary) 11%,transparent)}.templates-page__type-badge--qemu[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__type-badge--docker[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container)}.templates-page__type-badge--dynamips[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary-container);background:var(--mat-sys-tertiary-container)}.templates-page__type-badge--cloud[_ngcontent-%COMP%]{color:var(--mat-sys-on-error-container);background:var(--mat-sys-error-container)}.templates-page__type-badge--vpcs[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary);background:var(--mat-sys-primary)}.templates-page__type-badge--ethernet-hub[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary);background:var(--mat-sys-secondary)}.templates-page__type-badge--ethernet-switch[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary);background:var(--mat-sys-tertiary)}.templates-page__type-badge--iou[_ngcontent-%COMP%]{color:var(--mat-sys-on-error);background:var(--mat-sys-error)}.templates-page__type-badge--nat[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-highest)}.templates-page__source-badge[_ngcontent-%COMP%]{color:var(--mat-sys-primary);background:color-mix(in srgb,var(--mat-sys-primary) 11%,transparent)}.templates-page__source-badge--builtin[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary);background:color-mix(in srgb,var(--mat-sys-tertiary) 11%,transparent)}.templates-page__table-footer[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:var(--mat-table-footer-container-height);padding:0 12px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container))}.templates-page__table-footer[_ngcontent-%COMP%] mat-paginator[_ngcontent-%COMP%]{width:100%;--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__actions-cell[_ngcontent-%COMP%], .templates-page__card-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:3px}button.templates-page__action[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-on-surface-variant);width:var(--gns3-density-control-height-sm);height:var(--gns3-density-control-height-sm);--mat-icon-button-state-layer-size: var(--gns3-density-control-height-sm);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-control-height-sm)}button.templates-page__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}button.templates-page__action[_ngcontent-%COMP%]{color:var(--template-action-color);--mat-icon-button-state-layer-color: var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:not(:disabled) mat-icon[_ngcontent-%COMP%]{color:var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:disabled mat-icon[_ngcontent-%COMP%]{color:var(--gns3-button-disabled-label-color)}button.templates-page__action--details[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--edit[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-primary)}button.templates-page__action--duplicate[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--delete[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-error)}.templates-page__grid[_ngcontent-%COMP%]{flex:1;min-width:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-content:start;gap:var(--gns3-density-card-gap)}.templates-page__grid--with-details[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__card[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column;padding:16px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;background:var(--mat-sys-surface);cursor:pointer;transition:transform var(--gns3-motion-duration-standard) ease,box-shadow var(--gns3-motion-duration-standard) ease,border-color var(--gns3-motion-duration-standard) ease}.templates-page__card[_ngcontent-%COMP%]:hover{border-color:var(--mat-sys-outline-variant);background:var(--mat-sys-surface-container-low)}.templates-page__card--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);box-shadow:0 0 0 1px var(--mat-sys-primary)}.templates-page__card-header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--gns3-density-space-3)}.templates-page__card-body[_ngcontent-%COMP%]{flex:1;min-width:0;padding:14px 0 12px}.templates-page__card-body[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{display:-webkit-box;overflow:hidden;margin:0 0 9px;color:var(--mat-sys-on-surface);font-size:17px;font-weight:650;line-height:1.35;overflow-wrap:anywhere;-webkit-box-orient:vertical;-webkit-line-clamp:2}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%]{display:grid;gap:8px;margin:16px 0 0}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{min-width:0;margin:0;overflow:hidden;color:var(--mat-sys-on-surface);font-size:13px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] .templates-page__card-tags-row[_ngcontent-%COMP%]{align-items:flex-start}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd.templates-page__card-tags[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px;overflow:visible;white-space:normal}.templates-page__card-actions[_ngcontent-%COMP%]{justify-content:flex-end;min-height:33px;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__grid-paginator[_ngcontent-%COMP%]{grid-column:1/-1;width:100%;border-radius:12px;background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container));--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__empty[_ngcontent-%COMP%]{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:230px;padding:32px;color:var(--mat-sys-on-surface-variant);text-align:center}.templates-page__empty[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{width:48px;height:48px;font-size:48px;opacity:.55}.templates-page__empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:12px 0 0;color:var(--mat-sys-on-surface);font-size:17px}.templates-page__empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:5px 0 0;font-size:14px}.templates-page__details[_ngcontent-%COMP%]{position:sticky;top:16px;flex:0 0 clamp(390px,31vw,480px);display:flex;min-height:380px;max-height:calc(100vh - 176px);flex-direction:column;overflow:hidden;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 60%,transparent);border-radius:16px;background:var(--mat-sys-surface);box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent);animation:_ngcontent-%COMP%_templates-slide-in var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard)}.templates-page__details-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:var(--gns3-density-space-3);min-height:56px;box-sizing:border-box;padding:8px 10px 8px 16px;border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 72%,var(--mat-sys-surface))}.templates-page__details-header[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-primary-container)}.templates-page__details-heading[_ngcontent-%COMP%]{display:flex;min-width:0;align-items:center;gap:var(--gns3-density-space-3)}.templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;margin:0;color:var(--mat-sys-on-primary-container);font-size:19px;font-weight:650;line-height:1.25;text-overflow:ellipsis;white-space:nowrap}.templates-page__details-title-line[_ngcontent-%COMP%]{display:flex;flex:1;min-width:0;align-items:center;gap:var(--gns3-density-space-2)}.templates-page__details-title-line[_ngcontent-%COMP%] .templates-page__type-badge[_ngcontent-%COMP%]{flex:0 0 auto}.templates-page__details-body[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:12px 20px}.templates-page__description[_ngcontent-%COMP%]{padding:10px 0 14px;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__description[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.6px;text-transform:uppercase}.templates-page__description[_ngcontent-%COMP%] app-markdown-viewer[_ngcontent-%COMP%]{display:block;margin-top:8px;padding:2px 12px;border-radius:10px;background:var(--mat-sys-surface-container-low);overflow-wrap:anywhere;--markdown-viewer-font-size: 13px;--markdown-viewer-line-height: 1.5;--markdown-viewer-heading-scale: .85}.templates-page__detail-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:22px 105px minmax(0,1fr);align-items:center;gap:var(--gns3-density-space-3);min-height:40px;box-sizing:border-box;padding:8px 0;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__detail-row[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:19px;height:19px;color:var(--mat-sys-primary);font-size:19px}.templates-page__detail-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:12px;font-weight:650;letter-spacing:.5px;text-transform:uppercase;white-space:nowrap}.templates-page__detail-row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{min-width:0;color:var(--mat-sys-on-surface);font-size:14px;font-weight:500;line-height:1.45;text-align:right;overflow-wrap:anywhere}.templates-page__detail-row--stacked[_ngcontent-%COMP%]{align-items:start}.templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__mono[_ngcontent-%COMP%], .templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__path[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-family:var(--gns3-font-code);font-size:12px;word-break:break-all}.templates-page__tags[_ngcontent-%COMP%]{border-bottom:0}.templates-page__tags[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:7px}.templates-page__tag[_ngcontent-%COMP%]{padding:5px 9px;border-radius:14px;color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container);font-size:11px;font-weight:550}.templates-page__details-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(105px,1fr));gap:var(--gns3-density-space-2);padding:14px 16px 18px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-surface-container) 72%,transparent)}button.templates-page__details-action[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-on-surface-variant);height:40px;border-radius:12px;color:var(--details-action-color);border-color:color-mix(in srgb,var(--details-action-color) 48%,transparent);font-size:13px;font-weight:500}button.templates-page__details-action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--details-action-color)}button.templates-page__details-action--edit[_ngcontent-%COMP%], button.templates-page__details-action--duplicate[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-primary)}button.templates-page__details-action--delete[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-error)}[data-density=compact][_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%]{min-height:40px;height:40px}[data-density=compact][_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%]{width:40px;height:40px;--mat-icon-button-state-layer-size: 40px}[data-density=compact][_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%]{min-height:48px;padding-block:4px}[data-density=compact][_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:18px}[data-density=compact][_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%]{padding-block:8px}[data-density=compact][_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%]{min-height:36px;padding-block:6px}[data-density=compact][_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%]{padding:12px}@keyframes _ngcontent-%COMP%_templates-slide-in{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@media(max-width:1400px){.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__main[_ngcontent-%COMP%]{flex-direction:column}.templates-page__table-container[_ngcontent-%COMP%], .templates-page__grid[_ngcontent-%COMP%], .templates-page__details[_ngcontent-%COMP%]{width:100%}.templates-page__details[_ngcontent-%COMP%]{position:static;flex-basis:auto;max-height:none}}@media(max-width:900px){.templates-page__header[_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column}.templates-page__header-actions[_ngcontent-%COMP%]{width:100%}.templates-page__toolbar[_ngcontent-%COMP%]{align-items:stretch;flex-direction:column}.templates-page__toolbar-actions[_ngcontent-%COMP%]{width:100%}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{flex:1;width:auto}}@media(max-width:640px){.templates-page__header[_ngcontent-%COMP%]{padding:20px 16px 12px}.templates-page__header-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{width:100%;padding-inline:10px}.templates-page__scopes[_ngcontent-%COMP%]{overflow-x:auto;padding-inline:16px}.templates-page__scope[_ngcontent-%COMP%]{flex:0 0 auto;padding-inline:12px}.templates-page__toolbar[_ngcontent-%COMP%], .templates-page__main[_ngcontent-%COMP%]{padding-inline:16px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__view-toggle[_ngcontent-%COMP%]{grid-column:1/-1;justify-self:end}.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.templates-page__details[_ngcontent-%COMP%]{min-width:0}}'],changeDetection:0})}return n})();var qz=Jl(Hz());function xh(n){return(n.reference||n.path||n.filename).replace(/\\/g,"/")}function my(n){return!!n.filename?.toLowerCase().endsWith(".iso")&&(!n.image_type||n.image_type==="qemu")&&(!n.availability||n.availability==="unknown"||n.availability==="available")}var py=class{adapters;builtin;category;compute_id;console_auto_start;console_http_path;console_http_port;console_resolution;console_type;aux_type;mac_address;custom_adapters;default_name_format;environment;extra_hosts;extra_volumes;extra_configs;image;memory;cpus;name;start_command;symbol;template_id;template_type;usage;tags;netmiko_device_type;appliance_metadata};var yh=class{adapter_type;adapters;bios_image;boot_priority;builtin;category;cdrom_image;cdrom2_image;cdrom_interface;cdrom2_interface;compute_id;console_auto_start;console_type;aux_type;cpu_throttling;cpus;maxcpus;create_config_disk;custom_adapters;default_name_format;first_port_name;hda_disk_image;hda_disk_interface;hdb_disk_image;hdb_disk_interface;hdc_disk_image;hdc_disk_interface;hdd_disk_image;hdd_disk_interface;initrd;kernel_command_line;kernel_image;linked_clone;mac_address;name;on_close;options;platform;port_name_format;port_segment_size;process_priority;qemu_path;ram;symbol;template_id;template_type;usage;replicate_network_connection_state;tpm;uefi;tags;netmiko_device_type;appliance_metadata};function wh(n){if(!n||!Array.isArray(n.settings)||n.settings.length===0)return n;let o=Uz(n);if(!o)return n;let e=o.template_properties||{},t=o.template_type;if(t&&!n[t]){let i=q({},e);t==="docker"&&i.mem_limit===void 0&&i.memory!==void 0&&(i.mem_limit=i.memory),n[t]=i}return(n.first_port_name===void 0||n.first_port_name===null)&&(n.first_port_name=e.first_port_name),(n.port_name_format===void 0||n.port_name_format===null)&&(n.port_name_format=e.port_name_format),(n.port_segment_size===void 0||n.port_segment_size===null)&&(n.port_segment_size=e.port_segment_size),!n.custom_adapters&&e.custom_adapters&&(n.custom_adapters=e.custom_adapters),!n.usage&&e.usage&&(n.usage=e.usage),!n.netmiko_device_type&&e.netmiko_device_type&&(n.netmiko_device_type=e.netmiko_device_type),n}function Uz(n){if(!(!Array.isArray(n.settings)||n.settings.length===0))return n.settings.find(o=>o.default)||n.settings[0]}var Xme=["description","vendor_name","vendor_url","vendor_logo_url","documentation_url","product_name","product_url","status","availability","maintainer","maintainer_email","installation_instructions","default_username","default_password"];function _v(n,o){let e={},t=o,i=n;for(let a of Xme){let s=t?.[a]??i[a];s!=null&&s!==""&&(e[a]=s)}return i.appliance_id&&(e.appliance_id=i.appliance_id),Object.keys(e).length>0?e:null}function Wz(n,o){let e=Uz(n);if(!e)return null;let t=o?.settings,i=typeof t=="string"?[t]:Array.isArray(t)?t:[];if(i.length===0)return null;let a=i.map(d=>n.settings.find(p=>p.name===d)).filter(d=>!!d);if(a.length===0)return null;let s={};a.every(d=>d.inherit_default_properties!==!1)&&Object.assign(s,e.template_properties||{});for(let d of a)Object.assign(s,d.template_properties||{});return s}var uy=(()=>{class n{httpController;constructor(e){this.httpController=e}getAppliances(e){return this.httpController.get(e,"/appliances").pipe(Pt(t=>(t||[]).map(i=>wh(i))))}getAppliance(e,t){return this.httpController.get(e,t).pipe(Pt(i=>wh(i)))}getUploadPath(e,t){return`${e.protocol}//${e.host}:${e.port}/${zi.current_version}/images/upload/${t}`}updateAppliances(e){return this.httpController.get(e,"/appliances?update=yes").pipe(Pt(t=>(t||[]).map(i=>wh(i))))}static \u0275fac=function(t){return new(t||n)(_e(sn))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Rl=(()=>{class n{httpController;constructor(e){this.httpController=e}getTemplates(e){return this.httpController.get(e,"/templates")}getTemplate(e,t){return this.httpController.get(e,`/templates/${t}`)}getImagePath(e,t){return`${e.protocol}//${e.host}:${e.port}/${zi.current_version}/images/upload/${t}`}getImages(e){return this.httpController.get(e,"/images?image_type=qemu")}createDiskImage(e,t,i,a,s){return this.httpController.post(e,`/projects/${t}/nodes/${i}/qemu/disk_image/${a}`,s)}addTemplate(e,t){let i=this.prepareTemplate(t);return this.httpController.post(e,"/templates",i)}saveTemplate(e,t){let i=this.prepareTemplate(t);return this.httpController.put(e,`/templates/${t.template_id}`,i)}prepareTemplate(e){return ze(q({},e),{custom_adapters:e.custom_adapters||[]})}static \u0275fac=function(t){return new(t||n)(_e(sn))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();function Yme(n,o){if(n&1&&(r(0,"img",7),_("error",function(t){return t.target.style.display="none"}),l()),n&2){let e=h();v("src",e.appliance.vendor_logo_url,Ba)}}function Zme(n,o){if(n&1&&(r(0,"div"),c(1),l()),n&2){let e=h();m(),X("Default username: ",e.appliance.default_username)}}function Jme(n,o){if(n&1&&(r(0,"div"),c(1),l()),n&2){let e=h();m(),X("Default password: ",e.appliance.default_password)}}function epe(n,o){if(n&1&&(r(0,"div"),c(1),l()),n&2){let e=h();m(),X("Netmiko device type: ",e.appliance.netmiko_device_type)}}function tpe(n,o){if(n&1&&(r(0,"div"),c(1),l(),r(2,"div"),c(3),l()),n&2){let e=h();m(),X("Adapters: ",e.appliance.qemu.adapters),m(2),X("Console type: ",e.appliance.qemu.console_type)}}function npe(n,o){if(n&1&&(r(0,"div"),c(1),l(),r(2,"div"),c(3),l()),n&2){let e=h();m(),X("Adapters: ",e.appliance.docker.adapters),m(2),X("Console type: ",e.appliance.docker.console_type)}}function ipe(n,o){if(n&1&&(r(0,"div",4),c(1),l()),n&2){let e=h();m(),N(e.appliance.installation_instructions)}}var gy=(()=>{class n{data;dialogRef=f(We);appliance;constructor(e){this.data=e,this.appliance=e?.appliance}onNoClick(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)(Mt(Wt))};static \u0275cmp=V({type:n,selectors:[["app-appliance-info-dialog"]],decls:22,vars:12,consts:[[1,"title-container"],["alt","",1,"appliance-info__vendor-logo",3,"src"],["mat-dialog-title",""],["mat-dialog-content",""],[1,"appliance-info__instructions"],["mat-dialog-actions",""],["mat-button","","tabindex","-1","color","accent",3,"click"],["alt","",1,"appliance-info__vendor-logo",3,"error","src"]],template:function(t,i){t&1&&(r(0,"div",0),T(1,Yme,1,1,"img",1),r(2,"h1",2),c(3),l()(),r(4,"div",3)(5,"div"),c(6),l(),r(7,"div"),c(8),l(),r(9,"div"),c(10),l(),r(11,"div"),c(12),l(),T(13,Zme,2,1,"div"),T(14,Jme,2,1,"div"),T(15,epe,2,1,"div"),T(16,tpe,4,2),T(17,npe,4,2),T(18,ipe,2,1,"div",4),l(),r(19,"div",5)(20,"button",6),_("click",function(){return i.onNoClick()}),c(21,"Close"),l()()),t&2&&(m(),E(i.appliance.vendor_logo_url?1:-1),m(2),N(i.appliance.name),m(3),X("Vendor: ",i.appliance.vendor_name),m(2),X("Status: ",i.appliance.status),m(2),X("Maintainer: ",i.appliance.maintainer),m(2),X("Registry version: ",i.appliance.registry_version),m(),E(i.appliance.default_username?13:-1),m(),E(i.appliance.default_password?14:-1),m(),E(i.appliance.netmiko_device_type?15:-1),m(),E(i.appliance.qemu?16:-1),m(),E(i.appliance.docker?17:-1),m(),E(i.appliance.installation_instructions?18:-1))},dependencies:[ke,qe,Qe,bt,Y,he],styles:[".appliance-info__vendor-logo[_ngcontent-%COMP%]{width:32px;height:32px;margin-right:8px;vertical-align:middle;object-fit:contain;border-radius:6px}.appliance-info__instructions[_ngcontent-%COMP%]{margin-top:12px;padding:8px 12px;font-size:13px;white-space:pre-line;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container);border-radius:8px}"],changeDetection:0})}return n})();var Gz=(n,o)=>e=>La(300).pipe(Dn(()=>o.list(n)),Pt(t=>t.find(i=>i.name===e.value)?{templateExist:!0}:null));var zl=(()=>{class n{get(e){var t=new RegExp(/[~`!#$%\^&*+=\[\]\\';,/{}|\\"<>\?]/);return t.test(e.value)?{invalidName:!0}:null}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var ope=["stepper"],ape=["applianceFile"],rpe=()=>[5,10,20,50],Qz=()=>[],Kz=(n,o)=>o.name,Xz=(n,o)=>o.key,spe=(n,o)=>o.filename;function lpe(n,o){if(n&1&&c(0),n&2){let e=o.index;N(e+1)}}function cpe(n,o){if(n&1&&c(0),n&2){let e=o.index;N(e+1)}}function dpe(n,o){n&1&&(r(0,"span",34)(1,"mat-icon"),c(2,"add_circle"),l(),r(3,"span",35)(4,"span",36),c(5,"Creation method"),l(),r(6,"span",37),c(7,"Install or import an appliance"),l()()())}function mpe(n,o){n&1&&(r(0,"mat-icon",25),c(1,"check_circle"),l())}function ppe(n,o){n&1&&(r(0,"mat-icon",25),c(1,"check_circle"),l())}function upe(n,o){if(n&1&&(r(0,"span",34)(1,"mat-icon"),c(2),l(),r(3,"span",35)(4,"span",36),c(5),l(),r(6,"span",37),c(7),l()()()),n&2){let e=h();m(2),N(e.action()==="install"?"storefront":"upload_file"),m(3),N(e.browseStepTitle()),m(2),N(e.browseStepDescription())}}function gpe(n,o){n&1&&(L(0,"mat-spinner",57),r(1,"span"),c(2,"Updating..."),l())}function hpe(n,o){n&1&&(r(0,"mat-icon"),c(1,"refresh"),l(),r(2,"span"),c(3,"Update registry"),l())}function _pe(n,o){if(n&1){let e=R();r(0,"button",58),_("click",function(){y(e);let i=h(2);return w(i.searchText.set(""))}),r(1,"mat-icon"),c(2,"close"),l()()}}function fpe(n,o){if(n&1&&(r(0,"mat-option",49),c(1),l()),n&2){let e=o.$implicit,t=h(2);v("value",e),m(),N(t.formatLabel(e))}}function vpe(n,o){if(n&1&&(r(0,"mat-option",49),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function Cpe(n,o){if(n&1&&(r(0,"mat-option",49),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function bpe(n,o){n&1&&(r(0,"div",56),L(1,"mat-spinner",59),r(2,"span"),c(3,"Loading appliances..."),l()())}function xpe(n,o){n&1&&(r(0,"mat-icon",70),c(1,"check_circle"),l())}function ype(n,o){if(n&1){let e=R();r(0,"div",64),_("click",function(){let i=y(e).$implicit,a=h(3);return w(a.selectAppliance(i))})("keydown.enter",function(){let i=y(e).$implicit,a=h(3);return w(a.selectAppliance(i))}),r(1,"span",65)(2,"mat-icon"),c(3),l()(),r(4,"span",66)(5,"span",67),c(6),l(),r(7,"span",68),c(8),l()(),r(9,"span",69),T(10,xpe,2,0,"mat-icon",70),r(11,"button",71),_("click",function(i){let a=y(e).$implicit,s=h(3);return i.stopPropagation(),w(s.showInfo(a))}),r(12,"mat-icon"),c(13,"info"),l()()()()}if(n&2){let e=o.$implicit,t=h(3);ne("new-template-wizard__appliance--selected",t.applianceToInstall()===e),Ce("aria-selected",t.applianceToInstall()===e),m(3),N(t.emulatorIcon(e)),m(3),N(e.name),m(2),pA(" ",e.vendor_name||"Unknown vendor"," \xB7 ",e.emulator," \xB7 ",t.formatLabel(e.category)," "),m(2),E(t.applianceToInstall()===e?10:-1)}}function wpe(n,o){n&1&&(r(0,"div",62)(1,"mat-icon"),c(2,"search_off"),l(),r(3,"span"),c(4,"No appliances match the current filters"),l()())}function Mpe(n,o){if(n&1){let e=R();r(0,"div",60),Q(1,ype,14,9,"div",61,Kz,!1,wpe,5,0,"div",62),l(),r(4,"mat-paginator",63),_("page",function(i){y(e);let a=h(2);return w(a.onPage(i))}),l()}if(n&2){let e=h(2);m(),K(e.pagedAppliances()),m(3),v("length",e.filteredAppliances().length)("pageIndex",e.pageIndex())("pageSize",e.pageSize())("pageSizeOptions",at(5,rpe))}}function Spe(n,o){if(n&1){let e=R();r(0,"section",26)(1,"div",38)(2,"div",39)(3,"h2",17),c(4,"Available appliances"),l(),r(5,"p",18),c(6," Select an appliance to install. Its settings are pre-configured by the registry. "),l()(),r(7,"button",40),_("click",function(){y(e);let i=h();return w(i.updateAppliances())}),T(8,gpe,3,0)(9,hpe,4,0),l()(),r(10,"div",41)(11,"mat-form-field",42)(12,"mat-label"),c(13,"Search appliances"),l(),r(14,"mat-icon",43),c(15,"search"),l(),r(16,"input",44),_("input",function(i){y(e);let a=h();return w(a.searchText.set(i.target.value))}),l(),T(17,_pe,3,0,"button",45),l(),r(18,"mat-form-field",46)(19,"mat-label"),c(20,"Category"),l(),r(21,"mat-select",47),_("selectionChange",function(i){y(e);let a=h();return w(a.category.set(i.value))}),r(22,"mat-option",48),c(23,"All categories"),l(),Q(24,fpe,2,2,"mat-option",49,Oe),l()(),r(26,"mat-form-field",46)(27,"mat-label"),c(28,"Emulator"),l(),r(29,"mat-select",47),_("selectionChange",function(i){y(e);let a=h();return w(a.emulator.set(i.value))}),r(30,"mat-option",48),c(31,"All emulators"),l(),Q(32,vpe,2,2,"mat-option",49,Oe),l()(),r(34,"mat-form-field",46)(35,"mat-label"),c(36,"Vendor"),l(),r(37,"mat-select",47),_("selectionChange",function(i){y(e);let a=h();return w(a.vendor.set(i.value))}),r(38,"mat-option",48),c(39,"All vendors"),l(),Q(40,Cpe,2,2,"mat-option",49,Oe),l()(),r(42,"mat-form-field",50)(43,"mat-label"),c(44,"Sort by"),l(),r(45,"mat-select",47),_("selectionChange",function(i){y(e);let a=h();return w(a.sortBy.set(i.value))}),r(46,"mat-option",51),c(47,"Name"),l(),r(48,"mat-option",52),c(49,"Emulator"),l(),r(50,"mat-option",53),c(51,"Vendor"),l()()(),r(52,"button",54),_("click",function(){y(e);let i=h();return w(i.toggleSortDirection())}),r(53,"mat-icon"),c(54),l()()(),r(55,"div",55),c(56),l(),T(57,bpe,4,0,"div",56)(58,Mpe,5,6),l()}if(n&2){let e=h();m(7),v("disabled",e.isUpdatingAppliances()),m(),E(e.isUpdatingAppliances()?8:9),m(8),v("value",e.searchText()),m(),E(e.searchText()?17:-1),m(4),v("value",e.category()),m(3),K(e.categories()),m(5),v("value",e.emulator()),m(3),K(e.emulators()),m(5),v("value",e.vendor()),m(3),K(e.vendors()),m(5),v("value",e.sortBy()),m(7),v("matTooltip",e.sortAscending()?"Sort descending":"Sort ascending"),m(2),N(e.sortAscending()?"arrow_upward":"arrow_downward"),m(2),Un(" ",e.filteredAppliances().length," ",e.filteredAppliances().length===1?"appliance":"appliances"," "),m(),E(e.isLoadingAppliances()?57:58)}}function kpe(n,o){n&1&&(L(0,"mat-spinner",57),r(1,"span"),c(2,"Importing..."),l())}function Ppe(n,o){n&1&&(r(0,"span"),c(1,"Browse files"),l())}function Tpe(n,o){if(n&1){let e=R();r(0,"section",26)(1,"h2",17),c(2,"Import an appliance file"),l(),r(3,"p",18),c(4," The appliance file is read locally and its settings are loaded automatically. "),l(),r(5,"div",72)(6,"input",73,1),_("change",function(i){y(e);let a=h();return w(a.addAppliance(i))}),l(),r(8,"mat-icon",74),c(9,"upload_file"),l(),r(10,"span",75),c(11,"Choose a .gns3a or .gns3appliance file to upload"),l(),r(12,"button",76),_("click",function(){y(e);let i=h();return w(i.openApplianceFileBrowser())}),T(13,kpe,3,0)(14,Ppe,2,0,"span"),l()()()}if(n&2){let e=h();m(12),v("disabled",e.isImportingAppliance()),m(),E(e.isImportingAppliance()?13:14)}}function Epe(n,o){n&1&&(r(0,"span",34)(1,"mat-icon"),c(2,"inventory_2"),l(),r(3,"span",35)(4,"span",36),c(5,"Required files"),l(),r(6,"span",37),c(7,"Provide the appliance images"),l()()())}function Ope(n,o){n&1&&(r(0,"mat-icon",91),c(1,"check_circle"),l())}function Dpe(n,o){n&1&&(r(0,"span",97)(1,"mat-icon"),c(2,"check_circle"),l(),r(3,"span"),c(4,"Ready"),l()())}function Ipe(n,o){n&1&&(r(0,"span",98)(1,"mat-icon"),c(2,"cancel"),l(),r(3,"span"),c(4,"Missing"),l()())}function Ape(n,o){if(n&1){let e=R();r(0,"div",102)(1,"div",103)(2,"div",104)(3,"mat-icon"),c(4,"sync"),l(),r(5,"span"),c(6),l()(),r(7,"span",105),c(8),l()(),L(9,"mat-progress-bar",106),r(10,"button",107),_("click",function(){y(e);let i=h(5);return w(i.cancelUploading())}),c(11," Cancel "),l()()}if(n&2){let e=h().$implicit,t=h(4);m(6),X("Importing ",e.filename,"..."),m(2),X("",t.uploadProgress,"%"),m(),v("value",t.uploadProgress)}}function Npe(n,o){if(n&1){let e=R();r(0,"div",94)(1,"div",95)(2,"span",96),c(3),l(),T(4,Dpe,5,0,"span",97)(5,Ipe,5,0,"span",98),l(),r(6,"div",99)(7,"input",100,2),_("change",function(i){let a=y(e).$implicit,s=h(4);return w(s.importImage(i,a.filename))}),l(),r(9,"button",101),_("click",function(){y(e);let i=Te(8);return w(i.click())}),r(10,"mat-icon"),c(11,"upload_file"),l(),r(12,"span"),c(13,"Import"),l()(),r(14,"button",101),_("click",function(){let i=y(e).$implicit,a=h(4);return w(a.downloadImageFromVersion(i.filename))}),r(15,"mat-icon"),c(16,"download"),l(),r(17,"span"),c(18,"Download"),l()()(),T(19,Ape,12,3,"div",102),l()}if(n&2){let e=o.$implicit,t=h(4);ne("new-template-wizard__image--ready",t.checkImageFromVersion(e.filename))("new-template-wizard__image--missing",!t.checkImageFromVersion(e.filename)),m(3),N(e.filename),m(),E(t.checkImageFromVersion(e.filename)?4:5),m(3),v("uploader",t.uploaderImage),m(2),v("disabled",t.isUploading()),m(5),v("disabled",!t.canDownloadImage(e.filename)),m(5),E(t.isUploading()&&t.uploadingImageName===e.filename?19:-1)}}function Fpe(n,o){if(n&1){let e=R();r(0,"mat-expansion-panel",86),_("opened",function(){let i=y(e).$implicit,a=h(3);return w(a.selectVersion(i))}),r(1,"mat-expansion-panel-header")(2,"mat-panel-title",87)(3,"span",88),c(4),l(),r(5,"span",89)(6,"span",90),c(7),l(),T(8,Ope,2,0,"mat-icon",91),l()()(),r(9,"div",92),Q(10,Npe,20,10,"div",93,Xz),l()()}if(n&2){let e=o.$implicit,t=h(3);ne("new-template-wizard__version--selected",t.selectedVersion()===e),v("expanded",t.selectedVersion()===e),m(4),Un(" ",t.applianceToInstall().name," version ",e.name," "),m(2),ne("new-template-wizard__version-count--complete",t.isVersionComplete(e))("new-template-wizard__version-count--partial",!t.isVersionComplete(e)&&t.getVersionReadyCount(e)>0),m(),Un(" ",t.getVersionReadyCount(e),"/",t.getVersionImageCount(e)," ready "),m(),E(t.selectedVersion()===e&&t.isVersionComplete(e)?8:-1),m(2),K(t.getVersionImages(e))}}function Rpe(n,o){if(n&1&&(r(0,"mat-accordion",79),Q(1,Fpe,12,12,"mat-expansion-panel",85,Kz),l()),n&2){let e=h(2);m(),K(e.applianceToInstall().versions||at(0,Qz))}}function zpe(n,o){n&1&&(r(0,"span",97)(1,"mat-icon"),c(2,"check_circle"),l(),r(3,"span"),c(4,"Ready"),l()())}function Lpe(n,o){n&1&&(r(0,"span",98)(1,"mat-icon"),c(2,"cancel"),l(),r(3,"span"),c(4,"Missing"),l()())}function Vpe(n,o){n&1&&(r(0,"mat-icon",70),c(1,"check_circle"),l())}function Bpe(n,o){if(n&1){let e=R();r(0,"div",102)(1,"div",103)(2,"div",104)(3,"mat-icon"),c(4,"sync"),l(),r(5,"span"),c(6),l()(),r(7,"span",105),c(8),l()(),L(9,"mat-progress-bar",106),r(10,"button",107),_("click",function(){y(e);let i=h(4);return w(i.cancelUploading())}),c(11," Cancel "),l()()}if(n&2){let e=h().$implicit,t=h(3);m(6),X("Importing ",e.filename,"..."),m(2),X("",t.uploadProgress,"%"),m(),v("value",t.uploadProgress)}}function jpe(n,o){if(n&1){let e=R();r(0,"div",109),_("click",function(){let i=y(e).$implicit,a=h(3);return w(a.selectImage(i.filename))})("keydown.enter",function(){let i=y(e).$implicit,a=h(3);return w(a.selectImage(i.filename))}),r(1,"div",95)(2,"span",96),c(3),l(),T(4,zpe,5,0,"span",97)(5,Lpe,5,0,"span",98),l(),r(6,"div",99),T(7,Vpe,2,0,"mat-icon",70),r(8,"input",100,2),_("change",function(i){let a=y(e).$implicit,s=h(3);return w(s.importImage(i,a.filename))}),l(),r(10,"button",101),_("click",function(i){y(e);let a=Te(9);return i.stopPropagation(),w(a.click())}),r(11,"mat-icon"),c(12,"upload_file"),l(),r(13,"span"),c(14,"Import"),l()()(),T(15,Bpe,12,3,"div",102),l()}if(n&2){let e=o.$implicit,t=h(3);ne("new-template-wizard__image--selected",t.selectedImage()===e.filename)("new-template-wizard__image--ready",t.checkImageFromVersion(e.filename))("new-template-wizard__image--missing",!t.checkImageFromVersion(e.filename)),Ce("aria-selected",t.selectedImage()===e.filename),m(3),N(e.filename),m(),E(t.checkImageFromVersion(e.filename)?4:5),m(3),E(t.selectedImage()===e.filename&&t.checkImageFromVersion(e.filename)?7:-1),m(),v("uploader",t.uploaderImage),m(2),v("disabled",t.isUploading()),m(5),E(t.isUploading()&&t.uploadingImageName===e.filename?15:-1)}}function $pe(n,o){if(n&1&&(r(0,"div",80),Q(1,jpe,16,13,"div",108,spe),l()),n&2){let e=h(2);m(),K(e.applianceToInstall().images||at(0,Qz))}}function Hpe(n,o){if(n&1&&(r(0,"mat-form-field",111)(1,"mat-label"),c(2),l(),L(3,"input",112),l()),n&2){let e=o.$implicit,t=h(3);m(2),X("",e.key," filename"),m(),v("formControl",t.newVersionFiles[e.key])}}function Upe(n,o){if(n&1){let e=R();r(0,"section",26)(1,"h3",110),c(2,"Create a new version for this appliance"),l(),r(3,"mat-form-field",111)(4,"mat-label"),c(5,"Version name"),l(),L(6,"input",112),l(),Q(7,Hpe,4,2,"mat-form-field",111,Xz),r(9,"div",113)(10,"button",114),_("click",function(){y(e);let i=h(2);return w(i.saveNewVersion())}),c(11," Save version "),l(),r(12,"button",115),_("click",function(){y(e);let i=h(2);return w(i.versionDraft.set(null))}),c(13," Cancel "),l()()()}if(n&2){let e=h(2);m(6),v("formControl",e.newVersionName),m(),K(e.getVersionImages(o))}}function Wpe(n,o){if(n&1){let e=R();r(0,"button",116),_("click",function(){y(e);let i=h(2);return w(i.startNewVersion())}),c(1," Create new version "),l()}if(n&2){let e,t=h(2);v("disabled",t.isUploading()||!((e=t.applianceToInstall().versions)!=null&&e.length))}}function Gpe(n,o){if(n&1){let e=R();r(0,"mat-step",13),se(1,Epe,8,0,"ng-template",14),r(2,"div",15)(3,"section",26)(4,"div",77)(5,"div",39)(6,"h2",17),c(7,"Install the required files"),l(),r(8,"p",18),c(9," Import the images from your computer or download them from the vendor. The status refreshes automatically once an image is available on the controller. "),l()(),r(10,"button",78),_("click",function(){y(e);let i=h();return w(i.refreshImages())}),r(11,"mat-icon"),c(12,"refresh"),l()()(),T(13,Rpe,3,1,"mat-accordion",79)(14,$pe,3,1,"div",80),T(15,Upe,14,1,"section",26),r(16,"div",81)(17,"div",82)(18,"mat-checkbox",83),_("change",function(i){y(e);let a=h();return w(a.onAllowCustomFilesChange(i))}),c(19," Allow custom files "),l(),T(20,Wpe,2,1,"button",84),l()()()()()}if(n&2){let e,t=h();v("completed",t.filesReady()),m(13),E(t.applianceToInstall().qemu?13:14),m(2),E((e=t.versionDraft())?15:-1,e),m(3),v("checked",t.allowCustomFiles()),m(2),E(t.applianceToInstall().qemu?20:-1)}}function qpe(n,o){n&1&&(r(0,"span",34)(1,"mat-icon"),c(2,"check_circle"),l(),r(3,"span",35)(4,"span",36),c(5,"Review & create"),l(),r(6,"span",37),c(7,"Name and create the template"),l()()())}function Qpe(n,o){n&1&&(r(0,"mat-error"),c(1,"A template name is required"),l())}function Kpe(n,o){n&1&&(r(0,"mat-error"),c(1,"The template name contains invalid characters"),l())}function Xpe(n,o){n&1&&(r(0,"mat-error"),c(1,"A template with this name already exists"),l())}function Ype(n,o){if(n&1&&(r(0,"mat-form-field",111)(1,"mat-label"),c(2,"Template name"),l(),L(3,"input",118),T(4,Qpe,2,0,"mat-error"),T(5,Kpe,2,0,"mat-error"),T(6,Xpe,2,0,"mat-error"),l()),n&2){let e=h(2);m(3),v("formControl",e.templateNameControl),m(),E(e.templateNameControl.hasError("required")?4:-1),m(),E(e.templateNameControl.hasError("invalidName")?5:-1),m(),E(e.templateNameControl.hasError("templateExist")?6:-1)}}function Zpe(n,o){if(n&1&&(r(0,"div")(1,"dt"),c(2,"Docker image"),l(),r(3,"dd"),c(4),l()()),n&2){let e=h();m(4),N(e.docker.image)}}function Jpe(n,o){if(n&1&&(r(0,"div")(1,"dt"),c(2,"Version"),l(),r(3,"dd"),c(4),l()(),r(5,"div")(6,"dt"),c(7,"Images"),l(),r(8,"dd"),c(9),l()()),n&2){let e=h(2);m(4),N(o.name),m(5),N(e.getSelectedVersionImageNames())}}function eue(n,o){n&1&&(r(0,"div")(1,"dt"),c(2,"Image"),l(),r(3,"dd"),c(4),l()()),n&2&&(m(4),N(o))}function tue(n,o){if(n&1&&(r(0,"section",26)(1,"h2",17),c(2,"Template name"),l(),r(3,"p",18),c(4,"Choose a unique, descriptive name for the new template."),l(),T(5,Ype,7,4,"mat-form-field",111),l(),r(6,"section",26)(7,"h2",17),c(8,"Template summary"),l(),r(9,"dl",117)(10,"div")(11,"dt"),c(12,"Name"),l(),r(13,"dd"),c(14),l()(),r(15,"div")(16,"dt"),c(17,"Appliance"),l(),r(18,"dd"),c(19),l()(),r(20,"div")(21,"dt"),c(22,"Emulator"),l(),r(23,"dd"),c(24),l()(),r(25,"div")(26,"dt"),c(27,"Vendor"),l(),r(28,"dd"),c(29),l()(),r(30,"div")(31,"dt"),c(32,"Category"),l(),r(33,"dd"),c(34),l()(),T(35,Zpe,5,1,"div"),T(36,Jpe,10,2),T(37,eue,5,1,"div"),l()()),n&2){let e,t,i=o,a=h();m(5),E(a.templateNameControl?5:-1),m(9),N((a.templateNameControl==null?null:a.templateNameControl.value)||"Not set"),m(5),N(i.name),m(5),N(i.emulator),m(5),N(i.vendor_name||"Not set"),m(5),N(a.formatLabel(a.getCategory())),m(),E(i.docker?35:-1),m(),E((e=i.qemu&&a.selectedVersion())?36:-1,e),m(),E((t=(i.dynamips||i.iou)&&a.selectedImage())?37:-1,t)}}function nue(n,o){if(n&1){let e=R();r(0,"button",119),_("click",function(){let i=y(e),a=h();return w(a.showInfo(i))}),c(1,"Appliance info"),l()}}function iue(n,o){if(n&1){let e=R();r(0,"button",120),_("click",function(){y(e),h();let i=Te(11);return w(i.previous())}),r(1,"mat-icon"),c(2,"arrow_back"),l(),c(3," Back "),l()}}function oue(n,o){if(n&1){let e=R();r(0,"button",121),_("click",function(){y(e),h();let i=Te(11);return w(i.next())}),c(1," Next "),r(2,"mat-icon",122),c(3,"arrow_forward"),l()()}if(n&2){let e=h();v("disabled",!e.canAdvance())}}function aue(n,o){n&1&&(L(0,"mat-spinner",57),r(1,"span"),c(2,"Creating..."),l())}function rue(n,o){n&1&&(r(0,"span"),c(1,"Create template"),l(),r(2,"mat-icon",122),c(3,"arrow_forward"),l())}function sue(n,o){if(n&1){let e=R();r(0,"button",123),_("click",function(){y(e);let i=h();return w(i.createTemplate())}),T(1,aue,3,0)(2,rue,4,0),l()}if(n&2){let e=h();v("disabled",!e.nameValid()||e.isCreating()),m(),E(e.isCreating()?1:2)}}var Mh="all",WE=["bios_image","hda_disk_image","hdb_disk_image","hdc_disk_image","hdd_disk_image","cdrom_image","cdrom2_image"],hy=(()=>{class n{controller;selectedStepIndex=z(0);action=z("install");applianceToInstall=z(null);selectedVersion=z(null);selectedImage=z(null);isCreating=z(!1);allowCustomFiles=z(!1);versionDraft=z(null);newVersionName=new Ge("",Ue.required);newVersionFiles={};allAppliances=z([]);isLoadingAppliances=z(!0);isUpdatingAppliances=z(!1);searchText=$("");category=$(Mh);emulator=$(Mh);vendor=$(Mh);categories=z([]);emulators=z([]);vendors=z([]);sortBy=$("name");sortAscending=z(!0);pageIndex=z(0);pageSize=z(5);filteredAppliances=Ne(()=>{let e=this.searchText().toLowerCase(),t=this.category(),i=this.emulator(),a=this.vendor(),s=this.sortAscending()?1:-1,d=this.allAppliances().filter(u=>!(e&&!u.name.toLowerCase().includes(e)||t!==Mh&&u.category!==t||i!==Mh&&u.emulator!==i||a!==Mh&&u.vendor_name!==a)),p=this.sortBy();return d.sort((u,g)=>{let C=(p==="vendor"?u.vendor_name:p==="emulator"?u.emulator:u.name)||"",M=(p==="vendor"?g.vendor_name:p==="emulator"?g.emulator:g.name)||"";return C.toLowerCase().localeCompare(M.toLowerCase())*s})});pagedAppliances=Ne(()=>{let e=this.pageIndex()*this.pageSize();return this.filteredAppliances().slice(e,e+this.pageSize())});qemuImages=z([]);iosImages=z([]);iouImages=z([]);uploaderImage;uploadProgress=0;uploadingImageName="";isUploading=z(!1);isImportingAppliance=z(!1);checksumCancelled=!1;customImageFilenames=new Set;templateNameControl;nameValid=z(!1);requiresImages=Ne(()=>{let e=this.applianceToInstall();return!!e&&!e.docker});lastStepIndex=Ne(()=>this.requiresImages()?3:2);browseStepTitle=Ne(()=>this.action()==="install"?"Choose appliance":"Import appliance");browseStepDescription=Ne(()=>this.action()==="install"?"Select from the registry":"Upload a .gns3a file");filesReady=Ne(()=>{let e=this.applianceToInstall();if(!e)return!1;if(e.qemu){let i=this.selectedVersion();return!!i&&this.isVersionComplete(i)}let t=this.selectedImage();return!!t&&this.checkImageFromVersion(t)});canAdvance=Ne(()=>{switch(this.selectedStepIndex()){case 0:return!0;case 1:return!!this.applianceToInstall();case 2:return this.requiresImages()?this.filesReady():this.nameValid();default:return this.nameValid()}});stepper=ln("stepper");applianceFileInput=ln("applianceFile");router=f(Ft);location=f(ki);route=f($t);controllerService=f(_t);applianceService=f(uy);toasterService=f(re);qemuService=f(Rl);dockerService=f(td);iosService=f(Km);iouService=f(Xm);templateService=f(fa);dialog=f(Xe);cd=f(oe);progressService=f(mo);snackBar=f(pl);uploadServiceService=f(Al);projectNameValidator=f(zl);destroyRef=f(Va);constructor(){Vn(()=>{this.searchText(),this.category(),this.emulator(),this.vendor(),this.pageIndex.set(0)}),Vn(()=>{let e=this.applianceToInstall();if(e){if(this.qemuImages(),this.iosImages(),this.iouImages(),e.qemu){if(!this.selectedVersion()){let t=(e.versions||[]).find(i=>this.isVersionComplete(i));t&&this.selectedVersion.set(t)}}else if((e.dynamips||e.iou)&&!this.selectedImage()){let t=(e.images||[]).find(i=>this.checkImageFromVersion(i.filename));t&&this.selectedImage.set(t.filename)}}})}ngOnInit(){this.setupUploaders(),this.controller?this.onControllerReady():this.loadController()}loadController(){let e=this.route.snapshot.paramMap.get("controller_id")??"";this.controllerService.get(parseInt(e,10)).then(t=>{this.controller=t,this.onControllerReady(),this.cd.markForCheck()},t=>{let i=t.error?.message||t.message||"Failed to load controller";this.toasterService.error(i),this.cd.markForCheck()})}onControllerReady(){let e=new Ye;this.templateNameControl=new Ge("",[Ue.required,this.projectNameValidator.get],[t=>Gz(this.controller,this.templateService)(t).pipe(Qn(i=>e.next(i===null)))]),this.templateNameControl.statusChanges.pipe(wo(this.destroyRef)).subscribe(()=>{this.nameValid.set(this.templateNameControl.status==="VALID")}),e.pipe(wo(this.destroyRef)).subscribe(t=>{this.nameValid.set(t),this.cd.markForCheck()}),this.loadAppliances(),this.refreshImages()}setupUploaders(){this.uploaderImage=new kl({url:""}),this.uploaderImage.onAfterAddingFile=e=>{e.withCredentials=!1},this.uploaderImage.onErrorItem=(e,t,i,a)=>{this.toasterService.error(i===409?"An error has occurred because image already exists":"Failed to import image"),this.resetUploadState(),this.cd.markForCheck()},this.uploaderImage.onSuccessItem=(e,t,i,a)=>{this.toasterService.success("Image successfully imported");let s=this.uploadingImageName;this.resetUploadState(),this.cd.markForCheck(),this.refreshImagesUntilReady(s)},this.uploaderImage.onProgressItem=e=>{this.uploadProgress=e.progress,this.uploadServiceService.processBarCount(this.uploadProgress),this.cd.markForCheck()},this.uploadServiceService.currentCancelItemDetails.pipe(wo(this.destroyRef)).subscribe(e=>{e&&this.cancelUploading()})}onStepChange(e){this.selectedStepIndex.set(e.selectedIndex),this.requiresImages()&&e.selectedIndex===2&&this.refreshImages()}setAction(e){this.action.set(e),this.resetCustomVersionState(),this.applianceToInstall.set(null),this.selectedVersion.set(null),this.selectedImage.set(null),setTimeout(()=>{this.stepper()?.next(),this.cd.markForCheck()},150)}selectAppliance(e){this.resetCustomVersionState(),this.applianceToInstall.set(e),this.selectedVersion.set(null),this.selectedImage.set(null),this.templateNameControl&&this.templateNameControl.setValue(e.name),setTimeout(()=>{this.stepper()?.next(),this.cd.markForCheck()},150)}selectVersion(e){this.selectedVersion.set(e)}selectImage(e){this.selectedImage.set(e)}onCloseClick(){this.goBack()}goBack(){let e=this.controller?.id??parseInt(this.route.snapshot.paramMap.get("controller_id")??"",10);ji(this.location,this.router,["/controller",e,"preferences"])}loadAppliances(){this.isLoadingAppliances.set(!0),this.applianceService.getAppliances(this.controller).subscribe({next:e=>{this.applyAppliances(e),this.isLoadingAppliances.set(!1),this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load appliances";this.toasterService.error(t),this.isLoadingAppliances.set(!1),this.cd.markForCheck()}})}updateAppliances(){this.isUpdatingAppliances.set(!0),this.progressService.activate(),this.applianceService.updateAppliances(this.controller).subscribe({next:e=>{this.applyAppliances(e),this.progressService.deactivate(),this.isUpdatingAppliances.set(!1),this.toasterService.success("Appliances are up-to-date."),this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to update appliances";this.progressService.deactivate(),this.isUpdatingAppliances.set(!1),this.toasterService.error(t),this.cd.markForCheck()}})}applyAppliances(e){e.forEach(t=>{t.docker&&(t.emulator="Docker"),t.dynamips&&(t.emulator="Dynamips"),t.iou&&(t.emulator="Iou"),t.qemu&&(t.emulator="Qemu")}),this.allAppliances.set(e),this.extractFilterOptions(e)}extractFilterOptions(e){let t=new Set,i=new Set,a=new Set;e.forEach(s=>{s.category&&t.add(s.category),s.emulator&&i.add(s.emulator),s.vendor_name&&a.add(s.vendor_name)}),this.categories.set(Array.from(t).sort()),this.emulators.set(Array.from(i).sort()),this.vendors.set(Array.from(a).sort())}onPage(e){this.pageIndex.set(e.pageIndex),this.pageSize.set(e.pageSize)}toggleSortDirection(){this.sortAscending.set(!this.sortAscending())}formatLabel(e){return e?e.replace(/_/g," ").replace(/\b\w/g,t=>t.toUpperCase()):""}emulatorIcon(e){switch(e.emulator){case"Docker":return"deployed_code";case"Qemu":return"desktop_windows";case"Dynamips":return"router";case"Iou":return"hub";default:return"dns"}}showInfo(e){this.dialog.open(gy,{panelClass:["base-dialog-panel","dialog-small-panel"],data:{appliance:e}})}openApplianceFileBrowser(){let e=this.applianceFileInput()?.nativeElement;e&&(e.value="",e.click())}addAppliance(e){let t=e.target.files?.[0];if(!t)return;if(!this.controller){this.toasterService.error("Controller is not loaded yet. Please try again.");return}let i=new FileReader;i.onloadend=()=>{this.isImportingAppliance.set(!0);try{let a=wh(JSON.parse(i.result));if(!a||typeof a!="object"||!a.name){this.toasterService.error(`'${t.name}' is not a valid appliance file`);return}if(!a.qemu&&!a.dynamips&&!a.iou&&!a.docker){this.toasterService.error("Template type not supported");return}a.docker&&(a.emulator="Docker"),a.dynamips&&(a.emulator="Dynamips"),a.iou&&(a.emulator="Iou"),a.qemu&&(a.emulator="Qemu"),this.resetCustomVersionState(),this.applianceToInstall.set(a),this.selectedVersion.set(null),this.selectedImage.set(null),this.templateNameControl&&this.templateNameControl.setValue(a.name),this.toasterService.success("Appliance imported successfully"),setTimeout(()=>{this.stepper()?.next(),this.cd.markForCheck()},100)}catch{this.toasterService.error(`'${t.name}' is not a valid appliance file`)}finally{this.isImportingAppliance.set(!1),this.cd.markForCheck()}},i.readAsText(t)}resetCustomVersionState(){this.allowCustomFiles.set(!1),this.versionDraft.set(null),this.customImageFilenames.clear(),this.newVersionName.reset("");for(let e of WE)delete this.newVersionFiles[e]}onAllowCustomFilesChange(e){if(!e.checked){this.allowCustomFiles.set(!1);return}e.source.checked=!1;let t=this.applianceToInstall();this.dialog.open(jt,{autoFocus:".cancel-button",disableClose:!0,panelClass:["base-confirmation-dialog-panel","confirmation-warning-panel","dialog-small-panel"],data:{title:"Custom files",message:"This option allows files with different MD5 checksums. This feature is only for advanced users and can lead to unexpected problems. Do you want to proceed?",confirmButtonText:"Yes",cancelButtonText:"No",tone:"warning",icon:"help"}}).afterClosed().pipe(wo(this.destroyRef)).subscribe(a=>{this.applianceToInstall()===t&&this.allowCustomFiles.set(a===!0),this.cd.markForCheck()})}startNewVersion(){let e=this.selectedVersion()||this.applianceToInstall()?.versions?.[0];if(e){this.newVersionName.setValue("");for(let t of WE)delete this.newVersionFiles[t],e.images[t]&&(this.newVersionFiles[t]=new Ge(e.images[t],Ue.required));this.versionDraft.set(e)}}saveNewVersion(){let e=this.applianceToInstall(),t=this.versionDraft();if(!e||!t)return;let i=(this.newVersionName.value||"").trim();if(!i||e.versions.some(u=>u.name===i)){this.toasterService.error("Please enter a unique version name");return}let a={},s=[...e.images||[]],d=[];for(let{key:u}of this.getVersionImages(t)){let g=(this.newVersionFiles[u]?.value||"").trim();if(!g||/[/\\]/.test(g)||g==="."||g===".."){this.toasterService.error("Please enter an image filename without a path");return}a[u]=g,s.some(C=>C.filename===g)||(s.push({filename:g,version:i,md5sum:"",filesize:0}),d.push(g))}d.forEach(u=>this.customImageFilenames.add(u));let p=ze(q({},t),{name:i,images:a});this.applianceToInstall.set(ze(q({},e),{images:s,versions:[...e.versions,p]})),this.selectedVersion.set(p),this.versionDraft.set(null)}findMatchingControllerImage(e,t){if(this.allowCustomFiles()){let i=e.find(a=>a.filename===t.filename);if(i)return i}return t.md5sum?e.find(i=>i.checksum===t.md5sum):void 0}refreshImages(){this.qemuService.getImages(this.controller).subscribe({next:e=>{this.qemuImages.set(e),this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load QEMU images";this.toasterService.error(t),this.cd.markForCheck()}}),this.iosService.getImages(this.controller).subscribe({next:e=>{this.iosImages.set(e),this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load IOS images";this.toasterService.error(t),this.cd.markForCheck()}}),this.iouService.getImages(this.controller).subscribe({next:e=>{this.iouImages.set(e),this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load IOU images";this.toasterService.error(t),this.cd.markForCheck()}})}refreshImagesUntilReady(e,t=0){let a=this.applianceToInstall();(a?.qemu?this.qemuService:a?.dynamips?this.iosService:this.iouService).getImages(this.controller).pipe(wo(this.destroyRef)).subscribe({next:d=>{a?.qemu?this.qemuImages.set(d):a?.dynamips?this.iosImages.set(d):this.iouImages.set(d),this.cd.markForCheck(),!(this.checkImageFromVersion(e)||t>=15)&&La(1e3).pipe(wo(this.destroyRef)).subscribe(()=>this.refreshImagesUntilReady(e,t+1))},error:()=>{t>=15||La(1e3).pipe(wo(this.destroyRef)).subscribe(()=>this.refreshImagesUntilReady(e,t+1))}})}importImage(e,t){let i=e?.target?.files?.[0];if(!i)return;let a=this.applianceToInstall();this.uploadingImageName=t,this.checksumCancelled=!1,this.uploadServiceService.setMessage("Computing checksum"),this.uploadServiceService.setComputing(!0),this.openSnackBar(),this.uploadServiceService.processBarCount(0),this.computeChecksumMd5(i,!1,s=>{this.uploadServiceService.processBarCount(s)}).then(s=>{if(this.checksumCancelled)return;if(this.applianceToInstall()!==a){this.resetUploadState(),this.cd.markForCheck();return}let d=this.applianceToInstall()?.images?.find(u=>u.filename===t);if(!d){this.resetUploadState(),this.toasterService.error(`Image '${t}' was not found in the appliance definition`),this.cd.markForCheck();return}let p=this.customImageFilenames.has(t);if(p){let u=this.applianceToInstall();this.applianceToInstall.set(ze(q({},u),{images:u.images.map(g=>g===d?ze(q({},g),{md5sum:s,filesize:i.size}):g)}))}!p&&d.md5sum!==s&&!this.allowCustomFiles()?(this.uploadServiceService.processBarCount(null),this.uploadServiceService.setMessage(""),this.uploadServiceService.setComputing(!1),this.progressService.deactivate(),this.dialog.open(jt,{autoFocus:".cancel-button",disableClose:!0,panelClass:["base-confirmation-dialog-panel","confirmation-warning-panel","dialog-small-panel"],data:{title:"Use image with a different checksum?",message:`The selected file has MD5 checksum ${s}, but ${d.md5sum} was expected.`,note:"Only continue if you trust this image.",confirmButtonText:"Use image",tone:"warning",icon:"verified_user"}}).afterClosed().pipe(wo(this.destroyRef)).subscribe(g=>{if(this.checksumCancelled||this.applianceToInstall()!==a){this.resetUploadState(),this.cd.markForCheck();return}g?(this.openSnackBar(),this.uploadServiceService.setMessage("Uploading"),this.uploadServiceService.setComputing(!1),this.importImageFile(t)):(this.resetUploadState(),this.cd.markForCheck())})):(this.uploadServiceService.setMessage("Uploading"),this.uploadServiceService.setComputing(!1),this.uploadServiceService.processBarCount(0),this.importImageFile(t))}).catch(s=>{this.checksumCancelled||(this.resetUploadState(),this.toasterService.error(typeof s=="string"?s:"MD5 computation failed - error reading the file"),this.cd.markForCheck())})}importImageFile(e){let t=this.applianceService.getUploadPath(this.controller,e);this.uploaderImage.queue.forEach(s=>s.url=t);let i=this.uploaderImage.queue[0],a=i?.options;if(!i||!a){this.resetUploadState(),this.toasterService.error("The selected file could not be queued for upload"),this.cd.markForCheck();return}a.disableMultipart=!0,a.headers=[{name:"Authorization",value:"Bearer "+this.controller.authToken}],this.isUploading.set(!0),this.uploadProgress=0,this.uploaderImage.uploadItem(i),this.cd.markForCheck()}cancelUploading(){this.checksumCancelled=!0,this.resetUploadState(),this.toasterService.warning("File upload cancelled"),this.uploadServiceService.cancelFileUploading(!1),this.cd.markForCheck()}resetUploadState(){this.progressService.deactivate(),this.uploaderImage.clearQueue(),this.uploadProgress=0,this.isUploading.set(!1),this.uploadingImageName="",this.uploadServiceService.processBarCount(null),this.uploadServiceService.setMessage(""),this.uploadServiceService.setComputing(!1)}checkImageFromVersion(e){let t=this.applianceToInstall();if(!t)return!1;let i=t.images?.find(a=>a.filename===e);if(!i)return!1;if(t.qemu){if(this.findMatchingControllerImage(this.qemuImages(),i))return!0}else if(t.dynamips){if(this.findMatchingControllerImage(this.iosImages(),i))return!0}else if(t.iou&&this.findMatchingControllerImage(this.iouImages(),i))return!0;return!1}getVersionImages(e){return WE.filter(t=>e.images[t]).map(t=>({key:t,filename:e.images[t]}))}getVersionImageCount(e){return this.getVersionImages(e).length}getVersionReadyCount(e){return this.getVersionImages(e).filter(t=>this.checkImageFromVersion(t.filename)).length}isVersionComplete(e){return this.getVersionImageCount(e)>0&&this.getVersionReadyCount(e)===this.getVersionImageCount(e)}openConfirmationDialog(e,t){this.dialog.open(jt,{autoFocus:".cancel-button",disableClose:!0,panelClass:["base-confirmation-dialog-panel","confirmation-neutral-panel","dialog-small-panel"],data:{title:"Open external download?",message:e,confirmButtonText:"Open download",tone:"neutral",icon:"open_in_new"}}).afterClosed().subscribe(a=>{a&&window.open(t)})}downloadImage(e){let t="Download will redirect you where the required file can be downloaded, you may have to be registered with the vendor in order to download the file.",i=`The file is compressed with ${e.compression}, it must be uncompressed first.`;e.direct_download_url?e.compression?this.openConfirmationDialog(i,e.direct_download_url):window.open(e.direct_download_url):this.openConfirmationDialog(t,e.download_url)}canDownloadImage(e){let t=this.applianceToInstall()?.images?.find(i=>i.filename===e);return!!(t?.direct_download_url||t?.download_url)}downloadImageFromVersion(e){this.applianceToInstall().images.forEach(t=>{t.filename===e&&this.downloadImage(t)})}getCategory(){return this.applianceToInstall().category==="multilayer_switch"?"switch":this.applianceToInstall().category}buildIouTemplate(e,t){let i=this.applianceToInstall(),a=e.filename,s=i.images.filter(u=>u.filename===a)[0],d=this.findMatchingControllerImage(this.iouImages(),s);d&&(a=d.filename);let p=new fh;return p.nvram=i.iou.nvram,p.ram=i.iou.ram,p.ethernet_adapters=i.iou.ethernet_adapters,p.serial_adapters=i.iou.serial_adapters,p.startup_config=i.iou.startup_config,p.category=this.getCategory(),p.default_name_format=i.default_name_format,p.symbol=i.symbol,p.tags=i.tags||[],p.compute_id="local",p.template_id=xo(),p.path=a,p.template_type="iou",p.netmiko_device_type=i.netmiko_device_type||null,p.appliance_metadata=_v(i),p.name=t,p}buildIosTemplate(e,t){let i=this.applianceToInstall(),a=e.filename,s=i.images.filter(u=>u.filename===a)[0],d=this.findMatchingControllerImage(this.iosImages(),s);d&&(a=d.filename);let p=new _h;return p.chassis=i.dynamips.chassis,p.nvram=i.dynamips.nvram,p.platform=i.dynamips.platform,p.ram=i.dynamips.ram,p.startup_config=i.dynamips.startup_config,p.slot0=i.dynamips.slot0,p.slot1=i.dynamips.slot1,p.slot2=i.dynamips.slot2,p.slot3=i.dynamips.slot3,p.slot4=i.dynamips.slot4,p.slot5=i.dynamips.slot5,p.slot6=i.dynamips.slot6,p.slot7=i.dynamips.slot7,p.category=this.getCategory(),p.default_name_format=i.default_name_format,p.symbol=i.symbol,p.tags=i.tags||[],p.compute_id="local",p.template_id=xo(),p.image=a,p.template_type="dynamips",p.netmiko_device_type=i.netmiko_device_type||null,p.appliance_metadata=_v(i),p.name=t,p}buildDockerTemplate(e){let t=this.applianceToInstall(),i=new py,a=t.docker;return i.adapters=a.adapters,i.image=a.image,i.console_type=a.console_type,i.start_command=a.start_command,i.environment=a.environment,i.extra_hosts=a.extra_hosts,i.extra_volumes=a.extra_volumes||[],i.extra_configs=(a.extra_configs||[]).filter(s=>(s.target||"").trim()).map(s=>({target:s.target.trim(),content:s.content??""})),i.custom_adapters=t.custom_adapters||[],i.mac_address=a.mac_address,i.cpus=a.cpus,i.memory=a.mem_limit,i.console_http_path=a.console_http_path,i.console_http_port=a.console_http_port,i.console_resolution=a.console_resolution,i.template_type="docker",i.category=this.getCategory(),i.default_name_format=t.default_name_format,i.symbol=t.symbol,i.tags=t.tags||[],i.usage=t.usage,i.netmiko_device_type=t.netmiko_device_type||null,i.appliance_metadata=_v(t),i.compute_id="local",i.template_id=xo(),i.name=e,i}findControllerImageName(e){if(e){let t=this.applianceToInstall()?.images?.find(a=>a.filename===e);if(!t)return e;let i=this.findMatchingControllerImage(this.qemuImages(),t);i&&(e=xh(i))}return e}buildQemuTemplate(e,t){let i=this.applianceToInstall(),a=Wz(i,e)||{},s=q(q({},i.qemu||{}),a),d=new yh;return d.ram=s.ram,d.adapters=s.adapters,d.adapter_type=s.adapter_type,d.boot_priority=s.boot_priority,d.console_type=s.console_type,d.hda_disk_interface=s.hda_disk_interface,d.hdb_disk_interface=s.hdb_disk_interface,d.hdc_disk_interface=s.hdc_disk_interface,d.hdd_disk_interface=s.hdd_disk_interface,d.category=e.category||this.getCategory(),d.first_port_name=s.first_port_name??i.first_port_name,d.port_name_format=s.port_name_format??i.port_name_format,d.port_segment_size=s.port_segment_size??i.port_segment_size,d.default_name_format=i.default_name_format,d.symbol=e.symbol||i.symbol,d.tags=i.tags||[],d.compute_id="local",d.template_id=xo(),d.bios_image=this.findControllerImageName(e.images.bios_image),d.hda_disk_image=this.findControllerImageName(e.images.hda_disk_image),d.hdb_disk_image=this.findControllerImageName(e.images.hdb_disk_image),d.hdc_disk_image=this.findControllerImageName(e.images.hdc_disk_image),d.hdd_disk_image=this.findControllerImageName(e.images.hdd_disk_image),d.cdrom_image=this.findControllerImageName(e.images.cdrom_image),d.cdrom2_image=this.findControllerImageName(e.images.cdrom2_image),d.cdrom_interface=s.cdrom_interface||"ide",d.cdrom2_interface=s.cdrom2_interface||"ide",d.template_type="qemu",d.usage=e.usage||i.usage,d.platform=s.platform??s.arch,d.netmiko_device_type=s.netmiko_device_type||i.netmiko_device_type||null,d.appliance_metadata=_v(i,e),d.name=t,d}createTemplate(){let e=this.applianceToInstall();if(!e){this.toasterService.error("Please select an appliance first");return}if(!this.templateNameControl||this.templateNameControl.invalid){this.toasterService.error("Please enter correct name for new template");return}let t=this.templateNameControl.value;this.isCreating.set(!0);let i;if(e.qemu){let a=this.selectedVersion();if(!a||!this.isVersionComplete(a)){this.isCreating.set(!1),this.toasterService.error("Please select a version with all required images");return}i=this.qemuService.addTemplate(this.controller,this.buildQemuTemplate(a,t))}else if(e.dynamips){let a=e.images.filter(s=>s.filename===this.selectedImage())[0];if(!a||!this.checkImageFromVersion(a.filename)){this.isCreating.set(!1),this.toasterService.error("Please select an image available on the controller");return}i=this.iosService.addTemplate(this.controller,this.buildIosTemplate(a,t))}else if(e.iou){let a=e.images.filter(s=>s.filename===this.selectedImage())[0];if(!a||!this.checkImageFromVersion(a.filename)){this.isCreating.set(!1),this.toasterService.error("Please select an image available on the controller");return}i=this.iouService.addTemplate(this.controller,this.buildIouTemplate(a,t))}else i=this.dockerService.addTemplate(this.controller,this.buildDockerTemplate(t));i.subscribe({next:a=>{this.templateService.newTemplateCreated.next(a),this.toasterService.success("Template added"),this.isCreating.set(!1),this.goBack()},error:a=>{let s=a.error?.message||a.message||"Failed to add template";this.isCreating.set(!1),this.toasterService.error(s),this.cd.markForCheck()}})}getSelectedVersionImageNames(){let e=this.selectedVersion();return e?this.getVersionImages(e).map(t=>t.filename).join(", "):""}computeChecksumMd5(e,t=!1,i){return new Promise((a,s)=>{let p=new qz.ArrayBuffer,u=new FileReader,g=0;if(e.size===0){a(p.end(t));return}u.onerror=function(){s("MD5 computation failed - error reading the file")};function C(M){let x=Math.min(e.size,M+2097152);u.readAsArrayBuffer(e.slice(M,x))}u.onload=function(M){if(p.append(M.target.result),g+=2097152,i){let x=Math.min(100,Math.floor(Math.min(g,e.size)/e.size*100));i(x)}g<e.size?C(g):a(p.end(t))},C(0)})}openSnackBar(){this.snackBar.openFromComponent(Nl,{panelClass:"uplaoding-file-snackabar",data:{upload_file_type:"Image"}})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-new-template-dialog"]],viewQuery:function(t,i){t&1&&Bn(i.stepper,ope,5)(i.applianceFileInput,ape,5),t&2&&jn(2)},inputs:{controller:"controller",searchText:[1,"searchText"],category:[1,"category"],emulator:[1,"emulator"],vendor:[1,"vendor"],sortBy:[1,"sortBy"]},outputs:{searchText:"searchTextChange",category:"categoryChange",emulator:"emulatorChange",vendor:"vendorChange",sortBy:"sortByChange"},features:[un([zl])],decls:59,vars:17,consts:[["stepper",""],["applianceFile",""],["fileImage",""],[1,"template-wizard","new-template-wizard"],[1,"new-template-wizard__header","template-wizard__header"],["mat-icon-button","","type","button","aria-label","Back to templates","matTooltip","Back to templates","matTooltipClass","custom-tooltip",1,"template-wizard__back",3,"click"],[1,"template-wizard__heading"],[1,"new-template-wizard__title","template-wizard__title"],[1,"new-template-wizard__body","template-wizard__body"],[1,"new-template-wizard__stepper-card","template-wizard__stepper-card"],[1,"template-wizard__stepper",3,"selectionChange","linear"],["matStepperIcon","edit"],["matStepperIcon","done"],[3,"completed"],["matStepLabel",""],[1,"template-wizard__panel"],[1,"template-wizard__section","new-template-wizard__method-section"],[1,"template-wizard__section-title"],[1,"template-wizard__section-copy"],["role","radiogroup","aria-label","Creation method",1,"new-template-wizard__method-options"],["mat-stroked-button","","type","button",1,"new-template-wizard__method-option",3,"click"],[1,"new-template-wizard__method-icon"],[1,"new-template-wizard__method-text"],[1,"new-template-wizard__method-title"],[1,"new-template-wizard__method-description"],[1,"new-template-wizard__method-check"],[1,"template-wizard__section"],[1,"new-template-wizard__actions","template-wizard__actions"],["mat-stroked-button","","type","button",1,"new-template-wizard__cancel",3,"click"],[1,"template-wizard__step-actions"],["mat-stroked-button","","type","button"],["mat-button","","type","button",1,"template-wizard__previous"],["mat-raised-button","","color","primary","type","button",1,"template-wizard__next",3,"disabled"],["mat-raised-button","","color","primary","type","button",1,"new-template-wizard__submit",3,"disabled"],[1,"template-wizard__step-label"],[1,"template-wizard__step-label-text"],[1,"template-wizard__step-label-title"],[1,"template-wizard__step-label-description"],[1,"new-template-wizard__browse-header"],[1,"new-template-wizard__browse-heading"],["mat-raised-button","","color","primary","type","button","matTooltip","Update from online registry","matTooltipClass","custom-tooltip",1,"new-template-wizard__registry-update",3,"click","disabled"],[1,"new-template-wizard__filters"],["appearance","outline","subscriptSizing","dynamic",1,"new-template-wizard__search"],["matPrefix",""],["matInput","","type","text",3,"input","value"],["mat-icon-button","","matSuffix","","aria-label","Clear search"],["appearance","outline","subscriptSizing","dynamic",1,"new-template-wizard__filter"],[3,"selectionChange","value"],["value","all"],[3,"value"],["appearance","outline","subscriptSizing","dynamic",1,"new-template-wizard__sort-field"],["value","name"],["value","emulator"],["value","vendor"],["mat-icon-button","","type","button","matTooltipClass","custom-tooltip",1,"new-template-wizard__sort-toggle",3,"click","matTooltip"],[1,"new-template-wizard__result-count"],[1,"new-template-wizard__loading"],["diameter","18"],["mat-icon-button","","matSuffix","","aria-label","Clear search",3,"click"],["diameter","40"],["role","listbox","aria-label","Appliances",1,"new-template-wizard__appliance-list"],["role","option","tabindex","0",1,"new-template-wizard__appliance",3,"new-template-wizard__appliance--selected"],[1,"new-template-wizard__empty"],["showFirstLastButtons","",3,"page","length","pageIndex","pageSize","pageSizeOptions"],["role","option","tabindex","0",1,"new-template-wizard__appliance",3,"click","keydown.enter"],[1,"new-template-wizard__appliance-icon"],[1,"new-template-wizard__appliance-text"],[1,"new-template-wizard__appliance-name"],[1,"new-template-wizard__appliance-meta"],[1,"new-template-wizard__appliance-actions"],[1,"new-template-wizard__appliance-check"],["mat-icon-button","","type","button","matTooltip","Show info","matTooltipClass","custom-tooltip","aria-label","Show appliance information",3,"click"],[1,"new-template-wizard__import-area"],["type","file","accept",".gns3appliance, .gns3a",1,"new-template-wizard__file-input",3,"change"],[1,"new-template-wizard__import-icon"],[1,"new-template-wizard__import-text"],["mat-raised-button","","color","primary","type","button",1,"new-template-wizard__import-button",3,"click","disabled"],[1,"new-template-wizard__files-header"],["mat-icon-button","","type","button","matTooltip","Refresh list of images","matTooltipClass","custom-tooltip","aria-label","Refresh list of images",3,"click"],[1,"new-template-wizard__versions"],[1,"new-template-wizard__images"],[1,"new-template-wizard__files-footer"],[1,"new-template-wizard__file-options"],[3,"change","checked"],["mat-stroked-button","","type","button",3,"disabled"],[3,"expanded","new-template-wizard__version--selected"],[3,"opened","expanded"],[1,"new-template-wizard__version-title"],[1,"new-template-wizard__version-name"],[1,"new-template-wizard__version-summary"],[1,"new-template-wizard__version-count"],[1,"new-template-wizard__version-check"],[1,"new-template-wizard__version-content"],[1,"new-template-wizard__image",3,"new-template-wizard__image--ready","new-template-wizard__image--missing"],[1,"new-template-wizard__image"],[1,"new-template-wizard__image-info"],[1,"new-template-wizard__image-name"],[1,"new-template-wizard__status-badge","new-template-wizard__status-badge--ready"],[1,"new-template-wizard__status-badge","new-template-wizard__status-badge--missing"],[1,"new-template-wizard__image-actions"],["type","file","ng2FileSelect","",1,"new-template-wizard__file-input",3,"change","uploader"],["mat-raised-button","","color","primary","type","button",3,"click","disabled"],[1,"new-template-wizard__upload-progress"],[1,"new-template-wizard__progress-info"],[1,"new-template-wizard__progress-text"],[1,"new-template-wizard__progress-percentage"],["mode","determinate",3,"value"],["mat-button","","type","button",1,"new-template-wizard__cancel-button",3,"click"],["role","option","tabindex","0",1,"new-template-wizard__image","new-template-wizard__image--selectable",3,"new-template-wizard__image--selected","new-template-wizard__image--ready","new-template-wizard__image--missing"],["role","option","tabindex","0",1,"new-template-wizard__image","new-template-wizard__image--selectable",3,"click","keydown.enter"],[1,"new-template-wizard__version-heading"],["appearance","outline",1,"template-wizard__field"],["matInput","","required","",3,"formControl"],[1,"new-template-wizard__version-actions"],["mat-raised-button","","type","button",1,"new-template-wizard__save-version",3,"click"],["mat-raised-button","","type","button",1,"new-template-wizard__cancel-version",3,"click"],["mat-stroked-button","","type","button",3,"click","disabled"],[1,"new-template-wizard__summary"],["matInput","","required","","type","text",3,"formControl"],["mat-stroked-button","","type","button",3,"click"],["mat-button","","type","button",1,"template-wizard__previous",3,"click"],["mat-raised-button","","color","primary","type","button",1,"template-wizard__next",3,"click","disabled"],["iconPositionEnd",""],["mat-raised-button","","color","primary","type","button",1,"new-template-wizard__submit",3,"click","disabled"]],template:function(t,i){if(t&1&&(r(0,"div",3)(1,"header",4)(2,"button",5),_("click",function(){return i.goBack()}),r(3,"mat-icon"),c(4,"arrow_back"),l()(),r(5,"div",6)(6,"h1",7),c(7,"Install appliance"),l()()(),r(8,"main",8)(9,"section",9)(10,"mat-horizontal-stepper",10,0),_("selectionChange",function(s){return i.onStepChange(s)}),se(12,lpe,1,1,"ng-template",11)(13,cpe,1,1,"ng-template",12),r(14,"mat-step",13),se(15,dpe,8,0,"ng-template",14),r(16,"div",15)(17,"section",16)(18,"h2",17),c(19,"How do you want to create the template?"),l(),r(20,"p",18),c(21," Install a pre-configured appliance from the registry on the GNS3 controller, or import an appliance file from your computer. "),l(),r(22,"div",19)(23,"button",20),_("click",function(){return i.setAction("install")}),r(24,"mat-icon",21),c(25,"cloud_download"),l(),r(26,"span",22)(27,"span",23),c(28,"Install new appliance from the GNS3 controller"),l(),r(29,"span",24),c(30," Browse pre-configured appliances available in the registry "),l()(),T(31,mpe,2,0,"mat-icon",25),l(),r(32,"button",20),_("click",function(){return i.setAction("import")}),r(33,"mat-icon",21),c(34,"upload_file"),l(),r(35,"span",22)(36,"span",23),c(37,"Import an appliance file"),l(),r(38,"span",24),c(39," Use a .gns3a or .gns3appliance file from your computer "),l()(),T(40,ppe,2,0,"mat-icon",25),l()()()()(),r(41,"mat-step",13),se(42,upe,8,3,"ng-template",14),r(43,"div",15),T(44,Spe,59,13,"section",26)(45,Tpe,15,2,"section",26),l()(),T(46,Gpe,21,5,"mat-step",13),r(47,"mat-step"),se(48,qpe,8,0,"ng-template",14),r(49,"div",15),T(50,tue,38,9),l()()()(),r(51,"div",27)(52,"button",28),_("click",function(){return i.onCloseClick()}),c(53," Cancel "),l(),r(54,"div",29),T(55,nue,2,0,"button",30),T(56,iue,4,0,"button",31),T(57,oue,4,1,"button",32)(58,sue,3,2,"button",33),l()()()()),t&2){let a,s;m(10),v("linear",!0),m(4),v("completed",!0),m(9),ne("new-template-wizard__method-option--selected",i.action()==="install"),Ce("aria-pressed",i.action()==="install"),m(8),E(i.action()==="install"?31:-1),m(),ne("new-template-wizard__method-option--selected",i.action()==="import"),Ce("aria-pressed",i.action()==="import"),m(8),E(i.action()==="import"?40:-1),m(),v("completed",!!i.applianceToInstall()),m(3),E(i.action()==="install"?44:45),m(2),E(i.requiresImages()?46:-1),m(4),E((a=i.applianceToInstall())?50:-1,a),m(5),E((s=i.selectedStepIndex()>=2&&i.applianceToInstall())?55:-1,s),m(),E(i.selectedStepIndex()>0?56:-1),m(),E(i.selectedStepIndex()<i.lastStepIndex()?57:58)}},dependencies:[fe,It,At,Nt,dl,Tr,ke,Y,he,Be,Il,gc,tl,hc,uc,we,Pe,Ve,Wn,Bi,oi,ot,ct,nt,ye,Ee,As,ea,Is,od,rt,mt,El,ph,jd,$d,Wm,ie,ce,st,pt,Rt,Gt,Pl,Kc],styles:["[_nghost-%COMP%]{display:block;width:100%;min-height:0}.new-template-wizard__header[_ngcontent-%COMP%] .template-wizard__heading[_ngcontent-%COMP%]{flex:1 1 auto}.new-template-wizard__method-options[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--gns3-density-card-gap)}button.new-template-wizard__method-option[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-3);min-height:240px;height:auto;padding:var(--gns3-density-space-5) var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);color:var(--mat-sys-on-surface-variant);text-align:left;text-transform:none;white-space:normal;transition:border-color var(--gns3-motion-duration-standard) ease,background-color var(--gns3-motion-duration-standard) ease,box-shadow var(--gns3-motion-duration-standard) ease}button.new-template-wizard__method-option[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container-low);box-shadow:0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent)}button.new-template-wizard__method-option--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.new-template-wizard__method-icon[_ngcontent-%COMP%]{flex:0 0 auto;margin-top:2px;font-size:34px;width:34px;height:34px}.new-template-wizard__method-text[_ngcontent-%COMP%]{display:flex;min-width:0;flex:1 1 auto;flex-direction:column;justify-content:center;gap:var(--gns3-density-space-1)}.new-template-wizard__method-section[_ngcontent-%COMP%]{justify-content:flex-start}.new-template-wizard__method-title[_ngcontent-%COMP%]{font-size:18px;font-weight:600;line-height:1.35}.new-template-wizard__method-description[_ngcontent-%COMP%]{font-size:15px;font-weight:400;line-height:1.45;opacity:.85}.new-template-wizard__method-check[_ngcontent-%COMP%]{flex:0 0 auto;margin-left:auto;color:var(--mat-sys-primary)}.new-template-wizard__browse-header[_ngcontent-%COMP%], .new-template-wizard__files-header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--gns3-density-space-3)}.new-template-wizard__browse-heading[_ngcontent-%COMP%]{min-width:0}.new-template-wizard__registry-update[_ngcontent-%COMP%]{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;align-self:stretch;gap:var(--gns3-density-space-2);margin-top:4px;white-space:nowrap;line-height:1}.new-template-wizard__registry-update[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], .new-template-wizard__registry-update[_ngcontent-%COMP%] mat-spinner[_ngcontent-%COMP%]{flex:0 0 auto;margin:0;line-height:1}.new-template-wizard__filters[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:var(--gns3-density-space-3);align-items:center;margin-bottom:var(--gns3-density-space-3)}.new-template-wizard__search[_ngcontent-%COMP%], .new-template-wizard__filter[_ngcontent-%COMP%]{min-width:0}.new-template-wizard__search[_ngcontent-%COMP%]{flex:2 1 150px}.new-template-wizard__filter[_ngcontent-%COMP%]{flex:1 1 110px}.new-template-wizard__sort-field[_ngcontent-%COMP%]{flex:1 1 130px;width:auto;min-width:0}.new-template-wizard__sort-toggle[_ngcontent-%COMP%]{flex:0 0 auto;align-self:center}.new-template-wizard__result-count[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:13px;margin:0 0 var(--gns3-density-space-2)}.new-template-wizard__loading[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--gns3-density-space-3);padding:var(--gns3-density-space-6);color:var(--mat-sys-on-surface-variant)}.new-template-wizard__appliance-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-space-1)}.new-template-wizard__appliance[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-3);padding:var(--gns3-density-space-2) var(--gns3-density-space-3);border:1px solid var(--mat-sys-outline-variant);border-radius:var(--gns3-density-radius-lg);background:var(--mat-sys-surface-container-low);cursor:pointer;transition:border-color var(--gns3-motion-duration-standard) ease,background-color var(--gns3-motion-duration-standard) ease,box-shadow var(--gns3-motion-duration-standard) ease}.new-template-wizard__appliance[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container);box-shadow:0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent)}.new-template-wizard__appliance--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,var(--mat-sys-surface))}.new-template-wizard__appliance-icon[_ngcontent-%COMP%]{display:grid;flex:0 0 auto;width:36px;height:36px;place-items:center;border-radius:var(--gns3-density-radius-md);color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container)}.new-template-wizard__appliance-icon[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px}.new-template-wizard__appliance-text[_ngcontent-%COMP%]{display:flex;min-width:0;flex:1 1 auto;flex-direction:column;gap:2px}.new-template-wizard__appliance-name[_ngcontent-%COMP%]{overflow:hidden;color:var(--mat-sys-on-surface);font-size:14px;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.new-template-wizard__appliance-meta[_ngcontent-%COMP%]{overflow:hidden;color:var(--mat-sys-on-surface-variant);font-size:12px;text-overflow:ellipsis;white-space:nowrap}.new-template-wizard__appliance-actions[_ngcontent-%COMP%]{display:flex;flex:0 0 auto;align-items:center;gap:var(--gns3-density-space-1)}.new-template-wizard__appliance-check[_ngcontent-%COMP%], .new-template-wizard__version-check[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.new-template-wizard__empty[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--gns3-density-space-2);padding:var(--gns3-density-space-6);color:var(--mat-sys-on-surface-variant)}.new-template-wizard__empty[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:36px;width:36px;height:36px}.new-template-wizard__import-area[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--gns3-density-space-3);padding:var(--gns3-density-space-6) var(--gns3-density-space-5);border:2px dashed var(--mat-sys-outline-variant);border-radius:var(--gns3-density-radius-lg);background:var(--mat-sys-surface)}.new-template-wizard__import-icon[_ngcontent-%COMP%]{font-size:40px;width:40px;height:40px;color:var(--mat-sys-primary)}.new-template-wizard__import-text[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:14px;text-align:center}.new-template-wizard__import-button[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:var(--gns3-density-space-2)}.new-template-wizard__file-input[_ngcontent-%COMP%]{display:none}.new-template-wizard__versions[_ngcontent-%COMP%] mat-expansion-panel[_ngcontent-%COMP%]{margin-bottom:var(--gns3-density-space-2);border:1px solid var(--mat-sys-outline-variant);border-radius:var(--gns3-density-radius-lg);box-shadow:none;transition:border-color var(--gns3-motion-duration-standard) ease,box-shadow var(--gns3-motion-duration-standard) ease}.new-template-wizard__versions[_ngcontent-%COMP%] mat-expansion-panel[_ngcontent-%COMP%]:hover{box-shadow:0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent)}.new-template-wizard__versions[_ngcontent-%COMP%] .new-template-wizard__version--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary)}.new-template-wizard__versions[_ngcontent-%COMP%] mat-expansion-panel-header[_ngcontent-%COMP%]{padding:0 var(--gns3-density-space-4);height:56px}.new-template-wizard__version-title[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:var(--gns3-density-space-3);width:100%;padding-right:var(--gns3-density-space-2)}.new-template-wizard__version-name[_ngcontent-%COMP%]{overflow:hidden;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.new-template-wizard__version-summary[_ngcontent-%COMP%]{display:flex;flex:0 0 auto;align-items:center;gap:var(--gns3-density-space-2)}.new-template-wizard__version-count[_ngcontent-%COMP%]{display:inline-flex;align-items:center;padding:2px 10px;border-radius:12px;background:var(--mat-sys-surface-container-highest);font-size:12px;font-weight:500}.new-template-wizard__version-count--complete[_ngcontent-%COMP%]{background:var(--mat-sys-primary-container);color:var(--mat-sys-on-primary-container)}.new-template-wizard__version-count--partial[_ngcontent-%COMP%]{background:var(--mat-sys-tertiary-container);color:var(--mat-sys-on-tertiary-container)}.new-template-wizard__version-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-space-2);padding:0 var(--gns3-density-space-4) var(--gns3-density-space-4)}.new-template-wizard__images[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-space-2)}.new-template-wizard__image[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--gns3-density-space-3);padding:var(--gns3-density-space-3) var(--gns3-density-space-4);border:1px solid var(--mat-sys-outline-variant);border-radius:var(--gns3-density-radius-lg);background:var(--mat-sys-surface-container-low);transition:border-color var(--gns3-motion-duration-standard) ease,background-color var(--gns3-motion-duration-standard) ease,box-shadow var(--gns3-motion-duration-standard) ease}.new-template-wizard__image[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container);box-shadow:0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent)}.new-template-wizard__image--ready[_ngcontent-%COMP%]{border-left:4px solid var(--mat-sys-primary)}.new-template-wizard__image--missing[_ngcontent-%COMP%]{border-left:4px solid var(--mat-sys-tertiary)}.new-template-wizard__image--selectable[_ngcontent-%COMP%]{cursor:pointer}.new-template-wizard__image--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,var(--mat-sys-surface))}.new-template-wizard__image-info[_ngcontent-%COMP%]{display:flex;min-width:0;flex:1 1 auto;flex-direction:column;gap:var(--gns3-density-space-2)}.new-template-wizard__image-name[_ngcontent-%COMP%]{overflow-wrap:anywhere;color:var(--mat-sys-on-surface);font-size:14px}.new-template-wizard__status-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;align-self:flex-start;gap:6px;padding:4px 10px;border-radius:16px;font-size:12px;font-weight:500}.new-template-wizard__status-badge[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px}.new-template-wizard__status-badge--ready[_ngcontent-%COMP%]{background:var(--mat-sys-primary-container);color:var(--mat-sys-on-primary-container)}.new-template-wizard__status-badge--missing[_ngcontent-%COMP%]{background:var(--mat-sys-error-container);color:var(--mat-sys-on-error-container)}.new-template-wizard__image-actions[_ngcontent-%COMP%]{display:flex;flex:0 0 auto;align-items:center;gap:var(--gns3-density-space-2)}.new-template-wizard__upload-progress[_ngcontent-%COMP%]{display:flex;flex:1 1 100%;flex-direction:column;gap:var(--gns3-density-space-2);padding:var(--gns3-density-space-3) var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-md);background:var(--mat-sys-primary-container)}.new-template-wizard__upload-progress[_ngcontent-%COMP%] mat-progress-bar[_ngcontent-%COMP%]{height:4px;border-radius:2px}.new-template-wizard__progress-info[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;color:var(--mat-sys-on-primary-container);font-size:13px}.new-template-wizard__progress-text[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-2)}.new-template-wizard__progress-text[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px;animation:_ngcontent-%COMP%_new-template-wizard-spin 1s linear infinite}.new-template-wizard__progress-percentage[_ngcontent-%COMP%]{font-weight:500}.new-template-wizard__cancel-button[_ngcontent-%COMP%]{align-self:flex-end;min-width:auto;padding:4px 8px;font-size:12px}@keyframes _ngcontent-%COMP%_new-template-wizard-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.new-template-wizard__summary[_ngcontent-%COMP%]{margin:0}.new-template-wizard__summary[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:grid;grid-template-columns:minmax(140px,.35fr) 1fr;gap:var(--gns3-density-space-4);padding:var(--gns3-density-space-3) 0;border-bottom:1px solid var(--mat-sys-outline-variant)}.new-template-wizard__summary[_ngcontent-%COMP%] div[_ngcontent-%COMP%]:last-child{border-bottom:0}.new-template-wizard__summary[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant)}.new-template-wizard__summary[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{min-width:0;margin:0;overflow-wrap:anywhere;font-weight:550}[data-density=compact][_nghost-%COMP%] button.new-template-wizard__method-option[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.new-template-wizard__method-option[_ngcontent-%COMP%]{min-height:144px;padding:var(--gns3-density-space-4)}[data-density=compact][_nghost-%COMP%] .new-template-wizard__method-icon[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .new-template-wizard__method-icon[_ngcontent-%COMP%]{font-size:28px;width:28px;height:28px}[data-density=compact][_nghost-%COMP%] .new-template-wizard__method-title[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .new-template-wizard__method-title[_ngcontent-%COMP%]{font-size:16px}[data-density=compact][_nghost-%COMP%] .new-template-wizard__method-description[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .new-template-wizard__method-description[_ngcontent-%COMP%]{font-size:13px}[data-density=compact][_nghost-%COMP%] .new-template-wizard__appliance-icon[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .new-template-wizard__appliance-icon[_ngcontent-%COMP%]{width:32px;height:32px}[data-density=compact][_nghost-%COMP%] .new-template-wizard__appliance-icon[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .new-template-wizard__appliance-icon[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px}[data-density=compact][_nghost-%COMP%] .new-template-wizard__versions[_ngcontent-%COMP%] mat-expansion-panel-header[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .new-template-wizard__versions[_ngcontent-%COMP%] mat-expansion-panel-header[_ngcontent-%COMP%]{height:48px}[data-density=compact][_nghost-%COMP%] .new-template-wizard__sort-field[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .new-template-wizard__sort-field[_ngcontent-%COMP%]{flex:1 1 115px}[data-density=compact][_nghost-%COMP%] .new-template-wizard__search[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .new-template-wizard__search[_ngcontent-%COMP%]{flex:2 1 140px}[data-density=compact][_nghost-%COMP%] .new-template-wizard__filter[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .new-template-wizard__filter[_ngcontent-%COMP%]{flex:1 1 105px}@media(max-width:640px){.new-template-wizard__method-options[_ngcontent-%COMP%]{grid-template-columns:1fr}.new-template-wizard__appliance-meta[_ngcontent-%COMP%]{white-space:normal}.new-template-wizard__image[_ngcontent-%COMP%]{flex-direction:column;align-items:stretch}.new-template-wizard__image-actions[_ngcontent-%COMP%]{justify-content:flex-end}}.new-template-wizard__files-footer[_ngcontent-%COMP%]{margin-top:auto;padding-top:16px}.new-template-wizard__file-options[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:flex-end;gap:16px}.new-template-wizard__file-options[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex:0 0 auto;width:auto}.new-template-wizard__version-heading[_ngcontent-%COMP%]{font-size:16px;font-weight:500}.new-template-wizard__version-actions[_ngcontent-%COMP%]{display:flex;gap:16px}.new-template-wizard__version-actions[_ngcontent-%COMP%] .new-template-wizard__save-version[_ngcontent-%COMP%]{background-color:var(--mat-sys-primary);color:var(--mat-sys-on-primary)}.new-template-wizard__version-actions[_ngcontent-%COMP%] .new-template-wizard__cancel-version[_ngcontent-%COMP%]{background-color:var(--mat-sys-secondary-container);color:var(--mat-sys-on-secondary-container)}"],changeDetection:0})}return n})();var Zm=(()=>{class n{getPlatform(){return["x86_64","aarch64","alpha","arm","cris","i386","lm32","m68k","microblaze","microblazeel","mips","mips64","mips64el","mipsel","moxie","or32","ppc","ppc64","ppcemb","s390x","sh4","sh4eb","sparc","sparc64","tricore","unicore32","xtensa","xtensaeb"]}getConsoleTypes(){return["telnet","ssh","vnc","spice","spice+agent","none"]}getAuxConsoleTypes(){return["telnet","ssh","none"]}getDiskInterfaces(){return["ide","sata","scsi","sd","mtd","floppy","pflash","virtio","nvme","none"]}getNetworkTypes(){return[{value:"e1000",name:"Intel Gigabit Ethernet"},{value:"e1000-82544gc",name:"Intel 82544GC Gigabit Ethernet"},{value:"e1000-82545em",name:"Intel 82545EM Gigabit Ethernet"},{value:"e1000e",name:"Intel PCIe Gigabit Ethernet"},{value:"i82550",name:"Intel i82550 Ethernet"},{value:"i82551",name:"Intel i82551 Ethernet"},{value:"i82557a",name:"Intel i82557A Ethernet"},{value:"i82557b",name:"Intel i82557B Ethernet"},{value:"i82557c",name:"Intel i82557C Ethernet"},{value:"i82558a",name:"Intel i82558A Ethernet"},{value:"i82558b",name:"Intel i82558B Ethernet"},{value:"i82559a",name:"Intel i82559A Ethernet"},{value:"i82559b",name:"Intel i82559B Ethernet"},{value:"i82559c",name:"Intel i82559C Ethernet"},{value:"i82559er",name:"Intel i82559ER Ethernet"},{value:"i82562",name:"Intel i82562 Ethernet"},{value:"i82801",name:"Intel i82801 Ethernet"},{value:"igb",name:"Intel I350 Gigabit Ethernet"},{value:"ne2k_pci",name:"NE2000 Ethernet"},{value:"pcnet",name:"AMD PCNet Ethernet"},{value:"rocker",name:"Rocker L2 switch device"},{value:"rtl8139",name:"Realtek 8139 Ethernet"},{value:"virtio",name:"Virtio network"},{value:"virtio-net-pci",name:"Virtio network PCI"},{value:"vmxnet3",name:"VMWare Paravirtualized Ethernet v3"}]}getBootPriorities(){return[["HDD","c"],["CD/DVD-ROM","d"],["Network","n"],["HDD or Network","cn"],["HDD or CD/DVD-ROM","cd"]]}getOnCloseOptions(){return[["Power off the VM","power_off"],["Send the shutdown signal (ACPI)","shutdown_signal"],["Save the VM state","save_vm_state"]]}getCategories(){return[["Default","guest"],["Routers","router"],["Switches","switch"],["End devices","guest"],["Security devices","firewall"]]}getPriorities(){return["realtime","very high","high","normal","low","very low"]}getMacAddrRegex(){return/^([0-9a-fA-F]{2}[:]){5}([0-9a-fA-F]{2})$/}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var lue=(n,o)=>o.value,cue=(n,o)=>o.filename;function due(n,o){if(n&1){let e=R();r(0,"button",45),_("click",function(){y(e);let i=h();return w(i.goBack())}),r(1,"mat-icon"),c(2,"arrow_back"),l()()}}function mue(n,o){if(n&1&&c(0),n&2){let e=o.index;N(e+1)}}function pue(n,o){if(n&1&&c(0),n&2){let e=o.index;N(e+1)}}function uue(n,o){n&1&&(r(0,"span",46)(1,"mat-icon"),c(2,"dns"),l(),r(3,"span",47)(4,"span",48),c(5,"Controller type"),l(),r(6,"span",49),c(7,"Choose the execution host"),l()()())}function gue(n,o){n&1&&(r(0,"span",46)(1,"mat-icon"),c(2,"description"),l(),r(3,"span",47)(4,"span",48),c(5,"Template info"),l(),r(6,"span",49),c(7,"Basic details and name"),l()()())}function hue(n,o){if(n&1){let e=R();r(0,"button",50),_("click",function(){let i=y(e).$implicit,a=h();return w(a.symbol.set(i.value))}),r(1,"mat-icon"),c(2),l(),r(3,"span"),c(4),l()()}if(n&2){let e=o.$implicit,t=h();ne("qemu-add__symbol-option--selected",t.symbol()===e.value),Ce("aria-pressed",t.symbol()===e.value),m(2),N(e.icon),m(2),N(e.label)}}function _ue(n,o){n&1&&(r(0,"span",46)(1,"mat-icon"),c(2,"memory"),l(),r(3,"span",47)(4,"span",48),c(5,"Platform & memory"),l(),r(6,"span",49),c(7,"Define hardware configuration"),l()()())}function fue(n,o){if(n&1&&(r(0,"mat-option",29),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function vue(n,o){n&1&&(r(0,"span",46)(1,"mat-icon"),c(2,"desktop_windows"),l(),r(3,"span",47)(4,"span",48),c(5,"Console"),l(),r(6,"span",49),c(7,"Select console type"),l()()())}function Cue(n,o){if(n&1&&(r(0,"mat-option",29),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function bue(n,o){n&1&&(r(0,"span",46)(1,"mat-icon"),c(2,"terminal"),l(),r(3,"span",47)(4,"span",48),c(5,"Auxiliary console"),l(),r(6,"span",49),c(7,"Optional console configuration"),l()()())}function xue(n,o){if(n&1&&(r(0,"mat-option",29),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function yue(n,o){n&1&&(r(0,"span",46)(1,"mat-icon"),c(2,"hard_drive"),l(),r(3,"span",47)(4,"span",48),c(5,"Disk image"),l(),r(6,"span",49),c(7,"Select disk image or browse"),l()()())}function wue(n,o){if(n&1&&(r(0,"mat-option",29),c(1),l()),n&2){let e=o.$implicit;v("value",e.filename),m(),N(e.filename)}}function Mue(n,o){if(n&1){let e=R();r(0,"mat-form-field",21)(1,"mat-label"),c(2,"Disk image (HDA)"),l(),r(3,"input",51),_("input",function(i){y(e);let a=h();return w(a.onDiskImageInput(i))}),l(),r(4,"mat-icon",52),c(5,"search"),l(),r(6,"mat-autocomplete",53,1),_("optionSelected",function(i){y(e);let a=h();return w(a.onDiskImageSelected(i.option.value))}),Q(8,wue,2,2,"mat-option",29,cue),l()()}if(n&2){let e=Te(7),t=h();m(3),v("matAutocomplete",e),m(5),K(t.filteredImages())}}function Sue(n,o){if(n&1){let e=R();r(0,"div",35)(1,"input",54,2),_("change",function(i){y(e);let a=h();return w(a.uploadImageFile(i))}),l(),r(3,"button",55),_("click",function(){y(e);let i=Te(2);return w(i.click())}),r(4,"mat-icon"),c(5,"upload_file"),l(),c(6," Browse "),l(),r(7,"mat-form-field",56)(8,"mat-label"),c(9,"Image name"),l(),r(10,"input",57),_("input",function(i){y(e);let a=h();return w(a.fileName.set(i.target.value))}),l()()()}if(n&2){let e=h();m(),v("uploader",e.uploader()),m(9),v("value",e.fileName())}}function kue(n,o){n&1&&(r(0,"span",46)(1,"mat-icon"),c(2,"settings_ethernet"),l(),r(3,"span",47)(4,"span",48),c(5,"Netmiko device type"),l(),r(6,"span",49),c(7,"Optional device type"),l()()())}function Pue(n,o){n&1&&(r(0,"span",46)(1,"mat-icon"),c(2,"check_circle"),l(),r(3,"span",47)(4,"span",48),c(5,"Review"),l(),r(6,"span",49),c(7,"Review and create your template"),l()()())}function Tue(n,o){if(n&1){let e=R();r(0,"button",58),_("click",function(){y(e),h();let i=Te(9);return w(i.previous())}),r(1,"mat-icon"),c(2,"arrow_back"),l(),c(3," Back "),l()}}function Eue(n,o){if(n&1){let e=R();r(0,"button",59),_("click",function(){y(e),h();let i=Te(9);return w(i.next())}),c(1," Next "),r(2,"mat-icon",60),c(3,"arrow_forward"),l()()}if(n&2){let e=h();v("disabled",!e.canAdvance())}}function Oue(n,o){if(n&1){let e=R();r(0,"button",61),_("click",function(){y(e);let i=h();return w(i.addTemplate())}),c(1," Create template "),r(2,"mat-icon",60),c(3,"arrow_forward"),l()()}if(n&2){let e=h();v("disabled",!e.canCreateTemplate())}}var _y=(()=>{class n{route=f($t);controllerService=f(_t);qemuService=f(Rl);toasterService=f(re);validationService=f(Hn);router=f(Ft);location=f(ki);templateMocksService=f(Rr);configurationService=f(Zm);snackBar=f(pl);uploadServiceService=f(Al);cd=f(oe);subscription;controller=z(void 0);selectPlatform=z([]);consoleTypes=z([]);auxConsoleTypes=z([]);newImageSelected=z(!1);qemuImages=z([]);selectedImage=z(void 0);filteredImages=z([]);chosenImage=z("");qemuTemplate=z(new yh);uploader=z(void 0);isLocalComputerChosen=z(!0);selectedStepIndex=z(0);templateName=$("");usage=$("");symbol=$("qemu_guest");ramMemory=$(256);fileName=$("");selectedPlatform=$("");consoleType=$("");auxConsoleType=$("");netmikoDeviceType=$("");nameStepCompleted=Ne(()=>!!this.templateName().trim());platformStepCompleted=Ne(()=>!!this.ramMemory()&&!!this.selectedPlatform());consoleStepCompleted=Ne(()=>!!this.consoleType());auxConsoleStepCompleted=Ne(()=>!!this.auxConsoleType());diskStepCompleted=Ne(()=>this.newImageSelected()?!!this.chosenImage()&&!!this.fileName().trim():!!this.selectedImage());canCreateTemplate=Ne(()=>this.isLocalComputerChosen()&&!!this.templateName().trim()&&!!this.controller()&&this.ramMemory()>0&&!!this.selectedPlatform()&&!!this.consoleType()&&!!this.auxConsoleType()&&this.diskStepCompleted());canAdvance=Ne(()=>{switch(this.selectedStepIndex()){case 0:return this.isLocalComputerChosen();case 1:return this.nameStepCompleted();case 2:return this.platformStepCompleted();case 3:return this.consoleStepCompleted();case 4:return this.auxConsoleStepCompleted();case 5:return this.diskStepCompleted();default:return this.canCreateTemplate()}});symbolOptions=[{value:"qemu_guest",icon:"desktop_windows",label:"Computer"},{value:"computer",icon:"computer",label:"PC"},{value:"docker_guest",icon:"deployed_code",label:"Container"},{value:"router",icon:"router",label:"Router"},{value:"multilayer_switch",icon:"hub",label:"Switch"}];ngOnInit(){this.uploader.set(new kl({url:""})),this.uploader().onAfterAddingFile=t=>{t.withCredentials=!1},this.uploader().onErrorItem=(t,i,a,s)=>{this.toasterService.error("An error occured: "+i)},this.uploader().onSuccessItem=(t,i,a,s)=>{this.qemuService.getImages(this.controller()).subscribe(d=>{this.qemuImages.set(d),this.filteredImages.set(d)}),this.toasterService.success("Image uploaded")},this.uploader().onProgressItem=t=>{this.uploadServiceService.processBarCount(t.progress)};let e=this.route.snapshot.paramMap.get("controller_id");this.controllerService.get(parseInt(e,10)).then(t=>{this.controller.set(t),this.templateMocksService.getQemuTemplate().subscribe({next:i=>{this.qemuTemplate.set(i),this.usage.set(i.usage||""),this.symbol.set(i.symbol||"qemu_guest")},error:()=>{this.toasterService.error("Failed to load QEMU template"),this.cd.markForCheck()}}),this.qemuService.getImages(this.controller()).subscribe({next:i=>{this.qemuImages.set(i),this.filteredImages.set(i)},error:i=>{let a=i.error?.message||i.message||"Failed to load QEMU images";this.toasterService.error(a),this.cd.markForCheck()}}),this.selectPlatform.set(this.configurationService.getPlatform()),this.selectedPlatform.set(this.selectPlatform()[0]),this.consoleTypes.set(this.configurationService.getConsoleTypes()),this.auxConsoleTypes.set(this.configurationService.getAuxConsoleTypes())},t=>{let i=t.error?.message||t.message||"Failed to load controller";this.toasterService.error(i),this.cd.markForCheck()}),this.subscription=this.uploadServiceService.currentCancelItemDetails.subscribe(t=>{t&&this.cancelUploading()})}setControllerType(e){e==="local"&&this.isLocalComputerChosen.set(!0)}setDiskImage(e){this.newImageSelected.set(e==="newImage"),e==="newImage"&&this.selectedImage.set(void 0)}filterImages(e){let t=e.target.value.toLowerCase();return this.qemuImages().filter(i=>i.filename.toLowerCase().includes(t))}onDiskImageInput(e){this.filteredImages.set(this.filterImages(e)),this.selectedImage.set(void 0)}onDiskImageSelected(e){let t=this.qemuImages().find(i=>i.filename===e);this.selectedImage.set(t)}uploadImageFile(e){let t=e.target.files[0].name;this.fileName.set(t),this.chosenImage.set(t);let i=this.qemuService.getImagePath(this.controller(),t);this.uploader().queue.forEach(s=>s.url=i);let a=this.uploader().queue[0];a.options&&(a.options.disableMultipart=!0),a.options.headers=[{name:"Authorization",value:"Bearer "+this.controller().authToken}],this.uploader().uploadItem(a),this.snackBar.openFromComponent(Nl,{panelClass:"uplaoding-file-snackabar",data:{upload_file_type:"Image"}})}cancelUploading(){this.uploader().clearQueue(),this.uploadServiceService.processBarCount(null),this.toasterService.warning("Image Uploading canceled"),this.uploadServiceService.cancelFileUploading(!1)}goBack(){let e=this.controller()?.id??parseInt(this.route.snapshot.paramMap.get("controller_id"),10);ji(this.location,this.router,["/controller",e,"preferences"])}addTemplate(){if(this.canCreateTemplate()){let e=this.validationService.validateNetmikoDeviceType(this.netmikoDeviceType());if(!e.isValid){this.toasterService.error(e.errorMessage);return}let t=this.qemuTemplate();t.ram=this.ramMemory(),t.platform=this.selectedPlatform(),this.newImageSelected()?t.hda_disk_image=this.fileName():t.hda_disk_image=this.selectedImage().path,t.template_id=xo(),t.name=this.templateName(),t.usage=this.usage(),t.symbol=this.symbol(),t.compute_id="local",t.console_type=this.consoleType(),t.aux_type=this.auxConsoleType(),t.netmiko_device_type=this.netmikoDeviceType().trim()||null,this.qemuService.addTemplate(this.controller(),t).subscribe({next:()=>{this.goBack()},error:i=>{let a=i.error?.message||i.message||"Failed to add qemu template";this.toasterService.error(a),this.cd.markForCheck()}})}else this.toasterService.error("Fill all required fields")}ngOnDestroy(){this.subscription.unsubscribe()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-add-qemu-virtual-machine-template"]],inputs:{templateName:[1,"templateName"],usage:[1,"usage"],symbol:[1,"symbol"],ramMemory:[1,"ramMemory"],fileName:[1,"fileName"],selectedPlatform:[1,"selectedPlatform"],consoleType:[1,"consoleType"],auxConsoleType:[1,"auxConsoleType"],netmikoDeviceType:[1,"netmikoDeviceType"]},outputs:{templateName:"templateNameChange",usage:"usageChange",symbol:"symbolChange",ramMemory:"ramMemoryChange",fileName:"fileNameChange",selectedPlatform:"selectedPlatformChange",consoleType:"consoleTypeChange",auxConsoleType:"auxConsoleTypeChange",netmikoDeviceType:"netmikoDeviceTypeChange"},decls:166,vars:29,consts:[["stepper",""],["hdaAuto","matAutocomplete"],["file",""],[1,"qemu-add","template-wizard"],[1,"qemu-add__header","template-wizard__header"],["mat-icon-button","","aria-label","Back to QEMU templates",1,"qemu-add__back-btn","template-wizard__back"],[1,"template-wizard__heading"],[1,"qemu-add__title","template-wizard__title"],[1,"qemu-add__content","template-wizard__body"],[1,"qemu-add__form-card","template-wizard__stepper-card"],[1,"qemu-add__stepper","template-wizard__stepper",3,"selectionChange","linear"],["matStepperIcon","edit"],["matStepperIcon","done"],[3,"completed"],["matStepLabel",""],[1,"template-wizard__panel"],[1,"template-wizard__section"],[1,"template-wizard__section-title"],[1,"template-wizard__section-copy"],[1,"qemu-add__radio-group","qemu-add__controller-options"],["value","local",1,"qemu-add__radio",3,"click","checked"],["appearance","outline","subscriptSizing","dynamic",1,"qemu-add__field","template-wizard__field"],["matInput","","required","","type","text","placeholder","e.g. My Linux VM",3,"input","value"],["matInput","","rows","3","placeholder","e.g. Ubuntu appliance with 2 GB RAM and a VirtIO disk",3,"input","value"],["role","radiogroup","aria-label","Template icon",1,"qemu-add__symbol-options"],["mat-stroked-button","","type","button",1,"qemu-add__symbol-option",3,"qemu-add__symbol-option--selected"],[1,"template-wizard__field-grid","gns3-form-layout-fixed"],["appearance","outline","subscriptSizing","fixed",1,"qemu-add__field","template-wizard__field"],["required","",3,"selectionChange","value"],[3,"value"],["matInput","","required","","type","number","min","1",3,"input","value"],["matTextSuffix","",1,"template-wizard__unit-suffix"],[1,"qemu-add__radio-group",3,"value"],["value","existingImage",1,"qemu-add__radio",3,"click"],["value","newImage",1,"qemu-add__radio",3,"click"],[1,"qemu-add__file-row"],[3,"optional"],["subscriptSizing","dynamic","appearance","outline",1,"qemu-add__field",3,"valueChange","value","controller"],[1,"qemu-add__summary"],[1,"qemu-add__actions","template-wizard__actions"],["mat-stroked-button","",1,"qemu-add__cancel-btn",3,"click"],[1,"qemu-add__step-actions"],["mat-button","","type","button",1,"template-wizard__previous"],["mat-raised-button","","color","primary","type","button",1,"template-wizard__next",3,"disabled"],["mat-raised-button","","color","primary",1,"qemu-add__submit-btn",3,"disabled"],["mat-icon-button","","aria-label","Back to QEMU templates",1,"qemu-add__back-btn","template-wizard__back",3,"click"],[1,"template-wizard__step-label"],[1,"template-wizard__step-label-text"],[1,"template-wizard__step-label-title"],[1,"template-wizard__step-label-description"],["mat-stroked-button","","type","button",1,"qemu-add__symbol-option",3,"click"],["matInput","","required","","type","text","placeholder","Search available images",3,"input","matAutocomplete"],["matSuffix",""],[3,"optionSelected"],["type","file","accept",".qcow2","ng2FileSelect","",1,"qemu-add__file-input",3,"change","uploader"],["mat-raised-button","","color","primary","type","button",1,"qemu-add__browse-btn",3,"click"],["appearance","outline","subscriptSizing","dynamic",1,"qemu-add__field","qemu-add__field--flex"],["matInput","","required","","type","text","placeholder","Image name",3,"input","value"],["mat-button","","type","button",1,"template-wizard__previous",3,"click"],["mat-raised-button","","color","primary","type","button",1,"template-wizard__next",3,"click","disabled"],["iconPositionEnd",""],["mat-raised-button","","color","primary",1,"qemu-add__submit-btn",3,"click","disabled"]],template:function(t,i){if(t&1){let a=R();r(0,"div",3)(1,"header",4),T(2,due,3,0,"button",5),r(3,"div",6)(4,"h1",7),c(5,"New QEMU VM template"),l()()(),r(6,"main",8)(7,"section",9)(8,"mat-horizontal-stepper",10,0),_("selectionChange",function(d){return i.selectedStepIndex.set(d.selectedIndex)}),se(10,mue,1,1,"ng-template",11)(11,pue,1,1,"ng-template",12),r(12,"mat-step",13),se(13,uue,8,0,"ng-template",14),r(14,"div",15)(15,"section",16)(16,"h2",17),c(17,"Controller type"),l(),r(18,"p",18),c(19,"Choose where this QEMU VM will run."),l(),r(20,"mat-radio-group",19)(21,"mat-radio-button",20),_("click",function(){return i.setControllerType("local")}),c(22," Run this QEMU VM locally "),l()()()()(),r(23,"mat-step",13),se(24,gue,8,0,"ng-template",14),r(25,"div",15)(26,"section",16)(27,"h2",17),c(28,"Template information"),l(),r(29,"p",18),c(30,"Choose a name and an optional usage note for your template."),l(),r(31,"mat-form-field",21)(32,"mat-label"),c(33,"Template name"),l(),r(34,"input",22),_("input",function(d){return i.templateName.set(d.target.value)}),l(),r(35,"mat-hint"),c(36,"Use a unique, descriptive name."),l()(),r(37,"mat-form-field",21)(38,"mat-label"),c(39,"Usage notes"),l(),r(40,"textarea",23),_("input",function(d){return i.usage.set(d.target.value)}),l()()(),r(41,"section",16)(42,"h2",17),c(43,"Template icon"),l(),r(44,"p",18),c(45,"Choose the symbol used for this template in the node list."),l(),r(46,"div",24),Q(47,hue,5,5,"button",25,lue),l()()()(),r(49,"mat-step",13),se(50,_ue,8,0,"ng-template",14),r(51,"div",15)(52,"section",16)(53,"h2",17),c(54,"Platform and memory"),l(),r(55,"p",18),c(56," These values can still be adjusted after the template is created. "),l(),r(57,"div",26)(58,"mat-form-field",27)(59,"mat-label"),c(60,"Platform"),l(),r(61,"mat-select",28),_("selectionChange",function(d){return i.selectedPlatform.set(d.value)}),Q(62,fue,2,2,"mat-option",29,Oe),l()(),r(64,"mat-form-field",27)(65,"mat-label"),c(66,"RAM"),l(),r(67,"input",30),_("input",function(d){return i.ramMemory.set(+d.target.value)}),l(),r(68,"span",31),c(69,"MB"),l()()()()()(),r(70,"mat-step",13),se(71,vue,8,0,"ng-template",14),r(72,"div",15)(73,"section",16)(74,"h2",17),c(75,"Console"),l(),r(76,"p",18),c(77,"Choose a console type supported by the QEMU configuration."),l(),r(78,"mat-form-field",21)(79,"mat-label"),c(80,"Console type"),l(),r(81,"mat-select",28),_("selectionChange",function(d){return i.consoleType.set(d.value)}),Q(82,Cue,2,2,"mat-option",29,Oe),l()()()()(),r(84,"mat-step",13),se(85,bue,8,0,"ng-template",14),r(86,"div",15)(87,"section",16)(88,"h2",17),c(89,"Auxiliary console"),l(),r(90,"p",18),c(91,"Select \u201Cnone\u201D when a second console is not required."),l(),r(92,"mat-form-field",21)(93,"mat-label"),c(94,"Auxiliary console type"),l(),r(95,"mat-select",28),_("selectionChange",function(d){return i.auxConsoleType.set(d.value)}),Q(96,xue,2,2,"mat-option",29,Oe),l()()()()(),r(98,"mat-step",13),se(99,yue,8,0,"ng-template",14),r(100,"div",15)(101,"section",16)(102,"h2",17),c(103,"Disk image"),l(),r(104,"p",18),c(105," The selected image becomes the primary HDA disk for the template. "),l(),r(106,"mat-radio-group",32)(107,"mat-radio-button",33),_("click",function(){return i.setDiskImage("existingImage")}),c(108," Existing image "),l(),r(109,"mat-radio-button",34),_("click",function(){return i.setDiskImage("newImage")}),c(110," Upload new image "),l()(),T(111,Mue,10,1,"mat-form-field",21)(112,Sue,11,2,"div",35),l()()(),r(113,"mat-step",36),se(114,kue,8,0,"ng-template",14),r(115,"div",15)(116,"section",16)(117,"h2",17),c(118,"Netmiko device type"),l(),r(119,"p",18),c(120," Default device type used for netmiko-driven configuration pushes. "),l(),r(121,"app-netmiko-device-type-select",37),rn("valueChange",function(d){return y(a),Xt(i.netmikoDeviceType,d)||(i.netmikoDeviceType=d),w(d)}),l()()()(),r(122,"mat-step",13),se(123,Pue,8,0,"ng-template",14),r(124,"div",15)(125,"section",16)(126,"h2",17),c(127,"Template summary"),l(),r(128,"dl",38)(129,"div")(130,"dt"),c(131,"Name"),l(),r(132,"dd"),c(133),l()(),r(134,"div")(135,"dt"),c(136,"Platform"),l(),r(137,"dd"),c(138),l()(),r(139,"div")(140,"dt"),c(141,"Memory"),l(),r(142,"dd"),c(143),l()(),r(144,"div")(145,"dt"),c(146,"Console"),l(),r(147,"dd"),c(148),l()(),r(149,"div")(150,"dt"),c(151,"Auxiliary console"),l(),r(152,"dd"),c(153),l()(),r(154,"div")(155,"dt"),c(156,"Disk image"),l(),r(157,"dd"),c(158),l()()()()()()()(),r(159,"div",39)(160,"button",40),_("click",function(){return i.goBack()}),c(161,"Cancel"),l(),r(162,"div",41),T(163,Tue,4,0,"button",42),T(164,Eue,4,1,"button",43)(165,Oue,4,1,"button",44),l()()()()}if(t&2){let a;m(2),E(i.controller()?2:-1),m(6),v("linear",!0),m(4),v("completed",i.isLocalComputerChosen()),m(9),v("checked",i.isLocalComputerChosen()),m(2),v("completed",i.nameStepCompleted()),m(11),v("value",i.templateName()),m(6),v("value",i.usage()),m(7),K(i.symbolOptions),m(2),v("completed",i.platformStepCompleted()),m(12),v("value",i.selectedPlatform()),m(),K(i.selectPlatform()),m(5),v("value",i.ramMemory()),m(3),v("completed",i.consoleStepCompleted()),m(11),v("value",i.consoleType()),m(),K(i.consoleTypes()),m(2),v("completed",i.auxConsoleStepCompleted()),m(11),v("value",i.auxConsoleType()),m(),K(i.auxConsoleTypes()),m(2),v("completed",i.diskStepCompleted()),m(8),v("value",i.newImageSelected()?"newImage":"existingImage"),m(5),E(i.newImageSelected()?112:111),m(2),v("optional",!0),m(8),an("value",i.netmikoDeviceType),v("controller",i.controller()),m(),v("completed",i.canCreateTemplate()),m(11),N(i.templateName()||"Not set"),m(5),N(i.selectedPlatform()||"Not set"),m(5),X("",i.ramMemory()," MB"),m(5),N(i.consoleType()||"Not set"),m(5),N(i.auxConsoleType()||"Not set"),m(5),N(i.newImageSelected()?i.fileName():((a=i.selectedImage())==null?null:a.filename)||"Not set"),m(5),E(i.selectedStepIndex()>0?163:-1),m(),E(i.selectedStepIndex()<7?164:165)}},dependencies:[po,ie,ce,Y,he,Be,Fo,la,Zo,we,Pe,Ve,Dr,oi,ye,Ee,ot,ct,nt,Jo,ha,ho,Il,gc,tl,hc,uc,Pl,Kc],styles:["[_nghost-%COMP%]{display:block;width:100%;background:transparent}.qemu-add__radio-group[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px;margin-bottom:24px}.qemu-add__radio[_ngcontent-%COMP%]{font-size:16px}.qemu-add__radio-group.qemu-add__controller-options[_ngcontent-%COMP%]{margin-bottom:0}.qemu-add__field--flex[_ngcontent-%COMP%]{flex:1}.qemu-add__file-row[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:16px}.qemu-add__file-input[_ngcontent-%COMP%]{display:none}.qemu-add__browse-btn[_ngcontent-%COMP%]{margin-top:0;height:var(--gns3-density-control-height)}@media(max-width:768px){.qemu-add__file-row[_ngcontent-%COMP%]{flex-direction:column}}.qemu-add__symbol-options[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:12px}button.qemu-add__symbol-option[_ngcontent-%COMP%]{min-width:112px;height:58px;border-radius:12px;color:var(--mat-sys-on-surface-variant);text-transform:none}button.qemu-add__symbol-option[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{margin-right:8px}button.qemu-add__symbol-option--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.qemu-add__summary[_ngcontent-%COMP%]{margin:20px 0 0}.qemu-add__summary[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:grid;grid-template-columns:minmax(140px,.35fr) 1fr;gap:20px;padding:13px 0;border-bottom:1px solid var(--mat-sys-outline-variant)}.qemu-add__summary[_ngcontent-%COMP%] div[_ngcontent-%COMP%]:last-child{border-bottom:0}.qemu-add__summary[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant)}.qemu-add__summary[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{min-width:0;margin:0;overflow-wrap:anywhere;font-weight:550}.qemu-add__step-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;margin-left:auto}@media(max-width:600px){.qemu-add__step-actions[_ngcontent-%COMP%]{flex:1 1 100%}.qemu-add__step-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex:1 1 0}}",'[_nghost-%COMP%]{display:block;width:100%;background:transparent}.templates-page__content[_ngcontent-%COMP%]{animation:none}.templates-page__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:20px;max-width:1600px;margin:0 auto;padding:24px 20px 16px}.templates-page__heading[_ngcontent-%COMP%], .templates-page__header-actions[_ngcontent-%COMP%]{display:flex;align-items:center}.templates-page__heading[_ngcontent-%COMP%]{min-width:0;gap:var(--gns3-density-space-3)}.templates-page__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.templates-page__header-actions[_ngcontent-%COMP%]{gap:var(--gns3-density-space-3)}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);border-radius:12px;padding-inline:18px;font-size:15px;font-weight:500;letter-spacing:.3px;text-transform:none}[class*=-templates__header][_ngcontent-%COMP%]{box-sizing:border-box;width:100%;height:calc(var(--gns3-density-space-4) * 2 + (var(--gns3-density-section-title-size) + 2px) * 1.2 + 1px);max-width:none;margin:0;padding:0 var(--gns3-density-page-padding);gap:var(--gns3-density-space-3);color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container);border-bottom:1px solid var(--mat-sys-outline-variant)}[class*=-templates__back-btn][_ngcontent-%COMP%], [class*=-templates__add-btn][_ngcontent-%COMP%]{flex:0 0 auto;width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:12px}[class*=-templates__back-btn][_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container)}[class*=-templates__add-btn][_ngcontent-%COMP%]{color:var(--mat-sys-primary)}[class*=-templates__title][_ngcontent-%COMP%]{flex:1;min-width:0;margin:0;padding-bottom:0;color:var(--mat-sys-on-primary-container);font-size:calc(var(--gns3-density-section-title-size) + 2px);font-weight:650;line-height:1.2;letter-spacing:-.01em}.templates-page__scopes[_ngcontent-%COMP%]{display:flex;gap:4px;max-width:1560px;margin:0 auto 16px;padding:0 20px;border-bottom:1px solid var(--mat-sys-outline-variant)}.templates-page__scope[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center;gap:8px;min-height:48px;padding:0 16px;border:0;color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;font-size:14px;font-weight:550;cursor:pointer}.templates-page__scope[_ngcontent-%COMP%]:after{position:absolute;right:8px;bottom:-1px;left:8px;height:2px;border-radius:2px 2px 0 0;background:transparent;content:""}.templates-page__scope[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}.templates-page__scope[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{min-width:22px;padding:2px 6px;border-radius:12px;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-high);font-size:11px;text-align:center}.templates-page__scope--active[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%]:after{background:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap);max-width:1600px;margin:0 auto;padding:0 20px 8px}.templates-page__search[_ngcontent-%COMP%]{flex:1;min-width:240px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:flex;align-items:center;flex:0 0 auto;gap:var(--gns3-density-space-3)}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{width:155px}.templates-page__view-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px;padding:4px 2px;border-radius:8px;background:var(--mat-sys-surface-container-high)}button.templates-page__view-button[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:8px;color:var(--mat-sys-on-surface-variant);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);--mat-icon-button-icon-size: 22px}button.templates-page__view-button--active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__main[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:20px;max-width:1600px;margin:0 auto;padding:0 20px 20px}.templates-page__loading[_ngcontent-%COMP%]{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;min-height:320px;gap:var(--gns3-density-card-gap);color:var(--mat-sys-on-surface-variant)}.templates-page__table-container[_ngcontent-%COMP%]{flex:1;min-width:0;border-radius:16px;background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;overflow-x:auto}mat-table[_ngcontent-%COMP%]{width:100%;min-width:850px}.mat-mdc-row[_ngcontent-%COMP%], .mat-row[_ngcontent-%COMP%]{height:var(--mat-table-row-item-container-height);min-height:var(--mat-table-row-item-container-height)}.mat-header-row[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%]{position:sticky;top:0;z-index:10;background:var(--mat-sys-surface-container-highest);box-shadow:inset 0 -2px var(--mat-sys-primary);--mat-sort-arrow-color: var(--mat-sys-primary)}.mat-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:13px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}mat-row[_ngcontent-%COMP%]{cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease}mat-row[_ngcontent-%COMP%]:nth-child(2n){background:color-mix(in srgb,var(--mat-sys-on-surface) 1%,transparent)}mat-row[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}mat-row.templates-page__row--selected[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}mat-cell[_ngcontent-%COMP%], mat-header-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:inherit;color:var(--mat-sys-on-surface)}.mat-column-name[_ngcontent-%COMP%]{flex:2.4;min-width:240px;justify-content:flex-start}.mat-column-template_type[_ngcontent-%COMP%]{flex:1.1;min-width:130px}.mat-column-category[_ngcontent-%COMP%]{flex:1;min-width:110px}.mat-column-compute_id[_ngcontent-%COMP%]{flex:1;min-width:105px}.mat-column-builtin[_ngcontent-%COMP%]{flex:0 0 90px;min-width:90px;justify-content:center}.mat-column-actions[_ngcontent-%COMP%]{flex:0 0 180px;min-width:180px;box-sizing:border-box;justify-content:flex-start;padding-right:24px}.templates-page__name-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-width:0;gap:var(--gns3-density-space-3)}.templates-page__name-copy[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:14px;font-weight:600}.templates-page__symbol[_ngcontent-%COMP%]{display:grid;flex:0 0 52px;width:52px;height:52px;overflow:hidden;place-items:center;border-radius:14px;color:var(--mat-sys-on-primary-container);background:color-mix(in srgb,var(--mat-sys-primary-container) 82%,var(--mat-sys-surface))}.templates-page__symbol[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:78%;height:78%;object-fit:contain;filter:drop-shadow(0 2px 4px color-mix(in srgb,var(--mat-sys-shadow) 25%,transparent))}.templates-page__symbol[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:27px;height:27px;font-size:27px}.templates-page__symbol--small[_ngcontent-%COMP%]{flex-basis:38px;width:38px;height:38px;border-radius:10px}.templates-page__symbol--small[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:21px;height:21px;font-size:21px}.templates-page__type-badge[_ngcontent-%COMP%], .templates-page__source-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;width:fit-content;padding:4px 9px;border-radius:16px;font-size:12px;font-weight:600;white-space:nowrap}.templates-page__type-badge[_ngcontent-%COMP%]{color:var(--mat-sys-secondary);background:color-mix(in srgb,var(--mat-sys-secondary) 11%,transparent)}.templates-page__type-badge--qemu[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__type-badge--docker[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container)}.templates-page__type-badge--dynamips[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary-container);background:var(--mat-sys-tertiary-container)}.templates-page__type-badge--cloud[_ngcontent-%COMP%]{color:var(--mat-sys-on-error-container);background:var(--mat-sys-error-container)}.templates-page__type-badge--vpcs[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary);background:var(--mat-sys-primary)}.templates-page__type-badge--ethernet-hub[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary);background:var(--mat-sys-secondary)}.templates-page__type-badge--ethernet-switch[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary);background:var(--mat-sys-tertiary)}.templates-page__type-badge--iou[_ngcontent-%COMP%]{color:var(--mat-sys-on-error);background:var(--mat-sys-error)}.templates-page__type-badge--nat[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-highest)}.templates-page__source-badge[_ngcontent-%COMP%]{color:var(--mat-sys-primary);background:color-mix(in srgb,var(--mat-sys-primary) 11%,transparent)}.templates-page__source-badge--builtin[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary);background:color-mix(in srgb,var(--mat-sys-tertiary) 11%,transparent)}.templates-page__table-footer[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:var(--mat-table-footer-container-height);padding:0 12px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container))}.templates-page__table-footer[_ngcontent-%COMP%] mat-paginator[_ngcontent-%COMP%]{width:100%;--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__actions-cell[_ngcontent-%COMP%], .templates-page__card-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:3px}button.templates-page__action[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-on-surface-variant);width:var(--gns3-density-control-height-sm);height:var(--gns3-density-control-height-sm);--mat-icon-button-state-layer-size: var(--gns3-density-control-height-sm);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-control-height-sm)}button.templates-page__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}button.templates-page__action[_ngcontent-%COMP%]{color:var(--template-action-color);--mat-icon-button-state-layer-color: var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:not(:disabled) mat-icon[_ngcontent-%COMP%]{color:var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:disabled mat-icon[_ngcontent-%COMP%]{color:var(--gns3-button-disabled-label-color)}button.templates-page__action--details[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--edit[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-primary)}button.templates-page__action--duplicate[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--delete[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-error)}.templates-page__grid[_ngcontent-%COMP%]{flex:1;min-width:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-content:start;gap:var(--gns3-density-card-gap)}.templates-page__grid--with-details[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__card[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column;padding:16px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;background:var(--mat-sys-surface);cursor:pointer;transition:transform var(--gns3-motion-duration-standard) ease,box-shadow var(--gns3-motion-duration-standard) ease,border-color var(--gns3-motion-duration-standard) ease}.templates-page__card[_ngcontent-%COMP%]:hover{border-color:var(--mat-sys-outline-variant);background:var(--mat-sys-surface-container-low)}.templates-page__card--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);box-shadow:0 0 0 1px var(--mat-sys-primary)}.templates-page__card-header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--gns3-density-space-3)}.templates-page__card-body[_ngcontent-%COMP%]{flex:1;min-width:0;padding:14px 0 12px}.templates-page__card-body[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{display:-webkit-box;overflow:hidden;margin:0 0 9px;color:var(--mat-sys-on-surface);font-size:17px;font-weight:650;line-height:1.35;overflow-wrap:anywhere;-webkit-box-orient:vertical;-webkit-line-clamp:2}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%]{display:grid;gap:8px;margin:16px 0 0}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{min-width:0;margin:0;overflow:hidden;color:var(--mat-sys-on-surface);font-size:13px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] .templates-page__card-tags-row[_ngcontent-%COMP%]{align-items:flex-start}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd.templates-page__card-tags[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px;overflow:visible;white-space:normal}.templates-page__card-actions[_ngcontent-%COMP%]{justify-content:flex-end;min-height:33px;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__grid-paginator[_ngcontent-%COMP%]{grid-column:1/-1;width:100%;border-radius:12px;background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container));--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__empty[_ngcontent-%COMP%]{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:230px;padding:32px;color:var(--mat-sys-on-surface-variant);text-align:center}.templates-page__empty[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{width:48px;height:48px;font-size:48px;opacity:.55}.templates-page__empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:12px 0 0;color:var(--mat-sys-on-surface);font-size:17px}.templates-page__empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:5px 0 0;font-size:14px}.templates-page__details[_ngcontent-%COMP%]{position:sticky;top:16px;flex:0 0 clamp(390px,31vw,480px);display:flex;min-height:380px;max-height:calc(100vh - 176px);flex-direction:column;overflow:hidden;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 60%,transparent);border-radius:16px;background:var(--mat-sys-surface);box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent);animation:_ngcontent-%COMP%_templates-slide-in var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard)}.templates-page__details-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:var(--gns3-density-space-3);min-height:56px;box-sizing:border-box;padding:8px 10px 8px 16px;border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 72%,var(--mat-sys-surface))}.templates-page__details-header[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-primary-container)}.templates-page__details-heading[_ngcontent-%COMP%]{display:flex;min-width:0;align-items:center;gap:var(--gns3-density-space-3)}.templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;margin:0;color:var(--mat-sys-on-primary-container);font-size:19px;font-weight:650;line-height:1.25;text-overflow:ellipsis;white-space:nowrap}.templates-page__details-title-line[_ngcontent-%COMP%]{display:flex;flex:1;min-width:0;align-items:center;gap:var(--gns3-density-space-2)}.templates-page__details-title-line[_ngcontent-%COMP%] .templates-page__type-badge[_ngcontent-%COMP%]{flex:0 0 auto}.templates-page__details-body[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:12px 20px}.templates-page__description[_ngcontent-%COMP%]{padding:10px 0 14px;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__description[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.6px;text-transform:uppercase}.templates-page__description[_ngcontent-%COMP%] app-markdown-viewer[_ngcontent-%COMP%]{display:block;margin-top:8px;padding:2px 12px;border-radius:10px;background:var(--mat-sys-surface-container-low);overflow-wrap:anywhere;--markdown-viewer-font-size: 13px;--markdown-viewer-line-height: 1.5;--markdown-viewer-heading-scale: .85}.templates-page__detail-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:22px 105px minmax(0,1fr);align-items:center;gap:var(--gns3-density-space-3);min-height:40px;box-sizing:border-box;padding:8px 0;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__detail-row[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:19px;height:19px;color:var(--mat-sys-primary);font-size:19px}.templates-page__detail-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:12px;font-weight:650;letter-spacing:.5px;text-transform:uppercase;white-space:nowrap}.templates-page__detail-row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{min-width:0;color:var(--mat-sys-on-surface);font-size:14px;font-weight:500;line-height:1.45;text-align:right;overflow-wrap:anywhere}.templates-page__detail-row--stacked[_ngcontent-%COMP%]{align-items:start}.templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__mono[_ngcontent-%COMP%], .templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__path[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-family:var(--gns3-font-code);font-size:12px;word-break:break-all}.templates-page__tags[_ngcontent-%COMP%]{border-bottom:0}.templates-page__tags[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:7px}.templates-page__tag[_ngcontent-%COMP%]{padding:5px 9px;border-radius:14px;color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container);font-size:11px;font-weight:550}.templates-page__details-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(105px,1fr));gap:var(--gns3-density-space-2);padding:14px 16px 18px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-surface-container) 72%,transparent)}button.templates-page__details-action[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-on-surface-variant);height:40px;border-radius:12px;color:var(--details-action-color);border-color:color-mix(in srgb,var(--details-action-color) 48%,transparent);font-size:13px;font-weight:500}button.templates-page__details-action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--details-action-color)}button.templates-page__details-action--edit[_ngcontent-%COMP%], button.templates-page__details-action--duplicate[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-primary)}button.templates-page__details-action--delete[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-error)}[data-density=compact][_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%]{min-height:40px;height:40px}[data-density=compact][_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%]{width:40px;height:40px;--mat-icon-button-state-layer-size: 40px}[data-density=compact][_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%]{min-height:48px;padding-block:4px}[data-density=compact][_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:18px}[data-density=compact][_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%]{padding-block:8px}[data-density=compact][_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%]{min-height:36px;padding-block:6px}[data-density=compact][_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%]{padding:12px}@keyframes _ngcontent-%COMP%_templates-slide-in{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@media(max-width:1400px){.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__main[_ngcontent-%COMP%]{flex-direction:column}.templates-page__table-container[_ngcontent-%COMP%], .templates-page__grid[_ngcontent-%COMP%], .templates-page__details[_ngcontent-%COMP%]{width:100%}.templates-page__details[_ngcontent-%COMP%]{position:static;flex-basis:auto;max-height:none}}@media(max-width:900px){.templates-page__header[_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column}.templates-page__header-actions[_ngcontent-%COMP%]{width:100%}.templates-page__toolbar[_ngcontent-%COMP%]{align-items:stretch;flex-direction:column}.templates-page__toolbar-actions[_ngcontent-%COMP%]{width:100%}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{flex:1;width:auto}}@media(max-width:640px){.templates-page__header[_ngcontent-%COMP%]{padding:20px 16px 12px}.templates-page__header-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{width:100%;padding-inline:10px}.templates-page__scopes[_ngcontent-%COMP%]{overflow-x:auto;padding-inline:16px}.templates-page__scope[_ngcontent-%COMP%]{flex:0 0 auto;padding-inline:12px}.templates-page__toolbar[_ngcontent-%COMP%], .templates-page__main[_ngcontent-%COMP%]{padding-inline:16px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__view-toggle[_ngcontent-%COMP%]{grid-column:1/-1;justify-self:end}.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.templates-page__details[_ngcontent-%COMP%]{min-width:0}}'],changeDetection:0})}return n})();var Ns=(()=>{class n{httpController;constructor(e){this.httpController=e}getImages(e){return this.httpController.get(e,"/images")}syncImages(e,t=!1,i=!1){return this.httpController.post(e,"/images/sync",{force_checksum:t,dry_run:i})}getSyncJob(e,t){return this.httpController.get(e,`/images/sync/jobs/${encodeURIComponent(t)}`)}getCompatibilityCatalog(e){return this.httpController.get(e,"/images/compatibility/catalog")}checkCompatibility(e,t){return this.httpController.post(e,"/images/compatibility",{checksums:t})}getImagePath(e,t,i,a=""){let s=i.split("/").map(encodeURIComponent).join("/"),d=a?`&subdirectory=${encodeURIComponent(a)}`:"";return`${e.protocol}//${e.host}:${e.port}/${zi.current_version}/images/upload/${s}?install_appliances=${t}${d}`}uploadedImage(e,t,i,a){return this.httpController.post(e,`/images/upload/${i}?install_appliances=${t}`,a)}deleteFile(e,t){return this.httpController.delete(e,`/images/${t}`)}pruneImages(e){return this.httpController.delete(e,"/images/prune")}installImages(e){return this.httpController.post(e,"/images/install",{})}static \u0275fac=function(t){return new(t||n)(_e(sn))};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var Iue=/\{(?:[01]|adapter|port[0-8]|segment[0-8])\}/g;function Ou(n,o){if(o.firstPortName&&n===0)return o.firstPortName;let e=o.portNameFormat||"Ethernet{0}",t=o.portSegmentSize||0,i=n-(o.firstPortName?1:0),a=t>0?i%t:i,s=t>0?Math.floor(i/t):i;return Aue(e,a,s,n)}function Aue(n,o,e,t){return n.replace(Iue,i=>{let a=i.slice(1,-1);return a==="0"?String(o):a==="1"?String(e):a==="adapter"?String(t):a.startsWith("port")?String(o+Number(a.slice(4))):String(e+Number(a.slice(7)))})}var Nue=(n,o)=>o.adapter_number,Fue=(n,o)=>o.value;function Rue(n,o){if(n&1&&(r(0,"mat-option",20),c(1),l()),n&2){let e=o.$implicit;v("value",e.value),m(),N(e.name)}}function zue(n,o){if(n&1&&(r(0,"mat-error",22)(1,"mat-icon",24),c(2,"error_outline"),l(),r(3,"span"),c(4),l()()),n&2){let e=h().$implicit,t=h();m(4),N(t.getMacErrorMessage(e.mac_address))}}function Lue(n,o){if(n&1){let e=R();r(0,"div",7)(1,"span",14),c(2),l(),r(3,"div",15)(4,"span",16),c(5,"Port name"),l(),r(6,"mat-form-field",17)(7,"input",18),_("input",function(i){let a=y(e).$implicit,s=h();return w(s.onPortNameChange(a.adapter_number,i.target.value))}),l()()(),r(8,"div",15)(9,"span",16),c(10,"Type"),l(),r(11,"mat-form-field",17)(12,"mat-select",19),_("selectionChange",function(i){let a=y(e).$implicit,s=h();return w(s.onAdapterTypeChange(a.adapter_number,i.value))}),Q(13,Rue,2,2,"mat-option",20,Fue),l()()(),r(15,"div",15)(16,"span",16),c(17,"MAC address"),l(),r(18,"mat-form-field",17)(19,"input",21),_("input",function(i){let a=y(e).$implicit,s=h();return w(s.onMacAddressChange(a.adapter_number,i.target.value))}),l(),T(20,zue,5,1,"mat-error",22),l()(),r(21,"button",23),_("click",function(){let i=y(e).$implicit,a=h();return w(a.delete(i))}),r(22,"mat-icon"),c(23,"delete"),l()()()}if(n&2){let e=o.$implicit,t=o.$index,i=h();m(2),X("Adapter ",e.adapter_number),m(5),v("name",ka("port_name_",t))("value",e.port_name),Ce("aria-label","Port name for adapter "+e.adapter_number),m(5),v("name",ka("adapter_type_",t))("value",e.adapter_type),Ce("aria-label","Type for adapter "+e.adapter_number),m(),K(i.networkTypes),m(6),v("name",ka("mac_address_",t))("value",e.mac_address),Ce("aria-label","MAC address for adapter "+e.adapter_number),m(),E(e.mac_address&&!i.isValidMacAddress(e.mac_address)?20:-1)}}var sd=(()=>{class n{data;dialogRef=f(We);cd=f(oe);toasterService=f(re);adapters=$([]);constructor(e){this.data=e,this.adapters.set(e.adapters?[...e.adapters]:[])}get networkTypes(){return this.data.networkTypes||[]}onAdd(){let e=this.adapters(),i=(e.length>0?Math.max(...e.map(d=>d.adapter_number)):-1)+1,a=Ou(i,this.data),s={adapter_number:i,adapter_type:this.networkTypes[0]?.value||"e1000",port_name:a,mac_address:""};this.adapters.set([...e,s])}delete(e){this.adapters.set(this.adapters().filter(t=>t!==e))}onPortNameChange(e,t){this.adapters.update(i=>i.map(a=>a.adapter_number===e?ze(q({},a),{port_name:t}):a)),this.cd.markForCheck()}onAdapterTypeChange(e,t){this.adapters.update(i=>i.map(a=>a.adapter_number===e?ze(q({},a),{adapter_type:t}):a)),this.cd.markForCheck()}onMacAddressChange(e,t){let i=this.formatMacAddress(t);this.adapters.update(a=>a.map(s=>s.adapter_number===e?ze(q({},s),{mac_address:i}):s)),this.cd.markForCheck()}formatMacAddress(e){if(!e)return e;let t=e.replace(/[^0-9A-Fa-f]/g,"");return t.length!==12?e:t.match(/.{1,2}/g)?.join(":")||e}isValidMacAddress(e){return e?/^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$/.test(e):!0}hasInvalidMacAddresses(){return this.adapters().some(e=>e.mac_address&&!this.isValidMacAddress(e.mac_address))}getMacErrorMessage(e){if(!e)return" ";let t=e.replace(/[^0-9A-Fa-f]/g,"");return t.length===0?"Invalid MAC address format":t.length<12?`Too short (${t.length}/12 hex digits)`:t.length>12?`Too long (${t.length}/12 hex digits)`:"Invalid MAC address format (12 hex digits required)"}cancelConfigureCustomAdapters(){this.dialogRef.close()}configureCustomAdapters(){let e=this.adapters().length;if(this.adapters().some((d,p)=>d.adapter_number!==p)){this.toasterService.error("Only adapters at the end can be removed. Removing adapters in the middle would renumber the remaining ports.");return}let t=this.data.validateAdapterCount?.(e);if(t){this.toasterService.error(t);return}if(this.hasInvalidMacAddresses()){let p=this.adapters().filter(u=>u.mac_address&&!this.isValidMacAddress(u.mac_address)).map(u=>{let g=this.getMacErrorMessage(u.mac_address);return`Adapter ${u.adapter_number}: ${g}`});this.toasterService.error(`Invalid MAC addresses:
|
||
`+p.join(`
|
||
`));return}let i=this.data.defaultAdapterType||"e1000",a=[];for(let d of this.adapters()){let p=Ou(d.adapter_number,this.data),u=d.port_name!==p,g=d.adapter_type!==i,C=d.mac_address&&d.mac_address.length>0;(u||g||C)&&a.push({adapter_number:d.adapter_number,port_name:u?d.port_name:p,adapter_type:d.adapter_type,mac_address:d.mac_address||null})}let s={adapters:a,requiredAdapters:e};this.dialogRef.close(s)}static \u0275fac=function(t){return new(t||n)(Mt(Wt))};static \u0275cmp=V({type:n,selectors:[["app-custom-adapters"]],inputs:{adapters:[1,"adapters"]},outputs:{adapters:"adaptersChange"},decls:28,vars:0,consts:[["mat-dialog-title",""],["mat-dialog-content","",1,"content"],[1,"adapter-form"],[1,"adapter-header"],[1,"adapter-header-label"],[1,"adapter-header-field"],[1,"adapter-header-actions"],[1,"adapter-item"],[1,"add-adapter-row"],["mat-stroked-button","","color","primary","type","button",1,"add-btn",3,"click"],[1,"info-note-text","gns3-helper-text"],["mat-dialog-actions","","align","end"],["mat-button","",3,"click"],["mat-raised-button","","color","primary",3,"click"],[1,"adapter-label"],[1,"adapter-field-group"],[1,"adapter-field-label"],["appearance","outline","subscriptSizing","dynamic",1,"adapter-field"],["matInput","",3,"input","value","name"],[3,"selectionChange","value","name"],[3,"value"],["matInput","","placeholder","Paste any MAC format",3,"input","value","name"],[1,"gns3-validation-message"],["mat-icon-button","","matTooltip","Delete",1,"adapter-actions",3,"click"],["aria-hidden","true"]],template:function(t,i){t&1&&(r(0,"h1",0),c(1,"Custom adapters configuration"),l(),r(2,"div",1)(3,"div",2)(4,"div",3)(5,"span",4),c(6,"Adapter"),l(),r(7,"span",5),c(8,"Port name"),l(),r(9,"span",5),c(10,"Type"),l(),r(11,"span",5),c(12,"MAC address"),l(),L(13,"span",6),l(),Q(14,Lue,24,14,"div",7,Nue),l(),r(16,"div",8)(17,"button",9),_("click",function(){return i.onAdd()}),r(18,"mat-icon"),c(19,"add"),l(),c(20," Add adapter "),l(),r(21,"div",10),c(22," Only unused adapters at the end can be removed. Remaining adapter numbers are preserved. Adapters without custom configuration will use default settings. "),l()()(),r(23,"div",11)(24,"button",12),_("click",function(){return i.cancelConfigureCustomAdapters()}),c(25,"Cancel"),l(),r(26,"button",13),_("click",function(){return i.configureCustomAdapters()}),c(27,"Apply"),l()()),t&2&&(m(14),K(i.adapters()))},dependencies:[Y,he,Be,we,Pe,Wn,ie,ce,ye,Ee,ot,ct,nt,st,pt,ke,qe,Qe,bt],styles:["[_nghost-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%] mat-form-field[_ngcontent-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%]{--gns3-adapter-columns: 100px minmax(0, 1fr) minmax(0, 2fr) minmax(0, 1.5fr) var(--gns3-density-icon-button);display:block;min-width:0}.content[_ngcontent-%COMP%]{min-width:0;container:adapter-dialog/inline-size}.adapter-form[_ngcontent-%COMP%]{min-width:0}.adapter-header[_ngcontent-%COMP%], .adapter-item[_ngcontent-%COMP%]{display:grid;grid-template-columns:var(--gns3-adapter-columns);gap:var(--gns3-density-space-3);box-sizing:border-box;padding-inline:var(--gns3-density-space-4)}.adapter-header[_ngcontent-%COMP%]{border-inline:1px solid transparent}.adapter-item[_ngcontent-%COMP%]{align-items:start}.adapter-field-group[_ngcontent-%COMP%], .adapter-field[_ngcontent-%COMP%]{width:100%;min-width:0}.adapter-field-label[_ngcontent-%COMP%]{display:none;margin-bottom:var(--gns3-density-space-1);color:var(--mat-sys-on-surface-variant);font-size:13px;font-weight:500}.adapter-label[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;min-height:var(--gns3-density-form-field-height)}.adapter-header-actions[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button)}button.adapter-actions[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-icon-button)}button.adapter-actions[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}button.adapter-actions[_ngcontent-%COMP%]{margin-top:calc((var(--gns3-density-form-field-height) - var(--gns3-density-icon-button)) / 2)}@container adapter-dialog (max-width: 640px){.adapter-header[_ngcontent-%COMP%]{display:none}.adapter-item[_ngcontent-%COMP%]{grid-template-columns:minmax(0,1fr) var(--gns3-density-icon-button)}.adapter-label[_ngcontent-%COMP%]{grid-column:1;grid-row:1;justify-content:flex-start;min-height:var(--gns3-density-icon-button)}button.adapter-actions[_ngcontent-%COMP%]{grid-column:2;grid-row:1;margin-top:0}.adapter-field-group[_ngcontent-%COMP%]{grid-column:1/-1}.adapter-field[_ngcontent-%COMP%]{text-align:left}.adapter-field-label[_ngcontent-%COMP%]{display:block}.add-adapter-row[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:stretch;gap:var(--gns3-density-space-2)}.add-adapter-row[_ngcontent-%COMP%] .add-btn[_ngcontent-%COMP%]{margin-top:0}.info-note-text[_ngcontent-%COMP%]{min-width:0;overflow-wrap:anywhere}}[_nghost-%COMP%]{display:block}.adapter-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-space-3);max-height:500px;overflow-y:auto}.adapter-item[_ngcontent-%COMP%]{padding-block:var(--gns3-density-space-3);background:var(--mat-sys-surface-container-lowest);border-radius:12px;border:1px solid color-mix(in srgb,var(--mat-sys-outline) 15%,transparent)}.adapter-item[_ngcontent-%COMP%]:hover{border-color:color-mix(in srgb,var(--mat-sys-primary) 30%,transparent)}.adapter-label[_ngcontent-%COMP%]{font-size:14px;font-weight:500;color:var(--mat-sys-on-surface);text-align:center}.adapter-header[_ngcontent-%COMP%]{align-items:center;padding-block:var(--gns3-density-space-2);margin-bottom:8px;border-bottom:2px solid color-mix(in srgb,var(--mat-sys-outline) 30%,transparent);position:sticky;top:0;z-index:10;background:var(--mat-sys-surface);box-shadow:0 2px 4px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent)}.adapter-header-label[_ngcontent-%COMP%], .adapter-header-field[_ngcontent-%COMP%]{font-size:13px;font-weight:600;color:var(--mat-sys-on-surface-variant);text-transform:uppercase;letter-spacing:.5px;text-align:center}.adapter-header-actions[_ngcontent-%COMP%]{text-align:center}.adapter-field[_ngcontent-%COMP%], .adapter-actions[_ngcontent-%COMP%]{margin:0;text-align:center}.add-btn[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing);flex-shrink:0;width:auto;margin:0}"],changeDetection:0})}return n})();var Vue=(n,o)=>[n,o],Yz=(n,o)=>o[1],fv=(n,o)=>o.path,Bue=(n,o)=>o.value,GE=(n,o)=>o.filename;function jue(n,o){if(n&1&&(r(0,"mat-option",44),c(1),l()),n&2){let e=o.$implicit;v("value",e[1]),m(),N(e[0])}}function $ue(n,o){if(n&1){let e=R();r(0,"mat-chip-row",63),_("removed",function(){let i=y(e).$implicit,a=h(3);return w(a.removeTag(i))}),c(1),r(2,"button",64)(3,"mat-icon"),c(4,"cancel"),l()()()}if(n&2){let e=o.$implicit;v("editable",!1),Ce("title",e),m(),X(" ",e," "),m(),Ce("aria-label","Remove tag "+e)}}function Hue(n,o){if(n&1&&(r(0,"mat-option",44),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function Uue(n,o){if(n&1&&(r(0,"mat-option",44),c(1),l()),n&2){let e=o.$implicit;v("value",e[1]),m(),N(e[0])}}function Wue(n,o){if(n&1&&(r(0,"mat-option",44),c(1),l()),n&2){let e=o.$implicit;v("value",e[1]),m(),X(" ",e[0]," ")}}function Gue(n,o){if(n&1&&(r(0,"mat-option",44),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function que(n,o){if(n&1&&(r(0,"mat-option",44),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function Que(n,o){if(n&1){let e=R();r(0,"form",29)(1,"div",37)(2,"mat-form-field",38)(3,"mat-label"),c(4,"Template name"),l(),r(5,"input",39),_("input",function(i){y(e);let a=h(2);return w(a.templateName.set(i.target.value))}),l()(),r(6,"mat-form-field",38)(7,"mat-label"),c(8,"Default name format"),l(),r(9,"input",40),_("input",function(i){y(e);let a=h(2);return w(a.defaultName.set(i.target.value))}),l()()(),r(10,"div",41)(11,"mat-form-field",42)(12,"mat-label"),c(13,"Category"),l(),r(14,"mat-select",43),_("selectionChange",function(i){y(e);let a=h(2);return w(a.category.set(i.value))}),Q(15,jue,2,2,"mat-option",44,ni),l()(),r(17,"mat-form-field",45)(18,"mat-label"),c(19,"Symbol"),l(),r(20,"input",46),_("input",function(i){y(e);let a=h(2);return w(a.symbol.set(i.target.value))}),l()(),r(21,"button",47),_("click",function(){y(e);let i=h(2);return w(i.chooseSymbol())}),r(22,"mat-icon"),c(23,"add"),l(),c(24," Choose symbol "),l()(),r(25,"div",48)(26,"mat-form-field",49)(27,"mat-label"),c(28,"Tags"),l(),r(29,"input",50),_("matChipInputTokenEnd",function(i){y(e);let a=h(2);return w(a.addTag(i))}),l()(),r(30,"mat-chip-grid",51,0),Q(32,$ue,5,4,"mat-chip-row",52,Oe),l()(),r(34,"div",53)(35,"mat-form-field",38)(36,"mat-label"),c(37,"Platform"),l(),r(38,"mat-select",43),_("selectionChange",function(i){y(e);let a=h(2);return w(a.platform.set(i.value))}),Q(39,Hue,2,2,"mat-option",44,Oe),l()(),r(41,"mat-form-field",38)(42,"mat-label"),c(43,"RAM"),l(),r(44,"input",54),_("input",function(i){y(e);let a=h(2);return w(a.ram.set(+i.target.value))}),l(),r(45,"span",55),c(46,"MB"),l()(),r(47,"mat-form-field",38)(48,"mat-label"),c(49,"vCPUs"),l(),r(50,"input",56),_("input",function(i){y(e);let a=h(2);return w(a.cpus.set(+i.target.value))}),l()(),r(51,"mat-form-field",38)(52,"mat-label"),c(53,"Boot priority"),l(),r(54,"mat-select",43),_("selectionChange",function(i){y(e);let a=h(2);return w(a.bootPriority.set(i.value))}),Q(55,Uue,2,2,"mat-option",44,Yz),l()()(),r(57,"mat-form-field",57)(58,"mat-label"),c(59,"On close"),l(),r(60,"mat-select",43),_("selectionChange",function(i){y(e);let a=h(2);return w(a.onClose.set(i.value))}),Q(61,Wue,2,2,"mat-option",44,Yz),l()(),r(63,"div",37)(64,"mat-form-field",38)(65,"mat-label"),c(66,"Console type"),l(),r(67,"mat-select",43),_("selectionChange",function(i){y(e);let a=h(2);return w(a.consoleType.set(i.value))}),Q(68,Gue,2,2,"mat-option",44,Oe),l()(),r(70,"mat-form-field",38)(71,"mat-label"),c(72,"Auxiliary console type"),l(),r(73,"mat-select",43),_("selectionChange",function(i){y(e);let a=h(2);return w(a.auxConsoleType.set(i.value))}),Q(74,que,2,2,"mat-option",44,Oe),l()()(),r(76,"div",58)(77,"app-netmiko-device-type-select",59),rn("valueChange",function(i){y(e);let a=h(2);return Xt(a.netmikoDeviceType,i)||(a.netmikoDeviceType=i),w(i)}),l(),r(78,"mat-form-field",38)(79,"mat-label"),c(80,"Default username"),l(),r(81,"input",60),_("input",function(i){y(e);let a=h(2);return w(a.onCredentialInput("default_username",i))}),l()(),r(82,"mat-form-field",38)(83,"mat-label"),c(84,"Default password"),l(),r(85,"input",61),_("input",function(i){y(e);let a=h(2);return w(a.onCredentialInput("default_password",i))}),l()()(),r(86,"mat-checkbox",62),_("change",function(i){y(e);let a=h(2);return w(a.consoleAutoStart.set(i.checked))}),c(87,"Auto start console"),l()()}if(n&2){let e=Te(31),t=h(2);m(5),v("value",t.templateName()),m(4),v("value",t.defaultName()),m(5),v("value",t.category()),m(),K(t.categories),m(5),v("value",t.symbol()),m(9),v("matChipInputFor",e)("matChipInputSeparatorKeyCodes",t.separatorKeysCodes),m(),ne("gns3-chip-field__values--empty",t.tags().length===0),m(2),K(t.tags()),m(6),v("value",t.platform()),m(),K(t.selectPlatform),m(5),v("value",t.ram()),m(6),v("value",t.cpus()),m(4),v("value",t.bootPriority()),m(),K(t.bootPriorities),m(5),v("value",t.onClose()),m(),K(t.onCloseOptions),m(6),v("value",t.consoleType()),m(),K(t.consoleTypes),m(5),v("value",t.auxConsoleType()),m(),K(t.auxConsoleTypes),m(3),an("value",t.netmikoDeviceType),v("controller",t.controller),m(4),v("value",t.defaultUsername()),m(4),v("value",t.defaultPassword()),m(),v("checked",t.consoleAutoStart())}}function Kue(n,o){if(n&1&&(r(0,"mat-option",44),c(1),l()),n&2){let e=o.$implicit;v("value",e.path||e.filename),m(),N(e.path||e.filename)}}function Xue(n,o){if(n&1&&(r(0,"mat-optgroup",69),Q(1,Kue,2,2,"mat-option",44,fv),l()),n&2){let e=h(3);m(),K(e.filteredImages)}}function Yue(n,o){if(n&1&&(r(0,"mat-option",44),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function Zue(n,o){if(n&1&&(r(0,"mat-option",44),c(1),l()),n&2){let e=o.$implicit;v("value",e.path||e.filename),m(),N(e.path||e.filename)}}function Jue(n,o){if(n&1&&(r(0,"mat-optgroup",69),Q(1,Zue,2,2,"mat-option",44,fv),l()),n&2){let e=h(3);m(),K(e.filteredImages)}}function ege(n,o){if(n&1&&(r(0,"mat-option",44),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function tge(n,o){if(n&1&&(r(0,"mat-option",44),c(1),l()),n&2){let e=o.$implicit;v("value",e.path||e.filename),m(),N(e.path||e.filename)}}function nge(n,o){if(n&1&&(r(0,"mat-optgroup",69),Q(1,tge,2,2,"mat-option",44,fv),l()),n&2){let e=h(3);m(),K(e.filteredImages)}}function ige(n,o){if(n&1&&(r(0,"mat-option",44),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function oge(n,o){if(n&1&&(r(0,"mat-option",44),c(1),l()),n&2){let e=o.$implicit;v("value",e.path||e.filename),m(),N(e.path||e.filename)}}function age(n,o){if(n&1&&(r(0,"mat-optgroup",69),Q(1,oge,2,2,"mat-option",44,fv),l()),n&2){let e=h(3);m(),K(e.filteredImages)}}function rge(n,o){if(n&1&&(r(0,"mat-option",44),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function sge(n,o){if(n&1){let e=R();r(0,"div",30)(1,"div",65)(2,"h4",66),c(3,"HDA (Primary Master)"),l(),r(4,"mat-form-field",57)(5,"mat-label"),c(6,"Disk image"),l(),r(7,"input",67),_("input",function(i){y(e);let a=h(2);return a.onHdaImageInput(i),w(a.hdaDiskImage.set(i.target.value))})("focus",function(){y(e);let i=h(2);return w(i.refreshQemuImages())}),l(),r(8,"mat-autocomplete",68,1),_("optionSelected",function(i){y(e);let a=h(2);return w(a.hdaDiskImage.set(i.option.value))}),T(10,Xue,3,0,"mat-optgroup",69),l()(),r(11,"mat-form-field",57)(12,"mat-label"),c(13,"Disk interface"),l(),r(14,"mat-select",43),_("selectionChange",function(i){y(e);let a=h(2);return w(a.hdaDiskInterface.set(i.value))}),Q(15,Yue,2,2,"mat-option",44,Oe),l()()(),r(17,"div",65)(18,"h4",66),c(19,"HDB (Primary Slave)"),l(),r(20,"mat-form-field",57)(21,"mat-label"),c(22,"Disk image"),l(),r(23,"input",67),_("input",function(i){y(e);let a=h(2);return a.onHdbImageInput(i),w(a.hdbDiskImage.set(i.target.value))})("focus",function(){y(e);let i=h(2);return w(i.refreshQemuImages())}),l(),r(24,"mat-autocomplete",68,2),_("optionSelected",function(i){y(e);let a=h(2);return w(a.hdbDiskImage.set(i.option.value))}),T(26,Jue,3,0,"mat-optgroup",69),l()(),r(27,"mat-form-field",57)(28,"mat-label"),c(29,"Disk interface"),l(),r(30,"mat-select",43),_("selectionChange",function(i){y(e);let a=h(2);return w(a.hdbDiskInterface.set(i.value))}),Q(31,ege,2,2,"mat-option",44,Oe),l()()(),r(33,"div",65)(34,"h4",66),c(35,"HDC (Secondary Master)"),l(),r(36,"mat-form-field",57)(37,"mat-label"),c(38,"Disk image"),l(),r(39,"input",67),_("input",function(i){y(e);let a=h(2);return a.onHdcImageInput(i),w(a.hdcDiskImage.set(i.target.value))})("focus",function(){y(e);let i=h(2);return w(i.refreshQemuImages())}),l(),r(40,"mat-autocomplete",68,3),_("optionSelected",function(i){y(e);let a=h(2);return w(a.hdcDiskImage.set(i.option.value))}),T(42,nge,3,0,"mat-optgroup",69),l()(),r(43,"mat-form-field",57)(44,"mat-label"),c(45,"Disk interface"),l(),r(46,"mat-select",43),_("selectionChange",function(i){y(e);let a=h(2);return w(a.hdcDiskInterface.set(i.value))}),Q(47,ige,2,2,"mat-option",44,Oe),l()()(),r(49,"div",65)(50,"h4",66),c(51,"HDD (Secondary Slave)"),l(),r(52,"mat-form-field",57)(53,"mat-label"),c(54,"Disk image"),l(),r(55,"input",67),_("input",function(i){y(e);let a=h(2);return a.onHddImageInput(i),w(a.hddDiskImage.set(i.target.value))})("focus",function(){y(e);let i=h(2);return w(i.refreshQemuImages())}),l(),r(56,"mat-autocomplete",68,4),_("optionSelected",function(i){y(e);let a=h(2);return w(a.hddDiskImage.set(i.option.value))}),T(58,age,3,0,"mat-optgroup",69),l()(),r(59,"mat-form-field",57)(60,"mat-label"),c(61,"Disk interface"),l(),r(62,"mat-select",43),_("selectionChange",function(i){y(e);let a=h(2);return w(a.hddDiskInterface.set(i.value))}),Q(63,rge,2,2,"mat-option",44,Oe),l()()()()}if(n&2){let e=Te(9),t=Te(25),i=Te(41),a=Te(57),s=h(2);m(7),v("value",s.hdaDiskImage())("matAutocomplete",e),m(3),E(s.filteredImages.length?10:-1),m(4),v("value",s.hdaDiskInterface()),m(),K(s.diskInterfaces),m(8),v("value",s.hdbDiskImage())("matAutocomplete",t),m(3),E(s.filteredImages.length?26:-1),m(4),v("value",s.hdbDiskInterface()),m(),K(s.diskInterfaces),m(8),v("value",s.hdcDiskImage())("matAutocomplete",i),m(3),E(s.filteredImages.length?42:-1),m(4),v("value",s.hdcDiskInterface()),m(),K(s.diskInterfaces),m(8),v("value",s.hddDiskImage())("matAutocomplete",a),m(3),E(s.filteredImages.length?58:-1),m(4),v("value",s.hddDiskInterface()),m(),K(s.diskInterfaces)}}function lge(n,o){if(n&1&&(r(0,"mat-option",44),c(1),l()),n&2){let e=o.$implicit;v("value",e.path||e.filename),m(),N(e.path||e.filename)}}function cge(n,o){if(n&1&&(r(0,"mat-optgroup",69),Q(1,lge,2,2,"mat-option",44,fv),l()),n&2){let e=h(4);m(),K(e.filteredGlobalImages)}}function dge(n,o){if(n&1){let e=R();r(0,"div",70)(1,"h4",66),c(2),l(),r(3,"div",71)(4,"input",72,5),_("change",function(i){let a=y(e).$index,s=h(3);return w(s.uploadCdromImageFile(i,a+1))}),l(),r(6,"button",73),_("click",function(){y(e);let i=Te(5);return w(i.click())}),c(7," Upload "),l(),r(8,"mat-form-field",45)(9,"mat-label"),c(10),l(),r(11,"input",74),_("input",function(i){let a=y(e).$implicit;return h(3).onCdromInput(i),w(a.set(i.target.value))})("focus",function(){y(e);let i=h(3);return w(i.refreshGlobalImages())}),l(),r(12,"mat-autocomplete",68,6),_("optionSelected",function(i){let a=y(e).$implicit;return w(a.set(i.option.value))}),T(14,cge,3,0,"mat-optgroup",69),l()()(),r(15,"mat-form-field",75)(16,"mat-label"),c(17,"Interface"),l(),r(18,"mat-select",76),_("valueChange",function(i){let a=y(e).$index,s=h(3);return w(s.cdromInterfaces[a].set(i))}),r(19,"mat-option",77),c(20,"ide"),l(),r(21,"mat-option",78),c(22,"sata"),l()()()()}if(n&2){let e=o.$implicit,t=o.$index,i=Te(13),a=h(3);m(2),X("CD/DVD ",t+1),m(8),X("CD/DVD ",t+1," image"),m(),v("value",e())("matAutocomplete",i),m(3),E(a.filteredGlobalImages.length?14:-1),m(4),v("value",a.cdromInterfaces[t]())}}function mge(n,o){if(n&1&&(r(0,"div",30),Q(1,dge,23,6,"div",70,ni),l()),n&2){let e=h(2);m(),K(Go(0,Vue,e.cdromImage,e.cdrom2Image))}}function pge(n,o){if(n&1&&(r(0,"mat-option",44),c(1),l()),n&2){let e=o.$implicit;v("value",e.value),m(),Un("",e.name," (",e.value,")")}}function uge(n,o){if(n&1){let e=R();r(0,"form",29)(1,"mat-form-field",57)(2,"mat-label"),c(3,"Adapters"),l(),r(4,"input",79),_("input",function(i){y(e);let a=h(2);return w(a.adapters.set(+i.target.value))}),l()(),r(5,"mat-form-field",57)(6,"mat-label"),c(7,"First port name"),l(),r(8,"input",80),_("input",function(i){y(e);let a=h(2);return w(a.firstPortName.set(i.target.value))}),l()(),r(9,"mat-form-field",57)(10,"mat-label"),c(11,"Name format"),l(),r(12,"input",81),_("input",function(i){y(e);let a=h(2);return w(a.portNameFormat.set(i.target.value))}),l()(),r(13,"mat-form-field",57)(14,"mat-label"),c(15,"Segment size"),l(),r(16,"input",82),_("input",function(i){y(e);let a=h(2);return w(a.portSegmentSize.set(+i.target.value))}),l()(),r(17,"mat-form-field",57)(18,"mat-label"),c(19,"Base MAC"),l(),r(20,"input",83),_("input",function(i){y(e);let a=h(2);return w(a.macAddress.set(i.target.value))}),l()(),r(21,"mat-form-field",57)(22,"mat-label"),c(23,"Type"),l(),r(24,"mat-select",43),_("selectionChange",function(i){y(e);let a=h(2);return w(a.networkType.set(i.value))}),Q(25,pge,2,3,"mat-option",44,Bue),l()(),r(27,"button",84),_("click",function(){y(e);let i=h(2);return w(i.openCustomAdaptersDialog())}),c(28," Configure custom adapters "),l(),r(29,"mat-checkbox",62),_("change",function(i){y(e);let a=h(2);return w(a.replicateNetworkConnectionState.set(i.checked))}),c(30,"Replicate network connection state"),l()()}if(n&2){let e=h(2);m(4),v("value",e.adapters()),m(4),v("value",e.firstPortName()),m(4),v("value",e.portNameFormat()),m(4),v("value",e.portSegmentSize()),m(4),v("value",e.macAddress()),m(4),v("value",e.networkType()),m(),K(e.networkTypes),m(4),v("checked",e.replicateNetworkConnectionState())}}function gge(n,o){if(n&1&&(r(0,"mat-option",44),c(1),l()),n&2){let e=o.$implicit;v("value",e.filename),m(),N(e.filename)}}function hge(n,o){if(n&1&&(r(0,"mat-optgroup",69),Q(1,gge,2,2,"mat-option",44,GE),l()),n&2){let e=h(3);m(),K(e.filteredAdvancedImages)}}function _ge(n,o){if(n&1&&(r(0,"mat-option",44),c(1),l()),n&2){let e=o.$implicit;v("value",e.filename),m(),N(e.filename)}}function fge(n,o){if(n&1&&(r(0,"mat-optgroup",69),Q(1,_ge,2,2,"mat-option",44,GE),l()),n&2){let e=h(3);m(),K(e.filteredAdvancedImages)}}function vge(n,o){if(n&1&&(r(0,"mat-option",44),c(1),l()),n&2){let e=o.$implicit;v("value",e.filename),m(),N(e.filename)}}function Cge(n,o){if(n&1&&(r(0,"mat-optgroup",69),Q(1,vge,2,2,"mat-option",44,GE),l()),n&2){let e=h(3);m(),K(e.filteredAdvancedImages)}}function bge(n,o){if(n&1){let e=R();r(0,"mat-form-field",57)(1,"mat-label"),c(2,"Perecentage of CPU allowed"),l(),r(3,"input",97),_("input",function(i){y(e);let a=h(3);return w(a.cpuThrottling.set(+i.target.value))}),l()()}if(n&2){let e=h(3);m(3),v("value",e.cpuThrottling())}}function xge(n,o){if(n&1&&(r(0,"mat-option",44),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function yge(n,o){if(n&1){let e=R();r(0,"div",29)(1,"div",85)(2,"h4",86),c(3,"Linux boot specific settings"),l(),r(4,"div",71)(5,"input",87,7),_("change",function(i){y(e);let a=h(2);return w(a.uploadInitrdFile(i))}),l(),r(7,"button",73),_("click",function(){y(e);let i=Te(6);return w(i.click())}),c(8," Upload "),l(),r(9,"mat-form-field",45)(10,"mat-label"),c(11,"Initial RAM disk (initrd)"),l(),r(12,"input",88),_("input",function(i){y(e);let a=h(2);return a.onAdvancedInput(i),w(a.initrd.set(i.target.value))})("focus",function(){y(e);let i=h(2);return w(i.refreshQemuImages())}),l(),r(13,"mat-autocomplete",null,8),T(15,hge,3,0,"mat-optgroup",69),l()()(),r(16,"div",71)(17,"input",87,9),_("change",function(i){y(e);let a=h(2);return w(a.uploadKernelImageFile(i))}),l(),r(19,"button",73),_("click",function(){y(e);let i=Te(18);return w(i.click())}),c(20," Upload "),l(),r(21,"mat-form-field",45)(22,"mat-label"),c(23,"Kernel image"),l(),r(24,"input",89),_("input",function(i){y(e);let a=h(2);return a.onAdvancedInput(i),w(a.kernelImage.set(i.target.value))})("focus",function(){y(e);let i=h(2);return w(i.refreshQemuImages())}),l(),r(25,"mat-autocomplete",null,10),T(27,fge,3,0,"mat-optgroup",69),l()()(),r(28,"mat-form-field",57)(29,"mat-label"),c(30,"Kernel command line"),l(),r(31,"input",90),_("input",function(i){y(e);let a=h(2);return w(a.kernelCommandLine.set(i.target.value))}),l()()(),r(32,"div",85)(33,"h4",86),c(34,"Bios"),l(),r(35,"div",71)(36,"input",87,11),_("change",function(i){y(e);let a=h(2);return w(a.uploadBiosFile(i))}),l(),r(38,"button",73),_("click",function(){y(e);let i=Te(37);return w(i.click())}),c(39," Upload "),l(),r(40,"mat-form-field",45)(41,"mat-label"),c(42,"Bios image"),l(),r(43,"input",91),_("input",function(i){y(e);let a=h(2);return a.onAdvancedInput(i),w(a.biosImage.set(i.target.value))})("focus",function(){y(e);let i=h(2);return w(i.refreshQemuImages())}),l(),r(44,"mat-autocomplete",null,12),T(46,Cge,3,0,"mat-optgroup",69),l()()()(),r(47,"div",85)(48,"h4",86),c(49,"Optimization"),l(),r(50,"mat-checkbox",62),_("change",function(i){y(e);let a=h(2);return w(a.activateCpuThrottling.set(i.checked))}),c(51,"Activate CPU throttling"),l(),T(52,bge,4,1,"mat-form-field",57),r(53,"mat-form-field",57)(54,"mat-label"),c(55,"Process priority"),l(),r(56,"mat-select",43),_("selectionChange",function(i){y(e);let a=h(2);return w(a.processPriority.set(i.value))}),Q(57,xge,2,2,"mat-option",44,Oe),l()()(),r(59,"div",85)(60,"h4",86),c(61,"Additional settings"),l(),r(62,"mat-form-field",57)(63,"mat-label"),c(64,"Custom Qemu binary path"),l(),r(65,"input",92),_("input",function(i){y(e);let a=h(2);return w(a.qemuPath.set(i.target.value))}),l()(),r(66,"mat-form-field",57)(67,"mat-label"),c(68,"Options"),l(),r(69,"input",93),_("input",function(i){y(e);let a=h(2);return w(a.options.set(i.target.value))}),l()(),r(70,"div",94)(71,"mat-checkbox",62),_("change",function(i){y(e);let a=h(2);return w(a.linkedClone.set(i.checked))}),c(72,"Use as a linked base VM"),l(),r(73,"mat-checkbox",62),_("change",function(i){y(e);let a=h(2);return w(a.tpm.set(i.checked))}),c(74,"Enable the Trusted Platform Module (TPM)"),l(),r(75,"mat-checkbox",62),_("change",function(i){y(e);let a=h(2);return w(a.uefi.set(i.checked))}),c(76,"Enable the UEFI boot mode"),l()(),r(77,"div",95)(78,"mat-form-field",38)(79,"mat-label"),c(80,"Max CPUs (hot-plug)"),l(),r(81,"input",96),_("input",function(i){y(e);let a=h(2);return w(a.maxcpus.set(+i.target.value))}),l()(),r(82,"mat-checkbox",62),_("change",function(i){y(e);let a=h(2);return w(a.createConfigDisk.set(i.checked))}),c(83,"Auto-create config disk"),l()()()()}if(n&2){let e=Te(14),t=Te(26),i=Te(45),a=h(2);m(12),v("value",a.initrd())("matAutocomplete",e),m(3),E(a.filteredAdvancedImages.length?15:-1),m(9),v("value",a.kernelImage())("matAutocomplete",t),m(3),E(a.filteredAdvancedImages.length?27:-1),m(4),v("value",a.kernelCommandLine()),m(12),v("value",a.biosImage())("matAutocomplete",i),m(3),E(a.filteredAdvancedImages.length?46:-1),m(4),v("checked",a.activateCpuThrottling()),m(2),E(a.activateCpuThrottling()?52:-1),m(4),v("value",a.processPriority()),m(),K(a.priorities),m(8),v("value",a.qemuPath()),m(4),v("value",a.options()),m(2),v("checked",a.linkedClone()),m(2),v("checked",a.tpm()),m(2),v("checked",a.uefi()),m(6),v("value",a.maxcpus()),m(),v("checked",a.createConfigDisk())}}function wge(n,o){if(n&1){let e=R();r(0,"div",31)(1,"mat-form-field",98)(2,"mat-label"),c(3,"Usage notes"),l(),r(4,"textarea",99),_("input",function(i){y(e);let a=h(2);return w(a.usage.set(i.target.value))}),l()()()}if(n&2){let e=h(2);m(4),v("value",e.usage())}}function Mge(n,o){if(n&1){let e=R();r(0,"app-template-metadata-section",100),rn("metadataChange",function(i){y(e);let a=h(2);return Xt(a.applianceMetadata,i)||(a.applianceMetadata=i),w(i)}),l()}if(n&2){let e=h(2);an("metadata",e.applianceMetadata)}}function Sge(n,o){if(n&1){let e=R();r(0,"main",22)(1,"nav",23)(2,"button",24),_("click",function(){y(e);let i=h();return w(i.selectSection("general"))}),c(3," General settings "),l(),r(4,"button",24),_("click",function(){y(e);let i=h();return w(i.selectSection("hdd"))}),c(5,"HDD"),l(),r(6,"button",24),_("click",function(){y(e);let i=h();return w(i.selectSection("cddvd"))}),c(7," CD/DVD "),l(),r(8,"button",24),_("click",function(){y(e);let i=h();return w(i.selectSection("network"))}),c(9," Network "),l(),r(10,"button",24),_("click",function(){y(e);let i=h();return w(i.selectSection("advanced"))}),c(11," Advanced "),l(),r(12,"button",24),_("click",function(){y(e);let i=h();return w(i.selectSection("usage"))}),c(13," Usage "),l(),r(14,"button",24),_("click",function(){y(e);let i=h();return w(i.selectSection("metadata"))}),c(15," Metadata "),l()(),r(16,"section",25)(17,"div",26),_("click",function(){y(e);let i=h();return w(i.toggleSection("general"))}),r(18,"h3",27),c(19,"General settings"),l(),r(20,"mat-icon",28),c(21),l()(),T(22,Que,88,20,"form",29),l(),r(23,"section",25)(24,"div",26),_("click",function(){y(e);let i=h();return w(i.toggleSection("hdd"))}),r(25,"h3",27),c(26,"HDD"),l(),r(27,"mat-icon",28),c(28),l()(),T(29,sge,65,16,"div",30),l(),r(30,"section",25)(31,"div",26),_("click",function(){y(e);let i=h();return w(i.toggleSection("cddvd"))}),r(32,"h3",27),c(33,"CD/DVD"),l(),r(34,"mat-icon",28),c(35),l()(),T(36,mge,3,3,"div",30),l(),r(37,"section",25)(38,"div",26),_("click",function(){y(e);let i=h();return w(i.toggleSection("network"))}),r(39,"h3",27),c(40,"Network"),l(),r(41,"mat-icon",28),c(42),l()(),T(43,uge,31,7,"form",29),l(),r(44,"section",25)(45,"div",26),_("click",function(){y(e);let i=h();return w(i.toggleSection("advanced"))}),r(46,"h3",27),c(47,"Advanced"),l(),r(48,"mat-icon",28),c(49),l()(),T(50,yge,84,20,"div",29),l(),r(51,"section",25)(52,"div",26),_("click",function(){y(e);let i=h();return w(i.toggleSection("usage"))}),r(53,"h3",27),c(54,"Usage"),l(),r(55,"mat-icon",28),c(56),l()(),T(57,wge,5,1,"div",31),l(),r(58,"section",25)(59,"div",32)(60,"h3",27),c(61,"Appliance metadata"),l()(),T(62,Mge,1,1,"app-template-metadata-section",33),l(),r(63,"div",34)(64,"button",35),_("click",function(){y(e);let i=h();return w(i.goBack())}),c(65,"Cancel"),l(),r(66,"button",36),_("click",function(){y(e);let i=h();return w(i.onSave())}),c(67,"Save"),l()()()}if(n&2){let e=h();m(2),ne("is-active",e.activeSection==="general"),m(2),ne("is-active",e.activeSection==="hdd"),m(2),ne("is-active",e.activeSection==="cddvd"),m(2),ne("is-active",e.activeSection==="network"),m(2),ne("is-active",e.activeSection==="advanced"),m(2),ne("is-active",e.activeSection==="usage"),m(2),ne("is-active",e.activeSection==="metadata"),m(7),N(e.generalSettingsExpanded?"expand_less":"expand_more"),m(),E(e.activeSection==="general"?22:-1),m(6),N(e.hddExpanded?"expand_less":"expand_more"),m(),E(e.activeSection==="hdd"?29:-1),m(6),N(e.cdDvdExpanded?"expand_less":"expand_more"),m(),E(e.activeSection==="cddvd"?36:-1),m(6),N(e.networkExpanded?"expand_less":"expand_more"),m(),E(e.activeSection==="network"?43:-1),m(6),N(e.advancedExpanded?"expand_less":"expand_more"),m(),E(e.activeSection==="advanced"?50:-1),m(6),N(e.usageExpanded?"expand_less":"expand_more"),m(),E(e.activeSection==="usage"?57:-1),m(5),E(e.activeSection==="metadata"?62:-1)}}var fy=(()=>{class n{route=f($t);controllerService=f(_t);qemuService=f(Rl);toasterService=f(re);configurationService=f(Zm);router=f(Ft);location=f(ki);cd=f(oe);dialog=f(Xe);dialogConfig=f(yo);validationService=f(kE);imageManagerService=f(Ns);controller;qemuTemplate;consoleTypes=[];auxConsoleTypes=[];diskInterfaces=[];networkTypes=[];bootPriorities=[];onCloseOptions=[];categories=[];priorities=[];displayedColumns=["adapter_number","port_name","adapter_type","mac_address","actions"];selectPlatform=[];qemuImages=[];filteredImages=[];globalImages=[];filteredGlobalImages=[];filteredAdvancedImages=[];separatorKeysCodes=[13,188];generalSettingsExpanded=!1;hddExpanded=!1;cdDvdExpanded=!1;networkExpanded=!1;advancedExpanded=!1;usageExpanded=!1;activeSection="general";templateName=$("");defaultName=$("");symbol=$("");category=$("");platform=$("");ram=$(256);cpus=$(1);bootPriority=$("");onClose=$("");consoleType=$("");auxConsoleType=$("");consoleAutoStart=$(!1);hdaDiskImage=$("");hdaDiskInterface=$("");hdbDiskImage=$("");hdbDiskInterface=$("");hdcDiskImage=$("");hdcDiskInterface=$("");hddDiskImage=$("");hddDiskInterface=$("");cdromImage=$("");cdrom2Image=$("");cdromInterfaces=[z("ide"),z("ide")];adapters=$(0);firstPortName=$("");portNameFormat=$("");portSegmentSize=$(0);macAddress=$("");networkType=$("");replicateNetworkConnectionState=$(!1);initrd=$("");kernelImage=$("");kernelCommandLine=$("");biosImage=$("");activateCpuThrottling=$(!1);cpuThrottling=$(0);maxcpus=$(1);createConfigDisk=$(!1);processPriority=$("");qemuPath=$("");options=$("");linkedClone=$(!1);tpm=$(!1);uefi=$(!1);usage=$("");netmikoDeviceType=$("");applianceMetadata=z(null);defaultUsername=Ne(()=>rs(this.applianceMetadata(),"default_username"));defaultPassword=Ne(()=>rs(this.applianceMetadata(),"default_password"));tags=$([]);ngOnInit(){let e=this.route.snapshot.paramMap.get("controller_id"),t=this.route.snapshot.paramMap.get("template_id");this.controllerService.get(parseInt(e,10)).then(i=>{this.controller=i,this.cd.markForCheck(),this.getConfiguration(),this.qemuService.getImages(this.controller).subscribe({next:a=>{let s=a.filter((d,p,u)=>u.findIndex(g=>g.filename===d.filename)===p);this.qemuImages=s,this.filteredImages=s,this.filteredAdvancedImages=s,this.cd.markForCheck()},error:a=>{this.toasterService.error(a.error?.message||a.message||"Failed to load images")}}),this.refreshGlobalImages(),this.qemuService.getTemplate(this.controller,t).subscribe({next:a=>{this.qemuTemplate=a,this.qemuTemplate.tags||(this.qemuTemplate.tags=[]),this.initFormFromTemplate(),this.cd.markForCheck()},error:a=>{let s=a.error?.message||a.message||"Failed to load QEMU template";this.toasterService.error(s),this.cd.markForCheck()}})},i=>{let a=i.error?.message||i.message||"Failed to load controller";this.toasterService.error(a),this.cd.markForCheck()}),this.selectPlatform=this.configurationService.getPlatform()}initFormFromTemplate(){this.templateName.set(this.qemuTemplate.name||""),this.defaultName.set(this.qemuTemplate.default_name_format||""),this.symbol.set(this.qemuTemplate.symbol||""),this.category.set(this.qemuTemplate.category||""),this.platform.set(this.qemuTemplate.platform||""),this.ram.set(this.qemuTemplate.ram||256),this.cpus.set(this.qemuTemplate.cpus||1),this.bootPriority.set(this.qemuTemplate.boot_priority||""),this.onClose.set(this.qemuTemplate.on_close||""),this.consoleType.set(this.qemuTemplate.console_type||""),this.auxConsoleType.set(this.qemuTemplate.aux_type||""),this.consoleAutoStart.set(this.qemuTemplate.console_auto_start||!1),this.hdaDiskImage.set(this.qemuTemplate.hda_disk_image||""),this.hdaDiskInterface.set(this.qemuTemplate.hda_disk_interface||""),this.hdbDiskImage.set(this.qemuTemplate.hdb_disk_image||""),this.hdbDiskInterface.set(this.qemuTemplate.hdb_disk_interface||""),this.hdcDiskImage.set(this.qemuTemplate.hdc_disk_image||""),this.hdcDiskInterface.set(this.qemuTemplate.hdc_disk_interface||""),this.hddDiskImage.set(this.qemuTemplate.hdd_disk_image||""),this.hddDiskInterface.set(this.qemuTemplate.hdd_disk_interface||""),this.cdromImage.set(this.qemuTemplate.cdrom_image||""),this.cdrom2Image.set(this.qemuTemplate.cdrom2_image||""),this.cdromInterfaces[0].set(this.qemuTemplate.cdrom_interface||"ide"),this.cdromInterfaces[1].set(this.qemuTemplate.cdrom2_interface||"ide"),this.adapters.set(this.qemuTemplate.adapters||0),this.firstPortName.set(this.qemuTemplate.first_port_name||""),this.portNameFormat.set(this.qemuTemplate.port_name_format||""),this.portSegmentSize.set(this.qemuTemplate.port_segment_size||0),this.macAddress.set(this.qemuTemplate.mac_address||""),this.networkType.set(this.qemuTemplate.adapter_type||""),this.replicateNetworkConnectionState.set(this.qemuTemplate.replicate_network_connection_state||!1),this.initrd.set(this.qemuTemplate.initrd||""),this.kernelImage.set(this.qemuTemplate.kernel_image||""),this.kernelCommandLine.set(this.qemuTemplate.kernel_command_line||""),this.biosImage.set(this.qemuTemplate.bios_image||""),this.activateCpuThrottling.set(this.qemuTemplate.cpu_throttling!==void 0&&this.qemuTemplate.cpu_throttling>0),this.cpuThrottling.set(this.qemuTemplate.cpu_throttling||0),this.maxcpus.set(this.qemuTemplate.maxcpus||1),this.createConfigDisk.set(this.qemuTemplate.create_config_disk??!1),this.processPriority.set(this.qemuTemplate.process_priority||""),this.qemuPath.set(this.qemuTemplate.qemu_path||""),this.options.set(this.qemuTemplate.options||""),this.linkedClone.set(this.qemuTemplate.linked_clone||!1),this.tpm.set(this.qemuTemplate.tpm||!1),this.uefi.set(this.qemuTemplate.uefi||!1),this.usage.set(this.qemuTemplate.usage||""),this.netmikoDeviceType.set(this.qemuTemplate.netmiko_device_type||""),this.applianceMetadata.set(this.qemuTemplate.appliance_metadata??null),this.tags.set(this.qemuTemplate.tags||[])}getConfiguration(){this.consoleTypes=this.configurationService.getConsoleTypes(),this.auxConsoleTypes=this.configurationService.getAuxConsoleTypes(),this.diskInterfaces=this.configurationService.getDiskInterfaces(),this.networkTypes=this.configurationService.getNetworkTypes(),this.bootPriorities=this.configurationService.getBootPriorities(),this.onCloseOptions=this.configurationService.getOnCloseOptions(),this.categories=this.configurationService.getCategories(),this.priorities=this.configurationService.getPriorities()}uploadFile(e,t){let i=e.name;this.imageManagerService.uploadedImage(this.controller,!1,i,e).subscribe({next:()=>{t.set(i),this.refreshGlobalImages(),this.toasterService.success(`Uploaded ${i}`),this.cd.markForCheck()},error:a=>{this.toasterService.error(a.error?.message||a.message||"Failed to upload")}})}refreshGlobalImages(){this.imageManagerService.getImages(this.controller).subscribe({next:e=>{this.globalImages=e.filter(my).map(t=>ze(q({},t),{path:xh(t)})),this.filteredGlobalImages=this.globalImages,this.cd.markForCheck()},error:e=>{this.toasterService.error(e.error?.message||e.message||"Failed to load global images")}})}refreshQemuImages(){this.qemuService.getImages(this.controller).subscribe({next:e=>{let t=e.filter((i,a,s)=>s.findIndex(d=>d.filename===i.filename)===a);this.qemuImages=t,this.filteredImages=t,this.filteredAdvancedImages=t,this.cd.markForCheck()}})}uploadCdromImageFile(e,t=1){let i=e.target;i.files&&i.files.length>0&&this.uploadFile(i.files[0],t===1?this.cdromImage:this.cdrom2Image)}uploadInitrdFile(e){let t=e.target;t.files&&t.files.length>0&&this.uploadFile(t.files[0],this.initrd)}uploadKernelImageFile(e){let t=e.target;t.files&&t.files.length>0&&this.uploadFile(t.files[0],this.kernelImage)}uploadBiosFile(e){let t=e.target;t.files&&t.files.length>0&&this.uploadFile(t.files[0],this.biosImage)}openCustomAdaptersDialog(){let e=this.portNameFormat()||"Ethernet{0}",t=this.portSegmentSize()||0,i=this.firstPortName(),a=this.networkType()||"e1000",s=this.adapters(),d=this.qemuTemplate.custom_adapters||[],p=[];for(let g=0;g<s;g++){let C=d.find(M=>M.adapter_number===g);if(C)p.push({adapter_number:C.adapter_number,adapter_type:C.adapter_type,port_name:C.port_name,mac_address:C.mac_address||""});else{let M=Ou(g,{portNameFormat:e,portSegmentSize:t,firstPortName:i});p.push({adapter_number:g,adapter_type:a,port_name:M,mac_address:""})}}this.dialog.open(sd,{panelClass:["custom-adapters-dialog-panel","dialog-extra-large-panel"],data:{adapters:p,networkTypes:this.networkTypes,portNameFormat:e,portSegmentSize:t,firstPortName:i,defaultAdapterType:a,currentAdapters:s}}).afterClosed().subscribe(g=>{g&&(this.qemuTemplate.custom_adapters=g.adapters,g.requiredAdapters!==void 0&&this.adapters.set(g.requiredAdapters),this.cd.markForCheck())})}onCdromInput(e){let t=e.target.value.toLowerCase();this.filteredGlobalImages=this.globalImages.filter(i=>(i.path||i.filename).toLowerCase().includes(t))}onAdvancedInput(e){let t=e.target.value.toLowerCase();this.filteredAdvancedImages=this.qemuImages.filter(i=>i.filename.toLowerCase().includes(t))}filterImages(e){let t=e.target.value.toLowerCase();return this.qemuImages.filter(i=>i.filename.toLowerCase().includes(t))}onHdaImageInput(e){this.filteredImages=this.filterImages(e)}onHdbImageInput(e){this.filteredImages=this.filterImages(e)}onHdcImageInput(e){this.filteredImages=this.filterImages(e)}onHddImageInput(e){this.filteredImages=this.filterImages(e)}goBack(){ji(this.location,this.router,["/controller",this.controller.id,"preferences"])}onCredentialInput(e,t){let i=t.target.value;this.applianceMetadata.set(nd(this.applianceMetadata(),e,i))}onSave(){let e=this.validationService.validateName(this.templateName());if(!e.isValid){this.toasterService.error(e.errorMessage);return}let t=this.validationService.validatePortNameFormat(this.portNameFormat());if(!t.isValid){this.toasterService.error(t.errorMessage);return}let i=this.validationService.validateFirstPortName(this.firstPortName());if(!i.isValid){this.toasterService.error(i.errorMessage);return}let a=this.validationService.validatePortSegmentSize(this.portSegmentSize().toString());if(!a.isValid){this.toasterService.error(a.errorMessage);return}let s=this.validationService.validateMacAddress(this.macAddress());if(!s.isValid){this.toasterService.error(s.errorMessage);return}let d=this.validationService.validateNetmikoDeviceType(this.netmikoDeviceType());if(!d.isValid){this.toasterService.error(d.errorMessage);return}this.qemuTemplate.name=this.templateName(),this.qemuTemplate.default_name_format=this.defaultName(),this.qemuTemplate.symbol=this.symbol(),this.qemuTemplate.category=this.category(),this.qemuTemplate.platform=this.platform(),this.qemuTemplate.ram=this.ram(),this.qemuTemplate.cpus=this.cpus(),this.qemuTemplate.boot_priority=this.bootPriority(),this.qemuTemplate.on_close=this.onClose(),this.qemuTemplate.console_type=this.consoleType(),this.qemuTemplate.aux_type=this.auxConsoleType(),this.qemuTemplate.console_auto_start=this.consoleAutoStart(),this.qemuTemplate.hda_disk_image=this.hdaDiskImage(),this.qemuTemplate.hda_disk_interface=this.hdaDiskInterface(),this.qemuTemplate.hdb_disk_image=this.hdbDiskImage(),this.qemuTemplate.hdb_disk_interface=this.hdbDiskInterface(),this.qemuTemplate.hdc_disk_image=this.hdcDiskImage(),this.qemuTemplate.hdc_disk_interface=this.hdcDiskInterface(),this.qemuTemplate.hdd_disk_image=this.hddDiskImage(),this.qemuTemplate.hdd_disk_interface=this.hddDiskInterface(),this.qemuTemplate.cdrom_image=this.cdromImage(),this.qemuTemplate.cdrom2_image=this.cdrom2Image(),this.qemuTemplate.cdrom_interface=this.cdromInterfaces[0](),this.qemuTemplate.cdrom2_interface=this.cdromInterfaces[1](),this.qemuTemplate.adapters=this.adapters(),this.qemuTemplate.first_port_name=this.firstPortName(),this.qemuTemplate.port_name_format=this.portNameFormat(),this.qemuTemplate.port_segment_size=this.portSegmentSize(),this.qemuTemplate.mac_address=this.macAddress(),this.qemuTemplate.adapter_type=this.networkType(),this.qemuTemplate.replicate_network_connection_state=this.replicateNetworkConnectionState(),this.qemuTemplate.initrd=this.initrd(),this.qemuTemplate.kernel_image=this.kernelImage(),this.qemuTemplate.kernel_command_line=this.kernelCommandLine(),this.qemuTemplate.bios_image=this.biosImage(),this.qemuTemplate.cpu_throttling=this.activateCpuThrottling()?this.cpuThrottling():0,this.qemuTemplate.maxcpus=this.maxcpus(),this.qemuTemplate.create_config_disk=this.createConfigDisk(),this.qemuTemplate.process_priority=this.processPriority(),this.qemuTemplate.qemu_path=this.qemuPath(),this.qemuTemplate.options=this.options(),this.qemuTemplate.linked_clone=this.linkedClone(),this.qemuTemplate.tpm=this.tpm(),this.qemuTemplate.uefi=this.uefi(),this.qemuTemplate.usage=this.usage(),this.qemuTemplate.netmiko_device_type=this.netmikoDeviceType().trim()||null,this.qemuTemplate.appliance_metadata=this.applianceMetadata(),this.qemuTemplate.tags=this.tags(),this.qemuService.saveTemplate(this.controller,this.qemuTemplate).subscribe({next:p=>{this.toasterService.success("Changes saved"),this.qemuTemplate=p,this.goBack()},error:p=>{let u=p.error?.message||p.message||"Failed to save QEMU template";this.toasterService.error(u),this.cd.markForCheck()}})}chooseSymbol(){let e=this.dialogConfig.openConfig("templateSymbol",{autoFocus:!1,disableClose:!1,data:{controller:this.controller,symbol:this.symbol()}});this.dialog.open(rr,e).afterClosed().subscribe(i=>{i&&this.symbol.set(i)})}addTag(e){let t=(e.value||"").trim(),i=this.tags();t&&this.tags.set([...i,t]),e.chipInput&&e.chipInput.clear()}removeTag(e){let t=this.tags(),i=t.indexOf(e);if(i>=0){let a=[...t];a.splice(i,1),this.tags.set(a)}}toggleSection(e){switch(e){case"general":this.generalSettingsExpanded=!this.generalSettingsExpanded;break;case"hdd":this.hddExpanded=!this.hddExpanded;break;case"cddvd":this.cdDvdExpanded=!this.cdDvdExpanded;break;case"network":this.networkExpanded=!this.networkExpanded;break;case"advanced":this.advancedExpanded=!this.advancedExpanded;break;case"usage":this.usageExpanded=!this.usageExpanded;break}}selectSection(e){this.activeSection=e}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-qemu-virtual-machine-template-details"]],inputs:{templateName:[1,"templateName"],defaultName:[1,"defaultName"],symbol:[1,"symbol"],category:[1,"category"],platform:[1,"platform"],ram:[1,"ram"],cpus:[1,"cpus"],bootPriority:[1,"bootPriority"],onClose:[1,"onClose"],consoleType:[1,"consoleType"],auxConsoleType:[1,"auxConsoleType"],consoleAutoStart:[1,"consoleAutoStart"],hdaDiskImage:[1,"hdaDiskImage"],hdaDiskInterface:[1,"hdaDiskInterface"],hdbDiskImage:[1,"hdbDiskImage"],hdbDiskInterface:[1,"hdbDiskInterface"],hdcDiskImage:[1,"hdcDiskImage"],hdcDiskInterface:[1,"hdcDiskInterface"],hddDiskImage:[1,"hddDiskImage"],hddDiskInterface:[1,"hddDiskInterface"],cdromImage:[1,"cdromImage"],cdrom2Image:[1,"cdrom2Image"],adapters:[1,"adapters"],firstPortName:[1,"firstPortName"],portNameFormat:[1,"portNameFormat"],portSegmentSize:[1,"portSegmentSize"],macAddress:[1,"macAddress"],networkType:[1,"networkType"],replicateNetworkConnectionState:[1,"replicateNetworkConnectionState"],initrd:[1,"initrd"],kernelImage:[1,"kernelImage"],kernelCommandLine:[1,"kernelCommandLine"],biosImage:[1,"biosImage"],activateCpuThrottling:[1,"activateCpuThrottling"],cpuThrottling:[1,"cpuThrottling"],maxcpus:[1,"maxcpus"],createConfigDisk:[1,"createConfigDisk"],processPriority:[1,"processPriority"],qemuPath:[1,"qemuPath"],options:[1,"options"],linkedClone:[1,"linkedClone"],tpm:[1,"tpm"],uefi:[1,"uefi"],usage:[1,"usage"],netmikoDeviceType:[1,"netmikoDeviceType"],tags:[1,"tags"]},outputs:{templateName:"templateNameChange",defaultName:"defaultNameChange",symbol:"symbolChange",category:"categoryChange",platform:"platformChange",ram:"ramChange",cpus:"cpusChange",bootPriority:"bootPriorityChange",onClose:"onCloseChange",consoleType:"consoleTypeChange",auxConsoleType:"auxConsoleTypeChange",consoleAutoStart:"consoleAutoStartChange",hdaDiskImage:"hdaDiskImageChange",hdaDiskInterface:"hdaDiskInterfaceChange",hdbDiskImage:"hdbDiskImageChange",hdbDiskInterface:"hdbDiskInterfaceChange",hdcDiskImage:"hdcDiskImageChange",hdcDiskInterface:"hdcDiskInterfaceChange",hddDiskImage:"hddDiskImageChange",hddDiskInterface:"hddDiskInterfaceChange",cdromImage:"cdromImageChange",cdrom2Image:"cdrom2ImageChange",adapters:"adaptersChange",firstPortName:"firstPortNameChange",portNameFormat:"portNameFormatChange",portSegmentSize:"portSegmentSizeChange",macAddress:"macAddressChange",networkType:"networkTypeChange",replicateNetworkConnectionState:"replicateNetworkConnectionStateChange",initrd:"initrdChange",kernelImage:"kernelImageChange",kernelCommandLine:"kernelCommandLineChange",biosImage:"biosImageChange",activateCpuThrottling:"activateCpuThrottlingChange",cpuThrottling:"cpuThrottlingChange",maxcpus:"maxcpusChange",createConfigDisk:"createConfigDiskChange",processPriority:"processPriorityChange",qemuPath:"qemuPathChange",options:"optionsChange",linkedClone:"linkedCloneChange",tpm:"tpmChange",uefi:"uefiChange",usage:"usageChange",netmikoDeviceType:"netmikoDeviceTypeChange",tags:"tagsChange"},decls:19,vars:1,consts:[["chipList",""],["hdaAuto","matAutocomplete"],["hdbAuto","matAutocomplete"],["hdcAuto","matAutocomplete"],["hddAuto","matAutocomplete"],["filecdrom",""],["cdromAuto","matAutocomplete"],["fileinitrd",""],["initrdAuto","matAutocomplete"],["filekernelimage",""],["kernelAuto","matAutocomplete"],["filebios",""],["biosAuto","matAutocomplete"],[1,"qemu-template-details"],[1,"qemu-template-details__header"],[1,"qemu-template-details__heading-row"],[1,"qemu-template-details__breadcrumb"],["type","button","mat-button","",3,"click"],[1,"qemu-template-details__title"],[1,"template-edit-legacy-label"],[1,"qemu-template-details__header-actions"],["type","button","mat-raised-button","","color","primary",3,"click"],[1,"qemu-template-details__content"],["aria-label","Template settings",1,"template-edit-tabs"],["type","button",3,"click"],[1,"qemu-template-details__form-card"],[1,"qemu-template-details__section-header",3,"click"],[1,"qemu-template-details__section-title"],[1,"qemu-template-details__expand-icon"],[1,"qemu-template-details__form"],[1,"qemu-template-details__disk-grid"],[1,"preferences__usage-form"],[1,"qemu-template-details__section-header"],[3,"metadata"],[1,"qemu-template-details__actions"],["mat-button","",1,"qemu-template-details__cancel-btn",3,"click"],["mat-raised-button","","color","primary",1,"qemu-template-details__save-btn",3,"click"],[1,"two-column-grid","gns3-form-layout-fixed"],["appearance","outline","subscriptSizing","fixed",1,"qemu-template-details__field"],["matInput","","type","text","placeholder","Template name",3,"input","value"],["matInput","","type","text","placeholder","Default name format",3,"input","value"],[1,"qemu-template-details__symbol-row"],["appearance","outline","subscriptSizing","dynamic",1,"qemu-template-details__field","qemu-template-details__field--category"],[3,"selectionChange","value"],[3,"value"],["appearance","outline","subscriptSizing","dynamic",1,"qemu-template-details__field","qemu-template-details__field--flex"],["matInput","","type","text","placeholder","Symbol",3,"input","value"],["mat-raised-button","","color","primary",1,"qemu-template-details__symbol-btn",3,"click"],[1,"gns3-chip-field"],["floatLabel","always","appearance","outline","subscriptSizing","dynamic",1,"qemu-template-details__field"],["matInput","","placeholder","Add tags",3,"matChipInputTokenEnd","matChipInputFor","matChipInputSeparatorKeyCodes"],["aria-label","Tags",1,"gns3-chip-field__values"],[3,"editable"],[1,"four-column-grid","gns3-form-layout-fixed"],["matInput","","type","text","placeholder","RAM",3,"input","value"],["matSuffix",""],["matInput","","type","text","placeholder","vCPUs",3,"input","value"],["appearance","outline","subscriptSizing","dynamic",1,"qemu-template-details__field"],[1,"three-column-grid"],["subscriptSizing","fixed","appearance","outline",1,"qemu-template-details__field",3,"valueChange","value","controller"],["matInput","","type","text","placeholder","Username to log into this node",3,"input","value"],["matInput","","type","text","placeholder","Password to log into this node",3,"input","value"],[3,"change","checked"],[3,"removed","editable"],["matChipRemove","","type","button"],[1,"qemu-template-details__disk-item"],[1,"qemu-template-details__disk-title"],["matInput","","placeholder","Disk image",3,"input","focus","value","matAutocomplete"],[3,"optionSelected"],["label","Global images"],[1,"qemu-template-details__disk-item","qemu-template-details__cdrom-card"],[1,"qemu-template-details__file-row"],["type","file","accept",".iso",1,"qemu-template-details__file-input",3,"change"],["mat-raised-button","","color","primary",1,"qemu-template-details__browse-btn",3,"click"],["matInput","","type","text","placeholder","Image",3,"input","focus","value","matAutocomplete"],["appearance","outline","subscriptSizing","dynamic"],[3,"valueChange","value"],["value","ide"],["value","sata"],["matInput","","type","number","min","0","placeholder","Adapters",3,"input","value"],["matInput","","type","text","placeholder","First port name",3,"input","value"],["matInput","","type","text","placeholder","Ethernet{0}",3,"input","value"],["matInput","","type","number","min","0","placeholder","Segment size",3,"input","value"],["matInput","","type","text","placeholder","Base MAC",3,"input","value"],["mat-raised-button","","color","primary","type","button",1,"qemu-template-details__config-btn",3,"click"],[1,"qemu-template-details__subsection"],[1,"qemu-template-details__subsection-title"],["type","file",1,"qemu-template-details__file-input",3,"change"],["matInput","","type","text","placeholder","Initial RAM disk (initrd)",3,"input","focus","value","matAutocomplete"],["matInput","","type","text","placeholder","Kernel image",3,"input","focus","value","matAutocomplete"],["matInput","","type","text","placeholder","Kernel command line",3,"input","value"],["matInput","","type","text","placeholder","Bios image",3,"input","focus","value","matAutocomplete"],["matInput","","type","text","placeholder","Custom Qemu binary path",3,"input","value"],["matInput","","type","text","placeholder","Options",3,"input","value"],[1,"qemu-template-details__checkbox-list"],[1,"two-column-grid"],["matInput","","type","text","placeholder","Max CPUs",3,"input","value"],["matInput","","type","number","placeholder","Perecentage of CPU allowed",3,"input","value"],["appearance","outline","subscriptSizing","dynamic",1,"preferences__usage-field--full"],["matInput","","type","text",3,"input","value"],[3,"metadataChange","metadata"]],template:function(t,i){t&1&&(r(0,"div",13)(1,"header",14)(2,"div",15)(3,"div")(4,"div",16)(5,"button",17),_("click",function(){return i.goBack()}),c(6,"Templates"),l(),r(7,"mat-icon"),c(8,"chevron_right"),l(),r(9,"span"),c(10,"Edit"),l()(),r(11,"h1",18),c(12," Edit template "),r(13,"span",19),c(14,"QEMU VM template configuration"),l()()(),r(15,"div",20)(16,"button",21),_("click",function(){return i.goBack()}),c(17,"Back to templates"),l()()()(),T(18,Sge,68,27,"main",22),l()),t&2&&(m(18),E(i.qemuTemplate?18:-1))},dependencies:[fe,St,Ct,vt,Ji,vn,ie,ce,Y,he,we,Pe,Ve,oi,ye,Ee,ot,ct,nt,gm,ri,bi,xi,hi,fi,Rt,Gt,po,Jo,ha,ho,id],styles:["[_nghost-%COMP%]{display:block;width:100%;background:transparent}.qemu-template-details__header[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:32px 20px 16px;display:flex;align-items:center;gap:var(--gns3-density-card-gap);animation:none}.qemu-template-details__back-btn[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:12px;color:var(--mat-sys-on-surface);transition:all var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1)}.qemu-template-details__back-btn[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 8%,transparent)}.qemu-template-details__title[_ngcontent-%COMP%]{flex:1;font-size:28px;font-weight:500;color:var(--mat-sys-on-surface);margin:0}.qemu-template-details__content[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:0 20px 20px;animation:none}.qemu-template-details--hidden[_ngcontent-%COMP%]{opacity:.5;pointer-events:none}.qemu-template-details__form-card[_ngcontent-%COMP%]{background:var(--mat-sys-surface);border-radius:16px;overflow:hidden;box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 20%,transparent),0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent);margin-bottom:var(--gns3-density-card-gap)}.qemu-template-details__form[_ngcontent-%COMP%]{padding:var(--gns3-density-card-padding) var(--gns3-density-card-padding) 24px;display:flex;flex-direction:column;gap:var(--gns3-density-card-gap)}.qemu-template-details__form[_ngcontent-%COMP%] .two-column-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:var(--gns3-density-card-gap)}.qemu-template-details__form[_ngcontent-%COMP%] .three-column-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;align-items:start}.qemu-template-details__field[_ngcontent-%COMP%]{width:100%}.qemu-template-details__field--flex[_ngcontent-%COMP%]{flex:1;min-width:0}.qemu-template-details__field--category[_ngcontent-%COMP%]{flex:0 0 150px}.four-column-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr 1fr 1fr;gap:var(--gns3-density-card-gap)}.qemu-template-details__field--full[_ngcontent-%COMP%]{width:100%}.qemu-template-details__section-title[_ngcontent-%COMP%]{margin:0;font-size:16px;font-weight:500;color:var(--mat-sys-on-surface-variant)}.qemu-template-details__section-header[_ngcontent-%COMP%]{padding:var(--gns3-density-section-header-padding);display:flex;align-items:center;justify-content:space-between;cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline) 30%,transparent)}.qemu-template-details__section-header[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 5%,transparent)}.qemu-template-details__expand-icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);transition:transform var(--gns3-motion-duration-standard) ease}.qemu-template-details__symbol-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap)}.qemu-template-details__symbol-btn[_ngcontent-%COMP%]{align-self:stretch}.qemu-template-details__file-row[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:var(--gns3-density-card-gap)}.qemu-template-details__file-input[_ngcontent-%COMP%]{display:none}.qemu-template-details__browse-btn[_ngcontent-%COMP%]{align-self:stretch;white-space:nowrap}.qemu-template-details__config-btn[_ngcontent-%COMP%]{margin-top:8px}.qemu-template-details__disk-grid[_ngcontent-%COMP%]{padding:var(--gns3-density-card-padding) var(--gns3-density-card-padding) 24px;display:grid;grid-template-columns:repeat(2,1fr);gap:var(--gns3-density-card-gap)}.qemu-template-details__disk-item[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--mat-sys-surface-variant) 50%,transparent);border-radius:12px;padding:16px}.qemu-template-details__disk-item[_ngcontent-%COMP%] > mat-form-field[_ngcontent-%COMP%] + mat-form-field[_ngcontent-%COMP%]{margin-top:var(--gns3-density-space-4)}.qemu-template-details__disk-title[_ngcontent-%COMP%]{margin:0 0 12px;font-size:14px;font-weight:500;color:var(--mat-sys-on-surface-variant)}.qemu-template-details__subsection[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-space-4);padding-top:var(--gns3-density-card-gap);border-top:1px solid color-mix(in srgb,var(--mat-sys-outline) 20%,transparent)}.qemu-template-details__subsection[_ngcontent-%COMP%]:first-child{padding-top:0;border-top:none}.qemu-template-details__subsection-title[_ngcontent-%COMP%]{margin:var(--gns3-density-space-2) 0;text-transform:uppercase;font-size:12px;font-weight:600;letter-spacing:.5px;color:var(--mat-sys-on-surface-variant)}.qemu-template-details__checkbox-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:flex-start;gap:4px}.qemu-template-details__actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:var(--gns3-density-space-3);margin-top:24px}.qemu-template-details__cancel-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none}.qemu-template-details__save-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none;letter-spacing:.5px}@media(max-width:768px){.qemu-template-details__header[_ngcontent-%COMP%]{padding:24px 16px 12px;gap:12px}.qemu-template-details__section-header[_ngcontent-%COMP%]{padding:12px 16px}.qemu-template-details__back-btn[_ngcontent-%COMP%]{width:44px;height:44px}.qemu-template-details__title[_ngcontent-%COMP%]{font-size:22px}.qemu-template-details__content[_ngcontent-%COMP%]{padding:0 16px 16px}.qemu-template-details__form[_ngcontent-%COMP%]{padding:16px}.qemu-template-details__symbol-row[_ngcontent-%COMP%]{flex-direction:column}.qemu-template-details__file-row[_ngcontent-%COMP%]{flex-direction:column;padding:16px}.qemu-template-details__disk-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.qemu-template-details__actions[_ngcontent-%COMP%]{flex-direction:column}.qemu-template-details__cancel-btn[_ngcontent-%COMP%], .qemu-template-details__save-btn[_ngcontent-%COMP%]{width:100%;height:44px}}.qemu-template-details__cdrom-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px;min-width:0}.qemu-template-details__cdrom-card[_ngcontent-%COMP%] .qemu-template-details__disk-title[_ngcontent-%COMP%]{margin-bottom:0}.qemu-template-details__cdrom-card[_ngcontent-%COMP%] > mat-form-field[_ngcontent-%COMP%]{width:100%}",'[_nghost-%COMP%]{display:block;width:100%;background:transparent}.templates-page__content[_ngcontent-%COMP%]{animation:none}.templates-page__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:20px;max-width:1600px;margin:0 auto;padding:24px 20px 16px}.templates-page__heading[_ngcontent-%COMP%], .templates-page__header-actions[_ngcontent-%COMP%]{display:flex;align-items:center}.templates-page__heading[_ngcontent-%COMP%]{min-width:0;gap:var(--gns3-density-space-3)}.templates-page__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.templates-page__header-actions[_ngcontent-%COMP%]{gap:var(--gns3-density-space-3)}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);border-radius:12px;padding-inline:18px;font-size:15px;font-weight:500;letter-spacing:.3px;text-transform:none}[class*=-templates__header][_ngcontent-%COMP%]{box-sizing:border-box;width:100%;height:calc(var(--gns3-density-space-4) * 2 + (var(--gns3-density-section-title-size) + 2px) * 1.2 + 1px);max-width:none;margin:0;padding:0 var(--gns3-density-page-padding);gap:var(--gns3-density-space-3);color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container);border-bottom:1px solid var(--mat-sys-outline-variant)}[class*=-templates__back-btn][_ngcontent-%COMP%], [class*=-templates__add-btn][_ngcontent-%COMP%]{flex:0 0 auto;width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:12px}[class*=-templates__back-btn][_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container)}[class*=-templates__add-btn][_ngcontent-%COMP%]{color:var(--mat-sys-primary)}[class*=-templates__title][_ngcontent-%COMP%]{flex:1;min-width:0;margin:0;padding-bottom:0;color:var(--mat-sys-on-primary-container);font-size:calc(var(--gns3-density-section-title-size) + 2px);font-weight:650;line-height:1.2;letter-spacing:-.01em}.templates-page__scopes[_ngcontent-%COMP%]{display:flex;gap:4px;max-width:1560px;margin:0 auto 16px;padding:0 20px;border-bottom:1px solid var(--mat-sys-outline-variant)}.templates-page__scope[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center;gap:8px;min-height:48px;padding:0 16px;border:0;color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;font-size:14px;font-weight:550;cursor:pointer}.templates-page__scope[_ngcontent-%COMP%]:after{position:absolute;right:8px;bottom:-1px;left:8px;height:2px;border-radius:2px 2px 0 0;background:transparent;content:""}.templates-page__scope[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}.templates-page__scope[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{min-width:22px;padding:2px 6px;border-radius:12px;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-high);font-size:11px;text-align:center}.templates-page__scope--active[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%]:after{background:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap);max-width:1600px;margin:0 auto;padding:0 20px 8px}.templates-page__search[_ngcontent-%COMP%]{flex:1;min-width:240px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:flex;align-items:center;flex:0 0 auto;gap:var(--gns3-density-space-3)}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{width:155px}.templates-page__view-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px;padding:4px 2px;border-radius:8px;background:var(--mat-sys-surface-container-high)}button.templates-page__view-button[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:8px;color:var(--mat-sys-on-surface-variant);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);--mat-icon-button-icon-size: 22px}button.templates-page__view-button--active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__main[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:20px;max-width:1600px;margin:0 auto;padding:0 20px 20px}.templates-page__loading[_ngcontent-%COMP%]{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;min-height:320px;gap:var(--gns3-density-card-gap);color:var(--mat-sys-on-surface-variant)}.templates-page__table-container[_ngcontent-%COMP%]{flex:1;min-width:0;border-radius:16px;background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;overflow-x:auto}mat-table[_ngcontent-%COMP%]{width:100%;min-width:850px}.mat-mdc-row[_ngcontent-%COMP%], .mat-row[_ngcontent-%COMP%]{height:var(--mat-table-row-item-container-height);min-height:var(--mat-table-row-item-container-height)}.mat-header-row[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%]{position:sticky;top:0;z-index:10;background:var(--mat-sys-surface-container-highest);box-shadow:inset 0 -2px var(--mat-sys-primary);--mat-sort-arrow-color: var(--mat-sys-primary)}.mat-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:13px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}mat-row[_ngcontent-%COMP%]{cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease}mat-row[_ngcontent-%COMP%]:nth-child(2n){background:color-mix(in srgb,var(--mat-sys-on-surface) 1%,transparent)}mat-row[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}mat-row.templates-page__row--selected[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}mat-cell[_ngcontent-%COMP%], mat-header-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:inherit;color:var(--mat-sys-on-surface)}.mat-column-name[_ngcontent-%COMP%]{flex:2.4;min-width:240px;justify-content:flex-start}.mat-column-template_type[_ngcontent-%COMP%]{flex:1.1;min-width:130px}.mat-column-category[_ngcontent-%COMP%]{flex:1;min-width:110px}.mat-column-compute_id[_ngcontent-%COMP%]{flex:1;min-width:105px}.mat-column-builtin[_ngcontent-%COMP%]{flex:0 0 90px;min-width:90px;justify-content:center}.mat-column-actions[_ngcontent-%COMP%]{flex:0 0 180px;min-width:180px;box-sizing:border-box;justify-content:flex-start;padding-right:24px}.templates-page__name-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-width:0;gap:var(--gns3-density-space-3)}.templates-page__name-copy[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:14px;font-weight:600}.templates-page__symbol[_ngcontent-%COMP%]{display:grid;flex:0 0 52px;width:52px;height:52px;overflow:hidden;place-items:center;border-radius:14px;color:var(--mat-sys-on-primary-container);background:color-mix(in srgb,var(--mat-sys-primary-container) 82%,var(--mat-sys-surface))}.templates-page__symbol[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:78%;height:78%;object-fit:contain;filter:drop-shadow(0 2px 4px color-mix(in srgb,var(--mat-sys-shadow) 25%,transparent))}.templates-page__symbol[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:27px;height:27px;font-size:27px}.templates-page__symbol--small[_ngcontent-%COMP%]{flex-basis:38px;width:38px;height:38px;border-radius:10px}.templates-page__symbol--small[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:21px;height:21px;font-size:21px}.templates-page__type-badge[_ngcontent-%COMP%], .templates-page__source-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;width:fit-content;padding:4px 9px;border-radius:16px;font-size:12px;font-weight:600;white-space:nowrap}.templates-page__type-badge[_ngcontent-%COMP%]{color:var(--mat-sys-secondary);background:color-mix(in srgb,var(--mat-sys-secondary) 11%,transparent)}.templates-page__type-badge--qemu[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__type-badge--docker[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container)}.templates-page__type-badge--dynamips[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary-container);background:var(--mat-sys-tertiary-container)}.templates-page__type-badge--cloud[_ngcontent-%COMP%]{color:var(--mat-sys-on-error-container);background:var(--mat-sys-error-container)}.templates-page__type-badge--vpcs[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary);background:var(--mat-sys-primary)}.templates-page__type-badge--ethernet-hub[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary);background:var(--mat-sys-secondary)}.templates-page__type-badge--ethernet-switch[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary);background:var(--mat-sys-tertiary)}.templates-page__type-badge--iou[_ngcontent-%COMP%]{color:var(--mat-sys-on-error);background:var(--mat-sys-error)}.templates-page__type-badge--nat[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-highest)}.templates-page__source-badge[_ngcontent-%COMP%]{color:var(--mat-sys-primary);background:color-mix(in srgb,var(--mat-sys-primary) 11%,transparent)}.templates-page__source-badge--builtin[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary);background:color-mix(in srgb,var(--mat-sys-tertiary) 11%,transparent)}.templates-page__table-footer[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:var(--mat-table-footer-container-height);padding:0 12px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container))}.templates-page__table-footer[_ngcontent-%COMP%] mat-paginator[_ngcontent-%COMP%]{width:100%;--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__actions-cell[_ngcontent-%COMP%], .templates-page__card-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:3px}button.templates-page__action[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-on-surface-variant);width:var(--gns3-density-control-height-sm);height:var(--gns3-density-control-height-sm);--mat-icon-button-state-layer-size: var(--gns3-density-control-height-sm);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-control-height-sm)}button.templates-page__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}button.templates-page__action[_ngcontent-%COMP%]{color:var(--template-action-color);--mat-icon-button-state-layer-color: var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:not(:disabled) mat-icon[_ngcontent-%COMP%]{color:var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:disabled mat-icon[_ngcontent-%COMP%]{color:var(--gns3-button-disabled-label-color)}button.templates-page__action--details[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--edit[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-primary)}button.templates-page__action--duplicate[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--delete[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-error)}.templates-page__grid[_ngcontent-%COMP%]{flex:1;min-width:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-content:start;gap:var(--gns3-density-card-gap)}.templates-page__grid--with-details[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__card[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column;padding:16px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;background:var(--mat-sys-surface);cursor:pointer;transition:transform var(--gns3-motion-duration-standard) ease,box-shadow var(--gns3-motion-duration-standard) ease,border-color var(--gns3-motion-duration-standard) ease}.templates-page__card[_ngcontent-%COMP%]:hover{border-color:var(--mat-sys-outline-variant);background:var(--mat-sys-surface-container-low)}.templates-page__card--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);box-shadow:0 0 0 1px var(--mat-sys-primary)}.templates-page__card-header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--gns3-density-space-3)}.templates-page__card-body[_ngcontent-%COMP%]{flex:1;min-width:0;padding:14px 0 12px}.templates-page__card-body[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{display:-webkit-box;overflow:hidden;margin:0 0 9px;color:var(--mat-sys-on-surface);font-size:17px;font-weight:650;line-height:1.35;overflow-wrap:anywhere;-webkit-box-orient:vertical;-webkit-line-clamp:2}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%]{display:grid;gap:8px;margin:16px 0 0}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{min-width:0;margin:0;overflow:hidden;color:var(--mat-sys-on-surface);font-size:13px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] .templates-page__card-tags-row[_ngcontent-%COMP%]{align-items:flex-start}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd.templates-page__card-tags[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px;overflow:visible;white-space:normal}.templates-page__card-actions[_ngcontent-%COMP%]{justify-content:flex-end;min-height:33px;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__grid-paginator[_ngcontent-%COMP%]{grid-column:1/-1;width:100%;border-radius:12px;background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container));--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__empty[_ngcontent-%COMP%]{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:230px;padding:32px;color:var(--mat-sys-on-surface-variant);text-align:center}.templates-page__empty[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{width:48px;height:48px;font-size:48px;opacity:.55}.templates-page__empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:12px 0 0;color:var(--mat-sys-on-surface);font-size:17px}.templates-page__empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:5px 0 0;font-size:14px}.templates-page__details[_ngcontent-%COMP%]{position:sticky;top:16px;flex:0 0 clamp(390px,31vw,480px);display:flex;min-height:380px;max-height:calc(100vh - 176px);flex-direction:column;overflow:hidden;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 60%,transparent);border-radius:16px;background:var(--mat-sys-surface);box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent);animation:_ngcontent-%COMP%_templates-slide-in var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard)}.templates-page__details-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:var(--gns3-density-space-3);min-height:56px;box-sizing:border-box;padding:8px 10px 8px 16px;border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 72%,var(--mat-sys-surface))}.templates-page__details-header[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-primary-container)}.templates-page__details-heading[_ngcontent-%COMP%]{display:flex;min-width:0;align-items:center;gap:var(--gns3-density-space-3)}.templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;margin:0;color:var(--mat-sys-on-primary-container);font-size:19px;font-weight:650;line-height:1.25;text-overflow:ellipsis;white-space:nowrap}.templates-page__details-title-line[_ngcontent-%COMP%]{display:flex;flex:1;min-width:0;align-items:center;gap:var(--gns3-density-space-2)}.templates-page__details-title-line[_ngcontent-%COMP%] .templates-page__type-badge[_ngcontent-%COMP%]{flex:0 0 auto}.templates-page__details-body[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:12px 20px}.templates-page__description[_ngcontent-%COMP%]{padding:10px 0 14px;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__description[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.6px;text-transform:uppercase}.templates-page__description[_ngcontent-%COMP%] app-markdown-viewer[_ngcontent-%COMP%]{display:block;margin-top:8px;padding:2px 12px;border-radius:10px;background:var(--mat-sys-surface-container-low);overflow-wrap:anywhere;--markdown-viewer-font-size: 13px;--markdown-viewer-line-height: 1.5;--markdown-viewer-heading-scale: .85}.templates-page__detail-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:22px 105px minmax(0,1fr);align-items:center;gap:var(--gns3-density-space-3);min-height:40px;box-sizing:border-box;padding:8px 0;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__detail-row[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:19px;height:19px;color:var(--mat-sys-primary);font-size:19px}.templates-page__detail-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:12px;font-weight:650;letter-spacing:.5px;text-transform:uppercase;white-space:nowrap}.templates-page__detail-row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{min-width:0;color:var(--mat-sys-on-surface);font-size:14px;font-weight:500;line-height:1.45;text-align:right;overflow-wrap:anywhere}.templates-page__detail-row--stacked[_ngcontent-%COMP%]{align-items:start}.templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__mono[_ngcontent-%COMP%], .templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__path[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-family:var(--gns3-font-code);font-size:12px;word-break:break-all}.templates-page__tags[_ngcontent-%COMP%]{border-bottom:0}.templates-page__tags[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:7px}.templates-page__tag[_ngcontent-%COMP%]{padding:5px 9px;border-radius:14px;color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container);font-size:11px;font-weight:550}.templates-page__details-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(105px,1fr));gap:var(--gns3-density-space-2);padding:14px 16px 18px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-surface-container) 72%,transparent)}button.templates-page__details-action[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-on-surface-variant);height:40px;border-radius:12px;color:var(--details-action-color);border-color:color-mix(in srgb,var(--details-action-color) 48%,transparent);font-size:13px;font-weight:500}button.templates-page__details-action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--details-action-color)}button.templates-page__details-action--edit[_ngcontent-%COMP%], button.templates-page__details-action--duplicate[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-primary)}button.templates-page__details-action--delete[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-error)}[data-density=compact][_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%]{min-height:40px;height:40px}[data-density=compact][_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%]{width:40px;height:40px;--mat-icon-button-state-layer-size: 40px}[data-density=compact][_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%]{min-height:48px;padding-block:4px}[data-density=compact][_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:18px}[data-density=compact][_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%]{padding-block:8px}[data-density=compact][_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%]{min-height:36px;padding-block:6px}[data-density=compact][_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%]{padding:12px}@keyframes _ngcontent-%COMP%_templates-slide-in{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@media(max-width:1400px){.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__main[_ngcontent-%COMP%]{flex-direction:column}.templates-page__table-container[_ngcontent-%COMP%], .templates-page__grid[_ngcontent-%COMP%], .templates-page__details[_ngcontent-%COMP%]{width:100%}.templates-page__details[_ngcontent-%COMP%]{position:static;flex-basis:auto;max-height:none}}@media(max-width:900px){.templates-page__header[_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column}.templates-page__header-actions[_ngcontent-%COMP%]{width:100%}.templates-page__toolbar[_ngcontent-%COMP%]{align-items:stretch;flex-direction:column}.templates-page__toolbar-actions[_ngcontent-%COMP%]{width:100%}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{flex:1;width:auto}}@media(max-width:640px){.templates-page__header[_ngcontent-%COMP%]{padding:20px 16px 12px}.templates-page__header-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{width:100%;padding-inline:10px}.templates-page__scopes[_ngcontent-%COMP%]{overflow-x:auto;padding-inline:16px}.templates-page__scope[_ngcontent-%COMP%]{flex:0 0 auto;padding-inline:12px}.templates-page__toolbar[_ngcontent-%COMP%], .templates-page__main[_ngcontent-%COMP%]{padding-inline:16px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__view-toggle[_ngcontent-%COMP%]{grid-column:1/-1;justify-self:end}.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.templates-page__details[_ngcontent-%COMP%]{min-width:0}}',"[_nghost-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%] mat-form-field[_ngcontent-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%]{display:block;width:100%;background:transparent}.template-edit-legacy-label[_ngcontent-%COMP%], .template-edit-legacy-control[_ngcontent-%COMP%]{display:none}[class$=__header][_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-4);max-width:1440px;margin:0 auto;padding:var(--gns3-density-space-5) var(--gns3-density-space-5) 14px}[class$=__breadcrumb][_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;margin-bottom:8px;color:var(--mat-sys-primary);font-size:14px;font-weight:600}[class$=__breadcrumb][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{min-height:28px;padding:0 4px;color:inherit;font:inherit}[class$=__breadcrumb][_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:18px;height:18px;font-size:18px;color:var(--mat-sys-on-surface-variant)}[class$=__heading-row][_ngcontent-%COMP%]{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--gns3-density-space-5);width:100%}[class$=__title][_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal;flex:1;min-width:0}[class$=__header-actions][_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-3);flex-shrink:0}[class$=__header-actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{min-height:var(--gns3-density-control-height);border-radius:var(--gns3-density-radius-md);padding:0 var(--gns3-density-space-4)}[class$=__back-btn][_ngcontent-%COMP%]{flex:0 0 auto;width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-icon-button)}[class$=__back-btn][_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}[class$=__back-btn][_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant)}[class$=__content][_ngcontent-%COMP%]{display:grid;grid-template-columns:220px minmax(0,1fr);align-items:start;column-gap:var(--gns3-density-card-gap);row-gap:var(--gns3-density-space-3);max-width:1440px;margin:0 auto;padding:0 var(--gns3-density-space-5) 32px}.template-edit-tabs[_ngcontent-%COMP%]{position:sticky;top:var(--gns3-density-app-header-height);display:flex;grid-column:1;grid-row:1/span 2;align-self:start;flex-direction:column;gap:var(--gns3-density-space-2);padding:var(--gns3-density-space-3);border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:var(--gns3-density-radius-xl);background:color-mix(in srgb,var(--mat-sys-primary-container) 18%,var(--mat-sys-surface))}.template-edit-tabs[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:flex-start;min-height:var(--gns3-density-control-height);border:0;border-radius:var(--gns3-density-radius-sm);padding:0 var(--gns3-density-space-3);color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;font-weight:600;text-align:left;cursor:pointer}.template-edit-tabs[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}.template-edit-tabs[_ngcontent-%COMP%] button.is-active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}[class$=__content][_ngcontent-%COMP%] > [class*=__form-card][_ngcontent-%COMP%]{grid-column:2;grid-row:1}[class$=__content][_ngcontent-%COMP%] > [class*=__form-card][_ngcontent-%COMP%]:not(:has(>:nth-child(2))){display:none}.vpcs-template-details__form-card[_ngcontent-%COMP%]:not(.template-edit-panel-active){display:none}[class*=__form-card][_ngcontent-%COMP%]{margin:0 0 18px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;overflow:hidden;border-radius:var(--gns3-density-radius-lg);background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none}[class$=__section-header][_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;min-height:var(--gns3-density-section-header-height);box-sizing:border-box;padding:var(--gns3-density-section-header-padding);border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 28%,var(--mat-sys-surface));cursor:default}[class$=__expand-icon][_ngcontent-%COMP%]{display:none}[class$=__section-title][_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-section-title-size);font-weight:650}[class$=__form][_ngcontent-%COMP%], .form-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-card-gap);padding:var(--gns3-density-card-padding)}.qemu-template-details__form[_ngcontent-%COMP%]{padding-inline:var(--gns3-density-card-padding)}.qemu-template-details__subsection[_ngcontent-%COMP%]{width:100%;box-sizing:border-box}.two-column-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--gns3-density-card-gap)}[class$=__field][_ngcontent-%COMP%], .form-field[_ngcontent-%COMP%]{width:100%}[class$=__actions][_ngcontent-%COMP%]{display:flex;width:100%;box-sizing:border-box;justify-content:flex-end;gap:var(--gns3-density-space-3);margin-top:0;padding:4px 0 8px}[class$=__content][_ngcontent-%COMP%] > [class$=__actions][_ngcontent-%COMP%]{grid-column:2;justify-content:flex-end}[class*=__save-btn][_ngcontent-%COMP%], [class*=__cancel-btn][_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing)}button[class*=__save-btn].mat-mdc-raised-button[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-primary);background-color:var(--mat-sys-primary);--mat-button-protected-label-text-color: var(--mat-sys-on-primary);--mat-button-protected-container-color: var(--mat-sys-primary);--mat-button-protected-state-layer-color: var(--mat-sys-on-primary)}button[class*=__cancel-btn].mat-mdc-button[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-surface);border-color:var(--mat-sys-outline);--mat-button-outlined-label-text-color: var(--mat-sys-on-surface);--mat-button-outlined-state-layer-color: var(--mat-sys-on-surface)}button[class*=__cancel-btn].mat-mdc-button[_ngcontent-%COMP%]{border:1px solid var(--mat-sys-outline)}button[class*=__config-btn][_ngcontent-%COMP%], button.docker-details__extra-config-btn[_ngcontent-%COMP%], .udp-tunnels__add-btn[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing);width:fit-content;max-width:100%;align-self:center;border-radius:var(--mat-sys-corner-full, 999px)}.preferences__usage-form[_ngcontent-%COMP%]{width:100%;box-sizing:border-box;padding:var(--gns3-density-card-padding)}.preferences__usage-field--full[_ngcontent-%COMP%]{display:block;width:100%}.preferences__usage-field--full[_ngcontent-%COMP%] textarea.mat-mdc-input-element[_ngcontent-%COMP%]{width:100%;min-height:140px;box-sizing:border-box;resize:vertical}[class$=__form][_ngcontent-%COMP%] [class*=__file-row][_ngcontent-%COMP%]{padding:0}[class*=__file-row][_ngcontent-%COMP%]{align-items:flex-start}[class$=__symbol-row][_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:var(--gns3-density-card-gap)}[class$=__symbol-row][_ngcontent-%COMP%] [class*=__symbol-btn][_ngcontent-%COMP%], [class$=__symbol-row][_ngcontent-%COMP%] [class*=__action-btn][_ngcontent-%COMP%], [class*=__file-row][_ngcontent-%COMP%] > button[class*=__browse-btn][_ngcontent-%COMP%], .docker-details__image-row[_ngcontent-%COMP%] > button.docker-details__pull-btn[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing);border-radius:var(--mat-sys-corner-full, 999px);width:fit-content;max-width:100%;flex:0 0 auto;align-self:flex-start;margin-top:var(--template-field-action-offset, calc((var(--gns3-density-form-field-height) - var(--gns3-density-control-height)) / 2))}[data-density=compact][_nghost-%COMP%] [class$=__heading-row][_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] [class$=__heading-row][_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column;gap:var(--gns3-density-space-3)}[data-density=compact][_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%]{width:100%}[data-density=compact][_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex:1}@media(max-width:768px){[class$=__symbol-row][_ngcontent-%COMP%], [class*=__file-row][_ngcontent-%COMP%], .docker-details__image-row[_ngcontent-%COMP%]{--template-field-action-offset: 0px}}@media(max-width:760px){[class$=__header][_ngcontent-%COMP%]{padding-inline:16px}[class$=__content][_ngcontent-%COMP%]{padding-inline:16px;grid-template-columns:1fr}.template-edit-tabs[_ngcontent-%COMP%]{position:static;grid-column:1;grid-row:auto;flex-direction:row;overflow-x:auto}.template-edit-tabs[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex:0 0 auto}[class$=__content][_ngcontent-%COMP%] > [class*=__form-card][_ngcontent-%COMP%]{grid-column:1;grid-row:auto}.two-column-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}[class$=__symbol-row][_ngcontent-%COMP%]{flex-direction:column}[class$=__actions][_ngcontent-%COMP%]{flex-direction:row;align-items:center;justify-content:flex-end}[class$=__actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:auto}[class$=__content][_ngcontent-%COMP%] > [class$=__actions][_ngcontent-%COMP%]{grid-column:1}.preferences__usage-form[_ngcontent-%COMP%]{padding:16px}[class*=__save-btn][_ngcontent-%COMP%], [class*=__cancel-btn][_ngcontent-%COMP%]{width:auto}}"],changeDetection:0})}return n})();var Sh=(()=>{class n{httpController;constructor(e){this.httpController=e}getTemplates(e){return this.httpController.get(e,"/templates")}getTemplate(e,t){return this.httpController.get(e,`/templates/${t}`)}addTemplate(e,t){return this.httpController.post(e,"/templates",t)}saveTemplate(e,t){return this.httpController.put(e,`/templates/${t.template_id}`,t)}static \u0275fac=function(t){return new(t||n)(_e(sn))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();function kge(n,o){if(n&1){let e=R();r(0,"button",29),_("click",function(){y(e);let i=h();return w(i.goBack())}),r(1,"mat-icon"),c(2,"arrow_back"),l()()}}var vy=(()=>{class n{route=f($t);controllerService=f(_t);vpcsService=f(Sh);router=f(Ft);location=f(ki);toasterService=f(re);validationService=f(Hn);templateMocksService=f(Rr);formBuilder=f(Ai);cd=f(oe);controller;templateName="";templateNameForm;netmikoDeviceType="";isLocalComputerChosen=!0;usage=$("");symbol=$("vpcs_guest");constructor(){this.templateNameForm=this.formBuilder.group({templateName:new Ge(null,[Ue.required])})}ngOnInit(){let e=this.route.snapshot.paramMap.get("controller_id");this.controllerService.get(parseInt(e,10)).then(t=>{this.controller=t,this.cd.markForCheck()},t=>{let i=t.error?.message||t.message||"Failed to load controller";this.toasterService.error(i),this.cd.markForCheck()})}setControllerType(e){e==="local"&&(this.isLocalComputerChosen=!0)}goBack(){let e=this.controller?.id??parseInt(this.route.snapshot.paramMap.get("controller_id"),10);ji(this.location,this.router,["/controller",e,"preferences"])}addTemplate(){if(!this.templateNameForm.invalid&&this.controller){this.templateName=this.templateNameForm.get("templateName").value;let e=this.validationService.validateNetmikoDeviceType(this.netmikoDeviceType);if(!e.isValid){this.toasterService.error(e.errorMessage);return}this.templateMocksService.getVpcsTemplate().subscribe({next:t=>{let i=t;i.template_id=xo(),i.name=this.templateName,i.compute_id="local",i.netmiko_device_type=this.netmikoDeviceType.trim()||null,i.usage=this.usage(),i.symbol=this.symbol(),this.vpcsService.addTemplate(this.controller,i).subscribe({next:()=>{this.goBack()},error:a=>{let s=a.error?.message||a.message||"Failed to add vpcs template";this.toasterService.error(s),this.cd.markForCheck()}})},error:t=>{let i=t.error?.message||t.message||"Failed to load VPCS template";this.toasterService.error(i),this.cd.markForCheck()}})}else this.toasterService.error("Fill all required fields")}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-add-vpcs-template"]],inputs:{usage:[1,"usage"],symbol:[1,"symbol"]},outputs:{usage:"usageChange",symbol:"symbolChange"},decls:42,vars:8,consts:[[1,"vpcs-add","template-wizard"],[1,"vpcs-add__header","template-wizard__header"],["mat-icon-button","","aria-label","Back to VPCS templates",1,"vpcs-add__back-btn","template-wizard__back"],[1,"template-wizard__heading"],[1,"vpcs-add__title","template-wizard__title"],[1,"vpcs-add__content","template-wizard__body"],[1,"template-wizard__single-layout"],["aria-label","Template creation steps",1,"template-wizard__single-nav"],[1,"template-wizard__single-step","template-wizard__single-step--detailed"],[1,"template-wizard__single-step-index"],[1,"template-wizard__step-label"],[1,"template-wizard__step-label-text"],[1,"template-wizard__step-label-title"],[1,"template-wizard__step-label-description"],[1,"template-wizard__single-content"],[1,"vpcs-add__form-card","template-wizard__panel"],[1,"template-wizard__section"],[1,"template-wizard__section-title"],[1,"template-wizard__section-copy"],[1,"vpcs-add__radio-group"],["value","1",1,"vpcs-add__radio",3,"click","checked"],[1,"vpcs-add__form",3,"formGroup"],["appearance","outline","subscriptSizing","dynamic",1,"vpcs-add__field","template-wizard__field"],["matInput","","required","","formControlName","templateName","type","text","placeholder","Template name"],["subscriptSizing","dynamic","appearance","outline",1,"vpcs-add__field",3,"valueChange","value","controller"],[3,"usageChange","symbolChange","usage","symbol"],[1,"vpcs-add__actions","template-wizard__actions"],["mat-stroked-button","",1,"vpcs-add__cancel-btn",3,"click"],["mat-raised-button","","color","primary",1,"vpcs-add__submit-btn",3,"click","disabled"],["mat-icon-button","","aria-label","Back to VPCS templates",1,"vpcs-add__back-btn","template-wizard__back",3,"click"]],template:function(t,i){t&1&&(r(0,"div",0)(1,"header",1),T(2,kge,3,0,"button",2),r(3,"div",3)(4,"h1",4),c(5,"New VPCS node template"),l()()(),r(6,"main",5)(7,"div",6)(8,"aside",7)(9,"div",8)(10,"span",9),c(11,"1"),l(),r(12,"span",10)(13,"mat-icon"),c(14,"description"),l(),r(15,"span",11)(16,"span",12),c(17,"Template info"),l(),r(18,"span",13),c(19,"Basic details and name"),l()()()()(),r(20,"div",14)(21,"section",15)(22,"section",16)(23,"h2",17),c(24,"Template information"),l(),r(25,"p",18),c(26,"Choose a name and an optional usage note for your template."),l(),r(27,"mat-radio-group",19)(28,"mat-radio-button",20),_("click",function(){return i.setControllerType("local")}),c(29," Run the VPCS node locally "),l()(),r(30,"form",21)(31,"mat-form-field",22)(32,"mat-label"),c(33,"Template name"),l(),L(34,"input",23),l()(),r(35,"app-netmiko-device-type-select",24),rn("valueChange",function(s){return Xt(i.netmikoDeviceType,s)||(i.netmikoDeviceType=s),s}),l(),r(36,"app-template-info-fields",25),rn("usageChange",function(s){return Xt(i.usage,s)||(i.usage=s),s})("symbolChange",function(s){return Xt(i.symbol,s)||(i.symbol=s),s}),l()()()()(),r(37,"div",26)(38,"button",27),_("click",function(){return i.goBack()}),c(39,"Cancel"),l(),r(40,"button",28),_("click",function(){return i.addTemplate()}),c(41," Create template "),l()()()()),t&2&&(m(2),E(i.controller?2:-1),m(26),v("checked",!0),m(2),v("formGroup",i.templateNameForm),m(5),an("value",i.netmikoDeviceType),v("controller",i.controller),m(),an("usage",i.usage)("symbol",i.symbol),m(4),v("disabled",i.templateNameForm.invalid||!i.controller))},dependencies:[po,It,Ct,At,Nt,vt,dl,Ut,Yt,ie,ce,Y,he,Be,Fo,la,Zo,we,Pe,Ve,ye,Ee,Ds],styles:["[_nghost-%COMP%]{display:block;width:100%;background:transparent}.vpcs-add__header[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:32px 20px 16px;display:flex;align-items:center;gap:16px;animation:none}.vpcs-add__back-btn[_ngcontent-%COMP%]{width:48px;height:48px;border-radius:12px;color:var(--mat-sys-on-surface);transition:all var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1)}.vpcs-add__back-btn[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 8%,transparent)}.vpcs-add__title[_ngcontent-%COMP%]{flex:1;font-size:32px;font-weight:500;color:var(--mat-sys-on-surface);margin:0}.vpcs-add__content[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:0 20px 20px;animation:none}.vpcs-add__form-card[_ngcontent-%COMP%]{background:var(--mat-sys-surface);border-radius:16px;overflow:hidden;box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 20%,transparent),0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent);padding:24px}.vpcs-add__radio-group[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px;margin-bottom:24px}.vpcs-add__radio[_ngcontent-%COMP%]{font-size:16px}.vpcs-add__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px}.vpcs-add__field[_ngcontent-%COMP%]{width:100%}.vpcs-add__actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:12px;margin-top:24px}.vpcs-add__cancel-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none}.vpcs-add__submit-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none;letter-spacing:.5px}@media(max-width:768px){.vpcs-add__header[_ngcontent-%COMP%]{padding:24px 16px 12px;gap:12px}.vpcs-add__back-btn[_ngcontent-%COMP%]{width:44px;height:44px}.vpcs-add__title[_ngcontent-%COMP%]{font-size:24px}.vpcs-add__content[_ngcontent-%COMP%]{padding:0 16px 16px}.vpcs-add__form-card[_ngcontent-%COMP%]{padding:16px}.vpcs-add__actions[_ngcontent-%COMP%]{flex-direction:column}.vpcs-add__cancel-btn[_ngcontent-%COMP%], .vpcs-add__submit-btn[_ngcontent-%COMP%]{width:100%;height:44px}}",'[_nghost-%COMP%]{display:block;width:100%;background:transparent}.templates-page__content[_ngcontent-%COMP%]{animation:none}.templates-page__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:20px;max-width:1600px;margin:0 auto;padding:24px 20px 16px}.templates-page__heading[_ngcontent-%COMP%], .templates-page__header-actions[_ngcontent-%COMP%]{display:flex;align-items:center}.templates-page__heading[_ngcontent-%COMP%]{min-width:0;gap:var(--gns3-density-space-3)}.templates-page__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.templates-page__header-actions[_ngcontent-%COMP%]{gap:var(--gns3-density-space-3)}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);border-radius:12px;padding-inline:18px;font-size:15px;font-weight:500;letter-spacing:.3px;text-transform:none}[class*=-templates__header][_ngcontent-%COMP%]{box-sizing:border-box;width:100%;height:calc(var(--gns3-density-space-4) * 2 + (var(--gns3-density-section-title-size) + 2px) * 1.2 + 1px);max-width:none;margin:0;padding:0 var(--gns3-density-page-padding);gap:var(--gns3-density-space-3);color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container);border-bottom:1px solid var(--mat-sys-outline-variant)}[class*=-templates__back-btn][_ngcontent-%COMP%], [class*=-templates__add-btn][_ngcontent-%COMP%]{flex:0 0 auto;width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:12px}[class*=-templates__back-btn][_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container)}[class*=-templates__add-btn][_ngcontent-%COMP%]{color:var(--mat-sys-primary)}[class*=-templates__title][_ngcontent-%COMP%]{flex:1;min-width:0;margin:0;padding-bottom:0;color:var(--mat-sys-on-primary-container);font-size:calc(var(--gns3-density-section-title-size) + 2px);font-weight:650;line-height:1.2;letter-spacing:-.01em}.templates-page__scopes[_ngcontent-%COMP%]{display:flex;gap:4px;max-width:1560px;margin:0 auto 16px;padding:0 20px;border-bottom:1px solid var(--mat-sys-outline-variant)}.templates-page__scope[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center;gap:8px;min-height:48px;padding:0 16px;border:0;color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;font-size:14px;font-weight:550;cursor:pointer}.templates-page__scope[_ngcontent-%COMP%]:after{position:absolute;right:8px;bottom:-1px;left:8px;height:2px;border-radius:2px 2px 0 0;background:transparent;content:""}.templates-page__scope[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}.templates-page__scope[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{min-width:22px;padding:2px 6px;border-radius:12px;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-high);font-size:11px;text-align:center}.templates-page__scope--active[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%]:after{background:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap);max-width:1600px;margin:0 auto;padding:0 20px 8px}.templates-page__search[_ngcontent-%COMP%]{flex:1;min-width:240px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:flex;align-items:center;flex:0 0 auto;gap:var(--gns3-density-space-3)}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{width:155px}.templates-page__view-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px;padding:4px 2px;border-radius:8px;background:var(--mat-sys-surface-container-high)}button.templates-page__view-button[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:8px;color:var(--mat-sys-on-surface-variant);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);--mat-icon-button-icon-size: 22px}button.templates-page__view-button--active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__main[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:20px;max-width:1600px;margin:0 auto;padding:0 20px 20px}.templates-page__loading[_ngcontent-%COMP%]{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;min-height:320px;gap:var(--gns3-density-card-gap);color:var(--mat-sys-on-surface-variant)}.templates-page__table-container[_ngcontent-%COMP%]{flex:1;min-width:0;border-radius:16px;background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;overflow-x:auto}mat-table[_ngcontent-%COMP%]{width:100%;min-width:850px}.mat-mdc-row[_ngcontent-%COMP%], .mat-row[_ngcontent-%COMP%]{height:var(--mat-table-row-item-container-height);min-height:var(--mat-table-row-item-container-height)}.mat-header-row[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%]{position:sticky;top:0;z-index:10;background:var(--mat-sys-surface-container-highest);box-shadow:inset 0 -2px var(--mat-sys-primary);--mat-sort-arrow-color: var(--mat-sys-primary)}.mat-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:13px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}mat-row[_ngcontent-%COMP%]{cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease}mat-row[_ngcontent-%COMP%]:nth-child(2n){background:color-mix(in srgb,var(--mat-sys-on-surface) 1%,transparent)}mat-row[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}mat-row.templates-page__row--selected[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}mat-cell[_ngcontent-%COMP%], mat-header-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:inherit;color:var(--mat-sys-on-surface)}.mat-column-name[_ngcontent-%COMP%]{flex:2.4;min-width:240px;justify-content:flex-start}.mat-column-template_type[_ngcontent-%COMP%]{flex:1.1;min-width:130px}.mat-column-category[_ngcontent-%COMP%]{flex:1;min-width:110px}.mat-column-compute_id[_ngcontent-%COMP%]{flex:1;min-width:105px}.mat-column-builtin[_ngcontent-%COMP%]{flex:0 0 90px;min-width:90px;justify-content:center}.mat-column-actions[_ngcontent-%COMP%]{flex:0 0 180px;min-width:180px;box-sizing:border-box;justify-content:flex-start;padding-right:24px}.templates-page__name-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-width:0;gap:var(--gns3-density-space-3)}.templates-page__name-copy[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:14px;font-weight:600}.templates-page__symbol[_ngcontent-%COMP%]{display:grid;flex:0 0 52px;width:52px;height:52px;overflow:hidden;place-items:center;border-radius:14px;color:var(--mat-sys-on-primary-container);background:color-mix(in srgb,var(--mat-sys-primary-container) 82%,var(--mat-sys-surface))}.templates-page__symbol[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:78%;height:78%;object-fit:contain;filter:drop-shadow(0 2px 4px color-mix(in srgb,var(--mat-sys-shadow) 25%,transparent))}.templates-page__symbol[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:27px;height:27px;font-size:27px}.templates-page__symbol--small[_ngcontent-%COMP%]{flex-basis:38px;width:38px;height:38px;border-radius:10px}.templates-page__symbol--small[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:21px;height:21px;font-size:21px}.templates-page__type-badge[_ngcontent-%COMP%], .templates-page__source-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;width:fit-content;padding:4px 9px;border-radius:16px;font-size:12px;font-weight:600;white-space:nowrap}.templates-page__type-badge[_ngcontent-%COMP%]{color:var(--mat-sys-secondary);background:color-mix(in srgb,var(--mat-sys-secondary) 11%,transparent)}.templates-page__type-badge--qemu[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__type-badge--docker[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container)}.templates-page__type-badge--dynamips[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary-container);background:var(--mat-sys-tertiary-container)}.templates-page__type-badge--cloud[_ngcontent-%COMP%]{color:var(--mat-sys-on-error-container);background:var(--mat-sys-error-container)}.templates-page__type-badge--vpcs[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary);background:var(--mat-sys-primary)}.templates-page__type-badge--ethernet-hub[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary);background:var(--mat-sys-secondary)}.templates-page__type-badge--ethernet-switch[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary);background:var(--mat-sys-tertiary)}.templates-page__type-badge--iou[_ngcontent-%COMP%]{color:var(--mat-sys-on-error);background:var(--mat-sys-error)}.templates-page__type-badge--nat[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-highest)}.templates-page__source-badge[_ngcontent-%COMP%]{color:var(--mat-sys-primary);background:color-mix(in srgb,var(--mat-sys-primary) 11%,transparent)}.templates-page__source-badge--builtin[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary);background:color-mix(in srgb,var(--mat-sys-tertiary) 11%,transparent)}.templates-page__table-footer[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:var(--mat-table-footer-container-height);padding:0 12px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container))}.templates-page__table-footer[_ngcontent-%COMP%] mat-paginator[_ngcontent-%COMP%]{width:100%;--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__actions-cell[_ngcontent-%COMP%], .templates-page__card-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:3px}button.templates-page__action[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-on-surface-variant);width:var(--gns3-density-control-height-sm);height:var(--gns3-density-control-height-sm);--mat-icon-button-state-layer-size: var(--gns3-density-control-height-sm);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-control-height-sm)}button.templates-page__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}button.templates-page__action[_ngcontent-%COMP%]{color:var(--template-action-color);--mat-icon-button-state-layer-color: var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:not(:disabled) mat-icon[_ngcontent-%COMP%]{color:var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:disabled mat-icon[_ngcontent-%COMP%]{color:var(--gns3-button-disabled-label-color)}button.templates-page__action--details[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--edit[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-primary)}button.templates-page__action--duplicate[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--delete[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-error)}.templates-page__grid[_ngcontent-%COMP%]{flex:1;min-width:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-content:start;gap:var(--gns3-density-card-gap)}.templates-page__grid--with-details[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__card[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column;padding:16px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;background:var(--mat-sys-surface);cursor:pointer;transition:transform var(--gns3-motion-duration-standard) ease,box-shadow var(--gns3-motion-duration-standard) ease,border-color var(--gns3-motion-duration-standard) ease}.templates-page__card[_ngcontent-%COMP%]:hover{border-color:var(--mat-sys-outline-variant);background:var(--mat-sys-surface-container-low)}.templates-page__card--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);box-shadow:0 0 0 1px var(--mat-sys-primary)}.templates-page__card-header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--gns3-density-space-3)}.templates-page__card-body[_ngcontent-%COMP%]{flex:1;min-width:0;padding:14px 0 12px}.templates-page__card-body[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{display:-webkit-box;overflow:hidden;margin:0 0 9px;color:var(--mat-sys-on-surface);font-size:17px;font-weight:650;line-height:1.35;overflow-wrap:anywhere;-webkit-box-orient:vertical;-webkit-line-clamp:2}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%]{display:grid;gap:8px;margin:16px 0 0}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{min-width:0;margin:0;overflow:hidden;color:var(--mat-sys-on-surface);font-size:13px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] .templates-page__card-tags-row[_ngcontent-%COMP%]{align-items:flex-start}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd.templates-page__card-tags[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px;overflow:visible;white-space:normal}.templates-page__card-actions[_ngcontent-%COMP%]{justify-content:flex-end;min-height:33px;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__grid-paginator[_ngcontent-%COMP%]{grid-column:1/-1;width:100%;border-radius:12px;background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container));--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__empty[_ngcontent-%COMP%]{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:230px;padding:32px;color:var(--mat-sys-on-surface-variant);text-align:center}.templates-page__empty[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{width:48px;height:48px;font-size:48px;opacity:.55}.templates-page__empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:12px 0 0;color:var(--mat-sys-on-surface);font-size:17px}.templates-page__empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:5px 0 0;font-size:14px}.templates-page__details[_ngcontent-%COMP%]{position:sticky;top:16px;flex:0 0 clamp(390px,31vw,480px);display:flex;min-height:380px;max-height:calc(100vh - 176px);flex-direction:column;overflow:hidden;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 60%,transparent);border-radius:16px;background:var(--mat-sys-surface);box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent);animation:_ngcontent-%COMP%_templates-slide-in var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard)}.templates-page__details-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:var(--gns3-density-space-3);min-height:56px;box-sizing:border-box;padding:8px 10px 8px 16px;border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 72%,var(--mat-sys-surface))}.templates-page__details-header[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-primary-container)}.templates-page__details-heading[_ngcontent-%COMP%]{display:flex;min-width:0;align-items:center;gap:var(--gns3-density-space-3)}.templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;margin:0;color:var(--mat-sys-on-primary-container);font-size:19px;font-weight:650;line-height:1.25;text-overflow:ellipsis;white-space:nowrap}.templates-page__details-title-line[_ngcontent-%COMP%]{display:flex;flex:1;min-width:0;align-items:center;gap:var(--gns3-density-space-2)}.templates-page__details-title-line[_ngcontent-%COMP%] .templates-page__type-badge[_ngcontent-%COMP%]{flex:0 0 auto}.templates-page__details-body[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:12px 20px}.templates-page__description[_ngcontent-%COMP%]{padding:10px 0 14px;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__description[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.6px;text-transform:uppercase}.templates-page__description[_ngcontent-%COMP%] app-markdown-viewer[_ngcontent-%COMP%]{display:block;margin-top:8px;padding:2px 12px;border-radius:10px;background:var(--mat-sys-surface-container-low);overflow-wrap:anywhere;--markdown-viewer-font-size: 13px;--markdown-viewer-line-height: 1.5;--markdown-viewer-heading-scale: .85}.templates-page__detail-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:22px 105px minmax(0,1fr);align-items:center;gap:var(--gns3-density-space-3);min-height:40px;box-sizing:border-box;padding:8px 0;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__detail-row[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:19px;height:19px;color:var(--mat-sys-primary);font-size:19px}.templates-page__detail-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:12px;font-weight:650;letter-spacing:.5px;text-transform:uppercase;white-space:nowrap}.templates-page__detail-row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{min-width:0;color:var(--mat-sys-on-surface);font-size:14px;font-weight:500;line-height:1.45;text-align:right;overflow-wrap:anywhere}.templates-page__detail-row--stacked[_ngcontent-%COMP%]{align-items:start}.templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__mono[_ngcontent-%COMP%], .templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__path[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-family:var(--gns3-font-code);font-size:12px;word-break:break-all}.templates-page__tags[_ngcontent-%COMP%]{border-bottom:0}.templates-page__tags[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:7px}.templates-page__tag[_ngcontent-%COMP%]{padding:5px 9px;border-radius:14px;color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container);font-size:11px;font-weight:550}.templates-page__details-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(105px,1fr));gap:var(--gns3-density-space-2);padding:14px 16px 18px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-surface-container) 72%,transparent)}button.templates-page__details-action[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-on-surface-variant);height:40px;border-radius:12px;color:var(--details-action-color);border-color:color-mix(in srgb,var(--details-action-color) 48%,transparent);font-size:13px;font-weight:500}button.templates-page__details-action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--details-action-color)}button.templates-page__details-action--edit[_ngcontent-%COMP%], button.templates-page__details-action--duplicate[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-primary)}button.templates-page__details-action--delete[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-error)}[data-density=compact][_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%]{min-height:40px;height:40px}[data-density=compact][_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%]{width:40px;height:40px;--mat-icon-button-state-layer-size: 40px}[data-density=compact][_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%]{min-height:48px;padding-block:4px}[data-density=compact][_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:18px}[data-density=compact][_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%]{padding-block:8px}[data-density=compact][_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%]{min-height:36px;padding-block:6px}[data-density=compact][_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%]{padding:12px}@keyframes _ngcontent-%COMP%_templates-slide-in{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@media(max-width:1400px){.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__main[_ngcontent-%COMP%]{flex-direction:column}.templates-page__table-container[_ngcontent-%COMP%], .templates-page__grid[_ngcontent-%COMP%], .templates-page__details[_ngcontent-%COMP%]{width:100%}.templates-page__details[_ngcontent-%COMP%]{position:static;flex-basis:auto;max-height:none}}@media(max-width:900px){.templates-page__header[_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column}.templates-page__header-actions[_ngcontent-%COMP%]{width:100%}.templates-page__toolbar[_ngcontent-%COMP%]{align-items:stretch;flex-direction:column}.templates-page__toolbar-actions[_ngcontent-%COMP%]{width:100%}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{flex:1;width:auto}}@media(max-width:640px){.templates-page__header[_ngcontent-%COMP%]{padding:20px 16px 12px}.templates-page__header-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{width:100%;padding-inline:10px}.templates-page__scopes[_ngcontent-%COMP%]{overflow-x:auto;padding-inline:16px}.templates-page__scope[_ngcontent-%COMP%]{flex:0 0 auto;padding-inline:12px}.templates-page__toolbar[_ngcontent-%COMP%], .templates-page__main[_ngcontent-%COMP%]{padding-inline:16px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__view-toggle[_ngcontent-%COMP%]{grid-column:1/-1;justify-self:end}.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.templates-page__details[_ngcontent-%COMP%]{min-width:0}}'],changeDetection:0})}return n})();var Jm=(()=>{class n{getConsoleTypes(){return["telnet","ssh","none"]}getCategories(){return[["Default","guest"],["Routers","router"],["Switches","switch"],["End devices","guest"],["Security devices","firewall"]]}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();function Pge(n,o){if(n&1){let e=R();r(0,"mat-chip-row",43),_("removed",function(){let i=y(e).$implicit,a=h(2);return w(a.removeTag(i))}),c(1),r(2,"button",44)(3,"mat-icon"),c(4,"cancel"),l()()()}if(n&2){let e=o.$implicit;v("editable",!1),Ce("title",e),m(),X(" ",e," "),m(),Ce("aria-label","Remove tag "+e)}}function Tge(n,o){if(n&1&&(r(0,"mat-option",29),c(1),l()),n&2){let e=o.$implicit;v("value",e[1]),m(),X(" ",e[0]," ")}}function Ege(n,o){if(n&1&&(r(0,"mat-option",29),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function Oge(n,o){if(n&1){let e=R();r(0,"main",9)(1,"nav",10)(2,"button",11),_("click",function(){y(e);let i=h();return w(i.selectSection("general"))}),c(3," General settings "),l(),r(4,"button",11),_("click",function(){y(e);let i=h();return w(i.selectSection("usage"))}),c(5," Usage "),l(),r(6,"button",11),_("click",function(){y(e);let i=h();return w(i.selectSection("metadata"))}),c(7," Metadata "),l()(),r(8,"section",12)(9,"h3",13),c(10,"General settings"),l(),r(11,"form",14)(12,"mat-form-field",15)(13,"mat-label"),c(14,"Template name"),l(),r(15,"input",16),_("input",function(i){y(e);let a=h();return w(a.templateName.set(i.target.value))}),l()(),r(16,"mat-form-field",15)(17,"mat-label"),c(18,"Default name format"),l(),r(19,"input",17),_("input",function(i){y(e);let a=h();return w(a.defaultName.set(i.target.value))}),l()(),r(20,"mat-form-field",15)(21,"mat-label"),c(22,"Base script file"),l(),r(23,"input",18),_("input",function(i){y(e);let a=h();return w(a.scriptFile.set(i.target.value))}),l()(),r(24,"div",19)(25,"mat-form-field",20)(26,"mat-label"),c(27,"Symbol"),l(),r(28,"input",21),_("input",function(i){y(e);let a=h();return w(a.symbol.set(i.target.value))}),l()(),r(29,"button",22),_("click",function(){y(e);let i=h();return w(i.chooseSymbol())}),r(30,"mat-icon"),c(31,"add"),l(),c(32," Choose symbol "),l()(),r(33,"div",23)(34,"mat-form-field",24)(35,"mat-label"),c(36,"Tags"),l(),r(37,"input",25),_("matChipInputTokenEnd",function(i){y(e);let a=h();return w(a.addTag(i))}),l()(),r(38,"mat-chip-grid",26,0),Q(40,Pge,5,4,"mat-chip-row",27,Oe),l()(),r(42,"mat-form-field",15)(43,"mat-label"),c(44,"Category"),l(),r(45,"mat-select",28),_("selectionChange",function(i){y(e);let a=h();return w(a.category.set(i.value))}),Q(46,Tge,2,2,"mat-option",29,ni),l()(),r(48,"mat-form-field",15)(49,"mat-label"),c(50,"Console type"),l(),r(51,"mat-select",28),_("selectionChange",function(i){y(e);let a=h();return w(a.consoleType.set(i.value))}),Q(52,Ege,2,2,"mat-option",29,Oe),l()(),r(54,"div",30)(55,"app-netmiko-device-type-select",31),rn("valueChange",function(i){y(e);let a=h();return Xt(a.netmikoDeviceType,i)||(a.netmikoDeviceType=i),w(i)}),l(),r(56,"mat-form-field",32)(57,"mat-label"),c(58,"Default username"),l(),r(59,"input",33),_("input",function(i){y(e);let a=h();return w(a.onCredentialInput("default_username",i))}),l()(),r(60,"mat-form-field",32)(61,"mat-label"),c(62,"Default password"),l(),r(63,"input",34),_("input",function(i){y(e);let a=h();return w(a.onCredentialInput("default_password",i))}),l()()(),r(64,"mat-checkbox",35),_("change",function(i){y(e);let a=h();return w(a.consoleAutoStart.set(i.checked))}),c(65,"Auto start console"),l()()(),r(66,"section",12)(67,"h3",13),c(68,"Usage"),l(),r(69,"div",36)(70,"mat-form-field",37)(71,"mat-label"),c(72,"Usage notes"),l(),r(73,"textarea",38),_("input",function(i){y(e);let a=h();return w(a.usage.set(i.target.value))}),l()()()(),r(74,"section",12)(75,"h3",13),c(76,"Appliance metadata"),l(),r(77,"app-template-metadata-section",39),rn("metadataChange",function(i){y(e);let a=h();return Xt(a.applianceMetadata,i)||(a.applianceMetadata=i),w(i)}),l()(),r(78,"div",40)(79,"button",41),_("click",function(){y(e);let i=h();return w(i.goBack())}),c(80,"Cancel"),l(),r(81,"button",42),_("click",function(){y(e);let i=h();return w(i.onSave())}),c(82,"Save"),l()()()}if(n&2){let e=Te(39),t=h();m(2),ne("is-active",t.activeSection==="general"),m(2),ne("is-active",t.activeSection==="usage"),m(2),ne("is-active",t.activeSection==="metadata"),m(2),ne("template-edit-panel-active",t.activeSection==="general"),m(7),v("value",t.templateName()),m(4),v("value",t.defaultName()),m(4),v("value",t.scriptFile()),m(5),v("value",t.symbol()),m(9),v("matChipInputFor",e)("matChipInputSeparatorKeyCodes",t.separatorKeysCodes),m(),ne("gns3-chip-field__values--empty",t.tags().length===0),m(2),K(t.tags()),m(5),v("value",t.category()),m(),K(t.categories),m(5),v("value",t.consoleType()),m(),K(t.consoleTypes),m(3),an("value",t.netmikoDeviceType),v("controller",t.controller),m(4),v("value",t.defaultUsername()),m(4),v("value",t.defaultPassword()),m(),v("checked",t.consoleAutoStart()),m(2),ne("template-edit-panel-active",t.activeSection==="usage"),m(7),v("value",t.usage()),m(),ne("template-edit-panel-active",t.activeSection==="metadata"),m(3),an("metadata",t.applianceMetadata)}}var Cy=(()=>{class n{route=f($t);controllerService=f(_t);vpcsService=f(Sh);toasterService=f(re);vpcsConfigurationService=f(Jm);router=f(Ft);location=f(ki);cd=f(oe);dialog=f(Xe);dialogConfig=f(yo);validationService=f(Hn);controller;vpcsTemplate;separatorKeysCodes=[13,188];consoleTypes=[];categories=[];activeSection="general";templateName=$("");defaultName=$("");scriptFile=$("");symbol=$("");category=$("");consoleType=$("");consoleAutoStart=$(!1);netmikoDeviceType=$("");applianceMetadata=z(null);defaultUsername=Ne(()=>rs(this.applianceMetadata(),"default_username"));defaultPassword=Ne(()=>rs(this.applianceMetadata(),"default_password"));tags=$([]);usage=$("");ngOnInit(){let e=this.route.snapshot.paramMap.get("controller_id"),t=this.route.snapshot.paramMap.get("template_id");this.controllerService.get(parseInt(e,10)).then(i=>{this.controller=i,this.cd.markForCheck(),this.getConfiguration(),this.vpcsService.getTemplate(this.controller,t).subscribe({next:a=>{this.vpcsTemplate=a,this.vpcsTemplate.tags||(this.vpcsTemplate.tags=[]),this.initFormFromTemplate(),this.cd.markForCheck()},error:a=>{let s=a.error?.message||a.message||"Failed to load VPCS template";this.toasterService.error(s),this.cd.markForCheck()}})},i=>{let a=i.error?.message||i.message||"Failed to load controller";this.toasterService.error(a),this.cd.markForCheck()})}initFormFromTemplate(){this.templateName.set(this.vpcsTemplate.name||""),this.defaultName.set(this.vpcsTemplate.default_name_format||""),this.scriptFile.set(this.vpcsTemplate.base_script_file||""),this.symbol.set(this.vpcsTemplate.symbol||""),this.category.set(this.vpcsTemplate.category||""),this.consoleType.set(this.vpcsTemplate.console_type||""),this.consoleAutoStart.set(this.vpcsTemplate.console_auto_start||!1),this.tags.set(this.vpcsTemplate.tags||[]),this.usage.set(this.vpcsTemplate.usage||""),this.netmikoDeviceType.set(this.vpcsTemplate.netmiko_device_type||""),this.applianceMetadata.set(this.vpcsTemplate.appliance_metadata??null)}getConfiguration(){this.consoleTypes=this.vpcsConfigurationService.getConsoleTypes(),this.categories=this.vpcsConfigurationService.getCategories()}goBack(){ji(this.location,this.router,["/controller",this.controller.id,"preferences"])}onCredentialInput(e,t){let i=t.target.value;this.applianceMetadata.set(nd(this.applianceMetadata(),e,i))}onSave(){if(!this.templateName()||!this.defaultName()||!this.scriptFile()||!this.symbol()){let t=[];this.templateName()||t.push("Template name"),this.defaultName()||t.push("Default name format"),this.scriptFile()||t.push("Base script file"),this.symbol()||t.push("Symbol"),this.toasterService.error(`Missing required fields: ${t.join(", ")}`);return}let e=this.validationService.validateNetmikoDeviceType(this.netmikoDeviceType());if(!e.isValid){this.toasterService.error(e.errorMessage);return}this.vpcsTemplate.name=this.templateName(),this.vpcsTemplate.default_name_format=this.defaultName(),this.vpcsTemplate.base_script_file=this.scriptFile(),this.vpcsTemplate.symbol=this.symbol(),this.vpcsTemplate.category=this.category(),this.vpcsTemplate.console_type=this.consoleType(),this.vpcsTemplate.console_auto_start=this.consoleAutoStart(),this.vpcsTemplate.tags=this.tags(),this.vpcsTemplate.usage=this.usage(),this.vpcsTemplate.netmiko_device_type=this.netmikoDeviceType().trim()||null,this.vpcsTemplate.appliance_metadata=this.applianceMetadata(),this.vpcsService.saveTemplate(this.controller,this.vpcsTemplate).subscribe({next:()=>{this.toasterService.success("Changes saved"),this.goBack()},error:t=>{let i=t.error?.message||t.message||"Failed to save VPCS template";this.toasterService.error(i),this.cd.markForCheck()}})}chooseSymbol(){let e=this.dialogConfig.openConfig("templateSymbol",{autoFocus:!1,disableClose:!1,data:{controller:this.controller,symbol:this.symbol()}});this.dialog.open(rr,e).afterClosed().subscribe(i=>{i&&this.symbol.set(i)})}addTag(e){let t=(e.value||"").trim(),i=this.tags();t&&this.tags.set([...i,t]),e.chipInput&&e.chipInput.clear()}removeTag(e){let t=this.tags(),i=t.indexOf(e);if(i>=0){let a=[...t];a.splice(i,1),this.tags.set(a)}}selectSection(e){this.activeSection=e}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-vpcs-template-details"]],inputs:{templateName:[1,"templateName"],defaultName:[1,"defaultName"],scriptFile:[1,"scriptFile"],symbol:[1,"symbol"],category:[1,"category"],consoleType:[1,"consoleType"],consoleAutoStart:[1,"consoleAutoStart"],netmikoDeviceType:[1,"netmikoDeviceType"],tags:[1,"tags"],usage:[1,"usage"]},outputs:{templateName:"templateNameChange",defaultName:"defaultNameChange",scriptFile:"scriptFileChange",symbol:"symbolChange",category:"categoryChange",consoleType:"consoleTypeChange",consoleAutoStart:"consoleAutoStartChange",netmikoDeviceType:"netmikoDeviceTypeChange",tags:"tagsChange",usage:"usageChange"},decls:17,vars:1,consts:[["chipList",""],[1,"vpcs-template-details"],[1,"vpcs-template-details__header"],[1,"vpcs-template-details__heading-row"],[1,"vpcs-template-details__breadcrumb"],["type","button","mat-button","",3,"click"],[1,"vpcs-template-details__title"],[1,"vpcs-template-details__header-actions"],["type","button","mat-raised-button","","color","primary",3,"click"],[1,"vpcs-template-details__content"],["aria-label","Template settings",1,"template-edit-tabs"],["type","button",3,"click"],[1,"vpcs-template-details__form-card"],[1,"vpcs-template-details__section-title"],[1,"vpcs-template-details__form"],["appearance","outline","subscriptSizing","dynamic",1,"vpcs-template-details__field"],["matInput","","type","text","placeholder","Template name",3,"input","value"],["matInput","","type","text","placeholder","Default name format",3,"input","value"],["matInput","","type","text","placeholder","Base script file",3,"input","value"],[1,"vpcs-template-details__symbol-row"],["appearance","outline","subscriptSizing","dynamic",1,"vpcs-template-details__field","vpcs-template-details__field--flex"],["matInput","","type","text","placeholder","Symbol",3,"input","value"],["mat-raised-button","","color","primary",1,"vpcs-template-details__symbol-btn",3,"click"],[1,"gns3-chip-field"],["floatLabel","always","appearance","outline","subscriptSizing","dynamic",1,"vpcs-template-details__field"],["matInput","","placeholder","Add tags",3,"matChipInputTokenEnd","matChipInputFor","matChipInputSeparatorKeyCodes"],["aria-label","Tags",1,"gns3-chip-field__values"],[3,"editable"],[3,"selectionChange","value"],[3,"value"],[1,"three-column-grid"],["subscriptSizing","fixed","appearance","outline",1,"vpcs-template-details__field",3,"valueChange","value","controller"],["appearance","outline","subscriptSizing","fixed",1,"vpcs-template-details__field"],["matInput","","type","text","placeholder","Username to log into this node",3,"input","value"],["matInput","","type","text","placeholder","Password to log into this node",3,"input","value"],[3,"change","checked"],[1,"preferences__usage-form"],["appearance","outline","subscriptSizing","dynamic",1,"preferences__usage-field--full"],["matInput","","type","text",3,"input","value"],[3,"metadataChange","metadata"],[1,"vpcs-template-details__actions"],["mat-button","",1,"vpcs-template-details__cancel-btn",3,"click"],["mat-raised-button","","color","primary",1,"vpcs-template-details__save-btn",3,"click"],[3,"removed","editable"],["matChipRemove","","type","button"]],template:function(t,i){t&1&&(r(0,"div",1)(1,"header",2)(2,"div",3)(3,"div")(4,"div",4)(5,"button",5),_("click",function(){return i.goBack()}),c(6,"Templates"),l(),r(7,"mat-icon"),c(8,"chevron_right"),l(),r(9,"span"),c(10,"Edit"),l()(),r(11,"h1",6),c(12,"Edit template"),l()(),r(13,"div",7)(14,"button",8),_("click",function(){return i.goBack()}),c(15,"Back to templates"),l()()()(),T(16,Oge,83,29,"main",9),l()),t&2&&(m(16),E(i.vpcsTemplate?16:-1))},dependencies:[fe,St,Ct,vt,Ji,vn,ie,ce,Y,he,id,hn,we,Pe,Ve,ye,Ee,ot,ct,nt,Rt,Gt,po,ri,bi,xi,hi,fi],styles:["[_nghost-%COMP%]{display:block;width:100%;background:transparent}.vpcs-template-details__header[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:32px 20px 16px;display:flex;align-items:center;gap:var(--gns3-density-card-gap);animation:none}.vpcs-template-details__back-btn[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:12px;color:var(--mat-sys-on-surface);transition:all var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1)}.vpcs-template-details__back-btn[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 8%,transparent)}.vpcs-template-details__title[_ngcontent-%COMP%]{flex:1;font-size:28px;font-weight:500;color:var(--mat-sys-on-surface);margin:0}.vpcs-template-details__content[_ngcontent-%COMP%]{max-width:800px;margin:0 auto;padding:0 20px 20px;animation:none}.vpcs-template-details--hidden[_ngcontent-%COMP%]{opacity:.5;pointer-events:none}.vpcs-template-details__form-card[_ngcontent-%COMP%]{background:var(--mat-sys-surface);border-radius:16px;overflow:hidden;box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 20%,transparent),0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent);margin-bottom:var(--gns3-density-card-gap)}.vpcs-template-details__form[_ngcontent-%COMP%]{padding:var(--gns3-density-card-padding);display:flex;flex-direction:column;gap:var(--gns3-density-card-gap)}.vpcs-template-details__form[_ngcontent-%COMP%] .three-column-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;align-items:start}.vpcs-template-details__field[_ngcontent-%COMP%]{width:100%}.vpcs-template-details__field--flex[_ngcontent-%COMP%]{flex:1}.vpcs-template-details__section-title[_ngcontent-%COMP%]{padding:var(--gns3-density-section-header-padding);margin:0;font-size:16px;font-weight:500;color:var(--mat-sys-on-surface-variant);border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline) 30%,transparent)}.vpcs-template-details__symbol-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap)}.vpcs-template-details__symbol-btn[_ngcontent-%COMP%]{align-self:stretch}.vpcs-template-details__actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:var(--gns3-density-space-3);margin-top:24px}.vpcs-template-details__cancel-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none}.vpcs-template-details__save-btn[_ngcontent-%COMP%]{height:48px;border-radius:12px;font-size:16px;font-weight:500;text-transform:none;letter-spacing:.5px}@media(max-width:768px){.vpcs-template-details__header[_ngcontent-%COMP%]{padding:24px 16px 12px;gap:12px}.vpcs-template-details__back-btn[_ngcontent-%COMP%]{width:44px;height:44px}.vpcs-template-details__title[_ngcontent-%COMP%]{font-size:22px}.vpcs-template-details__content[_ngcontent-%COMP%]{padding:0 16px 16px}.vpcs-template-details__form[_ngcontent-%COMP%]{padding:16px}.vpcs-template-details__symbol-row[_ngcontent-%COMP%], .vpcs-template-details__actions[_ngcontent-%COMP%]{flex-direction:column}.vpcs-template-details__cancel-btn[_ngcontent-%COMP%], .vpcs-template-details__save-btn[_ngcontent-%COMP%]{width:100%;height:44px}}",'[_nghost-%COMP%]{display:block;width:100%;background:transparent}.templates-page__content[_ngcontent-%COMP%]{animation:none}.templates-page__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:20px;max-width:1600px;margin:0 auto;padding:24px 20px 16px}.templates-page__heading[_ngcontent-%COMP%], .templates-page__header-actions[_ngcontent-%COMP%]{display:flex;align-items:center}.templates-page__heading[_ngcontent-%COMP%]{min-width:0;gap:var(--gns3-density-space-3)}.templates-page__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.templates-page__header-actions[_ngcontent-%COMP%]{gap:var(--gns3-density-space-3)}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);border-radius:12px;padding-inline:18px;font-size:15px;font-weight:500;letter-spacing:.3px;text-transform:none}[class*=-templates__header][_ngcontent-%COMP%]{box-sizing:border-box;width:100%;height:calc(var(--gns3-density-space-4) * 2 + (var(--gns3-density-section-title-size) + 2px) * 1.2 + 1px);max-width:none;margin:0;padding:0 var(--gns3-density-page-padding);gap:var(--gns3-density-space-3);color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container);border-bottom:1px solid var(--mat-sys-outline-variant)}[class*=-templates__back-btn][_ngcontent-%COMP%], [class*=-templates__add-btn][_ngcontent-%COMP%]{flex:0 0 auto;width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:12px}[class*=-templates__back-btn][_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container)}[class*=-templates__add-btn][_ngcontent-%COMP%]{color:var(--mat-sys-primary)}[class*=-templates__title][_ngcontent-%COMP%]{flex:1;min-width:0;margin:0;padding-bottom:0;color:var(--mat-sys-on-primary-container);font-size:calc(var(--gns3-density-section-title-size) + 2px);font-weight:650;line-height:1.2;letter-spacing:-.01em}.templates-page__scopes[_ngcontent-%COMP%]{display:flex;gap:4px;max-width:1560px;margin:0 auto 16px;padding:0 20px;border-bottom:1px solid var(--mat-sys-outline-variant)}.templates-page__scope[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center;gap:8px;min-height:48px;padding:0 16px;border:0;color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;font-size:14px;font-weight:550;cursor:pointer}.templates-page__scope[_ngcontent-%COMP%]:after{position:absolute;right:8px;bottom:-1px;left:8px;height:2px;border-radius:2px 2px 0 0;background:transparent;content:""}.templates-page__scope[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}.templates-page__scope[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{min-width:22px;padding:2px 6px;border-radius:12px;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-high);font-size:11px;text-align:center}.templates-page__scope--active[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%]:after{background:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap);max-width:1600px;margin:0 auto;padding:0 20px 8px}.templates-page__search[_ngcontent-%COMP%]{flex:1;min-width:240px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:flex;align-items:center;flex:0 0 auto;gap:var(--gns3-density-space-3)}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{width:155px}.templates-page__view-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px;padding:4px 2px;border-radius:8px;background:var(--mat-sys-surface-container-high)}button.templates-page__view-button[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:8px;color:var(--mat-sys-on-surface-variant);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);--mat-icon-button-icon-size: 22px}button.templates-page__view-button--active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__main[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:20px;max-width:1600px;margin:0 auto;padding:0 20px 20px}.templates-page__loading[_ngcontent-%COMP%]{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;min-height:320px;gap:var(--gns3-density-card-gap);color:var(--mat-sys-on-surface-variant)}.templates-page__table-container[_ngcontent-%COMP%]{flex:1;min-width:0;border-radius:16px;background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;overflow-x:auto}mat-table[_ngcontent-%COMP%]{width:100%;min-width:850px}.mat-mdc-row[_ngcontent-%COMP%], .mat-row[_ngcontent-%COMP%]{height:var(--mat-table-row-item-container-height);min-height:var(--mat-table-row-item-container-height)}.mat-header-row[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%]{position:sticky;top:0;z-index:10;background:var(--mat-sys-surface-container-highest);box-shadow:inset 0 -2px var(--mat-sys-primary);--mat-sort-arrow-color: var(--mat-sys-primary)}.mat-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:13px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}mat-row[_ngcontent-%COMP%]{cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease}mat-row[_ngcontent-%COMP%]:nth-child(2n){background:color-mix(in srgb,var(--mat-sys-on-surface) 1%,transparent)}mat-row[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}mat-row.templates-page__row--selected[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}mat-cell[_ngcontent-%COMP%], mat-header-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:inherit;color:var(--mat-sys-on-surface)}.mat-column-name[_ngcontent-%COMP%]{flex:2.4;min-width:240px;justify-content:flex-start}.mat-column-template_type[_ngcontent-%COMP%]{flex:1.1;min-width:130px}.mat-column-category[_ngcontent-%COMP%]{flex:1;min-width:110px}.mat-column-compute_id[_ngcontent-%COMP%]{flex:1;min-width:105px}.mat-column-builtin[_ngcontent-%COMP%]{flex:0 0 90px;min-width:90px;justify-content:center}.mat-column-actions[_ngcontent-%COMP%]{flex:0 0 180px;min-width:180px;box-sizing:border-box;justify-content:flex-start;padding-right:24px}.templates-page__name-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-width:0;gap:var(--gns3-density-space-3)}.templates-page__name-copy[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:14px;font-weight:600}.templates-page__symbol[_ngcontent-%COMP%]{display:grid;flex:0 0 52px;width:52px;height:52px;overflow:hidden;place-items:center;border-radius:14px;color:var(--mat-sys-on-primary-container);background:color-mix(in srgb,var(--mat-sys-primary-container) 82%,var(--mat-sys-surface))}.templates-page__symbol[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:78%;height:78%;object-fit:contain;filter:drop-shadow(0 2px 4px color-mix(in srgb,var(--mat-sys-shadow) 25%,transparent))}.templates-page__symbol[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:27px;height:27px;font-size:27px}.templates-page__symbol--small[_ngcontent-%COMP%]{flex-basis:38px;width:38px;height:38px;border-radius:10px}.templates-page__symbol--small[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:21px;height:21px;font-size:21px}.templates-page__type-badge[_ngcontent-%COMP%], .templates-page__source-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;width:fit-content;padding:4px 9px;border-radius:16px;font-size:12px;font-weight:600;white-space:nowrap}.templates-page__type-badge[_ngcontent-%COMP%]{color:var(--mat-sys-secondary);background:color-mix(in srgb,var(--mat-sys-secondary) 11%,transparent)}.templates-page__type-badge--qemu[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__type-badge--docker[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container)}.templates-page__type-badge--dynamips[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary-container);background:var(--mat-sys-tertiary-container)}.templates-page__type-badge--cloud[_ngcontent-%COMP%]{color:var(--mat-sys-on-error-container);background:var(--mat-sys-error-container)}.templates-page__type-badge--vpcs[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary);background:var(--mat-sys-primary)}.templates-page__type-badge--ethernet-hub[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary);background:var(--mat-sys-secondary)}.templates-page__type-badge--ethernet-switch[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary);background:var(--mat-sys-tertiary)}.templates-page__type-badge--iou[_ngcontent-%COMP%]{color:var(--mat-sys-on-error);background:var(--mat-sys-error)}.templates-page__type-badge--nat[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-highest)}.templates-page__source-badge[_ngcontent-%COMP%]{color:var(--mat-sys-primary);background:color-mix(in srgb,var(--mat-sys-primary) 11%,transparent)}.templates-page__source-badge--builtin[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary);background:color-mix(in srgb,var(--mat-sys-tertiary) 11%,transparent)}.templates-page__table-footer[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:var(--mat-table-footer-container-height);padding:0 12px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container))}.templates-page__table-footer[_ngcontent-%COMP%] mat-paginator[_ngcontent-%COMP%]{width:100%;--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__actions-cell[_ngcontent-%COMP%], .templates-page__card-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:3px}button.templates-page__action[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-on-surface-variant);width:var(--gns3-density-control-height-sm);height:var(--gns3-density-control-height-sm);--mat-icon-button-state-layer-size: var(--gns3-density-control-height-sm);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-control-height-sm)}button.templates-page__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}button.templates-page__action[_ngcontent-%COMP%]{color:var(--template-action-color);--mat-icon-button-state-layer-color: var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:not(:disabled) mat-icon[_ngcontent-%COMP%]{color:var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:disabled mat-icon[_ngcontent-%COMP%]{color:var(--gns3-button-disabled-label-color)}button.templates-page__action--details[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--edit[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-primary)}button.templates-page__action--duplicate[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--delete[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-error)}.templates-page__grid[_ngcontent-%COMP%]{flex:1;min-width:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-content:start;gap:var(--gns3-density-card-gap)}.templates-page__grid--with-details[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__card[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column;padding:16px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;background:var(--mat-sys-surface);cursor:pointer;transition:transform var(--gns3-motion-duration-standard) ease,box-shadow var(--gns3-motion-duration-standard) ease,border-color var(--gns3-motion-duration-standard) ease}.templates-page__card[_ngcontent-%COMP%]:hover{border-color:var(--mat-sys-outline-variant);background:var(--mat-sys-surface-container-low)}.templates-page__card--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);box-shadow:0 0 0 1px var(--mat-sys-primary)}.templates-page__card-header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--gns3-density-space-3)}.templates-page__card-body[_ngcontent-%COMP%]{flex:1;min-width:0;padding:14px 0 12px}.templates-page__card-body[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{display:-webkit-box;overflow:hidden;margin:0 0 9px;color:var(--mat-sys-on-surface);font-size:17px;font-weight:650;line-height:1.35;overflow-wrap:anywhere;-webkit-box-orient:vertical;-webkit-line-clamp:2}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%]{display:grid;gap:8px;margin:16px 0 0}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{min-width:0;margin:0;overflow:hidden;color:var(--mat-sys-on-surface);font-size:13px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] .templates-page__card-tags-row[_ngcontent-%COMP%]{align-items:flex-start}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd.templates-page__card-tags[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px;overflow:visible;white-space:normal}.templates-page__card-actions[_ngcontent-%COMP%]{justify-content:flex-end;min-height:33px;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__grid-paginator[_ngcontent-%COMP%]{grid-column:1/-1;width:100%;border-radius:12px;background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container));--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__empty[_ngcontent-%COMP%]{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:230px;padding:32px;color:var(--mat-sys-on-surface-variant);text-align:center}.templates-page__empty[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{width:48px;height:48px;font-size:48px;opacity:.55}.templates-page__empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:12px 0 0;color:var(--mat-sys-on-surface);font-size:17px}.templates-page__empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:5px 0 0;font-size:14px}.templates-page__details[_ngcontent-%COMP%]{position:sticky;top:16px;flex:0 0 clamp(390px,31vw,480px);display:flex;min-height:380px;max-height:calc(100vh - 176px);flex-direction:column;overflow:hidden;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 60%,transparent);border-radius:16px;background:var(--mat-sys-surface);box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent);animation:_ngcontent-%COMP%_templates-slide-in var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard)}.templates-page__details-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:var(--gns3-density-space-3);min-height:56px;box-sizing:border-box;padding:8px 10px 8px 16px;border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 72%,var(--mat-sys-surface))}.templates-page__details-header[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-primary-container)}.templates-page__details-heading[_ngcontent-%COMP%]{display:flex;min-width:0;align-items:center;gap:var(--gns3-density-space-3)}.templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;margin:0;color:var(--mat-sys-on-primary-container);font-size:19px;font-weight:650;line-height:1.25;text-overflow:ellipsis;white-space:nowrap}.templates-page__details-title-line[_ngcontent-%COMP%]{display:flex;flex:1;min-width:0;align-items:center;gap:var(--gns3-density-space-2)}.templates-page__details-title-line[_ngcontent-%COMP%] .templates-page__type-badge[_ngcontent-%COMP%]{flex:0 0 auto}.templates-page__details-body[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:12px 20px}.templates-page__description[_ngcontent-%COMP%]{padding:10px 0 14px;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__description[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.6px;text-transform:uppercase}.templates-page__description[_ngcontent-%COMP%] app-markdown-viewer[_ngcontent-%COMP%]{display:block;margin-top:8px;padding:2px 12px;border-radius:10px;background:var(--mat-sys-surface-container-low);overflow-wrap:anywhere;--markdown-viewer-font-size: 13px;--markdown-viewer-line-height: 1.5;--markdown-viewer-heading-scale: .85}.templates-page__detail-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:22px 105px minmax(0,1fr);align-items:center;gap:var(--gns3-density-space-3);min-height:40px;box-sizing:border-box;padding:8px 0;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__detail-row[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:19px;height:19px;color:var(--mat-sys-primary);font-size:19px}.templates-page__detail-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:12px;font-weight:650;letter-spacing:.5px;text-transform:uppercase;white-space:nowrap}.templates-page__detail-row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{min-width:0;color:var(--mat-sys-on-surface);font-size:14px;font-weight:500;line-height:1.45;text-align:right;overflow-wrap:anywhere}.templates-page__detail-row--stacked[_ngcontent-%COMP%]{align-items:start}.templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__mono[_ngcontent-%COMP%], .templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__path[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-family:var(--gns3-font-code);font-size:12px;word-break:break-all}.templates-page__tags[_ngcontent-%COMP%]{border-bottom:0}.templates-page__tags[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:7px}.templates-page__tag[_ngcontent-%COMP%]{padding:5px 9px;border-radius:14px;color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container);font-size:11px;font-weight:550}.templates-page__details-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(105px,1fr));gap:var(--gns3-density-space-2);padding:14px 16px 18px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-surface-container) 72%,transparent)}button.templates-page__details-action[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-on-surface-variant);height:40px;border-radius:12px;color:var(--details-action-color);border-color:color-mix(in srgb,var(--details-action-color) 48%,transparent);font-size:13px;font-weight:500}button.templates-page__details-action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--details-action-color)}button.templates-page__details-action--edit[_ngcontent-%COMP%], button.templates-page__details-action--duplicate[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-primary)}button.templates-page__details-action--delete[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-error)}[data-density=compact][_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%]{min-height:40px;height:40px}[data-density=compact][_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%]{width:40px;height:40px;--mat-icon-button-state-layer-size: 40px}[data-density=compact][_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%]{min-height:48px;padding-block:4px}[data-density=compact][_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:18px}[data-density=compact][_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%]{padding-block:8px}[data-density=compact][_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%]{min-height:36px;padding-block:6px}[data-density=compact][_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%]{padding:12px}@keyframes _ngcontent-%COMP%_templates-slide-in{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@media(max-width:1400px){.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__main[_ngcontent-%COMP%]{flex-direction:column}.templates-page__table-container[_ngcontent-%COMP%], .templates-page__grid[_ngcontent-%COMP%], .templates-page__details[_ngcontent-%COMP%]{width:100%}.templates-page__details[_ngcontent-%COMP%]{position:static;flex-basis:auto;max-height:none}}@media(max-width:900px){.templates-page__header[_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column}.templates-page__header-actions[_ngcontent-%COMP%]{width:100%}.templates-page__toolbar[_ngcontent-%COMP%]{align-items:stretch;flex-direction:column}.templates-page__toolbar-actions[_ngcontent-%COMP%]{width:100%}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{flex:1;width:auto}}@media(max-width:640px){.templates-page__header[_ngcontent-%COMP%]{padding:20px 16px 12px}.templates-page__header-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{width:100%;padding-inline:10px}.templates-page__scopes[_ngcontent-%COMP%]{overflow-x:auto;padding-inline:16px}.templates-page__scope[_ngcontent-%COMP%]{flex:0 0 auto;padding-inline:12px}.templates-page__toolbar[_ngcontent-%COMP%], .templates-page__main[_ngcontent-%COMP%]{padding-inline:16px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__view-toggle[_ngcontent-%COMP%]{grid-column:1/-1;justify-self:end}.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.templates-page__details[_ngcontent-%COMP%]{min-width:0}}',"[_nghost-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%] mat-form-field[_ngcontent-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%]{display:block;width:100%;background:transparent}.template-edit-legacy-label[_ngcontent-%COMP%], .template-edit-legacy-control[_ngcontent-%COMP%]{display:none}[class$=__header][_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-4);max-width:1440px;margin:0 auto;padding:var(--gns3-density-space-5) var(--gns3-density-space-5) 14px}[class$=__breadcrumb][_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;margin-bottom:8px;color:var(--mat-sys-primary);font-size:14px;font-weight:600}[class$=__breadcrumb][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{min-height:28px;padding:0 4px;color:inherit;font:inherit}[class$=__breadcrumb][_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:18px;height:18px;font-size:18px;color:var(--mat-sys-on-surface-variant)}[class$=__heading-row][_ngcontent-%COMP%]{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--gns3-density-space-5);width:100%}[class$=__title][_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal;flex:1;min-width:0}[class$=__header-actions][_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-3);flex-shrink:0}[class$=__header-actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{min-height:var(--gns3-density-control-height);border-radius:var(--gns3-density-radius-md);padding:0 var(--gns3-density-space-4)}[class$=__back-btn][_ngcontent-%COMP%]{flex:0 0 auto;width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-icon-button)}[class$=__back-btn][_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}[class$=__back-btn][_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant)}[class$=__content][_ngcontent-%COMP%]{display:grid;grid-template-columns:220px minmax(0,1fr);align-items:start;column-gap:var(--gns3-density-card-gap);row-gap:var(--gns3-density-space-3);max-width:1440px;margin:0 auto;padding:0 var(--gns3-density-space-5) 32px}.template-edit-tabs[_ngcontent-%COMP%]{position:sticky;top:var(--gns3-density-app-header-height);display:flex;grid-column:1;grid-row:1/span 2;align-self:start;flex-direction:column;gap:var(--gns3-density-space-2);padding:var(--gns3-density-space-3);border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:var(--gns3-density-radius-xl);background:color-mix(in srgb,var(--mat-sys-primary-container) 18%,var(--mat-sys-surface))}.template-edit-tabs[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:flex-start;min-height:var(--gns3-density-control-height);border:0;border-radius:var(--gns3-density-radius-sm);padding:0 var(--gns3-density-space-3);color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;font-weight:600;text-align:left;cursor:pointer}.template-edit-tabs[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}.template-edit-tabs[_ngcontent-%COMP%] button.is-active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}[class$=__content][_ngcontent-%COMP%] > [class*=__form-card][_ngcontent-%COMP%]{grid-column:2;grid-row:1}[class$=__content][_ngcontent-%COMP%] > [class*=__form-card][_ngcontent-%COMP%]:not(:has(>:nth-child(2))){display:none}.vpcs-template-details__form-card[_ngcontent-%COMP%]:not(.template-edit-panel-active){display:none}[class*=__form-card][_ngcontent-%COMP%]{margin:0 0 18px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;overflow:hidden;border-radius:var(--gns3-density-radius-lg);background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none}[class$=__section-header][_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;min-height:var(--gns3-density-section-header-height);box-sizing:border-box;padding:var(--gns3-density-section-header-padding);border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 28%,var(--mat-sys-surface));cursor:default}[class$=__expand-icon][_ngcontent-%COMP%]{display:none}[class$=__section-title][_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-section-title-size);font-weight:650}[class$=__form][_ngcontent-%COMP%], .form-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-card-gap);padding:var(--gns3-density-card-padding)}.qemu-template-details__form[_ngcontent-%COMP%]{padding-inline:var(--gns3-density-card-padding)}.qemu-template-details__subsection[_ngcontent-%COMP%]{width:100%;box-sizing:border-box}.two-column-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--gns3-density-card-gap)}[class$=__field][_ngcontent-%COMP%], .form-field[_ngcontent-%COMP%]{width:100%}[class$=__actions][_ngcontent-%COMP%]{display:flex;width:100%;box-sizing:border-box;justify-content:flex-end;gap:var(--gns3-density-space-3);margin-top:0;padding:4px 0 8px}[class$=__content][_ngcontent-%COMP%] > [class$=__actions][_ngcontent-%COMP%]{grid-column:2;justify-content:flex-end}[class*=__save-btn][_ngcontent-%COMP%], [class*=__cancel-btn][_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing)}button[class*=__save-btn].mat-mdc-raised-button[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-primary);background-color:var(--mat-sys-primary);--mat-button-protected-label-text-color: var(--mat-sys-on-primary);--mat-button-protected-container-color: var(--mat-sys-primary);--mat-button-protected-state-layer-color: var(--mat-sys-on-primary)}button[class*=__cancel-btn].mat-mdc-button[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-surface);border-color:var(--mat-sys-outline);--mat-button-outlined-label-text-color: var(--mat-sys-on-surface);--mat-button-outlined-state-layer-color: var(--mat-sys-on-surface)}button[class*=__cancel-btn].mat-mdc-button[_ngcontent-%COMP%]{border:1px solid var(--mat-sys-outline)}button[class*=__config-btn][_ngcontent-%COMP%], button.docker-details__extra-config-btn[_ngcontent-%COMP%], .udp-tunnels__add-btn[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing);width:fit-content;max-width:100%;align-self:center;border-radius:var(--mat-sys-corner-full, 999px)}.preferences__usage-form[_ngcontent-%COMP%]{width:100%;box-sizing:border-box;padding:var(--gns3-density-card-padding)}.preferences__usage-field--full[_ngcontent-%COMP%]{display:block;width:100%}.preferences__usage-field--full[_ngcontent-%COMP%] textarea.mat-mdc-input-element[_ngcontent-%COMP%]{width:100%;min-height:140px;box-sizing:border-box;resize:vertical}[class$=__form][_ngcontent-%COMP%] [class*=__file-row][_ngcontent-%COMP%]{padding:0}[class*=__file-row][_ngcontent-%COMP%]{align-items:flex-start}[class$=__symbol-row][_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:var(--gns3-density-card-gap)}[class$=__symbol-row][_ngcontent-%COMP%] [class*=__symbol-btn][_ngcontent-%COMP%], [class$=__symbol-row][_ngcontent-%COMP%] [class*=__action-btn][_ngcontent-%COMP%], [class*=__file-row][_ngcontent-%COMP%] > button[class*=__browse-btn][_ngcontent-%COMP%], .docker-details__image-row[_ngcontent-%COMP%] > button.docker-details__pull-btn[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing);border-radius:var(--mat-sys-corner-full, 999px);width:fit-content;max-width:100%;flex:0 0 auto;align-self:flex-start;margin-top:var(--template-field-action-offset, calc((var(--gns3-density-form-field-height) - var(--gns3-density-control-height)) / 2))}[data-density=compact][_nghost-%COMP%] [class$=__heading-row][_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] [class$=__heading-row][_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column;gap:var(--gns3-density-space-3)}[data-density=compact][_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%]{width:100%}[data-density=compact][_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] [class$=__header-actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex:1}@media(max-width:768px){[class$=__symbol-row][_ngcontent-%COMP%], [class*=__file-row][_ngcontent-%COMP%], .docker-details__image-row[_ngcontent-%COMP%]{--template-field-action-offset: 0px}}@media(max-width:760px){[class$=__header][_ngcontent-%COMP%]{padding-inline:16px}[class$=__content][_ngcontent-%COMP%]{padding-inline:16px;grid-template-columns:1fr}.template-edit-tabs[_ngcontent-%COMP%]{position:static;grid-column:1;grid-row:auto;flex-direction:row;overflow-x:auto}.template-edit-tabs[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex:0 0 auto}[class$=__content][_ngcontent-%COMP%] > [class*=__form-card][_ngcontent-%COMP%]{grid-column:1;grid-row:auto}.two-column-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}[class$=__symbol-row][_ngcontent-%COMP%]{flex-direction:column}[class$=__actions][_ngcontent-%COMP%]{flex-direction:row;align-items:center;justify-content:flex-end}[class$=__actions][_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:auto}[class$=__content][_ngcontent-%COMP%] > [class$=__actions][_ngcontent-%COMP%]{grid-column:1}.preferences__usage-form[_ngcontent-%COMP%]{padding:16px}[class*=__save-btn][_ngcontent-%COMP%], [class*=__cancel-btn][_ngcontent-%COMP%]{width:auto}}"],changeDetection:0})}return n})();var sr=(()=>{class n{settings={crash_reports:!0,console_command:void 0,anonymous_statistics:!0};reportsSettings="crash_reports";consoleSettings="console_command";statisticsSettings="statistics_command";constructor(){this.getItem(this.reportsSettings)&&(this.settings.crash_reports=this.getItem(this.reportsSettings)==="true"),this.getItem(this.consoleSettings)&&(this.settings.console_command=this.getItem(this.consoleSettings)),this.getItem(this.statisticsSettings)&&(this.settings.anonymous_statistics=this.getItem(this.statisticsSettings)==="true")}setReportsSettings(e){this.settings.crash_reports=e,this.removeItem(this.reportsSettings),e?this.setItem(this.reportsSettings,"true"):this.setItem(this.reportsSettings,"false")}setStatisticsSettings(e){this.settings.anonymous_statistics=e,this.removeItem(this.statisticsSettings),e?this.setItem(this.statisticsSettings,"true"):this.setItem(this.statisticsSettings,"false")}getReportsSettings(){return this.getItem(this.reportsSettings)==="true"}getStatisticsSettings(){return this.getItem(this.statisticsSettings)==="true"}setConsoleSettings(e){this.settings.console_command=e,this.removeItem(this.consoleSettings),this.setItem(this.consoleSettings,e)}getConsoleSettings(){return this.getItem(this.consoleSettings)}removeItem(e){localStorage.removeItem(e)}setItem(e,t){localStorage.setItem(e,t)}getItem(e){return localStorage.getItem(e)}getAll(){return this.settings}setAll(e){this.settings=e,this.setConsoleSettings(e.console_command),this.setReportsSettings(e.crash_reports),this.setStatisticsSettings(e.anonymous_statistics)}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var ep=(()=>{class n{controllerId;projectId;controllerIdProjectList;setcontrollerId(e){this.controllerId=e}setProjectId(e){this.projectId=e}setcontrollerIdProjectList(e){this.controllerIdProjectList=e}getcontrollerId(){return this.controllerId}getProjectId(){return this.projectId}getcontrollerIdProjectList(){return this.controllerIdProjectList}removeData(){this.controllerId="",this.projectId=""}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Ti=(()=>{class n{httpController;settingsService;recentlyOpenedProjectService;compression_methods=[{id:1,value:"none",name:"None"},{id:2,value:"zip",name:"Zip compression (deflate)"},{id:3,value:"bzip2",name:"Bzip2 compression"},{id:4,value:"lzma",name:"Lzma compression"},{id:5,value:"zstd",name:"Zstandard compression"}];compression_level_default_value=[{id:1,name:"none",value:"",selectionValues:[]},{id:2,name:"zip",value:6,selectionValues:[0,1,2,3,4,5,6,7,8,9]},{id:3,name:"bzip2",value:9,selectionValues:[1,2,3,4,5,6,7,8,9]},{id:4,name:"lzma",value:" ",selectionValues:[]},{id:5,name:"zstd",value:3,selectionValues:[1,2,3,4,5,6,7,8,9.1,11,12,13,14,15,16,17,18,19,20,21,22]}];projectListSubject=new Ye;projectLockIconSubject=new Ye;constructor(e,t,i){this.httpController=e,this.settingsService=t,this.recentlyOpenedProjectService=i}projectListUpdated(){this.projectListSubject.next(!0)}getReadmeFile(e,t){return this.httpController.getText(e,`/projects/${t}/files/README.txt`)}postReadmeFile(e,t,i){return this.httpController.post(e,`/projects/${t}/files/README.txt`,i)}get(e,t){return this.httpController.get(e,`/projects/${t}`)}open(e,t){return this.httpController.post(e,`/projects/${t}/open`,{})}close(e,t){return this.recentlyOpenedProjectService.removeData(),this.httpController.post(e,`/projects/${t}/close`,{})}list(e){return this.httpController.get(e,"/projects")}nodes(e,t){return this.httpController.get(e,`/projects/${t}/nodes`)}links(e,t){return this.httpController.get(e,`/projects/${t}/links`)}drawings(e,t){return this.httpController.get(e,`/projects/${t}/drawings`)}gns3file(e,t){return this.httpController.get(e,`/projects/${t}/gns3file`,{headers:{"Cache-Control":"no-cache"}})}add(e,t,i){return this.httpController.post(e,"/projects",{name:t,project_id:i})}update(e,t){return this.httpController.put(e,`/projects/${t.project_id}`,{auto_close:t.auto_close,auto_open:t.auto_open,auto_start:t.auto_start,drawing_grid_size:t.drawing_grid_size,grid_size:t.grid_size,name:t.name,scene_width:t.scene_width,scene_height:t.scene_height,snap_to_grid:t.snap_to_grid,show_grid:t.show_grid,show_interface_labels:t.show_interface_labels,show_layers:t.show_layers,variables:t.variables,zoom:t.zoom})}delete(e,t){return this.httpController.delete(e,`/projects/${t}`)}getUploadPath(e,t,i){return`${e.protocol}//${e.host}:${e.port}/${zi.current_version}/projects/${t}/import?name=${i}`}getExportPath(e,t){return`${e.protocol}//${e.host}:${e.port}/${zi.current_version}/projects/${t.project_id}/export`}export(e,t){return this.httpController.get(e,`/projects/${t}/export`)}getStatistics(e,t){return this.httpController.get(e,`/projects/${t}/stats`)}duplicate(e,t,i){return this.httpController.post(e,`/projects/${t}/duplicate`,{name:i})}isReadOnly(e){return e.readonly?e.readonly:!1}getCompression(){return this.compression_methods}getCompressionLevel(){return this.compression_level_default_value}getexportPortableProjectPath(e,t,i={}){return i.compression_level!=null&&i.compression_level!=""?`${e.protocol}//${e.host}:${e.port}/${zi.current_version}/projects/${t}/export?include_snapshots=${i.include_snapshots}&include_images=${i.include_base_image}&reset_mac_addresses=${i.reset_mac_address}&compression=${i.compression}&compression_level=${i.compression_level}&token=${e.authToken}`:`${e.protocol}//${e.host}:${e.port}/${zi.current_version}/projects/${t}/export?include_snapshots=${i.include_snapshots}&include_images=${i.include_base_image}&reset_mac_addresses=${i.reset_mac_address}&compression=${i.compression}&token=${e.authToken}`}getProjectStatus(e,t){return this.get(e,`${t}/locked`)}projectUpdateLockIcon(){this.projectLockIconSubject.next(!0)}static \u0275fac=function(t){return new(t||n)(_e(sn),_e(sr),_e(ep))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Ige=(n,o)=>o==null?null:o.name;function Age(n,o){if(n&1&&(r(0,"mat-option",8),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e==null?null:e.name)}}function Nge(n,o){if(n&1&&(r(0,"mat-option",8),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function Fge(n,o){if(n&1){let e=R();r(0,"form",1),_("ngSubmit",function(){y(e);let i=h();return w(i.export_project_form.valid&&i.exportPortableProject())}),r(1,"h1",2)(2,"span"),c(3,"Export project"),l(),r(4,"button",3),_("click",function(){y(e);let i=h();return w(i.dialogRef.close())}),r(5,"mat-icon"),c(6,"close"),l()()(),r(7,"div",4)(8,"div",5)(9,"mat-form-field",6)(10,"mat-label"),c(11,"Compression"),l(),r(12,"mat-select",7),_("selectionChange",function(i){y(e);let a=h();return w(a.selectCompression(i))}),Q(13,Age,2,2,"mat-option",8,Ige),l()(),r(15,"mat-form-field",6)(16,"mat-label"),c(17,"Compression level"),l(),r(18,"mat-select",9),Q(19,Nge,2,2,"mat-option",8,Oe),l()()(),r(21,"div",10)(22,"mat-checkbox",11),c(23,"Include base images"),l(),r(24,"mat-checkbox",12),c(25,"Include snapshots"),l(),r(26,"mat-checkbox",13),c(27,"Reset MAC addresses"),l()()(),r(28,"div",14)(29,"button",15),_("click",function(){y(e);let i=h();return w(i.dialogRef.close())}),c(30,"Cancel"),l(),r(31,"button",16),c(32,"Export"),l()()()}if(n&2){let e=h();v("formGroup",e.export_project_form),m(13),K(e.compression_methods),m(6),K(e.compression_filter_value),m(12),v("disabled",e.isExport())}}var kh=(()=>{class n{data;export_project_form;chosenImage="";compression_methods=[];compression_level=[];compression_filter_value=[];controller;project;index=4;fileName;isExport=z(!1);dialogRef=f(We);projectService=f(Ti);_fb=f(Ai);destroyRef=f(Va);constructor(e){this.data=e,this.controller=e.controllerDetails,this.project=e.projectDetails,this.project&&(this.fileName=this.project.name+".gns3project")}ngOnInit(){this.formControls(),this.compression_methods=this.projectService.getCompression(),this.compression_level=this.projectService.getCompressionLevel(),this.selectCompression({value:this.compression_methods[this.index]}),this.export_project_form.get("compression").setValue(this.compression_methods[this.index])}formControls(){this.export_project_form=this._fb.group({compression:["",Ue.required],compression_level:[""],include_base_image:[!1,Ue.required],include_snapshots:[!1,Ue.required],reset_mac_address:[!1,Ue.required]})}selectCompression(e){let t=this.compression_level.find(i=>e.value.value===i.name);t&&(this.export_project_form.get("compression_level").setValue(t.value),this.compression_filter_value=t.selectionValues)}exportPortableProject(){this.isExport.set(!0);let e=this.export_project_form.value,t=typeof e.compression=="object"?e.compression.value:e.compression,i=ze(q({},e),{compression:t??"zstd"});window.location.assign(this.projectService.getexportPortableProjectPath(this.controller,this.project.project_id,i)),this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)(Mt(Wt))};static \u0275cmp=V({type:n,selectors:[["app-export-portable-project"]],decls:1,vars:1,consts:[[1,"export-portable-project__form",3,"formGroup"],[1,"export-portable-project__form",3,"ngSubmit","formGroup"],["mat-dialog-title",""],["mat-icon-button","","type","button",1,"export-portable-project__close-btn",3,"click"],["mat-dialog-content",""],[1,"export-portable-project__settings"],["subscriptSizing","dynamic"],["formControlName","compression","required","",3,"selectionChange"],[3,"value"],["formControlName","compression_level"],[1,"export-portable-project__options"],["formControlName","include_base_image"],["formControlName","include_snapshots"],["formControlName","reset_mac_address"],["mat-dialog-actions",""],["mat-button","","type","button",3,"click"],["mat-raised-button","","color","primary","type","submit","cdkFocusInitial","",3,"disabled"]],template:function(t,i){t&1&&T(0,Fge,33,2,"form",0),t&2&&E(i.export_project_form?0:-1)},dependencies:[fe,It,Ct,Nt,vt,dl,Ut,Yt,ke,qe,Qe,bt,Y,he,Be,ie,ce,we,Pe,Ve,ye,ot,ct,nt,Rt,Gt],styles:["[_nghost-%COMP%]{display:block}.export-portable-project__form[_ngcontent-%COMP%]{display:flex;min-height:0;flex-direction:column}.export-portable-project__close-btn[_ngcontent-%COMP%]{margin-left:auto;flex-shrink:0}.export-portable-project__settings[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.export-portable-project__options[_ngcontent-%COMP%]{display:flex;margin-top:16px;flex-direction:column;gap:8px}html[data-density=compact][_nghost-%COMP%] .export-portable-project__options[_ngcontent-%COMP%], html[data-density=compact] [_nghost-%COMP%] .export-portable-project__options[_ngcontent-%COMP%]{margin-top:12px;gap:4px}@media(max-width:600px){.export-portable-project__settings[_ngcontent-%COMP%]{grid-template-columns:1fr}}"],changeDetection:0})}return n})();var im=Jl(Jz());var xy="http://www.w3.org/1999/xhtml",QE={svg:"http://www.w3.org/2000/svg",xhtml:xy,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function Ud(n){var o=n+="",e=o.indexOf(":");return e>=0&&(o=n.slice(0,e))!=="xmlns"&&(n=n.slice(e+1)),QE.hasOwnProperty(o)?{space:QE[o],local:n}:n}function Rge(n){return function(){var o=this.ownerDocument,e=this.namespaceURI;return e===xy&&o.documentElement.namespaceURI===xy?o.createElement(n):o.createElementNS(e,n)}}function zge(n){return function(){return this.ownerDocument.createElementNS(n.space,n.local)}}function yy(n){var o=Ud(n);return(o.local?zge:Rge)(o)}function Lge(){}function Du(n){return n==null?Lge:function(){return this.querySelector(n)}}function eL(n){typeof n!="function"&&(n=Du(n));for(var o=this._groups,e=o.length,t=new Array(e),i=0;i<e;++i)for(var a=o[i],s=a.length,d=t[i]=new Array(s),p,u,g=0;g<s;++g)(p=a[g])&&(u=n.call(p,p.__data__,g,a))&&("__data__"in p&&(u.__data__=p.__data__),d[g]=u);return new va(t,this._parents)}function KE(n){return n==null?[]:Array.isArray(n)?n:Array.from(n)}function Vge(){return[]}function vv(n){return n==null?Vge:function(){return this.querySelectorAll(n)}}function Bge(n){return function(){return KE(n.apply(this,arguments))}}function tL(n){typeof n=="function"?n=Bge(n):n=vv(n);for(var o=this._groups,e=o.length,t=[],i=[],a=0;a<e;++a)for(var s=o[a],d=s.length,p,u=0;u<d;++u)(p=s[u])&&(t.push(n.call(p,p.__data__,u,s)),i.push(p));return new va(t,i)}function Cv(n){return function(){return this.matches(n)}}function wy(n){return function(o){return o.matches(n)}}var jge=Array.prototype.find;function $ge(n){return function(){return jge.call(this.children,n)}}function Hge(){return this.firstElementChild}function nL(n){return this.select(n==null?Hge:$ge(typeof n=="function"?n:wy(n)))}var Uge=Array.prototype.filter;function Wge(){return Array.from(this.children)}function Gge(n){return function(){return Uge.call(this.children,n)}}function iL(n){return this.selectAll(n==null?Wge:Gge(typeof n=="function"?n:wy(n)))}function oL(n){typeof n!="function"&&(n=Cv(n));for(var o=this._groups,e=o.length,t=new Array(e),i=0;i<e;++i)for(var a=o[i],s=a.length,d=t[i]=[],p,u=0;u<s;++u)(p=a[u])&&n.call(p,p.__data__,u,a)&&d.push(p);return new va(t,this._parents)}function My(n){return new Array(n.length)}function aL(){return new va(this._enter||this._groups.map(My),this._parents)}function bv(n,o){this.ownerDocument=n.ownerDocument,this.namespaceURI=n.namespaceURI,this._next=null,this._parent=n,this.__data__=o}bv.prototype={constructor:bv,appendChild:function(n){return this._parent.insertBefore(n,this._next)},insertBefore:function(n,o){return this._parent.insertBefore(n,o)},querySelector:function(n){return this._parent.querySelector(n)},querySelectorAll:function(n){return this._parent.querySelectorAll(n)}};function rL(n){return function(){return n}}function qge(n,o,e,t,i,a){for(var s=0,d,p=o.length,u=a.length;s<u;++s)(d=o[s])?(d.__data__=a[s],t[s]=d):e[s]=new bv(n,a[s]);for(;s<p;++s)(d=o[s])&&(i[s]=d)}function Qge(n,o,e,t,i,a,s){var d,p,u=new Map,g=o.length,C=a.length,M=new Array(g),x;for(d=0;d<g;++d)(p=o[d])&&(M[d]=x=s.call(p,p.__data__,d,o)+"",u.has(x)?i[d]=p:u.set(x,p));for(d=0;d<C;++d)x=s.call(n,a[d],d,a)+"",(p=u.get(x))?(t[d]=p,p.__data__=a[d],u.delete(x)):e[d]=new bv(n,a[d]);for(d=0;d<g;++d)(p=o[d])&&u.get(M[d])===p&&(i[d]=p)}function Kge(n){return n.__data__}function sL(n,o){if(!arguments.length)return Array.from(this,Kge);var e=o?Qge:qge,t=this._parents,i=this._groups;typeof n!="function"&&(n=rL(n));for(var a=i.length,s=new Array(a),d=new Array(a),p=new Array(a),u=0;u<a;++u){var g=t[u],C=i[u],M=C.length,x=Xge(n.call(g,g&&g.__data__,u,t)),b=x.length,P=d[u]=new Array(b),k=s[u]=new Array(b),S=p[u]=new Array(M);e(g,C,P,k,S,x,o);for(var O=0,A=0,D,F;O<b;++O)if(D=P[O]){for(O>=A&&(A=O+1);!(F=k[A])&&++A<b;);D._next=F||null}}return s=new va(s,t),s._enter=d,s._exit=p,s}function Xge(n){return typeof n=="object"&&"length"in n?n:Array.from(n)}function lL(){return new va(this._exit||this._groups.map(My),this._parents)}function cL(n,o,e){var t=this.enter(),i=this,a=this.exit();return typeof n=="function"?(t=n(t),t&&(t=t.selection())):t=t.append(n+""),o!=null&&(i=o(i),i&&(i=i.selection())),e==null?a.remove():e(a),t&&i?t.merge(i).order():i}function dL(n){for(var o=n.selection?n.selection():n,e=this._groups,t=o._groups,i=e.length,a=t.length,s=Math.min(i,a),d=new Array(i),p=0;p<s;++p)for(var u=e[p],g=t[p],C=u.length,M=d[p]=new Array(C),x,b=0;b<C;++b)(x=u[b]||g[b])&&(M[b]=x);for(;p<i;++p)d[p]=e[p];return new va(d,this._parents)}function mL(){for(var n=this._groups,o=-1,e=n.length;++o<e;)for(var t=n[o],i=t.length-1,a=t[i],s;--i>=0;)(s=t[i])&&(a&&s.compareDocumentPosition(a)^4&&a.parentNode.insertBefore(s,a),a=s);return this}function pL(n){n||(n=Yge);function o(C,M){return C&&M?n(C.__data__,M.__data__):!C-!M}for(var e=this._groups,t=e.length,i=new Array(t),a=0;a<t;++a){for(var s=e[a],d=s.length,p=i[a]=new Array(d),u,g=0;g<d;++g)(u=s[g])&&(p[g]=u);p.sort(o)}return new va(i,this._parents).order()}function Yge(n,o){return n<o?-1:n>o?1:n>=o?0:NaN}function uL(){var n=arguments[0];return arguments[0]=this,n.apply(null,arguments),this}function gL(){return Array.from(this)}function hL(){for(var n=this._groups,o=0,e=n.length;o<e;++o)for(var t=n[o],i=0,a=t.length;i<a;++i){var s=t[i];if(s)return s}return null}function _L(){let n=0;for(let o of this)++n;return n}function fL(){return!this.node()}function vL(n){for(var o=this._groups,e=0,t=o.length;e<t;++e)for(var i=o[e],a=0,s=i.length,d;a<s;++a)(d=i[a])&&n.call(d,d.__data__,a,i);return this}function Zge(n){return function(){this.removeAttribute(n)}}function Jge(n){return function(){this.removeAttributeNS(n.space,n.local)}}function ehe(n,o){return function(){this.setAttribute(n,o)}}function the(n,o){return function(){this.setAttributeNS(n.space,n.local,o)}}function nhe(n,o){return function(){var e=o.apply(this,arguments);e==null?this.removeAttribute(n):this.setAttribute(n,e)}}function ihe(n,o){return function(){var e=o.apply(this,arguments);e==null?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}}function CL(n,o){var e=Ud(n);if(arguments.length<2){var t=this.node();return e.local?t.getAttributeNS(e.space,e.local):t.getAttribute(e)}return this.each((o==null?e.local?Jge:Zge:typeof o=="function"?e.local?ihe:nhe:e.local?the:ehe)(e,o))}function Sy(n){return n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView}function ohe(n){return function(){this.style.removeProperty(n)}}function ahe(n,o,e){return function(){this.style.setProperty(n,o,e)}}function rhe(n,o,e){return function(){var t=o.apply(this,arguments);t==null?this.style.removeProperty(n):this.style.setProperty(n,t,e)}}function bL(n,o,e){return arguments.length>1?this.each((o==null?ohe:typeof o=="function"?rhe:ahe)(n,o,e??"")):tp(this.node(),n)}function tp(n,o){return n.style.getPropertyValue(o)||Sy(n).getComputedStyle(n,null).getPropertyValue(o)}function she(n){return function(){delete this[n]}}function lhe(n,o){return function(){this[n]=o}}function che(n,o){return function(){var e=o.apply(this,arguments);e==null?delete this[n]:this[n]=e}}function xL(n,o){return arguments.length>1?this.each((o==null?she:typeof o=="function"?che:lhe)(n,o)):this.node()[n]}function yL(n){return n.trim().split(/^|\s+/)}function XE(n){return n.classList||new wL(n)}function wL(n){this._node=n,this._names=yL(n.getAttribute("class")||"")}wL.prototype={add:function(n){var o=this._names.indexOf(n);o<0&&(this._names.push(n),this._node.setAttribute("class",this._names.join(" ")))},remove:function(n){var o=this._names.indexOf(n);o>=0&&(this._names.splice(o,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(n){return this._names.indexOf(n)>=0}};function ML(n,o){for(var e=XE(n),t=-1,i=o.length;++t<i;)e.add(o[t])}function SL(n,o){for(var e=XE(n),t=-1,i=o.length;++t<i;)e.remove(o[t])}function dhe(n){return function(){ML(this,n)}}function mhe(n){return function(){SL(this,n)}}function phe(n,o){return function(){(o.apply(this,arguments)?ML:SL)(this,n)}}function kL(n,o){var e=yL(n+"");if(arguments.length<2){for(var t=XE(this.node()),i=-1,a=e.length;++i<a;)if(!t.contains(e[i]))return!1;return!0}return this.each((typeof o=="function"?phe:o?dhe:mhe)(e,o))}function uhe(){this.textContent=""}function ghe(n){return function(){this.textContent=n}}function hhe(n){return function(){var o=n.apply(this,arguments);this.textContent=o??""}}function PL(n){return arguments.length?this.each(n==null?uhe:(typeof n=="function"?hhe:ghe)(n)):this.node().textContent}function _he(){this.innerHTML=""}function fhe(n){return function(){this.innerHTML=n}}function vhe(n){return function(){var o=n.apply(this,arguments);this.innerHTML=o??""}}function TL(n){return arguments.length?this.each(n==null?_he:(typeof n=="function"?vhe:fhe)(n)):this.node().innerHTML}function Che(){this.nextSibling&&this.parentNode.appendChild(this)}function EL(){return this.each(Che)}function bhe(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function OL(){return this.each(bhe)}function DL(n){var o=typeof n=="function"?n:yy(n);return this.select(function(){return this.appendChild(o.apply(this,arguments))})}function xhe(){return null}function IL(n,o){var e=typeof n=="function"?n:yy(n),t=o==null?xhe:typeof o=="function"?o:Du(o);return this.select(function(){return this.insertBefore(e.apply(this,arguments),t.apply(this,arguments)||null)})}function yhe(){var n=this.parentNode;n&&n.removeChild(this)}function AL(){return this.each(yhe)}function whe(){var n=this.cloneNode(!1),o=this.parentNode;return o?o.insertBefore(n,this.nextSibling):n}function Mhe(){var n=this.cloneNode(!0),o=this.parentNode;return o?o.insertBefore(n,this.nextSibling):n}function NL(n){return this.select(n?Mhe:whe)}function FL(n){return arguments.length?this.property("__data__",n):this.node().__data__}function She(n){return function(o){n.call(this,o,this.__data__)}}function khe(n){return n.trim().split(/^|\s+/).map(function(o){var e="",t=o.indexOf(".");return t>=0&&(e=o.slice(t+1),o=o.slice(0,t)),{type:o,name:e}})}function Phe(n){return function(){var o=this.__on;if(o){for(var e=0,t=-1,i=o.length,a;e<i;++e)a=o[e],(!n.type||a.type===n.type)&&a.name===n.name?this.removeEventListener(a.type,a.listener,a.options):o[++t]=a;++t?o.length=t:delete this.__on}}}function The(n,o,e){return function(){var t=this.__on,i,a=She(o);if(t){for(var s=0,d=t.length;s<d;++s)if((i=t[s]).type===n.type&&i.name===n.name){this.removeEventListener(i.type,i.listener,i.options),this.addEventListener(i.type,i.listener=a,i.options=e),i.value=o;return}}this.addEventListener(n.type,a,e),i={type:n.type,name:n.name,value:o,listener:a,options:e},t?t.push(i):this.__on=[i]}}function RL(n,o,e){var t=khe(n+""),i,a=t.length,s;if(arguments.length<2){var d=this.node().__on;if(d){for(var p=0,u=d.length,g;p<u;++p)for(i=0,g=d[p];i<a;++i)if((s=t[i]).type===g.type&&s.name===g.name)return g.value}return}for(d=o?The:Phe,i=0;i<a;++i)this.each(d(t[i],o,e));return this}function zL(n,o,e){var t=Sy(n),i=t.CustomEvent;typeof i=="function"?i=new i(o,e):(i=t.document.createEvent("Event"),e?(i.initEvent(o,e.bubbles,e.cancelable),i.detail=e.detail):i.initEvent(o,!1,!1)),n.dispatchEvent(i)}function Ehe(n,o){return function(){return zL(this,n,o)}}function Ohe(n,o){return function(){return zL(this,n,o.apply(this,arguments))}}function LL(n,o){return this.each((typeof o=="function"?Ohe:Ehe)(n,o))}function*VL(){for(var n=this._groups,o=0,e=n.length;o<e;++o)for(var t=n[o],i=0,a=t.length,s;i<a;++i)(s=t[i])&&(yield s)}var YE=[null];function va(n,o){this._groups=n,this._parents=o}function BL(){return new va([[document.documentElement]],YE)}function Dhe(){return this}va.prototype=BL.prototype={constructor:va,select:eL,selectAll:tL,selectChild:nL,selectChildren:iL,filter:oL,data:sL,enter:aL,exit:lL,join:cL,merge:dL,selection:Dhe,order:mL,sort:pL,call:uL,nodes:gL,node:hL,size:_L,empty:fL,each:vL,attr:CL,style:bL,property:xL,classed:kL,text:PL,html:TL,raise:EL,lower:OL,append:DL,insert:IL,remove:AL,clone:NL,datum:FL,on:RL,dispatch:LL,[Symbol.iterator]:VL};var Wd=BL;function Lt(n){return typeof n=="string"?new va([[document.querySelector(n)]],[document.documentElement]):new va([[n]],YE)}function jL(n){let o;for(;o=n.sourceEvent;)n=o;return n}function Na(n,o){if(n=jL(n),o===void 0&&(o=n.currentTarget),o){var e=o.ownerSVGElement||o;if(e.createSVGPoint){var t=e.createSVGPoint();return t.x=n.clientX,t.y=n.clientY,t=t.matrixTransform(o.getScreenCTM().inverse()),[t.x,t.y]}if(o.getBoundingClientRect){var i=o.getBoundingClientRect();return[n.clientX-i.left-o.clientLeft,n.clientY-i.top-o.clientTop]}}return[n.pageX,n.pageY]}var np=class{x;y;constructor(o,e){this.x=o,this.y=e}};var Gd=class{width;height;constructor(o,e){this.width=o,this.height=e}};var ZE=class{x;y;k;constructor(o,e,t){this.x=o,this.y=e,this.k=t}},zo=(()=>{class n{transformation;size;centerZeroZeroPoint=!0;centerX=null;centerY=null;constructor(){this.size=new Gd(0,0),this.transformation=new ZE(0,0,1)}getZeroZeroTransformationPoint(){return this.centerZeroZeroPoint?new np(this.centerX!==null?this.centerX:this.size.width/2,this.centerY!==null?this.centerY:this.size.height/2):new np(0,0)}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var br=(()=>{class n{context;static MIN_SCALE=.01;static MAX_SCALE=5;currentScale;scaleChangeEmitter=new be;constructor(e){this.context=e,this.currentScale=1}getScale(){return this.currentScale}setScale(e){this.currentScale=e,this.context.transformation.k=this.currentScale,this.scaleChangeEmitter.emit(this.currentScale)}resetToDefault(){this.currentScale=1,this.context.transformation.x=0,this.context.transformation.y=0,this.context.transformation.k=this.currentScale,this.scaleChangeEmitter.emit(this.currentScale)}resetScaleState(){this.currentScale=1}static \u0275fac=function(t){return new(t||n)(_e(zo))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Ll=(()=>{class n{isSelectionToolActivated=new Ye;isMovingToolActivated=new Ye;isTextEditingToolActivated=new Ye;isTextAddingToolActivated=new Ye;isDrawLinkToolActivated=new Ye;constructor(){}selectionToolActivation(e){this.isSelectionToolActivated.next(e)}movingToolActivation(e){this.isMovingToolActivated.next(e)}textEditingToolActivation(e){this.isTextEditingToolActivated.next(e)}textAddingToolActivation(e){this.isTextAddingToolActivated.next(e)}drawLinkToolActivation(e){this.isDrawLinkToolActivated.next(e)}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();function qd(){return{additions:{nodes:[],links:[],drawings:[]},updates:new Map,removals:{nodes:[],links:[],drawings:[]}}}function ky(n,...o){for(let e of o){n.additions.nodes.push(...e.additions.nodes),n.additions.links.push(...e.additions.links),n.additions.drawings.push(...e.additions.drawings),n.removals.nodes.push(...e.removals.nodes),n.removals.links.push(...e.removals.links),n.removals.drawings.push(...e.removals.drawings);for(let[t,i]of e.updates){let a=n.updates.get(t);if(a)for(let s of i)a.includes(s)||a.push(s);else n.updates.set(t,[...i])}}return n}function $L(n){return n.additions.nodes.length===0&&n.additions.links.length===0&&n.additions.drawings.length===0&&n.removals.nodes.length===0&&n.removals.links.length===0&&n.removals.drawings.length===0&&n.updates.size===0}function HL(n){let o=`${n.x}|${n.y}`,e=`${n.z}`,t=`${n.symbol}|${n.symbol_url}|${n.width}|${n.height}|${n.status}|${n.locked}|${n.name}|${n.missing_image===!0}|${JSON.stringify(n.missing_images)}`,i=JSON.stringify(n.label),a=JSON.stringify(n.ports),s=`${n.node_type}|${n.first_port_name}|${n.port_name_format}|${n.port_segment_size}`;return{all:`${n.node_id}|${o}|${e}|${t}|${i}|${a}|${s}`,groups:{xY:o,z:e,visual:t,label:i,ports:a,type:s}}}function UL(n){let o=JSON.stringify(n.nodes),e=`${n.capturing}|${n.suspend}|${n.show_filters_icon}|${n.wireshark}|${n.link_type}|${JSON.stringify(n.filters)}|${JSON.stringify(n.link_style)}|${JSON.stringify(n.interface_statuses)}`;return{all:`${n.link_id}|${o}|${e}`,groups:{nodes:o,visual:e}}}function WL(n){let o=`${n.x}|${n.y}`,e=`${n.z}`,t=`${n.rotation}|${n.locked}|${n.svg}`;return{all:`${n.drawing_id}|${o}|${e}|${t}`,groups:{xY:o,z:e,visual:t}}}function Py(n,o){if(!n)return Object.keys(o);let e=[];for(let t of Object.keys(n))n[t]!==o[t]&&e.push(t);return e}function qL(n,o,e,t){if(o.additions.nodes.length>0||o.removals.nodes.length>0||o.additions.links.length>0||o.removals.links.length>0||o.additions.drawings.length>0||o.removals.drawings.length>0)return!0;if(o.updates.size===0)return!1;let i=new Map(e.getNodes().map(d=>[d.id,d])),a=new Map(e.getDrawings().map(d=>[d.id,d])),s=!1;for(let[d,p]of o.updates){if(p.length===1&&p[0]==="xY"){let g=i.get(d);if(g){let M=g.width?0:-30;n.select(`g.node[node_id="${GL(d)}"]`).select("g.node_body").attr("transform",`translate(${g.x+M}, ${g.y+M})`);continue}let C=a.get(d);if(C){n.select(`g.drawing[drawing_id="${GL(d)}"]`).select("g.drawing_body").attr("transform",`translate(${C.x}, ${C.y}) rotate(${C.rotation})`);continue}}s=!0}return s}function GL(n){return n.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}var Ty=(()=>{class n{getOptimalSize(e,t){let i=document.documentElement.clientWidth,a=document.documentElement.clientHeight;return e>i&&(i=e),t>a&&(a=t),new Gd(i,a)}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Th=class extends hm{getItemKey(o){return o.id}},ip=(()=>{class n extends Th{static \u0275fac=(()=>{let e;return function(i){return(e||(e=yi(n)))(i||n)}})();static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})(),Fs=(()=>{class n extends Th{static \u0275fac=(()=>{let e;return function(i){return(e||(e=yi(n)))(i||n)}})();static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})(),Eh=(()=>{class n extends Th{static \u0275fac=(()=>{let e;return function(i){return(e||(e=yi(n)))(i||n)}})();static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})(),Oh=(()=>{class n extends Th{static \u0275fac=(()=>{let e;return function(i){return(e||(e=yi(n)))(i||n)}})();static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var cs=class{id;aux;auxType;commandLine;computeId;console;consoleHost;consoleType;firstPortName;height;label;locked;name;nodeDirectory;nodeType;portNameFormat;portSegmentSize;ports;properties;projectId;status;symbol;symbolUrl;usage;width;x;y;z;missingImage;missingImages};var Cc=class{id;rotation;style;text;x;y;originalX;originalY;nodeId};var ld=(()=>{class n{calculate(e,t){let i=document.createElement("text");i.innerText=e,i.setAttribute("fill","#00000"),i.setAttribute("fill-opacity","0"),i.setAttribute("style",t),document.documentElement.appendChild(i);let a=i.getBoundingClientRect();return document.documentElement.removeChild(i),{width:a.width,height:a.height}}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();function ca(n){return n>=48&&n<=57}function Rs(n){return ca(n)||n>=65&&n<=70||n>=97&&n<=102}function Iy(n){return n>=65&&n<=90}function Ahe(n){return n>=97&&n<=122}function Nhe(n){return Iy(n)||Ahe(n)}function Fhe(n){return n>=128}function Dy(n){return Nhe(n)||Fhe(n)||n===95}function xv(n){return Dy(n)||ca(n)||n===45}function Rhe(n){return n>=0&&n<=8||n===11||n>=14&&n<=31||n===127}function yv(n){return n===10||n===13||n===12}function cd(n){return yv(n)||n===32||n===9}function ds(n,o){return!(n!==92||yv(o)||o===0)}function Dh(n,o,e){return n===45?Dy(o)||o===45||ds(o,e):Dy(n)?!0:n===92?ds(n,o):!1}function Ay(n,o,e){return n===43||n===45?ca(o)?2:o===46&&ca(e)?3:0:n===46?ca(o)?2:0:ca(n)?1:0}function Ny(n){return n===65279||n===65534?1:0}var eO=new Array(128),zhe=128,wv=130,tO=131,Fy=132,nO=133;for(let n=0;n<eO.length;n++)eO[n]=cd(n)&&wv||ca(n)&&tO||Dy(n)&&Fy||Rhe(n)&&nO||n||zhe;function Ry(n){return n<128?eO[n]:Fy}function Ih(n,o){return o<n.length?n.charCodeAt(o):0}function zy(n,o,e){return e===13&&Ih(n,o+1)===10?2:1}function Qd(n,o,e){let t=n.charCodeAt(o);return Iy(t)&&(t=t|32),t===e}function Kd(n,o,e,t){if(e-o!==t.length||o<0||e>n.length)return!1;for(let i=o;i<e;i++){let a=t.charCodeAt(i-o),s=n.charCodeAt(i);if(Iy(s)&&(s=s|32),s!==a)return!1}return!0}function QL(n,o){for(;o>=0&&cd(n.charCodeAt(o));o--);return o+1}function Mv(n,o){for(;o<n.length&&cd(n.charCodeAt(o));o++);return o}function iO(n,o){for(;o<n.length&&ca(n.charCodeAt(o));o++);return o}function dd(n,o){if(o+=2,Rs(Ih(n,o-1))){for(let t=Math.min(n.length,o+5);o<t&&Rs(Ih(n,o));o++);let e=Ih(n,o);cd(e)&&(o+=zy(n,o,e))}return o}function Sv(n,o){for(;o<n.length;o++){let e=n.charCodeAt(o);if(!xv(e)){if(ds(e,Ih(n,o+1))){o=dd(n,o)-1;continue}break}}return o}function Iu(n,o){let e=n.charCodeAt(o);if((e===43||e===45)&&(e=n.charCodeAt(o+=1)),ca(e)&&(o=iO(n,o+1),e=n.charCodeAt(o)),e===46&&ca(n.charCodeAt(o+1))&&(o+=2,o=iO(n,o)),Qd(n,o,101)){let t=0;e=n.charCodeAt(o+1),(e===45||e===43)&&(t=1,e=n.charCodeAt(o+2)),ca(e)&&(o=iO(n,o+1+t+1))}return o}function Ly(n,o){for(;o<n.length;o++){let e=n.charCodeAt(o);if(e===41){o++;break}ds(e,Ih(n,o+1))&&(o=dd(n,o))}return o}function kv(n){if(n.length===1&&!Rs(n.charCodeAt(0)))return n[0];let o=parseInt(n,16);return(o===0||o>=55296&&o<=57343||o>1114111)&&(o=65533),String.fromCodePoint(o)}var Ah=["EOF-token","ident-token","function-token","at-keyword-token","hash-token","string-token","bad-string-token","url-token","bad-url-token","delim-token","number-token","percentage-token","dimension-token","whitespace-token","CDO-token","CDC-token","colon-token","semicolon-token","comma-token","[-token","]-token","(-token",")-token","{-token","}-token"];function Nh(n=null,o){return n===null||n.length<o?new Uint32Array(Math.max(o+1024,16384)):n}var KL=10,Lhe=12,XL=13;function YL(n){let o=n.source,e=o.length,t=o.length>0?Ny(o.charCodeAt(0)):0,i=Nh(n.lines,e),a=Nh(n.columns,e),s=n.startLine,d=n.startColumn;for(let p=t;p<e;p++){let u=o.charCodeAt(p);i[p]=s,a[p]=d++,(u===KL||u===XL||u===Lhe)&&(u===XL&&p+1<e&&o.charCodeAt(p+1)===KL&&(p++,i[p]=s,a[p]=d),s++,d=1)}i[e]=s,a[e]=d,n.lines=i,n.columns=a,n.computed=!0}var Vy=class{constructor(){this.lines=null,this.columns=null,this.computed=!1}setSource(o,e=0,t=1,i=1){this.source=o,this.startOffset=e,this.startLine=t,this.startColumn=i,this.computed=!1}getLocation(o,e){return this.computed||YL(this),{source:e,offset:this.startOffset+o,line:this.lines[o],column:this.columns[o]}}getLocationRange(o,e,t){return this.computed||YL(this),{source:t,start:{offset:this.startOffset+o,line:this.lines[o],column:this.columns[o]},end:{offset:this.startOffset+e,line:this.lines[e],column:this.columns[e]}}}};var Vl=16777215,op=24,Vhe=new Map([[2,22],[21,22],[19,20],[23,24]]),Pv=class{constructor(o,e){this.setSource(o,e)}reset(){this.eof=!1,this.tokenIndex=-1,this.tokenType=0,this.tokenStart=this.firstCharOffset,this.tokenEnd=this.firstCharOffset}setSource(o="",e=()=>{}){o=String(o||"");let t=o.length,i=Nh(this.offsetAndType,o.length+1),a=Nh(this.balance,o.length+1),s=0,d=0,p=0,u=-1;for(this.offsetAndType=null,this.balance=null,e(o,(g,C,M)=>{switch(g){default:a[s]=t;break;case d:{let x=p&Vl;for(p=a[x],d=p>>op,a[s]=x,a[x++]=s;x<s;x++)a[x]===t&&(a[x]=s);break}case 21:case 2:case 19:case 23:a[s]=p,d=Vhe.get(g),p=d<<op|s;break}i[s++]=g<<op|M,u===-1&&(u=C)}),i[s]=0<<op|t,a[s]=t,a[t]=t;p!==0;){let g=p&Vl;p=a[g],a[g]=t}this.source=o,this.firstCharOffset=u===-1?0:u,this.tokenCount=s,this.offsetAndType=i,this.balance=a,this.reset(),this.next()}lookupType(o){return o+=this.tokenIndex,o<this.tokenCount?this.offsetAndType[o]>>op:0}lookupOffset(o){return o+=this.tokenIndex,o<this.tokenCount?this.offsetAndType[o-1]&Vl:this.source.length}lookupValue(o,e){return o+=this.tokenIndex,o<this.tokenCount?Kd(this.source,this.offsetAndType[o-1]&Vl,this.offsetAndType[o]&Vl,e):!1}getTokenStart(o){return o===this.tokenIndex?this.tokenStart:o>0?o<this.tokenCount?this.offsetAndType[o-1]&Vl:this.offsetAndType[this.tokenCount]&Vl:this.firstCharOffset}substrToCursor(o){return this.source.substring(o,this.tokenStart)}isBalanceEdge(o){return this.balance[this.tokenIndex]<o}isDelim(o,e){return e?this.lookupType(e)===9&&this.source.charCodeAt(this.lookupOffset(e))===o:this.tokenType===9&&this.source.charCodeAt(this.tokenStart)===o}skip(o){let e=this.tokenIndex+o;e<this.tokenCount?(this.tokenIndex=e,this.tokenStart=this.offsetAndType[e-1]&Vl,e=this.offsetAndType[e],this.tokenType=e>>op,this.tokenEnd=e&Vl):(this.tokenIndex=this.tokenCount,this.next())}next(){let o=this.tokenIndex+1;o<this.tokenCount?(this.tokenIndex=o,this.tokenStart=this.tokenEnd,o=this.offsetAndType[o],this.tokenType=o>>op,this.tokenEnd=o&Vl):(this.eof=!0,this.tokenIndex=this.tokenCount,this.tokenType=0,this.tokenStart=this.tokenEnd=this.source.length)}skipSC(){for(;this.tokenType===13||this.tokenType===25;)this.next()}skipUntilBalanced(o,e){let t=o,i,a;e:for(;t<this.tokenCount;t++){if(i=this.balance[t],i<o)break e;switch(a=t>0?this.offsetAndType[t-1]&Vl:this.firstCharOffset,e(this.source.charCodeAt(a))){case 1:break e;case 2:t++;break e;default:this.balance[i]===t&&(t=i)}}this.skip(t-this.tokenIndex)}forEachToken(o){for(let e=0,t=this.firstCharOffset;e<this.tokenCount;e++){let i=t,a=this.offsetAndType[e],s=a&Vl,d=a>>op;t=s,o(d,i,s,e)}}dump(){let o=new Array(this.tokenCount);return this.forEachToken((e,t,i,a)=>{o[a]={idx:a,type:Ah[e],chunk:this.source.substring(t,i),balance:this.balance[a]}}),o}};function rp(n,o){function e(C){return C<d?n.charCodeAt(C):0}function t(){if(u=Iu(n,u),Dh(e(u),e(u+1),e(u+2))){g=12,u=Sv(n,u);return}if(e(u)===37){g=11,u++;return}g=10}function i(){let C=u;if(u=Sv(n,u),Kd(n,C,u,"url")&&e(u)===40){if(u=Mv(n,u+1),e(u)===34||e(u)===39){g=2,u=C+4;return}s();return}if(e(u)===40){g=2,u++;return}g=1}function a(C){for(C||(C=e(u++)),g=5;u<n.length;u++){let M=n.charCodeAt(u);switch(Ry(M)){case C:u++;return;case wv:if(yv(M)){u+=zy(n,u,M),g=6;return}break;case 92:if(u===n.length-1)break;let x=e(u+1);yv(x)?u+=zy(n,u+1,x):ds(M,x)&&(u=dd(n,u)-1);break}}}function s(){for(g=7,u=Mv(n,u);u<n.length;u++){let C=n.charCodeAt(u);switch(Ry(C)){case 41:u++;return;case wv:if(u=Mv(n,u),e(u)===41||u>=n.length){u<n.length&&u++;return}u=Ly(n,u),g=8;return;case 34:case 39:case 40:case nO:u=Ly(n,u),g=8;return;case 92:if(ds(C,e(u+1))){u=dd(n,u)-1;break}u=Ly(n,u),g=8;return}}}n=String(n||"");let d=n.length,p=Ny(e(0)),u=p,g;for(;u<d;){let C=n.charCodeAt(u);switch(Ry(C)){case wv:g=13,u=Mv(n,u+1);break;case 34:a();break;case 35:xv(e(u+1))||ds(e(u+1),e(u+2))?(g=4,u=Sv(n,u+1)):(g=9,u++);break;case 39:a();break;case 40:g=21,u++;break;case 41:g=22,u++;break;case 43:Ay(C,e(u+1),e(u+2))?t():(g=9,u++);break;case 44:g=18,u++;break;case 45:Ay(C,e(u+1),e(u+2))?t():e(u+1)===45&&e(u+2)===62?(g=15,u=u+3):Dh(C,e(u+1),e(u+2))?i():(g=9,u++);break;case 46:Ay(C,e(u+1),e(u+2))?t():(g=9,u++);break;case 47:e(u+1)===42?(g=25,u=n.indexOf("*/",u+2),u=u===-1?n.length:u+2):(g=9,u++);break;case 58:g=16,u++;break;case 59:g=17,u++;break;case 60:e(u+1)===33&&e(u+2)===45&&e(u+3)===45?(g=14,u=u+4):(g=9,u++);break;case 64:Dh(e(u+1),e(u+2),e(u+3))?(g=3,u=Sv(n,u+1)):(g=9,u++);break;case 91:g=19,u++;break;case 92:ds(C,e(u+1))?i():(g=9,u++);break;case 93:g=20,u++;break;case 123:g=23,u++;break;case 125:g=24,u++;break;case tO:t();break;case Fy:i();break;default:g=9,u++}o(g,p,p=u)}}var Fh=null,ms=class n{static createItem(o){return{prev:null,next:null,data:o}}constructor(){this.head=null,this.tail=null,this.cursor=null}createItem(o){return n.createItem(o)}allocateCursor(o,e){let t;return Fh!==null?(t=Fh,Fh=Fh.cursor,t.prev=o,t.next=e,t.cursor=this.cursor):t={prev:o,next:e,cursor:this.cursor},this.cursor=t,t}releaseCursor(){let{cursor:o}=this;this.cursor=o.cursor,o.prev=null,o.next=null,o.cursor=Fh,Fh=o}updateCursors(o,e,t,i){let{cursor:a}=this;for(;a!==null;)a.prev===o&&(a.prev=e),a.next===t&&(a.next=i),a=a.cursor}*[Symbol.iterator](){for(let o=this.head;o!==null;o=o.next)yield o.data}get size(){let o=0;for(let e=this.head;e!==null;e=e.next)o++;return o}get isEmpty(){return this.head===null}get first(){return this.head&&this.head.data}get last(){return this.tail&&this.tail.data}fromArray(o){let e=null;this.head=null;for(let t of o){let i=n.createItem(t);e!==null?e.next=i:this.head=i,i.prev=e,e=i}return this.tail=e,this}toArray(){return[...this]}toJSON(){return[...this]}forEach(o,e=this){let t=this.allocateCursor(null,this.head);for(;t.next!==null;){let i=t.next;t.next=i.next,o.call(e,i.data,i,this)}this.releaseCursor()}forEachRight(o,e=this){let t=this.allocateCursor(this.tail,null);for(;t.prev!==null;){let i=t.prev;t.prev=i.prev,o.call(e,i.data,i,this)}this.releaseCursor()}reduce(o,e,t=this){let i=this.allocateCursor(null,this.head),a=e,s;for(;i.next!==null;)s=i.next,i.next=s.next,a=o.call(t,a,s.data,s,this);return this.releaseCursor(),a}reduceRight(o,e,t=this){let i=this.allocateCursor(this.tail,null),a=e,s;for(;i.prev!==null;)s=i.prev,i.prev=s.prev,a=o.call(t,a,s.data,s,this);return this.releaseCursor(),a}some(o,e=this){for(let t=this.head;t!==null;t=t.next)if(o.call(e,t.data,t,this))return!0;return!1}map(o,e=this){let t=new n;for(let i=this.head;i!==null;i=i.next)t.appendData(o.call(e,i.data,i,this));return t}filter(o,e=this){let t=new n;for(let i=this.head;i!==null;i=i.next)o.call(e,i.data,i,this)&&t.appendData(i.data);return t}nextUntil(o,e,t=this){if(o===null)return;let i=this.allocateCursor(null,o);for(;i.next!==null;){let a=i.next;if(i.next=a.next,e.call(t,a.data,a,this))break}this.releaseCursor()}prevUntil(o,e,t=this){if(o===null)return;let i=this.allocateCursor(o,null);for(;i.prev!==null;){let a=i.prev;if(i.prev=a.prev,e.call(t,a.data,a,this))break}this.releaseCursor()}clear(){this.head=null,this.tail=null}copy(){let o=new n;for(let e of this)o.appendData(e);return o}prepend(o){return this.updateCursors(null,o,this.head,o),this.head!==null?(this.head.prev=o,o.next=this.head):this.tail=o,this.head=o,this}prependData(o){return this.prepend(n.createItem(o))}append(o){return this.insert(o)}appendData(o){return this.insert(n.createItem(o))}insert(o,e=null){if(e!==null)if(this.updateCursors(e.prev,o,e,o),e.prev===null){if(this.head!==e)throw new Error("before doesn't belong to list");this.head=o,e.prev=o,o.next=e,this.updateCursors(null,o)}else e.prev.next=o,o.prev=e.prev,e.prev=o,o.next=e;else this.updateCursors(this.tail,o,null,o),this.tail!==null?(this.tail.next=o,o.prev=this.tail):this.head=o,this.tail=o;return this}insertData(o,e){return this.insert(n.createItem(o),e)}remove(o){if(this.updateCursors(o,o.prev,o,o.next),o.prev!==null)o.prev.next=o.next;else{if(this.head!==o)throw new Error("item doesn't belong to list");this.head=o.next}if(o.next!==null)o.next.prev=o.prev;else{if(this.tail!==o)throw new Error("item doesn't belong to list");this.tail=o.prev}return o.prev=null,o.next=null,o}push(o){this.insert(n.createItem(o))}pop(){return this.tail!==null?this.remove(this.tail):null}unshift(o){this.prepend(n.createItem(o))}shift(){return this.head!==null?this.remove(this.head):null}prependList(o){return this.insertList(o,this.head)}appendList(o){return this.insertList(o)}insertList(o,e){return o.head===null?this:(e!=null?(this.updateCursors(e.prev,o.tail,e,o.head),e.prev!==null?(e.prev.next=o.head,o.head.prev=e.prev):this.head=o.head,e.prev=o.tail,o.tail.next=e):(this.updateCursors(this.tail,o.tail,null,o.head),this.tail!==null?(this.tail.next=o.head,o.head.prev=this.tail):this.head=o.head,this.tail=o.tail),o.head=null,o.tail=null,this)}replace(o,e){"head"in e?this.insertList(e,o):this.insert(e,o),this.remove(o)}};function Au(n,o){let e=Object.create(SyntaxError.prototype),t=new Error;return Object.assign(e,{name:n,message:o,get stack(){return(t.stack||"").replace(/^(.+\n){1,3}/,`${n}: ${o}
|
||
`)}})}var aO=100,ZL=60,JL=" ";function e7({source:n,line:o,column:e},t){function i(g,C){return a.slice(g,C).map((M,x)=>String(g+x+1).padStart(p)+" |"+M).join(`
|
||
`)}let a=n.split(/\r\n?|\n|\f/),s=Math.max(1,o-t)-1,d=Math.min(o+t,a.length+1),p=Math.max(4,String(d).length)+1,u=0;e+=(JL.length-1)*(a[o-1].substr(0,e-1).match(/\t/g)||[]).length,e>aO&&(u=e-ZL+3,e=ZL-2);for(let g=s;g<=d;g++)g>=0&&g<a.length&&(a[g]=a[g].replace(/\t/g,JL),a[g]=(u>0&&a[g].length>u?"\u2026":"")+a[g].substr(u,aO-2)+(a[g].length>u+aO-1?"\u2026":""));return[i(s,o),new Array(e+p+2).join("-")+"^",i(o,d)].filter(Boolean).join(`
|
||
`)}function rO(n,o,e,t,i){return Object.assign(Au("SyntaxError",n),{source:o,offset:e,line:t,column:i,sourceFragment(s){return e7({source:o,line:t,column:i},isNaN(s)?0:s)},get formattedMessage(){return`Parse error: ${n}
|
||
`+e7({source:o,line:t,column:i},2)}})}function t7(n){let o=this.createList(),e=!1,t={recognizer:n};for(;!this.eof;){switch(this.tokenType){case 25:this.next();continue;case 13:e=!0,this.next();continue}let i=n.getNode.call(this,t);if(i===void 0)break;e&&(n.onWhiteSpace&&n.onWhiteSpace.call(this,i,o,t),e=!1),o.push(i)}return e&&n.onWhiteSpace&&n.onWhiteSpace.call(this,null,o,t),o}var n7=()=>{},Bhe=33,jhe=35,sO=59,i7=123,o7=0;function $he(n){return function(){return this[n]()}}function lO(n){let o=Object.create(null);for(let e in n){let t=n[e],i=t.parse||t;i&&(o[e]=i)}return o}function Hhe(n){let o={context:Object.create(null),scope:Object.assign(Object.create(null),n.scope),atrule:lO(n.atrule),pseudo:lO(n.pseudo),node:lO(n.node)};for(let e in n.parseContext)switch(typeof n.parseContext[e]){case"function":o.context[e]=n.parseContext[e];break;case"string":o.context[e]=$he(n.parseContext[e]);break}return q(q({config:o},o),o.node)}function a7(n){let o="",e="<unknown>",t=!1,i=n7,a=!1,s=new Vy,d=Object.assign(new Pv,Hhe(n||{}),{parseAtrulePrelude:!0,parseRulePrelude:!0,parseValue:!0,parseCustomProperty:!1,readSequence:t7,consumeUntilBalanceEnd:()=>0,consumeUntilLeftCurlyBracket(u){return u===i7?1:0},consumeUntilLeftCurlyBracketOrSemicolon(u){return u===i7||u===sO?1:0},consumeUntilExclamationMarkOrSemicolon(u){return u===Bhe||u===sO?1:0},consumeUntilSemicolonIncluded(u){return u===sO?2:0},createList(){return new ms},createSingleNodeList(u){return new ms().appendData(u)},getFirstListNode(u){return u&&u.first},getLastListNode(u){return u&&u.last},parseWithFallback(u,g){let C=this.tokenIndex;try{return u.call(this)}catch(M){if(a)throw M;let x=g.call(this,C);return a=!0,i(M,x),a=!1,x}},lookupNonWSType(u){let g;do if(g=this.lookupType(u++),g!==13)return g;while(g!==o7);return o7},charCodeAt(u){return u>=0&&u<o.length?o.charCodeAt(u):0},substring(u,g){return o.substring(u,g)},substrToCursor(u){return this.source.substring(u,this.tokenStart)},cmpChar(u,g){return Qd(o,u,g)},cmpStr(u,g,C){return Kd(o,u,g,C)},consume(u){let g=this.tokenStart;return this.eat(u),this.substrToCursor(g)},consumeFunctionName(){let u=o.substring(this.tokenStart,this.tokenEnd-1);return this.eat(2),u},consumeNumber(u){let g=o.substring(this.tokenStart,Iu(o,this.tokenStart));return this.eat(u),g},eat(u){if(this.tokenType!==u){let g=Ah[u].slice(0,-6).replace(/-/g," ").replace(/^./,x=>x.toUpperCase()),C=`${/[[\](){}]/.test(g)?`"${g}"`:g} is expected`,M=this.tokenStart;switch(u){case 1:this.tokenType===2||this.tokenType===7?(M=this.tokenEnd-1,C="Identifier is expected but function found"):C="Identifier is expected";break;case 4:this.isDelim(jhe)&&(this.next(),M++,C="Name is expected");break;case 11:this.tokenType===10&&(M=this.tokenEnd,C="Percent sign is expected");break}this.error(C,M)}this.next()},eatIdent(u){(this.tokenType!==1||this.lookupValue(0,u)===!1)&&this.error(`Identifier "${u}" is expected`),this.next()},eatDelim(u){this.isDelim(u)||this.error(`Delim "${String.fromCharCode(u)}" is expected`),this.next()},getLocation(u,g){return t?s.getLocationRange(u,g,e):null},getLocationFromList(u){if(t){let g=this.getFirstListNode(u),C=this.getLastListNode(u);return s.getLocationRange(g!==null?g.loc.start.offset-s.startOffset:this.tokenStart,C!==null?C.loc.end.offset-s.startOffset:this.tokenStart,e)}return null},error(u,g){let C=typeof g<"u"&&g<o.length?s.getLocation(g):this.eof?s.getLocation(QL(o,o.length-1)):s.getLocation(this.tokenStart);throw new rO(u||"Unexpected input",o,C.offset,C.line,C.column)}});return Object.assign(function(u,g){o=u,g=g||{},d.setSource(o,rp),s.setSource(o,g.offset,g.line,g.column),e=g.filename||"<unknown>",t=!!g.positions,i=typeof g.onParseError=="function"?g.onParseError:n7,a=!1,d.parseAtrulePrelude="parseAtrulePrelude"in g?!!g.parseAtrulePrelude:!0,d.parseRulePrelude="parseRulePrelude"in g?!!g.parseRulePrelude:!0,d.parseValue="parseValue"in g?!!g.parseValue:!0,d.parseCustomProperty="parseCustomProperty"in g?!!g.parseCustomProperty:!1;let{context:C="default",onComment:M}=g;if(!(C in d.context))throw new Error("Unknown context `"+C+"`");typeof M=="function"&&d.forEachToken((b,P,k)=>{if(b===25){let S=d.getLocation(P,k),O=Kd(o,k-2,k,"*/")?o.slice(P+2,k-2):o.slice(P+2,k);M(O,S)}});let x=d.context[C].call(d,g);return d.eof||d.error(),x},{SyntaxError:rO,config:d.config})}var k7=Jl(M7(),1),S7=new Set(["Atrule","Selector","Declaration"]);function P7(n){let o=new k7.SourceMapGenerator,e={line:1,column:0},t={line:0,column:0},i={line:1,column:0},a={generated:i},s=1,d=0,p=!1,u=n.node;n.node=function(M){if(M.loc&&M.loc.start&&S7.has(M.type)){let x=M.loc.start.line,b=M.loc.start.column-1;(t.line!==x||t.column!==b)&&(t.line=x,t.column=b,e.line=s,e.column=d,p&&(p=!1,(e.line!==i.line||e.column!==i.column)&&o.addMapping(a)),p=!0,o.addMapping({source:M.loc.source,original:t,generated:e}))}u.call(this,M),p&&S7.has(M.type)&&(i.line=s,i.column=d)};let g=n.emit;n.emit=function(M,x,b){for(let P=0;P<M.length;P++)M.charCodeAt(P)===10?(s++,d=0):d++;g(M,x,b)};let C=n.result;return n.result=function(){return p&&o.addMapping(a),{css:C(),map:o}},n}var Hy={};qn(Hy,{safe:()=>_O,spec:()=>m_e});var l_e=43,c_e=45,hO=(n,o)=>{if(n===9&&(n=o),typeof n=="string"){let e=n.charCodeAt(0);return e>127?32768:e<<8}return n},T7=[[1,1],[1,2],[1,7],[1,8],[1,"-"],[1,10],[1,11],[1,12],[1,15],[1,21],[3,1],[3,2],[3,7],[3,8],[3,"-"],[3,10],[3,11],[3,12],[3,15],[4,1],[4,2],[4,7],[4,8],[4,"-"],[4,10],[4,11],[4,12],[4,15],[12,1],[12,2],[12,7],[12,8],[12,"-"],[12,10],[12,11],[12,12],[12,15],["#",1],["#",2],["#",7],["#",8],["#","-"],["#",10],["#",11],["#",12],["#",15],["-",1],["-",2],["-",7],["-",8],["-","-"],["-",10],["-",11],["-",12],["-",15],[10,1],[10,2],[10,7],[10,8],[10,10],[10,11],[10,12],[10,"%"],[10,15],["@",1],["@",2],["@",7],["@",8],["@","-"],["@",15],[".",10],[".",11],[".",12],["+",10],["+",11],["+",12],["/","*"]],d_e=T7.concat([[1,4],[12,4],[4,4],[3,21],[3,5],[3,16],[11,11],[11,12],[11,2],[11,"-"],[22,1],[22,2],[22,11],[22,12],[22,4],[22,"-"]]);function E7(n){let o=new Set(n.map(([e,t])=>hO(e)<<16|hO(t)));return function(e,t,i){let a=hO(t,i),s=i.charCodeAt(0);return(s===c_e&&t!==1&&t!==2&&t!==15||s===l_e?o.has(e<<16|s<<8):o.has(e<<16|a))&&this.emit(" ",13,!0),a}}var m_e=E7(T7),_O=E7(d_e);var p_e=92;function u_e(n,o){if(typeof o=="function"){let e=null;n.children.forEach(t=>{e!==null&&o.call(this,e),this.node(t),e=t});return}n.children.forEach(this.node,this)}function g_e(n){rp(n,(o,e,t)=>{this.token(o,n.slice(e,t))})}function O7(n){let o=new Map;for(let e in n.node){let t=n.node[e];typeof(t.generate||t)=="function"&&o.set(e,t.generate||t)}return function(e,t){let i="",a=0,s={node(p){if(o.has(p.type))o.get(p.type).call(d,p);else throw new Error("Unknown node type: "+p.type)},tokenBefore:_O,token(p,u){a=this.tokenBefore(a,p,u),this.emit(u,p,!1),p===9&&u.charCodeAt(0)===p_e&&this.emit(`
|
||
`,13,!0)},emit(p){i+=p},result(){return i}};t&&(typeof t.decorator=="function"&&(s=t.decorator(s)),t.sourceMap&&(s=P7(s)),t.mode in Hy&&(s.tokenBefore=Hy[t.mode]));let d={node:p=>s.node(p),children:u_e,token:(p,u)=>s.token(p,u),tokenize:g_e};return s.node(e),s.result()}}function D7(n){return{fromPlainObject(o){return n(o,{enter(e){e.children&&!(e.children instanceof ms)&&(e.children=new ms().fromArray(e.children))}}),o},toPlainObject(o){return n(o,{leave(e){e.children&&e.children instanceof ms&&(e.children=e.children.toArray())}}),o}}}var{hasOwnProperty:fO}=Object.prototype,Dv=function(){};function I7(n){return typeof n=="function"?n:Dv}function A7(n,o){return function(e,t,i){e.type===o&&n.call(this,e,t,i)}}function h_e(n,o){let e=o.structure,t=[];for(let i in e){if(fO.call(e,i)===!1)continue;let a=e[i],s={name:i,type:!1,nullable:!1};Array.isArray(a)||(a=[a]);for(let d of a)d===null?s.nullable=!0:typeof d=="string"?s.type="node":Array.isArray(d)&&(s.type="list");s.type&&t.push(s)}return t.length?{context:o.walkContext,fields:t}:null}function __e(n){let o={};for(let e in n.node)if(fO.call(n.node,e)){let t=n.node[e];if(!t.structure)throw new Error("Missed `structure` field in `"+e+"` node type definition");o[e]=h_e(e,t)}return o}function N7(n,o){let e=n.fields.slice(),t=n.context,i=typeof t=="string";return o&&e.reverse(),function(a,s,d,p){let u;i&&(u=s[t],s[t]=a);for(let g of e){let C=a[g.name];if(!g.nullable||C){if(g.type==="list"){if(o?C.reduceRight(p,!1):C.reduce(p,!1))return!0}else if(d(C))return!0}}i&&(s[t]=u)}}function F7({StyleSheet:n,Atrule:o,Rule:e,Block:t,DeclarationList:i}){return{Atrule:{StyleSheet:n,Atrule:o,Rule:e,Block:t},Rule:{StyleSheet:n,Atrule:o,Rule:e,Block:t},Declaration:{StyleSheet:n,Atrule:o,Rule:e,Block:t,DeclarationList:i}}}function R7(n){let o=__e(n),e={},t={},i=Symbol("break-walk"),a=Symbol("skip-node");for(let u in o)fO.call(o,u)&&o[u]!==null&&(e[u]=N7(o[u],!1),t[u]=N7(o[u],!0));let s=F7(e),d=F7(t),p=function(u,g){function C(S,O,A){let D=M.call(k,S,O,A);return D===i?!0:D===a?!1:!!(b.hasOwnProperty(S.type)&&b[S.type](S,k,C,P)||x.call(k,S,O,A)===i)}let M=Dv,x=Dv,b=e,P=(S,O,A,D)=>S||C(O,A,D),k={break:i,skip:a,root:u,stylesheet:null,atrule:null,atrulePrelude:null,rule:null,selector:null,block:null,declaration:null,function:null};if(typeof g=="function")M=g;else if(g&&(M=I7(g.enter),x=I7(g.leave),g.reverse&&(b=t),g.visit)){if(s.hasOwnProperty(g.visit))b=g.reverse?d[g.visit]:s[g.visit];else if(!o.hasOwnProperty(g.visit))throw new Error("Bad value `"+g.visit+"` for `visit` option (should be: "+Object.keys(o).sort().join(", ")+")");M=A7(M,g.visit),x=A7(x,g.visit)}if(M===Dv&&x===Dv)throw new Error("Neither `enter` nor `leave` walker handler is set or both aren't a function");C(u)};return p.break=i,p.skip=a,p.find=function(u,g){let C=null;return p(u,function(M,x,b){if(g.call(this,M,x,b))return C=M,i}),C},p.findLast=function(u,g){let C=null;return p(u,{reverse:!0,enter(M,x,b){if(g.call(this,M,x,b))return C=M,i}}),C},p.findAll=function(u,g){let C=[];return p(u,function(M,x,b){g.call(this,M,x,b)&&C.push(M)}),C},p}function f_e(n){return n}function v_e(n){let{min:o,max:e,comma:t}=n;return o===0&&e===0?t?"#?":"*":o===0&&e===1?"?":o===1&&e===0?t?"#":"+":o===1&&e===1?"":(t?"#":"")+(o===e?"{"+o+"}":"{"+o+","+(e!==0?e:"")+"}")}function C_e(n){if(n.type==="Range")return" ["+(n.min===null?"-\u221E":n.min)+","+(n.max===null?"\u221E":n.max)+"]";throw new Error("Unknown node type `"+n.type+"`")}function b_e(n,o,e,t){let i=n.combinator===" "||t?n.combinator:" "+n.combinator+" ",a=n.terms.map(s=>vO(s,o,e,t)).join(i);return n.explicit||e?(t||a[0]===","?"[":"[ ")+a+(t?"]":" ]"):a}function vO(n,o,e,t){let i;switch(n.type){case"Group":i=b_e(n,o,e,t)+(n.disallowEmpty?"!":"");break;case"Multiplier":return vO(n.term,o,e,t)+o(v_e(n),n);case"Type":i="<"+n.name+(n.opts?o(C_e(n.opts),n.opts):"")+">";break;case"Property":i="<'"+n.name+"'>";break;case"Keyword":i=n.name;break;case"AtKeyword":i="@"+n.name;break;case"Function":i=n.name+"(";break;case"String":case"Token":i=n.value;break;case"Comma":i=",";break;default:throw new Error("Unknown node type `"+n.type+"`")}return o(i,n)}function zh(n,o){let e=f_e,t=!1,i=!1;return typeof o=="function"?e=o:o&&(t=!!o.forceBraces,i=!!o.compact,typeof o.decorate=="function"&&(e=o.decorate)),vO(n,e,t,i)}var z7={offset:0,line:1,column:1};function x_e(n,o){let e=n.tokens,t=n.longestMatch,i=t<e.length&&e[t].node||null,a=i!==o?i:null,s=0,d=0,p=0,u="",g,C;for(let M=0;M<e.length;M++){let x=e[M].value;M===t&&(d=x.length,s=u.length),a!==null&&e[M].node===a&&(M<=t?p++:p=0),u+=x}return t===e.length||p>1?(g=Uy(a||o,"end")||Iv(z7,u),C=Iv(g)):(g=Uy(a,"start")||Iv(Uy(o,"start")||z7,u.slice(0,s)),C=Uy(a,"end")||Iv(g,u.substr(s,d))),{css:u,mismatchOffset:s,mismatchLength:d,start:g,end:C}}function Uy(n,o){let e=n&&n.loc&&n.loc[o];return e?"line"in e?Iv(e):e:null}function Iv({offset:n,line:o,column:e},t){let i={offset:n,line:o,column:e};if(t){let a=t.split(/\n|\r\n?|\f/);i.offset+=t.length,i.line+=a.length-1,i.column=a.length===1?i.column+t.length:a.pop().length+1}return i}var Lh=function(n,o){let e=Au("SyntaxReferenceError",n+(o?" `"+o+"`":""));return e.reference=o,e},L7=function(n,o,e,t){let i=Au("SyntaxMatchError",n),{css:a,mismatchOffset:s,mismatchLength:d,start:p,end:u}=x_e(t,e);return i.rawMessage=n,i.syntax=o?zh(o):"<generic>",i.css=a,i.mismatchOffset=s,i.mismatchLength=d,i.message=n+`
|
||
syntax: `+i.syntax+`
|
||
value: `+(a||"<empty string>")+`
|
||
--------`+new Array(i.mismatchOffset+1).join("-")+"^",Object.assign(i,p),i.loc={source:e&&e.loc&&e.loc.source||"<unknown>",start:p,end:u},i};var Wy=new Map,Vh=new Map,Gy=45,qy=y_e,CO=w_e;function Qy(n,o){return o=o||0,n.length-o>=2&&n.charCodeAt(o)===Gy&&n.charCodeAt(o+1)===Gy}function V7(n,o){if(o=o||0,n.length-o>=3&&n.charCodeAt(o)===Gy&&n.charCodeAt(o+1)!==Gy){let e=n.indexOf("-",o+2);if(e!==-1)return n.substring(o,e+1)}return""}function y_e(n){if(Wy.has(n))return Wy.get(n);let o=n.toLowerCase(),e=Wy.get(o);if(e===void 0){let t=Qy(o,0),i=t?"":V7(o,0);e=Object.freeze({basename:o.substr(i.length),name:o,prefix:i,vendor:i,custom:t})}return Wy.set(n,e),e}function w_e(n){if(Vh.has(n))return Vh.get(n);let o=n,e=n[0];e==="/"?e=n[1]==="/"?"//":"/":e!=="_"&&e!=="*"&&e!=="$"&&e!=="#"&&e!=="+"&&e!=="&"&&(e="");let t=Qy(o,e.length);if(!t&&(o=o.toLowerCase(),Vh.has(o))){let d=Vh.get(o);return Vh.set(n,d),d}let i=t?"":V7(o,e.length),a=o.substr(0,e.length+i.length),s=Object.freeze({basename:o.substr(a.length),name:o.substr(e.length),hack:e,vendor:i,prefix:a,custom:t});return Vh.set(n,s),s}var Ky=["initial","inherit","unset","revert","revert-layer"];var Nv=43,md=45,bO=110,Bh=!0,S_e=!1;function yO(n,o){return n!==null&&n.type===9&&n.value.charCodeAt(0)===o}function Av(n,o,e){for(;n!==null&&(n.type===13||n.type===25);)n=e(++o);return o}function sp(n,o,e,t){if(!n)return 0;let i=n.value.charCodeAt(o);if(i===Nv||i===md){if(e)return 0;o++}for(;o<n.value.length;o++)if(!ca(n.value.charCodeAt(o)))return 0;return t+1}function xO(n,o,e){let t=!1,i=Av(n,o,e);if(n=e(i),n===null)return o;if(n.type!==10)if(yO(n,Nv)||yO(n,md)){if(t=!0,i=Av(e(++i),i,e),n=e(i),n===null||n.type!==10)return 0}else return o;if(!t){let a=n.value.charCodeAt(0);if(a!==Nv&&a!==md)return 0}return sp(n,t?0:1,t,i)}function wO(n,o){let e=0;if(!n)return 0;if(n.type===10)return sp(n,0,S_e,e);if(n.type===1&&n.value.charCodeAt(0)===md){if(!Qd(n.value,1,bO))return 0;switch(n.value.length){case 2:return xO(o(++e),e,o);case 3:return n.value.charCodeAt(2)!==md?0:(e=Av(o(++e),e,o),n=o(e),sp(n,0,Bh,e));default:return n.value.charCodeAt(2)!==md?0:sp(n,3,Bh,e)}}else if(n.type===1||yO(n,Nv)&&o(e+1).type===1){if(n.type!==1&&(n=o(++e)),n===null||!Qd(n.value,0,bO))return 0;switch(n.value.length){case 1:return xO(o(++e),e,o);case 2:return n.value.charCodeAt(1)!==md?0:(e=Av(o(++e),e,o),n=o(e),sp(n,0,Bh,e));default:return n.value.charCodeAt(1)!==md?0:sp(n,2,Bh,e)}}else if(n.type===12){let t=n.value.charCodeAt(0),i=t===Nv||t===md?1:0,a=i;for(;a<n.value.length&&ca(n.value.charCodeAt(a));a++);return a===i||!Qd(n.value,a,bO)?0:a+1===n.value.length?xO(o(++e),e,o):n.value.charCodeAt(a+1)!==md?0:a+2===n.value.length?(e=Av(o(++e),e,o),n=o(e),sp(n,0,Bh,e)):sp(n,a+2,Bh,e)}return 0}var k_e=43,B7=45,j7=63,P_e=117;function MO(n,o){return n!==null&&n.type===9&&n.value.charCodeAt(0)===o}function T_e(n,o){return n.value.charCodeAt(0)===o}function Fv(n,o,e){let t=0;for(let i=o;i<n.value.length;i++){let a=n.value.charCodeAt(i);if(a===B7&&e&&t!==0)return Fv(n,o+t+1,!1),6;if(!Rs(a)||++t>6)return 0}return t}function Xy(n,o,e){if(!n)return 0;for(;MO(e(o),j7);){if(++n>6)return 0;o++}return o}function SO(n,o){let e=0;if(n===null||n.type!==1||!Qd(n.value,0,P_e)||(n=o(++e),n===null))return 0;if(MO(n,k_e))return n=o(++e),n===null?0:n.type===1?Xy(Fv(n,0,!0),++e,o):MO(n,j7)?Xy(1,++e,o):0;if(n.type===10){let t=Fv(n,1,!0);return t===0?0:(n=o(++e),n===null?e:n.type===12||n.type===10?!T_e(n,B7)||!Fv(n,1,!1)?0:e+1:Xy(t,e,o))}return n.type===12?Xy(Fv(n,1,!0),++e,o):0}var E_e=["calc(","-moz-calc(","-webkit-calc("],kO=new Map([[2,22],[21,22],[19,20],[23,24]]);function bc(n,o){return o<n.length?n.charCodeAt(o):0}function $7(n,o){return Kd(n,0,n.length,o)}function H7(n,o){for(let e=0;e<o.length;e++)if($7(n,o[e]))return!0;return!1}function U7(n,o){return o!==n.length-2?!1:bc(n,o)===92&&ca(bc(n,o+1))}function Yy(n,o,e){if(n&&n.type==="Range"){let t=Number(e!==void 0&&e!==o.length?o.substr(0,e):o);if(isNaN(t)||n.min!==null&&t<n.min&&typeof n.min!="string"||n.max!==null&&t>n.max&&typeof n.max!="string")return!0}return!1}function O_e(n,o){let e=0,t=[],i=0;e:do{switch(n.type){case 24:case 22:case 20:if(n.type!==e)break e;if(e=t.pop(),t.length===0){i++;break e}break;case 2:case 21:case 19:case 23:t.push(e),e=kO.get(n.type);break}i++}while(n=o(i));return i}function jl(n){return function(o,e,t){return o===null?0:o.type===2&&H7(o.value,E_e)?O_e(o,e):n(o,e,t)}}function Vo(n){return function(o){return o===null||o.type!==n?0:1}}function D_e(n){if(n===null||n.type!==1)return 0;let o=n.value.toLowerCase();return H7(o,Ky)||$7(o,"default")?0:1}function I_e(n){return n===null||n.type!==1||bc(n.value,0)!==45||bc(n.value,1)!==45?0:1}function A_e(n){if(n===null||n.type!==4)return 0;let o=n.value.length;if(o!==4&&o!==5&&o!==7&&o!==9)return 0;for(let e=1;e<o;e++)if(!Rs(bc(n.value,e)))return 0;return 1}function N_e(n){return n===null||n.type!==4||!Dh(bc(n.value,1),bc(n.value,2),bc(n.value,3))?0:1}function F_e(n,o){if(!n)return 0;let e=0,t=[],i=0;e:do{switch(n.type){case 6:case 8:break e;case 24:case 22:case 20:if(n.type!==e)break e;e=t.pop();break;case 17:if(e===0)break e;break;case 9:if(e===0&&n.value==="!")break e;break;case 2:case 21:case 19:case 23:t.push(e),e=kO.get(n.type);break}i++}while(n=o(i));return i}function R_e(n,o){if(!n)return 0;let e=0,t=[],i=0;e:do{switch(n.type){case 6:case 8:break e;case 24:case 22:case 20:if(n.type!==e)break e;e=t.pop();break;case 2:case 21:case 19:case 23:t.push(e),e=kO.get(n.type);break}i++}while(n=o(i));return i}function Zd(n){return n&&(n=new Set(n)),function(o,e,t){if(o===null||o.type!==12)return 0;let i=Iu(o.value,0);if(n!==null){let a=o.value.indexOf("\\",i),s=a===-1||!U7(o.value,a)?o.value.substr(i):o.value.substring(i,a);if(n.has(s.toLowerCase())===!1)return 0}return Yy(t,o.value,i)?0:1}}function z_e(n,o,e){return n===null||n.type!==11||Yy(e,n.value,n.value.length-1)?0:1}function W7(n){return typeof n!="function"&&(n=function(){return 0}),function(o,e,t){return o!==null&&o.type===10&&Number(o.value)===0?1:n(o,e,t)}}function L_e(n,o,e){if(n===null)return 0;let t=Iu(n.value,0);return!(t===n.value.length)&&!U7(n.value,t)||Yy(e,n.value,t)?0:1}function V_e(n,o,e){if(n===null||n.type!==10)return 0;let t=bc(n.value,0)===43||bc(n.value,0)===45?1:0;for(;t<n.value.length;t++)if(!ca(bc(n.value,t)))return 0;return Yy(e,n.value,t)?0:1}var B_e={"ident-token":Vo(1),"function-token":Vo(2),"at-keyword-token":Vo(3),"hash-token":Vo(4),"string-token":Vo(5),"bad-string-token":Vo(6),"url-token":Vo(7),"bad-url-token":Vo(8),"delim-token":Vo(9),"number-token":Vo(10),"percentage-token":Vo(11),"dimension-token":Vo(12),"whitespace-token":Vo(13),"CDO-token":Vo(14),"CDC-token":Vo(15),"colon-token":Vo(16),"semicolon-token":Vo(17),"comma-token":Vo(18),"[-token":Vo(19),"]-token":Vo(20),"(-token":Vo(21),")-token":Vo(22),"{-token":Vo(23),"}-token":Vo(24)},j_e={string:Vo(5),ident:Vo(1),percentage:jl(z_e),zero:W7(),number:jl(L_e),integer:jl(V_e),"custom-ident":D_e,"custom-property-name":I_e,"hex-color":A_e,"id-selector":N_e,"an-plus-b":wO,urange:SO,"declaration-value":F_e,"any-value":R_e};function $_e(n){let{angle:o,decibel:e,frequency:t,flex:i,length:a,resolution:s,semitones:d,time:p}=n||{};return{dimension:jl(Zd(null)),angle:jl(Zd(o)),decibel:jl(Zd(e)),frequency:jl(Zd(t)),flex:jl(Zd(i)),length:jl(W7(Zd(a))),resolution:jl(Zd(s)),semitones:jl(Zd(d)),time:jl(Zd(p))}}function G7(n){return q(q(q({},B_e),j_e),$_e(n))}var Zy={};qn(Zy,{angle:()=>U_e,decibel:()=>K_e,flex:()=>Q_e,frequency:()=>G_e,length:()=>H_e,resolution:()=>q_e,semitones:()=>X_e,time:()=>W_e});var H_e=["cm","mm","q","in","pt","pc","px","em","rem","ex","rex","cap","rcap","ch","rch","ic","ric","lh","rlh","vw","svw","lvw","dvw","vh","svh","lvh","dvh","vi","svi","lvi","dvi","vb","svb","lvb","dvb","vmin","svmin","lvmin","dvmin","vmax","svmax","lvmax","dvmax","cqw","cqh","cqi","cqb","cqmin","cqmax"],U_e=["deg","grad","rad","turn"],W_e=["s","ms"],G_e=["hz","khz"],q_e=["dpi","dpcm","dppx","x"],Q_e=["fr"],K_e=["db"],X_e=["st"];function PO(n,o,e){return Object.assign(Au("SyntaxError",n),{input:o,offset:e,rawMessage:n,message:n+`
|
||
`+o+`
|
||
--`+new Array((e||o.length)+1).join("-")+"^"})}var Y_e=9,Z_e=10,J_e=12,efe=13,tfe=32,Jy=class{constructor(o){this.str=o,this.pos=0}charCodeAt(o){return o<this.str.length?this.str.charCodeAt(o):0}charCode(){return this.charCodeAt(this.pos)}nextCharCode(){return this.charCodeAt(this.pos+1)}nextNonWsCode(o){return this.charCodeAt(this.findWsEnd(o))}findWsEnd(o){for(;o<this.str.length;o++){let e=this.str.charCodeAt(o);if(e!==efe&&e!==Z_e&&e!==J_e&&e!==tfe&&e!==Y_e)break}return o}substringToPos(o){return this.str.substring(this.pos,this.pos=o)}eat(o){this.charCode()!==o&&this.error("Expect `"+String.fromCharCode(o)+"`"),this.pos++}peek(){return this.pos<this.str.length?this.str.charAt(this.pos++):""}error(o){throw new PO(o,this.str,this.pos)}};var nfe=9,ife=10,ofe=12,afe=13,rfe=32,eV=33,OO=35,q7=38,ew=39,tV=40,sfe=41,nV=42,DO=43,IO=44,Q7=45,AO=60,iV=62,EO=63,lfe=64,ow=91,NO=93,tw=123,K7=124,X7=125,Y7=8734,Rv=new Uint8Array(128).map((n,o)=>/[a-zA-Z0-9\-]/.test(String.fromCharCode(o))?1:0),Z7={" ":1,"&&":2,"||":3,"|":4};function nw(n){return n.substringToPos(n.findWsEnd(n.pos))}function jh(n){let o=n.pos;for(;o<n.str.length;o++){let e=n.str.charCodeAt(o);if(e>=128||Rv[e]===0)break}return n.pos===o&&n.error("Expect a keyword"),n.substringToPos(o)}function iw(n){let o=n.pos;for(;o<n.str.length;o++){let e=n.str.charCodeAt(o);if(e<48||e>57)break}return n.pos===o&&n.error("Expect a number"),n.substringToPos(o)}function cfe(n){let o=n.str.indexOf("'",n.pos+1);return o===-1&&(n.pos=n.str.length,n.error("Expect an apostrophe")),n.substringToPos(o+1)}function J7(n){let o=null,e=null;return n.eat(tw),o=iw(n),n.charCode()===IO?(n.pos++,n.charCode()!==X7&&(e=iw(n))):e=o,n.eat(X7),{min:Number(o),max:e?Number(e):0}}function dfe(n){let o=null,e=!1;switch(n.charCode()){case nV:n.pos++,o={min:0,max:0};break;case DO:n.pos++,o={min:1,max:0};break;case EO:n.pos++,o={min:0,max:1};break;case OO:n.pos++,e=!0,n.charCode()===tw?o=J7(n):n.charCode()===EO?(n.pos++,o={min:0,max:0}):o={min:1,max:0};break;case tw:o=J7(n);break;default:return null}return{type:"Multiplier",comma:e,min:o.min,max:o.max,term:null}}function $h(n,o){let e=dfe(n);return e!==null?(e.term=o,n.charCode()===OO&&n.charCodeAt(n.pos-1)===DO?$h(n,e):e):o}function TO(n){let o=n.peek();return o===""?null:{type:"Token",value:o}}function mfe(n){let o;return n.eat(AO),n.eat(ew),o=jh(n),n.eat(ew),n.eat(iV),$h(n,{type:"Property",name:o})}function pfe(n){let o=null,e=null,t=1;return n.eat(ow),n.charCode()===Q7&&(n.peek(),t=-1),t==-1&&n.charCode()===Y7?n.peek():(o=t*Number(iw(n)),Rv[n.charCode()]!==0&&(o+=jh(n))),nw(n),n.eat(IO),nw(n),n.charCode()===Y7?n.peek():(t=1,n.charCode()===Q7&&(n.peek(),t=-1),e=t*Number(iw(n)),Rv[n.charCode()]!==0&&(e+=jh(n))),n.eat(NO),{type:"Range",min:o,max:e}}function ufe(n){let o,e=null;return n.eat(AO),o=jh(n),n.charCode()===tV&&n.nextCharCode()===sfe&&(n.pos+=2,o+="()"),n.charCodeAt(n.findWsEnd(n.pos))===ow&&(nw(n),e=pfe(n)),n.eat(iV),$h(n,{type:"Type",name:o,opts:e})}function gfe(n){let o=jh(n);return n.charCode()===tV?(n.pos++,{type:"Function",name:o}):$h(n,{type:"Keyword",name:o})}function hfe(n,o){function e(i,a){return{type:"Group",terms:i,combinator:a,disallowEmpty:!1,explicit:!1}}let t;for(o=Object.keys(o).sort((i,a)=>Z7[i]-Z7[a]);o.length>0;){t=o.shift();let i=0,a=0;for(;i<n.length;i++){let s=n[i];s.type==="Combinator"&&(s.value===t?(a===-1&&(a=i-1),n.splice(i,1),i--):(a!==-1&&i-a>1&&(n.splice(a,i-a,e(n.slice(a,i),t)),i=a+1),a=-1))}a!==-1&&o.length&&n.splice(a,i-a,e(n.slice(a,i),t))}return t}function oV(n){let o=[],e={},t,i=null,a=n.pos;for(;t=ffe(n);)t.type!=="Spaces"&&(t.type==="Combinator"?((i===null||i.type==="Combinator")&&(n.pos=a,n.error("Unexpected combinator")),e[t.value]=!0):i!==null&&i.type!=="Combinator"&&(e[" "]=!0,o.push({type:"Combinator",value:" "})),o.push(t),i=t,a=n.pos);return i!==null&&i.type==="Combinator"&&(n.pos-=a,n.error("Unexpected combinator")),{type:"Group",terms:o,combinator:hfe(o,e)||" ",disallowEmpty:!1,explicit:!1}}function _fe(n){let o;return n.eat(ow),o=oV(n),n.eat(NO),o.explicit=!0,n.charCode()===eV&&(n.pos++,o.disallowEmpty=!0),o}function ffe(n){let o=n.charCode();if(o<128&&Rv[o]===1)return gfe(n);switch(o){case NO:break;case ow:return $h(n,_fe(n));case AO:return n.nextCharCode()===ew?mfe(n):ufe(n);case K7:return{type:"Combinator",value:n.substringToPos(n.pos+(n.nextCharCode()===K7?2:1))};case q7:return n.pos++,n.eat(q7),{type:"Combinator",value:"&&"};case IO:return n.pos++,{type:"Comma"};case ew:return $h(n,{type:"String",value:cfe(n)});case rfe:case nfe:case ife:case afe:case ofe:return{type:"Spaces",value:nw(n)};case lfe:return o=n.nextCharCode(),o<128&&Rv[o]===1?(n.pos++,{type:"AtKeyword",name:jh(n)}):TO(n);case nV:case DO:case EO:case OO:case eV:break;case tw:if(o=n.nextCharCode(),o<48||o>57)return TO(n);break;default:return TO(n)}}function zv(n){let o=new Jy(n),e=oV(o);return o.pos!==n.length&&o.error("Unexpected input"),e.terms.length===1&&e.terms[0].type==="Group"?e.terms[0]:e}var Lv=function(){};function aV(n){return typeof n=="function"?n:Lv}function FO(n,o,e){function t(s){switch(i.call(e,s),s.type){case"Group":s.terms.forEach(t);break;case"Multiplier":t(s.term);break;case"Type":case"Property":case"Keyword":case"AtKeyword":case"Function":case"String":case"Token":case"Comma":break;default:throw new Error("Unknown type: "+s.type)}a.call(e,s)}let i=Lv,a=Lv;if(typeof o=="function"?i=o:o&&(i=aV(o.enter),a=aV(o.leave)),i===Lv&&a===Lv)throw new Error("Neither `enter` nor `leave` walker handler is set or both aren't a function");t(n,e)}var Cfe={decorator(n){let o=[],e=null;return ze(q({},n),{node(t){let i=e;e=t,n.node.call(this,t),e=i},emit(t,i,a){o.push({type:i,value:t,node:a?null:e})},result(){return o}})}};function bfe(n){let o=[];return rp(n,(e,t,i)=>o.push({type:e,value:n.slice(t,i),node:null})),o}function rV(n,o){return typeof n=="string"?bfe(n):o.generate(n,Cfe)}var no={type:"Match"},vo={type:"Mismatch"},aw={type:"DisallowEmpty"},xfe=40,yfe=41;function $r(n,o,e){return o===no&&e===vo||n===no&&o===no&&e===no?n:(n.type==="If"&&n.else===vo&&o===no&&(o=n.then,n=n.match),{type:"If",match:n,then:o,else:e})}function lV(n){return n.length>2&&n.charCodeAt(n.length-2)===xfe&&n.charCodeAt(n.length-1)===yfe}function sV(n){return n.type==="Keyword"||n.type==="AtKeyword"||n.type==="Function"||n.type==="Type"&&lV(n.name)}function RO(n,o,e){switch(n){case" ":{let t=no;for(let i=o.length-1;i>=0;i--){let a=o[i];t=$r(a,t,vo)}return t}case"|":{let t=vo,i=null;for(let a=o.length-1;a>=0;a--){let s=o[a];if(sV(s)&&(i===null&&a>0&&sV(o[a-1])&&(i=Object.create(null),t=$r({type:"Enum",map:i},no,t)),i!==null)){let d=(lV(s.name)?s.name.slice(0,-1):s.name).toLowerCase();if(!(d in i)){i[d]=s;continue}}i=null,t=$r(s,no,t)}return t}case"&&":{if(o.length>5)return{type:"MatchOnce",terms:o,all:!0};let t=vo;for(let i=o.length-1;i>=0;i--){let a=o[i],s;o.length>1?s=RO(n,o.filter(function(d){return d!==a}),!1):s=no,t=$r(a,s,t)}return t}case"||":{if(o.length>5)return{type:"MatchOnce",terms:o,all:!1};let t=e?no:vo;for(let i=o.length-1;i>=0;i--){let a=o[i],s;o.length>1?s=RO(n,o.filter(function(d){return d!==a}),!0):s=no,t=$r(a,s,t)}return t}}}function wfe(n){let o=no,e=zO(n.term);if(n.max===0)e=$r(e,aw,vo),o=$r(e,null,vo),o.then=$r(no,no,o),n.comma&&(o.then.else=$r({type:"Comma",syntax:n},o,vo));else for(let t=n.min||1;t<=n.max;t++)n.comma&&o!==no&&(o=$r({type:"Comma",syntax:n},o,vo)),o=$r(e,$r(no,no,o),vo);if(n.min===0)o=$r(no,no,o);else for(let t=0;t<n.min-1;t++)n.comma&&o!==no&&(o=$r({type:"Comma",syntax:n},o,vo)),o=$r(e,o,vo);return o}function zO(n){if(typeof n=="function")return{type:"Generic",fn:n};switch(n.type){case"Group":{let o=RO(n.combinator,n.terms.map(zO),!1);return n.disallowEmpty&&(o=$r(o,aw,vo)),o}case"Multiplier":return wfe(n);case"Type":case"Property":return{type:n.type,name:n.name,syntax:n};case"Keyword":return{type:n.type,name:n.name.toLowerCase(),syntax:n};case"AtKeyword":return{type:n.type,name:"@"+n.name.toLowerCase(),syntax:n};case"Function":return{type:n.type,name:n.name.toLowerCase()+"(",syntax:n};case"String":return n.value.length===3?{type:"Token",value:n.value.charAt(1),syntax:n}:{type:n.type,value:n.value.substr(1,n.value.length-2).replace(/\\'/g,"'"),syntax:n};case"Token":return{type:n.type,value:n.value,syntax:n};case"Comma":return{type:n.type,syntax:n};default:throw new Error("Unknown node type:",n.type)}}function rw(n,o){return typeof n=="string"&&(n=zv(n)),{type:"MatchGraph",match:zO(n),syntax:o||null,source:n}}var{hasOwnProperty:cV}=Object.prototype,Mfe=0,Sfe=1,VO=2,gV=3,dV="Match",kfe="Mismatch",Pfe="Maximum iteration number exceeded (please fill an issue on https://github.com/csstree/csstree/issues)",mV=15e3,Tfe=0;function Efe(n){let o=null,e=null,t=n;for(;t!==null;)e=t.prev,t.prev=o,o=t,t=e;return o}function LO(n,o){if(n.length!==o.length)return!1;for(let e=0;e<n.length;e++){let t=o.charCodeAt(e),i=n.charCodeAt(e);if(i>=65&&i<=90&&(i=i|32),i!==t)return!1}return!0}function Ofe(n){return n.type!==9?!1:n.value!=="?"}function pV(n){return n===null?!0:n.type===18||n.type===2||n.type===21||n.type===19||n.type===23||Ofe(n)}function uV(n){return n===null?!0:n.type===22||n.type===20||n.type===24||n.type===9&&n.value==="/"}function Dfe(n,o,e){function t(){do O++,S=O<n.length?n[O]:null;while(S!==null&&(S.type===13||S.type===25))}function i(F){let I=O+F;return I<n.length?n[I]:null}function a(F,I){return{nextState:F,matchStack:D,syntaxStack:C,thenStack:M,tokenIndex:O,prev:I}}function s(F){M={nextState:F,matchStack:D,syntaxStack:C,prev:M}}function d(F){x=a(F,x)}function p(){D={type:Sfe,syntax:o.syntax,token:S,prev:D},t(),b=null,O>A&&(A=O)}function u(){C={syntax:o.syntax,opts:o.syntax.opts||C!==null&&C.opts||null,prev:C},D={type:VO,syntax:o.syntax,token:D.token,prev:D}}function g(){D.type===VO?D=D.prev:D={type:gV,syntax:C.syntax,token:D.token,prev:D},C=C.prev}let C=null,M=null,x=null,b=null,P=0,k=null,S=null,O=-1,A=0,D={type:Mfe,syntax:null,token:null,prev:null};for(t();k===null&&++P<mV;)switch(o.type){case"Match":if(M===null){if(S!==null&&(O!==n.length-1||S.value!=="\\0"&&S.value!=="\\9")){o=vo;break}k=dV;break}if(o=M.nextState,o===aw)if(M.matchStack===D){o=vo;break}else o=no;for(;M.syntaxStack!==C;)g();M=M.prev;break;case"Mismatch":if(b!==null&&b!==!1)(x===null||O>x.tokenIndex)&&(x=b,b=!1);else if(x===null){k=kfe;break}o=x.nextState,M=x.thenStack,C=x.syntaxStack,D=x.matchStack,O=x.tokenIndex,S=O<n.length?n[O]:null,x=x.prev;break;case"MatchGraph":o=o.match;break;case"If":o.else!==vo&&d(o.else),o.then!==no&&s(o.then),o=o.match;break;case"MatchOnce":o={type:"MatchOnceBuffer",syntax:o,index:0,mask:0};break;case"MatchOnceBuffer":{let B=o.syntax.terms;if(o.index===B.length){if(o.mask===0||o.syntax.all){o=vo;break}o=no;break}if(o.mask===(1<<B.length)-1){o=no;break}for(;o.index<B.length;o.index++){let le=1<<o.index;if((o.mask&le)===0){d(o),s({type:"AddMatchOnce",syntax:o.syntax,mask:o.mask|le}),o=B[o.index++];break}}break}case"AddMatchOnce":o={type:"MatchOnceBuffer",syntax:o.syntax,index:0,mask:o.mask};break;case"Enum":if(S!==null){let B=S.value.toLowerCase();if(B.indexOf("\\")!==-1&&(B=B.replace(/\\[09].*$/,"")),cV.call(o.map,B)){o=o.map[B];break}}o=vo;break;case"Generic":{let B=C!==null?C.opts:null,le=O+Math.floor(o.fn(S,i,B));if(!isNaN(le)&&le>O){for(;O<le;)p();o=no}else o=vo;break}case"Type":case"Property":{let B=o.type==="Type"?"types":"properties",le=cV.call(e,B)?e[B][o.name]:null;if(!le||!le.match)throw new Error("Bad syntax reference: "+(o.type==="Type"?"<"+o.name+">":"<'"+o.name+"'>"));if(b!==!1&&S!==null&&o.type==="Type"&&(o.name==="custom-ident"&&S.type===1||o.name==="length"&&S.value==="0")){b===null&&(b=a(o,x)),o=vo;break}u(),o=le.match;break}case"Keyword":{let B=o.name;if(S!==null){let le=S.value;if(le.indexOf("\\")!==-1&&(le=le.replace(/\\[09].*$/,"")),LO(le,B)){p(),o=no;break}}o=vo;break}case"AtKeyword":case"Function":if(S!==null&&LO(S.value,o.name)){p(),o=no;break}o=vo;break;case"Token":if(S!==null&&S.value===o.value){p(),o=no;break}o=vo;break;case"Comma":S!==null&&S.type===18?pV(D.token)?o=vo:(p(),o=uV(S)?vo:no):o=pV(D.token)||uV(S)?no:vo;break;case"String":let F="",I=O;for(;I<n.length&&F.length<o.value.length;I++)F+=n[I].value;if(LO(F,o.value)){for(;O<I;)p();o=no}else o=vo;break;default:throw new Error("Unknown node type: "+o.type)}switch(Tfe+=P,k){case null:console.warn("[csstree-match] BREAK after "+mV+" iterations"),k=Pfe,D=null;break;case dV:for(;C!==null;)g();break;default:D=null}return{tokens:n,reason:k,iterations:P,match:D,longestMatch:A}}function BO(n,o,e){let t=Dfe(n,o,e||{});if(t.match===null)return t;let i=t.match,a=t.match={syntax:o.syntax||null,match:[]},s=[a];for(i=Efe(i).prev;i!==null;){switch(i.type){case VO:a.match.push(a={syntax:i.syntax,match:[]}),s.push(a);break;case gV:s.pop(),a=s[s.length-1];break;default:a.match.push({syntax:i.syntax||null,token:i.token.value,node:i.token.node})}i=i.prev}return t}var $O={};qn($O,{getTrace:()=>hV,isKeyword:()=>Nfe,isProperty:()=>Afe,isType:()=>Ife});function hV(n){function o(i){return i===null?!1:i.type==="Type"||i.type==="Property"||i.type==="Keyword"}function e(i){if(Array.isArray(i.match)){for(let a=0;a<i.match.length;a++)if(e(i.match[a]))return o(i.syntax)&&t.unshift(i.syntax),!0}else if(i.node===n)return t=o(i.syntax)?[i.syntax]:[],!0;return!1}let t=null;return this.matched!==null&&e(this.matched),t}function Ife(n,o){return jO(this,n,e=>e.type==="Type"&&e.name===o)}function Afe(n,o){return jO(this,n,e=>e.type==="Property"&&e.name===o)}function Nfe(n){return jO(this,n,o=>o.type==="Keyword")}function jO(n,o,e){let t=hV.call(n,o);return t===null?!1:t.some(e)}function _V(n){return"node"in n?n.node:_V(n.match[0])}function fV(n){return"node"in n?n.node:fV(n.match[n.match.length-1])}function HO(n,o,e,t,i){function a(d){if(d.syntax!==null&&d.syntax.type===t&&d.syntax.name===i){let p=_V(d),u=fV(d);n.syntax.walk(o,function(g,C,M){if(g===p){let x=new ms;do{if(x.appendData(C.data),C.data===u)break;C=C.next}while(C!==null);s.push({parent:M,nodes:x})}})}Array.isArray(d.match)&&d.match.forEach(a)}let s=[];return e.matched!==null&&a(e.matched),s}var{hasOwnProperty:Vv}=Object.prototype;function UO(n){return typeof n=="number"&&isFinite(n)&&Math.floor(n)===n&&n>=0}function vV(n){return!!n&&UO(n.offset)&&UO(n.line)&&UO(n.column)}function Ffe(n,o){return function(t,i){if(!t||t.constructor!==Object)return i(t,"Type of node should be an Object");for(let a in t){let s=!0;if(Vv.call(t,a)!==!1){if(a==="type")t.type!==n&&i(t,"Wrong node type `"+t.type+"`, expected `"+n+"`");else if(a==="loc"){if(t.loc===null)continue;if(t.loc&&t.loc.constructor===Object)if(typeof t.loc.source!="string")a+=".source";else if(!vV(t.loc.start))a+=".start";else if(!vV(t.loc.end))a+=".end";else continue;s=!1}else if(o.hasOwnProperty(a)){s=!1;for(let d=0;!s&&d<o[a].length;d++){let p=o[a][d];switch(p){case String:s=typeof t[a]=="string";break;case Boolean:s=typeof t[a]=="boolean";break;case null:s=t[a]===null;break;default:typeof p=="string"?s=t[a]&&t[a].type===p:Array.isArray(p)&&(s=t[a]instanceof ms)}}}else i(t,"Unknown field `"+a+"` for "+n+" node type");s||i(t,"Bad value for `"+n+"."+a+"`")}}for(let a in o)Vv.call(o,a)&&Vv.call(t,a)===!1&&i(t,"Field `"+n+"."+a+"` is missed")}}function Rfe(n,o){let e=o.structure,t={type:String,loc:!0},i={type:'"'+n+'"'};for(let a in e){if(Vv.call(e,a)===!1)continue;let s=[],d=t[a]=Array.isArray(e[a])?e[a].slice():[e[a]];for(let p=0;p<d.length;p++){let u=d[p];if(u===String||u===Boolean)s.push(u.name);else if(u===null)s.push("null");else if(typeof u=="string")s.push("<"+u+">");else if(Array.isArray(u))s.push("List");else throw new Error("Wrong value `"+u+"` in `"+n+"."+a+"` structure definition")}i[a]=s.join(" | ")}return{docs:i,check:Ffe(n,t)}}function CV(n){let o={};if(n.node){for(let e in n.node)if(Vv.call(n.node,e)){let t=n.node[e];if(t.structure)o[e]=Rfe(e,t);else throw new Error("Missed `structure` field in `"+e+"` node type definition")}}return o}var zfe=rw(Ky.join(" | "));function WO(n,o,e){let t={};for(let i in n)n[i].syntax&&(t[i]=e?n[i].syntax:zh(n[i].syntax,{compact:o}));return t}function Lfe(n,o,e){let t={};for(let[i,a]of Object.entries(n))t[i]={prelude:a.prelude&&(e?a.prelude.syntax:zh(a.prelude.syntax,{compact:o})),descriptors:a.descriptors&&WO(a.descriptors,o,e)};return t}function Vfe(n){for(let o=0;o<n.length;o++)if(n[o].value.toLowerCase()==="var(")return!0;return!1}function xc(n,o,e){return q({matched:n,iterations:e,error:o},$O)}function Hh(n,o,e,t){let i=rV(e,n.syntax),a;return Vfe(i)?xc(null,new Error("Matching for a tree with var() is not supported")):(t&&(a=BO(i,n.cssWideKeywordsSyntax,n)),(!t||!a.match)&&(a=BO(i,o.match,n),!a.match)?xc(null,new L7(a.reason,o.syntax,e,a),a.iterations):xc(a.match,null,a.iterations))}var Uh=class{constructor(o,e,t){if(this.cssWideKeywordsSyntax=zfe,this.syntax=e,this.generic=!1,this.units=q({},Zy),this.atrules=Object.create(null),this.properties=Object.create(null),this.types=Object.create(null),this.structure=t||CV(o),o){if(o.units)for(let i of Object.keys(Zy))Array.isArray(o.units[i])&&(this.units[i]=o.units[i]);if(o.types)for(let i in o.types)this.addType_(i,o.types[i]);if(o.generic){this.generic=!0;for(let[i,a]of Object.entries(G7(this.units)))this.addType_(i,a)}if(o.atrules)for(let i in o.atrules)this.addAtrule_(i,o.atrules[i]);if(o.properties)for(let i in o.properties)this.addProperty_(i,o.properties[i])}}checkStructure(o){function e(a,s){i.push({node:a,message:s})}let t=this.structure,i=[];return this.syntax.walk(o,function(a){t.hasOwnProperty(a.type)?t[a.type].check(a,e):e(a,"Unknown node type `"+a.type+"`")}),i.length?i:!1}createDescriptor(o,e,t,i=null){let a={type:e,name:t},s={type:e,name:t,parent:i,serializable:typeof o=="string"||o&&typeof o.type=="string",syntax:null,match:null};return typeof o=="function"?s.match=rw(o,a):(typeof o=="string"?Object.defineProperty(s,"syntax",{get(){return Object.defineProperty(s,"syntax",{value:zv(o)}),s.syntax}}):s.syntax=o,Object.defineProperty(s,"match",{get(){return Object.defineProperty(s,"match",{value:rw(s.syntax,a)}),s.match}})),s}addAtrule_(o,e){e&&(this.atrules[o]={type:"Atrule",name:o,prelude:e.prelude?this.createDescriptor(e.prelude,"AtrulePrelude",o):null,descriptors:e.descriptors?Object.keys(e.descriptors).reduce((t,i)=>(t[i]=this.createDescriptor(e.descriptors[i],"AtruleDescriptor",i,o),t),Object.create(null)):null})}addProperty_(o,e){e&&(this.properties[o]=this.createDescriptor(e,"Property",o))}addType_(o,e){e&&(this.types[o]=this.createDescriptor(e,"Type",o))}checkAtruleName(o){if(!this.getAtrule(o))return new Lh("Unknown at-rule","@"+o)}checkAtrulePrelude(o,e){let t=this.checkAtruleName(o);if(t)return t;let i=this.getAtrule(o);if(!i.prelude&&e)return new SyntaxError("At-rule `@"+o+"` should not contain a prelude");if(i.prelude&&!e&&!Hh(this,i.prelude,"",!1).matched)return new SyntaxError("At-rule `@"+o+"` should contain a prelude")}checkAtruleDescriptorName(o,e){let t=this.checkAtruleName(o);if(t)return t;let i=this.getAtrule(o),a=qy(e);if(!i.descriptors)return new SyntaxError("At-rule `@"+o+"` has no known descriptors");if(!i.descriptors[a.name]&&!i.descriptors[a.basename])return new Lh("Unknown at-rule descriptor",e)}checkPropertyName(o){if(!this.getProperty(o))return new Lh("Unknown property",o)}matchAtrulePrelude(o,e){let t=this.checkAtrulePrelude(o,e);if(t)return xc(null,t);let i=this.getAtrule(o);return i.prelude?Hh(this,i.prelude,e||"",!1):xc(null,null)}matchAtruleDescriptor(o,e,t){let i=this.checkAtruleDescriptorName(o,e);if(i)return xc(null,i);let a=this.getAtrule(o),s=qy(e);return Hh(this,a.descriptors[s.name]||a.descriptors[s.basename],t,!1)}matchDeclaration(o){return o.type!=="Declaration"?xc(null,new Error("Not a Declaration node")):this.matchProperty(o.property,o.value)}matchProperty(o,e){if(CO(o).custom)return xc(null,new Error("Lexer matching doesn't applicable for custom properties"));let t=this.checkPropertyName(o);return t?xc(null,t):Hh(this,this.getProperty(o),e,!0)}matchType(o,e){let t=this.getType(o);return t?Hh(this,t,e,!1):xc(null,new Lh("Unknown type",o))}match(o,e){return typeof o!="string"&&(!o||!o.type)?xc(null,new Lh("Bad syntax")):((typeof o=="string"||!o.match)&&(o=this.createDescriptor(o,"Type","anonymous")),Hh(this,o,e,!1))}findValueFragments(o,e,t,i){return HO(this,e,this.matchProperty(o,e),t,i)}findDeclarationValueFragments(o,e,t){return HO(this,o.value,this.matchDeclaration(o),e,t)}findAllFragments(o,e,t){let i=[];return this.syntax.walk(o,{visit:"Declaration",enter:a=>{i.push.apply(i,this.findDeclarationValueFragments(a,e,t))}}),i}getAtrule(o,e=!0){let t=qy(o);return(t.vendor&&e?this.atrules[t.name]||this.atrules[t.basename]:this.atrules[t.name])||null}getAtrulePrelude(o,e=!0){let t=this.getAtrule(o,e);return t&&t.prelude||null}getAtruleDescriptor(o,e){return this.atrules.hasOwnProperty(o)&&this.atrules.declarators&&this.atrules[o].declarators[e]||null}getProperty(o,e=!0){let t=CO(o);return(t.vendor&&e?this.properties[t.name]||this.properties[t.basename]:this.properties[t.name])||null}getType(o){return hasOwnProperty.call(this.types,o)?this.types[o]:null}validate(){function o(i,a,s,d){if(s.has(a))return s.get(a);s.set(a,!1),d.syntax!==null&&FO(d.syntax,function(p){if(p.type!=="Type"&&p.type!=="Property")return;let u=p.type==="Type"?i.types:i.properties,g=p.type==="Type"?e:t;(!hasOwnProperty.call(u,p.name)||o(i,p.name,g,u[p.name]))&&s.set(a,!0)},this)}let e=new Map,t=new Map;for(let i in this.types)o(this,i,e,this.types[i]);for(let i in this.properties)o(this,i,t,this.properties[i]);return e=[...e.keys()].filter(i=>e.get(i)),t=[...t.keys()].filter(i=>t.get(i)),e.length||t.length?{types:e,properties:t}:null}dump(o,e){return{generic:this.generic,units:this.units,types:WO(this.types,!e,o),properties:WO(this.properties,!e,o),atrules:Lfe(this.atrules,!e,o)}}toString(){return JSON.stringify(this.dump())}};function GO(n,o){return typeof o=="string"&&/^\s*\|/.test(o)?typeof n=="string"?n+o:o.replace(/^\s*\|\s*/,""):o||null}function bV(n,o){let e=Object.create(null);for(let[t,i]of Object.entries(n))if(i){e[t]={};for(let a of Object.keys(i))o.includes(a)&&(e[t][a]=i[a])}return e}function Bv(n,o){let e=q({},n);for(let[t,i]of Object.entries(o))switch(t){case"generic":e[t]=!!i;break;case"units":e[t]=q({},n[t]);for(let[a,s]of Object.entries(i))e[t][a]=Array.isArray(s)?s:[];break;case"atrules":e[t]=q({},n[t]);for(let[a,s]of Object.entries(i)){let d=e[t][a]||{},p=e[t][a]={prelude:d.prelude||null,descriptors:q({},d.descriptors)};if(s){p.prelude=s.prelude?GO(p.prelude,s.prelude):p.prelude||null;for(let[u,g]of Object.entries(s.descriptors||{}))p.descriptors[u]=g?GO(p.descriptors[u],g):null;Object.keys(p.descriptors).length||(p.descriptors=null)}}break;case"types":case"properties":e[t]=q({},n[t]);for(let[a,s]of Object.entries(i))e[t][a]=GO(e[t][a],s);break;case"scope":e[t]=q({},n[t]);for(let[a,s]of Object.entries(i))e[t][a]=q(q({},e[t][a]),s);break;case"parseContext":e[t]=q(q({},n[t]),i);break;case"atrule":case"pseudo":e[t]=q(q({},n[t]),bV(i,["parse"]));break;case"node":e[t]=q(q({},n[t]),bV(i,["name","structure","parse","generate","walkContext"]));break}return e}function xV(n){let o=a7(n),e=R7(n),t=O7(n),{fromPlainObject:i,toPlainObject:a}=D7(e),s={lexer:null,createLexer:d=>new Uh(d,s,s.lexer.structure),tokenize:rp,parse:o,generate:t,walk:e,find:e.find,findLast:e.findLast,findAll:e.findAll,fromPlainObject:i,toPlainObject:a,fork(d){let p=Bv({},n);return xV(typeof d=="function"?d(p,Object.assign):Bv(p,d))}};return s.lexer=new Uh({generic:!0,units:n.units,types:n.types,atrules:n.atrules,properties:n.properties,node:n.node},s),s}var qO=n=>xV(Bv({},n));var yV={generic:!0,units:{angle:["deg","grad","rad","turn"],decibel:["db"],flex:["fr"],frequency:["hz","khz"],length:["cm","mm","q","in","pt","pc","px","em","rem","ex","rex","cap","rcap","ch","rch","ic","ric","lh","rlh","vw","svw","lvw","dvw","vh","svh","lvh","dvh","vi","svi","lvi","dvi","vb","svb","lvb","dvb","vmin","svmin","lvmin","dvmin","vmax","svmax","lvmax","dvmax","cqw","cqh","cqi","cqb","cqmin","cqmax"],resolution:["dpi","dpcm","dppx","x"],semitones:["st"],time:["s","ms"]},types:{"abs()":"abs( <calc-sum> )","absolute-size":"xx-small|x-small|small|medium|large|x-large|xx-large|xxx-large","acos()":"acos( <calc-sum> )","alpha-value":"<number>|<percentage>","angle-percentage":"<angle>|<percentage>","angular-color-hint":"<angle-percentage>","angular-color-stop":"<color>&&<color-stop-angle>?","angular-color-stop-list":"[<angular-color-stop> [, <angular-color-hint>]?]# , <angular-color-stop>","animateable-feature":"scroll-position|contents|<custom-ident>","asin()":"asin( <calc-sum> )","atan()":"atan( <calc-sum> )","atan2()":"atan2( <calc-sum> , <calc-sum> )",attachment:"scroll|fixed|local","attr()":"attr( <attr-name> <type-or-unit>? [, <attr-fallback>]? )","attr-matcher":"['~'|'|'|'^'|'$'|'*']? '='","attr-modifier":"i|s","attribute-selector":"'[' <wq-name> ']'|'[' <wq-name> <attr-matcher> [<string-token>|<ident-token>] <attr-modifier>? ']'","auto-repeat":"repeat( [auto-fill|auto-fit] , [<line-names>? <fixed-size>]+ <line-names>? )","auto-track-list":"[<line-names>? [<fixed-size>|<fixed-repeat>]]* <line-names>? <auto-repeat> [<line-names>? [<fixed-size>|<fixed-repeat>]]* <line-names>?",axis:"block|inline|vertical|horizontal","baseline-position":"[first|last]? baseline","basic-shape":"<inset()>|<circle()>|<ellipse()>|<polygon()>|<path()>","bg-image":"none|<image>","bg-layer":"<bg-image>||<bg-position> [/ <bg-size>]?||<repeat-style>||<attachment>||<box>||<box>","bg-position":"[[left|center|right|top|bottom|<length-percentage>]|[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]|[center|[left|right] <length-percentage>?]&&[center|[top|bottom] <length-percentage>?]]","bg-size":"[<length-percentage>|auto]{1,2}|cover|contain","blur()":"blur( <length> )","blend-mode":"normal|multiply|screen|overlay|darken|lighten|color-dodge|color-burn|hard-light|soft-light|difference|exclusion|hue|saturation|color|luminosity",box:"border-box|padding-box|content-box","brightness()":"brightness( <number-percentage> )","calc()":"calc( <calc-sum> )","calc-sum":"<calc-product> [['+'|'-'] <calc-product>]*","calc-product":"<calc-value> ['*' <calc-value>|'/' <number>]*","calc-value":"<number>|<dimension>|<percentage>|<calc-constant>|( <calc-sum> )","calc-constant":"e|pi|infinity|-infinity|NaN","cf-final-image":"<image>|<color>","cf-mixing-image":"<percentage>?&&<image>","circle()":"circle( [<shape-radius>]? [at <position>]? )","clamp()":"clamp( <calc-sum>#{3} )","class-selector":"'.' <ident-token>","clip-source":"<url>",color:"<rgb()>|<rgba()>|<hsl()>|<hsla()>|<hwb()>|<lab()>|<lch()>|<hex-color>|<named-color>|currentcolor|<deprecated-system-color>","color-stop":"<color-stop-length>|<color-stop-angle>","color-stop-angle":"<angle-percentage>{1,2}","color-stop-length":"<length-percentage>{1,2}","color-stop-list":"[<linear-color-stop> [, <linear-color-hint>]?]# , <linear-color-stop>",combinator:"'>'|'+'|'~'|['||']","common-lig-values":"[common-ligatures|no-common-ligatures]","compat-auto":"searchfield|textarea|push-button|slider-horizontal|checkbox|radio|square-button|menulist|listbox|meter|progress-bar|button","composite-style":"clear|copy|source-over|source-in|source-out|source-atop|destination-over|destination-in|destination-out|destination-atop|xor","compositing-operator":"add|subtract|intersect|exclude","compound-selector":"[<type-selector>? <subclass-selector>* [<pseudo-element-selector> <pseudo-class-selector>*]*]!","compound-selector-list":"<compound-selector>#","complex-selector":"<compound-selector> [<combinator>? <compound-selector>]*","complex-selector-list":"<complex-selector>#","conic-gradient()":"conic-gradient( [from <angle>]? [at <position>]? , <angular-color-stop-list> )","contextual-alt-values":"[contextual|no-contextual]","content-distribution":"space-between|space-around|space-evenly|stretch","content-list":"[<string>|contents|<image>|<counter>|<quote>|<target>|<leader()>|<attr()>]+","content-position":"center|start|end|flex-start|flex-end","content-replacement":"<image>","contrast()":"contrast( [<number-percentage>] )","cos()":"cos( <calc-sum> )",counter:"<counter()>|<counters()>","counter()":"counter( <counter-name> , <counter-style>? )","counter-name":"<custom-ident>","counter-style":"<counter-style-name>|symbols( )","counter-style-name":"<custom-ident>","counters()":"counters( <counter-name> , <string> , <counter-style>? )","cross-fade()":"cross-fade( <cf-mixing-image> , <cf-final-image>? )","cubic-bezier-timing-function":"ease|ease-in|ease-out|ease-in-out|cubic-bezier( <number [0,1]> , <number> , <number [0,1]> , <number> )","deprecated-system-color":"ActiveBorder|ActiveCaption|AppWorkspace|Background|ButtonFace|ButtonHighlight|ButtonShadow|ButtonText|CaptionText|GrayText|Highlight|HighlightText|InactiveBorder|InactiveCaption|InactiveCaptionText|InfoBackground|InfoText|Menu|MenuText|Scrollbar|ThreeDDarkShadow|ThreeDFace|ThreeDHighlight|ThreeDLightShadow|ThreeDShadow|Window|WindowFrame|WindowText","discretionary-lig-values":"[discretionary-ligatures|no-discretionary-ligatures]","display-box":"contents|none","display-inside":"flow|flow-root|table|flex|grid|ruby","display-internal":"table-row-group|table-header-group|table-footer-group|table-row|table-cell|table-column-group|table-column|table-caption|ruby-base|ruby-text|ruby-base-container|ruby-text-container","display-legacy":"inline-block|inline-list-item|inline-table|inline-flex|inline-grid","display-listitem":"<display-outside>?&&[flow|flow-root]?&&list-item","display-outside":"block|inline|run-in","drop-shadow()":"drop-shadow( <length>{2,3} <color>? )","east-asian-variant-values":"[jis78|jis83|jis90|jis04|simplified|traditional]","east-asian-width-values":"[full-width|proportional-width]","element()":"element( <custom-ident> , [first|start|last|first-except]? )|element( <id-selector> )","ellipse()":"ellipse( [<shape-radius>{2}]? [at <position>]? )","ending-shape":"circle|ellipse","env()":"env( <custom-ident> , <declaration-value>? )","exp()":"exp( <calc-sum> )","explicit-track-list":"[<line-names>? <track-size>]+ <line-names>?","family-name":"<string>|<custom-ident>+","feature-tag-value":"<string> [<integer>|on|off]?","feature-type":"@stylistic|@historical-forms|@styleset|@character-variant|@swash|@ornaments|@annotation","feature-value-block":"<feature-type> '{' <feature-value-declaration-list> '}'","feature-value-block-list":"<feature-value-block>+","feature-value-declaration":"<custom-ident> : <integer>+ ;","feature-value-declaration-list":"<feature-value-declaration>","feature-value-name":"<custom-ident>","fill-rule":"nonzero|evenodd","filter-function":"<blur()>|<brightness()>|<contrast()>|<drop-shadow()>|<grayscale()>|<hue-rotate()>|<invert()>|<opacity()>|<saturate()>|<sepia()>","filter-function-list":"[<filter-function>|<url>]+","final-bg-layer":"<'background-color'>||<bg-image>||<bg-position> [/ <bg-size>]?||<repeat-style>||<attachment>||<box>||<box>","fixed-breadth":"<length-percentage>","fixed-repeat":"repeat( [<integer [1,\u221E]>] , [<line-names>? <fixed-size>]+ <line-names>? )","fixed-size":"<fixed-breadth>|minmax( <fixed-breadth> , <track-breadth> )|minmax( <inflexible-breadth> , <fixed-breadth> )","font-stretch-absolute":"normal|ultra-condensed|extra-condensed|condensed|semi-condensed|semi-expanded|expanded|extra-expanded|ultra-expanded|<percentage>","font-variant-css21":"[normal|small-caps]","font-weight-absolute":"normal|bold|<number [1,1000]>","frequency-percentage":"<frequency>|<percentage>","general-enclosed":"[<function-token> <any-value> )]|( <ident> <any-value> )","generic-family":"serif|sans-serif|cursive|fantasy|monospace|-apple-system","generic-name":"serif|sans-serif|cursive|fantasy|monospace","geometry-box":"<shape-box>|fill-box|stroke-box|view-box",gradient:"<linear-gradient()>|<repeating-linear-gradient()>|<radial-gradient()>|<repeating-radial-gradient()>|<conic-gradient()>|<repeating-conic-gradient()>|<-legacy-gradient>","grayscale()":"grayscale( <number-percentage> )","grid-line":"auto|<custom-ident>|[<integer>&&<custom-ident>?]|[span&&[<integer>||<custom-ident>]]","historical-lig-values":"[historical-ligatures|no-historical-ligatures]","hsl()":"hsl( <hue> <percentage> <percentage> [/ <alpha-value>]? )|hsl( <hue> , <percentage> , <percentage> , <alpha-value>? )","hsla()":"hsla( <hue> <percentage> <percentage> [/ <alpha-value>]? )|hsla( <hue> , <percentage> , <percentage> , <alpha-value>? )",hue:"<number>|<angle>","hue-rotate()":"hue-rotate( <angle> )","hwb()":"hwb( [<hue>|none] [<percentage>|none] [<percentage>|none] [/ [<alpha-value>|none]]? )","hypot()":"hypot( <calc-sum># )",image:"<url>|<image()>|<image-set()>|<element()>|<paint()>|<cross-fade()>|<gradient>","image()":"image( <image-tags>? [<image-src>? , <color>?]! )","image-set()":"image-set( <image-set-option># )","image-set-option":"[<image>|<string>] [<resolution>||type( <string> )]","image-src":"<url>|<string>","image-tags":"ltr|rtl","inflexible-breadth":"<length-percentage>|min-content|max-content|auto","inset()":"inset( <length-percentage>{1,4} [round <'border-radius'>]? )","invert()":"invert( <number-percentage> )","keyframes-name":"<custom-ident>|<string>","keyframe-block":"<keyframe-selector># { <declaration-list> }","keyframe-block-list":"<keyframe-block>+","keyframe-selector":"from|to|<percentage>","lab()":"lab( [<percentage>|<number>|none] [<percentage>|<number>|none] [<percentage>|<number>|none] [/ [<alpha-value>|none]]? )","layer()":"layer( <layer-name> )","layer-name":"<ident> ['.' <ident>]*","lch()":"lch( [<percentage>|<number>|none] [<percentage>|<number>|none] [<hue>|none] [/ [<alpha-value>|none]]? )","leader()":"leader( <leader-type> )","leader-type":"dotted|solid|space|<string>","length-percentage":"<length>|<percentage>","line-names":"'[' <custom-ident>* ']'","line-name-list":"[<line-names>|<name-repeat>]+","line-style":"none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset","line-width":"<length>|thin|medium|thick","linear-color-hint":"<length-percentage>","linear-color-stop":"<color> <color-stop-length>?","linear-gradient()":"linear-gradient( [<angle>|to <side-or-corner>]? , <color-stop-list> )","log()":"log( <calc-sum> , <calc-sum>? )","mask-layer":"<mask-reference>||<position> [/ <bg-size>]?||<repeat-style>||<geometry-box>||[<geometry-box>|no-clip]||<compositing-operator>||<masking-mode>","mask-position":"[<length-percentage>|left|center|right] [<length-percentage>|top|center|bottom]?","mask-reference":"none|<image>|<mask-source>","mask-source":"<url>","masking-mode":"alpha|luminance|match-source","matrix()":"matrix( <number>#{6} )","matrix3d()":"matrix3d( <number>#{16} )","max()":"max( <calc-sum># )","media-and":"<media-in-parens> [and <media-in-parens>]+","media-condition":"<media-not>|<media-and>|<media-or>|<media-in-parens>","media-condition-without-or":"<media-not>|<media-and>|<media-in-parens>","media-feature":"( [<mf-plain>|<mf-boolean>|<mf-range>] )","media-in-parens":"( <media-condition> )|<media-feature>|<general-enclosed>","media-not":"not <media-in-parens>","media-or":"<media-in-parens> [or <media-in-parens>]+","media-query":"<media-condition>|[not|only]? <media-type> [and <media-condition-without-or>]?","media-query-list":"<media-query>#","media-type":"<ident>","mf-boolean":"<mf-name>","mf-name":"<ident>","mf-plain":"<mf-name> : <mf-value>","mf-range":"<mf-name> ['<'|'>']? '='? <mf-value>|<mf-value> ['<'|'>']? '='? <mf-name>|<mf-value> '<' '='? <mf-name> '<' '='? <mf-value>|<mf-value> '>' '='? <mf-name> '>' '='? <mf-value>","mf-value":"<number>|<dimension>|<ident>|<ratio>","min()":"min( <calc-sum># )","minmax()":"minmax( [<length-percentage>|min-content|max-content|auto] , [<length-percentage>|<flex>|min-content|max-content|auto] )","mod()":"mod( <calc-sum> , <calc-sum> )","name-repeat":"repeat( [<integer [1,\u221E]>|auto-fill] , <line-names>+ )","named-color":"transparent|aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen|<-non-standard-color>","namespace-prefix":"<ident>","ns-prefix":"[<ident-token>|'*']? '|'","number-percentage":"<number>|<percentage>","numeric-figure-values":"[lining-nums|oldstyle-nums]","numeric-fraction-values":"[diagonal-fractions|stacked-fractions]","numeric-spacing-values":"[proportional-nums|tabular-nums]",nth:"<an-plus-b>|even|odd","opacity()":"opacity( [<number-percentage>] )","overflow-position":"unsafe|safe","outline-radius":"<length>|<percentage>","page-body":"<declaration>? [; <page-body>]?|<page-margin-box> <page-body>","page-margin-box":"<page-margin-box-type> '{' <declaration-list> '}'","page-margin-box-type":"@top-left-corner|@top-left|@top-center|@top-right|@top-right-corner|@bottom-left-corner|@bottom-left|@bottom-center|@bottom-right|@bottom-right-corner|@left-top|@left-middle|@left-bottom|@right-top|@right-middle|@right-bottom","page-selector-list":"[<page-selector>#]?","page-selector":"<pseudo-page>+|<ident> <pseudo-page>*","page-size":"A5|A4|A3|B5|B4|JIS-B5|JIS-B4|letter|legal|ledger","path()":"path( [<fill-rule> ,]? <string> )","paint()":"paint( <ident> , <declaration-value>? )","perspective()":"perspective( [<length [0,\u221E]>|none] )","polygon()":"polygon( <fill-rule>? , [<length-percentage> <length-percentage>]# )",position:"[[left|center|right]||[top|center|bottom]|[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]?|[[left|right] <length-percentage>]&&[[top|bottom] <length-percentage>]]","pow()":"pow( <calc-sum> , <calc-sum> )","pseudo-class-selector":"':' <ident-token>|':' <function-token> <any-value> ')'","pseudo-element-selector":"':' <pseudo-class-selector>","pseudo-page":": [left|right|first|blank]",quote:"open-quote|close-quote|no-open-quote|no-close-quote","radial-gradient()":"radial-gradient( [<ending-shape>||<size>]? [at <position>]? , <color-stop-list> )",ratio:"<number [0,\u221E]> [/ <number [0,\u221E]>]?","relative-selector":"<combinator>? <complex-selector>","relative-selector-list":"<relative-selector>#","relative-size":"larger|smaller","rem()":"rem( <calc-sum> , <calc-sum> )","repeat-style":"repeat-x|repeat-y|[repeat|space|round|no-repeat]{1,2}","repeating-conic-gradient()":"repeating-conic-gradient( [from <angle>]? [at <position>]? , <angular-color-stop-list> )","repeating-linear-gradient()":"repeating-linear-gradient( [<angle>|to <side-or-corner>]? , <color-stop-list> )","repeating-radial-gradient()":"repeating-radial-gradient( [<ending-shape>||<size>]? [at <position>]? , <color-stop-list> )","reversed-counter-name":"reversed( <counter-name> )","rgb()":"rgb( <percentage>{3} [/ <alpha-value>]? )|rgb( <number>{3} [/ <alpha-value>]? )|rgb( <percentage>#{3} , <alpha-value>? )|rgb( <number>#{3} , <alpha-value>? )","rgba()":"rgba( <percentage>{3} [/ <alpha-value>]? )|rgba( <number>{3} [/ <alpha-value>]? )|rgba( <percentage>#{3} , <alpha-value>? )|rgba( <number>#{3} , <alpha-value>? )","rotate()":"rotate( [<angle>|<zero>] )","rotate3d()":"rotate3d( <number> , <number> , <number> , [<angle>|<zero>] )","rotateX()":"rotateX( [<angle>|<zero>] )","rotateY()":"rotateY( [<angle>|<zero>] )","rotateZ()":"rotateZ( [<angle>|<zero>] )","round()":"round( <rounding-strategy>? , <calc-sum> , <calc-sum> )","rounding-strategy":"nearest|up|down|to-zero","saturate()":"saturate( <number-percentage> )","scale()":"scale( [<number>|<percentage>]#{1,2} )","scale3d()":"scale3d( [<number>|<percentage>]#{3} )","scaleX()":"scaleX( [<number>|<percentage>] )","scaleY()":"scaleY( [<number>|<percentage>] )","scaleZ()":"scaleZ( [<number>|<percentage>] )",scroller:"root|nearest","self-position":"center|start|end|self-start|self-end|flex-start|flex-end","shape-radius":"<length-percentage>|closest-side|farthest-side","sign()":"sign( <calc-sum> )","skew()":"skew( [<angle>|<zero>] , [<angle>|<zero>]? )","skewX()":"skewX( [<angle>|<zero>] )","skewY()":"skewY( [<angle>|<zero>] )","sepia()":"sepia( <number-percentage> )",shadow:"inset?&&<length>{2,4}&&<color>?","shadow-t":"[<length>{2,3}&&<color>?]",shape:"rect( <top> , <right> , <bottom> , <left> )|rect( <top> <right> <bottom> <left> )","shape-box":"<box>|margin-box","side-or-corner":"[left|right]||[top|bottom]","sin()":"sin( <calc-sum> )","single-animation":"<time>||<easing-function>||<time>||<single-animation-iteration-count>||<single-animation-direction>||<single-animation-fill-mode>||<single-animation-play-state>||[none|<keyframes-name>]","single-animation-direction":"normal|reverse|alternate|alternate-reverse","single-animation-fill-mode":"none|forwards|backwards|both","single-animation-iteration-count":"infinite|<number>","single-animation-play-state":"running|paused","single-animation-timeline":"auto|none|<timeline-name>|scroll( <axis>? <scroller>? )","single-transition":"[none|<single-transition-property>]||<time>||<easing-function>||<time>","single-transition-property":"all|<custom-ident>",size:"closest-side|farthest-side|closest-corner|farthest-corner|<length>|<length-percentage>{2}","sqrt()":"sqrt( <calc-sum> )","step-position":"jump-start|jump-end|jump-none|jump-both|start|end","step-timing-function":"step-start|step-end|steps( <integer> [, <step-position>]? )","subclass-selector":"<id-selector>|<class-selector>|<attribute-selector>|<pseudo-class-selector>","supports-condition":"not <supports-in-parens>|<supports-in-parens> [and <supports-in-parens>]*|<supports-in-parens> [or <supports-in-parens>]*","supports-in-parens":"( <supports-condition> )|<supports-feature>|<general-enclosed>","supports-feature":"<supports-decl>|<supports-selector-fn>","supports-decl":"( <declaration> )","supports-selector-fn":"selector( <complex-selector> )",symbol:"<string>|<image>|<custom-ident>","tan()":"tan( <calc-sum> )",target:"<target-counter()>|<target-counters()>|<target-text()>","target-counter()":"target-counter( [<string>|<url>] , <custom-ident> , <counter-style>? )","target-counters()":"target-counters( [<string>|<url>] , <custom-ident> , <string> , <counter-style>? )","target-text()":"target-text( [<string>|<url>] , [content|before|after|first-letter]? )","time-percentage":"<time>|<percentage>","timeline-name":"<custom-ident>|<string>","easing-function":"linear|<cubic-bezier-timing-function>|<step-timing-function>","track-breadth":"<length-percentage>|<flex>|min-content|max-content|auto","track-list":"[<line-names>? [<track-size>|<track-repeat>]]+ <line-names>?","track-repeat":"repeat( [<integer [1,\u221E]>] , [<line-names>? <track-size>]+ <line-names>? )","track-size":"<track-breadth>|minmax( <inflexible-breadth> , <track-breadth> )|fit-content( <length-percentage> )","transform-function":"<matrix()>|<translate()>|<translateX()>|<translateY()>|<scale()>|<scaleX()>|<scaleY()>|<rotate()>|<skew()>|<skewX()>|<skewY()>|<matrix3d()>|<translate3d()>|<translateZ()>|<scale3d()>|<scaleZ()>|<rotate3d()>|<rotateX()>|<rotateY()>|<rotateZ()>|<perspective()>","transform-list":"<transform-function>+","translate()":"translate( <length-percentage> , <length-percentage>? )","translate3d()":"translate3d( <length-percentage> , <length-percentage> , <length> )","translateX()":"translateX( <length-percentage> )","translateY()":"translateY( <length-percentage> )","translateZ()":"translateZ( <length> )","type-or-unit":"string|color|url|integer|number|length|angle|time|frequency|cap|ch|em|ex|ic|lh|rlh|rem|vb|vi|vw|vh|vmin|vmax|mm|Q|cm|in|pt|pc|px|deg|grad|rad|turn|ms|s|Hz|kHz|%","type-selector":"<wq-name>|<ns-prefix>? '*'","var()":"var( <custom-property-name> , <declaration-value>? )","viewport-length":"auto|<length-percentage>","visual-box":"content-box|padding-box|border-box","wq-name":"<ns-prefix>? <ident-token>","-legacy-gradient":"<-webkit-gradient()>|<-legacy-linear-gradient>|<-legacy-repeating-linear-gradient>|<-legacy-radial-gradient>|<-legacy-repeating-radial-gradient>","-legacy-linear-gradient":"-moz-linear-gradient( <-legacy-linear-gradient-arguments> )|-webkit-linear-gradient( <-legacy-linear-gradient-arguments> )|-o-linear-gradient( <-legacy-linear-gradient-arguments> )","-legacy-repeating-linear-gradient":"-moz-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )|-webkit-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )|-o-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )","-legacy-linear-gradient-arguments":"[<angle>|<side-or-corner>]? , <color-stop-list>","-legacy-radial-gradient":"-moz-radial-gradient( <-legacy-radial-gradient-arguments> )|-webkit-radial-gradient( <-legacy-radial-gradient-arguments> )|-o-radial-gradient( <-legacy-radial-gradient-arguments> )","-legacy-repeating-radial-gradient":"-moz-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )|-webkit-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )|-o-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )","-legacy-radial-gradient-arguments":"[<position> ,]? [[[<-legacy-radial-gradient-shape>||<-legacy-radial-gradient-size>]|[<length>|<percentage>]{2}] ,]? <color-stop-list>","-legacy-radial-gradient-size":"closest-side|closest-corner|farthest-side|farthest-corner|contain|cover","-legacy-radial-gradient-shape":"circle|ellipse","-non-standard-font":"-apple-system-body|-apple-system-headline|-apple-system-subheadline|-apple-system-caption1|-apple-system-caption2|-apple-system-footnote|-apple-system-short-body|-apple-system-short-headline|-apple-system-short-subheadline|-apple-system-short-caption1|-apple-system-short-footnote|-apple-system-tall-body","-non-standard-color":"-moz-ButtonDefault|-moz-ButtonHoverFace|-moz-ButtonHoverText|-moz-CellHighlight|-moz-CellHighlightText|-moz-Combobox|-moz-ComboboxText|-moz-Dialog|-moz-DialogText|-moz-dragtargetzone|-moz-EvenTreeRow|-moz-Field|-moz-FieldText|-moz-html-CellHighlight|-moz-html-CellHighlightText|-moz-mac-accentdarkestshadow|-moz-mac-accentdarkshadow|-moz-mac-accentface|-moz-mac-accentlightesthighlight|-moz-mac-accentlightshadow|-moz-mac-accentregularhighlight|-moz-mac-accentregularshadow|-moz-mac-chrome-active|-moz-mac-chrome-inactive|-moz-mac-focusring|-moz-mac-menuselect|-moz-mac-menushadow|-moz-mac-menutextselect|-moz-MenuHover|-moz-MenuHoverText|-moz-MenuBarText|-moz-MenuBarHoverText|-moz-nativehyperlinktext|-moz-OddTreeRow|-moz-win-communicationstext|-moz-win-mediatext|-moz-activehyperlinktext|-moz-default-background-color|-moz-default-color|-moz-hyperlinktext|-moz-visitedhyperlinktext|-webkit-activelink|-webkit-focus-ring-color|-webkit-link|-webkit-text","-non-standard-image-rendering":"optimize-contrast|-moz-crisp-edges|-o-crisp-edges|-webkit-optimize-contrast","-non-standard-overflow":"-moz-scrollbars-none|-moz-scrollbars-horizontal|-moz-scrollbars-vertical|-moz-hidden-unscrollable","-non-standard-width":"fill-available|min-intrinsic|intrinsic|-moz-available|-moz-fit-content|-moz-min-content|-moz-max-content|-webkit-min-content|-webkit-max-content","-webkit-gradient()":"-webkit-gradient( <-webkit-gradient-type> , <-webkit-gradient-point> [, <-webkit-gradient-point>|, <-webkit-gradient-radius> , <-webkit-gradient-point>] [, <-webkit-gradient-radius>]? [, <-webkit-gradient-color-stop>]* )","-webkit-gradient-color-stop":"from( <color> )|color-stop( [<number-zero-one>|<percentage>] , <color> )|to( <color> )","-webkit-gradient-point":"[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]","-webkit-gradient-radius":"<length>|<percentage>","-webkit-gradient-type":"linear|radial","-webkit-mask-box-repeat":"repeat|stretch|round","-webkit-mask-clip-style":"border|border-box|padding|padding-box|content|content-box|text","-ms-filter-function-list":"<-ms-filter-function>+","-ms-filter-function":"<-ms-filter-function-progid>|<-ms-filter-function-legacy>","-ms-filter-function-progid":"'progid:' [<ident-token> '.']* [<ident-token>|<function-token> <any-value>? )]","-ms-filter-function-legacy":"<ident-token>|<function-token> <any-value>? )","-ms-filter":"<string>",age:"child|young|old","attr-name":"<wq-name>","attr-fallback":"<any-value>","bg-clip":"<box>|border|text",bottom:"<length>|auto","generic-voice":"[<age>? <gender> <integer>?]",gender:"male|female|neutral",left:"<length>|auto","mask-image":"<mask-reference>#",paint:"none|<color>|<url> [none|<color>]?|context-fill|context-stroke",right:"<length>|auto","scroll-timeline-axis":"block|inline|vertical|horizontal","scroll-timeline-name":"none|<custom-ident>","single-animation-composition":"replace|add|accumulate","svg-length":"<percentage>|<length>|<number>","svg-writing-mode":"lr-tb|rl-tb|tb-rl|lr|rl|tb",top:"<length>|auto",x:"<number>",y:"<number>",declaration:"<ident-token> : <declaration-value>? ['!' important]?","declaration-list":"[<declaration>? ';']* <declaration>?",url:"url( <string> <url-modifier>* )|<url-token>","url-modifier":"<ident>|<function-token> <any-value> )","number-zero-one":"<number [0,1]>","number-one-or-greater":"<number [1,\u221E]>","-non-standard-display":"-ms-inline-flexbox|-ms-grid|-ms-inline-grid|-webkit-flex|-webkit-inline-flex|-webkit-box|-webkit-inline-box|-moz-inline-stack|-moz-box|-moz-inline-box"},properties:{"--*":"<declaration-value>","-ms-accelerator":"false|true","-ms-block-progression":"tb|rl|bt|lr","-ms-content-zoom-chaining":"none|chained","-ms-content-zooming":"none|zoom","-ms-content-zoom-limit":"<'-ms-content-zoom-limit-min'> <'-ms-content-zoom-limit-max'>","-ms-content-zoom-limit-max":"<percentage>","-ms-content-zoom-limit-min":"<percentage>","-ms-content-zoom-snap":"<'-ms-content-zoom-snap-type'>||<'-ms-content-zoom-snap-points'>","-ms-content-zoom-snap-points":"snapInterval( <percentage> , <percentage> )|snapList( <percentage># )","-ms-content-zoom-snap-type":"none|proximity|mandatory","-ms-filter":"<string>","-ms-flow-from":"[none|<custom-ident>]#","-ms-flow-into":"[none|<custom-ident>]#","-ms-grid-columns":"none|<track-list>|<auto-track-list>","-ms-grid-rows":"none|<track-list>|<auto-track-list>","-ms-high-contrast-adjust":"auto|none","-ms-hyphenate-limit-chars":"auto|<integer>{1,3}","-ms-hyphenate-limit-lines":"no-limit|<integer>","-ms-hyphenate-limit-zone":"<percentage>|<length>","-ms-ime-align":"auto|after","-ms-overflow-style":"auto|none|scrollbar|-ms-autohiding-scrollbar","-ms-scrollbar-3dlight-color":"<color>","-ms-scrollbar-arrow-color":"<color>","-ms-scrollbar-base-color":"<color>","-ms-scrollbar-darkshadow-color":"<color>","-ms-scrollbar-face-color":"<color>","-ms-scrollbar-highlight-color":"<color>","-ms-scrollbar-shadow-color":"<color>","-ms-scrollbar-track-color":"<color>","-ms-scroll-chaining":"chained|none","-ms-scroll-limit":"<'-ms-scroll-limit-x-min'> <'-ms-scroll-limit-y-min'> <'-ms-scroll-limit-x-max'> <'-ms-scroll-limit-y-max'>","-ms-scroll-limit-x-max":"auto|<length>","-ms-scroll-limit-x-min":"<length>","-ms-scroll-limit-y-max":"auto|<length>","-ms-scroll-limit-y-min":"<length>","-ms-scroll-rails":"none|railed","-ms-scroll-snap-points-x":"snapInterval( <length-percentage> , <length-percentage> )|snapList( <length-percentage># )","-ms-scroll-snap-points-y":"snapInterval( <length-percentage> , <length-percentage> )|snapList( <length-percentage># )","-ms-scroll-snap-type":"none|proximity|mandatory","-ms-scroll-snap-x":"<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-x'>","-ms-scroll-snap-y":"<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-y'>","-ms-scroll-translation":"none|vertical-to-horizontal","-ms-text-autospace":"none|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space","-ms-touch-select":"grippers|none","-ms-user-select":"none|element|text","-ms-wrap-flow":"auto|both|start|end|maximum|clear","-ms-wrap-margin":"<length>","-ms-wrap-through":"wrap|none","-moz-appearance":"none|button|button-arrow-down|button-arrow-next|button-arrow-previous|button-arrow-up|button-bevel|button-focus|caret|checkbox|checkbox-container|checkbox-label|checkmenuitem|dualbutton|groupbox|listbox|listitem|menuarrow|menubar|menucheckbox|menuimage|menuitem|menuitemtext|menulist|menulist-button|menulist-text|menulist-textfield|menupopup|menuradio|menuseparator|meterbar|meterchunk|progressbar|progressbar-vertical|progresschunk|progresschunk-vertical|radio|radio-container|radio-label|radiomenuitem|range|range-thumb|resizer|resizerpanel|scale-horizontal|scalethumbend|scalethumb-horizontal|scalethumbstart|scalethumbtick|scalethumb-vertical|scale-vertical|scrollbarbutton-down|scrollbarbutton-left|scrollbarbutton-right|scrollbarbutton-up|scrollbarthumb-horizontal|scrollbarthumb-vertical|scrollbartrack-horizontal|scrollbartrack-vertical|searchfield|separator|sheet|spinner|spinner-downbutton|spinner-textfield|spinner-upbutton|splitter|statusbar|statusbarpanel|tab|tabpanel|tabpanels|tab-scroll-arrow-back|tab-scroll-arrow-forward|textfield|textfield-multiline|toolbar|toolbarbutton|toolbarbutton-dropdown|toolbargripper|toolbox|tooltip|treeheader|treeheadercell|treeheadersortarrow|treeitem|treeline|treetwisty|treetwistyopen|treeview|-moz-mac-unified-toolbar|-moz-win-borderless-glass|-moz-win-browsertabbar-toolbox|-moz-win-communicationstext|-moz-win-communications-toolbox|-moz-win-exclude-glass|-moz-win-glass|-moz-win-mediatext|-moz-win-media-toolbox|-moz-window-button-box|-moz-window-button-box-maximized|-moz-window-button-close|-moz-window-button-maximize|-moz-window-button-minimize|-moz-window-button-restore|-moz-window-frame-bottom|-moz-window-frame-left|-moz-window-frame-right|-moz-window-titlebar|-moz-window-titlebar-maximized","-moz-binding":"<url>|none","-moz-border-bottom-colors":"<color>+|none","-moz-border-left-colors":"<color>+|none","-moz-border-right-colors":"<color>+|none","-moz-border-top-colors":"<color>+|none","-moz-context-properties":"none|[fill|fill-opacity|stroke|stroke-opacity]#","-moz-float-edge":"border-box|content-box|margin-box|padding-box","-moz-force-broken-image-icon":"0|1","-moz-image-region":"<shape>|auto","-moz-orient":"inline|block|horizontal|vertical","-moz-outline-radius":"<outline-radius>{1,4} [/ <outline-radius>{1,4}]?","-moz-outline-radius-bottomleft":"<outline-radius>","-moz-outline-radius-bottomright":"<outline-radius>","-moz-outline-radius-topleft":"<outline-radius>","-moz-outline-radius-topright":"<outline-radius>","-moz-stack-sizing":"ignore|stretch-to-fit","-moz-text-blink":"none|blink","-moz-user-focus":"ignore|normal|select-after|select-before|select-menu|select-same|select-all|none","-moz-user-input":"auto|none|enabled|disabled","-moz-user-modify":"read-only|read-write|write-only","-moz-window-dragging":"drag|no-drag","-moz-window-shadow":"default|menu|tooltip|sheet|none","-webkit-appearance":"none|button|button-bevel|caps-lock-indicator|caret|checkbox|default-button|inner-spin-button|listbox|listitem|media-controls-background|media-controls-fullscreen-background|media-current-time-display|media-enter-fullscreen-button|media-exit-fullscreen-button|media-fullscreen-button|media-mute-button|media-overlay-play-button|media-play-button|media-seek-back-button|media-seek-forward-button|media-slider|media-sliderthumb|media-time-remaining-display|media-toggle-closed-captions-button|media-volume-slider|media-volume-slider-container|media-volume-sliderthumb|menulist|menulist-button|menulist-text|menulist-textfield|meter|progress-bar|progress-bar-value|push-button|radio|scrollbarbutton-down|scrollbarbutton-left|scrollbarbutton-right|scrollbarbutton-up|scrollbargripper-horizontal|scrollbargripper-vertical|scrollbarthumb-horizontal|scrollbarthumb-vertical|scrollbartrack-horizontal|scrollbartrack-vertical|searchfield|searchfield-cancel-button|searchfield-decoration|searchfield-results-button|searchfield-results-decoration|slider-horizontal|slider-vertical|sliderthumb-horizontal|sliderthumb-vertical|square-button|textarea|textfield|-apple-pay-button","-webkit-border-before":"<'border-width'>||<'border-style'>||<color>","-webkit-border-before-color":"<color>","-webkit-border-before-style":"<'border-style'>","-webkit-border-before-width":"<'border-width'>","-webkit-box-reflect":"[above|below|right|left]? <length>? <image>?","-webkit-line-clamp":"none|<integer>","-webkit-mask":"[<mask-reference>||<position> [/ <bg-size>]?||<repeat-style>||[<box>|border|padding|content|text]||[<box>|border|padding|content]]#","-webkit-mask-attachment":"<attachment>#","-webkit-mask-clip":"[<box>|border|padding|content|text]#","-webkit-mask-composite":"<composite-style>#","-webkit-mask-image":"<mask-reference>#","-webkit-mask-origin":"[<box>|border|padding|content]#","-webkit-mask-position":"<position>#","-webkit-mask-position-x":"[<length-percentage>|left|center|right]#","-webkit-mask-position-y":"[<length-percentage>|top|center|bottom]#","-webkit-mask-repeat":"<repeat-style>#","-webkit-mask-repeat-x":"repeat|no-repeat|space|round","-webkit-mask-repeat-y":"repeat|no-repeat|space|round","-webkit-mask-size":"<bg-size>#","-webkit-overflow-scrolling":"auto|touch","-webkit-tap-highlight-color":"<color>","-webkit-text-fill-color":"<color>","-webkit-text-stroke":"<length>||<color>","-webkit-text-stroke-color":"<color>","-webkit-text-stroke-width":"<length>","-webkit-touch-callout":"default|none","-webkit-user-modify":"read-only|read-write|read-write-plaintext-only","accent-color":"auto|<color>","align-content":"normal|<baseline-position>|<content-distribution>|<overflow-position>? <content-position>","align-items":"normal|stretch|<baseline-position>|[<overflow-position>? <self-position>]","align-self":"auto|normal|stretch|<baseline-position>|<overflow-position>? <self-position>","align-tracks":"[normal|<baseline-position>|<content-distribution>|<overflow-position>? <content-position>]#",all:"initial|inherit|unset|revert|revert-layer",animation:"<single-animation>#","animation-composition":"<single-animation-composition>#","animation-delay":"<time>#","animation-direction":"<single-animation-direction>#","animation-duration":"<time>#","animation-fill-mode":"<single-animation-fill-mode>#","animation-iteration-count":"<single-animation-iteration-count>#","animation-name":"[none|<keyframes-name>]#","animation-play-state":"<single-animation-play-state>#","animation-timing-function":"<easing-function>#","animation-timeline":"<single-animation-timeline>#",appearance:"none|auto|textfield|menulist-button|<compat-auto>","aspect-ratio":"auto|<ratio>",azimuth:"<angle>|[[left-side|far-left|left|center-left|center|center-right|right|far-right|right-side]||behind]|leftwards|rightwards","backdrop-filter":"none|<filter-function-list>","backface-visibility":"visible|hidden",background:"[<bg-layer> ,]* <final-bg-layer>","background-attachment":"<attachment>#","background-blend-mode":"<blend-mode>#","background-clip":"<bg-clip>#","background-color":"<color>","background-image":"<bg-image>#","background-origin":"<box>#","background-position":"<bg-position>#","background-position-x":"[center|[[left|right|x-start|x-end]? <length-percentage>?]!]#","background-position-y":"[center|[[top|bottom|y-start|y-end]? <length-percentage>?]!]#","background-repeat":"<repeat-style>#","background-size":"<bg-size>#","block-overflow":"clip|ellipsis|<string>","block-size":"<'width'>",border:"<line-width>||<line-style>||<color>","border-block":"<'border-top-width'>||<'border-top-style'>||<color>","border-block-color":"<'border-top-color'>{1,2}","border-block-style":"<'border-top-style'>","border-block-width":"<'border-top-width'>","border-block-end":"<'border-top-width'>||<'border-top-style'>||<color>","border-block-end-color":"<'border-top-color'>","border-block-end-style":"<'border-top-style'>","border-block-end-width":"<'border-top-width'>","border-block-start":"<'border-top-width'>||<'border-top-style'>||<color>","border-block-start-color":"<'border-top-color'>","border-block-start-style":"<'border-top-style'>","border-block-start-width":"<'border-top-width'>","border-bottom":"<line-width>||<line-style>||<color>","border-bottom-color":"<'border-top-color'>","border-bottom-left-radius":"<length-percentage>{1,2}","border-bottom-right-radius":"<length-percentage>{1,2}","border-bottom-style":"<line-style>","border-bottom-width":"<line-width>","border-collapse":"collapse|separate","border-color":"<color>{1,4}","border-end-end-radius":"<length-percentage>{1,2}","border-end-start-radius":"<length-percentage>{1,2}","border-image":"<'border-image-source'>||<'border-image-slice'> [/ <'border-image-width'>|/ <'border-image-width'>? / <'border-image-outset'>]?||<'border-image-repeat'>","border-image-outset":"[<length>|<number>]{1,4}","border-image-repeat":"[stretch|repeat|round|space]{1,2}","border-image-slice":"<number-percentage>{1,4}&&fill?","border-image-source":"none|<image>","border-image-width":"[<length-percentage>|<number>|auto]{1,4}","border-inline":"<'border-top-width'>||<'border-top-style'>||<color>","border-inline-end":"<'border-top-width'>||<'border-top-style'>||<color>","border-inline-color":"<'border-top-color'>{1,2}","border-inline-style":"<'border-top-style'>","border-inline-width":"<'border-top-width'>","border-inline-end-color":"<'border-top-color'>","border-inline-end-style":"<'border-top-style'>","border-inline-end-width":"<'border-top-width'>","border-inline-start":"<'border-top-width'>||<'border-top-style'>||<color>","border-inline-start-color":"<'border-top-color'>","border-inline-start-style":"<'border-top-style'>","border-inline-start-width":"<'border-top-width'>","border-left":"<line-width>||<line-style>||<color>","border-left-color":"<color>","border-left-style":"<line-style>","border-left-width":"<line-width>","border-radius":"<length-percentage>{1,4} [/ <length-percentage>{1,4}]?","border-right":"<line-width>||<line-style>||<color>","border-right-color":"<color>","border-right-style":"<line-style>","border-right-width":"<line-width>","border-spacing":"<length> <length>?","border-start-end-radius":"<length-percentage>{1,2}","border-start-start-radius":"<length-percentage>{1,2}","border-style":"<line-style>{1,4}","border-top":"<line-width>||<line-style>||<color>","border-top-color":"<color>","border-top-left-radius":"<length-percentage>{1,2}","border-top-right-radius":"<length-percentage>{1,2}","border-top-style":"<line-style>","border-top-width":"<line-width>","border-width":"<line-width>{1,4}",bottom:"<length>|<percentage>|auto","box-align":"start|center|end|baseline|stretch","box-decoration-break":"slice|clone","box-direction":"normal|reverse|inherit","box-flex":"<number>","box-flex-group":"<integer>","box-lines":"single|multiple","box-ordinal-group":"<integer>","box-orient":"horizontal|vertical|inline-axis|block-axis|inherit","box-pack":"start|center|end|justify","box-shadow":"none|<shadow>#","box-sizing":"content-box|border-box","break-after":"auto|avoid|always|all|avoid-page|page|left|right|recto|verso|avoid-column|column|avoid-region|region","break-before":"auto|avoid|always|all|avoid-page|page|left|right|recto|verso|avoid-column|column|avoid-region|region","break-inside":"auto|avoid|avoid-page|avoid-column|avoid-region","caption-side":"top|bottom|block-start|block-end|inline-start|inline-end",caret:"<'caret-color'>||<'caret-shape'>","caret-color":"auto|<color>","caret-shape":"auto|bar|block|underscore",clear:"none|left|right|both|inline-start|inline-end",clip:"<shape>|auto","clip-path":"<clip-source>|[<basic-shape>||<geometry-box>]|none",color:"<color>","print-color-adjust":"economy|exact","color-scheme":"normal|[light|dark|<custom-ident>]+&&only?","column-count":"<integer>|auto","column-fill":"auto|balance|balance-all","column-gap":"normal|<length-percentage>","column-rule":"<'column-rule-width'>||<'column-rule-style'>||<'column-rule-color'>","column-rule-color":"<color>","column-rule-style":"<'border-style'>","column-rule-width":"<'border-width'>","column-span":"none|all","column-width":"<length>|auto",columns:"<'column-width'>||<'column-count'>",contain:"none|strict|content|[[size||inline-size]||layout||style||paint]","contain-intrinsic-size":"[none|<length>|auto <length>]{1,2}","contain-intrinsic-block-size":"none|<length>|auto <length>","contain-intrinsic-height":"none|<length>|auto <length>","contain-intrinsic-inline-size":"none|<length>|auto <length>","contain-intrinsic-width":"none|<length>|auto <length>",content:"normal|none|[<content-replacement>|<content-list>] [/ [<string>|<counter>]+]?","content-visibility":"visible|auto|hidden","counter-increment":"[<counter-name> <integer>?]+|none","counter-reset":"[<counter-name> <integer>?|<reversed-counter-name> <integer>?]+|none","counter-set":"[<counter-name> <integer>?]+|none",cursor:"[[<url> [<x> <y>]? ,]* [auto|default|none|context-menu|help|pointer|progress|wait|cell|crosshair|text|vertical-text|alias|copy|move|no-drop|not-allowed|e-resize|n-resize|ne-resize|nw-resize|s-resize|se-resize|sw-resize|w-resize|ew-resize|ns-resize|nesw-resize|nwse-resize|col-resize|row-resize|all-scroll|zoom-in|zoom-out|grab|grabbing|hand|-webkit-grab|-webkit-grabbing|-webkit-zoom-in|-webkit-zoom-out|-moz-grab|-moz-grabbing|-moz-zoom-in|-moz-zoom-out]]",direction:"ltr|rtl",display:"[<display-outside>||<display-inside>]|<display-listitem>|<display-internal>|<display-box>|<display-legacy>|<-non-standard-display>","empty-cells":"show|hide",filter:"none|<filter-function-list>|<-ms-filter-function-list>",flex:"none|[<'flex-grow'> <'flex-shrink'>?||<'flex-basis'>]","flex-basis":"content|<'width'>","flex-direction":"row|row-reverse|column|column-reverse","flex-flow":"<'flex-direction'>||<'flex-wrap'>","flex-grow":"<number>","flex-shrink":"<number>","flex-wrap":"nowrap|wrap|wrap-reverse",float:"left|right|none|inline-start|inline-end",font:"[[<'font-style'>||<font-variant-css21>||<'font-weight'>||<'font-stretch'>]? <'font-size'> [/ <'line-height'>]? <'font-family'>]|caption|icon|menu|message-box|small-caption|status-bar","font-family":"[<family-name>|<generic-family>]#","font-feature-settings":"normal|<feature-tag-value>#","font-kerning":"auto|normal|none","font-language-override":"normal|<string>","font-optical-sizing":"auto|none","font-variation-settings":"normal|[<string> <number>]#","font-size":"<absolute-size>|<relative-size>|<length-percentage>","font-size-adjust":"none|[ex-height|cap-height|ch-width|ic-width|ic-height]? [from-font|<number>]","font-smooth":"auto|never|always|<absolute-size>|<length>","font-stretch":"<font-stretch-absolute>","font-style":"normal|italic|oblique <angle>?","font-synthesis":"none|[weight||style||small-caps]","font-variant":"normal|none|[<common-lig-values>||<discretionary-lig-values>||<historical-lig-values>||<contextual-alt-values>||stylistic( <feature-value-name> )||historical-forms||styleset( <feature-value-name># )||character-variant( <feature-value-name># )||swash( <feature-value-name> )||ornaments( <feature-value-name> )||annotation( <feature-value-name> )||[small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps]||<numeric-figure-values>||<numeric-spacing-values>||<numeric-fraction-values>||ordinal||slashed-zero||<east-asian-variant-values>||<east-asian-width-values>||ruby]","font-variant-alternates":"normal|[stylistic( <feature-value-name> )||historical-forms||styleset( <feature-value-name># )||character-variant( <feature-value-name># )||swash( <feature-value-name> )||ornaments( <feature-value-name> )||annotation( <feature-value-name> )]","font-variant-caps":"normal|small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps","font-variant-east-asian":"normal|[<east-asian-variant-values>||<east-asian-width-values>||ruby]","font-variant-ligatures":"normal|none|[<common-lig-values>||<discretionary-lig-values>||<historical-lig-values>||<contextual-alt-values>]","font-variant-numeric":"normal|[<numeric-figure-values>||<numeric-spacing-values>||<numeric-fraction-values>||ordinal||slashed-zero]","font-variant-position":"normal|sub|super","font-weight":"<font-weight-absolute>|bolder|lighter","forced-color-adjust":"auto|none",gap:"<'row-gap'> <'column-gap'>?",grid:"<'grid-template'>|<'grid-template-rows'> / [auto-flow&&dense?] <'grid-auto-columns'>?|[auto-flow&&dense?] <'grid-auto-rows'>? / <'grid-template-columns'>","grid-area":"<grid-line> [/ <grid-line>]{0,3}","grid-auto-columns":"<track-size>+","grid-auto-flow":"[row|column]||dense","grid-auto-rows":"<track-size>+","grid-column":"<grid-line> [/ <grid-line>]?","grid-column-end":"<grid-line>","grid-column-gap":"<length-percentage>","grid-column-start":"<grid-line>","grid-gap":"<'grid-row-gap'> <'grid-column-gap'>?","grid-row":"<grid-line> [/ <grid-line>]?","grid-row-end":"<grid-line>","grid-row-gap":"<length-percentage>","grid-row-start":"<grid-line>","grid-template":"none|[<'grid-template-rows'> / <'grid-template-columns'>]|[<line-names>? <string> <track-size>? <line-names>?]+ [/ <explicit-track-list>]?","grid-template-areas":"none|<string>+","grid-template-columns":"none|<track-list>|<auto-track-list>|subgrid <line-name-list>?","grid-template-rows":"none|<track-list>|<auto-track-list>|subgrid <line-name-list>?","hanging-punctuation":"none|[first||[force-end|allow-end]||last]",height:"auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )","hyphenate-character":"auto|<string>",hyphens:"none|manual|auto","image-orientation":"from-image|<angle>|[<angle>? flip]","image-rendering":"auto|crisp-edges|pixelated|optimizeSpeed|optimizeQuality|<-non-standard-image-rendering>","image-resolution":"[from-image||<resolution>]&&snap?","ime-mode":"auto|normal|active|inactive|disabled","initial-letter":"normal|[<number> <integer>?]","initial-letter-align":"[auto|alphabetic|hanging|ideographic]","inline-size":"<'width'>","input-security":"auto|none",inset:"<'top'>{1,4}","inset-block":"<'top'>{1,2}","inset-block-end":"<'top'>","inset-block-start":"<'top'>","inset-inline":"<'top'>{1,2}","inset-inline-end":"<'top'>","inset-inline-start":"<'top'>",isolation:"auto|isolate","justify-content":"normal|<content-distribution>|<overflow-position>? [<content-position>|left|right]","justify-items":"normal|stretch|<baseline-position>|<overflow-position>? [<self-position>|left|right]|legacy|legacy&&[left|right|center]","justify-self":"auto|normal|stretch|<baseline-position>|<overflow-position>? [<self-position>|left|right]","justify-tracks":"[normal|<content-distribution>|<overflow-position>? [<content-position>|left|right]]#",left:"<length>|<percentage>|auto","letter-spacing":"normal|<length-percentage>","line-break":"auto|loose|normal|strict|anywhere","line-clamp":"none|<integer>","line-height":"normal|<number>|<length>|<percentage>","line-height-step":"<length>","list-style":"<'list-style-type'>||<'list-style-position'>||<'list-style-image'>","list-style-image":"<image>|none","list-style-position":"inside|outside","list-style-type":"<counter-style>|<string>|none",margin:"[<length>|<percentage>|auto]{1,4}","margin-block":"<'margin-left'>{1,2}","margin-block-end":"<'margin-left'>","margin-block-start":"<'margin-left'>","margin-bottom":"<length>|<percentage>|auto","margin-inline":"<'margin-left'>{1,2}","margin-inline-end":"<'margin-left'>","margin-inline-start":"<'margin-left'>","margin-left":"<length>|<percentage>|auto","margin-right":"<length>|<percentage>|auto","margin-top":"<length>|<percentage>|auto","margin-trim":"none|in-flow|all",mask:"<mask-layer>#","mask-border":"<'mask-border-source'>||<'mask-border-slice'> [/ <'mask-border-width'>? [/ <'mask-border-outset'>]?]?||<'mask-border-repeat'>||<'mask-border-mode'>","mask-border-mode":"luminance|alpha","mask-border-outset":"[<length>|<number>]{1,4}","mask-border-repeat":"[stretch|repeat|round|space]{1,2}","mask-border-slice":"<number-percentage>{1,4} fill?","mask-border-source":"none|<image>","mask-border-width":"[<length-percentage>|<number>|auto]{1,4}","mask-clip":"[<geometry-box>|no-clip]#","mask-composite":"<compositing-operator>#","mask-image":"<mask-reference>#","mask-mode":"<masking-mode>#","mask-origin":"<geometry-box>#","mask-position":"<position>#","mask-repeat":"<repeat-style>#","mask-size":"<bg-size>#","mask-type":"luminance|alpha","masonry-auto-flow":"[pack|next]||[definite-first|ordered]","math-depth":"auto-add|add( <integer> )|<integer>","math-shift":"normal|compact","math-style":"normal|compact","max-block-size":"<'max-width'>","max-height":"none|<length-percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )","max-inline-size":"<'max-width'>","max-lines":"none|<integer>","max-width":"none|<length-percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )|<-non-standard-width>","min-block-size":"<'min-width'>","min-height":"auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )","min-inline-size":"<'min-width'>","min-width":"auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )|<-non-standard-width>","mix-blend-mode":"<blend-mode>|plus-lighter","object-fit":"fill|contain|cover|none|scale-down","object-position":"<position>",offset:"[<'offset-position'>? [<'offset-path'> [<'offset-distance'>||<'offset-rotate'>]?]?]! [/ <'offset-anchor'>]?","offset-anchor":"auto|<position>","offset-distance":"<length-percentage>","offset-path":"none|ray( [<angle>&&<size>&&contain?] )|<path()>|<url>|[<basic-shape>||<geometry-box>]","offset-position":"auto|<position>","offset-rotate":"[auto|reverse]||<angle>",opacity:"<alpha-value>",order:"<integer>",orphans:"<integer>",outline:"[<'outline-color'>||<'outline-style'>||<'outline-width'>]","outline-color":"<color>|invert","outline-offset":"<length>","outline-style":"auto|<'border-style'>","outline-width":"<line-width>",overflow:"[visible|hidden|clip|scroll|auto]{1,2}|<-non-standard-overflow>","overflow-anchor":"auto|none","overflow-block":"visible|hidden|clip|scroll|auto","overflow-clip-box":"padding-box|content-box","overflow-clip-margin":"<visual-box>||<length [0,\u221E]>","overflow-inline":"visible|hidden|clip|scroll|auto","overflow-wrap":"normal|break-word|anywhere","overflow-x":"visible|hidden|clip|scroll|auto","overflow-y":"visible|hidden|clip|scroll|auto","overscroll-behavior":"[contain|none|auto]{1,2}","overscroll-behavior-block":"contain|none|auto","overscroll-behavior-inline":"contain|none|auto","overscroll-behavior-x":"contain|none|auto","overscroll-behavior-y":"contain|none|auto",padding:"[<length>|<percentage>]{1,4}","padding-block":"<'padding-left'>{1,2}","padding-block-end":"<'padding-left'>","padding-block-start":"<'padding-left'>","padding-bottom":"<length>|<percentage>","padding-inline":"<'padding-left'>{1,2}","padding-inline-end":"<'padding-left'>","padding-inline-start":"<'padding-left'>","padding-left":"<length>|<percentage>","padding-right":"<length>|<percentage>","padding-top":"<length>|<percentage>","page-break-after":"auto|always|avoid|left|right|recto|verso","page-break-before":"auto|always|avoid|left|right|recto|verso","page-break-inside":"auto|avoid","paint-order":"normal|[fill||stroke||markers]",perspective:"none|<length>","perspective-origin":"<position>","place-content":"<'align-content'> <'justify-content'>?","place-items":"<'align-items'> <'justify-items'>?","place-self":"<'align-self'> <'justify-self'>?","pointer-events":"auto|none|visiblePainted|visibleFill|visibleStroke|visible|painted|fill|stroke|all|inherit",position:"static|relative|absolute|sticky|fixed|-webkit-sticky",quotes:"none|auto|[<string> <string>]+",resize:"none|both|horizontal|vertical|block|inline",right:"<length>|<percentage>|auto",rotate:"none|<angle>|[x|y|z|<number>{3}]&&<angle>","row-gap":"normal|<length-percentage>","ruby-align":"start|center|space-between|space-around","ruby-merge":"separate|collapse|auto","ruby-position":"[alternate||[over|under]]|inter-character",scale:"none|<number>{1,3}","scrollbar-color":"auto|<color>{2}","scrollbar-gutter":"auto|stable&&both-edges?","scrollbar-width":"auto|thin|none","scroll-behavior":"auto|smooth","scroll-margin":"<length>{1,4}","scroll-margin-block":"<length>{1,2}","scroll-margin-block-start":"<length>","scroll-margin-block-end":"<length>","scroll-margin-bottom":"<length>","scroll-margin-inline":"<length>{1,2}","scroll-margin-inline-start":"<length>","scroll-margin-inline-end":"<length>","scroll-margin-left":"<length>","scroll-margin-right":"<length>","scroll-margin-top":"<length>","scroll-padding":"[auto|<length-percentage>]{1,4}","scroll-padding-block":"[auto|<length-percentage>]{1,2}","scroll-padding-block-start":"auto|<length-percentage>","scroll-padding-block-end":"auto|<length-percentage>","scroll-padding-bottom":"auto|<length-percentage>","scroll-padding-inline":"[auto|<length-percentage>]{1,2}","scroll-padding-inline-start":"auto|<length-percentage>","scroll-padding-inline-end":"auto|<length-percentage>","scroll-padding-left":"auto|<length-percentage>","scroll-padding-right":"auto|<length-percentage>","scroll-padding-top":"auto|<length-percentage>","scroll-snap-align":"[none|start|end|center]{1,2}","scroll-snap-coordinate":"none|<position>#","scroll-snap-destination":"<position>","scroll-snap-points-x":"none|repeat( <length-percentage> )","scroll-snap-points-y":"none|repeat( <length-percentage> )","scroll-snap-stop":"normal|always","scroll-snap-type":"none|[x|y|block|inline|both] [mandatory|proximity]?","scroll-snap-type-x":"none|mandatory|proximity","scroll-snap-type-y":"none|mandatory|proximity","scroll-timeline":"<scroll-timeline-name>||<scroll-timeline-axis>","scroll-timeline-axis":"block|inline|vertical|horizontal","scroll-timeline-name":"none|<custom-ident>","shape-image-threshold":"<alpha-value>","shape-margin":"<length-percentage>","shape-outside":"none|[<shape-box>||<basic-shape>]|<image>","tab-size":"<integer>|<length>","table-layout":"auto|fixed","text-align":"start|end|left|right|center|justify|match-parent","text-align-last":"auto|start|end|left|right|center|justify","text-combine-upright":"none|all|[digits <integer>?]","text-decoration":"<'text-decoration-line'>||<'text-decoration-style'>||<'text-decoration-color'>||<'text-decoration-thickness'>","text-decoration-color":"<color>","text-decoration-line":"none|[underline||overline||line-through||blink]|spelling-error|grammar-error","text-decoration-skip":"none|[objects||[spaces|[leading-spaces||trailing-spaces]]||edges||box-decoration]","text-decoration-skip-ink":"auto|all|none","text-decoration-style":"solid|double|dotted|dashed|wavy","text-decoration-thickness":"auto|from-font|<length>|<percentage>","text-emphasis":"<'text-emphasis-style'>||<'text-emphasis-color'>","text-emphasis-color":"<color>","text-emphasis-position":"[over|under]&&[right|left]","text-emphasis-style":"none|[[filled|open]||[dot|circle|double-circle|triangle|sesame]]|<string>","text-indent":"<length-percentage>&&hanging?&&each-line?","text-justify":"auto|inter-character|inter-word|none","text-orientation":"mixed|upright|sideways","text-overflow":"[clip|ellipsis|<string>]{1,2}","text-rendering":"auto|optimizeSpeed|optimizeLegibility|geometricPrecision","text-shadow":"none|<shadow-t>#","text-size-adjust":"none|auto|<percentage>","text-transform":"none|capitalize|uppercase|lowercase|full-width|full-size-kana","text-underline-offset":"auto|<length>|<percentage>","text-underline-position":"auto|from-font|[under||[left|right]]",top:"<length>|<percentage>|auto","touch-action":"auto|none|[[pan-x|pan-left|pan-right]||[pan-y|pan-up|pan-down]||pinch-zoom]|manipulation",transform:"none|<transform-list>","transform-box":"content-box|border-box|fill-box|stroke-box|view-box","transform-origin":"[<length-percentage>|left|center|right|top|bottom]|[[<length-percentage>|left|center|right]&&[<length-percentage>|top|center|bottom]] <length>?","transform-style":"flat|preserve-3d",transition:"<single-transition>#","transition-delay":"<time>#","transition-duration":"<time>#","transition-property":"none|<single-transition-property>#","transition-timing-function":"<easing-function>#",translate:"none|<length-percentage> [<length-percentage> <length>?]?","unicode-bidi":"normal|embed|isolate|bidi-override|isolate-override|plaintext|-moz-isolate|-moz-isolate-override|-moz-plaintext|-webkit-isolate|-webkit-isolate-override|-webkit-plaintext","user-select":"auto|text|none|contain|all","vertical-align":"baseline|sub|super|text-top|text-bottom|middle|top|bottom|<percentage>|<length>",visibility:"visible|hidden|collapse","white-space":"normal|pre|nowrap|pre-wrap|pre-line|break-spaces",widows:"<integer>",width:"auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )|fill|stretch|intrinsic|-moz-max-content|-webkit-max-content|-moz-fit-content|-webkit-fit-content","will-change":"auto|<animateable-feature>#","word-break":"normal|break-all|keep-all|break-word","word-spacing":"normal|<length>","word-wrap":"normal|break-word","writing-mode":"horizontal-tb|vertical-rl|vertical-lr|sideways-rl|sideways-lr|<svg-writing-mode>","z-index":"auto|<integer>",zoom:"normal|reset|<number>|<percentage>","-moz-background-clip":"padding|border","-moz-border-radius-bottomleft":"<'border-bottom-left-radius'>","-moz-border-radius-bottomright":"<'border-bottom-right-radius'>","-moz-border-radius-topleft":"<'border-top-left-radius'>","-moz-border-radius-topright":"<'border-bottom-right-radius'>","-moz-control-character-visibility":"visible|hidden","-moz-osx-font-smoothing":"auto|grayscale","-moz-user-select":"none|text|all|-moz-none","-ms-flex-align":"start|end|center|baseline|stretch","-ms-flex-item-align":"auto|start|end|center|baseline|stretch","-ms-flex-line-pack":"start|end|center|justify|distribute|stretch","-ms-flex-negative":"<'flex-shrink'>","-ms-flex-pack":"start|end|center|justify|distribute","-ms-flex-order":"<integer>","-ms-flex-positive":"<'flex-grow'>","-ms-flex-preferred-size":"<'flex-basis'>","-ms-interpolation-mode":"nearest-neighbor|bicubic","-ms-grid-column-align":"start|end|center|stretch","-ms-grid-row-align":"start|end|center|stretch","-ms-hyphenate-limit-last":"none|always|column|page|spread","-webkit-background-clip":"[<box>|border|padding|content|text]#","-webkit-column-break-after":"always|auto|avoid","-webkit-column-break-before":"always|auto|avoid","-webkit-column-break-inside":"always|auto|avoid","-webkit-font-smoothing":"auto|none|antialiased|subpixel-antialiased","-webkit-mask-box-image":"[<url>|<gradient>|none] [<length-percentage>{4} <-webkit-mask-box-repeat>{2}]?","-webkit-print-color-adjust":"economy|exact","-webkit-text-security":"none|circle|disc|square","-webkit-user-drag":"none|element|auto","-webkit-user-select":"auto|none|text|all","alignment-baseline":"auto|baseline|before-edge|text-before-edge|middle|central|after-edge|text-after-edge|ideographic|alphabetic|hanging|mathematical","baseline-shift":"baseline|sub|super|<svg-length>",behavior:"<url>+","clip-rule":"nonzero|evenodd",cue:"<'cue-before'> <'cue-after'>?","cue-after":"<url> <decibel>?|none","cue-before":"<url> <decibel>?|none","dominant-baseline":"auto|use-script|no-change|reset-size|ideographic|alphabetic|hanging|mathematical|central|middle|text-after-edge|text-before-edge",fill:"<paint>","fill-opacity":"<number-zero-one>","fill-rule":"nonzero|evenodd","glyph-orientation-horizontal":"<angle>","glyph-orientation-vertical":"<angle>",kerning:"auto|<svg-length>",marker:"none|<url>","marker-end":"none|<url>","marker-mid":"none|<url>","marker-start":"none|<url>",pause:"<'pause-before'> <'pause-after'>?","pause-after":"<time>|none|x-weak|weak|medium|strong|x-strong","pause-before":"<time>|none|x-weak|weak|medium|strong|x-strong",rest:"<'rest-before'> <'rest-after'>?","rest-after":"<time>|none|x-weak|weak|medium|strong|x-strong","rest-before":"<time>|none|x-weak|weak|medium|strong|x-strong","shape-rendering":"auto|optimizeSpeed|crispEdges|geometricPrecision",src:"[<url> [format( <string># )]?|local( <family-name> )]#",speak:"auto|none|normal","speak-as":"normal|spell-out||digits||[literal-punctuation|no-punctuation]",stroke:"<paint>","stroke-dasharray":"none|[<svg-length>+]#","stroke-dashoffset":"<svg-length>","stroke-linecap":"butt|round|square","stroke-linejoin":"miter|round|bevel","stroke-miterlimit":"<number-one-or-greater>","stroke-opacity":"<number-zero-one>","stroke-width":"<svg-length>","text-anchor":"start|middle|end","unicode-range":"<urange>#","voice-balance":"<number>|left|center|right|leftwards|rightwards","voice-duration":"auto|<time>","voice-family":"[[<family-name>|<generic-voice>] ,]* [<family-name>|<generic-voice>]|preserve","voice-pitch":"<frequency>&&absolute|[[x-low|low|medium|high|x-high]||[<frequency>|<semitones>|<percentage>]]","voice-range":"<frequency>&&absolute|[[x-low|low|medium|high|x-high]||[<frequency>|<semitones>|<percentage>]]","voice-rate":"[normal|x-slow|slow|medium|fast|x-fast]||<percentage>","voice-stress":"normal|strong|moderate|none|reduced","voice-volume":"silent|[[x-soft|soft|medium|loud|x-loud]||<decibel>]"},atrules:{charset:{prelude:"<string>",descriptors:null},"counter-style":{prelude:"<counter-style-name>",descriptors:{"additive-symbols":"[<integer>&&<symbol>]#",fallback:"<counter-style-name>",negative:"<symbol> <symbol>?",pad:"<integer>&&<symbol>",prefix:"<symbol>",range:"[[<integer>|infinite]{2}]#|auto","speak-as":"auto|bullets|numbers|words|spell-out|<counter-style-name>",suffix:"<symbol>",symbols:"<symbol>+",system:"cyclic|numeric|alphabetic|symbolic|additive|[fixed <integer>?]|[extends <counter-style-name>]"}},document:{prelude:"[<url>|url-prefix( <string> )|domain( <string> )|media-document( <string> )|regexp( <string> )]#",descriptors:null},"font-face":{prelude:null,descriptors:{"ascent-override":"normal|<percentage>","descent-override":"normal|<percentage>","font-display":"[auto|block|swap|fallback|optional]","font-family":"<family-name>","font-feature-settings":"normal|<feature-tag-value>#","font-variation-settings":"normal|[<string> <number>]#","font-stretch":"<font-stretch-absolute>{1,2}","font-style":"normal|italic|oblique <angle>{0,2}","font-weight":"<font-weight-absolute>{1,2}","font-variant":"normal|none|[<common-lig-values>||<discretionary-lig-values>||<historical-lig-values>||<contextual-alt-values>||stylistic( <feature-value-name> )||historical-forms||styleset( <feature-value-name># )||character-variant( <feature-value-name># )||swash( <feature-value-name> )||ornaments( <feature-value-name> )||annotation( <feature-value-name> )||[small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps]||<numeric-figure-values>||<numeric-spacing-values>||<numeric-fraction-values>||ordinal||slashed-zero||<east-asian-variant-values>||<east-asian-width-values>||ruby]","line-gap-override":"normal|<percentage>","size-adjust":"<percentage>",src:"[<url> [format( <string># )]?|local( <family-name> )]#","unicode-range":"<urange>#"}},"font-feature-values":{prelude:"<family-name>#",descriptors:null},import:{prelude:"[<string>|<url>] [layer|layer( <layer-name> )]? [supports( [<supports-condition>|<declaration>] )]? <media-query-list>?",descriptors:null},keyframes:{prelude:"<keyframes-name>",descriptors:null},layer:{prelude:"[<layer-name>#|<layer-name>?]",descriptors:null},media:{prelude:"<media-query-list>",descriptors:null},namespace:{prelude:"<namespace-prefix>? [<string>|<url>]",descriptors:null},page:{prelude:"<page-selector-list>",descriptors:{bleed:"auto|<length>",marks:"none|[crop||cross]",size:"<length>{1,2}|auto|[<page-size>||[portrait|landscape]]"}},property:{prelude:"<custom-property-name>",descriptors:{syntax:"<string>",inherits:"true|false","initial-value":"<string>"}},"scroll-timeline":{prelude:"<timeline-name>",descriptors:null},supports:{prelude:"<supports-condition>",descriptors:null},viewport:{prelude:null,descriptors:{height:"<viewport-length>{1,2}","max-height":"<viewport-length>","max-width":"<viewport-length>","max-zoom":"auto|<number>|<percentage>","min-height":"<viewport-length>","min-width":"<viewport-length>","min-zoom":"auto|<number>|<percentage>",orientation:"auto|portrait|landscape","user-zoom":"zoom|fixed","viewport-fit":"auto|contain|cover",width:"<viewport-length>{1,2}",zoom:"auto|<number>|<percentage>"}},nest:{prelude:"<complex-selector-list>",descriptors:null}}};var $v={};qn($v,{AnPlusB:()=>XO,Atrule:()=>ZO,AtrulePrelude:()=>eD,AttributeSelector:()=>iD,Block:()=>aD,Brackets:()=>sD,CDC:()=>cD,CDO:()=>mD,ClassSelector:()=>uD,Combinator:()=>hD,Comment:()=>fD,Declaration:()=>CD,DeclarationList:()=>yD,Dimension:()=>MD,Function:()=>kD,Hash:()=>TD,IdSelector:()=>ID,Identifier:()=>OD,MediaFeature:()=>ND,MediaQuery:()=>RD,MediaQueryList:()=>LD,NestingSelector:()=>BD,Nth:()=>$D,Number:()=>UD,Operator:()=>GD,Parentheses:()=>QD,Percentage:()=>XD,PseudoClassSelector:()=>ZD,PseudoElementSelector:()=>eI,Ratio:()=>nI,Raw:()=>oI,Rule:()=>rI,Selector:()=>lI,SelectorList:()=>dI,String:()=>uI,StyleSheet:()=>hI,TypeSelector:()=>vI,UnicodeRange:()=>xI,Url:()=>MI,Value:()=>kI,WhiteSpace:()=>TI});var XO={};qn(XO,{generate:()=>Hfe,name:()=>jfe,parse:()=>KO,structure:()=>$fe});var pd=43,nl=45,sw=110,Fu=!0,Bfe=!1;function lw(n,o){let e=this.tokenStart+n,t=this.charCodeAt(e);for((t===pd||t===nl)&&(o&&this.error("Number sign is not allowed"),e++);e<this.tokenEnd;e++)ca(this.charCodeAt(e))||this.error("Integer is expected",e)}function Wh(n){return lw.call(this,0,n)}function lp(n,o){if(!this.cmpChar(this.tokenStart+n,o)){let e="";switch(o){case sw:e="N is expected";break;case nl:e="HyphenMinus is expected";break}this.error(e,this.tokenStart+n)}}function QO(){let n=0,o=0,e=this.tokenType;for(;e===13||e===25;)e=this.lookupType(++n);if(e!==10)if(this.isDelim(pd,n)||this.isDelim(nl,n)){o=this.isDelim(pd,n)?pd:nl;do e=this.lookupType(++n);while(e===13||e===25);e!==10&&(this.skip(n),Wh.call(this,Fu))}else return null;return n>0&&this.skip(n),o===0&&(e=this.charCodeAt(this.tokenStart),e!==pd&&e!==nl&&this.error("Number sign is expected")),Wh.call(this,o!==0),o===nl?"-"+this.consume(10):this.consume(10)}var jfe="AnPlusB",$fe={a:[String,null],b:[String,null]};function KO(){let n=this.tokenStart,o=null,e=null;if(this.tokenType===10)Wh.call(this,Bfe),e=this.consume(10);else if(this.tokenType===1&&this.cmpChar(this.tokenStart,nl))switch(o="-1",lp.call(this,1,sw),this.tokenEnd-this.tokenStart){case 2:this.next(),e=QO.call(this);break;case 3:lp.call(this,2,nl),this.next(),this.skipSC(),Wh.call(this,Fu),e="-"+this.consume(10);break;default:lp.call(this,2,nl),lw.call(this,3,Fu),this.next(),e=this.substrToCursor(n+2)}else if(this.tokenType===1||this.isDelim(pd)&&this.lookupType(1)===1){let t=0;switch(o="1",this.isDelim(pd)&&(t=1,this.next()),lp.call(this,0,sw),this.tokenEnd-this.tokenStart){case 1:this.next(),e=QO.call(this);break;case 2:lp.call(this,1,nl),this.next(),this.skipSC(),Wh.call(this,Fu),e="-"+this.consume(10);break;default:lp.call(this,1,nl),lw.call(this,2,Fu),this.next(),e=this.substrToCursor(n+t+1)}}else if(this.tokenType===12){let t=this.charCodeAt(this.tokenStart),i=t===pd||t===nl,a=this.tokenStart+i;for(;a<this.tokenEnd&&ca(this.charCodeAt(a));a++);a===this.tokenStart+i&&this.error("Integer is expected",this.tokenStart+i),lp.call(this,a-this.tokenStart,sw),o=this.substring(n,a),a+1===this.tokenEnd?(this.next(),e=QO.call(this)):(lp.call(this,a-this.tokenStart+1,nl),a+2===this.tokenEnd?(this.next(),this.skipSC(),Wh.call(this,Fu),e="-"+this.consume(10)):(lw.call(this,a-this.tokenStart+2,Fu),this.next(),e=this.substrToCursor(a+1)))}else this.error();return o!==null&&o.charCodeAt(0)===pd&&(o=o.substr(1)),e!==null&&e.charCodeAt(0)===pd&&(e=e.substr(1)),{type:"AnPlusB",loc:this.getLocation(n,this.tokenStart),a:o,b:e}}function Hfe(n){if(n.a){let o=n.a==="+1"&&"n"||n.a==="1"&&"n"||n.a==="-1"&&"-n"||n.a+"n";if(n.b){let e=n.b[0]==="-"||n.b[0]==="+"?n.b:"+"+n.b;this.tokenize(o+e)}else this.tokenize(o)}else this.tokenize(n.b)}var ZO={};qn(ZO,{generate:()=>Qfe,name:()=>Wfe,parse:()=>YO,structure:()=>qfe,walkContext:()=>Gfe});function wV(n){return this.Raw(n,this.consumeUntilLeftCurlyBracketOrSemicolon,!0)}function Ufe(){for(let n=1,o;o=this.lookupType(n);n++){if(o===24)return!0;if(o===23||o===3)return!1}return!1}var Wfe="Atrule",Gfe="atrule",qfe={name:String,prelude:["AtrulePrelude","Raw",null],block:["Block",null]};function YO(n=!1){let o=this.tokenStart,e,t,i=null,a=null;switch(this.eat(3),e=this.substrToCursor(o+1),t=e.toLowerCase(),this.skipSC(),this.eof===!1&&this.tokenType!==23&&this.tokenType!==17&&(this.parseAtrulePrelude?i=this.parseWithFallback(this.AtrulePrelude.bind(this,e,n),wV):i=wV.call(this,this.tokenIndex),this.skipSC()),this.tokenType){case 17:this.next();break;case 23:hasOwnProperty.call(this.atrule,t)&&typeof this.atrule[t].block=="function"?a=this.atrule[t].block.call(this,n):a=this.Block(Ufe.call(this));break}return{type:"Atrule",loc:this.getLocation(o,this.tokenStart),name:e,prelude:i,block:a}}function Qfe(n){this.token(3,"@"+n.name),n.prelude!==null&&this.node(n.prelude),n.block?this.node(n.block):this.token(17,";")}var eD={};qn(eD,{generate:()=>Zfe,name:()=>Kfe,parse:()=>JO,structure:()=>Yfe,walkContext:()=>Xfe});var Kfe="AtrulePrelude",Xfe="atrulePrelude",Yfe={children:[[]]};function JO(n){let o=null;return n!==null&&(n=n.toLowerCase()),this.skipSC(),hasOwnProperty.call(this.atrule,n)&&typeof this.atrule[n].prelude=="function"?o=this.atrule[n].prelude.call(this):o=this.readSequence(this.scope.AtrulePrelude),this.skipSC(),this.eof!==!0&&this.tokenType!==23&&this.tokenType!==17&&this.error("Semicolon or block is expected"),{type:"AtrulePrelude",loc:this.getLocationFromList(o),children:o}}function Zfe(n){this.children(n)}var iD={};qn(iD,{generate:()=>r0e,name:()=>o0e,parse:()=>nD,structure:()=>a0e});var Jfe=36,MV=42,cw=61,e0e=94,tD=124,t0e=126;function n0e(){this.eof&&this.error("Unexpected end of input");let n=this.tokenStart,o=!1;return this.isDelim(MV)?(o=!0,this.next()):this.isDelim(tD)||this.eat(1),this.isDelim(tD)?this.charCodeAt(this.tokenStart+1)!==cw?(this.next(),this.eat(1)):o&&this.error("Identifier is expected",this.tokenEnd):o&&this.error("Vertical line is expected"),{type:"Identifier",loc:this.getLocation(n,this.tokenStart),name:this.substrToCursor(n)}}function i0e(){let n=this.tokenStart,o=this.charCodeAt(n);return o!==cw&&o!==t0e&&o!==e0e&&o!==Jfe&&o!==MV&&o!==tD&&this.error("Attribute selector (=, ~=, ^=, $=, *=, |=) is expected"),this.next(),o!==cw&&(this.isDelim(cw)||this.error("Equal sign is expected"),this.next()),this.substrToCursor(n)}var o0e="AttributeSelector",a0e={name:"Identifier",matcher:[String,null],value:["String","Identifier",null],flags:[String,null]};function nD(){let n=this.tokenStart,o,e=null,t=null,i=null;return this.eat(19),this.skipSC(),o=n0e.call(this),this.skipSC(),this.tokenType!==20&&(this.tokenType!==1&&(e=i0e.call(this),this.skipSC(),t=this.tokenType===5?this.String():this.Identifier(),this.skipSC()),this.tokenType===1&&(i=this.consume(1),this.skipSC())),this.eat(20),{type:"AttributeSelector",loc:this.getLocation(n,this.tokenStart),name:o,matcher:e,value:t,flags:i}}function r0e(n){this.token(9,"["),this.node(n.name),n.matcher!==null&&(this.tokenize(n.matcher),this.node(n.value)),n.flags!==null&&this.token(1,n.flags),this.token(9,"]")}var aD={};qn(aD,{generate:()=>p0e,name:()=>c0e,parse:()=>oD,structure:()=>m0e,walkContext:()=>d0e});var s0e=38;function PV(n){return this.Raw(n,null,!0)}function SV(){return this.parseWithFallback(this.Rule,PV)}function kV(n){return this.Raw(n,this.consumeUntilSemicolonIncluded,!0)}function l0e(){if(this.tokenType===17)return kV.call(this,this.tokenIndex);let n=this.parseWithFallback(this.Declaration,kV);return this.tokenType===17&&this.next(),n}var c0e="Block",d0e="block",m0e={children:[["Atrule","Rule","Declaration"]]};function oD(n){let o=n?l0e:SV,e=this.tokenStart,t=this.createList();this.eat(23);e:for(;!this.eof;)switch(this.tokenType){case 24:break e;case 13:case 25:this.next();break;case 3:t.push(this.parseWithFallback(this.Atrule.bind(this,n),PV));break;default:n&&this.isDelim(s0e)?t.push(SV.call(this)):t.push(o.call(this))}return this.eof||this.eat(24),{type:"Block",loc:this.getLocation(e,this.tokenStart),children:t}}function p0e(n){this.token(23,"{"),this.children(n,o=>{o.type==="Declaration"&&this.token(17,";")}),this.token(24,"}")}var sD={};qn(sD,{generate:()=>h0e,name:()=>u0e,parse:()=>rD,structure:()=>g0e});var u0e="Brackets",g0e={children:[[]]};function rD(n,o){let e=this.tokenStart,t=null;return this.eat(19),t=n.call(this,o),this.eof||this.eat(20),{type:"Brackets",loc:this.getLocation(e,this.tokenStart),children:t}}function h0e(n){this.token(9,"["),this.children(n),this.token(9,"]")}var cD={};qn(cD,{generate:()=>v0e,name:()=>_0e,parse:()=>lD,structure:()=>f0e});var _0e="CDC",f0e=[];function lD(){let n=this.tokenStart;return this.eat(15),{type:"CDC",loc:this.getLocation(n,this.tokenStart)}}function v0e(){this.token(15,"-->")}var mD={};qn(mD,{generate:()=>x0e,name:()=>C0e,parse:()=>dD,structure:()=>b0e});var C0e="CDO",b0e=[];function dD(){let n=this.tokenStart;return this.eat(14),{type:"CDO",loc:this.getLocation(n,this.tokenStart)}}function x0e(){this.token(14,"<!--")}var uD={};qn(uD,{generate:()=>S0e,name:()=>w0e,parse:()=>pD,structure:()=>M0e});var y0e=46,w0e="ClassSelector",M0e={name:String};function pD(){return this.eatDelim(y0e),{type:"ClassSelector",loc:this.getLocation(this.tokenStart-1,this.tokenEnd),name:this.consume(1)}}function S0e(n){this.token(9,"."),this.token(1,n.name)}var hD={};qn(hD,{generate:()=>D0e,name:()=>E0e,parse:()=>gD,structure:()=>O0e});var k0e=43,TV=47,P0e=62,T0e=126,E0e="Combinator",O0e={name:String};function gD(){let n=this.tokenStart,o;switch(this.tokenType){case 13:o=" ";break;case 9:switch(this.charCodeAt(this.tokenStart)){case P0e:case k0e:case T0e:this.next();break;case TV:this.next(),this.eatIdent("deep"),this.eatDelim(TV);break;default:this.error("Combinator is expected")}o=this.substrToCursor(n);break}return{type:"Combinator",loc:this.getLocation(n,this.tokenStart),name:o}}function D0e(n){this.tokenize(n.name)}var fD={};qn(fD,{generate:()=>R0e,name:()=>N0e,parse:()=>_D,structure:()=>F0e});var I0e=42,A0e=47,N0e="Comment",F0e={value:String};function _D(){let n=this.tokenStart,o=this.tokenEnd;return this.eat(25),o-n+2>=2&&this.charCodeAt(o-2)===I0e&&this.charCodeAt(o-1)===A0e&&(o-=2),{type:"Comment",loc:this.getLocation(n,this.tokenStart),value:this.substring(n+2,o)}}function R0e(n){this.token(25,"/*"+n.value+"*/")}var CD={};qn(CD,{generate:()=>Q0e,name:()=>W0e,parse:()=>vD,structure:()=>q0e,walkContext:()=>G0e});var OV=33,z0e=35,L0e=36,V0e=38,B0e=42,j0e=43,EV=47;function $0e(n){return this.Raw(n,this.consumeUntilExclamationMarkOrSemicolon,!0)}function H0e(n){return this.Raw(n,this.consumeUntilExclamationMarkOrSemicolon,!1)}function U0e(){let n=this.tokenIndex,o=this.Value();return o.type!=="Raw"&&this.eof===!1&&this.tokenType!==17&&this.isDelim(OV)===!1&&this.isBalanceEdge(n)===!1&&this.error(),o}var W0e="Declaration",G0e="declaration",q0e={important:[Boolean,String],property:String,value:["Value","Raw"]};function vD(){let n=this.tokenStart,o=this.tokenIndex,e=K0e.call(this),t=Qy(e),i=t?this.parseCustomProperty:this.parseValue,a=t?H0e:$0e,s=!1,d;this.skipSC(),this.eat(16);let p=this.tokenIndex;if(t||this.skipSC(),i?d=this.parseWithFallback(U0e,a):d=a.call(this,this.tokenIndex),t&&d.type==="Value"&&d.children.isEmpty){for(let u=p-this.tokenIndex;u<=0;u++)if(this.lookupType(u)===13){d.children.appendData({type:"WhiteSpace",loc:null,value:" "});break}}return this.isDelim(OV)&&(s=X0e.call(this),this.skipSC()),this.eof===!1&&this.tokenType!==17&&this.isBalanceEdge(o)===!1&&this.error(),{type:"Declaration",loc:this.getLocation(n,this.tokenStart),important:s,property:e,value:d}}function Q0e(n){this.token(1,n.property),this.token(16,":"),this.node(n.value),n.important&&(this.token(9,"!"),this.token(1,n.important===!0?"important":n.important))}function K0e(){let n=this.tokenStart;if(this.tokenType===9)switch(this.charCodeAt(this.tokenStart)){case B0e:case L0e:case j0e:case z0e:case V0e:this.next();break;case EV:this.next(),this.isDelim(EV)&&this.next();break}return this.tokenType===4?this.eat(4):this.eat(1),this.substrToCursor(n)}function X0e(){this.eat(9),this.skipSC();let n=this.consume(1);return n==="important"?!0:n}var yD={};qn(yD,{generate:()=>eve,name:()=>Z0e,parse:()=>xD,structure:()=>J0e});var Y0e=38;function bD(n){return this.Raw(n,this.consumeUntilSemicolonIncluded,!0)}var Z0e="DeclarationList",J0e={children:[["Declaration","Atrule","Rule"]]};function xD(){let n=this.createList();for(;!this.eof;)switch(this.tokenType){case 13:case 25:case 17:this.next();break;case 3:n.push(this.parseWithFallback(this.Atrule.bind(this,!0),bD));break;default:this.isDelim(Y0e)?n.push(this.parseWithFallback(this.Rule,bD)):n.push(this.parseWithFallback(this.Declaration,bD))}return{type:"DeclarationList",loc:this.getLocationFromList(n),children:n}}function eve(n){this.children(n,o=>{o.type==="Declaration"&&this.token(17,";")})}var MD={};qn(MD,{generate:()=>ive,name:()=>tve,parse:()=>wD,structure:()=>nve});var tve="Dimension",nve={value:String,unit:String};function wD(){let n=this.tokenStart,o=this.consumeNumber(12);return{type:"Dimension",loc:this.getLocation(n,this.tokenStart),value:o,unit:this.substring(n+o.length,this.tokenStart)}}function ive(n){this.token(12,n.value+n.unit)}var kD={};qn(kD,{generate:()=>sve,name:()=>ove,parse:()=>SD,structure:()=>rve,walkContext:()=>ave});var ove="Function",ave="function",rve={name:String,children:[[]]};function SD(n,o){let e=this.tokenStart,t=this.consumeFunctionName(),i=t.toLowerCase(),a;return a=o.hasOwnProperty(i)?o[i].call(this,o):n.call(this,o),this.eof||this.eat(22),{type:"Function",loc:this.getLocation(e,this.tokenStart),name:t,children:a}}function sve(n){this.token(2,n.name+"("),this.children(n),this.token(22,")")}var TD={};qn(TD,{generate:()=>mve,name:()=>cve,parse:()=>PD,structure:()=>dve,xxx:()=>lve});var lve="XXX",cve="Hash",dve={value:String};function PD(){let n=this.tokenStart;return this.eat(4),{type:"Hash",loc:this.getLocation(n,this.tokenStart),value:this.substrToCursor(n+1)}}function mve(n){this.token(4,"#"+n.value)}var OD={};qn(OD,{generate:()=>gve,name:()=>pve,parse:()=>ED,structure:()=>uve});var pve="Identifier",uve={name:String};function ED(){return{type:"Identifier",loc:this.getLocation(this.tokenStart,this.tokenEnd),name:this.consume(1)}}function gve(n){this.token(1,n.name)}var ID={};qn(ID,{generate:()=>fve,name:()=>hve,parse:()=>DD,structure:()=>_ve});var hve="IdSelector",_ve={name:String};function DD(){let n=this.tokenStart;return this.eat(4),{type:"IdSelector",loc:this.getLocation(n,this.tokenStart),name:this.substrToCursor(n+1)}}function fve(n){this.token(9,"#"+n.name)}var ND={};qn(ND,{generate:()=>bve,name:()=>vve,parse:()=>AD,structure:()=>Cve});var vve="MediaFeature",Cve={name:String,value:["Identifier","Number","Dimension","Ratio",null]};function AD(){let n=this.tokenStart,o,e=null;if(this.eat(21),this.skipSC(),o=this.consume(1),this.skipSC(),this.tokenType!==22){switch(this.eat(16),this.skipSC(),this.tokenType){case 10:this.lookupNonWSType(1)===9?e=this.Ratio():e=this.Number();break;case 12:e=this.Dimension();break;case 1:e=this.Identifier();break;default:this.error("Number, dimension, ratio or identifier is expected")}this.skipSC()}return this.eat(22),{type:"MediaFeature",loc:this.getLocation(n,this.tokenStart),name:o,value:e}}function bve(n){this.token(21,"("),this.token(1,n.name),n.value!==null&&(this.token(16,":"),this.node(n.value)),this.token(22,")")}var RD={};qn(RD,{generate:()=>wve,name:()=>xve,parse:()=>FD,structure:()=>yve});var xve="MediaQuery",yve={children:[["Identifier","MediaFeature","WhiteSpace"]]};function FD(){let n=this.createList(),o=null;this.skipSC();e:for(;!this.eof;){switch(this.tokenType){case 25:case 13:this.next();continue;case 1:o=this.Identifier();break;case 21:o=this.MediaFeature();break;default:break e}n.push(o)}return o===null&&this.error("Identifier or parenthesis is expected"),{type:"MediaQuery",loc:this.getLocationFromList(n),children:n}}function wve(n){this.children(n)}var LD={};qn(LD,{generate:()=>kve,name:()=>Mve,parse:()=>zD,structure:()=>Sve});var Mve="MediaQueryList",Sve={children:[["MediaQuery"]]};function zD(){let n=this.createList();for(this.skipSC();!this.eof&&(n.push(this.MediaQuery()),this.tokenType===18);)this.next();return{type:"MediaQueryList",loc:this.getLocationFromList(n),children:n}}function kve(n){this.children(n,()=>this.token(18,","))}var BD={};qn(BD,{generate:()=>Ove,name:()=>Tve,parse:()=>VD,structure:()=>Eve});var Pve=38,Tve="NestingSelector",Eve={};function VD(){let n=this.tokenStart;return this.eatDelim(Pve),{type:"NestingSelector",loc:this.getLocation(n,this.tokenStart)}}function Ove(){this.token(9,"&")}var $D={};qn($D,{generate:()=>Ave,name:()=>Dve,parse:()=>jD,structure:()=>Ive});var Dve="Nth",Ive={nth:["AnPlusB","Identifier"],selector:["SelectorList",null]};function jD(){this.skipSC();let n=this.tokenStart,o=n,e=null,t;return this.lookupValue(0,"odd")||this.lookupValue(0,"even")?t=this.Identifier():t=this.AnPlusB(),o=this.tokenStart,this.skipSC(),this.lookupValue(0,"of")&&(this.next(),e=this.SelectorList(),o=this.tokenStart),{type:"Nth",loc:this.getLocation(n,o),nth:t,selector:e}}function Ave(n){this.node(n.nth),n.selector!==null&&(this.token(1,"of"),this.node(n.selector))}var UD={};qn(UD,{generate:()=>Rve,name:()=>Nve,parse:()=>HD,structure:()=>Fve});var Nve="Number",Fve={value:String};function HD(){return{type:"Number",loc:this.getLocation(this.tokenStart,this.tokenEnd),value:this.consume(10)}}function Rve(n){this.token(10,n.value)}var GD={};qn(GD,{generate:()=>Vve,name:()=>zve,parse:()=>WD,structure:()=>Lve});var zve="Operator",Lve={value:String};function WD(){let n=this.tokenStart;return this.next(),{type:"Operator",loc:this.getLocation(n,this.tokenStart),value:this.substrToCursor(n)}}function Vve(n){this.tokenize(n.value)}var QD={};qn(QD,{generate:()=>$ve,name:()=>Bve,parse:()=>qD,structure:()=>jve});var Bve="Parentheses",jve={children:[[]]};function qD(n,o){let e=this.tokenStart,t=null;return this.eat(21),t=n.call(this,o),this.eof||this.eat(22),{type:"Parentheses",loc:this.getLocation(e,this.tokenStart),children:t}}function $ve(n){this.token(21,"("),this.children(n),this.token(22,")")}var XD={};qn(XD,{generate:()=>Wve,name:()=>Hve,parse:()=>KD,structure:()=>Uve});var Hve="Percentage",Uve={value:String};function KD(){return{type:"Percentage",loc:this.getLocation(this.tokenStart,this.tokenEnd),value:this.consumeNumber(11)}}function Wve(n){this.token(11,n.value+"%")}var ZD={};qn(ZD,{generate:()=>Kve,name:()=>Gve,parse:()=>YD,structure:()=>Qve,walkContext:()=>qve});var Gve="PseudoClassSelector",qve="function",Qve={name:String,children:[["Raw"],null]};function YD(){let n=this.tokenStart,o=null,e,t;return this.eat(16),this.tokenType===2?(e=this.consumeFunctionName(),t=e.toLowerCase(),hasOwnProperty.call(this.pseudo,t)?(this.skipSC(),o=this.pseudo[t].call(this),this.skipSC()):(o=this.createList(),o.push(this.Raw(this.tokenIndex,null,!1))),this.eat(22)):e=this.consume(1),{type:"PseudoClassSelector",loc:this.getLocation(n,this.tokenStart),name:e,children:o}}function Kve(n){this.token(16,":"),n.children===null?this.token(1,n.name):(this.token(2,n.name+"("),this.children(n),this.token(22,")"))}var eI={};qn(eI,{generate:()=>Jve,name:()=>Xve,parse:()=>JD,structure:()=>Zve,walkContext:()=>Yve});var Xve="PseudoElementSelector",Yve="function",Zve={name:String,children:[["Raw"],null]};function JD(){let n=this.tokenStart,o=null,e,t;return this.eat(16),this.eat(16),this.tokenType===2?(e=this.consumeFunctionName(),t=e.toLowerCase(),hasOwnProperty.call(this.pseudo,t)?(this.skipSC(),o=this.pseudo[t].call(this),this.skipSC()):(o=this.createList(),o.push(this.Raw(this.tokenIndex,null,!1))),this.eat(22)):e=this.consume(1),{type:"PseudoElementSelector",loc:this.getLocation(n,this.tokenStart),name:e,children:o}}function Jve(n){this.token(16,":"),this.token(16,":"),n.children===null?this.token(1,n.name):(this.token(2,n.name+"("),this.children(n),this.token(22,")"))}var nI={};qn(nI,{generate:()=>oCe,name:()=>nCe,parse:()=>tI,structure:()=>iCe});var eCe=47,tCe=46;function DV(){this.skipSC();let n=this.consume(10);for(let o=0;o<n.length;o++){let e=n.charCodeAt(o);!ca(e)&&e!==tCe&&this.error("Unsigned number is expected",this.tokenStart-n.length+o)}return Number(n)===0&&this.error("Zero number is not allowed",this.tokenStart-n.length),n}var nCe="Ratio",iCe={left:String,right:String};function tI(){let n=this.tokenStart,o=DV.call(this),e;return this.skipSC(),this.eatDelim(eCe),e=DV.call(this),{type:"Ratio",loc:this.getLocation(n,this.tokenStart),left:o,right:e}}function oCe(n){this.token(10,n.left),this.token(9,"/"),this.token(10,n.right)}var oI={};qn(oI,{generate:()=>lCe,name:()=>rCe,parse:()=>iI,structure:()=>sCe});function aCe(){return this.tokenIndex>0&&this.lookupType(-1)===13?this.tokenIndex>1?this.getTokenStart(this.tokenIndex-1):this.firstCharOffset:this.tokenStart}var rCe="Raw",sCe={value:String};function iI(n,o,e){let t=this.getTokenStart(n),i;return this.skipUntilBalanced(n,o||this.consumeUntilBalanceEnd),e&&this.tokenStart>t?i=aCe.call(this):i=this.tokenStart,{type:"Raw",loc:this.getLocation(t,i),value:this.substring(t,i)}}function lCe(n){this.tokenize(n.value)}var rI={};qn(rI,{generate:()=>uCe,name:()=>dCe,parse:()=>aI,structure:()=>pCe,walkContext:()=>mCe});function IV(n){return this.Raw(n,this.consumeUntilLeftCurlyBracket,!0)}function cCe(){let n=this.SelectorList();return n.type!=="Raw"&&this.eof===!1&&this.tokenType!==23&&this.error(),n}var dCe="Rule",mCe="rule",pCe={prelude:["SelectorList","Raw"],block:["Block"]};function aI(){let n=this.tokenIndex,o=this.tokenStart,e,t;return this.parseRulePrelude?e=this.parseWithFallback(cCe,IV):e=IV.call(this,n),t=this.Block(!0),{type:"Rule",loc:this.getLocation(o,this.tokenStart),prelude:e,block:t}}function uCe(n){this.node(n.prelude),this.node(n.block)}var lI={};qn(lI,{generate:()=>_Ce,name:()=>gCe,parse:()=>sI,structure:()=>hCe});var gCe="Selector",hCe={children:[["TypeSelector","IdSelector","ClassSelector","AttributeSelector","PseudoClassSelector","PseudoElementSelector","Combinator","WhiteSpace"]]};function sI(){let n=this.readSequence(this.scope.Selector);return this.getFirstListNode(n)===null&&this.error("Selector is expected"),{type:"Selector",loc:this.getLocationFromList(n),children:n}}function _Ce(n){this.children(n)}var dI={};qn(dI,{generate:()=>bCe,name:()=>fCe,parse:()=>cI,structure:()=>CCe,walkContext:()=>vCe});var fCe="SelectorList",vCe="selector",CCe={children:[["Selector","Raw"]]};function cI(){let n=this.createList();for(;!this.eof;){if(n.push(this.Selector()),this.tokenType===18){this.next();continue}break}return{type:"SelectorList",loc:this.getLocationFromList(n),children:n}}function bCe(n){this.children(n,()=>this.token(18,","))}var uI={};qn(uI,{generate:()=>wCe,name:()=>xCe,parse:()=>pI,structure:()=>yCe});var mI=92,AV=34,NV=39;function dw(n){let o=n.length,e=n.charCodeAt(0),t=e===AV||e===NV?1:0,i=t===1&&o>1&&n.charCodeAt(o-1)===e?o-2:o-1,a="";for(let s=t;s<=i;s++){let d=n.charCodeAt(s);if(d===mI){if(s===i){s!==o-1&&(a=n.substr(s+1));break}if(d=n.charCodeAt(++s),ds(mI,d)){let p=s-1,u=dd(n,p);s=u-1,a+=kv(n.substring(p+1,u))}else d===13&&n.charCodeAt(s+1)===10&&s++}else a+=n[s]}return a}function FV(n,o){let e=o?"'":'"',t=o?NV:AV,i="",a=!1;for(let s=0;s<n.length;s++){let d=n.charCodeAt(s);if(d===0){i+="\uFFFD";continue}if(d<=31||d===127){i+="\\"+d.toString(16),a=!0;continue}d===t||d===mI?(i+="\\"+n.charAt(s),a=!1):(a&&(Rs(d)||cd(d))&&(i+=" "),i+=n.charAt(s),a=!1)}return e+i+e}var xCe="String",yCe={value:String};function pI(){return{type:"String",loc:this.getLocation(this.tokenStart,this.tokenEnd),value:dw(this.consume(5))}}function wCe(n){this.token(5,FV(n.value))}var hI={};qn(hI,{generate:()=>TCe,name:()=>SCe,parse:()=>gI,structure:()=>PCe,walkContext:()=>kCe});var MCe=33;function zV(n){return this.Raw(n,null,!1)}var SCe="StyleSheet",kCe="stylesheet",PCe={children:[["Comment","CDO","CDC","Atrule","Rule","Raw"]]};function gI(){let n=this.tokenStart,o=this.createList(),e;for(;!this.eof;){switch(this.tokenType){case 13:this.next();continue;case 25:if(this.charCodeAt(this.tokenStart+2)!==MCe){this.next();continue}e=this.Comment();break;case 14:e=this.CDO();break;case 15:e=this.CDC();break;case 3:e=this.parseWithFallback(this.Atrule,zV);break;default:e=this.parseWithFallback(this.Rule,zV)}o.push(e)}return{type:"StyleSheet",loc:this.getLocation(n,this.tokenStart),children:o}}function TCe(n){this.children(n)}var vI={};qn(vI,{generate:()=>ICe,name:()=>OCe,parse:()=>fI,structure:()=>DCe});var ECe=42,LV=124;function _I(){this.tokenType!==1&&this.isDelim(ECe)===!1&&this.error("Identifier or asterisk is expected"),this.next()}var OCe="TypeSelector",DCe={name:String};function fI(){let n=this.tokenStart;return this.isDelim(LV)?(this.next(),_I.call(this)):(_I.call(this),this.isDelim(LV)&&(this.next(),_I.call(this))),{type:"TypeSelector",loc:this.getLocation(n,this.tokenStart),name:this.substrToCursor(n)}}function ICe(n){this.tokenize(n.name)}var xI={};qn(xI,{generate:()=>zCe,name:()=>FCe,parse:()=>bI,structure:()=>RCe});var VV=43,BV=45,CI=63;function jv(n,o){let e=0;for(let t=this.tokenStart+n;t<this.tokenEnd;t++){let i=this.charCodeAt(t);if(i===BV&&o&&e!==0)return jv.call(this,n+e+1,!1),-1;Rs(i)||this.error(o&&e!==0?"Hyphen minus"+(e<6?" or hex digit":"")+" is expected":e<6?"Hex digit is expected":"Unexpected input",t),++e>6&&this.error("Too many hex digits",t)}return this.next(),e}function mw(n){let o=0;for(;this.isDelim(CI);)++o>n&&this.error("Too many question marks"),this.next()}function ACe(n){this.charCodeAt(this.tokenStart)!==n&&this.error((n===VV?"Plus sign":"Hyphen minus")+" is expected")}function NCe(){let n=0;switch(this.tokenType){case 10:if(n=jv.call(this,1,!0),this.isDelim(CI)){mw.call(this,6-n);break}if(this.tokenType===12||this.tokenType===10){ACe.call(this,BV),jv.call(this,1,!1);break}break;case 12:n=jv.call(this,1,!0),n>0&&mw.call(this,6-n);break;default:if(this.eatDelim(VV),this.tokenType===1){n=jv.call(this,0,!0),n>0&&mw.call(this,6-n);break}if(this.isDelim(CI)){this.next(),mw.call(this,5);break}this.error("Hex digit or question mark is expected")}}var FCe="UnicodeRange",RCe={value:String};function bI(){let n=this.tokenStart;return this.eatIdent("u"),NCe.call(this),{type:"UnicodeRange",loc:this.getLocation(n,this.tokenStart),value:this.substrToCursor(n)}}function zCe(n){this.tokenize(n.value)}var MI={};qn(MI,{generate:()=>UCe,name:()=>$Ce,parse:()=>wI,structure:()=>HCe});var LCe=32,yI=92,VCe=34,BCe=39,jCe=40,jV=41;function $V(n){let o=n.length,e=4,t=n.charCodeAt(o-1)===jV?o-2:o-1,i="";for(;e<t&&cd(n.charCodeAt(e));)e++;for(;e<t&&cd(n.charCodeAt(t));)t--;for(let a=e;a<=t;a++){let s=n.charCodeAt(a);if(s===yI){if(a===t){a!==o-1&&(i=n.substr(a+1));break}if(s=n.charCodeAt(++a),ds(yI,s)){let d=a-1,p=dd(n,d);a=p-1,i+=kv(n.substring(d+1,p))}else s===13&&n.charCodeAt(a+1)===10&&a++}else i+=n[a]}return i}function HV(n){let o="",e=!1;for(let t=0;t<n.length;t++){let i=n.charCodeAt(t);if(i===0){o+="\uFFFD";continue}if(i<=31||i===127){o+="\\"+i.toString(16),e=!0;continue}i===LCe||i===yI||i===VCe||i===BCe||i===jCe||i===jV?(o+="\\"+n.charAt(t),e=!1):(e&&Rs(i)&&(o+=" "),o+=n.charAt(t),e=!1)}return"url("+o+")"}var $Ce="Url",HCe={value:String};function wI(){let n=this.tokenStart,o;switch(this.tokenType){case 7:o=$V(this.consume(7));break;case 2:this.cmpStr(this.tokenStart,this.tokenEnd,"url(")||this.error("Function name must be `url`"),this.eat(2),this.skipSC(),o=dw(this.consume(5)),this.skipSC(),this.eof||this.eat(22);break;default:this.error("Url or Function is expected")}return{type:"Url",loc:this.getLocation(n,this.tokenStart),value:o}}function UCe(n){this.token(7,HV(n.value))}var kI={};qn(kI,{generate:()=>qCe,name:()=>WCe,parse:()=>SI,structure:()=>GCe});var WCe="Value",GCe={children:[[]]};function SI(){let n=this.tokenStart,o=this.readSequence(this.scope.Value);return{type:"Value",loc:this.getLocation(n,this.tokenStart),children:o}}function qCe(n){this.children(n)}var TI={};qn(TI,{generate:()=>YCe,name:()=>KCe,parse:()=>PI,structure:()=>XCe});var QCe=Object.freeze({type:"WhiteSpace",loc:null,value:" "}),KCe="WhiteSpace",XCe={value:String};function PI(){return this.eat(13),QCe}function YCe(n){this.token(13,n.value)}var WV=ze(q({generic:!0},yV),{node:$v});var EI={};qn(EI,{AtrulePrelude:()=>qV,Selector:()=>KV,Value:()=>JV});var ZCe=35,JCe=42,GV=43,ebe=45,tbe=47,nbe=117;function Hv(n){switch(this.tokenType){case 4:return this.Hash();case 18:return this.Operator();case 21:return this.Parentheses(this.readSequence,n.recognizer);case 19:return this.Brackets(this.readSequence,n.recognizer);case 5:return this.String();case 12:return this.Dimension();case 11:return this.Percentage();case 10:return this.Number();case 2:return this.cmpStr(this.tokenStart,this.tokenEnd,"url(")?this.Url():this.Function(this.readSequence,n.recognizer);case 7:return this.Url();case 1:return this.cmpChar(this.tokenStart,nbe)&&this.cmpChar(this.tokenStart+1,GV)?this.UnicodeRange():this.Identifier();case 9:{let o=this.charCodeAt(this.tokenStart);if(o===tbe||o===JCe||o===GV||o===ebe)return this.Operator();o===ZCe&&this.error("Hex or identifier is expected",this.tokenStart+1);break}}}var qV={getNode:Hv};var ibe=35,obe=38,abe=42,rbe=43,sbe=47,QV=46,lbe=62,cbe=124,dbe=126;function mbe(n,o){o.last!==null&&o.last.type!=="Combinator"&&n!==null&&n.type!=="Combinator"&&o.push({type:"Combinator",loc:null,name:" "})}function pbe(){switch(this.tokenType){case 19:return this.AttributeSelector();case 4:return this.IdSelector();case 16:return this.lookupType(1)===16?this.PseudoElementSelector():this.PseudoClassSelector();case 1:return this.TypeSelector();case 10:case 11:return this.Percentage();case 12:this.charCodeAt(this.tokenStart)===QV&&this.error("Identifier is expected",this.tokenStart+1);break;case 9:{switch(this.charCodeAt(this.tokenStart)){case rbe:case lbe:case dbe:case sbe:return this.Combinator();case QV:return this.ClassSelector();case abe:case cbe:return this.TypeSelector();case ibe:return this.IdSelector();case obe:return this.NestingSelector()}break}}}var KV={onWhiteSpace:mbe,getNode:pbe};function XV(){return this.createSingleNodeList(this.Raw(this.tokenIndex,null,!1))}function YV(){let n=this.createList();if(this.skipSC(),n.push(this.Identifier()),this.skipSC(),this.tokenType===18){n.push(this.Operator());let o=this.tokenIndex,e=this.parseCustomProperty?this.Value(null):this.Raw(this.tokenIndex,this.consumeUntilExclamationMarkOrSemicolon,!1);if(e.type==="Value"&&e.children.isEmpty){for(let t=o-this.tokenIndex;t<=0;t++)if(this.lookupType(t)===13){e.children.appendData({type:"WhiteSpace",loc:null,value:" "});break}}n.push(e)}return n}function ZV(n){return n!==null&&n.type==="Operator"&&(n.value[n.value.length-1]==="-"||n.value[n.value.length-1]==="+")}var JV={getNode:Hv,onWhiteSpace(n,o){ZV(n)&&(n.value=" "+n.value),ZV(o.last)&&(o.last.value+=" ")},expression:XV,var:YV};var e9={parse:{prelude:null,block(){return this.Block(!0)}}};var t9={parse:{prelude(){let n=this.createList();switch(this.skipSC(),this.tokenType){case 5:n.push(this.String());break;case 7:case 2:n.push(this.Url());break;default:this.error("String or url() is expected")}return(this.lookupNonWSType(0)===1||this.lookupNonWSType(0)===21)&&n.push(this.MediaQueryList()),n},block:null}};var n9={parse:{prelude(){return this.createSingleNodeList(this.MediaQueryList())},block(n=!1){return this.Block(n)}}};var i9={parse:{prelude(){return this.createSingleNodeList(this.SelectorList())},block(){return this.Block(!0)}}};var o9={parse:{prelude(){return this.createSingleNodeList(this.SelectorList())},block(){return this.Block(!0)}}};function ube(){return this.createSingleNodeList(this.Raw(this.tokenIndex,null,!1))}function gbe(){return this.skipSC(),this.tokenType===1&&this.lookupNonWSType(1)===16?this.createSingleNodeList(this.Declaration()):a9.call(this)}function a9(){let n=this.createList(),o;this.skipSC();e:for(;!this.eof;){switch(this.tokenType){case 25:case 13:this.next();continue;case 2:o=this.Function(ube,this.scope.AtrulePrelude);break;case 1:o=this.Identifier();break;case 21:o=this.Parentheses(gbe,this.scope.AtrulePrelude);break;default:break e}n.push(o)}return n}var r9={parse:{prelude(){let n=a9.call(this);return this.getFirstListNode(n)===null&&this.error("Condition is expected"),n},block(n=!1){return this.Block(n)}}};var s9={"font-face":e9,import:t9,media:n9,nest:i9,page:o9,supports:r9};var Ru={parse(){return this.createSingleNodeList(this.SelectorList())}},OI={parse(){return this.createSingleNodeList(this.Selector())}},l9={parse(){return this.createSingleNodeList(this.Identifier())}},pw={parse(){return this.createSingleNodeList(this.Nth())}},c9={dir:l9,has:Ru,lang:l9,matches:Ru,is:Ru,"-moz-any":Ru,"-webkit-any":Ru,where:Ru,not:Ru,"nth-child":pw,"nth-last-child":pw,"nth-last-of-type":pw,"nth-of-type":pw,slotted:OI,host:OI,"host-context":OI};var DI={};qn(DI,{AnPlusB:()=>KO,Atrule:()=>YO,AtrulePrelude:()=>JO,AttributeSelector:()=>nD,Block:()=>oD,Brackets:()=>rD,CDC:()=>lD,CDO:()=>dD,ClassSelector:()=>pD,Combinator:()=>gD,Comment:()=>_D,Declaration:()=>vD,DeclarationList:()=>xD,Dimension:()=>wD,Function:()=>SD,Hash:()=>PD,IdSelector:()=>DD,Identifier:()=>ED,MediaFeature:()=>AD,MediaQuery:()=>FD,MediaQueryList:()=>zD,NestingSelector:()=>VD,Nth:()=>jD,Number:()=>HD,Operator:()=>WD,Parentheses:()=>qD,Percentage:()=>KD,PseudoClassSelector:()=>YD,PseudoElementSelector:()=>JD,Ratio:()=>tI,Raw:()=>iI,Rule:()=>aI,Selector:()=>sI,SelectorList:()=>cI,String:()=>pI,StyleSheet:()=>gI,TypeSelector:()=>fI,UnicodeRange:()=>bI,Url:()=>wI,Value:()=>SI,WhiteSpace:()=>PI});var d9={parseContext:{default:"StyleSheet",stylesheet:"StyleSheet",atrule:"Atrule",atrulePrelude(n){return this.AtrulePrelude(n.atrule?String(n.atrule):null)},mediaQueryList:"MediaQueryList",mediaQuery:"MediaQuery",rule:"Rule",selectorList:"SelectorList",selector:"Selector",block(){return this.Block(!0)},declarationList:"DeclarationList",declaration:"Declaration",value:"Value"},scope:EI,atrule:s9,pseudo:c9,node:DI};var m9={node:$v};var p9=qO(q(q(q({},WV),d9),m9));var{tokenize:qCt,parse:Gh,generate:uw,lexer:QCt,createLexer:KCt,walk:XCt,find:YCt,findLast:ZCt,findAll:JCt,toPlainObject:ebt,fromPlainObject:tbt,fork:nbt}=p9;var $l=(()=>{class n{fix(e){let t=Gh(e,{context:"declarationList"});return t.children.forEach(i=>{i.property==="font-size"&&i.value&&i.value.children&&i.value.children.forEach(a=>{if(a.type==="Number"){let s=a.value.toString();s.indexOf("pt")>=0||s.indexOf("px")>=0||(a.value=`${s}pt`)}})}),uw(t)}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var dr=(()=>{class n{static DEFAULT_FONT="TypeWriter";static DEFAULT_SIZE=10;static REPLACE_BY_FONT="Noto Sans";static REPLACE_BY_SIZE=11;fix(e){return e.font_family===n.DEFAULT_FONT&&e.font_size===n.DEFAULT_SIZE&&(e.font_family=n.REPLACE_BY_FONT,e.font_size=n.REPLACE_BY_SIZE),e}fixStyles(e){let t=Gh(e,{context:"declarationList"}),i=null,a=null,s=!0;if(t.children.forEach(d=>{d.property==="font-family"&&d.value&&d.value.children&&d.value.children.forEach(p=>{p.type==="Identifier"&&(i=p),p.type==="String"&&(i=p,s=!1)}),d.property==="font-size"&&d.value&&d.value.children&&d.value.children.forEach(p=>{p.type==="Dimension"&&(a=p)})}),a&&i){let d=null,p=a.value;s?d=i.name:d=i.value;let u=this.fix({font_family:d.split('"').join(""),font_size:parseInt(p,10)});s?i.name=u.font_family:i.value=u.font_family,a.value=u.font_size}return uw(t)}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Qh=(()=>{class n{fontBBoxCalculator;cssFixer;fontFixer;constructor(e,t,i){this.fontBBoxCalculator=e,this.cssFixer=t,this.fontFixer=i}convert(e,t){let i=new Cc;i.rotation=e.rotation,i.style=e.style,i.text=e.text,i.x=e.x,i.y=e.y,i.originalX=e.x,i.originalY=e.y,t!==void 0&&(i.id=t.node_id,i.nodeId=t.node_id);let a=this.cssFixer.fix(i.style),s=this.fontFixer.fixStyles(a),d=this.fontBBoxCalculator.calculate(i.text,s);return i.x!==null&&(i.x+=3),i.y!==null&&(i.y+=d.height),i}static \u0275fac=function(t){return new(t||n)(_e(ld),_e($l),_e(dr))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var gw=class{adapterNumber;linkType;macAddress;name;portNumber;shortName};var Kh=(()=>{class n{convert(e){let t=new gw;return t.adapterNumber=e.adapter_number,t.linkType=e.link_type,t.macAddress=e.mac_address,t.name=e.name,t.portNumber=e.port_number,t.shortName=e.short_name,t}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Xh=(()=>{class n{labelToMapLabel;portToMapPort;fontBBoxCalculator;cssFixer;fontFixer;constructor(e,t,i,a,s){this.labelToMapLabel=e,this.portToMapPort=t,this.fontBBoxCalculator=i,this.cssFixer=a,this.fontFixer=s}convert(e){let t=new cs;if(t.id=e.node_id,t.aux=e.aux,t.auxType=e.aux_type,t.commandLine=e.command_line,t.computeId=e.compute_id,t.console=e.console,t.consoleHost=e.console_host,t.consoleType=e.console_type,t.firstPortName=e.first_port_name,t.height=e.height,t.label=this.labelToMapLabel?this.labelToMapLabel.convert(e.label,{node_id:e.node_id}):void 0,t.locked=e.locked,t.name=e.name,t.nodeDirectory=e.node_directory,t.nodeType=e.node_type,t.portNameFormat=e.port_name_format,t.portSegmentSize=e.port_segment_size,t.ports=e.ports?e.ports.map(i=>this.portToMapPort.convert(i)):[],t.properties=e.properties,t.projectId=e.project_id,t.status=e.status,t.symbol=e.symbol,t.symbolUrl=e.symbol_url,t.usage=e.properties.usage,t.width=e.width,t.x=e.x,t.y=e.y,t.z=e.z,t.missingImage=e.missing_image,t.missingImages=e.missing_images,t.label!==void 0){let i=this.cssFixer.fix(t.label.style),a=this.fontFixer.fixStyles(i),s=this.fontBBoxCalculator.calculate(t.label.text,a);(e.label.x===null||e.label.y===null)&&(t.label.x=e.width/2-s.width/2+3,t.label.y=-8)}return t}static \u0275fac=function(t){return new(t||n)(_e(Qh),_e(Kh),_e(ld),_e($l),_e(dr))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var zu=class{id;captureFileName;captureFilePath;capturing;filters;linkType;nodes;projectId;suspend;show_filters_icon;link_style;wireshark;markers;distance;length;source;target;isSelected=!1;isMultiplied=!1;parallelLinksCount=1;x;y};var Hl=(()=>{class n{static LINK_TYPE_PREFIX="gns3-link-type";static BEZIER_CURVINESS_PREFIX="gns3-bezier-curviness";static FLOWCHART_ROUNDNESS_PREFIX="gns3-flowchart-roundness";static linkTypeKey(e,t){return`${n.LINK_TYPE_PREFIX}:${e}:${t}`}static bezierCurvinessKey(e,t){return`${n.BEZIER_CURVINESS_PREFIX}:${e}:${t}`}static flowchartRoundnessKey(e,t){return`${n.FLOWCHART_ROUNDNESS_PREFIX}:${e}:${t}`}static get(e,t){if(!(!e||!t))try{return localStorage.getItem(n.linkTypeKey(e,t))||void 0}catch{return}}static set(e,t,i){if(!(!e||!t||!i))try{localStorage.setItem(n.linkTypeKey(e,t),i)}catch{}}static getNumberValue(e){try{let t=localStorage.getItem(e);if(t===null||t==="")return;let i=parseInt(t,10);return Number.isNaN(i)?void 0:i}catch{return}}static setNumberValue(e,t){if(t!=null)try{localStorage.setItem(e,`${t}`)}catch{}}static getBezierCurviness(e,t){if(!(!e||!t))return n.getNumberValue(n.bezierCurvinessKey(e,t))}static setBezierCurviness(e,t,i){!e||!t||n.setNumberValue(n.bezierCurvinessKey(e,t),i)}static getFlowchartRoundness(e,t){if(!(!e||!t))return n.getNumberValue(n.flowchartRoundnessKey(e,t))}static setFlowchartRoundness(e,t,i){!e||!t||n.setNumberValue(n.flowchartRoundnessKey(e,t),i)}static getStyleSnapshot(e,t){let i=n.get(e,t),a=n.getBezierCurviness(e,t),s=n.getFlowchartRoundness(e,t);if(!(!i&&a===void 0&&s===void 0))return{link_type:i,bezier_curviness:a,flowchart_roundness:s}}static remove(e,t){if(!(!e||!t))try{localStorage.removeItem(n.linkTypeKey(e,t)),localStorage.removeItem(n.bezierCurvinessKey(e,t)),localStorage.removeItem(n.flowchartRoundnessKey(e,t))}catch{}}}return n})();var Jd=class{id;nodeId;linkId;adapterNumber;portNumber;label;interfaceStatus;bezierRenderOffsetX;bezierRenderOffsetY};var hw=(()=>{class n{labelToMapLabel;constructor(e){this.labelToMapLabel=e}convert(e,t){let i=new Jd;return i.nodeId=e.node_id,i.adapterNumber=e.adapter_number,i.portNumber=e.port_number,i.label=this.labelToMapLabel.convert(e.label),t!==void 0&&(i.linkId=t.link_id,i.id=`${i.nodeId}-${i.linkId}`),i}static \u0275fac=function(t){return new(t||n)(_e(Qh))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Yh=(()=>{class n{linkNodeToMapLinkNode;constructor(e){this.linkNodeToMapLinkNode=e}convert(e){let t=new zu;if(t.id=e.link_id,t.captureFileName=e.capture_file_name,t.captureFilePath=e.capture_file_path,t.capturing=e.capturing,t.filters=e.filters,t.link_style=e.link_style,!(t.link_style?.link_type!==void 0||t.link_style?.bezier_curviness!==void 0||t.link_style?.flowchart_roundness!==void 0)){let a=Hl.getStyleSnapshot(e.project_id,e.link_id);a&&(t.link_style=q(q({},t.link_style||{}),a))}return t.linkType=e.link_type,t.nodes=e.nodes.map((a,s)=>{let d=this.linkNodeToMapLinkNode.convert(a,{link_id:e.link_id}),p=e.interface_statuses?.[s];return p&&(d.interfaceStatus=p),d}),t.projectId=e.project_id,t.suspend=e.suspend,t.show_filters_icon=e.show_filters_icon,t.wireshark=e.wireshark,t.markers=e.markers,t}static \u0275fac=function(t){return new(t||n)(_e(hw))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Hr=class{id;projectId;rotation;svg;locked;x;y;z;element};var wr=class{height;width;stroke;stroke_width;stroke_dasharray;points;curve_type;arrow_start;arrow_end};var _w=class{convert(o){let e=new wr,t=o.attributes.getNamedItem("stroke");t&&(e.stroke=t.value);let i=o.attributes.getNamedItem("stroke-width");i&&(e.stroke_width=parseInt(i.value,10));let a=o.attributes.getNamedItem("stroke-dasharray");a&&(e.stroke_dasharray=a.value);let s=o.attributes.getNamedItem("data-curve-type");s?e.curve_type=s.value:e.curve_type="catmullrom";let d=o.attributes.getNamedItem("data-arrow-start");d&&(e.arrow_start=d.value==="true");let p=o.attributes.getNamedItem("data-arrow-end");p&&(e.arrow_end=p.value==="true");let u=o.attributes.getNamedItem("d");return u&&(e.points=this.parsePathData(u.value)),e}parsePathData(o){let e=[],t=o.match(/[MLQCZ][^MLQCZ]*/gi);if(!t)return e;for(let i of t){let a=i[0].toUpperCase(),s=i.slice(1).trim().split(/[\s,]+/).map(Number);if(a==="M"||a==="L")for(let d=0;d<s.length;d+=2)!isNaN(s[d])&&!isNaN(s[d+1])&&e.push({x:s[d],y:s[d+1]});else if(a==="Q")for(let d=0;d<s.length;d+=4)!isNaN(s[d])&&isNaN(s[d+1]),!isNaN(s[d+2])&&!isNaN(s[d+3])&&e.push({x:s[d+2],y:s[d+3]});else if(a==="C")for(let d=0;d<s.length;d+=6)!isNaN(s[d+4])&&!isNaN(s[d+5])&&e.push({x:s[d+4],y:s[d+5]})}return e}};var Oi=class{height;width;cx;cy;fill;fill_opacity;rx;ry;stroke;stroke_width;stroke_dasharray};var fw=class{convert(o){let e=new Oi,t=o.attributes.getNamedItem("fill");t&&(e.fill=t.value);let i=o.attributes.getNamedItem("fill-opacity");i&&(e.fill_opacity=parseFloat(i.value));let a=o.attributes.getNamedItem("stroke");a&&(e.stroke=a.value);let s=o.attributes.getNamedItem("stroke-width");s&&(e.stroke_width=parseInt(s.value,10));let d=o.attributes.getNamedItem("stroke-dasharray");d&&(e.stroke_dasharray=d.value);let p=o.attributes.getNamedItem("cx");p&&(e.cx=parseInt(p.value,10));let u=o.attributes.getNamedItem("cy");u&&(e.cy=parseInt(u.value,10));let g=o.attributes.getNamedItem("rx");g&&(e.rx=parseInt(g.value,10));let C=o.attributes.getNamedItem("ry");return C&&(e.ry=parseInt(C.value,10)),e}};var ud=class{height;width;data};var vw=class{convert(o){let e=new ud,t=o.attributes.getNamedItem("xlink:href");t&&(e.data=t.value);let i=o.attributes.getNamedItem("width");i&&(e.width=parseInt(i.value,10));let a=o.attributes.getNamedItem("height");return a&&(e.height=parseInt(a.value,10)),e}};var Ur=class{height;width;stroke;stroke_width;stroke_dasharray;x1;x2;y1;y2;arrow_start;arrow_end;drawing_type;control_offset;text;text_font_family;text_font_size;text_font_weight;text_fill;text_x;text_y};var Cw=class{convert(o){let e=new Ur,t=o.attributes.getNamedItem("stroke");t&&(e.stroke=t.value);let i=o.attributes.getNamedItem("stroke-width");i&&(e.stroke_width=parseInt(i.value,10));let a=o.attributes.getNamedItem("stroke-dasharray");a&&(e.stroke_dasharray=a.value);let s=o.attributes.getNamedItem("x1");s&&(e.x1=parseInt(s.value,10));let d=o.attributes.getNamedItem("x2");d&&(e.x2=parseInt(d.value,10));let p=o.attributes.getNamedItem("y1");p&&(e.y1=parseInt(p.value,10));let u=o.attributes.getNamedItem("y2");u&&(e.y2=parseInt(u.value,10));let g=o.attributes.getNamedItem("marker-start"),C=o.attributes.getNamedItem("marker-end");g&&g.value.includes("line-start")?e.arrow_start=!0:e.arrow_start=!1,C&&C.value.includes("line-end")?e.arrow_end=!0:e.arrow_end=!1;let M=o.attributes.getNamedItem("data-drawing-type");M&&(M.value==="straight"||M.value==="freeform")?e.drawing_type=M.value:e.drawing_type="straight";let x=o.attributes.getNamedItem("data-control-offset");if(x&&x.value){let b=x.value.split(",");b.length===2?e.control_offset=[parseInt(b[0],10),parseInt(b[1],10)]:e.control_offset=[0,0]}else e.control_offset=[0,0];return e.arrow_start=e.arrow_start??!1,e.arrow_end=e.arrow_end??!1,e}};var za=class{height;width;fill;fill_opacity;stroke;stroke_width;stroke_dasharray;rx;ry};var bw=class{convert(o){let e=new za,t=o.attributes.getNamedItem("fill");t&&(e.fill=t.value);let i=o.attributes.getNamedItem("fill-opacity");i&&(e.fill_opacity=parseFloat(i.value));let a=o.attributes.getNamedItem("stroke");a&&(e.stroke=a.value);let s=o.attributes.getNamedItem("stroke-width");s&&(e.stroke_width=parseInt(s.value,10));let d=o.attributes.getNamedItem("stroke-dasharray");d&&(e.stroke_dasharray=d.value);let p=o.attributes.getNamedItem("width");p&&(e.width=parseInt(p.value,10));let u=o.attributes.getNamedItem("height");u&&(e.height=parseInt(u.value,10));let g=o.attributes.getNamedItem("rx");g&&(e.rx=parseInt(g.value,0));let C=o.attributes.getNamedItem("ry");return C&&(e.ry=parseInt(C.value,0)),e}};var zs=class{height;width;text;fill;fill_opacity;font_family;font_size;font_weight;text_decoration};var xw=class{convert(o){let e=new zs;e.text=o.textContent;let t=o.attributes.getNamedItem("fill");t&&(e.fill=t.value);let i=o.attributes.getNamedItem("fill-opacity");i&&(e.fill_opacity=parseFloat(i.value));let a=o.attributes.getNamedItem("font-family");a&&(e.font_family=a.value);let s=o.attributes.getNamedItem("font-size");s&&(e.font_size=+s.value);let d=o.attributes.getNamedItem("font-weight");d&&(e.font_weight=d.value);let p=o.attributes.getNamedItem("text-decoration");return p&&(e.text_decoration=p.value),e}};var gd=(()=>{class n{parser;elementParsers;constructor(){this.parser=new DOMParser,this.elementParsers={text:new xw,image:new vw,rect:new bw,line:new Cw,ellipse:new fw,path:new _w}}supportedTags(){return Object.keys(this.elementParsers)}convert(e){let i=this.parser.parseFromString(e,"text/xml").getElementsByTagName("svg");if(i.length!==1)throw new Error(`Cannot locate svg element root in '${e}'`);let a=i[0],s=null,d=null;for(let u in a.children){d=a.children[u];let g=d.nodeName;if(g in this.elementParsers){s=this.elementParsers[g];break}}if(s===null)throw new Error(`Cannot find parser for '${e}'`);let p=s.convert(d);return p.width=+a.getAttribute("width"),p.height=+a.getAttribute("height"),p}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var cp=(()=>{class n{svgToDrawingConverter;constructor(e){this.svgToDrawingConverter=e}convert(e){let t=new Hr;t.id=e.drawing_id,t.projectId=e.project_id,t.rotation=e.rotation,t.svg=e.svg,t.locked=e.locked,t.x=e.x,t.y=e.y,t.z=e.z;try{t.element=this.svgToDrawingConverter.convert(e.svg)}catch{}return t}static \u0275fac=function(t){return new(t||n)(_e(gd))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var yw=class{id;builtin;filename;raw};var ww=(()=>{class n{convert(e){let t=new yw;return t.id=e.symbol_id,t.builtin=e.builtin,t.filename=e.filename,t.raw=e.raw,t}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Mw=class{index;nodes;drawings;links;constructor(o,e=[],t=[],i=[]){this.index=o,this.nodes=e,this.drawings=t,this.links=i}};var dp=(()=>{class n{layers;constructor(){this.layers={}}getLayersList(){return Object.keys(this.layers).sort((e,t)=>Number(e)-Number(t)).map(e=>this.layers[e])}setNodes(e){e.forEach(t=>{this.getLayerForKey(t.z.toString()).nodes.push(t)})}setDrawings(e){e.forEach(t=>{this.getLayerForKey(t.z.toString()).drawings.push(t)})}setLinks(e){e.filter(t=>t.source&&t.target).forEach(t=>{let i=Math.min(t.source.z,t.target.z).toString();this.getLayerForKey(i).links.push(t)})}clear(){this.layers={}}addNode(e){this.getLayerForKey(e.z.toString()).nodes.push(e)}removeNode(e){for(let t of Object.keys(this.layers))this.layers[t].nodes=this.layers[t].nodes.filter(i=>i.id!==e.id)}moveNode(e,t){this.removeNode(e),this.addNode(e)}addLink(e){if(!e.source||!e.target)return;let t=Math.min(e.source.z,e.target.z).toString();this.getLayerForKey(t).links.push(e)}removeLink(e){for(let t of Object.keys(this.layers))this.layers[t].links=this.layers[t].links.filter(i=>i.id!==e.id)}moveLink(e){this.removeLink(e),this.addLink(e)}addDrawing(e){this.getLayerForKey(e.z.toString()).drawings.push(e)}removeDrawing(e){for(let t of Object.keys(this.layers))this.layers[t].drawings=this.layers[t].drawings.filter(i=>i.id!==e.id)}moveDrawing(e,t){this.removeDrawing(e),this.addDrawing(e)}getLayerForKey(e){return e in this.layers||(this.layers[e]=new Mw,this.layers[e].index=Number(e)),this.layers[e]}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var mp=(()=>{class n{static DEFAULT_LINK_SPACING=14;static DENSE_LINK_SPACING=10;static MIN_LINK_SPACING=6;static DENSE_BUNDLE_THRESHOLD=4;static NODE_EDGE_PADDING=8;static MAX_VISIBLE_DENSE_LINKS=8;linkTranslation(e,t,i){if(!e)return{dx:0,dy:0};let a=i.x-t.x,s=i.y-t.y,d=Math.sqrt(a*a+s*s);if(d===0)return{dx:0,dy:0};let p=-s/d,u=a/d;return{dx:p*e,dy:u*e}}assignDataToLinks(e){let t={};e.forEach(i=>{if(!i.source||!i.target){i.distance=0,i.parallelLinksCount=1;return}let a=i.source.id,s=i.target.id,d=a<s?`${a},${s}`:`${s},${a}`;d in t||(t[d]=[]),t[d].push(i)}),Object.keys(t).forEach(i=>{let a=t[i],s=this.calculateSpacingForGroup(a),d=this.getVisibleRange(a.length),p=this.getOverflowStackDistance(a.length,s),u=(d.count-1)/2;a.forEach((g,C)=>{if(C<d.start||C>d.end)g.distance=p;else{let M=C-d.start;g.distance=(M-u)*s}g.parallelLinksCount=a.length})})}getVisibleRange(e){if(e<=n.MAX_VISIBLE_DENSE_LINKS)return{start:0,end:Math.max(0,e-1),count:e};let t=this.getVisibleLinksCountForSpacing(e),i=e-t,s=Math.floor(i/2);return{start:s,end:s+t-1,count:t}}getOverflowStackDistance(e,t){return e<=n.MAX_VISIBLE_DENSE_LINKS?0:t/2}calculateSpacingForGroup(e){if(e.length<=n.DENSE_BUNDLE_THRESHOLD)return n.DEFAULT_LINK_SPACING;let t=n.DENSE_LINK_SPACING,i=this.getMaxSpacingFromNodeSize(e);return i>0&&(t=Math.min(t,i)),Math.max(n.MIN_LINK_SPACING,t)}getMaxSpacingFromNodeSize(e){let t=this.getVisibleLinksCountForSpacing(e.length);if(t<=1)return n.DEFAULT_LINK_SPACING;let i=e[0],a=this.getNodeCrossSection(i.source),s=this.getNodeCrossSection(i.target);if(!a||!s)return 0;let d=Math.min(a,s)-n.NODE_EDGE_PADDING*2;return d<=0?0:d/(t-1)}getVisibleLinksCountForSpacing(e){return Math.min(e,n.MAX_VISIBLE_DENSE_LINKS)}getNodeCrossSection(e){if(!e)return 0;let t=[e.width,e.height].filter(i=>typeof i=="number"&&i>0);return t.length===0?0:Math.min(...t)}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var ybe="M -4 -6 L 8 0 L -4 6 Z",wbe=55,Mbe=3,Sbe=8,h9=6,_9="\0",kbe=(n,o)=>`${n}${_9}${o??"none"}`,Sw=n=>n.split(_9)[0],Pbe=0,hd=(()=>{class n{_flashing=z(new Map);timers=new Map;DEFAULT_FLASH_MS=800;effectRef;prev=new Map;geoCache=new Map;pending=new Map;flushRaf=null;flushScheduled=!1;constructor(){let e=f(Va);this.effectRef=Vn(()=>this.applyDiff(this._flashing())),e.onDestroy(()=>{this.reset(),this.effectRef.destroy()})}evictLink(e){this.geoCache.delete(e)}redrawArrows(e){let t=this.bestEntryForLink(this._flashing(),e);t&&this.setLink(e,t.state)}reset(){this.flushRaf!==null&&(cancelAnimationFrame(this.flushRaf),this.flushRaf=null),this.flushScheduled=!1,this.pending.clear();for(let e of this.timers.values())clearTimeout(e);this.timers.clear(),this._flashing().size>0&&this._flashing.set(new Map);for(let e of[...this.prev.keys()])this.clearLink(Sw(e));this.prev.clear(),this.geoCache.clear()}flash(e,t,i,a=null,s=null){let d=kbe(e,a),p=i&&i>0?i:this.DEFAULT_FLASH_MS;this.pending.set(d,{state:{color:t,dir:a,captureNodeId:s,_seq:Pbe++},ms:p}),this.scheduleFlush()}scheduleFlush(){this.flushScheduled||(this.flushScheduled=!0,this.flushRaf=requestAnimationFrame(()=>{this.flushScheduled=!1,this.flushRaf=null,this.flush()}))}flush(){if(this.pending.size===0)return;let e=this.pending;this.pending=new Map;for(let[t,{ms:i}]of e)clearTimeout(this.timers.get(t)),this.timers.set(t,setTimeout(()=>this.expire(t),i));this._flashing.update(t=>{let i=null;for(let[a,{state:s}]of e){let d=t.get(a);(!d||d.color!==s.color||d.dir!==s.dir||d.captureNodeId!==s.captureNodeId)&&(i===null&&(i=new Map(t)),i.set(a,s))}return i??t})}expire(e){this.timers.delete(e),this._flashing.update(t=>{if(!t.has(e))return t;let i=new Map(t);return i.delete(e),i})}applyDiff(e){for(let t of[...this.prev.keys()])if(!e.has(t)){let i=Sw(t);this.prev.delete(t);let a=this.bestEntryForLink(e,i);a?(this.setLink(i,a.state),this.prev.set(a.key,a.state)):this.clearLink(i)}for(let[t,i]of e){let a=this.prev.get(t);(!a||a.color!==i.color||a.dir!==i.dir||a.captureNodeId!==i.captureNodeId)&&(this.setLink(Sw(t),i),this.prev.set(t,i))}}bestEntryForLink(e,t){let i=null;for(let[a,s]of e)Sw(a)===t&&(!i||s._seq>i.state._seq)&&(i={key:a,state:s});return i}setLink(e,t){let i=this.selectLinkGroup(e);if(i.empty())return;let a=i.select("path.ethernet_link, path.serial_link");if(a.empty())return;a.classed("marker-pulse",!0),a.style("stroke",t.color??null);let s=t.dir==="tx"?"tx":t.dir==="rx"?"rx":null;this.renderDirArrow(e,i,a,t,s)}clearLink(e){let t=this.selectLinkGroup(e);t.empty()||(t.select("path.ethernet_link, path.serial_link").classed("marker-pulse",!1).style("stroke",null),t.selectAll("g.marker-arrow-tx, g.marker-arrow-rx").remove())}selectLinkGroup(e){return Lt("svg#map").select(`g.link[link_id="${e}"]`)}static arrowPointsAlongPath(e,t,i){return e==="tx"&&t||e==="rx"&&i}renderDirArrow(e,t,i,a,s){let d=t.attr("map-source"),p=t.attr("map-target"),u=!!a.captureNodeId&&a.captureNodeId===d,g=!!a.captureNodeId&&a.captureNodeId===p;if(a.captureNodeId&&!u&&!g)return;let C=s?`marker-arrow-${s}`:"marker-arrow";if(t.select(`g.${C}`).remove(),!s)return;let M=i.node();if(!M)return;let x=M.getAttribute("d")??"",b=this.geoCache.get(e);if(!b||b.d!==x){let F;try{F=M.getTotalLength()}catch{return}if(!F||!Number.isFinite(F))return;b={d:x,len:F,pts:new Map},this.geoCache.set(e,b)}let P=b.len,k=n.arrowPointsAlongPath(a.dir,u,g)?0:Math.PI,S=Math.max(Mbe,Math.min(Sbe,Math.round(P/wbe))),O=t.select("g.link_body"),A=(O.empty()?t:O).append("g").attr("class",C),D=P/(S+1);for(let F=0;F<S;F++){let I=D*(F+1);s==="rx"&&(I+=D*.5);let B=this.getCachedPt(b,M,Math.max(0,I-h9)),le=this.getCachedPt(b,M,Math.min(P,I+h9)),ae=this.getCachedPt(b,M,I);if(!B||!le||!ae)continue;let W=Math.atan2(le.y-B.y,le.x-B.x)+k;A.append("path").attr("d",ybe).attr("transform",`translate(${ae.x},${ae.y}) rotate(${W*180/Math.PI})`).style("fill",a.color??null)}}getCachedPt(e,t,i){let a=Math.round(i*100),s=e.pts.get(a);if(s!==void 0)return s;let d=this.pointAt(t,i);return e.pts.set(a,d),d}pointAt(e,t){try{let i=e.getPointAtLength(t);return i&&Number.isFinite(i.x)&&Number.isFinite(i.y)?{x:i.x,y:i.y}:null}catch{return null}}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var pp=(()=>{class n{mapNodesDataSource;mapLinksDataSource;mapDrawingsDataSource;mapSymbolsDataSource;nodeToMapNode;linkToMapLink;drawingToMapDrawing;symbolToMapSymbol;layersManager;multiLinkCalculator;markerFlashService;nodeSig=new Map;linkSig=new Map;drawingSig=new Map;nodeToLinks=new Map;draggingIds=new Set;constructor(e,t,i,a,s,d,p,u,g,C,M){this.mapNodesDataSource=e,this.mapLinksDataSource=t,this.mapDrawingsDataSource=i,this.mapSymbolsDataSource=a,this.nodeToMapNode=s,this.linkToMapLink=d,this.drawingToMapDrawing=p,this.symbolToMapSymbol=u,this.layersManager=g,this.multiLinkCalculator=C,this.markerFlashService=M}markDragging(e){this.draggingIds.add(e)}unmarkDragging(e){this.draggingIds.delete(e)}isDragging(e){return this.draggingIds.has(e)}getNodes(){return this.mapNodesDataSource.getItems()}getLinks(){return this.mapLinksDataSource.getItems()}getDrawings(){return this.mapDrawingsDataSource.getItems()}getSymbols(){return this.mapSymbolsDataSource.getItems()}reset(){this.mapNodesDataSource.set([]),this.mapLinksDataSource.set([]),this.mapDrawingsDataSource.set([]),this.nodeSig.clear(),this.linkSig.clear(),this.drawingSig.clear(),this.nodeToLinks.clear(),this.draggingIds.clear()}setNodes(e){if(!e)return qd();let t=qd(),i=[];for(let u of this.getNodes())u.id!=null&&i.push([u.id,u]);let a=new Map(i),s=new Set(e.map(u=>u.node_id)),d=[],p=[];for(let u of e){let g=HL(u),C=a.get(u.node_id);if(C){let M=this.nodeSig.get(u.node_id),x=Py(M?.groups,g.groups);if(x.length>0){let b=this.nodeToMapNode.convert(u);if(this.isDragging(u.node_id)&&!x.includes("xY")){let P={x:C.x,y:C.y};Object.assign(C,b),Object.assign(C,P)}else Object.assign(C,b);this.nodeSig.set(u.node_id,g)}else if(!this.isDragging(u.node_id)&&(C.x!==u.x||C.y!==u.y)){let b=this.nodeToMapNode.convert(u);Object.assign(C,b),this.nodeSig.set(u.node_id,g)}if(x.length>0){t.updates.set(u.node_id,x);let b=M?.groups.z,P=g.groups.z;if(b!==void 0&&b!==P){this.layersManager.moveNode(C,Number(b));let k=this.nodeToLinks.get(u.node_id);if(k)for(let S of k){let O=this.mapLinksDataSource.get(S);O&&this.layersManager.moveLink(O)}}if(x.includes("xY")||x.includes("visual")){let k=this.nodeToLinks.get(u.node_id);if(k)for(let S of k)t.updates.set(S,["linkPath"])}}}else{let M=this.nodeToMapNode.convert(u);d.push(M),this.nodeSig.set(u.node_id,g),t.additions.nodes.push(u.node_id),this.layersManager.addNode(M)}}for(let[u]of this.nodeSig)if(!s.has(u)){let g=a.get(u);g&&(p.push(g),this.layersManager.removeNode(g)),this.nodeSig.delete(u),this.nodeToLinks.delete(u),t.removals.nodes.push(u)}return this.mapNodesDataSource.applyBatch(d,p),this.assignDataToLinksIncremental(t,a),t}setLinks(e){if(!e)return qd();let t=qd(),i=[];for(let g of this.getLinks())g.id!=null&&i.push([g.id,g]);let a=new Map(i),s=new Set(e.map(g=>g.link_id)),d=[],p=[],u=new Map;for(let[g,C]of a){let M=C.nodes[0]?.nodeId,x=C.nodes[1]?.nodeId;M&&x&&u.set(g,[M,x])}for(let g of e){let C=UL(g),M=a.get(g.link_id);if(M){let x=this.linkSig.get(g.link_id),b=Py(x?.groups,C.groups);if(b.length>0){let P=this.linkToMapLink.convert(g);if(Object.assign(M,P),this.linkSig.set(g.link_id,C),t.updates.set(g.link_id,b),b.includes("nodes")){let k=u.get(g.link_id);k&&this.unregisterLinkNodes(g.link_id,k[0],k[1]);let S=M.nodes[0]?.nodeId,O=M.nodes[1]?.nodeId;S&&O&&this.registerLinkNodes(g.link_id,S,O)}}}else{let x=this.linkToMapLink.convert(g);d.push(x),this.linkSig.set(g.link_id,C),t.additions.links.push(g.link_id);let b=x.nodes[0]?.nodeId,P=x.nodes[1]?.nodeId;b&&P&&this.registerLinkNodes(g.link_id,b,P)}}for(let[g]of this.linkSig)if(!s.has(g)){let C=a.get(g);C&&(p.push(C),this.layersManager.removeLink(C)),this.linkSig.delete(g),this.markerFlashService.evictLink(g);let M=u.get(g);M&&this.unregisterLinkNodes(g,M[0],M[1]),t.removals.links.push(g)}this.mapLinksDataSource.applyBatch(d,p);for(let g of d)this.layersManager.addLink(g);return this.assignDataToLinksIncremental(t,new Map),t}setDrawings(e){if(!e)return qd();let t=qd(),i=[];for(let u of this.getDrawings())u.id!=null&&i.push([u.id,u]);let a=new Map(i),s=new Set(e.map(u=>u.drawing_id)),d=[],p=[];for(let u of e){let g=WL(u),C=a.get(u.drawing_id);if(C){let M=this.drawingSig.get(u.drawing_id),x=Py(M?.groups,g.groups);if(x.length>0){let b=this.drawingToMapDrawing.convert(u);if(this.isDragging(u.drawing_id)&&!x.includes("xY")){let P={x:C.x,y:C.y};Object.assign(C,b),Object.assign(C,P)}else Object.assign(C,b);this.drawingSig.set(u.drawing_id,g)}else if(!this.isDragging(u.drawing_id)&&(C.x!==u.x||C.y!==u.y)){let b=this.drawingToMapDrawing.convert(u);Object.assign(C,b),this.drawingSig.set(u.drawing_id,g)}if(x.length>0&&(t.updates.set(u.drawing_id,x),x.includes("z"))){let b=M?.groups.z;b!==void 0&&this.layersManager.moveDrawing(C,Number(b))}}else{let M=this.drawingToMapDrawing.convert(u);d.push(M),this.drawingSig.set(u.drawing_id,g),t.additions.drawings.push(u.drawing_id),this.layersManager.addDrawing(M)}}for(let[u]of this.drawingSig)if(!s.has(u)){let g=a.get(u);g&&(p.push(g),this.layersManager.removeDrawing(g)),this.drawingSig.delete(u),t.removals.drawings.push(u)}return this.mapDrawingsDataSource.applyBatch(d,p),t}setSymbols(e){if(e){let t=e.map(i=>this.symbolToMapSymbol.convert(i));this.mapSymbolsDataSource.set(t)}}registerLinkNodes(e,t,i){for(let a of[t,i]){let s=this.nodeToLinks.get(a);s||(s=new Set,this.nodeToLinks.set(a,s)),s.add(e)}}unregisterLinkNodes(e,t,i){for(let a of[t,i]){let s=this.nodeToLinks.get(a);s&&(s.delete(e),s.size===0&&this.nodeToLinks.delete(a))}}assignDataToLinksIncremental(e,t){if(e.additions.nodes.length>0||e.removals.nodes.length>0||e.additions.links.length>0||e.removals.links.length>0){this.assignDataToLinksFull(),this.onDataUpdateFull();return}let a=new Map(this.getNodes().map(d=>[d.id,d])),s=this.collectAffectedLinks(e);for(let d of s){let p=this.mapLinksDataSource.get(d);if(!p)continue;let u=p.nodes;if(!u||u.length<2)continue;let g=u[0]?.nodeId,C=u[1]?.nodeId,M=g?a.get(g):void 0,x=C?a.get(C):void 0;M&&Object.assign(p,{source:M}),x&&Object.assign(p,{target:x}),M&&x&&Object.assign(p,{x:M.x+(x.x-M.x)*.5,y:M.y+(x.y-M.y)*.5})}this.multiLinkCalculator.assignDataToLinks(this.getLinks())}collectAffectedLinks(e){let t=new Set;for(let[i]of e.updates){let a=this.nodeToLinks.get(i);if(a)for(let s of a)t.add(s)}for(let[i]of e.updates)t.add(i);return t}assignDataToLinksFull(){let e={};this.getNodes().forEach(t=>{e[t.id]=t}),this.getLinks().forEach(t=>{if(!t.nodes||t.nodes.length<2)return;let i=t.nodes[0]?.nodeId,a=t.nodes[1]?.nodeId;i&&i in e&&(t.source=e[i]),a&&a in e&&(t.target=e[a]),t.source&&t.target&&(t.x=t.source.x+(t.target.x-t.source.x)*.5,t.y=t.source.y+(t.target.y-t.source.y)*.5)}),this.multiLinkCalculator.assignDataToLinks(this.getLinks())}onDataUpdateFull(){this.layersManager.clear(),this.layersManager.setNodes(this.getNodes()),this.layersManager.setLinks(this.getLinks()),this.layersManager.setDrawings(this.getDrawings())}static \u0275fac=function(t){return new(t||n)(_e(ip),_e(Fs),_e(Eh),_e(Oh),_e(Xh),_e(Yh),_e(cp),_e(ww),_e(dp),_e(mp),_e(hd))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Ul=(()=>{class n{isReadOnly=!1;static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Wl=(()=>{class n{changesDetected=new be;selectionChangesDetected=new be;hasBeenDrawn=!1;detectChanges(){this.changesDetected.emit(!0)}detectSelectionChanges(){this.selectionChangesDetected.emit()}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var up=(()=>{class n{apply(e,t,i){this.anchor(e,t,i?.grid_size,"#gridNode"),this.anchor(e,t,i?.drawing_grid_size,"#gridDrawing")}anchor(e,t,i,a){let s=Lt(e).select(a);if(s.empty()||!i||i<=0)return;let d=t.transformation?.k||1,p=i*d,u=t.getZeroZeroTransformationPoint().x+(t.transformation?.x||0),g=t.getZeroZeroTransformationPoint().y+(t.transformation?.y||0);s.attr("x",f9(u,p)).attr("y",f9(g,p)).attr("width",p).attr("height",p),s.select("path").attr("d",`M ${p} 0 L 0 0 0 ${p}`)}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();function f9(n,o){return(n%o+o)%o}var Tbe={value:()=>{}};function b9(){for(var n=0,o=arguments.length,e={},t;n<o;++n){if(!(t=arguments[n]+"")||t in e||/[\s.]/.test(t))throw new Error("illegal type: "+t);e[t]=[]}return new Pw(e)}function Pw(n){this._=n}function Ebe(n,o){return n.trim().split(/^|\s+/).map(function(e){var t="",i=e.indexOf(".");if(i>=0&&(t=e.slice(i+1),e=e.slice(0,i)),e&&!o.hasOwnProperty(e))throw new Error("unknown type: "+e);return{type:e,name:t}})}Pw.prototype=b9.prototype={constructor:Pw,on:function(n,o){var e=this._,t=Ebe(n+"",e),i,a=-1,s=t.length;if(arguments.length<2){for(;++a<s;)if((i=(n=t[a]).type)&&(i=Obe(e[i],n.name)))return i;return}if(o!=null&&typeof o!="function")throw new Error("invalid callback: "+o);for(;++a<s;)if(i=(n=t[a]).type)e[i]=C9(e[i],n.name,o);else if(o==null)for(i in e)e[i]=C9(e[i],n.name,null);return this},copy:function(){var n={},o=this._;for(var e in o)n[e]=o[e].slice();return new Pw(n)},call:function(n,o){if((i=arguments.length-2)>0)for(var e=new Array(i),t=0,i,a;t<i;++t)e[t]=arguments[t+2];if(!this._.hasOwnProperty(n))throw new Error("unknown type: "+n);for(a=this._[n],t=0,i=a.length;t<i;++t)a[t].value.apply(o,e)},apply:function(n,o,e){if(!this._.hasOwnProperty(n))throw new Error("unknown type: "+n);for(var t=this._[n],i=0,a=t.length;i<a;++i)t[i].value.apply(o,e)}};function Obe(n,o){for(var e=0,t=n.length,i;e<t;++e)if((i=n[e]).name===o)return i.value}function C9(n,o,e){for(var t=0,i=n.length;t<i;++t)if(n[t].name===o){n[t]=Tbe,n=n.slice(0,t).concat(n.slice(t+1));break}return e!=null&&n.push({name:o,value:e}),n}var Lu=b9;var x9={passive:!1},Vu={capture:!0,passive:!1};function Tw(n){n.stopImmediatePropagation()}function gp(n){n.preventDefault(),n.stopImmediatePropagation()}function Wv(n){var o=n.document.documentElement,e=Lt(n).on("dragstart.drag",gp,Vu);"onselectstart"in o?e.on("selectstart.drag",gp,Vu):(o.__noselect=o.style.MozUserSelect,o.style.MozUserSelect="none")}function Gv(n,o){var e=n.document.documentElement,t=Lt(n).on("dragstart.drag",null);o&&(t.on("click.drag",gp,Vu),setTimeout(function(){t.on("click.drag",null)},0)),"onselectstart"in e?t.on("selectstart.drag",null):(e.style.MozUserSelect=e.__noselect,delete e.__noselect)}var qv=n=>()=>n;function Qv(n,{sourceEvent:o,subject:e,target:t,identifier:i,active:a,x:s,y:d,dx:p,dy:u,dispatch:g}){Object.defineProperties(this,{type:{value:n,enumerable:!0,configurable:!0},sourceEvent:{value:o,enumerable:!0,configurable:!0},subject:{value:e,enumerable:!0,configurable:!0},target:{value:t,enumerable:!0,configurable:!0},identifier:{value:i,enumerable:!0,configurable:!0},active:{value:a,enumerable:!0,configurable:!0},x:{value:s,enumerable:!0,configurable:!0},y:{value:d,enumerable:!0,configurable:!0},dx:{value:p,enumerable:!0,configurable:!0},dy:{value:u,enumerable:!0,configurable:!0},_:{value:g}})}Qv.prototype.on=function(){var n=this._.on.apply(this._,arguments);return n===this._?this:n};function Dbe(n){return!n.ctrlKey&&!n.button}function Ibe(){return this.parentNode}function Abe(n,o){return o??{x:n.x,y:n.y}}function Nbe(){return navigator.maxTouchPoints||"ontouchstart"in this}function Ls(){var n=Dbe,o=Ibe,e=Abe,t=Nbe,i={},a=Lu("start","drag","end"),s=0,d,p,u,g,C=0;function M(D){D.on("mousedown.drag",x).filter(t).on("touchstart.drag",k).on("touchmove.drag",S,x9).on("touchend.drag touchcancel.drag",O).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function x(D,F){if(!(g||!n.call(this,D,F))){var I=A(this,o.call(this,D,F),D,F,"mouse");I&&(Lt(D.view).on("mousemove.drag",b,Vu).on("mouseup.drag",P,Vu),Wv(D.view),Tw(D),u=!1,d=D.clientX,p=D.clientY,I("start",D))}}function b(D){if(gp(D),!u){var F=D.clientX-d,I=D.clientY-p;u=F*F+I*I>C}i.mouse("drag",D)}function P(D){Lt(D.view).on("mousemove.drag mouseup.drag",null),Gv(D.view,u),gp(D),i.mouse("end",D)}function k(D,F){if(n.call(this,D,F)){var I=D.changedTouches,B=o.call(this,D,F),le=I.length,ae,W;for(ae=0;ae<le;++ae)(W=A(this,B,D,F,I[ae].identifier,I[ae]))&&(Tw(D),W("start",D,I[ae]))}}function S(D){var F=D.changedTouches,I=F.length,B,le;for(B=0;B<I;++B)(le=i[F[B].identifier])&&(gp(D),le("drag",D,F[B]))}function O(D){var F=D.changedTouches,I=F.length,B,le;for(g&&clearTimeout(g),g=setTimeout(function(){g=null},500),B=0;B<I;++B)(le=i[F[B].identifier])&&(Tw(D),le("end",D,F[B]))}function A(D,F,I,B,le,ae){var W=a.copy(),G=Na(ae||I,F),ve,Se,pe;if((pe=e.call(D,new Qv("beforestart",{sourceEvent:I,target:M,identifier:le,active:s,x:G[0],y:G[1],dx:0,dy:0,dispatch:W}),B))!=null)return ve=pe.x-G[0]||0,Se=pe.y-G[1]||0,function Ae(ue,H,te){var de=G,me;switch(ue){case"start":i[le]=Ae,me=s++;break;case"end":delete i[le],--s;case"drag":G=Na(te||H,F),me=s;break}W.call(ue,D,new Qv(ue,{sourceEvent:H,subject:pe,target:M,identifier:le,active:me,x:G[0]+ve,y:G[1]+Se,dx:G[0]-de[0],dy:G[1]-de[1],dispatch:W}),B)}}return M.filter=function(D){return arguments.length?(n=typeof D=="function"?D:qv(!!D),M):n},M.container=function(D){return arguments.length?(o=typeof D=="function"?D:qv(D),M):o},M.subject=function(D){return arguments.length?(e=typeof D=="function"?D:qv(D),M):e},M.touchable=function(D){return arguments.length?(t=typeof D=="function"?D:qv(!!D),M):t},M.on=function(){var D=a.on.apply(a,arguments);return D===a?M:D},M.clickDistance=function(D){return arguments.length?(C=(D=+D)*D,M):Math.sqrt(C)},M}function Ew(n,o,e){n.prototype=o.prototype=e,e.constructor=n}function RI(n,o){var e=Object.create(n.prototype);for(var t in o)e[t]=o[t];return e}function Yv(){}var Kv=.7,Iw=1/Kv,Zh="\\s*([+-]?\\d+)\\s*",Xv="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",_d="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Fbe=/^#([0-9a-f]{3,8})$/,Rbe=new RegExp(`^rgb\\(${Zh},${Zh},${Zh}\\)$`),zbe=new RegExp(`^rgb\\(${_d},${_d},${_d}\\)$`),Lbe=new RegExp(`^rgba\\(${Zh},${Zh},${Zh},${Xv}\\)$`),Vbe=new RegExp(`^rgba\\(${_d},${_d},${_d},${Xv}\\)$`),Bbe=new RegExp(`^hsl\\(${Xv},${_d},${_d}\\)$`),jbe=new RegExp(`^hsla\\(${Xv},${_d},${_d},${Xv}\\)$`),y9={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};Ew(Yv,hp,{copy(n){return Object.assign(new this.constructor,this,n)},displayable(){return this.rgb().displayable()},hex:w9,formatHex:w9,formatHex8:$be,formatHsl:Hbe,formatRgb:M9,toString:M9});function w9(){return this.rgb().formatHex()}function $be(){return this.rgb().formatHex8()}function Hbe(){return O9(this).formatHsl()}function M9(){return this.rgb().formatRgb()}function hp(n){var o,e;return n=(n+"").trim().toLowerCase(),(o=Fbe.exec(n))?(e=o[1].length,o=parseInt(o[1],16),e===6?S9(o):e===3?new Vs(o>>8&15|o>>4&240,o>>4&15|o&240,(o&15)<<4|o&15,1):e===8?Ow(o>>24&255,o>>16&255,o>>8&255,(o&255)/255):e===4?Ow(o>>12&15|o>>8&240,o>>8&15|o>>4&240,o>>4&15|o&240,((o&15)<<4|o&15)/255):null):(o=Rbe.exec(n))?new Vs(o[1],o[2],o[3],1):(o=zbe.exec(n))?new Vs(o[1]*255/100,o[2]*255/100,o[3]*255/100,1):(o=Lbe.exec(n))?Ow(o[1],o[2],o[3],o[4]):(o=Vbe.exec(n))?Ow(o[1]*255/100,o[2]*255/100,o[3]*255/100,o[4]):(o=Bbe.exec(n))?T9(o[1],o[2]/100,o[3]/100,1):(o=jbe.exec(n))?T9(o[1],o[2]/100,o[3]/100,o[4]):y9.hasOwnProperty(n)?S9(y9[n]):n==="transparent"?new Vs(NaN,NaN,NaN,0):null}function S9(n){return new Vs(n>>16&255,n>>8&255,n&255,1)}function Ow(n,o,e,t){return t<=0&&(n=o=e=NaN),new Vs(n,o,e,t)}function Ube(n){return n instanceof Yv||(n=hp(n)),n?(n=n.rgb(),new Vs(n.r,n.g,n.b,n.opacity)):new Vs}function Jh(n,o,e,t){return arguments.length===1?Ube(n):new Vs(n,o,e,t??1)}function Vs(n,o,e,t){this.r=+n,this.g=+o,this.b=+e,this.opacity=+t}Ew(Vs,Jh,RI(Yv,{brighter(n){return n=n==null?Iw:Math.pow(Iw,n),new Vs(this.r*n,this.g*n,this.b*n,this.opacity)},darker(n){return n=n==null?Kv:Math.pow(Kv,n),new Vs(this.r*n,this.g*n,this.b*n,this.opacity)},rgb(){return this},clamp(){return new Vs(ju(this.r),ju(this.g),ju(this.b),Aw(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:k9,formatHex:k9,formatHex8:Wbe,formatRgb:P9,toString:P9}));function k9(){return`#${Bu(this.r)}${Bu(this.g)}${Bu(this.b)}`}function Wbe(){return`#${Bu(this.r)}${Bu(this.g)}${Bu(this.b)}${Bu((isNaN(this.opacity)?1:this.opacity)*255)}`}function P9(){let n=Aw(this.opacity);return`${n===1?"rgb(":"rgba("}${ju(this.r)}, ${ju(this.g)}, ${ju(this.b)}${n===1?")":`, ${n})`}`}function Aw(n){return isNaN(n)?1:Math.max(0,Math.min(1,n))}function ju(n){return Math.max(0,Math.min(255,Math.round(n)||0))}function Bu(n){return n=ju(n),(n<16?"0":"")+n.toString(16)}function T9(n,o,e,t){return t<=0?n=o=e=NaN:e<=0||e>=1?n=o=NaN:o<=0&&(n=NaN),new yc(n,o,e,t)}function O9(n){if(n instanceof yc)return new yc(n.h,n.s,n.l,n.opacity);if(n instanceof Yv||(n=hp(n)),!n)return new yc;if(n instanceof yc)return n;n=n.rgb();var o=n.r/255,e=n.g/255,t=n.b/255,i=Math.min(o,e,t),a=Math.max(o,e,t),s=NaN,d=a-i,p=(a+i)/2;return d?(o===a?s=(e-t)/d+(e<t)*6:e===a?s=(t-o)/d+2:s=(o-e)/d+4,d/=p<.5?a+i:2-a-i,s*=60):d=p>0&&p<1?0:s,new yc(s,d,p,n.opacity)}function D9(n,o,e,t){return arguments.length===1?O9(n):new yc(n,o,e,t??1)}function yc(n,o,e,t){this.h=+n,this.s=+o,this.l=+e,this.opacity=+t}Ew(yc,D9,RI(Yv,{brighter(n){return n=n==null?Iw:Math.pow(Iw,n),new yc(this.h,this.s,this.l*n,this.opacity)},darker(n){return n=n==null?Kv:Math.pow(Kv,n),new yc(this.h,this.s,this.l*n,this.opacity)},rgb(){var n=this.h%360+(this.h<0)*360,o=isNaN(n)||isNaN(this.s)?0:this.s,e=this.l,t=e+(e<.5?e:1-e)*o,i=2*e-t;return new Vs(zI(n>=240?n-240:n+120,i,t),zI(n,i,t),zI(n<120?n+240:n-120,i,t),this.opacity)},clamp(){return new yc(E9(this.h),Dw(this.s),Dw(this.l),Aw(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let n=Aw(this.opacity);return`${n===1?"hsl(":"hsla("}${E9(this.h)}, ${Dw(this.s)*100}%, ${Dw(this.l)*100}%${n===1?")":`, ${n})`}`}}));function E9(n){return n=(n||0)%360,n<0?n+360:n}function Dw(n){return Math.max(0,Math.min(1,n||0))}function zI(n,o,e){return(n<60?o+(e-o)*n/60:n<180?e:n<240?o+(e-o)*(240-n)/60:o)*255}function LI(n,o,e,t,i){var a=n*n,s=a*n;return((1-3*n+3*a-s)*o+(4-6*a+3*s)*e+(1+3*n+3*a-3*s)*t+s*i)/6}function I9(n){var o=n.length-1;return function(e){var t=e<=0?e=0:e>=1?(e=1,o-1):Math.floor(e*o),i=n[t],a=n[t+1],s=t>0?n[t-1]:2*i-a,d=t<o-1?n[t+2]:2*a-i;return LI((e-t/o)*o,s,i,a,d)}}function A9(n){var o=n.length;return function(e){var t=Math.floor(((e%=1)<0?++e:e)*o),i=n[(t+o-1)%o],a=n[t%o],s=n[(t+1)%o],d=n[(t+2)%o];return LI((e-t/o)*o,i,a,s,d)}}var VI=n=>()=>n;function Gbe(n,o){return function(e){return n+e*o}}function qbe(n,o,e){return n=Math.pow(n,e),o=Math.pow(o,e)-n,e=1/e,function(t){return Math.pow(n+t*o,e)}}function N9(n){return(n=+n)==1?Nw:function(o,e){return e-o?qbe(o,e,n):VI(isNaN(o)?e:o)}}function Nw(n,o){var e=o-n;return e?Gbe(n,e):VI(isNaN(n)?o:n)}var Fw=(function n(o){var e=N9(o);function t(i,a){var s=e((i=Jh(i)).r,(a=Jh(a)).r),d=e(i.g,a.g),p=e(i.b,a.b),u=Nw(i.opacity,a.opacity);return function(g){return i.r=s(g),i.g=d(g),i.b=p(g),i.opacity=u(g),i+""}}return t.gamma=n,t})(1);function F9(n){return function(o){var e=o.length,t=new Array(e),i=new Array(e),a=new Array(e),s,d;for(s=0;s<e;++s)d=Jh(o[s]),t[s]=d.r||0,i[s]=d.g||0,a[s]=d.b||0;return t=n(t),i=n(i),a=n(a),d.opacity=1,function(p){return d.r=t(p),d.g=i(p),d.b=a(p),d+""}}}var Qbe=F9(I9),Kbe=F9(A9);function Gl(n,o){return n=+n,o=+o,function(e){return n*(1-e)+o*e}}var jI=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,BI=new RegExp(jI.source,"g");function Xbe(n){return function(){return n}}function Ybe(n){return function(o){return n(o)+""}}function $I(n,o){var e=jI.lastIndex=BI.lastIndex=0,t,i,a,s=-1,d=[],p=[];for(n=n+"",o=o+"";(t=jI.exec(n))&&(i=BI.exec(o));)(a=i.index)>e&&(a=o.slice(e,a),d[s]?d[s]+=a:d[++s]=a),(t=t[0])===(i=i[0])?d[s]?d[s]+=i:d[++s]=i:(d[++s]=null,p.push({i:s,x:Gl(t,i)})),e=BI.lastIndex;return e<o.length&&(a=o.slice(e),d[s]?d[s]+=a:d[++s]=a),d.length<2?p[0]?Ybe(p[0].x):Xbe(o):(o=p.length,function(u){for(var g=0,C;g<o;++g)d[(C=p[g]).i]=C.x(u);return d.join("")})}var R9=180/Math.PI,Rw={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function HI(n,o,e,t,i,a){var s,d,p;return(s=Math.sqrt(n*n+o*o))&&(n/=s,o/=s),(p=n*e+o*t)&&(e-=n*p,t-=o*p),(d=Math.sqrt(e*e+t*t))&&(e/=d,t/=d,p/=d),n*t<o*e&&(n=-n,o=-o,p=-p,s=-s),{translateX:i,translateY:a,rotate:Math.atan2(o,n)*R9,skewX:Math.atan(p)*R9,scaleX:s,scaleY:d}}var zw;function z9(n){let o=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(n+"");return o.isIdentity?Rw:HI(o.a,o.b,o.c,o.d,o.e,o.f)}function L9(n){return n==null?Rw:(zw||(zw=document.createElementNS("http://www.w3.org/2000/svg","g")),zw.setAttribute("transform",n),(n=zw.transform.baseVal.consolidate())?(n=n.matrix,HI(n.a,n.b,n.c,n.d,n.e,n.f)):Rw)}function V9(n,o,e,t){function i(u){return u.length?u.pop()+" ":""}function a(u,g,C,M,x,b){if(u!==C||g!==M){var P=x.push("translate(",null,o,null,e);b.push({i:P-4,x:Gl(u,C)},{i:P-2,x:Gl(g,M)})}else(C||M)&&x.push("translate("+C+o+M+e)}function s(u,g,C,M){u!==g?(u-g>180?g+=360:g-u>180&&(u+=360),M.push({i:C.push(i(C)+"rotate(",null,t)-2,x:Gl(u,g)})):g&&C.push(i(C)+"rotate("+g+t)}function d(u,g,C,M){u!==g?M.push({i:C.push(i(C)+"skewX(",null,t)-2,x:Gl(u,g)}):g&&C.push(i(C)+"skewX("+g+t)}function p(u,g,C,M,x,b){if(u!==C||g!==M){var P=x.push(i(x)+"scale(",null,",",null,")");b.push({i:P-4,x:Gl(u,C)},{i:P-2,x:Gl(g,M)})}else(C!==1||M!==1)&&x.push(i(x)+"scale("+C+","+M+")")}return function(u,g){var C=[],M=[];return u=n(u),g=n(g),a(u.translateX,u.translateY,g.translateX,g.translateY,C,M),s(u.rotate,g.rotate,C,M),d(u.skewX,g.skewX,C,M),p(u.scaleX,u.scaleY,g.scaleX,g.scaleY,C,M),u=g=null,function(x){for(var b=-1,P=M.length,k;++b<P;)C[(k=M[b]).i]=k.x(x);return C.join("")}}}var UI=V9(z9,"px, ","px)","deg)"),WI=V9(L9,", ",")",")");var Zbe=1e-12;function B9(n){return((n=Math.exp(n))+1/n)/2}function Jbe(n){return((n=Math.exp(n))-1/n)/2}function exe(n){return((n=Math.exp(2*n))-1)/(n+1)}var GI=(function n(o,e,t){function i(a,s){var d=a[0],p=a[1],u=a[2],g=s[0],C=s[1],M=s[2],x=g-d,b=C-p,P=x*x+b*b,k,S;if(P<Zbe)S=Math.log(M/u)/o,k=function(B){return[d+B*x,p+B*b,u*Math.exp(o*B*S)]};else{var O=Math.sqrt(P),A=(M*M-u*u+t*P)/(2*u*e*O),D=(M*M-u*u-t*P)/(2*M*e*O),F=Math.log(Math.sqrt(A*A+1)-A),I=Math.log(Math.sqrt(D*D+1)-D);S=(I-F)/o,k=function(B){var le=B*S,ae=B9(F),W=u/(e*O)*(ae*exe(o*le+F)-Jbe(F));return[d+W*x,p+W*b,u*ae/B9(o*le+F)]}}return k.duration=S*1e3*o/Math.SQRT2,k}return i.rho=function(a){var s=Math.max(.001,+a),d=s*s,p=d*d;return n(s,d,p)},i})(Math.SQRT2,2,4);var e_=0,Jv=0,Zv=0,$9=1e3,Lw,eC,Vw=0,$u=0,Bw=0,tC=typeof performance=="object"&&performance.now?performance:Date,H9=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(n){setTimeout(n,17)};function iC(){return $u||(H9(txe),$u=tC.now()+Bw)}function txe(){$u=0}function nC(){this._call=this._time=this._next=null}nC.prototype=jw.prototype={constructor:nC,restart:function(n,o,e){if(typeof n!="function")throw new TypeError("callback is not a function");e=(e==null?iC():+e)+(o==null?0:+o),!this._next&&eC!==this&&(eC?eC._next=this:Lw=this,eC=this),this._call=n,this._time=e,qI()},stop:function(){this._call&&(this._call=null,this._time=1/0,qI())}};function jw(n,o,e){var t=new nC;return t.restart(n,o,e),t}function U9(){iC(),++e_;for(var n=Lw,o;n;)(o=$u-n._time)>=0&&n._call.call(void 0,o),n=n._next;--e_}function j9(){$u=(Vw=tC.now())+Bw,e_=Jv=0;try{U9()}finally{e_=0,ixe(),$u=0}}function nxe(){var n=tC.now(),o=n-Vw;o>$9&&(Bw-=o,Vw=n)}function ixe(){for(var n,o=Lw,e,t=1/0;o;)o._call?(t>o._time&&(t=o._time),n=o,o=o._next):(e=o._next,o._next=null,o=n?n._next=e:Lw=e);eC=n,qI(t)}function qI(n){if(!e_){Jv&&(Jv=clearTimeout(Jv));var o=n-$u;o>24?(n<1/0&&(Jv=setTimeout(j9,n-tC.now()-Bw)),Zv&&(Zv=clearInterval(Zv))):(Zv||(Vw=tC.now(),Zv=setInterval(nxe,$9)),e_=1,H9(j9))}}function $w(n,o,e){var t=new nC;return o=o==null?0:+o,t.restart(i=>{t.stop(),n(i+o)},o,e),t}var oxe=Lu("start","end","cancel","interrupt"),axe=[],q9=0,W9=1,Uw=2,Hw=3,G9=4,Ww=5,oC=6;function _p(n,o,e,t,i,a){var s=n.__transition;if(!s)n.__transition={};else if(e in s)return;rxe(n,e,{name:o,index:t,group:i,on:oxe,tween:axe,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:q9})}function aC(n,o){var e=Qa(n,o);if(e.state>q9)throw new Error("too late; already scheduled");return e}function Mr(n,o){var e=Qa(n,o);if(e.state>Hw)throw new Error("too late; already running");return e}function Qa(n,o){var e=n.__transition;if(!e||!(e=e[o]))throw new Error("transition not found");return e}function rxe(n,o,e){var t=n.__transition,i;t[o]=e,e.timer=jw(a,0,e.time);function a(u){e.state=W9,e.timer.restart(s,e.delay,e.time),e.delay<=u&&s(u-e.delay)}function s(u){var g,C,M,x;if(e.state!==W9)return p();for(g in t)if(x=t[g],x.name===e.name){if(x.state===Hw)return $w(s);x.state===G9?(x.state=oC,x.timer.stop(),x.on.call("interrupt",n,n.__data__,x.index,x.group),delete t[g]):+g<o&&(x.state=oC,x.timer.stop(),x.on.call("cancel",n,n.__data__,x.index,x.group),delete t[g])}if($w(function(){e.state===Hw&&(e.state=G9,e.timer.restart(d,e.delay,e.time),d(u))}),e.state=Uw,e.on.call("start",n,n.__data__,e.index,e.group),e.state===Uw){for(e.state=Hw,i=new Array(M=e.tween.length),g=0,C=-1;g<M;++g)(x=e.tween[g].value.call(n,n.__data__,e.index,e.group))&&(i[++C]=x);i.length=C+1}}function d(u){for(var g=u<e.duration?e.ease.call(null,u/e.duration):(e.timer.restart(p),e.state=Ww,1),C=-1,M=i.length;++C<M;)i[C].call(n,g);e.state===Ww&&(e.on.call("end",n,n.__data__,e.index,e.group),p())}function p(){e.state=oC,e.timer.stop(),delete t[o];for(var u in t)return;delete n.__transition}}function fp(n,o){var e=n.__transition,t,i,a=!0,s;if(e){o=o==null?null:o+"";for(s in e){if((t=e[s]).name!==o){a=!1;continue}i=t.state>Uw&&t.state<Ww,t.state=oC,t.timer.stop(),t.on.call(i?"interrupt":"cancel",n,n.__data__,t.index,t.group),delete e[s]}a&&delete n.__transition}}function Q9(n){return this.each(function(){fp(this,n)})}function sxe(n,o){var e,t;return function(){var i=Mr(this,n),a=i.tween;if(a!==e){t=e=a;for(var s=0,d=t.length;s<d;++s)if(t[s].name===o){t=t.slice(),t.splice(s,1);break}}i.tween=t}}function lxe(n,o,e){var t,i;if(typeof e!="function")throw new Error;return function(){var a=Mr(this,n),s=a.tween;if(s!==t){i=(t=s).slice();for(var d={name:o,value:e},p=0,u=i.length;p<u;++p)if(i[p].name===o){i[p]=d;break}p===u&&i.push(d)}a.tween=i}}function K9(n,o){var e=this._id;if(n+="",arguments.length<2){for(var t=Qa(this.node(),e).tween,i=0,a=t.length,s;i<a;++i)if((s=t[i]).name===n)return s.value;return null}return this.each((o==null?sxe:lxe)(e,n,o))}function t_(n,o,e){var t=n._id;return n.each(function(){var i=Mr(this,t);(i.value||(i.value={}))[o]=e.apply(this,arguments)}),function(i){return Qa(i,t).value[o]}}function Gw(n,o){var e;return(typeof o=="number"?Gl:o instanceof hp?Fw:(e=hp(o))?(o=e,Fw):$I)(n,o)}function cxe(n){return function(){this.removeAttribute(n)}}function dxe(n){return function(){this.removeAttributeNS(n.space,n.local)}}function mxe(n,o,e){var t,i=e+"",a;return function(){var s=this.getAttribute(n);return s===i?null:s===t?a:a=o(t=s,e)}}function pxe(n,o,e){var t,i=e+"",a;return function(){var s=this.getAttributeNS(n.space,n.local);return s===i?null:s===t?a:a=o(t=s,e)}}function uxe(n,o,e){var t,i,a;return function(){var s,d=e(this),p;return d==null?void this.removeAttribute(n):(s=this.getAttribute(n),p=d+"",s===p?null:s===t&&p===i?a:(i=p,a=o(t=s,d)))}}function gxe(n,o,e){var t,i,a;return function(){var s,d=e(this),p;return d==null?void this.removeAttributeNS(n.space,n.local):(s=this.getAttributeNS(n.space,n.local),p=d+"",s===p?null:s===t&&p===i?a:(i=p,a=o(t=s,d)))}}function X9(n,o){var e=Ud(n),t=e==="transform"?WI:Gw;return this.attrTween(n,typeof o=="function"?(e.local?gxe:uxe)(e,t,t_(this,"attr."+n,o)):o==null?(e.local?dxe:cxe)(e):(e.local?pxe:mxe)(e,t,o))}function hxe(n,o){return function(e){this.setAttribute(n,o.call(this,e))}}function _xe(n,o){return function(e){this.setAttributeNS(n.space,n.local,o.call(this,e))}}function fxe(n,o){var e,t;function i(){var a=o.apply(this,arguments);return a!==t&&(e=(t=a)&&_xe(n,a)),e}return i._value=o,i}function vxe(n,o){var e,t;function i(){var a=o.apply(this,arguments);return a!==t&&(e=(t=a)&&hxe(n,a)),e}return i._value=o,i}function Y9(n,o){var e="attr."+n;if(arguments.length<2)return(e=this.tween(e))&&e._value;if(o==null)return this.tween(e,null);if(typeof o!="function")throw new Error;var t=Ud(n);return this.tween(e,(t.local?fxe:vxe)(t,o))}function Cxe(n,o){return function(){aC(this,n).delay=+o.apply(this,arguments)}}function bxe(n,o){return o=+o,function(){aC(this,n).delay=o}}function Z9(n){var o=this._id;return arguments.length?this.each((typeof n=="function"?Cxe:bxe)(o,n)):Qa(this.node(),o).delay}function xxe(n,o){return function(){Mr(this,n).duration=+o.apply(this,arguments)}}function yxe(n,o){return o=+o,function(){Mr(this,n).duration=o}}function J9(n){var o=this._id;return arguments.length?this.each((typeof n=="function"?xxe:yxe)(o,n)):Qa(this.node(),o).duration}function wxe(n,o){if(typeof o!="function")throw new Error;return function(){Mr(this,n).ease=o}}function eB(n){var o=this._id;return arguments.length?this.each(wxe(o,n)):Qa(this.node(),o).ease}function Mxe(n,o){return function(){var e=o.apply(this,arguments);if(typeof e!="function")throw new Error;Mr(this,n).ease=e}}function tB(n){if(typeof n!="function")throw new Error;return this.each(Mxe(this._id,n))}function nB(n){typeof n!="function"&&(n=Cv(n));for(var o=this._groups,e=o.length,t=new Array(e),i=0;i<e;++i)for(var a=o[i],s=a.length,d=t[i]=[],p,u=0;u<s;++u)(p=a[u])&&n.call(p,p.__data__,u,a)&&d.push(p);return new ps(t,this._parents,this._name,this._id)}function iB(n){if(n._id!==this._id)throw new Error;for(var o=this._groups,e=n._groups,t=o.length,i=e.length,a=Math.min(t,i),s=new Array(t),d=0;d<a;++d)for(var p=o[d],u=e[d],g=p.length,C=s[d]=new Array(g),M,x=0;x<g;++x)(M=p[x]||u[x])&&(C[x]=M);for(;d<t;++d)s[d]=o[d];return new ps(s,this._parents,this._name,this._id)}function Sxe(n){return(n+"").trim().split(/^|\s+/).every(function(o){var e=o.indexOf(".");return e>=0&&(o=o.slice(0,e)),!o||o==="start"})}function kxe(n,o,e){var t,i,a=Sxe(o)?aC:Mr;return function(){var s=a(this,n),d=s.on;d!==t&&(i=(t=d).copy()).on(o,e),s.on=i}}function oB(n,o){var e=this._id;return arguments.length<2?Qa(this.node(),e).on.on(n):this.each(kxe(e,n,o))}function Pxe(n){return function(){var o=this.parentNode;for(var e in this.__transition)if(+e!==n)return;o&&o.removeChild(this)}}function aB(){return this.on("end.remove",Pxe(this._id))}function rB(n){var o=this._name,e=this._id;typeof n!="function"&&(n=Du(n));for(var t=this._groups,i=t.length,a=new Array(i),s=0;s<i;++s)for(var d=t[s],p=d.length,u=a[s]=new Array(p),g,C,M=0;M<p;++M)(g=d[M])&&(C=n.call(g,g.__data__,M,d))&&("__data__"in g&&(C.__data__=g.__data__),u[M]=C,_p(u[M],o,e,M,u,Qa(g,e)));return new ps(a,this._parents,o,e)}function sB(n){var o=this._name,e=this._id;typeof n!="function"&&(n=vv(n));for(var t=this._groups,i=t.length,a=[],s=[],d=0;d<i;++d)for(var p=t[d],u=p.length,g,C=0;C<u;++C)if(g=p[C]){for(var M=n.call(g,g.__data__,C,p),x,b=Qa(g,e),P=0,k=M.length;P<k;++P)(x=M[P])&&_p(x,o,e,P,M,b);a.push(M),s.push(g)}return new ps(a,s,o,e)}var Txe=Wd.prototype.constructor;function lB(){return new Txe(this._groups,this._parents)}function Exe(n,o){var e,t,i;return function(){var a=tp(this,n),s=(this.style.removeProperty(n),tp(this,n));return a===s?null:a===e&&s===t?i:i=o(e=a,t=s)}}function cB(n){return function(){this.style.removeProperty(n)}}function Oxe(n,o,e){var t,i=e+"",a;return function(){var s=tp(this,n);return s===i?null:s===t?a:a=o(t=s,e)}}function Dxe(n,o,e){var t,i,a;return function(){var s=tp(this,n),d=e(this),p=d+"";return d==null&&(p=d=(this.style.removeProperty(n),tp(this,n))),s===p?null:s===t&&p===i?a:(i=p,a=o(t=s,d))}}function Ixe(n,o){var e,t,i,a="style."+o,s="end."+a,d;return function(){var p=Mr(this,n),u=p.on,g=p.value[a]==null?d||(d=cB(o)):void 0;(u!==e||i!==g)&&(t=(e=u).copy()).on(s,i=g),p.on=t}}function dB(n,o,e){var t=(n+="")=="transform"?UI:Gw;return o==null?this.styleTween(n,Exe(n,t)).on("end.style."+n,cB(n)):typeof o=="function"?this.styleTween(n,Dxe(n,t,t_(this,"style."+n,o))).each(Ixe(this._id,n)):this.styleTween(n,Oxe(n,t,o),e).on("end.style."+n,null)}function Axe(n,o,e){return function(t){this.style.setProperty(n,o.call(this,t),e)}}function Nxe(n,o,e){var t,i;function a(){var s=o.apply(this,arguments);return s!==i&&(t=(i=s)&&Axe(n,s,e)),t}return a._value=o,a}function mB(n,o,e){var t="style."+(n+="");if(arguments.length<2)return(t=this.tween(t))&&t._value;if(o==null)return this.tween(t,null);if(typeof o!="function")throw new Error;return this.tween(t,Nxe(n,o,e??""))}function Fxe(n){return function(){this.textContent=n}}function Rxe(n){return function(){var o=n(this);this.textContent=o??""}}function pB(n){return this.tween("text",typeof n=="function"?Rxe(t_(this,"text",n)):Fxe(n==null?"":n+""))}function zxe(n){return function(o){this.textContent=n.call(this,o)}}function Lxe(n){var o,e;function t(){var i=n.apply(this,arguments);return i!==e&&(o=(e=i)&&zxe(i)),o}return t._value=n,t}function uB(n){var o="text";if(arguments.length<1)return(o=this.tween(o))&&o._value;if(n==null)return this.tween(o,null);if(typeof n!="function")throw new Error;return this.tween(o,Lxe(n))}function gB(){for(var n=this._name,o=this._id,e=qw(),t=this._groups,i=t.length,a=0;a<i;++a)for(var s=t[a],d=s.length,p,u=0;u<d;++u)if(p=s[u]){var g=Qa(p,o);_p(p,n,e,u,s,{time:g.time+g.delay+g.duration,delay:0,duration:g.duration,ease:g.ease})}return new ps(t,this._parents,n,e)}function hB(){var n,o,e=this,t=e._id,i=e.size();return new Promise(function(a,s){var d={value:s},p={value:function(){--i===0&&a()}};e.each(function(){var u=Mr(this,t),g=u.on;g!==n&&(o=(n=g).copy(),o._.cancel.push(d),o._.interrupt.push(d),o._.end.push(p)),u.on=o}),i===0&&a()})}var Vxe=0;function ps(n,o,e,t){this._groups=n,this._parents=o,this._name=e,this._id=t}function _B(n){return Wd().transition(n)}function qw(){return++Vxe}var em=Wd.prototype;ps.prototype=_B.prototype={constructor:ps,select:rB,selectAll:sB,selectChild:em.selectChild,selectChildren:em.selectChildren,filter:nB,merge:iB,selection:lB,transition:gB,call:em.call,nodes:em.nodes,node:em.node,size:em.size,empty:em.empty,each:em.each,on:oB,attr:X9,attrTween:Y9,style:dB,styleTween:mB,text:pB,textTween:uB,remove:aB,tween:K9,delay:Z9,duration:J9,ease:eB,easeVarying:tB,end:hB,[Symbol.iterator]:em[Symbol.iterator]};function Qw(n){return((n*=2)<=1?n*n*n:(n-=2)*n*n+2)/2}var Bxe={time:null,delay:0,duration:250,ease:Qw};function jxe(n,o){for(var e;!(e=n.__transition)||!(e=e[o]);)if(!(n=n.parentNode))throw new Error(`transition ${o} not found`);return e}function fB(n){var o,e;n instanceof ps?(o=n._id,n=n._name):(o=qw(),(e=Bxe).time=iC(),n=n==null?null:n+"");for(var t=this._groups,i=t.length,a=0;a<i;++a)for(var s=t[a],d=s.length,p,u=0;u<d;++u)(p=s[u])&&_p(p,n,o,u,s,e||jxe(p,o));return new ps(t,this._parents,n,o)}Wd.prototype.interrupt=Q9;Wd.prototype.transition=fB;var rC=n=>()=>n;function QI(n,{sourceEvent:o,target:e,transform:t,dispatch:i}){Object.defineProperties(this,{type:{value:n,enumerable:!0,configurable:!0},sourceEvent:{value:o,enumerable:!0,configurable:!0},target:{value:e,enumerable:!0,configurable:!0},transform:{value:t,enumerable:!0,configurable:!0},_:{value:i}})}function wc(n,o,e){this.k=n,this.x=o,this.y=e}wc.prototype={constructor:wc,scale:function(n){return n===1?this:new wc(this.k*n,this.x,this.y)},translate:function(n,o){return n===0&o===0?this:new wc(this.k,this.x+this.k*n,this.y+this.k*o)},apply:function(n){return[n[0]*this.k+this.x,n[1]*this.k+this.y]},applyX:function(n){return n*this.k+this.x},applyY:function(n){return n*this.k+this.y},invert:function(n){return[(n[0]-this.x)/this.k,(n[1]-this.y)/this.k]},invertX:function(n){return(n-this.x)/this.k},invertY:function(n){return(n-this.y)/this.k},rescaleX:function(n){return n.copy().domain(n.range().map(this.invertX,this).map(n.invert,n))},rescaleY:function(n){return n.copy().domain(n.range().map(this.invertY,this).map(n.invert,n))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var sC=new wc(1,0,0);KI.prototype=wc.prototype;function KI(n){for(;!n.__zoom;)if(!(n=n.parentNode))return sC;return n.__zoom}function Kw(n){n.stopImmediatePropagation()}function n_(n){n.preventDefault(),n.stopImmediatePropagation()}function $xe(n){return(!n.ctrlKey||n.type==="wheel")&&!n.button}function Hxe(){var n=this;return n instanceof SVGElement?(n=n.ownerSVGElement||n,n.hasAttribute("viewBox")?(n=n.viewBox.baseVal,[[n.x,n.y],[n.x+n.width,n.y+n.height]]):[[0,0],[n.width.baseVal.value,n.height.baseVal.value]]):[[0,0],[n.clientWidth,n.clientHeight]]}function vB(){return this.__zoom||sC}function Uxe(n){return-n.deltaY*(n.deltaMode===1?.05:n.deltaMode?1:.002)*(n.ctrlKey?10:1)}function Wxe(){return navigator.maxTouchPoints||"ontouchstart"in this}function Gxe(n,o,e){var t=n.invertX(o[0][0])-e[0][0],i=n.invertX(o[1][0])-e[1][0],a=n.invertY(o[0][1])-e[0][1],s=n.invertY(o[1][1])-e[1][1];return n.translate(i>t?(t+i)/2:Math.min(0,t)||Math.max(0,i),s>a?(a+s)/2:Math.min(0,a)||Math.max(0,s))}function XI(){var n=$xe,o=Hxe,e=Gxe,t=Uxe,i=Wxe,a=[0,1/0],s=[[-1/0,-1/0],[1/0,1/0]],d=250,p=GI,u=Lu("start","zoom","end"),g,C,M,x=500,b=150,P=0,k=10;function S(pe){pe.property("__zoom",vB).on("wheel.zoom",le,{passive:!1}).on("mousedown.zoom",ae).on("dblclick.zoom",W).filter(i).on("touchstart.zoom",G).on("touchmove.zoom",ve).on("touchend.zoom touchcancel.zoom",Se).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}S.transform=function(pe,Ae,ue,H){var te=pe.selection?pe.selection():pe;te.property("__zoom",vB),pe!==te?F(pe,Ae,ue,H):te.interrupt().each(function(){I(this,arguments).event(H).start().zoom(null,typeof Ae=="function"?Ae.apply(this,arguments):Ae).end()})},S.scaleBy=function(pe,Ae,ue,H){S.scaleTo(pe,function(){var te=this.__zoom.k,de=typeof Ae=="function"?Ae.apply(this,arguments):Ae;return te*de},ue,H)},S.scaleTo=function(pe,Ae,ue,H){S.transform(pe,function(){var te=o.apply(this,arguments),de=this.__zoom,me=ue==null?D(te):typeof ue=="function"?ue.apply(this,arguments):ue,Ie=de.invert(me),$e=typeof Ae=="function"?Ae.apply(this,arguments):Ae;return e(A(O(de,$e),me,Ie),te,s)},ue,H)},S.translateBy=function(pe,Ae,ue,H){S.transform(pe,function(){return e(this.__zoom.translate(typeof Ae=="function"?Ae.apply(this,arguments):Ae,typeof ue=="function"?ue.apply(this,arguments):ue),o.apply(this,arguments),s)},null,H)},S.translateTo=function(pe,Ae,ue,H,te){S.transform(pe,function(){var de=o.apply(this,arguments),me=this.__zoom,Ie=H==null?D(de):typeof H=="function"?H.apply(this,arguments):H;return e(sC.translate(Ie[0],Ie[1]).scale(me.k).translate(typeof Ae=="function"?-Ae.apply(this,arguments):-Ae,typeof ue=="function"?-ue.apply(this,arguments):-ue),de,s)},H,te)};function O(pe,Ae){return Ae=Math.max(a[0],Math.min(a[1],Ae)),Ae===pe.k?pe:new wc(Ae,pe.x,pe.y)}function A(pe,Ae,ue){var H=Ae[0]-ue[0]*pe.k,te=Ae[1]-ue[1]*pe.k;return H===pe.x&&te===pe.y?pe:new wc(pe.k,H,te)}function D(pe){return[(+pe[0][0]+ +pe[1][0])/2,(+pe[0][1]+ +pe[1][1])/2]}function F(pe,Ae,ue,H){pe.on("start.zoom",function(){I(this,arguments).event(H).start()}).on("interrupt.zoom end.zoom",function(){I(this,arguments).event(H).end()}).tween("zoom",function(){var te=this,de=arguments,me=I(te,de).event(H),Ie=o.apply(te,de),$e=ue==null?D(Ie):typeof ue=="function"?ue.apply(te,de):ue,tt=Math.max(Ie[1][0]-Ie[0][0],Ie[1][1]-Ie[0][1]),et=te.__zoom,Me=typeof Ae=="function"?Ae.apply(te,de):Ae,Z=p(et.invert($e).concat(tt/et.k),Me.invert($e).concat(tt/Me.k));return function(Le){if(Le===1)Le=Me;else{var Ze=Z(Le),dt=tt/Ze[2];Le=new wc(dt,$e[0]-Ze[0]*dt,$e[1]-Ze[1]*dt)}me.zoom(null,Le)}})}function I(pe,Ae,ue){return!ue&&pe.__zooming||new B(pe,Ae)}function B(pe,Ae){this.that=pe,this.args=Ae,this.active=0,this.sourceEvent=null,this.extent=o.apply(pe,Ae),this.taps=0}B.prototype={event:function(pe){return pe&&(this.sourceEvent=pe),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(pe,Ae){return this.mouse&&pe!=="mouse"&&(this.mouse[1]=Ae.invert(this.mouse[0])),this.touch0&&pe!=="touch"&&(this.touch0[1]=Ae.invert(this.touch0[0])),this.touch1&&pe!=="touch"&&(this.touch1[1]=Ae.invert(this.touch1[0])),this.that.__zoom=Ae,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(pe){var Ae=Lt(this.that).datum();u.call(pe,this.that,new QI(pe,{sourceEvent:this.sourceEvent,target:S,type:pe,transform:this.that.__zoom,dispatch:u}),Ae)}};function le(pe,...Ae){if(!n.apply(this,arguments))return;var ue=I(this,Ae).event(pe),H=this.__zoom,te=Math.max(a[0],Math.min(a[1],H.k*Math.pow(2,t.apply(this,arguments)))),de=Na(pe);if(ue.wheel)(ue.mouse[0][0]!==de[0]||ue.mouse[0][1]!==de[1])&&(ue.mouse[1]=H.invert(ue.mouse[0]=de)),clearTimeout(ue.wheel);else{if(H.k===te)return;ue.mouse=[de,H.invert(de)],fp(this),ue.start()}n_(pe),ue.wheel=setTimeout(me,b),ue.zoom("mouse",e(A(O(H,te),ue.mouse[0],ue.mouse[1]),ue.extent,s));function me(){ue.wheel=null,ue.end()}}function ae(pe,...Ae){if(M||!n.apply(this,arguments))return;var ue=pe.currentTarget,H=I(this,Ae,!0).event(pe),te=Lt(pe.view).on("mousemove.zoom",$e,!0).on("mouseup.zoom",tt,!0),de=Na(pe,ue),me=pe.clientX,Ie=pe.clientY;Wv(pe.view),Kw(pe),H.mouse=[de,this.__zoom.invert(de)],fp(this),H.start();function $e(et){if(n_(et),!H.moved){var Me=et.clientX-me,Z=et.clientY-Ie;H.moved=Me*Me+Z*Z>P}H.event(et).zoom("mouse",e(A(H.that.__zoom,H.mouse[0]=Na(et,ue),H.mouse[1]),H.extent,s))}function tt(et){te.on("mousemove.zoom mouseup.zoom",null),Gv(et.view,H.moved),n_(et),H.event(et).end()}}function W(pe,...Ae){if(n.apply(this,arguments)){var ue=this.__zoom,H=Na(pe.changedTouches?pe.changedTouches[0]:pe,this),te=ue.invert(H),de=ue.k*(pe.shiftKey?.5:2),me=e(A(O(ue,de),H,te),o.apply(this,Ae),s);n_(pe),d>0?Lt(this).transition().duration(d).call(F,me,H,pe):Lt(this).call(S.transform,me,H,pe)}}function G(pe,...Ae){if(n.apply(this,arguments)){var ue=pe.touches,H=ue.length,te=I(this,Ae,pe.changedTouches.length===H).event(pe),de,me,Ie,$e;for(Kw(pe),me=0;me<H;++me)Ie=ue[me],$e=Na(Ie,this),$e=[$e,this.__zoom.invert($e),Ie.identifier],te.touch0?!te.touch1&&te.touch0[2]!==$e[2]&&(te.touch1=$e,te.taps=0):(te.touch0=$e,de=!0,te.taps=1+!!g);g&&(g=clearTimeout(g)),de&&(te.taps<2&&(C=$e[0],g=setTimeout(function(){g=null},x)),fp(this),te.start())}}function ve(pe,...Ae){if(this.__zooming){var ue=I(this,Ae).event(pe),H=pe.changedTouches,te=H.length,de,me,Ie,$e;for(n_(pe),de=0;de<te;++de)me=H[de],Ie=Na(me,this),ue.touch0&&ue.touch0[2]===me.identifier?ue.touch0[0]=Ie:ue.touch1&&ue.touch1[2]===me.identifier&&(ue.touch1[0]=Ie);if(me=ue.that.__zoom,ue.touch1){var tt=ue.touch0[0],et=ue.touch0[1],Me=ue.touch1[0],Z=ue.touch1[1],Le=(Le=Me[0]-tt[0])*Le+(Le=Me[1]-tt[1])*Le,Ze=(Ze=Z[0]-et[0])*Ze+(Ze=Z[1]-et[1])*Ze;me=O(me,Math.sqrt(Le/Ze)),Ie=[(tt[0]+Me[0])/2,(tt[1]+Me[1])/2],$e=[(et[0]+Z[0])/2,(et[1]+Z[1])/2]}else if(ue.touch0)Ie=ue.touch0[0],$e=ue.touch0[1];else return;ue.zoom("touch",e(A(me,Ie,$e),ue.extent,s))}}function Se(pe,...Ae){if(this.__zooming){var ue=I(this,Ae).event(pe),H=pe.changedTouches,te=H.length,de,me;for(Kw(pe),M&&clearTimeout(M),M=setTimeout(function(){M=null},x),de=0;de<te;++de)me=H[de],ue.touch0&&ue.touch0[2]===me.identifier?delete ue.touch0:ue.touch1&&ue.touch1[2]===me.identifier&&delete ue.touch1;if(ue.touch1&&!ue.touch0&&(ue.touch0=ue.touch1,delete ue.touch1),ue.touch0)ue.touch0[1]=this.__zoom.invert(ue.touch0[0]);else if(ue.end(),ue.taps===2&&(me=Na(me,this),Math.hypot(C[0]-me[0],C[1]-me[1])<k)){var Ie=Lt(this).on("dblclick.zoom");Ie&&Ie.apply(this,arguments)}}}return S.wheelDelta=function(pe){return arguments.length?(t=typeof pe=="function"?pe:rC(+pe),S):t},S.filter=function(pe){return arguments.length?(n=typeof pe=="function"?pe:rC(!!pe),S):n},S.touchable=function(pe){return arguments.length?(i=typeof pe=="function"?pe:rC(!!pe),S):i},S.extent=function(pe){return arguments.length?(o=typeof pe=="function"?pe:rC([[+pe[0][0],+pe[0][1]],[+pe[1][0],+pe[1][1]]]),S):o},S.scaleExtent=function(pe){return arguments.length?(a[0]=+pe[0],a[1]=+pe[1],S):[a[0],a[1]]},S.translateExtent=function(pe){return arguments.length?(s[0][0]=+pe[0][0],s[1][0]=+pe[1][0],s[0][1]=+pe[0][1],s[1][1]=+pe[1][1],S):[[s[0][0],s[0][1]],[s[1][0],s[1][1]]]},S.constrain=function(pe){return arguments.length?(e=pe,S):e},S.duration=function(pe){return arguments.length?(d=+pe,S):d},S.interpolate=function(pe){return arguments.length?(p=pe,S):p},S.on=function(){var pe=u.on.apply(u,arguments);return pe===u?S:pe},S.clickDistance=function(pe){return arguments.length?(P=(pe=+pe)*pe,S):Math.sqrt(P)},S.tapDistance=function(pe){return arguments.length?(k=+pe,S):k},S}var i_=(()=>{class n{context;zoom;enabled=!1;needsDeactivate=!1;needsActivate=!1;constructor(e){this.context=e,this.zoom=XI().scaleExtent([1/2,8])}setEnabled(e){this.enabled!=e&&(e?this.needsActivate=!0:this.needsDeactivate=!0),this.enabled=e}draw(e,t){this.needsActivate&&(this.activate(e),this.needsActivate=!1),this.needsDeactivate&&(this.deactivate(e),this.needsDeactivate=!1)}activate(e){let t=this,i=function(a){let s=e.select("g.canvas"),d=a;s.attr("transform",()=>{t.context.transformation.x=d.transform.x,t.context.transformation.y=d.transform.y,t.context.transformation.k=d.transform.k;let p=t.context.getZeroZeroTransformationPoint().x+t.context.transformation.x,u=t.context.getZeroZeroTransformationPoint().y+t.context.transformation.y,g=t.context.transformation.k;return`translate(${p}, ${u}) scale(${g})`})};this.zoom.filter(a=>a.type==="mousedown"),this.zoom.on("zoom",i),e.call(this.zoom)}deactivate(e){e.on("mousedown.zoom",null),this.zoom.on("zoom",null)}static \u0275fac=function(t){return new(t||n)(_e(zo))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Xw=class{x;y;width;height;constructor(o,e,t,i){this.x=o,this.y=e,this.width=t,this.height=i}};var o_=(()=>{class n{selected=new Ye;static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var vp=(()=>{class n{context;selectionEventSource;contextMenuOpened=new be;path;enabled=!1;constructor(e,t){this.context=e,this.selectionEventSource=t}setEnabled(e){this.enabled=e}activate(e){let t=this,i=e.node();e.on("contextmenu.selection",a=>a.preventDefault()).on("mousedown.selection",function(a){if(a.button===2){t.contextMenuOpened.emit(a);return}let s=Lt(window),d=t.transformation(Na(a,i));t.startSelection(d),s.on("mousemove.selection",function(p){let u=t.transformation(Na(p,i));t.moveSelection(d,u)}).on("mouseup.selection",function(p){let u=t.transformation(Na(p,i));t.endSelection(d,u),s.on("mousemove.selection",null).on("mouseup.selection",null)})})}deactivate(e){e.on("mousedown.selection",null).on("contextmenu.selection",null)}draw(e,t){let i=e.select("g.canvas");if(!i.select("g.selection-line-tool").node()){let d=i.append("g");d.attr("class","selection-line-tool"),this.path=d.append("path"),this.path.attr("class","selection").attr("visibility","hidden")}let a=i.select("g.selection-line-tool"),s=a.attr("status");s!=="activated"&&this.enabled&&(this.activate(e),a.attr("status","activated")),s!=="deactivated"&&!this.enabled&&(this.deactivate(e),a.attr("status","deactivated"))}startSelection(e){e[0]==null||e[1]==null||isNaN(e[0])||isNaN(e[1])||this.path.attr("d",this.rect(e[0],e[1],0,0)).attr("visibility","visible")}moveSelection(e,t){let i=this.context.transformation.k;if(!i||i===0||isNaN(i))return;let a=e[0]/i,s=e[1]/i;if(isNaN(a)||isNaN(s))return;let d=t[0]/i-a,p=t[1]/i-s;isNaN(d)||isNaN(p)||(this.path.attr("d",this.rect(a,s,d,p)),this.selectedEvent(e,t))}endSelection(e,t){this.path.attr("visibility","hidden"),this.selectedEvent(e,t)}selectedEvent(e,t){let i=this.context.transformation.k;if(!i||i===0||isNaN(i))return;let a=e[0]/i,s=e[1]/i,d=t[0]/i,p=t[1]/i,u=Math.min(a,d),g=Math.min(s,p),C=Math.abs(a-d),M=Math.abs(s-p);this.selectionEventSource.selected.next(new Xw(u,g,C,M))}rect(e,t,i,a){return"M"+[e,t]+" l"+[i,0]+" l"+[0,a]+" l"+[-i,0]+"z"}transformation(e){let t=this.context.getZeroZeroTransformationPoint();return[e[0]-t.x-this.context.transformation.x,e[1]-t.y-this.context.transformation.y]}static \u0275fac=function(t){return new(t||n)(_e(zo),_e(o_))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var{abs:Nwt,max:Fwt,min:Rwt}=Math;function CB(n){return[+n[0],+n[1]]}function Xxe(n){return[CB(n[0]),CB(n[1])]}var zwt={name:"x",handles:["w","e"].map(YI),input:function(n,o){return n==null?null:[[+n[0],o[0][1]],[+n[1],o[1][1]]]},output:function(n){return n&&[n[0][0],n[1][0]]}},Lwt={name:"y",handles:["n","s"].map(YI),input:function(n,o){return n==null?null:[[o[0][0],+n[0]],[o[1][0],+n[1]]]},output:function(n){return n&&[n[0][1],n[1][1]]}},Vwt={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(YI),input:function(n){return n==null?null:Xxe(n)},output:function(n){return n}};function YI(n){return{type:n}}var ZI=Math.PI,JI=2*ZI,Hu=1e-6,Yxe=JI-Hu;function bB(n){this._+=n[0];for(let o=1,e=n.length;o<e;++o)this._+=arguments[o]+n[o]}function Zxe(n){let o=Math.floor(n);if(!(o>=0))throw new Error(`invalid digits: ${n}`);if(o>15)return bB;let e=10**o;return function(t){this._+=t[0];for(let i=1,a=t.length;i<a;++i)this._+=Math.round(arguments[i]*e)/e+t[i]}}var Uu=class{constructor(o){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=o==null?bB:Zxe(o)}moveTo(o,e){this._append`M${this._x0=this._x1=+o},${this._y0=this._y1=+e}`}closePath(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(o,e){this._append`L${this._x1=+o},${this._y1=+e}`}quadraticCurveTo(o,e,t,i){this._append`Q${+o},${+e},${this._x1=+t},${this._y1=+i}`}bezierCurveTo(o,e,t,i,a,s){this._append`C${+o},${+e},${+t},${+i},${this._x1=+a},${this._y1=+s}`}arcTo(o,e,t,i,a){if(o=+o,e=+e,t=+t,i=+i,a=+a,a<0)throw new Error(`negative radius: ${a}`);let s=this._x1,d=this._y1,p=t-o,u=i-e,g=s-o,C=d-e,M=g*g+C*C;if(this._x1===null)this._append`M${this._x1=o},${this._y1=e}`;else if(M>Hu)if(!(Math.abs(C*p-u*g)>Hu)||!a)this._append`L${this._x1=o},${this._y1=e}`;else{let x=t-s,b=i-d,P=p*p+u*u,k=x*x+b*b,S=Math.sqrt(P),O=Math.sqrt(M),A=a*Math.tan((ZI-Math.acos((P+M-k)/(2*S*O)))/2),D=A/O,F=A/S;Math.abs(D-1)>Hu&&this._append`L${o+D*g},${e+D*C}`,this._append`A${a},${a},0,0,${+(C*x>g*b)},${this._x1=o+F*p},${this._y1=e+F*u}`}}arc(o,e,t,i,a,s){if(o=+o,e=+e,t=+t,s=!!s,t<0)throw new Error(`negative radius: ${t}`);let d=t*Math.cos(i),p=t*Math.sin(i),u=o+d,g=e+p,C=1^s,M=s?i-a:a-i;this._x1===null?this._append`M${u},${g}`:(Math.abs(this._x1-u)>Hu||Math.abs(this._y1-g)>Hu)&&this._append`L${u},${g}`,t&&(M<0&&(M=M%JI+JI),M>Yxe?this._append`A${t},${t},0,1,${C},${o-d},${e-p}A${t},${t},0,1,${C},${this._x1=u},${this._y1=g}`:M>Hu&&this._append`A${t},${t},0,${+(M>=ZI)},${C},${this._x1=o+t*Math.cos(a)},${this._y1=e+t*Math.sin(a)}`)}rect(o,e,t,i){this._append`M${this._x0=this._x1=+o},${this._y0=this._y1=+e}h${t=+t}v${+i}h${-t}Z`}toString(){return this._}};function Cp(){return new Uu}Cp.prototype=Uu.prototype;function Wu(n){return function(){return n}}var e4=1e-12,xB=Math.PI,Zwt=xB/2,Jwt=2*xB;function yB(n){let o=3;return n.digits=function(e){if(!arguments.length)return o;if(e==null)o=null;else{let t=Math.floor(e);if(!(t>=0))throw new RangeError(`invalid digits: ${e}`);o=t}return n},()=>new Uu(o)}var iMt=Array.prototype.slice;function wB(n){return typeof n=="object"&&"length"in n?n:Array.from(n)}function MB(n){this._context=n}MB.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(n,o){switch(n=+n,o=+o,this._point){case 0:this._point=1,this._line?this._context.lineTo(n,o):this._context.moveTo(n,o);break;case 1:this._point=2;default:this._context.lineTo(n,o);break}}};function SB(n){return new MB(n)}function kB(n){return n[0]}function PB(n){return n[1]}function Gu(n,o){var e=Wu(!0),t=null,i=SB,a=null,s=yB(d);n=typeof n=="function"?n:n===void 0?kB:Wu(n),o=typeof o=="function"?o:o===void 0?PB:Wu(o);function d(p){var u,g=(p=wB(p)).length,C,M=!1,x;for(t==null&&(a=i(x=s())),u=0;u<=g;++u)!(u<g&&e(C=p[u],u,p))===M&&((M=!M)?a.lineStart():a.lineEnd()),M&&a.point(+n(C,u,p),+o(C,u,p));if(x)return a=null,x+""||null}return d.x=function(p){return arguments.length?(n=typeof p=="function"?p:Wu(+p),d):n},d.y=function(p){return arguments.length?(o=typeof p=="function"?p:Wu(+p),d):o},d.defined=function(p){return arguments.length?(e=typeof p=="function"?p:Wu(!!p),d):e},d.curve=function(p){return arguments.length?(i=p,t!=null&&(a=i(t)),d):i},d.context=function(p){return arguments.length?(p==null?t=a=null:a=i(t=p),d):t},d}function TB(n,o,e){n._context.bezierCurveTo((2*n._x0+n._x1)/3,(2*n._y0+n._y1)/3,(n._x0+2*n._x1)/3,(n._y0+2*n._y1)/3,(n._x0+4*n._x1+o)/6,(n._y0+4*n._y1+e)/6)}function EB(n){this._context=n}EB.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:TB(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(n,o){switch(n=+n,o=+o,this._point){case 0:this._point=1,this._line?this._context.lineTo(n,o):this._context.moveTo(n,o);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:TB(this,n,o);break}this._x0=this._x1,this._x1=n,this._y0=this._y1,this._y1=o}};function lC(n){return new EB(n)}function OB(n,o,e){n._context.bezierCurveTo(n._x1+n._k*(n._x2-n._x0),n._y1+n._k*(n._y2-n._y0),n._x2+n._k*(n._x1-o),n._y2+n._k*(n._y1-e),n._x2,n._y2)}function Yw(n,o){this._context=n,this._k=(1-o)/6}Yw.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:OB(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(n,o){switch(n=+n,o=+o,this._point){case 0:this._point=1,this._line?this._context.lineTo(n,o):this._context.moveTo(n,o);break;case 1:this._point=2,this._x1=n,this._y1=o;break;case 2:this._point=3;default:OB(this,n,o);break}this._x0=this._x1,this._x1=this._x2,this._x2=n,this._y0=this._y1,this._y1=this._y2,this._y2=o}};var gMt=(function n(o){function e(t){return new Yw(t,o)}return e.tension=function(t){return n(+t)},e})(0);function Jxe(n,o,e){var t=n._x1,i=n._y1,a=n._x2,s=n._y2;if(n._l01_a>e4){var d=2*n._l01_2a+3*n._l01_a*n._l12_a+n._l12_2a,p=3*n._l01_a*(n._l01_a+n._l12_a);t=(t*d-n._x0*n._l12_2a+n._x2*n._l01_2a)/p,i=(i*d-n._y0*n._l12_2a+n._y2*n._l01_2a)/p}if(n._l23_a>e4){var u=2*n._l23_2a+3*n._l23_a*n._l12_a+n._l12_2a,g=3*n._l23_a*(n._l23_a+n._l12_a);a=(a*u+n._x1*n._l23_2a-o*n._l12_2a)/g,s=(s*u+n._y1*n._l23_2a-e*n._l12_2a)/g}n._context.bezierCurveTo(t,i,a,s,n._x2,n._y2)}function DB(n,o){this._context=n,this._alpha=o}DB.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(n,o){if(n=+n,o=+o,this._point){var e=this._x2-n,t=this._y2-o;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+t*t,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(n,o):this._context.moveTo(n,o);break;case 1:this._point=2;break;case 2:this._point=3;default:Jxe(this,n,o);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=n,this._y0=this._y1,this._y1=this._y2,this._y2=o}};var qu=(function n(o){function e(t){return o?new DB(t,o):new Yw(t,0)}return e.alpha=function(t){return n(+t)},e})(.5);function IB(n){return n<0?-1:1}function AB(n,o,e){var t=n._x1-n._x0,i=o-n._x1,a=(n._y1-n._y0)/(t||i<0&&-0),s=(e-n._y1)/(i||t<0&&-0),d=(a*i+s*t)/(t+i);return(IB(a)+IB(s))*Math.min(Math.abs(a),Math.abs(s),.5*Math.abs(d))||0}function NB(n,o){var e=n._x1-n._x0;return e?(3*(n._y1-n._y0)/e-o)/2:o}function t4(n,o,e){var t=n._x0,i=n._y0,a=n._x1,s=n._y1,d=(a-t)/3;n._context.bezierCurveTo(t+d,i+d*o,a-d,s-d*e,a,s)}function Zw(n){this._context=n}Zw.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:t4(this,this._t0,NB(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(n,o){var e=NaN;if(n=+n,o=+o,!(n===this._x1&&o===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(n,o):this._context.moveTo(n,o);break;case 1:this._point=2;break;case 2:this._point=3,t4(this,NB(this,e=AB(this,n,o)),e);break;default:t4(this,this._t0,e=AB(this,n,o));break}this._x0=this._x1,this._x1=n,this._y0=this._y1,this._y1=o,this._t0=e}}};function e1e(n){this._context=new FB(n)}(e1e.prototype=Object.create(Zw.prototype)).point=function(n,o){Zw.prototype.point.call(this,o,n)};function FB(n){this._context=n}FB.prototype={moveTo:function(n,o){this._context.moveTo(o,n)},closePath:function(){this._context.closePath()},lineTo:function(n,o){this._context.lineTo(o,n)},bezierCurveTo:function(n,o,e,t,i,a){this._context.bezierCurveTo(o,n,t,e,a,i)}};function cC(n){return new Zw(n)}var dC=class{x;y;dx;dy},n4=class extends dC{datum;constructor(o){super(),this.datum=o}},i4=class extends dC{datum;constructor(o){super(),this.datum=o}},o4=class extends dC{datum;constructor(o){super(),this.datum=o}},fd=class{start=new be;drag=new be;end=new be;call(o){o.call(this.behaviour())}behaviour(){let o;return Ls().on("start",e=>{o=new n4(e.subject),o.dx=e.dx,o.dy=e.dy,o.x=e.x,o.y=e.y,this.start.emit(o)}).on("drag",e=>{let t=new i4(e.subject);t.dx=e.dx,t.dy=e.dy,this.drag.emit(t)}).on("end",e=>{let t=new o4(e.subject);t.dx=e.x-o.x,t.dy=e.y-o.y,this.end.emit(t)})}};var a4=class{datum;dx;dy;constructor(o,e,t){this.datum=o,this.dx=e,this.dy=t}},Qu=class extends a4{},Jw=class{datum;x;y;width;height;rotation;constructor(o,e,t,i,a,s){this.datum=o,this.x=e,this.y=t,this.width=i,this.height=a,this.rotation=s}},eM=class{x;y;constructor(o,e){this.x=o,this.y=e}},tM=class{datum;x;y;constructor(o,e,t){this.datum=o,this.x=e,this.y=t}},nM=class{savedText;x;y;constructor(o,e,t){this.savedText=o,this.x=e,this.y=t}},iM=class{textDrawingId;editedText;textElement;constructor(o,e,t){this.textDrawingId=o,this.editedText=e,this.textElement=t}},oM=class{event;drawing;constructor(o,e){this.event=o,this.drawing=e}},Mc=class{event;link;constructor(o,e){this.event=o,this.link=e}},aM=class{event;interfaceLabel;constructor(o,e){this.event=o,this.interfaceLabel=e}},rM=class{event;label;constructor(o,e){this.event=o,this.label=e}};var r4=class{event;node;constructor(o,e){this.event=o,this.node=e}};var mC=class extends r4{};var n1e={atm_switch:"ATM switch",cloud:"Cloud",docker:"Docker container",dynamips:"Dynamips node",ethernet_hub:"Ethernet hub",ethernet_switch:"Ethernet switch",frame_relay_switch:"Frame Relay switch",iou:"IOU node",nat:"NAT node",qemu:"QEMU VM",virtualbox:"VirtualBox VM",vmware:"VMware VM",vpcs:"VPCS node"};function i1e(n,o,e){return n.nodeId===o.id&&n.adapterNumber===e.adapterNumber&&n.portNumber===e.portNumber}function RB(n){return`${n.adapterNumber}:${n.portNumber}`}function o1e(n,o,e,t){let i=[],a=e.nodes.find(p=>!i1e(p,o,n)),s=a?t.get(a.nodeId):void 0,d=a?s?.ports?.find(p=>p.adapterNumber===a.adapterNumber&&p.portNumber===a.portNumber):void 0;return a?i.push(`${n.name} connected to ${s?.name||a.nodeId} on port ${d?.name||a.portNumber}`):i.push(`${n.name} is connected`),n.macAddress&&i.push(` MAC address is ${n.macAddress}`),i}function s4(n,o){let e=[`${n1e[n.nodeType]||"Node"} ${n.name} is ${n.status}`];if(n.missingImage){let a=(n.missingImages||[]).map(s=>s.image).filter(Boolean);e.push(a.length?`Missing image(s): ${a.join(", ")} - a compatible image is required to start this node`:"Missing image - a compatible image is required to start this node")}o&&(!n.computeId||n.computeId==="local")?e.push(`Running on server ${o.name} (controller) with port ${o.port}`):n.computeId&&e.push(`Running on compute ${n.computeId}`),e.push(`Node ID is ${n.id}`);let t=n.properties?.cpus,i=n.properties?.ram;return t!=null&&i!=null&&e.push(`Number of processors is ${t} and amount of memory is ${i}MB`),n.consoleType&&n.consoleType!=="none"&&n.console!=null&&e.push(`Console is on port ${n.console} and type is ${n.consoleType}`),n.auxType&&n.auxType!=="none"&&n.aux!=null&&e.push(`Auxiliary console is on port ${n.aux} and type is ${n.auxType}`),e.join(`
|
||
`)}function zB(n,o,e,t){let i=[s4(n,t)],a=new Map(e.map(d=>[d.id,d])),s=new Map;for(let d of o)for(let p of d.nodes||[])p.nodeId===n.id&&s.set(RB(p),d);for(let d of n.ports||[]){let p=s.get(RB(d));p&&i.push(...o1e(d,n,p,a))}return i.join(`
|
||
`)}var na=(()=>{class n{selection={};selected=new be;unselected=new be;setSelected(e){let t=this.convertToKeyDict(e),i=Object.keys(t).filter(s=>!this.isSelectedByKey(s)).map(s=>t[s]),a=Object.keys(this.selection).filter(s=>!(s in t)).map(s=>this.selection[s]);this.selection=t,i.length>0&&this.selected.emit(i),a.length>0&&this.unselected.emit(a)}getSelected(){return Object.keys(this.selection).map(e=>this.selection[e])}isSelected(e){let t=this.getKey(e);return this.isSelectedByKey(t)}isSelectedByKey(e){return e in this.selection}getKey(e){return`${e.constructor.name}-${e.id}`}convertToKeyDict(e){let t={};return e.forEach(i=>{t[this.getKey(i)]=i}),t}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var bp=(()=>{class n{cssFixer;fontFixer;selectionManager;mapSettings;onContextMenu=new be;draggable=new fd;static NODE_LABEL_MARGIN=3;constructor(e,t,i,a){this.cssFixer=e,this.fontFixer=t,this.selectionManager=i,this.mapSettings=a}redrawLabel(e,t){this.drawLabel(this.selectLabel(e,t))}draw(e){let t=this,i=e.selectAll("g.label_container").data(d=>[d.label]),a=i.enter().append("g").attr("class","label_container").attr("label_id",d=>d.id),s=i.merge(a).on("mousedown.context-menu",function(d){d.button===2&&d.stopPropagation()}).on("contextmenu",function(d,p){d.preventDefault(),t.onContextMenu.emit(new rM(d,p))});this.drawLabel(s),i.exit().remove(),this.mapSettings.isReadOnly||this.draggable.call(i)}applyLabelColorMode(e){return/--gns3-custom-label-color\s*:\s*1(?:\s*;|$)/i.test(e)?e:e.replace(/fill:\s*[^;]+;?/gi,"")}drawLabel(e){let t=e.selectAll("g.label_body").data(s=>[s]),i=t.enter().append("g").attr("class","label_body");i.append("text").attr("class","label"),i.append("rect").attr("class","label_selection");let a=t.merge(i);a.select("text.label").attr("label_id",s=>s.id).attr("style",s=>{let d=this.cssFixer.fix(s.style);return d=this.fontFixer.fixStyles(d),d=this.applyLabelColorMode(d),d}).text(s=>s.text).attr("x",s=>s.x).attr("y",s=>s.y).attr("transform",s=>`rotate(${s.rotation}, ${s.x}, ${s.y})`),a.select("rect.label_selection").attr("visibility",s=>this.selectionManager.isSelected(s)?"visible":"hidden").attr("stroke","black").attr("stroke-dasharray","3,3").attr("stroke-width","0.5").attr("fill","none").each(function(s){let d=Lt(this),u=a.select(`text[label_id="${s.id}"]`).node().getBBox(),g=2;d.attr("width",u.width+g*2),d.attr("height",u.height+g*2),d.attr("x",u.x-g),d.attr("y",u.y-g),d.attr("transform",`rotate(${s.rotation}, ${s.x}, ${s.y})`)})}selectLabel(e,t){return e.selectAll(`g.label_container[label_id="${t.id}"]`)}static \u0275fac=function(t){return new(t||n)(_e($l),_e(dr),_e(na),_e(Ul))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var ql=(()=>{class n{dragged=new be;labelDragged=new be;clicked=new be;static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var s1e="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z",l1e="M18 8h-8V6c0-1.1.9-2 2-2s2 .9 2 2h2c0-2.21-1.79-4-4-4S8 3.79 8 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2z",c1e="var(--gns3-lock-badge-locked-color)",d1e="var(--gns3-lock-badge-unlocked-color)",l4="var(--gns3-lock-badge-outline-color)",m1e="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z",p1e="var(--gns3-missing-image-badge-color)",u1e="var(--gns3-missing-image-badge-outline-color)",r_=(()=>{class n{selectionManager;labelWidget;nodesEventSource;mapSettingsService;mapLinksDataSource;mapNodesDataSource;onContextMenu=new be;onContextConsoleMenu=new be;onNodeClicked=new be;controller;constructor(e,t,i,a,s,d){this.selectionManager=e,this.labelWidget=t,this.nodesEventSource=i,this.mapSettingsService=a,this.mapLinksDataSource=s,this.mapNodesDataSource=d}setController(e){this.controller=e}draw(e){let t=this,i=e.selectAll("g.node_body").data(g=>[g]),a=i.enter().append("g").attr("class","node_body");a.append("image");let s=i.merge(a).classed("selected",g=>this.selectionManager.isSelected(g)).classed("locked",g=>g.locked).classed("missing-image",g=>g.missingImage===!0).on("click",(g,C)=>{this.nodesEventSource.clicked.emit(new tM(C,g.pageX,g.pageY))}),d=s.selectAll("title.node_tooltip").data(g=>[g]);if(d.enter().append("title").attr("class","node_tooltip").merge(d).text(g=>s4(g,this.controller)),s.on("mouseenter.node-tooltip",function(g,C){Lt(this).select("title.node_tooltip").text(zB(C,t.mapLinksDataSource.getItems(),t.mapNodesDataSource.getItems(),t.controller))}),s.select(".layer_label_wrapper").remove(),this.mapSettingsService.isLayerNumberVisible&&s.append("rect").attr("class","layer_label_wrapper").attr("width","26").attr("height","26").attr("x",g=>g.width/2-13).attr("y",g=>g.height/2-13).attr("fill","red"),s.select(".layer_label").remove(),this.mapSettingsService.isLayerNumberVisible&&s.append("text").attr("class","layer_label").text(g=>g.z).attr("x",function(g){return g.z>=100?g.width/2-13:g.z>=10?g.width/2-9:g.width/2-5}).attr("y",g=>g.height/2+5).attr("style",()=>{let g=[];return g.push('font-family: "Noto Sans"'),g.push("font-size: 11pt"),g.push("font-weight: bold"),g.join("; ")}).attr("fill","#ffffff"),s.select(".node_lock_status_badge").remove(),this.mapSettingsService.isItemLockStatusVisible){let g=s.append("g").attr("class","node_lock_status_badge").attr("pointer-events","none").attr("transform",b=>{let P=b.width>0?b.width:60,k=b.height>0?b.height:60;if(b.nodeType==="cloud"||b.nodeType==="nat"||b.symbol&&(b.symbol.toLowerCase().includes("nat")||b.symbol.toLowerCase().includes("cloud"))){let O=P/2+(P/2-12)/Math.SQRT2,A=k/2-(k/2-12)/Math.SQRT2;return`translate(${O}, ${A})`}return`translate(${P*.8}, ${k*.2})`});g.filter(b=>b.locked).append("path").attr("d",s1e).attr("transform","translate(-7.68, -7.68) scale(0.64)").attr("fill",c1e).attr("stroke",l4).attr("stroke-width",1.2).attr("stroke-linejoin","round").attr("paint-order","stroke fill");let x=g.filter(b=>!b.locked).append("g").attr("transform","translate(-7.68, -7.68) scale(0.64)");x.append("path").attr("d",l1e).attr("fill",d1e).attr("stroke",l4).attr("stroke-width",1.2).attr("stroke-linejoin","round").attr("paint-order","stroke fill"),x.append("circle").attr("cx",12).attr("cy",15).attr("r",2).attr("fill",l4)}s.select(".node_missing_image_badge").remove();let u=s.filter(g=>g.missingImage===!0).append("g").attr("class","node_missing_image_badge").attr("pointer-events","none").attr("transform",g=>{let C=g.width>0?g.width:60,M=g.height>0?g.height:60;return`translate(${C*.2}, ${M*.2})`});u.append("circle").attr("r",9).attr("fill","var(--mat-sys-surface)").attr("stroke",u1e).attr("stroke-width",1.2),u.append("path").attr("d",m1e).attr("transform","translate(-8, -8) scale(0.66)").attr("fill",p1e).attr("stroke","none"),s.select("image").on("mousedown.context-menu",function(g){g.button===2&&g.stopPropagation()}).on("contextmenu",function(g,C){g.preventDefault(),t.onContextMenu.emit(new mC(g,C))}).on("dblclick",function(g,C){g.preventDefault(),t.onContextConsoleMenu.emit(new mC(g,C))}).each(function(g){this.getAttribute("href")!==g.symbolUrl&&(this.removeAttribute("href"),this.getClientRects(),this.setAttribute("href",g.symbolUrl))}).attr("width",g=>g.width?g.width:60).attr("height",g=>g.height?g.height:60).attr("x",g=>0).attr("y",g=>0).on("mouseover",function(g){Lt(this).attr("class","over")}).on("mouseout",function(g){Lt(this).attr("class","")}),s.attr("transform",g=>g.width?`translate(${g.x},${g.y})`:`translate(${g.x-30},${g.y-30})`),this.labelWidget.draw(s)}static \u0275fac=function(t){return new(t||n)(_e(na),_e(bp),_e(ql),_e(ui),_e(Fs),_e(ip))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var xp=(()=>{class n{nodeWidget;mapSettings;static NODE_LABEL_MARGIN=3;draggable=new fd;constructor(e,t){this.nodeWidget=e,this.mapSettings=t}redrawNode(e,t){this.nodeWidget.draw(this.selectNode(e,t))}updateNodePosition(e,t){this.selectNode(e,t).select("g.node_body").attr("transform",()=>t.width?`translate(${t.x},${t.y})`:`translate(${t.x-30},${t.y-30})`)}draw(e){let t=e.selectAll("g.node").data(s=>s.nodes?s.nodes:[],s=>s.id),i=t.enter().append("g").attr("class","node").attr("node_id",s=>s.id),a=t.merge(i);this.nodeWidget.draw(a),t.exit().remove(),this.mapSettings.isReadOnly||this.draggable.call(a)}selectNode(e,t){return e.selectAll(`g.node[node_id="${t.id}"]`)}static \u0275fac=function(t){return new(t||n)(_e(r_),_e(Ul))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var lM=class{points};var s_=(()=>{class n{drawingLine=new lM;selection;drawing=!1;data={};start(e,t,i){let a=this;this.drawing=!0,this.data=i,this.drawingLine.points=[new np(e,t)];let s=function(p,u){let g=a.selection.select("g.canvas").node(),C=Na(p,g);a.drawing&&(a.drawingLine.points=[a.drawingLine.points[0],new np(C[0],C[1])]),a.draw(null,null)},d=function(p,u){p.key==="Escape"&&a.cancel()};this.selection.on("mousemove",s),this.selection.on("keydown",d),this.draw(null,null)}isDrawing(){return this.drawing}cancel(){this.drawing=!1,this.drawingLine.points=[],this.selection.on("mousemove",null),this.selection.on("keydown",null),this.draw(null,null)}stop(){return this.drawing=!1,this.selection.on("mousemove",null),this.selection.on("keydown",null),this.draw(null,null),this.data}connect(e,t){this.selection=e}draw(e,t){let i=this.selection.select("g.canvas");i.select("g.drawing-line-tool").node()||i.append("g").attr("class","drawing-line-tool");let a=this.selection.select("g.drawing-line-tool"),s=[];this.drawing&&this.drawingLine.points.length>0&&(s=[this.drawingLine.points.map(g=>[g.x,g.y])]);let d=Gu(),p=a.selectAll("path").data(s);p.exit().remove();let u=p.enter().append("path");p.merge(u).attr("d",d).attr("stroke","#000").attr("stroke-width","2").attr("fill","none")}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();function cM(n){return!!n&&Object.keys(n).length>0}var en=(()=>{class n{static DEFAULT_LINK_TYPE="straight";static BEZIER_CURVINESS_DEFAULT=150;static BEZIER_CURVINESS_MIN=-2500;static BEZIER_CURVINESS_MAX=2500;static BEZIER_CURVINESS_STEP=1;static STATE_MACHINE_CURVINESS_DEFAULT=0;static STATE_MACHINE_CURVINESS_MIN=-2500;static STATE_MACHINE_CURVINESS_MAX=2500;static STATE_MACHINE_CURVINESS_STEP=1;static STATE_MACHINE_ZERO_CURVE_OFFSET=10;static STATE_MACHINE_TRANSLATE_Y=3;static FLOWCHART_ROUNDNESS_DEFAULT=0;static FLOWCHART_ROUNDNESS_MIN=-250;static FLOWCHART_ROUNDNESS_MAX=250;static FLOWCHART_ROUNDNESS_STEP=1;static getLinkStyle(e){return e.type==2?"10, 10":e.type==3?`${e.width}, ${e.width}`:e.type==4?`20, 10, ${e.width}, 10`:e.type==5?`20, 10, ${e.width}, ${e.width}, ${e.width}, 10`:"0, 0"}static normalizeLinkType(e){let t=(e||"").toLowerCase().replace(/[\s_-]/g,"");return t==="bezier"?"bezier":t==="flowchart"?"flowchart":t==="statemachine"?"statemachine":t==="freeform"?"freeform":n.DEFAULT_LINK_TYPE}static getLinkPath(e,t,i,a){let s=n.normalizeLinkType(i?.link_type);if(s==="bezier"){let d=typeof a?.bezierVariation=="number"&&!Number.isNaN(a.bezierVariation)?a.bezierVariation:0,p=n.getEffectiveBezierMajorAnchor(i?.bezier_curviness,d);return n.getJsPlumbBezierPath(e,t,p,a?.sourceOrientation,a?.targetOrientation)}if(s==="flowchart"){let d=n.normalizeFlowchartRoundness(i?.flowchart_roundness);return n.getFlowchartPath(e,t,d,a?.flowchartDistance)}if(s==="statemachine"){let d=n.normalizeStateMachineCurviness(i?.bezier_curviness);return n.getStateMachinePath(e,t,d)}return n.getStraightPath(e,t)}static getFreeformBezierPath(e,t,i,a,s){let d=Cp();if(d.moveTo(e[0],e[1]),s){let p=2*s[0]-.5*(e[0]+t[0]),u=2*s[1]-.5*(e[1]+t[1]);d.quadraticCurveTo(p,u,t[0],t[1])}else d.lineTo(t[0],t[1]);return d.toString()}static getLinkTransform(e){return n.normalizeLinkType(e?.link_type)==="statemachine"?`translate(0,${n.STATE_MACHINE_TRANSLATE_Y})`:null}static normalizeBezierCurviness(e){let t=typeof e=="number"&&!Number.isNaN(e)?e:n.BEZIER_CURVINESS_DEFAULT,i=Math.round(t/n.BEZIER_CURVINESS_STEP)*n.BEZIER_CURVINESS_STEP;return Math.max(n.BEZIER_CURVINESS_MIN,Math.min(n.BEZIER_CURVINESS_MAX,i))}static getEffectiveBezierMajorAnchor(e,t=0){let i=n.normalizeBezierCurviness(e),a=typeof t=="number"&&!Number.isNaN(t)?t:0;return-i+a}static normalizeFlowchartRoundness(e){let t=typeof e=="number"&&!Number.isNaN(e)?e:n.FLOWCHART_ROUNDNESS_DEFAULT,i=Math.round(t/n.FLOWCHART_ROUNDNESS_STEP)*n.FLOWCHART_ROUNDNESS_STEP;return Math.max(n.FLOWCHART_ROUNDNESS_MIN,Math.min(n.FLOWCHART_ROUNDNESS_MAX,i))}static normalizeStateMachineCurviness(e){let t=typeof e=="number"&&!Number.isNaN(e)?e:n.STATE_MACHINE_CURVINESS_DEFAULT,i=Math.round(t/n.STATE_MACHINE_CURVINESS_STEP)*n.STATE_MACHINE_CURVINESS_STEP;return Math.max(n.STATE_MACHINE_CURVINESS_MIN,Math.min(n.STATE_MACHINE_CURVINESS_MAX,i))}static getContinuousOrientation(e,t){let i=t[0]-e[0],a=t[1]-e[1];return Math.abs(i)>=Math.abs(a)?[i>=0?1:-1,0]:[0,a>=0?1:-1]}static getBezierControlPoints(e,t,i,a,s){let d=n.sanitizeOrientation(a||n.getContinuousOrientation(e,t)),p=n.sanitizeOrientation(s||n.getContinuousOrientation(t,e)),u=n.findBezierControlPoint(e,e,t,d,p,i),g=n.findBezierControlPoint(t,t,e,p,d,i);return{sourceControlPoint:u,targetControlPoint:g,sourceOrientation:d,targetOrientation:p}}static getBezierSideSign(e,t,i,a,s){let{sourceControlPoint:d}=n.getBezierControlPoints(e,t,i,a,s),p=t[0]-e[0],u=t[1]-e[1],g=d[0]-e[0],C=d[1]-e[1],M=p*C-u*g;return Math.abs(M)<1e-4||M>0?1:-1}static getStraightPath(e,t){let i=Cp();return i.moveTo(e[0],e[1]),i.lineTo(t[0],t[1]),i.toString()}static getFlowchartPath(e,t,i,a=0){let s=t[0]-e[0],d=t[1]-e[1],p=Math.abs(s),u=Math.abs(d),g=Math.abs(s)>=Math.abs(d),C=6,M=Math.hypot(s,d)||1,x=typeof a=="number"&&!Number.isNaN(a)?a:0,b=-d/M*x,P=s/M*x;if(p<=C||u<=C)return n.getStraightPath(e,t);let k=[[e[0],e[1]]];if(g){let S=(b<0?-1:1)*Math.abs(P),O=e[0]+s/2+(S-b);k.push([O,e[1]]),k.push([O,t[1]])}else{let S=(P<0?-1:1)*Math.abs(b),O=e[1]+d/2+(S-P);k.push([e[0],O]),k.push([t[0],O])}return k.push([t[0],t[1]]),n.getRoundedPolylinePath(k,Math.abs(i))}static getRoundedPolylinePath(e,t){let i=Cp(),a=e.filter((p,u,g)=>{if(u===0)return!0;let C=g[u-1];return p[0]!==C[0]||p[1]!==C[1]});if(a.length===0)return"";if(i.moveTo(a[0][0],a[0][1]),a.length===1)return i.toString();if(t<=0){for(let p=1;p<a.length;p++){let u=a[p];i.lineTo(u[0],u[1])}return i.toString()}let s=1e-4;for(let p=1;p<a.length-1;p++){let u=a[p-1],g=a[p],C=a[p+1],M=g[0]-u[0],x=g[1]-u[1],b=C[0]-g[0],P=C[1]-g[1],k=Math.sqrt(M*M+x*x),S=Math.sqrt(b*b+P*P);if(k<s||S<s){i.lineTo(g[0],g[1]);continue}let O=M/k,A=x/k,D=b/S,F=P/S,I=O*F-A*D;if(Math.abs(I)<s){i.lineTo(g[0],g[1]);continue}let B=Math.min(t,k/2,S/2);if(B<s){i.lineTo(g[0],g[1]);continue}let le=[g[0]-O*B,g[1]-A*B],ae=[g[0]+D*B,g[1]+F*B];i.lineTo(le[0],le[1]),i.quadraticCurveTo(g[0],g[1],ae[0],ae[1])}let d=a[a.length-1];return i.lineTo(d[0],d[1]),i.toString()}static getStateMachinePath(e,t,i){let a=Cp(),s=(e[0]+t[0])/2,d=(e[1]+t[1])/2,p=n.getContinuousOrientation(e,t),u=-p[1],g=p[0],C=i+n.STATE_MACHINE_ZERO_CURVE_OFFSET,M=[s+u*C,d+g*C];return a.moveTo(e[0],e[1]),a.bezierCurveTo(M[0],M[1],M[0],M[1],t[0],t[1]),a.toString()}static getJsPlumbBezierPath(e,t,i,a,s){let{sourceControlPoint:d,targetControlPoint:p}=n.getBezierControlPoints(e,t,i,a,s),u=Cp();return u.moveTo(e[0],e[1]),u.bezierCurveTo(d[0],d[1],p[0],p[1],t[0],t[1]),u.toString()}static sanitizeOrientation(e){let t=i=>i>0?1:i<0?-1:0;return[t(e[0]),t(e[1])]}static findBezierControlPoint(e,t,i,a,s,d){let u=a[0]!==s[0]||a[1]===s[1],g=[0,0];return u?(s[0]===0?g[0]=i[0]<t[0]?e[0]+10:e[0]-10:g[0]=e[0]+d*s[0],s[1]===0?g[1]=i[1]<t[1]?e[1]+10:e[1]-10:g[1]=e[1]+d*a[1]):(a[0]===0?g[0]=t[0]<i[0]?e[0]+10:e[0]-10:g[0]=e[0]-d*a[0],a[1]===0?g[1]=t[1]<i[1]?e[1]+10:e[1]-10:g[1]=e[1]+d*s[1]),g}}return n})();var vd=(()=>{class n{cssFixer;fontFixer;selectionManager;mapSettings;themeService=f(Ni);onContextMenu=new be;draggable=new fd;static SURROUNDING_TEXT_BORDER=5;enabled=!0;constructor(e,t,i,a){this.cssFixer=e,this.fontFixer=t,this.selectionManager=i,this.mapSettings=a}applyThemeLabelColor(e){let t=this.themeService.getCanvasLabelColor();return e.replace(/fill:\s*[^;]+;?/gi,`fill: ${t};`)}getRenderedLabelX(e){let t=this.selectionManager.isSelected(e)?0:e.bezierRenderOffsetX||0;return e.label.x+t}getRenderedLabelY(e){let t=this.selectionManager.isSelected(e)?0:e.bezierRenderOffsetY||0;return e.label.y+t}setEnabled(e){this.enabled=e}draw(e){let t=this,i=e.selectAll("g.link_node_position").data(g=>{let C=g.link_style?.type===0;return[[g.source,g.nodes[0],C],[g.target,g.nodes[1],C]]}),a=i.enter().append("g").classed("link_node_position",!0),s=i.merge(a);s.attr("transform",g=>`translate(${g[0].x}, ${g[0].y})`).classed("link-hidden",g=>g[2]);let d=s.selectAll("g.interface_label_container").data(g=>this.enabled?[g[1]]:[]),p=d.enter().append("g").classed("interface_label_container",!0);p.append("rect").attr("class","interface_label_selection"),p.append("text").attr("class","interface_label noselect").attr("interface_label_id",g=>`${g.id}`);let u=d.merge(p).on("contextmenu",function(g,C){g.preventDefault(),t.onContextMenu.emit(new aM(g,C))});u.select("text.interface_label").text(g=>g.label.text).attr("style",g=>{let C=this.cssFixer.fix(g.label.style);return C=this.fontFixer.fixStyles(C),C=this.applyThemeLabelColor(C),C}).attr("x",g=>this.getRenderedLabelX(g)).attr("y",g=>this.getRenderedLabelY(g)).attr("transform",g=>{let C=this.getRenderedLabelX(g),M=this.getRenderedLabelY(g);return`rotate(${g.label.rotation}, ${C}, ${M})`}),u.select("rect.interface_label_selection").attr("visibility",g=>this.selectionManager.isSelected(g)?"visible":"hidden").attr("stroke","black").attr("stroke-dasharray","3,3").attr("stroke-width","0.5").attr("fill","none").each(function(g){let C=Lt(this),x=u.select(`text[interface_label_id="${g.id}"]`).node().getBBox(),b=2;C.attr("width",x.width+b*2),C.attr("height",x.height+b*2),C.attr("x",x.x-b),C.attr("y",x.y-b),C.attr("transform",`rotate(${g.label.rotation}, ${x.x-b}, ${x.y-b})`)}),d.exit().remove(),this.mapSettings.isReadOnly||this.draggable.call(u)}static \u0275fac=function(t){return new(t||n)(_e($l),_e(dr),_e(na),_e(Ul))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var pC=class{x;y;status;port;constructor(o,e,t,i){this.x=o,this.y=e,this.status=t,this.port=i}};var dM=(()=>{class n{mapSettingsService;static MAX_INLINE_LABELS_PARALLEL_LINKS=4;static LABEL_DISTANCE=60;static MIN_LINK_LENGTH_FOR_LABELS=180;static LABEL_HEIGHT=18;static LABEL_MIN_WIDTH=34;static LABEL_HORIZONTAL_PADDING=2;static LABEL_RADIUS=8;static LABEL_STROKE_WIDTH=3;static LABEL_FONT_SIZE=10;static LABEL_FONT_FAMILY='"Noto Sans", "DejaVu Sans", "Segoe UI", sans-serif';static LABEL_BACKGROUND_COLOR="#E2E8FF";constructor(e){this.mapSettingsService=e}draw(e){let t=this;e.each(function(i){i.isMultiplied=(i.parallelLinksCount||1)>1;let a=Lt(this),s=a.select("path"),d=t.mapSettingsService.showInterfaceLabels,p=i.link_style?.type===0,u=d&&t.mapSettingsService.integrateLinkLabelsToLinks,g=d&&t.shouldRenderTooltipOnly(i),C=[],M=s.node();if(M){let x=M.getTotalLength();if(i.source&&i.target&&(g||x>n.MIN_LINK_LENGTH_FOR_LABELS)){let b=g?Math.min(n.LABEL_DISTANCE,x/4):n.LABEL_DISTANCE,P=M.getPointAtLength(b),k=M.getPointAtLength(x-b),S=i.nodes?.[0],O=i.nodes?.[1],A=S?.label?.text||"",D=O?.label?.text||"",F=i.source.status==="started"&&S?.interfaceStatus||i.source.status,I=i.target.status==="started"&&O?.interfaceStatus||i.target.status;C=[new pC(P.x,P.y,i.suspend?"suspended":F,A),new pC(k.x,k.y,i.suspend?"suspended":I,D)]}}if(t.renderEndpointHoverTooltips(a,C,g),t.bindEndpointTooltipHover(s,a,g),a.selectAll("circle.status_started").remove(),a.selectAll("circle.status_stopped").remove(),a.selectAll("circle.status_suspended").remove(),a.selectAll("rect.status_started").remove(),a.selectAll("text.status_started_label").remove(),a.selectAll("rect.status_stopped").remove(),a.selectAll("text.status_stopped_label").remove(),a.selectAll("rect.status_suspended").remove(),a.selectAll("text.status_suspended_label").remove(),u&&!g){let x=a.selectAll("g.status_label").data(C),b=x.enter().append("g").attr("class","status_label"),P=x.merge(b).attr("transform",O=>`translate(${O.x}, ${O.y})`).classed("link-hidden",()=>p),k=P.selectAll("rect").data(O=>[O]);k.enter().append("rect").merge(k).attr("class",O=>`status_${O.status}`).attr("width",O=>t.getLabelWidth(O.port)).attr("height",n.LABEL_HEIGHT).attr("x",O=>-(t.getLabelWidth(O.port)/2)).attr("y",-n.LABEL_HEIGHT/2).attr("rx",n.LABEL_RADIUS).attr("ry",n.LABEL_RADIUS).style("fill",n.LABEL_BACKGROUND_COLOR).style("fill-opacity",1).attr("stroke",O=>t.getStatusStrokeColor(O.status)).attr("stroke-width",n.LABEL_STROKE_WIDTH),k.exit().remove();let S=P.selectAll("text").data(O=>[O]);S.enter().append("text").merge(S).attr("class",O=>`status_${O.status}_label`).text(O=>O.port||"").attr("x",0).attr("y",0).attr("dy","0em").attr("text-anchor","middle").attr("dominant-baseline","central").attr("alignment-baseline","central").attr("fill","#111111").style("font-family",n.LABEL_FONT_FAMILY).style("font-size",`${n.LABEL_FONT_SIZE}px`).style("font-weight","500"),S.exit().remove(),x.exit().remove()}else{a.selectAll("g.status_label").remove();let x=a.selectAll("circle.status_started").data(C.filter(D=>D.status==="started")),b=x.enter().append("circle");x.merge(b).attr("class","status_started").attr("cx",D=>D.x).attr("cy",D=>D.y).attr("r",6).attr("text",D=>D.port||"").attr("fill","#2ecc71").classed("link-hidden",()=>p),x.exit().remove();let P=a.selectAll("rect.status_stopped").data(C.filter(D=>D.status==="stopped")),k=P.enter().append("rect"),S=10;P.merge(k).attr("class","status_stopped").attr("x",D=>D.x-S/2).attr("y",D=>D.y-S/2).attr("width",S).attr("height",S).attr("fill","red").classed("link-hidden",()=>p),P.exit().remove();let O=a.selectAll("circle.status_suspended").data(C.filter(D=>D.status==="suspended")),A=O.enter().append("circle");O.merge(A).attr("class","status_suspended").attr("cx",D=>D.x).attr("cy",D=>D.y).attr("r",6).attr("fill","#FFFF00").classed("link-hidden",()=>p),O.exit().remove()}})}getLabelWidth(e){let t=e||"",i=n.LABEL_FONT_SIZE*.62,a=t.length*i+n.LABEL_HORIZONTAL_PADDING*2;return Math.max(n.LABEL_MIN_WIDTH,Math.ceil(a))}getStatusStrokeColor(e){return e==="started"?"#2ecc71":e==="stopped"?"red":"#FFFF00"}shouldRenderTooltipOnly(e){return(e.parallelLinksCount||1)>n.MAX_INLINE_LABELS_PARALLEL_LINKS}renderEndpointHoverTooltips(e,t,i){let a=e.selectAll("g.status_hover_tooltip").data(i?t:[]),s=a.enter().append("g").attr("class","status_hover_tooltip").attr("visibility","hidden"),d=a.merge(s).style("pointer-events","none").attr("transform",g=>`translate(${g.x}, ${g.y})`);d.raise();let p=d.selectAll("rect").data(g=>[g]);p.enter().append("rect").merge(p).attr("class","status_hover_tooltip_rect").attr("width",g=>this.getLabelWidth(g.port)).attr("height",n.LABEL_HEIGHT).attr("x",g=>-(this.getLabelWidth(g.port)/2)).attr("y",-n.LABEL_HEIGHT/2).attr("rx",n.LABEL_RADIUS).attr("ry",n.LABEL_RADIUS).style("fill",n.LABEL_BACKGROUND_COLOR).style("fill-opacity",1).attr("stroke",g=>this.getStatusStrokeColor(g.status)).attr("stroke-width",n.LABEL_STROKE_WIDTH),p.exit().remove();let u=d.selectAll("text").data(g=>[g]);u.enter().append("text").merge(u).attr("class","status_hover_tooltip_label").text(g=>g.port||"").attr("x",0).attr("y",0).attr("dy","0em").attr("text-anchor","middle").attr("dominant-baseline","central").attr("alignment-baseline","central").attr("fill","#111111").style("font-family",n.LABEL_FONT_FAMILY).style("font-size",`${n.LABEL_FONT_SIZE}px`).style("font-weight","500"),u.exit().remove(),a.exit().remove()}bindEndpointTooltipHover(e,t,i){let a=t.node(),s=a&&a.parentNode?Lt(a.parentNode):null;if(!i){e.on("mouseover.status_hover_tooltip",null),e.on("mouseout.status_hover_tooltip",null),e.attr("pointer-events",null),t.selectAll("g.status_hover_tooltip").attr("visibility","hidden");return}e.attr("pointer-events","stroke"),e.on("mouseover.status_hover_tooltip",()=>{s&&s.raise(),t.selectAll("g.status_hover_tooltip").raise().attr("visibility","visible")}).on("mouseout.status_hover_tooltip",()=>{t.selectAll("g.status_hover_tooltip").attr("visibility","hidden")});let d=e.node(),p=d?d.matches(":hover"):!1,u=t.selectAll("g.status_hover_tooltip");p&&(s&&s.raise(),u.raise()),u.attr("visibility",p?"visible":"hidden")}static \u0275fac=function(t){return new(t||n)(_e(ui))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var l_=class{endpointOrder=new Map;getEndpointOrderKey(o,e){return`${o||""}:${e}`}getEndpointOrder(o,e){return this.endpointOrder.get(this.getEndpointOrderKey(o.id,e))||0}hasDistanceBasedParallelSpacing(o){return o.parallelLinksCount>1&&typeof o.distance=="number"&&!Number.isNaN(o.distance)}getRenderEndpointOrder(o,e){return this.hasDistanceBasedParallelSpacing(o)?0:this.getEndpointOrder(o,e)}getEndpointPoint(o,e,t,i=0){let a=-e[1],s=e[0],p=t*14+i;return[o[0]+a*p,o[1]+s*p]}getFaceEndpointOrder(o,e){let t=e-(o-1)/2;return o===2?e===0?-1:1:t}buildEndpointOrder(o){this.endpointOrder.clear();let e=new Map;o.forEach(t=>{if(!t.source||!t.target||!t.nodes||t.nodes.length<2||en.normalizeLinkType(t.link_style?.link_type)!=="bezier")return;let a=[t.source.x+t.source.width/2,t.source.y+t.source.height/2],s=[t.target.x+t.target.width/2,t.target.y+t.target.height/2],d=t.nodes[0].nodeId||t.source.id,p=t.nodes[1].nodeId||t.target.id;if(d){let u=en.getContinuousOrientation(a,s),g=`${d}:${u[0]},${u[1]}`,C=-u[1],M=u[0],x=s[0]-a[0],b=s[1]-a[1],P=x*C+b*M,k=e.get(g)||[];k.push({link:t,endpointIndex:0,projection:P}),e.set(g,k)}if(p){let u=en.getContinuousOrientation(s,a),g=`${p}:${u[0]},${u[1]}`,C=-u[1],M=u[0],x=a[0]-s[0],b=a[1]-s[1],P=x*C+b*M,k=e.get(g)||[];k.push({link:t,endpointIndex:1,projection:P}),e.set(g,k)}}),e.forEach(t=>{t.sort((i,a)=>i.projection-a.projection),t.forEach((i,a)=>{let s=this.getFaceEndpointOrder(t.length,a);this.endpointOrder.set(this.getEndpointOrderKey(i.link.id,i.endpointIndex),s)})})}clearLabelRenderOffsets(o){o.nodes&&o.nodes.forEach(e=>{e.bezierRenderOffsetX=0,e.bezierRenderOffsetY=0})}applyLabelRenderOffsets(o,e,t,i,a){if(!o.nodes||o.nodes.length<2)return;let s=t[0]-e[0],d=t[1]-e[1],p=Math.hypot(s,d)||1,u=-d/p,g=s/p,C=i>=0?1:-1,M=Math.min(16,Math.max(7,7+Math.abs(a)*.03)),x=6,b=this.getRenderEndpointOrder(o,0),P=this.getRenderEndpointOrder(o,1),k=M*C+b*x,S=-M*C+P*x;o.nodes[0].bezierRenderOffsetX=u*k,o.nodes[0].bezierRenderOffsetY=g*k,o.nodes[1].bezierRenderOffsetX=u*S,o.nodes[1].bezierRenderOffsetY=g*S}getVariation(o){let e=this.getEndpointOrder(o,0),t=this.getEndpointOrder(o,1),i=(e-t)*6;return Math.round(Math.max(-24,Math.min(24,i)))}};var c4=class{link;source;target;style;bezierVariation;sourceOrientation;targetOrientation;controlOffset;constructor(o,e,t,i,a=0,s,d,p){this.link=o,this.source=e,this.target=t,this.style=i,this.bezierVariation=a,this.sourceOrientation=s,this.targetOrientation=d,this.controlOffset=p}},c_=(()=>{class n{onContextMenu=new be;bezierLayout=new l_;defaultEthernetLinkStyle={color:"#000000",width:2,type:1,link_type:en.DEFAULT_LINK_TYPE,bezier_curviness:en.BEZIER_CURVINESS_DEFAULT,flowchart_roundness:en.FLOWCHART_ROUNDNESS_DEFAULT};constructor(){}linktoEthernetLink(e){let t=en.normalizeLinkType(e.link_style?.link_type),i=[e.source.x+e.source.width/2,e.source.y+e.source.height/2],a=[e.target.x+e.target.width/2,e.target.y+e.target.height/2],s=en.getContinuousOrientation(i,a),d=en.getContinuousOrientation(a,i),p=t==="bezier"?this.bezierLayout.getVariation(e):0,u=typeof e.link_style?.color=="string"&&e.link_style.color.length>0,g=typeof e.link_style?.width=="number"&&e.link_style.width>0,C={color:u?e.link_style.color:this.defaultEthernetLinkStyle.color,width:g?e.link_style.width:this.defaultEthernetLinkStyle.width,type:e.link_style?.type!==void 0?e.link_style.type:this.defaultEthernetLinkStyle.type,link_type:t,bezier_curviness:t==="statemachine"?en.normalizeStateMachineCurviness(e.link_style?.bezier_curviness):en.normalizeBezierCurviness(e.link_style?.bezier_curviness),flowchart_roundness:en.normalizeFlowchartRoundness(e.link_style?.flowchart_roundness),control_offset:e.link_style?.control_offset},M=i,x=a;if(t==="bezier"){M=this.bezierLayout.getEndpointPoint(i,s,this.bezierLayout.getRenderEndpointOrder(e,0)),x=this.bezierLayout.getEndpointPoint(a,d,this.bezierLayout.getRenderEndpointOrder(e,1));let b=en.getEffectiveBezierMajorAnchor(C.bezier_curviness,p),P=en.getBezierSideSign(M,x,b,s,d);this.bezierLayout.applyLabelRenderOffsets(e,M,x,P,b)}else this.bezierLayout.clearLabelRenderOffsets(e);return new c4(e,M,x,C,p,s,d,C.control_offset)}draw(e){let t=e.data();this.bezierLayout.buildEndpointOrder(Array.isArray(t)?t:[]);let i=e.selectAll("path.ethernet_link").data(d=>{if(d.linkType==="ethernet"){let p=this.linktoEthernetLink(d);return p?[p]:[]}return[]}),a=i.enter().append("path").attr("class","ethernet_link");i.merge(a).on("contextmenu",(d,p)=>{let u=p;u&&this.onContextMenu.emit(new Mc(d,u))}).attr("transform",d=>en.getLinkTransform(d.style)).attr("fill","none").attr("stroke",d=>!d.style.color||d.style.color===this.defaultEthernetLinkStyle.color?"var(--gns3-canvas-link-color)":d.style.color).attr("stroke-width",d=>d.style.width).attr("stroke-dasharray",d=>en.getLinkStyle(d.style)).classed("link_hidden",d=>d.style.type===0).attr("pointer-events",d=>d.style.type===0?"stroke":null).attr("d",d=>d.style.link_type==="freeform"||d.controlOffset?en.getFreeformBezierPath(d.source,d.target,d.sourceOrientation,d.targetOrientation,d.controlOffset):en.getLinkPath(d.source,d.target,d.style,{bezierVariation:d.bezierVariation,sourceOrientation:d.sourceOrientation,targetOrientation:d.targetOrientation,flowchartDistance:typeof d.link.distance=="number"&&!Number.isNaN(d.link.distance)?d.link.distance:0}))}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var d4=class{link;source;target;style;bezierVariation;useLegacySerialPattern;sourceOrientation;targetOrientation;controlOffset;constructor(o,e,t,i,a=0,s=!1,d,p,u){this.link=o,this.source=e,this.target=t,this.style=i,this.bezierVariation=a,this.useLegacySerialPattern=s,this.sourceOrientation=d,this.targetOrientation=p,this.controlOffset=u}},d_=(()=>{class n{onContextMenu=new be;bezierLayout=new l_;defaultSerialLinkStyle={color:"#800000",width:2,type:1,link_type:en.DEFAULT_LINK_TYPE,bezier_curviness:en.BEZIER_CURVINESS_DEFAULT,flowchart_roundness:en.FLOWCHART_ROUNDNESS_DEFAULT};constructor(){}getLegacySerialPath(e,t){let i=t[0]-e[0],a=t[1]-e[1],d=Math.atan2(a,i)-Math.PI/4,p=Math.cos(d),u=Math.sin(d),g=15,C=e[0]+i/2,M=e[1]+a/2,x=[C+g*p,M+g*u],b=[C-g*p,M-g*u];return`M${e[0]},${e[1]}L${x[0]},${x[1]}L${b[0]},${b[1]}L${t[0]},${t[1]}`}linkToSerialLink(e){let t=en.normalizeLinkType(e.link_style?.link_type),i=[e.source.x+e.source.width/2,e.source.y+e.source.height/2],a=[e.target.x+e.target.width/2,e.target.y+e.target.height/2],s=en.getContinuousOrientation(i,a),d=en.getContinuousOrientation(a,i),p=t==="bezier"?this.bezierLayout.getVariation(e):0,u=typeof e.link_style?.color=="string"&&e.link_style.color.length>0,g=typeof e.link_style?.width=="number"&&e.link_style.width>0,C={color:u?e.link_style.color:this.defaultSerialLinkStyle.color,width:g?e.link_style.width:this.defaultSerialLinkStyle.width,type:e.link_style?.type!==void 0?e.link_style.type:this.defaultSerialLinkStyle.type,link_type:t,bezier_curviness:t==="statemachine"?en.normalizeStateMachineCurviness(e.link_style?.bezier_curviness):en.normalizeBezierCurviness(e.link_style?.bezier_curviness),flowchart_roundness:en.normalizeFlowchartRoundness(e.link_style?.flowchart_roundness),control_offset:e.link_style?.control_offset},M=i,x=a;if(t==="bezier"){M=this.bezierLayout.getEndpointPoint(i,s,this.bezierLayout.getRenderEndpointOrder(e,0)),x=this.bezierLayout.getEndpointPoint(a,d,this.bezierLayout.getRenderEndpointOrder(e,1));let b=en.getEffectiveBezierMajorAnchor(C.bezier_curviness,p),P=en.getBezierSideSign(M,x,b,s,d);this.bezierLayout.applyLabelRenderOffsets(e,M,x,P,b)}else this.bezierLayout.clearLabelRenderOffsets(e);return new d4(e,M,x,C,p,t===en.DEFAULT_LINK_TYPE,s,d,C.control_offset)}draw(e){let t=e.data();this.bezierLayout.buildEndpointOrder(Array.isArray(t)?t:[]);let i=e.selectAll("path.serial_link").data(d=>{if(d.linkType==="serial"){let p=this.linkToSerialLink(d);return p?[p]:[]}return[]}),a=i.enter().append("path").attr("class","serial_link");i.merge(a).on("contextmenu",(d,p)=>{let u=p;u&&this.onContextMenu.emit(new Mc(d,u))}).attr("transform",d=>en.getLinkTransform(d.style)).attr("fill","none").attr("stroke",d=>d.style.color).attr("stroke-width",d=>d.style.width).attr("stroke-dasharray",d=>en.getLinkStyle(d.style)).classed("link_hidden",d=>d.style.type===0).attr("pointer-events",d=>d.style.type===0?"stroke":null).attr("d",d=>d.useLegacySerialPattern?this.getLegacySerialPath(d.source,d.target):d.style.link_type==="freeform"||d.controlOffset?en.getFreeformBezierPath(d.source,d.target,d.sourceOrientation,d.targetOrientation,d.controlOffset):en.getLinkPath(d.source,d.target,d.style,{bezierVariation:d.bezierVariation,sourceOrientation:d.sourceOrientation,targetOrientation:d.targetOrientation,flowchartDistance:typeof d.link.distance=="number"&&!Number.isNaN(d.link.distance)?d.link.distance:0}))}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Wr=(()=>{class n{created=new be;edited=new be;interfaceDragged=new be;static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var m_=(()=>{class n{multiLinkCalculatorHelper;interfaceLabelWidget;interfaceStatusWidget;selectionManager;ethernetLinkWidget;serialLinkWidget;linksEventSource;mapLinksDataSource;markerFlashService;onContextMenu=new be;subscription;constructor(e,t,i,a,s,d,p,u,g){this.multiLinkCalculatorHelper=e,this.interfaceLabelWidget=t,this.interfaceStatusWidget=i,this.selectionManager=a,this.ethernetLinkWidget=s,this.serialLinkWidget=d,this.linksEventSource=p,this.mapLinksDataSource=u,this.markerFlashService=g,this.subscription=this.mapLinksDataSource.itemChanged.subscribe(C=>{this.updateFilterIconsVisibility(C)})}ngOnDestroy(){this.subscription&&this.subscription.unsubscribe()}updateFilterIconsVisibility(e){let t=e.show_filters_icon!==!1;Lt("svg#map").selectAll("g.link_body").filter(i=>i&&i.id===e.id).selectAll(".filter-capture-icon, .filter-icon").style("display",t?null:"none")}draw(e){let t=e.selectAll("g.link_body").data(d=>[d]),i=t.enter().append("g").attr("class","link_body"),a=t.merge(i).attr("transform",d=>{let p=this.multiLinkCalculatorHelper.linkTranslation(d.distance,d.source,d.target);return`translate (${p.dx}, ${p.dy})`});t.selectAll("g.marker-arrow-tx, g.marker-arrow-rx").remove(),t.select(".capture-icon").remove(),t.filter(d=>d.capturing&&!d.suspend&&(d.show_filters_icon===!1||!cM(d.filters))).append("g").on("contextmenu",(d,p)=>{let u=d;this.onContextMenu.emit(new Mc(u,p))}).attr("class","capture-icon").attr("transform",d=>d.link_style?.link_type==="freeform"&&d.link_style?.control_offset?`translate (${d.link_style.control_offset[0]-5}, ${d.link_style.control_offset[1]-5}) scale(0.5)`:`translate (${(d.source.x+d.target.x)/2+24}, ${(d.source.y+d.target.y)/2+24}) scale(0.5)`).attr("viewBox","0 0 20 20").append("image").attr("xlink:href","assets/resources/images/inspect.svg"),t.select(".filter-capture-icon").remove(),t.filter(d=>d.show_filters_icon!==!1&&d.capturing&&!d.suspend&&cM(d.filters)).append("g").on("contextmenu",(d,p)=>{let u=d;this.onContextMenu.emit(new Mc(u,p))}).attr("class","filter-capture-icon").attr("transform",d=>d.link_style?.link_type==="freeform"&&d.link_style?.control_offset?`translate (${d.link_style.control_offset[0]-5}, ${d.link_style.control_offset[1]-5}) scale(0.5)`:`translate (${(d.source.x+d.target.x)/2+24}, ${(d.source.y+d.target.y)/2+24}) scale(0.5)`).attr("viewBox","0 0 20 20").append("image").attr("xlink:href","assets/resources/images/filter-capture.svg"),t.select(".filter-icon").remove(),t.filter(d=>d.show_filters_icon!==!1&&!d.capturing&&!d.suspend&&cM(d.filters)).append("g").on("contextmenu",(d,p)=>{let u=d;this.onContextMenu.emit(new Mc(u,p))}).attr("class","filter-icon").attr("width","48px").attr("height","48px").attr("transform",d=>d.link_style?.link_type==="freeform"&&d.link_style?.control_offset?`translate (${d.link_style.control_offset[0]-5}, ${d.link_style.control_offset[1]-5}) scale(0.5)`:`translate (${(d.source.x+d.target.x)/2+24}, ${(d.source.y+d.target.y)/2+24}) scale(0.5)`).attr("viewBox","0 0 20 20").append("image").attr("width","48px").attr("height","48px").attr("xlink:href","assets/resources/images/filter.svg"),t.select(".pause-icon").remove(),t.filter(d=>d.suspend).append("g").on("contextmenu",(d,p)=>{let u=d;this.onContextMenu.emit(new Mc(u,p))}).attr("class","pause-icon").attr("transform",d=>d.link_style?.link_type==="freeform"&&d.link_style?.control_offset?`translate (${d.link_style.control_offset[0]-5}, ${d.link_style.control_offset[1]-5}) scale(0.5)`:`translate (${(d.source.x+d.target.x)/2+24}, ${(d.source.y+d.target.y)/2+24}) scale(0.5)`).attr("viewBox","0 0 20 20").append("image").attr("xlink:href","assets/resources/images/pause.svg"),this.serialLinkWidget.draw(a),this.ethernetLinkWidget.draw(a),a.each(d=>this.markerFlashService.redrawArrows(d.id)),a.select("path").classed("selected",d=>this.selectionManager.isSelected(d));let s=this;a.each(function(d){if(en.normalizeLinkType(d.link_style?.link_type)!=="freeform")return;let g=Lt(this).select("path");if(g.empty())return;let C=d.source.x+d.source.width/2,M=d.source.y+d.source.height/2,x=d.target.x+d.target.width/2,b=d.target.y+d.target.height/2,P=(C+x)/2,k=(M+b)/2,S={startX:0,startY:0,startOffset:[0,0]};g.attr("cursor","grab").on("mouseenter",function(){Lt(this).attr("cursor","grab")}).on("mouseleave",function(){Lt(this).attr("cursor","default")}).call(Ls().on("start",function(O){Lt(this).attr("cursor","grabbing"),S.startX=O.x,S.startY=O.y,d.link_style?.control_offset?S.startOffset=[d.link_style.control_offset[0],d.link_style.control_offset[1]]:S.startOffset=[P,k]}).on("drag",function(O,A){let D=[O.x,O.y],F=S.startX,I=S.startY,B=S.startOffset,le=D[0]-F,ae=D[1]-I,W=B[0]+le,G=B[1]+ae,ve=[C,M],Se=[x,b],pe=en.getContinuousOrientation(ve,Se),Ae=en.getContinuousOrientation(Se,ve),ue=en.getFreeformBezierPath(ve,Se,pe,Ae,[W,G]);Lt(this).attr("d",ue);let H=Lt(this.parentNode),te=H.select("g.capture-icon");te.empty()||te.attr("transform",`translate (${W-5}, ${G-5}) scale(0.5)`);let de=H.select("g.filter-capture-icon");de.empty()||de.attr("transform",`translate (${W-5}, ${G-5}) scale(0.5)`);let me=H.select("g.filter-icon");me.empty()||me.attr("transform",`translate (${W-5}, ${G-5}) scale(0.5)`);let Ie=H.select("g.pause-icon");Ie.empty()||Ie.attr("transform",`translate (${W-5}, ${G-5}) scale(0.5)`),A.link_style||(A.link_style={}),A.link_style.control_offset=[W,G]}).on("end",function(O){Lt(this).attr("cursor","grab"),s.linksEventSource.edited.next(d)}))}),this.interfaceLabelWidget.draw(a),this.interfaceStatusWidget.draw(a)}static \u0275fac=function(t){return new(t||n)(_e(mp),_e(vd),_e(dM),_e(na),_e(c_),_e(d_),_e(Wr),_e(Fs),_e(hd))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var yp=(()=>{class n{multiLinkCalculatorHelper;linkWidget;constructor(e,t){this.multiLinkCalculatorHelper=e,this.linkWidget=t}redrawLink(e,t){let i=this.selectLink(e,t),a=null;i.each(u=>{this.mergeDefinedFields(u,t),t.link_style&&(u.link_style=q(q({},u.link_style||{}),t.link_style)),a=u}),i.attr("map-source",u=>u.source?.id?u.source.id:"").attr("map-target",u=>u.target?.id?u.target.id:"");let s=this.selectRelatedLinks(e,a||t),d=s.empty()?i:s,p=d.data();Array.isArray(p)&&p.length>0&&this.multiLinkCalculatorHelper.assignDataToLinks(p),this.linkWidget.draw(d)}draw(e){let t=e.selectAll("g.link").data(s=>{if(s.links){let d=s.links.filter(p=>p.target&&p.source);return this.multiLinkCalculatorHelper.assignDataToLinks(d),d}return[]},s=>s.id),i=t.enter().append("g").attr("class","link").attr("link_id",s=>s.id).attr("map-source",s=>s.source.id).attr("map-target",s=>s.target.id),a=t.merge(i).attr("link_id",s=>s.id).attr("map-source",s=>s.source.id).attr("map-target",s=>s.target.id);this.linkWidget.draw(a),t.exit().remove()}selectLink(e,t){return e.selectAll(`g.link[link_id="${t.id}"]`)}selectRelatedLinks(e,t){let i=t.source?.id,a=t.target?.id;if(!i||!a)return this.selectLink(e,t);let s=`g.link[map-source="${i}"], g.link[map-target="${i}"], g.link[map-source="${a}"], g.link[map-target="${a}"]`;return e.selectAll(s)}mergeDefinedFields(e,t){!e||!t||Object.keys(t).forEach(i=>{let a=t[i];a!==void 0&&i!=="link_style"&&(e[i]=a)})}static \u0275fac=function(t){return new(t||n)(_e(mp),_e(m_))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var mM=class{datum;x;y;width;height;rotation};var pM=(()=>{class n{fontFixer;static MARGIN=4;constructor(e){this.fontFixer=e}draw(e){let t=e.selectAll("text.text_element").data(u=>u.element&&u.element instanceof zs?[u.element]:[]),i=t.enter().append("text").attr("class","text_element noselect"),a=t.merge(i);a.attr("style",u=>{let g=this.fontFixer.fix(u),C=[];return g.font_family&&C.push(`font-family: "${u.font_family}"`),g.font_size&&C.push(`font-size: ${u.font_size}pt`),g.font_weight&&C.push(`font-weight: ${u.font_weight}`),C.join("; ")}).attr("dominant-baseline","text-before-edge").attr("fill",u=>u.fill).attr("text-decoration",u=>u.text_decoration);let s=a.selectAll("tspan").data(u=>u.text.split(/\r?\n/)),d=s.enter().append("tspan");s.merge(d).text(u=>u).attr("xml:space","preserve").attr("x",0).attr("dy",(u,g)=>g===0?"0em":"1.4em"),s.exit().remove(),a.attr("transform",function(u){let g=this.getBBox(),C=Number(u.height),M=C>0?g.height/C:0;return`translate(0, ${isFinite(C)&&M>.5?C/2-(g.y+g.height/2):0})`}),t.exit().remove()}static \u0275fac=function(t){return new(t||n)(_e(dr))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var uM=(()=>{class n{draw(e){let t=e.selectAll("image.image_element").data(s=>s.element&&s.element instanceof ud?[s.element]:[]),i=t.enter().append("image").attr("class","image_element noselect");t.merge(i).attr("xlink:href",s=>s.data).attr("width",s=>s.width).attr("height",s=>s.height),t.exit().remove()}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Cd=(()=>{class n{static MAPPING={"25, 25":"10, 2","5, 25":"4, 2","5, 25, 25":"12, 3, 5, 3","25, 25, 5, 25, 5":"12, 3, 5, 3, 5, 3"};fix(e){if(e||e=="")return e in n.MAPPING?n.MAPPING[e]:e}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var gM=(()=>{class n{qtDasharrayFixer;constructor(e){this.qtDasharrayFixer=e}draw(e){let t=e.selectAll("rect.rect_element").data(s=>s.element&&s.element instanceof za?[s.element]:[]);t.enter().append("line").attr("class","top"),t.enter().append("line").attr("class","bottom"),t.enter().append("line").attr("class","right"),t.enter().append("line").attr("class","left");let i=t.enter().append("rect").attr("class","rect_element noselect");t.merge(i).attr("fill",s=>s.fill).attr("fill-opacity",s=>s.fill_opacity).attr("stroke",s=>s.stroke).attr("stroke-width",s=>s.stroke_width).attr("stroke-dasharray",s=>this.qtDasharrayFixer.fix(s.stroke_dasharray)).attr("width",s=>s.width).attr("height",s=>s.height).attr("rx",s=>s.rx).attr("ry",s=>s.ry),t.exit().remove()}static \u0275fac=function(t){return new(t||n)(_e(Cd))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var hM=(()=>{class n{qtDasharrayFixer;constructor(e){this.qtDasharrayFixer=e}getCurveInterpolator(e){switch(e){case"basis":return lC;case"catmullrom":return qu;case"monotone":return cC;case"none":return null;default:return qu}}draw(e){this.drawLineElements(e),this.drawCurveElements(e)}drawLineElements(e){let t=this,i=e.select("defs");i.empty()&&(i=e.append("defs"));let a=e.selectAll("line.line_element").data(C=>C.element&&C.element instanceof Ur&&C.element.drawing_type!=="freeform"?[C]:[]);a.enter().append("circle").attr("class","right"),a.enter().append("circle").attr("class","left");let s=a.enter().append("line").attr("class","line_element noselect");s.append("text").attr("class","line_text_label noselect"),a.merge(s).each(function(C){let M=C.element,x=M.stroke;M.arrow_end&&t.createOrUpdateArrowMarkerForLine(i,C.id,"end",M.stroke,M.stroke_width),M.arrow_start&&t.createOrUpdateArrowMarkerForLine(i,C.id,"start",M.stroke,M.stroke_width),Lt(this).attr("stroke",M.stroke).attr("stroke-width",M.stroke_width).attr("stroke-dasharray",t.qtDasharrayFixer.fix(M.stroke_dasharray)).attr("x1",M.x1).attr("x2",M.x2).attr("y1",M.y1).attr("y2",M.y2).attr("cursor","pointer").attr("marker-end",M.arrow_end?`url(#line-end-${C.id})`:null).attr("marker-start",M.arrow_start?`url(#line-start-${C.id})`:null).on("mouseenter",function(){let P=getComputedStyle(document.documentElement).getPropertyValue("--mat-sys-error").trim();Lt(this).attr("stroke",P),M.arrow_end&&i.select(`#line-end-${C.id} path`).attr("fill",P),M.arrow_start&&i.select(`#line-start-${C.id} path`).attr("fill",P)}).on("mouseleave",function(){Lt(this).attr("stroke",x),M.arrow_end&&i.select(`#line-end-${C.id} path`).attr("fill",x),M.arrow_start&&i.select(`#line-start-${C.id} path`).attr("fill",x)});let b=Lt(this.parentNode).select("text.line_text_label");M.text&&M.text.trim()!==""?b.text(M.text).attr("x",M.text_x).attr("y",M.text_y).attr("fill",M.text_fill).attr("font-family",M.text_font_family).attr("font-size",`${M.text_font_size}px`).attr("font-weight",M.text_font_weight).attr("visibility","visible").attr("class","line_text_label noselect"):b.attr("visibility","hidden")});let p=e.selectAll("path.line_element_freeform").data(C=>C.element&&C.element instanceof Ur&&C.element.drawing_type==="freeform"?[C]:[]);p.enter().append("circle").attr("class","right"),p.enter().append("circle").attr("class","left");let u=p.enter().append("path").attr("class","line_element_freeform noselect");u.append("text").attr("class","line_text_label noselect"),p.merge(u).each(function(C){let M=C.element;M.arrow_end&&t.createOrUpdateArrowMarkerForLine(i,C.id,"end",M.stroke,M.stroke_width),M.arrow_start&&t.createOrUpdateArrowMarkerForLine(i,C.id,"start",M.stroke,M.stroke_width);let x=[M.x1,M.y1],b=[M.x2,M.y2],P=M.control_offset||[(M.x1+M.x2)/2,(M.y1+M.y2)/2],k=en.getFreeformBezierPath(x,b,void 0,void 0,P);Lt(this).attr("d",k).attr("stroke",M.stroke).attr("stroke-width",M.stroke_width).attr("stroke-dasharray",t.qtDasharrayFixer.fix(M.stroke_dasharray)).attr("fill","none").attr("cursor","grab").attr("marker-end",M.arrow_end?`url(#line-end-${C.id})`:null).attr("marker-start",M.arrow_start?`url(#line-start-${C.id})`:null);let S=Lt(this.parentNode).select("text.line_text_label");M.text&&M.text.trim()!==""?S.text(M.text).attr("x",M.text_x).attr("y",M.text_y).attr("fill",M.text_fill).attr("font-family",M.text_font_family).attr("font-size",`${M.text_font_size}px`).attr("font-weight",M.text_font_weight).attr("visibility","visible").attr("class","line_text_label noselect"):S.attr("visibility","hidden")}),a.exit().remove(),p.exit().remove()}drawCurveElements(e){let t=this,i=e.select("defs");i.empty()&&(i=e.append("defs"));let a=e.selectAll("path.curve_element").data(u=>u.element&&u.element instanceof wr?[u]:[]);a.exit().remove();let s=a.enter().append("path").attr("class","curve_element noselect");a.merge(s).each(function(u){let g=u.element;if(g.points&&g.points.length>0){let C=g.points.map(P=>[P.x,P.y]),M=t.getCurveInterpolator(g.curve_type||"catmullrom"),x="";if(M===null){x=`M ${C[0][0]} ${C[0][1]}`;for(let P=1;P<C.length;P++)x+=` L ${C[P][0]} ${C[P][1]}`}else x=Gu().curve(M)(C)||"";g.arrow_end&&t.createOrUpdateArrowMarker(i,u.id,"end",g.stroke,g.stroke_width),g.arrow_start&&t.createOrUpdateArrowMarker(i,u.id,"start",g.stroke,g.stroke_width);let b=g.stroke;Lt(this).attr("d",x).attr("stroke",g.stroke).attr("stroke-width",g.stroke_width).attr("stroke-dasharray",t.qtDasharrayFixer.fix(g.stroke_dasharray)).attr("fill","none").attr("cursor","pointer").attr("marker-end",g.arrow_end?"url(#arrow-end-"+u.id+")":null).attr("marker-start",g.arrow_start?"url(#arrow-start-"+u.id+")":null).on("mouseenter",function(){let P=getComputedStyle(document.documentElement).getPropertyValue("--mat-sys-error").trim();Lt(this).attr("stroke",P),g.arrow_end&&i.select(`#arrow-end-${u.id} path`).attr("fill",P),g.arrow_start&&i.select(`#arrow-start-${u.id} path`).attr("fill",P)}).on("mouseleave",function(){Lt(this).attr("stroke",b),g.arrow_end&&i.select(`#arrow-end-${u.id} path`).attr("fill",b),g.arrow_start&&i.select(`#arrow-start-${u.id} path`).attr("fill",b)})}});let p=new Set(e.selectAll("path.curve_element").data().map(u=>u.id));i.selectAll('marker[id^="arrow-"]').each(function(){let u=Lt(this).attr("id");if(!u)return;let g=u.replace(/^arrow-(start|end)-/,"");p.has(g)||Lt(this).remove()})}createOrUpdateArrowMarkerForLine(e,t,i,a,s){let d=`line-${i}-${t}`,p=e.select(`marker#${d}`);p.empty()?(p=e.append("marker").attr("id",d).attr("markerWidth","4").attr("markerHeight","4").attr("refX",i==="end"?"0":"4").attr("refY","2").attr("orient","auto").attr("markerUnits","strokeWidth"),p.append("path").attr("d",i==="end"?"M0,0 L4,2 L0,4 z":"M4,0 L0,2 L4,4 z").attr("fill",a)):p.select("path").attr("fill",a)}createOrUpdateArrowMarker(e,t,i,a,s){let d=`arrow-${i}-${t}`,p=e.select(`marker#${d}`);p.empty()?(p=e.append("marker").attr("id",d).attr("markerWidth","4").attr("markerHeight","4").attr("refX",i==="end"?"0":"4").attr("refY","2").attr("orient","auto").attr("markerUnits","strokeWidth"),p.append("path").attr("d",i==="end"?"M0,0 L4,2 L0,4 z":"M4,0 L0,2 L4,4 z").attr("fill",a)):p.select("path").attr("fill",a)}static \u0275fac=function(t){return new(t||n)(_e(Cd))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var _M=(()=>{class n{qtDasharrayFixer;constructor(e){this.qtDasharrayFixer=e}draw(e){let t=e.selectAll("ellipse.ellipse_element").data(s=>s.element&&s.element instanceof Oi?[s.element]:[]);t.enter().append("line").attr("class","top"),t.enter().append("line").attr("class","bottom"),t.enter().append("line").attr("class","right"),t.enter().append("line").attr("class","left");let i=t.enter().append("ellipse").attr("class","ellipse_element noselect");t.merge(i).attr("fill",s=>s.fill).attr("fill-opacity",s=>s.fill_opacity).attr("stroke",s=>s.stroke).attr("stroke-width",s=>s.stroke_width).attr("stroke-dasharray",s=>this.qtDasharrayFixer.fix(s.stroke_dasharray)).attr("cx",s=>s.cx).attr("cy",s=>s.cy).attr("rx",s=>s.rx).attr("ry",s=>s.ry),t.exit().remove()}static \u0275fac=function(t){return new(t||n)(_e(Cd))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var B1e="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z",j1e="M18 8h-8V6c0-1.1.9-2 2-2s2 .9 2 2h2c0-2.21-1.79-4-4-4S8 3.79 8 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2z",p4="var(--gns3-lock-badge-locked-color)",VB="var(--gns3-lock-badge-unlocked-color)",u4="var(--gns3-lock-badge-outline-color)",fM=(()=>{class n{textDrawingWidget;imageDrawingWidget;rectDrawingWidget;lineDrawingWidget;ellipseDrawingWidget;selectionManager;mapSettingsService;drawingWidgets=[];constructor(e,t,i,a,s,d,p){this.textDrawingWidget=e,this.imageDrawingWidget=t,this.rectDrawingWidget=i,this.lineDrawingWidget=a,this.ellipseDrawingWidget=s,this.selectionManager=d,this.mapSettingsService=p,this.drawingWidgets=[this.textDrawingWidget,this.imageDrawingWidget,this.rectDrawingWidget,this.lineDrawingWidget,this.ellipseDrawingWidget]}draw(e){let t=e.selectAll("g.drawing_body").data(s=>[s]),i=t.enter().append("g").attr("class","drawing_body"),a=t.merge(i).attr("transform",s=>`translate(${s.x},${s.y}) rotate(${s.rotation})`);if(this.drawingWidgets.forEach(s=>{s.draw(a)}),a.select(".layer_label_wrapper").remove(),this.mapSettingsService.isLayerNumberVisible&&a.filter(s=>s.element instanceof za||s.element instanceof Oi).append("rect").attr("class","layer_label_wrapper").attr("width","26").attr("height","26").attr("x",s=>s.element?s.element.width/2-13:0).attr("y",s=>s.element?s.element.height/2-13:0).attr("fill","red"),a.select(".layer_label").remove(),this.mapSettingsService.isLayerNumberVisible&&a.filter(s=>s.element instanceof za||s.element instanceof Oi).append("text").attr("class","layer_label").text(s=>s.z).attr("x",function(s){return s.z>=100?s.element?s.element.width/2-13:0:s.z>=10?s.element?s.element.width/2-9:0:s.element.width/2-5}).attr("y",s=>s.element?s.element.height/2+5:0).attr("style",()=>{let s=[];return s.push('font-family: "Noto Sans"'),s.push("font-size: 11pt"),s.push("font-weight: bold"),s.join("; ")}).attr("fill","#ffffff"),a.select(".drawing_lock_status_badge").remove(),this.mapSettingsService.isItemLockStatusVisible){let s=a.filter(g=>g.element instanceof za||g.element instanceof Oi||g.element instanceof ud).append("g").attr("class","drawing_lock_status_badge").attr("pointer-events","none").attr("transform",g=>{if(g.element instanceof Oi){let M=g.element.cx+(g.element.rx-12)/Math.SQRT2,x=g.element.cy-(g.element.ry-12)/Math.SQRT2;return`translate(${M}, ${x})`}return`translate(${(g.element.width>0?g.element.width:60)-12}, 12)`});s.filter(g=>g.locked).append("path").attr("d",B1e).attr("transform","translate(-7.68, -7.68) scale(0.64)").attr("fill",p4).attr("stroke",u4).attr("stroke-width",1.2).attr("stroke-linejoin","round").attr("paint-order","stroke fill");let u=s.filter(g=>!g.locked).append("g").attr("transform","translate(-7.68, -7.68) scale(0.64)");u.append("path").attr("d",j1e).attr("fill",VB).attr("stroke",u4).attr("stroke-width",1.2).attr("stroke-linejoin","round").attr("paint-order","stroke fill"),u.append("circle").attr("cx",12).attr("cy",15).attr("r",2).attr("fill",u4)}a.select(".rotation-handle-stem").remove(),a.select(".rotation-handle-knob").remove(),a.select(".rotation-center-point").remove(),a.filter(s=>(s.element instanceof za||s.element instanceof Oi)&&this.selectionManager.isSelected(s)).each(function(s){let d=Lt(this),p=s.element.width+30,u=-30;d.append("circle").attr("class","rotation-center-point").attr("pointer-events","none").attr("cx",0).attr("cy",0).attr("r",5).attr("fill",VB),d.append("line").attr("class","rotation-handle-stem").attr("pointer-events","none").attr("stroke",p4).attr("stroke-width","2").attr("stroke-dasharray","4 2").attr("x1",0).attr("y1",0).attr("x2",p).attr("y2",u),d.append("circle").attr("class","rotation-handle-knob").attr("pointer-events","all").attr("cx",p).attr("cy",u).attr("r",8).attr("fill",p4).attr("cursor","grab")}),a.select("line.top").attr("stroke","transparent").attr("stroke-width","8px").attr("x1",s=>s.element instanceof Oi?s.element.cx-s.element.width/10:"0").attr("x2",s=>s.element instanceof Oi?s.element.cx+s.element.width/10:s.element.width).attr("y1","0").attr("y2","0").attr("draggable","true").attr("cursor","ns-resize"),a.select("line.bottom").attr("stroke","transparent").attr("stroke-width","8px").attr("x1",s=>s.element instanceof Oi?s.element.cx-s.element.width/10:"0").attr("x2",s=>s.element instanceof Oi?s.element.cx+s.element.width/10:s.element.width).attr("y1",s=>s.element.height).attr("y2",s=>s.element.height).attr("draggable","true").attr("cursor","ns-resize"),a.select("line.right").attr("stroke","transparent").attr("stroke-width","8px").attr("x1","0").attr("x2","0").attr("y1",s=>s.element instanceof Oi?s.element.cy-s.element.height/10:"0").attr("y2",s=>s.element instanceof Oi?s.element.cy+s.element.height/10:s.element.height).attr("draggable","true").attr("cursor","ew-resize"),a.select("line.left").attr("stroke","transparent").attr("stroke-width","8px").attr("x1",s=>s.element.width).attr("x2",s=>s.element.width).attr("y1",s=>s.element instanceof Oi?s.element.cy-s.element.height/10:"0").attr("y2",s=>s.element instanceof Oi?s.element.cy+s.element.height/10:s.element.height).attr("draggable","true").attr("cursor","ew-resize"),a.select("circle.left").attr("draggable","true").attr("fill","transparent").attr("stroke","transparent").attr("cx",s=>s.element.x1).attr("cy",s=>s.element.y1).attr("r",10).attr("cursor","move"),a.select("circle.right").attr("draggable","true").attr("fill","transparent").attr("stroke","transparent").attr("cx",s=>s.element.x2).attr("cy",s=>s.element.y2).attr("r",10).attr("cursor","move"),a.classed("drawing_selected",s=>this.selectionManager.isSelected(s))}static \u0275fac=function(t){return new(t||n)(_e(pM),_e(uM),_e(gM),_e(hM),_e(_M),_e(na),_e(ui))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var bd=(()=>{class n{drawingWidget;svgToDrawingConverter;context;mapSettings;draggable=new fd;draggingEnabled=!1;resizingFinished=new be;onContextMenu=new be;constructor(e,t,i,a){this.drawingWidget=e,this.svgToDrawingConverter=t,this.context=i,this.mapSettings=a,this.svgToDrawingConverter=new gd}redrawDrawing(e,t){this.drawingWidget.draw(this.selectDrawing(e,t))}draw(e){let t=e.selectAll("g.drawing").data(ae=>(ae.drawings.forEach(W=>{try{W.element=this.svgToDrawingConverter.convert(W.svg)}catch{}}),ae.drawings),ae=>ae.id),i=t.enter().append("g").attr("class","drawing").attr("drawing_id",ae=>ae.id).on("contextmenu",(ae,W)=>{ae.preventDefault(),this.onContextMenu.emit(new oM(ae,W))}),a=t.merge(i);this.drawingWidget.draw(a),t.exit().remove(),this.mapSettings.isReadOnly||this.draggable.call(a);let s,d,p,u,g=!1,C=Ls().on("start",(ae,W)=>{document.body.style.cursor="ns-resize",p=W.y}).on("drag",(ae,W)=>{let G=ae;g?(d=s-(G.sourceEvent.pageY-(this.context.getZeroZeroTransformationPoint().y+this.context.transformation.y)),s=G.sourceEvent.pageY-(this.context.getZeroZeroTransformationPoint().y+this.context.transformation.y),W.element.height+d<0?(g=!1,s=p,W.element.height=Math.abs(W.element.height+G.dy)):(W.y=G.sourceEvent.pageY-(this.context.getZeroZeroTransformationPoint().y+this.context.transformation.y),W.element.height+=d,W.element instanceof Oi&&(W.element.cy=W.element.cy+d/2<0?1:W.element.cy+=d/2,W.element.ry=W.element.ry+d/2<0?1:W.element.ry+=d/2))):W.element.height+G.dy<0?(g=!0,s=p,W.element.height=Math.abs(W.element.height+G.dy)):(W.element.height+=G.dy,W.element instanceof Oi&&(W.element.cy=W.element.cy+G.dy/2<0?1:W.element.cy+=G.dy/2,W.element.ry=W.element.ry+G.dy/2<0?1:W.element.ry+=G.dy/2)),this.redrawDrawing(e,W)}).on("end",(ae,W)=>{document.body.style.cursor="initial",this.resizingFinished.emit(this.createResizingEvent(W))}),M=Ls().on("start",(ae,W)=>{s=ae.sourceEvent.pageY-(this.context.getZeroZeroTransformationPoint().y+this.context.transformation.y),u=s+W.element.height,document.body.style.cursor="ns-resize"}).on("drag",(ae,W)=>{let G=ae;g?W.element.height+G.dy<0?(g=!1,s=u,W.element.height=Math.abs(W.element.height+G.dy)):(W.element.height+=G.dy,W.element instanceof Oi&&(W.element.cy=W.element.cy+G.dy/2<0?1:W.element.cy+=G.dy/2,W.element.ry=W.element.ry+G.dy/2<0?1:W.element.ry+=G.dy/2)):(d=s-(G.sourceEvent.pageY-(this.context.getZeroZeroTransformationPoint().y+this.context.transformation.y)),s=G.sourceEvent.pageY-(this.context.getZeroZeroTransformationPoint().y+this.context.transformation.y),W.element.height+d<0?(s=u,g=!0,W.element.height=Math.abs(W.element.height+G.dy)):(W.y=G.sourceEvent.pageY-(this.context.getZeroZeroTransformationPoint().y+this.context.transformation.y),W.element.height+=d,W.element instanceof Oi&&(W.element.cy=W.element.cy+d/2<0?1:W.element.cy+=d/2,W.element.ry=W.element.ry+d/2<0?1:W.element.ry+=d/2))),this.redrawDrawing(e,W)}).on("end",(ae,W)=>{document.body.style.cursor="initial",this.resizingFinished.emit(this.createResizingEvent(W))}),x,b,P,k,S=!1,O=Ls().on("start",(ae,W)=>{x=ae.sourceEvent.pageX-(this.context.getZeroZeroTransformationPoint().x+this.context.transformation.x),k=x+W.element.width,document.body.style.cursor="ew-resize"}).on("drag",(ae,W)=>{let G=ae;S?W.element.width+G.dx<0?(x=k,S=!1,W.element.width=Math.abs(W.element.width+G.dx)):(W.element instanceof Oi&&(W.element.cx=W.element.cx+G.dx/2<0?1:W.element.cx+=G.dx/2,W.element.rx=W.element.rx+G.dx/2<0?1:W.element.rx+=G.dx/2),W.element.width=W.element.width+G.dx<0?1:W.element.width+=G.dx):(b=x-(G.sourceEvent.pageX-(this.context.getZeroZeroTransformationPoint().x+this.context.transformation.x)),x=G.sourceEvent.pageX-(this.context.getZeroZeroTransformationPoint().x+this.context.transformation.x),W.element.width+b<0?(x=k,S=!0,W.element.width=Math.abs(W.element.width+G.dx)):(W.x=G.sourceEvent.pageX-(this.context.getZeroZeroTransformationPoint().x+this.context.transformation.x),W.element.width+=b,W.element instanceof Oi&&(W.element.cx=W.element.cx+b/2<0?1:W.element.cx+=b/2,W.element.rx=W.element.rx+b/2<0?1:W.element.rx+=b/2))),this.redrawDrawing(e,W)}).on("end",(ae,W)=>{document.body.style.cursor="initial",this.resizingFinished.emit(this.createResizingEvent(W))}),A=Ls().on("start",(ae,W)=>{document.body.style.cursor="ew-resize",P=W.x}).on("drag",(ae,W)=>{let G=ae;S?(b=x-(G.sourceEvent.pageX-(this.context.getZeroZeroTransformationPoint().x+this.context.transformation.x)),x=G.sourceEvent.pageX-(this.context.getZeroZeroTransformationPoint().x+this.context.transformation.x),W.element.width+b<0?(x=P,S=!1,W.element.width=Math.abs(W.element.width+G.dx)):(W.x=G.sourceEvent.pageX-(this.context.getZeroZeroTransformationPoint().x+this.context.transformation.x),W.element.width+=b,W.element instanceof Oi&&(W.element.cx=W.element.cx+b/2<0?1:W.element.cx+=b/2,W.element.rx=W.element.rx+b/2<0?1:W.element.rx+=b/2))):W.element.width+G.dx<0?(x=P,S=!0,W.element.width=Math.abs(W.element.width+G.dx)):(W.element instanceof Oi&&(W.element.cx=W.element.cx+G.dx/2<0?1:W.element.cx+=G.dx/2,W.element.rx=W.element.rx+G.dx/2<0?1:W.element.rx+=G.dx/2),W.element.width=W.element.width+G.dx<0?1:W.element.width+=G.dx),this.redrawDrawing(e,W)}).on("end",(ae,W)=>{document.body.style.cursor="initial",this.resizingFinished.emit(this.createResizingEvent(W))}),D=Ls().on("start",()=>{document.body.style.cursor="move"}).on("drag",(ae,W)=>{let G=ae;W.element.width+=G.dx,W.element.height+=G.dy,W.element.x2+=G.dx,W.element.y2+=G.dy,this.redrawDrawing(e,W)}).on("end",(ae,W)=>{document.body.style.cursor="initial",this.resizingFinished.emit(this.createResizingEvent(W))}),F=Ls().on("start",()=>{document.body.style.cursor="move"}).on("drag",(ae,W)=>{let G=ae;W.element.width+=G.dx,W.element.height+=G.dy,W.element.x1+=G.dx,W.element.y1+=G.dy,this.redrawDrawing(e,W)}).on("end",(ae,W)=>{document.body.style.cursor="initial",this.resizingFinished.emit(this.createResizingEvent(W))});a.select("line.bottom").call(C),a.select("line.top").call(M),a.select("line.right").call(O),a.select("line.left").call(A),a.select("circle.right").call(D),a.select("circle.left").call(F),a.each(ae=>{if(ae.element instanceof Ur&&ae.element.drawing_type==="freeform"){let W=ae.element,G=e.select(`g.drawing[drawing_id="${ae.id}"] path.line_element_freeform`);if(!G.empty()){let ve={startX:0,startY:0,startOffset:[0,0]};G.call(Ls().on("start",Se=>{if(document.body.style.cursor="grabbing",ve.startX=Se.x,ve.startY=Se.y,W.control_offset)ve.startOffset=[W.control_offset[0],W.control_offset[1]];else{let pe=(W.x1+W.x2)/2,Ae=(W.y1+W.y2)/2;ve.startOffset=[pe,Ae]}}).on("drag",Se=>{let pe=[Se.x,Se.y],Ae=ve.startX,ue=ve.startY,H=ve.startOffset,te=pe[0]-Ae,de=pe[1]-ue,me=H[0]+te,Ie=H[1]+de;W.control_offset=[me,Ie];let $e=[W.x1,W.y1],tt=[W.x2,W.y2],et=en.getFreeformBezierPath($e,tt,void 0,void 0,[me,Ie]);G.attr("d",et),this.redrawDrawing(e,ae)}).on("end",Se=>{document.body.style.cursor="initial",this.resizingFinished.emit(this.createResizingEvent(ae))}))}}});let I=0,B=0,le=Ls().on("start",(ae,W)=>{document.body.style.cursor="grabbing";let G=ae.sourceEvent.pageX-(this.context.getZeroZeroTransformationPoint().x+this.context.transformation.x),ve=ae.sourceEvent.pageY-(this.context.getZeroZeroTransformationPoint().y+this.context.transformation.y);I=Math.atan2(ve-W.y,G-W.x)*(180/Math.PI),B=W.rotation||0}).on("drag",(ae,W)=>{let G=ae.sourceEvent.pageX-(this.context.getZeroZeroTransformationPoint().x+this.context.transformation.x),ve=ae.sourceEvent.pageY-(this.context.getZeroZeroTransformationPoint().y+this.context.transformation.y),pe=Math.atan2(ve-W.y,G-W.x)*(180/Math.PI)-I;pe>180&&(pe-=360),pe<-180&&(pe+=360);let Ae=B+pe;for(;Ae>360;)Ae-=360;for(;Ae<-359;)Ae+=360;W.rotation=Math.round(Ae),this.redrawDrawing(e,W)}).on("end",(ae,W)=>{document.body.style.cursor="initial";let G=this.createResizingEvent(W);G.rotation=W.rotation,this.resizingFinished.emit(G)});a.select("circle.rotation-handle-knob").call(le)}createResizingEvent(e){let t=new mM;return t.x=e.x,t.y=e.y,t.width=e.element.width,t.height=e.element.height,t.datum=e,t}selectDrawing(e,t){return e.selectAll(`g.drawing[drawing_id="${t.id}"]`)}static \u0275fac=function(t){return new(t||n)(_e(fM),_e(gd),_e(zo),_e(Ul))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var vM=(()=>{class n{linksWidget;nodesWidget;drawingsWidget;constructor(e,t,i){this.linksWidget=e,this.nodesWidget=t,this.drawingsWidget=i}draw(e,t){let i=e.selectAll("g.layer").data(t,g=>g.index.toString()),a=i.enter().append("g").attr("class","layer");a.append("g").attr("class","links"),a.append("g").attr("class","nodes"),a.append("g").attr("class","drawings");let s=i.merge(a);s.attr("data-index",g=>g.index);let d=s.select("g.links"),p=s.select("g.nodes"),u=s.select("g.drawings");i.exit().remove(),this.linksWidget.draw(d),this.nodesWidget.draw(p),this.drawingsWidget.draw(u)}static \u0275fac=function(t){return new(t||n)(_e(yp),_e(xp),_e(bd))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var CM=(()=>{class n{nodesWidget;drawingLineTool;selectionTool;movingTool;layersWidget;layersManager;selectionManager;constructor(e,t,i,a,s,d,p){this.nodesWidget=e,this.drawingLineTool=t,this.selectionTool=i,this.movingTool=a,this.layersWidget=s,this.layersManager=d,this.selectionManager=p}getNodesWidget(){return this.nodesWidget}getDrawingLineTool(){return this.drawingLineTool}getSelectionTool(){return this.selectionTool}connect(e,t){this.drawingLineTool.connect(e,t)}canvasTransform(e){let t=e.getZeroZeroTransformationPoint().x+e.transformation.x,i=e.getZeroZeroTransformationPoint().y+e.transformation.y,a=e.transformation.k;return`translate(${t}, ${i}) scale(${a})`}draw(e,t){e.attr("width",t.size.width).attr("height",t.size.height);let i=e.selectAll("g.canvas").data([t]),a=i.enter().append("g").attr("class","canvas");i.merge(a).attr("transform",s=>this.canvasTransform(s)),this.layersWidget.draw(i,this.layersManager.getLayersList()),this.drawingLineTool.draw(e,t),this.selectionTool.draw(e,t),this.movingTool.draw(e,t)}updateSelectionHighlights(e){let t=e.select("g.canvas"),i=e.select("defs");t.selectAll("g.node_body").classed("selected",p=>this.selectionManager.isSelected(p)),t.selectAll("g.link_body").classed("selected",p=>this.selectionManager.isSelected(p));let a=new Set(this.selectionManager.getSelected().filter(p=>p instanceof cs).map(p=>p.id));t.selectAll("rect.label_selection").attr("visibility",p=>this.selectionManager.isSelected(p)||a.has(p.nodeId)?"visible":"hidden");let s=t.selectAll("g.drawing_body");s.classed("drawing_selected",p=>this.selectionManager.isSelected(p));let d=getComputedStyle(document.documentElement).getPropertyValue("--mat-sys-error").trim();s.each(function(p,u,g){let C=g[u],M=p.element&&this.selectionManager.isSelected(p);if(Lt(C).selectAll("path.curve_element").classed("selected",()=>this.selectionManager.isSelected(p)),p.element instanceof wr){let b=p.element,P=b.stroke||getComputedStyle(document.documentElement).getPropertyValue("--gns3-canvas-link-color").trim(),k=this.selectionManager.isSelected(p);if(b.arrow_end){let S=i.select(`#arrow-end-${p.id} path`);S.empty()||S.attr("fill",k?d:P)}if(b.arrow_start){let S=i.select(`#arrow-start-${p.id} path`);S.empty()||S.attr("fill",k?d:P)}}}.bind(this))}disconnect(e){e.empty&&!e.empty()&&e.selectAll("*").remove()}static \u0275fac=function(t){return new(t||n)(_e(xp),_e(s_),_e(vp),_e(i_),_e(vM),_e(dp),_e(na))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Ri=(()=>{class n{httpController;mapSettingsService;constructor(e,t){this.httpController=e,this.mapSettingsService=t}createLink(e,t,i,a,s,d,p,u,g){let C={nodes:[{node_id:t.node_id,port_number:i.port_number,adapter_number:i.adapter_number,label:{rotation:0,style:"font-size: 10; font-family: Verdana",text:i.short_name,x:d,y:p}},{node_id:a.node_id,port_number:s.port_number,adapter_number:s.adapter_number,label:{rotation:0,style:"font-size: 10; font-family: Verdana",text:s.short_name,x:u,y:g}}]};return this.mapSettingsService.hasDefaultLinkStyle()&&(C.link_style=this.mapSettingsService.getDefaultLinkStyle()),this.httpController.post(e,`/projects/${t.project_id}/links`,C)}getLink(e,t,i){return this.httpController.get(e,`/projects/${t}/links/${i}`)}deleteLink(e,t){return this.httpController.delete(e,`/projects/${t.project_id}/links/${t.link_id}`)}updateLink(e,t){let i={};return t.nodes!==void 0&&(i.nodes=t.nodes),t.filters!==void 0&&(i.filters=t.filters),t.suspend!==void 0&&(i.suspend=t.suspend),t.show_filters_icon!==void 0&&(i.show_filters_icon=t.show_filters_icon),this.httpController.put(e,`/projects/${t.project_id}/links/${t.link_id}`,i)}updateLinkStyle(e,t){return this.httpController.put(e,`/projects/${t.project_id}/links/${t.link_id}`,{link_style:t.link_style})}getAvailableFilters(e,t){return this.httpController.get(e,`/projects/${t.project_id}/links/${t.link_id}/available_filters`)}updateNodes(e,t,i){let a=i.map(s=>({node_id:s.node_id,port_number:s.port_number,adapter_number:s.adapter_number,label:{rotation:s.label.rotation,style:s.label.style,text:s.label.text,x:s.label.x,y:s.label.y}}));return this.httpController.put(e,`/projects/${t.project_id}/links/${t.link_id}`,{nodes:a})}startCaptureOnLink(e,t,i){return this.httpController.post(e,`/projects/${t.project_id}/links/${t.link_id}/capture/start`,i)}stopCaptureOnLink(e,t){return this.httpController.post(e,`/projects/${t.project_id}/links/${t.link_id}/capture/stop`,{})}restartWiresharkCapture(e,t){return this.httpController.post(e,`/projects/${t.project_id}/links/${t.link_id}/capture/wireshark/restart`,{})}resetLink(e,t){return this.httpController.post(e,`/projects/${t.project_id}/links/${t.link_id}/reset`,{})}streamPcap(e,t){return this.httpController.get(e,`/projects/${t.project_id}/links/${t.link_id}/capture/stream`)}downloadPcap(e,t){return this.httpController.getBlob(e,`/projects/${t.project_id}/links/${t.link_id}/capture/file`)}static \u0275fac=function(t){return new(t||n)(_e(sn),_e(ui))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var ia=(()=>{class n{dragged=new be;resized=new be;selected=new be;pointToAddSelected=new be;saved=new be;drawingCompleted=new be;textAdded=new be;textEdited=new be;textSaved=new be;static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var W1e=["temporaryTextElement"],BB=(()=>{class n{temporaryTextElement=ln("temporaryTextElement");svg=ee(void 0);controller=ee(void 0);leftPosition=z("0px");topPosition=z("0px");innerText=z("");editingDrawingId;editedElement;editedLink;editedNode;mapListener;textListener;textAddingSubscription;addingFinished=new be;drawingsEventSource=f(ia);toolsService=f(Ll);context=f(zo);renderer=f(qi);mapScaleService=f(br);linkService=f(Ri);linksDataSource=f(so);nodesDataSource=f(Xn);selectionManager=f(na);fontFixer=f(dr);ngOnInit(){this.textAddingSubscription=this.toolsService.isTextAddingToolActivated.subscribe(e=>{e?this.activateTextAdding():this.deactivateTextAdding()}),this.activateTextEditingForDrawings(),this.activateTextEditingForNodeLabels()}activateTextAdding(){let e=t=>{let i=this.context.getZeroZeroTransformationPoint().x,a=this.context.getZeroZeroTransformationPoint().y,s=this.context.transformation.x,d=this.context.transformation.y,p=this.context.transformation.k,u=(t.pageX-(i+s))/p,g=(t.pageY-(a+d))/p,C=u*p+i+s,M=g*p+a+d;this.leftPosition.set(C.toString()+"px"),this.topPosition.set(M.toString()+"px");let x=this.temporaryTextElement();this.renderer.setStyle(x.nativeElement,"display","initial"),this.renderer.setStyle(x.nativeElement,"transform",`scale(${this.mapScaleService.getScale()})`),x.nativeElement.focus(),document.documentElement.style.cursor="default";let b=()=>{let P=this.temporaryTextElement();this.drawingsEventSource.textAdded.emit(new nM(P.nativeElement.innerText.replace(/\n$/,""),u,g)),this.deactivateTextAdding(),this.innerText.set(""),P.nativeElement.innerText="",P.nativeElement.removeEventListener("focusout",this.textListener),this.renderer.setStyle(P.nativeElement,"display","none")};this.textListener=b,x.nativeElement.addEventListener("focusout",this.textListener)};this.deactivateTextAdding(),this.mapListener=e,this.svg().addEventListener("click",this.mapListener)}deactivateTextAdding(){this.svg().removeEventListener("click",this.mapListener)}activateTextEditingForNodeLabels(){let e=this,t=Lt(this.svg());t.selectAll("g.interface_label_container").select("text.interface_label").on("dblclick",function(i,a){e.selectionManager.setSelected([]);let s=e.temporaryTextElement();e.renderer.setStyle(s.nativeElement,"display","initial"),e.renderer.setStyle(s.nativeElement,"transform",`scale(${e.mapScaleService.getScale()})`),e.editedLink=a,Lt(i.currentTarget).attr("visibility","hidden"),Lt(i.currentTarget).classed("editingMode",!0),e.editedNode=e.nodesDataSource.get(a.nodeId),e.editedLink=a;let d=(a.label.originalX+e.editedNode.x-1)*e.context.transformation.k+e.context.getZeroZeroTransformationPoint().x+e.context.transformation.x,p=(a.label.originalY+e.editedNode.y+4)*e.context.transformation.k+e.context.getZeroZeroTransformationPoint().y+e.context.transformation.y;e.leftPosition.set(d.toString()+"px"),e.topPosition.set(p.toString()+"px"),s.nativeElement.innerText=a.label.text;let u=[];for(let M of a.label.style.split(";"))u.push({property:M.split(": ")[0],value:M.split(": ")[1]});let g={font_family:u.find(M=>M.property==="font-family")?u.find(M=>M.property==="font-family").value:"TypeWriter",font_size:u.find(M=>M.property==="font-size")?Number(u.find(M=>M.property==="font-size").value):10,font_weight:u.find(M=>M.property==="font-weight")?u.find(M=>M.property==="font-weight").value:"normal"};g=e.fontFixer.fix(g),e.renderer.setStyle(s.nativeElement,"color",u.find(M=>M.property==="fill")?u.find(M=>M.property==="fill").value:"#000000"),e.renderer.setStyle(s.nativeElement,"font-family",g.font_family),e.renderer.setStyle(s.nativeElement,"font-size",`${g.font_size}pt`),e.renderer.setStyle(s.nativeElement,"font-weight",g.font_weight);let C=()=>{let M=e.temporaryTextElement().nativeElement.innerText,x=e.linksDataSource.get(e.editedLink.linkId);x.nodes.find(b=>b.node_id===e.editedNode.node_id).label.text=M,e.linkService.updateLink(e.controller(),x).subscribe(b=>{t.selectAll("text.editingMode").attr("visibility","visible").classed("editingMode",!1),e.innerText.set(""),s.nativeElement.innerText="",s.nativeElement.removeEventListener("focusout",e.textListener),e.clearStyle(),e.renderer.setStyle(s.nativeElement,"display","none")})};e.textListener=C,s.nativeElement.addEventListener("focusout",e.textListener),s.nativeElement.focus()})}activateTextEditingForDrawings(){let e=this,t=Lt(this.svg());t.selectAll("text.text_element").on("dblclick",function(i,a){let s=e.temporaryTextElement();e.renderer.setStyle(s.nativeElement,"display","initial"),e.renderer.setStyle(s.nativeElement,"transform",`scale(${e.mapScaleService.getScale()})`),e.editedElement=a;let d=i.currentTarget;Lt(d).attr("visibility","hidden"),Lt(d).classed("editingMode",!0),e.editingDrawingId=d.parentElement.parentElement.getAttribute("drawing_id");var p=d.parentElement.getAttribute("transform").split(/\(|\)/),u=Number(p[1].split(/,/)[0])*e.context.transformation.k+e.context.getZeroZeroTransformationPoint().x+e.context.transformation.x,g=d.getAttribute("transform"),C=0;if(g){var M=g.match(/translate\(0,\s*([^)]+)\)/);M&&(C=parseFloat(M[1])||0)}var x=(Number(p[1].split(/,/)[1])+C)*e.context.transformation.k+e.context.getZeroZeroTransformationPoint().y+e.context.transformation.y;e.leftPosition.set(u.toString()+"px"),e.topPosition.set(x.toString()+"px"),s.nativeElement.innerText=a.text,e.renderer.setStyle(s.nativeElement,"color",a.fill),e.renderer.setStyle(s.nativeElement,"font-family",a.font_family),e.renderer.setStyle(s.nativeElement,"font-size",`${a.font_size}pt`),e.renderer.setStyle(s.nativeElement,"font-weight",a.font_weight);let b=()=>{let P=e.temporaryTextElement().nativeElement.innerText;e.drawingsEventSource.textEdited.emit(new iM(e.editingDrawingId,P.replace(/\n$/,""),e.editedElement)),t.selectAll("text.editingMode").attr("visibility","visible").classed("editingMode",!1),e.innerText.set(""),s.nativeElement.innerText="",s.nativeElement.removeEventListener("focusout",e.textListener),e.clearStyle(),e.renderer.setStyle(s.nativeElement,"display","none")};e.textListener=b,s.nativeElement.addEventListener("focusout",e.textListener),s.nativeElement.focus()})}ngOnDestroy(){this.textAddingSubscription.unsubscribe()}clearStyle(){let e=this.temporaryTextElement();this.renderer.setStyle(e.nativeElement,"color","#000000"),this.renderer.setStyle(e.nativeElement,"font-family","Noto Sans"),this.renderer.setStyle(e.nativeElement,"font-size","11pt"),this.renderer.setStyle(e.nativeElement,"font-weight","bold")}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-text-editor"]],viewQuery:function(t,i){t&1&&Bn(i.temporaryTextElement,W1e,5),t&2&&jn()},inputs:{svg:[1,"svg"],controller:[1,"controller"]},decls:3,vars:5,consts:[["temporaryTextElement",""],["id","temporaryElement","contenteditable","true",1,"temporaryElement"]],template:function(t,i){t&1&&(ii(0,"div",1,0),c(2),Si()),t&2&&(Tt("top",i.topPosition())("left",i.leftPosition()),m(2),X(" ",i.innerText(),`
|
||
`))},styles:[".temporaryElement[_ngcontent-%COMP%]{padding-left:4px;width:fit-content;position:absolute;z-index:99;font-family:Noto Sans,sans-serif;font-size:11pt;font-weight:700;color:var(--mat-sys-on-surface);vertical-align:top;line-height:1.2;transform-origin:top left}"],changeDetection:0})}return n})();var jB=(()=>{class n{svg=ee(void 0);mapListener;drawingSelected;drawingsEventSource=f(ia);context=f(zo);ngOnInit(){this.drawingSelected=this.drawingsEventSource.selected.subscribe(e=>{e===""?this.deactivate():this.activate()})}activate(){let e=t=>{let i=(t.pageX-(this.context.getZeroZeroTransformationPoint().x+this.context.transformation.x))/this.context.transformation.k,a=(t.pageY-(this.context.getZeroZeroTransformationPoint().y+this.context.transformation.y))/this.context.transformation.k;this.drawingsEventSource.pointToAddSelected.emit(new eM(i,a)),this.deactivate()};this.deactivate(),this.mapListener=e,this.svg().addEventListener("click",this.mapListener)}deactivate(){this.svg().removeEventListener("click",this.mapListener)}ngOnDestroy(){this.drawingSelected.unsubscribe()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-drawing-adding"]],inputs:{svg:[1,"svg"]},decls:0,vars:0,template:function(t,i){},encapsulation:2,changeDetection:0})}return n})();var Ui=(()=>{class n extends hm{getItemKey(e){return e.drawing_id}static \u0275fac=(()=>{let e;return function(i){return(e||(e=yi(n)))(i||n)}})();static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Wi=(()=>{class n{httpController;svgToDrawingConverter;constructor(e,t){this.httpController=e,this.svgToDrawingConverter=t}add(e,t,i,a,s){return this.httpController.post(e,`/projects/${t}/drawings`,{svg:s,x:Math.round(i),y:Math.round(a),z:1})}duplicate(e,t,i){return this.httpController.post(e,`/projects/${t}/drawings`,{svg:i.svg,rotation:i.rotation,x:i.x+10,y:i.y+10,z:i.z})}updatePosition(e,t,i,a,s){let d=Math.round(a),p=Math.round(s);return t.snap_to_grid&&(i.element=this.svgToDrawingConverter.convert(i.svg),d=Math.round((d+i.element.width/2)/t.drawing_grid_size)*t.drawing_grid_size,p=Math.round((p+i.element.height/2)/t.drawing_grid_size)*t.drawing_grid_size,d=Math.round(d-i.element.width/2),p=Math.round(p-i.element.height/2)),this.httpController.put(e,`/projects/${i.project_id}/drawings/${i.drawing_id}`,{x:d,y:p})}updateSizeAndPosition(e,t,i,a,s){return this.httpController.put(e,`/projects/${t.project_id}/drawings/${t.drawing_id}`,{svg:s,x:Math.round(i),y:Math.round(a)})}updateText(e,t,i){return this.httpController.put(e,`/projects/${t.project_id}/drawings/${t.drawing_id}`,{svg:i,x:Math.round(t.x),y:Math.round(t.y),z:t.z})}update(e,t){return this.httpController.put(e,`/projects/${t.project_id}/drawings/${t.drawing_id}`,{locked:t.locked,svg:t.svg,rotation:t.rotation,x:Math.round(t.x),y:Math.round(t.y),z:t.z})}delete(e,t){return this.httpController.delete(e,`/projects/${t.project_id}/drawings/${t.drawing_id}`)}lockAllNodes(e,t){return this.httpController.post(e,`/projects/${t.project_id}/lock`,{})}unLockAllNodes(e,t){return this.httpController.post(e,`/projects/${t.project_id}/unlock`,{})}static \u0275fac=function(t){return new(t||n)(_e(sn),_e(gd))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var $B=(()=>{class n{svg=ee(void 0);controller=ee(void 0);project=ee(void 0);isDrawing=!1;points=[];drawingSelected;svgSelection;canvasGroup;previewPath;drawingsEventSource=f(ia);context=f(zo);drawingsDataSource=f(Ui);drawingService=f(Wi);toolsService=f(Ll);toasterService=f(re);ngOnInit(){this.svgSelection=Lt(this.svg()),this.canvasGroup=this.svgSelection.select("g.canvas"),this.drawingSelected=this.drawingsEventSource.selected.subscribe(e=>{e==="curve"?this.activate():this.deactivate()})}activate(){let e=this;this.toolsService.selectionToolActivation(!1);let t=s=>{s.preventDefault(),s.stopPropagation();let d=e.getCanvasCoordinates(s);e.isDrawing=!0,e.points=[{x:d[0],y:d[1]}],e.createPreviewPath(),document.addEventListener("mousemove",i,{passive:!1}),document.addEventListener("mouseup",a,{passive:!1})},i=s=>{if(!e.isDrawing)return;s.preventDefault();let d=e.getCanvasCoordinates(s);e.points.push({x:d[0],y:d[1]}),e.updatePreviewPath()},a=s=>{e.isDrawing&&(s.preventDefault(),e.isDrawing=!1,document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",a),e.points.length>1&&e.createCurveDrawing(),e.removePreviewPath(),e.drawingsEventSource.drawingCompleted.emit("curve"))};this.svg()._curveDrawingListener=t,this.svg().addEventListener("mousedown",t)}deactivate(){this.toolsService.selectionToolActivation(!0);let e=this.svg()._curveDrawingListener;e&&(this.svg().removeEventListener("mousedown",e),delete this.svg()._curveDrawingListener),this.removePreviewPath(),this.isDrawing=!1,this.points=[]}getCanvasCoordinates(e){let t=this.canvasGroup.node(),i=this.context.transformation,a=this.context.getZeroZeroTransformationPoint(),s=(e.pageX-(a.x+i.x))/i.k,d=(e.pageY-(a.y+i.y))/i.k;return[s,d]}createPreviewPath(){this.canvasGroup.select("g.curve-preview").node()||this.canvasGroup.append("g").attr("class","curve-preview");let e=this.canvasGroup.select("g.curve-preview");this.previewPath=e.append("path").attr("stroke","var(--gns3-canvas-link-color)").attr("stroke-width","2").attr("fill","none").attr("stroke-dasharray","5,5")}updatePreviewPath(){if(!this.previewPath||this.points.length<2)return;let e=`M ${this.points[0].x} ${this.points[0].y}`;for(let t=1;t<this.points.length;t++)e+=` L ${this.points[t].x} ${this.points[t].y}`;this.previewPath.attr("d",e)}removePreviewPath(){this.previewPath&&(this.previewPath.remove(),this.previewPath=null),this.canvasGroup.select("g.curve-preview").remove()}createCurveDrawing(){let e=this.points.map(x=>x.x),t=this.points.map(x=>x.y),i=Math.min(...e),a=Math.max(...e),s=Math.min(...t),d=Math.max(...t),p=a-i,u=d-s,g=new wr;g.points=this.points.map(x=>({x:x.x-i,y:x.y-s}));let C=getComputedStyle(document.documentElement).getPropertyValue("--gns3-canvas-link-color").trim()||"var(--gns3-canvas-link-color)";g.stroke=C,g.stroke_width=3,g.stroke_dasharray="none",g.curve_type="none",g.arrow_start=!1,g.arrow_end=!1,g.width=p,g.height=u;let M=this.convertCurveToSvg(g);this.drawingService.add(this.controller(),this.project().project_id,i,s,M).subscribe({next:x=>{this.drawingsDataSource.add(x),this.toasterService.success("Curve created.")},error:x=>{let b=x.error?.message||x.message||"Failed to create curve";this.toasterService.error(b)}})}convertCurveToSvg(e){let t="";if(e.points.length>0){t=`M ${e.points[0].x} ${e.points[0].y}`;for(let i=1;i<e.points.length;i++)t+=` L ${e.points[i].x} ${e.points[i].y}`}return`<svg xmlns="http://www.w3.org/2000/svg" width="${e.width}" height="${e.height}">
|
||
<path d="${t}" stroke="${e.stroke}" stroke-width="${e.stroke_width}"
|
||
fill="none" stroke-dasharray="${e.stroke_dasharray}"
|
||
data-curve-type="none"
|
||
data-arrow-start="${e.arrow_start}"
|
||
data-arrow-end="${e.arrow_end}" />
|
||
</svg>`}ngOnDestroy(){this.deactivate(),this.drawingSelected.unsubscribe()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-curve-drawing"]],inputs:{svg:[1,"svg"],controller:[1,"controller"],project:[1,"project"]},decls:0,vars:0,template:function(t,i){},encapsulation:2,changeDetection:0})}return n})();var q1e=["*"],HB=(()=>{class n{resizingFinished;drawingsWidget=f(bd);drawingsEventSource=f(ia);ngOnInit(){this.resizingFinished=this.drawingsWidget.resizingFinished.subscribe(e=>{this.drawingsEventSource.resized.emit(new Jw(e.datum,e.x,e.y,e.width,e.height,e.rotation))})}ngOnDestroy(){this.resizingFinished.unsubscribe()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-drawing-resizing"]],ngContentSelectors:q1e,decls:1,vars:0,template:function(t,i){t&1&&(pi(),Zt(0))},encapsulation:2,changeDetection:0})}return n})();var bM=(()=>{class n{inRectangle(e,t,i){return e.x<=t&&t<e.x+e.width&&e.y<=i&&i<e.y+e.height}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var UB=(()=>{class n{onSelection;selectionEventSource=f(o_);graphDataManager=f(pp);inRectangleHelper=f(bM);selectionManager=f(na);cd=f(oe);ngOnInit(){this.onSelection=this.selectionEventSource.selected.subscribe(e=>{let t=this.graphDataManager.getNodes().filter(C=>this.inRectangleHelper.inRectangle(e,C.x,C.y)),i=this.graphDataManager.getLinks().filter(C=>this.inRectangleHelper.inRectangle(e,C.x,C.y)),a=this.graphDataManager.getDrawings().filter(C=>this.inRectangleHelper.inRectangle(e,C.x,C.y)),s=this.graphDataManager.getNodes().filter(C=>{if(C.label===void 0)return!1;let M=C.x+C.label.x,x=C.y+C.label.y;return this.inRectangleHelper.inRectangle(e,M,x)}).map(C=>C.label),d=this.graphDataManager.getLinks().filter(C=>{if(C.source===void 0||C.nodes.length!=2||C.nodes[0].label===void 0)return!1;let M=C.source.x+C.nodes[0].label.x,x=C.source.y+C.nodes[0].label.y;return this.inRectangleHelper.inRectangle(e,M,x)}).map(C=>C.nodes[0]),p=this.graphDataManager.getLinks().filter(C=>{if(C.target===void 0||C.nodes.length!=2||C.nodes[1].label===void 0)return!1;let M=C.target.x+C.nodes[1].label.x,x=C.target.y+C.nodes[1].label.y;return this.inRectangleHelper.inRectangle(e,M,x)}).map(C=>C.nodes[1]),u=[...d,...p],g=[...t,...i,...a,...s,...u];this.selectionManager.setSelected(g),this.cd.markForCheck()})}ngOnDestroy(){this.onSelection.unsubscribe()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-selection-control"]],decls:0,vars:0,template:function(t,i){},encapsulation:2,changeDetection:0})}return n})();var WB=(()=>{class n{onSelected;onUnselected;selectionManager=f(na);mapChangeDetectorRef=f(Wl);ngOnInit(){this.onSelected=this.selectionManager.selected.subscribe(()=>{this.mapChangeDetectorRef.detectSelectionChanges()}),this.onUnselected=this.selectionManager.unselected.subscribe(()=>{this.mapChangeDetectorRef.detectSelectionChanges()})}ngOnDestroy(){this.onSelected.unsubscribe(),this.onUnselected.unsubscribe()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-selection-select"]],decls:0,vars:0,template:function(t,i){},encapsulation:2,changeDetection:0})}return n})();var GB=(()=>{class n{start;drag;end;mapSettingsSubscription;isMapLocked=!1;svg;nodesWidget=f(xp);drawingsWidget=f(bd);linksWidget=f(yp);labelWidget=f(bp);interfaceWidget=f(vd);selectionManager=f(na);nodesEventSource=f(ql);drawingsEventSource=f(ia);graphDataManager=f(pp);linksEventSource=f(Wr);mapSettingsService=f(ui);ngOnInit(){let e=Lt(this.svg);this.mapSettingsSubscription=this.mapSettingsService.isMapLocked.subscribe(t=>{this.isMapLocked=t}),this.start=ro(this.nodesWidget.draggable.start,this.drawingsWidget.draggable.start,this.labelWidget.draggable.start,this.interfaceWidget.draggable.start).subscribe(t=>{let i=this.selectionManager.getSelected();t.datum instanceof cs&&i.filter(a=>a instanceof cs&&a.id===t.datum.id).length===0&&this.selectionManager.setSelected([t.datum]),t.datum instanceof Hr&&i.filter(a=>a instanceof Hr&&a.id===t.datum.id).length===0&&this.selectionManager.setSelected([t.datum]),t.datum instanceof Cc&&i.filter(a=>a instanceof Cc&&a.id===t.datum.id).length===0&&this.selectionManager.setSelected([t.datum]),t.datum instanceof Jd&&i.filter(a=>a instanceof Jd&&a.id===t.datum.id).length===0&&this.selectionManager.setSelected([t.datum])}),this.drag=ro(this.nodesWidget.draggable.drag,this.drawingsWidget.draggable.drag,this.labelWidget.draggable.drag,this.interfaceWidget.draggable.drag).subscribe(t=>{if(!this.isMapLocked){let i=this.selectionManager.getSelected(),a=i.filter(b=>b instanceof cs),s=a.filter(b=>b.locked),d=a.filter(b=>!b.locked);d.forEach(b=>{this.graphDataManager.markDragging(b.id),b.x+=t.dx,b.y+=t.dy,this.nodesWidget.updateNodePosition(e,b),this.graphDataManager.getLinks().filter(k=>k.target!==void 0&&k.target.id===b.id||k.source!==void 0&&k.source.id===b.id).forEach(k=>{this.linksWidget.redrawLink(e,k)})}),i.filter(b=>b instanceof Hr).filter(b=>!b.locked).forEach(b=>{this.graphDataManager.markDragging(b.id),b.x+=t.dx,b.y+=t.dy,this.drawingsWidget.redrawDrawing(e,b)}),i.filter(b=>b instanceof Cc).filter(b=>s.filter(P=>P.id===b.nodeId).length===0).forEach(b=>{if(d.filter(S=>S.id===b.nodeId).length>0)return;let k=this.graphDataManager.getNodes().filter(S=>S.id===b.nodeId)[0];b.x+=t.dx,b.y+=t.dy,k.label.x=b.x,k.label.y=b.y,this.labelWidget.redrawLabel(e,b)}),i.filter(b=>b instanceof Jd).filter(b=>s.filter(P=>P.id===b.nodeId).length===0).forEach(b=>{if(d.filter(S=>S.id===b.nodeId).length>0)return;let k=this.graphDataManager.getLinks().filter(S=>S.nodes[0].id===b.id||S.nodes[1].id===b.id)[0];k.nodes[0].id===b.id&&(k.nodes[0].label.x+=t.dx,k.nodes[0].label.y+=t.dy),k.nodes[1].id===b.id&&(k.nodes[1].label.x+=t.dx,k.nodes[1].label.y+=t.dy),this.linksWidget.redrawLink(e,k)})}}),this.end=ro(this.nodesWidget.draggable.end,this.drawingsWidget.draggable.end,this.labelWidget.draggable.end,this.interfaceWidget.draggable.end).subscribe(t=>{if(!this.isMapLocked){let i=this.selectionManager.getSelected(),a=i.filter(b=>b instanceof cs),s=a.filter(b=>b.locked),d=a.filter(b=>!b.locked);d.forEach(b=>{this.graphDataManager.unmarkDragging(b.id),this.nodesEventSource.dragged.emit(new Qu(b,t.dx,t.dy))}),i.filter(b=>b instanceof Hr).filter(b=>!b.locked).forEach(b=>{this.graphDataManager.unmarkDragging(b.id),this.drawingsEventSource.dragged.emit(new Qu(b,t.dx,t.dy))}),i.filter(b=>b instanceof Cc).filter(b=>s.filter(P=>P.id===b.nodeId).length===0).forEach(b=>{d.filter(k=>k.id===b.nodeId).length>0||this.nodesEventSource.labelDragged.emit(new Qu(b,t.dx,t.dy))}),i.filter(b=>b instanceof Jd).filter(b=>s.filter(P=>P.id===b.nodeId).length===0).forEach(b=>{d.filter(k=>k.id===b.nodeId).length>0||this.linksEventSource.interfaceDragged.emit(new Qu(b,t.dx,t.dy))})}})}ngOnDestroy(){this.start.unsubscribe(),this.drag.unsubscribe(),this.end.unsubscribe(),this.mapSettingsSubscription.unsubscribe()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-draggable-selection"]],inputs:{svg:"svg"},decls:0,vars:0,template:function(t,i){},encapsulation:2,changeDetection:0})}return n})();var qB=(()=>{class n{linkEditedSubscription;svg=ee(void 0);controller=ee(void 0);linksWidget=f(yp);linksEventSource=f(Wr);linksDataSource=f(so);linkService=f(Ri);ngOnInit(){let e=Lt(this.svg());this.linkEditedSubscription=this.linksEventSource.edited.subscribe(t=>{this.linksWidget.redrawLink(e,t);let i=this.controller();if(i&&t.link_style?.control_offset!==void 0){let a=this.linksDataSource.get(t.id);a&&(a.link_style=q({},t.link_style),this.linkService.updateLinkStyle(i,a).subscribe({error:()=>{}}))}})}ngOnDestroy(){this.linkEditedSubscription.unsubscribe()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-link-editing"]],inputs:{svg:[1,"svg"],controller:[1,"controller"]},decls:0,vars:0,template:function(t,i){},encapsulation:2,changeDetection:0})}return n})();var wp=(()=>{class n{movingModeState=new be;static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var KB=(()=>{class n{element;movingEventSource;context;gridAnchor;mouseupListener=null;mousemoveListener=null;movingModeState;activated=!1;isDragging=!1;constructor(e,t,i,a){this.element=e,this.movingEventSource=t,this.context=i,this.gridAnchor=a}project;ngOnInit(){this.movingModeState=this.movingEventSource.movingModeState.subscribe(e=>{this.activated=e,e||this.removelisteners()})}ngOnDestroy(){this.movingModeState.unsubscribe(),this.removelisteners()}onMouseDown(e){this.activated&&!this.isDragging&&(this.isDragging=!0,this.mousemoveListener=t=>{Lt(this.element.nativeElement).selectAll("g.canvas").data([this.context]).attr("transform",()=>{this.context.transformation.x=this.context.transformation.x+t.movementX,this.context.transformation.y=this.context.transformation.y+t.movementY;let s=this.context.getZeroZeroTransformationPoint().x+this.context.transformation.x,d=this.context.getZeroZeroTransformationPoint().y+this.context.transformation.y,p=this.context.transformation.k;return`translate(${s}, ${d}) scale(${p})`}),this.gridAnchor.apply(this.element.nativeElement,this.context,this.project)},this.mouseupListener=t=>{this.isDragging=!1,this.removelisteners()},this.element.nativeElement.addEventListener("mousemove",this.mousemoveListener),document.addEventListener("mouseup",this.mouseupListener))}removelisteners(){this.mousemoveListener&&(this.element.nativeElement.removeEventListener("mousemove",this.mousemoveListener),this.mousemoveListener=null),this.mouseupListener&&(document.removeEventListener("mouseup",this.mouseupListener),this.mouseupListener=null),this.isDragging=!1}static \u0275fac=function(t){return new(t||n)(Mt(Kt),Mt(wp),Mt(zo),Mt(up))};static \u0275dir=yt({type:n,selectors:[["","appMovingCanvas",""]],hostBindings:function(t,i){t&1&&_("mousedown",function(s){return i.onMouseDown(s)})},inputs:{project:"project"}})}return n})();var XB=(()=>{class n{element;renderer;movingEventSource;context;mapsScaleService;gridAnchor;wheelListener;movingModeState;constructor(e,t,i,a,s,d){this.element=e,this.renderer=t,this.movingEventSource=i,this.context=a,this.mapsScaleService=s,this.gridAnchor=d}project;ngOnInit(){this.renderer.setStyle(this.element.nativeElement,"touch-action","none"),this.renderer.setStyle(this.element.nativeElement,"-ms-touch-action","none"),this.movingModeState=this.movingEventSource.movingModeState.subscribe(e=>{e?this.addListener():this.removeListener()})}ngOnDestroy(){this.movingModeState.unsubscribe()}addListener(){this.wheelListener=e=>{e.stopPropagation(),e.preventDefault();let t=e.deltaY;t=e.deltaMode===0?t/100:t/3,Lt(this.element.nativeElement).selectAll("g.canvas").data([this.context]).attr("transform",()=>{let s=this.context.transformation.k;if(!s||isNaN(s))return;let d=Math.min(br.MAX_SCALE,Math.max(br.MIN_SCALE,s*Math.exp(-t/10))),p=Na(e,this.element.nativeElement),u=this.context.getZeroZeroTransformationPoint(),g=u.x+this.context.transformation.x,C=u.y+this.context.transformation.y,M=(p[0]-g)/s,x=(p[1]-C)/s;this.context.transformation.k=d,this.context.transformation.x+=M*(s-d),this.context.transformation.y+=x*(s-d);let b=u.x+this.context.transformation.x,P=u.y+this.context.transformation.y;return this.mapsScaleService.setScale(d),`translate(${b}, ${P}) scale(${d})`}),this.gridAnchor.apply(this.element.nativeElement,this.context,this.project)},this.element.nativeElement.addEventListener("wheel",this.wheelListener,{passive:!1})}removeListener(){this.element.nativeElement.removeEventListener("wheel",this.wheelListener)}static \u0275fac=function(t){return new(t||n)(Mt(Kt),Mt(qi),Mt(wp),Mt(zo),Mt(br),Mt(up))};static \u0275dir=yt({type:n,selectors:[["","appZoomingCanvas",""]],inputs:{project:"project"}})}return n})();var Q1e=["svg"],K1e=["textEditor"];function X1e(n,o){n&1&&(Mi(),r(0,"defs")(1,"pattern",7),L(2,"path",8),l(),r(3,"pattern",9),L(4,"path",10),l()(),L(5,"rect",11)(6,"rect",12))}var p_=(()=>{class n{nodes=ee([]);links=ee([]);drawings=ee([]);symbols=ee([]);project=ee(void 0);controller=ee(void 0);width=ee(1500);height=ee(600);svgRef=ln("svg");textEditor=ln("textEditor");parentNativeElement;svg;onChangesDetected;subscriptions=[];drawLinkTool;rafId=null;scaleRafId=null;pendingGated=!0;settings={show_interface_labels:!0};gridVisibility=z(0);graphDataManager=f(pp);layersManager=f(dp);context=f(zo);mapChangeDetectorRef=f(Wl);canvasSizeDetector=f(Ty);mapSettings=f(Ul);element=f(Kt);interfaceLabelWidget=f(vd);selectionToolWidget=f(vp);movingToolWidget=f(i_);graphLayout=f(CM);toolsService=f(Ll);mapScaleService=f(br);mapSettingsService=f(ui);gridAnchor=f(up);constructor(){this.parentNativeElement=this.element.nativeElement,Vn(()=>{this.project()&&this.mapChangeDetectorRef.hasBeenDrawn&&this.mapChangeDetectorRef.detectChanges()}),Vn(()=>{this.gridVisibility()&&this.mapChangeDetectorRef.hasBeenDrawn&&this.applyGridAnchor()}),Vn(()=>{this.nodes(),this.links(),this.drawings(),this.mapChangeDetectorRef.hasBeenDrawn&&this.scheduleRedraw(!0)})}set showInterfaceLabels(e){e&&!this.mapSettingsService.integrateLinkLabelsToLinks?(this.settings.show_interface_labels=!0,this.interfaceLabelWidget.setEnabled(!0)):(this.settings.show_interface_labels=!1,this.interfaceLabelWidget.setEnabled(!1)),this.mapChangeDetectorRef.detectChanges()}set readonly(e){this.mapSettings.isReadOnly=e}resize(e){if(e)this.svg.attr("height",window.innerHeight+window.scrollY-16);else{let t=window.innerHeight-16;this.height()>t?this.svg.attr("height",this.height()):this.svg.attr("height",t)}}ngOnChanges(e){(e.width&&!e.width.isFirstChange()||e.height&&!e.height.isFirstChange()||e.symbols&&!e.symbols.isFirstChange())&&this.svg.empty&&!this.svg.empty()&&(e.symbols&&this.onSymbolsChange(e.symbols),this.changeLayout())}ngOnInit(){this.parentNativeElement!==null&&this.createGraph(this.parentNativeElement),this.onChangesDetected=this.mapChangeDetectorRef.changesDetected.subscribe(()=>{this.mapChangeDetectorRef.hasBeenDrawn&&this.scheduleRedraw()}),this.subscriptions.push(this.mapScaleService.scaleChangeEmitter.subscribe(()=>{this.mapChangeDetectorRef.hasBeenDrawn&&this.scaleRafId===null&&(this.scaleRafId=requestAnimationFrame(()=>{this.scaleRafId=null,this.applyScaleChange()}))})),this.subscriptions.push(this.mapChangeDetectorRef.selectionChangesDetected.subscribe(()=>{this.mapChangeDetectorRef.hasBeenDrawn&&this.graphLayout.updateSelectionHighlights(this.svg)})),this.subscriptions.push(this.toolsService.isMovingToolActivated.subscribe(i=>{this.movingToolWidget.setEnabled(i),this.movingToolWidget.draw(this.svg,this.context)})),this.subscriptions.push(this.toolsService.isSelectionToolActivated.subscribe(i=>{this.selectionToolWidget.setEnabled(i),this.selectionToolWidget.draw(this.svg,this.context)})),this.subscriptions.push(this.toolsService.isDrawLinkToolActivated.subscribe(i=>{this.drawLinkTool=i})),this.gridVisibility.set(localStorage.getItem("gridVisibility")==="true"?1:0),this.mapSettingsService.isScrollDisabled.subscribe(i=>this.resize(i));let e=null,t=null;this.subscriptions.push(this.graphLayout.getNodesWidget().draggable.start.subscribe(()=>{let i=this.context.getZeroZeroTransformationPoint();e=i.x,t=i.y})),this.subscriptions.push(this.graphLayout.getNodesWidget().draggable.drag.subscribe(()=>{let i=this.getSize();this.context.centerX=e,this.context.centerY=t,(i.width>this.context.size.width||i.height>this.context.size.height)&&(this.context.size=i,this.svg.attr("width",i.width).attr("height",i.height))})),this.subscriptions.push(this.graphLayout.getNodesWidget().draggable.end.subscribe(()=>{let i=e??this.context.size.width/2,a=t??this.context.size.height/2,s=this.getSize(),d=this.context.centerX??s.width/2,p=this.context.centerY??s.height/2;window.scrollBy(d-i,p-a),this.context.size=s,this.svg.attr("width",s.width).attr("height",s.height),this.graphLayout.draw(this.svg,this.context),this.applyGridAnchor(),e=null,t=null}))}ngOnDestroy(){this.rafId!==null&&(cancelAnimationFrame(this.rafId),this.rafId=null),this.scaleRafId!==null&&(cancelAnimationFrame(this.scaleRafId),this.scaleRafId=null),this.graphLayout.disconnect(this.svg),this.onChangesDetected.unsubscribe(),this.subscriptions.forEach(e=>{e.unsubscribe()})}applyMapSettingsChanges(){this.scheduleRedraw()}scheduleRedraw(e=!1){if(this.rafId!==null){e||(this.pendingGated=!1);return}this.pendingGated=e,this.rafId=requestAnimationFrame(()=>{this.rafId=null;let t=this.pendingGated;this.pendingGated=!0,this.redraw(t)})}createGraph(e){let t=Lt(e);this.svg=t.select("svg"),this.context.transformation.x=0,this.context.transformation.y=0,this.context.transformation.k=1,this.context.centerX=null,this.context.centerY=null,this.mapScaleService.resetScaleState(),this.layersManager.clear(),this.graphDataManager.reset(),this.context.size=new Gd(0,0),this.graphLayout.connect(this.svg,this.context),this.graphLayout.draw(this.svg,this.context),this.mapChangeDetectorRef.hasBeenDrawn=!0}applyScaleChange(){let e=this.context.centerX,t=this.context.centerY,i=this.getSize();this.context.centerX=e??this.context.centerX,this.context.centerY=t??this.context.centerY,this.context.size=i,this.svg.attr("width",i.width).attr("height",i.height),this.svg.selectAll("g.canvas").data([this.context]).attr("transform",this.graphLayout.canvasTransform(this.context)),this.applyGridAnchor()}getSize(){let e=document.documentElement.clientWidth,t=document.documentElement.clientHeight,i=this.graphDataManager.getNodes(),a=this.graphDataManager.getDrawings();if(i.length===0&&a.length===0)return this.context.centerX=null,this.context.centerY=null,new Gd(e,t);let s=this.context.transformation.k,d=30,p=0,u=0,g=0,C=0;for(let O of i){let A=(O.width||60)*s,D=(O.height||60)*s,F=O.width?O.x*s:(O.x-30)*s,I=O.width?O.y*s:(O.y-30)*s;p=Math.min(p,F),u=Math.max(u,F+A),g=Math.min(g,I),C=Math.max(C,I+D)}for(let O of a){let A=(O.element?.width??0)*s,D=(O.element?.height??0)*s;p=Math.min(p,O.x*s),u=Math.max(u,O.x*s+A),g=Math.min(g,O.y*s),C=Math.max(C,O.y*s+D)}let M=e/2,x=t/2,b=Math.max(M,-p+d),P=Math.max(M,u+d),k=Math.max(x,-g+d),S=Math.max(x,C+d);return this.context.centerX=b,this.context.centerY=k,this.canvasSizeDetector.getOptimalSize(b+P,k+S)}changeLayout(){this.scheduleRedraw()}onSymbolsChange(e){this.graphDataManager.setSymbols(this.symbols())}redraw(e=!1){let t=qd();if(ky(t,this.graphDataManager.setNodes(this.nodes())),ky(t,this.graphDataManager.setLinks(this.links())),ky(t,this.graphDataManager.setDrawings(this.drawings())),e&&$L(t))return;let i=this.context.centerX,a=this.context.centerY;if(this.context.size=this.getSize(),this.context.centerX=i??this.context.centerX,this.context.centerY=a??this.context.centerY,this.applyGridAnchor(),e&&!qL(this.svg,t,this.graphDataManager,this.context)){this.textEditor().activateTextEditingForDrawings(),this.textEditor().activateTextEditingForNodeLabels(),this.mapSettingsService.mapRenderedEmitter.emit(!0);return}this.graphLayout.draw(this.svg,this.context),this.textEditor().activateTextEditingForDrawings(),this.textEditor().activateTextEditingForNodeLabels(),this.mapSettingsService.mapRenderedEmitter.emit(!0)}applyGridAnchor(){let e=this.svg?.node();e&&this.gridAnchor.apply(e,this.context,this.project())}onResize(e){this.reanchorOrigin(),this.changeLayout()}reanchorOrigin(){if(!this.mapChangeDetectorRef.hasBeenDrawn)return;let e=this.context.centerX??this.context.size.width/2,t=this.context.centerY??this.context.size.height/2,i=this.getSize(),a=this.context.centerX??i.width/2,s=this.context.centerY??i.height/2;window.scrollBy(a-e,s-t),this.context.size=i,this.svg.attr("width",i.width).attr("height",i.height)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-d3-map"]],viewQuery:function(t,i){t&1&&Bn(i.svgRef,Q1e,5)(i.textEditor,K1e,5),t&2&&jn(2)},hostBindings:function(t,i){t&1&&_("resize",function(s){return i.onResize(s)},So)},inputs:{nodes:[1,"nodes"],links:[1,"links"],drawings:[1,"drawings"],symbols:[1,"symbols"],project:[1,"project"],controller:[1,"controller"],width:[1,"width"],height:[1,"height"],showInterfaceLabels:[0,"show-interface-labels","showInterfaceLabels"],readonly:"readonly"},features:[Nn],decls:12,vars:11,consts:[["svg",""],["textEditor",""],["id","map","preserveAspectRatio","none","appMovingCanvas","","appZoomingCanvas","",1,"map",3,"project"],[3,"svg"],[3,"svg","controller","project"],[3,"controller","svg"],[3,"svg","controller"],["id","gridDrawing","patternUnits","userSpaceOnUse"],["fill","none","stroke","var(--gns3-grid-drawing-color)","stroke-width","1"],["id","gridNode","patternUnits","userSpaceOnUse"],["fill","none","stroke","var(--gns3-grid-node-color)","stroke-width","1"],["width","100%","height","100%","fill","url(#gridDrawing)"],["width","100%","height","100%","fill","url(#gridNode)"]],template:function(t,i){if(t&1&&(Mi(),r(0,"svg",2,0),T(2,X1e,7,0),l(),Xa(),L(3,"app-drawing-adding",3)(4,"app-curve-drawing",4)(5,"app-drawing-resizing")(6,"app-selection-control")(7,"app-selection-select")(8,"app-text-editor",5,1)(10,"app-draggable-selection",3)(11,"app-link-editing",6)),t&2){let a=Te(1);v("project",i.project()),m(2),E(i.gridVisibility()>0&&i.project()?2:-1),m(),v("svg",a),m(),v("svg",a)("controller",i.controller())("project",i.project()),m(4),v("controller",i.controller())("svg",a),m(2),v("svg",a),m(),v("svg",a)("controller",i.controller())}},dependencies:[BB,jB,$B,HB,UB,WB,GB,qB,KB,XB],styles:["svg[_ngcontent-%COMP%]{display:block}"],changeDetection:0})}return n})();var xM=class{drawing_id;project_id;rotation;svg;locked;x;y;z;element};var yM=(()=>{class n{constructor(){}convert(e){let t=new xM;return t.drawing_id=e.id,t.project_id=e.projectId,t.rotation=e.rotation,t.svg=e.svg,t.locked=e.locked,t.x=e.x,t.y=e.y,t.z=e.z,t.element=e.element,t}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var wM=class{rotation;style;text;x;y};var xd=(()=>{class n{fontBBoxCalculator;cssFixer;fontFixer;constructor(e,t,i){this.fontBBoxCalculator=e,this.cssFixer=t,this.fontFixer=i}convert(e){let t=this.cssFixer.fix(e.style),i=this.fontFixer.fixStyles(t),a=this.fontBBoxCalculator.calculate(e.text,i),s=new wM;return s.rotation=e.rotation,s.style=e.style,s.text=e.text,s.x=e.x,s.y=e.y,s.x!==null&&(s.x-=3),s.y!==null&&(s.y-=a.height),s}static \u0275fac=function(t){return new(t||n)(_e(ld),_e($l),_e(dr))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var MM=class{node_id;adapter_number;port_number;label};var u_=(()=>{class n{mapLabelToLabel;constructor(e){this.mapLabelToLabel=e}convert(e){let t=new MM;return t.node_id=e.nodeId,t.adapter_number=e.adapterNumber,t.port_number=e.portNumber,t.label=this.mapLabelToLabel.convert(e.label),t}static \u0275fac=function(t){return new(t||n)(_e(xd))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var SM=class{capture_file_name;capture_file_path;capturing;filters;link_id;link_type;nodes;project_id;suspend;link_style;kernel_datapath;show_filters_icon;wireshark;markers;interface_statuses;distance;length;source;target;x;y};var kM=(()=>{class n{mapLinkNodeToMapLinkNode;constructor(e){this.mapLinkNodeToMapLinkNode=e}convert(e){let t=new SM;return t.link_id=e.id,t.capture_file_name=e.captureFileName,t.capture_file_path=e.captureFilePath,t.capturing=e.capturing,t.filters=e.filters,t.link_type=e.linkType,t.link_style=e.link_style,t.nodes=e.nodes.map(i=>this.mapLinkNodeToMapLinkNode.convert(i)),t.project_id=e.projectId,t.suspend=e.suspend,t.show_filters_icon=e.show_filters_icon,t.wireshark=e.wireshark,t}static \u0275fac=function(t){return new(t||n)(_e(u_))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var PM=class{aux;command_line;compute_id;console;console_auto_start;console_host;console_type;custom_adapters;ethernet_adapters;serial_adapters;first_port_name;height;label;locked;name;node_directory;node_id;node_type;port_name_format;port_segment_size;ports;project_id;properties;status;symbol;symbol_url;tags;usage;width;x;y;z;aux_type;netmiko_device_type;template_id;default_username;default_password;missing_image;missing_images};var TM=class{adapter_number;adapter_type;link_type;mac_address;name;port_number;short_name;available};var g_=(()=>{class n{convert(e){let t=new TM;return t.adapter_number=e.adapterNumber,t.link_type=e.linkType,t.mac_address=e.macAddress,t.name=e.name,t.port_number=e.portNumber,t.short_name=e.shortName,t}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Mp=(()=>{class n{mapLabelToLabel;mapPortToPort;constructor(e,t){this.mapLabelToLabel=e,this.mapPortToPort=t}convert(e){let t=new PM;return t.node_id=e.id,t.aux=e.aux,t.aux_type=e.auxType,t.command_line=e.commandLine,t.compute_id=e.computeId,t.console=e.console,t.console_host=e.consoleHost,t.console_type=e.consoleType,t.first_port_name=e.firstPortName,t.height=e.height,t.label=e.label?this.mapLabelToLabel.convert(e.label):void 0,t.locked=e.locked,t.name=e.name,t.node_directory=e.nodeDirectory,t.node_type=e.nodeType,t.port_name_format=e.portNameFormat,t.port_segment_size=e.portSegmentSize,t.ports=e.ports?e.ports.map(i=>this.mapPortToPort.convert(i)):[],t.properties=e.properties,t.project_id=e.projectId,t.status=e.status,t.symbol=e.symbol,t.symbol_url=e.symbolUrl,t.usage=e.usage,t.width=e.width,t.x=e.x,t.y=e.y,t.z=e.z,t.missing_image=e.missingImage,t.missing_images=e.missingImages,t}static \u0275fac=function(t){return new(t||n)(_e(xd),_e(g_))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var h_=(()=>{class n{nodesDataSource;linksDataSource;drawingsDataSource;markerRegistryService;markerFlashService;nodeNotificationEmitter=new be;linkNotificationEmitter=new be;drawingNotificationEmitter=new be;infoNotificationEmitter=new be;warningNotificationEmitter=new be;errorNotificationEmitter=new be;interfaceStatuses=new Map;constructor(e,t,i,a,s){this.nodesDataSource=e,this.linksDataSource=t,this.drawingsDataSource=i,this.markerRegistryService=a,this.markerFlashService=s}handleMessage(e){if(e.action==="node.interface_status"){let t=e.event,i=this.normalizeInterfaceStatus(t.status);if(!i)return;this.interfaceStatuses.set(this.interfaceStatusKey(t),i);for(let a of this.linksDataSource.getItems()){let s=(a.nodes||[]).findIndex(d=>d.node_id===t.node_id&&d.adapter_number===t.adapter_number&&d.port_number===t.port_number);s>=0&&a.interface_statuses?.[s]!==i&&(this.setInterfaceStatus(a,s,i),this.linksDataSource.update(a))}}if(e.action==="node.updated"&&(this.nodesDataSource.update(e.event),this.nodeNotificationEmitter.emit(e)),e.action==="node.created"&&(this.nodesDataSource.add(e.event),this.nodeNotificationEmitter.emit(e)),e.action==="node.deleted"){let t=e.event;this.nodesDataSource.remove(t);for(let i of this.interfaceStatuses.keys())i.startsWith(`${t.project_id}:${t.node_id}:`)&&this.interfaceStatuses.delete(i);this.nodeNotificationEmitter.emit(e)}if(e.action==="link.created"){let t=e.event;this.applyInterfaceStatusesToLink(t),this.linksDataSource.add(t),this.markerRegistryService.reconcileLink(t),this.linkNotificationEmitter.emit(e)}if(e.action==="link.updated"){let t=e.event;this.applyInterfaceStatusesToLink(t),this.linksDataSource.update(t),this.markerRegistryService.reconcileLink(t),this.linkNotificationEmitter.emit(e)}if(e.action==="link.deleted"){let t=e.event;this.linksDataSource.remove(t),this.markerRegistryService.removeLink(t.link_id),this.markerFlashService.evictLink(t.link_id),this.linkNotificationEmitter.emit(e)}if(e.action==="marker.match"){let t=e.event,a=this.linksDataSource.get(t.link_id)?.markers?.[t.filter];this.markerFlashService.flash(t.link_id,a?.color??null,a?.highlight_duration??null,t.dir??null,t.node_id)}e.action==="drawing.created"&&(this.drawingsDataSource.add(e.event),this.drawingNotificationEmitter.emit(e)),e.action==="drawing.updated"&&(this.drawingsDataSource.update(e.event),this.drawingNotificationEmitter.emit(e)),e.action==="drawing.deleted"&&(this.drawingsDataSource.remove(e.event),this.drawingNotificationEmitter.emit(e)),e.action==="log.error"&&this.errorNotificationEmitter.emit(e.event.message),e.action==="log.warning"&&this.warningNotificationEmitter.emit(e.event.message),e.action==="log.info"&&this.infoNotificationEmitter.emit(e.event.message)}applyInterfaceStatuses(e){e.forEach(t=>this.applyInterfaceStatusesToLink(t))}clearInterfaceStatuses(e){for(let t of this.interfaceStatuses.keys())t.startsWith(`${e}:`)&&this.interfaceStatuses.delete(t)}interfaceStatusKey(e){return`${e.project_id}:${e.node_id}:${e.adapter_number}:${e.port_number}`}normalizeInterfaceStatus(e){if(e==="started"||e==="up")return"started";if(e==="stopped"||e==="down")return"stopped"}applyInterfaceStatusesToLink(e){for(let[t,i]of(e.nodes||[]).entries()){let a=this.interfaceStatuses.get(this.interfaceStatusKey({project_id:e.project_id,node_id:i.node_id,adapter_number:i.adapter_number,port_number:i.port_number}));a&&e.interface_statuses?.[t]!==a&&this.setInterfaceStatus(e,t,a)}}setInterfaceStatus(e,t,i){let a=[...e.interface_statuses||[]];a[t]=i,e.interface_statuses=a}static \u0275fac=function(t){return new(t||n)(_e(Xn),_e(so),_e(Ui),_e(_m),_e(hd))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var EM=(()=>{class n{symbolService;constructor(e){this.symbolService=e}resolve(e,t){let i=t.filter(u=>!u.symbol_url);if(i.length===0)return Vt(t);let a=Ci(i.map(u=>u.width==0&&u.height==0?this.symbolService.getDimensions(e,u.symbol).pipe(Pt(g=>({node:u,dimensions:g})),ei(()=>(console.error("Failed to get symbol dimensions:",u.symbol),Vt(null)))):Vt(null))).pipe(Qn(u=>{for(let g of u)g&&(g.node.width=g.dimensions.width,g.node.height=g.dimensions.height)})),s=new Map;i.forEach(u=>{s.set(u,`/symbols/${u.symbol}/raw`)});let d=Array.from(new Set(s.values())),p=Ci(d.map(u=>this.symbolService.getSymbolBlobUrl(e,u))).pipe(Pt(u=>{let g=new Map(d.map((C,M)=>[C,u[M]]));i.forEach(C=>{C.symbol_url=g.get(s.get(C))})}),ei(()=>(i.forEach(u=>{u.symbol_url=`${e.protocol}//${e.host}:${e.port}/${zi.current_version}${s.get(u)}`}),Vt(null))));return Ci([a,p]).pipe(Pt(()=>t))}static \u0275fac=function(t){return new(t||n)(_e(Lr))};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var Bs=(()=>{class n{minimizedWindowsSignal=z([]);minimizedWindows=this.minimizedWindowsSignal.asReadonly();minimizeWindow(e,t,i){let a=this.minimizedWindowsSignal();a.find(s=>s.id===e)||this.minimizedWindowsSignal.set([...a,{id:e,type:t,linkId:i}])}restoreWindow(e){let t=this.minimizedWindowsSignal();this.minimizedWindowsSignal.set(t.filter(i=>i.id!==e))}isMinimized(e){return!!this.minimizedWindowsSignal().find(t=>t.id===e)}toggleMinimize(e,t,i){this.isMinimized(e)?this.restoreWindow(e):this.minimizeWindow(e,t,i)}getMinimizedByType(e){return this.minimizedWindowsSignal().filter(t=>t.type===e)}clearAll(){this.minimizedWindowsSignal.set([])}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var eye=n=>({"is-invalid":n});function tye(n,o){n&1&&L(0,"mat-spinner",4)}function nye(n,o){n&1&&(r(0,"mat-error"),c(1,"Project name contains invalid characters"),l())}function iye(n,o){n&1&&(r(0,"mat-error"),c(1,"Project with this name already exists"),l())}function oye(n,o){n&1&&(r(0,"span"),c(1,"Checking..."),l())}function aye(n,o){n&1&&(r(0,"span"),c(1,"Add project"),l())}var __=(()=>{class n{dialogRef=f(We);router=f(Ft);projectService=f(Ti);toasterService=f(re);mapSettingsService=f(ui);projectNameValidator=f(zl);controller;projectName=$("");uuid=z("");isCheckingName=z(!1);nameExistsError=z(!1);onAddProject=new be;isNameValid=Ne(()=>{let e=this.projectName();return!e||e.trim().length===0?!1:!this.projectNameValidator.get({value:e})});hasInvalidCharacters=Ne(()=>{let e=this.projectName();return!e||e.trim().length===0?!1:this.projectNameValidator.get({value:e})?.invalidName===!0});onAddClick(){this.isNameValid()&&this.checkProjectNameExists()}onNoClick(){this.dialogRef.close()}onKeyDown(e){e.key==="Enter"&&this.onAddClick()}checkProjectNameExists(){this.isCheckingName.set(!0),this.nameExistsError.set(!1),this.projectService.list(this.controller).subscribe({next:e=>{let t=this.projectName().trim(),i=e.find(a=>a.name===t);this.isCheckingName.set(!1),i?(this.nameExistsError.set(!0),this.toasterService.error("Project with this name already exists.")):this.addProject()},error:e=>{this.isCheckingName.set(!1);let t=e.error?.message||e.message||"Failed to check project name";this.toasterService.error(t)}})}addProject(){this.uuid.set(xo()),this.projectService.add(this.controller,this.projectName().trim(),this.uuid()).subscribe({next:e=>{e.scene_width=this.mapSettingsService.getDefaultSceneWidth(),e.scene_height=this.mapSettingsService.getDefaultSceneHeight(),e.grid_size=this.mapSettingsService.getDefaultGridSize(),e.drawing_grid_size=this.mapSettingsService.getDefaultDrawingGridSize(),e.show_grid=this.mapSettingsService.getDefaultShowGrid(),e.snap_to_grid=this.mapSettingsService.getDefaultSnapToGrid(),this.projectService.update(this.controller,e).subscribe({error:()=>{this.toasterService.error("Project created, but workspace defaults were not applied"),this.finishProjectCreation(e)},complete:()=>this.finishProjectCreation(e)})},error:e=>{let t=e.error?.message||e.message||"Cannot create new project";this.toasterService.error(t)}})}finishProjectCreation(e){this.dialogRef.close(),this.toasterService.success(`Project ${e.name} added`),this.router.navigate(["/controller",this.controller.id,"project",e.project_id]),this.onAddProject.emit(e.project_id)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-add-blank-project-dialog"]],inputs:{projectName:[1,"projectName"]},outputs:{projectName:"projectNameChange"},features:[un([zl])],decls:16,vars:11,consts:[["mat-dialog-title",""],["mat-dialog-content",""],["subscriptSizing","dynamic",1,"file-name-form-field"],["matInput","","type","text","placeholder","Please enter name",3,"input","keydown","value","ngClass","disabled"],["matSuffix","","diameter","20"],["mat-dialog-actions",""],["mat-button","","color","accent",3,"click","disabled"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"]],template:function(t,i){t&1&&(r(0,"h1",0),c(1,"Create new project"),l(),r(2,"div",1)(3,"mat-form-field",2)(4,"mat-label"),c(5,"Project name"),l(),r(6,"input",3),_("input",function(s){return i.projectName.set(s.target.value)})("keydown",function(s){return i.onKeyDown(s)}),l(),T(7,tye,1,0,"mat-spinner",4),T(8,nye,2,0,"mat-error"),T(9,iye,2,0,"mat-error"),l()(),r(10,"div",5)(11,"button",6),_("click",function(){return i.onNoClick()}),c(12,"Cancel"),l(),r(13,"button",7),_("click",function(){return i.onAddClick()}),T(14,oye,2,0,"span")(15,aye,2,0,"span"),l()()),t&2&&(m(6),v("value",i.projectName())("ngClass",tn(9,eye,i.hasInvalidCharacters()||i.nameExistsError()))("disabled",i.isCheckingName()),m(),E(i.isCheckingName()?7:-1),m(),E(i.hasInvalidCharacters()?8:-1),m(),E(i.nameExistsError()?9:-1),m(2),v("disabled",i.isCheckingName()),m(2),v("disabled",!i.isNameValid()||i.isCheckingName()),m(),E(i.isCheckingName()?14:15))},dependencies:[fe,Ao,St,ke,qe,Qe,bt,Y,he,we,Pe,Ve,Wn,oi,ye,Ee,rt,mt],styles:[".file-name-form-field[_ngcontent-%COMP%]{width:100%}.project-snackbar[_ngcontent-%COMP%]{background:var(--mat-sys-primary)}"],changeDetection:0})}return n})();function rye(n,o){if(n&1&&(r(0,"div",2),L(1,"app-markdown-viewer",4),l()),n&2){let e=h(2);m(),v("data",e.markdown())}}function sye(n,o){n&1&&(r(0,"div",3)(1,"mat-icon",5),c(2,"description"),l(),r(3,"p",6),c(4,"No README content yet. Click Edit to add one."),l()())}function lye(n,o){if(n&1&&(r(0,"div",0),T(1,rye,2,1,"div",2)(2,sye,5,0,"div",3),l()),n&2){let e=h();m(),E(e.markdown()?1:2)}}function cye(n,o){n&1&&(r(0,"mat-icon",13),c(1,"sync"),l(),r(2,"span"),c(3,"Saving..."),l())}function dye(n,o){n&1&&(r(0,"mat-icon",13),c(1,"check_circle"),l(),r(2,"span"),c(3,"Saved"),l())}function mye(n,o){n&1&&(r(0,"mat-icon",13),c(1,"error"),l(),r(2,"span"),c(3,"Save failed"),l())}function pye(n,o){if(n&1&&(r(0,"div",12),T(1,cye,4,0),T(2,dye,4,0),T(3,mye,4,0),l()),n&2){let e=h(2);ne("save-status--saving",e.saveStatus()==="saving")("save-status--saved",e.saveStatus()==="saved")("save-status--error",e.saveStatus()==="error"),m(),E(e.saveStatus()==="saving"?1:-1),m(),E(e.saveStatus()==="saved"?2:-1),m(),E(e.saveStatus()==="error"?3:-1)}}function uye(n,o){if(n&1){let e=R();r(0,"div",1)(1,"div",7)(2,"mat-label",8),c(3,"Edit README (Markdown)"),l(),T(4,pye,4,9,"div",9),l(),r(5,"textarea",10),_("input",function(i){y(e);let a=h();return w(a.onMarkdownInput(i))}),l(),r(6,"p",11),c(7,"Changes are auto-saved 2 seconds after you stop typing"),l()()}if(n&2){let e=h();m(4),E(e.saveStatus()!=="idle"?4:-1),m(),v("value",e.markdown())}}var OM=(()=>{class n{controller=ee(void 0);project=ee(void 0);projectService=f(Ti);cd=f(oe);markdown=z("");isEditing=z(!1);saveStatus=z("idle");originalMarkdown="";destroy$=new Ye;markdownChangeSubscription=null;isEditingChange=$o();markdownChange$=new Ye;ngOnInit(){this.projectService.getReadmeFile(this.controller(),this.project().project_id).subscribe({next:e=>{e&&this.markdown.set(e),this.cd.markForCheck()},error:e=>{e.status===404&&this.markdown.set(""),this.cd.markForCheck()}}),this.markdownChangeSubscription=this.markdownChange$.pipe(tg(2e3),ng(),Qn(e=>this.autoSave(e)),He(this.destroy$)).subscribe()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete(),this.markdownChangeSubscription&&this.markdownChangeSubscription.unsubscribe()}onMarkdownInput(e){let t=e.target.value;this.markdown.set(t),this.markdownChange$.next(t)}autoSave(e){this.saveStatus.set("saving"),this.projectService.postReadmeFile(this.controller(),this.project().project_id,e).subscribe({next:()=>{this.saveStatus.set("saved"),this.cd.markForCheck(),setTimeout(()=>{this.saveStatus.set("idle"),this.cd.markForCheck()},2e3)},error:t=>{this.saveStatus.set("error"),this.cd.markForCheck(),setTimeout(()=>{this.saveStatus.set("idle"),this.cd.markForCheck()},3e3)}})}enterEditMode(){this.originalMarkdown=this.markdown(),this.isEditing.set(!0),this.isEditingChange.emit(!0)}cancelEdit(){this.isEditing.set(!1),this.isEditingChange.emit(!1)}saveEdit(){this.isEditing.set(!1),this.isEditingChange.emit(!1)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-readme-editor"]],inputs:{controller:[1,"controller"],project:[1,"project"]},outputs:{isEditingChange:"isEditingChange"},decls:2,vars:2,consts:[[1,"readme-preview-container"],[1,"readme-edit-container"],[1,"textWrapper"],[1,"readme-empty-state"],[3,"data"],[1,"readme-empty-icon"],[1,"readme-empty-text"],[1,"editor-header"],[1,"editor-label"],[1,"save-status",3,"save-status--saving","save-status--saved","save-status--error"],["placeholder","Write your project README in Markdown format...",1,"editorWrapper",3,"input","value"],[1,"editor-hint"],[1,"save-status"],[1,"save-status-icon"]],template:function(t,i){t&1&&(T(0,lye,3,1,"div",0),T(1,uye,8,2,"div",1)),t&2&&(E(i.isEditing()?-1:0),m(),E(i.isEditing()?1:-1))},dependencies:[fe,St,Y,ie,ce,we,Ve,ye,Fl],styles:[".readme-preview-container[_ngcontent-%COMP%]{margin-bottom:16px}.textWrapper[_ngcontent-%COMP%]{--markdown-viewer-heading-scale: .85;--markdown-viewer-line-height: 1.65;min-height:400px;max-height:calc(70vh - 80px);overflow-y:auto;padding:16px;background:var(--mat-sys-surface-container-low);border-radius:8px}.readme-empty-state[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:300px;padding:48px 24px;background:var(--mat-sys-surface-container-low);border-radius:8px;border:1px dashed var(--mat-sys-outline-variant)}.readme-empty-icon[_ngcontent-%COMP%]{font-size:48px;width:48px;height:48px;color:var(--mat-sys-on-surface-variant);margin-bottom:16px;opacity:.5}.readme-empty-text[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface-variant);margin:0;text-align:center}.readme-edit-container[_ngcontent-%COMP%]{margin-bottom:16px}.editor-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.editor-label[_ngcontent-%COMP%]{display:block;font-size:14px;font-weight:500;color:var(--mat-sys-on-surface-variant);margin-bottom:0}.editorWrapper[_ngcontent-%COMP%]{width:100%;min-height:400px;max-height:calc(70vh - 80px);padding:12px;font-family:var(--gns3-font-code);font-size:14px;line-height:1.6;border:1px solid var(--mat-sys-outline);border-radius:8px;background:var(--mat-sys-surface);color:var(--mat-sys-on-surface);resize:vertical}.editorWrapper[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--mat-sys-primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--mat-sys-primary) 20%,transparent)}.editorWrapper[_ngcontent-%COMP%]::placeholder{color:var(--mat-sys-on-surface-variant);opacity:.6}.editor-hint[_ngcontent-%COMP%]{font-size:12px;color:var(--mat-sys-on-surface-variant);margin:8px 0 0;opacity:.7}.save-status[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;font-size:13px;padding:4px 12px;border-radius:16px;transition:all var(--gns3-motion-duration-standard) ease}.save-status[_ngcontent-%COMP%] .save-status-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px}.save-status--saving[_ngcontent-%COMP%]{background:var(--mat-sys-secondary-container);color:var(--mat-sys-on-secondary-container)}.save-status--saving[_ngcontent-%COMP%] .save-status-icon[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_spin 1s linear infinite}.save-status--saved[_ngcontent-%COMP%]{background:var(--mat-sys-primary-container);color:var(--mat-sys-on-primary-container)}.save-status--error[_ngcontent-%COMP%]{background:var(--mat-sys-error-container);color:var(--mat-sys-on-error-container)}@keyframes _ngcontent-%COMP%_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}"],changeDetection:0})}return n})();var gye=["editor"];function hye(n,o){if(n&1){let e=R();r(0,"mat-tab",15)(1,"app-readme-editor",31,0),_("isEditingChange",function(i){y(e);let a=h();return w(a.onReadmeEditingChange(i))}),l()()}if(n&2){let e=h();m(),v("controller",e.controller)("project",e.project)}}function _ye(n,o){n&1&&(r(0,"th",32),c(1,"Name"),l())}function fye(n,o){if(n&1&&(r(0,"td",33),c(1),l()),n&2){let e=o.$implicit;m(),N(e.name)}}function vye(n,o){n&1&&(r(0,"th",32),c(1,"Value"),l())}function Cye(n,o){if(n&1&&(r(0,"td",33),c(1),l()),n&2){let e=o.$implicit;m(),N(e.value)}}function bye(n,o){n&1&&(r(0,"th",32),c(1,"Actions"),l())}function xye(n,o){if(n&1){let e=R();r(0,"td",33)(1,"button",34),_("click",function(){let i=y(e).$implicit,a=h();return w(a.deleteVariable(i))}),r(2,"mat-icon",35),c(3,"delete"),l()()()}}function yye(n,o){n&1&&L(0,"tr",36)}function wye(n,o){n&1&&L(0,"tr",37)}function Mye(n,o){n&1&&L(0,"mat-spinner",40)}function Sye(n,o){n&1&&c(0," Apply ")}function kye(n,o){if(n&1){let e=R();r(0,"button",38),_("click",function(){y(e);let i=h();return w(i.onNoClick())}),c(1,"Cancel"),l(),r(2,"button",39),_("click",function(){y(e);let i=h();return w(i.onYesClick())}),T(3,Mye,1,0,"mat-spinner",40),T(4,Sye,1,0),l()}if(n&2){let e=h();m(2),v("disabled",e.isApplying()),m(),E(e.isApplying()?3:-1),m(),E(e.isApplying()?-1:4)}}function Pye(n,o){if(n&1){let e=R();r(0,"button",42),_("click",function(){let i;y(e);let a=h(2);return w((i=a.editor())==null?null:i.cancelEdit())}),c(1,"Cancel"),l()}}function Tye(n,o){n&1&&L(0,"mat-spinner",40)}function Eye(n,o){n&1&&c(0," Apply ")}function Oye(n,o){if(n&1){let e=R();r(0,"button",38),_("click",function(){y(e);let i=h(2);return w(i.onNoClick())}),c(1,"Cancel"),l(),r(2,"button",42),_("click",function(){let i;y(e);let a=h(2);return w((i=a.editor())==null?null:i.enterEditMode())}),c(3,"Edit"),l(),r(4,"button",39),_("click",function(){y(e);let i=h(2);return w(i.onYesClick())}),T(5,Tye,1,0,"mat-spinner",40),T(6,Eye,1,0),l()}if(n&2){let e=h(2);m(4),v("disabled",e.isApplying()),m(),E(e.isApplying()?5:-1),m(),E(e.isApplying()?-1:6)}}function Dye(n,o){if(n&1&&T(0,Pye,2,0,"button",41)(1,Oye,7,3),n&2){let e=h();E(e.isReadmeEditing()?0:1)}}var f_=(()=>{class n{editor=ln("editor");dialogRef=f(We);dialog=f(Xe);projectService=f(Ti);toasterService=f(re);controller;project;displayedColumns=["name","value","actions"];variables=z([]);projectName=$("");width=$(0);height=$(0);nodeGridSize=$(25);drawingGridSize=$(25);auto_open=$(!1);auto_start=$(!1);auto_close=$(!1);show_interface_labels=$(!1);variableName=$("");variableValue=$("");isReadmeEditing=z(!1);selectedTab=z(0);isApplying=z(!1);originalVariables=[];isFormValid=Ne(()=>this.projectName().trim().length>0&&+this.width()>=0&&+this.height()>=0&&+this.nodeGridSize()>=0&&+this.drawingGridSize()>=0);isVariableFormValid=Ne(()=>this.variableName().trim().length>0&&this.variableValue().trim().length>0);ngOnInit(){this.projectName.set(this.project.name),this.width.set(this.project.scene_width),this.height.set(this.project.scene_height),this.nodeGridSize.set(this.project.grid_size),this.drawingGridSize.set(this.project.drawing_grid_size),this.project.variables&&(this.variables.set([...this.project.variables]),this.originalVariables=[...this.project.variables]),this.auto_open.set(this.project.auto_open),this.auto_start.set(this.project.auto_start),this.auto_close.set(!this.project.auto_close),this.show_interface_labels.set(this.project.show_interface_labels)}onReadmeEditingChange(e){this.isReadmeEditing.set(e)}onTabChange(e){this.selectedTab.set(e.index)}addVariable(){if(this.isVariableFormValid()){let e={name:this.variableName().trim(),value:this.variableValue().trim()};this.variables.update(t=>t.concat([e]))}else this.toasterService.error("Fill all required fields with correct values.")}deleteVariable(e){this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-danger-panel","dialog-small-panel"],autoFocus:".cancel-button",data:{title:"Delete variable?",message:`Global variable "${e.name}" will be removed from this project.`,confirmButtonText:"Delete variable",tone:"danger"}}).afterClosed().subscribe(i=>{i&&this.variables.update(a=>a.filter(s=>s!==e))})}hasVariablesChanged(){let e=this.variables();if(e.length!==this.originalVariables.length)return!0;let t=[...e].sort((a,s)=>a.name.localeCompare(s.name)),i=[...this.originalVariables].sort((a,s)=>a.name.localeCompare(s.name));for(let a=0;a<t.length;a++)if(t[a].name!==i[a].name||t[a].value!==i[a].value)return!0;return!1}onNoClick(){this.dialogRef.close()}onYesClick(){if(!this.isFormValid()){this.toasterService.error("Fill all required fields with correct values.");return}if(this.hasVariablesChanged()){let e={title:"Global Variables Changed",message:"Adding or deleting project global variables will cause the GNS3 server to rebuild docker containers in the project to apply the new variables. If containers are running, this operation may take approximately 5-10 seconds. Do you want to continue?",confirmButtonText:"Yes, apply",cancelButtonText:"No, cancel"};this.dialog.open(jt,{data:e,panelClass:["base-confirmation-dialog-panel","confirmation-warning-panel","dialog-small-panel"]}).afterClosed().subscribe(i=>{i&&(this.isApplying.set(!0),this.applyChanges())})}else this.isApplying.set(!0),this.applyChanges()}applyChanges(){this.project.name=this.projectName().trim(),this.project.scene_width=+this.width(),this.project.scene_height=+this.height(),this.project.drawing_grid_size=+this.drawingGridSize(),this.project.grid_size=+this.nodeGridSize(),this.project.variables=this.variables(),this.project.auto_open=this.auto_open(),this.project.auto_start=this.auto_start(),this.project.auto_close=!this.auto_close(),this.project.show_interface_labels=this.show_interface_labels(),this.projectService.update(this.controller,this.project).subscribe({next:e=>{this.projectService.postReadmeFile(this.controller,this.project.project_id,this.editor()?.markdown()??"").subscribe({next:()=>{this.toasterService.success(`Project ${e.name} updated.`),this.isApplying.set(!1),this.dialogRef.close(e)},error:t=>{let i=t.error?.message||t.message||"Failed to update project readme";this.toasterService.error(i),this.isApplying.set(!1)}})},error:e=>{let t=e.error?.message||e.message||"Failed to update project";this.toasterService.error(t),this.isApplying.set(!1)}})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-edit-project-dialog"]],viewQuery:function(t,i){t&1&&Bn(i.editor,gye,5),t&2&&jn()},inputs:{projectName:[1,"projectName"],width:[1,"width"],height:[1,"height"],nodeGridSize:[1,"nodeGridSize"],drawingGridSize:[1,"drawingGridSize"],auto_open:[1,"auto_open"],auto_start:[1,"auto_start"],auto_close:[1,"auto_close"],show_interface_labels:[1,"show_interface_labels"],variableName:[1,"variableName"],variableValue:[1,"variableValue"]},outputs:{projectName:"projectNameChange",width:"widthChange",height:"heightChange",nodeGridSize:"nodeGridSizeChange",drawingGridSize:"drawingGridSizeChange",auto_open:"auto_openChange",auto_start:"auto_startChange",auto_close:"auto_closeChange",show_interface_labels:"show_interface_labelsChange",variableName:"variableNameChange",variableValue:"variableValueChange"},decls:67,vars:17,consts:[["editor",""],["mat-dialog-title",""],[1,"modal-form-container"],[3,"selectedTabChange"],["label","General"],[1,"edit-project-form","gns3-form-grid-container"],[1,"gns3-form-grid","gns3-form-layout-fixed"],["appearance","outline","subscriptSizing","fixed",1,"gns3-form-grid__full"],["matInput","","placeholder","My Project","type","text",3,"input","value"],["appearance","outline","subscriptSizing","fixed"],["matInput","","placeholder","1000","type","number",3,"input","value"],["matTextSuffix",""],["matInput","","placeholder","800","type","number",3,"input","value"],["matInput","","placeholder","25","type","number",3,"input","value"],[3,"change","checked"],["label","Readme"],["label","Global variables"],[1,"edit-project-form","gns3-form-stack"],["appearance","outline","subscriptSizing","dynamic",1,"form-field"],["matInput","","placeholder","VARIABLE_NAME","type","text",3,"input","value"],["matInput","","placeholder","variable_value","type","text",3,"input","value"],["mat-button","","mat-raised-button","","color","primary",1,"form-field","edit-project__add-variable",3,"click"],["mat-table","",3,"dataSource"],["matColumnDef","name"],["mat-header-cell","",4,"matHeaderCellDef"],["mat-cell","",4,"matCellDef"],["matColumnDef","value"],["matColumnDef","actions"],["mat-header-row","",4,"matHeaderRowDef"],["mat-row","",4,"matRowDef","matRowDefColumns"],["mat-dialog-actions",""],[3,"isEditingChange","controller","project"],["mat-header-cell",""],["mat-cell",""],["mat-icon-button","","matTooltip","Delete variable","matTooltipClass","custom-tooltip",1,"destructive-icon-button",3,"click"],["aria-label","Delete adapter"],["mat-header-row",""],["mat-row",""],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"],["diameter","20"],["mat-button",""],["mat-button","",3,"click"]],template:function(t,i){t&1&&(r(0,"h1",1),c(1,"Edit project"),l(),r(2,"div",2)(3,"mat-tab-group",3),_("selectedTabChange",function(s){return i.onTabChange(s)}),r(4,"mat-tab",4)(5,"form",5)(6,"div",6)(7,"mat-form-field",7)(8,"mat-label"),c(9,"Project name"),l(),r(10,"input",8),_("input",function(s){return i.projectName.set(s.target.value)}),l()(),r(11,"mat-form-field",9)(12,"mat-label"),c(13,"Scene width"),l(),r(14,"input",10),_("input",function(s){return i.width.set(+s.target.value)}),l(),r(15,"span",11),c(16,"px"),l()(),r(17,"mat-form-field",9)(18,"mat-label"),c(19,"Scene height"),l(),r(20,"input",12),_("input",function(s){return i.height.set(+s.target.value)}),l(),r(21,"span",11),c(22,"px"),l()(),r(23,"mat-form-field",9)(24,"mat-label"),c(25,"Node grid size"),l(),r(26,"input",13),_("input",function(s){return i.nodeGridSize.set(+s.target.value)}),l()(),r(27,"mat-form-field",9)(28,"mat-label"),c(29,"Drawing grid size"),l(),r(30,"input",13),_("input",function(s){return i.drawingGridSize.set(+s.target.value)}),l()()()(),r(31,"mat-checkbox",14),_("change",function(s){return i.auto_open.set(s.checked)}),c(32," Open this project in the background when GNS3 controller starts "),l(),r(33,"mat-checkbox",14),_("change",function(s){return i.auto_start.set(s.checked)}),c(34," Start all nodes when this project is opened "),l(),r(35,"mat-checkbox",14),_("change",function(s){return i.auto_close.set(s.checked)}),c(36," Leave this project running in the background after closing "),l(),r(37,"mat-checkbox",14),_("change",function(s){return i.show_interface_labels.set(s.checked)}),c(38," Show interface labels at start "),l()(),T(39,hye,3,2,"mat-tab",15),r(40,"mat-tab",16)(41,"form",17)(42,"mat-form-field",18)(43,"mat-label"),c(44,"Name"),l(),r(45,"input",19),_("input",function(s){return i.variableName.set(s.target.value)}),l()(),r(46,"mat-form-field",18)(47,"mat-label"),c(48,"Value"),l(),r(49,"input",20),_("input",function(s){return i.variableValue.set(s.target.value)}),l()()(),r(50,"button",21),_("click",function(){return i.addVariable()}),c(51," Add variable "),l(),r(52,"table",22),Fe(53,23),se(54,_ye,2,0,"th",24)(55,fye,2,1,"td",25),Re(),Fe(56,26),se(57,vye,2,0,"th",24)(58,Cye,2,1,"td",25),Re(),Fe(59,27),se(60,bye,2,0,"th",24)(61,xye,4,0,"td",25),Re(),se(62,yye,1,0,"tr",28)(63,wye,1,0,"tr",29),l()()()(),r(64,"div",30),T(65,kye,5,3),T(66,Dye,2,1),l()),t&2&&(m(10),v("value",i.projectName()),m(4),v("value",i.width()),m(6),v("value",i.height()),m(6),v("value",i.nodeGridSize()),m(4),v("value",i.drawingGridSize()),m(),v("checked",i.auto_open()),m(2),v("checked",i.auto_start()),m(2),v("checked",i.auto_close()),m(2),v("checked",i.show_interface_labels()),m(2),E(i.controller&&i.project?39:-1),m(6),v("value",i.variableName()),m(4),v("value",i.variableValue()),m(3),v("dataSource",i.variables()),m(10),v("matHeaderRowDef",i.displayedColumns),m(),v("matRowDefColumns",i.displayedColumns),m(2),E(i.selectedTab()!==1?65:-1),m(),E(i.selectedTab()===1?66:-1))},dependencies:[fe,St,Ct,vt,Ji,ke,qe,Qe,Y,he,Be,we,Pe,Ve,oi,ye,Ee,Rt,Gt,_n,bn,yn,kn,wn,xn,Pn,Mn,Sn,Tn,En,ie,ce,st,pt,bo,Xo,Yo,rt,mt,OM],styles:["[_nghost-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%] mat-form-field[_ngcontent-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}.gns3-form-grid[_ngcontent-%COMP%]{margin-bottom:16px}button[disabled][_ngcontent-%COMP%] mat-spinner[_ngcontent-%COMP%]{display:inline-block;margin:0;vertical-align:middle;--mat-mdc-progress-spinner-circle-color: var(--mat-sys-on-primary)}.edit-project__add-variable[_ngcontent-%COMP%]{margin-block:var(--gns3-form-row-gap)}"],changeDetection:0})}return n})();var Iye=n=>({"is-invalid":n});function Aye(n,o){n&1&&(r(0,"mat-error"),c(1,"Project name is required"),l())}function Nye(n,o){n&1&&(r(0,"mat-error"),c(1,"Project name is incorrect"),l())}function Fye(n,o){if(n&1){let e=R();r(0,"button",12),_("click",function(){y(e);let i=h(2);return w(i.onDeleteClick())}),r(1,"mat-icon"),c(2,"delete"),l()()}}function Rye(n,o){if(n&1){let e=R();r(0,"div",2)(1,"input",3,0),_("change",function(i){y(e);let a=h();return w(a.uploadProjectFile(i))}),l(),r(3,"div",4)(4,"mat-form-field",5)(5,"input",6),_("input",function(i){y(e);let a=h();return w(a.projectName.set(i.target.value))}),l(),T(6,Aye,2,0,"mat-error"),T(7,Nye,2,0,"mat-error"),l(),r(8,"button",7),_("click",function(){y(e);let i=Te(2);return w(i.click())}),r(9,"mat-icon"),c(10,"attach_file"),l(),c(11," Choose file "),l(),T(12,Fye,3,0,"button",8),l()(),r(13,"div",9)(14,"button",10),_("click",function(){y(e);let i=h();return w(i.onNoClick())}),c(15,"Cancel"),l(),r(16,"button",11),_("click",function(){y(e);let i=h();return w(i.onImportClick())}),c(17," Import "),l()()}if(n&2){let e=h();m(),v("uploader",e.uploader),m(4),v("value",e.projectName())("ngClass",tn(7,Iye,e.hasInvalidCharacters()||e.isNameEmpty()&&e.submitted())),m(),E(e.isNameEmpty()&&e.submitted()?6:-1),m(),E(e.hasInvalidCharacters()?7:-1),m(5),E(e.isDeleteVisible()?12:-1),m(4),v("disabled",!e.isImportEnabled())}}function zye(n,o){if(n&1){let e=R();r(0,"div",2)(1,"div",13)(2,"span"),c(3),l()()(),r(4,"div",9)(5,"button",11),_("click",function(){y(e);let i=h();return w(i.onNoClick())}),c(6," Finish "),l()()}if(n&2){let e=h();m(3),N(e.resultMessage()),m(2),v("disabled",!e.isFinishEnabled())}}var v_=(()=>{class n{dialog=f(Xe);dialogRef=f(We);projectService=f(Ti);projectNameValidator=f(zl);toasterService=f(re);uploadServiceService=f(Al);snackBar=f(pl);data=f(Wt);uploader;controller;uploadProgress=z(0);isImportEnabled=z(!1);isFinishEnabled=z(!1);isDeleteVisible=z(!1);resultMessage=z("The project is being imported... Please wait");projectName=$("");submitted=z(!1);isFirstStepCompleted=z(!1);uuid=z("");onImportProject=new be;isNameEmpty=Ne(()=>{let e=this.projectName();return!e||e.trim().length===0});isNameValid=Ne(()=>{let e=this.projectName();return this.isNameEmpty()?!1:!this.projectNameValidator.get({value:e})});hasInvalidCharacters=Ne(()=>{let e=this.projectName();return this.isNameEmpty()?!1:this.projectNameValidator.get({value:e})?.invalidName===!0});ngOnInit(){this.uploader=new kl({url:""}),this.uploader.onAfterAddingFile=e=>{e.withCredentials=!1},this.uploader.onErrorItem=(e,t,i,a)=>{let s=JSON.parse(t);this.resultMessage.set("An error has occurred: "+s.message),this.isFinishEnabled.set(!0)},this.uploader.onCompleteItem=(e,t,i,a)=>{this.onImportProject.emit(this.uuid()),this.resultMessage.set("Project was imported succesfully!"),this.isFinishEnabled.set(!0)},this.uploader.onProgressItem=e=>{this.uploadProgress.set(e.progress),this.uploadServiceService.processBarCount(this.uploadProgress())},this.uploadServiceService.currentCancelItemDetails.subscribe(e=>{e&&this.cancelUploading()})}uploadProjectFile(e){this.projectName.set(e.target.files[0].name.split(".")[0]),this.isImportEnabled.set(!0),this.isDeleteVisible.set(!0)}onImportClick(){this.isNameValid()?this.projectService.list(this.controller).subscribe({next:e=>{let t=this.projectName().trim(),i=e.find(a=>a.name===t);i?this.openConfirmationDialog(i):this.importProject()},error:e=>{let t=e.error?.message||e.message||"Failed to list projects";this.toasterService.error(t)}}):this.submitted.set(!0)}importProject(){let e=this.prepareUploadPath();this.uploader.queue.forEach(i=>i.url=e),this.uploader.authToken=`Bearer ${this.controller.authToken}`,this.isFirstStepCompleted.set(!0);let t=this.uploader.queue[0];this.uploader.uploadItem(t),this.snackBar.openFromComponent(Nl,{panelClass:"uplaoding-file-snackabar",data:{upload_file_type:"Project"}})}openConfirmationDialog(e){let t=e.status==="opened";this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","dialog-small-panel","confirmation-warning-panel"],data:t?{title:"Project is currently open",message:`Project "${e.name}" cannot be overwritten while it is open.`,cancelButtonText:"OK",hideConfirm:!0,tone:"warning",icon:"folder_open"}:{title:"Overwrite existing project?",message:`Project "${e.name}" already exists. Its current files will be replaced.`,note:"This action cannot be undone.",confirmButtonText:"Overwrite project",tone:"danger",icon:"folder_delete"},autoFocus:".cancel-button",disableClose:!0}).afterClosed().subscribe(a=>{a&&this.projectService.close(this.controller,e.project_id).subscribe({next:()=>{this.projectService.delete(this.controller,e.project_id).subscribe({next:()=>{this.importProject()},error:s=>{let d=s.error?.message||s.message||"Failed to delete project";this.toasterService.error(d)}})},error:s=>{let d=s.error?.message||s.message||"Failed to close project";this.toasterService.error(d)}})})}onNoClick(){this.uploader.cancelAll(),this.dialogRef.close(!1)}onFinishClick(){this.dialogRef.close(!1)}onDeleteClick(){this.uploader.queue.pop(),this.isImportEnabled.set(!1),this.isDeleteVisible.set(!1),this.projectName.set("")}prepareUploadPath(){this.uuid.set(xo());let e=this.projectName().trim();return this.projectService.getUploadPath(this.controller,this.uuid(),e)}cancelUploading(){this.uploader.clearQueue(),this.uploadServiceService.processBarCount(null),this.toasterService.warning("File upload cancelled"),this.uploadServiceService.cancelFileUploading(!1),this.isFirstStepCompleted.set(!1),this.uploader.cancelAll(),this.dialogRef.close(!0)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-import-project-dialog"]],inputs:{projectName:[1,"projectName"]},outputs:{projectName:"projectNameChange"},decls:4,vars:2,consts:[["file",""],["mat-dialog-title",""],["mat-dialog-content",""],["type","file","accept",".gns3project, .gns3p","ng2FileSelect","",1,"non-visible",3,"change","uploader"],[1,"input-row"],["appearance","outline","subscriptSizing","dynamic",1,"file-name-form-field"],["matInput","","type","text","placeholder","Enter project name",3,"input","value","ngClass"],["mat-raised-button","","color","primary","matTooltip","Import your .gns3p or .gns3project file","matTooltipClass","custom-tooltip",1,"file-button",3,"click"],["mat-icon-button","","type","button","matTooltip","Remove selected file","matTooltipPosition","above","aria-label","Remove selected file",1,"destructive-icon-button"],["mat-dialog-actions","","align","end"],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"],["mat-icon-button","","type","button","matTooltip","Remove selected file","matTooltipPosition","above","aria-label","Remove selected file",1,"destructive-icon-button",3,"click"],[1,"result-message-box"]],template:function(t,i){t&1&&(r(0,"h1",1),c(1,"Import project"),l(),T(2,Rye,18,9),T(3,zye,7,2)),t&2&&(m(2),E(i.isFirstStepCompleted()?-1:2),m(),E(i.isFirstStepCompleted()?3:-1))},dependencies:[fe,Ao,St,ke,qe,Qe,bt,Y,he,Be,we,Pe,Wn,ye,Ee,ie,ce,st,pt,ab,Pl,Kc],styles:[".non-visible[_ngcontent-%COMP%]{display:none}.file-button[_ngcontent-%COMP%]{white-space:nowrap;flex-shrink:0}.input-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.file-name-form-field[_ngcontent-%COMP%]{flex:1;min-width:0;align-self:center}.result-message-box[_ngcontent-%COMP%]{text-align:center;color:var(--mat-sys-on-surface)}.progress-bar[_ngcontent-%COMP%]{background-color:var(--mat-sys-primary)}"],changeDetection:0})}return n})();var Lye=n=>({"is-invalid":n});function Vye(n,o){n&1&&L(0,"mat-spinner",4)}function Bye(n,o){n&1&&(r(0,"mat-error"),c(1,"Project name is incorrect"),l())}function jye(n,o){n&1&&(r(0,"mat-error"),c(1,"Project with this name already exists"),l())}function $ye(n,o){n&1&&(r(0,"span"),c(1,"Checking..."),l())}function Hye(n,o){n&1&&(r(0,"span"),c(1,"Save project"),l())}var DM=(()=>{class n{dialogRef=f(We);projectService=f(Ti);toasterService=f(re);projectNameValidator=f(zl);controller;project;projectName=$("");isCheckingName=z(!1);nameExistsError=z(!1);onAddProject=new be;isNameValid=Ne(()=>{let e=this.projectName();return!e||e.trim().length===0?!1:!this.projectNameValidator.get({value:e})});hasInvalidCharacters=Ne(()=>{let e=this.projectName();return!e||e.trim().length===0?!1:this.projectNameValidator.get({value:e})?.invalidName===!0});onAddClick(){this.isNameValid()&&this.checkProjectNameExists()}onNoClick(){this.dialogRef.close()}onKeyDown(e){e.key==="Enter"&&this.onAddClick()}checkProjectNameExists(){this.isCheckingName.set(!0),this.nameExistsError.set(!1),this.projectService.list(this.controller).subscribe({next:e=>{let t=this.projectName().trim(),i=e.find(a=>a.name===t);this.isCheckingName.set(!1),i?(this.nameExistsError.set(!0),this.toasterService.error("Project with this name already exists.")):this.addProject()},error:e=>{this.isCheckingName.set(!1);let t=e.error?.message||e.message||"Failed to check project name";this.toasterService.error(t)}})}addProject(){this.projectService.duplicate(this.controller,this.project.project_id,this.projectName().trim()).subscribe({next:e=>{this.dialogRef.close(),this.toasterService.success(`Project ${e.name} added`),this.onAddProject.emit(e.project_id)},error:e=>{let t=e.error?.message||e.message||"Failed to save project";this.toasterService.error(t)}})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-save-project-dialog"]],inputs:{projectName:[1,"projectName"]},outputs:{projectName:"projectNameChange"},decls:16,vars:11,consts:[["mat-dialog-title",""],["mat-dialog-content",""],["subscriptSizing","dynamic",1,"file-name-form-field"],["matInput","","type","text","placeholder","Please enter name",3,"input","keydown","value","ngClass","disabled"],["matSuffix","","diameter","20"],["mat-dialog-actions",""],["mat-button","","color","accent",3,"click","disabled"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"]],template:function(t,i){t&1&&(r(0,"h1",0),c(1,"Save project as"),l(),r(2,"div",1)(3,"mat-form-field",2)(4,"mat-label"),c(5,"Project name"),l(),r(6,"input",3),_("input",function(s){return i.projectName.set(s.target.value)})("keydown",function(s){return i.onKeyDown(s)}),l(),T(7,Vye,1,0,"mat-spinner",4),T(8,Bye,2,0,"mat-error"),T(9,jye,2,0,"mat-error"),l()(),r(10,"div",5)(11,"button",6),_("click",function(){return i.onNoClick()}),c(12,"Cancel"),l(),r(13,"button",7),_("click",function(){return i.onAddClick()}),T(14,$ye,2,0,"span")(15,Hye,2,0,"span"),l()()),t&2&&(m(6),v("value",i.projectName())("ngClass",tn(9,Lye,i.hasInvalidCharacters()||i.nameExistsError()))("disabled",i.isCheckingName()),m(),E(i.isCheckingName()?7:-1),m(),E(i.hasInvalidCharacters()?8:-1),m(),E(i.nameExistsError()?9:-1),m(2),v("disabled",i.isCheckingName()),m(2),v("disabled",!i.isNameValid()||i.isCheckingName()),m(),E(i.isCheckingName()?14:15))},dependencies:[fe,Ao,St,ke,qe,Qe,bt,Y,he,we,Pe,Ve,Wn,oi,ye,Ee,rt,mt],styles:[".file-name-form-field[_ngcontent-%COMP%]{width:100%}.project-snackbar[_ngcontent-%COMP%]{background:var(--mat-app-primary-color)}"],changeDetection:0})}return n})();var Uye=()=>[],Wye=(n,o)=>o.node.node_id,Gye=(n,o)=>o.key;function qye(n,o){n&1&&(r(0,"div",5),L(1,"mat-spinner",10),l())}function Qye(n,o){if(n&1&&(r(0,"mat-option",25),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function Kye(n,o){if(n&1){let e=R();r(0,"mat-form-field",21)(1,"mat-label"),c(2,"Replacement image"),l(),r(3,"input",23),_("input",function(i){y(e);let a=h().$implicit,s=h(3);return w(s.onDockerInput(a.key,i.target.value))}),l(),r(4,"mat-autocomplete",24,0),_("optionSelected",function(i){y(e);let a=h().$implicit,s=h(3);return w(s.onSelectionChange(a.key,i.option.value))}),Q(6,Qye,2,2,"mat-option",25,Oe),l(),r(8,"mat-hint"),c(9,"Pick a local image or type one to pull from a registry."),l()()}if(n&2){let e=Te(5),t=h().$implicit,i=h(3);m(3),v("value",i.selections()[t.key])("matAutocomplete",e),m(3),K(i.dockerFiltered()[t.key]||at(2,Uye))}}function Xye(n,o){if(n&1&&(r(0,"mat-option",25),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function Yye(n,o){if(n&1){let e=R();r(0,"mat-form-field",21)(1,"mat-label"),c(2,"Replacement image"),l(),r(3,"mat-select",26),_("selectionChange",function(i){y(e);let a=h().$implicit,s=h(3);return w(s.onSelectionChange(a.key,i.value))}),r(4,"mat-option"),c(5,"Choose replacement image"),l(),Q(6,Xye,2,2,"mat-option",25,Oe),l()()}if(n&2){let e=h().$implicit,t=h(3);m(3),v("value",t.selections()[e.key]),m(3),K(e.options)}}function Zye(n,o){n&1&&(r(0,"div",22)(1,"mat-icon"),c(2,"error_outline"),l(),r(3,"span"),c(4,"No compatible image available"),l()())}function Jye(n,o){if(n&1&&(r(0,"div",17)(1,"div",18)(2,"span",19),c(3),l(),r(4,"span",20),c(5),l()(),T(6,Kye,10,3,"mat-form-field",21)(7,Yye,8,1,"mat-form-field",21)(8,Zye,5,0,"div",22),l()),n&2){let e=o.$implicit;m(3),N(e.propertyLabel),m(),v("matTooltip",e.image),m(),N(e.image),m(),E(e.isDocker?6:e.options.length?7:8)}}function ewe(n,o){if(n&1&&(r(0,"section",12)(1,"header",13)(2,"mat-icon",14),c(3,"dns"),l(),r(4,"h3",15),c(5),l(),r(6,"span",16),c(7),l()(),Q(8,Jye,9,4,"div",17,Gye),l()),n&2){let e=o.$implicit;m(5),N(e.node.name),m(2),N(e.node.node_type),m(),K(e.rows)}}function twe(n,o){if(n&1&&(r(0,"p",11),c(1),l(),Q(2,ewe,10,2,"section",12,Wye)),n&2){let e=h();m(),N(e.introText),m(),K(e.groups())}}function nwe(n,o){n&1&&L(0,"mat-spinner",9)}function iwe(n,o){n&1&&(r(0,"span"),c(1,"Apply"),l())}var owe={hda_disk_image:"Hard disk (HDA)",hdb_disk_image:"Hard disk (HDB)",hdc_disk_image:"Hard disk (HDC)",hdd_disk_image:"Hard disk (HDD)",cdrom_image:"CD-ROM",cdrom2_image:"Second CD-ROM",initrd:"Initrd",kernel_image:"Kernel",bios_image:"BIOS",image:"Image",path:"Image"},awe={qemu:"qemu",dynamips:"ios",iou:"iou",docker:"docker"},ZB=(()=>{class n{dialogRef=f(We);data=f(Wt);imageManagerService=f(Ns);dockerService=f(td);nodeService=f(ft);nodesDataSource=f(Xn);toasterService=f(re);loading=z(!0);applying=z(!1);groups=z([]);selections=z({});dockerFiltered=z({});get dismissButtonText(){return this.data.dismissButtonText||"Open project without fixing"}get title(){return this.data.title||"Project missing images"}get introText(){return this.data.introText||"This project references images that are not available. Select a compatible replacement for each entry below: emulator images come from the image manager, while Docker images can be picked from the compute or typed in to be pulled from a registry. Nodes without a compatible image are kept in a degraded state and cannot be started."}images=[];dockerImagesByCompute=new Map;ngOnInit(){this.loadImages()}loadImages(){let e=this.data.nodes.some(d=>(d.missing_images||[]).some(p=>(p.image_type||this.imageTypeForNode(d.node_type))!=="docker")),t=new Set;for(let d of this.data.nodes)(d.missing_images||[]).some(u=>(u.image_type||this.imageTypeForNode(d.node_type))==="docker")&&d.compute_id&&t.add(d.compute_id);let i=e?this.imageManagerService.getImages(this.data.controller).pipe(ei(()=>Vt([]))):Vt([]),a=[...t].map(d=>this.dockerService.getImagesForCompute(this.data.controller,d).pipe(Pt(p=>({computeId:d,images:p||[]})),ei(()=>Vt({computeId:d,images:[]})))),s=a.length?Ci(a):Vt([]);Ci({emulatorImages:i,dockerImages:s}).subscribe(d=>{this.images=d.emulatorImages,this.dockerImagesByCompute.clear();for(let p of d.dockerImages)this.dockerImagesByCompute.set(p.computeId,p.images.filter(u=>!!u?.image));this.buildGroups()})}imageTypeForNode(e){return awe[e]||e}buildGroups(){let e=[],t={};for(let i of this.data.nodes){let a=(i.missing_images||[]).filter(d=>!!d.image);if(a.length===0)continue;let s=a.map((d,p)=>{let u=d.property||"image",g=d.image_type||this.imageTypeForNode(i.node_type),C=`${i.node_id}::${u}::${p}`,M=g==="docker",x=this.optionsForType(g,i.compute_id);return M&&(t[C]=x),{key:C,property:u,propertyLabel:owe[u]||u,image:d.image,isDocker:M,options:x}});e.push({node:i,rows:s})}this.groups.set(e),this.selections.set({}),this.dockerFiltered.set(t),this.loading.set(!1)}optionsForType(e,t){return e==="docker"?[...new Set((this.dockerImagesByCompute.get(t||"")||[]).map(i=>i.image))].sort():[...new Set(this.images.filter(i=>i.image_type===e).map(i=>i.filename).filter(Boolean))].sort()}onSelectionChange(e,t){this.selections.update(i=>ze(q({},i),{[e]:t}))}onDockerInput(e,t){this.selections.update(p=>ze(q({},p),{[e]:t}));let a=this.groups().reduce((p,u)=>p.concat(u.rows),[]).find(p=>p.key===e)?.options||[],s=(t||"").trim().toLowerCase(),d=s?a.filter(p=>p.toLowerCase().includes(s)):a;this.dockerFiltered.update(p=>ze(q({},p),{[e]:d}))}hasChanges(){let e=this.selections();return this.groups().some(t=>t.rows.some(i=>{let a=e[i.key];return!!a&&a!==i.image}))}applyChanges(){let e=this.selections(),t=[],i=0;for(let a of this.groups()){let s=q({},a.node.properties),d=!1,p=0;for(let u of a.rows){let g=e[u.key]?.trim();g&&g!==u.image?(s[u.property]=g,d=!0):p+=1}if(d){let u=ze(q({},a.node),{properties:s});t.push(this.nodeService.updateNode(this.data.controller,u).pipe(Pt(g=>({node:g,success:!0,remaining:g?.missing_image?g.missing_images?.length||1:0})),ei(g=>{let C=g?.error?.message||g?.message||"Failed to update node image";return this.toasterService.error(C),Vt({node:void 0,success:!1,remaining:a.rows.length})})))}else i+=p}if(t.length===0){this.dialogRef.close({updated:0,remaining:i});return}this.applying.set(!0),Ci(t).subscribe(a=>{for(let p of a)p.node&&this.nodesDataSource.update(p.node);let s=a.filter(p=>p.success).length,d=a.reduce((p,u)=>p+u.remaining,0);this.dialogRef.close({updated:s,remaining:i+d})})}close(){let e=this.groups().reduce((t,i)=>t+i.rows.length,0);this.dialogRef.close({updated:0,remaining:e})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-missing-images-dialog"]],decls:16,vars:6,consts:[["dockerAutocomplete","matAutocomplete"],[1,"missing-images-dialog"],["mat-dialog-title","",1,"missing-images-dialog__header"],["aria-hidden","true",1,"missing-images-dialog__icon"],[1,"missing-images-dialog__content"],[1,"missing-images-dialog__loading"],["align","end"],["mat-stroked-button","","type","button",3,"click","disabled"],["mat-flat-button","","color","primary","type","button",3,"click","disabled"],["diameter","18",1,"missing-images-dialog__spinner"],["diameter","40"],[1,"missing-images-dialog__intro"],[1,"missing-images-dialog__node"],[1,"missing-images-dialog__node-header"],[1,"missing-images-dialog__node-icon"],[1,"missing-images-dialog__node-name"],[1,"missing-images-dialog__node-type"],[1,"missing-images-dialog__row"],[1,"missing-images-dialog__row-info"],[1,"missing-images-dialog__property"],[1,"missing-images-dialog__missing-file",3,"matTooltip"],["appearance","outline","subscriptSizing","dynamic",1,"missing-images-dialog__select"],[1,"missing-images-dialog__no-option"],["matInput","","type","text","placeholder","Choose replacement image",3,"input","value","matAutocomplete"],[3,"optionSelected"],[3,"value"],["panelClass","missing-images-select-panel","placeholder","Choose replacement image",3,"selectionChange","value"]],template:function(t,i){t&1&&(r(0,"div",1)(1,"div",2)(2,"span",3)(3,"mat-icon"),c(4,"warning"),l()(),r(5,"h2"),c(6),l()(),r(7,"mat-dialog-content",4),T(8,qye,2,0,"div",5)(9,twe,4,1),l(),r(10,"mat-dialog-actions",6)(11,"button",7),_("click",function(){return i.close()}),c(12),l(),r(13,"button",8),_("click",function(){return i.applyChanges()}),T(14,nwe,1,0,"mat-spinner",9)(15,iwe,2,0,"span"),l()()()),t&2&&(m(6),N(i.title),m(2),E(i.loading()?8:9),m(3),v("disabled",i.applying()),m(),X(" ",i.dismissButtonText," "),m(),v("disabled",i.applying()||!i.hasChanges()),m(),E(i.applying()?14:15))},dependencies:[Jo,ha,nt,ho,Y,he,ke,qe,Qe,bt,we,Pe,Ve,Dr,ie,ce,ye,Ee,rt,mt,ot,ct,st,pt],encapsulation:2,changeDetection:0})}return n})();var IM=(()=>{class n{dialog=f(Xe);open(e,t,i){let a=(t||[]).filter(p=>p.missing_image&&(p.missing_images?.length??0)>0);if(a.length===0)return Vt(void 0);let s=i?.contentSized?"missing-images-dialog-panel--content-sized":"missing-images-dialog-panel--project";return this.dialog.open(ZB,{panelClass:["base-dialog-panel","dialog-large-panel","missing-images-dialog-panel",s],autoFocus:!1,data:{controller:e,nodes:a,title:i?.title,introText:i?.introText,dismissButtonText:i?.dismissButtonText}}).afterClosed()}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var JB=new Set(["cloud","nat","ethernet_hub","ethernet_switch","frame_relay_switch","atm_switch","dynamips","iou"]),rwe={cloud:"Cloud",nat:"NAT",ethernet_hub:"Ethernet hub",ethernet_switch:"Ethernet switch",frame_relay_switch:"Frame relay switch",atm_switch:"ATM switch",docker:"Docker container",dynamips:"Dynamips router",iou:"IOU device",qemu:"QEMU VM",virtualbox:"VirtualBox VM",vmware:"VMware VM",vpcs:"VPCS host"},swe={started:"Started",stopped:"Stopped",suspended:"Suspended"},AM=(()=>{class n{getInfoAboutNode(e,t){let i=JB.has(e.node_type);return{status:e.status,statusLabel:i?"Always on":swe[e.status]??e.status,alwaysOn:i,nodeType:e.node_type,nodeTypeLabel:rwe[e.node_type]??e.node_type,nodeId:e.node_id,console:e.console_type&&e.console_type!=="none"&&e.console_type!=="null"?{port:e.console,type:e.console_type}:null,controller:{id:t.id,name:t.name,port:t.port},ports:e.ports.map(a=>({name:a.name,linkType:a.link_type??"",macAddress:a.mac_address}))}}getCommandLine(e){return JB.has(e.node_type)?{kind:"unsupported",commandLine:"",message:"Command line information is not supported for this type of node."}:e.command_line?{kind:"available",commandLine:e.command_line,message:""}:{kind:"not-running",commandLine:"",message:"Please start the node in order to get the command line information."}}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var lwe=(n,o)=>o.name;function cwe(n,o){if(n&1){let e=R();r(0,"div",17)(1,"code"),c(2),l(),r(3,"button",18),_("click",function(){y(e);let i=h().$implicit,a=h(2);return w(a.copyMacAddress(i.macAddress))}),r(4,"mat-icon"),c(5,"content_copy"),l()()()}if(n&2){let e=h().$implicit;m(2),N(e.macAddress),m(),Ce("aria-label","Copy MAC address for "+e.name)}}function dwe(n,o){n&1&&c(0," \u2014 ")}function mwe(n,o){if(n&1&&(r(0,"tr")(1,"td"),c(2),l(),r(3,"td"),c(4),l(),r(5,"td"),T(6,cwe,6,2,"div",17)(7,dwe,1,0),l()()),n&2){let e=o.$implicit;m(2),N(e.name),m(2),N(e.linkType||"\u2014"),m(2),E(e.macAddress?6:7)}}function pwe(n,o){if(n&1&&(r(0,"table",10)(1,"thead")(2,"tr")(3,"th"),c(4,"Name"),l(),r(5,"th"),c(6,"Link type"),l(),r(7,"th"),c(8,"MAC address"),l()()(),r(9,"tbody"),Q(10,mwe,8,3,"tr",null,lwe),l()()),n&2){let e=h();m(10),K(e.info.ports)}}function uwe(n,o){if(n&1&&L(0,"app-markdown-viewer",12),n&2){let e=h();v("data",e.usage)}}function gwe(n,o){n&1&&(r(0,"p",13),c(1,"No usage information has been provided for this node."),l())}function hwe(n,o){if(n&1){let e=R();r(0,"div",19)(1,"button",20),_("click",function(){y(e);let i=h();return w(i.copyCommandLine())}),r(2,"mat-icon"),c(3,"content_copy"),l()()(),r(4,"pre",21)(5,"code"),c(6),l()()}if(n&2){let e=h();m(6),N(e.commandLineInfo.commandLine)}}function _we(n,o){if(n&1&&(r(0,"p",13),c(1),l()),n&2){let e=h();m(),N(e.commandLineInfo.message)}}var NM=(()=>{class n{data;dialogRef=f(We);infoService=f(AM);clipboard=f(Hd);toasterService=f(re);info;commandLineInfo;usage;constructor(e){this.data=e,this.info=this.infoService.getInfoAboutNode(e.node,e.controller),this.commandLineInfo=this.infoService.getCommandLine(e.node),this.usage=e.node.usage??""}get statusKey(){return this.info.alwaysOn?"always-on":this.info.status}get consoleLabel(){return this.info.console?`${this.info.console.type} (port ${this.info.console.port})`:"\u2014"}get controllerLabel(){return`${this.info.controller.name} (port ${this.info.controller.port})`}copyCommandLine(){if(this.commandLineInfo.kind!=="available")return;this.clipboard.copy(this.commandLineInfo.commandLine)?this.toasterService.success("Command line copied to clipboard"):this.toasterService.error("Failed to copy to clipboard")}copyMacAddress(e){this.clipboard.copy(e)?this.toasterService.success("MAC address copied to clipboard"):this.toasterService.error("Failed to copy to clipboard")}onClose(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)(Mt(Wt))};static \u0275cmp=V({type:n,selectors:[["app-info-dialog"]],decls:51,vars:11,consts:[["mat-dialog-title",""],["animationDuration","0ms"],["label","General information"],[1,"info-dialog__tab-body"],[1,"detail-row"],[1,"detail-row__label"],[1,"detail-row__value","detail-row__value--status"],[1,"status-dot"],[1,"detail-row__value"],[1,"detail-row__value","detail-row__value--mono"],[1,"info-dialog__ports-table"],["label","Usage instructions"],[1,"info-dialog__usage",3,"data"],[1,"info-dialog__empty-note"],["label","Command line"],["align","end"],["mat-button","",3,"click"],[1,"info-dialog__mac-address"],["mat-icon-button","","matTooltip","Copy MAC address",3,"click"],[1,"info-dialog__code-header"],["mat-icon-button","","matTooltip","Copy to clipboard",3,"click"],[1,"info-dialog__code"]],template:function(t,i){t&1&&(r(0,"h2",0),c(1),l(),r(2,"mat-dialog-content")(3,"mat-tab-group",1)(4,"mat-tab",2)(5,"div",3)(6,"div",4)(7,"span",5),c(8,"Status"),l(),r(9,"span",6),L(10,"span",7),c(11),l()(),r(12,"div",4)(13,"span",5),c(14,"Node type"),l(),r(15,"span",8),c(16),l()(),r(17,"div",4)(18,"span",5),c(19,"Node ID"),l(),r(20,"span",9)(21,"code"),c(22),l()()(),r(23,"div",4)(24,"span",5),c(25,"Console"),l(),r(26,"span",8),c(27),l()(),r(28,"div",4)(29,"span",5),c(30,"Controller"),l(),r(31,"span",8),c(32),l()(),r(33,"div",4)(34,"span",5),c(35,"Controller ID"),l(),r(36,"span",9)(37,"code"),c(38),l()()(),T(39,pwe,12,0,"table",10),l()(),r(40,"mat-tab",11)(41,"div",3),T(42,uwe,1,1,"app-markdown-viewer",12)(43,gwe,2,0,"p",13),l()(),r(44,"mat-tab",14)(45,"div",3),T(46,hwe,7,1)(47,_we,2,1,"p",13),l()()()(),r(48,"mat-dialog-actions",15)(49,"button",16),_("click",function(){return i.onClose()}),c(50,"Close"),l()()),t&2&&(m(),N(i.data.node.name),m(9),Ce("data-status",i.statusKey),m(),X(" ",i.info.statusLabel," "),m(5),N(i.info.nodeTypeLabel),m(6),N(i.info.nodeId),m(5),N(i.consoleLabel),m(5),N(i.controllerLabel),m(6),N(i.info.controller.id),m(),E(i.info.ports.length?39:-1),m(3),E(i.usage?42:43),m(4),E(i.commandLineInfo.kind==="available"?46:47))},dependencies:[ke,qe,Qe,bt,Y,he,Be,ie,ce,st,pt,bo,Xo,Yo,Fl],styles:[".info-dialog__tab-body[_ngcontent-%COMP%]{padding:16px 0 8px}.detail-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:112px minmax(0,1fr);align-items:baseline;gap:var(--gns3-density-space-3);margin-bottom:var(--gns3-density-space-4)}.detail-row__label[_ngcontent-%COMP%]{margin:0;white-space:nowrap;font-size:12px;font-weight:500;color:var(--mat-sys-on-surface-variant)}.detail-row__value[_ngcontent-%COMP%]{min-width:0;overflow-wrap:anywhere;font-size:14px;color:var(--mat-sys-on-surface)}.detail-row__value--status[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:8px}.detail-row__value--mono[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{display:block;width:fit-content;max-width:100%;box-sizing:border-box;padding:4px 8px;background:var(--mat-sys-surface-container-highest);color:var(--mat-sys-on-surface);border-radius:4px;font-family:var(--gns3-font-code);font-size:13px;overflow-wrap:anywhere;user-select:all}.status-dot[_ngcontent-%COMP%]{display:inline-block;flex:0 0 12px;width:12px;height:12px;border-radius:50%;background:var(--mat-sys-outline)}.status-dot[data-status=started][_ngcontent-%COMP%]{background:var(--custom-mat-sys-success)}.status-dot[data-status=stopped][_ngcontent-%COMP%]{background:var(--mat-sys-error)}.status-dot[data-status=suspended][_ngcontent-%COMP%]{background:var(--mat-sys-secondary)}.status-dot[data-status=always-on][_ngcontent-%COMP%]{background:var(--mat-sys-primary)}.info-dialog__ports-table[_ngcontent-%COMP%]{width:100%;table-layout:fixed;margin-top:8px;border-collapse:collapse}.info-dialog__ports-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], .info-dialog__ports-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{width:33.3333333333%;overflow-wrap:anywhere}.info-dialog__ports-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{padding:6px 16px 6px 0;border-bottom:1px solid var(--mat-sys-outline-variant);text-align:left;font-size:12px;font-weight:500;color:var(--mat-sys-on-surface-variant)}.info-dialog__ports-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:6px 16px 6px 0;border-bottom:1px solid var(--mat-sys-outline-variant);font-size:13px;color:var(--mat-sys-on-surface)}.info-dialog__ports-table[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%]{border-bottom:none}.info-dialog__code-header[_ngcontent-%COMP%]{display:flex;justify-content:flex-end}.info-dialog__code[_ngcontent-%COMP%]{display:block;margin:0;padding:16px;background:var(--mat-sys-surface-container-highest);color:var(--mat-sys-on-surface);border-radius:8px;font-family:var(--gns3-font-code);font-size:13px;line-height:1.5;white-space:pre-wrap;word-break:break-word;overflow-x:auto}.info-dialog__empty-note[_ngcontent-%COMP%]{margin:16px 0 8px;font-size:14px;color:var(--mat-sys-on-surface-variant)}.info-dialog__mac-address[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px}.info-dialog__mac-address[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{font-family:var(--gns3-font-code);user-select:all;white-space:nowrap}"],changeDetection:0})}return n})();var FM=(()=>{class n{dialog=f(Xe);node=ee(void 0);controller=ee(void 0);showNode(){this.dialog.open(NM,{panelClass:["base-dialog-panel","show-node-action-dialog-panel","dialog-small-panel","dialog-height-60-panel"],autoFocus:!1,data:{node:this.node(),controller:this.controller()}})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-show-node-action"]],inputs:{node:[1,"node"],controller:[1,"controller"]},decls:5,vars:0,consts:[["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&(r(0,"button",0),_("click",function(){return i.showNode()}),r(1,"mat-icon"),c(2,"info"),l(),r(3,"span"),c(4,"Show node information"),l()())},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();function fwe(n,o){n&1&&(r(0,"div",5),L(1,"mat-spinner",10),l())}function vwe(n,o){n&1&&(r(0,"th",32),c(1,"Source Port : VPI : VCI"),l())}function Cwe(n,o){if(n&1&&(r(0,"td",33),c(1),l()),n&2){let e=o.$implicit;m(),N(e.portIn)}}function bwe(n,o){n&1&&(r(0,"th",32),c(1,"Destination Port : VPI : VCI"),l())}function xwe(n,o){if(n&1&&(r(0,"td",33),c(1),l()),n&2){let e=o.$implicit;m(),N(e.portOut)}}function ywe(n,o){n&1&&(r(0,"th",32),c(1,"Actions"),l())}function wwe(n,o){if(n&1){let e=R();r(0,"td",33)(1,"button",34),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.delete(i))}),r(2,"mat-icon",35),c(3,"delete"),l()()()}}function Mwe(n,o){n&1&&L(0,"tr",36)}function Swe(n,o){n&1&&L(0,"tr",37)}function kwe(n,o){if(n&1){let e=R();r(0,"div",11)(1,"div",12)(2,"span",13)(3,"mat-icon"),c(4,"tune"),l(),c(5,"General"),l()()(),r(6,"div",14)(7,"div",15)(8,"mat-card")(9,"h2",16),c(10,"ATM mappings"),l(),r(11,"mat-form-field",17)(12,"mat-label"),c(13,"Name"),l(),r(14,"input",18),_("input",function(i){y(e);let a=h();return w(a.nameSignal.set(i.target.value))}),l()(),r(15,"mat-checkbox",19),_("change",function(i){y(e);let a=h();return w(a.useVpiOnly.set(i.checked))}),c(16," Use VPI only (VP tunnel) "),l(),r(17,"div",20)(18,"mat-form-field",21)(19,"mat-label"),c(20,"Source Port"),l(),r(21,"input",18),_("input",function(i){y(e);let a=h();return w(a.sourcePort.set(i.target.value))}),l()(),r(22,"mat-form-field",21)(23,"mat-label"),c(24,"Destination Port"),l(),r(25,"input",18),_("input",function(i){y(e);let a=h();return w(a.destinationPort.set(i.target.value))}),l()()(),r(26,"div",20)(27,"mat-form-field",21)(28,"mat-label"),c(29,"Source VCI"),l(),r(30,"input",18),_("input",function(i){y(e);let a=h();return w(a.sourceVci.set(i.target.value))}),l()(),r(31,"mat-form-field",21)(32,"mat-label"),c(33,"Destination VCI"),l(),r(34,"input",18),_("input",function(i){y(e);let a=h();return w(a.destinationVci.set(i.target.value))}),l()()(),r(35,"div",20)(36,"mat-form-field",21)(37,"mat-label"),c(38,"Source VPI"),l(),r(39,"input",18),_("input",function(i){y(e);let a=h();return w(a.sourceVpi.set(i.target.value))}),l()(),r(40,"mat-form-field",21)(41,"mat-label"),c(42,"Destination VPI"),l(),r(43,"input",18),_("input",function(i){y(e);let a=h();return w(a.destinationVpi.set(i.target.value))}),l()()(),r(44,"div",22)(45,"button",23),_("click",function(){y(e);let i=h();return w(i.add())}),c(46,"Add"),l()(),r(47,"table",24),Fe(48,25),se(49,vwe,2,0,"th",26)(50,Cwe,2,1,"td",27),Re(),Fe(51,28),se(52,bwe,2,0,"th",26)(53,xwe,2,1,"td",27),Re(),Fe(54,29),se(55,ywe,2,0,"th",26)(56,wwe,4,0,"td",27),Re(),se(57,Mwe,1,0,"tr",30)(58,Swe,1,0,"tr",31),l()()()()}if(n&2){let e=h();m(14),v("value",e.nameSignal()),m(),v("checked",e.useVpiOnly()),m(6),v("value",e.sourcePort()),m(4),v("value",e.destinationPort()),m(5),v("value",e.sourceVci()),m(4),v("value",e.destinationVci()),m(5),v("value",e.sourceVpi()),m(4),v("value",e.destinationVpi()),m(4),v("dataSource",e.nodeMappingsDataSource()),m(10),v("matHeaderRowDef",e.displayedColumns),m(),v("matRowDefColumns",e.displayedColumns)}}function Pwe(n,o){n&1&&L(0,"mat-spinner",9)}function Twe(n,o){n&1&&c(0," Apply ")}var RM=(()=>{class n{dialogRef=f(We);nodeService=f(ft);toasterService=f(re);validationService=f(SE);controller;node;name;nameSignal=$("");useVpiOnly=$(!1);sourcePort=$("");sourceVci=$("");destinationPort=$("");destinationVci=$("");sourceVpi=$("");destinationVpi=$("");nodeMappings=z(new Map);nodeMappingsDataSource=z([]);displayedColumns=["portIn","portOut","actions"];isApplying=z(!1);isLoading=z(!0);constructor(){}ngOnInit(){this.nodeService.getNode(this.controller,this.node).subscribe({next:e=>{this.node=e,this.name=e.name,this.nameSignal.set(e.name),this.useVpiOnly.set(!1);let t=e.properties.mappings,i=new Map;Object.keys(t).forEach(a=>{i.set(a,t[a])}),this.nodeMappings.set(i),this.nodeMappingsDataSource.set(Array.from(i.entries()).map(([a,s])=>({portIn:a,portOut:s}))),this.isLoading.set(!1),this.dialogRef.disableClose=!1},error:e=>{let t=e.error?.message||e.message||"Failed to load node";this.toasterService.error(t),this.isLoading.set(!1),this.dialogRef.disableClose=!1}})}delete(e){this.nodeMappingsDataSource.set(this.nodeMappingsDataSource().filter(t=>t!==e))}add(){let e=this.validationService.validateMappingEntry(this.sourcePort(),this.sourceVci(),this.destinationPort(),this.destinationVci(),this.sourceVpi(),this.destinationVpi(),this.useVpiOnly());if(!e.isValid){this.toasterService.error(e.errorMessage||"Invalid input");return}let t;this.useVpiOnly()?t={portIn:`${this.sourcePort()}:${this.sourceVci()}`,portOut:`${this.destinationPort()}:${this.destinationVci()}`}:t={portIn:`${this.sourcePort()}:${this.sourceVpi()}:${this.sourceVci()}`,portOut:`${this.destinationPort()}:${this.destinationVpi()}:${this.destinationVci()}`};let i=this.validationService.validateUniqueMapping(t.portIn,this.nodeMappingsDataSource());if(!i.isValid){this.toasterService.error(i.errorMessage||"Mapping already defined");return}this.nodeMappingsDataSource.set([...this.nodeMappingsDataSource(),t]),this.clearUserInput()}clearUserInput(){this.sourcePort.set(""),this.sourceVci.set(""),this.destinationPort.set(""),this.destinationVci.set(""),this.sourceVpi.set(""),this.destinationVpi.set("")}strMapToObj(e){let t=Object.create(null);for(let[i,a]of e)t[i]=a;return t}onSaveClick(){if(this.isApplying())return;if(!this.nameSignal()){this.toasterService.error("Fill all required fields.");return}this.node.name=this.nameSignal();let e=new Map;this.nodeMappingsDataSource().forEach(t=>{e.set(t.portIn,t.portOut)}),this.node.properties.mappings=Array.from(e.entries()).reduce((t,[i,a])=>Object.assign(t,{[i]:a}),{}),this.isApplying.set(!0),this.dialogRef.disableClose=!0,this.nodeService.updateNode(this.controller,this.node).subscribe({next:()=>{this.toasterService.success(`Node ${this.node.name} updated.`),this.onCancelClick()},error:t=>{let i=t?.error?.message||t?.message||"Failed to update node";this.toasterService.error(i),this.isApplying.set(!1),this.dialogRef.disableClose=!1}})}onCancelClick(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-configurator-atm-switch"]],inputs:{nameSignal:[1,"nameSignal"],useVpiOnly:[1,"useVpiOnly"],sourcePort:[1,"sourcePort"],sourceVci:[1,"sourceVci"],destinationPort:[1,"destinationPort"],destinationVci:[1,"destinationVci"],sourceVpi:[1,"sourceVpi"],destinationVpi:[1,"destinationVpi"]},outputs:{nameSignal:"nameSignalChange",useVpiOnly:"useVpiOnlyChange",sourcePort:"sourcePortChange",sourceVci:"sourceVciChange",destinationPort:"destinationPortChange",destinationVci:"destinationVciChange",sourceVpi:"sourceVpiChange",destinationVpi:"destinationVpiChange"},decls:18,vars:4,consts:[["mat-dialog-title","",1,"node-config__header"],[1,"node-config__title"],["aria-hidden","true"],["mat-icon-button","","type","button","aria-label","Close node configuration",1,"node-config__close",3,"click"],[1,"modal-form-container"],[1,"configurator-dialog-loading"],["mat-dialog-actions",""],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"],["diameter","20"],["diameter","40"],["role","tablist","aria-label","Node configuration sections",1,"node-config__single-tab"],["role","tab","aria-selected","true"],[1,"node-config__tab-label"],[1,"content"],[1,"default-content"],[1,"node-config__section-heading"],["appearance","outline","subscriptSizing","dynamic",1,"form-field"],["matInput","","type","text",3,"input","value"],[3,"change","checked"],[1,"atm-switch__input-grid","gns3-form-layout-fixed"],["appearance","outline","subscriptSizing","fixed",1,"form-field"],[1,"atm-switch__add-btn"],["mat-flat-button","","color","primary",1,"node-config__add-button",3,"click"],["mat-table","",3,"dataSource"],["matColumnDef","portIn"],["mat-header-cell","",4,"matHeaderCellDef"],["mat-cell","",4,"matCellDef"],["matColumnDef","portOut"],["matColumnDef","actions"],["mat-header-row","",4,"matHeaderRowDef"],["mat-row","",4,"matRowDef","matRowDefColumns"],["mat-header-cell",""],["mat-cell",""],["mat-icon-button","","matTooltip","Delete mapping","matTooltipClass","custom-tooltip",3,"click"],["aria-label","Delete mapping"],["mat-header-row",""],["mat-row",""]],template:function(t,i){t&1&&(r(0,"div",0)(1,"h1",1),c(2,"Configure Node "),r(3,"span",2),c(4,"\u2014"),l(),c(5),l(),r(6,"button",3),_("click",function(){return i.onCancelClick()}),r(7,"mat-icon"),c(8,"close"),l()()(),r(9,"div",4),T(10,fwe,2,0,"div",5)(11,kwe,59,11),l(),r(12,"div",6)(13,"button",7),_("click",function(){return i.onCancelClick()}),c(14,"Cancel"),l(),r(15,"button",8),_("click",function(){return i.onSaveClick()}),T(16,Pwe,1,0,"mat-spinner",9)(17,Twe,1,0),l()()),t&2&&(m(5),X(" ATM switch ",i.name),m(5),E(i.isLoading()?10:11),m(5),v("disabled",i.isApplying()||i.isLoading()),m(),E(i.isApplying()?16:17))},dependencies:[fe,St,ke,qe,Qe,hn,Zn,_n,bn,yn,kn,wn,xn,Pn,Mn,Sn,Tn,En,we,Pe,Ve,ye,Ee,Y,he,Be,Rt,Gt,ie,ce,st,pt,rt,mt],styles:["[_nghost-%COMP%]{display:block;min-width:0;container-type:inline-size}.atm-switch__input-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 var(--gns3-density-space-4)}@container (max-width: 480px){.atm-switch__input-grid[_ngcontent-%COMP%]{grid-template-columns:minmax(0,1fr)}}.atm-switch__add-btn[_ngcontent-%COMP%]{display:flex;justify-content:center;margin-bottom:16px}.atm-switch__add-btn[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:80%}"],changeDetection:0})}return n})();function Ewe(n,o){n&1&&(r(0,"th",16),c(1,"Name"),l())}function Owe(n,o){if(n&1&&(r(0,"td",17),c(1),l()),n&2){let e=o.$implicit;m(),N(e.name)}}function Dwe(n,o){n&1&&(r(0,"th",16),c(1,"Local port"),l())}function Iwe(n,o){if(n&1&&(r(0,"td",17),c(1),l()),n&2){let e=o.$implicit;m(),N(e.lport)}}function Awe(n,o){n&1&&(r(0,"th",16),c(1,"Remote host"),l())}function Nwe(n,o){if(n&1&&(r(0,"td",17),c(1),l()),n&2){let e=o.$implicit;m(),N(e.rhost)}}function Fwe(n,o){n&1&&(r(0,"th",16),c(1,"Remote port"),l())}function Rwe(n,o){if(n&1&&(r(0,"td",17),c(1),l()),n&2){let e=o.$implicit;m(),N(e.rport)}}function zwe(n,o){n&1&&(r(0,"th",16),c(1,"Actions"),l())}function Lwe(n,o){if(n&1){let e=R();r(0,"td",17)(1,"button",18),_("click",function(){let i=y(e).$implicit,a=h();return w(a.delete(i))}),r(2,"mat-icon",19),c(3,"delete"),l()()()}}function Vwe(n,o){n&1&&L(0,"tr",20)}function Bwe(n,o){n&1&&L(0,"tr",21)}var zM=(()=>{class n{dataSourceUdp=[];displayedColumns=["name","lport","rhost","rport","action"];newPortName=$("");newPortLport=$(0);newPortRhost=$("");newPortRport=$(0);portTypes=z([]);etherTypes=z([]);builtInTemplatesConfigurationService=f(zr);toasterService=f(re);validationService=f(Hn);ngOnInit(){this.getConfiguration()}getConfiguration(){this.etherTypes.set(this.builtInTemplatesConfigurationService.getEtherTypesForEthernetSwitches()),this.portTypes.set(this.builtInTemplatesConfigurationService.getPortTypesForEthernetSwitches())}onAddUdpInterface(){let e=this.validationService.required(this.newPortRhost(),"Remote host");if(!e.isValid){this.toasterService.error(e.errorMessage||"Remote host is required");return}if(this.newPortLport()<1||this.newPortLport()>65535){this.toasterService.error("Local port must be between 1 and 65535");return}if(this.newPortRport()<1||this.newPortRport()>65535){this.toasterService.error("Remote port must be between 1 and 65535");return}let t={name:this.newPortName(),lport:this.newPortLport(),rhost:this.newPortRhost(),rport:this.newPortRport(),port_number:0,type:"udp"};this.dataSourceUdp=this.dataSourceUdp.concat([t]),this.newPortName.set(""),this.newPortLport.set(0),this.newPortRhost.set(""),this.newPortRport.set(0)}delete(e){this.dataSourceUdp=this.dataSourceUdp.filter(t=>t!==e)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-udp-tunnels"]],inputs:{dataSourceUdp:"dataSourceUdp",newPortName:[1,"newPortName"],newPortLport:[1,"newPortLport"],newPortRhost:[1,"newPortRhost"],newPortRport:[1,"newPortRport"]},outputs:{newPortName:"newPortNameChange",newPortLport:"newPortLportChange",newPortRhost:"newPortRhostChange",newPortRport:"newPortRportChange"},decls:38,vars:7,consts:[[1,"udp-tunnels__input-grid","gns3-form-layout-fixed"],["appearance","outline","subscriptSizing","fixed"],["matInput","","type","text",3,"input","value"],["matInput","","type","number","min","1","max","65535",3,"input","value"],[1,"udp-tunnels__add-btn"],["mat-flat-button","","type","button","color","primary",3,"click"],["mat-table","",3,"dataSource"],["matColumnDef","name"],["mat-header-cell","",4,"matHeaderCellDef"],["mat-cell","",4,"matCellDef"],["matColumnDef","lport"],["matColumnDef","rhost"],["matColumnDef","rport"],["matColumnDef","action"],["mat-header-row","",4,"matHeaderRowDef"],["mat-row","",4,"matRowDef","matRowDefColumns"],["mat-header-cell",""],["mat-cell",""],["mat-icon-button","","matTooltip","Delete port","matTooltipClass","custom-tooltip",3,"click"],["aria-label","Delete port"],["mat-header-row",""],["mat-row",""]],template:function(t,i){t&1&&(r(0,"div",0)(1,"mat-form-field",1)(2,"mat-label"),c(3,"Name"),l(),r(4,"input",2),_("input",function(s){return i.newPortName.set(s.target.value)}),l()(),r(5,"mat-form-field",1)(6,"mat-label"),c(7,"Remote host"),l(),r(8,"input",2),_("input",function(s){return i.newPortRhost.set(s.target.value)}),l()(),r(9,"mat-form-field",1)(10,"mat-label"),c(11,"Local port"),l(),r(12,"input",3),_("input",function(s){return i.newPortLport.set(+s.target.value)}),l()(),r(13,"mat-form-field",1)(14,"mat-label"),c(15,"Remote port"),l(),r(16,"input",3),_("input",function(s){return i.newPortRport.set(+s.target.value)}),l()()(),r(17,"div",4)(18,"button",5),_("click",function(){return i.onAddUdpInterface()}),c(19,"Add UDP tunnel"),l()(),r(20,"table",6),Fe(21,7),se(22,Ewe,2,0,"th",8)(23,Owe,2,1,"td",9),Re(),Fe(24,10),se(25,Dwe,2,0,"th",8)(26,Iwe,2,1,"td",9),Re(),Fe(27,11),se(28,Awe,2,0,"th",8)(29,Nwe,2,1,"td",9),Re(),Fe(30,12),se(31,Fwe,2,0,"th",8)(32,Rwe,2,1,"td",9),Re(),Fe(33,13),se(34,zwe,2,0,"th",8)(35,Lwe,4,0,"td",9),Re(),se(36,Vwe,1,0,"tr",14)(37,Bwe,1,0,"tr",15),l()),t&2&&(m(4),v("value",i.newPortName()),m(4),v("value",i.newPortRhost()),m(4),v("value",i.newPortLport()),m(4),v("value",i.newPortRport()),m(4),v("dataSource",i.dataSourceUdp),m(16),v("matHeaderRowDef",i.displayedColumns),m(),v("matRowDefColumns",i.displayedColumns))},dependencies:[fe,_n,bn,yn,kn,wn,xn,Pn,Mn,Sn,Tn,En,we,Pe,Ve,ye,Ee,Y,he,Be,ie,ce,st,pt],styles:['[_nghost-%COMP%]{display:block;width:100%;background:transparent}.templates-page__content[_ngcontent-%COMP%]{animation:none}.templates-page__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:20px;max-width:1600px;margin:0 auto;padding:24px 20px 16px}.templates-page__heading[_ngcontent-%COMP%], .templates-page__header-actions[_ngcontent-%COMP%]{display:flex;align-items:center}.templates-page__heading[_ngcontent-%COMP%]{min-width:0;gap:var(--gns3-density-space-3)}.templates-page__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.templates-page__header-actions[_ngcontent-%COMP%]{gap:var(--gns3-density-space-3)}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);border-radius:12px;padding-inline:18px;font-size:15px;font-weight:500;letter-spacing:.3px;text-transform:none}[class*=-templates__header][_ngcontent-%COMP%]{box-sizing:border-box;width:100%;height:calc(var(--gns3-density-space-4) * 2 + (var(--gns3-density-section-title-size) + 2px) * 1.2 + 1px);max-width:none;margin:0;padding:0 var(--gns3-density-page-padding);gap:var(--gns3-density-space-3);color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container);border-bottom:1px solid var(--mat-sys-outline-variant)}[class*=-templates__back-btn][_ngcontent-%COMP%], [class*=-templates__add-btn][_ngcontent-%COMP%]{flex:0 0 auto;width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:12px}[class*=-templates__back-btn][_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container)}[class*=-templates__add-btn][_ngcontent-%COMP%]{color:var(--mat-sys-primary)}[class*=-templates__title][_ngcontent-%COMP%]{flex:1;min-width:0;margin:0;padding-bottom:0;color:var(--mat-sys-on-primary-container);font-size:calc(var(--gns3-density-section-title-size) + 2px);font-weight:650;line-height:1.2;letter-spacing:-.01em}.templates-page__scopes[_ngcontent-%COMP%]{display:flex;gap:4px;max-width:1560px;margin:0 auto 16px;padding:0 20px;border-bottom:1px solid var(--mat-sys-outline-variant)}.templates-page__scope[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center;gap:8px;min-height:48px;padding:0 16px;border:0;color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;font-size:14px;font-weight:550;cursor:pointer}.templates-page__scope[_ngcontent-%COMP%]:after{position:absolute;right:8px;bottom:-1px;left:8px;height:2px;border-radius:2px 2px 0 0;background:transparent;content:""}.templates-page__scope[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}.templates-page__scope[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{min-width:22px;padding:2px 6px;border-radius:12px;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-high);font-size:11px;text-align:center}.templates-page__scope--active[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%]:after{background:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap);max-width:1600px;margin:0 auto;padding:0 20px 8px}.templates-page__search[_ngcontent-%COMP%]{flex:1;min-width:240px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:flex;align-items:center;flex:0 0 auto;gap:var(--gns3-density-space-3)}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{width:155px}.templates-page__view-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px;padding:4px 2px;border-radius:8px;background:var(--mat-sys-surface-container-high)}button.templates-page__view-button[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:8px;color:var(--mat-sys-on-surface-variant);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);--mat-icon-button-icon-size: 22px}button.templates-page__view-button--active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__main[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:20px;max-width:1600px;margin:0 auto;padding:0 20px 20px}.templates-page__loading[_ngcontent-%COMP%]{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;min-height:320px;gap:var(--gns3-density-card-gap);color:var(--mat-sys-on-surface-variant)}.templates-page__table-container[_ngcontent-%COMP%]{flex:1;min-width:0;border-radius:16px;background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;overflow-x:auto}mat-table[_ngcontent-%COMP%]{width:100%;min-width:850px}.mat-mdc-row[_ngcontent-%COMP%], .mat-row[_ngcontent-%COMP%]{height:var(--mat-table-row-item-container-height);min-height:var(--mat-table-row-item-container-height)}.mat-header-row[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%]{position:sticky;top:0;z-index:10;background:var(--mat-sys-surface-container-highest);box-shadow:inset 0 -2px var(--mat-sys-primary);--mat-sort-arrow-color: var(--mat-sys-primary)}.mat-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:13px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}mat-row[_ngcontent-%COMP%]{cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease}mat-row[_ngcontent-%COMP%]:nth-child(2n){background:color-mix(in srgb,var(--mat-sys-on-surface) 1%,transparent)}mat-row[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}mat-row.templates-page__row--selected[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}mat-cell[_ngcontent-%COMP%], mat-header-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:inherit;color:var(--mat-sys-on-surface)}.mat-column-name[_ngcontent-%COMP%]{flex:2.4;min-width:240px;justify-content:flex-start}.mat-column-template_type[_ngcontent-%COMP%]{flex:1.1;min-width:130px}.mat-column-category[_ngcontent-%COMP%]{flex:1;min-width:110px}.mat-column-compute_id[_ngcontent-%COMP%]{flex:1;min-width:105px}.mat-column-builtin[_ngcontent-%COMP%]{flex:0 0 90px;min-width:90px;justify-content:center}.mat-column-actions[_ngcontent-%COMP%]{flex:0 0 180px;min-width:180px;box-sizing:border-box;justify-content:flex-start;padding-right:24px}.templates-page__name-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-width:0;gap:var(--gns3-density-space-3)}.templates-page__name-copy[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:14px;font-weight:600}.templates-page__symbol[_ngcontent-%COMP%]{display:grid;flex:0 0 52px;width:52px;height:52px;overflow:hidden;place-items:center;border-radius:14px;color:var(--mat-sys-on-primary-container);background:color-mix(in srgb,var(--mat-sys-primary-container) 82%,var(--mat-sys-surface))}.templates-page__symbol[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:78%;height:78%;object-fit:contain;filter:drop-shadow(0 2px 4px color-mix(in srgb,var(--mat-sys-shadow) 25%,transparent))}.templates-page__symbol[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:27px;height:27px;font-size:27px}.templates-page__symbol--small[_ngcontent-%COMP%]{flex-basis:38px;width:38px;height:38px;border-radius:10px}.templates-page__symbol--small[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:21px;height:21px;font-size:21px}.templates-page__type-badge[_ngcontent-%COMP%], .templates-page__source-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;width:fit-content;padding:4px 9px;border-radius:16px;font-size:12px;font-weight:600;white-space:nowrap}.templates-page__type-badge[_ngcontent-%COMP%]{color:var(--mat-sys-secondary);background:color-mix(in srgb,var(--mat-sys-secondary) 11%,transparent)}.templates-page__type-badge--qemu[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__type-badge--docker[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container)}.templates-page__type-badge--dynamips[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary-container);background:var(--mat-sys-tertiary-container)}.templates-page__type-badge--cloud[_ngcontent-%COMP%]{color:var(--mat-sys-on-error-container);background:var(--mat-sys-error-container)}.templates-page__type-badge--vpcs[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary);background:var(--mat-sys-primary)}.templates-page__type-badge--ethernet-hub[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary);background:var(--mat-sys-secondary)}.templates-page__type-badge--ethernet-switch[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary);background:var(--mat-sys-tertiary)}.templates-page__type-badge--iou[_ngcontent-%COMP%]{color:var(--mat-sys-on-error);background:var(--mat-sys-error)}.templates-page__type-badge--nat[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-highest)}.templates-page__source-badge[_ngcontent-%COMP%]{color:var(--mat-sys-primary);background:color-mix(in srgb,var(--mat-sys-primary) 11%,transparent)}.templates-page__source-badge--builtin[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary);background:color-mix(in srgb,var(--mat-sys-tertiary) 11%,transparent)}.templates-page__table-footer[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:var(--mat-table-footer-container-height);padding:0 12px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container))}.templates-page__table-footer[_ngcontent-%COMP%] mat-paginator[_ngcontent-%COMP%]{width:100%;--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__actions-cell[_ngcontent-%COMP%], .templates-page__card-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:3px}button.templates-page__action[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-on-surface-variant);width:var(--gns3-density-control-height-sm);height:var(--gns3-density-control-height-sm);--mat-icon-button-state-layer-size: var(--gns3-density-control-height-sm);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-control-height-sm)}button.templates-page__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}button.templates-page__action[_ngcontent-%COMP%]{color:var(--template-action-color);--mat-icon-button-state-layer-color: var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:not(:disabled) mat-icon[_ngcontent-%COMP%]{color:var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:disabled mat-icon[_ngcontent-%COMP%]{color:var(--gns3-button-disabled-label-color)}button.templates-page__action--details[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--edit[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-primary)}button.templates-page__action--duplicate[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--delete[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-error)}.templates-page__grid[_ngcontent-%COMP%]{flex:1;min-width:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-content:start;gap:var(--gns3-density-card-gap)}.templates-page__grid--with-details[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__card[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column;padding:16px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;background:var(--mat-sys-surface);cursor:pointer;transition:transform var(--gns3-motion-duration-standard) ease,box-shadow var(--gns3-motion-duration-standard) ease,border-color var(--gns3-motion-duration-standard) ease}.templates-page__card[_ngcontent-%COMP%]:hover{border-color:var(--mat-sys-outline-variant);background:var(--mat-sys-surface-container-low)}.templates-page__card--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);box-shadow:0 0 0 1px var(--mat-sys-primary)}.templates-page__card-header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--gns3-density-space-3)}.templates-page__card-body[_ngcontent-%COMP%]{flex:1;min-width:0;padding:14px 0 12px}.templates-page__card-body[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{display:-webkit-box;overflow:hidden;margin:0 0 9px;color:var(--mat-sys-on-surface);font-size:17px;font-weight:650;line-height:1.35;overflow-wrap:anywhere;-webkit-box-orient:vertical;-webkit-line-clamp:2}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%]{display:grid;gap:8px;margin:16px 0 0}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{min-width:0;margin:0;overflow:hidden;color:var(--mat-sys-on-surface);font-size:13px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] .templates-page__card-tags-row[_ngcontent-%COMP%]{align-items:flex-start}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd.templates-page__card-tags[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px;overflow:visible;white-space:normal}.templates-page__card-actions[_ngcontent-%COMP%]{justify-content:flex-end;min-height:33px;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__grid-paginator[_ngcontent-%COMP%]{grid-column:1/-1;width:100%;border-radius:12px;background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container));--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__empty[_ngcontent-%COMP%]{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:230px;padding:32px;color:var(--mat-sys-on-surface-variant);text-align:center}.templates-page__empty[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{width:48px;height:48px;font-size:48px;opacity:.55}.templates-page__empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:12px 0 0;color:var(--mat-sys-on-surface);font-size:17px}.templates-page__empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:5px 0 0;font-size:14px}.templates-page__details[_ngcontent-%COMP%]{position:sticky;top:16px;flex:0 0 clamp(390px,31vw,480px);display:flex;min-height:380px;max-height:calc(100vh - 176px);flex-direction:column;overflow:hidden;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 60%,transparent);border-radius:16px;background:var(--mat-sys-surface);box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent);animation:_ngcontent-%COMP%_templates-slide-in var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard)}.templates-page__details-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:var(--gns3-density-space-3);min-height:56px;box-sizing:border-box;padding:8px 10px 8px 16px;border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 72%,var(--mat-sys-surface))}.templates-page__details-header[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-primary-container)}.templates-page__details-heading[_ngcontent-%COMP%]{display:flex;min-width:0;align-items:center;gap:var(--gns3-density-space-3)}.templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;margin:0;color:var(--mat-sys-on-primary-container);font-size:19px;font-weight:650;line-height:1.25;text-overflow:ellipsis;white-space:nowrap}.templates-page__details-title-line[_ngcontent-%COMP%]{display:flex;flex:1;min-width:0;align-items:center;gap:var(--gns3-density-space-2)}.templates-page__details-title-line[_ngcontent-%COMP%] .templates-page__type-badge[_ngcontent-%COMP%]{flex:0 0 auto}.templates-page__details-body[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:12px 20px}.templates-page__description[_ngcontent-%COMP%]{padding:10px 0 14px;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__description[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.6px;text-transform:uppercase}.templates-page__description[_ngcontent-%COMP%] app-markdown-viewer[_ngcontent-%COMP%]{display:block;margin-top:8px;padding:2px 12px;border-radius:10px;background:var(--mat-sys-surface-container-low);overflow-wrap:anywhere;--markdown-viewer-font-size: 13px;--markdown-viewer-line-height: 1.5;--markdown-viewer-heading-scale: .85}.templates-page__detail-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:22px 105px minmax(0,1fr);align-items:center;gap:var(--gns3-density-space-3);min-height:40px;box-sizing:border-box;padding:8px 0;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__detail-row[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:19px;height:19px;color:var(--mat-sys-primary);font-size:19px}.templates-page__detail-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:12px;font-weight:650;letter-spacing:.5px;text-transform:uppercase;white-space:nowrap}.templates-page__detail-row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{min-width:0;color:var(--mat-sys-on-surface);font-size:14px;font-weight:500;line-height:1.45;text-align:right;overflow-wrap:anywhere}.templates-page__detail-row--stacked[_ngcontent-%COMP%]{align-items:start}.templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__mono[_ngcontent-%COMP%], .templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__path[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-family:var(--gns3-font-code);font-size:12px;word-break:break-all}.templates-page__tags[_ngcontent-%COMP%]{border-bottom:0}.templates-page__tags[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:7px}.templates-page__tag[_ngcontent-%COMP%]{padding:5px 9px;border-radius:14px;color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container);font-size:11px;font-weight:550}.templates-page__details-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(105px,1fr));gap:var(--gns3-density-space-2);padding:14px 16px 18px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-surface-container) 72%,transparent)}button.templates-page__details-action[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-on-surface-variant);height:40px;border-radius:12px;color:var(--details-action-color);border-color:color-mix(in srgb,var(--details-action-color) 48%,transparent);font-size:13px;font-weight:500}button.templates-page__details-action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--details-action-color)}button.templates-page__details-action--edit[_ngcontent-%COMP%], button.templates-page__details-action--duplicate[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-primary)}button.templates-page__details-action--delete[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-error)}[data-density=compact][_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%]{min-height:40px;height:40px}[data-density=compact][_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%]{width:40px;height:40px;--mat-icon-button-state-layer-size: 40px}[data-density=compact][_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%]{min-height:48px;padding-block:4px}[data-density=compact][_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:18px}[data-density=compact][_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%]{padding-block:8px}[data-density=compact][_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%]{min-height:36px;padding-block:6px}[data-density=compact][_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%]{padding:12px}@keyframes _ngcontent-%COMP%_templates-slide-in{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@media(max-width:1400px){.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__main[_ngcontent-%COMP%]{flex-direction:column}.templates-page__table-container[_ngcontent-%COMP%], .templates-page__grid[_ngcontent-%COMP%], .templates-page__details[_ngcontent-%COMP%]{width:100%}.templates-page__details[_ngcontent-%COMP%]{position:static;flex-basis:auto;max-height:none}}@media(max-width:900px){.templates-page__header[_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column}.templates-page__header-actions[_ngcontent-%COMP%]{width:100%}.templates-page__toolbar[_ngcontent-%COMP%]{align-items:stretch;flex-direction:column}.templates-page__toolbar-actions[_ngcontent-%COMP%]{width:100%}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{flex:1;width:auto}}@media(max-width:640px){.templates-page__header[_ngcontent-%COMP%]{padding:20px 16px 12px}.templates-page__header-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{width:100%;padding-inline:10px}.templates-page__scopes[_ngcontent-%COMP%]{overflow-x:auto;padding-inline:16px}.templates-page__scope[_ngcontent-%COMP%]{flex:0 0 auto;padding-inline:12px}.templates-page__toolbar[_ngcontent-%COMP%], .templates-page__main[_ngcontent-%COMP%]{padding-inline:16px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__view-toggle[_ngcontent-%COMP%]{grid-column:1/-1;justify-self:end}.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.templates-page__details[_ngcontent-%COMP%]{min-width:0}}',"[_nghost-%COMP%]{display:block;min-width:0;container-type:inline-size}.udp-tunnels__input-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 var(--gns3-density-space-4)}@container (max-width: 480px){.udp-tunnels__input-grid[_ngcontent-%COMP%]{grid-template-columns:minmax(0,1fr)}}.udp-tunnels__add-btn[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;margin-bottom:16px}.udp-tunnels__add-btn[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{min-width:96px}"],changeDetection:0})}return n})();function jwe(n){return(n??"").split("%")[0]}function $we(n){let o=parseInt(n,10);return Number.isNaN(o)?0:(o>>>0).toString(2).split("").filter(e=>e==="1").length}function Hwe(n){let o=n.split(".");return o.length!==4?0:o.reduce((e,t)=>e+$we(t),0)}function Uwe(n){if(!n.includes("::"))return n.split(":");let[o="",e=""]=n.split("::"),t=o?o.split(":"):[],i=e?e.split(":"):[],a=8-t.length-i.length,s=a>0?Array(a).fill("0"):[];return[...t,...s,...i]}function Wwe(n){return Uwe(n).reduce((o,e)=>{let t=parseInt(e||"0",16);return Number.isNaN(t)?o:o+t.toString(2).split("").filter(i=>i==="1").length},0)}function Gwe(n,o){return n?o==="ipv6"||n.includes(":")?Wwe(n):Hwe(n):0}function uC(n){return`${jwe(n.address)}/${Gwe(n.netmask,n.family)}`}function LM(n){return!n||n.length===0?"":n.map(uC).join(", ")}function qwe(n){if(!n||n<=0)return"\u2014";if(n>=1e3){let o=n/1e3;return`${o.toFixed(o%1===0?0:1)} Gbit/s`}return`${n} Mbit/s`}function VM(n){if(!n)return"";let o=[];return n.speed&&n.speed>0&&o.push(qwe(n.speed)),n.mtu&&o.push(`MTU ${n.mtu}`),o.join(" \xB7 ")}function BM(n){return n&&n.length>0?`Flags: ${n.join(", ")}`:""}var Qwe=["udpTunnels"],Kwe=()=>[],ej=(n,o)=>o.name,tj=(n,o)=>o.address;function Xwe(n,o){n&1&&(r(0,"div",7),L(1,"mat-spinner",13),l())}function Ywe(n,o){n&1&&(r(0,"span",47)(1,"mat-icon"),c(2,"lan"),l(),c(3,"Ethernet"),l())}function Zwe(n,o){if(n&1&&(r(0,"span",52),c(1),l()),n&2){let e=o.$implicit,t=h(4);m(),N(t.formatIpAddress(e))}}function Jwe(n,o){if(n&1&&(r(0,"mat-option",22)(1,"div",48)(2,"div",49),L(3,"span",50),r(4,"span",51),c(5),l()(),Q(6,Zwe,2,1,"span",52,tj),l()()),n&2){let e=o.$implicit;v("value",e.name),m(3),ne("cloud-iface-status--up",e.status==="up")("cloud-iface-status--down",e.status!=="up"),m(2),N(e.name),m(),K(e.ip_addresses||at(6,Kwe))}}function eMe(n,o){n&1&&(r(0,"th",53),c(1,"Interface"),l())}function tMe(n,o){n&1&&(r(0,"span",57),c(1),l()),n&2&&(m(),N(o))}function nMe(n,o){if(n&1&&(r(0,"div",55)(1,"span",56),L(2,"span",50),c(3),l(),T(4,tMe,2,1,"span",57),l()),n&2){let e,t=o,i=h().$implicit,a=h(3);m(),v("matTooltip",a.formatFlags(t.flags)||null),m(),ne("cloud-iface-status--up",t.status==="up")("cloud-iface-status--down",t.status!=="up"),m(),X(" ",i.name," "),m(),E((e=a.formatInterfaceMeta(t))?4:-1,e)}}function iMe(n,o){if(n&1&&c(0),n&2){let e=h().$implicit;X(" ",e.name," ")}}function oMe(n,o){if(n&1&&(r(0,"td",54),T(1,nMe,5,7,"div",55)(2,iMe,1,1),l()),n&2){let e,t=o.$implicit,i=h(3);m(),E((e=i.getHostInterface(t.interface||t.name))?1:2,e)}}function aMe(n,o){n&1&&(r(0,"th",53),c(1,"IP addresses"),l())}function rMe(n,o){if(n&1&&(r(0,"div",58),c(1),l()),n&2){let e=o.$implicit,t=h(4);m(),N(t.formatIpAddress(e))}}function sMe(n,o){n&1&&c(0," \u2014 ")}function lMe(n,o){if(n&1&&(r(0,"td",54),Q(1,rMe,2,1,"div",58,tj,!1,sMe,1,0),l()),n&2){let e=o.$implicit,t=h(3);m(),K(t.getHostInterfaceIps(e.interface||e.name))}}function cMe(n,o){n&1&&(r(0,"th",53),c(1,"Actions"),l())}function dMe(n,o){if(n&1){let e=R();r(0,"td",54)(1,"button",59),_("click",function(){let i=y(e).$implicit,a=h(3);return w(a.onDeleteEthernetInterface(i))}),r(2,"mat-icon",60),c(3,"delete"),l()()()}}function mMe(n,o){n&1&&L(0,"tr",61)}function pMe(n,o){n&1&&L(0,"tr",62)}function uMe(n,o){n&1&&(r(0,"span",47)(1,"mat-icon"),c(2,"cable"),l(),c(3,"TAP"),l())}function gMe(n,o){if(n&1&&(r(0,"mat-option",22),c(1),l()),n&2){let e=o.$implicit;v("value",e.name),m(),N(e.name)}}function hMe(n,o){n&1&&(r(0,"th",53),c(1,"Interface"),l())}function _Me(n,o){if(n&1&&(r(0,"td",54),c(1),l()),n&2){let e=o.$implicit;m(),N(e.name)}}function fMe(n,o){n&1&&(r(0,"th",53),c(1,"Bridge"),l())}function vMe(n,o){if(n&1&&(r(0,"td",54),c(1),l()),n&2){let e=o.$implicit;m(),N(e.bridge||"None")}}function CMe(n,o){n&1&&(r(0,"th",53),c(1,"Actions"),l())}function bMe(n,o){if(n&1){let e=R();r(0,"td",54)(1,"button",59),_("click",function(){let i=y(e).$implicit,a=h(3);return w(a.onDeleteTapInterface(i))}),r(2,"mat-icon",60),c(3,"delete"),l()()()}}function xMe(n,o){n&1&&L(0,"tr",61)}function yMe(n,o){n&1&&L(0,"tr",62)}function wMe(n,o){n&1&&(r(0,"span",47)(1,"mat-icon"),c(2,"swap_horiz"),l(),c(3,"UDP tunnels"),l())}function MMe(n,o){n&1&&(r(0,"span",47)(1,"mat-icon"),c(2,"settings"),l(),c(3,"Advanced"),l())}function SMe(n,o){if(n&1){let e=R();r(0,"mat-chip-row",63),_("removed",function(){let i=y(e).$implicit,a=h(3);return w(a.removeTag(i))}),c(1),r(2,"button",64)(3,"mat-icon"),c(4,"cancel"),l()()()}if(n&2){let e=o.$implicit;v("editable",!1),Ce("title",e),m(),X(" ",e," "),m(),Ce("aria-label","Remove tag "+e)}}function kMe(n,o){if(n&1&&(r(0,"mat-option",22),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function PMe(n,o){n&1&&(r(0,"span",47)(1,"mat-icon"),c(2,"bar_chart"),l(),c(3,"Usage"),l())}function TMe(n,o){if(n&1){let e=R();r(0,"mat-tab-group")(1,"mat-tab"),se(2,Ywe,4,0,"ng-template",16),r(3,"h2",17),c(4,"Ethernet interfaces"),l(),r(5,"div",18)(6,"div",19)(7,"mat-form-field",20)(8,"mat-label"),c(9,"Ethernet interface"),l(),r(10,"mat-select",21),_("selectionChange",function(i){y(e);let a=h(2);return w(a.ethernetInterface.set(i.value))}),r(11,"mat-select-trigger"),c(12),l(),Q(13,Jwe,8,7,"mat-option",22,ej),l()(),r(15,"button",23),_("click",function(){y(e);let i=h(2);return w(i.onAddEthernetInterface())}),c(16," Add "),l()(),r(17,"table",24),Fe(18,25),se(19,eMe,2,0,"th",26)(20,oMe,3,1,"td",27),Re(),Fe(21,28),se(22,aMe,2,0,"th",26)(23,lMe,4,1,"td",27),Re(),Fe(24,29),se(25,cMe,2,0,"th",26)(26,dMe,4,0,"td",27),Re(),se(27,mMe,1,0,"tr",30)(28,pMe,1,0,"tr",31),l()()(),r(29,"mat-tab"),se(30,uMe,4,0,"ng-template",16),r(31,"h2",17),c(32,"TAP interfaces"),l(),r(33,"div",18)(34,"div",19)(35,"mat-form-field",20)(36,"input",32),_("input",function(i){y(e);let a=h(2);return w(a.tapInterface.set(i.target.value))}),l()(),r(37,"mat-form-field",20)(38,"mat-label"),c(39,"Bridge (optional)"),l(),r(40,"mat-select",33),_("selectionChange",function(i){y(e);let a=h(2);return w(a.tapBridge.set(i.value))}),r(41,"mat-option",34),c(42,"None"),l(),Q(43,gMe,2,2,"mat-option",22,ej),l()(),r(45,"button",23),_("click",function(){y(e);let i=h(2);return w(i.onAddTapInterface())}),c(46," Add "),l()(),r(47,"table",24),Fe(48,25),se(49,hMe,2,0,"th",26)(50,_Me,2,1,"td",27),Re(),Fe(51,35),se(52,fMe,2,0,"th",26)(53,vMe,2,1,"td",27),Re(),Fe(54,29),se(55,CMe,2,0,"th",26)(56,bMe,4,0,"td",27),Re(),se(57,xMe,1,0,"tr",30)(58,yMe,1,0,"tr",31),l()()(),r(59,"mat-tab"),se(60,wMe,4,0,"ng-template",16),r(61,"h2",17),c(62,"UDP tunnels"),l(),L(63,"app-udp-tunnels",36,0),l(),r(65,"mat-tab"),se(66,MMe,4,0,"ng-template",16),r(67,"h2",17),c(68,"Advanced settings"),l(),r(69,"div",37)(70,"mat-form-field",38)(71,"mat-label"),c(72,"Name"),l(),r(73,"input",39),_("input",function(i){y(e);let a=h(2);return w(a.nodeName.set(i.target.value))}),l()(),r(74,"div",40)(75,"mat-form-field",41)(76,"mat-label"),c(77,"Tags"),l(),r(78,"input",42),_("matChipInputTokenEnd",function(i){y(e);let a=h(2);return w(a.addTag(i))}),l()(),r(79,"mat-chip-grid",43,1),Q(81,SMe,5,4,"mat-chip-row",44,Oe),l()(),r(83,"mat-form-field",38)(84,"mat-label"),c(85,"Console type"),l(),r(86,"mat-select",45),_("valueChange",function(i){y(e);let a=h(2);return w(a.consoleType.set(i))}),Q(87,kMe,2,2,"mat-option",22,Oe),l()(),r(89,"mat-form-field",38)(90,"mat-label"),c(91,"Console host"),l(),r(92,"input",39),_("input",function(i){y(e);let a=h(2);return w(a.remoteConsoleHost.set(i.target.value))}),l()(),r(93,"mat-form-field",38)(94,"mat-label"),c(95,"Console port"),l(),r(96,"input",39),_("input",function(i){y(e);let a=h(2);return w(a.remoteConsolePort.set(i.target.value))}),l()(),r(97,"mat-form-field",38)(98,"mat-label"),c(99,"Console HTTP path"),l(),r(100,"input",39),_("input",function(i){y(e);let a=h(2);return w(a.remoteConsoleHttpPath.set(i.target.value))}),l()()()(),r(101,"mat-tab"),se(102,PMe,4,0,"ng-template",16),r(103,"h2",17),c(104,"Usage notes"),l(),r(105,"div",37)(106,"mat-form-field",38)(107,"mat-label"),c(108,"Usage"),l(),r(109,"textarea",46),_("input",function(i){y(e);let a=h(2);return w(a.usage.set(i.target.value))}),l()()()()()}if(n&2){let e=Te(80),t=h(2);m(10),v("value",t.ethernetInterface()),m(2),N(t.ethernetInterface()),m(),K(t.availableEthernetInterfaces()),m(4),v("dataSource",t.portsMappingEthernet()),m(10),v("matHeaderRowDef",t.ethernetDisplayColumns),m(),v("matRowDefColumns",t.ethernetDisplayColumns),m(8),v("value",t.tapInterface()),m(4),v("value",t.tapBridge()),m(3),K(t.availableBridges()),m(4),v("dataSource",t.portsMappingTap()),m(10),v("matHeaderRowDef",t.tapDisplayColumns),m(),v("matRowDefColumns",t.tapDisplayColumns),m(5),v("dataSourceUdp",t.portsMappingUdp()),m(10),v("value",t.nodeName()),m(5),v("matChipInputFor",e)("matChipInputSeparatorKeyCodes",t.separatorKeysCodes),m(),ne("gns3-chip-field__values--empty",((t.node==null||t.node.tags==null?null:t.node.tags.length)??0)===0),m(2),K(t.node==null?null:t.node.tags),m(5),v("value",t.consoleType()),m(),K(t.consoleTypes),m(5),v("value",t.remoteConsoleHost()),m(4),v("value",t.remoteConsolePort()),m(4),v("value",t.remoteConsoleHttpPath()),m(9),v("value",t.usage())}}function EMe(n,o){if(n&1&&(r(0,"div",8)(1,"div",14)(2,"mat-card",15),T(3,TMe,110,21,"mat-tab-group"),l(),L(4,"div"),l()()),n&2){let e=h();m(3),E(e.node?3:-1)}}function OMe(n,o){n&1&&L(0,"mat-spinner",12)}function DMe(n,o){n&1&&c(0," Apply ")}var jM=(()=>{class n{dialogRef=f(We);nodeService=f(ft);toasterService=f(re);builtInTemplatesConfigurationService=f(zr);cd=f(oe);validationService=f(rv);controller;node;separatorKeysCodes=[13,188];consoleTypes=[];portsMappingEthernet=z([]);portsMappingTap=z([]);portsMappingUdp=z([]);ethernetDisplayColumns=["name","ipAddresses","actions"];tapDisplayColumns=["name","bridge","actions"];tapInterface=$("");tapBridge=$("");availableBridges=z([]);ethernetInterface=$("");availableEthernetInterfaces=z([]);nodeName=$("");consoleType=$("none");remoteConsoleHost=$("");remoteConsolePort=$("");remoteConsoleHttpPath=$("");usage=$("");udpTunnels=ln("udpTunnels");isApplying=z(!1);isLoading=z(!0);ngOnInit(){this.nodeService.getNode(this.controller,this.node).subscribe({next:e=>{this.node=e,this.nodeName.set(e.name||""),this.consoleType.set(e.console_type||"none"),this.remoteConsoleHost.set(e.properties.remote_console_host||""),this.remoteConsolePort.set(e.properties.remote_console_port?.toString()||""),this.remoteConsoleHttpPath.set(e.properties.remote_console_http_path||""),this.usage.set(e.properties.usage||""),this.getConfiguration(),this.node.tags||(this.node.tags=[]),this.node.properties.interfaces&&this.availableEthernetInterfaces.set(this.node.properties.interfaces.filter(t=>t.type==="ethernet")),this.availableBridges.set((e.properties.interfaces??[]).filter(t=>t.is_bridge)),this.portsMappingEthernet.set(this.node.properties.ports_mapping.filter(t=>t.type==="ethernet")),this.portsMappingTap.set(this.node.properties.ports_mapping.filter(t=>t.type==="tap")),this.portsMappingUdp.set(this.node.properties.ports_mapping.filter(t=>t.type==="udp")),this.isLoading.set(!1),this.dialogRef.disableClose=!1,this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load node";this.toasterService.error(t),this.isLoading.set(!1),this.dialogRef.disableClose=!1,this.cd.markForCheck()}})}getConfiguration(){this.consoleTypes=this.builtInTemplatesConfigurationService.getConsoleTypesForCloudNodes()}formatIpAddresses=LM;formatIpAddress=uC;formatInterfaceMeta=VM;formatFlags=BM;getHostInterface(e){return this.node?.properties?.interfaces?.find(t=>t.name===e)}getHostInterfaceIps(e){return this.getHostInterface(e)?.ip_addresses??[]}onAddEthernetInterface(){if(this.ethernetInterface()){let e=this.validationService.validateInterfaceName(this.ethernetInterface());if(!e.isValid){this.toasterService.error(e.errorMessage||"Invalid interface name");return}let t=this.portsMappingEthernet().map(a=>a.name),i=this.validationService.validateUniqueInterface(this.ethernetInterface(),t);if(!i.isValid){this.toasterService.error(i.errorMessage||`Interface ${this.ethernetInterface()} already configured.`);return}this.portsMappingEthernet.update(a=>[...a,{interface:this.ethernetInterface(),name:this.ethernetInterface(),port_number:0,type:"ethernet"}]),this.ethernetInterface.set("")}}onDeleteEthernetInterface(e){this.portsMappingEthernet.update(t=>t.filter(i=>i!==e))}onAddTapInterface(){if(this.tapInterface()){let e=this.validationService.validateInterfaceName(this.tapInterface(),!!this.tapBridge());if(!e.isValid){this.toasterService.error(e.errorMessage||"Invalid interface name");return}let t=this.portsMappingTap().map(a=>a.name),i=this.validationService.validateUniqueInterface(this.tapInterface(),t);if(!i.isValid){this.toasterService.error(i.errorMessage||`Interface ${this.tapInterface()} already configured.`);return}this.portsMappingTap.update(a=>[...a,q({interface:this.tapInterface(),name:this.tapInterface(),port_number:0,type:"tap"},this.tapBridge()?{bridge:this.tapBridge()}:{})]),this.tapInterface.set(""),this.tapBridge.set("")}}onDeleteTapInterface(e){this.portsMappingTap.update(t=>t.filter(i=>i!==e))}onSaveClick(){if(this.isApplying())return;let e=this.validationService.validateName(this.nodeName());if(!e.isValid){this.toasterService.error(e.errorMessage||"Name is required");return}if(this.remoteConsolePort()){let i=this.validationService.validateRemoteConsolePort(this.remoteConsolePort());if(!i.isValid){this.toasterService.error(i.errorMessage||"Remote console port must be between 1 and 65535");return}}let t=this.validationService.validateConsoleType(this.consoleType(),this.consoleTypes);if(!t.isValid){this.toasterService.error(t.errorMessage||"Invalid console type");return}if(this.remoteConsoleHost()){let i=this.validationService.validateRemoteConsoleHost(this.remoteConsoleHost());if(!i.isValid){this.toasterService.error(i.errorMessage||"Invalid remote console host");return}}if(this.remoteConsoleHttpPath()){let i=this.validationService.validateRemoteConsoleHttpPath(this.remoteConsoleHttpPath());if(!i.isValid){this.toasterService.error(i.errorMessage||"Invalid HTTP path");return}}this.node.name=this.nodeName(),this.node.console_type=this.consoleType()||"none",this.node.properties.remote_console_host=this.remoteConsoleHost(),this.node.properties.remote_console_port=this.remoteConsolePort()?parseInt(this.remoteConsolePort(),10):void 0,this.node.properties.remote_console_http_path=this.remoteConsoleHttpPath(),this.node.properties.usage=this.usage(),this.portsMappingUdp.set(this.udpTunnels().dataSourceUdp),this.node.properties.ports_mapping=this.portsMappingUdp().concat(this.portsMappingEthernet()).concat(this.portsMappingTap()),this.isApplying.set(!0),this.dialogRef.disableClose=!0,this.nodeService.updateNode(this.controller,this.node).subscribe({next:()=>{this.toasterService.success(`Node ${this.node.name} updated.`),this.onCancelClick()},error:i=>{let a=i?.error?.message||i?.message||"Failed to update node";this.toasterService.error(a),this.isApplying.set(!1),this.dialogRef.disableClose=!1,this.cd.markForCheck()}})}onCancelClick(){this.dialogRef.close()}addTag(e){let t=(e.value||"").trim();t&&this.node&&(this.node.tags||(this.node.tags=[]),this.node.tags.push(t)),e.chipInput&&e.chipInput.clear()}removeTag(e){if(!this.node.tags)return;let t=this.node.tags.indexOf(e);t>=0&&this.node.tags.splice(t,1)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-configurator-cloud"]],viewQuery:function(t,i){t&1&&Bn(i.udpTunnels,Qwe,5),t&2&&jn()},inputs:{tapInterface:[1,"tapInterface"],tapBridge:[1,"tapBridge"],ethernetInterface:[1,"ethernetInterface"],nodeName:[1,"nodeName"],consoleType:[1,"consoleType"],remoteConsoleHost:[1,"remoteConsoleHost"],remoteConsolePort:[1,"remoteConsolePort"],remoteConsoleHttpPath:[1,"remoteConsoleHttpPath"],usage:[1,"usage"]},outputs:{tapInterface:"tapInterfaceChange",tapBridge:"tapBridgeChange",ethernetInterface:"ethernetInterfaceChange",nodeName:"nodeNameChange",consoleType:"consoleTypeChange",remoteConsoleHost:"remoteConsoleHostChange",remoteConsolePort:"remoteConsolePortChange",remoteConsoleHttpPath:"remoteConsoleHttpPathChange",usage:"usageChange"},decls:18,vars:4,consts:[["udpTunnels",""],["chipList",""],["mat-dialog-title","",1,"node-config__header"],[1,"node-config__title"],["aria-hidden","true"],["mat-icon-button","","type","button","aria-label","Close node configuration",1,"node-config__close",3,"click"],[1,"modal-form-container"],[1,"configurator-dialog-loading"],[1,"content"],["mat-dialog-actions",""],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"],["diameter","20"],["diameter","40"],[1,"default-content"],[1,"matCard"],["mat-tab-label",""],[1,"node-config__section-heading"],[1,"interfaces-list"],[1,"add-interface-row"],["appearance","outline","subscriptSizing","dynamic"],["panelClass","cloud-ethernet-select-panel",3,"selectionChange","value"],[3,"value"],["mat-flat-button","","color","primary",1,"node-config__add-button",3,"click"],["mat-table","",1,"interfaces-table",3,"dataSource"],["matColumnDef","name"],["mat-header-cell","",4,"matHeaderCellDef"],["mat-cell","",4,"matCellDef"],["matColumnDef","ipAddresses"],["matColumnDef","actions"],["mat-header-row","",4,"matHeaderRowDef"],["mat-row","",4,"matRowDef","matRowDefColumns"],["matInput","","type","text","placeholder","TAP interface",3,"input","value"],[3,"selectionChange","value"],["value",""],["matColumnDef","bridge"],[3,"dataSourceUdp"],[1,"form-container"],["appearance","outline","subscriptSizing","dynamic",1,"form-field"],["matInput","","type","text",3,"input","value"],[1,"gns3-chip-field"],["floatLabel","always","appearance","outline","subscriptSizing","dynamic",1,"form-field","tags-field"],["matInput","","placeholder","Add tags",3,"matChipInputTokenEnd","matChipInputFor","matChipInputSeparatorKeyCodes"],["aria-label","Tags",1,"gns3-chip-field__values"],[3,"editable"],[3,"valueChange","value"],["matInput","",1,"node-config__usage-textarea",3,"input","value"],[1,"node-config__tab-label"],[1,"cloud-iface-option"],[1,"cloud-iface-option__head"],[1,"cloud-iface-status"],[1,"cloud-iface-option__name"],[1,"cloud-iface-option__ip"],["mat-header-cell",""],["mat-cell",""],[1,"cloud-iface-cell"],[3,"matTooltip"],[1,"cloud-iface-meta"],[1,"cloud-ip-line"],["mat-icon-button","","matTooltip","Delete interface",3,"click"],["aria-label","Delete interface"],["mat-header-row",""],["mat-row",""],[3,"removed","editable"],["matChipRemove","","type","button"]],template:function(t,i){t&1&&(r(0,"div",2)(1,"h1",3),c(2,"Configure Node "),r(3,"span",4),c(4,"\u2014"),l(),c(5),l(),r(6,"button",5),_("click",function(){return i.onCancelClick()}),r(7,"mat-icon"),c(8,"close"),l()()(),r(9,"div",6),T(10,Xwe,2,0,"div",7)(11,EMe,5,1,"div",8),l(),r(12,"div",9)(13,"button",10),_("click",function(){return i.onCancelClick()}),c(14,"Cancel"),l(),r(15,"button",11),_("click",function(){return i.onSaveClick()}),T(16,OMe,1,0,"mat-spinner",12)(17,DMe,1,0),l()()),t&2&&(m(5),X(" Cloud ",i.nodeName()),m(5),E(i.isLoading()?10:11),m(5),v("disabled",i.isApplying()||i.isLoading()),m(),E(i.isApplying()?16:17))},dependencies:[fe,St,ke,qe,Qe,hn,Zn,bo,Ir,Xo,Yo,we,Pe,Ve,ye,Ee,ot,ct,b5,nt,Y,he,Be,ri,bi,xi,hi,fi,ie,ce,_n,bn,yn,kn,wn,xn,Pn,Mn,Sn,Tn,En,st,pt,rt,mt,zM],encapsulation:2,changeDetection:0})}return n})();var gC=Jl(HM());var UM=/^eth(\d+)$/,IMe=/^#\s*(?:static|dhcp)\s+config\s+for\s+eth\d+\s*$/i,AMe=/^#\s*(auto|allow-hotplug)\s+(.+?)\s*$/,NMe=/^#\s*iface\s+(eth\d+)\s+inet6?\s+\S+\s*$/,FMe=/^#\s*(?:address|netmask|gateway|hostname|dns-nameservers|mtu|up|down|pre-up|post-up|pre-down|post-down)\b/;function RMe(n){return{name:n,enabled:!1,startupKeyword:"auto",ipv4Mode:"dhcp",ipv4Address:"",netmask:"255.255.255.0",ipv4Gateway:"",hostname:"",dnsNameservers:"",mtu:"",ipv6Mode:"disabled",ipv6Address:"",prefixLength:"64",ipv6Gateway:"",ipv4ExtraDirectives:[],ipv6ExtraDirectives:[]}}function ij(n){return Number(UM.exec(n)?.[1]??Number.MAX_SAFE_INTEGER)}function oj(n,o,e){return o.includes(n)?n:e}function g4(n){return n.replace(/\s+$/,"")}function zMe(n,o,e){let t=e.trim();if(!t||t.startsWith("#")){t.startsWith("#")&&(o==="inet"?n.ipv4ExtraDirectives:n.ipv6ExtraDirectives).push(e);return}let[i="",...a]=t.split(/\s+/),s=a.join(" "),d=o==="inet"?n.ipv4ExtraDirectives:n.ipv6ExtraDirectives;if(o==="inet")switch(i){case"address":n.ipv4Address=s;return;case"netmask":n.netmask=s;return;case"gateway":n.ipv4Gateway=s;return;case"hostname":n.hostname=s;return;case"dns-nameservers":n.dnsNameservers=s;return;case"mtu":n.mtu=s;return}else switch(i){case"address":{let[p,u]=s.split("/");n.ipv6Address=p,u&&(n.prefixLength=u);return}case"netmask":n.prefixLength=s;return;case"gateway":n.ipv6Gateway=s;return;case"mtu":n.mtu||(n.mtu=s);return}d.push(e)}function rj(n,o){let t=n.replace(/\r\n?/g,`
|
||
`).split(`
|
||
`),i=new Map,a=[],s=u=>(i.has(u)||i.set(u,RMe(u)),i.get(u)),d=0;for(;d<t.length;){let u=t[d];if(IMe.test(u)){d++;continue}let g=u.match(AMe);if(g){let A=g[2].split(/\s+/);if(A.every(D=>UM.test(D))){A.forEach(D=>s(D)),d++;continue}}let C=u.match(NMe);if(C){for(s(C[1]),d++;d<t.length&&FMe.test(t[d]);)d++;continue}let M=u.match(/^(auto|allow-hotplug)\s+(.+?)\s*$/);if(M){let A=M[1],D=M[2].split(/\s+/),F=[];for(let I of D)if(UM.test(I)){let B=s(I);B.enabled=!0,B.startupKeyword=A}else F.push(I);F.length&&a.push(`${A} ${F.join(" ")}`),d++;continue}let x=u.match(/^iface\s+(\S+)\s+(inet6?|inet)\s+(\S+)\s*$/);if(!x){a.push(u),d++;continue}let[,b,P,k]=x,S=[u];for(d++;d<t.length&&(/^\s/.test(t[d])||/^\s*#/.test(t[d])||!t[d]);)S.push(t[d]),d++;if(!UM.test(b)){a.push(...S);continue}let O=s(b);O.enabled=!0,P==="inet"?O.ipv4Mode=oj(k,["dhcp","static","manual"],"manual"):O.ipv6Mode=oj(k,["auto","dhcp","static","manual"],"manual");for(let A of S.slice(1))zMe(O,P,A)}let p=Number.isFinite(o)?Math.max(0,Math.floor(o)):0;for(let u=0;u<p;u++)s(`eth${u}`);return{interfaces:[...i.values()].sort((u,g)=>ij(u.name)-ij(g.name)),preservedConfiguration:g4(a.join(`
|
||
`))}}function Sp(n,o,e){e.trim()&&n.push(` ${o} ${e.trim()}`)}function aj(n,o){for(let e of o)e.trim()&&n.push(/^\s/.test(e)?e:` ${e}`)}function sj(n,o){let e=[];for(let i of o)if(i.enabled){if(e.push(`${i.startupKeyword} ${i.name}`),e.push(`iface ${i.name} inet ${i.ipv4Mode}`),i.ipv4Mode==="static"&&(Sp(e,"address",i.ipv4Address),Sp(e,"netmask",i.netmask),Sp(e,"gateway",i.ipv4Gateway)),Sp(e,"hostname",i.hostname),Sp(e,"dns-nameservers",i.dnsNameservers),Sp(e,"mtu",i.mtu),aj(e,i.ipv4ExtraDirectives),i.ipv6Mode!=="disabled"){if(e.push(""),e.push(`iface ${i.name} inet6 ${i.ipv6Mode}`),i.ipv6Mode==="static"){let a=i.ipv6Address.trim(),s=i.prefixLength.trim();Sp(e,"address",a&&s?`${a}/${s}`:a),Sp(e,"gateway",i.ipv6Gateway)}aj(e,i.ipv6ExtraDirectives)}e.push("")}let t=[g4(n),g4(e.join(`
|
||
`))].filter(Boolean);return t.length?`${t.join(`
|
||
|
||
`)}
|
||
`:""}var LMe=(n,o)=>o.name,VMe=(n,o)=>o.value;function BMe(n,o){if(n&1){let e=R();r(0,"div",0)(1,"h1",11),c(2," Edit network configuration "),r(3,"span",12),c(4,"\u2014"),l(),c(5),l(),r(6,"button",13),_("click",function(){y(e);let i=h();return w(i.onCancelClick())}),r(7,"mat-icon"),c(8,"close"),l()()()}if(n&2){let e=h();m(5),X(" Docker ",e.node==null?null:e.node.name," ")}}function jMe(n,o){n&1&&(r(0,"div",5),L(1,"mat-spinner",14),r(2,"span"),c(3,"Loading network configuration\u2026"),l()())}function $Me(n,o){n&1&&(r(0,"div",6)(1,"mat-icon"),c(2,"error_outline"),l(),r(3,"h3"),c(4,"Network configuration could not be loaded"),l(),r(5,"p"),c(6," Reopen the network configuration and try again. No changes can be applied until the current file is available. "),l()())}function HMe(n,o){if(n&1&&(r(0,"mat-error"),c(1),l()),n&2){let e=h(2).$index,t=h(2);m(),N(t.errorFor(e,"hostname"))}}function UMe(n,o){if(n&1&&(r(0,"mat-error"),c(1),l()),n&2){let e=h(2).$index,t=h(2);m(),N(t.errorFor(e,"mtu"))}}function WMe(n,o){if(n&1&&(r(0,"mat-error"),c(1),l()),n&2){let e=h(3).$index,t=h(2);m(),N(t.errorFor(e,"ipv4Address"))}}function GMe(n,o){if(n&1&&(r(0,"mat-option",42),c(1),l()),n&2){let e=o.$implicit;v("value",e.value),m(),N(e.label)}}function qMe(n,o){if(n&1&&(r(0,"mat-error"),c(1),l()),n&2){let e=h(3).$index,t=h(2);m(),N(t.errorFor(e,"netmask"))}}function QMe(n,o){if(n&1&&(r(0,"mat-error"),c(1),l()),n&2){let e=h(3).$index,t=h(2);m(),N(t.errorFor(e,"ipv4Gateway"))}}function KMe(n,o){if(n&1){let e=R();r(0,"mat-form-field",29)(1,"mat-label"),c(2,"IPv4 address"),l(),r(3,"input",41),_("input",function(i){y(e);let a=h(2).$index,s=h(2);return w(s.updateInterface(a,{ipv4Address:i.target.value}))}),l(),T(4,WMe,2,1,"mat-error"),l(),r(5,"mat-form-field",29)(6,"mat-label"),c(7,"Subnet mask"),l(),r(8,"mat-select",30),_("selectionChange",function(i){y(e);let a=h(2).$index,s=h(2);return w(s.updateInterface(a,{netmask:i.value}))}),Q(9,GMe,2,2,"mat-option",42,VMe),l(),T(11,qMe,2,1,"mat-error"),l(),r(12,"mat-form-field",29)(13,"mat-label"),c(14,"IPv4 gateway"),l(),r(15,"input",43),_("input",function(i){y(e);let a=h(2).$index,s=h(2);return w(s.updateInterface(a,{ipv4Gateway:i.target.value}))}),l(),T(16,QMe,2,1,"mat-error"),l()}if(n&2){let e=h(2),t=e.$implicit,i=e.$index,a=h(2);m(3),v("value",t.ipv4Address),m(),E(a.errorFor(i,"ipv4Address")?4:-1),m(4),v("value",t.netmask),m(),K(a.subnetMasks),m(2),E(a.errorFor(i,"netmask")?11:-1),m(4),v("value",t.ipv4Gateway),m(),E(a.errorFor(i,"ipv4Gateway")?16:-1)}}function XMe(n,o){if(n&1&&(r(0,"mat-error"),c(1),l()),n&2){let e=h(2).$index,t=h(2);m(),N(t.errorFor(e,"dnsNameservers"))}}function YMe(n,o){if(n&1&&(r(0,"mat-error"),c(1),l()),n&2){let e=h(3).$index,t=h(2);m(),N(t.errorFor(e,"ipv6Address"))}}function ZMe(n,o){if(n&1&&(r(0,"mat-error"),c(1),l()),n&2){let e=h(3).$index,t=h(2);m(),N(t.errorFor(e,"prefixLength"))}}function JMe(n,o){if(n&1&&(r(0,"mat-error"),c(1),l()),n&2){let e=h(3).$index,t=h(2);m(),N(t.errorFor(e,"ipv6Gateway"))}}function eSe(n,o){if(n&1){let e=R();r(0,"mat-form-field",29)(1,"mat-label"),c(2,"IPv6 address"),l(),r(3,"input",44),_("input",function(i){y(e);let a=h(2).$index,s=h(2);return w(s.updateInterface(a,{ipv6Address:i.target.value}))}),l(),T(4,YMe,2,1,"mat-error"),l(),r(5,"mat-form-field",29)(6,"mat-label"),c(7,"Prefix length"),l(),r(8,"input",45),_("input",function(i){y(e);let a=h(2).$index,s=h(2);return w(s.updateInterface(a,{prefixLength:i.target.value}))}),l(),T(9,ZMe,2,1,"mat-error"),l(),r(10,"mat-form-field",29)(11,"mat-label"),c(12,"IPv6 gateway"),l(),r(13,"input",46),_("input",function(i){y(e);let a=h(2).$index,s=h(2);return w(s.updateInterface(a,{ipv6Gateway:i.target.value}))}),l(),T(14,JMe,2,1,"mat-error"),l()}if(n&2){let e=h(2),t=e.$implicit,i=e.$index,a=h(2);m(3),v("value",t.ipv6Address),m(),E(a.errorFor(i,"ipv6Address")?4:-1),m(4),v("value",t.prefixLength),m(),E(a.errorFor(i,"prefixLength")?9:-1),m(4),v("value",t.ipv6Gateway),m(),E(a.errorFor(i,"ipv6Gateway")?14:-1)}}function tSe(n,o){n&1&&(r(0,"div",40)(1,"mat-icon"),c(2,"info"),l(),r(3,"span"),c(4,"Unsupported directives from this interface will be preserved when you apply the changes."),l()())}function nSe(n,o){if(n&1){let e=R();r(0,"div",26)(1,"div",27)(2,"h4"),c(3,"IPv4 configuration"),l(),r(4,"div",28)(5,"mat-form-field",29)(6,"mat-label"),c(7,"Addressing mode"),l(),r(8,"mat-select",30),_("selectionChange",function(i){y(e);let a=h().$index,s=h(2);return w(s.updateInterface(a,{ipv4Mode:i.value}))}),r(9,"mat-option",31),c(10,"DHCP"),l(),r(11,"mat-option",32),c(12,"Static"),l(),r(13,"mat-option",33),c(14,"Manual / no address"),l()()(),r(15,"mat-form-field",29)(16,"mat-label"),c(17,"Hostname"),l(),r(18,"input",34),_("input",function(i){y(e);let a=h().$index,s=h(2);return w(s.updateInterface(a,{hostname:i.target.value}))}),l(),T(19,HMe,2,1,"mat-error"),l(),r(20,"mat-form-field",29)(21,"mat-label"),c(22,"MTU"),l(),r(23,"input",35),_("input",function(i){y(e);let a=h().$index,s=h(2);return w(s.updateInterface(a,{mtu:i.target.value}))}),l(),T(24,UMe,2,1,"mat-error"),l(),T(25,KMe,17,6),r(26,"mat-form-field",36)(27,"mat-label"),c(28,"DNS nameservers"),l(),r(29,"input",37),_("input",function(i){y(e);let a=h().$index,s=h(2);return w(s.updateInterface(a,{dnsNameservers:i.target.value}))}),l(),r(30,"mat-hint"),c(31,"Separate multiple IPv4 or IPv6 addresses with spaces."),l(),T(32,XMe,2,1,"mat-error"),l()()(),r(33,"div",27)(34,"h4"),c(35,"IPv6 configuration"),l(),r(36,"div",28)(37,"mat-form-field",29)(38,"mat-label"),c(39,"Addressing mode"),l(),r(40,"mat-select",30),_("selectionChange",function(i){y(e);let a=h().$index,s=h(2);return w(s.updateInterface(a,{ipv6Mode:i.value}))}),r(41,"mat-option",38),c(42,"Disabled"),l(),r(43,"mat-option",39),c(44,"Automatic"),l(),r(45,"mat-option",31),c(46,"DHCP"),l(),r(47,"mat-option",32),c(48,"Static"),l(),r(49,"mat-option",33),c(50,"Manual / no address"),l()()(),T(51,eSe,15,6),l()(),T(52,tSe,5,0,"div",40),l()}if(n&2){let e=h(),t=e.$implicit,i=e.$index,a=h(2);m(8),v("value",t.ipv4Mode),m(10),v("placeholder",(a.node==null?null:a.node.name)||"docker")("value",t.hostname),m(),E(a.errorFor(i,"hostname")?19:-1),m(4),v("value",t.mtu),m(),E(a.errorFor(i,"mtu")?24:-1),m(),E(t.ipv4Mode==="static"?25:-1),m(4),v("value",t.dnsNameservers),m(3),E(a.errorFor(i,"dnsNameservers")?32:-1),m(8),v("value",t.ipv6Mode),m(11),E(t.ipv6Mode==="static"?51:-1),m(),E(t.ipv4ExtraDirectives.length||t.ipv6ExtraDirectives.length?52:-1)}}function iSe(n,o){if(n&1){let e=R();r(0,"article",21)(1,"header",22)(2,"div",23),L(3,"span",24),r(4,"div")(5,"h3"),c(6),l(),r(7,"span"),c(8),l()()(),r(9,"mat-slide-toggle",25),_("change",function(i){let a=y(e).$index,s=h(2);return w(s.updateInterface(a,{enabled:i.checked}))}),l()(),T(10,nSe,53,12,"div",26),l()}if(n&2){let e=o.$implicit,t=h(2);ne("network-editor__interface-card--disabled",!e.enabled),m(3),ne("network-editor__status-dot--active",e.enabled&&(t.node==null?null:t.node.status)==="started"),m(3),N(e.name),m(2),N(e.enabled?t.ipv4ModeLabel(e.ipv4Mode):"Disabled"),m(),v("checked",e.enabled),Ce("aria-label","Enable "+e.name),m(),E(e.enabled?10:-1)}}function oSe(n,o){n&1&&(r(0,"div",20)(1,"mat-icon"),c(2,"lan"),l(),r(3,"h3"),c(4,"No Ethernet adapters available"),l(),r(5,"p"),c(6,"Increase the adapter count in the Docker node's General settings before configuring addresses."),l()())}function aSe(n,o){if(n&1&&(r(0,"section",7)(1,"div",15)(2,"div")(3,"h2",16),c(4,"Interfaces"),l(),r(5,"p"),c(6,"Configure startup behavior and addressing for the container's available Ethernet adapters."),l()(),r(7,"span",17),c(8),l()(),r(9,"div",18),Q(10,iSe,11,9,"article",19,LMe,!1,oSe,7,0,"div",20),l()()),n&2){let e=h();m(8),Un(" ",e.interfaces().length," ",e.interfaces().length===1?"adapter":"adapters"," "),m(2),K(e.interfaces())}}function rSe(n,o){if(n&1&&(r(0,"section",8)(1,"div",15)(2,"div")(3,"h2",47),c(4,"Configuration preview"),l(),r(5,"p"),c(6,"This is the generated "),r(7,"code"),c(8,"/etc/network/interfaces"),l(),c(9," file that will be sent to the server."),l()()(),L(10,"textarea",48),l()),n&2){let e=h();m(10),v("value",e.configurationPreview())}}function sSe(n,o){n&1&&L(0,"mat-spinner",50)}function lSe(n,o){n&1&&c(0," Apply network configuration ")}function cSe(n,o){if(n&1){let e=R();r(0,"div",9)(1,"button",49),_("click",function(){y(e);let i=h();return w(i.onSaveClick())}),T(2,sSe,1,0,"mat-spinner",50)(3,lSe,1,0),l()()}if(n&2){let e=h();m(),v("disabled",e.blocked()||e.loading()||e.loadFailed()||e.saving()),m(),E(e.saving()?2:3)}}function dSe(n,o){n&1&&L(0,"mat-spinner",50)}function mSe(n,o){n&1&&c(0," Apply ")}function pSe(n,o){if(n&1){let e=R();r(0,"div",10)(1,"button",51),_("click",function(){y(e);let i=h();return w(i.onCancelClick())}),c(2,"Cancel"),l(),r(3,"button",52),_("click",function(){y(e);let i=h();return w(i.onSaveClick())}),T(4,dSe,1,0,"mat-spinner",50)(5,mSe,1,0),l()()}if(n&2){let e=h();m(),v("disabled",e.saving()),m(2),v("disabled",e.loading()||e.loadFailed()||e.saving()),m(),E(e.saving()?4:5)}}function uSe(n){return Array.from({length:4},(o,e)=>{let t=Math.min(8,Math.max(0,n-e*8));return t===0?0:256-2**(8-t)}).join(".")}var WM=(()=>{class n{dialogRef=f(We);nodeService=f(ft);toasterService=f(re);validationService=f(Hn);cdr=f(oe);embeddedContext=ee();blocked=ee(!1);ready=$o();embedded=Ne(()=>!!this.embeddedContext());controller;node;interfaces=z([]);preservedConfiguration=z("");activeSection=z("interfaces");loading=z(!0);loadFailed=z(!1);saving=z(!1);validationErrors=z({});subnetMasks=Array.from({length:33},(e,t)=>{let i=32-t,a=uSe(i);return{value:a,label:`${a} (/${i})`}});configurationPreview=Ne(()=>sj(this.preservedConfiguration(),this.interfaces()));ngOnInit(){let e=this.embeddedContext();e&&(this.controller=e.controller,this.node=e.node),this.ready.emit(this),this.nodeService.getNetworkConfiguration(this.controller,this.node).subscribe({next:t=>{let i=rj(t,this.adapterCount());this.interfaces.set(i.interfaces),this.preservedConfiguration.set(i.preservedConfiguration),this.loading.set(!1),this.cdr.markForCheck()},error:t=>{this.loading.set(!1),this.loadFailed.set(!0);let i=t.error?.message||t.message||"Failed to load network configuration";this.toasterService.error(i),this.cdr.markForCheck()}})}adapterCount(){let e=this.node?.properties?.adapters??this.node?.ethernet_adapters??1,t=Number(e);return Number.isFinite(t)?Math.max(0,Math.floor(t)):1}updateInterface(e,t){this.interfaces.update(i=>i.map((a,s)=>s===e?q(q({},a),t):a)),this.validationErrors.set({})}errorFor(e,t){return this.validationErrors()[`${e}.${t}`]??""}ipv4ModeLabel(e){switch(e){case"static":return"Static IPv4";case"manual":return"Manual";default:return"DHCP"}}validateConfiguration(){let e={},t=(a,s,d)=>{e[`${a}.${s}`]=d};this.interfaces().forEach((a,s)=>{if(!a.enabled)return;if(a.ipv4Mode==="static"&&(this.validationService.validateIpAddress(a.ipv4Address).isValid||t(s,"ipv4Address","Enter a valid IPv4 address"),this.validationService.validateIpAddress(a.netmask).isValid||t(s,"netmask","Enter a valid subnet mask")),a.ipv4Gateway&&!this.validationService.validateIpAddress(a.ipv4Gateway).isValid&&t(s,"ipv4Gateway","Enter a valid IPv4 gateway"),a.hostname&&!this.validationService.validateHostname(a.hostname).isValid&&t(s,"hostname","Enter a valid hostname"),a.dnsNameservers.split(/[\s,]+/).filter(Boolean).some(p=>!gC.isValid(p))&&t(s,"dnsNameservers","Enter valid IPv4 or IPv6 DNS addresses"),a.mtu){let p=Number(a.mtu);(!Number.isInteger(p)||p<68||p>65535)&&t(s,"mtu","MTU must be between 68 and 65535")}if(a.ipv6Mode==="static"){gC.IPv6.isValid(a.ipv6Address)||t(s,"ipv6Address","Enter a valid IPv6 address");let p=Number(a.prefixLength);(!Number.isInteger(p)||p<0||p>128)&&t(s,"prefixLength","Prefix length must be between 0 and 128"),a.ipv6Gateway&&!gC.IPv6.isValid(a.ipv6Gateway)&&t(s,"ipv6Gateway","Enter a valid IPv6 gateway")}}),this.validationErrors.set(e);let i=Object.values(e)[0];return i?(this.activeSection.set("interfaces"),this.toasterService.error(i),!1):!0}onSaveClick(){if(this.blocked()||this.loading()||this.loadFailed()||this.saving()||!this.validateConfiguration())return;let e=this.configurationPreview();this.saving.set(!0),this.dialogRef.disableClose=!0,this.nodeService.saveNetworkConfiguration(this.controller,this.node,e).subscribe({next:()=>{this.saving.set(!1),this.dialogRef.disableClose=!1,this.embedded()||this.dialogRef.close(),this.toasterService.success(`Configuration for node ${this.node.name} saved.`),this.cdr.markForCheck()},error:t=>{this.saving.set(!1),this.dialogRef.disableClose=!1;let i=t.error?.message||t.message||"Failed to save network configuration";this.toasterService.error(i),this.cdr.markForCheck()}})}onCancelClick(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-edit-network-configuration"]],inputs:{embeddedContext:[1,"embeddedContext"],blocked:[1,"blocked"]},outputs:{ready:"ready"},decls:21,vars:12,consts:[["mat-dialog-title","",1,"node-config__header"],[1,"network-editor__shell"],["aria-label","Network configuration sections",1,"network-editor__sidebar"],["type","button",1,"network-editor__nav-button",3,"click"],[1,"network-editor__content"],[1,"network-editor__loading"],["role","alert",1,"network-editor__empty-state"],["aria-labelledby","network-editor-interfaces-title"],["aria-labelledby","network-editor-preview-title",1,"network-editor__preview"],[1,"network-editor__actions"],["mat-dialog-actions",""],[1,"node-config__title"],["aria-hidden","true"],["mat-icon-button","","type","button","aria-label","Close network configuration",1,"node-config__close",3,"click"],["diameter","36"],[1,"network-editor__section-header"],["id","network-editor-interfaces-title"],[1,"network-editor__adapter-count"],[1,"network-editor__interface-list"],[1,"network-editor__interface-card",3,"network-editor__interface-card--disabled"],[1,"network-editor__empty-state"],[1,"network-editor__interface-card"],[1,"network-editor__interface-header"],[1,"network-editor__interface-name"],[1,"network-editor__status-dot"],["color","primary",3,"change","checked"],[1,"network-editor__interface-body"],[1,"network-editor__subsection"],[1,"form-grid"],["appearance","outline","subscriptSizing","fixed"],[3,"selectionChange","value"],["value","dhcp"],["value","static"],["value","manual"],["matInput","",3,"input","placeholder","value"],["matInput","","inputmode","numeric","placeholder","1500",3,"input","value"],["appearance","outline","subscriptSizing","fixed",1,"form-grid__full"],["matInput","","placeholder","1.1.1.1 8.8.8.8",3,"input","value"],["value","disabled"],["value","auto"],[1,"network-editor__preserved-note"],["matInput","","placeholder","192.168.0.2",3,"input","value"],[3,"value"],["matInput","","placeholder","192.168.0.1",3,"input","value"],["matInput","","placeholder","2001:db8::2",3,"input","value"],["matInput","","inputmode","numeric","placeholder","64",3,"input","value"],["matInput","","placeholder","2001:db8::1",3,"input","value"],["id","network-editor-preview-title"],["readonly","","spellcheck","false","aria-label","Generated network configuration",3,"value"],["mat-raised-button","","color","primary","type","button",3,"click","disabled"],["diameter","20"],["mat-button","","color","accent","type","button",3,"click","disabled"],["mat-button","","tabindex","2","mat-raised-button","","color","primary","type","button",3,"click","disabled"]],template:function(t,i){t&1&&(T(0,BMe,9,1,"div",0),r(1,"div",1)(2,"aside",2)(3,"nav")(4,"button",3),_("click",function(){return i.activeSection.set("interfaces")}),r(5,"mat-icon"),c(6,"lan"),l(),r(7,"span"),c(8,"Interfaces"),l()(),r(9,"button",3),_("click",function(){return i.activeSection.set("preview")}),r(10,"mat-icon"),c(11,"description"),l(),r(12,"span"),c(13,"Configuration preview"),l()()()(),r(14,"main",4),T(15,jMe,4,0,"div",5)(16,$Me,7,0,"div",6)(17,aSe,13,3,"section",7)(18,rSe,11,1,"section",8),l()(),T(19,cSe,4,2,"div",9),T(20,pSe,6,3,"div",10)),t&2&&(E(i.embedded()?-1:0),m(),ne("network-editor__shell--embedded",i.embedded()),m(3),ne("network-editor__nav-button--active",i.activeSection()==="interfaces"),Ce("aria-current",i.activeSection()==="interfaces"?"page":null),m(5),ne("network-editor__nav-button--active",i.activeSection()==="preview"),Ce("aria-current",i.activeSection()==="preview"?"page":null),m(6),E(i.loading()?15:i.loadFailed()?16:i.activeSection()==="interfaces"?17:18),m(4),E(i.embedded()?19:-1),m(),E(i.embedded()?-1:20))},dependencies:[Y,he,Be,ke,qe,Qe,we,Pe,Ve,Dr,Wn,ie,ce,ye,Ee,rt,mt,ot,ct,nt,mc,Yc],styles:["[_nghost-%COMP%]{display:grid;width:100%;min-height:0;grid-template-rows:auto minmax(0,1fr) auto;color:var(--mat-sys-on-surface);background:var(--mat-sys-surface)}.network-editor__shell[_ngcontent-%COMP%]{display:grid;min-height:0;grid-template-columns:220px minmax(0,1fr)}.network-editor__sidebar[_ngcontent-%COMP%]{display:flex;min-height:0;flex-direction:column;justify-content:space-between;gap:var(--gns3-density-space-5);padding:var(--gns3-density-card-padding) 16px 16px;border-right:1px solid var(--mat-sys-outline-variant);background:var(--mat-sys-surface-container-low)}.network-editor__sidebar[_ngcontent-%COMP%] nav[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-space-2)}.network-editor__nav-button[_ngcontent-%COMP%]{display:flex;width:100%;min-height:48px;align-items:center;gap:var(--gns3-density-space-3);padding:10px 14px;border:0;border-radius:10px;color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;text-align:left;cursor:pointer}.network-editor__nav-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{flex:0 0 auto}.network-editor__nav-button[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-surface);background:var(--mat-sys-surface-container)}.network-editor__nav-button--active[_ngcontent-%COMP%]{color:var(--mat-sys-primary);background:var(--mat-sys-primary-container);font-weight:600}.network-editor__status-dot[_ngcontent-%COMP%]{width:10px;height:10px;flex:0 0 auto;margin-top:4px;border:2px solid var(--mat-sys-outline-variant);border-radius:50%;background:var(--mat-sys-surface-container-highest)}.network-editor__status-dot--active[_ngcontent-%COMP%]{border-color:color-mix(in srgb,var(--custom-mat-sys-success) 30%,transparent);background:var(--custom-mat-sys-success)}.network-editor__content[_ngcontent-%COMP%]{min-width:0;min-height:0;padding:28px 30px;overflow:auto}.network-editor__section-header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:20px}.network-editor__section-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-family:var(--mat-sys-title-large-font);font-size:24px;font-weight:650;line-height:1.25}.network-editor__section-header[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:6px 0 0;color:var(--mat-sys-on-surface-variant);line-height:1.45}.network-editor__adapter-count[_ngcontent-%COMP%]{flex:0 0 auto;padding:6px 10px;border-radius:999px;color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container);font-size:13px;font-weight:600}.network-editor__interface-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-card-gap)}.network-editor__interface-card[_ngcontent-%COMP%]{overflow:hidden;border:1px solid var(--mat-sys-outline-variant);border-radius:12px;background:var(--mat-sys-surface)}.network-editor__interface-card--disabled[_ngcontent-%COMP%]{background:var(--mat-sys-surface-container-low)}.network-editor__interface-header[_ngcontent-%COMP%]{display:flex;min-height:62px;box-sizing:border-box;align-items:center;justify-content:space-between;gap:var(--gns3-density-card-gap);padding:12px 18px;border-bottom:1px solid var(--mat-sys-outline-variant);background:var(--mat-sys-surface-container-low)}.network-editor__interface-name[_ngcontent-%COMP%]{display:flex;min-width:0;align-items:center;gap:var(--gns3-density-space-3)}.network-editor__interface-name[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{min-width:0}.network-editor__interface-name[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:17px;font-weight:650;line-height:1.3}.network-editor__interface-name[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:not(.network-editor__status-dot){display:block;margin-top:2px;color:var(--mat-sys-on-surface-variant);font-size:12px}.network-editor__interface-body[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:20px;padding:20px}.network-editor__subsection[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin:0 0 12px;font-size:14px;font-weight:650}.network-editor__subsection[_ngcontent-%COMP%] + .network-editor__subsection[_ngcontent-%COMP%]{padding-top:18px;border-top:1px solid var(--mat-sys-outline-variant)}.network-editor__preserved-note[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-3);padding:10px 12px;border-radius:8px;color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container);font-size:13px}.network-editor__preserved-note[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:19px;height:19px;flex:0 0 auto;font-size:19px}.network-editor__preview[_ngcontent-%COMP%]{display:flex;height:100%;min-height:0;flex-direction:column}.network-editor__preview[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{box-sizing:border-box;width:100%;min-height:320px;flex:1 1 auto;padding:16px;resize:none;border:1px solid var(--mat-sys-outline-variant);border-radius:10px;color:var(--mat-sys-on-surface);background:var(--mat-sys-surface-container-low);font-family:var(--mat-sys-body-medium-font);font-size:13px;line-height:1.5}.network-editor__loading[_ngcontent-%COMP%], .network-editor__empty-state[_ngcontent-%COMP%]{display:flex;min-height:280px;align-items:center;justify-content:center;flex-direction:column;gap:var(--gns3-density-space-3);color:var(--mat-sys-on-surface-variant);text-align:center}.network-editor__empty-state[_ngcontent-%COMP%]{border:1px dashed var(--mat-sys-outline-variant);border-radius:12px}.network-editor__empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%], .network-editor__empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0}.network-editor__empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{max-width:440px}[data-density=compact][_nghost-%COMP%], [data-density=compact] [_nghost-%COMP%]{--mat-slide-toggle-state-layer-size: 32px}[data-density=compact][_nghost-%COMP%] .network-editor__shell[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .network-editor__shell[_ngcontent-%COMP%]{grid-template-columns:188px minmax(0,1fr)}[data-density=compact][_nghost-%COMP%] .network-editor__sidebar[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .network-editor__sidebar[_ngcontent-%COMP%]{gap:16px;padding:14px 10px 10px}[data-density=compact][_nghost-%COMP%] .network-editor__sidebar[_ngcontent-%COMP%] nav[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .network-editor__sidebar[_ngcontent-%COMP%] nav[_ngcontent-%COMP%]{gap:4px}[data-density=compact][_nghost-%COMP%] .network-editor__nav-button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .network-editor__nav-button[_ngcontent-%COMP%]{min-height:40px;gap:9px;padding:7px 10px;font-size:13px}[data-density=compact][_nghost-%COMP%] .network-editor__nav-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .network-editor__nav-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:19px;height:19px;font-size:19px}[data-density=compact][_nghost-%COMP%] .network-editor__content[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .network-editor__content[_ngcontent-%COMP%]{padding:18px 20px}[data-density=compact][_nghost-%COMP%] .network-editor__section-header[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .network-editor__section-header[_ngcontent-%COMP%]{margin-bottom:12px}[data-density=compact][_nghost-%COMP%] .network-editor__section-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .network-editor__section-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:20px}[data-density=compact][_nghost-%COMP%] .network-editor__section-header[_ngcontent-%COMP%] p[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .network-editor__section-header[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin-top:3px;font-size:13px}[data-density=compact][_nghost-%COMP%] .network-editor__interface-list[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .network-editor__interface-list[_ngcontent-%COMP%]{gap:10px}[data-density=compact][_nghost-%COMP%] .network-editor__interface-header[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .network-editor__interface-header[_ngcontent-%COMP%]{min-height:48px;padding:7px 12px}[data-density=compact][_nghost-%COMP%] .network-editor__interface-body[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .network-editor__interface-body[_ngcontent-%COMP%]{gap:12px;padding:12px}[data-density=compact][_nghost-%COMP%] .network-editor__subsection[_ngcontent-%COMP%] h4[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .network-editor__subsection[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin-bottom:7px}[data-density=compact][_nghost-%COMP%] .network-editor__subsection[_ngcontent-%COMP%] + .network-editor__subsection[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .network-editor__subsection[_ngcontent-%COMP%] + .network-editor__subsection[_ngcontent-%COMP%]{padding-top:10px}@media(max-width:700px){.network-editor__shell[_ngcontent-%COMP%]{display:flex;flex-direction:column}.network-editor__sidebar[_ngcontent-%COMP%]{flex:0 0 auto;padding:8px;border-right:0;border-bottom:1px solid var(--mat-sys-outline-variant)}.network-editor__sidebar[_ngcontent-%COMP%] nav[_ngcontent-%COMP%]{flex-direction:row;overflow-x:auto}.network-editor__nav-button[_ngcontent-%COMP%]{width:auto;flex:0 0 auto}.network-editor__content[_ngcontent-%COMP%]{padding:16px}}.network-editor__shell.network-editor__shell--embedded[_ngcontent-%COMP%]{display:flex;flex-direction:column}.network-editor__shell.network-editor__shell--embedded[_ngcontent-%COMP%] .network-editor__sidebar[_ngcontent-%COMP%]{padding:0 0 var(--gns3-density-space-3);margin-bottom:var(--gns3-density-space-4);border-right:0;border-bottom:1px solid var(--mat-sys-outline-variant);background:transparent}.network-editor__shell.network-editor__shell--embedded[_ngcontent-%COMP%] .network-editor__sidebar[_ngcontent-%COMP%] nav[_ngcontent-%COMP%]{flex-direction:row;flex-wrap:wrap}.network-editor__shell.network-editor__shell--embedded[_ngcontent-%COMP%] .network-editor__nav-button[_ngcontent-%COMP%]{width:auto}.network-editor__shell.network-editor__shell--embedded[_ngcontent-%COMP%] .network-editor__content[_ngcontent-%COMP%]{padding:0;overflow:visible}.network-editor__shell.network-editor__shell--embedded[_ngcontent-%COMP%] .network-editor__section-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:var(--gns3-density-section-title-size)}.network-editor__actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;padding-top:var(--gns3-density-space-4);margin-top:var(--gns3-density-space-4);border-top:1px solid var(--mat-sys-outline-variant)}.network-editor__actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing)}"],changeDetection:0})}return n})();var gSe=(n,o)=>({controller:n,node:o});function hSe(n,o){n&1&&(r(0,"div",6),L(1,"mat-spinner",12),l())}function _Se(n,o){n&1&&(r(0,"span",44)(1,"mat-icon"),c(2,"tune"),l(),c(3,"General"),l())}function fSe(n,o){if(n&1){let e=R();r(0,"mat-chip-row",45),_("removed",function(){let i=y(e).$implicit,a=h(3);return w(a.removeTag(i))}),c(1),r(2,"button",46)(3,"mat-icon"),c(4,"cancel"),l()()()}if(n&2){let e=o.$implicit;v("editable",!1),Ce("title",e),m(),X(" ",e," "),m(),Ce("aria-label","Remove tag "+e)}}function vSe(n,o){if(n&1&&(r(0,"mat-option",32),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function CSe(n,o){if(n&1&&(r(0,"mat-option",32),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function bSe(n,o){if(n&1&&(r(0,"mat-option",32),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function xSe(n,o){n&1&&(r(0,"span",44)(1,"mat-icon"),c(2,"lan"),l(),c(3,"Network"),l())}function ySe(n,o){if(n&1){let e=R();r(0,"h2",18),c(1,"Network configuration"),l(),r(2,"app-edit-network-configuration",47),_("ready",function(i){y(e);let a=h(3);return w(a.networkEditor.set(i))}),l()}if(n&2){let e=h(3);m(2),v("embeddedContext",Go(2,gSe,e.controller,e.node))("blocked",e.isApplying())}}function wSe(n,o){n&1&&(r(0,"span",44)(1,"mat-icon"),c(2,"settings"),l(),c(3,"Advanced"),l())}function MSe(n,o){n&1&&(r(0,"span",44)(1,"mat-icon"),c(2,"description"),l(),c(3,"Extra files"),l())}function SSe(n,o){if(n&1){let e=R();r(0,"mat-form-field",20)(1,"mat-label"),c(2,"Container target path"),l(),r(3,"input",48),_("input",function(i){let a=y(e).$index,s=h(3);return w(s.updateExtraConfigTarget(a,i.target.value))}),l(),r(4,"button",49),_("click",function(){let i=y(e).$index,a=h(3);return w(a.removeExtraConfig(i))}),r(5,"mat-icon"),c(6,"delete"),l()()(),r(7,"mat-form-field",20)(8,"mat-label"),c(9,"File content"),l(),r(10,"textarea",41),_("input",function(i){let a=y(e).$index,s=h(3);return w(s.updateExtraConfigContent(a,i.target.value))}),l(),r(11,"mat-hint"),c(12,"File contents injected (read-only) into the container at the target path"),l()()}if(n&2){let e=o.$implicit;m(3),v("value",e.target),m(7),v("value",e.content||"")}}function kSe(n,o){n&1&&(r(0,"span",44)(1,"mat-icon"),c(2,"bar_chart"),l(),c(3,"Usage"),l())}function PSe(n,o){if(n&1){let e=R();r(0,"mat-tab-group",16),_("selectedIndexChange",function(i){y(e);let a=h(2);return w(a.selectedTab.set(i))}),r(1,"mat-tab"),se(2,_Se,4,0,"ng-template",17),r(3,"h2",18),c(4,"General settings"),l(),r(5,"div",19)(6,"mat-form-field",20)(7,"mat-label"),c(8,"Name"),l(),r(9,"input",21),_("input",function(i){y(e);let a=h(2);return w(a.nodeName.set(i.target.value))}),l()(),r(10,"div",22)(11,"mat-form-field",23)(12,"mat-label"),c(13,"Tags"),l(),r(14,"input",24),_("matChipInputTokenEnd",function(i){y(e);let a=h(2);return w(a.addTag(i))}),l()(),r(15,"mat-chip-grid",25,0),Q(17,fSe,5,4,"mat-chip-row",26,Oe),l()(),r(19,"mat-form-field",20)(20,"mat-label"),c(21,"Image"),l(),r(22,"input",21),_("input",function(i){y(e);let a=h(2);return w(a.dockerImage.set(i.target.value))}),l()(),r(23,"div",27)(24,"mat-form-field",28)(25,"mat-label"),c(26,"Adapters"),l(),r(27,"input",21),_("input",function(i){y(e);let a=h(2);return w(a.adapter.set(i.target.value))}),l()(),r(28,"mat-form-field",28)(29,"mat-label"),c(30,"Base MAC"),l(),r(31,"input",21),_("input",function(i){y(e);let a=h(2);return w(a.macAddress.set(i.target.value))}),l()(),r(32,"mat-form-field",28)(33,"mat-label"),c(34,"Maximum memory"),l(),r(35,"input",29),_("input",function(i){y(e);let a=h(2);return w(a.memory.set(i.target.value))}),l(),r(36,"span",30),c(37,"MB"),l()(),r(38,"mat-form-field",28)(39,"mat-label"),c(40,"Maximum CPUs"),l(),r(41,"input",29),_("input",function(i){y(e);let a=h(2);return w(a.cpus.set(i.target.value))}),l()(),r(42,"mat-form-field",28)(43,"mat-label"),c(44,"Console type"),l(),r(45,"mat-select",31),_("valueChange",function(i){y(e);let a=h(2);return w(a.consoleType.set(i))}),Q(46,vSe,2,2,"mat-option",32,Oe),l()(),r(48,"mat-form-field",28)(49,"mat-label"),c(50,"Auxiliary console type"),l(),r(51,"mat-select",31),_("valueChange",function(i){y(e);let a=h(2);return w(a.auxType.set(i))}),Q(52,CSe,2,2,"mat-option",32,Oe),l()(),r(54,"mat-form-field",28)(55,"mat-label"),c(56,"VNC console resolution"),l(),r(57,"mat-select",31),_("valueChange",function(i){y(e);let a=h(2);return w(a.consoleResolution.set(i))}),Q(58,bSe,2,2,"mat-option",32,Oe),l()(),r(60,"mat-form-field",28)(61,"mat-label"),c(62,"HTTP port in the container"),l(),r(63,"input",21),_("input",function(i){y(e);let a=h(2);return w(a.consoleHttpPort.set(i.target.value))}),l()(),r(64,"mat-form-field",33)(65,"mat-label"),c(66,"HTTP path"),l(),r(67,"input",21),_("input",function(i){y(e);let a=h(2);return w(a.consoleHttpPath.set(i.target.value))}),l()(),r(68,"div",34)(69,"app-netmiko-device-type-select",35),rn("valueChange",function(i){y(e);let a=h(2);return Xt(a.netmikoDeviceType,i)||(a.netmikoDeviceType=i),w(i)}),l(),r(70,"mat-form-field",28)(71,"mat-label"),c(72,"Default username"),l(),r(73,"input",36),_("input",function(i){y(e);let a=h(2);return w(a.defaultUsername.set(i.target.value))}),l()(),r(74,"mat-form-field",28)(75,"mat-label"),c(76,"Default password"),l(),r(77,"input",36),_("input",function(i){y(e);let a=h(2);return w(a.defaultPassword.set(i.target.value))}),l()()(),r(78,"mat-checkbox",37),_("change",function(i){y(e);let a=h(2);return w(a.consoleAutoStart.set(i.checked))}),c(79," Auto start console "),l()(),r(80,"div",38)(81,"button",39),_("click",function(){y(e);let i=h(2);return w(i.configureCustomAdapters())}),c(82," Configure custom adapters "),l()()()(),r(83,"mat-tab"),se(84,xSe,4,0,"ng-template",17)(85,ySe,3,5,"ng-template",40),l(),r(86,"mat-tab"),se(87,wSe,4,0,"ng-template",17),r(88,"h2",18),c(89,"Advanced settings"),l(),r(90,"div",19)(91,"mat-form-field",20)(92,"mat-label"),c(93,"Start command"),l(),r(94,"textarea",41),_("input",function(i){y(e);let a=h(2);return w(a.startCommand.set(i.target.value))}),l(),r(95,"mat-hint"),c(96,'Command to run when the container starts (overrides image default CMD). E.g., python app.py, nginx -g "daemon off;"'),l()(),r(97,"mat-form-field",20)(98,"mat-label"),c(99,"Environment variables"),l(),r(100,"textarea",41),_("input",function(i){y(e);let a=h(2);return w(a.environment.set(i.target.value))}),l(),r(101,"mat-hint"),c(102,"Environment variables (one per line, KEY=VALUE format). Supports: %vm-name%, %vm-id%, %project-id%, %project-path%"),l()(),r(103,"mat-form-field",20)(104,"mat-label"),c(105,"Extra hosts"),l(),r(106,"textarea",41),_("input",function(i){y(e);let a=h(2);return w(a.extraHosts.set(i.target.value))}),l(),r(107,"mat-hint"),c(108,"Hostname to IP mappings, one per line (e.g., gns3.com:192.168.100.10)"),l()(),r(109,"mat-form-field",20)(110,"mat-label"),c(111,"Additional volumes"),l(),r(112,"textarea",41),_("input",function(i){y(e);let a=h(2);return w(a.extraVolumes.set(i.target.value))}),l(),r(113,"mat-hint"),c(114,"Container directories to persist, one per line (e.g., /data; /config)"),l()()()(),r(115,"mat-tab"),se(116,MSe,4,0,"ng-template",17),r(117,"h2",18),c(118,"Extra files"),l(),r(119,"div",19)(120,"h6"),c(121,"Configuration files"),l(),Q(122,SSe,13,2,null,null,ni),r(124,"button",42),_("click",function(){y(e);let i=h(2);return w(i.addExtraConfig())}),r(125,"mat-icon"),c(126,"add"),l(),c(127," Add configuration file "),l()()(),r(128,"mat-tab"),se(129,kSe,4,0,"ng-template",17),r(130,"h2",18),c(131,"Usage notes"),l(),r(132,"div",19)(133,"mat-form-field",20)(134,"mat-label"),c(135,"Usage"),l(),r(136,"textarea",43),_("input",function(i){y(e);let a=h(2);return w(a.usage.set(i.target.value))}),l()()()()()}if(n&2){let e=Te(16),t=h(2);v("selectedIndex",t.selectedTab())("preserveContent",!0),m(9),v("value",t.nodeName()),m(5),v("matChipInputFor",e)("matChipInputSeparatorKeyCodes",t.separatorKeysCodes),m(),ne("gns3-chip-field__values--empty",((t.node==null||t.node.tags==null?null:t.node.tags.length)??0)===0),m(2),K(t.node==null?null:t.node.tags),m(5),v("value",t.dockerImage()),m(5),v("value",t.adapter()),m(4),v("value",t.macAddress()),m(4),v("value",t.memory()),m(6),v("value",t.cpus()),m(4),v("value",t.consoleType()),m(),K(t.consoleTypes),m(5),v("value",t.auxType()),m(),K(t.auxConsoleTypes),m(5),v("value",t.consoleResolution()),m(),K(t.consoleResolutions),m(5),v("value",t.consoleHttpPort()),m(4),v("value",t.consoleHttpPath()),m(2),an("value",t.netmikoDeviceType),v("controller",t.controller),m(4),v("value",t.defaultUsername())("placeholder",t.defaultUsernamePlaceholder()||"Username to log into this node"),m(4),v("value",t.defaultPassword())("placeholder",t.defaultPasswordPlaceholder()||"Password to log into this node"),m(),v("checked",t.consoleAutoStart()),m(16),v("value",t.startCommand()),m(6),v("value",t.environment()),m(6),v("value",t.extraHosts()),m(6),v("value",t.extraVolumes()),m(10),K(t.extraConfigs()),m(14),v("value",t.usage())}}function TSe(n,o){if(n&1&&(r(0,"div",7)(1,"div",13)(2,"mat-card",14),T(3,PSe,137,29,"mat-tab-group",15),l()()()),n&2){let e=h();m(3),E(e.name?3:-1)}}function ESe(n,o){n&1&&L(0,"mat-spinner",11)}function OSe(n,o){n&1&&c(0," Apply ")}var GM=(()=>{class n{dialogReference=f(We);nodeService=f(ft);templateService=f(fa);toasterService=f(re);dockerConfigurationService=f(qm);dialog=f(Xe);cd=f(oe);validationService=f(sv);controller;node;name;separatorKeysCodes=[13,188];consoleTypes=[];auxConsoleTypes=[];consoleResolutions=["2560x1440","1920x1080","1680x1050","1440x900","1366x768","1280x1024","1280x800","1024x768","800x600","640x480"];conf={autoFocus:!1,panelClass:["base-dialog-panel","docker-configurator-dialog-panel","dialog-extra-large-panel"],disableClose:!0};dialogRef;selectedTab=z(0);networkEditor=z(void 0);isApplying=z(!1);isLoading=z(!0);nodeName=$("");dockerImage=$("");startCommand=$("");adapter=$("");macAddress=$("");memory=$("");cpus=$("");consoleType=$("");auxType=$("");consoleAutoStart=$(!1);consoleResolution=$("");consoleHttpPort=$("");consoleHttpPath=$("");environment=$("");extraHosts=$("");extraVolumes=$("");extraConfigs=z([]);usage=$("");netmikoDeviceType=$("");defaultUsername=$("");defaultPassword=$("");defaultUsernamePlaceholder=z("");defaultPasswordPlaceholder=z("");ngOnInit(){this.nodeService.getNode(this.controller,this.node).subscribe({next:e=>{this.node=e,this.name=e.name,this.nodeName.set(e.name||""),this.dockerImage.set(e.properties.image||""),this.startCommand.set(e.properties.start_command||""),this.adapter.set(e.properties.adapters?.toString()||""),this.macAddress.set(e.properties.mac_address||""),this.memory.set(e.properties.memory?.toString()||""),this.cpus.set(e.properties.cpus?.toString()||""),this.consoleType.set(e.console_type||""),this.auxType.set(e.aux_type||""),this.consoleAutoStart.set(e.console_auto_start||!1),this.consoleResolution.set(e.properties.console_resolution||""),this.consoleHttpPort.set(e.properties.console_http_port?.toString()||""),this.consoleHttpPath.set(e.properties.console_http_path||""),this.environment.set(e.properties.environment||""),this.extraHosts.set(e.properties.extra_hosts||"");let t=e.properties.extra_volumes;this.extraVolumes.set(Array.isArray(t)?t.join(`
|
||
`):t||""),this.extraConfigs.set((e.properties.extra_configs||[]).map(i=>({target:i.target||"",content:i.content??""}))),this.usage.set(e.properties.usage||""),this.netmikoDeviceType.set(e.netmiko_device_type||""),this.defaultUsername.set(e.default_username||""),this.defaultPassword.set(e.default_password||""),(!e.default_username||!e.default_password)&&e.template_id&&this.templateService.list(this.controller).subscribe({next:i=>{let a=i.find(s=>s.template_id===e.template_id)?.appliance_metadata;a&&(this.defaultUsernamePlaceholder.set(e.default_username?"":a.default_username||""),this.defaultPasswordPlaceholder.set(e.default_password?"":a.default_password||""),this.cd.markForCheck())},error:()=>{}}),this.getConfiguration(),this.node.properties.cpus||(this.node.properties.cpus=0),this.node.tags||(this.node.tags=[]),this.isLoading.set(!1),this.dialogReference.disableClose=!1,this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load node";this.toasterService.error(t),this.isLoading.set(!1),this.dialogReference.disableClose=!1,this.cd.markForCheck()}})}getConfiguration(){this.consoleTypes=this.dockerConfigurationService.getConsoleTypes(),this.auxConsoleTypes=this.dockerConfigurationService.getAuxConsoleTypes()}configureCustomAdapters(){let e=parseInt(this.adapter(),10)||0,t=Array.from({length:e},(a,s)=>q({adapter_number:s,port_name:this.node.ports?.find(d=>d.adapter_number===s)?.name||"",mac_address:""},this.node.custom_adapters?.find(d=>d.adapter_number===s)));this.dialogRef=this.dialog.open(hh,this.conf);let i=this.dialogRef.componentInstance;i.controller=this.controller,i.adapters.set(t),i.validateAdapterCount=a=>this.nodeService.validateConnectedPorts(this.node,a),i.saveHandler=a=>{this.node.custom_adapters=a.map(s=>ze(q({},s),{port_name:s.port_name||void 0,mac_address:s.mac_address||null})),this.adapter.set(a.length.toString())}}addExtraConfig(){this.extraConfigs.update(e=>[...e,{target:"",content:""}])}removeExtraConfig(e){this.extraConfigs.update(t=>t.filter((i,a)=>a!==e))}updateExtraConfigTarget(e,t){this.extraConfigs.update(i=>i.map((a,s)=>s===e?ze(q({},a),{target:t}):a))}updateExtraConfigContent(e,t){this.extraConfigs.update(i=>i.map((a,s)=>s===e?ze(q({},a),{content:t}):a))}onSaveClick(){if(this.isApplying()||this.networkEditor()?.saving())return;let e=this.validationService.validateName(this.nodeName());if(!e.isValid){this.toasterService.error(e.errorMessage||"Name is required");return}let t=this.validationService.validateAdapters(this.adapter(),99);if(!t.isValid){this.toasterService.error(t.errorMessage);return}let i=this.validationService.validateMacAddress(this.macAddress());if(!i.isValid){this.toasterService.error(i.errorMessage);return}let a=this.validationService.validateMemory(this.memory());if(!a.isValid){this.toasterService.error(a.errorMessage);return}let s=this.validationService.validateCpus(this.cpus());if(!s.isValid){this.toasterService.error(s.errorMessage);return}if(!this.consoleHttpPort()||this.consoleHttpPort().trim()===""){this.toasterService.error("Console HTTP port is required");return}let d=this.validationService.validateConsoleHttpPath(this.consoleHttpPath());if(!d.isValid){this.toasterService.error(d.errorMessage);return}let p=this.validationService.validateEnvironment(this.environment(),"Advanced > Environment");if(!p.isValid){this.toasterService.error(p.errorMessage);return}let u=this.validationService.validateExtraConfigs(this.extraConfigs());if(!u.isValid){this.toasterService.error(u.errorMessage);return}let g=this.validationService.validateNetmikoDeviceType(this.netmikoDeviceType());if(!g.isValid){this.toasterService.error(g.errorMessage);return}this.node.name=this.nodeName(),this.node.properties.image=this.dockerImage(),this.node.properties.start_command=this.startCommand(),this.node.properties.adapters=parseInt(this.adapter(),10)||0,this.node.properties.mac_address=this.macAddress(),this.node.properties.memory=parseInt(this.memory(),10)||0,this.node.properties.cpus=parseFloat(this.cpus())||0,this.node.console_type=this.consoleType(),this.node.aux_type=this.auxType(),this.node.console_auto_start=this.consoleAutoStart(),this.node.properties.console_resolution=this.consoleResolution(),this.node.properties.console_http_port=parseInt(this.consoleHttpPort(),10)||void 0,this.node.properties.console_http_path=this.consoleHttpPath(),this.node.properties.environment=this.environment(),this.node.properties.extra_hosts=this.extraHosts(),this.node.properties.extra_volumes=this.extraVolumes()?this.extraVolumes().split(`
|
||
`).filter(x=>x.trim()):[];let C=this.extraConfigs().filter(x=>(x.target||"").trim()).map(x=>({target:x.target.trim(),content:x.content??""}));this.node.properties.extra_configs=C,this.extraConfigs.set(C),this.node.properties.usage=this.usage(),this.node.netmiko_device_type=this.netmikoDeviceType().trim()||null,this.node.default_username=this.defaultUsername().trim()||null,this.node.default_password=this.defaultPassword().trim()||null,this.isApplying.set(!0),this.dialogReference.disableClose=!0,(this.node.custom_adapters?this.nodeService.updateNodeWithCustomAdapters(this.controller,this.node):this.nodeService.updateNode(this.controller,this.node)).subscribe({next:()=>{this.toasterService.success(`Node ${this.node.name} updated.`),this.dialogReference.close()},error:x=>{let b=x?.error?.message||x?.message||"Failed to update node";this.toasterService.error(b),this.isApplying.set(!1),this.dialogReference.disableClose=!1,this.cd.markForCheck()}})}onCancelClick(){this.isApplying()||this.networkEditor()?.saving()||this.dialogReference.close()}addTag(e){let t=(e.value||"").trim();t&&this.node&&(this.node.tags||(this.node.tags=[]),this.node.tags.push(t)),e.chipInput&&e.chipInput.clear()}removeTag(e){if(!this.node.tags)return;let t=this.node.tags.indexOf(e);t>=0&&this.node.tags.splice(t,1)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-configurator-docker"]],inputs:{nodeName:[1,"nodeName"],dockerImage:[1,"dockerImage"],startCommand:[1,"startCommand"],adapter:[1,"adapter"],macAddress:[1,"macAddress"],memory:[1,"memory"],cpus:[1,"cpus"],consoleType:[1,"consoleType"],auxType:[1,"auxType"],consoleAutoStart:[1,"consoleAutoStart"],consoleResolution:[1,"consoleResolution"],consoleHttpPort:[1,"consoleHttpPort"],consoleHttpPath:[1,"consoleHttpPath"],environment:[1,"environment"],extraHosts:[1,"extraHosts"],extraVolumes:[1,"extraVolumes"],usage:[1,"usage"],netmikoDeviceType:[1,"netmikoDeviceType"],defaultUsername:[1,"defaultUsername"],defaultPassword:[1,"defaultPassword"]},outputs:{nodeName:"nodeNameChange",dockerImage:"dockerImageChange",startCommand:"startCommandChange",adapter:"adapterChange",macAddress:"macAddressChange",memory:"memoryChange",cpus:"cpusChange",consoleType:"consoleTypeChange",auxType:"auxTypeChange",consoleAutoStart:"consoleAutoStartChange",consoleResolution:"consoleResolutionChange",consoleHttpPort:"consoleHttpPortChange",consoleHttpPath:"consoleHttpPathChange",environment:"environmentChange",extraHosts:"extraHostsChange",extraVolumes:"extraVolumesChange",usage:"usageChange",netmikoDeviceType:"netmikoDeviceTypeChange",defaultUsername:"defaultUsernameChange",defaultPassword:"defaultPasswordChange"},decls:18,vars:6,consts:[["chipList",""],["mat-dialog-title","",1,"node-config__header"],[1,"node-config__title"],["aria-hidden","true"],["mat-icon-button","","type","button","aria-label","Close node configuration",1,"node-config__close",3,"click","disabled"],[1,"modal-form-container"],[1,"configurator-dialog-loading"],[1,"content"],["mat-dialog-actions",""],["mat-button","","color","accent",3,"click","disabled"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"],["diameter","20"],["diameter","40"],[1,"default-content"],[1,"matCard"],[3,"selectedIndex","preserveContent"],[3,"selectedIndexChange","selectedIndex","preserveContent"],["mat-tab-label",""],[1,"node-config__section-heading"],[1,"form-container"],["appearance","outline","subscriptSizing","dynamic",1,"form-field"],["matInput","","type","text",3,"input","value"],[1,"gns3-chip-field"],["floatLabel","always","appearance","outline","subscriptSizing","dynamic",1,"form-field","tags-field"],["matInput","","placeholder","Add tags",3,"matChipInputTokenEnd","matChipInputFor","matChipInputSeparatorKeyCodes"],["aria-label","Tags",1,"gns3-chip-field__values"],[3,"editable"],[1,"two-column-grid"],["appearance","outline","subscriptSizing","fixed",1,"form-field"],["matInput","","type","text","min","0",3,"input","value"],["matSuffix",""],[3,"valueChange","value"],[3,"value"],["appearance","outline","subscriptSizing","fixed",1,"form-field","grid-span-2"],[1,"three-column-grid","grid-span-2"],["subscriptSizing","fixed",1,"form-field",3,"valueChange","value","controller"],["matInput","","type","text",3,"input","value","placeholder"],[1,"grid-span-2",3,"change","checked"],[1,"node-config__secondary-actions","node-config__secondary-actions--single"],["mat-raised-button","","color","primary",1,"node-config__secondary-action",3,"click"],["matTabContent",""],["matInput","","rows","1","cdkTextareaAutosize","","cdkAutosizeMinRows","1","cdkAutosizeMaxRows","12",3,"input","value"],["mat-raised-button","","color","primary","type","button",1,"form-field",3,"click"],["matInput","",1,"node-config__usage-textarea",3,"input","value"],[1,"node-config__tab-label"],[3,"removed","editable"],["matChipRemove","","type","button"],[3,"ready","embeddedContext","blocked"],["matInput","","type","text","placeholder","/first_boot.cfg",3,"input","value"],["matSuffix","","mat-icon-button","","type","button","aria-label","Remove configuration file",3,"click"]],template:function(t,i){if(t&1&&(r(0,"div",1)(1,"h1",2),c(2,"Configure Node "),r(3,"span",3),c(4,"\u2014"),l(),c(5),l(),r(6,"button",4),_("click",function(){return i.onCancelClick()}),r(7,"mat-icon"),c(8,"close"),l()()(),r(9,"div",5),T(10,hSe,2,0,"div",6)(11,TSe,4,1,"div",7),l(),r(12,"div",8)(13,"button",9),_("click",function(){return i.onCancelClick()}),c(14," Cancel "),l(),r(15,"button",10),_("click",function(){return i.onSaveClick()}),T(16,ESe,1,0,"mat-spinner",11)(17,OSe,1,0),l()()),t&2){let a,s,d,p;m(5),X(" Docker container ",i.name),m(),v("disabled",i.isApplying()||((a=i.networkEditor())==null?null:a.saving())),m(4),E(i.isLoading()?10:11),m(3),v("disabled",i.isApplying()||((s=i.networkEditor())==null?null:s.saving())),m(2),v("disabled",i.isApplying()||i.isLoading()||((d=i.networkEditor())==null?null:d.saving())),m(),E(i.isApplying()||(p=i.networkEditor())!=null&&p.saving()?16:17)}},dependencies:[fe,St,ke,qe,Qe,hn,Zn,bo,rb,Ir,Xo,Yo,we,Pe,Ve,Dr,oi,ye,Ee,Xc,ot,ct,nt,Y,he,Be,ri,bi,xi,hi,fi,ie,ce,Rt,Gt,rt,mt,po,WM],encapsulation:2,changeDetection:0})}return n})();function DSe(n,o){n&1&&(r(0,"div",6),L(1,"mat-spinner",11),l())}function ISe(n,o){if(n&1){let e=R();r(0,"mat-chip-row",30),_("removed",function(){let i=y(e).$implicit,a=h(3);return w(a.removeTag(i))}),c(1),r(2,"button",31)(3,"mat-icon"),c(4,"cancel"),l()()()}if(n&2){let e=o.$implicit;v("editable",!1),Ce("title",e),m(),X(" ",e," "),m(),Ce("aria-label","Remove tag "+e)}}function ASe(n,o){if(n&1&&(r(0,"mat-option",28),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function NSe(n,o){if(n&1){let e=R();r(0,"app-ports",32),_("ethernetPortsChange",function(i){y(e);let a=h(3);return w(a.node.properties.ports_mapping=i)}),l()}if(n&2){let e=h(3);v("ethernetPorts",e.node.properties.ports_mapping)}}function FSe(n,o){if(n&1){let e=R();r(0,"div",16)(1,"mat-card",17)(2,"h2",18),c(3,"General settings"),l(),r(4,"div",19)(5,"mat-form-field",20)(6,"mat-label"),c(7,"Name"),l(),r(8,"input",21),_("input",function(i){y(e);let a=h(2);return w(a.nodeName.set(i.target.value))}),l()(),r(9,"div",22)(10,"mat-form-field",23)(11,"mat-label"),c(12,"Tags"),l(),r(13,"input",24),_("matChipInputTokenEnd",function(i){y(e);let a=h(2);return w(a.addTag(i))}),l()(),r(14,"mat-chip-grid",25,0),Q(16,ISe,5,4,"mat-chip-row",26,Oe),l()(),r(18,"mat-form-field",20)(19,"mat-label"),c(20,"Console type"),l(),r(21,"mat-select",27),_("valueChange",function(i){y(e);let a=h(2);return w(a.consoleType.set(i))}),Q(22,ASe,2,2,"mat-option",28,Oe),l()()(),T(24,NSe,1,1,"app-ports",29),l()()}if(n&2){let e=Te(15),t=h(2);m(8),v("value",t.nodeName()),m(5),v("matChipInputFor",e)("matChipInputSeparatorKeyCodes",t.separatorKeysCodes),m(),ne("gns3-chip-field__values--empty",((t.node==null||t.node.tags==null?null:t.node.tags.length)??0)===0),m(2),K(t.node==null?null:t.node.tags),m(5),v("value",t.consoleType()),m(),K(t.consoleTypes),m(2),E(t.node.properties?24:-1)}}function RSe(n,o){if(n&1&&(r(0,"div",12)(1,"div",13)(2,"span",14)(3,"mat-icon"),c(4,"tune"),l(),c(5,"General"),l()()(),r(6,"div",15),T(7,FSe,25,7,"div",16),l()),n&2){let e=h();m(7),E(e.node?7:-1)}}function zSe(n,o){n&1&&L(0,"mat-spinner",10)}function LSe(n,o){n&1&&c(0," Apply ")}var qM=(()=>{class n{dialogRef=f(We);nodeService=f(ft);toasterService=f(re);ethernetSwitchesConfigurationService=f(zr);cd=f(oe);validationService=f(Hn);controller;node;name;consoleTypes=[];separatorKeysCodes=[13,188];nodeName=$("");consoleType=$("");isApplying=z(!1);isLoading=z(!0);ngOnInit(){this.nodeService.getNode(this.controller,this.node).subscribe({next:e=>{this.node=e,this.name=this.node.name,this.nodeName.set(e.name||""),this.consoleType.set(e.console_type||""),this.getConfiguration(),this.node.tags||(this.node.tags=[]),this.cd.markForCheck(),this.isLoading.set(!1),this.dialogRef.disableClose=!1},error:e=>{let t=e.error?.message||e.message||"Failed to load node";this.toasterService.error(t),this.cd.markForCheck(),this.isLoading.set(!1),this.dialogRef.disableClose=!1}})}getConfiguration(){this.consoleTypes=this.ethernetSwitchesConfigurationService.getConsoleTypesForEthernetSwitches()}onSaveClick(){if(this.isApplying())return;let e=this.validationService.required(this.nodeName(),"Name");if(!e.isValid){this.toasterService.error(e.errorMessage||"Name is required");return}this.node.name=this.nodeName(),this.node.console_type=this.consoleType(),this.isApplying.set(!0),this.dialogRef.disableClose=!0,this.nodeService.updateNode(this.controller,this.node).subscribe({next:()=>{this.toasterService.success(`Node ${this.node.name} updated.`),this.onCancelClick()},error:t=>{let i=t?.error?.message||t?.message||"Failed to update node";this.toasterService.error(i),this.isApplying.set(!1),this.dialogRef.disableClose=!1,this.cd.markForCheck()}})}onCancelClick(){this.dialogRef.close()}addTag(e){let t=(e.value||"").trim();t&&this.node&&(this.node.tags||(this.node.tags=[]),this.node.tags.push(t)),e.chipInput&&e.chipInput.clear()}removeTag(e){if(!this.node.tags)return;let t=this.node.tags.indexOf(e);t>=0&&this.node.tags.splice(t,1)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-configurator-ethernet-switch"]],inputs:{nodeName:[1,"nodeName"],consoleType:[1,"consoleType"]},outputs:{nodeName:"nodeNameChange",consoleType:"consoleTypeChange"},decls:18,vars:4,consts:[["chipList",""],["mat-dialog-title","",1,"node-config__header"],[1,"node-config__title"],["aria-hidden","true"],["mat-icon-button","","type","button","aria-label","Close node configuration",1,"node-config__close",3,"click"],[1,"modal-form-container"],[1,"configurator-dialog-loading"],["mat-dialog-actions",""],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"],["diameter","20"],["diameter","40"],["role","tablist","aria-label","Node configuration sections",1,"node-config__single-tab"],["role","tab","aria-selected","true"],[1,"node-config__tab-label"],[1,"content"],[1,"default-content"],[1,"matCard"],[1,"node-config__section-heading"],[1,"form-container"],["appearance","outline","subscriptSizing","dynamic",1,"form-field"],["matInput","","type","text",3,"input","value"],[1,"gns3-chip-field"],["floatLabel","always","appearance","outline","subscriptSizing","dynamic",1,"form-field","tags-field"],["matInput","","placeholder","Add tags",3,"matChipInputTokenEnd","matChipInputFor","matChipInputSeparatorKeyCodes"],["aria-label","Tags",1,"gns3-chip-field__values"],[3,"editable"],[3,"valueChange","value"],[3,"value"],[3,"ethernetPorts"],[3,"removed","editable"],["matChipRemove","","type","button"],[3,"ethernetPortsChange","ethernetPorts"]],template:function(t,i){t&1&&(r(0,"div",1)(1,"h1",2),c(2,"Configure Node "),r(3,"span",3),c(4,"\u2014"),l(),c(5),l(),r(6,"button",4),_("click",function(){return i.onCancelClick()}),r(7,"mat-icon"),c(8,"close"),l()()(),r(9,"div",5),T(10,DSe,2,0,"div",6)(11,RSe,8,1),l(),r(12,"div",7)(13,"button",8),_("click",function(){return i.onCancelClick()}),c(14,"Cancel"),l(),r(15,"button",9),_("click",function(){return i.onSaveClick()}),T(16,zSe,1,0,"mat-spinner",10)(17,LSe,1,0),l()()),t&2&&(m(5),X(" Ethernet switch ",i.name),m(5),E(i.isLoading()?10:11),m(5),v("disabled",i.isApplying()||i.isLoading()),m(),E(i.isApplying()?16:17))},dependencies:[ke,qe,Qe,hn,Zn,we,Pe,Ve,ye,Ee,ot,ct,nt,Y,he,Be,ri,bi,xi,hi,fi,ie,ce,rt,mt,gh],encapsulation:2,changeDetection:0})}return n})();function VSe(n,o){n&1&&(r(0,"div",6),L(1,"mat-spinner",11),l())}function BSe(n,o){if(n&1){let e=R();r(0,"mat-chip-row",27),_("removed",function(){let i=y(e).$implicit,a=h(2);return w(a.removeTag(i))}),c(1),r(2,"button",28)(3,"mat-icon"),c(4,"cancel"),l()()()}if(n&2){let e=o.$implicit;v("editable",!1),Ce("title",e),m(),X(" ",e," "),m(),Ce("aria-label","Remove tag "+e)}}function jSe(n,o){if(n&1){let e=R();r(0,"div",12)(1,"div",13)(2,"span",14)(3,"mat-icon"),c(4,"tune"),l(),c(5,"General"),l()()(),r(6,"div",15)(7,"div",16)(8,"mat-card",17)(9,"h2",18),c(10,"General settings"),l(),r(11,"div",19)(12,"mat-form-field",20)(13,"mat-label"),c(14,"Name"),l(),r(15,"input",21),_("input",function(i){y(e);let a=h();return w(a.nodeName.set(i.target.value))}),l()(),r(16,"div",22)(17,"mat-form-field",23)(18,"mat-label"),c(19,"Tags"),l(),r(20,"input",24),_("matChipInputTokenEnd",function(i){y(e);let a=h();return w(a.addTag(i))}),l()(),r(21,"mat-chip-grid",25,0),Q(23,BSe,5,4,"mat-chip-row",26,Oe),l()(),r(25,"mat-form-field",20)(26,"mat-label"),c(27,"Number of ports"),l(),r(28,"input",21),_("input",function(i){y(e);let a=h();return w(a.nodeNumberOfPorts.set(i.target.value))}),l()()()()()()}if(n&2){let e=Te(22),t=h();m(15),v("value",t.nodeName()),m(5),v("matChipInputFor",e)("matChipInputSeparatorKeyCodes",t.separatorKeysCodes),m(),ne("gns3-chip-field__values--empty",((t.node==null||t.node.tags==null?null:t.node.tags.length)??0)===0),m(2),K(t.node==null?null:t.node.tags),m(5),v("value",t.nodeNumberOfPorts())}}function $Se(n,o){n&1&&L(0,"mat-spinner",10)}function HSe(n,o){n&1&&c(0," Apply ")}var QM=(()=>{class n{dialogRef=f(We);nodeService=f(ft);toasterService=f(re);vpcsConfigurationService=f(Jm);cd=f(oe);validationService=f(Hn);controller;node;numberOfPorts;consoleTypes=[];categories=[];name;separatorKeysCodes=[13,188];nodeName=$("");nodeNumberOfPorts=$("");isApplying=z(!1);isLoading=z(!0);ngOnInit(){this.nodeService.getNode(this.controller,this.node).subscribe({next:e=>{this.node=e,this.name=this.node.name,this.numberOfPorts=this.node.ports.length,this.nodeName.set(e.name||""),this.nodeNumberOfPorts.set(this.node.ports.length.toString()),this.getConfiguration(),this.node.tags||(this.node.tags=[]),this.cd.markForCheck(),this.isLoading.set(!1),this.dialogRef.disableClose=!1},error:e=>{let t=e.error?.message||e.message||"Failed to load node";this.toasterService.error(t),this.cd.markForCheck(),this.isLoading.set(!1),this.dialogRef.disableClose=!1}})}getConfiguration(){this.consoleTypes=this.vpcsConfigurationService.getConsoleTypes(),this.categories=this.vpcsConfigurationService.getCategories()}onSaveClick(){if(this.isApplying())return;let e=this.validationService.required(this.nodeName(),"Name");if(!e.isValid){this.toasterService.error(e.errorMessage||"Name is required");return}let t=this.nodeNumberOfPorts();if(t&&t.trim()!==""){let i=parseInt(t,10);if(isNaN(i)||i<0||i!==parseFloat(t)){this.toasterService.error("Number of ports must be a non-negative integer");return}this.numberOfPorts=i}else this.numberOfPorts=0;this.node.name=this.nodeName(),this.node.properties.ports_mapping=[];for(let i=0;i<this.numberOfPorts;i++)this.node.properties.ports_mapping.push({name:`Ethernet${i}`,port_number:i});this.isApplying.set(!0),this.dialogRef.disableClose=!0,this.nodeService.updateNode(this.controller,this.node).subscribe({next:()=>{this.toasterService.success(`Node ${this.node.name} updated.`),this.onCancelClick()},error:i=>{let a=i?.error?.message||i?.message||"Failed to update node";this.toasterService.error(a),this.isApplying.set(!1),this.dialogRef.disableClose=!1,this.cd.markForCheck()}})}onCancelClick(){this.dialogRef.close()}addTag(e){let t=(e.value||"").trim();t&&this.node&&(this.node.tags||(this.node.tags=[]),this.node.tags.push(t)),e.chipInput&&e.chipInput.clear()}removeTag(e){if(!this.node.tags)return;let t=this.node.tags.indexOf(e);t>=0&&this.node.tags.splice(t,1)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-configurator-ethernet-hub"]],inputs:{nodeName:[1,"nodeName"],nodeNumberOfPorts:[1,"nodeNumberOfPorts"]},outputs:{nodeName:"nodeNameChange",nodeNumberOfPorts:"nodeNumberOfPortsChange"},decls:18,vars:4,consts:[["chipList",""],["mat-dialog-title","",1,"node-config__header"],[1,"node-config__title"],["aria-hidden","true"],["mat-icon-button","","type","button","aria-label","Close node configuration",1,"node-config__close",3,"click"],[1,"modal-form-container"],[1,"configurator-dialog-loading"],["mat-dialog-actions",""],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"],["diameter","20"],["diameter","40"],["role","tablist","aria-label","Node configuration sections",1,"node-config__single-tab"],["role","tab","aria-selected","true"],[1,"node-config__tab-label"],[1,"content"],[1,"default-content"],[1,"matCard"],[1,"node-config__section-heading"],[1,"form-container"],["appearance","outline","subscriptSizing","dynamic",1,"form-field"],["matInput","","type","text",3,"input","value"],[1,"gns3-chip-field"],["floatLabel","always","appearance","outline","subscriptSizing","dynamic",1,"form-field","tags-field"],["matInput","","placeholder","Add tags",3,"matChipInputTokenEnd","matChipInputFor","matChipInputSeparatorKeyCodes"],["aria-label","Tags",1,"gns3-chip-field__values"],[3,"editable"],[3,"removed","editable"],["matChipRemove","","type","button"]],template:function(t,i){t&1&&(r(0,"div",1)(1,"h1",2),c(2,"Configure Node "),r(3,"span",3),c(4,"\u2014"),l(),c(5),l(),r(6,"button",4),_("click",function(){return i.onCancelClick()}),r(7,"mat-icon"),c(8,"close"),l()()(),r(9,"div",5),T(10,VSe,2,0,"div",6)(11,jSe,29,6),l(),r(12,"div",7)(13,"button",8),_("click",function(){return i.onCancelClick()}),c(14,"Cancel"),l(),r(15,"button",9),_("click",function(){return i.onSaveClick()}),T(16,$Se,1,0,"mat-spinner",10)(17,HSe,1,0),l()()),t&2&&(m(5),X(" Ethernet hub ",i.name),m(5),E(i.isLoading()?10:11),m(5),v("disabled",i.isApplying()||i.isLoading()),m(),E(i.isApplying()?16:17))},dependencies:[fe,St,ke,qe,Qe,hn,Zn,we,Pe,Ve,ye,Ee,Y,he,Be,ri,bi,xi,hi,fi,ie,ce,rt,mt],encapsulation:2,changeDetection:0})}return n})();var USe=()=>["c1700","c2600","c2691","c3600","c3725","c3745"],WSe=()=>[0,1,2,3,4,5,6],GSe=()=>[0,1,2];function qSe(n,o){n&1&&(r(0,"div",6),L(1,"mat-spinner",12),l())}function QSe(n,o){n&1&&(r(0,"span",47)(1,"mat-icon"),c(2,"tune"),l(),c(3,"General"),l())}function KSe(n,o){if(n&1&&(r(0,"span"),c(1),l()),n&2){let e=h(3);m(),X(" \xB7 Chassis: ",e.node.properties.chassis)}}function XSe(n,o){if(n&1){let e=R();r(0,"mat-chip-row",48),_("removed",function(){let i=y(e).$implicit,a=h(3);return w(a.removeTag(i))}),c(1),r(2,"button",49)(3,"mat-icon"),c(4,"cancel"),l()()()}if(n&2){let e=o.$implicit;v("editable",!1),Ce("title",e),m(),X(" ",e," "),m(),Ce("aria-label","Remove tag "+e)}}function YSe(n,o){if(n&1&&(r(0,"mat-option",29),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function ZSe(n,o){if(n&1){let e=R();r(0,"mat-form-field",27)(1,"mat-label"),c(2,"Midplane"),l(),r(3,"mat-select",28),_("valueChange",function(i){y(e);let a=h(3);return w(a.midplane.set(i))}),Q(4,YSe,2,2,"mat-option",29,Oe),l()()}if(n&2){let e=h(3);m(3),v("value",e.midplane()),m(),K(e.MidplaneTypes)}}function JSe(n,o){if(n&1&&(r(0,"mat-option",29),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function e2e(n,o){if(n&1){let e=R();r(0,"mat-form-field",27)(1,"mat-label"),c(2,"NPE"),l(),r(3,"mat-select",28),_("valueChange",function(i){y(e);let a=h(3);return w(a.npe.set(i))}),Q(4,JSe,2,2,"mat-option",29,Oe),l()()}if(n&2){let e=h(3);m(3),v("value",e.npe()),m(),K(e.NPETypes)}}function t2e(n,o){if(n&1&&(r(0,"mat-option",29),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function n2e(n,o){if(n&1&&(r(0,"mat-option",29),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function i2e(n,o){n&1&&(r(0,"span",47)(1,"mat-icon"),c(2,"storage"),l(),c(3,"Memory & disks"),l())}function o2e(n,o){if(n&1){let e=R();r(0,"mat-form-field",19)(1,"mat-label"),c(2,"I/O memory"),l(),r(3,"input",20),_("input",function(i){y(e);let a=h(3);return w(a.iomem.set(i.target.value))}),l(),r(4,"span",39),c(5,"%"),l()()}if(n&2){let e=h(3);m(3),v("value",e.iomem())}}function a2e(n,o){n&1&&(r(0,"span",47)(1,"mat-icon"),c(2,"lan"),l(),c(3,"Slots"),l())}function r2e(n,o){n&1&&(r(0,"mat-option",29),c(1),l()),n&2&&(m(),X(" ",""," "))}function s2e(n,o){if(n&1&&(r(0,"mat-option",29),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function l2e(n,o){if(n&1){let e=R();r(0,"mat-form-field",27)(1,"mat-label"),c(2),l(),r(3,"mat-select",28),_("valueChange",function(i){y(e);let a=h().$implicit,s=h(3);return w(s.setSlotValue(a,i))}),T(4,r2e,2,1,"mat-option",29),Q(5,s2e,2,2,"mat-option",29,Oe),l()()}if(n&2){let e=h().$implicit,t=h(3);m(2),X("Slot ",e),m(),v("value",t.getSlotValue(e)),m(),E(t.adapterMatrix[t.node.properties.platform][t.node.properties.chassis||""][e].length>1&&!t.adapterMatrix[t.node.properties.platform][t.node.properties.chassis||""][e][0].startsWith("C7200")?4:-1),m(),K(t.adapterMatrix[t.node.properties.platform][t.node.properties.chassis||""][e])}}function c2e(n,o){if(n&1&&T(0,l2e,7,3,"mat-form-field",27),n&2){let e=o.$implicit,t=h(3);E(t.adapterMatrix[t.node.properties.platform][t.node.properties.chassis||""][e]?0:-1)}}function d2e(n,o){if(n&1&&(r(0,"mat-option",29),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function m2e(n,o){if(n&1){let e=R();r(0,"mat-form-field",27)(1,"mat-label"),c(2),l(),r(3,"mat-select",28),_("valueChange",function(i){y(e);let a=h().$implicit,s=h(4);return w(s.setWicValue(a,i))}),r(4,"mat-option",29),c(5),l(),Q(6,d2e,2,2,"mat-option",29,Oe),l()()}if(n&2){let e=h().$implicit,t=h(4);m(2),X("WIC ",e),m(),v("value",t.getWicValue(e)),m(2),X(" ",""," "),m(),K(t.wicMatrix[t.node.properties.platform][e])}}function p2e(n,o){if(n&1&&T(0,m2e,8,3,"mat-form-field",27),n&2){let e=o.$implicit,t=h(4);E(t.wicMatrix[t.node.properties.platform][e]?0:-1)}}function u2e(n,o){n&1&&(r(0,"div",42)(1,"h6",43),c(2,"WICs"),l(),r(3,"div",44),Q(4,p2e,1,1,null,null,Oe),l()()),n&2&&(m(4),K(at(0,GSe)))}function g2e(n,o){n&1&&(r(0,"span",47)(1,"mat-icon"),c(2,"settings"),l(),c(3,"Advanced"),l())}function h2e(n,o){n&1&&(r(0,"span",47)(1,"mat-icon"),c(2,"bar_chart"),l(),c(3,"Usage"),l())}function _2e(n,o){if(n&1){let e=R();r(0,"mat-tab-group")(1,"mat-tab"),se(2,QSe,4,0,"ng-template",15),r(3,"h2",16),c(4,"General settings"),l(),r(5,"p",17),c(6),T(7,KSe,2,1,"span"),l(),r(8,"div",18)(9,"mat-form-field",19)(10,"mat-label"),c(11,"Name"),l(),r(12,"input",20),_("input",function(i){y(e);let a=h(2);return w(a.nodeName.set(i.target.value))}),l()(),r(13,"div",21)(14,"mat-form-field",22)(15,"mat-label"),c(16,"Tags"),l(),r(17,"input",23),_("matChipInputTokenEnd",function(i){y(e);let a=h(2);return w(a.addTag(i))}),l()(),r(18,"mat-chip-grid",24,0),Q(20,XSe,5,4,"mat-chip-row",25,Oe),l()(),r(22,"mat-form-field",19)(23,"mat-label"),c(24,"IOS image path"),l(),r(25,"input",20),_("input",function(i){y(e);let a=h(2);return w(a.imagePath.set(i.target.value))}),l()(),r(26,"div",26),T(27,ZSe,6,1,"mat-form-field",27),T(28,e2e,6,1,"mat-form-field",27),r(29,"mat-form-field",27)(30,"mat-label"),c(31,"Console type"),l(),r(32,"mat-select",28),_("valueChange",function(i){y(e);let a=h(2);return w(a.consoleType.set(i))}),Q(33,t2e,2,2,"mat-option",29,Oe),l()(),r(35,"mat-form-field",27)(36,"mat-label"),c(37,"Auxiliary console type"),l(),r(38,"mat-select",28),_("valueChange",function(i){y(e);let a=h(2);return w(a.auxType.set(i))}),Q(39,n2e,2,2,"mat-option",29,Oe),l()(),r(41,"div",30)(42,"app-netmiko-device-type-select",31),rn("valueChange",function(i){y(e);let a=h(2);return Xt(a.netmikoDeviceType,i)||(a.netmikoDeviceType=i),w(i)}),l(),r(43,"mat-form-field",27)(44,"mat-label"),c(45,"Default username"),l(),r(46,"input",32),_("input",function(i){y(e);let a=h(2);return w(a.defaultUsername.set(i.target.value))}),l()(),r(47,"mat-form-field",27)(48,"mat-label"),c(49,"Default password"),l(),r(50,"input",32),_("input",function(i){y(e);let a=h(2);return w(a.defaultPassword.set(i.target.value))}),l()()(),r(51,"mat-checkbox",33),_("change",function(i){y(e);let a=h(2);return w(a.consoleAutoStart.set(i.checked))}),c(52," Auto start console "),l()()()(),r(53,"mat-tab"),se(54,i2e,4,0,"ng-template",15),r(55,"h2",16),c(56,"Memory and disks"),l(),r(57,"div",34)(58,"div",35)(59,"div",36)(60,"h3",37),c(61,"Memory"),l()(),r(62,"div",38)(63,"div",18)(64,"mat-form-field",19)(65,"mat-label"),c(66,"RAM"),l(),r(67,"input",20),_("input",function(i){y(e);let a=h(2);return w(a.ram.set(i.target.value))}),l(),r(68,"span",39),c(69,"MiB"),l()(),r(70,"mat-form-field",19)(71,"mat-label"),c(72,"NVRAM"),l(),r(73,"input",20),_("input",function(i){y(e);let a=h(2);return w(a.nvram.set(i.target.value))}),l(),r(74,"span",39),c(75,"MiB"),l()(),T(76,o2e,6,1,"mat-form-field",19),l()()(),r(77,"div",35)(78,"div",36)(79,"h3",37),c(80,"Disks"),l()(),r(81,"div",38)(82,"div",18)(83,"mat-form-field",19)(84,"mat-label"),c(85,"PCMCIA disk0"),l(),r(86,"input",20),_("input",function(i){y(e);let a=h(2);return w(a.disk0.set(i.target.value))}),l(),r(87,"span",39),c(88,"MiB"),l()(),r(89,"mat-form-field",19)(90,"mat-label"),c(91,"PCMCIA disk1"),l(),r(92,"input",20),_("input",function(i){y(e);let a=h(2);return w(a.disk1.set(i.target.value))}),l(),r(93,"span",39),c(94,"MiB"),l()(),r(95,"mat-checkbox",40),_("change",function(i){y(e);let a=h(2);return w(a.autoDeleteDisks.set(i.checked))}),c(96," Automatically delete NVRAM and disk files "),l()()()()()(),r(97,"mat-tab"),se(98,a2e,4,0,"ng-template",15),r(99,"h2",16),c(100,"Slots and adapters"),l(),r(101,"div",18)(102,"div",41)(103,"div",42)(104,"h6",43),c(105,"Network Adapters"),l(),r(106,"div",44),Q(107,c2e,1,1,null,null,Oe),l()(),T(109,u2e,6,1,"div",42),l()()(),r(110,"mat-tab"),se(111,g2e,4,0,"ng-template",15),r(112,"h2",16),c(113,"Advanced settings"),l(),r(114,"div",18)(115,"div",34)(116,"div",35)(117,"div",36)(118,"h3",37),c(119,"System"),l()(),r(120,"div",38)(121,"mat-form-field",19)(122,"mat-label"),c(123,"System ID"),l(),r(124,"input",20),_("input",function(i){y(e);let a=h(2);return w(a.systemId.set(i.target.value))}),l()(),r(125,"mat-form-field",19)(126,"mat-label"),c(127,"Base MAC"),l(),r(128,"input",20),_("input",function(i){y(e);let a=h(2);return w(a.baseMac.set(i.target.value))}),l()()()(),r(129,"div",35)(130,"div",36)(131,"h3",37),c(132,"Optimizations"),l()(),r(133,"div",38)(134,"mat-form-field",19)(135,"mat-label"),c(136,"Idle-PC"),l(),r(137,"input",45),_("input",function(i){y(e);let a=h(2);return w(a.idlepc.set(i.target.value))}),l()(),r(138,"mat-form-field",19)(139,"mat-label"),c(140,"Idlemax"),l(),r(141,"input",20),_("input",function(i){y(e);let a=h(2);return w(a.idlemax.set(i.target.value))}),l()(),r(142,"mat-form-field",19)(143,"mat-label"),c(144,"Idlesleep"),l(),r(145,"input",20),_("input",function(i){y(e);let a=h(2);return w(a.idlesleep.set(i.target.value))}),l(),r(146,"span",39),c(147,"ms"),l()(),r(148,"mat-form-field",19)(149,"mat-label"),c(150,"Exec area"),l(),r(151,"input",20),_("input",function(i){y(e);let a=h(2);return w(a.execArea.set(i.target.value))}),l(),r(152,"span",39),c(153,"MiB"),l()(),r(154,"mat-checkbox",40),_("change",function(i){y(e);let a=h(2);return w(a.mmap.set(i.checked))}),c(155," Enable mmap support "),l(),r(156,"mat-checkbox",40),_("change",function(i){y(e);let a=h(2);return w(a.sparsemem.set(i.checked))}),c(157," Enable sparse memory support "),l()()()()()(),r(158,"mat-tab"),se(159,h2e,4,0,"ng-template",15),r(160,"h2",16),c(161,"Usage notes"),l(),r(162,"div",18)(163,"mat-form-field",19)(164,"mat-label"),c(165,"Usage"),l(),r(166,"textarea",46),_("input",function(i){y(e);let a=h(2);return w(a.usage.set(i.target.value))}),l()()()()()}if(n&2){let e=Te(19),t=h(2);m(6),X(" Platform: ",t.node.properties.platform," "),m(),E(t.node.properties.chassis?7:-1),m(5),v("value",t.nodeName()),m(5),v("matChipInputFor",e)("matChipInputSeparatorKeyCodes",t.separatorKeysCodes),m(),ne("gns3-chip-field__values--empty",((t.node==null||t.node.tags==null?null:t.node.tags.length)??0)===0),m(2),K(t.node==null?null:t.node.tags),m(5),v("value",t.imagePath()),m(2),E(t.node.properties.midplane?27:-1),m(),E(t.node.properties.npe?28:-1),m(4),v("value",t.consoleType()),m(),K(t.consoleTypes),m(5),v("value",t.auxType()),m(),K(t.consoleTypes),m(3),an("value",t.netmikoDeviceType),v("controller",t.controller),m(4),v("value",t.defaultUsername())("placeholder",t.defaultUsernamePlaceholder()||"Username to log into this node"),m(4),v("value",t.defaultPassword())("placeholder",t.defaultPasswordPlaceholder()||"Password to log into this node"),m(),v("checked",t.consoleAutoStart()),m(16),v("value",t.ram()),m(6),v("value",t.nvram()),m(3),E(at(35,USe).includes(t.node.properties.platform)?76:-1),m(10),v("value",t.disk0()),m(6),v("value",t.disk1()),m(3),v("checked",t.autoDeleteDisks()),m(12),K(at(36,WSe)),m(2),E(t.wicMatrix[t.node.properties.platform]?109:-1),m(15),v("value",t.systemId()),m(4),v("value",t.baseMac()),m(9),v("value",t.idlepc()),m(4),v("value",t.idlemax()),m(4),v("value",t.idlesleep()),m(6),v("value",t.execArea()),m(3),v("checked",t.mmap()),m(2),v("checked",t.sparsemem()),m(10),v("value",t.usage())}}function f2e(n,o){if(n&1&&(r(0,"div",7)(1,"div",13)(2,"mat-card",14),T(3,_2e,167,37,"mat-tab-group"),l()()()),n&2){let e=h();m(3),E(e.name?3:-1)}}function v2e(n,o){n&1&&L(0,"mat-spinner",11)}function C2e(n,o){n&1&&c(0," Apply ")}var KM=(()=>{class n{dialogRef=f(We);nodeService=f(ft);templateService=f(fa);toasterService=f(re);configurationService=f(Qm);cd=f(oe);validationService=f(lv);controller;node;name;consoleTypes=[];NPETypes=[];MidplaneTypes=[];adapterMatrix={};wicMatrix={};separatorKeysCodes=[13,188];isApplying=z(!1);isLoading=z(!0);nodeName=$("");imagePath=$("");midplane=$("");npe=$("");consoleType=$("");auxType=$("");consoleAutoStart=$(!1);slot0=$("");slot1=$("");slot2=$("");slot3=$("");slot4=$("");slot5=$("");slot6=$("");wic0=$("");wic1=$("");wic2=$("");ram=$("");nvram=$("");iomem=$("");disk0=$("");disk1=$("");autoDeleteDisks=$(!1);systemId=$("");baseMac=$("");idlepc=$("");idlemax=$("");idlesleep=$("");execArea=$("");mmap=$(!1);sparsemem=$(!1);usage=$("");netmikoDeviceType=$("");defaultUsername=$("");defaultPassword=$("");defaultUsernamePlaceholder=z("");defaultPasswordPlaceholder=z("");ngOnInit(){this.nodeService.getNode(this.controller,this.node).subscribe({next:e=>{this.node=e,this.name=e.name,this.nodeName.set(e.name||""),this.imagePath.set(e.properties.image||""),this.midplane.set(e.properties.midplane||""),this.npe.set(e.properties.npe||""),this.consoleType.set(e.console_type||""),this.auxType.set(e.aux_type||""),this.consoleAutoStart.set(e.console_auto_start||!1),this.slot0.set(e.properties.slot0||""),this.slot1.set(e.properties.slot1||""),this.slot2.set(e.properties.slot2||""),this.slot3.set(e.properties.slot3||""),this.slot4.set(e.properties.slot4||""),this.slot5.set(e.properties.slot5||""),this.slot6.set(e.properties.slot6||""),this.wic0.set(e.properties.wic0||""),this.wic1.set(e.properties.wic1||""),this.wic2.set(e.properties.wic2||""),this.ram.set(e.properties.ram?.toString()||""),this.nvram.set(e.properties.nvram?.toString()||""),this.iomem.set(e.properties.iomem?.toString()||""),this.disk0.set(e.properties.disk0?.toString()||""),this.disk1.set(e.properties.disk1?.toString()||""),this.autoDeleteDisks.set(e.properties.auto_delete_disks||!1),this.systemId.set(e.properties.system_id||""),this.baseMac.set(e.properties.mac_addr||""),this.idlepc.set(e.properties.idlepc||""),this.idlemax.set(e.properties.idlemax?.toString()||""),this.idlesleep.set(e.properties.idlesleep?.toString()||""),this.execArea.set(e.properties.exec_area?.toString()||""),this.mmap.set(e.properties.mmap||!1),this.sparsemem.set(e.properties.sparsemem||!1),this.usage.set(e.properties.usage||""),this.netmikoDeviceType.set(e.netmiko_device_type||""),this.defaultUsername.set(e.default_username||""),this.defaultPassword.set(e.default_password||""),(!e.default_username||!e.default_password)&&e.template_id&&this.templateService.list(this.controller).subscribe({next:t=>{let i=t.find(a=>a.template_id===e.template_id)?.appliance_metadata;i&&(this.defaultUsernamePlaceholder.set(e.default_username?"":i.default_username||""),this.defaultPasswordPlaceholder.set(e.default_password?"":i.default_password||""),this.cd.markForCheck())},error:()=>{}}),this.node.tags||(this.node.tags=[]),this.getConfiguration(),this.fillSlotsData(),this.cd.markForCheck(),this.isLoading.set(!1),this.dialogRef.disableClose=!1},error:e=>{let t=e.error?.message||e.message||"Failed to load node";this.toasterService.error(t),this.cd.markForCheck(),this.isLoading.set(!1),this.dialogRef.disableClose=!1}})}getConfiguration(){this.consoleTypes=this.configurationService.getConsoleTypes(),this.NPETypes=this.configurationService.getNPETypes(),this.MidplaneTypes=this.configurationService.getMidplaneTypes(),this.adapterMatrix=this.configurationService.getAdapterMatrix(),this.wicMatrix=this.configurationService.getWicMatrix()}fillSlotsData(){}getSlotValue(e){return[this.slot0(),this.slot1(),this.slot2(),this.slot3(),this.slot4(),this.slot5(),this.slot6()][e]||""}setSlotValue(e,t){[this.slot0,this.slot1,this.slot2,this.slot3,this.slot4,this.slot5,this.slot6][e]?.set(t)}getWicValue(e){return[this.wic0(),this.wic1(),this.wic2()][e]||""}setWicValue(e,t){[this.wic0,this.wic1,this.wic2][e]?.set(t)}saveSlotsData(){let e=[this.slot0(),this.slot1(),this.slot2(),this.slot3(),this.slot4(),this.slot5(),this.slot6()],t=[this.wic0(),this.wic1(),this.wic2()],i=this.node.properties.platform,a=this.node.properties.chassis||"";for(let s=0;s<=6;s++)this.adapterMatrix?.[i]?.[a]?.[s]?this.node.properties[`slot${s}`]=e[s]||"":delete this.node.properties[`slot${s}`];for(let s=0;s<=2;s++)this.wicMatrix?.[i]?.[s]?this.node.properties[`wic${s}`]=t[s]||"":delete this.node.properties[`wic${s}`]}onSaveClick(){if(this.isApplying())return;let e=this.validationService.validateName(this.nodeName());if(!e.isValid){this.toasterService.error(e.errorMessage);return}let t=this.validationService.validateImagePath(this.imagePath());if(!t.isValid){this.toasterService.error(t.errorMessage);return}let i=this.node.properties.platform,a=this.validationService.validateRamForPlatform(this.ram(),i);if(!a.isValid){this.toasterService.error(a.errorMessage);return}let s=this.validationService.validateNvramForPlatform(this.nvram(),i);if(!s.isValid){this.toasterService.error(s.errorMessage);return}let d=this.validationService.validateMacAddress(this.baseMac());if(!d.isValid){this.toasterService.error(d.errorMessage);return}let p=this.validationService.validateIdlepc(this.idlepc());if(!p.isValid){this.toasterService.error(p.errorMessage);return}let u=this.validationService.validateNetmikoDeviceType(this.netmikoDeviceType());if(!u.isValid){this.toasterService.error(u.errorMessage);return}if(this.iomem()){let M=this.validationService.validateIomem(this.iomem());if(!M.isValid){this.toasterService.error(M.errorMessage);return}}this.node.name=this.nodeName(),this.node.properties.image=this.imagePath(),["c7200"].includes(this.node.properties.platform)?(this.node.properties.midplane=this.midplane()||null,this.node.properties.npe=this.npe()||null):(delete this.node.properties.midplane,delete this.node.properties.npe),this.node.console_type=this.consoleType(),this.node.aux_type=this.auxType(),this.node.console_auto_start=this.consoleAutoStart(),this.node.properties.ram=parseInt(this.ram(),10)||0,this.node.properties.nvram=parseInt(this.nvram(),10)||0,["c1700","c2600","c2691","c3600","c3725","c3745"].includes(this.node.properties.platform)?this.node.properties.iomem=this.iomem()?parseInt(this.iomem(),10):null:delete this.node.properties.iomem,this.node.properties.disk0=parseInt(this.disk0(),10)||0,this.node.properties.disk1=parseInt(this.disk1(),10)||0,this.node.properties.auto_delete_disks=this.autoDeleteDisks(),this.node.properties.system_id=this.systemId(),this.node.properties.mac_addr=this.baseMac(),this.node.properties.idlepc=this.idlepc(),this.node.properties.idlemax=parseInt(this.idlemax(),10)||0,this.node.properties.idlesleep=parseInt(this.idlesleep(),10)||0,this.node.properties.exec_area=parseInt(this.execArea(),10)||0,this.node.properties.mmap=this.mmap(),this.node.properties.sparsemem=this.sparsemem(),this.node.properties.usage=this.usage(),this.node.netmiko_device_type=this.netmikoDeviceType().trim()||null,this.node.default_username=this.defaultUsername().trim()||null,this.node.default_password=this.defaultPassword().trim()||null,this.saveSlotsData(),this.isApplying.set(!0),this.dialogRef.disableClose=!0,this.nodeService.updateNode(this.controller,this.node).subscribe({next:()=>{this.toasterService.success(`Node ${this.node.name} updated.`),this.onCancelClick()},error:M=>{let x=M?.error?.message||M?.message||"Failed to update node";this.toasterService.error(x),this.isApplying.set(!1),this.dialogRef.disableClose=!1,this.cd.markForCheck()}})}onCancelClick(){this.dialogRef.close()}addTag(e){let t=(e.value||"").trim();t&&this.node&&(this.node.tags||(this.node.tags=[]),this.node.tags.push(t)),e.chipInput&&e.chipInput.clear()}removeTag(e){if(!this.node.tags)return;let t=this.node.tags.indexOf(e);t>=0&&this.node.tags.splice(t,1)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-configurator-ios"]],inputs:{nodeName:[1,"nodeName"],imagePath:[1,"imagePath"],midplane:[1,"midplane"],npe:[1,"npe"],consoleType:[1,"consoleType"],auxType:[1,"auxType"],consoleAutoStart:[1,"consoleAutoStart"],slot0:[1,"slot0"],slot1:[1,"slot1"],slot2:[1,"slot2"],slot3:[1,"slot3"],slot4:[1,"slot4"],slot5:[1,"slot5"],slot6:[1,"slot6"],wic0:[1,"wic0"],wic1:[1,"wic1"],wic2:[1,"wic2"],ram:[1,"ram"],nvram:[1,"nvram"],iomem:[1,"iomem"],disk0:[1,"disk0"],disk1:[1,"disk1"],autoDeleteDisks:[1,"autoDeleteDisks"],systemId:[1,"systemId"],baseMac:[1,"baseMac"],idlepc:[1,"idlepc"],idlemax:[1,"idlemax"],idlesleep:[1,"idlesleep"],execArea:[1,"execArea"],mmap:[1,"mmap"],sparsemem:[1,"sparsemem"],usage:[1,"usage"],netmikoDeviceType:[1,"netmikoDeviceType"],defaultUsername:[1,"defaultUsername"],defaultPassword:[1,"defaultPassword"]},outputs:{nodeName:"nodeNameChange",imagePath:"imagePathChange",midplane:"midplaneChange",npe:"npeChange",consoleType:"consoleTypeChange",auxType:"auxTypeChange",consoleAutoStart:"consoleAutoStartChange",slot0:"slot0Change",slot1:"slot1Change",slot2:"slot2Change",slot3:"slot3Change",slot4:"slot4Change",slot5:"slot5Change",slot6:"slot6Change",wic0:"wic0Change",wic1:"wic1Change",wic2:"wic2Change",ram:"ramChange",nvram:"nvramChange",iomem:"iomemChange",disk0:"disk0Change",disk1:"disk1Change",autoDeleteDisks:"autoDeleteDisksChange",systemId:"systemIdChange",baseMac:"baseMacChange",idlepc:"idlepcChange",idlemax:"idlemaxChange",idlesleep:"idlesleepChange",execArea:"execAreaChange",mmap:"mmapChange",sparsemem:"sparsememChange",usage:"usageChange",netmikoDeviceType:"netmikoDeviceTypeChange",defaultUsername:"defaultUsernameChange",defaultPassword:"defaultPasswordChange"},decls:18,vars:4,consts:[["chipList",""],["mat-dialog-title","",1,"node-config__header"],[1,"node-config__title"],["aria-hidden","true"],["mat-icon-button","","type","button","aria-label","Close node configuration",1,"node-config__close",3,"click"],[1,"modal-form-container"],[1,"configurator-dialog-loading"],[1,"content"],["mat-dialog-actions",""],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"],["diameter","20"],["diameter","40"],[1,"default-content"],[1,"matCard"],["mat-tab-label",""],[1,"node-config__section-heading"],[1,"node-config__meta"],[1,"form-container"],["appearance","outline","subscriptSizing","dynamic",1,"form-field"],["matInput","","type","text",3,"input","value"],[1,"gns3-chip-field"],["floatLabel","always","appearance","outline","subscriptSizing","dynamic",1,"form-field","tags-field"],["matInput","","placeholder","Add tags",3,"matChipInputTokenEnd","matChipInputFor","matChipInputSeparatorKeyCodes"],["aria-label","Tags",1,"gns3-chip-field__values"],[3,"editable"],[1,"form-grid"],["appearance","outline","subscriptSizing","fixed",1,"form-field"],[3,"valueChange","value"],[3,"value"],[1,"three-column-grid","form-grid__full"],["subscriptSizing","fixed",1,"form-field",3,"valueChange","value","controller"],["matInput","","type","text",3,"input","value","placeholder"],[1,"form-grid__full",3,"change","checked"],[1,"disk-cards-grid"],[1,"disk-card"],[1,"disk-card__header"],[1,"disk-card__title"],[1,"disk-card__content"],["matSuffix",""],[3,"change","checked"],[1,"ios-configurator__slots-section"],[1,"ios-configurator__slots-group"],[1,"ios-configurator__slots-title"],[1,"ios-configurator__slots-grid"],["matInput","",3,"input","value"],["matInput","",1,"node-config__usage-textarea",3,"input","value"],[1,"node-config__tab-label"],[3,"removed","editable"],["matChipRemove","","type","button"]],template:function(t,i){t&1&&(r(0,"div",1)(1,"h1",2),c(2,"Configure Node "),r(3,"span",3),c(4,"\u2014"),l(),c(5),l(),r(6,"button",4),_("click",function(){return i.onCancelClick()}),r(7,"mat-icon"),c(8,"close"),l()()(),r(9,"div",5),T(10,qSe,2,0,"div",6)(11,f2e,4,1,"div",7),l(),r(12,"div",8)(13,"button",9),_("click",function(){return i.onCancelClick()}),c(14,"Cancel"),l(),r(15,"button",10),_("click",function(){return i.onSaveClick()}),T(16,v2e,1,0,"mat-spinner",11)(17,C2e,1,0),l()()),t&2&&(m(5),X(" IOS router ",i.name),m(5),E(i.isLoading()?10:11),m(5),v("disabled",i.isApplying()||i.isLoading()),m(),E(i.isApplying()?16:17))},dependencies:[fe,St,ke,qe,Qe,hn,Zn,bo,Ir,Xo,Yo,we,Pe,Ve,oi,ye,Ee,ot,ct,nt,Y,he,Be,ri,bi,xi,hi,fi,ie,ce,Rt,Gt,rt,mt,po],styles:["table[_ngcontent-%COMP%], .form-field[_ngcontent-%COMP%], .configButton[_ngcontent-%COMP%]{width:100%}.modal-form-container[_ngcontent-%COMP%]{padding:16px}.file-button[_ngcontent-%COMP%]{width:18%}.create-button[_ngcontent-%COMP%]{width:100%}.file-name-form-field[_ngcontent-%COMP%]{padding-left:2%;width:80%}.nonvisible[_ngcontent-%COMP%]{display:none}mat-radio-button[_ngcontent-%COMP%]{margin-right:8px}.tags-field[_ngcontent-%COMP%]{width:100%}",".ios-configurator__slots-section[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:32px}.ios-configurator__slots-group[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-card-gap)}.ios-configurator__slots-title[_ngcontent-%COMP%]{font-size:16px;font-weight:500;color:var(--mat-sys-on-surface);margin:0}.ios-configurator__slots-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:var(--gns3-density-space-3)}[data-density=compact][_nghost-%COMP%] .ios-configurator__slots-section[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .ios-configurator__slots-section[_ngcontent-%COMP%]{gap:16px}[data-density=compact][_nghost-%COMP%] .ios-configurator__slots-group[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .ios-configurator__slots-group[_ngcontent-%COMP%]{gap:8px}[data-density=compact][_nghost-%COMP%] .ios-configurator__slots-grid[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .ios-configurator__slots-grid[_ngcontent-%COMP%]{gap:8px}"],changeDetection:0})}return n})();function b2e(n,o){n&1&&(r(0,"div",6),L(1,"mat-spinner",12),l())}function x2e(n,o){n&1&&(r(0,"span",34)(1,"mat-icon"),c(2,"tune"),l(),c(3,"General"),l())}function y2e(n,o){if(n&1){let e=R();r(0,"mat-chip-row",35),_("removed",function(){let i=y(e).$implicit,a=h(3);return w(a.removeTag(i))}),c(1),r(2,"button",36)(3,"mat-icon"),c(4,"cancel"),l()()()}if(n&2){let e=o.$implicit;v("editable",!1),Ce("title",e),m(),X(" ",e," "),m(),Ce("aria-label","Remove tag "+e)}}function w2e(n,o){if(n&1&&(r(0,"mat-option",26),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function M2e(n,o){if(n&1){let e=R();r(0,"mat-form-field",18)(1,"mat-label"),c(2,"RAM size"),l(),r(3,"input",19),_("input",function(i){y(e);let a=h(3);return w(a.ram.set(i.target.value))}),l(),r(4,"span",37),c(5,"MB"),l()()}if(n&2){let e=h(3);m(3),v("value",e.ram())}}function S2e(n,o){if(n&1){let e=R();r(0,"mat-form-field",18)(1,"mat-label"),c(2,"NVRAM size"),l(),r(3,"input",19),_("input",function(i){y(e);let a=h(3);return w(a.nvram.set(i.target.value))}),l(),r(4,"span",37),c(5,"KB"),l()()}if(n&2){let e=h(3);m(3),v("value",e.nvram())}}function k2e(n,o){n&1&&(r(0,"span",34)(1,"mat-icon"),c(2,"lan"),l(),c(3,"Network"),l())}function P2e(n,o){n&1&&(r(0,"span",34)(1,"mat-icon"),c(2,"bar_chart"),l(),c(3,"Usage"),l())}function T2e(n,o){if(n&1){let e=R();r(0,"mat-tab-group")(1,"mat-tab"),se(2,x2e,4,0,"ng-template",15),r(3,"h2",16),c(4,"General settings"),l(),r(5,"div",17)(6,"mat-form-field",18)(7,"mat-label"),c(8,"Name"),l(),r(9,"input",19),_("input",function(i){y(e);let a=h(2);return w(a.nodeName.set(i.target.value))}),l()(),r(10,"div",20)(11,"mat-form-field",21)(12,"mat-label"),c(13,"Tags"),l(),r(14,"input",22),_("matChipInputTokenEnd",function(i){y(e);let a=h(2);return w(a.addTag(i))}),l()(),r(15,"mat-chip-grid",23,0),Q(17,y2e,5,4,"mat-chip-row",24,Oe),l()(),r(19,"mat-form-field",18)(20,"mat-label"),c(21,"Console type"),l(),r(22,"mat-select",25),_("valueChange",function(i){y(e);let a=h(2);return w(a.consoleType.set(i))}),Q(23,w2e,2,2,"mat-option",26,Oe),l()(),r(25,"div",27)(26,"app-netmiko-device-type-select",28),rn("valueChange",function(i){y(e);let a=h(2);return Xt(a.netmikoDeviceType,i)||(a.netmikoDeviceType=i),w(i)}),l(),r(27,"mat-form-field",29)(28,"mat-label"),c(29,"Default username"),l(),r(30,"input",30),_("input",function(i){y(e);let a=h(2);return w(a.defaultUsername.set(i.target.value))}),l()(),r(31,"mat-form-field",29)(32,"mat-label"),c(33,"Default password"),l(),r(34,"input",30),_("input",function(i){y(e);let a=h(2);return w(a.defaultPassword.set(i.target.value))}),l()()(),r(35,"mat-checkbox",31),_("change",function(i){y(e);let a=h(2);return w(a.consoleAutoStart.set(i.checked))}),c(36," Auto start console "),l(),r(37,"mat-checkbox",31),_("change",function(i){y(e);let a=h(2);return w(a.l1Keepalives.set(i.checked))}),c(38," Enable Layer 1 keepalive messages "),l(),r(39,"mat-checkbox",31),_("change",function(i){y(e);let a=h(2);return w(a.useDefaultIouValues.set(i.checked))}),c(40," Use default IOU values for memories "),l(),T(41,M2e,6,1,"mat-form-field",18),T(42,S2e,6,1,"mat-form-field",18),l()(),r(43,"mat-tab"),se(44,k2e,4,0,"ng-template",15),r(45,"h2",16),c(46,"Network settings"),l(),r(47,"div",32)(48,"mat-form-field",29)(49,"mat-label"),c(50,"Ethernet adapters"),l(),r(51,"input",19),_("input",function(i){y(e);let a=h(2);return w(a.ethernetAdapters.set(i.target.value))}),l()(),r(52,"mat-form-field",29)(53,"mat-label"),c(54,"Serial adapters"),l(),r(55,"input",19),_("input",function(i){y(e);let a=h(2);return w(a.serialAdapters.set(i.target.value))}),l()()()(),r(56,"mat-tab"),se(57,P2e,4,0,"ng-template",15),r(58,"h2",16),c(59,"Usage notes"),l(),r(60,"div",17)(61,"mat-form-field",18)(62,"mat-label"),c(63,"Usage"),l(),r(64,"textarea",33),_("input",function(i){y(e);let a=h(2);return w(a.usage.set(i.target.value))}),l()()()()()}if(n&2){let e=Te(16),t=h(2);m(9),v("value",t.nodeName()),m(5),v("matChipInputFor",e)("matChipInputSeparatorKeyCodes",t.separatorKeysCodes),m(),ne("gns3-chip-field__values--empty",((t.node==null||t.node.tags==null?null:t.node.tags.length)??0)===0),m(2),K(t.node==null?null:t.node.tags),m(5),v("value",t.consoleType()),m(),K(t.consoleTypes),m(3),an("value",t.netmikoDeviceType),v("controller",t.controller),m(4),v("value",t.defaultUsername())("placeholder",t.defaultUsernamePlaceholder()||"Username to log into this node"),m(4),v("value",t.defaultPassword())("placeholder",t.defaultPasswordPlaceholder()||"Password to log into this node"),m(),v("checked",t.consoleAutoStart()),m(2),v("checked",t.l1Keepalives()),m(2),v("checked",t.useDefaultIouValues()),m(2),E(t.useDefaultIouValues()?-1:41),m(),E(t.useDefaultIouValues()?-1:42),m(9),v("value",t.ethernetAdapters()),m(4),v("value",t.serialAdapters()),m(9),v("value",t.usage())}}function E2e(n,o){if(n&1&&(r(0,"div",7)(1,"div",13)(2,"mat-card",14),T(3,T2e,65,20,"mat-tab-group"),l()()()),n&2){let e=h();m(3),E(e.name?3:-1)}}function O2e(n,o){n&1&&L(0,"mat-spinner",11)}function D2e(n,o){n&1&&c(0," Apply ")}var XM=(()=>{class n{dialogRef=f(We);nodeService=f(ft);templateService=f(fa);toasterService=f(re);configurationService=f(vh);cd=f(oe);validationService=f(cv);controller;node;name;separatorKeysCodes=[13,188];consoleTypes=[];isApplying=z(!1);isLoading=z(!0);nodeName=$("");consoleType=$("");consoleAutoStart=$(!1);l1Keepalives=$(!1);useDefaultIouValues=$(!0);ram=$("");nvram=$("");ethernetAdapters=$("");serialAdapters=$("");usage=$("");netmikoDeviceType=$("");defaultUsername=$("");defaultPassword=$("");defaultUsernamePlaceholder=z("");defaultPasswordPlaceholder=z("");ngOnInit(){this.nodeService.getNode(this.controller,this.node).subscribe({next:e=>{this.node=e,this.name=e.name,this.nodeName.set(e.name||""),this.consoleType.set(e.console_type||""),this.consoleAutoStart.set(e.console_auto_start||!1),this.l1Keepalives.set(e.properties.l1_keepalives??!1),this.useDefaultIouValues.set(e.properties.use_default_iou_values!==void 0?e.properties.use_default_iou_values:!0),this.ram.set(e.properties.ram?.toString()||""),this.nvram.set(e.properties.nvram?.toString()||""),this.ethernetAdapters.set(e.properties.ethernet_adapters?.toString()||""),this.serialAdapters.set(e.properties.serial_adapters?.toString()||""),this.usage.set(e.properties.usage||""),this.netmikoDeviceType.set(e.netmiko_device_type||""),this.defaultUsername.set(e.default_username||""),this.defaultPassword.set(e.default_password||""),(!e.default_username||!e.default_password)&&e.template_id&&this.templateService.list(this.controller).subscribe({next:t=>{let i=t.find(a=>a.template_id===e.template_id)?.appliance_metadata;i&&(this.defaultUsernamePlaceholder.set(e.default_username?"":i.default_username||""),this.defaultPasswordPlaceholder.set(e.default_password?"":i.default_password||""),this.cd.markForCheck())},error:()=>{}}),this.getConfiguration(),this.node.tags||(this.node.tags=[]),this.cd.markForCheck(),this.isLoading.set(!1),this.dialogRef.disableClose=!1},error:e=>{let t=e.error?.message||e.message||"Failed to load node";this.toasterService.error(t),this.cd.markForCheck(),this.isLoading.set(!1),this.dialogRef.disableClose=!1}})}getConfiguration(){this.consoleTypes=this.configurationService.getConsoleTypes()}onSaveClick(){if(this.isApplying())return;let e=this.validationService.validateName(this.nodeName());if(!e.isValid){this.toasterService.error(e.errorMessage);return}let t=this.validationService.validateEthernetAdapters(this.ethernetAdapters());if(!t.isValid){this.toasterService.error(t.errorMessage);return}let i=this.validationService.validateSerialAdapters(this.serialAdapters());if(!i.isValid){this.toasterService.error(i.errorMessage);return}let a=this.validationService.validateNetmikoDeviceType(this.netmikoDeviceType());if(!a.isValid){this.toasterService.error(a.errorMessage);return}this.node.name=this.nodeName(),this.node.console_type=this.consoleType(),this.node.console_auto_start=this.consoleAutoStart(),this.node.properties.l1_keepalives=this.l1Keepalives(),this.node.properties.use_default_iou_values=this.useDefaultIouValues(),this.node.properties.ram=parseInt(this.ram(),10)||0,this.node.properties.nvram=parseInt(this.nvram(),10)||0,this.node.properties.usage=this.usage(),this.node.netmiko_device_type=this.netmikoDeviceType().trim()||null,this.node.default_username=this.defaultUsername().trim()||null,this.node.default_password=this.defaultPassword().trim()||null,this.node.properties.ethernet_adapters=parseInt(this.ethernetAdapters(),10)||0,this.node.properties.serial_adapters=parseInt(this.serialAdapters(),10)||0,this.isApplying.set(!0),this.dialogRef.disableClose=!0,this.nodeService.updateNode(this.controller,this.node).subscribe({next:()=>{this.toasterService.success(`Node ${this.node.name} updated.`),this.onCancelClick()},error:s=>{let d=s?.error?.message||s?.message||"Failed to update node";this.toasterService.error(d),this.isApplying.set(!1),this.dialogRef.disableClose=!1,this.cd.markForCheck()}})}onCancelClick(){this.dialogRef.close()}addTag(e){let t=(e.value||"").trim();t&&this.node&&(this.node.tags||(this.node.tags=[]),this.node.tags.push(t)),e.chipInput&&e.chipInput.clear()}removeTag(e){if(!this.node.tags)return;let t=this.node.tags.indexOf(e);t>=0&&this.node.tags.splice(t,1)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-configurator-iou"]],inputs:{nodeName:[1,"nodeName"],consoleType:[1,"consoleType"],consoleAutoStart:[1,"consoleAutoStart"],l1Keepalives:[1,"l1Keepalives"],useDefaultIouValues:[1,"useDefaultIouValues"],ram:[1,"ram"],nvram:[1,"nvram"],ethernetAdapters:[1,"ethernetAdapters"],serialAdapters:[1,"serialAdapters"],usage:[1,"usage"],netmikoDeviceType:[1,"netmikoDeviceType"],defaultUsername:[1,"defaultUsername"],defaultPassword:[1,"defaultPassword"]},outputs:{nodeName:"nodeNameChange",consoleType:"consoleTypeChange",consoleAutoStart:"consoleAutoStartChange",l1Keepalives:"l1KeepalivesChange",useDefaultIouValues:"useDefaultIouValuesChange",ram:"ramChange",nvram:"nvramChange",ethernetAdapters:"ethernetAdaptersChange",serialAdapters:"serialAdaptersChange",usage:"usageChange",netmikoDeviceType:"netmikoDeviceTypeChange",defaultUsername:"defaultUsernameChange",defaultPassword:"defaultPasswordChange"},decls:18,vars:4,consts:[["chipList",""],["mat-dialog-title","",1,"node-config__header"],[1,"node-config__title"],["aria-hidden","true"],["mat-icon-button","","type","button","aria-label","Close node configuration",1,"node-config__close",3,"click"],[1,"modal-form-container"],[1,"configurator-dialog-loading"],[1,"content"],["mat-dialog-actions",""],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"],["diameter","20"],["diameter","40"],[1,"default-content"],[1,"matCard"],["mat-tab-label",""],[1,"node-config__section-heading"],[1,"form-container"],["appearance","outline","subscriptSizing","dynamic",1,"form-field"],["matInput","","type","text",3,"input","value"],[1,"gns3-chip-field"],["floatLabel","always","appearance","outline","subscriptSizing","dynamic",1,"form-field","tags-field"],["matInput","","placeholder","Add tags",3,"matChipInputTokenEnd","matChipInputFor","matChipInputSeparatorKeyCodes"],["aria-label","Tags",1,"gns3-chip-field__values"],[3,"editable"],[3,"valueChange","value"],[3,"value"],[1,"three-column-grid"],["subscriptSizing","fixed",1,"form-field",3,"valueChange","value","controller"],["appearance","outline","subscriptSizing","fixed",1,"form-field"],["matInput","","type","text",3,"input","value","placeholder"],[3,"change","checked"],[1,"two-column-grid","gns3-form-layout-fixed"],["matInput","",1,"node-config__usage-textarea",3,"input","value"],[1,"node-config__tab-label"],[3,"removed","editable"],["matChipRemove","","type","button"],["matSuffix",""]],template:function(t,i){t&1&&(r(0,"div",1)(1,"h1",2),c(2,"Configure Node "),r(3,"span",3),c(4,"\u2014"),l(),c(5),l(),r(6,"button",4),_("click",function(){return i.onCancelClick()}),r(7,"mat-icon"),c(8,"close"),l()()(),r(9,"div",5),T(10,b2e,2,0,"div",6)(11,E2e,4,1,"div",7),l(),r(12,"div",8)(13,"button",9),_("click",function(){return i.onCancelClick()}),c(14,"Cancel"),l(),r(15,"button",10),_("click",function(){return i.onSaveClick()}),T(16,O2e,1,0,"mat-spinner",11)(17,D2e,1,0),l()()),t&2&&(m(5),X(" IOS on UNIX ",i.name),m(5),E(i.isLoading()?10:11),m(5),v("disabled",i.isApplying()||i.isLoading()),m(),E(i.isApplying()?16:17))},dependencies:[fe,St,ke,qe,Qe,hn,Zn,bo,Ir,Xo,Yo,we,Pe,Ve,oi,ye,Ee,ot,ct,nt,Y,he,Be,ri,bi,xi,hi,fi,ie,ce,Rt,Gt,rt,mt,po],encapsulation:2,changeDetection:0})}return n})();var I2e=(n,o)=>o.address;function A2e(n,o){n&1&&(r(0,"div",6),L(1,"mat-spinner",11),l())}function N2e(n,o){if(n&1){let e=R();r(0,"mat-chip-row",28),_("removed",function(){let i=y(e).$implicit,a=h(3);return w(a.removeTag(i))}),c(1),r(2,"button",29)(3,"mat-icon"),c(4,"cancel"),l()()()}if(n&2){let e=o.$implicit;v("editable",!1),Ce("title",e),m(),X(" ",e," "),m(),Ce("aria-label","Remove tag "+e)}}function F2e(n,o){n&1&&(r(0,"th",37),c(1,"Interface"),l())}function R2e(n,o){n&1&&(r(0,"span",42),c(1),l()),n&2&&(m(),N(o))}function z2e(n,o){if(n&1&&(r(0,"div",39)(1,"span",40),L(2,"span",41),c(3),l(),T(4,R2e,2,1,"span",42),l()),n&2){let e,t=o,i=h().$implicit,a=h(4);m(),v("matTooltip",a.formatFlags(t.flags)||null),m(),ne("cloud-iface-status--up",t.status==="up")("cloud-iface-status--down",t.status!=="up"),m(),X(" ",i.name," "),m(),E((e=a.formatInterfaceMeta(t))?4:-1,e)}}function L2e(n,o){if(n&1&&c(0),n&2){let e=h().$implicit;X(" ",e.name," ")}}function V2e(n,o){if(n&1&&(r(0,"td",38),T(1,z2e,5,7,"div",39)(2,L2e,1,1),l()),n&2){let e,t=o.$implicit,i=h(4);m(),E((e=i.getHostInterface(t.interface||t.name))?1:2,e)}}function B2e(n,o){n&1&&(r(0,"th",37),c(1,"IP addresses"),l())}function j2e(n,o){if(n&1&&(r(0,"div",43),c(1),l()),n&2){let e=o.$implicit,t=h(5);m(),N(t.formatIpAddress(e))}}function $2e(n,o){n&1&&c(0," \u2014 ")}function H2e(n,o){if(n&1&&(r(0,"td",38),Q(1,j2e,2,1,"div",43,I2e,!1,$2e,1,0),l()),n&2){let e=o.$implicit,t=h(4);m(),K(t.getHostInterfaceIps(e.interface||e.name))}}function U2e(n,o){n&1&&L(0,"tr",44)}function W2e(n,o){n&1&&L(0,"tr",45)}function G2e(n,o){if(n&1&&(r(0,"div",27)(1,"table",30),Fe(2,31),se(3,F2e,2,0,"th",32)(4,V2e,3,1,"td",33),Re(),Fe(5,34),se(6,B2e,2,0,"th",32)(7,H2e,4,1,"td",33),Re(),se(8,U2e,1,0,"tr",35)(9,W2e,1,0,"tr",36),l()()),n&2){let e=h(3);m(),v("dataSource",e.portsMappingEthernet()),m(7),v("matHeaderRowDef",e.ethernetDisplayColumns),m(),v("matRowDefColumns",e.ethernetDisplayColumns)}}function q2e(n,o){if(n&1){let e=R();r(0,"h2",18),c(1,"General settings"),l(),r(2,"div",19)(3,"mat-form-field",20)(4,"mat-label"),c(5,"Name"),l(),r(6,"input",21),_("input",function(i){y(e);let a=h(2);return w(a.nodeName.set(i.target.value))}),l()(),r(7,"div",22)(8,"mat-form-field",23)(9,"mat-label"),c(10,"Tags"),l(),r(11,"input",24),_("matChipInputTokenEnd",function(i){y(e);let a=h(2);return w(a.addTag(i))}),l()(),r(12,"mat-chip-grid",25,0),Q(14,N2e,5,4,"mat-chip-row",26,Oe),l()(),T(16,G2e,10,3,"div",27),l()}if(n&2){let e=Te(13),t=h(2);m(6),v("value",t.nodeName()),m(5),v("matChipInputFor",e)("matChipInputSeparatorKeyCodes",t.separatorKeysCodes),m(),ne("gns3-chip-field__values--empty",((t.node==null||t.node.tags==null?null:t.node.tags.length)??0)===0),m(2),K(t.node==null?null:t.node.tags),m(2),E(t.portsMappingEthernet().length?16:-1)}}function Q2e(n,o){if(n&1&&(r(0,"div",12)(1,"div",13)(2,"span",14)(3,"mat-icon"),c(4,"tune"),l(),c(5,"General"),l()()(),r(6,"div",15)(7,"div",16)(8,"mat-card",17),T(9,q2e,17,6),l()()()),n&2){let e=h();m(9),E(e.name?9:-1)}}function K2e(n,o){n&1&&L(0,"mat-spinner",10)}function X2e(n,o){n&1&&c(0," Apply ")}var YM=(()=>{class n{dialogRef=f(We);nodeService=f(ft);toasterService=f(re);cd=f(oe);validationService=f(Hn);controller;node;name;separatorKeysCodes=[13,188];portsMappingEthernet=z([]);ethernetDisplayColumns=["name","ipAddresses"];isApplying=z(!1);isLoading=z(!0);nodeName=$("");formatIpAddresses=LM;formatIpAddress=uC;formatInterfaceMeta=VM;formatFlags=BM;ngOnInit(){this.nodeService.getNode(this.controller,this.node).subscribe({next:e=>{this.node=e,this.name=e.name,this.nodeName.set(e.name||""),this.node.tags||(this.node.tags=[]),this.portsMappingEthernet.set(this.node.properties.ports_mapping.filter(t=>t.type==="ethernet")),this.isLoading.set(!1),this.dialogRef.disableClose=!1,this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load node";this.toasterService.error(t),this.isLoading.set(!1),this.dialogRef.disableClose=!1,this.cd.markForCheck()}})}getHostInterface(e){return this.node?.properties?.interfaces?.find(t=>t.name===e)}getHostInterfaceIps(e){return this.getHostInterface(e)?.ip_addresses??[]}onSaveClick(){if(this.isApplying())return;let e=this.validationService.required(this.nodeName(),"Name");if(!e.isValid){this.toasterService.error(e.errorMessage||"Name is required");return}this.node.name=this.nodeName(),this.node.properties.ports_mapping=this.portsMappingEthernet(),this.isApplying.set(!0),this.dialogRef.disableClose=!0,this.nodeService.updateNode(this.controller,this.node).subscribe({next:()=>{this.toasterService.success(`Node ${this.node.name} updated.`),this.onCancelClick()},error:t=>{let i=t?.error?.message||t?.message||"Failed to update node";this.toasterService.error(i),this.isApplying.set(!1),this.dialogRef.disableClose=!1,this.cd.markForCheck()}})}onCancelClick(){this.dialogRef.close()}addTag(e){let t=(e.value||"").trim();t&&this.node&&(this.node.tags||(this.node.tags=[]),this.node.tags.push(t)),e.chipInput&&e.chipInput.clear()}removeTag(e){if(!this.node.tags)return;let t=this.node.tags.indexOf(e);t>=0&&this.node.tags.splice(t,1)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-configurator-nat"]],inputs:{nodeName:[1,"nodeName"]},outputs:{nodeName:"nodeNameChange"},decls:18,vars:4,consts:[["chipList",""],["mat-dialog-title","",1,"node-config__header"],[1,"node-config__title"],["aria-hidden","true"],["mat-icon-button","","type","button","aria-label","Close node configuration",1,"node-config__close",3,"click"],[1,"modal-form-container"],[1,"configurator-dialog-loading"],["mat-dialog-actions",""],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"],["diameter","20"],["diameter","40"],["role","tablist","aria-label","Node configuration sections",1,"node-config__single-tab"],["role","tab","aria-selected","true"],[1,"node-config__tab-label"],[1,"content"],[1,"default-content"],[1,"matCard"],[1,"node-config__section-heading"],[1,"form-container"],["appearance","outline","subscriptSizing","dynamic",1,"form-field"],["matInput","","type","text",3,"input","value"],[1,"gns3-chip-field"],["floatLabel","always","appearance","outline","subscriptSizing","dynamic",1,"form-field","tags-field"],["matInput","","placeholder","Add tags",3,"matChipInputTokenEnd","matChipInputFor","matChipInputSeparatorKeyCodes"],["aria-label","Tags",1,"gns3-chip-field__values"],[3,"editable"],[1,"interfaces-list"],[3,"removed","editable"],["matChipRemove","","type","button"],["mat-table","",1,"interfaces-table",3,"dataSource"],["matColumnDef","name"],["mat-header-cell","",4,"matHeaderCellDef"],["mat-cell","",4,"matCellDef"],["matColumnDef","ipAddresses"],["mat-header-row","",4,"matHeaderRowDef"],["mat-row","",4,"matRowDef","matRowDefColumns"],["mat-header-cell",""],["mat-cell",""],[1,"cloud-iface-cell"],[3,"matTooltip"],[1,"cloud-iface-status"],[1,"cloud-iface-meta"],[1,"cloud-ip-line"],["mat-header-row",""],["mat-row",""]],template:function(t,i){t&1&&(r(0,"div",1)(1,"h1",2),c(2,"Configure Node "),r(3,"span",3),c(4,"\u2014"),l(),c(5),l(),r(6,"button",4),_("click",function(){return i.onCancelClick()}),r(7,"mat-icon"),c(8,"close"),l()()(),r(9,"div",5),T(10,A2e,2,0,"div",6)(11,Q2e,10,1),l(),r(12,"div",7)(13,"button",8),_("click",function(){return i.onCancelClick()}),c(14,"Cancel"),l(),r(15,"button",9),_("click",function(){return i.onSaveClick()}),T(16,K2e,1,0,"mat-spinner",10)(17,X2e,1,0),l()()),t&2&&(m(5),X(" NAT ",i.name),m(5),E(i.isLoading()?10:11),m(5),v("disabled",i.isApplying()||i.isLoading()),m(),E(i.isApplying()?16:17))},dependencies:[fe,St,ke,qe,Qe,hn,Zn,we,Pe,Ve,ye,Ee,Y,he,Be,ri,bi,xi,hi,fi,ie,ce,_n,bn,yn,kn,wn,xn,Pn,Mn,Sn,Tn,En,st,pt,rt,mt],encapsulation:2,changeDetection:0})}return n})();function Y2e(n,o){if(n&1&&(r(0,"mat-option",10),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e.toUpperCase())}}function Z2e(n,o){if(n&1&&(r(0,"mat-option",10),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function J2e(n,o){if(n&1&&(r(0,"mat-option",10),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function eke(n,o){if(n&1&&(r(0,"mat-option",10),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function tke(n,o){if(n&1&&(r(0,"mat-option",10),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function nke(n,o){if(n&1){let e=R();r(0,"mat-form-field",8)(1,"mat-label"),c(2,"Cluster size (KB)"),l(),r(3,"mat-select",9),_("valueChange",function(i){y(e);let a=h();return w(a.clusterSize.set(i))}),r(4,"mat-option",19),c(5,"Default (64)"),l(),Q(6,eke,2,2,"mat-option",10,Oe),l()(),r(8,"mat-form-field",8)(9,"mat-label"),c(10,"Refcount bits"),l(),r(11,"mat-select",9),_("valueChange",function(i){y(e);let a=h();return w(a.refcountBits.set(i))}),r(12,"mat-option",19),c(13,"Default (12)"),l(),Q(14,tke,2,2,"mat-option",10,Oe),l()()}if(n&2){let e=h();m(3),v("value",e.clusterSize()),m(3),K(e.clusterSizeOptions),m(5),v("value",e.refcountBits()),m(3),K(e.refcountBitsOptions)}}function ike(n,o){if(n&1&&(r(0,"mat-option",10),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function oke(n,o){if(n&1&&(r(0,"mat-option",10),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function ake(n,o){if(n&1){let e=R();r(0,"mat-form-field",8)(1,"mat-label"),c(2,"Subformat"),l(),r(3,"mat-select",9),_("valueChange",function(i){y(e);let a=h();return w(a.subformat.set(i))}),r(4,"mat-option",19),c(5,"Default"),l(),Q(6,ike,2,2,"mat-option",10,Oe),l()(),r(8,"mat-form-field",8)(9,"mat-label"),c(10,"Adapter type"),l(),r(11,"mat-select",9),_("valueChange",function(i){y(e);let a=h();return w(a.adapterType.set(i))}),r(12,"mat-option",19),c(13,"Default"),l(),Q(14,oke,2,2,"mat-option",10,Oe),l()(),r(16,"mat-form-field",8)(17,"mat-label"),c(18,"Zeroed grain"),l(),r(19,"mat-select",9),_("valueChange",function(i){y(e);let a=h();return w(a.zeroedGrain.set(i))}),r(20,"mat-option",19),c(21,"Default"),l(),r(22,"mat-option",13),c(23,"on"),l(),r(24,"mat-option",14),c(25,"off"),l()()()}if(n&2){let e=h();m(3),v("value",e.subformat()),m(3),K(e.vmdkSubformatOptions),m(5),v("value",e.adapterType()),m(3),K(e.adapterTypeOptions),m(5),v("value",e.zeroedGrain())}}function rke(n,o){if(n&1&&(r(0,"mat-option",10),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function ske(n,o){if(n&1){let e=R();r(0,"mat-form-field",8)(1,"mat-label"),c(2,"Subformat"),l(),r(3,"mat-select",9),_("valueChange",function(i){y(e);let a=h();return w(a.subformat.set(i))}),r(4,"mat-option",19),c(5,"Default"),l(),Q(6,rke,2,2,"mat-option",10,Oe),l()(),r(8,"mat-form-field",8)(9,"mat-label"),c(10,"Static"),l(),r(11,"mat-select",9),_("valueChange",function(i){y(e);let a=h();return w(a.static.set(i))}),r(12,"mat-option",19),c(13,"Default"),l(),r(14,"mat-option",13),c(15,"on"),l(),r(16,"mat-option",14),c(17,"off"),l()()()}if(n&2){let e=h();m(3),v("value",e.subformat()),m(3),K(e.vhdSubformatOptions),m(5),v("value",e.static())}}function lke(n,o){if(n&1){let e=R();r(0,"mat-form-field",8)(1,"mat-label"),c(2,"Static"),l(),r(3,"mat-select",9),_("valueChange",function(i){y(e);let a=h();return w(a.static.set(i))}),r(4,"mat-option",19),c(5,"Default"),l(),r(6,"mat-option",13),c(7,"on"),l(),r(8,"mat-option",14),c(9,"off"),l()()()}if(n&2){let e=h();m(3),v("value",e.static())}}function cke(n,o){n&1&&L(0,"mat-spinner",18)}function dke(n,o){n&1&&c(0," Apply ")}var ZM=(()=>{class n{controller;nodeId;projectId;formatOptions=["qcow2","qcow","vhd","vdi","vmdk","raw"];preallocationsOptions=["off","metadata","falloc","full"];dialogRef=f(We);nodeService=f(ft);toasterService=f(re);qemuService=f(Rl);validationService=f(Hn);diskName=$("");mountPoint=$("");format=$("");size=$("");preallocation=$("");lazyRefcounts=$("");clusterSize=$("");refcountBits=$("");subformat=$("");static=$("");adapterType=$("");zeroedGrain=$("");isApplying=z(!1);mountPointOptions=["hda","hdb","hdc","hdd"];clusterSizeOptions=[16,32,64,128,256];refcountBitsOptions=[1,2,4,8,12,16];vmdkSubformatOptions=["monolithicSparse","monolithicFlat","twoGbMaxExtentSparse","twoGbMaxExtentFlat","streamOptimized","vmfs","vmfsThin","vmfsDefault"];vhdSubformatOptions=["dynamic","fixed"];adapterTypeOptions=["ide","lsilogic","buslogic","legacyESX"];onSaveClick(){if(this.isApplying())return;let e=this.validationService.required(this.mountPoint(),"Mount point");if(!e.isValid){this.toasterService.error(e.errorMessage);return}let t=this.validationService.required(this.diskName(),"Filename");if(!t.isValid){this.toasterService.error(t.errorMessage);return}let i="."+this.format();if(!this.diskName().toLowerCase().endsWith(i)){this.toasterService.error(`Filename must end with ${i} extension for ${this.format()} format`);return}let a=this.validationService.required(this.format(),"Format");if(!a.isValid){this.toasterService.error(a.errorMessage);return}let s=this.validationService.required(this.size(),"Size");if(!s.isValid){this.toasterService.error(s.errorMessage);return}let d=parseInt(this.size(),10);if(isNaN(d)||d<1){this.toasterService.error("Size must be a positive integer (at least 1 MB)");return}let p={format:this.format(),size:d};this.preallocation()&&(p.preallocation=this.preallocation()),this.lazyRefcounts()&&(p.lazy_refcounts=this.lazyRefcounts()),this.clusterSize()&&(p.cluster_size=parseInt(this.clusterSize(),10)),this.refcountBits()&&(p.refcount_bits=parseInt(this.refcountBits(),10)),this.subformat()&&(p.subformat=this.subformat()),this.static()&&(p.static=this.static()),this.adapterType()&&(p.adapter_type=this.adapterType()),this.zeroedGrain()&&(p.zeroed_grain=this.zeroedGrain()),this.isApplying.set(!0),this.dialogRef.disableClose=!0,this.qemuService.createDiskImage(this.controller,this.projectId,this.nodeId,this.diskName(),p).subscribe({next:()=>{this.toasterService.success(`Disk image "${this.diskName()}" created.`),this.dialogRef.close({mountPoint:this.mountPoint(),filename:this.diskName()})},error:u=>{let g=u.error?.detail||u.message||"Failed to create image";this.toasterService.error(g),this.isApplying.set(!1),this.dialogRef.disableClose=!1}})}onCancelClick(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-qemu-image-creator"]],inputs:{diskName:[1,"diskName"],mountPoint:[1,"mountPoint"],format:[1,"format"],size:[1,"size"],preallocation:[1,"preallocation"],lazyRefcounts:[1,"lazyRefcounts"],clusterSize:[1,"clusterSize"],refcountBits:[1,"refcountBits"],subformat:[1,"subformat"],static:[1,"static"],adapterType:[1,"adapterType"],zeroedGrain:[1,"zeroedGrain"]},outputs:{diskName:"diskNameChange",mountPoint:"mountPointChange",format:"formatChange",size:"sizeChange",preallocation:"preallocationChange",lazyRefcounts:"lazyRefcountsChange",clusterSize:"clusterSizeChange",refcountBits:"refcountBitsChange",subformat:"subformatChange",static:"staticChange",adapterType:"adapterTypeChange",zeroedGrain:"zeroedGrainChange"},decls:54,vars:12,consts:[["mat-dialog-title",""],[1,"modal-form-container"],[1,"content"],[1,"default-content"],[1,"info-note"],[1,"matCard"],[1,"form-container","gns3-form-grid-container"],[1,"gns3-form-grid"],["appearance","outline","subscriptSizing","dynamic",1,"form-field"],[3,"valueChange","value"],[3,"value"],["matInput","","type","text","placeholder","e.g. data.qcow2",3,"input","value"],["matInput","","type","text",3,"input","value"],["value","on"],["value","off"],["mat-dialog-actions",""],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"],["diameter","20"],["value",""]],template:function(t,i){t&1&&(r(0,"h1",0),c(1,"Create QEMU Disk Image"),l(),r(2,"div",1)(3,"div",2)(4,"div",3)(5,"p",4),c(6," The image will be created in the node's working directory. After creation, it will appear in the HDD field and can be selected from the dropdown in the HDD tab. "),l(),r(7,"mat-card",5)(8,"div",6)(9,"div",7)(10,"mat-form-field",8)(11,"mat-label"),c(12,"Mount point *"),l(),r(13,"mat-select",9),_("valueChange",function(s){return i.mountPoint.set(s)}),Q(14,Y2e,2,2,"mat-option",10,Oe),l()(),r(16,"mat-form-field",8)(17,"mat-label"),c(18,"Filename *"),l(),r(19,"input",11),_("input",function(s){return i.diskName.set(s.target.value)}),l()()(),r(20,"mat-form-field",8)(21,"mat-label"),c(22,"Format *"),l(),r(23,"mat-select",9),_("valueChange",function(s){return i.format.set(s)}),Q(24,Z2e,2,2,"mat-option",10,Oe),l()(),r(26,"mat-form-field",8)(27,"mat-label"),c(28,"Size (MB) *"),l(),r(29,"input",12),_("input",function(s){return i.size.set(s.target.value)}),l()(),r(30,"mat-form-field",8)(31,"mat-label"),c(32,"Preallocation"),l(),r(33,"mat-select",9),_("valueChange",function(s){return i.preallocation.set(s)}),Q(34,J2e,2,2,"mat-option",10,Oe),l()(),r(36,"mat-form-field",8)(37,"mat-label"),c(38,"Lazy refcounts"),l(),r(39,"mat-select",9),_("valueChange",function(s){return i.lazyRefcounts.set(s)}),r(40,"mat-option",13),c(41,"on"),l(),r(42,"mat-option",14),c(43,"off"),l()()(),T(44,nke,16,2),T(45,ake,26,3),T(46,ske,18,2),T(47,lke,10,1,"mat-form-field",8),l()()()()(),r(48,"div",15)(49,"button",16),_("click",function(){return i.onCancelClick()}),c(50,"Cancel"),l(),r(51,"button",17),_("click",function(){return i.onSaveClick()}),T(52,cke,1,0,"mat-spinner",18)(53,dke,1,0),l()()),t&2&&(m(13),v("value",i.mountPoint()),m(),K(i.mountPointOptions),m(5),v("value",i.diskName()),m(4),v("value",i.format()),m(),K(i.formatOptions),m(5),v("value",i.size()),m(4),v("value",i.preallocation()),m(),K(i.preallocationsOptions),m(5),v("value",i.lazyRefcounts()),m(5),E(i.format()==="qcow2"?44:-1),m(),E(i.format()==="vmdk"?45:-1),m(),E(i.format()==="vhd"||i.format()==="vpc"?46:-1),m(),E(i.format()==="vdi"?47:-1),m(4),v("disabled",i.isApplying()),m(),E(i.isApplying()?52:53))},dependencies:[fe,St,ke,qe,Qe,Y,he,we,Pe,Ve,ye,Ee,ot,ct,nt,Ho,hn,Zn,rt,mt],styles:["table[_ngcontent-%COMP%], .form-field[_ngcontent-%COMP%], .configButton[_ngcontent-%COMP%]{width:100%}.modal-form-container[_ngcontent-%COMP%]{padding:16px}.file-button[_ngcontent-%COMP%]{width:18%}.create-button[_ngcontent-%COMP%]{width:100%}.file-name-form-field[_ngcontent-%COMP%]{padding-left:2%;width:80%}.nonvisible[_ngcontent-%COMP%]{display:none}mat-radio-button[_ngcontent-%COMP%]{margin-right:8px}.tags-field[_ngcontent-%COMP%]{width:100%}","[_nghost-%COMP%]{display:block}.form-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:20px}.gns3-form-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}.form-field[_ngcontent-%COMP%]{min-width:0}@media(max-width:600px){.gns3-form-grid[_ngcontent-%COMP%]{grid-template-columns:minmax(0,1fr)}}"],changeDetection:0})}return n})();var mke=(n,o)=>[n,o],lj=(n,o)=>o[1],JM=(n,o)=>o.filename,pke=(n,o)=>o.value;function uke(n,o){n&1&&(r(0,"div",26),L(1,"mat-spinner",32),l())}function gke(n,o){n&1&&(r(0,"span",78)(1,"mat-icon"),c(2,"tune"),l(),c(3,"General"),l())}function hke(n,o){if(n&1){let e=R();r(0,"mat-chip-row",79),_("removed",function(){let i=y(e).$implicit,a=h(3);return w(a.removeTag(i))}),c(1),r(2,"button",80)(3,"mat-icon"),c(4,"cancel"),l()()()}if(n&2){let e=o.$implicit;v("editable",!1),Ce("title",e),m(),X(" ",e," "),m(),Ce("aria-label","Remove tag "+e)}}function _ke(n,o){if(n&1&&(r(0,"mat-option",48),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function fke(n,o){if(n&1&&(r(0,"mat-option",48),c(1),l()),n&2){let e=o.$implicit;v("value",e[1]),m(),X(" ",e[0]," ")}}function vke(n,o){if(n&1&&(r(0,"mat-option",48),c(1),l()),n&2){let e=o.$implicit;v("value",e[1]),m(),X(" ",e[0]," ")}}function Cke(n,o){if(n&1&&(r(0,"mat-option",48),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function bke(n,o){if(n&1&&(r(0,"mat-option",48),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function xke(n,o){n&1&&(r(0,"span",78)(1,"mat-icon"),c(2,"storage"),l(),c(3,"HDD"),l())}function yke(n,o){if(n&1&&(r(0,"mat-option",48),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function wke(n,o){if(n&1&&(r(0,"mat-optgroup",66),Q(1,yke,2,2,"mat-option",48,Oe),l()),n&2){let e=h(3);m(),K(e.projectDiskFiles)}}function Mke(n,o){if(n&1&&(r(0,"mat-option",48),c(1),l()),n&2){let e=o.$implicit;v("value",e.filename),m(),N(e.filename)}}function Ske(n,o){if(n&1&&(r(0,"mat-option",48),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function kke(n,o){if(n&1&&(r(0,"mat-option",48),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function Pke(n,o){if(n&1&&(r(0,"mat-optgroup",66),Q(1,kke,2,2,"mat-option",48,Oe),l()),n&2){let e=h(3);m(),K(e.projectDiskFiles)}}function Tke(n,o){if(n&1&&(r(0,"mat-option",48),c(1),l()),n&2){let e=o.$implicit;v("value",e.filename),m(),N(e.filename)}}function Eke(n,o){if(n&1&&(r(0,"mat-option",48),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function Oke(n,o){if(n&1&&(r(0,"mat-option",48),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function Dke(n,o){if(n&1&&(r(0,"mat-optgroup",66),Q(1,Oke,2,2,"mat-option",48,Oe),l()),n&2){let e=h(3);m(),K(e.projectDiskFiles)}}function Ike(n,o){if(n&1&&(r(0,"mat-option",48),c(1),l()),n&2){let e=o.$implicit;v("value",e.filename),m(),N(e.filename)}}function Ake(n,o){if(n&1&&(r(0,"mat-option",48),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function Nke(n,o){if(n&1&&(r(0,"mat-option",48),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function Fke(n,o){if(n&1&&(r(0,"mat-optgroup",66),Q(1,Nke,2,2,"mat-option",48,Oe),l()),n&2){let e=h(3);m(),K(e.projectDiskFiles)}}function Rke(n,o){if(n&1&&(r(0,"mat-option",48),c(1),l()),n&2){let e=o.$implicit;v("value",e.filename),m(),N(e.filename)}}function zke(n,o){if(n&1&&(r(0,"mat-option",48),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function Lke(n,o){n&1&&(r(0,"span",78)(1,"mat-icon"),c(2,"album"),l(),c(3,"CD/DVD"),l())}function Vke(n,o){if(n&1&&(r(0,"mat-option",48),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function Bke(n,o){if(n&1&&(r(0,"mat-optgroup",66),Q(1,Vke,2,2,"mat-option",48,Oe),l()),n&2){let e=h(4);m(),K(e.filteredIsoFiles)}}function jke(n,o){if(n&1&&(r(0,"mat-option",48),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function $ke(n,o){if(n&1&&(r(0,"mat-optgroup",67),Q(1,jke,2,2,"mat-option",48,Oe),l()),n&2){let e=h(4);m(),K(e.filteredGlobalIsoImages)}}function Hke(n,o){if(n&1){let e=R();r(0,"div",59)(1,"div",60)(2,"h3",61),c(3),l()(),r(4,"div",63)(5,"div",81)(6,"button",71),_("click",function(){y(e);let i=Te(11);return w(i.click())}),c(7,"Upload to device"),l(),r(8,"button",74),_("click",function(){y(e);let i=Te(13);return w(i.click())}),c(9,"Upload globally"),l(),r(10,"input",82,17),_("change",function(i){let a=y(e).$index,s=h(3);return w(s.uploadCdromImageFile(i,"device",a+1))}),l(),r(12,"input",82,18),_("change",function(i){let a=y(e).$index,s=h(3);return w(s.uploadCdromImageFile(i,"global",a+1))}),l()(),r(14,"mat-form-field",38)(15,"mat-label"),c(16,"Image"),l(),r(17,"input",64,19),_("input",function(i){let a=y(e).$implicit,s=h(3);return a.set(i.target.value),w(s.onCdromInput(i))})("focus",function(){y(e);let i=Te(18),a=h(3);return a.filteredIsoFiles=a.projectIsoFiles,a.filteredGlobalIsoImages=a.globalIsoImages,i.openPanel(),a.refreshNodeFiles(),w(a.refreshGlobalImages())}),l(),r(19,"mat-autocomplete",65,20),_("optionSelected",function(i){let a=y(e).$implicit;return w(a.set(i.option.value))}),T(21,Bke,3,0,"mat-optgroup",66),T(22,$ke,3,0,"mat-optgroup",67),l()(),r(23,"mat-form-field",38)(24,"mat-label"),c(25,"Interface"),l(),r(26,"mat-select",83),_("valueChange",function(i){let a=y(e).$index,s=h(3);return w(s.cdromInterfaces[a].set(i))}),r(27,"mat-option",84),c(28,"ide"),l(),r(29,"mat-option",85),c(30,"sata"),l()(),r(31,"mat-hint"),c(32,"Interface changes require a stopped node."),l()()()()}if(n&2){let e=o.$implicit,t=o.$index,i=Te(20),a=h(3);m(3),X("CD/DVD ",t+1),m(14),v("value",e())("matAutocomplete",i),m(4),E(a.filteredIsoFiles.length?21:-1),m(),E(a.filteredGlobalIsoImages.length?22:-1),m(4),v("value",a.cdromInterfaces[t]())("disabled",a.node.status!=="stopped"||a.isApplying())}}function Uke(n,o){n&1&&(r(0,"span",78)(1,"mat-icon"),c(2,"lan"),l(),c(3,"Network"),l())}function Wke(n,o){if(n&1&&(r(0,"mat-option",48),c(1),l()),n&2){let e=o.$implicit;v("value",e.value),m(),Un(" ",e.name," (",e.value,") ")}}function Gke(n,o){n&1&&(r(0,"span",78)(1,"mat-icon"),c(2,"settings"),l(),c(3,"Advanced"),l())}function qke(n,o){if(n&1&&(r(0,"mat-option",48),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function Qke(n,o){if(n&1&&(r(0,"mat-optgroup",66),Q(1,qke,2,2,"mat-option",48,Oe),l()),n&2){let e=h(3);m(),K(e.filteredNodeFiles)}}function Kke(n,o){if(n&1&&(r(0,"mat-option",48),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function Xke(n,o){if(n&1&&(r(0,"mat-optgroup",67),Q(1,Kke,2,2,"mat-option",48,Oe),l()),n&2){let e=h(3);m(),K(e.filteredGlobalFiles)}}function Yke(n,o){if(n&1&&(r(0,"mat-option",48),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function Zke(n,o){if(n&1&&(r(0,"mat-optgroup",66),Q(1,Yke,2,2,"mat-option",48,Oe),l()),n&2){let e=h(3);m(),K(e.filteredNodeFiles)}}function Jke(n,o){if(n&1&&(r(0,"mat-option",48),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function ePe(n,o){if(n&1&&(r(0,"mat-optgroup",67),Q(1,Jke,2,2,"mat-option",48,Oe),l()),n&2){let e=h(3);m(),K(e.filteredGlobalFiles)}}function tPe(n,o){if(n&1&&(r(0,"mat-option",48),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function nPe(n,o){if(n&1&&(r(0,"mat-optgroup",66),Q(1,tPe,2,2,"mat-option",48,Oe),l()),n&2){let e=h(3);m(),K(e.filteredNodeFiles)}}function iPe(n,o){if(n&1&&(r(0,"mat-option",48),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function oPe(n,o){if(n&1&&(r(0,"mat-optgroup",67),Q(1,iPe,2,2,"mat-option",48,Oe),l()),n&2){let e=h(3);m(),K(e.filteredGlobalFiles)}}function aPe(n,o){if(n&1){let e=R();r(0,"mat-form-field",38)(1,"mat-label"),c(2,"Percentage of CPU allowed"),l(),r(3,"input",39),_("input",function(i){y(e);let a=h(3);return w(a.cpuThrottling.set(i.target.value))}),l()()}if(n&2){let e=h(3);m(3),v("value",e.cpuThrottling())}}function rPe(n,o){if(n&1&&(r(0,"mat-option",48),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function sPe(n,o){n&1&&(r(0,"span",78)(1,"mat-icon"),c(2,"bar_chart"),l(),c(3,"Usage"),l())}function lPe(n,o){if(n&1){let e=R();r(0,"div")(1,"mat-tab-group",35)(2,"mat-tab"),se(3,gke,4,0,"ng-template",36),r(4,"h2",37),c(5,"General settings"),l(),r(6,"mat-form-field",38)(7,"mat-label"),c(8,"Name"),l(),r(9,"input",39),_("input",function(i){y(e);let a=h(2);return w(a.nodeName.set(i.target.value))}),l()(),r(10,"div",40)(11,"mat-form-field",41)(12,"mat-label"),c(13,"Tags"),l(),r(14,"input",42),_("matChipInputTokenEnd",function(i){y(e);let a=h(2);return w(a.addTag(i))}),l()(),r(15,"mat-chip-grid",43,0),Q(17,hke,5,4,"mat-chip-row",44,Oe),l()(),r(19,"div",45)(20,"mat-form-field",46)(21,"mat-label"),c(22,"Platform"),l(),r(23,"mat-select",47),_("valueChange",function(i){y(e);let a=h(2);return w(a.platform.set(i))}),Q(24,_ke,2,2,"mat-option",48,Oe),l()(),r(26,"mat-form-field",46)(27,"mat-label"),c(28,"RAM"),l(),r(29,"input",39),_("input",function(i){y(e);let a=h(2);return w(a.ram.set(i.target.value))}),l(),r(30,"span",49),c(31,"MB"),l()(),r(32,"mat-form-field",46)(33,"mat-label"),c(34,"vCPUs"),l(),r(35,"input",50),_("input",function(i){y(e);let a=h(2);return w(a.cpus.set(i.target.value))}),l()(),r(36,"mat-form-field",46)(37,"mat-label"),c(38,"Boot priority"),l(),r(39,"mat-select",47),_("valueChange",function(i){y(e);let a=h(2);return w(a.bootPriority.set(i))}),Q(40,fke,2,2,"mat-option",48,lj),l()()(),r(42,"mat-form-field",38)(43,"mat-label"),c(44,"On close"),l(),r(45,"mat-select",47),_("valueChange",function(i){y(e);let a=h(2);return w(a.onClose.set(i))}),Q(46,vke,2,2,"mat-option",48,lj),l()(),r(48,"div",51)(49,"mat-form-field",46)(50,"mat-label"),c(51,"Console type"),l(),r(52,"mat-select",47),_("valueChange",function(i){y(e);let a=h(2);return w(a.consoleType.set(i))}),Q(53,Cke,2,2,"mat-option",48,Oe),l()(),r(55,"mat-form-field",46)(56,"mat-label"),c(57,"Auxiliary console type"),l(),r(58,"mat-select",47),_("valueChange",function(i){y(e);let a=h(2);return w(a.auxType.set(i))}),Q(59,bke,2,2,"mat-option",48,Oe),l()()(),r(61,"div",52)(62,"app-netmiko-device-type-select",53),rn("valueChange",function(i){y(e);let a=h(2);return Xt(a.netmikoDeviceType,i)||(a.netmikoDeviceType=i),w(i)}),l(),r(63,"mat-form-field",46)(64,"mat-label"),c(65,"Default username"),l(),r(66,"input",54),_("input",function(i){y(e);let a=h(2);return w(a.defaultUsername.set(i.target.value))}),l()(),r(67,"mat-form-field",46)(68,"mat-label"),c(69,"Default password"),l(),r(70,"input",54),_("input",function(i){y(e);let a=h(2);return w(a.defaultPassword.set(i.target.value))}),l()()(),r(71,"mat-checkbox",55),_("change",function(i){y(e);let a=h(2);return w(a.consoleAutoStart.set(i.checked))}),c(72," Auto start console "),l()(),r(73,"mat-tab"),se(74,xke,4,0,"ng-template",36),r(75,"h2",37),c(76,"Hard disk drives"),l(),r(77,"div",56)(78,"button",57),_("click",function(){y(e);let i=h(2);return w(i.openQemuImageCreator())}),c(79," Create Qemu image "),l()(),r(80,"div",58)(81,"div",59)(82,"div",60)(83,"h3",61),c(84,"HDA"),l(),r(85,"span",62),c(86,"Primary Master"),l()(),r(87,"div",63)(88,"mat-form-field",38)(89,"mat-label"),c(90,"Disk image"),l(),r(91,"input",64),_("input",function(i){y(e);let a=h(2);return w(a.hdaDiskImage.set(i.target.value))})("input",function(i){y(e);let a=h(2);return w(a.onHdaImageInput(i))})("focus",function(){y(e);let i=h(2);return i.filteredImages=i.qemuImages,w(i.refreshQemuImages())}),l(),r(92,"mat-autocomplete",65,1),_("optionSelected",function(i){y(e);let a=h(2);return w(a.hdaDiskImage.set(i.option.value))}),T(94,wke,3,0,"mat-optgroup",66),r(95,"mat-optgroup",67),Q(96,Mke,2,2,"mat-option",48,JM),l()()(),r(98,"mat-form-field",38)(99,"mat-label"),c(100,"Disk interface"),l(),r(101,"mat-select",47),_("valueChange",function(i){y(e);let a=h(2);return w(a.hdaDiskInterface.set(i))}),Q(102,Ske,2,2,"mat-option",48,Oe),l()()()(),r(104,"div",59)(105,"div",60)(106,"h3",61),c(107,"HDB"),l(),r(108,"span",62),c(109,"Primary Slave"),l()(),r(110,"div",63)(111,"mat-form-field",38)(112,"mat-label"),c(113,"Disk image"),l(),r(114,"input",64),_("input",function(i){y(e);let a=h(2);return w(a.hdbDiskImage.set(i.target.value))})("input",function(i){y(e);let a=h(2);return w(a.onHdbImageInput(i))})("focus",function(){y(e);let i=h(2);return i.filteredImages=i.qemuImages,w(i.refreshQemuImages())}),l(),r(115,"mat-autocomplete",65,2),_("optionSelected",function(i){y(e);let a=h(2);return w(a.hdbDiskImage.set(i.option.value))}),T(117,Pke,3,0,"mat-optgroup",66),r(118,"mat-optgroup",67),Q(119,Tke,2,2,"mat-option",48,JM),l()()(),r(121,"mat-form-field",38)(122,"mat-label"),c(123,"Disk interface"),l(),r(124,"mat-select",47),_("valueChange",function(i){y(e);let a=h(2);return w(a.hdbDiskInterface.set(i))}),Q(125,Eke,2,2,"mat-option",48,Oe),l()()()(),r(127,"div",59)(128,"div",60)(129,"h3",61),c(130,"HDC"),l(),r(131,"span",62),c(132,"Secondary Master"),l()(),r(133,"div",63)(134,"mat-form-field",38)(135,"mat-label"),c(136,"Disk image"),l(),r(137,"input",64),_("input",function(i){y(e);let a=h(2);return w(a.hdcDiskImage.set(i.target.value))})("input",function(i){y(e);let a=h(2);return w(a.onHdcImageInput(i))})("focus",function(){y(e);let i=h(2);return i.filteredImages=i.qemuImages,w(i.refreshQemuImages())}),l(),r(138,"mat-autocomplete",65,3),_("optionSelected",function(i){y(e);let a=h(2);return w(a.hdcDiskImage.set(i.option.value))}),T(140,Dke,3,0,"mat-optgroup",66),r(141,"mat-optgroup",67),Q(142,Ike,2,2,"mat-option",48,JM),l()()(),r(144,"mat-form-field",38)(145,"mat-label"),c(146,"Disk interface"),l(),r(147,"mat-select",47),_("valueChange",function(i){y(e);let a=h(2);return w(a.hdcDiskInterface.set(i))}),Q(148,Ake,2,2,"mat-option",48,Oe),l()()()(),r(150,"div",59)(151,"div",60)(152,"h3",61),c(153,"HDD"),l(),r(154,"span",62),c(155,"Secondary Slave"),l()(),r(156,"div",63)(157,"mat-form-field",38)(158,"mat-label"),c(159,"Disk image"),l(),r(160,"input",64),_("input",function(i){y(e);let a=h(2);return w(a.hddDiskImage.set(i.target.value))})("input",function(i){y(e);let a=h(2);return w(a.onHddImageInput(i))})("focus",function(){y(e);let i=h(2);return i.filteredImages=i.qemuImages,w(i.refreshQemuImages())}),l(),r(161,"mat-autocomplete",65,4),_("optionSelected",function(i){y(e);let a=h(2);return w(a.hddDiskImage.set(i.option.value))}),T(163,Fke,3,0,"mat-optgroup",66),r(164,"mat-optgroup",67),Q(165,Rke,2,2,"mat-option",48,JM),l()()(),r(167,"mat-form-field",38)(168,"mat-label"),c(169,"Disk interface"),l(),r(170,"mat-select",47),_("valueChange",function(i){y(e);let a=h(2);return w(a.hddDiskInterface.set(i))}),Q(171,zke,2,2,"mat-option",48,Oe),l()()()()()(),r(173,"mat-tab"),se(174,Lke,4,0,"ng-template",36),r(175,"h2",37),c(176,"CD-ROM drives"),l(),r(177,"div",58),Q(178,Hke,33,7,"div",59,ni),l()(),r(180,"mat-tab"),se(181,Uke,4,0,"ng-template",36),r(182,"h2",37),c(183,"Network settings"),l(),r(184,"div",68)(185,"mat-form-field",38)(186,"mat-label"),c(187,"Number of adapters"),l(),r(188,"input",69),_("input",function(i){y(e);let a=h(2);return w(a.adapters.set(i.target.value))}),l()(),r(189,"mat-form-field",38)(190,"mat-label"),c(191,"Base MAC"),l(),r(192,"input",39),_("input",function(i){y(e);let a=h(2);return w(a.macAddress.set(i.target.value))}),l()(),r(193,"mat-form-field",38)(194,"mat-label"),c(195,"Type"),l(),r(196,"mat-select",47),_("valueChange",function(i){y(e);let a=h(2);return w(a.adapterType.set(i))}),Q(197,Wke,2,3,"mat-option",48,pke),l()(),r(199,"div",70)(200,"button",71),_("click",function(){y(e);let i=h(2);return w(i.openCustomAdaptersDialog())}),c(201," Configurator Custom Adapters "),l()(),r(202,"mat-checkbox",55),_("change",function(i){y(e);let a=h(2);return w(a.replicateNetworkState.set(i.checked))}),c(203," Replicate network connection state "),l()()(),r(204,"mat-tab"),se(205,Gke,4,0,"ng-template",36),r(206,"h2",37),c(207,"Advanced settings"),l(),r(208,"div",72)(209,"div",59)(210,"div",60)(211,"h3",61),c(212,"Linux boot specific settings"),l()(),r(213,"div",63)(214,"div",68)(215,"div",73)(216,"button",71),_("click",function(){y(e);let i=Te(230);return w(i.click())}),c(217," Upload to device "),l(),r(218,"button",74),_("click",function(){y(e);let i=Te(232);return w(i.click())}),c(219,"Upload globally"),l(),r(220,"mat-form-field",75)(221,"mat-label"),c(222,"Initial RAM disk (initrd)"),l(),r(223,"input",64,5),_("input",function(i){y(e);let a=h(2);return a.initrd.set(i.target.value),w(a.onAdvancedFileInput(i))})("focus",function(){y(e);let i=Te(224),a=h(2);return a.filteredNodeFiles=a.allNodeFiles,a.filteredGlobalFiles=a.allGlobalFiles,i.openPanel(),a.refreshNodeFiles(),w(a.refreshQemuImages())}),l(),r(225,"mat-autocomplete",65,6),_("optionSelected",function(i){y(e);let a=h(2);return w(a.initrd.set(i.option.value))}),T(227,Qke,3,0,"mat-optgroup",66),T(228,Xke,3,0,"mat-optgroup",67),l()()(),r(229,"input",76,7),_("change",function(i){y(e);let a=h(2);return w(a.uploadInitrdFile(i,"device"))}),l(),r(231,"input",76,8),_("change",function(i){y(e);let a=h(2);return w(a.uploadInitrdFile(i,"global"))}),l()(),r(233,"div",68)(234,"div",73)(235,"button",71),_("click",function(){y(e);let i=Te(249);return w(i.click())}),c(236," Upload to device "),l(),r(237,"button",74),_("click",function(){y(e);let i=Te(251);return w(i.click())}),c(238,"Upload globally"),l(),r(239,"mat-form-field",75)(240,"mat-label"),c(241,"Kernel image"),l(),r(242,"input",64,9),_("input",function(i){y(e);let a=h(2);return a.kernelImage.set(i.target.value),w(a.onAdvancedFileInput(i))})("focus",function(){y(e);let i=Te(243),a=h(2);return a.filteredNodeFiles=a.allNodeFiles,a.filteredGlobalFiles=a.allGlobalFiles,i.openPanel(),a.refreshNodeFiles(),w(a.refreshQemuImages())}),l(),r(244,"mat-autocomplete",65,10),_("optionSelected",function(i){y(e);let a=h(2);return w(a.kernelImage.set(i.option.value))}),T(246,Zke,3,0,"mat-optgroup",66),T(247,ePe,3,0,"mat-optgroup",67),l()()(),r(248,"input",76,11),_("change",function(i){y(e);let a=h(2);return w(a.uploadKernelImageFile(i,"device"))}),l(),r(250,"input",76,12),_("change",function(i){y(e);let a=h(2);return w(a.uploadKernelImageFile(i,"global"))}),l()(),r(252,"mat-form-field",38)(253,"mat-label"),c(254,"Kernel command line"),l(),r(255,"input",39),_("input",function(i){y(e);let a=h(2);return w(a.kernelCommandLine.set(i.target.value))}),l()()()(),r(256,"div",59)(257,"div",60)(258,"h3",61),c(259,"Bios"),l()(),r(260,"div",63)(261,"div",68)(262,"div",73)(263,"button",71),_("click",function(){y(e);let i=Te(277);return w(i.click())}),c(264," Upload to device "),l(),r(265,"button",74),_("click",function(){y(e);let i=Te(279);return w(i.click())}),c(266,"Upload globally"),l(),r(267,"mat-form-field",75)(268,"mat-label"),c(269,"Bios image"),l(),r(270,"input",64,13),_("input",function(i){y(e);let a=h(2);return a.biosImage.set(i.target.value),w(a.onAdvancedFileInput(i))})("focus",function(){y(e);let i=Te(271),a=h(2);return a.filteredNodeFiles=a.allNodeFiles,a.filteredGlobalFiles=a.allGlobalFiles,i.openPanel(),a.refreshNodeFiles(),w(a.refreshQemuImages())}),l(),r(272,"mat-autocomplete",65,14),_("optionSelected",function(i){y(e);let a=h(2);return w(a.biosImage.set(i.option.value))}),T(274,nPe,3,0,"mat-optgroup",66),T(275,oPe,3,0,"mat-optgroup",67),l()()(),r(276,"input",76,15),_("change",function(i){y(e);let a=h(2);return w(a.uploadBiosFile(i,"device"))}),l(),r(278,"input",76,16),_("change",function(i){y(e);let a=h(2);return w(a.uploadBiosFile(i,"global"))}),l()()()(),r(280,"div",59)(281,"div",60)(282,"h3",61),c(283,"Optimization"),l()(),r(284,"div",63)(285,"mat-checkbox",55),_("change",function(i){y(e);let a=h(2);return w(a.linkedClone.set(i.checked))}),c(286,"Linked clone"),l(),r(287,"mat-checkbox",55),_("change",function(i){y(e);let a=h(2);return w(a.createConfigDisk.set(i.checked))}),c(288,"Auto-create config disk"),l(),r(289,"mat-form-field",38)(290,"mat-label"),c(291,"Max CPUs (hot-plug)"),l(),r(292,"input",39),_("input",function(i){y(e);let a=h(2);return w(a.maxcpus.set(i.target.value))}),l()(),r(293,"mat-checkbox",55),_("change",function(i){y(e);let a=h(2);return w(a.activateCpuThrottling.set(i.checked))}),c(294," Activate CPU throttling "),l(),T(295,aPe,4,1,"mat-form-field",38),r(296,"mat-form-field",38)(297,"mat-label"),c(298,"Process priority"),l(),r(299,"mat-select",47),_("valueChange",function(i){y(e);let a=h(2);return w(a.processPriority.set(i))}),Q(300,rPe,2,2,"mat-option",48,Oe),l()()()(),r(302,"div",59)(303,"div",60)(304,"h3",61),c(305,"Additional settings"),l()(),r(306,"div",63)(307,"mat-form-field",38)(308,"mat-label"),c(309,"Qemu binary path"),l(),r(310,"input",39),_("input",function(i){y(e);let a=h(2);return w(a.qemuPath.set(i.target.value))}),l()(),r(311,"mat-form-field",38)(312,"mat-label"),c(313,"Options"),l(),r(314,"input",39),_("input",function(i){y(e);let a=h(2);return w(a.options.set(i.target.value))}),l()(),r(315,"mat-checkbox",55),_("change",function(i){y(e);let a=h(2);return w(a.tpm.set(i.checked))}),c(316," Enable the Trusted Platform Module (TPM) "),l(),r(317,"mat-checkbox",55),_("change",function(i){y(e);let a=h(2);return w(a.uefi.set(i.checked))}),c(318," Enable the UEFI boot mode "),l()()()()(),r(319,"mat-tab"),se(320,sPe,4,0,"ng-template",36),r(321,"h2",37),c(322,"Usage notes"),l(),r(323,"mat-form-field",38)(324,"mat-label"),c(325,"Usage"),l(),r(326,"textarea",77),_("input",function(i){y(e);let a=h(2);return w(a.usage.set(i.target.value))}),l()()()()()}if(n&2){let e=Te(16),t=Te(93),i=Te(116),a=Te(139),s=Te(162),d=Te(226),p=Te(245),u=Te(273),g=h(2);m(9),v("value",g.nodeName()),m(5),v("matChipInputFor",e)("matChipInputSeparatorKeyCodes",g.separatorKeysCodes),m(),ne("gns3-chip-field__values--empty",((g.node==null||g.node.tags==null?null:g.node.tags.length)??0)===0),m(2),K(g.node==null?null:g.node.tags),m(6),v("value",g.platform()),m(),K(g.selectPlatform),m(5),v("value",g.ram()),m(6),v("value",g.cpus()),m(4),v("value",g.bootPriority()),m(),K(g.bootPriorities),m(5),v("value",g.onClose()),m(),K(g.onCloseOptions),m(6),v("value",g.consoleType()),m(),K(g.consoleTypes),m(5),v("value",g.auxType()),m(),K(g.auxConsoleTypes),m(3),an("value",g.netmikoDeviceType),v("controller",g.controller),m(4),v("value",g.defaultUsername())("placeholder",g.defaultUsernamePlaceholder()||"Username to log into this node"),m(4),v("value",g.defaultPassword())("placeholder",g.defaultPasswordPlaceholder()||"Password to log into this node"),m(),v("checked",g.consoleAutoStart()),m(20),v("value",g.hdaDiskImage())("matAutocomplete",t),m(3),E(g.projectDiskFiles.length?94:-1),m(2),K(g.filteredImages),m(5),v("value",g.hdaDiskInterface()),m(),K(g.diskInterfaces),m(12),v("value",g.hdbDiskImage())("matAutocomplete",i),m(3),E(g.projectDiskFiles.length?117:-1),m(2),K(g.filteredImages),m(5),v("value",g.hdbDiskInterface()),m(),K(g.diskInterfaces),m(12),v("value",g.hdcDiskImage())("matAutocomplete",a),m(3),E(g.projectDiskFiles.length?140:-1),m(2),K(g.filteredImages),m(5),v("value",g.hdcDiskInterface()),m(),K(g.diskInterfaces),m(12),v("value",g.hddDiskImage())("matAutocomplete",s),m(3),E(g.projectDiskFiles.length?163:-1),m(2),K(g.filteredImages),m(5),v("value",g.hddDiskInterface()),m(),K(g.diskInterfaces),m(7),K(Go(63,mke,g.cdromImage,g.cdrom2Image)),m(10),v("value",g.adapters()),m(4),v("value",g.macAddress()),m(4),v("value",g.adapterType()),m(),K(g.networkTypes),m(5),v("checked",g.replicateNetworkState()),m(21),v("value",g.initrd())("matAutocomplete",d),m(4),E(g.filteredNodeFiles.length?227:-1),m(),E(g.filteredGlobalFiles.length?228:-1),m(14),v("value",g.kernelImage())("matAutocomplete",p),m(4),E(g.filteredNodeFiles.length?246:-1),m(),E(g.filteredGlobalFiles.length?247:-1),m(8),v("value",g.kernelCommandLine()),m(15),v("value",g.biosImage())("matAutocomplete",u),m(4),E(g.filteredNodeFiles.length?274:-1),m(),E(g.filteredGlobalFiles.length?275:-1),m(10),v("checked",g.linkedClone()),m(2),v("checked",g.createConfigDisk()),m(5),v("value",g.maxcpus()),m(),v("checked",g.activateCpuThrottling()),m(2),E(g.activateCpuThrottling()?295:-1),m(4),v("value",g.processPriority()),m(),K(g.priorities),m(10),v("value",g.qemuPath()),m(4),v("value",g.options()),m(),v("checked",g.tpm()),m(2),v("checked",g.uefi()),m(9),v("value",g.usage())}}function cPe(n,o){if(n&1&&(r(0,"div",27)(1,"div",33)(2,"mat-card",34),T(3,lPe,327,66,"div"),l()()()),n&2){let e=h();m(3),E(e.name?3:-1)}}function dPe(n,o){n&1&&L(0,"mat-spinner",31)}function mPe(n,o){n&1&&c(0," Apply ")}var eS=(()=>{class n{dialog=f(Xe);dialogRef=f(We);nodeService=f(ft);templateService=f(fa);toasterService=f(re);qemuService=f(Rl);qemuConfigurationService=f(Zm);cd=f(oe);imageManagerService=f(Ns);validationService=f(Hn);controller;node;name;consoleTypes=[];auxConsoleTypes=[];onCloseOptions=[];bootPriorities=[];diskInterfaces=[];displayedColumns=["adapter_number","port_name","adapter_type","actions"];networkTypes=[];qemuImages=[];filteredImages=[];projectDiskFiles=[];projectIsoFiles=[];globalIsoImages=[];allNodeFiles=[];allGlobalFiles=[];filteredNodeFiles=[];filteredGlobalFiles=[];filteredIsoFiles=[];filteredGlobalIsoImages=[];selectPlatform=[];separatorKeysCodes=[13,188];conf={autoFocus:!1,panelClass:["base-dialog-panel","qemu-configurator-dialog-panel","dialog-medium-panel"],disableClose:!0};dialogRefQemuImageCreator;isApplying=z(!1);isLoading=z(!0);nodeName=$("");ram=$("");platform=$("");cpus=$("");bootPriority=$("");onClose=$("");consoleType=$("");auxType=$("");consoleAutoStart=$(!1);hdaDiskImage=$("");hdaDiskInterface=$("");hdbDiskImage=$("");hdbDiskInterface=$("");hdcDiskImage=$("");hdcDiskInterface=$("");hddDiskImage=$("");hddDiskInterface=$("");cdromImage=$("");cdrom2Image=$("");cdromInterfaces=[z("ide"),z("ide")];initrd=$("");kernelImage=$("");kernelCommandLine=$("");biosImage=$("");activateCpuThrottling=$(!1);cpuThrottling=$("");processPriority=$("");qemuPath=$("");options=$("");tpm=$(!1);uefi=$(!1);usage=$("");netmikoDeviceType=$("");defaultUsername=$("");defaultPassword=$("");defaultUsernamePlaceholder=z("");defaultPasswordPlaceholder=z("");linkedClone=$(!1);maxcpus=$("");createConfigDisk=$(!1);adapters=$("");macAddress=$("");adapterType=$("");replicateNetworkState=$(!1);ngOnInit(){this.nodeService.getNode(this.controller,this.node).subscribe({next:e=>{this.node=e,this.name=e.name,this.nodeName.set(e.name||""),this.ram.set(e.properties.ram?.toString()||""),this.platform.set(e.properties.platform||""),this.cpus.set(e.properties.cpus?.toString()||""),this.bootPriority.set(e.properties.boot_priority||""),this.onClose.set(e.properties.on_close||""),this.consoleType.set(e.console_type||""),this.auxType.set(e.aux_type||""),this.consoleAutoStart.set(e.console_auto_start||!1),this.hdaDiskImage.set(e.properties.hda_disk_image_backing_file||e.properties.hda_disk_image||""),this.hdaDiskInterface.set(e.properties.hda_disk_interface||""),this.hdbDiskImage.set(e.properties.hdb_disk_image_backing_file||e.properties.hdb_disk_image||""),this.hdbDiskInterface.set(e.properties.hdb_disk_interface||""),this.hdcDiskImage.set(e.properties.hdc_disk_image_backing_file||e.properties.hdc_disk_image||""),this.hdcDiskInterface.set(e.properties.hdc_disk_interface||""),this.hddDiskImage.set(e.properties.hdd_disk_image_backing_file||e.properties.hdd_disk_image||""),this.hddDiskInterface.set(e.properties.hdd_disk_interface||""),this.cdromImage.set(e.properties.cdrom_image||""),this.cdrom2Image.set(e.properties.cdrom2_image||""),this.cdromInterfaces[0].set(e.properties.cdrom_interface||"ide"),this.cdromInterfaces[1].set(e.properties.cdrom2_interface||"ide"),this.initrd.set(e.properties.initrd||""),this.kernelImage.set(e.properties.kernel_image||""),this.kernelCommandLine.set(e.properties.kernel_command_line||""),this.biosImage.set(e.properties.bios_image||""),this.cpuThrottling.set(e.properties.cpu_throttling?.toString()||""),this.processPriority.set(e.properties.process_priority||""),this.qemuPath.set(e.properties.qemu_path||""),this.options.set(e.properties.options||""),this.tpm.set(e.properties.tpm||!1),this.uefi.set(e.properties.uefi||!1),this.usage.set(e.properties.usage||""),this.netmikoDeviceType.set(e.netmiko_device_type||""),this.defaultUsername.set(e.default_username||""),this.defaultPassword.set(e.default_password||""),(!e.default_username||!e.default_password)&&e.template_id&&this.templateService.list(this.controller).subscribe({next:t=>{let i=t.find(a=>a.template_id===e.template_id)?.appliance_metadata;i&&(this.defaultUsernamePlaceholder.set(e.default_username?"":i.default_username||""),this.defaultPasswordPlaceholder.set(e.default_password?"":i.default_password||""),this.cd.markForCheck())},error:()=>{}}),this.linkedClone.set(e.properties.linked_clone??!0),this.maxcpus.set(e.properties.maxcpus?.toString()||""),this.createConfigDisk.set(e.properties.create_config_disk??!1),this.adapters.set(e.properties.adapters?.toString()||""),this.macAddress.set(e.properties.mac_address||""),this.adapterType.set(e.properties.adapter_type||""),this.replicateNetworkState.set(e.properties.replicate_network_connection_state||!1),this.node.tags||(this.node.tags=[]),this.nodeService.getNodeFiles(this.controller,e.project_id,e.node_id).subscribe({next:t=>{this.allNodeFiles=t.map(i=>i.path),this.projectDiskFiles=t.filter(i=>i.file_type?.toLowerCase().includes("qemu")||i.file_type?.toLowerCase().includes("qcow")||i.file_type?.toLowerCase().includes("vmdk")||i.file_type?.toLowerCase().includes("vmware")||i.file_type?.toLowerCase().includes("virtual")||i.file_type?.toLowerCase().includes("disk image")).map(i=>i.path),this.projectIsoFiles=t.filter(i=>i.file_type?.toLowerCase().includes("iso 9660")||i.file_type?.toLowerCase().includes("cd-rom")).map(i=>i.path),this.cd.markForCheck()},error:()=>{}}),this.refreshGlobalImages(),this.getConfiguration(),this.cd.markForCheck(),this.isLoading.set(!1),this.dialogRef.disableClose=!1},error:e=>{let t=e.error?.message||e.message||"Failed to load node";this.toasterService.error(t),this.cd.markForCheck(),this.isLoading.set(!1),this.dialogRef.disableClose=!1}}),this.qemuService.getImages(this.controller).subscribe({next:e=>{this.qemuImages=e,this.filteredImages=e,this.allGlobalFiles=e.map(t=>t.filename),this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load QEMU images";this.toasterService.error(t),this.cd.markForCheck()}}),this.selectPlatform=this.qemuConfigurationService.getPlatform()}openQemuImageCreator(){this.dialogRefQemuImageCreator=this.dialog.open(ZM,this.conf);let e=this.dialogRefQemuImageCreator.componentInstance;e.controller=this.controller,e.nodeId=this.node.node_id,e.projectId=this.node.project_id,this.dialogRefQemuImageCreator.afterClosed().subscribe(t=>{if(t?.mountPoint&&t?.filename){let i=t.mountPoint.toLowerCase(),a={hda:this.hdaDiskImage,hdb:this.hdbDiskImage,hdc:this.hdcDiskImage,hdd:this.hddDiskImage};a[i]&&(a[i].set(t.filename),this.cd.markForCheck())}})}openIsoAutocomplete(e){e&&e.openPanel&&e.openPanel()}refreshQemuImages(){this.qemuService.getImages(this.controller).subscribe({next:e=>{this.qemuImages=e,this.filteredImages=e,this.allGlobalFiles=e.map(t=>t.filename),this.cd.markForCheck()},error:()=>{}})}refreshNodeFiles(){this.nodeService.getNodeFiles(this.controller,this.node.project_id,this.node.node_id).subscribe({next:e=>{this.allNodeFiles=e.map(t=>t.path),this.projectDiskFiles=e.filter(t=>t.file_type?.toLowerCase().includes("qemu")||t.file_type?.toLowerCase().includes("qcow")||t.file_type?.toLowerCase().includes("vmdk")||t.file_type?.toLowerCase().includes("vmware")||t.file_type?.toLowerCase().includes("virtual")||t.file_type?.toLowerCase().includes("disk image")).map(t=>t.path),this.projectIsoFiles=e.filter(t=>t.file_type?.toLowerCase().includes("iso 9660")||t.file_type?.toLowerCase().includes("cd-rom")).map(t=>t.path),this.filteredIsoFiles=this.projectIsoFiles,this.cd.markForCheck()},error:()=>{}})}refreshGlobalImages(){this.imageManagerService.getImages(this.controller).subscribe({next:e=>{this.globalIsoImages=e.filter(my).map(t=>xh(t)),this.filteredGlobalIsoImages=this.globalIsoImages,this.cd.markForCheck()},error:()=>{}})}uploadCdromImageFile(e,t="global",i=1){let a=e.target.files?.[0];a&&this.uploadFile(a,i===1?this.cdromImage:this.cdrom2Image,i===1?"cdrom_image":"cdrom2_image",t)}uploadFile(e,t,i,a){let s=e.name;(a==="device"?this.nodeService.uploadNodeFile(this.controller,this.node.project_id,this.node.node_id,s,e):this.imageManagerService.uploadedImage(this.controller,!1,s,e)).subscribe({next:()=>{this.node.properties[i]=s,t.set(s),a==="device"?this.refreshNodeFiles():this.refreshGlobalImages(),this.toasterService.success(`Uploaded ${s}`),this.cd.markForCheck()},error:p=>{this.toasterService.error(p.error?.message||p.message||"Failed to upload")}})}uploadInitrdFile(e,t="global"){e.target.files[0]&&this.uploadFile(e.target.files[0],this.initrd,"initrd",t)}uploadKernelImageFile(e,t="global"){e.target.files[0]&&this.uploadFile(e.target.files[0],this.kernelImage,"kernel_image",t)}uploadBiosFile(e,t="global"){e.target.files[0]&&this.uploadFile(e.target.files[0],this.biosImage,"bios_image",t)}getConfiguration(){this.consoleTypes=this.qemuConfigurationService.getConsoleTypes(),this.auxConsoleTypes=this.qemuConfigurationService.getAuxConsoleTypes(),this.onCloseOptions=this.qemuConfigurationService.getOnCloseOptions(),this.qemuConfigurationService.getNetworkTypes().forEach(e=>{this.networkTypes.push(e)}),this.bootPriorities=this.qemuConfigurationService.getBootPriorities(),this.diskInterfaces=this.qemuConfigurationService.getDiskInterfaces()}filterImages(e){let t=e.target.value.toLowerCase();return this.qemuImages.filter(i=>i.filename.toLowerCase().includes(t))}onAdvancedFileInput(e){let t=e.target.value.toLowerCase();this.filteredNodeFiles=this.allNodeFiles.filter(i=>i.toLowerCase().includes(t)),this.filteredGlobalFiles=this.allGlobalFiles.filter(i=>i.toLowerCase().includes(t))}onCdromInput(e){let t=e.target.value.toLowerCase();this.filteredIsoFiles=this.projectIsoFiles.filter(i=>i.toLowerCase().includes(t)),this.filteredGlobalIsoImages=this.globalIsoImages.filter(i=>i.toLowerCase().includes(t))}onHdaImageInput(e){this.filteredImages=this.filterImages(e)}onHdbImageInput(e){this.filteredImages=this.filterImages(e)}onHdcImageInput(e){this.filteredImages=this.filterImages(e)}onHddImageInput(e){this.filteredImages=this.filterImages(e)}openCustomAdaptersDialog(){let e=this.node.port_name_format||"Ethernet{0}",t=this.node.port_segment_size||0,i=this.node.first_port_name||"",a=this.node.properties.adapter_type||"e1000",s=this.node.properties.adapters||0,d=this.node.custom_adapters||[],p=[];for(let g=0;g<s;g++){let C=d.find(M=>M.adapter_number===g);if(C)p.push({adapter_number:C.adapter_number,adapter_type:C.adapter_type,port_name:C.port_name,mac_address:C.mac_address||""});else{let M=Ou(g,{portNameFormat:e,portSegmentSize:t,firstPortName:i});p.push({adapter_number:g,adapter_type:a,port_name:M,mac_address:""})}}this.dialog.open(sd,{panelClass:["custom-adapters-dialog-panel","dialog-extra-large-panel"],data:{adapters:p,networkTypes:this.networkTypes,portNameFormat:e,portSegmentSize:t,firstPortName:i,defaultAdapterType:a,currentAdapters:s,validateAdapterCount:g=>this.nodeService.validateConnectedPorts(this.node,g)}}).afterClosed().subscribe(g=>{g&&(this.node.custom_adapters=g.adapters,g.requiredAdapters!==void 0&&(this.node.properties.adapters=g.requiredAdapters,this.adapters.set(g.requiredAdapters.toString())),this.cd.markForCheck())})}onSaveClick(){if(this.isApplying())return;let e=this.validationService.required(this.nodeName(),"Name");if(!e.isValid){this.toasterService.error(e.errorMessage);return}let t=this.validationService.required(this.ram(),"RAM");if(!t.isValid){this.toasterService.error(t.errorMessage);return}let i=this.validationService.validateNetmikoDeviceType(this.netmikoDeviceType());if(!i.isValid){this.toasterService.error(i.errorMessage);return}this.node.name=this.nodeName(),this.node.properties.ram=parseInt(this.ram(),10)||0,this.node.properties.platform=this.platform(),this.node.properties.cpus=parseFloat(this.cpus())||0,this.node.properties.boot_priority=this.bootPriority(),this.node.properties.on_close=this.onClose(),this.node.console_type=this.consoleType(),this.node.aux_type=this.auxType(),this.node.console_auto_start=this.consoleAutoStart(),this.node.properties.hda_disk_image=this.hdaDiskImage(),this.node.properties.hda_disk_interface=this.hdaDiskInterface(),this.node.properties.hdb_disk_image=this.hdbDiskImage(),this.node.properties.hdb_disk_interface=this.hdbDiskInterface(),this.node.properties.hdc_disk_image=this.hdcDiskImage(),this.node.properties.hdc_disk_interface=this.hdcDiskInterface(),this.node.properties.hdd_disk_image=this.hddDiskImage(),this.node.properties.hdd_disk_interface=this.hddDiskInterface(),this.node.properties.cdrom_image=this.cdromImage(),this.node.properties.cdrom2_image=this.cdrom2Image(),this.node.properties.cdrom_interface=this.cdromInterfaces[0](),this.node.properties.cdrom2_interface=this.cdromInterfaces[1](),this.node.properties.initrd=this.initrd(),this.node.properties.kernel_image=this.kernelImage(),this.node.properties.kernel_command_line=this.kernelCommandLine(),this.node.properties.bios_image=this.biosImage(),this.node.properties.cpu_throttling=parseInt(this.cpuThrottling(),10)||null,this.node.properties.process_priority=this.processPriority(),this.node.properties.qemu_path=this.qemuPath(),this.node.properties.options=this.options(),this.node.properties.tpm=this.tpm(),this.node.properties.uefi=this.uefi(),this.node.properties.usage=this.usage(),this.node.netmiko_device_type=this.netmikoDeviceType().trim()||null,this.node.default_username=this.defaultUsername().trim()||null,this.node.default_password=this.defaultPassword().trim()||null,this.node.properties.linked_clone=this.linkedClone(),this.node.properties.maxcpus=parseInt(this.maxcpus(),10)||void 0,this.node.properties.create_config_disk=this.createConfigDisk(),this.node.properties.adapters=parseInt(this.adapters(),10)||0,this.node.properties.mac_address=this.macAddress(),this.node.properties.adapter_type=this.adapterType(),this.node.properties.replicate_network_connection_state=this.replicateNetworkState();let a=this.cdromInterfaces.map(s=>s());this.isApplying.set(!0),this.dialogRef.disableClose=!0,this.nodeService.updateNodeWithCustomAdapters(this.controller,this.node).subscribe({next:s=>{let d=s.properties;if(!d||(d.cdrom_interface||"ide")!==a[0]||(d.cdrom2_interface||"ide")!==a[1]){this.toasterService.error("The server did not save the CD-ROM interfaces. Check that the compute server is updated and the node is stopped."),this.isApplying.set(!1),this.dialogRef.disableClose=!1;return}this.toasterService.success(`Node ${this.node.name} updated.`),this.onCancelClick()},error:s=>{let d=s.error?.message||s.message||"Failed to update node";this.toasterService.error(d),this.isApplying.set(!1),this.dialogRef.disableClose=!1}})}onCancelClick(){this.dialogRef.close()}addTag(e){let t=(e.value||"").trim();t&&this.node&&(this.node.tags||(this.node.tags=[]),this.node.tags.push(t)),e.chipInput&&e.chipInput.clear()}removeTag(e){if(!this.node.tags)return;let t=this.node.tags.indexOf(e);t>=0&&this.node.tags.splice(t,1)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-configurator-qemu"]],inputs:{nodeName:[1,"nodeName"],ram:[1,"ram"],platform:[1,"platform"],cpus:[1,"cpus"],bootPriority:[1,"bootPriority"],onClose:[1,"onClose"],consoleType:[1,"consoleType"],auxType:[1,"auxType"],consoleAutoStart:[1,"consoleAutoStart"],hdaDiskImage:[1,"hdaDiskImage"],hdaDiskInterface:[1,"hdaDiskInterface"],hdbDiskImage:[1,"hdbDiskImage"],hdbDiskInterface:[1,"hdbDiskInterface"],hdcDiskImage:[1,"hdcDiskImage"],hdcDiskInterface:[1,"hdcDiskInterface"],hddDiskImage:[1,"hddDiskImage"],hddDiskInterface:[1,"hddDiskInterface"],cdromImage:[1,"cdromImage"],cdrom2Image:[1,"cdrom2Image"],initrd:[1,"initrd"],kernelImage:[1,"kernelImage"],kernelCommandLine:[1,"kernelCommandLine"],biosImage:[1,"biosImage"],activateCpuThrottling:[1,"activateCpuThrottling"],cpuThrottling:[1,"cpuThrottling"],processPriority:[1,"processPriority"],qemuPath:[1,"qemuPath"],options:[1,"options"],tpm:[1,"tpm"],uefi:[1,"uefi"],usage:[1,"usage"],netmikoDeviceType:[1,"netmikoDeviceType"],defaultUsername:[1,"defaultUsername"],defaultPassword:[1,"defaultPassword"],linkedClone:[1,"linkedClone"],maxcpus:[1,"maxcpus"],createConfigDisk:[1,"createConfigDisk"],adapters:[1,"adapters"],macAddress:[1,"macAddress"],adapterType:[1,"adapterType"],replicateNetworkState:[1,"replicateNetworkState"]},outputs:{nodeName:"nodeNameChange",ram:"ramChange",platform:"platformChange",cpus:"cpusChange",bootPriority:"bootPriorityChange",onClose:"onCloseChange",consoleType:"consoleTypeChange",auxType:"auxTypeChange",consoleAutoStart:"consoleAutoStartChange",hdaDiskImage:"hdaDiskImageChange",hdaDiskInterface:"hdaDiskInterfaceChange",hdbDiskImage:"hdbDiskImageChange",hdbDiskInterface:"hdbDiskInterfaceChange",hdcDiskImage:"hdcDiskImageChange",hdcDiskInterface:"hdcDiskInterfaceChange",hddDiskImage:"hddDiskImageChange",hddDiskInterface:"hddDiskInterfaceChange",cdromImage:"cdromImageChange",cdrom2Image:"cdrom2ImageChange",initrd:"initrdChange",kernelImage:"kernelImageChange",kernelCommandLine:"kernelCommandLineChange",biosImage:"biosImageChange",activateCpuThrottling:"activateCpuThrottlingChange",cpuThrottling:"cpuThrottlingChange",processPriority:"processPriorityChange",qemuPath:"qemuPathChange",options:"optionsChange",tpm:"tpmChange",uefi:"uefiChange",usage:"usageChange",netmikoDeviceType:"netmikoDeviceTypeChange",defaultUsername:"defaultUsernameChange",defaultPassword:"defaultPasswordChange",linkedClone:"linkedCloneChange",maxcpus:"maxcpusChange",createConfigDisk:"createConfigDiskChange",adapters:"adaptersChange",macAddress:"macAddressChange",adapterType:"adapterTypeChange",replicateNetworkState:"replicateNetworkStateChange"},decls:18,vars:4,consts:[["chipList",""],["hdaAuto","matAutocomplete"],["hdbAuto","matAutocomplete"],["hdcAuto","matAutocomplete"],["hddAuto","matAutocomplete"],["initrdTrigger","matAutocompleteTrigger"],["initrdAuto","matAutocomplete"],["fileinitrdDevice",""],["fileinitrdGlobal",""],["kernelTrigger","matAutocompleteTrigger"],["kernelAuto","matAutocomplete"],["filekernelDevice",""],["filekernelGlobal",""],["biosTrigger","matAutocompleteTrigger"],["biosAuto","matAutocomplete"],["filebiosDevice",""],["filebiosGlobal",""],["fileDevice",""],["fileGlobal",""],["isoTrigger","matAutocompleteTrigger"],["isoAuto","matAutocomplete"],["mat-dialog-title","",1,"node-config__header"],[1,"node-config__title"],["aria-hidden","true"],["mat-icon-button","","type","button","aria-label","Close node configuration",1,"node-config__close",3,"click"],[1,"modal-form-container"],[1,"configurator-dialog-loading"],[1,"content"],["mat-dialog-actions",""],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"],["diameter","20"],["diameter","40"],[1,"default-content"],[1,"matCard"],[1,"qemu-configurator-tabs"],["mat-tab-label",""],[1,"node-config__section-heading"],["appearance","outline","subscriptSizing","dynamic",1,"form-field"],["matInput","","type","text",3,"input","value"],[1,"gns3-chip-field"],["floatLabel","always","appearance","outline","subscriptSizing","dynamic",1,"form-field","tags-field"],["matInput","","placeholder","Add tags",3,"matChipInputTokenEnd","matChipInputFor","matChipInputSeparatorKeyCodes"],["aria-label","Tags",1,"gns3-chip-field__values"],[3,"editable"],[1,"node-config__quad-grid","gns3-form-layout-fixed"],["appearance","outline","subscriptSizing","fixed",1,"form-field"],[3,"valueChange","value"],[3,"value"],["matSuffix",""],["matInput","","type","text","min","1",3,"input","value"],[1,"node-config__two-grid","gns3-form-layout-fixed"],[1,"three-column-grid"],["subscriptSizing","fixed",1,"form-field",3,"valueChange","value","controller"],["matInput","","type","text",3,"input","value","placeholder"],[3,"change","checked"],[1,"hdd-create-section"],["mat-raised-button","","color","primary",1,"create-button",3,"click"],[1,"disk-cards-grid"],[1,"disk-card"],[1,"disk-card__header"],[1,"disk-card__title"],[1,"disk-card__badge"],[1,"disk-card__content"],["matInput","","type","text",3,"input","focus","value","matAutocomplete"],[3,"optionSelected"],["label","This device files"],["label","Global images"],[1,"form-container"],["matInput","","min","0","type","text",3,"input","value"],[1,"custom-adapters-section"],["mat-raised-button","","color","primary",3,"click"],[1,"card-stack"],[1,"node-config__file-row"],["mat-raised-button","",3,"click"],["appearance","outline","subscriptSizing","dynamic",1,"form-field","node-config__file-field"],["type","file",1,"nonvisible",3,"change"],["matInput","",1,"node-config__usage-textarea",3,"input","value"],[1,"node-config__tab-label"],[3,"removed","editable"],["matChipRemove","","type","button"],[1,"node-config__inline-actions"],["type","file","accept",".iso",1,"nonvisible",3,"change"],[3,"valueChange","value","disabled"],["value","ide"],["value","sata"]],template:function(t,i){t&1&&(r(0,"div",21)(1,"h1",22),c(2,"Configure Node "),r(3,"span",23),c(4,"\u2014"),l(),c(5),l(),r(6,"button",24),_("click",function(){return i.onCancelClick()}),r(7,"mat-icon"),c(8,"close"),l()()(),r(9,"div",25),T(10,uke,2,0,"div",26)(11,cPe,4,1,"div",27),l(),r(12,"div",28)(13,"button",29),_("click",function(){return i.onCancelClick()}),c(14,"Cancel"),l(),r(15,"button",30),_("click",function(){return i.onSaveClick()}),T(16,dPe,1,0,"mat-spinner",31)(17,mPe,1,0),l()()),t&2&&(m(5),X(" QEMU VM ",i.name),m(5),E(i.isLoading()?10:11),m(5),v("disabled",i.isApplying()||i.isLoading()),m(),E(i.isApplying()?16:17))},dependencies:[fe,St,ke,qe,Qe,hn,Zn,bo,Ir,Xo,Yo,we,Pe,Ve,Dr,oi,ye,Ee,ot,ct,nt,gm,Y,he,Be,ri,bi,xi,hi,fi,ie,ce,Rt,Gt,Jo,ha,ho,rt,mt,po],encapsulation:2,changeDetection:0})}return n})();function pPe(n,o){n&1&&(r(0,"div",5),L(1,"mat-spinner",10),l())}function uPe(n,o){n&1&&(r(0,"th",32),c(1,"Source Port : DLCI"),l())}function gPe(n,o){if(n&1&&(r(0,"td",33),c(1),l()),n&2){let e=o.$implicit;m(),N(e.portIn)}}function hPe(n,o){n&1&&(r(0,"th",32),c(1,"Destination Port : DLCI"),l())}function _Pe(n,o){if(n&1&&(r(0,"td",33),c(1),l()),n&2){let e=o.$implicit;m(),N(e.portOut)}}function fPe(n,o){n&1&&(r(0,"th",32),c(1,"Actions"),l())}function vPe(n,o){if(n&1){let e=R();r(0,"td",33)(1,"button",34),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.delete(i))}),r(2,"mat-icon",35),c(3,"delete"),l()()()}}function CPe(n,o){n&1&&L(0,"tr",36)}function bPe(n,o){n&1&&L(0,"tr",37)}function xPe(n,o){if(n&1){let e=R();r(0,"div",11)(1,"div",12)(2,"span",13)(3,"mat-icon"),c(4,"tune"),l(),c(5,"General"),l()()(),r(6,"div",14)(7,"div",15)(8,"mat-card")(9,"h2",16),c(10,"Frame Relay mappings"),l(),r(11,"div",17)(12,"mat-form-field",18)(13,"mat-label"),c(14,"Name"),l(),r(15,"input",19),_("input",function(i){y(e);let a=h();return w(a.nodeName.set(i.target.value))}),l()()(),r(16,"div",20)(17,"mat-form-field",21)(18,"mat-label"),c(19,"Source Port"),l(),r(20,"input",19),_("input",function(i){y(e);let a=h();return w(a.sourcePort.set(i.target.value))}),l()(),r(21,"mat-form-field",21)(22,"mat-label"),c(23,"Destination Port"),l(),r(24,"input",19),_("input",function(i){y(e);let a=h();return w(a.destinationPort.set(i.target.value))}),l()(),r(25,"mat-form-field",21)(26,"mat-label"),c(27,"Source DLCI"),l(),r(28,"input",19),_("input",function(i){y(e);let a=h();return w(a.sourceDlci.set(i.target.value))}),l()(),r(29,"mat-form-field",21)(30,"mat-label"),c(31,"Destination DLCI"),l(),r(32,"input",19),_("input",function(i){y(e);let a=h();return w(a.destinationDlci.set(i.target.value))}),l()()(),r(33,"div",22)(34,"button",23),_("click",function(){y(e);let i=h();return w(i.add())}),c(35,"Add"),l()(),r(36,"table",24),Fe(37,25),se(38,uPe,2,0,"th",26)(39,gPe,2,1,"td",27),Re(),Fe(40,28),se(41,hPe,2,0,"th",26)(42,_Pe,2,1,"td",27),Re(),Fe(43,29),se(44,fPe,2,0,"th",26)(45,vPe,4,0,"td",27),Re(),se(46,CPe,1,0,"tr",30)(47,bPe,1,0,"tr",31),l()()()()}if(n&2){let e=h();m(15),v("value",e.nodeName()),m(5),v("value",e.sourcePort()),m(4),v("value",e.destinationPort()),m(4),v("value",e.sourceDlci()),m(4),v("value",e.destinationDlci()),m(4),v("dataSource",e.nodeMappingsDataSource),m(10),v("matHeaderRowDef",e.displayedColumns),m(),v("matRowDefColumns",e.displayedColumns)}}function yPe(n,o){n&1&&L(0,"mat-spinner",9)}function wPe(n,o){n&1&&c(0," Apply ")}var tS=(()=>{class n{dialogRef=f(We);nodeService=f(ft);toasterService=f(re);cd=f(oe);validationService=f(Hn);controller;node;name;consoleTypes=[];nodeMappings=new Map;nodeMappingsDataSource=[];dataSource=[];displayedColumns=["portIn","portOut","actions"];nodeName=$("");sourcePort=$("");sourceDlci=$("");destinationPort=$("");destinationDlci=$("");isApplying=z(!1);isLoading=z(!0);ngOnInit(){this.nodeService.getNode(this.controller,this.node).subscribe({next:e=>{this.node=e,this.name=e.name,this.nodeName.set(e.name||"");let t=e.properties.mappings;Object.keys(t).forEach(i=>{this.nodeMappings.set(i,t[i])}),this.nodeMappingsDataSource=Array.from(this.nodeMappings.entries()).map(([i,a])=>({portIn:i,portOut:a})),this.cd.markForCheck(),this.isLoading.set(!1),this.dialogRef.disableClose=!1},error:e=>{let t=e.error?.message||e.message||"Failed to load node";this.toasterService.error(t),this.cd.markForCheck(),this.isLoading.set(!1),this.dialogRef.disableClose=!1}})}delete(e){this.nodeMappingsDataSource=this.nodeMappingsDataSource.filter(t=>t!==e)}add(){let e=this.sourcePort(),t=this.sourceDlci(),i=this.destinationPort(),a=this.destinationDlci(),s=this.validationService.required(e,"Source Port");if(!s.isValid){this.toasterService.error(s.errorMessage);return}if(!this.validationService.validatePort(e).isValid){this.toasterService.error("Source Port must be a non-negative integer");return}let p=this.validationService.required(t,"Source DLCI");if(!p.isValid){this.toasterService.error(p.errorMessage);return}let u=this.validationService.required(i,"Destination Port");if(!u.isValid){this.toasterService.error(u.errorMessage);return}if(!this.validationService.validatePort(i).isValid){this.toasterService.error("Destination Port must be a non-negative integer");return}let C=this.validationService.required(a,"Destination DLCI");if(!C.isValid){this.toasterService.error(C.errorMessage);return}let M={portIn:`${e}:${t}`,portOut:`${i}:${a}`};this.nodeMappingsDataSource.filter(x=>x.portIn===M.portIn).length>0?this.toasterService.error("Mapping already defined."):(this.nodeMappingsDataSource=this.nodeMappingsDataSource.concat([M]),this.clearUserInput())}clearUserInput(){this.sourcePort.set(""),this.sourceDlci.set(""),this.destinationPort.set(""),this.destinationDlci.set("")}strMapToObj(e){let t=Object.create(null);for(let[i,a]of e)t[i]=a;return t}onSaveClick(){if(this.isApplying())return;let e=this.validationService.required(this.nodeName(),"Name");if(!e.isValid){this.toasterService.error(e.errorMessage||"Name is required");return}this.node.name=this.nodeName(),this.nodeMappings.clear(),this.nodeMappingsDataSource.forEach(t=>{this.nodeMappings.set(t.portIn,t.portOut)}),this.node.properties.mappings=Array.from(this.nodeMappings).reduce((t,[i,a])=>Object.assign(t,{[i]:a}),{}),this.isApplying.set(!0),this.dialogRef.disableClose=!0,this.nodeService.updateNode(this.controller,this.node).subscribe({next:()=>{this.toasterService.success(`Node ${this.node.name} updated.`),this.onCancelClick()},error:t=>{let i=t?.error?.message||t?.message||"Failed to update node";this.toasterService.error(i),this.isApplying.set(!1),this.dialogRef.disableClose=!1}})}onCancelClick(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-configurator-switch"]],inputs:{nodeName:[1,"nodeName"],sourcePort:[1,"sourcePort"],sourceDlci:[1,"sourceDlci"],destinationPort:[1,"destinationPort"],destinationDlci:[1,"destinationDlci"]},outputs:{nodeName:"nodeNameChange",sourcePort:"sourcePortChange",sourceDlci:"sourceDlciChange",destinationPort:"destinationPortChange",destinationDlci:"destinationDlciChange"},decls:18,vars:4,consts:[["mat-dialog-title","",1,"node-config__header"],[1,"node-config__title"],["aria-hidden","true"],["mat-icon-button","","type","button","aria-label","Close node configuration",1,"node-config__close",3,"click"],[1,"modal-form-container"],[1,"configurator-dialog-loading"],["mat-dialog-actions",""],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"],["diameter","20"],["diameter","40"],["role","tablist","aria-label","Node configuration sections",1,"node-config__single-tab"],["role","tab","aria-selected","true"],[1,"node-config__tab-label"],[1,"content"],[1,"default-content"],[1,"node-config__section-heading"],[1,"form-container"],["appearance","outline","subscriptSizing","dynamic",1,"form-field"],["matInput","","type","text",3,"input","value"],[1,"fr-switch__input-grid","gns3-form-layout-fixed"],["appearance","outline","subscriptSizing","fixed",1,"form-field"],[1,"fr-switch__add-btn"],["mat-flat-button","","color","primary",1,"node-config__add-button",3,"click"],["mat-table","",3,"dataSource"],["matColumnDef","portIn"],["mat-header-cell","",4,"matHeaderCellDef"],["mat-cell","",4,"matCellDef"],["matColumnDef","portOut"],["matColumnDef","actions"],["mat-header-row","",4,"matHeaderRowDef"],["mat-row","",4,"matRowDef","matRowDefColumns"],["mat-header-cell",""],["mat-cell",""],["mat-icon-button","","matTooltip","Delete mapping","matTooltipClass","custom-tooltip",3,"click"],["aria-label","Delete mapping"],["mat-header-row",""],["mat-row",""]],template:function(t,i){t&1&&(r(0,"div",0)(1,"h1",1),c(2,"Configure Node "),r(3,"span",2),c(4,"\u2014"),l(),c(5),l(),r(6,"button",3),_("click",function(){return i.onCancelClick()}),r(7,"mat-icon"),c(8,"close"),l()()(),r(9,"div",4),T(10,pPe,2,0,"div",5)(11,xPe,48,8),l(),r(12,"div",6)(13,"button",7),_("click",function(){return i.onCancelClick()}),c(14,"Cancel"),l(),r(15,"button",8),_("click",function(){return i.onSaveClick()}),T(16,yPe,1,0,"mat-spinner",9)(17,wPe,1,0),l()()),t&2&&(m(5),X(" Frame Relay switch ",i.name),m(5),E(i.isLoading()?10:11),m(5),v("disabled",i.isApplying()||i.isLoading()),m(),E(i.isApplying()?16:17))},dependencies:[fe,St,ke,qe,Qe,hn,Zn,_n,bn,yn,kn,wn,xn,Pn,Mn,Sn,Tn,En,we,Pe,Ve,ye,Ee,Y,he,Be,ie,ce,st,pt,rt,mt],styles:['[_nghost-%COMP%]{display:block;width:100%;background:transparent}.templates-page__content[_ngcontent-%COMP%]{animation:none}.templates-page__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:20px;max-width:1600px;margin:0 auto;padding:24px 20px 16px}.templates-page__heading[_ngcontent-%COMP%], .templates-page__header-actions[_ngcontent-%COMP%]{display:flex;align-items:center}.templates-page__heading[_ngcontent-%COMP%]{min-width:0;gap:var(--gns3-density-space-3)}.templates-page__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.templates-page__header-actions[_ngcontent-%COMP%]{gap:var(--gns3-density-space-3)}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);border-radius:12px;padding-inline:18px;font-size:15px;font-weight:500;letter-spacing:.3px;text-transform:none}[class*=-templates__header][_ngcontent-%COMP%]{box-sizing:border-box;width:100%;height:calc(var(--gns3-density-space-4) * 2 + (var(--gns3-density-section-title-size) + 2px) * 1.2 + 1px);max-width:none;margin:0;padding:0 var(--gns3-density-page-padding);gap:var(--gns3-density-space-3);color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container);border-bottom:1px solid var(--mat-sys-outline-variant)}[class*=-templates__back-btn][_ngcontent-%COMP%], [class*=-templates__add-btn][_ngcontent-%COMP%]{flex:0 0 auto;width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:12px}[class*=-templates__back-btn][_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container)}[class*=-templates__add-btn][_ngcontent-%COMP%]{color:var(--mat-sys-primary)}[class*=-templates__title][_ngcontent-%COMP%]{flex:1;min-width:0;margin:0;padding-bottom:0;color:var(--mat-sys-on-primary-container);font-size:calc(var(--gns3-density-section-title-size) + 2px);font-weight:650;line-height:1.2;letter-spacing:-.01em}.templates-page__scopes[_ngcontent-%COMP%]{display:flex;gap:4px;max-width:1560px;margin:0 auto 16px;padding:0 20px;border-bottom:1px solid var(--mat-sys-outline-variant)}.templates-page__scope[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center;gap:8px;min-height:48px;padding:0 16px;border:0;color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;font-size:14px;font-weight:550;cursor:pointer}.templates-page__scope[_ngcontent-%COMP%]:after{position:absolute;right:8px;bottom:-1px;left:8px;height:2px;border-radius:2px 2px 0 0;background:transparent;content:""}.templates-page__scope[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}.templates-page__scope[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{min-width:22px;padding:2px 6px;border-radius:12px;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-high);font-size:11px;text-align:center}.templates-page__scope--active[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%]:after{background:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap);max-width:1600px;margin:0 auto;padding:0 20px 8px}.templates-page__search[_ngcontent-%COMP%]{flex:1;min-width:240px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:flex;align-items:center;flex:0 0 auto;gap:var(--gns3-density-space-3)}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{width:155px}.templates-page__view-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px;padding:4px 2px;border-radius:8px;background:var(--mat-sys-surface-container-high)}button.templates-page__view-button[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:8px;color:var(--mat-sys-on-surface-variant);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);--mat-icon-button-icon-size: 22px}button.templates-page__view-button--active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__main[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:20px;max-width:1600px;margin:0 auto;padding:0 20px 20px}.templates-page__loading[_ngcontent-%COMP%]{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;min-height:320px;gap:var(--gns3-density-card-gap);color:var(--mat-sys-on-surface-variant)}.templates-page__table-container[_ngcontent-%COMP%]{flex:1;min-width:0;border-radius:16px;background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;overflow-x:auto}mat-table[_ngcontent-%COMP%]{width:100%;min-width:850px}.mat-mdc-row[_ngcontent-%COMP%], .mat-row[_ngcontent-%COMP%]{height:var(--mat-table-row-item-container-height);min-height:var(--mat-table-row-item-container-height)}.mat-header-row[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%]{position:sticky;top:0;z-index:10;background:var(--mat-sys-surface-container-highest);box-shadow:inset 0 -2px var(--mat-sys-primary);--mat-sort-arrow-color: var(--mat-sys-primary)}.mat-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:13px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}mat-row[_ngcontent-%COMP%]{cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease}mat-row[_ngcontent-%COMP%]:nth-child(2n){background:color-mix(in srgb,var(--mat-sys-on-surface) 1%,transparent)}mat-row[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}mat-row.templates-page__row--selected[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}mat-cell[_ngcontent-%COMP%], mat-header-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:inherit;color:var(--mat-sys-on-surface)}.mat-column-name[_ngcontent-%COMP%]{flex:2.4;min-width:240px;justify-content:flex-start}.mat-column-template_type[_ngcontent-%COMP%]{flex:1.1;min-width:130px}.mat-column-category[_ngcontent-%COMP%]{flex:1;min-width:110px}.mat-column-compute_id[_ngcontent-%COMP%]{flex:1;min-width:105px}.mat-column-builtin[_ngcontent-%COMP%]{flex:0 0 90px;min-width:90px;justify-content:center}.mat-column-actions[_ngcontent-%COMP%]{flex:0 0 180px;min-width:180px;box-sizing:border-box;justify-content:flex-start;padding-right:24px}.templates-page__name-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-width:0;gap:var(--gns3-density-space-3)}.templates-page__name-copy[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:14px;font-weight:600}.templates-page__symbol[_ngcontent-%COMP%]{display:grid;flex:0 0 52px;width:52px;height:52px;overflow:hidden;place-items:center;border-radius:14px;color:var(--mat-sys-on-primary-container);background:color-mix(in srgb,var(--mat-sys-primary-container) 82%,var(--mat-sys-surface))}.templates-page__symbol[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:78%;height:78%;object-fit:contain;filter:drop-shadow(0 2px 4px color-mix(in srgb,var(--mat-sys-shadow) 25%,transparent))}.templates-page__symbol[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:27px;height:27px;font-size:27px}.templates-page__symbol--small[_ngcontent-%COMP%]{flex-basis:38px;width:38px;height:38px;border-radius:10px}.templates-page__symbol--small[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:21px;height:21px;font-size:21px}.templates-page__type-badge[_ngcontent-%COMP%], .templates-page__source-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;width:fit-content;padding:4px 9px;border-radius:16px;font-size:12px;font-weight:600;white-space:nowrap}.templates-page__type-badge[_ngcontent-%COMP%]{color:var(--mat-sys-secondary);background:color-mix(in srgb,var(--mat-sys-secondary) 11%,transparent)}.templates-page__type-badge--qemu[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__type-badge--docker[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container)}.templates-page__type-badge--dynamips[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary-container);background:var(--mat-sys-tertiary-container)}.templates-page__type-badge--cloud[_ngcontent-%COMP%]{color:var(--mat-sys-on-error-container);background:var(--mat-sys-error-container)}.templates-page__type-badge--vpcs[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary);background:var(--mat-sys-primary)}.templates-page__type-badge--ethernet-hub[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary);background:var(--mat-sys-secondary)}.templates-page__type-badge--ethernet-switch[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary);background:var(--mat-sys-tertiary)}.templates-page__type-badge--iou[_ngcontent-%COMP%]{color:var(--mat-sys-on-error);background:var(--mat-sys-error)}.templates-page__type-badge--nat[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-highest)}.templates-page__source-badge[_ngcontent-%COMP%]{color:var(--mat-sys-primary);background:color-mix(in srgb,var(--mat-sys-primary) 11%,transparent)}.templates-page__source-badge--builtin[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary);background:color-mix(in srgb,var(--mat-sys-tertiary) 11%,transparent)}.templates-page__table-footer[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:var(--mat-table-footer-container-height);padding:0 12px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container))}.templates-page__table-footer[_ngcontent-%COMP%] mat-paginator[_ngcontent-%COMP%]{width:100%;--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__actions-cell[_ngcontent-%COMP%], .templates-page__card-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:3px}button.templates-page__action[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-on-surface-variant);width:var(--gns3-density-control-height-sm);height:var(--gns3-density-control-height-sm);--mat-icon-button-state-layer-size: var(--gns3-density-control-height-sm);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-control-height-sm)}button.templates-page__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}button.templates-page__action[_ngcontent-%COMP%]{color:var(--template-action-color);--mat-icon-button-state-layer-color: var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:not(:disabled) mat-icon[_ngcontent-%COMP%]{color:var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:disabled mat-icon[_ngcontent-%COMP%]{color:var(--gns3-button-disabled-label-color)}button.templates-page__action--details[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--edit[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-primary)}button.templates-page__action--duplicate[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--delete[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-error)}.templates-page__grid[_ngcontent-%COMP%]{flex:1;min-width:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-content:start;gap:var(--gns3-density-card-gap)}.templates-page__grid--with-details[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__card[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column;padding:16px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;background:var(--mat-sys-surface);cursor:pointer;transition:transform var(--gns3-motion-duration-standard) ease,box-shadow var(--gns3-motion-duration-standard) ease,border-color var(--gns3-motion-duration-standard) ease}.templates-page__card[_ngcontent-%COMP%]:hover{border-color:var(--mat-sys-outline-variant);background:var(--mat-sys-surface-container-low)}.templates-page__card--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);box-shadow:0 0 0 1px var(--mat-sys-primary)}.templates-page__card-header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--gns3-density-space-3)}.templates-page__card-body[_ngcontent-%COMP%]{flex:1;min-width:0;padding:14px 0 12px}.templates-page__card-body[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{display:-webkit-box;overflow:hidden;margin:0 0 9px;color:var(--mat-sys-on-surface);font-size:17px;font-weight:650;line-height:1.35;overflow-wrap:anywhere;-webkit-box-orient:vertical;-webkit-line-clamp:2}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%]{display:grid;gap:8px;margin:16px 0 0}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{min-width:0;margin:0;overflow:hidden;color:var(--mat-sys-on-surface);font-size:13px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] .templates-page__card-tags-row[_ngcontent-%COMP%]{align-items:flex-start}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd.templates-page__card-tags[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px;overflow:visible;white-space:normal}.templates-page__card-actions[_ngcontent-%COMP%]{justify-content:flex-end;min-height:33px;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__grid-paginator[_ngcontent-%COMP%]{grid-column:1/-1;width:100%;border-radius:12px;background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container));--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__empty[_ngcontent-%COMP%]{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:230px;padding:32px;color:var(--mat-sys-on-surface-variant);text-align:center}.templates-page__empty[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{width:48px;height:48px;font-size:48px;opacity:.55}.templates-page__empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:12px 0 0;color:var(--mat-sys-on-surface);font-size:17px}.templates-page__empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:5px 0 0;font-size:14px}.templates-page__details[_ngcontent-%COMP%]{position:sticky;top:16px;flex:0 0 clamp(390px,31vw,480px);display:flex;min-height:380px;max-height:calc(100vh - 176px);flex-direction:column;overflow:hidden;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 60%,transparent);border-radius:16px;background:var(--mat-sys-surface);box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent);animation:_ngcontent-%COMP%_templates-slide-in var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard)}.templates-page__details-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:var(--gns3-density-space-3);min-height:56px;box-sizing:border-box;padding:8px 10px 8px 16px;border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 72%,var(--mat-sys-surface))}.templates-page__details-header[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-primary-container)}.templates-page__details-heading[_ngcontent-%COMP%]{display:flex;min-width:0;align-items:center;gap:var(--gns3-density-space-3)}.templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;margin:0;color:var(--mat-sys-on-primary-container);font-size:19px;font-weight:650;line-height:1.25;text-overflow:ellipsis;white-space:nowrap}.templates-page__details-title-line[_ngcontent-%COMP%]{display:flex;flex:1;min-width:0;align-items:center;gap:var(--gns3-density-space-2)}.templates-page__details-title-line[_ngcontent-%COMP%] .templates-page__type-badge[_ngcontent-%COMP%]{flex:0 0 auto}.templates-page__details-body[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:12px 20px}.templates-page__description[_ngcontent-%COMP%]{padding:10px 0 14px;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__description[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.6px;text-transform:uppercase}.templates-page__description[_ngcontent-%COMP%] app-markdown-viewer[_ngcontent-%COMP%]{display:block;margin-top:8px;padding:2px 12px;border-radius:10px;background:var(--mat-sys-surface-container-low);overflow-wrap:anywhere;--markdown-viewer-font-size: 13px;--markdown-viewer-line-height: 1.5;--markdown-viewer-heading-scale: .85}.templates-page__detail-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:22px 105px minmax(0,1fr);align-items:center;gap:var(--gns3-density-space-3);min-height:40px;box-sizing:border-box;padding:8px 0;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__detail-row[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:19px;height:19px;color:var(--mat-sys-primary);font-size:19px}.templates-page__detail-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:12px;font-weight:650;letter-spacing:.5px;text-transform:uppercase;white-space:nowrap}.templates-page__detail-row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{min-width:0;color:var(--mat-sys-on-surface);font-size:14px;font-weight:500;line-height:1.45;text-align:right;overflow-wrap:anywhere}.templates-page__detail-row--stacked[_ngcontent-%COMP%]{align-items:start}.templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__mono[_ngcontent-%COMP%], .templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__path[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-family:var(--gns3-font-code);font-size:12px;word-break:break-all}.templates-page__tags[_ngcontent-%COMP%]{border-bottom:0}.templates-page__tags[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:7px}.templates-page__tag[_ngcontent-%COMP%]{padding:5px 9px;border-radius:14px;color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container);font-size:11px;font-weight:550}.templates-page__details-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(105px,1fr));gap:var(--gns3-density-space-2);padding:14px 16px 18px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-surface-container) 72%,transparent)}button.templates-page__details-action[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-on-surface-variant);height:40px;border-radius:12px;color:var(--details-action-color);border-color:color-mix(in srgb,var(--details-action-color) 48%,transparent);font-size:13px;font-weight:500}button.templates-page__details-action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--details-action-color)}button.templates-page__details-action--edit[_ngcontent-%COMP%], button.templates-page__details-action--duplicate[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-primary)}button.templates-page__details-action--delete[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-error)}[data-density=compact][_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%]{min-height:40px;height:40px}[data-density=compact][_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%]{width:40px;height:40px;--mat-icon-button-state-layer-size: 40px}[data-density=compact][_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%]{min-height:48px;padding-block:4px}[data-density=compact][_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:18px}[data-density=compact][_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%]{padding-block:8px}[data-density=compact][_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%]{min-height:36px;padding-block:6px}[data-density=compact][_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%]{padding:12px}@keyframes _ngcontent-%COMP%_templates-slide-in{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@media(max-width:1400px){.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__main[_ngcontent-%COMP%]{flex-direction:column}.templates-page__table-container[_ngcontent-%COMP%], .templates-page__grid[_ngcontent-%COMP%], .templates-page__details[_ngcontent-%COMP%]{width:100%}.templates-page__details[_ngcontent-%COMP%]{position:static;flex-basis:auto;max-height:none}}@media(max-width:900px){.templates-page__header[_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column}.templates-page__header-actions[_ngcontent-%COMP%]{width:100%}.templates-page__toolbar[_ngcontent-%COMP%]{align-items:stretch;flex-direction:column}.templates-page__toolbar-actions[_ngcontent-%COMP%]{width:100%}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{flex:1;width:auto}}@media(max-width:640px){.templates-page__header[_ngcontent-%COMP%]{padding:20px 16px 12px}.templates-page__header-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{width:100%;padding-inline:10px}.templates-page__scopes[_ngcontent-%COMP%]{overflow-x:auto;padding-inline:16px}.templates-page__scope[_ngcontent-%COMP%]{flex:0 0 auto;padding-inline:12px}.templates-page__toolbar[_ngcontent-%COMP%], .templates-page__main[_ngcontent-%COMP%]{padding-inline:16px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__view-toggle[_ngcontent-%COMP%]{grid-column:1/-1;justify-self:end}.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.templates-page__details[_ngcontent-%COMP%]{min-width:0}}',"[_nghost-%COMP%]{display:block;min-width:0;container-type:inline-size}.fr-switch__input-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 var(--gns3-density-space-4)}@container (max-width: 480px){.fr-switch__input-grid[_ngcontent-%COMP%]{grid-template-columns:minmax(0,1fr)}}.fr-switch__add-btn[_ngcontent-%COMP%]{display:flex;justify-content:center;margin-bottom:16px}.fr-switch__add-btn[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:80%}"],changeDetection:0})}return n})();var cj=(()=>{class n{getConsoleTypes(){return["telnet","ssh","none"]}getOnCloseoptions(){return[["Power off the VM","power_off"],["Send the shutdown signal (ACPI)","shutdown_signal"],["Save the VM state","save_vm_state"]]}getCategories(){return[["Default","guest"],["Routers","router"],["Switches","switch"],["End devices","guest"],["Security devices","firewall"]]}getNetworkTypes(){return["PCnet-PCI II (Am79C970A)","PCNet-FAST III (Am79C973)","Intel PRO/1000 MT Desktop (82540EM)","Intel PRO/1000 T Server (82543GC)","Intel PRO/1000 MT Server (82545EM)","Paravirtualized Network (virtio-net)"]}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var MPe=(n,o)=>o[1];function SPe(n,o){n&1&&(r(0,"span",33)(1,"mat-icon"),c(2,"tune"),l(),c(3,"General"),l())}function kPe(n,o){if(n&1){let e=R();r(0,"mat-chip-row",34),_("removed",function(){let i=y(e).$implicit,a=h(2);return w(a.removeTag(i))}),c(1),r(2,"button",35)(3,"mat-icon"),c(4,"cancel"),l()()()}if(n&2){let e=o.$implicit;v("editable",!1),Ce("title",e),m(),X(" ",e," "),m(),Ce("aria-label","Remove tag "+e)}}function PPe(n,o){if(n&1&&(r(0,"mat-option",24),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function TPe(n,o){if(n&1&&(r(0,"mat-option",24),c(1),l()),n&2){let e=o.$implicit;v("value",e[1]),m(),X(" ",e[0]," ")}}function EPe(n,o){n&1&&(r(0,"span",33)(1,"mat-icon"),c(2,"lan"),l(),c(3,"Network"),l())}function OPe(n,o){n&1&&(r(0,"span",33)(1,"mat-icon"),c(2,"bar_chart"),l(),c(3,"Usage"),l())}function DPe(n,o){if(n&1){let e=R();r(0,"mat-tab-group")(1,"mat-tab"),se(2,SPe,4,0,"ng-template",13),r(3,"h2",14),c(4,"General settings"),l(),r(5,"form",15)(6,"mat-form-field",16)(7,"mat-label"),c(8,"Name"),l(),L(9,"input",17),l(),r(10,"div",18)(11,"mat-form-field",19)(12,"mat-label"),c(13,"Tags"),l(),r(14,"input",20),_("matChipInputTokenEnd",function(i){y(e);let a=h();return w(a.addTag(i))}),l()(),r(15,"mat-chip-grid",21,0),Q(17,kPe,5,4,"mat-chip-row",22,Oe),l()(),r(19,"mat-form-field",16)(20,"mat-label"),c(21,"Console type"),l(),r(22,"mat-select",23),Q(23,PPe,2,2,"mat-option",24,Oe),l()(),r(25,"mat-checkbox",25),c(26," Auto start console "),l(),r(27,"mat-form-field",16)(28,"mat-label"),c(29,"RAM"),l(),L(30,"input",26),r(31,"span",27),c(32,"MB"),l()(),r(33,"mat-form-field",16)(34,"mat-label"),c(35,"On close"),l(),r(36,"mat-select",28),Q(37,TPe,2,2,"mat-option",24,MPe),l()(),r(39,"mat-checkbox",29),c(40," Start VM in headless mode "),l()()(),r(41,"mat-tab"),se(42,EPe,4,0,"ng-template",13),r(43,"h2",14),c(44,"Network settings"),l(),r(45,"form",15)(46,"mat-checkbox",30),c(47," Allow GNS3 to use any configured VirtualBox adapter "),l(),r(48,"button",31),_("click",function(){y(e);let i=h();return w(i.openCustomAdaptersDialog())}),c(49,"Custom Adapters"),l()()(),r(50,"mat-tab"),se(51,OPe,4,0,"ng-template",13),r(52,"h2",14),c(53,"Usage notes"),l(),r(54,"form",15)(55,"mat-form-field",16)(56,"mat-label"),c(57,"Usage"),l(),L(58,"textarea",32),l()()()()}if(n&2){let e=Te(16),t=h();m(5),v("formGroup",t.generalSettingsForm),m(9),v("matChipInputFor",e)("matChipInputSeparatorKeyCodes",t.separatorKeysCodes),m(),ne("gns3-chip-field__values--empty",((t.node==null||t.node.tags==null?null:t.node.tags.length)??0)===0),m(2),K(t.node==null?null:t.node.tags),m(6),K(t.consoleTypes),m(14),K(t.onCloseOptions),m(8),v("formGroup",t.generalSettingsForm),m(9),v("formGroup",t.generalSettingsForm)}}function IPe(n,o){n&1&&L(0,"mat-spinner",12)}function APe(n,o){n&1&&c(0," Apply ")}var dj=(()=>{class n{dialogRef=f(We);dialog=f(Xe);nodeService=f(ft);toasterService=f(re);formBuilder=f(Ai);virtualBoxConfigurationService=f(cj);cd=f(oe);controller;node;name;generalSettingsForm;consoleTypes=[];onCloseOptions=[];separatorKeysCodes=[13,188];networkTypes=[];isApplying=z(!1);constructor(){this.generalSettingsForm=this.formBuilder.group({name:new Ge("",Ue.required),console_type:new Ge(""),console_auto_start:new Ge(!1),ram:new Ge("",Ue.required),on_close:new Ge(""),headless:new Ge(!1),use_any_adapter:new Ge(!1),usage:new Ge("")})}ngOnInit(){this.nodeService.getNode(this.controller,this.node).subscribe({next:e=>{this.node=e,this.name=e.name,this.generalSettingsForm.patchValue({name:e.name,console_type:e.console_type||"",console_auto_start:e.console_auto_start||!1,ram:e.properties.ram||"",on_close:e.properties.on_close||"",headless:e.properties.headless||!1,use_any_adapter:e.properties.use_any_adapter||!1,usage:e.properties.usage||""}),this.node.tags||(this.node.tags=[]),this.getConfiguration(),this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load node";this.toasterService.error(t),this.cd.markForCheck()}})}getConfiguration(){this.consoleTypes=this.virtualBoxConfigurationService.getConsoleTypes(),this.onCloseOptions=this.virtualBoxConfigurationService.getOnCloseoptions(),this.networkTypes=this.virtualBoxConfigurationService.getNetworkTypes()}openCustomAdaptersDialog(){let e=this.node.port_name_format||"Ethernet{0}",t=this.node.port_segment_size||0,i=this.node.properties.adapter_type||"e1000",a=this.node.properties.adapters||0,s=this.node.custom_adapters||[],d=[];for(let u=0;u<a;u++){let g=s.find(C=>C.adapter_number===u);if(g)d.push({adapter_number:g.adapter_number,adapter_type:g.adapter_type,port_name:g.port_name,mac_address:g.mac_address||""});else{let C;if(t>0){let M=Math.floor(u/t),x=u%t;C=e.replace("{0}",String(M*t+x))}else C=e.replace("{0}",String(u));d.push({adapter_number:u,adapter_type:i,port_name:C,mac_address:""})}}this.dialog.open(sd,{panelClass:["custom-adapters-dialog-panel","dialog-extra-large-panel"],data:{adapters:d,networkTypes:this.networkTypes,portNameFormat:e,portSegmentSize:t,defaultAdapterType:i,currentAdapters:a}}).afterClosed().subscribe(u=>{u&&(this.node.custom_adapters=u.adapters,u.requiredAdapters!==void 0&&(this.node.properties.adapters=u.requiredAdapters),this.cd.markForCheck())})}onSaveClick(){if(!this.isApplying())if(this.generalSettingsForm.valid){let e=this.generalSettingsForm.value;this.node.name=e.name,this.node.console_type=e.console_type,this.node.console_auto_start=e.console_auto_start,this.node.properties.ram=e.ram,this.node.properties.on_close=e.on_close,this.node.properties.headless=e.headless,this.node.properties.use_any_adapter=e.use_any_adapter,this.node.properties.usage=e.usage,this.isApplying.set(!0),this.nodeService.updateNodeWithCustomAdapters(this.controller,this.node).subscribe({next:()=>{this.toasterService.success(`Node ${this.node.name} updated.`),this.onCancelClick()},error:t=>{let i=t?.error?.message||t?.message||"Failed to update node";this.toasterService.error(i),this.isApplying.set(!1),this.cd.markForCheck()}})}else this.toasterService.error("Fill all required fields.")}onCancelClick(){this.dialogRef.close()}addTag(e){let t=(e.value||"").trim();t&&this.node&&(this.node.tags||(this.node.tags=[]),this.node.tags.push(t)),e.chipInput&&e.chipInput.clear()}removeTag(e){if(!this.node.tags)return;let t=this.node.tags.indexOf(e);t>=0&&this.node.tags.splice(t,1)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-configurator-virtualbox"]],decls:20,vars:4,consts:[["chipList",""],["mat-dialog-title","",1,"node-config__header"],[1,"node-config__title"],["aria-hidden","true"],["mat-icon-button","","type","button","aria-label","Close node configuration",1,"node-config__close",3,"click"],[1,"modal-form-container"],[1,"content"],[1,"default-content"],[1,"matCard"],["mat-dialog-actions",""],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"],["diameter","20"],["mat-tab-label",""],[1,"node-config__section-heading"],[1,"form-container",3,"formGroup"],["appearance","outline","subscriptSizing","dynamic",1,"form-field"],["matInput","","formControlName","name","type","text"],[1,"gns3-chip-field"],["floatLabel","always","appearance","outline","subscriptSizing","dynamic",1,"form-field","tags-field"],["matInput","","placeholder","Add tags",3,"matChipInputTokenEnd","matChipInputFor","matChipInputSeparatorKeyCodes"],["aria-label","Tags",1,"gns3-chip-field__values"],[3,"editable"],["formControlName","console_type"],[3,"value"],["formControlName","console_auto_start"],["matInput","","formControlName","ram","type","number"],["matSuffix",""],["formControlName","on_close"],["formControlName","headless"],["formControlName","use_any_adapter"],["mat-raised-button","","color","primary",3,"click"],["matInput","","formControlName","usage",1,"node-config__usage-textarea"],[1,"node-config__tab-label"],[3,"removed","editable"],["matChipRemove","","type","button"]],template:function(t,i){t&1&&(r(0,"div",1)(1,"h1",2),c(2,"Configure Node "),r(3,"span",3),c(4,"\u2014"),l(),c(5),l(),r(6,"button",4),_("click",function(){return i.onCancelClick()}),r(7,"mat-icon"),c(8,"close"),l()()(),r(9,"div",5)(10,"div",6)(11,"div",7)(12,"mat-card",8),T(13,DPe,59,7,"mat-tab-group"),l()()()(),r(14,"div",9)(15,"button",10),_("click",function(){return i.onCancelClick()}),c(16,"Cancel"),l(),r(17,"button",11),_("click",function(){return i.onSaveClick()}),T(18,IPe,1,0,"mat-spinner",12)(19,APe,1,0),l()()),t&2&&(m(5),X(" VirtualBox VM ",i.name),m(8),E(i.name?13:-1),m(4),v("disabled",i.isApplying()),m(),E(i.isApplying()?18:19))},dependencies:[fe,St,Ct,At,No,Nt,vt,It,Ut,Yt,ke,qe,Qe,hn,Zn,bo,Ir,Xo,Yo,we,Pe,Ve,oi,ye,Ee,ot,ct,nt,Y,he,Be,ri,bi,xi,hi,fi,ie,ce,Rt,Gt,rt,mt],encapsulation:2,changeDetection:0})}return n})();var mj=(()=>{class n{getConsoleTypes(){return["telnet","ssh","none"]}getOnCloseoptions(){return[["Power off the VM","power_off"],["Send the shutdown signal (ACPI)","shutdown_signal"],["Save the VM state","save_vm_state"]]}getCategories(){return[["Default","guest"],["Routers","router"],["Switches","switch"],["End devices","guest"],["Security devices","firewall"]]}getNetworkTypes(){return["default","e1000","e1000e","flexible","vlance","vmxnet","vmxnet2","vmxnet3"]}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var NPe=(n,o)=>o[1];function FPe(n,o){n&1&&(r(0,"span",32)(1,"mat-icon"),c(2,"tune"),l(),c(3,"General"),l())}function RPe(n,o){if(n&1){let e=R();r(0,"mat-chip-row",33),_("removed",function(){let i=y(e).$implicit,a=h(2);return w(a.removeTag(i))}),c(1),r(2,"button",34)(3,"mat-icon"),c(4,"cancel"),l()()()}if(n&2){let e=o.$implicit;v("editable",!1),Ce("title",e),m(),X(" ",e," "),m(),Ce("aria-label","Remove tag "+e)}}function zPe(n,o){if(n&1&&(r(0,"mat-option",24),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function LPe(n,o){if(n&1&&(r(0,"mat-option",24),c(1),l()),n&2){let e=o.$implicit;v("value",e[1]),m(),X(" ",e[0]," ")}}function VPe(n,o){n&1&&(r(0,"span",32)(1,"mat-icon"),c(2,"lan"),l(),c(3,"Network"),l())}function BPe(n,o){n&1&&(r(0,"span",32)(1,"mat-icon"),c(2,"bar_chart"),l(),c(3,"Usage"),l())}function jPe(n,o){if(n&1){let e=R();r(0,"mat-tab-group")(1,"mat-tab"),se(2,FPe,4,0,"ng-template",13),r(3,"h2",14),c(4,"General settings"),l(),r(5,"form",15)(6,"mat-form-field",16)(7,"mat-label"),c(8,"Name"),l(),L(9,"input",17),l(),r(10,"div",18)(11,"mat-form-field",19)(12,"mat-label"),c(13,"Tags"),l(),r(14,"input",20),_("matChipInputTokenEnd",function(i){y(e);let a=h();return w(a.addTag(i))}),l()(),r(15,"mat-chip-grid",21,0),Q(17,RPe,5,4,"mat-chip-row",22,Oe),l()(),r(19,"mat-form-field",16)(20,"mat-label"),c(21,"Console type"),l(),r(22,"mat-select",23),Q(23,zPe,2,2,"mat-option",24,Oe),l()(),r(25,"mat-checkbox",25),c(26," Auto start console "),l(),r(27,"mat-form-field",16)(28,"mat-label"),c(29,"On close"),l(),r(30,"mat-select",26),Q(31,LPe,2,2,"mat-option",24,NPe),l()(),r(33,"mat-checkbox",27),c(34," Start VM in headless mode "),l(),r(35,"mat-checkbox",28),c(36," Use a linked base VM (experimental) "),l()()(),r(37,"mat-tab"),se(38,VPe,4,0,"ng-template",13),r(39,"h2",14),c(40,"Network settings"),l(),r(41,"form",15)(42,"mat-checkbox",29),c(43," Allow GNS3 to override non custom VMware adapter "),l(),r(44,"button",30),_("click",function(){y(e);let i=h();return w(i.openCustomAdaptersDialog())}),c(45,"Custom Adapters"),l()()(),r(46,"mat-tab"),se(47,BPe,4,0,"ng-template",13),r(48,"h2",14),c(49,"Usage notes"),l(),r(50,"form",15)(51,"mat-form-field",16)(52,"mat-label"),c(53,"Usage"),l(),L(54,"textarea",31),l()()()()}if(n&2){let e=Te(16),t=h();m(5),v("formGroup",t.generalSettingsForm),m(9),v("matChipInputFor",e)("matChipInputSeparatorKeyCodes",t.separatorKeysCodes),m(),ne("gns3-chip-field__values--empty",((t.node==null||t.node.tags==null?null:t.node.tags.length)??0)===0),m(2),K(t.node==null?null:t.node.tags),m(6),K(t.consoleTypes),m(8),K(t.onCloseOptions),m(10),v("formGroup",t.generalSettingsForm),m(9),v("formGroup",t.generalSettingsForm)}}function $Pe(n,o){n&1&&L(0,"mat-spinner",12)}function HPe(n,o){n&1&&c(0," Apply ")}var pj=(()=>{class n{dialogRef=f(We);dialog=f(Xe);nodeService=f(ft);toasterService=f(re);formBuilder=f(Ai);vmwareConfigurationService=f(mj);cd=f(oe);controller;node;name;generalSettingsForm;separatorKeysCodes=[13,188];consoleTypes=[];onCloseOptions=[];networkTypes=[];isApplying=z(!1);constructor(){this.generalSettingsForm=this.formBuilder.group({name:new Ge("",Ue.required),console_type:new Ge(""),console_auto_start:new Ge(!1),on_close:new Ge(""),headless:new Ge(!1),linked_clone:new Ge(!1),use_any_adapter:new Ge(!1),usage:new Ge("")})}ngOnInit(){this.nodeService.getNode(this.controller,this.node).subscribe({next:e=>{this.node=e,this.name=e.name,this.generalSettingsForm.patchValue({name:e.name,console_type:e.console_type||"",console_auto_start:e.console_auto_start||!1,on_close:e.properties.on_close||"",headless:e.properties.headless||!1,linked_clone:e.properties.linked_clone||!1,use_any_adapter:e.properties.use_any_adapter||!1,usage:e.properties.usage||""}),this.node.tags||(this.node.tags=[]),this.getConfiguration(),this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load node";this.toasterService.error(t),this.cd.markForCheck()}})}getConfiguration(){this.consoleTypes=this.vmwareConfigurationService.getConsoleTypes(),this.onCloseOptions=this.vmwareConfigurationService.getOnCloseoptions(),this.networkTypes=this.vmwareConfigurationService.getNetworkTypes()}openCustomAdaptersDialog(){let e=this.node.port_name_format||"Ethernet{0}",t=this.node.port_segment_size||0,i=this.node.properties.adapter_type||"e1000",a=this.node.properties.adapters||0,s=this.node.custom_adapters||[],d=[];for(let u=0;u<a;u++){let g=s.find(C=>C.adapter_number===u);if(g)d.push({adapter_number:g.adapter_number,adapter_type:g.adapter_type,port_name:g.port_name,mac_address:g.mac_address||""});else{let C;if(t>0){let M=Math.floor(u/t),x=u%t;C=e.replace("{0}",String(M*t+x))}else C=e.replace("{0}",String(u));d.push({adapter_number:u,adapter_type:i,port_name:C,mac_address:""})}}this.dialog.open(sd,{panelClass:["custom-adapters-dialog-panel","dialog-extra-large-panel"],data:{adapters:d,networkTypes:this.networkTypes,portNameFormat:e,portSegmentSize:t,defaultAdapterType:i,currentAdapters:a}}).afterClosed().subscribe(u=>{u&&(this.node.custom_adapters=u.adapters,u.requiredAdapters!==void 0&&(this.node.properties.adapters=u.requiredAdapters),this.cd.markForCheck())})}onSaveClick(){if(!this.isApplying())if(this.generalSettingsForm.valid){let e=this.generalSettingsForm.value;this.node.name=e.name,this.node.console_type=e.console_type,this.node.console_auto_start=e.console_auto_start,this.node.properties.on_close=e.on_close,this.node.properties.headless=e.headless,this.node.properties.linked_clone=e.linked_clone,this.node.properties.use_any_adapter=e.use_any_adapter,this.node.properties.usage=e.usage,this.isApplying.set(!0),this.nodeService.updateNodeWithCustomAdapters(this.controller,this.node).subscribe({next:()=>{this.toasterService.success(`Node ${this.node.name} updated.`),this.onCancelClick()},error:t=>{let i=t?.error?.message||t?.message||"Failed to update node";this.toasterService.error(i),this.isApplying.set(!1)}})}else this.toasterService.error("Fill all required fields.")}onCancelClick(){this.dialogRef.close()}addTag(e){let t=(e.value||"").trim();t&&this.node&&(this.node.tags||(this.node.tags=[]),this.node.tags.push(t)),e.chipInput&&e.chipInput.clear()}removeTag(e){if(!this.node.tags)return;let t=this.node.tags.indexOf(e);t>=0&&this.node.tags.splice(t,1)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-configurator-vmware"]],decls:20,vars:4,consts:[["chipList",""],["mat-dialog-title","",1,"node-config__header"],[1,"node-config__title"],["aria-hidden","true"],["mat-icon-button","","type","button","aria-label","Close node configuration",1,"node-config__close",3,"click"],[1,"modal-form-container"],[1,"content"],[1,"default-content"],[1,"matCard"],["mat-dialog-actions",""],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"],["diameter","20"],["mat-tab-label",""],[1,"node-config__section-heading"],[1,"form-container",3,"formGroup"],["appearance","outline","subscriptSizing","dynamic",1,"form-field"],["matInput","","formControlName","name","type","text"],[1,"gns3-chip-field"],["floatLabel","always","appearance","outline","subscriptSizing","dynamic",1,"form-field","tags-field"],["matInput","","placeholder","Add tags",3,"matChipInputTokenEnd","matChipInputFor","matChipInputSeparatorKeyCodes"],["aria-label","Tags",1,"gns3-chip-field__values"],[3,"editable"],["formControlName","console_type"],[3,"value"],["formControlName","console_auto_start"],["formControlName","on_close"],["formControlName","headless"],["formControlName","linked_clone"],["formControlName","use_any_adapter"],["mat-raised-button","","color","primary",3,"click"],["matInput","","formControlName","usage",1,"node-config__usage-textarea"],[1,"node-config__tab-label"],[3,"removed","editable"],["matChipRemove","","type","button"]],template:function(t,i){t&1&&(r(0,"div",1)(1,"h1",2),c(2,"Configure Node "),r(3,"span",3),c(4,"\u2014"),l(),c(5),l(),r(6,"button",4),_("click",function(){return i.onCancelClick()}),r(7,"mat-icon"),c(8,"close"),l()()(),r(9,"div",5)(10,"div",6)(11,"div",7)(12,"mat-card",8),T(13,jPe,55,7,"mat-tab-group"),l()()()(),r(14,"div",9)(15,"button",10),_("click",function(){return i.onCancelClick()}),c(16,"Cancel"),l(),r(17,"button",11),_("click",function(){return i.onSaveClick()}),T(18,$Pe,1,0,"mat-spinner",12)(19,HPe,1,0),l()()),t&2&&(m(5),X(" VMware VM ",i.name),m(8),E(i.name?13:-1),m(4),v("disabled",i.isApplying()),m(),E(i.isApplying()?18:19))},dependencies:[fe,St,Ct,At,Nt,vt,It,Ut,Yt,ke,qe,Qe,hn,Zn,bo,Ir,Xo,Yo,we,Pe,Ve,ye,Ee,ot,ct,nt,Y,he,Be,ri,bi,xi,hi,fi,ie,ce,Rt,Gt,rt,mt],encapsulation:2,changeDetection:0})}return n})();function UPe(n,o){n&1&&(r(0,"div",6),L(1,"mat-spinner",11),l())}function WPe(n,o){if(n&1){let e=R();r(0,"mat-chip-row",34),_("removed",function(){let i=y(e).$implicit,a=h(2);return w(a.removeTag(i))}),c(1),r(2,"button",35)(3,"mat-icon"),c(4,"cancel"),l()()()}if(n&2){let e=o.$implicit;v("editable",!1),Ce("title",e),m(),X(" ",e," "),m(),Ce("aria-label","Remove tag "+e)}}function GPe(n,o){if(n&1&&(r(0,"mat-option",28),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function qPe(n,o){if(n&1){let e=R();r(0,"div",12)(1,"div",13)(2,"span",14)(3,"mat-icon"),c(4,"tune"),l(),c(5,"General"),l()()(),r(6,"div",15)(7,"div",16)(8,"mat-card",17)(9,"h2",18),c(10,"General settings"),l(),r(11,"div",19)(12,"mat-form-field",20)(13,"mat-label"),c(14,"Name"),l(),r(15,"input",21),_("input",function(i){y(e);let a=h();return w(a.nodeName.set(i.target.value))}),l()(),r(16,"div",22)(17,"mat-form-field",23)(18,"mat-label"),c(19,"Tags"),l(),r(20,"input",24),_("matChipInputTokenEnd",function(i){y(e);let a=h();return w(a.addTag(i))}),l()(),r(21,"mat-chip-grid",25,0),Q(23,WPe,5,4,"mat-chip-row",26,Oe),l()(),r(25,"mat-form-field",20)(26,"mat-label"),c(27,"Console type"),l(),r(28,"mat-select",27),_("valueChange",function(i){y(e);let a=h();return w(a.consoleType.set(i))}),Q(29,GPe,2,2,"mat-option",28,Oe),l()(),r(31,"div",29)(32,"app-netmiko-device-type-select",30),rn("valueChange",function(i){y(e);let a=h();return Xt(a.netmikoDeviceType,i)||(a.netmikoDeviceType=i),w(i)}),l(),r(33,"mat-form-field",31)(34,"mat-label"),c(35,"Default username"),l(),r(36,"input",32),_("input",function(i){y(e);let a=h();return w(a.defaultUsername.set(i.target.value))}),l()(),r(37,"mat-form-field",31)(38,"mat-label"),c(39,"Default password"),l(),r(40,"input",32),_("input",function(i){y(e);let a=h();return w(a.defaultPassword.set(i.target.value))}),l()()(),r(41,"mat-checkbox",33),_("change",function(i){y(e);let a=h();return w(a.consoleAutoStart.set(i.checked))}),c(42," Auto start console "),l()()()()()}if(n&2){let e=Te(22),t=h();m(15),v("value",t.nodeName()),m(5),v("matChipInputFor",e)("matChipInputSeparatorKeyCodes",t.separatorKeysCodes),m(),ne("gns3-chip-field__values--empty",((t.node==null||t.node.tags==null?null:t.node.tags.length)??0)===0),m(2),K(t.node==null?null:t.node.tags),m(5),v("value",t.consoleType()),m(),K(t.consoleTypes),m(3),an("value",t.netmikoDeviceType),v("controller",t.controller),m(4),v("value",t.defaultUsername())("placeholder",t.defaultUsernamePlaceholder()||"Username to log into this node"),m(4),v("value",t.defaultPassword())("placeholder",t.defaultPasswordPlaceholder()||"Password to log into this node"),m(),v("checked",t.consoleAutoStart())}}function QPe(n,o){n&1&&L(0,"mat-spinner",10)}function KPe(n,o){n&1&&c(0," Apply ")}var nS=(()=>{class n{dialogRef=f(We);nodeService=f(ft);templateService=f(fa);toasterService=f(re);vpcsConfigurationService=f(Jm);cd=f(oe);validationService=f(Hn);controller;node;name;separatorKeysCodes=[13,188];consoleTypes=[];nodeName=$("");consoleType=$("");consoleAutoStart=$(!1);netmikoDeviceType=$("");defaultUsername=$("");defaultPassword=$("");defaultUsernamePlaceholder=z("");defaultPasswordPlaceholder=z("");isApplying=z(!1);isLoading=z(!0);ngOnInit(){this.nodeService.getNode(this.controller,this.node).subscribe({next:e=>{this.node=e,this.name=e.name,this.nodeName.set(e.name||""),this.consoleType.set(e.console_type||""),this.consoleAutoStart.set(e.console_auto_start||!1),this.netmikoDeviceType.set(e.netmiko_device_type||""),this.defaultUsername.set(e.default_username||""),this.defaultPassword.set(e.default_password||""),(!e.default_username||!e.default_password)&&e.template_id&&this.templateService.list(this.controller).subscribe({next:t=>{let i=t.find(a=>a.template_id===e.template_id)?.appliance_metadata;i&&(this.defaultUsernamePlaceholder.set(e.default_username?"":i.default_username||""),this.defaultPasswordPlaceholder.set(e.default_password?"":i.default_password||""),this.cd.markForCheck())},error:()=>{}}),this.getConfiguration(),this.node.tags||(this.node.tags=[]),this.cd.markForCheck(),this.isLoading.set(!1),this.dialogRef.disableClose=!1},error:e=>{let t=e.error?.message||e.message||"Failed to load node";this.toasterService.error(t),this.cd.markForCheck(),this.isLoading.set(!1),this.dialogRef.disableClose=!1}})}getConfiguration(){this.consoleTypes=this.vpcsConfigurationService.getConsoleTypes()}onSaveClick(){if(this.isApplying())return;let e=this.validationService.required(this.nodeName(),"Name");if(!e.isValid){this.toasterService.error(e.errorMessage||"Name is required");return}let t=this.validationService.validateNetmikoDeviceType(this.netmikoDeviceType());if(!t.isValid){this.toasterService.error(t.errorMessage);return}this.node.name=this.nodeName(),this.node.console_type=this.consoleType(),this.node.console_auto_start=this.consoleAutoStart(),this.node.netmiko_device_type=this.netmikoDeviceType().trim()||null,this.node.default_username=this.defaultUsername().trim()||null,this.node.default_password=this.defaultPassword().trim()||null,this.isApplying.set(!0),this.dialogRef.disableClose=!0,this.nodeService.updateNode(this.controller,this.node).subscribe({next:()=>{this.toasterService.success(`Node ${this.node.name} updated.`),this.onCancelClick()},error:i=>{let a=i?.error?.message||i?.message||"Failed to update node";this.toasterService.error(a),this.isApplying.set(!1),this.dialogRef.disableClose=!1,this.cd.markForCheck()}})}onCancelClick(){this.dialogRef.close()}addTag(e){let t=(e.value||"").trim();t&&this.node&&(this.node.tags||(this.node.tags=[]),this.node.tags.push(t)),e.chipInput&&e.chipInput.clear()}removeTag(e){if(!this.node.tags)return;let t=this.node.tags.indexOf(e);t>=0&&this.node.tags.splice(t,1)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-configurator-vpcs"]],inputs:{nodeName:[1,"nodeName"],consoleType:[1,"consoleType"],consoleAutoStart:[1,"consoleAutoStart"],netmikoDeviceType:[1,"netmikoDeviceType"],defaultUsername:[1,"defaultUsername"],defaultPassword:[1,"defaultPassword"]},outputs:{nodeName:"nodeNameChange",consoleType:"consoleTypeChange",consoleAutoStart:"consoleAutoStartChange",netmikoDeviceType:"netmikoDeviceTypeChange",defaultUsername:"defaultUsernameChange",defaultPassword:"defaultPasswordChange"},decls:18,vars:4,consts:[["chipList",""],["mat-dialog-title","",1,"node-config__header"],[1,"node-config__title"],["aria-hidden","true"],["mat-icon-button","","type","button","aria-label","Close node configuration",1,"node-config__close",3,"click"],[1,"modal-form-container"],[1,"configurator-dialog-loading"],["mat-dialog-actions",""],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"],["diameter","20"],["diameter","40"],["role","tablist","aria-label","Node configuration sections",1,"node-config__single-tab"],["role","tab","aria-selected","true"],[1,"node-config__tab-label"],[1,"content"],[1,"default-content"],[1,"matCard"],[1,"node-config__section-heading"],[1,"form-container"],["appearance","outline","subscriptSizing","dynamic",1,"form-field"],["matInput","","type","text",3,"input","value"],[1,"gns3-chip-field"],["floatLabel","always","appearance","outline","subscriptSizing","dynamic",1,"form-field","tags-field"],["matInput","","placeholder","Add tags",3,"matChipInputTokenEnd","matChipInputFor","matChipInputSeparatorKeyCodes"],["aria-label","Tags",1,"gns3-chip-field__values"],[3,"editable"],[3,"valueChange","value"],[3,"value"],[1,"three-column-grid"],["subscriptSizing","fixed",1,"form-field",3,"valueChange","value","controller"],["appearance","outline","subscriptSizing","fixed",1,"form-field"],["matInput","","type","text",3,"input","value","placeholder"],[3,"change","checked"],[3,"removed","editable"],["matChipRemove","","type","button"]],template:function(t,i){t&1&&(r(0,"div",1)(1,"h1",2),c(2,"Configure Node "),r(3,"span",3),c(4,"\u2014"),l(),c(5),l(),r(6,"button",4),_("click",function(){return i.onCancelClick()}),r(7,"mat-icon"),c(8,"close"),l()()(),r(9,"div",5),T(10,UPe,2,0,"div",6)(11,qPe,43,13),l(),r(12,"div",7)(13,"button",8),_("click",function(){return i.onCancelClick()}),c(14,"Cancel"),l(),r(15,"button",9),_("click",function(){return i.onSaveClick()}),T(16,QPe,1,0,"mat-spinner",10)(17,KPe,1,0),l()()),t&2&&(m(5),X(" VPCS ",i.name),m(5),E(i.isLoading()?10:11),m(5),v("disabled",i.isApplying()||i.isLoading()),m(),E(i.isApplying()?16:17))},dependencies:[fe,St,ke,qe,Qe,hn,Zn,we,Pe,Ve,ye,Ee,ot,ct,nt,Y,he,Be,ri,bi,xi,hi,fi,ie,ce,Rt,Gt,rt,mt,po],encapsulation:2,changeDetection:0})}return n})();var iS=(()=>{class n{dialog=f(Xe);controller=ee(void 0);node=ee(void 0);conf={panelClass:["base-dialog-panel","configurator-dialog-panel","node-configurator-dialog-panel"],autoFocus:!1,disableClose:!0};dialogRef;configureNode(){let e=this.node();e.node_type==="vpcs"?this.dialogRef=this.dialog.open(nS,this.conf):e.node_type==="ethernet_hub"?this.dialogRef=this.dialog.open(QM,this.conf):e.node_type==="ethernet_switch"?this.dialogRef=this.dialog.open(qM,this.conf):e.node_type==="cloud"?this.dialogRef=this.dialog.open(jM,this.conf):e.node_type==="dynamips"?this.dialogRef=this.dialog.open(KM,this.conf):e.node_type==="iou"?this.dialogRef=this.dialog.open(XM,this.conf):e.node_type==="qemu"?this.dialogRef=this.dialog.open(eS,this.conf):e.node_type==="virtualbox"?this.dialogRef=this.dialog.open(dj,this.conf):e.node_type==="vmware"?this.dialogRef=this.dialog.open(pj,this.conf):e.node_type==="docker"?this.dialogRef=this.dialog.open(GM,ze(q({},this.conf),{panelClass:[...this.conf.panelClass,"docker-configurator-dialog-panel"]})):e.node_type==="nat"?this.dialogRef=this.dialog.open(YM,this.conf):e.node_type==="frame_relay_switch"?this.dialogRef=this.dialog.open(tS,this.conf):e.node_type==="atm_switch"&&(this.dialogRef=this.dialog.open(RM,ze(q({},this.conf),{panelClass:[...this.conf.panelClass,"atm-switch-config-panel"]})));let t=this.dialogRef.componentInstance;t.controller=this.controller(),t.node=e}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-config-node-action"]],inputs:{controller:[1,"controller"],node:[1,"node"]},decls:5,vars:0,consts:[["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&(r(0,"button",0),_("click",function(){return i.configureNode()}),r(1,"mat-icon"),c(2,"settings_applications"),l(),r(3,"span"),c(4,"Configure"),l()())},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();function uo(n,o){let e=0,t=0,i=a=>{e>=n||(e++,a&&t++,e===n&&o(t))};return{succeed:()=>i(!0),fail:()=>i(!1)}}function XPe(n,o){if(n&1){let e=R();r(0,"button",2),_("click",function(){y(e);let i=h();return w(i.startNodes())}),r(1,"mat-icon"),c(2,"play_arrow"),l(),r(3,"span"),c(4,"Start"),l()()}}function YPe(n,o){n&1&&(r(0,"button",1)(1,"mat-icon"),c(2,"play_arrow"),l(),r(3,"span"),c(4,"Start"),l()())}var oS=(()=>{class n{nodeService=f(ft);toasterService=f(re);cdr=f(oe);progressService=f(mo);controller=ee(void 0);nodes=ee(void 0);isNodeWithStoppedStatus;hasMissingImageNodes;ngOnChanges(e){e.nodes&&(this.isNodeWithStoppedStatus=!1,this.hasMissingImageNodes=!1,this.nodes().forEach(t=>{if(t.missing_image){this.hasMissingImageNodes=!0;return}(t.status==="stopped"||t.status==="suspended")&&(this.isNodeWithStoppedStatus=!0)}))}startNodes(){let e=(this.nodes()||[]).filter(i=>!i.missing_image);if(e.length===0)return;this.progressService.activate();let t=uo(e.length,i=>{this.progressService.deactivate(),i>0&&this.toasterService.success(`${i} ${i===1?"node":"nodes"} started.`)});e.forEach(i=>{this.nodeService.start(this.controller(),i).subscribe({next:()=>t.succeed(),error:a=>{t.fail();let s=a.error?.message||a.message||"Failed to start node";this.toasterService.error(s),this.cdr.markForCheck()}})})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-start-node-action"]],inputs:{controller:[1,"controller"],nodes:[1,"nodes"]},features:[Nn],decls:2,vars:1,consts:[["mat-menu-item",""],["mat-menu-item","","disabled","","matTooltip","A compatible image is required to start this node"],["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&T(0,XPe,5,0,"button",0)(1,YPe,5,0,"button",1),t&2&&E(i.isNodeWithStoppedStatus?0:i.hasMissingImageNodes?1:-1)},dependencies:[Y,ie,ce,it,ut,st,pt],encapsulation:2,changeDetection:0})}return n})();function ZPe(n,o){if(n&1){let e=R();r(0,"button",1),_("click",function(){y(e);let i=h();return w(i.suspendNodes())}),r(1,"mat-icon"),c(2,"pause"),l(),r(3,"span"),c(4,"Suspend"),l()()}}var aS=(()=>{class n{nodeService=f(ft);toasterService=f(re);cdr=f(oe);controller=ee(void 0);nodes=ee(void 0);isNodeWithStartedStatus;ngOnChanges(e){e.nodes&&(this.isNodeWithStartedStatus=!1,this.nodes().forEach(t=>{t.status==="started"&&(this.isNodeWithStartedStatus=!0)}))}suspendNodes(){let e=this.nodes()||[],t=uo(e.length,i=>{i>0&&this.toasterService.success(`${i} ${i===1?"node":"nodes"} suspended.`)});e.forEach(i=>{this.nodeService.suspend(this.controller(),i).subscribe({next:()=>t.succeed(),error:a=>{t.fail();let s=a.error?.message||a.message||"Failed to suspend node";this.toasterService.error(s),this.cdr.markForCheck()}})})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-suspend-node-action"]],inputs:{controller:[1,"controller"],nodes:[1,"nodes"]},features:[Nn],decls:1,vars:1,consts:[["mat-menu-item",""],["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&T(0,ZPe,5,0,"button",0),t&2&&E(i.isNodeWithStartedStatus?0:-1)},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();function JPe(n,o){if(n&1){let e=R();r(0,"button",1),_("click",function(){y(e);let i=h();return w(i.stopNodes())}),r(1,"mat-icon"),c(2,"stop"),l(),r(3,"span"),c(4,"Stop"),l()()}}var rS=(()=>{class n{nodeService=f(ft);toasterService=f(re);cdr=f(oe);progressService=f(mo);controller=ee(void 0);nodes=ee(void 0);isNodeWithStartedStatus;ngOnChanges(e){e.nodes&&(this.isNodeWithStartedStatus=!1,this.nodes().forEach(t=>{t.status==="started"&&(this.isNodeWithStartedStatus=!0)}))}stopNodes(){let e=this.nodes()||[];if(e.length===0)return;this.progressService.activate();let t=uo(e.length,i=>{this.progressService.deactivate(),i>0&&this.toasterService.success(`${i} ${i===1?"node":"nodes"} stopped.`)});e.forEach(i=>{this.nodeService.stop(this.controller(),i).subscribe({next:()=>t.succeed(),error:a=>{t.fail();let s=a.error?.message||a.message||"Failed to stop node";this.toasterService.error(s),this.cdr.markForCheck()}})})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-stop-node-action"]],inputs:{controller:[1,"controller"],nodes:[1,"nodes"]},features:[Nn],decls:1,vars:1,consts:[["mat-menu-item",""],["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&T(0,JPe,5,0,"button",0),t&2&&E(i.isNodeWithStartedStatus?0:-1)},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();function e3e(n,o){if(n&1){let e=R();r(0,"button",1),_("click",function(){y(e);let i=h();return w(i.reloadNodes())}),r(1,"mat-icon"),c(2,"refresh"),l(),r(3,"span"),c(4,"Reload"),l()()}}var sS=(()=>{class n{nodeService=f(ft);toasterService=f(re);cdr=f(oe);controller=ee(void 0);nodes=ee(void 0);filteredNodes=[];ngOnInit(){(this.nodes()||[]).forEach(t=>{!t.missing_image&&(t.node_type==="vpcs"||t.node_type==="qemu"||t.node_type==="virtualbox"||t.node_type==="vmware")&&this.filteredNodes.push(t)})}reloadNodes(){let e=uo(this.filteredNodes.length,t=>{t>0&&this.toasterService.success(`${t} ${t===1?"node":"nodes"} reloaded.`)});this.filteredNodes.forEach(t=>{this.nodeService.reload(this.controller(),t).subscribe({next:()=>e.succeed(),error:i=>{e.fail();let a=i.error?.message||i.message||"Failed to reload node";this.toasterService.error(a),this.cdr.markForCheck()}})})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-reload-node-action"]],inputs:{controller:[1,"controller"],nodes:[1,"nodes"]},decls:1,vars:1,consts:[["mat-menu-item",""],["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&T(0,e3e,5,0,"button",0),t&2&&E(i.filteredNodes.length>0?0:-1)},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();var kp=(()=>{class n{toasterService;constructor(e){this.toasterService=e}buildVncWebSocketUrl(e,t){return`${e.protocol==="https:"?"wss":"ws"}://${e.host}:${e.port}/${zi.current_version}/projects/${t.project_id}/nodes/${t.node_id}/console/vnc?token=${e.authToken}`}buildVncConsolePageUrl(e,t){let i=this.buildVncWebSocketUrl(e,t);return`assets/vnc-console/index.html?${new URLSearchParams({ws_url:i,node_name:t.name,node_id:t.node_id,project_id:t.project_id,autoconnect:"1"}).toString()}`}openVncConsole(e,t,i=!1){if(t.status!=="started"){this.toasterService.error("Node must be started before opening console");return}if(t.console_type!=="vnc"){this.toasterService.error(`Node console type is ${t.console_type}, not vnc`);return}try{let a=this.buildVncConsolePageUrl(e,t),s=10,d=1024+s,p=768+s;if(t.properties){let g=t.properties;if(g.console_resolution){let M=g.console_resolution.split("x");M.length===2&&(d=parseInt(M[0],10)+s,p=parseInt(M[1],10)+s)}}let u;if(i)u=window.open(a,"_blank");else{let g=`VNC-${t.name}`;u=window.open(a,g,`width=${d},height=${p}`)}(!u||u.closed||typeof u.closed>"u")&&this.toasterService.error("Popup was blocked. Please allow popups for this site.")}catch(a){this.toasterService.error(`Failed to open VNC console: ${a.message}`)}}static \u0275fac=function(t){return new(t||n)(_e(re))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var lS=(()=>{class n{nodeConsoleService=f(ga);vncConsoleService=f(kp);toasterService=f(re);router=f(Ft);mapSettingsService=f(ui);cdr=f(oe);controller=ee(void 0);project=ee(void 0);nodes=ee(void 0);openWebConsoleInline=new be;openConsole(){if(this.nodes().length!==1){this.toasterService.error("Inline web console is only supported for a single node.");return}let e=this.nodes()[0],t=this.controller(),i=this.project();if(!(!t||!i)){if(e.status!=="started"){this.toasterService.error(`Please start the node '${e.name}' before opening the console.`);return}if(e.console_type==="none"){this.toasterService.error(`Node '${e.name}' has no console configured.`);return}e.console_type==="vnc"||e.console_type&&e.console_type.startsWith("http")?this.openWebConsoleInline.emit({node:e,controller:t,project:i}):e.console_type==="telnet"||e.console_type==="ssh"||e.console_type==="docker_exec"?(this.mapSettingsService.logConsoleSubject.next(!0),setTimeout(()=>{this.nodeConsoleService.openConsoleForNode(e),this.cdr.markForCheck()},500)):this.toasterService.error(`Console type '${e.console_type}' is not supported for inline web console.`)}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-http-console-action"]],inputs:{controller:[1,"controller"],project:[1,"project"],nodes:[1,"nodes"]},outputs:{openWebConsoleInline:"openWebConsoleInline"},decls:5,vars:0,consts:[["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&(r(0,"button",0),_("click",function(){return i.openConsole()}),r(1,"mat-icon"),c(2,"web_asset"),l(),r(3,"span"),c(4,"Web console (Inline)"),l()())},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();var cS=(()=>{class n{nodeConsoleService=f(ga);vncConsoleService=f(kp);toasterService=f(re);router=f(Ft);controller=ee(void 0);nodes=ee(void 0);openConsole(){let e="",t=0;this.nodes().forEach(i=>{if(i.console_type!=="none")if(i.status==="started")if(i.console_type==="vnc")this.vncConsoleService.openVncConsole(this.controller(),i,!0);else if(i.console_type&&i.console_type.startsWith("http")){(i.console_host==="0.0.0.0"||i.console_host==="0:0:0:0:0:0:0:0"||i.console_host==="::")&&(i.console_host=this.controller().host);let a=`${i.console_type}://${i.console_host}:${i.console}`;window.open(a,"_blank")}else if(i.console_type==="telnet"||i.console_type==="ssh"||i.console_type==="docker_exec"){let a=this.router.url.split("/"),s=`/static/web-ui/${a[1]}/${a[2]}/${a[3]}/${a[4]}/nodes/${i.node_id}`;window.open(s,"_blank")}else this.toasterService.error(`Console type '${i.console_type}' not supported in new tab for node ${i.name}.`);else t++,e+=i.name+" "}),t>0&&this.toasterService.error("Please start the following nodes if you want to open consoles in new tabs: "+e)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-http-console-new-tab-action"]],inputs:{controller:[1,"controller"],nodes:[1,"nodes"]},decls:5,vars:0,consts:[["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&(r(0,"button",0),_("click",function(){return i.openConsole()}),r(1,"mat-icon"),c(2,"http"),l(),r(3,"span"),c(4,"Web console in new tab"),l()())},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();var b_={UKNOWN:"Unknown"},b4={CHROME:"Chrome",FIREFOX:"Firefox",SAFARI:"Safari",OPERA:"Opera",IE:"IE",MS_EDGE:"MS-Edge",MS_EDGE_CHROMIUM:"MS-Edge-Chromium",FB_MESSANGER:"FB-Messanger",SAMSUNG:"Samsung",UCBROWSER:"UC-Browser",UNKNOWN:b_.UKNOWN},dS={HTC:/HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*\bEVO\b|T-Mobile G1|Z520m|Android [0-9.]+; Pixel/,NEXUS_PHONE:/Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile|Nexus 4|Nexus 5|Nexus 6/,DELL:/Dell[;]? (Streak|Aero|Venue|Venue Pro|Flash|Smoke|Mini 3iX)|XCD28|XCD35|\b001DL\b|\b101DL\b|\bGS01\b/,MOTOROLA:new RegExp(`Motorola|DROIDX|DROID BIONIC|\\bDroid\\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|
|
||
A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|
|
||
MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|
|
||
ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|
|
||
WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|
|
||
XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|
|
||
XT910|XT912|XT928|XT926|XT915|XT919|XT925|XT1021|\\bMoto E\\b|XT1068|XT1092|XT1052`),SAMSUNG:new RegExp(`\\bSamsung\\b|SM-G950F|SM-G955F|SM-G9250|GT-19300|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|
|
||
GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|
|
||
GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|
|
||
GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|
|
||
GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|
|
||
GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|
|
||
GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|
|
||
GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|
|
||
GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|
|
||
GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|
|
||
GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|
|
||
GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|
|
||
GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|
|
||
GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|
|
||
GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|
|
||
GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|
|
||
GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|
|
||
GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|
|
||
SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|
|
||
SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|
|
||
SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|
|
||
SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|
|
||
SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|
|
||
SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|
|
||
SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|
|
||
SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|
|
||
SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|
|
||
SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|
|
||
SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|
|
||
SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|
|
||
SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|
|
||
SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|
|
||
SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|
|
||
SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|
|
||
SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|
|
||
SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|
|
||
SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|
|
||
SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|
|
||
SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|
|
||
SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|
|
||
SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|
|
||
SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|
|
||
SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|
|
||
SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|
|
||
SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|
|
||
SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|
|
||
SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|
|
||
SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|
|
||
SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|
|
||
GT-N7105|SCH-I535|SM-N900A|SM-N900T|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|
|
||
GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|
|
||
GT-B7610|GT-I5510|GT-S7582|GT-S7530E|GT-I8750|SM-G9006V|SM-G9008V|SM-G9009D|SM-G900A|SM-G900D|SM-G900F|
|
||
SM-G900H|SM-G900I|SM-G900J|SM-G900K|SM-G900L|SM-G900M|SM-G900P|SM-G900R4|SM-G900S|SM-G900T|SM-G900V|
|
||
SM-G900W8|SHV-E160K|SCH-P709|SCH-P729|SM-T2558|GT-I9205|SM-G9350|SM-J120F|SM-G920F|SM-G920V|SM-G930F|
|
||
SM-N910C|SM-A310F|GT-I9190|SM-J500FN|SM-G903F|SM-J330F`),LG:new RegExp(`\\bLG\\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS740|LS840|LS970|
|
||
LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|
|
||
C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|
|
||
LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|
|
||
VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802|
|
||
MS323|M257)`),SONY:/SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533/,ASUS:/Asus.*Galaxy|PadFone.*Mobile/,NOKIA_LUMIA:/Lumia [0-9]{3,4}/,MICROMAX:/Micromax.*\b(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)\b/,PALM:/PalmSource|Palm/,VERTU:/Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature/,PANTECH:new RegExp(`PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|
|
||
IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|
|
||
IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|
|
||
CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|
|
||
P2000|P7040|P7000|C790`),FLY:/IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250/,WIKO:new RegExp(`KITE 4G|HIGHWAY|GETAWAY|STAIRWAY|DARKSIDE|DARKFULL|DARKNIGHT|DARKMOON|SLIDE|WAX 4G|RAINBOW|BLOOM|
|
||
SUNSET|GOA(?!nna)|LENNY|BARRY|IGGY|OZZY|CINK FIVE|CINK PEAX|CINK PEAX 2|CINK SLIM|CINK SLIM 2|CINK +|
|
||
CINK KING|CINK PEAX|CINK SLIM|SUBLIM`),I_MOBILE:/i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)/,SIMVALLEY:/\b(SP-80|XT-930|SX-340|XT-930|SX-310|SP-360|SP60|SPT-800|SP-120|SPT-800|SP-140|SPX-5|SPX-8|SP-100|SPX-8|SPX-12)\b/,WOLFGANG:/AT-B24D|AT-AS50HD|AT-AS40W|AT-AS55HD|AT-AS45q2|AT-B26D|AT-AS50Q/,ALCATEL:/Alcatel|Mobile; rv:49.0|Mobile; ALCATEL 4052R; rv:48.0/,NINTENDO:/Nintendo (3DS|Switch)/,AMOI:/Amoi/,INQ:/INQ/,VITA:/\bVita\b/,BLACKBERRY:/\bBlackBerry\b|\bBB10\b|rim[0-9]+/,FIREFOX_OS:/\bFirefox-OS\b/,IPHONE:/\biPhone\b/,iPod:/\biPod\b/,ANDROID:/\bAndroid\b/,WINDOWS_PHONE:/\bWindows-Phone\b/,GENERIC_PHONE:new RegExp(`Tapatalk|PDA;|SAGEM|\\bmmp\\b|pocket|\\bpsp\\b|symbian|Smartphone|smartfon|treo|up.browser|
|
||
up.link|vodafone|\\bwap\\b|nokia|Nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser`)},C_={iPad:/iPad|iPad.*Mobile/,NexusTablet:/Android.*Nexus[\s]+(7|9|10)/,GoogleTablet:/Android.*Pixel C/,SamsungTablet:new RegExp(`SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|
|
||
GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|
|
||
SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|
|
||
GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|
|
||
SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|
|
||
GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|
|
||
SHV-E230S|SHW-M180K|SHW-M180L|SM-T865|SM-T290|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|
|
||
SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|
|
||
GT-I9200|GT-P5200|GT-P5210|GT-P5210X|SM-T385M|SM-P585M|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|
|
||
SM-P601|SM-P605|SM-P615|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|
|
||
GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|
|
||
SM-T510|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-T337V|SM-T537V|
|
||
SM-T707V|SM-T807V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T500|SM-T330|
|
||
SM-T530|SM-T705|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T537A|
|
||
SM-T707A|SM-T807A|SM-T237|SM-T807P|SM-P607T|SM-T217T|SM-T337T|SM-T807T|SM-T116NQ|SM-T116BU|SM-P550|
|
||
SM-T350|SM-T550|SM-T9000|SM-P9000|SM-T705Y|SM-T805|GT-P3113|SM-T710|SM-T810|SM-T815|SM-T360|SM-T533|
|
||
SM-T113|SM-T335|SM-T715|SM-T560|SM-T670|SM-T677|SM-T377|SM-T567|SM-T357T|SM-T555|SM-T561|SM-T713|
|
||
SM-T719|SM-T725|SM-T813|SM-T819|SM-T580|SM-T590|SM-T355Y?|SM-T280|SM-T817A|SM-T820|SM-W700|SM-P580|SM-T587|SM-P350|
|
||
SM-P555M|SM-P355M|SM-T113NU|SM-T815Y|SM-T585|SM-T285|SM-T825|SM-W708|SM-T835|SM-P585Y|SM-X200`),Kindle:new RegExp(`Kindle|Silk.*Accelerated|Android.*\\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|
|
||
KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI|KFARWI|KFFOWI|KFGIWI|KFMEWI)\\b|Android.*Silk/[0-9.]+ like Chrome /[0-9.]+ (?!Mobile)`),SurfaceTablet:/Windows NT [0-9.]+; ARM;.*(Tablet|ARMBJS)/,HPTablet:/HP Slate (7|8|10)|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8|Slate 21|HP SlateBook 10/,AsusTablet:new RegExp(`^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|
|
||
TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|
|
||
Slider SL101|\\bK00F\\b|\\bK00C\\b|\\bK00E\\b|\\bK00L\\b|TX201LA|ME176C|ME102A|\\bM80TA\\b|ME372CL|
|
||
ME560CG|ME372CG|ME302KL| K010 | K011 | K017 | K01E |ME572C|ME103K|ME170C|ME171C|\\bME70C\\b|ME581C|
|
||
ME581CL|ME8510C|ME181C|P01Y|PO1MA|P01Z|\\bP027\\b|\\bP024\\b|\\bP00C\\b`),BlackBerryTablet:/PlayBook|RIM Tablet/,HTCtablet:/HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410/,MotorolaTablet:/xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617/,NookTablet:/Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2/,AcerTablet:new RegExp(`Android.*; \\b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|
|
||
W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-811|A1-830)\\b|W3-810|\\bA3-A10\\b|\\bA3-A11\\b|
|
||
\\bA3-A20\\b|\\bA3-A30`),ToshibaTablet:/Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO/,LGTablet:/\bL-06C|LG-V909|LG-V900|LG-V700|LG-V510|LG-V500|LG-V410|LG-V400|LG-VK810\b/,FujitsuTablet:/Android.*\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\b/,PrestigioTablet:new RegExp(`PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|
|
||
PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|
|
||
PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|
|
||
PMP5297C|PMP5297C_QUAD|PMP812E|PMP812E3G|PMP812F|PMP810E|PMP880TD|PMT3017|PMT3037|PMT3047|PMT3057|PMT7008|
|
||
PMT5887|PMT5001|PMT5002`),LenovoTablet:new RegExp(`Lenovo TAB|Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|YT3-850M|YT3-X90L|YT3-X90F|
|
||
YT3-X90X|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A5500|A7600|B6000|
|
||
B8000|B8080)(-|)(FL|F|HV|H|)|TB-X606F|TB-X103F|TB-X304F|TB-X304L|TB-X704F|TB-8703F|Tab2A7-10F|TB2-X30L|TB-8504F`),DellTablet:/Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7/,YarvikTablet:new RegExp(`Android.*\\b(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|
|
||
TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|
|
||
TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|
|
||
TAB08-150|TAB08-200|TAB08-201-3G|TAB08-201-30|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|
|
||
TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)\\b`),MedionTablet:/Android.*\bOYO\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB/,ArnovaTablet:/97G4|AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT|AN9G2/,IntensoTablet:/INM8002KP|INM1010FP|INM805ND|Intenso Tab|TAB1004/,IRUTablet:/M702pro/,MegafonTablet:/MegaFon V9|\bZTE V9\b|Android.*\bMT7A\b/,EbodaTablet:/E-Boda (Supreme|Impresspeed|Izzycomm|Essential)/,AllViewTablet:/Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)/,ArchosTablet:new RegExp(`\\b(101G9|80G9|A101IT)\\b|Qilive 97R|Archos5|\\bARCHOS (70|79|80|90|97|101|FAMILYPAD|)(b|c|)(G10|
|
||
Cobalt| TITANIUM(HD|)| Xenon| Neon|XSK| 2| XS 2| PLATINUM| CARBON|GAMEPAD)\\b`),AinolTablet:/NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark/,NokiaLumiaTablet:/Lumia 2520/,SonyTablet:new RegExp(`Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|
|
||
SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|
|
||
EBRD1102|EBRD1201|SGP351|SGP341|SGP511|SGP512|SGP521|SGP541|SGP551|SGP621|SGP641|SGP612|SOT31|SGP771|SGP611|
|
||
SGP612|SGP712`),PhilipsTablet:/\b(PI2010|PI3000|PI3100|PI3105|PI3110|PI3205|PI3210|PI3900|PI4010|PI7000|PI7100)\b/,CubeTablet:/Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT/,CobyTablet:new RegExp(`MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|
|
||
MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010`),MIDTablet:new RegExp(`M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|
|
||
MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|
|
||
MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733|MID4X10`),MSITablet:new RegExp(`MSI \\b(Primo 73K|Primo 73L|Primo 81L|Primo 77|Primo 93|Primo 75|Primo 76|Primo 73|Primo 81|
|
||
Primo 91|Primo 90|Enjoy 71|Enjoy 7|Enjoy 10)\\b`),SMiTTablet:/Android.*(\bMID\b|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)/,RockChipTablet:/Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A/,FlyTablet:/IQ310|Fly Vision/,bqTablet:new RegExp(`Android.*(bq)?.*(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|
|
||
Livingstone|Cervantes|Avant|Aquaris ([E|M]10|M8))|Maxwell.*Lite|Maxwell.*Plus`),HuaweiTablet:new RegExp(`MediaPad|MediaPad 7 Youth|MediaPad T3 10|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|
|
||
S7-201|S7-Slim|M2-A01L|BAH-L09|BAH-W09|AGS-W09`),NecTablet:/\bN-06D|\bN-08D/,PantechTablet:/Pantech.*P4100/,BronchoTablet:/Broncho.*(N701|N708|N802|a710)/,VersusTablet:/TOUCHPAD.*[78910]|\bTOUCHTAB\b/,ZyncTablet:/z1000|Z99 2G|z99|z930|z999|z990|z909|Z919|z900/,PositivoTablet:/TB07STA|TB10STA|TB07FTA|TB10FTA/,NabiTablet:/Android.*\bNabi/,KoboTablet:/Kobo Touch|\bK080\b|\bVox\b Build|\bArc\b Build/,DanewTablet:/DSlide.*\b(700|701R|702|703R|704|802|970|971|972|973|974|1010|1012)\b/,TexetTablet:new RegExp(`NaviPad|TB-772A|TM-7045|TM-7055|TM-9750|TM-7016|TM-7024|TM-7026|TM-7041|TM-7043|TM-7047|
|
||
TM-8041|TM-9741|TM-9747|TM-9748|TM-9751|TM-7022|TM-7021|TM-7020|TM-7011|TM-7010|TM-7023|TM-7025|
|
||
TM-7037W|TM-7038W|TM-7027W|TM-9720|TM-9725|TM-9737W|TM-1020|TM-9738W|TM-9740|TM-9743W|TB-807A|TB-771A|
|
||
TB-727A|TB-725A|TB-719A|TB-823A|TB-805A|TB-723A|TB-715A|TB-707A|TB-705A|TB-709A|TB-711A|TB-890HD|
|
||
TB-880HD|TB-790HD|TB-780HD|TB-770HD|TB-721HD|TB-710HD|TB-434HD|TB-860HD|TB-840HD|TB-760HD|TB-750HD|
|
||
TB-740HD|TB-730HD|TB-722HD|TB-720HD|TB-700HD|TB-500HD|TB-470HD|TB-431HD|TB-430HD|TB-506|TB-504|TB-446|
|
||
TB-436|TB-416|TB-146SE|TB-126SE`),PlaystationTablet:/Playstation.*(Portable|Vita)/,TrekstorTablet:/ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2|VT10416-2|ST10216-2A|SurfTab/,PyleAudioTablet:/\b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\b/,AdvanTablet:new RegExp(`Android.* \\b(E3A|T3X|T5C|T5B|T3E|T3C|T3B|T1J|T1F|T2A|T1H|T1i|E1C|T1-E|T5-A|T4|E1-B|T2Ci|
|
||
T1-B|T1-D|O1-A|E1-A|T1-A|T3A|T4i)\\b`),DanyTechTablet:`Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|
|
||
Genius TAB GII|Genius TAB GIII|Genius Tab S1`,GalapadTablet:/Android.*\bG1\b(?!\))/,MicromaxTablet:/Funbook|Micromax.*\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\b/,KarbonnTablet:/Android.*\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\b/,AllFineTablet:/Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide/,PROSCANTablet:new RegExp(`\\b(PEM63|PLT1023G|PLT1041|PLT1044|PLT1044G|PLT1091|PLT4311|PLT4311PL|PLT4315|PLT7030|
|
||
PLT7033|PLT7033D|PLT7035|PLT7035D|PLT7044K|PLT7045K|PLT7045KB|PLT7071KG|PLT7072|PLT7223G|PLT7225G|
|
||
PLT7777G|PLT7810K|PLT7849G|PLT7851G|PLT7852G|PLT8015|PLT8031|PLT8034|PLT8036|PLT8080K|PLT8082|PLT8088|
|
||
PLT8223G|PLT8234G|PLT8235G|PLT8816K|PLT9011|PLT9045K|PLT9233G|PLT9735|PLT9760G|PLT9770G)\\b`),YONESTablet:/BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026/,ChangJiaTablet:new RegExp(`TPC7102|TPC7103|TPC7105|TPC7106|TPC7107|TPC7201|TPC7203|TPC7205|TPC7210|TPC7708|TPC7709|
|
||
TPC7712|TPC7110|TPC8101|TPC8103|TPC8105|TPC8106|TPC8203|TPC8205|TPC8503|TPC9106|TPC9701|TPC97101|TPC97103|
|
||
TPC97105|TPC97106|TPC97111|TPC97113|TPC97203|TPC97603|TPC97809|TPC97205|TPC10101|TPC10103|TPC10106|
|
||
TPC10111|TPC10203|TPC10205|TPC10503`),GUTablet:/TX-A1301|TX-M9002|Q702|kf026/,PointOfViewTablet:new RegExp(`TAB-P506|TAB-navi-7-3G-M|TAB-P517|TAB-P-527|TAB-P701|TAB-P703|TAB-P721|TAB-P731N|
|
||
TAB-P741|TAB-P825|TAB-P905|TAB-P925|TAB-PR945|TAB-PL1015|TAB-P1025|TAB-PI1045|TAB-P1325|TAB-PROTAB[0-9]+|
|
||
TAB-PROTAB25|TAB-PROTAB26|TAB-PROTAB27|TAB-PROTAB26XL|TAB-PROTAB2-IPS9|TAB-PROTAB30-IPS9|TAB-PROTAB25XXL|
|
||
TAB-PROTAB26-IPS10|TAB-PROTAB30-IPS10`),OvermaxTablet:new RegExp(`OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|
|
||
MagicTab|Stream|TB-08|TB-09)|Qualcore 1027`),HCLTablet:/HCL.*Tablet|Connect-3G-2.0|Connect-2G-2.0|ME Tablet U1|ME Tablet U2|ME Tablet G1|ME Tablet X1|ME Tablet Y2|ME Tablet Sync/,DPSTablet:/DPS Dream 9|DPS Dual 7/,VistureTablet:/V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10/,CrestaTablet:/CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989/,MediatekTablet:/\bMT8125|MT8389|MT8135|MT8377\b/,ConcordeTablet:/Concorde([ ]+)?Tab|ConCorde ReadMan/,GoCleverTablet:new RegExp(`GOCLEVER TAB|A7GOCLEVER|M1042|M7841|M742|R1042BK|R1041|TAB A975|TAB A7842|TAB A741|TAB A741L|TAB M723G|
|
||
TAB M721|TAB A1021|TAB I921|TAB R721|TAB I720|TAB T76|TAB R70|TAB R76.2|TAB R106|TAB R83.2|TAB M813G|TAB I721|
|
||
GCTA722|TAB I70|TAB I71|TAB S73|TAB R73|TAB R74|TAB R93|TAB R75|TAB R76.1|TAB A73|TAB A93|TAB A93.2|TAB T72|
|
||
TAB R83|TAB R974|TAB R973|TAB A101|TAB A103|TAB A104|TAB A104.2|R105BK|M713G|A972BK|TAB A971|TAB R974.2|
|
||
TAB R104|TAB R83.3|TAB A1042`),ModecomTablet:new RegExp(`FreeTAB 9000|FreeTAB 7.4|FreeTAB 7004|FreeTAB 7800|FreeTAB 2096|FreeTAB 7.5|FreeTAB 1014|
|
||
FreeTAB 1001 |FreeTAB 8001|FreeTAB 9706|FreeTAB 9702|FreeTAB 7003|FreeTAB 7002|FreeTAB 1002|FreeTAB 7801|
|
||
FreeTAB 1331|FreeTAB 1004|FreeTAB 8002|FreeTAB 8014|FreeTAB 9704|FreeTAB 1003`),VoninoTablet:new RegExp(`\\b(Argus[ _]?S|Diamond[ _]?79HD|Emerald[ _]?78E|Luna[ _]?70C|Onyx[ _]?S|Onyx[ _]?Z|
|
||
Orin[ _]?HD|Orin[ _]?S|Otis[ _]?S|SpeedStar[ _]?S|Magnet[ _]?M9|Primus[ _]?94[ _]?3G|Primus[ _]?94HD|
|
||
Primus[ _]?QS|Android.*\\bQ8\\b|Sirius[ _]?EVO[ _]?QS|Sirius[ _]?QS|Spirit[ _]?S)\\b`),ECSTablet:/V07OT2|TM105A|S10OT1|TR10CS1/,StorexTablet:/eZee[_']?(Tab|Go)[0-9]+|TabLC7|Looney Tunes Tab/,VodafoneTablet:/SmartTab([ ]+)?[0-9]+|SmartTabII10|SmartTabII7|VF-1497/,EssentielBTablet:/Smart[ ']?TAB[ ]+?[0-9]+|Family[ ']?TAB2/,RossMoorTablet:/RM-790|RM-997|RMD-878G|RMD-974R|RMT-705A|RMT-701|RME-601|RMT-501|RMT-711/,iMobileTablet:/i-mobile i-note/,TolinoTablet:/tolino tab [0-9.]+|tolino shine/,AudioSonicTablet:/\bC-22Q|T7-QC|T-17B|T-17P\b/,AMPETablet:/Android.* A78 /,SkkTablet:/Android.* (SKYPAD|PHOENIX|CYCLOPS)/,TecnoTablet:/TECNO P9|TECNO DP8D/,JXDTablet:new RegExp(`Android.* \\b(F3000|A3300|JXD5000|JXD3000|JXD2000|JXD300B|JXD300|S5800|S7800|S602b|S5110b|S7300|
|
||
S5300|S602|S603|S5100|S5110|S601|S7100a|P3000F|P3000s|P101|P200s|P1000m|P200m|P9100|P1000s|S6600b|S908|
|
||
P1000|P300|S18|S6600|S9100)\\b`),iJoyTablet:new RegExp(`Tablet (Spirit 7|Essentia|Galatea|Fusion|Onix 7|Landa|Titan|Scooby|Deox|Stella|Themis|Argon|
|
||
Unique 7|Sygnus|Hexen|Finity 7|Cream|Cream X2|Jade|Neon 7|Neron 7|Kandy|Scape|Saphyr 7|Rebel|Biox|Rebel|
|
||
Rebel 8GB|Myst|Draco 7|Myst|Tab7-004|Myst|Tadeo Jones|Tablet Boing|Arrow|Draco Dual Cam|Aurix|Mint|Amity|
|
||
Revolution|Finity 9|Neon 9|T9w|Amity 4GB Dual Cam|Stone 4GB|Stone 8GB|Andromeda|Silken|X2|Andromeda II|
|
||
Halley|Flame|Saphyr 9,7|Touch 8|Planet|Triton|Unique 10|Hexen 10|Memphis 4GB|Memphis 8GB|Onix 10)`),FX2Tablet:/FX2 PAD7|FX2 PAD10/,XoroTablet:new RegExp(`KidsPAD 701|PAD[ ]?712|PAD[ ]?714|PAD[ ]?716|PAD[ ]?717|PAD[ ]?718|PAD[ ]?720|PAD[ ]?721|
|
||
PAD[ ]?722|PAD[ ]?790|PAD[ ]?792|PAD[ ]?900|PAD[ ]?9715D|PAD[ ]?9716DR|PAD[ ]?9718DR|PAD[ ]?9719QR|
|
||
PAD[ ]?9720QR|TelePAD1030|Telepad1032|TelePAD730|TelePAD731|TelePAD732|TelePAD735Q|TelePAD830|TelePAD9730|
|
||
TelePAD795|MegaPAD 1331|MegaPAD 1851|MegaPAD 2151`),ViewsonicTablet:/ViewPad 10pi|ViewPad 10e|ViewPad 10s|ViewPad E72|ViewPad7|ViewPad E100|ViewPad 7e|ViewSonic VB733|VB100a/,VerizonTablet:/QTAQZ3|QTAIR7|QTAQTZ3|QTASUN1|QTASUN2|QTAXIA1/,OdysTablet:/LOOX|XENO10|ODYS[ -](Space|EVO|Xpress|NOON)|\bXELIO\b|Xelio10Pro|XELIO7PHONETAB|XELIO10EXTREME|XELIOPT2|NEO_QUAD10/,CaptivaTablet:/CAPTIVA PAD/,IconbitTablet:new RegExp(`NetTAB|NT-3702|NT-3702S|NT-3702S|NT-3603P|NT-3603P|NT-0704S|NT-0704S|NT-3805C|NT-3805C|
|
||
NT-0806C|NT-0806C|NT-0909T|NT-0909T|NT-0907S|NT-0907S|NT-0902S|NT-0902S`),TeclastTablet:new RegExp(`T98 4G|\\bP80\\b|\\bX90HD\\b|X98 Air|X98 Air 3G|\\bX89\\b|P80 3G|\\bX80h\\b|P98 Air|
|
||
\\bX89HD\\b|P98 3G|\\bP90HD\\b|P89 3G|X98 3G|\\bP70h\\b|P79HD 3G|G18d 3G|\\bP79HD\\b|\\bP89s\\b|\\bA88\\b|
|
||
\\bP10HD\\b|\\bP19HD\\b|G18 3G|\\bP78HD\\b|\\bA78\\b|\\bP75\\b|G17s 3G|G17h 3G|\\bP85t\\b|\\bP90\\b|
|
||
\\bP11\\b|\\bP98t\\b|\\bP98HD\\b|\\bG18d\\b|\\bP85s\\b|\\bP11HD\\b|\\bP88s\\b|\\bA80HD\\b|\\bA80se\\b|
|
||
\\bA10h\\b|\\bP89\\b|\\bP78s\\b|\\bG18\\b|\\bP85\\b|\\bA70h\\b|\\bA70\\b|\\bG17\\b|\\bP18\\b|\\bA80s\\b|
|
||
\\bA11s\\b|\\bP88HD\\b|\\bA80h\\b|\\bP76s\\b|\\bP76h\\b|\\bP98\\b|\\bA10HD\\b|\\bP78\\b|\\bP88\\b|\\bA11\\b|
|
||
\\bA10t\\b|\\bP76a\\b|\\bP76t\\b|\\bP76e\\b|\\bP85HD\\b|\\bP85a\\b|\\bP86\\b|\\bP75HD\\b|\\bP76v\\b|\\bA12\\b|
|
||
\\bP75a\\b|\\bA15\\b|\\bP76Ti\\b|\\bP81HD\\b|\\bA10\\b|\\bT760VE\\b|\\bT720HD\\b|\\bP76\\b|\\bP73\\b|\\bP71\\b|
|
||
\\bP72\\b|\\bT720SE\\b|\\bC520Ti\\b|\\bT760\\b|\\bT720VE\\b|T720-3GE|T720-WiFi`),OndaTablet:new RegExp(`\\b(V975i|Vi30|VX530|V701|Vi60|V701s|Vi50|V801s|V719|Vx610w|VX610W|V819i|Vi10|VX580W|Vi10|
|
||
V711s|V813|V811|V820w|V820|Vi20|V711|VI30W|V712|V891w|V972|V819w|V820w|Vi60|V820w|V711|V813s|V801|V819|
|
||
V975s|V801|V819|V819|V818|V811|V712|V975m|V101w|V961w|V812|V818|V971|V971s|V919|V989|V116w|V102w|V973|
|
||
Vi40)\\b[s]+|V10 \\b4G\\b`),JaytechTablet:/TPC-PA762/,BlaupunktTablet:/Endeavour 800NG|Endeavour 1010/,DigmaTablet:/\b(iDx10|iDx9|iDx8|iDx7|iDxD7|iDxD8|iDsQ8|iDsQ7|iDsQ8|iDsD10|iDnD7|3TS804H|iDsQ11|iDj7|iDs10)\b/,EvolioTablet:/ARIA_Mini_wifi|Aria[ _]Mini|Evolio X10|Evolio X7|Evolio X8|\bEvotab\b|\bNeura\b/,LavaTablet:/QPAD E704|\bIvoryS\b|E-TAB IVORY|\bE-TAB\b/,AocTablet:/MW0811|MW0812|MW0922|MTK8382|MW1031|MW0831|MW0821|MW0931|MW0712/,MpmanTablet:new RegExp(`MP11 OCTA|MP10 OCTA|MPQC1114|MPQC1004|MPQC994|MPQC974|MPQC973|MPQC804|MPQC784|MPQC780|
|
||
\\bMPG7\\b|MPDCG75|MPDCG71|MPDC1006|MP101DC|MPDC9000|MPDC905|MPDC706HD|MPDC706|MPDC705|MPDC110|
|
||
MPDC100|MPDC99|MPDC97|MPDC88|MPDC8|MPDC77|MP709|MID701|MID711|MID170|MPDC703|MPQC1010`),CelkonTablet:/CT695|CT888|CT[\s]?910|CT7 Tab|CT9 Tab|CT3 Tab|CT2 Tab|CT1 Tab|C820|C720|\bCT-1\b/,WolderTablet:new RegExp(`miTab \\b(DIAMOND|SPACE|BROOKLYN|NEO|FLY|MANHATTAN|FUNK|EVOLUTION|SKY|GOCAR|IRON|GENIUS|
|
||
POP|MINT|EPSILON|BROADWAY|JUMP|HOP|LEGEND|NEW AGE|LINE|ADVANCE|FEEL|FOLLOW|LIKE|LINK|LIVE|THINK|
|
||
FREEDOM|CHICAGO|CLEVELAND|BALTIMORE-GH|IOWA|BOSTON|SEATTLE|PHOENIX|DALLAS|IN 101|MasterChef)\\b`),MediacomTablet:"M-MPI10C3G|M-SP10EG|M-SP10EGP|M-SP10HXAH|M-SP7HXAH|M-SP10HXBH|M-SP8HXAH|M-SP8MXA",MiTablet:/\bMI PAD\b|\bHM NOTE 1W\b/,NibiruTablet:/Nibiru M1|Nibiru Jupiter One/,NexoTablet:/NEXO NOVA|NEXO 10|NEXO AVIO|NEXO FREE|NEXO GO|NEXO EVO|NEXO 3G|NEXO SMART|NEXO KIDDO|NEXO MOBI/,LeaderTablet:new RegExp(`TBLT10Q|TBLT10I|TBL-10WDKB|TBL-10WDKBO2013|TBL-W230V2|TBL-W450|TBL-W500|SV572|TBLT7I|
|
||
TBA-AC7-8G|TBLT79|TBL-8W16|TBL-10W32|TBL-10WKB|TBL-W100`),UbislateTablet:/UbiSlate[\s]?7C/,PocketBookTablet:/Pocketbook/,KocasoTablet:/\b(TB-1207)\b/,HisenseTablet:/\b(F5281|E2371)\b/,Hudl:/Hudl HT7S3|Hudl 2/,TelstraTablet:/T-Hub2/,Honeywell:/RT10A/,GenericTablet:new RegExp(`Android.*\\b97D\\b|Tablet(?!.*PC)|BNTV250A|MID-WCDMA|LogicPD Zoom2|\\bA7EB\\b|CatNova8|
|
||
A1_07|CT704|CT1002|\\bM721\\b|rk30sdk|\\bEVOTAB\\b|M758A|ET904|ALUMIUM10|Smartfren Tab|Endeavour 1010|
|
||
Tablet-PC-4|Tagi Tab|\\bM6pro\\b|CT1020W|arc 10HD|\\bTP750\\b|\\bQTAQZ3\\b|WVT101|TM1088|KT107`)},Pp={BLACKBERRY:"Blackberry",FIREFOX_OS:"Firefox-OS",CHROME_BOOK:"Chrome-Book",WINDOWS_PHONE:"Windows-Phone",VITA:"Vita",PS4:"PS4",MAC:"Macintosh",CHROMECAST:"Chromecast",APPLE_TV:"Apple-TV",GOOGLE_TV:"Google-TV",ANDROID:"Android",Tesla:"Tesla",iPad:"iPad",IPHONE:"iPhone",iPod:"iPod",UNKNOWN:b_.UKNOWN,HTC:"HTC",NEXUS_PHONE:"Nexus Phone",NexusTablet:"Nexus Tablet",DELL:"Dell",MOTOROLA:"Motorola",SAMSUNG:"Samsung",LG:"LG",SONY:"Sony",ASUS:"Asus",NOKIA_LUMIA:"Nokia Lumia",MICROMAX:"Micromax",PALM:"Palm",VERTU:"Vertu",PANTECH:"PANTECH",FLY:"Fly",WIKO:"WIKO",I_MOBILE:"i-mobile",SIMVALLEY:"Simvalley",WOLFGANG:"Wolfgang",ALCATEL:"Alcatel",HONEYWELL:"Honeywell",NINTENDO:"Nintendo",AMOI:"Amoi",INQ:"INQ",GENERIC_PHONE:"Generic Phone",MI_SE_9:"Mi SE 9"},uj=[Pp.PS4,Pp.CHROME_BOOK,Pp.MAC,Pp.DELL,Pp.ASUS,Pp.UNKNOWN],t3e={WINDOWS:"Windows",MAC:"Mac",IOS:"iOS",ANDROID:"Android",LINUX:"Linux",UNIX:"Unix",FIREFOX_OS:"Firefox-OS",CHROME_OS:"Chrome-OS",WINDOWS_PHONE:"Windows-Phone",UNKNOWN:b_.UKNOWN},n3e={WINDOWS_3_11:"windows-3-11",WINDOWS_95:"windows-95",WINDOWS_ME:"windows-me",WINDOWS_98:"windows-98",WINDOWS_CE:"windows-ce",WINDOWS_2000:"windows-2000",WINDOWS_XP:"windows-xp",WINDOWS_SERVER_2003:"windows-server-2003",WINDOWS_VISTA:"windows-vista",WINDOWS_7:"windows-7",WINDOWS_8_1:"windows-8-1",WINDOWS_8:"windows-8",WINDOWS_10:"windows-10",WINDOWS_PHONE_7_5:"windows-phone-7-5",WINDOWS_PHONE_8_1:"windows-phone-8-1",WINDOWS_PHONE_10:"windows-phone-10",WINDOWS_NT_4_0:"windows-nt-4-0",MACOSX_11_0:"mac-os-x-11-0",MACOSX_16:"mac-os-x-16",MACOSX_15:"mac-os-x-15",MACOSX_14:"mac-os-x-14",MACOSX_13:"mac-os-x-13",MACOSX_12:"mac-os-x-12",MACOSX_11:"mac-os-x-11",MACOSX_10:"mac-os-x-10",MACOSX_9:"mac-os-x-9",MACOSX_8:"mac-os-x-8",MACOSX_7:"mac-os-x-7",MACOSX_6:"mac-os-x-6",MACOSX_5:"mac-os-x-5",MACOSX_4:"mac-os-x-4",MACOSX_3:"mac-os-x-3",MACOSX_2:"mac-os-x-2",MACOSX:"mac-os-x",iOS:"iOS",ANDROID_9:"android-9",UNKNOWN:b_.UKNOWN.toLowerCase()},gj={WINDOWS:{and:[{or:[/\bWindows|(Win\d\d)\b/,/\bWin 9x\b/]},{not:/\bWindows Phone\b/}]},MAC:{and:[/\bMac OS\b/,{not:{or:[/\biPhone\b/,/\biPad\b/,/\biPod\b/,/\bWindows Phone\b/]}}]},IOS:{and:[{or:[/\biPad\b/,/\biPhone\b/,/\biPod\b/]},{not:/\bWindows Phone\b/}]},ANDROID:{and:[/\bAndroid\b/,{not:/\bWindows Phone\b/}]},LINUX:/\bLinux\b/,UNIX:/\bUNIX\b/,FIREFOX_OS:{and:[/\bFirefox\b/,/Mobile\b/]},CHROME_OS:/\bCrOS\b/,WINDOWS_PHONE:{or:[/\bIEMobile\b/,/\bWindows Phone\b/]},PS4:/\bMozilla\/5.0 \(PlayStation 4\b/,VITA:/\bMozilla\/5.0 \(Play(S|s)tation Vita\b/},i3e={CHROME:{and:[{or:[/\bChrome\b/,/\bCriOS\b/,/\bHeadlessChrome\b/]},{not:{or:[/\bOPR\b/,/\bEdg(e|A|iOS)\b/,/\bEdg\/\b/,/\bSamsungBrowser\b/,/\bUCBrowser\b/]}}]},FIREFOX:{or:[/\bFirefox\b/,/\bFxiOS\b/]},SAFARI:{and:[/^((?!CriOS).)*\Safari\b.*$/,{not:{or:[/\bOPR\b/,/\bEdg(e|A|iOS)\b/,/\bEdg\/\b/,/\bWindows Phone\b/,/\bSamsungBrowser\b/,/\bUCBrowser\b/]}}]},OPERA:{or:[/Opera\b/,/\bOPR\b/]},IE:{or:[/\bMSIE\b/,/\bTrident\b/,/^Mozilla\/5\.0 \(Windows NT 10\.0; Win64; x64\)$/]},MS_EDGE:{or:[/\bEdg(e|A|iOS)\b/]},MS_EDGE_CHROMIUM:/\bEdg\/\b/,PS4:/\bMozilla\/5.0 \(PlayStation 4\b/,VITA:/\bMozilla\/5.0 \(Play(S|s)tation Vita\b/,FB_MESSANGER:/\bFBAN\/MessengerForiOS\b/,SAMSUNG:/\bSamsungBrowser\b/,UCBROWSER:/\bUCBrowser\b/},o3e=ze(q(q(q({},dS),C_),gj),{FIREFOX_OS:{and:[/\bFirefox\b/,/\bMobile\b/]},CHROME_BOOK:/\bCrOS\b/,PS4:/\bMozilla\/5.0 \(PlayStation 4\b/,CHROMECAST:/\bCrKey\b/,APPLE_TV:/^iTunes-AppleTV\/4.1$/,GOOGLE_TV:/\bGoogleTV\b/,Tesla:/Tesla\/([0-9]{4}.[0-9]{1,2}.?[0-9]{0,2}.?[0-9]{0,2})-(.{7})/,MI_SE_9:/\bXiaomi\b/,MAC:{and:[/\bMac OS\b/,{not:{or:[/\biPhone\b/,/\biPad\b/,/\biPod\b/,/\bWindows Phone\b/]}}]}}),_4={WINDOWS_3_11:/Win16/,WINDOWS_95:/(Windows 95|Win95|Windows_95)/,WINDOWS_ME:/(Win 9x 4.90|Windows ME)/,WINDOWS_98:/(Windows 98|Win98)/,WINDOWS_CE:/Windows CE/,WINDOWS_2000:/(Windows NT 5.0|Windows 2000)/,WINDOWS_XP:/(Windows NT 5.1|Windows XP)/,WINDOWS_SERVER_2003:/Windows NT 5.2/,WINDOWS_VISTA:/Windows NT 6.0/,WINDOWS_7:/(Windows 7|Windows NT 6.1)/,WINDOWS_8_1:/(Windows 8.1|Windows NT 6.3)/,WINDOWS_8:/(Windows 8|Windows NT 6.2)/,WINDOWS_10:/(Windows NT 10.0)/,WINDOWS_PHONE_7_5:/(Windows Phone OS 7.5)/,WINDOWS_PHONE_8_1:/(Windows Phone 8.1)/,WINDOWS_PHONE_10:/(Windows Phone 10)/,WINDOWS_NT_4_0:{and:[/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/,{not:/Windows NT 10.0/}]},MACOSX:/(MAC OS X\s*[^ 0-9])/,MACOSX_3:/(Darwin 10.3|Mac OS X 10.3)/,MACOSX_4:/(Darwin 10.4|Mac OS X 10.4)/,MACOSX_5:/(Mac OS X 10.5)/,MACOSX_6:/(Mac OS X 10.6)/,MACOSX_7:/(Mac OS X 10.7)/,MACOSX_8:/(Mac OS X 10.8)/,MACOSX_9:/(Mac OS X 10.9)/,MACOSX_10:/(Mac OS X 10.10)/,MACOSX_11:/(Mac OS X 10.11)/,MACOSX_12:/(Mac OS X 10.12)/,MACOSX_13:/(Mac OS X 10.13)/,MACOSX_14:/(Mac OS X 10.14)/,MACOSX_15:/(Mac OS X 10.15)/,MACOSX_16:/(Mac OS X 10.16)/,MACOSX_11_0:{or:[/11_0 like Mac OS X/,/Mac OS X 11/]},iOS:/(iPhone OS\s*[0-9_]+)/,ANDROID_9:/(Android 9)/},f4={CHROME:[/\bChrome\/([\d\.]+)\b/,/\bCriOS\/([\d\.]+)\b/,/\bHeadlessChrome\/([\d\.]+)\b/],FIREFOX:[/\bFirefox\/([\d\.]+)\b/,/\bFxiOS\/([\d\.]+)\b/],SAFARI:[/\bVersion\/([\d\.]+)\b/,/\bSafari\/([\d\.]+)\b/],OPERA:[/\bVersion\/([\d\.]+)\b/,/\bOPR\/([\d\.]+)\b/],IE:[/\bMSIE ([\d\.]+\w?)\b/,/\brv:([\d\.]+\w?)\b/],MS_EDGE:/\bEdg(?:e|A|iOS)\/([\d\.]+)\b/,MS_EDGE_CHROMIUM:/\bEdg\/([\d\.]+)\b/,SAMSUNG:/\bSamsungBrowser\/([\d\.]+)\b/,UCBROWSER:/\bUCBrowser\/([\d\.]+)\b/},a3e=Object.keys(_4).reduce((n,o)=>(n[o]=_4[o],n),{}),hj=Object.keys(f4).reduce((n,o)=>(n[b4[o]]=f4[o],n),{}),yd=Object.freeze({__proto__:null,GENERAL:b_,BROWSERS:b4,MOBILES_RE:dS,TABLETS_RE:C_,DEVICES:Pp,DESKTOP_DEVICES:uj,OS:t3e,OS_VERSIONS:n3e,OS_RE:gj,BROWSERS_RE:i3e,DEVICES_RE:o3e,OS_VERSIONS_RE_MAP:_4,BROWSER_VERSIONS_RE_MAP:f4,OS_VERSIONS_RE:a3e,BROWSER_VERSIONS_RE:hj}),v4=class{constructor(){}test(o,e){return typeof e=="string"&&(e=new RegExp(e)),e instanceof RegExp?e.test(o):e&&Array.isArray(e.and)?e.and.every(t=>this.test(o,t)):e&&Array.isArray(e.or)?e.or.some(t=>this.test(o,t)):e&&e.not?!this.test(o,e.not):!1}exec(o,e){return typeof e=="string"&&(e=new RegExp(e)),e instanceof RegExp?e.exec(o):e&&Array.isArray(e)?e.reduce((t,i)=>t||this.exec(o,i),null):null}},_C=(function(n){return n.Mobile="mobile",n.Tablet="tablet",n.Desktop="desktop",n.Unknown="unknown",n})(_C||{}),C4=(function(n){return n.Portrait="portrait",n.Landscape="landscape",n})(C4||{}),h4="iPad",mS=(()=>{class n{constructor(e){this.platformId=e,this.ua="",this.userAgent="",this.os="",this.browser="",this.device="",this.os_version="",this.browser_version="",this.reTree=new v4,this.deviceType="",this.orientation="",nc(this.platformId)&&typeof window<"u"&&(this.userAgent=window.navigator.userAgent),this.setDeviceInfo(this.userAgent)}setDeviceInfo(e=this.userAgent){e!==this.userAgent&&(this.userAgent=e);let t=[{const:"OS",prop:"os"},{const:"BROWSERS",prop:"browser"},{const:"DEVICES",prop:"device"},{const:"OS_VERSIONS",prop:"os_version"}];if(t.forEach(i=>{this[i.prop]=Object.keys(yd[i.const]).reduce((a,s)=>yd[i.const][s]==="device"&&nc(this.platformId)&&(this.reTree.test(this.userAgent,C_[h4])||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1)?(a[yd[i.const][s]]=h4,Object):(a[yd[i.const][s]]=this.reTree.test(e,yd[`${i.const}_RE`][s]),a),{})}),t.forEach(i=>{this[i.prop]=Object.keys(yd[i.const]).map(a=>yd[i.const][a]).reduce((a,s)=>i.prop==="device"&&a===yd[i.const].ANDROID?this[i.prop][s]?s:a:a===yd[i.const].UNKNOWN&&this[i.prop][s]?s:a,yd[i.const].UNKNOWN)}),this.browser_version="0",this.browser!==b4.UNKNOWN){let i=hj[this.browser],a=this.reTree.exec(e,i);a&&(this.browser_version=a[1])}typeof window<"u"&&window.matchMedia?this.orientation=window.matchMedia("(orientation: landscape)").matches?C4.Landscape:C4.Portrait:this.orientation=b_.UKNOWN,this.deviceType=this.isTablet()?_C.Tablet:this.isMobile(this.userAgent)?_C.Mobile:this.isDesktop(this.userAgent)?_C.Desktop:_C.Unknown}getDeviceInfo(){return{userAgent:this.userAgent,os:this.os,browser:this.browser,device:this.device,os_version:this.os_version,browser_version:this.browser_version,deviceType:this.deviceType,orientation:this.orientation}}isMobile(e=this.userAgent){return this.isTablet(e)?!1:!!Object.keys(dS).find(i=>this.reTree.test(e,dS[i]))}isTablet(e=this.userAgent){return nc(this.platformId)&&(this.reTree.test(this.userAgent,C_[h4])||typeof navigator<"u"&&navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1)?!0:!!Object.keys(C_).find(i=>!!this.reTree.test(e,C_[i]))}isDesktop(e=this.userAgent){return this.device===Pp.UNKNOWN&&(this.isMobile(e)||this.isTablet(e))?!1:uj.indexOf(this.device)>-1}}return n.\u0275fac=function(e){return new(e||n)(_e(IC))},n.\u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();var Tp=(()=>{class n{toasterService;deviceService;loginService;constructor(e,t,i){this.toasterService=e,this.deviceService=t,this.loginService=i}createHiddenIframe(e,t){let i=document.createElement("iframe");return i.src=t,i.id="hiddenIframe",i.style.display="none",e.appendChild(i),i}openUriUsingFirefox(e){var t=document.querySelector("#hiddenIframe");t||(t=this.createHiddenIframe(document.body,"about:blank"));try{t.contentWindow.location.href=e}catch(i){i.name==="NS_ERROR_UNKNOWN_PROTOCOL"&&this.toasterService.error("Protocol handler does not exist")}}async open(e){let t=this.deviceService.getDeviceInfo();console.log("Launching external protocol handler with "+t.browser+": "+e),t.browser==="Firefox"?this.openUriUsingFirefox(e):location.assign(e)}static \u0275fac=function(t){return new(t||n)(_e(re),_e(mS),_e(Ol))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var _j=Jl(HM());function l3e(n,o){if(n&1){let e=R();r(0,"button",0),_("click",function(){y(e);let i=h();return w(i.openConsole(i.auxiliary=!0))}),r(1,"mat-icon"),c(2,"web_asset"),l(),r(3,"span"),c(4,"Auxiliary console"),l()()}}var x_=(()=>{class n{toasterService=f(re);nodeService=f(ft);deviceService=f(mS);protocolHandlerService=f(Tp);cd=f(oe);controller=ee(void 0);node=ee(void 0);updatedNode=z(void 0);openConsole(e=!1){let t=this.node();t&&this.nodeService.getNode(this.controller(),t).subscribe({next:i=>{this.updatedNode.set(i),this.cd.markForCheck(),this.startConsole(e)},error:i=>{let a=i.error?.message||i.message||"Failed to get node information";this.toasterService.error(a),this.cd.markForCheck()}})}startConsole(e){let t=this.updatedNode()||this.node();if(t)if(t.status!=="started")this.toasterService.error("This node must be started before a console can be opened");else{(t.console_host==="0.0.0.0"||t.console_host==="0:0:0:0:0:0:0:0"||t.console_host==="::")&&(t=ze(q({},t),{console_host:this.controller().host}),this.updatedNode.set(t));try{var i,a=t.console_host;if(_j.IPv6.isValid(a)&&(a=`[${a}]`),t.console_type==="telnet"||t.console_type==="ssh"||t.console_type==="docker_exec"){var s;if(e===!0){if(s=t.properties.aux,s===void 0){this.toasterService.error("Auxiliary console port is not set.");return}}else s=t.console;i=`gns3+${t.console_type}://${a}:${s}?name=${encodeURIComponent(t.name)}&project_id=${t.project_id}&node_id=${t.node_id}`}else if(t.console_type==="vnc")i=`gns3+vnc://${a}:${t.console}?name=${t.name}&project_id=${t.project_id}&node_id=${t.node_id}`;else if(t.console_type&&t.console_type.startsWith("spice"))i=`gns3+spice://${a}:${t.console}?name=${encodeURIComponent(t.name)}&project_id=${t.project_id}&node_id=${t.node_id}`;else{if(t.console_type&&t.console_type.startsWith("http"))return i=`${t.console_type}://${a}:${t.console}`,window.open(i);this.toasterService.error("Supported console types are: telnet, ssh, vnc, spice and spice+agent.");return}this.protocolHandlerService.open(i)}catch(d){this.toasterService.error(d)}}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-console-device-action-browser"]],inputs:{controller:[1,"controller"],node:[1,"node"]},decls:6,vars:1,consts:[["mat-menu-item","",3,"click"],["mat-menu-item",""]],template:function(t,i){if(t&1&&(r(0,"button",0),_("click",function(){return i.openConsole()}),r(1,"mat-icon"),c(2,"web_asset"),l(),r(3,"span"),c(4,"Console"),l()(),T(5,l3e,5,0,"button",1)),t&2){let a;m(5),E(((a=i.node())==null?null:a.node_type)==="docker"||((a=i.node())==null?null:a.node_type)==="dynamips"||((a=i.node())==null?null:a.node_type)==="qemu"?5:-1)}},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();var pS=(()=>{class n{nodeService=f(ft);toasterService=f(re);cdr=f(oe);controller=ee(void 0);node=ee(void 0);isolate(){this.nodeService.isolate(this.controller(),this.node()).subscribe({next:()=>this.toasterService.success(`Node "${this.node().name}" isolated.`),error:e=>{this.toasterService.error(e.error?.message||e.message||"Failed to isolate node"),this.cdr.markForCheck()}})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-isolate-node-action"]],inputs:{controller:[1,"controller"],node:[1,"node"]},decls:5,vars:0,consts:[["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&(r(0,"button",0),_("click",function(){return i.isolate()}),r(1,"mat-icon"),c(2,"gps_off"),l(),r(3,"span"),c(4,"Isolate"),l()())},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();var uS=(()=>{class n{nodeService=f(ft);toasterService=f(re);cdr=f(oe);controller=ee(void 0);node=ee(void 0);unisolate(){this.nodeService.unisolate(this.controller(),this.node()).subscribe({next:()=>this.toasterService.success(`Node "${this.node().name}" unisolated.`),error:e=>{let t=e.error?.message||e.message||"Failed to unisolate node";this.toasterService.error(t),this.cdr.markForCheck()}})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-unisolate-node-action"]],inputs:{controller:[1,"controller"],node:[1,"node"]},decls:5,vars:0,consts:[["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&(r(0,"button",0),_("click",function(){return i.unisolate()}),r(1,"mat-icon"),c(2,"gps_not_fixed"),l(),r(3,"span"),c(4,"Un-isolate"),l()())},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();function c3e(n,o){n&1&&L(0,"mat-spinner",8)}function d3e(n,o){n&1&&c(0," Apply ")}var gS=(()=>{class n{dialogRef=f(We);nodeService=f(ft);toasterService=f(re);formBuilder=f(Ai);cd=f(oe);controller;node;inputForm;name;isApplying=z(!1);constructor(){this.name="",this.inputForm=this.formBuilder.group({name:new Ge("",Ue.required)})}ngOnInit(){this.node&&(this.name=this.node.name,this.inputForm.get("name")?.setValue(this.node.name)),this.cd.markForCheck()}onSaveClick(){if(!this.isApplying())if(this.inputForm.valid){let e=this.inputForm.get("name")?.value;this.node.name=e,this.isApplying.set(!0),this.dialogRef.disableClose=!0,this.nodeService.updateNode(this.controller,this.node).subscribe({next:()=>{this.toasterService.success(`Node ${this.node.name} updated.`),this.onCancelClick()},error:t=>{let i=t.error?.message||t.message||"Failed to update node.";this.toasterService.error(i),this.isApplying.set(!1),this.dialogRef.disableClose=!1,this.cd.markForCheck()}})}else this.toasterService.error("Fill all required fields.")}onCancelClick(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-change-hostname-dialog-component"]],decls:14,vars:4,consts:[["mat-dialog-title",""],["mat-dialog-content",""],[3,"formGroup"],["appearance","outline","subscriptSizing","dynamic"],["matInput","","type","text","formControlName","name","placeholder","Name"],["mat-dialog-actions",""],["mat-button","","color","accent",3,"click"],["mat-raised-button","","color","primary",3,"click","disabled"],["diameter","20"]],template:function(t,i){t&1&&(r(0,"h1",0),c(1),l(),r(2,"div",1)(3,"form",2)(4,"mat-form-field",3)(5,"mat-label"),c(6,"Name"),l(),L(7,"input",4),l()()(),r(8,"div",5)(9,"button",6),_("click",function(){return i.onCancelClick()}),c(10,"Cancel"),l(),r(11,"button",7),_("click",function(){return i.onSaveClick()}),T(12,c3e,1,0,"mat-spinner",8)(13,d3e,1,0),l()()),t&2&&(m(),X("Change hostname for node ",i.name),m(2),v("formGroup",i.inputForm),m(8),v("disabled",i.isApplying()),m(),E(i.isApplying()?12:13))},dependencies:[ke,qe,Qe,bt,Y,he,ye,Ee,Pe,Ve,we,rt,mt,It,Ct,At,Nt,vt,Ut,Yt],encapsulation:2,changeDetection:0})}return n})();var hS=(()=>{class n{dialog=f(Xe);controller=ee(void 0);node=ee(void 0);changeHostname(){let t=this.dialog.open(gS,{autoFocus:!1,disableClose:!1,panelClass:["base-dialog-panel","dialog-small-panel"]}).componentInstance;t.controller=this.controller(),t.node=this.node()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-change-hostname-action"]],inputs:{controller:[1,"controller"],node:[1,"node"]},decls:5,vars:0,consts:[["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&(r(0,"button",0),_("click",function(){return i.changeHostname()}),r(1,"mat-icon"),c(2,"edit"),l(),r(3,"span"),c(4,"Change hostname"),l()())},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();function m3e(n,o){n&1&&L(0,"mat-spinner",6)}function p3e(n,o){n&1&&c(0," Apply ")}var _S=(()=>{class n{dialogRef=f(We);nodeService=f(ft);toasterService=f(re);cd=f(oe);controller;node;symbol;isApplying=z(!1);ngOnInit(){this.symbol=this.node.symbol,this.cd.markForCheck()}symbolChanged(e){this.symbol=e,this.cd.markForCheck()}onCloseClick(){this.dialogRef.close()}onSelectClick(){this.isApplying()||(this.isApplying.set(!0),this.dialogRef.disableClose=!0,this.nodeService.updateSymbol(this.controller,this.node,this.symbol).subscribe({next:()=>{this.toasterService.success(`Symbol for node "${this.node.name}" updated.`),this.onCloseClick()},error:e=>{let t=e.error?.message||e.message||"Failed to update symbol";this.toasterService.error(t),this.isApplying.set(!1),this.dialogRef.disableClose=!1,this.cd.markForCheck()}}))}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-change-symbol-dialog"]],inputs:{controller:"controller",node:"node"},decls:10,vars:5,consts:[["mat-dialog-title",""],[1,"modal-form-container"],[3,"symbolChanged","controller","symbol"],["mat-dialog-actions",""],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"],["diameter","20"]],template:function(t,i){t&1&&(r(0,"h1",0),c(1),l(),r(2,"div",1)(3,"app-symbols",2),_("symbolChanged",function(s){return i.symbolChanged(s)}),l()(),r(4,"div",3)(5,"button",4),_("click",function(){return i.onCloseClick()}),c(6,"Cancel"),l(),r(7,"button",5),_("click",function(){return i.onSelectClick()}),T(8,m3e,1,0,"mat-spinner",6)(9,p3e,1,0),l()()),t&2&&(m(),X("Change symbol for node: ",i.node.name),m(2),v("controller",i.controller)("symbol",i.symbol),m(4),v("disabled",i.isApplying()),m(),E(i.isApplying()?8:9))},dependencies:[ke,qe,Qe,Y,he,rt,mt,Gm],styles:[".modal-form-container[_ngcontent-%COMP%]{padding:16px;overflow-y:auto;max-height:500px}.menu[_ngcontent-%COMP%]{display:flex;justify-content:space-between}.radio-selection[_ngcontent-%COMP%]{width:90%}.mat-radio-button[_ngcontent-%COMP%] ~ .mat-radio-button[_ngcontent-%COMP%]{margin-left:16px}.non-visible[_ngcontent-%COMP%]{display:none}.example-full-width[_ngcontent-%COMP%]{width:100%}"],changeDetection:0})}return n})();var fS=(()=>{class n{dialog=f(Xe);dialogConfig=f(yo);controller=ee(void 0);node=ee(void 0);changeSymbol(){let e=this.dialogConfig.openConfig("changeSymbol",{autoFocus:!1,disableClose:!1}),i=this.dialog.open(_S,e).componentInstance;i.controller=this.controller(),i.node=this.node()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-change-symbol-action"]],inputs:{controller:[1,"controller"],node:[1,"node"]},decls:5,vars:0,consts:[["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&(r(0,"button",0),_("click",function(){return i.changeSymbol()}),r(1,"mat-icon"),c(2,"find_replace"),l(),r(3,"span"),c(4,"Change symbol"),l()())},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();var vS=(()=>{class n{nodeService=f(ft);nodesDataSource=f(Xn);drawingService=f(Wi);drawingsDataSource=f(Ui);toasterService=f(re);cdr=f(oe);controller=ee(void 0);project=ee(void 0);drawings=ee([]);nodes=ee([]);duplicate(){let e=uo(this.nodes().length+this.drawings().length,t=>{t>0&&this.toasterService.success(`${t} selected ${t===1?"object":"objects"} duplicated.`)});for(let t of this.nodes())this.nodeService.duplicate(this.controller(),t).subscribe({next:i=>{this.nodesDataSource.add(i),e.succeed()},error:i=>{if(e.fail(),i.status===409)this.toasterService.error(`Shutdown ${t.name} before duplicating`);else{let a=i.error?.message||i.message||"Failed to duplicate node";this.toasterService.error(a)}this.cdr.markForCheck()}});for(let t of this.drawings())this.drawingService.duplicate(this.controller(),t.project_id,t).subscribe({next:i=>{this.drawingsDataSource.add(i),e.succeed()},error:i=>{e.fail();let a=i.error?.message||i.message||"Failed to duplicate drawing";this.toasterService.error(a),this.cdr.markForCheck()}})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-duplicate-action"]],inputs:{controller:[1,"controller"],project:[1,"project"],drawings:[1,"drawings"],nodes:[1,"nodes"]},decls:5,vars:0,consts:[["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&(r(0,"button",0),_("click",function(){return i.duplicate()}),r(1,"mat-icon"),c(2,"filter_none"),l(),r(3,"span"),c(4,"Duplicate"),l()())},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();var js=(()=>{class n{constructor(){}getCurveInterpolator(e){switch(e){case"basis":return lC;case"catmullrom":return qu;case"monotone":return cC;default:return qu}}convert(e){let t="";if(e.element instanceof za)t=`${e.element.stroke_dasharray==""?`<rect fill="${e.element.fill}" fill-opacity="${e.element.fill_opacity}" height="${e.element.height}" width="${e.element.width}" rx="${e.element.rx}" ry="${e.element.ry}" />`:`<rect fill="${e.element.fill}" fill-opacity="${e.element.fill_opacity}" height="${e.element.height}" width="${e.element.width}" stroke="${e.element.stroke}" stroke-width="${e.element.stroke_width}" stroke-dasharray="${e.element.stroke_dasharray}" rx="${e.element.rx}" ry="${e.element.ry}" />`}`;else if(e.element instanceof Oi)t=`${e.element.stroke_dasharray==""?`<ellipse fill="${e.element.fill}" fill-opacity="${e.element.fill_opacity}" cx="${e.element.cx}" cy="${e.element.cy}" rx="${e.element.rx}" ry="${e.element.ry}"/>`:`<ellipse fill="${e.element.fill}" fill-opacity="${e.element.fill_opacity}" cx="${e.element.cx}" cy="${e.element.cy}" rx="${e.element.rx}" ry="${e.element.ry}" stroke="${e.element.stroke}" stroke-width="${e.element.stroke_width}" stroke-dasharray="${e.element.stroke_dasharray}" />`}`;else if(e.element instanceof Ur){let i=e.element,a=i.arrow_start?' marker-start="url(#line-start)"':"",s=i.arrow_end?' marker-end="url(#line-end)"':"",d=i.control_offset?` data-control-offset="${i.control_offset.join(",")}"`:"";t=`<line stroke="${i.stroke}" stroke-width="${i.stroke_width}" x1="${i.x1}" x2="${i.x2}" y1="${i.y1}" y2="${i.y2}" stroke-dasharray="${i.stroke_dasharray??"none"}"${a}${s} data-drawing-type="${i.drawing_type??"straight"}" data-arrow-start="${i.arrow_start??!1}" data-arrow-end="${i.arrow_end??!1}"${d} />`}else if(e.element instanceof wr){let i=e.element,a=i.points.map(p=>[p.x,p.y]);t=`<path d="${Gu().curve(this.getCurveInterpolator(i.curve_type||"catmullrom"))(a)||""}" stroke="${i.stroke}" stroke-width="${i.stroke_width}" stroke-dasharray="${i.stroke_dasharray??"none"}" fill="none" data-curve-type="${i.curve_type??"catmullrom"}" data-arrow-start="${i.arrow_start}" data-arrow-end="${i.arrow_end}" />`}else if(e.element instanceof zs)t=`<text fill="${e.element.fill}" fill-opacity="1.0" font-family="${e.element.font_family}" font-size="${e.element.font_size}" font-weight="${e.element.font_weight}">${e.element.text}</text>`;else return"";return`<svg height="${e.element.height}" width="${e.element.width}">${t}</svg>`}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Ep=(()=>{class n{get(e){return+e.value>=0?null:{negativeValue:!0}}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var y_=(()=>{class n{get(e){return+e.value>-360&&+e.value<=360?null:{negativeValue:!0}}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var fC=(n,o)=>o.value;function u3e(n,o){if(n&1){let e=R();r(0,"mat-form-field",3)(1,"mat-label"),c(2,"Fill color"),l(),r(3,"input",4),_("input",function(i){y(e);let a=h();return w(a.onFillChange(i.target.value))}),l()()}if(n&2){let e=h();m(3),v("value",e.element.fill)}}function g3e(n,o){if(n&1&&(r(0,"mat-option",7),c(1),l()),n&2){let e=o.$implicit;v("value",e.value),m(),X(" ",e.name," ")}}function h3e(n,o){if(n&1){let e=R();r(0,"mat-form-field",3)(1,"mat-label"),c(2,"Width"),l(),r(3,"input",13),_("input",function(i){y(e);let a=h();return w(a.onWidthChange(+i.target.value))}),l()()}if(n&2){let e=h();m(3),v("value",e.element.width)}}function _3e(n,o){if(n&1){let e=R();r(0,"mat-form-field",3)(1,"mat-label"),c(2,"Height"),l(),r(3,"input",13),_("input",function(i){y(e);let a=h();return w(a.onHeightChange(+i.target.value))}),l()()}if(n&2){let e=h();m(3),v("value",e.element.height)}}function f3e(n,o){if(n&1){let e=R();r(0,"mat-form-field",8)(1,"mat-label"),c(2,"Corner radius"),l(),r(3,"input",14),_("input",function(i){y(e);let a=h();return w(a.onRxChange(+i.target.value))}),l()()}if(n&2){let e=h();m(3),v("value",e.element.rx)}}function v3e(n,o){if(n&1&&(r(0,"mat-option",7),c(1),l()),n&2){let e=o.$implicit;v("value",e.value),m(),X(" ",e.name," ")}}function C3e(n,o){if(n&1&&(r(0,"mat-option",7),c(1),l()),n&2){let e=o.$implicit;v("value",e.value),m(),X(" ",e.name," ")}}function b3e(n,o){if(n&1){let e=R();r(0,"mat-form-field",3)(1,"mat-label"),c(2,"Curve type"),l(),r(3,"mat-select",6),_("selectionChange",function(i){y(e);let a=h();return w(a.onCurveTypeChange(i.value))}),Q(4,v3e,2,2,"mat-option",7,fC),l()(),r(6,"mat-form-field",3)(7,"mat-label"),c(8,"Arrow direction"),l(),r(9,"mat-select",6),_("selectionChange",function(i){y(e);let a=h();return w(a.onArrowDirectionChange(i.value))}),Q(10,C3e,2,2,"mat-option",7,fC),l()()}if(n&2){let e=h();m(3),v("value",e.element.curve_type),m(),K(e.curveTypes),m(5),v("value",e.element.arrow_direction),m(),K(e.arrowDirections)}}function x3e(n,o){if(n&1&&(r(0,"mat-option",7),c(1),l()),n&2){let e=o.$implicit;v("value",e.value),m(),X(" ",e.name," ")}}function y3e(n,o){if(n&1&&(r(0,"mat-option",7),c(1),l()),n&2){let e=o.$implicit;v("value",e.value),m(),X(" ",e.name," ")}}function w3e(n,o){if(n&1){let e=R();r(0,"mat-form-field",3)(1,"mat-label"),c(2,"Arrow direction"),l(),r(3,"mat-select",6),_("selectionChange",function(i){y(e);let a=h();return w(a.onLineArrowDirectionChange(i.value))}),Q(4,x3e,2,2,"mat-option",7,fC),l()(),r(6,"mat-form-field",3)(7,"mat-label"),c(8,"Drawing type"),l(),r(9,"mat-select",6),_("selectionChange",function(i){y(e);let a=h();return w(a.onLineDrawingTypeChange(i.value))}),Q(10,y3e,2,2,"mat-option",7,fC),l()()}if(n&2){let e=h();m(3),v("value",e.element.line_arrow_direction),m(),K(e.arrowDirections),m(5),v("value",e.element.line_drawing_type),m(),K(e.lineDrawingTypes)}}function M3e(n,o){n&1&&(r(0,"mat-form-field",8)(1,"mat-label"),c(2,"Rotation"),l(),L(3,"input",15),l())}function S3e(n,o){n&1&&L(0,"mat-spinner",12)}function k3e(n,o){n&1&&c(0," Apply ")}var CS=(()=>{class n{dialogRef=f(We);drawingToMapDrawingConverter=f(cp);mapDrawingToSvgConverter=f(js);drawingService=f(Wi);drawingsDataSource=f(Ui);formBuilder=f(Ai);toasterService=f(re);nonNegativeValidator=f(Ep);rotationValidator=f(y_);qtDasharrayFixer=f(Cd);cd=f(oe);isApplying=z(!1);controller;project;drawing;element;formGroup;borderTypes=[{qt:"none",value:"none",name:"Solid"},{qt:"10, 2",value:"25, 25",name:"Dash"},{qt:"4, 2",value:"5, 25",name:"Dot"},{qt:"12, 3, 5, 3",value:"5, 25, 25",name:"Dash Dot"},{qt:"12, 3, 5, 3, 5, 3",value:"25, 25, 5, 25, 5",name:"Dash Dot Dot"},{qt:"",value:"",name:"No border"}];curveTypes=[{value:"catmullrom",name:"Catmull-Rom (Smooth)"},{value:"basis",name:"Basis (B-spline)"},{value:"monotone",name:"Monotone"}];arrowDirections=[{value:"none",name:"No Arrow"},{value:"end",name:"End Arrow"},{value:"start",name:"Start Arrow"},{value:"both",name:"Both Arrows"}];lineDrawingTypes=[{value:"straight",name:"Straight Line"},{value:"freeform",name:"Freeform (Control Point)"}];constructor(){this.formGroup=this.formBuilder.group({borderWidth:new Ge("",[Ue.required,this.nonNegativeValidator.get]),rotation:new Ge("",[Ue.required,this.rotationValidator.get])})}ngOnInit(){let e;this.element=new x4,this.drawing.element instanceof za||this.drawing.element instanceof Oi?(this.element.fill=this.drawing.element.fill,this.element.width=this.drawing.element.width,this.element.height=this.drawing.element.height,this.element.stroke=this.drawing.element.stroke,this.element.stroke_dasharray=this.drawing.element.stroke_dasharray==null&&this.drawing.element.stroke_width==null?"":this.drawing.element.stroke_dasharray??"none",this.element.stroke_width=this.drawing.element.stroke_width):this.drawing.element instanceof Ur?(this.element.stroke=this.drawing.element.stroke,this.element.stroke_dasharray=this.drawing.element.stroke_dasharray==null&&this.drawing.element.stroke_width==null?"":this.drawing.element.stroke_dasharray??"none",this.element.stroke_width=this.drawing.element.stroke_width,this.drawing.element.arrow_start&&this.drawing.element.arrow_end?this.element.line_arrow_direction="both":this.drawing.element.arrow_start?this.element.line_arrow_direction="start":this.drawing.element.arrow_end?this.element.line_arrow_direction="end":this.element.line_arrow_direction="none",this.element.line_drawing_type=this.drawing.element.drawing_type||"straight"):this.drawing.element instanceof wr&&(this.element.stroke=this.drawing.element.stroke,this.element.stroke_dasharray=this.drawing.element.stroke_dasharray==null&&this.drawing.element.stroke_width==null?"":this.drawing.element.stroke_dasharray??"none",this.element.stroke_width=this.drawing.element.stroke_width,this.element.curve_type=this.drawing.element.curve_type||"catmullrom",this.drawing.element.arrow_start&&this.drawing.element.arrow_end?this.element.arrow_direction="both":this.drawing.element.arrow_start?this.element.arrow_direction="start":this.drawing.element.arrow_end?this.element.arrow_direction="end":this.element.arrow_direction="none"),this.drawing.element instanceof za&&(this.element.rx=this.drawing.element.rx,this.element.ry=this.drawing.element.ry),this.element.stroke_width===void 0&&(this.element.stroke_width=0),this.formGroup.controls.borderWidth.setValue(this.element.stroke_width),this.formGroup.controls.rotation.setValue(this.drawing.rotation)}onFillChange(e){this.element.fill=e,this.cd.markForCheck()}onStrokeChange(e){this.element.stroke=e,this.cd.markForCheck()}onStrokeDasharrayChange(e){this.element.stroke_dasharray=e,this.cd.markForCheck()}onWidthChange(e){this.element.width=e,this.cd.markForCheck()}onHeightChange(e){this.element.height=e,this.cd.markForCheck()}onRxChange(e){this.element.rx=e,this.cd.markForCheck()}onCurveTypeChange(e){this.element.curve_type=e,this.cd.markForCheck()}onArrowDirectionChange(e){this.element.arrow_direction=e,this.cd.markForCheck()}onLineArrowDirectionChange(e){this.element.line_arrow_direction=e,this.cd.markForCheck()}onLineDrawingTypeChange(e){this.element.line_drawing_type=e,this.cd.markForCheck()}onNoClick(){this.dialogRef.close()}onYesClick(){if(!this.isApplying())if(this.formGroup.valid){this.element.stroke_dasharray==""?this.element.stroke_width=0:this.element.stroke_width=this.formGroup.get("borderWidth").value===0?2:this.formGroup.get("borderWidth").value,this.drawing.rotation=this.formGroup.get("rotation").value,this.drawing.element instanceof za||this.drawing.element instanceof Oi?(this.drawing.element.fill=this.element.fill,this.drawing.element.width=this.element.width,this.drawing.element.height=this.element.height,this.drawing.element.stroke=this.element.stroke??"#000000",this.drawing.element.stroke_dasharray=this.element.stroke_dasharray,this.drawing.element.stroke_width=this.element.stroke_width):this.drawing.element instanceof Ur?(this.element.stroke_dasharray!=""?(this.drawing.element.stroke=this.element.stroke??"#000000",this.drawing.element.stroke_dasharray=this.element.stroke_dasharray===""?"none":this.element.stroke_dasharray,this.drawing.element.stroke_width=this.element.stroke_width===0?2:this.element.stroke_width):this.toasterService.warning("No border style line element not supported"),this.drawing.element.stroke=this.element.stroke,this.drawing.element.stroke_dasharray=this.element.stroke_dasharray,this.drawing.element.stroke_width=this.element.stroke_width===0?2:this.element.stroke_width,this.drawing.element.arrow_start=this.element.line_arrow_direction==="start"||this.element.line_arrow_direction==="both",this.drawing.element.arrow_end=this.element.line_arrow_direction==="end"||this.element.line_arrow_direction==="both",this.drawing.element.drawing_type=this.element.line_drawing_type||"straight",this.drawing.element.drawing_type==="freeform"&&!this.drawing.element.control_offset&&(this.drawing.element.control_offset=[0,0])):this.drawing.element instanceof wr&&(this.drawing.element.stroke=this.element.stroke??"#000000",this.drawing.element.stroke_dasharray=this.element.stroke_dasharray===""?"none":this.element.stroke_dasharray,this.drawing.element.stroke_width=this.element.stroke_width===0?2:this.element.stroke_width,this.drawing.element.curve_type=this.element.curve_type||"catmullrom",this.drawing.element.arrow_start=this.element.arrow_direction==="start"||this.element.arrow_direction==="both",this.drawing.element.arrow_end=this.element.arrow_direction==="end"||this.element.arrow_direction==="both"),this.drawing.element instanceof za?(this.drawing.element.rx=this.element.rx,this.drawing.element.ry=this.element.rx):this.drawing.element instanceof Oi&&(this.drawing.element.rx=this.element.width/2,this.drawing.element.ry=this.element.height/2);let e=this.drawingToMapDrawingConverter.convert(this.drawing);e.element=this.drawing.element,this.drawing.svg=this.mapDrawingToSvgConverter.convert(e),this.isApplying.set(!0),this.dialogRef.disableClose=!0,this.drawingService.update(this.controller,this.drawing).subscribe({next:t=>{this.drawingsDataSource.update(t),this.toasterService.success("Drawing style updated."),this.dialogRef.close()},error:t=>{let i=t.error?.message||t.message||"Failed to update drawing";this.toasterService.error(i),this.isApplying.set(!1),this.dialogRef.disableClose=!1,this.cd.markForCheck()}})}else this.toasterService.error("Entered data is incorrect")}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-style-editor"]],decls:31,vars:12,consts:[["mat-dialog-title",""],[1,"modal-form-container","gns3-form-grid-container"],[1,"gns3-form-grid",3,"formGroup"],["appearance","outline","subscriptSizing","dynamic",1,"form-field"],["matInput","","type","color",3,"input","value"],["matInput","","formControlName","borderWidth","type","number","min","0","max","100"],[3,"selectionChange","value"],[3,"value"],["appearance","outline","subscriptSizing","dynamic",1,"form-field","full-width"],["mat-dialog-actions","","align","end"],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"],["diameter","20"],["matInput","","min","0","type","number",3,"input","value"],["matInput","","type","number","min","0","max","100",3,"input","value"],["matInput","","formControlName","rotation","type","number"]],template:function(t,i){t&1&&(r(0,"h1",0),c(1,"Style editor"),l(),r(2,"div",1)(3,"form",2),T(4,u3e,4,1,"mat-form-field",3),r(5,"mat-form-field",3)(6,"mat-label"),c(7,"Border color"),l(),r(8,"input",4),_("input",function(s){return i.onStrokeChange(s.target.value)}),l()(),r(9,"mat-form-field",3)(10,"mat-label"),c(11,"Border width"),l(),L(12,"input",5),l(),r(13,"mat-form-field",3)(14,"mat-label"),c(15,"Border style"),l(),r(16,"mat-select",6),_("selectionChange",function(s){return i.onStrokeDasharrayChange(s.value)}),Q(17,g3e,2,2,"mat-option",7,fC),l()(),T(19,h3e,4,1,"mat-form-field",3),T(20,_3e,4,1,"mat-form-field",3),T(21,f3e,4,1,"mat-form-field",8),T(22,b3e,12,2),T(23,w3e,12,2),T(24,M3e,4,0,"mat-form-field",8),l()(),r(25,"div",9)(26,"button",10),_("click",function(){return i.onNoClick()}),c(27,"Cancel"),l(),r(28,"button",11),_("click",function(){return i.onYesClick()}),T(29,S3e,1,0,"mat-spinner",12)(30,k3e,1,0),l()()),t&2&&(m(3),v("formGroup",i.formGroup),m(),E(i.element.fill!==void 0?4:-1),m(4),v("value",i.element.stroke),m(8),v("value",i.element.stroke_dasharray),m(),K(i.borderTypes),m(2),E(i.element.width!==void 0?19:-1),m(),E(i.element.height!==void 0?20:-1),m(),E(i.element.rx!==void 0?21:-1),m(),E(i.element.curve_type!==void 0?22:-1),m(),E(i.element.line_arrow_direction!==void 0?23:-1),m(),E(i.element.line_drawing_type===void 0||i.element.line_drawing_type==="straight"?24:-1),m(4),v("disabled",i.isApplying()),m(),E(i.isApplying()?29:30))},dependencies:[fe,It,Ct,At,No,Nt,vt,Er,pm,Ut,Yt,ke,qe,Qe,we,Pe,Ve,ye,Ee,ot,ct,nt,Ho,Y,he,rt,mt],styles:["[_nghost-%COMP%]{display:block;width:100%;min-width:0}input[type=color][_ngcontent-%COMP%]{display:block;appearance:none;border:none;height:24px;border-radius:var(--gns3-density-radius-sm)}input[type=color][_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--mat-sys-primary);outline-offset:3px}input[type=color][_ngcontent-%COMP%]::-webkit-color-swatch-wrapper{padding:0}input[type=color][_ngcontent-%COMP%]::-webkit-color-swatch{border:none}.modal-form-container[_ngcontent-%COMP%]{box-sizing:border-box;width:100%;min-width:0;padding:var(--gns3-density-space-4)}.form-field.full-width[_ngcontent-%COMP%]{grid-column:1/-1}"],changeDetection:0})}return n})(),x4=class{fill;width;height;stroke;stroke_width;stroke_dasharray;rx;ry;curve_type;arrow_direction;line_arrow_direction;line_drawing_type};function P3e(n,o){if(n&1){let e=R();r(0,"button",1),_("click",function(){y(e);let i=h();return w(i.editStyle())}),r(1,"mat-icon"),c(2,"style"),l(),r(3,"span"),c(4,"Edit style"),l()()}}var bS=(()=>{class n{dialog=f(Xe);controller=ee(void 0);project=ee(void 0);drawing=ee(void 0);isImageDrawing=!1;constructor(){}ngOnChanges(){let e=this.drawing();this.isImageDrawing=e?.element instanceof ud}editStyle(){let t=this.dialog.open(CS,{panelClass:["base-dialog-panel","simple-dialog-panel","edit-style-action-dialog-panel","dialog-medium-panel"],autoFocus:!1,disableClose:!1}).componentInstance;t.controller=this.controller(),t.project=this.project(),t.drawing=this.drawing()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-edit-style-action"]],inputs:{controller:[1,"controller"],project:[1,"project"],drawing:[1,"drawing"]},features:[Nn],decls:1,vars:1,consts:[["mat-menu-item",""],["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&T(0,P3e,5,0,"button",0),t&2&&E(!i.isImageDrawing&&i.drawing()?0:-1)},dependencies:[ke,it,ut,ie,ce],encapsulation:2,changeDetection:0})}return n})();var T3e=["textArea"];function E3e(n,o){n&1&&L(0,"mat-spinner",39)}function O3e(n,o){n&1&&c(0," Apply ")}var xS=(()=>{class n{textArea=ln("textArea");isApplying=z(!1);dialogRef=f(We);drawingToMapDrawingConverter=f(cp);mapDrawingToSvgConverter=f(js);drawingService=f(Wi);drawingsDataSource=f(Ui);renderer=f(qi);nodeService=f(ft);nodesDataSource=f(Xn);linkService=f(Ri);linksDataSource=f(so);formBuilder=f(Ai);toasterService=f(re);rotationValidator=f(y_);fontFixer=f(dr);cdr=f(oe);controller;project;drawing;node;label;link;linkNode;element;rotation;isTextEditable;formGroup;constructor(){}ngOnInit(){this.formGroup=this.formBuilder.group({rotation:new Ge("",[Ue.required,this.rotationValidator.get])}),this.label&&this.node?(this.isTextEditable=!1,this.rotation=this.label.rotation.toString(),this.element=this.getTextElementFromLabel()):this.linkNode&&this.link?(this.isTextEditable=!0,this.label=this.link.nodes.find(i=>i.node_id===this.linkNode.node_id).label,this.rotation=this.label.rotation.toString(),this.element=this.getTextElementFromLabel()):this.drawing&&(this.isTextEditable=!0,this.rotation=this.drawing.rotation.toString(),this.element=this.drawing.element);let e={font_family:this.element.font_family,font_size:this.element.font_size,font_weight:this.element.font_weight};e=this.fontFixer.fix(e),this.formGroup.controls.rotation.setValue(this.rotation);let t=this.textArea();this.renderer.setStyle(t.nativeElement,"color",this.element.fill),this.renderer.setStyle(t.nativeElement,"font-family",e.font_family),this.renderer.setStyle(t.nativeElement,"font-size",`${e.font_size}pt`),this.renderer.setStyle(t.nativeElement,"font-weight",e.font_weight)}getTextElementFromLabel(){var e=[],t=new zs;for(var i of this.label.style.split(";"))e.push({property:i.split(": ")[0],value:i.split(": ")[1]});return t.text=this.label.text?this.label.text:"",t.font_family=e.find(a=>a.property==="font-family")?e.find(a=>a.property==="font-family").value:"TypeWriter",t.font_size=e.find(a=>a.property==="font-size")?+e.find(a=>a.property==="font-size").value:10,t.font_weight=e.find(a=>a.property==="font-weight")?e.find(a=>a.property==="font-weight").value:"normal",t.fill=e.find(a=>a.property==="fill")?e.find(a=>a.property==="fill").value:"#000000",t.fill_opacity=e.find(a=>a.property==="fill-opacity")?+e.find(a=>a.property==="fill-opacity").value:1,t}getStyleFromTextElement(){return`font-family: ${this.element.font_family};font-size: ${this.element.font_size};font-weight: ${this.element.font_weight};fill: ${this.element.fill};fill-opacity: ${this.element.fill_opacity};`}onNoClick(){this.dialogRef.close()}onYesClick(){if(!this.isApplying())if(this.formGroup.valid){if(this.rotation=this.formGroup.get("rotation").value,this.label&&this.node)this.node.label.style=this.getStyleFromTextElement(),this.node.label.rotation=+this.rotation,this.isApplying.set(!0),this.dialogRef.disableClose=!0,this.nodeService.updateLabel(this.controller,this.node,this.node.label).subscribe({next:e=>{this.nodesDataSource.update(e),this.toasterService.success("Node label updated."),this.dialogRef.close(),this.cdr.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to update node label";this.toasterService.error(t),this.isApplying.set(!1),this.dialogRef.disableClose=!1,this.cdr.markForCheck()}});else if(this.linkNode&&this.link)this.label.style=this.getStyleFromTextElement(),this.label.rotation=+this.rotation,this.label.text=this.element.text,this.isApplying.set(!0),this.dialogRef.disableClose=!0,this.linkService.updateLink(this.controller,this.link).subscribe({next:e=>{this.linksDataSource.update(e),this.toasterService.success("Link label updated."),this.dialogRef.close(),this.cdr.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to update link";this.toasterService.error(t),this.isApplying.set(!1),this.dialogRef.disableClose=!1,this.cdr.markForCheck()}});else if(this.drawing){this.drawing.rotation=+this.rotation,this.drawing.element=this.element;let e=this.drawingToMapDrawingConverter.convert(this.drawing);e.element=this.drawing.element,this.drawing.svg=this.mapDrawingToSvgConverter.convert(e),this.isApplying.set(!0),this.dialogRef.disableClose=!0,this.drawingService.update(this.controller,this.drawing).subscribe({next:t=>{this.drawingsDataSource.update(t),this.toasterService.success("Drawing text updated."),this.dialogRef.close(),this.cdr.markForCheck()},error:t=>{let i=t.error?.message||t.message||"Failed to update drawing";this.toasterService.error(i),this.isApplying.set(!1),this.dialogRef.disableClose=!1,this.cdr.markForCheck()}})}}else this.toasterService.error("Entered data is incorrect")}changeTextColor(e){this.element.fill=e,this.renderer.setStyle(this.textArea().nativeElement,"color",e),this.cdr.markForCheck()}changeFontFamily(e){this.element.font_family=e.value,this.renderer.setStyle(this.textArea().nativeElement,"font-family",e.value),this.cdr.markForCheck()}changeFontSize(e){let t=parseFloat(e);!isNaN(t)&&t>0&&(this.element.font_size=t,this.renderer.setStyle(this.textArea().nativeElement,"font-size",`${t}pt`),this.cdr.markForCheck())}changeFontWeight(e){this.element.font_weight=e.value,this.renderer.setStyle(this.textArea().nativeElement,"font-weight",e.value),this.cdr.markForCheck()}changeTextDecoration(e){this.element.text_decoration=e.value,this.renderer.setStyle(this.textArea().nativeElement,"text-decoration",e.value),this.cdr.markForCheck()}onTextChange(e){this.element.text=e,this.cdr.markForCheck()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-text-editor"]],viewQuery:function(t,i){t&1&&Bn(i.textArea,T3e,5),t&2&&jn()},decls:88,vars:10,consts:[["textArea",""],["mat-dialog-title",""],["mat-dialog-content",""],[1,"text-editor-grid"],["matInput","","type","color",3,"input","value"],[3,"valueChange","selectionChange","value"],["value","TypeWriter"],["value","Arial"],["value","Courier New"],["value","Times New Roman"],["value","Helvetica"],["value","Verdana"],["value","Georgia"],["value","Comic Sans MS"],["matInput","","type","number","min","1","max","200","step","0.5",3,"input","value"],["value","normal"],["value","bold"],["value","lighter"],["value","bolder"],["value","100"],["value","200"],["value","300"],["value","400"],["value","500"],["value","600"],["value","700"],["value","800"],["value","900"],["value","none"],["value","underline"],["value","line-through"],["value","overline"],[3,"formGroup"],["formControlName","rotation","matInput","","type","text"],[1,"text-editor-textarea"],["id","textArea",1,"text",3,"input","value","readonly"],["mat-dialog-actions",""],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"],["diameter","20"]],template:function(t,i){if(t&1){let a=R();r(0,"h1",1),c(1,"Text editor"),l(),r(2,"div",2)(3,"div",3)(4,"mat-form-field")(5,"mat-label"),c(6,"Fill color"),l(),r(7,"input",4),_("input",function(d){return i.changeTextColor(d.target.value)}),l()(),r(8,"mat-form-field")(9,"mat-label"),c(10,"Font family"),l(),r(11,"mat-select",5),rn("valueChange",function(d){return y(a),Xt(i.element.font_family,d)||(i.element.font_family=d),w(d)}),_("selectionChange",function(d){return i.changeFontFamily(d)}),r(12,"mat-option",6),c(13,"TypeWriter"),l(),r(14,"mat-option",7),c(15,"Arial"),l(),r(16,"mat-option",8),c(17,"Courier New"),l(),r(18,"mat-option",9),c(19,"Times New Roman"),l(),r(20,"mat-option",10),c(21,"Helvetica"),l(),r(22,"mat-option",11),c(23,"Verdana"),l(),r(24,"mat-option",12),c(25,"Georgia"),l(),r(26,"mat-option",13),c(27,"Comic Sans MS"),l()()(),r(28,"mat-form-field")(29,"mat-label"),c(30,"Font size"),l(),r(31,"input",14),_("input",function(d){return i.changeFontSize(d.target.value)}),l()(),r(32,"mat-form-field")(33,"mat-label"),c(34,"Font weight"),l(),r(35,"mat-select",5),rn("valueChange",function(d){return y(a),Xt(i.element.font_weight,d)||(i.element.font_weight=d),w(d)}),_("selectionChange",function(d){return i.changeFontWeight(d)}),r(36,"mat-option",15),c(37,"Normal"),l(),r(38,"mat-option",16),c(39,"Bold"),l(),r(40,"mat-option",17),c(41,"Lighter"),l(),r(42,"mat-option",18),c(43,"Bolder"),l(),r(44,"mat-option",19),c(45,"100 (Thin)"),l(),r(46,"mat-option",20),c(47,"200 (Extra Light)"),l(),r(48,"mat-option",21),c(49,"300 (Light)"),l(),r(50,"mat-option",22),c(51,"400 (Normal)"),l(),r(52,"mat-option",23),c(53,"500 (Medium)"),l(),r(54,"mat-option",24),c(55,"600 (Semi Bold)"),l(),r(56,"mat-option",25),c(57,"700 (Bold)"),l(),r(58,"mat-option",26),c(59,"800 (Extra Bold)"),l(),r(60,"mat-option",27),c(61,"900 (Black)"),l()()(),r(62,"mat-form-field")(63,"mat-label"),c(64,"Text decoration"),l(),r(65,"mat-select",5),rn("valueChange",function(d){return y(a),Xt(i.element.text_decoration,d)||(i.element.text_decoration=d),w(d)}),_("selectionChange",function(d){return i.changeTextDecoration(d)}),r(66,"mat-option",28),c(67,"None"),l(),r(68,"mat-option",29),c(69,"Underline"),l(),r(70,"mat-option",30),c(71,"Line Through"),l(),r(72,"mat-option",31),c(73,"Overline"),l()()(),r(74,"form",32)(75,"mat-form-field")(76,"mat-label"),c(77,"Rotation"),l(),L(78,"input",33),l()(),r(79,"div",34)(80,"textarea",35,0),_("input",function(d){return i.onTextChange(d.target.value)}),l()()()(),r(82,"div",36)(83,"button",37),_("click",function(){return i.onNoClick()}),c(84,"Cancel"),l(),r(85,"button",38),_("click",function(){return i.onYesClick()}),T(86,E3e,1,0,"mat-spinner",39)(87,O3e,1,0),l()()}t&2&&(m(7),v("value",i.element.fill),m(4),an("value",i.element.font_family),m(20),v("value",i.element.font_size),m(4),an("value",i.element.font_weight),m(30),an("value",i.element.text_decoration),m(9),v("formGroup",i.formGroup),m(6),v("value",i.element.text)("readonly",!i.isTextEditable),m(5),v("disabled",i.isApplying()),m(),E(i.isApplying()?86:87))},dependencies:[fe,It,Ct,At,Nt,vt,Ut,Yt,ke,qe,Qe,bt,we,Pe,Ve,ye,Ee,Y,he,ot,ct,nt,Ho,rt,mt],styles:[".text[_ngcontent-%COMP%]{width:100%;min-height:100px;height:auto;font-family:inherit;resize:vertical;line-height:1.4}"],changeDetection:0})}return n})();var yS=(()=>{class n{dialog=f(Xe);controller=ee(void 0);project=ee(void 0);drawing=ee(void 0);node=ee(void 0);label=ee(void 0);link=ee(void 0);linkNode=ee(void 0);editText(){let t=this.dialog.open(xS,{panelClass:["base-dialog-panel","edit-text-action-dialog-panel","dialog-medium-panel"],autoFocus:!1,disableClose:!1}).componentInstance;t.controller=this.controller(),t.project=this.project(),t.drawing=this.drawing(),t.node=this.node(),t.label=this.label(),t.link=this.link(),t.linkNode=this.linkNode()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-edit-text-action"]],inputs:{controller:[1,"controller"],project:[1,"project"],drawing:[1,"drawing"],node:[1,"node"],label:[1,"label"],link:[1,"link"],linkNode:[1,"linkNode"]},decls:5,vars:0,consts:[["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&(r(0,"button",0),_("click",function(){return i.editText()}),r(1,"mat-icon"),c(2,"text_format"),l(),r(3,"span"),c(4,"Edit text"),l()())},dependencies:[ke,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();function D3e(n,o){if(n&1){let e=R();r(0,"div",2)(1,"textarea",7,0),_("input",function(i){y(e);let a=h();return w(a.onConfigChange(i.target.value))}),l()()}if(n&2){let e=h();m(),v("value",e.config())}}function I3e(n,o){if(n&1){let e=R();r(0,"mat-tab-group")(1,"mat-tab",8)(2,"textarea",9,0),_("input",function(i){y(e);let a=h();return w(a.onConfigChange(i.target.value))}),l()(),r(4,"mat-tab",10)(5,"textarea",9,0),_("input",function(i){y(e);let a=h();return w(a.onPrivateConfigChange(i.target.value))}),l()()()}if(n&2){let e=h();m(2),v("value",e.config()),m(3),v("value",e.privateConfig())}}function A3e(n,o){n&1&&L(0,"mat-spinner",6)}function N3e(n,o){n&1&&c(0," Apply ")}var wS=(()=>{class n{dialogRef=f(We);nodeService=f(ft);toasterService=f(re);cdr=f(oe);controller;project;node;config=$("");privateConfig=$("");isApplying=z(!1);ngOnInit(){this.nodeService.getStartupConfiguration(this.controller,this.node).subscribe({next:e=>{this.config.set(e),this.cdr.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load startup configuration";this.toasterService.error(t),this.cdr.markForCheck()}}),(this.node.node_type==="iou"||this.node.node_type==="dynamips")&&this.nodeService.getPrivateConfiguration(this.controller,this.node).subscribe({next:e=>{this.privateConfig.set(e),this.cdr.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load private configuration";this.toasterService.error(t),this.cdr.markForCheck()}})}onConfigChange(e){this.config.set(e),this.cdr.markForCheck()}onPrivateConfigChange(e){this.privateConfig.set(e),this.cdr.markForCheck()}onSaveClick(){this.isApplying()||(this.isApplying.set(!0),this.dialogRef.disableClose=!0,this.nodeService.saveConfiguration(this.controller,this.node,this.config()).subscribe({next:e=>{this.node.node_type==="iou"||this.node.node_type==="dynamips"?this.nodeService.savePrivateConfiguration(this.controller,this.node,this.privateConfig()).subscribe({next:t=>{this.dialogRef.close(),this.toasterService.success(`Configuration for node ${this.node.name} saved.`),this.cdr.markForCheck()},error:t=>{let i=t.error?.message||t.message||"Failed to save private configuration";this.toasterService.error(i),this.isApplying.set(!1),this.dialogRef.disableClose=!1,this.cdr.markForCheck()}}):(this.dialogRef.close(),this.toasterService.success(`Configuration for node ${this.node.name} saved.`),this.cdr.markForCheck())},error:e=>{let t=e.error?.message||e.message||"Failed to save configuration";this.toasterService.error(t),this.isApplying.set(!1),this.dialogRef.disableClose=!1,this.cdr.markForCheck()}}))}onCancelClick(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-config-editor"]],inputs:{config:[1,"config"],privateConfig:[1,"privateConfig"]},outputs:{config:"configChange",privateConfig:"privateConfigChange"},decls:10,vars:5,consts:[["textArea",""],["mat-dialog-title",""],[1,"modal-form-container"],["mat-dialog-actions",""],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"],["diameter","20"],["id","textArea",1,"textArea",3,"input","value"],["label","Startup config"],["id","textArea",1,"textAreaTab",3,"input","value"],["label","Private config"]],template:function(t,i){t&1&&(r(0,"h1",1),c(1),l(),T(2,D3e,3,1,"div",2),T(3,I3e,7,2,"mat-tab-group"),r(4,"div",3)(5,"button",4),_("click",function(){return i.onCancelClick()}),c(6,"Cancel"),l(),r(7,"button",5),_("click",function(){return i.onSaveClick()}),T(8,A3e,1,0,"mat-spinner",6)(9,N3e,1,0),l()()),t&2&&(m(),X("Configuration for node ",i.node.name),m(),E(i.node.node_type==="vpcs"?2:-1),m(),E(i.node.node_type==="iou"||i.node.node_type==="dynamips"?3:-1),m(4),v("disabled",i.isApplying()),m(),E(i.isApplying()?8:9))},dependencies:[ke,qe,Qe,Y,he,rt,mt],styles:[".textArea[_ngcontent-%COMP%]{width:100%;height:350px}.textAreaTab[_ngcontent-%COMP%]{width:100%;height:300px}"],changeDetection:0})}return n})();function F3e(n,o){if(n&1){let e=R();r(0,"button",1),_("click",function(){y(e);let i=h();return w(i.editConfig())}),r(1,"mat-icon"),c(2,"settings"),l(),r(3,"span"),c(4,"Edit config"),l()()}}var MS=(()=>{class n{dialog=f(Xe);controller=ee(void 0);project=ee(void 0);node=ee(void 0);editConfig(){let t=this.dialog.open(wS,{panelClass:["base-dialog-panel","edit-config-action-dialog-panel","dialog-medium-panel"],autoFocus:!1,disableClose:!1}).componentInstance;t.controller=this.controller(),t.project=this.project(),t.node=this.node()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-edit-config-action"]],inputs:{controller:[1,"controller"],project:[1,"project"],node:[1,"node"]},decls:1,vars:1,consts:[["mat-menu-item",""],["mat-menu-item","",3,"click"]],template:function(t,i){if(t&1&&T(0,F3e,5,0,"button",0),t&2){let a;E(((a=i.node())==null?null:a.node_type)==="vpcs"||((a=i.node())==null?null:a.node_type)==="iou"||((a=i.node())==null?null:a.node_type)==="dynamips"?0:-1)}},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();var w_=(()=>{class n{dialogRef=f(We);close(e){this.dialogRef.close(e)}onClose(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-config-dialog"]],decls:11,vars:0,consts:[["mat-dialog-title",""],["mat-dialog-content",""],[1,"config-options"],["mat-raised-button","","color","primary",3,"click"],["mat-dialog-actions","","align","end"],["mat-button","","color","accent",3,"click"]],template:function(t,i){t&1&&(r(0,"h1",0),c(1,"Choose configuration file"),l(),r(2,"div",1)(3,"div",2)(4,"button",3),_("click",function(){return i.close("startup-config")}),c(5,"Startup configuration"),l(),r(6,"button",3),_("click",function(){return i.close("private-config")}),c(7,"Private configuration"),l()()(),r(8,"div",4)(9,"button",5),_("click",function(){return i.onClose()}),c(10,"Cancel"),l()())},dependencies:[ke,qe,Qe,bt,Y,he],styles:[".config-options[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px;padding:8px 0}"],changeDetection:0})}return n})();function R3e(n,o){if(n&1){let e=R();r(0,"button",1),_("click",function(){y(e);let i=h();return w(i.exportConfig())}),r(1,"mat-icon"),c(2,"call_made"),l(),r(3,"span"),c(4,"Export config"),l()()}}var SS=(()=>{class n{nodeService=f(ft);dialog=f(Xe);toasterService=f(re);cdr=f(oe);controller=ee(void 0);node=ee(void 0);exportConfig(){let e=this.node();if(e.node_type==="vpcs")this.nodeService.getStartupConfiguration(this.controller(),e).subscribe({next:t=>{this.downloadByHtmlTag(t)},error:t=>{let i=t.error?.message||t.message||"Failed to export configuration";this.toasterService.error(i),this.cdr.markForCheck()}});else{let t=this.dialog.open(w_,{panelClass:["base-dialog-panel","export-config-action-dialog-panel","dialog-medium-panel"],autoFocus:!1,disableClose:!1}),i=t.componentInstance;t.afterClosed().subscribe({next:a=>{a==="startup-config"?this.nodeService.getStartupConfiguration(this.controller(),this.node()).subscribe({next:s=>{this.downloadByHtmlTag(s)},error:s=>{let d=s.error?.message||s.message||"Failed to export startup configuration";this.toasterService.error(d),this.cdr.markForCheck()}}):a==="private-config"&&this.nodeService.getPrivateConfiguration(this.controller(),this.node()).subscribe({next:s=>{this.downloadByHtmlTag(s)},error:s=>{let d=s.error?.message||s.message||"Failed to export private configuration";this.toasterService.error(d),this.cdr.markForCheck()}})},error:a=>{let s=a.error?.message||a.message||"Failed to get config type";this.toasterService.error(s),this.cdr.markForCheck()}})}}downloadByHtmlTag(e){let t=document.createElement("a");t.setAttribute("href",`data:text/plain;charset=utf-8,${encodeURIComponent(e)}`);let a=this.node();a.node_type==="vpcs"?t.setAttribute("download",`${a.name}_startup.vpc`):(a.node_type==="iou"||a.node_type==="dynamips")&&t.setAttribute("download",`${a.name}_startup.cfg`);var s=new MouseEvent("click");t.dispatchEvent(s),this.toasterService.success(`Configuration for node "${a.name}" exported.`)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-export-config-action"]],inputs:{controller:[1,"controller"],node:[1,"node"]},decls:1,vars:1,consts:[["mat-menu-item",""],["mat-menu-item","",3,"click"]],template:function(t,i){if(t&1&&T(0,R3e,5,0,"button",0),t&2){let a;E(((a=i.node())==null?null:a.node_type)==="vpcs"||((a=i.node())==null?null:a.node_type)==="dynamips"||((a=i.node())==null?null:a.node_type)==="iou"?0:-1)}},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();var z3e=["fileInput"],kS=(()=>{class n{nodeService=f(ft);toasterService=f(re);dialog=f(Xe);cdr=f(oe);controller=ee(void 0);node=ee(void 0);fileInput=ln("fileInput");configType;triggerClick(){if(this.fileInput().nativeElement.value="",this.node().node_type!=="vpcs"){let e=this.dialog.open(w_,{panelClass:["base-dialog-panel","import-config-action-dialog-panel","dialog-medium-panel"],autoFocus:!1,disableClose:!1}),t=e.componentInstance;e.afterClosed().subscribe({next:i=>{this.configType=i,this.cdr.markForCheck(),this.fileInput().nativeElement.click()},error:i=>{let a=i.error?.message||i.message||"Failed to get config type";this.toasterService.error(a),this.cdr.markForCheck()}})}else this.configType="startup-config",this.fileInput().nativeElement.click()}importConfig(e){let t=e.target.files[0],i=new FileReader;i.onload=a=>{let s=i.result;typeof s!="string"&&(s=s.toString()),this.configType==="startup-config"?this.nodeService.saveConfiguration(this.controller(),this.node(),s).subscribe({next:()=>{this.toasterService.success(`Configuration for node ${this.node().name} imported.`),this.cdr.markForCheck()},error:d=>{this.toasterService.error(d.error?.message||d.message||"Failed to import startup configuration"),this.cdr.markForCheck()}}):this.configType==="private-config"?this.nodeService.savePrivateConfiguration(this.controller(),this.node(),s).subscribe({next:()=>{this.toasterService.success(`Configuration for node ${this.node().name} imported.`),this.cdr.markForCheck()},error:d=>{this.toasterService.error(d.error?.message||d.message||"Failed to import private configuration"),this.cdr.markForCheck()}}):this.toasterService.error("No configuration type selected")},i.readAsText(t)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-import-config-action"]],viewQuery:function(t,i){t&1&&Bn(i.fileInput,z3e,5),t&2&&jn()},inputs:{controller:[1,"controller"],node:[1,"node"]},decls:7,vars:0,consts:[["fileInput",""],["type","file","accept",".txt, .vpc, .cfg",1,"non-visible",3,"change"],["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&(r(0,"input",1,0),_("change",function(s){return i.importConfig(s)}),l(),r(2,"button",2),_("click",function(){return i.triggerClick()}),r(3,"mat-icon"),c(4,"call_received"),l(),r(5,"span"),c(6,"Import config"),l()())},dependencies:[Y,ie,ce,it,ut],styles:[".non-visible[_ngcontent-%COMP%]{display:none}"],changeDetection:0})}return n})();var L3e=(n,o)=>o.key;function V3e(n,o){n&1&&(r(0,"div")(1,"h6",4),c(2,"Computing Idle-PC values, please wait..."),l(),r(3,"div",5),L(4,"mat-spinner",6),l()())}function B3e(n,o){if(n&1&&(r(0,"mat-option",10),c(1),l()),n&2){let e=o.$implicit;v("value",e.key),m(),X(" ",e.name," ")}}function j3e(n,o){if(n&1){let e=R();r(0,"h1",7),c(1,"Choose an Idle-PC value"),l(),r(2,"mat-form-field",8)(3,"mat-select",9),_("selectionChange",function(i){y(e);let a=h();return w(a.idlePC.set(i.value))}),Q(4,B3e,2,2,"mat-option",10,L3e),l()()}if(n&2){let e=h();m(3),v("value",e.idlePC())("matTooltip",e.getTooltip()),m(),K(e.idlepcs)}}function $3e(n,o){if(n&1){let e=R();r(0,"button",3),_("click",function(){y(e);let i=h();return w(i.onCompute())}),c(1,"Compute"),l()}}function H3e(n,o){n&1&&L(0,"mat-spinner",12)}function U3e(n,o){n&1&&c(0," Apply ")}function W3e(n,o){if(n&1){let e=R();r(0,"button",11),_("click",function(){y(e);let i=h();return w(i.onApply())}),T(1,H3e,1,0,"mat-spinner",12)(2,U3e,1,0),l()}if(n&2){let e=h();v("disabled",e.isApplying()),m(),E(e.isApplying()?1:2)}}var PS=(()=>{class n{nodeService=f(ft);dialogRef=f(We);toasterService=f(re);cd=f(oe);controller;node;idlepcs=[];idlePC=$("");isComputing=!1;isApplying=z(!1);ngOnInit(){this.onCompute()}getTooltip(){return`Best Idle-PC values are obtained when IOS is in idle state, after the 'Press RETURN to get started' message has appeared on the console, messages have finished displaying on the console and you have have actually pressed the RETURN key.
|
||
|
||
Finding the right idle-pc value is a trial and error process, consisting of applying different Idle-PC values and monitoring the CPU usage.
|
||
|
||
Select each value that appears in the list and click Apply, and note the CPU usage a few moments later. When you have found the value that minimises the CPU usage, apply that value.`}onCompute(){this.isComputing=!0,this.nodeService.getIdlePCProposals(this.controller,this.node).subscribe({next:e=>{let t=[];for(let i of e){let a=i.match(/^(0x[0-9a-f]{8})\s+\[(\d+)\]$/);if(a){let s=a[1],d=parseInt(a[2],10);50<=d&&d<=60&&(i+="*"),t.push({key:s,name:i})}}this.idlepcs=t,this.idlepcs.length>0&&this.idlePC.set(this.idlepcs[0].key),this.isComputing=!1,this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to compute idle-PC proposals";this.toasterService.error(t),this.isComputing=!1,this.cd.markForCheck()}})}onClose(){this.dialogRef.close()}onApply(){this.isApplying()||this.idlePC()&&this.idlePC()!=="0x0"&&(this.node.properties.idlepc=this.idlePC(),this.isApplying.set(!0),this.dialogRef.disableClose=!0,this.nodeService.updateNode(this.controller,this.node).subscribe({next:()=>{this.toasterService.success(`Node ${this.node.name} updated with idle-PC value ${this.idlePC()}`),this.isApplying.set(!1),this.dialogRef.disableClose=!1,this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to update node with idle-PC value";this.toasterService.error(t),this.isApplying.set(!1),this.dialogRef.disableClose=!1,this.cd.markForCheck()}}))}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-idle-pc-dialog"]],inputs:{controller:"controller",node:"node",idlePC:[1,"idlePC"]},outputs:{idlePC:"idlePCChange"},decls:7,vars:4,consts:[["mat-dialog-actions",""],["mat-button","","color","accent"],["mat-button","","color","accent",3,"disabled"],["mat-button","","color","accent",3,"click"],["align","center"],["mat-dialog-content","","align","center"],["color","accent"],["mat-dialog-title",""],[1,"form-field"],["placeholder","Idle-PC","matTooltipClass","multiline-tooltip",3,"selectionChange","value","matTooltip"],[3,"value"],["mat-button","","color","accent",3,"click","disabled"],["diameter","20"]],template:function(t,i){t&1&&(T(0,V3e,5,0,"div"),T(1,j3e,6,2),r(2,"div",0),T(3,$3e,2,0,"button",1),T(4,W3e,3,2,"button",2),r(5,"button",3),_("click",function(){return i.onClose()}),c(6,"Close"),l()()),t&2&&(E(i.isComputing?0:-1),m(),E(i.isComputing?-1:1),m(2),E(i.isComputing?-1:3),m(),E(i.isComputing?-1:4))},dependencies:[ke,qe,Qe,bt,Y,he,rt,mt,ye,Pe,Fo,ot,ct,nt,St],styles:[".container[_ngcontent-%COMP%]{width:100%;display:flex;justify-content:space-between}.multiline-tooltip[_ngcontent-%COMP%]{background-color:var(--mat-app-surface);color:var(--mat-app-on-surface-color);white-space:pre-line}"],changeDetection:0})}return n})();function G3e(n,o){if(n&1){let e=R();r(0,"button",1),_("click",function(){y(e);let i=h();return w(i.idlePC())}),r(1,"mat-icon"),c(2,"query_builder"),l(),r(3,"span"),c(4,"Idle-PC"),l()()}}var TS=(()=>{class n{nodeService=f(ft);dialog=f(Xe);controller=ee(void 0);node=ee(void 0);idlePC(){let t=this.dialog.open(PS,{panelClass:["base-dialog-panel","idle-pc-action-dialog-panel","dialog-small-panel"],autoFocus:!1,disableClose:!1}).componentInstance;t.controller=this.controller(),t.node=this.node()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-idle-pc-action"]],inputs:{controller:[1,"controller"],node:[1,"node"]},decls:1,vars:1,consts:[["mat-menu-item",""],["mat-menu-item","",3,"click"]],template:function(t,i){if(t&1&&T(0,G3e,5,0,"button",0),t&2){let a;E(((a=i.node())==null?null:a.node_type)==="dynamips"?0:-1)}},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();function q3e(n,o){if(n&1){let e=R();r(0,"button",1),_("click",function(){y(e);let i=h();return w(i.autoIdlePC())}),r(1,"mat-icon"),c(2,"query_builder"),l(),r(3,"span"),c(4,"Auto Idle-PC"),l()()}}var ES=(()=>{class n{nodeService=f(ft);toasterService=f(re);progressService=f(mo);cdr=f(oe);controller=ee(void 0);node=ee(void 0);autoIdlePC(){this.progressService.activate(),this.nodeService.getAutoIdlePC(this.controller(),this.node()).subscribe({next:e=>{this.progressService.deactivate(),e.idlepc!==null&&this.toasterService.success(`Node ${this.node().name} updated with idle-PC value ${e.idlepc}`),this.cdr.markForCheck()},error:e=>{this.progressService.deactivate();let t=e.error?.message||e.message||"Failed to update idle-PC value";this.toasterService.error(t),this.cdr.markForCheck()}})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-auto-idle-pc-action"]],inputs:{controller:[1,"controller"],node:[1,"node"]},decls:1,vars:1,consts:[["mat-menu-item",""],["mat-menu-item","",3,"click"]],template:function(t,i){if(t&1&&T(0,q3e,5,0,"button",0),t&2){let a;E(((a=i.node())==null?null:a.node_type)==="dynamips"?0:-1)}},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();var OS=(()=>{class n{nodesDataSource=f(Xn);drawingsDataSource=f(Ui);nodeService=f(ft);drawingService=f(Wi);toasterService=f(re);cdr=f(oe);controller=ee(void 0);nodes=ee(void 0);drawings=ee(void 0);moveLayerUp(){let e=uo(this.nodes().length+this.drawings().length,t=>{t>0&&this.toasterService.success("Selection moved one layer up.",{showToast:!1})});this.nodes().forEach(t=>{t.z++,this.nodesDataSource.update(t),this.nodeService.update(this.controller(),t).subscribe({next:()=>e.succeed(),error:i=>{e.fail();let a=i.error?.message||i.message||"Failed to move layer up";this.toasterService.error(a),this.cdr.markForCheck()}})}),this.drawings().forEach(t=>{t.z++,this.drawingsDataSource.update(t),this.drawingService.update(this.controller(),t).subscribe({next:()=>e.succeed(),error:i=>{e.fail();let a=i.error?.message||i.message||"Failed to move layer up";this.toasterService.error(a),this.cdr.markForCheck()}})})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-move-layer-up-action"]],inputs:{controller:[1,"controller"],nodes:[1,"nodes"],drawings:[1,"drawings"]},decls:5,vars:0,consts:[["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&(r(0,"button",0),_("click",function(){return i.moveLayerUp()}),r(1,"mat-icon"),c(2,"keyboard_arrow_up"),l(),r(3,"span"),c(4,"Move layer up"),l()())},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();var DS=(()=>{class n{nodesDataSource=f(Xn);drawingsDataSource=f(Ui);nodeService=f(ft);drawingService=f(Wi);toasterService=f(re);cdr=f(oe);controller=ee(void 0);nodes=ee(void 0);drawings=ee(void 0);moveLayerDown(){let e=uo(this.nodes().length+this.drawings().length,t=>{t>0&&this.toasterService.success("Selection moved one layer down.",{showToast:!1})});this.nodes().forEach(t=>{t.z--,this.nodesDataSource.update(t),this.nodeService.update(this.controller(),t).subscribe({next:()=>e.succeed(),error:i=>{e.fail();let a=i.error?.message||i.message||"Failed to move layer down";this.toasterService.error(a),this.cdr.markForCheck()}})}),this.drawings().forEach(t=>{t.z--,this.drawingsDataSource.update(t),this.drawingService.update(this.controller(),t).subscribe({next:()=>e.succeed(),error:i=>{e.fail();let a=i.error?.message||i.message||"Failed to move layer down";this.toasterService.error(a),this.cdr.markForCheck()}})})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-move-layer-down-action"]],inputs:{controller:[1,"controller"],nodes:[1,"nodes"],drawings:[1,"drawings"]},decls:5,vars:0,consts:[["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&(r(0,"button",0),_("click",function(){return i.moveLayerDown()}),r(1,"mat-icon"),c(2,"keyboard_arrow_down"),l(),r(3,"span"),c(4,"Move layer down"),l()())},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();var IS=(()=>{class n{nodesDataSource=f(Xn);drawingsDataSource=f(Ui);nodeService=f(ft);drawingService=f(Wi);toasterService=f(re);cdr=f(oe);controller=ee(void 0);nodes=ee([]);drawings=ee([]);bringToFront(){let e=this.nodes().length+this.drawings().length;if(e===0)return;let t=Math.max(...this.nodes().map(d=>d.z)),i=Math.max(...this.drawings().map(d=>d.z)),a=Math.max(t,i);a<100&&a++;let s=uo(e,d=>{d>0&&this.toasterService.success("Selection brought to front.",{showToast:!1})});this.nodes().forEach(d=>{d.z=a,this.nodesDataSource.update(d),this.nodeService.update(this.controller(),d).subscribe({next:()=>{s.succeed(),this.cdr.markForCheck()},error:p=>{s.fail();let u=p.error?.message||p.message||"Failed to bring node to front";this.toasterService.error(u),this.cdr.markForCheck()}})}),this.drawings().forEach(d=>{d.z=a,this.drawingsDataSource.update(d),this.drawingService.update(this.controller(),d).subscribe({next:()=>{s.succeed(),this.cdr.markForCheck()},error:p=>{s.fail();let u=p.error?.message||p.message||"Failed to bring drawing to front";this.toasterService.error(u),this.cdr.markForCheck()}})})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-bring-to-front-action"]],inputs:{controller:[1,"controller"],nodes:[1,"nodes"],drawings:[1,"drawings"]},decls:5,vars:0,consts:[["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&(r(0,"button",0),_("click",function(){return i.bringToFront()}),r(1,"mat-icon"),c(2,"vertical_align_top"),l(),r(3,"span"),c(4,"Bring to front"),l()())},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();var M_=(()=>{class n{protocolHandlerService;constructor(e){this.protocolHandlerService=e}startCapture(e,t,i,a){let s=`gns3+pcap://${e.host}:${e.port}?protocol=${e.protocol.slice(0,-1)}&project_id=${t.project_id}&link_id=${i.link_id}&project=${t.name}&name=${a}`;this.protocolHandlerService.open(s)}static \u0275fac=function(t){return new(t||n)(_e(Tp))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Q3e=(n,o)=>o[1];function K3e(n,o){if(n&1&&(r(0,"h1",0),c(1,"Starting Web Wireshark"),l(),r(2,"div",1),L(3,"mat-spinner",2),r(4,"p",3),c(5),l()(),r(6,"div",4)(7,"button",5),c(8,"Cancel"),l(),r(9,"button",6),c(10,"Starting..."),l()()),n&2){let e=h();m(5),N(e.loadingMessage())}}function X3e(n,o){if(n&1&&(r(0,"div",7)(1,"p"),c(2),l()()),n&2){let e=h(2);m(2),N(e.errorMessage())}}function Y3e(n,o){if(n&1&&(r(0,"mat-option",12),c(1),l()),n&2){let e=o.$implicit;v("value",e[1]),m(),X(" ",e[0]," ")}}function Z3e(n,o){if(n&1){let e=R();T(0,X3e,3,1,"div",7),r(1,"h1",0),c(2,"Packet capture"),l(),r(3,"div",8)(4,"form",9)(5,"mat-form-field",10)(6,"mat-label"),c(7,"Link type"),l(),r(8,"mat-select",11),Q(9,Y3e,2,2,"mat-option",12,Q3e),l()(),r(11,"mat-form-field",10)(12,"mat-label"),c(13,"Capture file name"),l(),L(14,"input",13),l(),r(15,"mat-checkbox",14),_("change",function(i){y(e);let a=h();return w(a.startProgram.set(i.checked))}),c(16," Start the capture visualization program "),l(),r(17,"mat-checkbox",14),_("change",function(i){y(e);let a=h();return w(a.webWireshark.set(i.checked))}),c(18," Web Wireshark "),l()()(),r(19,"div",4)(20,"button",15),_("click",function(){y(e);let i=h();return w(i.onNoClick())}),c(21,"Cancel"),l(),r(22,"button",16),_("click",function(){y(e);let i=h();return w(i.onYesClick())}),c(23,"Ok"),l()()}if(n&2){let e=h();E(e.errorMessage()?0:-1),m(4),v("formGroup",e.inputForm),m(5),K(e.linkTypes),m(6),v("checked",e.startProgram()),m(2),v("checked",e.webWireshark())}}var AS=(()=>{class n{controller;project;link;linkTypes=[];inputForm;startProgram=$(!1);webWireshark=$(!1);isLoading=z(!1);loadingMessage=z("");errorMessage=z("");dialogRef=f(We);linkService=f(Ri);formBuilder=f(Ai);toasterService=f(re);nodesDataSource=f(Xn);linksDataSource=f(so);packetCaptureService=f(M_);constructor(){this.inputForm=this.formBuilder.group({linkType:new Ge("",Ue.required),fileName:new Ge("",Ue.required)})}ngOnInit(){this.link.link_type==="ethernet"?this.linkTypes=[["Ethernet","DLT_EN10MB"]]:this.linkTypes=[["Cisco HDLC","DLT_C_HDLC"],["Cisco PPP","DLT_PPP_SERIAL"],["Frame Relay","DLT_FRELAY"],["ATM","DLT_ATM_RFC1483"]],this.linkTypes.length>0&&this.inputForm.controls.linkType.setValue(this.linkTypes[0][1]);let e=this.nodesDataSource.get(this.link.nodes[0].node_id),t=this.nodesDataSource.get(this.link.nodes[1].node_id),i=this.link.nodes[0].label.text,a=this.link.nodes[1].label.text,s=`${e.name}_${i}_to_${t.name}_${a}`.replace(/\s+/g,"_").replace(/[/\\]/g,"-").replace(/[^0-9A-Za-z_-]/g,"");this.inputForm.controls.fileName.setValue(s)}onYesClick(){this.errorMessage.set("");let e=!1;if(this.link.nodes.forEach(i=>{this.nodesDataSource.get(i.node_id).status==="started"&&(e=!0)}),!e){this.toasterService.error("Cannot capture because there is no running device on this link");return}if(this.inputForm.invalid){this.toasterService.error("Fill all required fields");return}let t={capture_file_name:this.inputForm.get("fileName").value,data_link_type:this.inputForm.get("linkType").value,wireshark:this.webWireshark()};this.webWireshark()?(this.isLoading.set(!0),this.loadingMessage.set("Starting Web Wireshark, please wait..."),this.linkService.startCaptureOnLink(this.controller,this.link,t).subscribe({next:i=>{this.linksDataSource.update(i),this.startProgram()&&this.packetCaptureService.startCapture(this.controller,this.project,this.link,t.capture_file_name),this.isLoading.set(!1),this.toasterService.success("Packet capture started."),this.dialogRef.close()},error:i=>{if(this.isLoading.set(!1),i.status===409){let a=i.error?.message||i.error?.detail||i.message;this.errorMessage.set(a||"A packet capture is already running on this link. Please stop the existing capture first.")}else i.status===404?this.errorMessage.set("The link or controller could not be found. Please refresh the page and try again."):i.status===403?this.errorMessage.set("You do not have permission to start packet capture on this link."):this.errorMessage.set(`Failed to start Web Wireshark: ${i.message||"Unknown error"}`);this.toasterService.error(this.errorMessage())}})):(this.startProgram()&&this.packetCaptureService.startCapture(this.controller,this.project,this.link,t.capture_file_name),this.linkService.startCaptureOnLink(this.controller,this.link,t).subscribe({next:i=>{this.linksDataSource.update(i),this.toasterService.success("Packet capture started."),this.dialogRef.close()},error:i=>{let a=i.error?.message||i.message||"Failed to start capture";this.errorMessage.set(a),this.toasterService.error(a)}}))}onNoClick(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-start-capture"]],inputs:{startProgram:[1,"startProgram"],webWireshark:[1,"webWireshark"]},outputs:{startProgram:"startProgramChange",webWireshark:"webWiresharkChange"},decls:2,vars:1,consts:[["mat-dialog-title",""],["mat-dialog-content","",1,"loading-content"],["color","accent"],[1,"loading-message"],["mat-dialog-actions",""],["mat-button","","disabled","","color","accent"],["mat-button","","disabled","","mat-raised-button","","color","primary"],[1,"error-message"],[1,"modal-form-container"],[1,"gns3-form-stack",3,"formGroup"],["subscriptSizing","dynamic","appearance","outline",1,"input-field"],["formControlName","linkType","ngDefaultControl",""],[3,"value"],["matInput","","formControlName","fileName","type","text"],[3,"change","checked"],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click"]],template:function(t,i){t&1&&T(0,K3e,11,1)(1,Z3e,24,4),t&2&&E(i.isLoading()?0:1)},dependencies:[fe,It,Ct,At,Nt,vt,Ut,Yt,ke,qe,Qe,bt,Y,he,we,Pe,Ve,ye,Ee,ot,ct,nt,Rt,Gt,rt,mt],styles:[".input-field[_ngcontent-%COMP%]{width:100%}.nested-checkbox[_ngcontent-%COMP%]{margin-left:24px}.loading-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:24px;gap:16px}.loading-content[_ngcontent-%COMP%] mat-spinner[_ngcontent-%COMP%]{width:40px;height:40px}.loading-content[_ngcontent-%COMP%] .loading-message[_ngcontent-%COMP%]{margin:0;text-align:center;color:var(--mat-sys-on-surface);font-size:14px}.error-message[_ngcontent-%COMP%]{padding:16px;margin-bottom:16px;background:var(--mat-sys-error-container);border-radius:4px}.error-message[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-error-container);font-size:14px}"],changeDetection:0})}return n})();function J3e(n,o){if(n&1){let e=R();r(0,"button",1),_("click",function(){y(e);let i=h();return w(i.startCapture())}),r(1,"mat-icon"),c(2,"loupe"),l(),r(3,"span"),c(4,"Start capture"),l()()}}var NS=(()=>{class n{dialog=f(Xe);dialogConfig=f(yo);controller=ee(void 0);project=ee(void 0);link=ee(void 0);startCapture(){let e=this.dialogConfig.openConfig("startCapture",{autoFocus:!1,disableClose:!1}),i=this.dialog.open(AS,e).componentInstance;i.controller=this.controller(),i.project=this.project(),i.link=this.link()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-start-capture-action"]],inputs:{controller:[1,"controller"],project:[1,"project"],link:[1,"link"]},decls:1,vars:1,consts:[["mat-menu-item",""],["mat-menu-item","",3,"click"]],template:function(t,i){if(t&1&&T(0,J3e,5,0,"button",0),t&2){let a;E(((a=i.link())==null?null:a.capturing)===!1?0:-1)}},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();function eTe(n,o){if(n&1){let e=R();r(0,"button",1),_("click",function(){y(e);let i=h();return w(i.stopCapture())}),r(1,"mat-icon"),c(2,"pause_circle_filled"),l(),r(3,"span"),c(4,"Stop capture"),l()()}}var FS=(()=>{class n{linkService=f(Ri);toasterService=f(re);cdr=f(oe);controller=ee(void 0);link=ee(void 0);stopCapture(){this.linkService.stopCaptureOnLink(this.controller(),this.link()).subscribe({next:()=>this.toasterService.success("Packet capture stopped."),error:e=>{let t=e.error?.message||e.message||"Failed to stop capture";this.toasterService.error(t),this.cdr.markForCheck()}})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-stop-capture-action"]],inputs:{controller:[1,"controller"],link:[1,"link"]},decls:1,vars:1,consts:[["mat-menu-item",""],["mat-menu-item","",3,"click"]],template:function(t,i){if(t&1&&T(0,eTe,5,0,"button",0),t&2){let a;E((a=i.link())!=null&&a.capturing?0:-1)}},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();function tTe(n,o){if(n&1){let e=R();r(0,"button",1),_("click",function(){y(e);let i=h();return w(i.startCapture())}),r(1,"mat-icon"),c(2,"search"),l(),r(3,"span"),c(4,"Start Wireshark"),l()()}}var RS=(()=>{class n{packetCaptureService=f(M_);controller=ee(void 0);project=ee(void 0);link=ee(void 0);startCapture(){var e=this.link().capture_file_name.split(".");this.packetCaptureService.startCapture(this.controller(),this.project(),this.link(),e[0])}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-start-capture-on-started-link-action"]],inputs:{controller:[1,"controller"],project:[1,"project"],link:[1,"link"]},decls:1,vars:1,consts:[["mat-menu-item",""],["mat-menu-item","",3,"click"]],template:function(t,i){if(t&1&&T(0,tTe,5,0,"button",0),t&2){let a;E((a=i.link())!=null&&a.capturing?0:-1)}},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();var S_=(()=>{class n{toasterService;constructor(e){this.toasterService=e}parseWebSocketUrl(e){try{let t=new URL(e),i=t.protocol==="wss:",a=t.hostname,s=t.port||(i?"443":"80"),d=t.pathname,p=t.searchParams.get("token")||void 0;return{server:a,port:s,ssl:i,path:d,token:p}}catch(t){throw this.toasterService.error(`Invalid WebSocket URL: ${t.message}`),t}}buildXpraWebSocketUrl(e,t){return`${e.protocol==="https:"?"wss":"ws"}://${e.host}:${e.port}/v3/projects/${t.project_id}/nodes/${t.node_id}/console/xpra?token=${e.authToken}`}buildXpraConsolePageUrl(e){let{server:t,port:i,ssl:a}=this.parseWebSocketUrl(e),s=new URLSearchParams;s.set("server",t),s.set("port",i),s.set("ssl",a?"true":"false");let d=new URL(e),p=d.pathname+d.search;return s.set("path",p),s.set("sound","true"),s.set("clipboard","true"),s.set("encoding","h264"),`assets/xpra-html5/index.html?${s.toString()}`}buildXpraConsolePageUrlFromNode(e,t){let i=this.buildXpraWebSocketUrl(e,t);return this.buildXpraConsolePageUrl(i)}buildXpraWebSocketUrlForWebWireshark(e,t){return`${e.protocol==="https:"?"wss":"ws"}://${e.host}:${e.port}/v3/projects/${t.project_id}/links/${t.link_id}/capture/web-wireshark?token=${e.authToken}`}openXpraConsole(e,t,i=!1){if(t.status!=="started"){this.toasterService.error("Node must be started before opening console");return}try{let a=this.buildXpraConsolePageUrlFromNode(e,t),s=10,d=1280+s,p=720+s,u;if(i)u=window.open(a,"_blank");else{let g=`Xpra-${t.name}`;u=window.open(a,g,`width=${d},height=${p}`)}(!u||u.closed||typeof u.closed>"u")&&this.toasterService.error("Popup was blocked. Please allow popups for this site.")}catch(a){this.toasterService.error(`Failed to open Xpra console: ${a.message}`)}}static \u0275fac=function(t){return new(t||n)(_e(re))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();function nTe(n,o){if(n&1){let e=R();r(0,"button",1),_("click",function(){y(e);let i=h();return w(i.startWebWireshark())}),r(1,"mat-icon"),c(2,"analytics"),l(),r(3,"span"),c(4,"Start Web Wireshark"),l()()}}var fj=(()=>{class n{xpraConsoleService=f(S_);toasterService=f(re);controller=ee(void 0);project=ee(void 0);link=ee(void 0);startWebWireshark(){let e=this.controller(),t=this.project(),i=this.link();if(!e||!t||!i){this.toasterService.error("Missing controller, project or link");return}let a=this.xpraConsoleService.buildXpraWebSocketUrlForWebWireshark(e,i),s=this.xpraConsoleService.buildXpraConsolePageUrl(a),d=window.open(s,"_blank");(!d||d.closed||typeof d.closed>"u")&&this.toasterService.error("Popup was blocked. Please allow popups for this site.")}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-start-web-wireshark-action"]],inputs:{controller:[1,"controller"],project:[1,"project"],link:[1,"link"]},decls:1,vars:1,consts:[["mat-menu-item",""],["mat-menu-item","",3,"click"]],template:function(t,i){if(t&1&&T(0,nTe,5,0,"button",0),t&2){let a;E((a=i.link())!=null&&a.capturing&&((a=i.link())!=null&&a.wireshark)?0:-1)}},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();function iTe(n,o){if(n&1){let e=R();r(0,"button",1),_("click",function(){y(e);let i=h();return w(i.onOpenWebWiresharkInline())}),r(1,"mat-icon"),c(2,"open_in_full"),l(),r(3,"span"),c(4,"Open Web Wireshark (Inline)"),l()()}}var vj=(()=>{class n{controller=ee(void 0);project=ee(void 0);link=ee(void 0);openWebWiresharkInline=new be;onOpenWebWiresharkInline(){let e=this.controller(),t=this.project(),i=this.link();!e||!t||!i||this.openWebWiresharkInline.emit({link:i,controller:e,project:t})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-start-web-wireshark-inline-action"]],inputs:{controller:[1,"controller"],project:[1,"project"],link:[1,"link"]},outputs:{openWebWiresharkInline:"openWebWiresharkInline"},decls:1,vars:1,consts:[["mat-menu-item",""],["mat-menu-item","",3,"click"]],template:function(t,i){if(t&1&&T(0,iTe,5,0,"button",0),t&2){let a;E((a=i.link())!=null&&a.capturing&&((a=i.link())!=null&&a.wireshark)?0:-1)}},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();var Cj="gns3.bpf-presets",bj=(()=>{class n{toasterService=f(re);builtInBpfPresets=[{name:"Traffic to/from one host",expression:"host 192.0.2.10"},{name:"Traffic from one host",expression:"src host 192.0.2.10"},{name:"Traffic to one host",expression:"dst host 192.0.2.10"},{name:"Traffic between two hosts",expression:"host 192.0.2.10 and host 192.0.2.20"},{name:"Traffic from A to B only",expression:"src host 192.0.2.10 and dst host 192.0.2.20"},{name:"Traffic to/from a subnet",expression:"net 192.0.2.0/24"},{name:"Traffic sourced from a subnet",expression:"src net 192.0.2.0/24"},{name:"Traffic destined for a subnet",expression:"dst net 192.0.2.0/24"},{name:"Exclude a host",expression:"not host 192.0.2.10"},{name:"IPv4 only",expression:"ip"},{name:"IPv6 only",expression:"ip6"},{name:"TCP only",expression:"tcp"},{name:"UDP only",expression:"udp"},{name:"ARP",expression:"arp"},{name:"ICMPv4/ICMPv6",expression:"icmp or icmp6"},{name:"TCP port 443",expression:"tcp port 443"},{name:"UDP port range",expression:"udp portrange 10000-20000"},{name:"DNS over UDP or TCP",expression:"(udp port 53 or tcp port 53)"},{name:"HTTP and HTTPS",expression:"tcp and (port 80 or port 443)"},{name:"QUIC",expression:"udp port 443"},{name:"SSH",expression:"tcp port 22"},{name:"DHCPv4",expression:"udp and (port 67 or port 68)"},{name:"NTP",expression:"udp port 123"},{name:"SNMP",expression:"udp and (port 161 or port 162)"},{name:"BGP",expression:"tcp port 179"},{name:"OSPF",expression:"ip proto 89"},{name:"GRE",expression:"ip proto 47"},{name:"IPsec ESP",expression:"esp"},{name:"Traffic from a MAC address",expression:"ether src 00:11:22:33:44:55"},{name:"Broadcasts",expression:"ether broadcast"},{name:"IPv4 multicast",expression:"ip multicast"},{name:"VLAN-tagged traffic",expression:"vlan"},{name:"Specific VLAN",expression:"vlan 100"},{name:"Spanning Tree",expression:"stp"},{name:"LLDP",expression:"ether proto 0x88cc"},{name:"SYN set, including SYN-ACK",expression:"tcp[tcpflags] & tcp-syn != 0"},{name:"TCP resets",expression:"tcp[tcpflags] & tcp-rst != 0"},{name:"TCP FIN packets",expression:"tcp[tcpflags] & tcp-fin != 0"},{name:"IPv4 destination unreachable",expression:"icmp and icmp[0] == 3"},{name:"IPv4 ping requests/replies",expression:"icmp and (icmp[0] == 8 or icmp[0] == 0)"},{name:"Packets longer than 1,400 bytes",expression:"len > 1400"},{name:"HTTPS traffic involving a server",expression:"host 192.0.2.10 and tcp port 443"}];customBpfPresets=z([]);constructor(){try{let e=JSON.parse(localStorage.getItem(Cj)??"[]");if(Array.isArray(e)){let t=new Map;for(let i of e)if(i&&typeof i.name=="string"&&i.name.trim()&&typeof i.expression=="string"&&i.expression.trim()){let a=i.name.trim();t.set(a,{name:a,expression:i.expression.trim()})}this.customBpfPresets.set([...t.values()])}}catch{}}save(e,t){return e=e.trim(),t=t.trim(),!e||!t?!1:this.persist([...this.customBpfPresets().filter(i=>i.name!==e),{name:e,expression:t}])}delete(e){this.persist(this.customBpfPresets().filter(t=>t.name!==e))}persist(e){try{return localStorage.setItem(Cj,JSON.stringify(e)),this.customBpfPresets.set(e),!0}catch{return this.toasterService.error("Could not save custom BPF filters in this browser."),!1}}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var y4=(n,o)=>o.name;function oTe(n,o){if(n&1&&(r(0,"mat-option",4),c(1),l()),n&2){let e=o.$implicit;v("value",e.expression),m(),Un("",e.name,": ",e.expression)}}function aTe(n,o){if(n&1&&(r(0,"mat-option",4),c(1),l()),n&2){let e=o.$implicit;v("value",e.expression),m(),Un("",e.name,": ",e.expression)}}function rTe(n,o){if(n&1&&(r(0,"mat-optgroup",5),Q(1,aTe,2,3,"mat-option",4,y4),l()),n&2){let e=h();m(),K(e.presets.customBpfPresets())}}function sTe(n,o){if(n&1){let e=R();r(0,"button",11),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.presets.delete(i.name))}),c(1),l()}if(n&2){let e=o.$implicit;m(),X("Delete ",e.name)}}function lTe(n,o){if(n&1&&(r(0,"div",9),Q(1,sTe,2,1,"button",10,y4),l()),n&2){let e=h();m(),K(e.presets.customBpfPresets())}}var k_=(()=>{class n{presets=f(bj);expression=ee("");multiline=ee(!1);expressionChange=$o();bpfPresetName=new Ec("",{nonNullable:!0});select(e){let t=e.split(/\r?\n/).map(s=>s.trim()).filter(Boolean),i=this.multiline()||t.length<=1?e.trim():t.map(s=>`(${s})`).join(" or "),a=this.expression().trim();this.expressionChange.emit(this.multiline()&&a?`${a}
|
||
${i}`:i)}save(){let e=this.multiline()?this.expression():this.expression().replace(/\r?\n/g," ");this.presets.save(this.bpfPresetName.value,e)&&this.bpfPresetName.setValue("")}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-bpf-presets"]],inputs:{expression:[1,"expression"],multiline:[1,"multiline"]},outputs:{expressionChange:"expressionChange"},decls:18,vars:6,consts:[[1,"bpf-presets__row"],["appearance","outline","subscriptSizing","dynamic"],[3,"selectionChange","value"],["label","Built-in"],[3,"value"],["label","Custom (this browser)"],["matInput","",3,"keydown.enter","formControl"],["type","button","mat-stroked-button","",3,"click","disabled"],[1,"bpf-presets__hint"],["aria-label","Custom BPF presets",1,"bpf-presets__saved"],["type","button","mat-button",""],["type","button","mat-button","",3,"click"]],template:function(t,i){t&1&&(r(0,"div",0)(1,"mat-form-field",1)(2,"mat-label"),c(3),l(),r(4,"mat-select",2),_("selectionChange",function(s){return i.select(s.value),s.source.value=null}),r(5,"mat-optgroup",3),Q(6,oTe,2,3,"mat-option",4,y4),l(),T(8,rTe,3,0,"mat-optgroup",5),l()(),r(9,"mat-form-field",1)(10,"mat-label"),c(11,"Preset name"),l(),r(12,"input",6),_("keydown.enter",function(s){return s.preventDefault(),i.save()}),l()(),r(13,"button",7),_("click",function(){return i.save()}),c(14," Save preset "),l()(),r(15,"p",8),c(16,"Saved in this browser. Use an existing name to update a preset."),l(),T(17,lTe,3,0,"div",9)),t&2&&(m(3),N(i.multiline()?"Add BPF preset":"Use BPF preset"),m(),v("value",null),m(2),K(i.presets.builtInBpfPresets),m(2),E(i.presets.customBpfPresets().length?8:-1),m(4),v("formControl",i.bpfPresetName),m(),v("disabled",!i.bpfPresetName.value.trim()||!i.expression().trim()),m(4),E(i.presets.customBpfPresets().length?17:-1))},dependencies:[It,At,Nt,Tr,we,Pe,Ve,ye,Ee,ot,ct,nt,gm,Y,he],styles:["[_nghost-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%] mat-form-field[_ngcontent-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%]{display:block;min-width:0;margin-bottom:var(--gns3-form-row-gap)}.bpf-presets__row[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--gns3-density-space-3)}.bpf-presets__row[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{flex:1 1 200px;min-width:0;width:100%}button[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing);flex-shrink:0}.bpf-presets__hint[_ngcontent-%COMP%]{font-size:var(--gns3-helper-text-size);font-weight:var(--gns3-helper-text-weight);line-height:var(--gns3-helper-text-line-height);color:var(--mat-sys-on-surface-variant);margin:var(--gns3-density-space-2) 0 0}.bpf-presets__saved[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:var(--gns3-density-space-1);margin-top:var(--gns3-density-space-2)}.bpf-presets__saved[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{max-width:100%;height:auto;min-height:var(--gns3-density-control-height);overflow-wrap:anywhere;white-space:normal}"],changeDetection:0})}return n})();function cTe(n,o){if(n&1&&(r(0,"div",2)(1,"h6"),c(2),l(),r(3,"span",5),c(4),l()()),n&2){let e=o.$implicit;m(2),X(" ",e.name," "),m(2),X(" ",e.description," ")}}var zS=(()=>{class n{dialogRef=f(We);title;messages;onCloseClick(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-help-dialog"]],inputs:{title:"title",messages:"messages"},decls:8,vars:1,consts:[["mat-dialog-title",""],[1,"modal-form-container"],[1,"message"],["mat-dialog-actions",""],["mat-button","","color","accent",3,"click"],[1,"description"]],template:function(t,i){t&1&&(r(0,"h1",0),c(1),l(),r(2,"div",1),Q(3,cTe,5,2,"div",2,ni),l(),r(5,"div",3)(6,"button",4),_("click",function(){return i.onCloseClick()}),c(7,"Close"),l()()),t&2&&(m(),N(i.title),m(2),K(i.messages))},dependencies:[ke,qe,Qe,Y,he,ie],styles:[".message[_ngcontent-%COMP%]{margin-bottom:8px}.description[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);opacity:.7;white-space:pre-line}"],changeDetection:0})}return n})();var yj=n=>({$implicit:n}),dTe=(n,o)=>o.name,wj=(n,o)=>o.key;function mTe(n,o){if(n&1){let e=R();r(0,"div")(1,"p"),c(2," Matching packets are dropped. Use BPF capture syntax, one expression per line, rather than Wireshark display syntax. "),l(),r(3,"app-bpf-presets",18),_("expressionChange",function(i){y(e);let a=h().$implicit,s=h(2);return w(s.onParamChange(a,i))}),l()()}if(n&2){let e=h().$implicit;m(3),v("expression",e.value.toString())("multiline",!0)}}function pTe(n,o){if(n&1&&(r(0,"mat-option",13),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function uTe(n,o){if(n&1){let e=R();r(0,"mat-select",19),_("selectionChange",function(i){y(e);let a=h().$implicit,s=h(2);return w(s.onParamChange(a,i.value))}),r(1,"mat-option",20),c(2,"None"),l(),Q(3,pTe,2,2,"mat-option",13,Oe),l()}if(n&2){let e=h().$implicit;v("value",e.value),m(3),K(e.options)}}function gTe(n,o){if(n&1){let e=R();r(0,"textarea",21),_("input",function(i){y(e);let a=h().$implicit,s=h(2);return w(s.onParamChange(a,i.target.value))}),l()}if(n&2){let e=h().$implicit;v("value",e.value)}}function hTe(n,o){if(n&1){let e=R();r(0,"input",22),_("input",function(i){y(e);let a=h().$implicit,s=h(2);return w(s.onParamChange(a,i.target.value))}),l()}if(n&2){let e=h().$implicit;v("formControl",e.control)("min",e.minimum)("max",e.maximum)("errorStateMatcher",e.errorMatcher)}}function _Te(n,o){if(n&1){let e=R();r(0,"input",23),_("input",function(i){y(e);let a=h().$implicit,s=h(2);return w(s.onParamChange(a,i.target.value))}),l()}if(n&2){let e=h().$implicit;v("value",e.value)}}function fTe(n,o){if(n&1&&(r(0,"span",17),c(1),l()),n&2){let e=h().$implicit;m(),N(e.unit)}}function vTe(n,o){if(n&1&&(T(0,mTe,4,2,"div"),r(1,"mat-form-field",12)(2,"mat-label"),c(3),l(),T(4,uTe,5,1,"mat-select",13)(5,gTe,1,1,"textarea",14)(6,hTe,1,4,"input",15)(7,_Te,1,1,"input",16),T(8,fTe,2,1,"span",17),r(9,"mat-error"),c(10),l()()),n&2){let e,t=o.$implicit,i=h().$implicit,a=h();E(i.key==="bpf"&&t.kind==="textarea"?0:-1),m(3),N(t.name),m(),E((e=t.kind)==="select"?4:e==="textarea"?5:e==="number"?6:7),m(4),E(t.unit&&t.kind!=="select"?8:-1),m(2),N(a.paramError(i,t))}}function CTe(n,o){if(n&1&&(r(0,"section",8)(1,"header",9)(2,"h2",10),c(3),l()(),r(4,"div",11),Q(5,vTe,11,5,null,null,dTe),l()()),n&2){let e=o.$implicit;ne("packet-filters__group--wide",e.isWide),m(3),N(e.name),m(),Tt("grid-template-columns",e.key==="bpf"?"1fr":null),m(),K(e.params)}}function bTe(n,o){if(n&1&&(r(0,"p",24),c(1),l()),n&2){let e=h(2);m(),N(e.capabilityHint)}}function xTe(n,o){n&1&&(r(0,"p",25),c(1,"No traffic filters are available for this link."),l())}function yTe(n,o){n&1&&li(0)}function wTe(n,o){if(n&1&&se(0,yTe,1,0,"ng-container",27),n&2){let e=o.$implicit;h(3);let t=Te(3);v("ngTemplateOutlet",t)("ngTemplateOutletContext",tn(2,yj,e))}}function MTe(n,o){n&1&&li(0)}function STe(n,o){if(n&1&&se(0,MTe,1,0,"ng-container",27),n&2){let e=o.$implicit;h(5);let t=Te(3);v("ngTemplateOutlet",t)("ngTemplateOutletContext",tn(2,yj,e))}}function kTe(n,o){if(n&1&&Q(0,STe,1,4,"ng-container",null,wj),n&2){let e=h(4);K(e.advancedGroups)}}function PTe(n,o){if(n&1){let e=R();r(0,"div",28)(1,"button",29),_("click",function(){y(e);let i=h(3);return w(i.toggleAdvanced())}),r(2,"mat-icon"),c(3),l(),c(4),l(),r(5,"span",30),c(6,"Experimental"),l()(),T(7,kTe,2,0)}if(n&2){let e=h(3);m(3),N(e.showAdvanced()?"expand_less":"expand_more"),m(),Un(" ",e.showAdvanced()?"Hide advanced filters":"Show advanced filters"," (",e.advancedGroups.length,") "),m(3),E(e.showAdvanced()?7:-1)}}function TTe(n,o){if(n&1&&(r(0,"div",26),Q(1,wTe,1,4,"ng-container",null,wj),T(3,PTe,8,4),l()),n&2){let e=h(2);m(),K(e.basicGroups),m(2),E(e.advancedGroups.length>0?3:-1)}}function ETe(n,o){if(n&1&&(r(0,"div",2),T(1,bTe,2,1,"p",24),T(2,xTe,2,0,"p",25)(3,TTe,4,1,"div",26),l()),n&2){let e=h();m(),E(e.capabilityHint?1:-1),m(),E(e.filterGroups.length===0?2:3)}}function OTe(n,o){n&1&&(r(0,"div",2)(1,"p",25),c(2,"Could not load the link. Close the dialog and try again."),l()())}function DTe(n,o){n&1&&(r(0,"div",3),L(1,"mat-spinner",31),l())}function ITe(n,o){n&1&&L(0,"mat-spinner",7)}function ATe(n,o){n&1&&c(0," Apply ")}var w4=class{isError;constructor(o){this.isError=o}isErrorState(){return this.isError()}},xj=["rate","reorder","gemodel","duplicate","seed","limit","quota","window_drop"],LS=(()=>{class n{dialogRef=f(We);linkService=f(Ri);dialog=f(Xe);dialogConfig=f(yo);cdr=f(oe);toasterService=f(re);validationService=f(Hn);isApplying=z(!1);showAdvanced=z(!1);controller;project;link;availableFilters;filterGroups;basicGroups=[];advancedGroups=[];capabilityHint;linkLoadFailed=!1;activeFilters;constructor(){}ngOnInit(){this.linkService.getLink(this.controller,this.link.project_id,this.link.link_id).subscribe({next:e=>{this.link=e,this.activeFilters=e.filters??{},this.tryBuildFilterGroups(),this.cdr.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load link filters";this.toasterService.error(t),this.linkLoadFailed=!0,this.cdr.markForCheck()}}),this.linkService.getAvailableFilters(this.controller,this.link).subscribe({next:e=>{this.availableFilters=e,this.tryBuildFilterGroups(),this.cdr.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load available filters";this.toasterService.error(t),this.availableFilters=[],this.tryBuildFilterGroups(),this.cdr.markForCheck()}})}onParamChange(e,t){e.value=t,this.cdr.markForCheck()}paramError(e,t){return this.computeGroupResult(e).errors.get(t)??null}hasValidationErrors(){return(this.filterGroups??[]).some(e=>this.computeGroupResult(e).errors.size>0)}toggleAdvanced(){this.showAdvanced.set(!this.showAdvanced()),this.cdr.markForCheck()}onNoClick(){this.isApplying()||this.dialogRef.close()}onResetClick(){this.isApplying()||!this.filterGroups||(this.link.filters={},this.linkService.updateLink(this.controller,this.link).subscribe({next:e=>{this.toasterService.success("Packet filters reset."),this.dialogRef.close(),this.cdr.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to reset filters";this.toasterService.error(t),this.cdr.markForCheck()}}))}onYesClick(){if(!(this.isApplying()||!this.filterGroups)){if(this.hasValidationErrors()){this.revealErroredAdvancedGroups(),this.cdr.markForCheck();return}this.link.filters=this.buildFiltersPayload(),this.isApplying.set(!0),this.dialogRef.disableClose=!0,this.linkService.updateLink(this.controller,this.link).subscribe({next:e=>{this.toasterService.success("Packet filters applied."),this.dialogRef.close(),this.cdr.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to apply filters";this.toasterService.error(t),this.isApplying.set(!1),this.dialogRef.disableClose=!1,this.cdr.markForCheck()}})}}onHelpClick(){if(!this.availableFilters)return;let e=this.dialogConfig.openConfig("helpDialog",{autoFocus:!1,disableClose:!0}),i=this.dialog.open(zS,e).componentInstance;i.title="Help for filters",i.messages=this.buildHelpMessages()}buildHelpMessages(){let e=[{name:"How packet filters work",description:["A value of 0 (or an empty field) disables a filter; only the filters you set are applied.","Percentages apply to each direction of the link independently \u2014 a 30% packet loss drops roughly 51% of round-trip traffic.","Time-based schedules restart from the moment a filter is applied: changing any filter or restarting a node resets them."].join(`
|
||
`)}];return this.availableFilters.forEach(t=>{e.push({name:t.name,description:this.describeFilter(t)})}),e}describeFilter(e){let t=[e.description??"","","Parameters:"];for(let i of e.parameters??[])t.push(`- ${this.describeParameter(i)}`);return t.join(`
|
||
`)}describeParameter(e){let t=e.unit?` (${e.unit})`:"";return e.type==="int"&&e.minimum!==void 0&&e.maximum!==void 0?`${e.name}${t}: ${e.minimum} to ${e.maximum}`:e.type==="text"?`${e.name}: one expression per line`:`${e.name}${t}`}tryBuildFilterGroups(){!this.activeFilters||!this.availableFilters||(this.filterGroups=this.buildFilterGroups(this.availableFilters,this.activeFilters),this.basicGroups=this.filterGroups.filter(e=>!this.isAdvancedGroup(e)),this.advancedGroups=this.filterGroups.filter(e=>this.isAdvancedGroup(e)),this.advancedGroups.some(e=>this.activeFilters?.[e.key])&&this.showAdvanced.set(!0),this.capabilityHint=this.buildCapabilityHint(this.link?.kernel_datapath,this.availableFilters))}isAdvancedGroup(e){return xj.includes(e.key)}revealErroredAdvancedGroups(){this.showAdvanced()||this.advancedGroups.some(e=>this.computeGroupResult(e).errors.size>0)&&this.showAdvanced.set(!0)}buildFilterGroups(e,t){return e.map(i=>{let a=t[i.type]??[],s=(i.parameters??[]).map((p,u)=>{let g=this.paramKind(p),C=g==="textarea"?a.length?a.map(String).join(`
|
||
`):"":u<a.length?a[u]:g==="number"?0:"";return{name:p.name,kind:g,unit:p.unit??"",minimum:p.minimum,maximum:p.maximum,value:C,options:g==="select"?(p.unit??"").split("|").map(M=>M.trim()):[],control:new Ec(C),errorMatcher:void 0}}),d={key:i.type,name:i.name,isWide:s.length>=3||s.some(p=>p.kind==="textarea"),params:s};return s.forEach(p=>{p.errorMatcher=new w4(()=>this.paramError(d,p)!==null)}),d})}paramKind(e){return e.type==="int"?"number":e.type==="text"?"textarea":e.type==="str"&&(e.unit??"").includes("|")?"select":"text"}computeGroupResult(e){let t=new Map,i=[],a=e.params.map(u=>u.value),s=a.length;for(;s>0&&this.isBlankFor(e.params[s-1],a[s-1]);)s--;for(let u=0;u<s;u++){let g=e.params[u],C=a[u];if(g.kind!=="number"){i.push(String(C).trim());continue}let M=typeof C=="number"?C:Number(C);if(this.isBlankFor(g,C)){i.push(M);continue}if(!Number.isFinite(M)||!Number.isInteger(M)){t.set(g,"Enter a whole number"),i.push(C);continue}if(g.minimum!==void 0&&g.maximum!==void 0){let x=this.validationService.validateNumberRange(String(M),g.minimum,g.maximum,g.name);!x.isValid&&x.errorMessage&&t.set(g,x.errorMessage),i.push(M)}else g.minimum!==void 0&&M<g.minimum?(t.set(g,`Value must be at least ${g.minimum}`),i.push(M)):(g.maximum!==void 0&&M>g.maximum&&t.set(g,`Value must be at most ${g.maximum}`),i.push(M))}let d=e.params.findIndex(u=>u.kind==="select"),p=d>0?e.params[d-1]:void 0;return p?.kind==="number"&&!this.isBlankFor(e.params[d],a[d])&&this.isBlankFor(p,a[d-1])&&t.set(p,"Set a jitter value to use a distribution"),{values:i,errors:t}}isBlankFor(e,t){return e.kind==="number"?t===""||t===null||t===void 0||Number(t)===0:typeof t=="string"&&t.trim()===""}buildFiltersPayload(){let e={};for(let[t,i]of Object.entries(this.activeFilters??{}))e[t]=[...i];for(let t of this.filterGroups??[]){let{values:i}=this.computeGroupResult(t);if(!i.length){delete e[t.key];continue}t.params.some(a=>a.kind==="textarea")?e[t.key]=[String(i[0]).trim()]:e[t.key]=i}return e}buildCapabilityHint(e,t){if(e===void 0)return null;if(!e)return"This link runs on the uBridge relay; the extended impairment filters run on kernel-datapath links only.";let i=new Set(t.map(a=>a.type));return xj.some(a=>!i.has(a))?"Some impairment filters are unavailable because the uBridge on the link's computes does not support them.":null}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-packet-filters"]],decls:17,vars:6,consts:[["filterGroup",""],["mat-dialog-title",""],["mat-dialog-content",""],["mat-dialog-content","",1,"packet-filters__loading"],["mat-dialog-actions","","align","end"],["mat-button","","color","accent",3,"click","disabled"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"],["diameter","20"],[1,"packet-filters__group"],[1,"packet-filters__group-header"],[1,"packet-filters__group-name"],[1,"packet-filters__fields"],["appearance","outline",1,"packet-filters__field"],[3,"value"],["matInput","","rows","4","placeholder",`tcp port 80
|
||
host 192.168.1.1`,3,"value"],["matInput","","type","number",3,"formControl","min","max","errorStateMatcher"],["matInput","","type","text",3,"value"],["matSuffix",""],[3,"expressionChange","expression","multiline"],[3,"selectionChange","value"],["value",""],["matInput","","rows","4","placeholder",`tcp port 80
|
||
host 192.168.1.1`,3,"input","value"],["matInput","","type","number",3,"input","formControl","min","max","errorStateMatcher"],["matInput","","type","text",3,"input","value"],[1,"packet-filters__hint"],[1,"packet-filters__empty"],[1,"packet-filters__grid"],[4,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"packet-filters__advanced-toggle"],["type","button","mat-button","",1,"packet-filters__advanced-button",3,"click"],[1,"packet-filters__experimental-badge"],["diameter","24"]],template:function(t,i){t&1&&(r(0,"h1",1),c(1,"Packet filters"),l(),se(2,CTe,7,5,"ng-template",null,0,Qr),T(4,ETe,4,2,"div",2)(5,OTe,3,0,"div",2)(6,DTe,2,0,"div",3),r(7,"div",4)(8,"button",5),_("click",function(){return i.onNoClick()}),c(9,"Cancel"),l(),r(10,"button",5),_("click",function(){return i.onResetClick()}),c(11,"Reset"),l(),r(12,"button",6),_("click",function(){return i.onYesClick()}),T(13,ITe,1,0,"mat-spinner",7)(14,ATe,1,0),l(),r(15,"button",5),_("click",function(){return i.onHelpClick()}),c(16,"Help"),l()()),t&2&&(m(4),E(i.filterGroups?4:i.linkLoadFailed?5:6),m(4),v("disabled",i.isApplying()),m(2),v("disabled",!i.filterGroups||i.isApplying()),m(2),v("disabled",!i.filterGroups||i.isApplying()),m(),E(i.isApplying()?13:14),m(2),v("disabled",!i.filterGroups))},dependencies:[fe,tc,k_,It,At,No,Nt,Er,pm,Tr,ke,qe,Qe,bt,we,Pe,Ve,Wn,oi,ye,Ee,Y,he,rt,mt,ot,ct,nt,ie,ce],styles:[".packet-filters__grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 20px}.packet-filters__group[_ngcontent-%COMP%]{min-width:0;padding-bottom:8px;border-bottom:1px solid var(--mat-sys-outline-variant)}.packet-filters__group[_ngcontent-%COMP%]:last-child{border-bottom:none;padding-bottom:0}.packet-filters__group--wide[_ngcontent-%COMP%]{grid-column:1/-1}.packet-filters__group-name[_ngcontent-%COMP%]{margin:0 0 8px;font:var(--mat-sys-title-small);color:var(--mat-sys-on-surface)}.packet-filters__fields[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));column-gap:12px}.packet-filters__field[_ngcontent-%COMP%]{width:100%}.packet-filters__hint[_ngcontent-%COMP%]{margin:0 0 12px;font:var(--mat-sys-body-small);color:var(--mat-sys-on-surface-variant)}.packet-filters__advanced-toggle[_ngcontent-%COMP%]{grid-column:1/-1;display:flex;align-items:center;justify-content:center;gap:4px;padding:4px 0}.packet-filters__experimental-badge[_ngcontent-%COMP%]{padding:2px 8px;border-radius:8px;font:var(--mat-sys-label-small);color:var(--mat-sys-on-tertiary-container);background-color:var(--mat-sys-tertiary-container)}.packet-filters__empty[_ngcontent-%COMP%]{margin:0;font:var(--mat-sys-body-medium);color:var(--mat-sys-on-surface-variant)}.packet-filters__loading[_ngcontent-%COMP%]{display:flex;justify-content:center;padding:24px 0}@media(max-width:700px){.packet-filters__grid[_ngcontent-%COMP%]{grid-template-columns:1fr}}"],changeDetection:0})}return n})();var VS=(()=>{class n{dialog=f(Xe);dialogConfig=f(yo);controller=ee(void 0);project=ee(void 0);link=ee(void 0);openPacketFilters(){let e=this.dialogConfig.openConfig("packetFilters",{autoFocus:!1,disableClose:!1}),i=this.dialog.open(LS,e).componentInstance;i.controller=this.controller(),i.project=this.project(),i.link=this.link()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-packet-filters-action"]],inputs:{controller:[1,"controller"],project:[1,"project"],link:[1,"link"]},decls:5,vars:0,consts:[["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&(r(0,"button",0),_("click",function(){return i.openPacketFilters()}),r(1,"mat-icon"),c(2,"filter_list"),l(),r(3,"span"),c(4,"Packet filters"),l()())},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();function NTe(n,o){if(n&1){let e=R();r(0,"button",1),_("click",function(){y(e);let i=h();return w(i.resumeLink())}),r(1,"mat-icon"),c(2,"play_arrow"),l(),r(3,"span"),c(4,"Resume"),l()()}}var BS=(()=>{class n{linkService=f(Ri);toasterService=f(re);cdr=f(oe);controller=ee(void 0);link=ee(void 0);resumeLink(){let e=this.link();e.suspend=!1,this.linkService.updateLink(this.controller(),e).subscribe({next:()=>this.toasterService.success("Link resumed."),error:t=>{let i=t.error?.message||t.message||"Failed to resume link";this.toasterService.error(i),this.cdr.markForCheck()}})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-resume-link-action"]],inputs:{controller:[1,"controller"],link:[1,"link"]},decls:1,vars:1,consts:[["mat-menu-item",""],["mat-menu-item","",3,"click"]],template:function(t,i){if(t&1&&T(0,NTe,5,0,"button",0),t&2){let a;E((a=i.link())!=null&&a.suspend?0:-1)}},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();function FTe(n,o){if(n&1){let e=R();r(0,"button",1),_("click",function(){y(e);let i=h();return w(i.suspendLink())}),r(1,"mat-icon"),c(2,"pause"),l(),r(3,"span"),c(4,"Suspend"),l()()}}var jS=(()=>{class n{linkService=f(Ri);toasterService=f(re);cdr=f(oe);controller=ee(void 0);link=ee(void 0);suspendLink(){let e=this.link();e.suspend=!0,this.linkService.updateLink(this.controller(),e).subscribe({next:()=>this.toasterService.success("Link suspended."),error:t=>{let i=t.error?.message||t.message||"Failed to suspend link";this.toasterService.error(i),this.cdr.markForCheck()}})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-suspend-link-action"]],inputs:{controller:[1,"controller"],link:[1,"link"]},decls:1,vars:1,consts:[["mat-menu-item",""],["mat-menu-item","",3,"click"]],template:function(t,i){if(t&1&&T(0,FTe,5,0,"button",0),t&2){let a;E(((a=i.link())==null?null:a.suspend)===!1?0:-1)}},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();var $S=(()=>{class n{linkService=f(Ri);toasterService=f(re);linksDataSource=f(so);mapLinksDataSource=f(Fs);controller=ee(void 0);link=ee(void 0);get showFiltersIcon(){let e=this.link();return e?this.linksDataSource.get(e.link_id)?.show_filters_icon??!0:!0}toggleShowFiltersIcon(){let e=this.link();if(!e)return;let i=!this.showFiltersIcon;this.linkService.updateLink(this.controller(),ze(q({},e),{show_filters_icon:i})).subscribe({next:a=>{this.linksDataSource.update(a);let s=this.mapLinksDataSource.get(a.link_id);s&&(s.show_filters_icon=a.show_filters_icon,this.mapLinksDataSource.update(s)),this.toasterService.success(`Filter icon ${a.show_filters_icon?"shown":"hidden"}.`,{showToast:!1})},error:a=>{let s=a.error?.message||a.message||"Failed to toggle filter icon visibility";this.toasterService.error(s)}})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-toggle-show-filters-icon-action"]],inputs:{controller:[1,"controller"],link:[1,"link"]},decls:5,vars:2,consts:[["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&(r(0,"button",0),_("click",function(){return i.toggleShowFiltersIcon()}),r(1,"mat-icon"),c(2),l(),r(3,"span"),c(4),l()()),t&2&&(m(2),N(i.showFiltersIcon===!1?"visibility_off":"visibility"),m(2),N(i.showFiltersIcon===!1?"Show filter icons":"Hide filter icons"))},dependencies:[ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();var HS=(()=>{class n{linkService=f(Ri);toasterService=f(re);cdr=f(oe);controller=ee(void 0);link=ee(void 0);resetLink(){this.linkService.resetLink(this.controller(),this.link()).subscribe({next:()=>this.toasterService.success("Link reset."),error:e=>{let t=e.error?.message||e.message||"Failed to reset link";this.toasterService.error(t),this.cdr.markForCheck()}})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-reset-link-action"]],inputs:{controller:[1,"controller"],link:[1,"link"]},decls:5,vars:0,consts:[["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&(r(0,"button",0),_("click",function(){return i.resetLink()}),r(1,"mat-icon"),c(2,"settings_backup_restore"),l(),r(3,"span"),c(4,"Reset link"),l()())},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();var P_=(()=>{class n extends At{static HEX_COLOR=/^#[0-9a-f]{6}$/i;static PLACEHOLDER="#000000";writeValue(e){this.setProperty("value",e&&n.HEX_COLOR.test(e)?e:n.PLACEHOLDER)}static \u0275fac=(()=>{let e;return function(i){return(e||(e=yi(n)))(i||n)}})();static \u0275dir=yt({type:n,selectors:[["input","type","color","formControlName",""],["input","type","color","formControl",""],["input","type","color","ngModel",""]],features:[un([{provide:Pd,useExisting:Pc(()=>n),multi:!0}]),mi]})}return n})();function RTe(n,o){if(n&1&&(r(0,"mat-option",7),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function zTe(n,o){if(n&1&&(r(0,"mat-option",7),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function LTe(n,o){if(n&1&&(r(0,"mat-form-field",9)(1,"mat-label"),c(2,"Curviness"),l(),L(3,"input",15),l()),n&2){let e=h();m(3),v("min",e.curvinessMin)("max",e.curvinessMax)("step",e.curvinessStep)}}function VTe(n,o){if(n&1&&(r(0,"mat-form-field",10)(1,"mat-label"),c(2,"Roundness"),l(),L(3,"input",16),l()),n&2){let e=h();m(3),v("min",e.flowchartRoundnessMin)("max",e.flowchartRoundnessMax)("step",e.flowchartRoundnessStep)}}function BTe(n,o){n&1&&L(0,"mat-spinner",14)}function jTe(n,o){n&1&&c(0," Apply ")}var US=(()=>{class n{dialogRef=f(We);formBuilder=f(Ai);toasterService=f(re);linkService=f(Ri);linksDataSource=f(so);linksEventSource=f(Wr);linkToMapLink=f(Yh);nonNegativeValidator=f(Ep);cdr=f(oe);isApplying=z(!1);controller;project;link;formGroup;borderTypes=["Invisible","Solid","Dash","Dot","Dash Dot","Dash Dot Dot"];linkTypes=["Straight","Bezier","Flowchart","StateMachine","Freeform"];linkTypeValues=["straight","bezier","flowchart","statemachine","freeform"];bezierCurvinessMin=en.BEZIER_CURVINESS_MIN;bezierCurvinessMax=en.BEZIER_CURVINESS_MAX;bezierCurvinessStep=en.BEZIER_CURVINESS_STEP;bezierCurvinessDefault=en.BEZIER_CURVINESS_DEFAULT;stateMachineCurvinessMin=en.STATE_MACHINE_CURVINESS_MIN;stateMachineCurvinessMax=en.STATE_MACHINE_CURVINESS_MAX;stateMachineCurvinessStep=en.STATE_MACHINE_CURVINESS_STEP;stateMachineCurvinessDefault=en.STATE_MACHINE_CURVINESS_DEFAULT;flowchartRoundnessMin=en.FLOWCHART_ROUNDNESS_MIN;flowchartRoundnessMax=en.FLOWCHART_ROUNDNESS_MAX;flowchartRoundnessStep=en.FLOWCHART_ROUNDNESS_STEP;flowchartRoundnessDefault=en.FLOWCHART_ROUNDNESS_DEFAULT;curvinessLinkTypeContext=en.DEFAULT_LINK_TYPE;constructor(){this.formGroup=this.formBuilder.group({color:new Ge("",[Ue.required]),width:new Ge("",[Ue.required,this.nonNegativeValidator.get]),type:new Ge("",[Ue.required]),linkType:new Ge("",[Ue.required]),bezierCurviness:new Ge(this.bezierCurvinessDefault,[Ue.required]),flowchartRoundness:new Ge(this.flowchartRoundnessDefault,[Ue.required,Ue.min(this.flowchartRoundnessMin),Ue.max(this.flowchartRoundnessMax)])})}ngOnInit(){this.link.link_style||(this.link.link_style={});let e=this.link.link_type==="serial"?"#800000":"#000000";this.formGroup.controls.color.setValue(this.link.link_style?.color??e);let t=this.link.link_style?.width!==void 0?this.link.link_style.width:2;this.formGroup.controls.width.setValue(t);let i=this.borderTypes[1];this.link.link_style?.type!==void 0&&this.link.link_style.type>=0&&this.link.link_style.type<this.borderTypes.length&&(i=this.borderTypes[this.link.link_style.type]),this.formGroup.controls.type.setValue(i);let a=Hl.get(this.link.project_id,this.link.link_id),s=this.link.link_style.link_type||a,d=this.normalizeLinkType(s);this.formGroup.controls.linkType.setValue(this.getLinkTypeLabel(s));let p=Hl.getBezierCurviness(this.link.project_id,this.link.link_id),u=this.link.link_style?.bezier_curviness!==void 0?this.link.link_style.bezier_curviness:p;this.applyCurvinessValidators(d),this.formGroup.controls.bezierCurviness.setValue(this.normalizeCurvinessByLinkType(d,u)),this.curvinessLinkTypeContext=d;let g=Hl.getFlowchartRoundness(this.link.project_id,this.link.link_id),C=this.link.link_style?.flowchart_roundness!==void 0?this.link.link_style.flowchart_roundness:g;this.formGroup.controls.flowchartRoundness.setValue(en.normalizeFlowchartRoundness(C)),this.formGroup.controls.linkType.valueChanges.subscribe({next:M=>{let x=this.normalizeLinkType(M),b=this.curvinessLinkTypeContext;this.applyCurvinessValidators(x);let P=this.formGroup.controls.bezierCurviness.value,k=this.normalizeCurvinessByLinkType(b,P),S=this.getCurvinessDefaultByLinkType(b),O=k===S,A=this.getCurvinessDefaultByLinkType(x),D=O?A:this.normalizeCurvinessByLinkType(x,P);this.formGroup.controls.bezierCurviness.setValue(D,{emitEvent:!1}),this.curvinessLinkTypeContext=x},error:M=>{let x=M.error?.message||M.message||"Failed to update link type";this.toasterService.error(x),this.cdr.markForCheck()}})}normalizeLinkType(e){return en.normalizeLinkType(e)}getLinkTypeLabel(e){let t=this.normalizeLinkType(e),i=this.linkTypeValues.indexOf(t);return this.linkTypes[i===-1?0:i]}isCurvinessSelected(){let e=this.normalizeLinkType(this.formGroup.controls.linkType.value);return e==="bezier"||e==="statemachine"}isFlowchartSelected(){return this.normalizeLinkType(this.formGroup.controls.linkType.value)==="flowchart"}get curvinessMin(){return this.getCurvinessMinByLinkType(this.normalizeLinkType(this.formGroup.controls.linkType.value))}get curvinessMax(){return this.getCurvinessMaxByLinkType(this.normalizeLinkType(this.formGroup.controls.linkType.value))}get curvinessStep(){return this.getCurvinessStepByLinkType(this.normalizeLinkType(this.formGroup.controls.linkType.value))}normalizeCurvinessByLinkType(e,t){return e==="statemachine"?en.normalizeStateMachineCurviness(t):en.normalizeBezierCurviness(t)}getCurvinessMinByLinkType(e){return e==="statemachine"?this.stateMachineCurvinessMin:this.bezierCurvinessMin}getCurvinessMaxByLinkType(e){return e==="statemachine"?this.stateMachineCurvinessMax:this.bezierCurvinessMax}getCurvinessStepByLinkType(e){return e==="statemachine"?this.stateMachineCurvinessStep:this.bezierCurvinessStep}getCurvinessDefaultByLinkType(e){return e==="statemachine"?this.stateMachineCurvinessDefault:this.bezierCurvinessDefault}applyCurvinessValidators(e){this.formGroup.controls.bezierCurviness.setValidators([Ue.required,Ue.min(this.getCurvinessMinByLinkType(e)),Ue.max(this.getCurvinessMaxByLinkType(e))]),this.formGroup.controls.bezierCurviness.updateValueAndValidity({emitEvent:!1})}onNoClick(){this.dialogRef.close()}onYesClick(){if(!this.isApplying())if(this.formGroup.valid){this.link.link_style||(this.link.link_style={});let e=this.normalizeLinkType(this.link.link_style.link_type||Hl.get(this.link.project_id,this.link.link_id)),t=this.link.link_style.control_offset;this.link.link_style.color=this.formGroup.controls.color.value,this.link.link_style.width=this.formGroup.controls.width.value,this.link.link_style.type=this.borderTypes.indexOf(this.formGroup.controls.type.value),this.link.link_style.link_type=this.normalizeLinkType(this.formGroup.controls.linkType.value),this.link.link_style.bezier_curviness=this.normalizeCurvinessByLinkType(this.link.link_style.link_type,this.formGroup.controls.bezierCurviness.value),this.link.link_style.flowchart_roundness=en.normalizeFlowchartRoundness(this.formGroup.controls.flowchartRoundness.value),this.link.link_style.link_type==="freeform"?this.link.link_style.control_offset=t:this.link.link_style.control_offset=void 0;let i=this.link.link_style.link_type,a=this.link.link_style.bezier_curviness,s=this.link.link_style.flowchart_roundness,d=i!==e;this.isApplying.set(!0),this.dialogRef.disableClose=!0,this.linkService.updateLinkStyle(this.controller,this.link).subscribe({next:p=>{p.link_style||(p.link_style={});let u=p.link_style.link_type,C=typeof u=="string"&&u.trim().length>0&&this.normalizeLinkType(u)!==this.normalizeLinkType(i);!p.link_style.link_type&&i&&(p.link_style.link_type=i),p.link_style.bezier_curviness===void 0&&a!==void 0&&(p.link_style.bezier_curviness=a),p.link_style.flowchart_roundness===void 0&&s!==void 0&&(p.link_style.flowchart_roundness=s),p.link_style.control_offset===void 0&&t!==void 0&&p.link_style.link_type==="freeform"&&(p.link_style.control_offset=t),Hl.set(p.project_id,p.link_id,p.link_style.link_type),Hl.setBezierCurviness(p.project_id,p.link_id,this.normalizeCurvinessByLinkType(p.link_style.link_type,p.link_style.bezier_curviness)),Hl.setFlowchartRoundness(p.project_id,p.link_id,en.normalizeFlowchartRoundness(p.link_style.flowchart_roundness)),this.linksDataSource.update(p),this.linksEventSource.edited.next(this.linkToMapLink.convert(p)),d&&i&&C?this.toasterService.warning("Link type was not persisted by the controller. Please update gns3-server."):this.toasterService.success("Link updated"),this.dialogRef.close()},error:p=>{let u=p.error?.message||p.message||"Failed to update link style";this.toasterService.error(u),this.isApplying.set(!1),this.dialogRef.disableClose=!1,this.cdr.markForCheck()}})}else this.toasterService.error("Entered data is incorrect")}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-link-style-editor"]],decls:32,vars:5,consts:[["mat-dialog-title",""],[1,"modal-form-container"],[1,"gns3-form-stack",3,"formGroup"],["subscriptSizing","dynamic","appearance","outline",1,"form-field"],["matInput","","formControlName","color","type","color"],["matInput","","formControlName","width","type","number"],["formControlName","type"],[3,"value"],["formControlName","linkType"],["subscriptSizing","dynamic","appearance","outline",1,"form-field","bezier-curviness-field"],["subscriptSizing","dynamic","appearance","outline",1,"form-field","flowchart-roundness-field"],["mat-dialog-actions",""],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"],["diameter","20"],["matInput","","formControlName","bezierCurviness","type","number",3,"min","max","step"],["matInput","","formControlName","flowchartRoundness","type","number",3,"min","max","step"]],template:function(t,i){t&1&&(r(0,"h1",0),c(1,"Link Style Editor"),l(),r(2,"div",1)(3,"form",2)(4,"mat-form-field",3)(5,"mat-label"),c(6,"Color"),l(),L(7,"input",4),l(),r(8,"mat-form-field",3)(9,"mat-label"),c(10,"Width"),l(),L(11,"input",5),l(),r(12,"mat-form-field",3)(13,"mat-label"),c(14,"Line style"),l(),r(15,"mat-select",6),Q(16,RTe,2,2,"mat-option",7,Oe),l()(),r(18,"mat-form-field",3)(19,"mat-label"),c(20,"Link type"),l(),r(21,"mat-select",8),Q(22,zTe,2,2,"mat-option",7,Oe),l()(),T(24,LTe,4,3,"mat-form-field",9),T(25,VTe,4,3,"mat-form-field",10),l()(),r(26,"div",11)(27,"button",12),_("click",function(){return i.onNoClick()}),c(28,"Cancel"),l(),r(29,"button",13),_("click",function(){return i.onYesClick()}),T(30,BTe,1,0,"mat-spinner",14)(31,jTe,1,0),l()()),t&2&&(m(3),v("formGroup",i.formGroup),m(13),K(i.borderTypes),m(6),K(i.linkTypes),m(2),E(i.isCurvinessSelected()?24:-1),m(),E(i.isFlowchartSelected()?25:-1),m(4),v("disabled",i.isApplying()),m(),E(i.isApplying()?30:31))},dependencies:[fe,St,Ct,At,No,Nt,vt,Er,pm,It,Ut,Yt,ke,qe,Qe,we,Pe,Ve,ye,Ee,ot,ct,nt,Ho,Y,he,rt,mt,P_],styles:[".modal-form-container[_ngcontent-%COMP%]{display:flex;flex-direction:column}.modal-form-container[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]{width:100%}.form-field[_ngcontent-%COMP%]{width:100%}input[type=color][_ngcontent-%COMP%]{display:block;appearance:none;border:0;height:24px;border-radius:var(--gns3-density-radius-sm)}input[type=color][_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--mat-sys-primary);outline-offset:3px}input[type=color][_ngcontent-%COMP%]::-webkit-color-swatch-wrapper{padding:0}input[type=color][_ngcontent-%COMP%]::-webkit-color-swatch{border:0}"],changeDetection:0})}return n})();var WS=(()=>{class n{dialog=f(Xe);dialogConfig=f(yo);controller=ee(void 0);project=ee(void 0);link=ee(void 0);editStyle(){let e=this.dialogConfig.openConfig("linkStyleEditor",{autoFocus:!1,disableClose:!1}),i=this.dialog.open(US,e).componentInstance;i.controller=this.controller(),i.project=this.project(),i.link=this.link()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-edit-link-style-action"]],inputs:{controller:[1,"controller"],project:[1,"project"],link:[1,"link"]},decls:5,vars:0,consts:[["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&(r(0,"button",0),_("click",function(){return i.editStyle()}),r(1,"mat-icon"),c(2,"style"),l(),r(3,"span"),c(4,"Edit style"),l()())},dependencies:[ke,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();var GS=(()=>{class n{nodesDataSource=f(Xn);drawingsDataSource=f(Ui);nodeService=f(ft);drawingService=f(Wi);projectService=f(Ti);cdr=f(oe);dialog=f(Xe);toasterService=f(re);controller=ee(void 0);nodes=ee(void 0);drawings=ee(void 0);command;ngOnChanges(){let e=this.nodes(),t=this.drawings();e.length===1&&t.length===0?this.command=e[0].locked?"Unlock item":"Lock item":e.length===0&&t.length===1?this.command=t[0].locked?"Unlock item":"Lock item":this.command="Lock/unlock items"}lock(){let e=this.nodes(),t=this.drawings(),i=e.length+t.length;if(i>1){let s=!e.every(p=>p.locked)||!t.every(p=>p.locked)?"lock":"unlock";this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-warning-panel","dialog-small-panel"],autoFocus:".cancel-button",data:{title:`${s==="lock"?"Lock":"Unlock"} selected items?`,message:`${s==="lock"?"Lock":"Unlock"} ${i} selected items?`,confirmButtonText:s==="lock"?"Lock items":"Unlock items",tone:"warning",icon:s==="lock"?"lock":"lock_open"}}).afterClosed().subscribe({next:p=>{p&&this.performLockUnlock()},error:p=>{let u=p.error?.message||p.message||"Failed to process lock confirmation";this.toasterService.error(u),this.cdr.markForCheck()}})}else this.performLockUnlock()}performLockUnlock(){let e=this.nodes().length+this.drawings().length;if(e===0){this.projectService.projectUpdateLockIcon();return}let t=uo(e,i=>{this.projectService.projectUpdateLockIcon(),i>0&&this.toasterService.success(`Lock status updated for ${i} ${i===1?"item":"items"}.`,{showToast:!1})});this.nodes().forEach(i=>{i.locked=!i.locked,this.nodeService.updateNode(this.controller(),i).subscribe({next:a=>{this.nodesDataSource.update(a),t.succeed(),this.cdr.markForCheck()},error:a=>{t.fail();let s=a.error?.message||a.message||"Failed to update node lock status";this.toasterService.error(s),this.cdr.markForCheck()}})}),this.drawings().forEach(i=>{i.locked=!i.locked,this.drawingService.update(this.controller(),i).subscribe({next:a=>{this.drawingsDataSource.update(a),t.succeed(),this.cdr.markForCheck()},error:a=>{t.fail();let s=a.error?.message||a.message||"Failed to update drawing lock status";this.toasterService.error(s),this.cdr.markForCheck()}})})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-lock-action"]],inputs:{controller:[1,"controller"],nodes:[1,"nodes"],drawings:[1,"drawings"]},features:[Nn],decls:5,vars:1,consts:[["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&(r(0,"button",0),_("click",function(){return i.lock()}),r(1,"mat-icon"),c(2,"lock"),l(),r(3,"span"),c(4),l()()),t&2&&(m(4),N(i.command))},dependencies:[Y,ie,ce,it,ut,ke],encapsulation:2,changeDetection:0})}return n})();function T_(n){let o=[M4(n.nodes,"node"),M4(n.links,"link"),M4(n.drawings,"drawing")].filter(e=>!!e);return o.length<=1?o[0]??"0 objects":o.length===2?`${o[0]} and ${o[1]}`:`${o[0]}, ${o[1]}, and ${o[2]}`}function M4(n,o){return n===0?null:`${n} ${n===1?o:`${o}s`}`}var qS=(()=>{class n{toasterService=f(re);nodeService=f(ft);drawingService=f(Wi);linkService=f(Ri);dialog=f(Xe);cdr=f(oe);controller=ee(void 0);nodes=ee([]);drawings=ee([]);links=ee([]);confirmDelete(){let e=this.selectedItemCounts(),t=e.nodes+e.drawings+e.links;this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","dialog-small-panel","confirmation-danger-panel"],autoFocus:".cancel-button",data:{title:"Delete selected objects?",message:`${T_(e)} will be permanently deleted.`,note:"This action cannot be undone.",confirmButtonText:t===1?"Delete object":"Delete objects",tone:"danger"}}).afterClosed().subscribe(a=>{a&&(this.delete(),this.cdr.markForCheck())})}delete(){let e=this.nodes().filter(d=>!d.locked),t=this.drawings().filter(d=>!d.locked),i=this.nodes().length===0&&this.drawings().length===0?this.links():[],a={nodes:0,links:0,drawings:0},s=uo(e.length+t.length+i.length,d=>{d>0&&this.toasterService.success(`${T_(a)} deleted.`)});this.nodes().forEach(d=>{if(!d.locked)this.nodeService.delete(this.controller(),d).subscribe({next:()=>{a.nodes++,s.succeed()},error:p=>{s.fail();let u=p.error?.message||p.message||"Failed to delete node";this.toasterService.error(u),this.cdr.markForCheck()}});else{this.toasterService.error("Cannot delete locked node: "+d.name),this.cdr.markForCheck();return}}),this.drawings().forEach(d=>{if(!d.locked)this.drawingService.delete(this.controller(),d).subscribe({next:()=>{a.drawings++,s.succeed()},error:p=>{s.fail();let u=p.error?.message||p.message||"Failed to delete drawing";this.toasterService.error(u),this.cdr.markForCheck()}});else{this.toasterService.error("Cannot delete locked drawing"),this.cdr.markForCheck();return}}),this.nodes().length==0&&this.drawings().length==0&&this.links().forEach(d=>{this.linkService.deleteLink(this.controller(),d).subscribe({next:()=>{Hl.remove(d.project_id,d.link_id),a.links++,s.succeed()},error:p=>{s.fail();let u=p.error?.message||p.message||"Failed to delete link";this.toasterService.error(u),this.cdr.markForCheck()}})})}selectedItemCounts(){let e=this.nodes().length>0||this.drawings().length>0;return{nodes:this.nodes().length,drawings:this.drawings().length,links:e?0:this.links().length}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-delete-action"]],inputs:{controller:[1,"controller"],nodes:[1,"nodes"],drawings:[1,"drawings"],links:[1,"links"]},decls:5,vars:0,consts:[["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&(r(0,"button",0),_("click",function(){return i.confirmDelete()}),r(1,"mat-icon"),c(2,"delete"),l(),r(3,"span"),c(4,"Delete"),l()())},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();var QS=(()=>{class n{nodesDataSource=f(Xn);nodeService=f(ft);toasterService=f(re);cdr=f(oe);controller=ee(void 0);nodes=ee(void 0);alignHorizontally(){let e=this.nodes()||[];if(e.length===0)return;let t=0;e.forEach(a=>{t+=a.y}),t=t/e.length;let i=uo(e.length,a=>{a>0&&this.toasterService.success("Nodes aligned horizontally.",{showToast:!1})});e.forEach(a=>{a.y=t,this.nodesDataSource.update(a),this.nodeService.update(this.controller(),a).subscribe({next:()=>{i.succeed(),this.cdr.markForCheck()},error:s=>{i.fail();let d=s.error?.message||s.message||"Failed to align node";this.toasterService.error(d),this.cdr.markForCheck()}})})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-align-horizontally-action"]],inputs:{controller:[1,"controller"],nodes:[1,"nodes"]},decls:5,vars:0,consts:[["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&(r(0,"button",0),_("click",function(){return i.alignHorizontally()}),r(1,"mat-icon"),c(2,"more_horiz"),l(),r(3,"span"),c(4,"Align horizontally"),l()())},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();var KS=(()=>{class n{nodesDataSource=f(Xn);nodeService=f(ft);toasterService=f(re);cdr=f(oe);controller=ee(void 0);nodes=ee(void 0);alignVertically(){let e=this.nodes()||[];if(e.length===0)return;let t=0;e.forEach(a=>{t+=a.x}),t=t/e.length;let i=uo(e.length,a=>{a>0&&this.toasterService.success("Nodes aligned vertically.",{showToast:!1})});e.forEach(a=>{a.x=t,this.nodesDataSource.update(a),this.nodeService.update(this.controller(),a).subscribe({next:()=>{i.succeed(),this.cdr.markForCheck()},error:s=>{i.fail();let d=s.error?.message||s.message||"Failed to align node";this.toasterService.error(d),this.cdr.markForCheck()}})})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-align-vertically-action"]],inputs:{controller:[1,"controller"],nodes:[1,"nodes"]},decls:5,vars:0,consts:[["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&(r(0,"button",0),_("click",function(){return i.alignVertically()}),r(1,"mat-icon"),c(2,"more_vert"),l(),r(3,"span"),c(4,"Align vertically"),l()())},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();var Mj=(()=>{class n{openFileManagerInline=new be;node=ee(void 0);controller=ee(void 0);showInFileManager(){let e=this.node(),t=this.controller();e&&t&&this.openFileManagerInline.emit({node:e,controller:t})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-show-in-file-manager-action"]],inputs:{node:[1,"node"],controller:[1,"controller"]},outputs:{openFileManagerInline:"openFileManagerInline"},decls:5,vars:0,consts:[["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&(r(0,"button",0),_("click",function(){return i.showInFileManager()}),r(1,"mat-icon"),c(2,"folder_open"),l(),r(3,"span"),c(4,"Show in file manager"),l()())},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();var Sj=(()=>{class n{missingImagesDialog=f(IM);toasterService=f(re);controller=ee(void 0);node=ee(void 0);fixMissingImage(){this.missingImagesDialog.open(this.controller(),[this.node()],{title:"Node missing image",introText:"This node references an image that is not available. Select a compatible replacement image for this node. Nodes without a compatible image are kept in a degraded state and cannot be started.",dismissButtonText:"Cancel",contentSized:!0}).subscribe(e=>{!e||e.updated===0||(this.toasterService.success(`Image updated for ${this.node().name}.`),e.remaining>0&&this.toasterService.warning("Some images are still missing - the affected nodes cannot be started."))})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-fix-missing-image-action"]],inputs:{controller:[1,"controller"],node:[1,"node"]},decls:5,vars:0,consts:[["mat-menu-item","",3,"click"]],template:function(t,i){t&1&&(r(0,"button",0),_("click",function(){return i.fixMissingImage()}),r(1,"mat-icon"),c(2,"image_search"),l(),r(3,"span"),c(4,"Fix missing image"),l()())},dependencies:[Y,ie,ce,it,ut],encapsulation:2,changeDetection:0})}return n})();function $Te(n,o){if(n&1&&L(0,"app-show-node-action",4),n&2){let e=h();v("controller",e.controller)("node",e.nodes[0])}}function HTe(n,o){if(n&1){let e=R();r(0,"app-show-in-file-manager-action",15),_("openFileManagerInline",function(i){y(e);let a=h();return w(a.onOpenFileManagerInline(i))}),l()}if(n&2){let e=h();v("controller",e.controller)("node",e.nodes[0])}}function UTe(n,o){if(n&1&&L(0,"app-config-node-action",4),n&2){let e=h();v("controller",e.controller)("node",e.nodes[0])}}function WTe(n,o){if(n&1&&L(0,"app-fix-missing-image-action",4),n&2){let e=h();v("controller",e.controller)("node",e.nodes[0])}}function GTe(n,o){if(n&1&&L(0,"app-start-node-action",5),n&2){let e=h();v("controller",e.controller)("nodes",e.nodes)}}function qTe(n,o){if(n&1&&L(0,"app-suspend-node-action",5),n&2){let e=h();v("controller",e.controller)("nodes",e.nodes)}}function QTe(n,o){if(n&1&&L(0,"app-stop-node-action",5),n&2){let e=h();v("controller",e.controller)("nodes",e.nodes)}}function KTe(n,o){if(n&1&&L(0,"app-reload-node-action",5),n&2){let e=h();v("controller",e.controller)("nodes",e.nodes)}}function XTe(n,o){if(n&1){let e=R();r(0,"app-http-console-action",16),_("openWebConsoleInline",function(i){y(e);let a=h();return w(a.onOpenWebConsoleInline(i))}),l()}if(n&2){let e=h();v("controller",e.controller)("project",e.project)("nodes",e.nodes)}}function YTe(n,o){if(n&1&&L(0,"app-http-console-new-tab-action",5),n&2){let e=h();v("controller",e.controller)("nodes",e.nodes)}}function ZTe(n,o){if(n&1&&L(0,"app-console-device-action-browser",4),n&2){let e=h();v("controller",e.controller)("node",e.nodes[0])}}function JTe(n,o){if(n&1&&L(0,"app-isolate-node-action",4),n&2){let e=h();v("controller",e.controller)("node",e.nodes[0])}}function eEe(n,o){if(n&1&&L(0,"app-unisolate-node-action",4),n&2){let e=h();v("controller",e.controller)("node",e.nodes[0])}}function tEe(n,o){if(n&1&&L(0,"app-change-hostname-action",4),n&2){let e=h();v("controller",e.controller)("node",e.nodes[0])}}function nEe(n,o){if(n&1&&L(0,"app-change-symbol-action",4),n&2){let e=h();v("controller",e.controller)("node",e.nodes[0])}}function iEe(n,o){if(n&1&&L(0,"app-duplicate-action",7),n&2){let e=h();v("controller",e.controller)("project",e.project)("nodes",e.nodes)("drawings",e.drawings)}}function oEe(n,o){if(n&1&&L(0,"app-edit-style-action",8),n&2){let e=h();v("controller",e.controller)("project",e.project)("drawing",e.drawings[0])}}function aEe(n,o){if(n&1&&L(0,"app-edit-text-action",9),n&2){let e=h();v("controller",e.controller)("project",e.project)("drawing",e.drawings[0])("node",e.nodes[0])("label",e.labels[0])("link",e.links[0])("linkNode",e.linkNodes[0])}}function rEe(n,o){if(n&1&&L(0,"app-edit-config-action",10),n&2){let e=h();v("controller",e.controller)("project",e.project)("node",e.nodes[0])}}function sEe(n,o){if(n&1&&L(0,"app-export-config-action",4),n&2){let e=h();v("controller",e.controller)("node",e.nodes[0])}}function lEe(n,o){if(n&1&&L(0,"app-import-config-action",4),n&2){let e=h();v("controller",e.controller)("node",e.nodes[0])}}function cEe(n,o){if(n&1&&L(0,"app-idle-pc-action",4),n&2){let e=h();v("controller",e.controller)("node",e.nodes[0])}}function dEe(n,o){if(n&1&&L(0,"app-auto-idle-pc-action",4),n&2){let e=h();v("controller",e.controller)("node",e.nodes[0])}}function mEe(n,o){if(n&1&&L(0,"app-move-layer-up-action",11),n&2){let e=h();v("controller",e.controller)("nodes",e.nodes)("drawings",e.drawings)}}function pEe(n,o){if(n&1&&L(0,"app-move-layer-down-action",11),n&2){let e=h();v("controller",e.controller)("nodes",e.nodes)("drawings",e.drawings)}}function uEe(n,o){if(n&1&&L(0,"app-bring-to-front-action",11),n&2){let e=h();v("controller",e.controller)("nodes",e.nodes)("drawings",e.drawings)}}function gEe(n,o){if(n&1&&L(0,"app-start-capture-action",12),n&2){let e=h();v("controller",e.controller)("project",e.project)("link",e.links[0])}}function hEe(n,o){if(n&1&&L(0,"app-stop-capture-action",13),n&2){let e=h();v("controller",e.controller)("link",e.links[0])}}function _Ee(n,o){if(n&1&&L(0,"app-start-capture-on-started-link-action",12),n&2){let e=h();v("controller",e.controller)("project",e.project)("link",e.links[0])}}function fEe(n,o){if(n&1){let e=R();L(0,"app-start-web-wireshark-action",12),r(1,"app-start-web-wireshark-inline-action",17),_("openWebWiresharkInline",function(i){y(e);let a=h();return w(a.onOpenWebWiresharkInline(i))}),l()}if(n&2){let e=h();v("controller",e.controller)("project",e.project)("link",e.links[0]),m(),v("controller",e.controller)("project",e.project)("link",e.links[0])}}function vEe(n,o){if(n&1&&L(0,"app-packet-filters-action",12),n&2){let e=h();v("controller",e.controller)("project",e.project)("link",e.links[0])}}function CEe(n,o){if(n&1&&L(0,"app-toggle-show-filters-icon-action",13),n&2){let e=h();v("controller",e.controller)("link",e.links[0])}}function bEe(n,o){if(n&1&&L(0,"app-resume-link-action",13),n&2){let e=h();v("controller",e.controller)("link",e.links[0])}}function xEe(n,o){if(n&1&&L(0,"app-suspend-link-action",13),n&2){let e=h();v("controller",e.controller)("link",e.links[0])}}function yEe(n,o){if(n&1&&L(0,"app-reset-link-action",13),n&2){let e=h();v("controller",e.controller)("link",e.links[0])}}function wEe(n,o){if(n&1&&L(0,"app-edit-link-style-action",12),n&2){let e=h();v("controller",e.controller)("project",e.project)("link",e.links[0])}}function MEe(n,o){if(n&1&&L(0,"app-lock-action",11),n&2){let e=h();v("controller",e.controller)("nodes",e.nodes)("drawings",e.drawings)}}function SEe(n,o){if(n&1&&L(0,"app-delete-action",14),n&2){let e=h();v("controller",e.controller)("nodes",e.nodes)("drawings",e.drawings)("links",e.links)}}function kEe(n,o){if(n&1&&L(0,"app-align-horizontally-action",5),n&2){let e=h();v("controller",e.controller)("nodes",e.nodes)}}function PEe(n,o){if(n&1&&L(0,"app-align-vertically-action",5),n&2){let e=h();v("controller",e.controller)("nodes",e.nodes)}}var E_=(()=>{class n{sanitizer=f(Pr);changeDetector=f(oe);projectService=f(Ti);project;controller;openWebWiresharkInline=new be;openWebConsoleInline=new be;openFileManagerInline=new be;contextMenu;topPosition;leftPosition;drawings=[];nodes=[];labels=[];links=[];linkNodes=[];hasTextCapabilities=!1;isBundledController=!1;constructor(){}ngOnInit(){this.setPosition(0,0),this.isBundledController=this.controller.location==="bundled"}setPosition(e,t){this.topPosition=this.sanitizer.bypassSecurityTrustStyle(e+"px"),this.leftPosition=this.sanitizer.bypassSecurityTrustStyle(t+"px"),this.changeDetector.detectChanges()}openMenuForDrawing(e,t,i){this.resetCapabilities(),this.hasTextCapabilities=e.element instanceof zs,this.drawings=[e],this.setPosition(t,i),this.contextMenu.openMenu()}openMenuForNode(e,t,i){this.resetCapabilities(),this.nodes=[e],this.setPosition(t,i),this.contextMenu.openMenu()}openMenuForLabel(e,t,i,a){this.resetCapabilities(),this.labels=[e],this.nodes=[t],this.setPosition(i,a),this.contextMenu.openMenu()}openMenuForInterfaceLabel(e,t,i,a){this.resetCapabilities(),this.linkNodes=[e],this.links=[t],this.setPosition(i,a),this.contextMenu.openMenu()}openMenuForListOfElements(e,t,i,a,s,d){this.resetCapabilities(),this.drawings=e,this.nodes=t,this.labels=i,this.links=a,this.setPosition(s,d),this.contextMenu.openMenu()}isCloudLikeNode(e){return e==="cloud"||e==="ethernet_switch"||e==="ethernet_hub"||e==="nat"}resetCapabilities(){this.drawings=[],this.nodes=[],this.labels=[],this.linkNodes=[],this.links=[],this.hasTextCapabilities=!1}onOpenWebWiresharkInline(e){this.openWebWiresharkInline.emit(e)}onOpenWebConsoleInline(e){this.openWebConsoleInline.emit(e)}onOpenFileManagerInline(e){this.openFileManagerInline.emit(e)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-context-menu"]],viewQuery:function(t,i){if(t&1&&Kn(eo,5),t&2){let a;gt(a=ht())&&(i.contextMenu=a.first)}},inputs:{project:"project",controller:"controller"},outputs:{openWebWiresharkInline:"openWebWiresharkInline",openWebConsoleInline:"openWebConsoleInline",openFileManagerInline:"openFileManagerInline"},decls:44,vars:45,consts:[["contextMenu","matMenu"],[1,"context-menu"],[3,"matMenuTriggerFor"],[1,"context-menu-items"],[3,"controller","node"],[3,"controller","nodes"],[3,"controller","project","nodes"],[3,"controller","project","nodes","drawings"],[3,"controller","project","drawing"],[3,"controller","project","drawing","node","label","link","linkNode"],[3,"controller","project","node"],[3,"controller","nodes","drawings"],[3,"controller","project","link"],[3,"controller","link"],[3,"controller","nodes","drawings","links"],[3,"openFileManagerInline","controller","node"],[3,"openWebConsoleInline","controller","project","nodes"],[3,"openWebWiresharkInline","controller","project","link"]],template:function(t,i){if(t&1&&(r(0,"div",1),L(1,"span",2),r(2,"mat-menu",3,0),T(4,$Te,1,2,"app-show-node-action",4),T(5,HTe,1,2,"app-show-in-file-manager-action",4),T(6,UTe,1,2,"app-config-node-action",4),T(7,WTe,1,2,"app-fix-missing-image-action",4),T(8,GTe,1,2,"app-start-node-action",5),T(9,qTe,1,2,"app-suspend-node-action",5),T(10,QTe,1,2,"app-stop-node-action",5),T(11,KTe,1,2,"app-reload-node-action",5),T(12,XTe,1,3,"app-http-console-action",6),T(13,YTe,1,2,"app-http-console-new-tab-action",5),T(14,ZTe,1,2,"app-console-device-action-browser",4),T(15,JTe,1,2,"app-isolate-node-action",4),T(16,eEe,1,2,"app-unisolate-node-action",4),T(17,tEe,1,2,"app-change-hostname-action",4),T(18,nEe,1,2,"app-change-symbol-action",4),T(19,iEe,1,4,"app-duplicate-action",7),T(20,oEe,1,3,"app-edit-style-action",8),T(21,aEe,1,7,"app-edit-text-action",9),T(22,rEe,1,3,"app-edit-config-action",10),T(23,sEe,1,2,"app-export-config-action",4),T(24,lEe,1,2,"app-import-config-action",4),T(25,cEe,1,2,"app-idle-pc-action",4),T(26,dEe,1,2,"app-auto-idle-pc-action",4),T(27,mEe,1,3,"app-move-layer-up-action",11),T(28,pEe,1,3,"app-move-layer-down-action",11),T(29,uEe,1,3,"app-bring-to-front-action",11),T(30,gEe,1,3,"app-start-capture-action",12),T(31,hEe,1,2,"app-stop-capture-action",13),T(32,_Ee,1,3,"app-start-capture-on-started-link-action",12),T(33,fEe,2,6),T(34,vEe,1,3,"app-packet-filters-action",12),T(35,CEe,1,2,"app-toggle-show-filters-icon-action",13),T(36,bEe,1,2,"app-resume-link-action",13),T(37,xEe,1,2,"app-suspend-link-action",13),T(38,yEe,1,2,"app-reset-link-action",13),T(39,wEe,1,3,"app-edit-link-style-action",12),T(40,MEe,1,3,"app-lock-action",11),T(41,SEe,1,4,"app-delete-action",14),T(42,kEe,1,2,"app-align-horizontally-action",5),T(43,PEe,1,2,"app-align-vertically-action",5),l()()),t&2){let a=Te(3);Tt("left",i.leftPosition)("top",i.topPosition),m(),v("matMenuTriggerFor",a),m(3),E(i.nodes.length===1?4:-1),m(),E(i.nodes.length===1&&!i.isCloudLikeNode(i.nodes[0].node_type)?5:-1),m(),E(i.nodes.length===1?6:-1),m(),E(!i.projectService.isReadOnly(i.project)&&i.nodes.length===1&&i.nodes[0].missing_image?7:-1),m(),E(i.nodes.length?8:-1),m(),E(i.nodes.length?9:-1),m(),E(i.nodes.length?10:-1),m(),E(i.nodes.length?11:-1),m(),E(!i.projectService.isReadOnly(i.project)&&i.nodes.length>0&&!i.isCloudLikeNode(i.nodes[0].node_type)?12:-1),m(),E(!i.projectService.isReadOnly(i.project)&&i.nodes.length>0&&!i.isCloudLikeNode(i.nodes[0].node_type)?13:-1),m(),E(!i.projectService.isReadOnly(i.project)&&i.nodes.length===1&&!i.isCloudLikeNode(i.nodes[0].node_type)?14:-1),m(),E(i.nodes.length===1?15:-1),m(),E(i.nodes.length===1?16:-1),m(),E(!i.projectService.isReadOnly(i.project)&&i.nodes.length===1?17:-1),m(),E(!i.projectService.isReadOnly(i.project)&&i.nodes.length===1?18:-1),m(),E(i.drawings.length>0||i.nodes.length>0?19:-1),m(),E(!i.projectService.isReadOnly(i.project)&&i.drawings.length===1&&!i.hasTextCapabilities?20:-1),m(),E(!i.projectService.isReadOnly(i.project)&&(i.drawings.length===1&&i.hasTextCapabilities&&i.labels.length===0&&i.linkNodes.length===0||i.labels.length===1&&i.linkNodes.length===0&&i.drawings.length===0||i.linkNodes.length===1&&i.labels.length===0&&i.drawings.length===0)?21:-1),m(),E(i.nodes.length===1&&i.nodes[0].node_type==="vpcs"?22:-1),m(),E(i.nodes.length===1&&(i.nodes[0].node_type==="vpcs"||i.nodes[0].node_type==="iou"||i.nodes[0].node_type==="dynamips")?23:-1),m(),E(i.nodes.length===1&&(i.nodes[0].node_type==="vpcs"||i.nodes[0].node_type==="iou"||i.nodes[0].node_type==="dynamips")?24:-1),m(),E(i.nodes.length===1&&i.nodes[0].node_type==="dynamips"?25:-1),m(),E(i.nodes.length===1&&i.nodes[0].node_type==="dynamips"?26:-1),m(),E(!i.projectService.isReadOnly(i.project)&&(i.drawings.length||i.nodes.length)?27:-1),m(),E(!i.projectService.isReadOnly(i.project)&&(i.drawings.length||i.nodes.length)?28:-1),m(),E(!i.projectService.isReadOnly(i.project)&&(i.drawings.length||i.nodes.length)?29:-1),m(),E(!i.projectService.isReadOnly(i.project)&&i.drawings.length===0&&i.nodes.length===0&&i.links.length===1?30:-1),m(),E(!i.projectService.isReadOnly(i.project)&&i.drawings.length===0&&i.nodes.length===0&&i.links.length===1&&i.linkNodes.length===0?31:-1),m(),E(!i.projectService.isReadOnly(i.project)&&i.drawings.length===0&&i.nodes.length===0&&i.links.length===1&&i.linkNodes.length===0?32:-1),m(),E(!i.projectService.isReadOnly(i.project)&&i.drawings.length===0&&i.nodes.length===0&&i.links.length===1&&i.linkNodes.length===0?33:-1),m(),E(!i.projectService.isReadOnly(i.project)&&i.drawings.length===0&&i.nodes.length===0&&i.links.length===1&&i.linkNodes.length===0?34:-1),m(),E(!i.projectService.isReadOnly(i.project)&&i.drawings.length===0&&i.nodes.length===0&&i.links.length===1&&i.linkNodes.length===0?35:-1),m(),E(!i.projectService.isReadOnly(i.project)&&i.drawings.length===0&&i.nodes.length===0&&i.links.length===1&&i.linkNodes.length===0?36:-1),m(),E(!i.projectService.isReadOnly(i.project)&&i.drawings.length===0&&i.nodes.length===0&&i.links.length===1&&i.linkNodes.length===0?37:-1),m(),E(!i.projectService.isReadOnly(i.project)&&i.drawings.length===0&&i.nodes.length===0&&i.links.length===1&&i.linkNodes.length===0?38:-1),m(),E(!i.projectService.isReadOnly(i.project)&&i.drawings.length===0&&i.nodes.length===0&&i.links.length===1&&i.linkNodes.length===0?39:-1),m(),E(!i.projectService.isReadOnly(i.project)&&(i.drawings.length>0||i.nodes.length>0)?40:-1),m(),E(!i.projectService.isReadOnly(i.project)&&(i.drawings.length>0||i.nodes.length>0||i.links.length>0)&&i.linkNodes.length===0?41:-1),m(),E(!i.projectService.isReadOnly(i.project)&&i.nodes.length>1?42:-1),m(),E(!i.projectService.isReadOnly(i.project)&&i.nodes.length>1?43:-1)}},dependencies:[fe,it,Ko,eo,FM,iS,oS,aS,rS,sS,lS,cS,x_,pS,uS,hS,fS,vS,bS,yS,MS,SS,kS,TS,ES,OS,DS,IS,NS,FS,RS,fj,vj,VS,BS,jS,$S,HS,WS,GS,qS,QS,KS,Mj,Sj],styles:[".context-menu[_ngcontent-%COMP%]{position:fixed;min-height:0}"],changeDetection:0})}return n})();var XS=(()=>{class n{fontBBCalculator;mapSettingsService=f(ui);themeService=f(Ni);MARGIN_BETWEEN_NODE_AND_LABEL=8;constructor(e){this.fontBBCalculator=e}fix(e){let t=this.mapSettingsService.getDefaultLabelStyle(),i=this.mapSettingsService.hasDefaultLabelStyle(),a=i?t.color:this.themeService.getCanvasLabelColor(),s=i?"--gns3-custom-label-color: 1;":"";e.label.style=`font-family: ${t.fontFamily};font-size: ${t.fontSize};font-weight: ${t.fontWeight};fill: ${a};fill-opacity: 1.0;${s}`;let d=this.fontBBCalculator.calculate(e.label.text,e.label.style);return e.label.x=e.width/2-d.width/2,e.label.y=-d.height-this.MARGIN_BETWEEN_NODE_AND_LABEL,e}static \u0275fac=function(t){return new(t||n)(_e(ld))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var YS=(()=>{class n{mapSettingsService;constructor(e){this.mapSettingsService=e}getDrawingElement(){let e=this.mapSettingsService.getDefaultNoteStyle(),t=new zs;return t.height=100,t.width=100,t.fill=e.color,t.fill_opacity=0,t.font_family=e.fontFamily,t.font_size=e.fontSize,t.font_weight=e.fontWeight,t}static \u0275fac=function(t){return new(t||n)(_e(ui))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var ZS=(()=>{class n{getDrawingElement(){let e=new Oi;return e.fill="#ffffff",e.fill_opacity=1,e.stroke="#000000",e.stroke_width=2,e.cx=100,e.cy=100,e.rx=100,e.ry=100,e.width=200,e.height=200,e}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var JS=(()=>{class n{getDrawingElement(){let e=new za;return e.fill="#ffffff",e.fill_opacity=1,e.stroke="#000000",e.stroke_width=2,e.width=200,e.height=100,e.rx=0,e.ry=0,e}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var e2=(()=>{class n{getDrawingElement(){let e=new Ur;return e.stroke="#000000",e.stroke_width=2,e.x1=0,e.x2=200,e.y1=0,e.y2=0,e.width=100,e.height=0,e.arrow_start=!1,e.arrow_end=!1,e.drawing_type="straight",e.control_offset=[0,0],e}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var t2=(()=>{class n{getDrawingElement(){let e=new wr;return e.stroke="var(--gns3-canvas-link-color)",e.stroke_width=2,e.stroke_dasharray="none",e.points=[{x:0,y:0},{x:100,y:50},{x:200,y:0}],e.curve_type="catmullrom",e.arrow_start=!1,e.arrow_end=!0,e.width=200,e.height=50,e}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var O_=(()=>{class n{textElementFactory;ellipseElementFactory;rectangleElementFactory;lineElementFactory;curveElementFactory;factory;availableFactories;constructor(e,t,i,a,s){this.textElementFactory=e,this.ellipseElementFactory=t,this.rectangleElementFactory=i,this.lineElementFactory=a,this.curveElementFactory=s,this.availableFactories={text:this.textElementFactory,ellipse:this.ellipseElementFactory,rectangle:this.rectangleElementFactory,line:this.lineElementFactory,curve:this.curveElementFactory}}getDrawingMock(e){this.factory=this.availableFactories[e];let t=new Hr;return t.element=this.factory.getDrawingElement(),t}static \u0275fac=function(t){return new(t||n)(_e(YS),_e(ZS),_e(JS),_e(e2),_e(t2))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var kj=(()=>{class n{controller=ee(void 0);project;selectedDrawing;drawingSaved=new be;pointToAddSelected;drawingService=f(Wi);drawingsDataSource=f(Ui);drawingsEventSource=f(ia);drawingsFactory=f(O_);mapDrawingToSvgConverter=f(js);toasterService=f(re);cdr=f(oe);ngOnInit(){this.pointToAddSelected=this.drawingsEventSource.pointToAddSelected.subscribe(e=>this.onDrawingSaved(e))}ngOnChanges(e){e.selectedDrawing&&!e.selectedDrawing.isFirstChange()&&(this.selectedDrawing=e.selectedDrawing.currentValue,this.selectedDrawing!=="text"&&this.drawingsEventSource.selected.emit(this.selectedDrawing))}onDrawingSaved(e){if(this.selectedDrawing==="curve")return;let t=this.drawingsFactory.getDrawingMock(this.selectedDrawing),i=this.mapDrawingToSvgConverter.convert(t);this.drawingService.add(this.controller(),this.project.project_id,e.x,e.y,i).subscribe({next:a=>{this.drawingsDataSource.add(a),this.drawingSaved.emit(!0),this.toasterService.success("Drawing created.")},error:a=>{let s=a.error?.message||a.message||"Failed to create drawing";this.toasterService.error(s),this.cdr.markForCheck()}})}ngOnDestroy(){this.pointToAddSelected.unsubscribe()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-drawing-added"]],inputs:{controller:[1,"controller"],project:"project",selectedDrawing:"selectedDrawing"},outputs:{drawingSaved:"drawingSaved"},features:[Nn],decls:0,vars:0,template:function(t,i){},encapsulation:2,changeDetection:0})}return n})();var Tj=Jl(Pj());function AEe(n,o){n&1&&(r(0,"mat-error"),c(1,"Name for screenshot is required"),l())}var n2=(()=>{class n{dialogRef=f(We);toasterService=f(re);formBuilder=f(Ai);cd=f(oe);nameForm;isPngAvailable;filetype="svg";constructor(){this.nameForm=this.formBuilder.group({screenshotName:new Ge(`screenshot-${Date.now()}`,[Ue.required])}),this.isPngAvailable=!0}ngOnInit(){this.cd.markForCheck()}get form(){return this.nameForm.controls}onAddClick(){if(this.nameForm.invalid)return;let e={name:this.nameForm.get("screenshotName").value,filetype:this.filetype};this.dialogRef.close(e)}onNoClick(){this.dialogRef.close()}onKeyDown(e){e.key==="Enter"&&this.onAddClick()}setFiletype(e){this.isPngAvailable&&(this.filetype=e,this.cd.markForCheck())}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-screenshot-dialog"]],decls:17,vars:3,consts:[["mat-dialog-title",""],["mat-dialog-content",""],["aria-label","Select file type",1,"radio-group"],["value","1","checked","",3,"click"],["value","2",3,"click","disabled"],[1,"name-form",3,"formGroup"],["subscriptSizing","dynamic",1,"name-form"],["matInput","","type","text","formControlName","screenshotName","placeholder","Please enter name",3,"keydown"],["mat-dialog-actions",""],["mat-button","",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click"]],template:function(t,i){t&1&&(r(0,"h1",0),c(1,"Take a screenshot"),l(),r(2,"div",1)(3,"mat-radio-group",2)(4,"mat-radio-button",3),_("click",function(){return i.setFiletype("svg")}),c(5,"SVG"),l(),r(6,"mat-radio-button",4),_("click",function(){return i.setFiletype("png")}),c(7,"PNG"),l()(),r(8,"form",5)(9,"mat-form-field",6)(10,"input",7),_("keydown",function(s){return i.onKeyDown(s)}),l(),T(11,AEe,2,0,"mat-error"),l()()(),r(12,"div",8)(13,"button",9),_("click",function(){return i.onNoClick()}),c(14,"Cancel"),l(),r(15,"button",10),_("click",function(){return i.onAddClick()}),c(16,"Take a screenshot"),l()()),t&2&&(m(6),v("disabled",!i.isPngAvailable),m(2),v("formGroup",i.nameForm),m(3),E(i.form.screenshotName!=null&&i.form.screenshotName.touched&&(i.form.screenshotName!=null&&i.form.screenshotName.errors)&&(i.form.screenshotName!=null&&i.form.screenshotName.errors.required)?11:-1))},dependencies:[fe,ke,qe,Qe,bt,Y,he,ye,Ee,Pe,Wn,hn,Fo,la,Zo,It,Ct,At,Nt,vt,Ut,Yt],styles:[".name-form[_ngcontent-%COMP%]{width:100%;margin-top:var(--gns3-density-space-4)}.radio-group[_ngcontent-%COMP%]{display:flex;justify-content:center;gap:var(--gns3-density-space-5)}"],changeDetection:0})}return n})();var D_=(()=>{class n{currentProjectId$=new cn(null);currentSessionId$=new cn(null);sessions$=new cn([]);messagesMap=new Map;messages$=new cn(new Map);isStreaming$=new cn(!1);currentToolCalls$=new cn(new Map);error$=new cn(null);panelState$=new cn({isOpen:!1,width:800,height:900,isMaximized:!1,isMinimized:!1,position:{top:80,right:20}});sessionUIStateMap=new Map;sessionUIStates$=new cn(new Map);constructor(){this.loadPanelState()}setCurrentProjectId(e){this.currentProjectId$.next(e),e&&(this.messagesMap.clear(),this.messages$.next(new Map),this.sessions$.next([]))}getCurrentProjectId(){return this.currentProjectId$.asObservable()}getCurrentProjectIdValue(){return this.currentProjectId$.value}setCurrentSessionId(e){this.currentSessionId$.next(e)}getCurrentSessionId(){return this.currentSessionId$.asObservable()}getCurrentSessionIdValue(){return this.currentSessionId$.value}setSessions(e){this.sessions$.next(e)}getSessions(){return this.sessions$.asObservable()}getSessionsValue(){return this.sessions$.value}addSession(e){let t=this.sessions$.value;this.sessions$.next([e,...t])}updateSession(e){let t=this.sessions$.value,i=t.findIndex(a=>a.thread_id===e.thread_id);if(i!==-1){let a=[...t];a[i]=e,this.sessions$.next(a)}}deleteSession(e){let t=this.sessions$.value;this.sessions$.next(t.filter(i=>i.thread_id!==e)),this.messagesMap.delete(e),this.messages$.next(new Map(this.messagesMap)),this.currentSessionId$.value===e&&this.currentSessionId$.next(null)}getMessages(e){return new Sr(t=>{let i=e||this.currentSessionId$.value;if(!i){t.next([]);return}let a=this.messagesMap.get(i)||[];t.next(a)})}getMessagesValue(e){let t=e||this.currentSessionId$.value;return t?this.messagesMap.get(t)||[]:[]}setMessages(e,t){this.messagesMap.set(e,t),this.messages$.next(new Map(this.messagesMap))}addMessage(e,t){let i=this.messagesMap.get(e)||[];this.messagesMap.set(e,[...i,t]),this.messages$.next(new Map(this.messagesMap))}updateLastMessage(e,t){let i=this.messagesMap.get(e);if(i&&i.length>0){let a=i[i.length-1],s=[...i];s[s.length-1]=ze(q({},a),{content:a.content+t}),this.messagesMap.set(e,s),this.messages$.next(new Map(this.messagesMap))}}clearMessages(e){this.messagesMap.delete(e),this.messages$.next(new Map(this.messagesMap))}setStreamingState(e){this.isStreaming$.next(e)}getStreamingState(){return this.isStreaming$.asObservable()}getStreamingStateValue(){return this.isStreaming$.value}setCurrentToolCalls(e){this.currentToolCalls$.next(new Map(e))}addOrUpdateToolCall(e){let t=new Map(this.currentToolCalls$.value);t.set(e.id,e),this.currentToolCalls$.next(t)}removeToolCall(e){let t=new Map(this.currentToolCalls$.value);t.delete(e),this.currentToolCalls$.next(t)}clearToolCalls(){this.currentToolCalls$.next(new Map)}getCurrentToolCalls(){return this.currentToolCalls$.asObservable()}getCurrentToolCallsValue(){return this.currentToolCalls$.value}setError(e){this.error$.next(e)}getError(){return this.error$.asObservable()}clearError(){this.error$.next(null)}setPanelState(e){let t=this.panelState$.value,i=q(q({},t),e);this.panelState$.next(i),this.savePanelState(i)}getPanelState(){return this.panelState$.asObservable()}getPanelStateValue(){return this.panelState$.value}openPanel(){let e=this.panelState$.value;this.panelState$.next(ze(q({},e),{isOpen:!0})),this.savePanelState(this.panelState$.value)}closePanel(){let e=this.panelState$.value;this.panelState$.next(ze(q({},e),{isOpen:!1})),this.savePanelState(this.panelState$.value)}maximizePanel(){let e=this.panelState$.value;this.panelState$.next(ze(q({},e),{isMaximized:!0,isMinimized:!1})),this.savePanelState(this.panelState$.value)}minimizePanel(){let e=this.panelState$.value;this.panelState$.next(ze(q({},e),{isMaximized:!1,isMinimized:!0})),this.savePanelState(this.panelState$.value)}restorePanel(){let e=this.panelState$.value;this.panelState$.next(ze(q({},e),{isMaximized:!1,isMinimized:!1})),this.savePanelState(this.panelState$.value)}updatePanelPosition(e){let t=this.panelState$.value,i=q(q({},t.position),e);this.panelState$.next(ze(q({},t),{position:i})),this.savePanelState(this.panelState$.value)}updatePanelSize(e,t){let i=this.panelState$.value;this.panelState$.next(ze(q({},i),{width:e,height:t})),this.savePanelState(this.panelState$.value)}savePanelState(e){try{localStorage.setItem("ai-chat-panel-state",JSON.stringify(e))}catch(t){console.error("Failed to save panel state:",t)}}loadPanelState(){try{let e=localStorage.getItem("ai-chat-panel-state");if(e){let t=JSON.parse(e);t.isOpen=!1,t.isMaximized=!1,t.isMinimized=!1,this.panelState$.next(t)}}catch(e){console.error("Failed to load panel state:",e)}}setSessionUIState(e,t){let i=new Map(this.sessionUIStateMap),a=i.get(e)||{isEditing:!1,isExpanded:!0},s=q(q({},a),t);i.set(e,s),this.sessionUIStateMap=i,this.sessionUIStates$.next(new Map(i))}getSessionUIState(e){return new Sr(t=>{t.next(this.sessionUIStateMap.get(e))})}getSessionUIStateValue(e){return this.sessionUIStateMap.get(e)}resetAll(){this.currentProjectId$.next(null),this.currentSessionId$.next(null),this.sessions$.next([]),this.messagesMap.clear(),this.messages$.next(new Map),this.isStreaming$.next(!1),this.currentToolCalls$.next(new Map),this.error$.next(null),this.sessionUIStateMap.clear(),this.sessionUIStates$.next(new Map)}resetSessionState(){this.currentSessionId$.next(null),this.messagesMap.clear(),this.messages$.next(new Map),this.isStreaming$.next(!1),this.currentToolCalls$.next(new Map),this.error$.next(null)}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var k4=n=>({selected:n}),NEe=(n,o)=>({unmarkedLight:n,marked:o}),FEe=n=>({unmarkedLight:n});function REe(n,o){if(n&1){let e=R();r(0,"button",19),_("click",function(){y(e);let i=h();return w(i.addDrawing("line"))}),Mi(),r(1,"svg",20),L(2,"line",21),l()()}if(n&2){let e=h();m(2),v("ngClass",tn(1,k4,e.drawTools.isLineChosen))}}function zEe(n,o){if(n&1){let e=R();r(0,"button",19),_("click",function(){y(e);let i=h();return w(i.addDrawing("line"))}),Mi(),r(1,"svg",20),L(2,"line",21),l()()}if(n&2){let e=h();m(2),v("ngClass",tn(1,k4,e.drawTools.isLineChosen))}}var I_=(()=>{class n{toolsService=f(Ll);mapSettingsService=f(ui);drawingService=f(Wi);symbolService=f(Lr);dialog=f(Xe);themeService=f(Ni);projectServices=f(Ti);nodeService=f(ft);nodesDataSource=f(Xn);drawingsDataSource=f(Ui);drawingsEventSource=f(ia);aiChatStore=f(D_);cdr=f(oe);toaster=f(re);project=ee(void 0);controller=ee(void 0);aiChatOpened=new be;nodes=[];drawing=[];selectedDrawing;lock="lock_open";drawTools={isRectangleChosen:!1,isEllipseChosen:!1,isLineChosen:!1,isCurveChosen:!1,isTextChosen:!1};isLocked=!1;isLightThemeEnabled=!1;isAIChatOpen=!1;isAIMinimized=!1;projectSubscriptions=[];aiChatStateSubscription;ngOnInit(){this.themeService.getActualTheme()==="light"?this.isLightThemeEnabled=!0:this.isLightThemeEnabled=!1,this.projectSubscriptions.push(this.projectServices.projectLockIconSubject.subscribe(e=>{e&&this.getAllNodesAndDrawingStatus()})),this.getAllNodesAndDrawingStatus(),this.projectSubscriptions.push(this.drawingsEventSource.drawingCompleted.subscribe(e=>{e==="curve"&&this.resetDrawToolChoice()})),this.aiChatStateSubscription=this.aiChatStore.getPanelState().subscribe(e=>{this.isAIChatOpen=e.isOpen,this.isAIMinimized=e.isMinimized,this.cdr.markForCheck()})}getCssClassForIcon(e){return e==="text"?{unmarkedLight:!this.drawTools.isTextChosen&&this.isLightThemeEnabled,marked:this.drawTools.isTextChosen}:e==="rectangle"?{unmarkedLight:!this.drawTools.isRectangleChosen&&this.isLightThemeEnabled,marked:this.drawTools.isRectangleChosen}:{unmarkedLight:!this.drawTools.isEllipseChosen&&this.isLightThemeEnabled,marked:this.drawTools.isEllipseChosen}}takeScreenshot(){this.dialog.open(n2,{panelClass:["base-dialog-panel","simple-dialog-panel","dialog-medium-panel"],autoFocus:!1,disableClose:!0}).afterClosed().subscribe(t=>{t&&this.saveImage(t)})}async saveImage(e){let i=document.getElementById("map").cloneNode(!0),a=document.querySelector(".project-map");if(a){let s=this.resolveBackground(a);s&&(i.style.background=s);let d=this.getCanvasColors(a);this.applyCanvasColors(i,d.label,d.link)}if(await this.processEmbeddedImages(i),e.filetype==="svg"&&this.resolveAllCssVariables(i,a),e.filetype==="png")try{Tj.saveSvgAsPng(i,`${e.name}.png`)}catch(s){throw console.error("Failed to save PNG:",s),this.toaster.error("Failed to save screenshot as PNG"),s}else{let d=new XMLSerializer().serializeToString(i),p=new Blob([d],{type:"image/svg+xml"}),u=URL.createObjectURL(p),g=document.createElement("a"),C=!1;try{g.href=u,g.download=`${e.name}.svg`,document.body.appendChild(g),C=!0,g.click()}catch(M){throw console.error("Failed to save SVG:",M),this.toaster.error("Failed to save screenshot as SVG"),M}finally{C&&document.body.removeChild(g),URL.revokeObjectURL(u)}}}resolveBackground(e){let t=window.getComputedStyle(e),i=t.background;if(i&&i!=="none")return i;let a=e.style.getPropertyValue("--gns3-map-bg");if(a&&a.startsWith("var(--")){let s=a.slice(4,-1),d=t.getPropertyValue(s).trim();if(d)return d}return null}getCanvasColors(e){let t=window.getComputedStyle(e),i=t.getPropertyValue("--gns3-canvas-label-color").trim(),a=t.getPropertyValue("--gns3-canvas-link-color").trim();return{label:i,link:a}}applyCanvasColors(e,t,i){e.querySelectorAll("text.label").forEach(d=>{d.style.setProperty("fill",t)}),e.querySelectorAll("path.ethernet_link").forEach(d=>{let p=d,u=p.getAttribute("stroke");(!u||u.startsWith("var(--"))&&p.style.setProperty("stroke",i)})}resolveAllCssVariables(e,t){if(!t)return;let i=window.getComputedStyle(t);e.querySelectorAll("*[style]").forEach(d=>{let p=d,u=p.getAttribute("style");if(!u)return;let g=u.replace(/var\(([^)]+)\)/g,(C,M)=>i.getPropertyValue(M).trim()||C);g!==u&&p.setAttribute("style",g)}),e.querySelectorAll("*").forEach(d=>{let p=d;["stroke","fill","color","background","background-color"].forEach(u=>{let g=p.getAttribute(u);if(g&&g.startsWith("var(")){let C=g.match(/var\(([^)]+)\)/)?.[1];if(C){let M=i.getPropertyValue(C).trim();M&&p.setAttribute(u,M)}}})})}async processEmbeddedImages(e){let t=Array.from(e.getElementsByTagName("image"));for(let i=0;i<t.length;i++){let a=t[i],s=a.getAttribute("href")||a.getAttribute("xlink:href");if(s)try{let d;if(s.startsWith("blob:"))d=await(await(await fetch(s)).blob()).text();else{let p=s.split("/symbols/");if(p.length>1){let u=p[p.length-1].replace("/raw",""),g=await this.symbolService.raw(this.controller(),u).toPromise();g&&(d=g.includes("-->")?g.split("-->")[1].trim():g.trim())}}if(d){let g=new DOMParser().parseFromString(d,"image/svg+xml").documentElement,C=e.ownerDocument.importNode(g,!0);if(C.nodeName!=="svg"){let b=e.ownerDocument.createElementNS("http://www.w3.org/2000/svg","svg");for(b.setAttribute("xmlns","http://www.w3.org/2000/svg");C.firstChild;)b.appendChild(C.firstChild);C=b}let M=a.getAttribute("width"),x=a.getAttribute("height");C.setAttribute("width",M||"60"),C.setAttribute("height",x||"60"),C.setAttribute("x",a.getAttribute("x")||"0"),C.setAttribute("y",a.getAttribute("y")||"0"),a.parentNode.replaceChild(C,a)}}catch(d){console.warn(`Failed to process embedded image: ${s}`,d)}}}addDrawing(e){let t=document.getElementById("map");switch(e==="rectangle"&&this.drawTools.isRectangleChosen||e==="ellipse"&&this.drawTools.isEllipseChosen||e==="line"&&this.drawTools.isLineChosen||e==="curve"&&this.drawTools.isCurveChosen||e==="text"&&this.drawTools.isTextChosen?(document.documentElement.style.cursor="default",t&&(t.style.cursor="default")):(document.documentElement.style.cursor="crosshair",t&&(t.style.cursor="crosshair")),e){case"rectangle":this.drawTools.isTextChosen=!1,this.drawTools.isEllipseChosen=!1,this.drawTools.isRectangleChosen=!this.drawTools.isRectangleChosen,this.drawTools.isLineChosen=!1;break;case"ellipse":this.drawTools.isTextChosen=!1,this.drawTools.isEllipseChosen=!this.drawTools.isEllipseChosen,this.drawTools.isRectangleChosen=!1,this.drawTools.isLineChosen=!1;break;case"line":this.drawTools.isTextChosen=!1,this.drawTools.isEllipseChosen=!1,this.drawTools.isRectangleChosen=!1,this.drawTools.isLineChosen=!this.drawTools.isLineChosen;break;case"curve":this.drawTools.isTextChosen=!1,this.drawTools.isEllipseChosen=!1,this.drawTools.isRectangleChosen=!1,this.drawTools.isLineChosen=!1,this.drawTools.isCurveChosen=!this.drawTools.isCurveChosen;break;case"text":this.drawTools.isTextChosen=!this.drawTools.isTextChosen,this.drawTools.isEllipseChosen=!1,this.drawTools.isRectangleChosen=!1,this.drawTools.isLineChosen=!1,this.toolsService.textAddingToolActivation(this.drawTools.isTextChosen);break}this.selectedDrawing=this.selectedDrawing===e?"":e}onDrawingSaved(){this.resetDrawToolChoice()}resetDrawToolChoice(){let e=document.getElementById("map");document.documentElement.style.cursor="default",e&&(e.style.cursor="default"),this.drawTools.isRectangleChosen=!1,this.drawTools.isEllipseChosen=!1,this.drawTools.isLineChosen=!1,this.drawTools.isCurveChosen=!1,this.drawTools.isTextChosen=!1,this.selectedDrawing="",this.toolsService.textAddingToolActivation(this.drawTools.isTextChosen)}getAllNodesAndDrawingStatus(){let e=this.controller(),t=this.project();!e||!t||!t.project_id||(this.projectServices.getProjectStatus(e,t.project_id).subscribe({next:i=>{i?(this.isLocked=!0,this.lock="lock"):(this.isLocked=!1,this.lock="lock_open"),this.cdr.markForCheck()},error:i=>{let a=i.error?.message||i.message||"Failed to get project status";this.toaster.error(a),this.cdr.markForCheck()}}),this.projectServices.nodes(e,t.project_id).subscribe({next:i=>{this.nodes=i,this.nodes.forEach(a=>{this.nodeService.updateNode(e,a).subscribe({next:s=>{this.nodesDataSource.update(s)},error:s=>{let d=s.error?.message||s.message||"Failed to update node";this.toaster.error(d),this.cdr.markForCheck()}})})},error:i=>{let a=i.error?.message||i.message||"Failed to load nodes";this.toaster.error(a),this.cdr.markForCheck()}}),this.projectServices.drawings(this.controller(),this.project().project_id).subscribe({next:i=>{this.drawing=i,this.drawing.forEach(a=>{this.drawingService.update(this.controller(),a).subscribe({next:s=>{this.drawingsDataSource.update(s)},error:s=>{let d=s.error?.message||s.message||"Failed to update drawing";this.toaster.error(d),this.cdr.markForCheck()}})})},error:i=>{let a=i.error?.message||i.message||"Failed to load drawings";this.toaster.error(a),this.cdr.markForCheck()}}))}changeLockValue(){let e=!this.isLocked,t=e?"Lock":"Unlock";this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-warning-panel","dialog-small-panel"],autoFocus:".cancel-button",disableClose:!0,data:{title:`${t} all objects?`,message:`${t} every node and drawing in the current project?`,confirmButtonText:`${t} all`,tone:"warning",icon:e?"lock":"lock_open"}}).afterClosed().subscribe(a=>{a&&(this.isLocked=e,this.mapSettingsService.changeMapLockValue(this.isLocked),this.cdr.markForCheck(),e?this.lockAllNode():this.unlockAllNode())})}lockAllNode(){this.lock="lock",this.isLocked=!0,this.cdr.markForCheck(),this.drawingService.lockAllNodes(this.controller(),this.project()).subscribe({next:e=>{this.toaster.success("All topology objects locked."),setTimeout(()=>{this.lock="lock",this.isLocked=!0,this.cdr.markForCheck()})},error:e=>{let t=e.error?.message||e.message||"Failed to lock nodes";this.toaster.error(t),this.cdr.markForCheck()}})}unlockAllNode(){this.lock="lock_open",this.isLocked=!1,this.cdr.markForCheck(),this.drawingService.unLockAllNodes(this.controller(),this.project()).subscribe({next:e=>{this.toaster.success("All topology objects unlocked."),setTimeout(()=>{this.lock="lock_open",this.isLocked=!1,this.cdr.markForCheck()})},error:e=>{let t=e.error?.message||e.message||"Failed to unlock nodes";this.toaster.error(t),this.cdr.markForCheck()}})}uploadImageFile(e){this.readImageFile(e.target)}readImageFile(e){let t=e.files[0];if(!t)return;if(t.name.split(".").pop()?.toLowerCase()==="svg"){this.toaster.error("SVG images are not supported. Please use PNG, JPG, GIF or BMP format."),this.cdr.markForCheck();return}let a=new FileReader,s=new Image;a.onloadend=()=>{let d=a.result,p=this.createSvgFileForImage(d,s);this.drawingService.add(this.controller(),this.project().project_id,-(s.width/2),-(s.height/2),p).subscribe({next:()=>this.toaster.success("Image added to the topology."),error:u=>{let g=u.error?.message||u.message||"Failed to add image";this.toaster.error(g),this.cdr.markForCheck()}})},s.onload=()=>{a.readAsDataURL(t)},s.src=window.URL.createObjectURL(t)}createSvgFileForImage(e,t){return`<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="${t.height}"
|
||
width="${t.width}">
|
||
<image height="${t.height}" width="${t.width}" xlink:href="${e}"/>
|
||
</svg>`}ngOnDestroy(){this.projectSubscriptions.forEach(e=>e.unsubscribe()),this.aiChatStateSubscription&&this.aiChatStateSubscription.unsubscribe()}openAIChat(){!this.project()||!this.controller()||(this.isAIChatOpen?this.isAIMinimized?this.aiChatStore.restorePanel():this.aiChatStore.minimizePanel():this.aiChatOpened.emit())}openFaultInjection(){!this.project()||!this.controller()||import("./chunk-2WSNHQFF.js").then(({FaultInjectionDialogComponent:e})=>{this.dialog.open(e,{panelClass:["base-dialog-panel","fault-injection-dialog-panel","dialog-medium-panel"],backdropClass:"fault-injection-backdrop",autoFocus:!1,disableClose:!0,data:{controller:this.controller(),project:this.project()}}).afterClosed().subscribe(i=>{i&&(console.log("Fault injection completed:",i),i.openAIChat&&this.openAIChat())})})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-project-map-menu"]],inputs:{project:[1,"project"],controller:[1,"controller"]},outputs:{aiChatOpened:"aiChatOpened"},decls:34,vars:23,consts:[["file",""],["matTooltip","Add a note","matTooltipClass","custom-tooltip","matTooltipPosition","left","mat-icon-button","",1,"menu-button",3,"click"],[3,"ngClass"],["type","file","accept",".bmp, .jpeg, .jpg, .gif, .png",1,"non-visible",3,"change"],["matTooltip","Insert a picture","matTooltipClass","custom-tooltip","matTooltipPosition","left","mat-icon-button","",1,"menu-button",3,"click"],["matTooltip","Draw a rectangle","matTooltipClass","custom-tooltip","matTooltipPosition","left","mat-icon-button","",1,"menu-button",3,"click"],["matTooltip","Draw an ellipse","matTooltipClass","custom-tooltip","matTooltipPosition","left","mat-icon-button","",1,"menu-button",3,"click"],["matTooltip","Draw a line","matTooltipClass","custom-tooltip","matTooltipPosition","left","mat-icon-button","",1,"menu-button"],["matTooltip","Draw a curve","matTooltipClass","custom-tooltip","matTooltipPosition","left","mat-icon-button","",1,"menu-button",3,"click"],["height","20","width","20","viewBox","0 0 20 20"],["transform","rotate(20, 10, 10)"],["d","M 6 3 C 12 3, 12 6, 10 6 C 8 6, 6 8, 6 10 C 6 12, 8 14, 10 14 C 12 14, 14 17, 14 17","fill","none","stroke-width","2","stroke","currentColor",1,"draw-line-icon",3,"ngClass"],["matTooltip","Lock or unlock all items","matTooltipClass","custom-tooltip","matTooltipPosition","left","mat-icon-button","",1,"menu-button",3,"click"],["matTooltip","Take a screenshot","matTooltipClass","custom-tooltip","matTooltipPosition","left","mat-icon-button","",1,"menu-button",3,"click"],["matTooltip","AI Assistant","matTooltipClass","custom-tooltip","matTooltipPosition","left","mat-icon-button","",1,"menu-button","ai-chat-button",3,"click"],[1,"ai-icon"],["matTooltip","Inject Fault","matTooltipClass","custom-tooltip","matTooltipPosition","left","mat-icon-button","",1,"menu-button","fault-inject-button",3,"click"],[3,"drawingSaved","controller","project","selectedDrawing"],["id","crowbar-workspace"],["matTooltip","Draw a line","matTooltipClass","custom-tooltip","matTooltipPosition","left","mat-icon-button","",1,"menu-button",3,"click"],["height","20","width","20"],["x1","15","y1","5","x2","5","y2","15",1,"draw-line-icon",2,"stroke-width","2",3,"ngClass"]],template:function(t,i){if(t&1){let a=R();r(0,"button",1),_("click",function(){return i.addDrawing("text")}),r(1,"mat-icon",2),c(2,"create"),l()(),r(3,"input",3,0),_("change",function(d){return i.uploadImageFile(d)}),l(),r(5,"button",4),_("click",function(){y(a);let d=Te(4);return w(d.click())}),r(6,"mat-icon"),c(7,"image"),l()(),r(8,"button",5),_("click",function(){return i.addDrawing("rectangle")}),r(9,"mat-icon",2),c(10,"crop_3_2"),l()(),r(11,"button",6),_("click",function(){return i.addDrawing("ellipse")}),r(12,"mat-icon",2),c(13,"panorama_fish_eye"),l()(),T(14,REe,3,3,"button",7),T(15,zEe,3,3,"button",7),r(16,"button",8),_("click",function(){return i.addDrawing("curve")}),Mi(),r(17,"svg",9)(18,"g",10),L(19,"path",11),l()()(),Xa(),r(20,"button",12),_("click",function(){return i.changeLockValue()}),r(21,"mat-icon",2),c(22),l()(),r(23,"button",13),_("click",function(){return i.takeScreenshot()}),r(24,"mat-icon",2),c(25,"photo_camera"),l()(),r(26,"button",14),_("click",function(){return i.openAIChat()}),r(27,"span",15),c(28,"AI"),l()(),r(29,"button",16),_("click",function(){return i.openFaultInjection()}),r(30,"mat-icon"),c(31,"bug_report"),l()(),r(32,"app-drawing-added",17),_("drawingSaved",function(){return i.onDrawingSaved()}),l(),L(33,"div",18)}t&2&&(m(),v("ngClass",i.getCssClassForIcon("text")),m(8),v("ngClass",i.getCssClassForIcon("rectangle")),m(3),v("ngClass",i.getCssClassForIcon("ellipse")),m(2),E(i.isLightThemeEnabled?-1:14),m(),E(i.isLightThemeEnabled?15:-1),m(4),v("ngClass",tn(16,k4,i.drawTools.isCurveChosen)),m(2),v("ngClass",Go(18,NEe,!i.isLocked&&i.isLightThemeEnabled,i.isLocked)),m(),N(i.lock),m(2),v("ngClass",tn(21,FEe,!i.isLocked&&i.isLightThemeEnabled)),m(2),ne("ai-active",i.isAIChatOpen&&!i.isAIMinimized)("ai-minimized",i.isAIChatOpen&&i.isAIMinimized),m(6),v("controller",i.controller())("project",i.project())("selectedDrawing",i.selectedDrawing))},dependencies:[fe,Ao,ke,Y,Be,ie,ce,st,pt,Ja,it,kj],styles:['[_nghost-%COMP%]{display:flex;flex-direction:column;align-items:center}button.mat-mdc-icon-button[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;--mdc-icon-button-icon-size: 20px;--mat-icon-button-icon-size: 20px;--mat-icon-button-state-layer-size: 40px;--mdc-icon-button-state-layer-size: 40px}button.mat-mdc-icon-button[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;font-size:20px;margin:0}button.mat-mdc-icon-button[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%] svg[_ngcontent-%COMP%]{width:20px;height:20px}.unmarked[_ngcontent-%COMP%], .unmarkedLight[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface)}.marked[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.draw-line-icon.selected[_ngcontent-%COMP%]{stroke:var(--mat-sys-primary)}.non-visible[_ngcontent-%COMP%]{display:none}.draw-line-icon[_ngcontent-%COMP%]{stroke:var(--mat-sys-on-surface)}.ai-chat-button[_ngcontent-%COMP%] .ai-icon[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;font-family:Roboto,sans-serif;letter-spacing:-.5px}.ai-chat-button.ai-active[_ngcontent-%COMP%]{position:relative}.ai-chat-button.ai-active[_ngcontent-%COMP%]:after{content:"";position:absolute;top:4px;right:4px;width:4px;height:4px;background-color:var(--mat-sys-primary-container);border-radius:50%;box-shadow:0 0 8px var(--mat-sys-primary-container)}.ai-chat-button.ai-minimized[_ngcontent-%COMP%]{position:relative;background-color:var(--mat-sys-primary-container)}.ai-chat-button.ai-minimized[_ngcontent-%COMP%] .ai-icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);font-weight:900}.fault-inject-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--mat-sys-error)}.fault-inject-button[_ngcontent-%COMP%]:hover mat-icon[_ngcontent-%COMP%]{color:var(--mat-sys-error);filter:drop-shadow(0 0 8px var(--mat-sys-error))}.menu-button[_ngcontent-%COMP%]{transition:transform var(--gns3-motion-duration-standard) ease}.menu-button[_ngcontent-%COMP%]:hover{transform:scale(1.3)}'],changeDetection:0})}return n})();var i2=(()=>{class n{dialogRef=f(We);projectService=f(Ti);controller;project;readme=z("");ngAfterViewInit(){this.projectService.getReadmeFile(this.controller,this.project.project_id).subscribe({next:e=>{this.readme.set(e??"")},error:e=>{console.error("Failed to load project readme:",e)}})}onNoClick(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-project-readme"]],decls:7,vars:1,consts:[["mat-dialog-title",""],[1,"project-readme__content",3,"data"],["align","end"],["mat-button","","color","accent",3,"click"]],template:function(t,i){t&1&&(r(0,"h1",0),c(1,"Project README"),l(),r(2,"mat-dialog-content"),L(3,"app-markdown-viewer",1),l(),r(4,"mat-dialog-actions",2)(5,"button",3),_("click",function(){return i.onNoClick()}),c(6,"Close"),l()()),t&2&&(m(3),v("data",i.readme()))},dependencies:[qe,bt,Qe,Y,he,Fl],styles:[".project-readme__content[_ngcontent-%COMP%]{--markdown-viewer-heading-scale: .85;--markdown-viewer-line-height: 1.65}"],changeDetection:0})}return n})();var A_=(()=>{class n{httpController;constructor(e){this.httpController=e}getConfigs(e,t){return this.httpController.get(e,`/access/users/${t}/llm-model-configs`).pipe(ei(i=>(console.error("Failed to get user configs:",i),jo(()=>i))))}getOwnConfigs(e,t){return this.httpController.get(e,`/access/users/${t}/llm-model-configs/own`).pipe(ei(i=>(console.error("Failed to get user own configs:",i),jo(()=>i))))}getDefaultConfig(e,t){return this.httpController.get(e,`/access/users/${t}/llm-model-configs/default`).pipe(ei(i=>(console.error("Failed to get default config:",i),jo(()=>i))))}createConfig(e,t,i){return this.httpController.post(e,`/access/users/${t}/llm-model-configs`,i).pipe(ei(a=>(console.error("Failed to create config:",a),jo(()=>a))))}updateConfig(e,t,i,a){return this.httpController.put(e,`/access/users/${t}/llm-model-configs/${i}`,a).pipe(ei(s=>(console.error("Failed to update config:",s),jo(()=>s))))}deleteConfig(e,t,i){return this.httpController.delete(e,`/access/users/${t}/llm-model-configs/${i}`).pipe(ei(a=>(console.error("Failed to delete config:",a),jo(()=>a))))}setDefaultConfig(e,t,i){return this.httpController.put(e,`/access/users/${t}/llm-model-configs/default/${i}`,{}).pipe(ei(a=>(console.error("Failed to set default config:",a),jo(()=>a))))}unsetDefaultConfig(e,t,i){return this.httpController.put(e,`/access/users/${t}/llm-model-configs/${i}`,{is_default:!1}).pipe(ei(a=>(console.error("Failed to unset default config:",a),jo(()=>a))))}getGroupConfigs(e,t){return this.httpController.get(e,`/access/groups/${t}/llm-model-configs`).pipe(ei(i=>(console.error("Failed to get group configs:",i),jo(()=>i))))}getDefaultGroupConfig(e,t){return this.httpController.get(e,`/access/groups/${t}/llm-model-configs/default`).pipe(ei(i=>(console.error("Failed to get default group config:",i),jo(()=>i))))}createGroupConfig(e,t,i){return this.httpController.post(e,`/access/groups/${t}/llm-model-configs`,i).pipe(ei(a=>(console.error("Failed to create group config:",a),jo(()=>a))))}updateGroupConfig(e,t,i,a){return this.httpController.put(e,`/access/groups/${t}/llm-model-configs/${i}`,a).pipe(ei(s=>(console.error("Failed to update group config:",s),jo(()=>s))))}deleteGroupConfig(e,t,i){return this.httpController.delete(e,`/access/groups/${t}/llm-model-configs/${i}`).pipe(ei(a=>(console.error("Failed to delete group config:",a),jo(()=>a))))}setDefaultGroupConfig(e,t,i){return this.httpController.put(e,`/access/groups/${t}/llm-model-configs/default/${i}`,{}).pipe(ei(a=>(console.error("Failed to set default group config:",a),jo(()=>a))))}unsetDefaultGroupConfig(e,t,i){return this.httpController.put(e,`/access/groups/${t}/llm-model-configs/${i}`,{is_default:!1}).pipe(ei(a=>(console.error("Failed to unset default group config:",a),jo(()=>a))))}static \u0275fac=function(t){return new(t||n)(_e(sn))};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var Ql=(()=>{class n{defaultConfig={minVisibleSize:100,minWidth:500,minHeight:400};config$=new cn(this.defaultConfig);constructor(){}getConfig(){return this.config$.asObservable()}getConfigValue(){return this.config$.value}setConfig(e){let t=this.config$.value;this.config$.next(q(q({},t),e))}resetConfig(){this.config$.next(this.defaultConfig)}constrainDragPosition(e,t,i){let a=this.config$.value,s=this.parsePx(e.width),d=this.parsePx(e.height),p={position:"fixed"};if(e.right!==void 0){let u=this.parsePx(e.right)-t,g=0,C=window.innerWidth-s;u=Math.max(g,Math.min(C,u)),p.right=`${u}px`}else if(e.left!==void 0){let u=this.parsePx(e.left)+t,g=window.innerWidth-s;u=Math.max(0,Math.min(g,u)),p.left=`${u}px`}if(e.top!==void 0){let u=this.parsePx(e.top)+i,g=a.topOffset||0,C=window.innerHeight-d;u=Math.max(g,Math.min(C,u)),p.top=`${u}px`}else if(e.bottom!==void 0){let u=this.parsePx(e.bottom)-i,g=0,C=window.innerHeight-d-(a.topOffset||0);u=Math.max(g,Math.min(C,u)),p.bottom=`${u}px`}return p.width=e.width,p.height=e.height,p}parsePx(e){if(!e)return 0;let t=this.parsePxCache.get(e);if(t!==void 0)return t;let i=Number(e.split("px")[0])||0;return this.parsePxCache.set(e,i),i}parsePxCache=new Map;constrainResizeSize(e,t,i,a){let s=this.config$.value,d=Math.max(s.minWidth,e),p=Math.max(s.minHeight,t);s.maxWidth&&(d=Math.min(s.maxWidth,d)),s.maxHeight&&(p=Math.min(s.maxHeight,p));let u=window.innerWidth-(i||0),g=window.innerHeight-(a||0);return d=Math.min(d,u),p=Math.min(p,g),{width:d,height:p,left:i,top:a}}constrainWindowPosition(e){let t=this.config$.value,i=Number(e.width?.split("px")[0])||0,a=Number(e.height?.split("px")[0])||0,s=q({},e);if(e.right!==void 0){let d=Number(e.right.split("px")[0]),p=0,u=window.innerWidth-i;s.right=`${Math.max(p,Math.min(u,d))}px`,delete s.left}else if(e.left!==void 0){let d=Number(e.left.split("px")[0]),p=window.innerWidth-i,u=0;s.left=`${Math.max(u,Math.min(p,d))}px`,delete s.right}if(e.top!==void 0){let d=Number(e.top.split("px")[0]),p=t.topOffset||0,u=window.innerHeight-a;s.top=`${Math.max(p,Math.min(u,d))}px`,delete s.bottom}else if(e.bottom!==void 0){let d=Number(e.bottom.split("px")[0]),p=0,u=window.innerHeight-a-(t.topOffset||0);s.bottom=`${Math.max(p,Math.min(u,d))}px`,delete s.top}return s}isValidSize(e,t){let i=typeof e=="number"?e:typeof e=="string"?parseFloat(e):0,a=typeof t=="number"?t:typeof t=="string"?parseFloat(t):0,s=this.config$.value,d=i>=s.minWidth,p=a>=s.minHeight;return s.maxWidth&&i>s.maxWidth||s.maxHeight&&a>s.maxHeight?!1:d&&p}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();function o2(n){let o=n.config.model,e=n.config.base_url,t=n.config.provider,i=t;if(e)try{i=new URL(e).hostname.replace(/^www\./,""),i=i.replace(/:\d+$/,"")}catch{i=t}return`${o} (${i})`}function vC(n){let o=n.split("/");return o[o.length-1].replace(/[-_]/g," ").replace(/\b\w/g,t=>t.toUpperCase())}var LEe=(n,o)=>o.thread_id;function VEe(n,o){n&1&&(r(0,"mat-icon",12),c(1,"bug_report"),l())}function BEe(n,o){n&1&&(Mi(),r(0,"svg",13),L(1,"path",27),l())}function jEe(n,o){if(n&1&&(r(0,"span",15),c(1),l()),n&2){let e=h().$implicit;m(),N(e.title||"New chat")}}function $Ee(n,o){if(n&1){let e=R();r(0,"mat-form-field",31),_("click",function(i){return i.stopPropagation()}),r(1,"input",32,1),_("keydown.enter",function(){y(e);let i=Te(2),a=h().$implicit,s=h(2);return w(s.finishRename(a,i.value))})("keydown.escape",function(){y(e);let i=h().$implicit,a=h(2);return w(a.cancelRename(i))})("blur",function(){y(e);let i=Te(2),a=h().$implicit,s=h(2);return w(s.finishRename(a,i.value))}),l()()}if(n&2){let e=h().$implicit;m(),v("value",e.title)}}function HEe(n,o){if(n&1){let e=R();r(0,"div",10),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.selectSession(i.thread_id))}),r(1,"div",11),T(2,VEe,2,0,"mat-icon",12),T(3,BEe,2,0,":svg:svg",13),l(),r(4,"div",14),T(5,jEe,2,1,"span",15),T(6,$Ee,3,1,"mat-form-field",16),r(7,"span",17)(8,"span",18),c(9),l(),r(10,"span",19),c(11),l()()(),r(12,"button",20),_("click",function(i){return i.stopPropagation()}),Mi(),r(13,"svg",21),L(14,"path",22),l()(),Xa(),r(15,"mat-menu",23,0),_("opened",function(){y(e);let i=h(2);return w(i.onMenuOpened())})("closed",function(){y(e);let i=h(2);return w(i.onMenuClosed())}),r(17,"button",24),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.renameSession(i))}),Mi(),r(18,"svg",25),L(19,"path",26),l(),Xa(),r(20,"span"),c(21,"Rename"),l()(),r(22,"button",24),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.togglePinSession(i))}),Mi(),r(23,"svg",25),L(24,"path",27),l(),Xa(),r(25,"span"),c(26),l()(),L(27,"mat-divider"),r(28,"button",28),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.deleteSession(i))}),Mi(),r(29,"svg",29),L(30,"path",30),l(),Xa(),r(31,"span"),c(32,"Delete"),l()()()()}if(n&2){let e=o.$implicit,t=Te(16),i=h(2);ne("gns3-chat-session-list__session--active",e.thread_id===i.currentSessionId()),m(2),E(i.isFaultInjectionSession(e)?2:-1),m(),E(e.pinned?3:-1),m(2),E(e.editing?-1:5),m(),E(e.editing?6:-1),m(3),X("",e.message_count," messages"),m(2),N(i.formatTime(e.updated_at)),m(),v("matMenuTriggerFor",t),m(14),N(e.pinned?"Unpin":"Pin")}}function UEe(n,o){if(n&1&&Q(0,HEe,33,10,"div",9,LEe),n&2){let e=h();K(e.sortedSessions)}}function WEe(n,o){n&1&&(r(0,"div",8),Mi(),r(1,"svg",33),L(2,"path",34),l(),Xa(),r(3,"p",35),c(4,"No sessions"),l(),r(5,"p",36),c(6,"Click button above to create new session"),l()())}var a2=(()=>{class n{dialog=f(Xe);aiChatService=f(hg);toasterService=f(re);sessions=ee([]);currentSessionId=ee(null);controller=ee(void 0);projectId=ee(void 0);sessionSelected=new be;sessionCreated=new be;sessionRenamed=new be;sessionDeleted=new be;sessionPinned=new be;sessionUnpinned=new be;constructor(){}onMenuOpened(){}onMenuClosed(){}get sortedSessions(){let e=this.sessions().filter(a=>a.pinned),t=this.sessions().filter(a=>!a.pinned),i=(a,s)=>{let d=new Date(a.updated_at).getTime();return new Date(s.updated_at).getTime()-d};return[...e.sort(i),...t.sort(i)]}selectSession(e){this.sessionSelected.emit(e)}createNewSession(){this.sessionCreated.emit()}renameSession(e){e.editing=!0}finishRename(e,t){let i=t.trim();i&&this.sessionRenamed.emit({sessionId:e.thread_id,title:i}),e.editing=!1}cancelRename(e){e.editing=!1}togglePinSession(e){e.pinned?this.sessionUnpinned.emit(e.thread_id):this.sessionPinned.emit(e.thread_id)}deleteSession(e){let t=e.title||"New chat";this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-danger-panel","dialog-small-panel"],autoFocus:".cancel-button",data:{title:"Delete chat?",message:`Chat "${t}" will be permanently deleted.`,note:"This action cannot be undone.",confirmButtonText:"Delete chat",tone:"danger"}}).afterClosed().subscribe(a=>{a&&this.delete(e)})}delete(e){this.aiChatService.deleteSession(this.controller(),this.projectId(),e.thread_id).subscribe({next:()=>{this.sessionDeleted.emit(e.thread_id),this.toasterService.success(`Chat "${e.title||"New chat"}" deleted.`)},error:t=>{let i=t?.error?.message||t?.message||"Failed to delete session";this.toasterService.error(i)}})}formatTime(e){if(!e)return"";let i=/[Z+-]\d{2}:?\d{2}$/.test(e)?e:e+"Z",a=new Date(i),d=new Date().getTime()-a.getTime(),p=Math.floor(d/6e4),u=Math.floor(p/60),g=Math.floor(u/24);return p<1?"Just now":p<60?`${p} minutes ago`:u<24?`${u} hours ago`:g<7?`${g} days ago`:a.toLocaleDateString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}trackBySessionId(e,t){return t.thread_id}isFaultInjectionSession(e){return O5(e)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-chat-session-list"]],inputs:{sessions:[1,"sessions"],currentSessionId:[1,"currentSessionId"],controller:[1,"controller"],projectId:[1,"projectId"]},outputs:{sessionSelected:"sessionSelected",sessionCreated:"sessionCreated",sessionRenamed:"sessionRenamed",sessionDeleted:"sessionDeleted",sessionPinned:"sessionPinned",sessionUnpinned:"sessionUnpinned"},decls:10,vars:1,consts:[["sessionMenu","matMenu"],["titleInput",""],[1,"gns3-chat-session-list"],[1,"gns3-chat-session-list__header"],["mat-button","",1,"gns3-chat-session-list__new-button",3,"click"],["xmlns","http://www.w3.org/2000/svg","height","20","width","20","viewBox","0 0 24 24",1,"gns3-chat-session-list__icon"],["d","M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"],[1,"gns3-chat-session-list__container"],[1,"gns3-chat-session-list__no-sessions"],[1,"gns3-chat-session-list__session",3,"gns3-chat-session-list__session--active"],[1,"gns3-chat-session-list__session",3,"click"],[1,"gns3-chat-session-list__type-icons"],["title","Fault Injection Session",1,"gns3-chat-session-list__fault-icon"],["xmlns","http://www.w3.org/2000/svg","height","16","width","16","viewBox","0 0 24 24",1,"gns3-chat-session-list__pin-icon","gns3-chat-session-list__pin-animation"],[1,"gns3-chat-session-list__text"],[1,"gns3-chat-session-list__title"],[1,"gns3-chat-session-list__edit-field"],[1,"gns3-chat-session-list__preview"],[1,"gns3-chat-session-list__stats"],[1,"gns3-chat-session-list__time"],["mat-icon-button","",1,"gns3-chat-session-list__menu-button",3,"click","matMenuTriggerFor"],["xmlns","http://www.w3.org/2000/svg","height","20","width","20","viewBox","0 0 24 24",1,"gns3-chat-session-list__menu-icon"],["d","M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"],["xPosition","before","panelClass","gns3-chat-session-list__action-menu",3,"opened","closed"],["mat-menu-item","",3,"click"],["xmlns","http://www.w3.org/2000/svg","height","20","width","20","viewBox","0 0 24 24",1,"gns3-chat-session-list__menu-item-icon"],["d","M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"],["d","M16 12V4H17V2H7V4H8V12L6 14V16H11V22H13V16H18V14L16 12Z"],["mat-menu-item","",1,"gns3-chat-session-list__delete-action",3,"click"],["xmlns","http://www.w3.org/2000/svg","height","20","width","20","viewBox","0 0 24 24",1,"gns3-chat-session-list__menu-item-icon","gns3-chat-session-list__delete-icon"],["d","M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z"],[1,"gns3-chat-session-list__edit-field",3,"click"],["matInput","",3,"keydown.enter","keydown.escape","blur","value"],["xmlns","http://www.w3.org/2000/svg","height","48","width","48","viewBox","0 0 24 24",1,"gns3-chat-session-list__no-sessions-icon"],["d","M21 6h-2v9H6v2c0 .55.45 1 1 1h11l4 4V7c0-.55-.45-1-1-1zm-4 6V3c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v14l4-4h10c.55 0 1-.45 1-1z"],[1,"gns3-chat-session-list__no-sessions-text"],[1,"gns3-chat-session-list__no-sessions-hint"]],template:function(t,i){t&1&&(r(0,"div",2)(1,"div",3)(2,"button",4),_("click",function(){return i.createNewSession()}),Mi(),r(3,"svg",5),L(4,"path",6),l(),Xa(),r(5,"span"),c(6,"New Chat"),l()()(),r(7,"div",7),T(8,UEe,2,0)(9,WEe,7,0,"div",8),l()()),t&2&&(m(8),E(i.sessions().length>0?8:9))},dependencies:[fe,ie,ce,ye,Ee,Pe,we,it,Ko,ut,eo,Y,he,Be,ke,Ja,fs],styles:[".gns3-chat-session-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;background-color:var(--mat-sys-surface-container);border-right:1px solid var(--mat-sys-outline-variant)}.gns3-chat-session-list__header[_ngcontent-%COMP%]{padding:var(--gns3-density-space-3);border-bottom:1px solid var(--mat-sys-outline-variant)}.gns3-chat-session-list__new-button[_ngcontent-%COMP%]{width:100%;display:flex;align-items:center;justify-content:center;gap:var(--gns3-density-space-2)}.gns3-chat-session-list__icon[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;fill:var(--mat-sys-on-surface);transition:fill var(--gns3-motion-duration-standard) ease}.gns3-chat-session-list__new-button[_ngcontent-%COMP%]:hover .gns3-chat-session-list__icon[_ngcontent-%COMP%]{fill:var(--mat-sys-primary)}.gns3-chat-session-list__container[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:var(--gns3-density-space-2)}.gns3-chat-session-list__session[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;padding:var(--gns3-density-space-2) var(--gns3-density-space-3);border-radius:8px;cursor:pointer;transition:background-color var(--gns3-motion-duration-standard);position:relative}.gns3-chat-session-list__session[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-surface-container-high)}.gns3-chat-session-list__session--active[_ngcontent-%COMP%]{background-color:var(--mat-sys-primary-container);border-left:4px solid var(--mat-sys-primary);box-shadow:0 4px 12px color-mix(in srgb,var(--mat-sys-primary) 30%,transparent),inset 0 0 0 1px color-mix(in srgb,var(--mat-sys-primary) 10%,transparent);transform:translate(2px)}.gns3-chat-session-list__session--active[_ngcontent-%COMP%] .gns3-chat-session-list__title[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);font-weight:700}.gns3-chat-session-list__session--active[_ngcontent-%COMP%] .gns3-chat-session-list__stats[_ngcontent-%COMP%], .gns3-chat-session-list__session--active[_ngcontent-%COMP%] .gns3-chat-session-list__time[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);opacity:.9}.gns3-chat-session-list__session--active[_ngcontent-%COMP%] .gns3-chat-session-list__menu-icon[_ngcontent-%COMP%]{fill:var(--mat-sys-on-primary-container)}.gns3-chat-session-list__type-icons[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;flex-shrink:0}.gns3-chat-session-list__fault-icon[_ngcontent-%COMP%]{font-size:14px;width:14px;height:14px;color:var(--mat-sys-error);flex-shrink:0}.gns3-chat-session-list__pin-icon[_ngcontent-%COMP%]{fill:var(--mat-sys-primary);filter:drop-shadow(0 2px 4px color-mix(in srgb,var(--mat-sys-primary) 40%,transparent))}.gns3-chat-session-list__pin-animation[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_pinBounce var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard)}@keyframes _ngcontent-%COMP%_pinBounce{0%{transform:scale(0);opacity:0}50%{transform:scale(1.35)}to{transform:scale(1);opacity:1}}.gns3-chat-session-list__text[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}.gns3-chat-session-list__title[_ngcontent-%COMP%]{font-size:14px;font-weight:500;color:var(--mat-sys-on-surface);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gns3-chat-session-list__preview[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-2)}.gns3-chat-session-list__stats[_ngcontent-%COMP%]{font-size:11px;color:var(--mat-sys-on-surface-variant)}.gns3-chat-session-list__time[_ngcontent-%COMP%]{font-size:11px;color:var(--mat-sys-on-surface-variant);opacity:.7}.gns3-chat-session-list__edit-field[_ngcontent-%COMP%]{width:100%;margin:0}.gns3-chat-session-list__edit-field[_ngcontent-%COMP%] .mat-mdc-form-field-infix[_ngcontent-%COMP%]{padding:0}.gns3-chat-session-list__edit-field[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{font-size:14px}.gns3-chat-session-list__menu-button[_ngcontent-%COMP%]{width:32px;height:32px;padding:0;opacity:0;transition:opacity var(--gns3-motion-duration-standard)}.gns3-chat-session-list__session[_ngcontent-%COMP%]:hover .gns3-chat-session-list__menu-button[_ngcontent-%COMP%]{opacity:1}.gns3-chat-session-list__menu-icon[_ngcontent-%COMP%]{fill:var(--mat-sys-on-surface-variant);transition:fill var(--gns3-motion-duration-standard) ease}.gns3-chat-session-list__menu-button[_ngcontent-%COMP%]:hover .gns3-chat-session-list__menu-icon[_ngcontent-%COMP%]{fill:var(--mat-sys-on-surface)}.gns3-chat-session-list__no-sessions[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px var(--gns3-density-space-5);text-align:center}.gns3-chat-session-list__no-sessions-icon[_ngcontent-%COMP%]{fill:var(--mat-sys-outline-variant);margin-bottom:12px}.gns3-chat-session-list__no-sessions-text[_ngcontent-%COMP%]{font-size:14px;font-weight:500;color:var(--mat-sys-on-surface);margin:0 0 4px}.gns3-chat-session-list__no-sessions-hint[_ngcontent-%COMP%]{font-size:12px;color:var(--mat-sys-on-surface-variant);margin:0}.gns3-chat-session-list__delete-action[_ngcontent-%COMP%]{color:var(--mat-sys-error)}.gns3-chat-session-list__delete-icon[_ngcontent-%COMP%]{fill:var(--mat-sys-error)}.gns3-chat-session-list__menu-item-icon[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;margin-right:12px;flex-shrink:0;fill:var(--mat-sys-on-surface)}"],changeDetection:0})}return n})();var GEe=n=>["segment",n],qEe=(n,o)=>({"segment-main":!0,expandable:n,expanded:o});function QEe(n,o){n&1&&L(0,"div",9)}function KEe(n,o){if(n&1&&(r(0,"span",10),c(1),l()),n&2){let e=h().$implicit;m(),N(e.description)}}function XEe(n,o){if(n&1&&(r(0,"section",11),L(1,"ngx-json-viewer",12),l()),n&2){let e=h().$implicit,t=h();m(),v("json",e.value)("expanded",t.expanded)("depth",t.depth)("_currentDepth",t._currentDepth+1)}}function YEe(n,o){if(n&1){let e=R();r(0,"section",2)(1,"section",3),_("click",function(){let i=y(e).$implicit,a=h();return w(a.toggle(i))}),se(2,QEe,1,0,"div",4),r(3,"span",5),c(4),l(),r(5,"span",6),c(6,": "),l(),se(7,KEe,2,1,"span",7),l(),se(8,XEe,2,4,"section",8),l()}if(n&2){let e=o.$implicit,t=h();v("ngClass",tn(6,GEe,"segment-type-"+e.type)),m(),v("ngClass",Go(8,qEe,t.isExpandable(e),e.expanded)),m(),v("ngIf",t.isExpandable(e)),m(2),N(e.key),m(3),v("ngIf",!e.expanded||!t.isExpandable(e)),m(),v("ngIf",e.expanded&&t.isExpandable(e))}}var Ej=(()=>{class n{constructor(){this.expanded=!0,this.depth=-1,this._currentDepth=0,this.segments=[]}ngOnChanges(){this.segments=[],this.json=this.decycle(this.json),typeof this.json=="object"?Object.keys(this.json).forEach(e=>{this.segments.push(this.parseKeyValue(e,this.json[e]))}):this.segments.push(this.parseKeyValue(`(${typeof this.json})`,this.json))}isExpandable(e){return e.type==="object"||e.type==="array"}toggle(e){this.isExpandable(e)&&(e.expanded=!e.expanded)}parseKeyValue(e,t){let i={key:e,value:t,type:void 0,description:""+t,expanded:this.isExpanded()};switch(typeof i.value){case"number":{i.type="number";break}case"boolean":{i.type="boolean";break}case"function":{i.type="function";break}case"string":{i.type="string",i.description='"'+i.value+'"';break}case"undefined":{i.type="undefined",i.description="undefined";break}case"object":{i.value===null?(i.type="null",i.description="null"):Array.isArray(i.value)?(i.type="array",i.description="Array["+i.value.length+"] "+JSON.stringify(i.value)):i.value instanceof Date?i.type="date":(i.type="object",i.description="Object "+JSON.stringify(i.value));break}}return i}isExpanded(){return this.expanded&&!(this.depth>-1&&this._currentDepth>=this.depth)}decycle(e){let t=new WeakMap;return(function i(a,s){let d,p;return typeof a=="object"&&a!==null&&!(a instanceof Boolean)&&!(a instanceof Date)&&!(a instanceof Number)&&!(a instanceof RegExp)&&!(a instanceof String)?(d=t.get(a),d!==void 0?{$ref:d}:(t.set(a,s),Array.isArray(a)?(p=[],a.forEach(function(u,g){p[g]=i(u,s+"["+g+"]")})):(p={},Object.keys(a).forEach(function(u){p[u]=i(a[u],s+"["+JSON.stringify(u)+"]")})),p)):a})(e,"$")}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275cmp=V({type:n,selectors:[["ngx-json-viewer"]],inputs:{json:"json",expanded:"expanded",depth:"depth",_currentDepth:"_currentDepth"},standalone:!1,features:[Nn],decls:2,vars:1,consts:[[1,"ngx-json-viewer"],[3,"ngClass",4,"ngFor","ngForOf"],[3,"ngClass"],[3,"click","ngClass"],["class","toggler",4,"ngIf"],[1,"segment-key"],[1,"segment-separator"],["class","segment-value",4,"ngIf"],["class","children",4,"ngIf"],[1,"toggler"],[1,"segment-value"],[1,"children"],[3,"json","expanded","depth","_currentDepth"]],template:function(e,t){e&1&&(r(0,"section",0),se(1,YEe,9,11,"section",1),l()),e&2&&(m(),v("ngForOf",t.segments))},dependencies:[Ao,vA,CA,n],styles:['@charset "UTF-8";.ngx-json-viewer[_ngcontent-%COMP%]{font-family:var(--ngx-json-font-family, monospace);font-size:var(--ngx-json-font-size, 1em);width:100%;height:100%;overflow:hidden;position:relative}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%]{padding:2px;margin:1px 1px 1px 12px}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%]{word-wrap:break-word}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%] .toggler[_ngcontent-%COMP%]{position:absolute;margin-left:-14px;margin-top:3px;font-size:.8em;line-height:1.2em;vertical-align:middle;color:var(--ngx-json-toggler, #787878)}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%] .toggler[_ngcontent-%COMP%]:after{display:inline-block;content:"\\25ba";transition:transform .1s ease-in}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%] .segment-key[_ngcontent-%COMP%]{color:var(--ngx-json-key, #4E187C)}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%] .segment-separator[_ngcontent-%COMP%]{color:var(--ngx-json-separator, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%] .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-value, #000)}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .children[_ngcontent-%COMP%]{margin-left:12px}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-string[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-string, #FF6B6B)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-number[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-number, #009688)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-boolean[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-boolean, #B938A4)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-date[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-date, #05668D)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-array[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-array, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-object[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-object, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-function[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-function, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-null[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-null, #fff)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-undefined[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-undefined, #fff)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-null[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{background-color:var(--ngx-json-null-bg, red)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-undefined[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-key[_ngcontent-%COMP%]{color:var(--ngx-json-undefined-key, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-undefined[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{background-color:var(--ngx-json-undefined-key, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-object[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%], .ngx-json-viewer[_ngcontent-%COMP%] .segment-type-array[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%]{white-space:nowrap}.ngx-json-viewer[_ngcontent-%COMP%] .expanded[_ngcontent-%COMP%] > .toggler[_ngcontent-%COMP%]:after{transform:rotate(90deg)}.ngx-json-viewer[_ngcontent-%COMP%] .expandable[_ngcontent-%COMP%], .ngx-json-viewer[_ngcontent-%COMP%] .expandable[_ngcontent-%COMP%] > .toggler[_ngcontent-%COMP%]{cursor:pointer}']}),n})(),Oj=(()=>{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275mod=on({type:n}),n.\u0275inj=nn({imports:[fe]}),n})();function JEe(n,o){if(n&1&&(r(0,"div",4)(1,"div",5),c(2,"Function:"),l(),r(3,"div",6),c(4),l()(),r(5,"div",4)(6,"div",5),c(7,"Arguments:"),l(),r(8,"div",7),L(9,"ngx-json-viewer",8),l()()),n&2){let e=h();m(4),N(e.toolCall().function.name),m(5),v("json",e.parsedArguments())("expanded",!0)}}function eOe(n,o){if(n&1&&(r(0,"div",4)(1,"div",5),c(2,"Tool:"),l(),r(3,"div",6),c(4),l()(),r(5,"div",4)(6,"div",5),c(7,"Output:"),l(),r(8,"div",7),L(9,"ngx-json-viewer",8),l()()),n&2){let e=h();m(4),N(e.toolName()),m(5),v("json",e.parsedOutput())("expanded",!1)}}var CC=(()=>{class n{dialogRef;data;type=z("tool_call");toolCall=z(void 0);toolName=z(void 0);toolOutput=z(void 0);parsedArguments=z(null);parsedOutput=z(null);constructor(e,t){this.dialogRef=e,this.data=t,this.type.set(t.type),this.toolCall.set(t.toolCall),this.toolName.set(t.toolName),this.toolOutput.set(t.toolOutput),this.parseJsonData()}get title(){return this.type()==="tool_call"?"Tool Call Details":"Execution Result Details"}parseJsonData(){let e=this.toolCall(),t=this.toolOutput();if(e?.function?.arguments)try{let i=e.function.arguments;typeof i=="string"?this.parsedArguments.set(JSON.parse(i)):i.tool_input&&typeof i.tool_input=="string"?this.parsedArguments.set(JSON.parse(i.tool_input)):this.parsedArguments.set(i)}catch{this.parsedArguments.set(e.function.arguments)}if(t)if(typeof t=="string")try{this.parsedOutput.set(JSON.parse(t))}catch{this.parsedOutput.set(t)}else this.parsedOutput.set(t)}closeDialog(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)(Mt(We),Mt(Wt))};static \u0275cmp=V({type:n,selectors:[["app-tool-details-dialog"]],decls:8,vars:3,consts:[["mat-dialog-title",""],["mat-dialog-content",""],["mat-dialog-actions","","align","end"],["mat-button","",3,"click"],[1,"info-section"],[1,"info-label"],[1,"info-value"],[1,"json-container"],[3,"json","expanded"]],template:function(t,i){t&1&&(r(0,"h1",0),c(1),l(),r(2,"div",1),T(3,JEe,10,3),T(4,eOe,10,3),l(),r(5,"div",2)(6,"button",3),_("click",function(){return i.closeDialog()}),c(7,"Close"),l()()),t&2&&(m(),N(i.title),m(2),E(i.type()==="tool_call"&&i.toolCall()?3:-1),m(),E(i.type()==="tool_result"?4:-1))},dependencies:[fe,ke,qe,Qe,bt,Y,he,Oj,Ej],styles:[".info-section[_ngcontent-%COMP%]{margin-bottom:16px}.info-section[_ngcontent-%COMP%]:last-child{margin-bottom:0}.info-label[_ngcontent-%COMP%]{font-size:11px;font-weight:500;color:var(--mat-sys-on-surface-variant);margin-bottom:6px;text-transform:uppercase;letter-spacing:.5px}.info-value[_ngcontent-%COMP%]{font-family:var(--gns3-font-code);font-size:13px;color:var(--mat-sys-on-surface);background:var(--mat-sys-surface-container-low);padding:8px 12px;border-radius:6px;word-break:break-all}.json-container[_ngcontent-%COMP%]{background:var(--mat-sys-surface-container-low);border-radius:6px;padding:12px;max-height:500px;overflow-y:auto;border:1px solid var(--mat-sys-outline-variant);white-space:pre-wrap;font-size:13px;font-family:var(--gns3-font-code)}"],changeDetection:0})}return n})();var tOe=["messageContainer"],Dj=(n,o)=>o.id;function nOe(n,o){if(n&1&&(r(0,"div",4)(1,"div",6)(2,"span",7),c(3,"Y"),l()(),r(4,"div",8)(5,"div",9),L(6,"app-markdown-viewer",10),l(),r(7,"div",11),c(8),l()()()),n&2){let e=h().$implicit,t=h();m(6),v("data",e.content),m(2),N(t.formatTime(e.created_at))}}function iOe(n,o){n&1&&(Mi(),r(0,"svg",15)(1,"defs")(2,"linearGradient",18),L(3,"stop",19)(4,"stop",20),l()(),r(5,"g",21),L(6,"path",22)(7,"path",23)(8,"path",24)(9,"path",25),l()())}function oOe(n,o){if(n&1){let e=R();r(0,"div",27),_("click",function(){let i=y(e).$implicit,a=h(4);return w(a.openToolCallDialog(i))}),r(1,"mat-icon",28),c(2,"build"),l(),r(3,"span",29),c(4),l(),r(5,"mat-icon",30),c(6,"open_in_new"),l()()}if(n&2){let e=o.$implicit;m(4),N(e.function.name)}}function aOe(n,o){if(n&1&&(r(0,"div",16),Q(1,oOe,7,1,"div",26,Dj),l()),n&2){let e=h(2).$implicit;m(),K(e.tool_calls)}}function rOe(n,o){if(n&1){let e=R();r(0,"div",32),_("click",function(){let i=y(e).$implicit,a=h(4);return w(a.openAssistantToolResultDialog(i))}),r(1,"mat-icon",28),c(2,"check_circle"),l(),r(3,"span",29),c(4),l(),r(5,"mat-icon",30),c(6,"open_in_new"),l()()}if(n&2){let e=o.$implicit;m(4),N(e.toolName)}}function sOe(n,o){if(n&1&&(r(0,"div",17),Q(1,rOe,7,1,"div",31,ni),l()),n&2){let e=h(2).$implicit;m(),K(e.tool_result)}}function lOe(n,o){if(n&1&&(r(0,"div",5)(1,"div",12),L(2,"img",13),l(),r(3,"div",8)(4,"div",14),L(5,"app-markdown-viewer",10),T(6,iOe,10,0,":svg:svg",15),l(),T(7,aOe,3,0,"div",16),T(8,sOe,3,0,"div",17),r(9,"div",11),c(10),l()()()),n&2){let e=h().$implicit,t=h();m(4),ne("gns3-chat-message-list__bubble--streaming",t.isStreaming()&&e===t.lastAssistantMessage),m(),v("data",e.content),m(),E(t.isStreaming()&&e===t.lastAssistantMessage&&e.content?6:-1),m(),E(e.tool_calls&&e.tool_calls.length>0?7:-1),m(),E(e.tool_result&&e.tool_result.length>0?8:-1),m(2),N(t.formatTime(e.created_at))}}function cOe(n,o){if(n&1&&(r(0,"div",5)(1,"div",33),L(2,"app-markdown-viewer",10),l()()),n&2){let e=h().$implicit;m(2),v("data",e.content)}}function dOe(n,o){if(n&1&&(r(0,"div",5)(1,"div",34)(2,"mat-icon",35),c(3,"error"),l(),r(4,"div",36),c(5),l()()()),n&2){let e=h().$implicit;m(5),N(e.metadata.error)}}function mOe(n,o){if(n&1&&(T(0,nOe,9,2,"div",4),T(1,lOe,11,7,"div",5),T(2,cOe,3,1,"div",5),T(3,dOe,6,1,"div",5)),n&2){let e=o.$implicit;E(e.role==="user"?0:-1),m(),E(e.role==="assistant"?1:-1),m(),E(e.role==="system"?2:-1),m(),E(e.metadata!=null&&e.metadata.error?3:-1)}}function pOe(n,o){if(n&1){let e=R();r(0,"div",3)(1,"div",37)(2,"div",38),L(3,"img",39),l(),r(4,"h3",40),c(5,"Welcome to GNS3 AI Assistant"),l(),r(6,"p",41),c(7,"Ask me anything about network automation and GNS3"),l(),r(8,"div",42)(9,"div",43),_("click",function(){y(e);let i=h();return w(i.sendSuggestion("Help me understand this network topology"))}),r(10,"mat-icon"),c(11,"help_outline"),l(),r(12,"span"),c(13,"Explain network topology"),l()(),r(14,"div",43),_("click",function(){y(e);let i=h();return w(i.sendSuggestion("Analyze the network configuration"))}),r(15,"mat-icon"),c(16,"analytics"),l(),r(17,"span"),c(18,"Analyze configuration"),l()(),r(19,"div",43),_("click",function(){y(e);let i=h();return w(i.sendSuggestion("Find potential network issues"))}),r(20,"mat-icon"),c(21,"search"),l(),r(22,"span"),c(23,"Find network issues"),l()()()()()}}var r2=(()=>{class n{messages=ee([]);isStreaming=ee(!1);autoScroll=ee(!0);scrollToEnd=new be;suggestionClicked=new be;messageContainer=ln.required("messageContainer");shouldScrollToBottom=!1;dialog=f(Xe);constructor(){}ngOnChanges(e){e.messages&&e.messages.previousValue!==e.messages.currentValue&&(this.shouldScrollToBottom=!0)}ngAfterViewChecked(){this.shouldScrollToBottom&&this.autoScroll()&&(requestAnimationFrame(()=>{this.scrollToBottom(),requestAnimationFrame(()=>{this.scrollToBottom()})}),this.shouldScrollToBottom=!1)}ngAfterViewInit(){let e=this.messageContainer().nativeElement;e&&this.messages().length===0&&(e.scrollTop=0)}get lastAssistantMessage(){let e=this.messages().filter(t=>t.role==="assistant");return e[e.length-1]}isToolCallExecuting(e){return!1}formatTime(e){if(!e)return"";let t=e;/(Z|[+-]\d{2}:\d{2})$/.test(e)||(t=e+"Z");let a=new Date(t),s=new Date;if(isNaN(a.getTime()))return"";let d=s.getTime()-a.getTime(),p=Math.floor(d/6e4);return p<1?"Just now":p<60?`${p} minutes ago`:p<1440?`${Math.floor(p/60)} hours ago`:a.toLocaleDateString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}scrollToBottom(){let e=this.messageContainer();if(e?.nativeElement){let t=e.nativeElement;t.scrollTop=t.scrollHeight,this.scrollToEnd.emit()}}trackByMessageId(e,t){return t.id}openToolCallDialog(e,t){let i;t!==void 0?i=t:i=e;let a={type:"tool_call",toolCall:i};this.dialog.open(CC,{data:a,panelClass:["base-dialog-panel","dialog-medium-panel","tool-details-dialog"]})}openAssistantToolResultDialog(e){let t={type:"tool_result",toolName:e.toolName,toolOutput:e.toolOutput};this.dialog.open(CC,{data:t,panelClass:["base-dialog-panel","dialog-medium-panel","tool-details-dialog"]})}sendSuggestion(e){this.suggestionClicked.emit(e)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-chat-message-list"]],viewQuery:function(t,i){t&1&&Bn(i.messageContainer,tOe,5),t&2&&jn()},inputs:{messages:[1,"messages"],isStreaming:[1,"isStreaming"],autoScroll:[1,"autoScroll"]},outputs:{scrollToEnd:"scrollToEnd",suggestionClicked:"suggestionClicked"},features:[Nn],decls:6,vars:3,consts:[["messageContainer",""],[1,"gns3-chat-message-list"],[1,"gns3-chat-message-list__messages-container"],[1,"gns3-chat-message-list__empty-state"],[1,"gns3-chat-message-list__message","gns3-chat-message-list__message--user"],[1,"gns3-chat-message-list__message"],[1,"gns3-chat-message-list__avatar","gns3-chat-message-list__avatar--user"],[1,"avatar-text"],[1,"gns3-chat-message-list__content"],[1,"gns3-chat-message-list__bubble","gns3-chat-message-list__bubble--user"],[1,"gns3-chat-message-list__text",3,"data"],[1,"gns3-chat-message-list__time"],[1,"gns3-chat-message-list__avatar","gns3-chat-message-list__avatar--assistant"],["src","assets/gns3_icon.svg","alt","GNS3",1,"gns3-chat-message-list__avatar-logo"],[1,"gns3-chat-message-list__bubble","gns3-chat-message-list__bubble--assistant"],["viewBox","0 0 256 256","xmlns","http://www.w3.org/2000/svg",1,"gns3-chat-message-list__streaming-logo"],[1,"gns3-chat-message-list__tool-calls-container"],[1,"gns3-chat-message-list__tool-results-container"],["id","gns3LoadingGradient","x1","0%","y1","0%","x2","100%","y2","100%"],["offset","0%",2,"stop-color","var(--mat-sys-primary)","stop-opacity","1"],["offset","100%",2,"stop-color","var(--mat-sys-primary)","stop-opacity","0.6"],["transform","translate(0,-356)"],["d","m 147.99093,422.62227 c 0,6.34 -5.13717,11.47729 -11.47726,11.47729 -6.33986,0 -11.47761,-5.13729 -11.47761,-11.47729 0,-6.34019 5.13775,-11.47804 11.47761,-11.47804 6.34009,0 11.47726,5.13785 11.47726,11.47804 z M 22.394349,480.3376 c -6.886487,37.71152 2.514172,64.92952 17.161614,84.38707 26.124988,36.83736 64.492517,43.28645 64.492517,43.28645 44.81704,8.52584 78.92153,-6.99569 99.36233,-26.23425 25.68784,-24.37577 24.81373,-48.53334 24.92311,-48.86119 0.21851,-11.25931 -3.49797,-19.34782 -10.05651,-24.92306 -11.0404,-9.29128 -24.4855,-5.68414 -24.4855,-5.68414 -23.2827,5.46564 -19.457,26.67165 -19.457,26.67165 1.31155,6.33984 4.59052,10.49362 8.30733,12.89839 7.10497,4.37239 14.64752,3.49799 14.64752,3.49799 11.14958,-1.31129 14.42894,-11.80519 13.77292,-17.05238 -1.09318,-8.30719 -8.63562,-9.83784 -8.63562,-9.83784 -2.84184,-0.54643 -5.02802,-0.10925 -6.66791,0.76517 -2.40425,0.98433 -3.38861,2.62342 -3.38861,2.62342 -1.74868,2.95142 -0.65568,4.59143 0.43749,5.24736 0.65611,0.43714 1.42132,0.43714 1.42132,0.43714 0.87411,0 1.42053,-0.2185 2.07653,-0.54638 1.53057,-0.8745 2.73256,-2.29597 5.02855,-1.42145 3.3886,1.31184 2.514,4.91929 2.514,4.91929 -0.76536,3.93499 -3.06079,5.79343 -5.57488,6.44908 -3.3886,0.8745 -6.88644,-0.21851 -6.88644,-0.21851 -12.02422,-4.9193 -6.66794,-16.943 -6.66794,-16.943 3.71635,-7.54269 12.02432,-8.41719 12.02432,-8.41719 13.00749,-2.07647 21.64316,6.6679 20.22168,21.42461 -1.63939,18.36446 -15.73999,30.49734 -30.82506,38.14961 -56.51289,29.07595 -98.706503,-7.76156 -98.706503,-7.76156 -15.740625,-14.97516 -12.024098,-30.82515 -10.275137,-35.853 0.655867,-1.85856 2.404853,-2.18667 3.279285,-2.18667 12.898528,-1.09269 23.610725,22.73676 24.703825,26.01608 2.2955,5.46552 5.90259,8.52567 9.29119,10.49354 7.65184,4.2631 15.74104,2.18631 15.74104,2.18631 11.14918,-3.82574 7.32358,-12.89835 7.32358,-12.89835 -1.31154,-3.60724 -3.27936,-4.5916 -4.80941,-4.48175 -1.42153,0 -2.51417,1.09316 -2.51417,1.09316 -0.54659,0.65552 -1.20277,1.09252 -1.74915,1.63926 -7.10531,6.01193 -10.6033,-0.32811 -10.6033,-0.32811 -2.51397,-4.04423 1.31224,-6.23061 1.31224,-6.23061 0.76515,-0.43697 1.53004,-0.65583 2.07635,-0.87447 2.84229,-0.874 2.40529,-3.27934 2.40529,-3.27934 -0.43714,-4.4811 -5.46562,-2.62337 -5.46562,-2.62337 -4.9188,1.74936 -6.44941,5.79346 -6.88681,7.54276 -0.10925,0.54665 -0.21864,0.9838 -0.9834,1.09305 -1.42087,0.2185 -1.42087,-2.2956 -1.42087,-2.2956 -0.43766,-17.92675 -5.3563,-25.90628 -7.65197,-28.74817 -0.65595,-0.87508 -1.748963,-1.42143 -2.076703,-1.6399 -5.137765,-2.29543 -10.821818,-6.7772 -10.821818,-6.7772 -10.821645,-7.76093 -6.55856,-14.75663 -6.55856,-14.75663 6.449253,-16.1782 11.696148,-21.75305 11.696148,-21.75305 4.372228,-4.15383 8.963563,-0.43707 8.963563,-0.43707 -3.388589,4.154 -6.012231,8.19861 -6.012231,8.19861 -7.760984,12.35148 -9.072721,17.38012 -9.072721,17.38012 -0.109308,0.43699 -0.109308,1.2022 0.54656,2.0769 7.979631,13.66362 29.513532,15.74023 29.622792,15.74023 5.903,0.87439 10.71217,0.10925 10.71217,0.10925 2.84217,-0.5464 3.27932,1.31202 3.27932,1.31202 0.32816,1.09313 1.53073,4.15392 1.53073,4.15392 2.07675,4.37191 5.24645,2.07639 5.24645,2.07639 1.2029,-0.87441 1.74925,-2.07639 1.74925,-3.06023 0,-0.98427 -0.54635,-1.63992 -0.54635,-1.63992 -1.42154,-2.07704 -1.85853,-4.04413 -1.85853,-4.04413 -0.65564,-2.40529 2.07709,-3.38858 2.07709,-3.38858 5.35574,-2.40531 8.3072,2.18559 8.3072,2.18559 2.84233,3.3886 8.52646,-0.87441 8.52646,-0.87441 4.59089,-3.49785 -1.09323,-8.96303 -1.09323,-8.96303 -11.80522,-10.82192 -25.68768,2.84173 -25.68768,2.84173 -0.76544,0.98401 -1.53071,0.98401 -1.53071,0.98401 -11.47697,0.32817 -22.40799,-8.08903 -22.40799,-8.52636 4.37237,-7.32359 12.78893,-20.11308 12.78893,-20.11308 l 44.48933,17.16181 c 1.74859,0.54637 3.60712,0.10928 3.60712,0.10928 l 69.30196,-13.99174 c 1.53069,-0.21862 1.3122,-2.07653 1.3122,-2.07653 0,-1.53068 -0.10984,-1.74919 -1.42146,-1.96769 -1.42085,-0.21851 -67.44413,-5.35634 -67.44413,-5.35634 -3.6071,-0.21853 -3.6071,-5.13719 0.10925,-5.46498 l 48.53404,-4.04469 c 1.09314,-0.10926 1.31163,-1.20245 1.31163,-1.20245 1.31159,-6.44938 0.87399,-14.86588 0.87399,-14.86588 14.10125,-15.7411 7.32407,-31.26273 7.32407,-31.26273 -8.63521,-21.4247 -27.65565,-21.75286 -27.65565,-21.75286 -31.26208,-34.54162 -72.36236,-30.49735 -72.36236,-30.49735 -1.85878,0 -1.96813,1.53056 -1.96813,1.53056 l -4.69982,29.73201 c -0.21882,1.63996 -1.09349,2.07694 -1.09349,2.07694 l -6.23028,4.91872 c -0.76548,0.76538 -0.98406,0.76538 -2.07708,0.76538 -0.98378,0.10951 -4.04425,0.54685 -4.04425,0.54685 C 32.997429,414.53283 22.394349,480.3376 22.394349,480.3376 z M 220.90065,409.94185 c 2.95154,9.40107 -5.13786,12.35249 -5.13786,12.35249 -1.53006,-7.3239 -6.88645,-17.59894 -6.88645,-17.59894 9.07316,-2.84204 12.02431,5.24645 12.02431,5.24645 z m -45.47307,16.7245 c 0,17.27084 -13.99154,31.37192 -31.3715,31.37192 -17.27088,0 -31.37183,-13.99182 -31.37183,-31.37192 0,-17.37995 14.10095,-31.37147 31.37183,-31.37147 17.37996,0 31.3715,14.10077 31.3715,31.37147 z",2,"fill","url(#gns3LoadingGradient)"],["d","m 29.510681,104.95541 c 0,-1.72767 4.629168,-10.485938 8.922862,-16.881827 9.532205,-14.199177 22.127061,-25.580674 36.840478,-33.291355 8.695245,-4.556811 24.61103,-10.609516 25.516669,-9.70388 0.28263,0.282631 0.95772,0.239563 1.50019,-0.09571 0.54248,-0.33527 4.99436,-0.803063 9.89307,-1.039541 4.89871,-0.236478 10.63286,-0.684969 12.74256,-0.996646 l 3.83581,-0.566686 -2.87686,2.434668 c -1.58227,1.339067 -3.14795,2.450186 -3.47929,2.469154 -1.68705,0.09658 -7.68618,10.854586 -9.04972,16.228519 -2.62183,10.333096 0.5702,21.528346 8.42889,29.562183 2.78528,2.847349 3.5502,4.164777 2.58845,4.458047 -0.75085,0.22896 -20.13669,1.997905 -43.079643,3.930994 -22.942952,1.93308 -43.979985,3.76225 -46.748962,4.06482 -3.520186,0.38465 -5.034504,0.21238 -5.034504,-0.57274 z","transform","translate(0,356)",2,"fill","url(#gns3LoadingGradient)"],["d","m 20.883753,139.13783 c 0.0085,-5.02746 2.975045,-19.84783 5.322913,-26.59244 2.494665,-7.1663 2.58356,-7.27734 5.55674,-6.94098 3.274726,0.37048 78.714134,-5.943709 88.732764,-7.426826 5.48582,-0.8121 6.52647,-0.68727 10.069,1.207818 3.317,1.774438 5.48939,2.113528 13.5404,2.113528 10.7302,0 14.442,-1.34017 21.58487,-7.793315 4.3645,-3.943066 9.57454,-13.722604 9.59579,-18.011849 0.008,-1.629888 0.33172,-3.448849 0.71921,-4.042136 0.42463,-0.650131 10.03894,-1.890095 24.19889,-3.120944 30.29526,-2.633408 27.88976,-2.729233 27.18798,1.083051 -0.8022,4.357824 -3.80236,11.080064 -6.55677,14.691283 -1.92557,2.524555 -2.37472,4.35005 -2.60835,10.601279 l -0.28223,7.551581 -24.80503,2.09802 c -13.64277,1.15391 -25.40194,2.32707 -26.13147,2.60703 -1.54574,0.59315 -1.78171,4.01045 -0.33852,4.90238 0.68162,0.42127 59.31288,5.63597 69.73487,6.20227 0.13185,0.007 0.23973,0.63124 0.23973,1.38683 0,1.51563 -0.90249,1.86399 -8.63057,3.33139 -5.68832,1.08009 -69.10668,6.80224 -75.38896,6.80224 -2.3662,0 -9.42164,-2.17638 -18.63036,-5.74688 -8.15202,-3.16078 -15.04629,-5.74995 -15.32061,-5.75372 -0.27431,-0.004 -2.64772,3.43055 -5.27424,7.63179 -3.47938,5.56542 -5.42616,7.76216 -7.17287,8.09378 -4.64405,0.88171 -17.261159,1.68518 -17.261159,1.09921 0,-1.35251 4.978919,-10.2667 9.080733,-16.25801 2.418926,-3.53321 4.144786,-6.83378 3.835256,-7.33462 -0.30953,-0.50083 -2.009311,-0.91061 -3.777284,-0.91061 -4.301856,0 -7.201623,3.5265 -13.207838,16.06246 -2.590162,5.4061 -5.017616,9.82927 -5.394342,9.82927 -0.376727,0 -12.749895,1.07386 -27.49593,2.38635 -33.117257,2.94765 -31.127147,2.93162 -31.122613,0.25077 z","transform","translate(0,356)",2,"fill","url(#gns3LoadingGradient)"],["d","m 22.776215,171.26276 c -0.588994,-1.97784 -1.316927,-9.52959 -1.61763,-16.78168 l -0.546734,-13.1856 h 4.41742 c 4.272458,0 45.974498,-3.38285 52.084903,-4.2251 2.729171,-0.37619 3.068349,-0.13433 3.610054,2.57419 0.747297,3.73649 7.88306,10.75622 15.175011,14.92825 4.051489,2.31803 5.884641,4.10484 7.379631,7.19308 1.09401,2.25992 1.9891,4.55758 1.9891,5.10593 0,1.13043 -9.626814,2.21632 -19.738447,2.22647 -3.735922,0.004 -7.090412,0.30464 -7.454422,0.66866 -0.364011,0.36401 -2.701459,0.81187 -5.19433,0.99524 -2.492869,0.18337 -14.079003,1.18013 -25.746961,2.21502 -11.667959,1.03489 -21.680722,1.88162 -22.250585,1.88162 -0.569862,0 -1.518017,-1.61824 -2.10701,-3.59608 z","transform","translate(0,356)",2,"fill","url(#gns3LoadingGradient)"],[1,"gns3-chat-message-list__tool-call"],[1,"gns3-chat-message-list__tool-call",3,"click"],[1,"gns3-chat-message-list__tool-icon"],[1,"gns3-chat-message-list__tool-name-text"],[1,"gns3-chat-message-list__expand-icon"],[1,"gns3-chat-message-list__tool-result"],[1,"gns3-chat-message-list__tool-result",3,"click"],[1,"gns3-chat-message-list__bubble","gns3-chat-message-list__bubble--system"],[1,"gns3-chat-message-list__bubble","gns3-chat-message-list__bubble--error"],[1,"gns3-chat-message-list__error-icon"],[1,"gns3-chat-message-list__text"],[1,"gns3-chat-message-list__empty-content"],[1,"gns3-chat-message-list__empty-icon-wrapper"],["src","assets/gns3_icon.svg","alt","GNS3",1,"gns3-chat-message-list__empty-logo"],[1,"gns3-chat-message-list__empty-title"],[1,"gns3-chat-message-list__empty-description"],[1,"gns3-chat-message-list__empty-suggestions"],[1,"gns3-chat-message-list__suggestion-chip",3,"click"]],template:function(t,i){t&1&&(r(0,"div",1,0)(2,"div",2),Q(3,mOe,4,4,null,null,Dj),T(5,pOe,24,0,"div",3),l()()),t&2&&(ne("gns3-chat-message-list--auto-scroll",i.autoScroll()),m(3),K(i.messages()),m(2),E(i.messages().length===0?5:-1))},dependencies:[fe,ie,ce,ke,Fl],styles:['.gns3-chat-message-list[_ngcontent-%COMP%]{height:100%;overflow-y:auto;padding:var(--gns3-density-space-4);background-color:var(--mat-sys-surface);scrollbar-width:auto;scrollbar-color:var(--mat-sys-primary) transparent}.gns3-chat-message-list[_ngcontent-%COMP%]::-webkit-scrollbar{width:12px}.gns3-chat-message-list[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:transparent}.gns3-chat-message-list[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background-color:var(--mat-sys-primary);border-radius:6px;border:3px solid transparent;background-clip:content-box}.gns3-chat-message-list[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background-color:var(--mat-sys-primary);border:2px solid transparent;background-clip:content-box}.gns3-chat-message-list__messages-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-card-gap)}.gns3-chat-message-list__message[_ngcontent-%COMP%]{display:flex;gap:8px;animation:none}.gns3-chat-message-list__message--user[_ngcontent-%COMP%]{flex-direction:row-reverse}.gns3-chat-message-list__avatar[_ngcontent-%COMP%]{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0}.gns3-chat-message-list__avatar--user[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--mat-sys-primary),var(--mat-sys-primary));color:var(--mat-sys-on-primary)}.gns3-chat-message-list__avatar--assistant[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--mat-sys-primary),var(--mat-sys-primary-container));color:var(--mat-sys-on-primary);overflow:hidden}.gns3-chat-message-list__avatar--tool[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--mat-sys-tertiary),var(--mat-sys-tertiary-container));color:var(--mat-sys-on-tertiary)}.gns3-chat-message-list__avatar[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:20px;height:20px;font-size:20px;color:inherit}.gns3-chat-message-list__avatar[_ngcontent-%COMP%] .avatar-text[_ngcontent-%COMP%]{font-size:12px;font-weight:700;font-family:var(--mat-sys-body-medium-font, Roboto),sans-serif;letter-spacing:-.5px}.gns3-chat-message-list__avatar-logo[_ngcontent-%COMP%]{width:24px;height:24px;object-fit:contain}.gns3-chat-message-list__content[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;gap:4px;max-width:80%}.gns3-chat-message-list__message--user[_ngcontent-%COMP%] .gns3-chat-message-list__content[_ngcontent-%COMP%]{align-items:flex-end}.gns3-chat-message-list__bubble[_ngcontent-%COMP%]{padding:10px 14px;border-radius:16px;position:relative}.gns3-chat-message-list__bubble--user[_ngcontent-%COMP%]{background:var(--mat-sys-primary-container);color:var(--mat-sys-on-primary-container);border-bottom-right-radius:4px;box-shadow:0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 20%,transparent)}.gns3-chat-message-list__bubble--assistant[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--mat-sys-surface-container),var(--mat-sys-surface-container-high));color:var(--mat-sys-on-surface);border-bottom-left-radius:4px;box-shadow:0 1px 3px color-mix(in srgb,var(--mat-sys-shadow) 12%,transparent);border:1px solid var(--mat-sys-outline-variant);position:relative;overflow:hidden}.gns3-chat-message-list__bubble--assistant[_ngcontent-%COMP%]:after{content:"";position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--mat-sys-primary) 50%,transparent),transparent);opacity:0;transition:opacity var(--gns3-motion-duration-standard) ease}.gns3-chat-message-list__bubble--assistant[_ngcontent-%COMP%]:hover:after{opacity:1}.gns3-chat-message-list__bubble--system[_ngcontent-%COMP%]{background:linear-gradient(135deg,color-mix(in srgb,var(--mat-sys-primary) 10%,transparent),color-mix(in srgb,var(--mat-sys-primary) 10%,transparent));color:var(--mat-sys-on-surface-variant);text-align:center;font-size:12px;padding:8px 16px;border-radius:20px;margin:0 auto;border:1px solid color-mix(in srgb,var(--mat-sys-primary) 30%,transparent)}.gns3-chat-message-list__bubble--error[_ngcontent-%COMP%]{background-color:var(--mat-sys-error-container);color:var(--mat-sys-on-error-container);display:flex;align-items:center;gap:8px;padding:10px 14px;border-radius:8px}.gns3-chat-message-list__error-icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-error-container)}app-markdown-viewer.gns3-chat-message-list__text[_ngcontent-%COMP%]{--markdown-viewer-font-size: 16px;--markdown-viewer-line-height: 1.4;white-space:pre-wrap}.gns3-chat-message-list__time[_ngcontent-%COMP%]{font-size:12px;color:var(--mat-sys-on-surface-variant);opacity:.7;padding:0 4px}.gns3-chat-message-list__streaming-logo[_ngcontent-%COMP%]{flex-shrink:0;margin-top:4px;width:16px;height:16px;opacity:.9;animation:_ngcontent-%COMP%_rotate 1s linear infinite}@keyframes _ngcontent-%COMP%_rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.gns3-chat-message-list__tool-calls-container[_ngcontent-%COMP%], .gns3-chat-message-list__tool-results-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px;margin-top:8px}.gns3-chat-message-list__tool-call-message[_ngcontent-%COMP%], .gns3-chat-message-list__tool-result-message[_ngcontent-%COMP%]{margin-left:40px;margin-bottom:8px}.gns3-chat-message-list__tool-call-wrapper[_ngcontent-%COMP%], .gns3-chat-message-list__tool-result-wrapper[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px}.gns3-chat-message-list__tool-call[_ngcontent-%COMP%], .gns3-chat-message-list__tool-result[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;background:var(--mat-sys-surface-container-low);border:1px solid var(--mat-sys-outline-variant);border-radius:8px;cursor:pointer;transition:all var(--gns3-motion-duration-standard) ease;user-select:none;font-size:12px}.gns3-chat-message-list__tool-call[_ngcontent-%COMP%]{border-left:3px solid var(--mat-sys-primary-container)}.gns3-chat-message-list__tool-call[_ngcontent-%COMP%]:hover{background:var(--mat-sys-primary-container);border-color:var(--mat-sys-primary-container);transform:translateY(-1px);box-shadow:0 2px 6px color-mix(in srgb,var(--mat-sys-primary) 30%,transparent)}.gns3-chat-message-list__tool-result[_ngcontent-%COMP%]{border-left:3px solid var(--mat-sys-tertiary)}.gns3-chat-message-list__tool-result[_ngcontent-%COMP%]:hover{background:var(--mat-sys-tertiary-container);border-color:var(--mat-sys-tertiary);transform:translateY(-1px);box-shadow:0 2px 6px color-mix(in srgb,var(--mat-sys-tertiary) 30%,transparent)}.gns3-chat-message-list__tool-icon[_ngcontent-%COMP%]{width:16px;height:16px;font-size:16px}.gns3-chat-message-list__tool-call[_ngcontent-%COMP%] .gns3-chat-message-list__tool-icon[_ngcontent-%COMP%]{color:var(--mat-sys-primary-container)}.gns3-chat-message-list__tool-result[_ngcontent-%COMP%] .gns3-chat-message-list__tool-icon[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary)}.gns3-chat-message-list__tool-name-text[_ngcontent-%COMP%]{font-family:var(--gns3-font-code);font-size:12px;font-weight:500;color:var(--mat-sys-on-surface)}.gns3-chat-message-list__expand-icon[_ngcontent-%COMP%]{width:14px;height:14px;font-size:14px;color:var(--mat-sys-on-surface-variant);opacity:.5}.gns3-chat-message-list__empty-state[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;height:100%;padding:48px var(--gns3-density-space-4)}.gns3-chat-message-list__empty-content[_ngcontent-%COMP%]{text-align:center;max-width:500px}.gns3-chat-message-list__empty-icon-wrapper[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:80px;height:80px;margin:0 auto var(--gns3-density-space-5);background:linear-gradient(135deg,color-mix(in srgb,var(--mat-sys-tertiary) 10%,transparent),color-mix(in srgb,var(--mat-sys-tertiary) 10%,transparent));border-radius:50%;animation:_ngcontent-%COMP%_pulse 2s ease-in-out infinite}@keyframes _ngcontent-%COMP%_pulse{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.05);opacity:.8}}.gns3-chat-message-list__empty-logo[_ngcontent-%COMP%]{width:48px;height:48px;object-fit:contain}.gns3-chat-message-list__empty-title[_ngcontent-%COMP%]{font-size:18px;font-weight:500;color:var(--mat-sys-on-surface);margin:0 0 var(--gns3-density-space-2) 0}.gns3-chat-message-list__empty-description[_ngcontent-%COMP%]{font-size:12px;color:var(--mat-sys-on-surface-variant);margin:0 0 var(--gns3-density-space-5) 0}.gns3-chat-message-list__empty-suggestions[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-space-2);align-items:center}.gns3-chat-message-list__suggestion-chip[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-2);padding:var(--gns3-density-space-2) var(--gns3-density-space-4);background:var(--mat-sys-surface-container-low);border:1px solid var(--mat-sys-outline-variant);border-radius:16px;cursor:pointer;transition:all var(--gns3-motion-duration-standard) ease;max-width:280px;width:100%;justify-content:center}.gns3-chat-message-list__suggestion-chip[_ngcontent-%COMP%]:hover{background:var(--mat-sys-primary-container);border-color:var(--mat-sys-primary);transform:translateY(-2px);box-shadow:0 4px 6px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent)}.gns3-chat-message-list__suggestion-chip[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:18px;height:18px;font-size:18px;color:var(--mat-sys-primary)}.gns3-chat-message-list__suggestion-chip[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:12px;color:var(--mat-sys-on-surface)}.gns3-chat-message-list--auto-scroll[_ngcontent-%COMP%]{scroll-behavior:smooth}@media(prefers-reduced-motion:reduce){.gns3-chat-message-list__empty-icon-wrapper[_ngcontent-%COMP%]{animation:none}}'],changeDetection:0})}return n})();var uOe=["messageInput"],gOe=["menuTrigger"],hOe=(n,o)=>o.config_id;function _Oe(n,o){n&1&&(r(0,"mat-icon",7),c(1,"stop"),l())}function fOe(n,o){n&1&&(r(0,"mat-icon"),c(1,"send"),l())}function vOe(n,o){n&1&&(r(0,"mat-icon",7),c(1,"refresh"),l())}function COe(n,o){if(n&1&&(r(0,"div",12)(1,"span",16),c(2),l(),r(3,"span",17),c(4," / "),l(),r(5,"span",18),c(6),l()()),n&2){let e=h();m(),ne("gns3-chat-input-area__char-count--warning",e.isNearLimit),m(),N(e.message().length),m(4),N(e.maxLength())}}function bOe(n,o){n&1&&(r(0,"span",21),c(1,"Group"),l())}function xOe(n,o){if(n&1){let e=R();r(0,"button",19),_("click",function(){let i=y(e).$implicit,a=h();return w(a.selectModel(i))}),r(1,"mat-icon"),c(2),l(),r(3,"span",20),c(4),l(),T(5,bOe,2,0,"span",21),l()}if(n&2){let e=o.$implicit,t=h();ne("selected",e.config_id===t.currentModelId()),m(2),N(e.config_id===t.currentModelId()?"check_circle":"radio_button_unchecked"),m(2),N(t.getModelDisplayName(e)),m(),E(e.source==="group"?5:-1)}}function yOe(n,o){n&1&&(L(0,"mat-divider"),r(1,"button",22)(2,"mat-icon"),c(3,"error_outline"),l(),r(4,"span"),c(5,"No models configured"),l()())}function wOe(n,o){if(n&1){let e=R();L(0,"mat-divider"),r(1,"div",23)(2,"div",24),c(3,"Copilot Mode"),l(),r(4,"button",25),_("click",function(){y(e);let i=h();return w(i.selectCopilotMode("teaching_assistant"))}),r(5,"mat-icon"),c(6),l(),r(7,"div",26)(8,"span",27),c(9,"Teaching Assistant"),l(),r(10,"span",28),c(11,"Diagnostics only"),l()()(),r(12,"button",25),_("click",function(){y(e);let i=h();return w(i.selectCopilotMode("lab_automation_assistant"))}),r(13,"mat-icon"),c(14),l(),r(15,"div",26)(16,"span",27),c(17,"Lab Automation"),l(),r(18,"span",28),c(19,"Full configuration access"),l()()()()}if(n&2){let e=h();m(4),ne("selected",e.currentCopilotMode()==="teaching_assistant"),m(2),N(e.currentCopilotMode()==="teaching_assistant"?"check_circle":"radio_button_unchecked"),m(6),ne("selected",e.currentCopilotMode()==="lab_automation_assistant"),m(2),N(e.currentCopilotMode()==="lab_automation_assistant"?"check_circle":"radio_button_unchecked")}}var s2=(()=>{class n{placeholder=ee("Message (Ctrl+Enter to send)");disabled=ee(!1);isStreaming=ee(!1);maxLength=ee(4e3);showCharCount=ee(!1);warningThreshold=ee(.9);modelConfigs=ee([]);currentModelId=ee(null);currentCopilotMode=ee("teaching_assistant");messageSent=new be;inputChanged=new be;modelSelected=new be;copilotModeSelected=new be;abortClicked=new be;messageInput=ln.required("messageInput");menuTrigger=ln.required("menuTrigger");message=$("");textareaHeight=48;destroy$=new Ye;previousMessageLength=0;currentTheme="";themeService=f(Ni);cdr=f(oe);overlayContainer=f(WC);constructor(){this.currentTheme=this.themeService.savedTheme}ngOnInit(){setTimeout(()=>{this.adjustTextareaHeight()},0),this.themeService.themeChanged.pipe(He(this.destroy$)).subscribe({next:e=>{this.currentTheme=e;let t=this.menuTrigger();t&&t.menuOpen&&t.closeMenu()},error:e=>{console.error("[ChatInputArea] Theme subscription error:",e)}})}ensureMenuTheme(){requestAnimationFrame(()=>{let e=this.overlayContainer.getContainerElement();e.classList.remove("theme-deeppurple-amber","theme-indigo-pink","theme-magenta-violet","theme-rose-red","theme-pink-bluegrey","theme-purple-green","theme-azure-blue","theme-cyan-orange"),e.classList.add(`theme-${this.currentTheme}`)})}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}get canSend(){return this.message().trim().length>0&&this.message().length<=this.maxLength()}get isNearLimit(){return this.message().length>=this.maxLength()*this.warningThreshold()}handleKeyDown(e){e.key==="Enter"&&(e.ctrlKey||e.metaKey)&&(e.preventDefault(),this.canSend&&!this.disabled()&&this.sendMessage())}onInputChange(e){this.message.set(e),this.inputChanged.emit(this.message()),setTimeout(()=>{this.adjustTextareaHeight()},0)}adjustTextareaHeight(){let e=this.messageInput();if(!e||!e.nativeElement)return;let t=e.nativeElement;t.style.height="auto";let i=t.scrollHeight,a=Math.min(Math.max(i,48),200);this.textareaHeight=a,this.previousMessageLength!==this.message().length&&(t.style.height=`${a}px`,this.previousMessageLength=this.message().length)}sendMessage(){if(this.isStreaming()){this.abortClicked.emit();return}if(!this.canSend||this.disabled())return;let e=this.message().trim();e&&(this.messageSent.emit(e),this.message.set(""),setTimeout(()=>{this.adjustTextareaHeight()},0))}focus(){let e=this.messageInput();e&&e.nativeElement&&e.nativeElement.focus()}clear(){this.message.set(""),setTimeout(()=>{this.adjustTextareaHeight()},0)}getCurrentModelDisplayName(){let e=this.modelConfigs();if(!e||e.length===0)return"Model";let t=e.find(i=>i.config_id===this.currentModelId());return t?vC(t.config.model):vC(e[0].config.model)}getFullModelDisplayName(){let e=this.modelConfigs();if(!e||e.length===0)return"No model configured";let t=e.find(i=>i.config_id===this.currentModelId());return t?o2(t):o2(e[0])}getModelDisplayName(e){return o2(e)}selectModel(e){this.modelSelected.emit(e)}selectCopilotMode(e){this.copilotModeSelected.emit(e)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-chat-input-area"]],viewQuery:function(t,i){t&1&&Bn(i.messageInput,uOe,5)(i.menuTrigger,gOe,5),t&2&&jn(2)},inputs:{placeholder:[1,"placeholder"],disabled:[1,"disabled"],isStreaming:[1,"isStreaming"],maxLength:[1,"maxLength"],showCharCount:[1,"showCharCount"],warningThreshold:[1,"warningThreshold"],modelConfigs:[1,"modelConfigs"],currentModelId:[1,"currentModelId"],currentCopilotMode:[1,"currentCopilotMode"],message:[1,"message"]},outputs:{messageSent:"messageSent",inputChanged:"inputChanged",modelSelected:"modelSelected",copilotModeSelected:"copilotModeSelected",abortClicked:"abortClicked",message:"messageChange"},decls:26,vars:18,consts:[["messageInput",""],["menuTrigger","matMenuTrigger"],["modelMenu","matMenu"],[1,"gns3-chat-input-area"],[1,"gns3-chat-input-area__input-wrapper"],[1,"gns3-chat-input-area__textarea",3,"input","keydown","placeholder","disabled","value","rows","maxLength"],["matRipple","",1,"gns3-chat-input-area__send-button",3,"click","disabled"],[1,"gns3-chat-input-area__loading-spinner"],["matRipple","",1,"gns3-chat-input-area__model-chip",3,"menuOpened","matMenuTriggerFor","disabled","title"],[1,"gns3-chat-input-area__chip-icon"],[1,"gns3-chat-input-area__chip-text"],[1,"gns3-chat-input-area__chip-arrow"],[1,"gns3-chat-input-area__input-footer"],["xPosition","before"],[1,"gns3-chat-input-area__model-menu-header"],["mat-menu-item","",3,"selected"],[1,"gns3-chat-input-area__char-count"],[1,"gns3-chat-input-area__char-separator"],[1,"gns3-chat-input-area__char-max"],["mat-menu-item","",3,"click"],[1,"gns3-chat-input-area__model-name"],[1,"gns3-chat-input-area__model-source"],["mat-menu-item","","disabled",""],[1,"gns3-chat-input-area__copilot-mode-section"],[1,"gns3-chat-input-area__copilot-mode-header"],["mat-menu-item","",1,"gns3-chat-input-area__copilot-mode-item",3,"click"],[1,"gns3-chat-input-area__mode-info"],[1,"gns3-chat-input-area__mode-name"],[1,"gns3-chat-input-area__mode-description"]],template:function(t,i){if(t&1&&(r(0,"div",3)(1,"div",4)(2,"textarea",5,0),_("input",function(s){return i.onInputChange(s.target.value)})("keydown",function(s){return i.handleKeyDown(s)}),l(),r(4,"button",6),_("click",function(){return i.sendMessage()}),T(5,_Oe,2,0,"mat-icon",7)(6,fOe,2,0,"mat-icon")(7,vOe,2,0,"mat-icon",7),l(),r(8,"button",8,1),_("menuOpened",function(){return i.ensureMenuTheme()}),r(10,"mat-icon",9),c(11,"psychology"),l(),r(12,"span",10),c(13),l(),r(14,"mat-icon",11),c(15,"expand_more"),l()()(),T(16,COe,7,4,"div",12),l(),r(17,"mat-menu",13,2)(19,"div",14),c(20,"Select AI Model"),l(),L(21,"mat-divider"),Q(22,xOe,6,5,"button",15,hOe),T(24,yOe,6,0),T(25,wOe,20,6),l()),t&2){let a=Te(18);m(2),Tt("height",i.textareaHeight,"px"),v("placeholder",i.placeholder())("disabled",i.disabled())("value",i.message())("rows",1)("maxLength",i.maxLength()),m(2),ne("gns3-chat-input-area__send-button--abort",i.isStreaming()),v("disabled",(!i.canSend||i.disabled())&&!i.isStreaming()),m(),E(i.isStreaming()?5:i.disabled()?7:6),m(3),v("matMenuTriggerFor",a)("disabled",i.disabled()||!i.modelConfigs()||i.modelConfigs().length===0)("title",i.getFullModelDisplayName()),m(5),N(i.getCurrentModelDisplayName()),m(3),E(i.showCharCount()?16:-1),m(6),K(i.modelConfigs()),m(2),E(!i.modelConfigs()||i.modelConfigs().length===0?24:-1),m(),E(i.modelConfigs()&&i.modelConfigs().length>0?25:-1)}},dependencies:[fe,ie,ce,Oc,um,it,Ko,ut,eo,Ja,fs],styles:['.gns3-chat-input-area[_ngcontent-%COMP%]{display:flex;flex-direction:column;padding:var(--gns3-density-space-4);background:transparent;border-top:1px solid transparent}.gns3-chat-input-area__input-wrapper[_ngcontent-%COMP%]{display:flex;gap:var(--gns3-density-space-3);align-items:center;width:100%}.gns3-chat-input-area__textarea[_ngcontent-%COMP%]{flex:1;min-width:0;min-height:var(--gns3-density-button-height);max-height:200px;padding:var(--gns3-density-space-3) var(--gns3-density-space-4);border:2px solid var(--mat-sys-outline-variant);border-radius:24px;background:transparent;color:var(--mat-sys-on-surface);font-family:inherit;font-size:16px;line-height:1.5;resize:none;outline:none;transition:all var(--gns3-motion-duration-standard) ease;box-sizing:border-box;overflow-y:auto;scrollbar-width:none;-ms-overflow-style:none}.gns3-chat-input-area__textarea[_ngcontent-%COMP%]::-webkit-scrollbar{display:none}.gns3-chat-input-area__textarea[_ngcontent-%COMP%]:focus{border-color:var(--mat-sys-primary);background:var(--mat-sys-surface-container-low);box-shadow:0 0 0 4px color-mix(in srgb,var(--mat-sys-primary) 10%,transparent)}.gns3-chat-input-area__textarea[_ngcontent-%COMP%]:hover{border-color:var(--mat-sys-outline)}.gns3-chat-input-area__textarea[_ngcontent-%COMP%]::placeholder{color:var(--mat-sys-on-surface-variant);opacity:.6}.gns3-chat-input-area__textarea[_ngcontent-%COMP%]:disabled{background-color:var(--mat-sys-surface-container-high);cursor:not-allowed;opacity:.6}.gns3-chat-input-area__model-chip[_ngcontent-%COMP%]{flex-shrink:0;height:var(--gns3-density-control-height-sm);min-width:100px;max-width:200px;padding:0 var(--gns3-density-space-3);border:none;border-radius:18px;background:linear-gradient(135deg,var(--mat-sys-primary),var(--mat-sys-primary-container));color:var(--mat-sys-on-primary);display:flex;align-items:center;gap:6px;cursor:pointer;transition:all var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1);box-shadow:0 2px 8px color-mix(in srgb,var(--mat-sys-primary) 30%,transparent);position:relative;overflow:hidden;font-family:inherit;font-size:13px;font-weight:500}.gns3-chat-input-area__model-chip[_ngcontent-%COMP%]:before{content:"";position:absolute;inset:0;background:linear-gradient(135deg,color-mix(in srgb,var(--mat-sys-on-primary) 20%,transparent),transparent);opacity:0;transition:opacity var(--gns3-motion-duration-standard) ease;border-radius:18px}.gns3-chat-input-area__model-chip[_ngcontent-%COMP%]:hover:not(:disabled){box-shadow:0 4px 12px color-mix(in srgb,var(--mat-sys-primary) 50%,transparent);background:linear-gradient(135deg,var(--mat-sys-primary),color-mix(in srgb,var(--mat-sys-primary-container) 80%,black));transform:translateY(-1px)}.gns3-chat-input-area__model-chip[_ngcontent-%COMP%]:hover:not(:disabled):before{opacity:1}.gns3-chat-input-area__model-chip[_ngcontent-%COMP%]:active:not(:disabled){transform:translateY(0);box-shadow:0 2px 6px color-mix(in srgb,var(--mat-sys-primary) 30%,transparent)}.gns3-chat-input-area__model-chip[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed;transform:none}.gns3-chat-input-area__chip-icon[_ngcontent-%COMP%]{width:16px;height:16px;font-size:16px;color:var(--mat-sys-on-primary);flex-shrink:0}.gns3-chat-input-area__chip-text[_ngcontent-%COMP%]{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--mat-sys-on-primary);line-height:1}.gns3-chat-input-area__chip-arrow[_ngcontent-%COMP%]{width:18px;height:18px;font-size:18px;color:var(--mat-sys-on-primary);flex-shrink:0}.gns3-chat-input-area__send-button[_ngcontent-%COMP%]{flex-shrink:0;width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border:none;border-radius:50%;background:linear-gradient(135deg,var(--mat-sys-primary),var(--mat-sys-tertiary));color:var(--mat-sys-on-primary);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1);box-shadow:0 4px 12px color-mix(in srgb,var(--mat-sys-tertiary) 30%,transparent);position:relative;overflow:hidden}.gns3-chat-input-area__send-button[_ngcontent-%COMP%]:before{content:"";position:absolute;inset:0;background:linear-gradient(135deg,color-mix(in srgb,var(--mat-sys-on-surface) 20%,transparent),transparent);opacity:0;transition:opacity var(--gns3-motion-duration-standard) ease;border-radius:50%}.gns3-chat-input-area__send-button[_ngcontent-%COMP%]:hover:not(:disabled){transform:scale(1.15);box-shadow:0 8px 24px color-mix(in srgb,var(--mat-sys-tertiary) 50%,transparent);background:linear-gradient(135deg,var(--mat-sys-tertiary),color-mix(in srgb,var(--mat-sys-tertiary) 80%,black))}.gns3-chat-input-area__send-button[_ngcontent-%COMP%]:hover:not(:disabled):before{opacity:1}.gns3-chat-input-area__send-button[_ngcontent-%COMP%]:active:not(:disabled){transform:scale(1.05);box-shadow:0 4px 12px color-mix(in srgb,var(--mat-sys-tertiary) 30%,transparent)}.gns3-chat-input-area__send-button[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed;transform:none}.gns3-chat-input-area__send-button--abort[_ngcontent-%COMP%]:not(:disabled){background:linear-gradient(135deg,var(--mat-sys-error),var(--mat-sys-error-container));box-shadow:0 4px 12px color-mix(in srgb,var(--mat-sys-error) 30%,transparent)}.gns3-chat-input-area__send-button--abort[_ngcontent-%COMP%]:not(:disabled):hover{box-shadow:0 8px 24px color-mix(in srgb,var(--mat-sys-error) 50%,transparent);background:linear-gradient(135deg,var(--mat-sys-error),color-mix(in srgb,var(--mat-sys-error) 80%,black))}.gns3-chat-input-area__send-button--abort[_ngcontent-%COMP%]:not(:disabled):active{box-shadow:0 4px 12px color-mix(in srgb,var(--mat-sys-error) 30%,transparent)}.gns3-chat-input-area__send-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:20px;height:20px;font-size:20px;color:var(--mat-sys-on-primary)}.gns3-chat-input-area__loading-spinner[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_spin 1s linear infinite}@keyframes _ngcontent-%COMP%_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.gns3-chat-input-area__input-footer[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;align-items:center;margin-top:var(--gns3-density-space-2);padding:0 4px}.gns3-chat-input-area__char-count[_ngcontent-%COMP%]{font-size:11px;font-weight:500;color:var(--mat-sys-on-surface-variant);transition:color var(--gns3-motion-duration-standard) ease}.gns3-chat-input-area__char-count--warning[_ngcontent-%COMP%]{color:var(--mat-sys-error)}.gns3-chat-input-area__char-separator[_ngcontent-%COMP%], .gns3-chat-input-area__char-max[_ngcontent-%COMP%]{font-size:11px;color:var(--mat-sys-on-surface-variant);opacity:.7;margin:0 2px}.gns3-chat-input-area__model-menu-header[_ngcontent-%COMP%]{padding:12px 16px;font-size:14px;font-weight:500;color:var(--mat-sys-on-surface-variant)}.gns3-chat-input-area__model-name[_ngcontent-%COMP%]{flex:1;font-size:14px}.gns3-chat-input-area__model-source[_ngcontent-%COMP%]{font-size:11px;color:var(--mat-sys-primary);background:color-mix(in srgb,var(--mat-sys-primary) 10%,transparent);padding:2px 8px;border-radius:12px;margin-left:8px}.gns3-chat-input-area__model-menu-item.selected[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--mat-sys-primary) 10%,transparent)}.gns3-chat-input-area__copilot-mode-section[_ngcontent-%COMP%]{padding:0}.gns3-chat-input-area__copilot-mode-header[_ngcontent-%COMP%]{padding:12px 16px 8px;font-size:12px;font-weight:500;color:var(--mat-sys-on-surface-variant);letter-spacing:.5px}.gns3-chat-input-area__copilot-mode-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;padding:8px 16px;min-height:48px}.gns3-chat-input-area__copilot-mode-item[_ngcontent-%COMP%] .gns3-chat-input-area__mode-info[_ngcontent-%COMP%]{display:flex;flex-direction:column}.gns3-chat-input-area__mode-name[_ngcontent-%COMP%]{font-size:14px;font-weight:500;color:var(--mat-sys-on-surface)}.gns3-chat-input-area__mode-description[_ngcontent-%COMP%]{font-size:11px;color:var(--mat-sys-on-surface-variant);opacity:.8;line-height:1.2;margin-top:1px}'],changeDetection:0})}return n})();var MOe=()=>({top:!0}),SOe=()=>({right:!0}),kOe=()=>({bottom:!0}),POe=()=>({left:!0}),TOe=()=>({top:!0,left:!0}),EOe=()=>({top:!0,right:!0}),OOe=()=>({bottom:!0,left:!0}),DOe=()=>({bottom:!0,right:!0});function IOe(n,o){if(n&1){let e=R();r(0,"div",2),_("mousemove",function(i){y(e);let a=h();return w(a.dragWidget(i))},lm)("mouseup",function(){y(e);let i=h();return w(i.toggleDragging(!1))},lm),l()}}function AOe(n,o){n&1&&L(0,"div",3)(1,"div",4)(2,"div",5)(3,"div",6)(4,"div",7)(5,"div",8)(6,"div",9)(7,"div",10),n&2&&(v("resizeEdges",at(8,MOe)),m(),v("resizeEdges",at(9,SOe)),m(),v("resizeEdges",at(10,kOe)),m(),v("resizeEdges",at(11,POe)),m(),v("resizeEdges",at(12,TOe)),m(),v("resizeEdges",at(13,EOe)),m(),v("resizeEdges",at(14,OOe)),m(),v("resizeEdges",at(15,DOe)))}function NOe(n,o){n&1&&(r(0,"span",15),c(1,"Assistant"),l())}function FOe(n,o){if(n&1){let e=R();r(0,"div",16)(1,"button",33),_("click",function(){y(e);let i=h(2);return w(i.onSessionCreated())}),r(2,"mat-icon"),c(3,"add"),l()()()}}function ROe(n,o){if(n&1){let e=R();r(0,"div",16)(1,"app-chat-session-list",34),_("sessionSelected",function(i){y(e);let a=h(2);return w(a.onSessionSelected(i))})("sessionCreated",function(){y(e);let i=h(2);return w(i.onSessionCreated())})("sessionRenamed",function(i){y(e);let a=h(2);return w(a.onSessionRenamed(i))})("sessionDeleted",function(i){y(e);let a=h(2);return w(a.onSessionDeleted(i))})("sessionPinned",function(i){y(e);let a=h(2);return w(a.onSessionPinned(i))})("sessionUnpinned",function(i){y(e);let a=h(2);return w(a.onSessionUnpinned(i))}),l()()}if(n&2){let e=h(2);m(),v("sessions",e.sessions)("currentSessionId",e.currentSessionId)("controller",e.controller)("projectId",e.project().project_id)}}function zOe(n,o){n&1&&(Mi(),L(0,"path",25))}function LOe(n,o){n&1&&(Mi(),L(0,"path",26))}function VOe(n,o){if(n&1){let e=R();r(0,"div",11)(1,"div",12)(2,"h3",13),_("mousedown",function(i){return i.stopPropagation()})("click",function(){y(e);let i=h();return w(i.toggleSidebar())}),r(3,"span",14),c(4,"AI"),l(),T(5,NOe,2,0,"span",15),l()(),T(6,FOe,4,0,"div",16),T(7,ROe,2,4,"div",16),l(),r(8,"div",17)(9,"div",18),_("mousedown",function(){y(e);let i=h();return w(!i.isMaximized&&i.toggleDragging(!0))}),r(10,"div",19)(11,"span"),c(12),l()(),r(13,"div",20)(14,"button",21),_("mousedown",function(i){return i.stopPropagation()})("click",function(i){y(e);let a=h();return i.stopPropagation(),w(a.minimizeChat())}),Mi(),r(15,"svg",22),L(16,"path",23),l()(),Xa(),r(17,"button",24),_("mousedown",function(i){return i.stopPropagation()})("click",function(i){y(e);let a=h();return i.stopPropagation(),w(a.maximizeChat())}),Mi(),r(18,"svg",22),T(19,zOe,1,0,":svg:path",25),T(20,LOe,1,0,":svg:path",26),l()(),Xa(),r(21,"button",27),_("mousedown",function(i){return i.stopPropagation()})("click",function(i){y(e);let a=h();return i.stopPropagation(),w(a.closeChat())}),Mi(),r(22,"svg",22),L(23,"path",28),l()()()(),Xa(),r(24,"div",29)(25,"app-chat-message-list",30),_("scrollToEnd",function(){y(e);let i=h();return w(i.onScrollToEnd())})("suggestionClicked",function(i){y(e);let a=h();return w(a.onSuggestionClicked(i))}),l()(),r(26,"div",31)(27,"app-chat-input-area",32),_("messageSent",function(i){y(e);let a=h();return w(a.onMessageSent(i))})("modelSelected",function(i){y(e);let a=h();return w(a.onModelSelected(i))})("copilotModeSelected",function(i){y(e);let a=h();return w(a.onCopilotModeSelected(i))})("abortClicked",function(){y(e);let i=h();return w(i.onAbortClicked())}),l()()()}if(n&2){let e=h();ne("gns3-ai-chat__sidebar--collapsed",e.sidebarCollapsed),m(2),ne("gns3-ai-chat__sidebar-title--clickable",!0),m(3),E(e.sidebarCollapsed?-1:5),m(),E(e.sidebarCollapsed?6:-1),m(),E(e.sidebarCollapsed?-1:7),m(5),N(e.currentSessionTitle),m(7),E(e.isMaximized?-1:19),m(),E(e.isMaximized?20:-1),m(5),v("messages",e.currentMessages)("isStreaming",e.isStreaming),m(2),v("disabled",e.isStreaming)("isStreaming",e.isStreaming)("modelConfigs",e.modelConfigs)("currentModelId",e.currentModelId)("currentCopilotMode",e.currentCopilotMode)}}var l2=(()=>{class n{static TOOLBAR_HEIGHT_DESKTOP=64;static TOOLBAR_HEIGHT_MOBILE=56;static MOBILE_BREAKPOINT=768;static MIN_PANEL_WIDTH=500;static MIN_PANEL_HEIGHT=400;project=ee.required();controller;zIndex=ee(1e3);closed=new be;windowFocused=new be;sidebarCollapsed=!0;isStreaming=!1;isDraggingEnabled=!1;isMaximized=!1;isMinimized=!1;style={};previousStyle={};resizedWidth=0;resizedHeight=0;sessions=[];currentSessionId=null;currentMessages=[];modelConfigs=[];currentModelId=null;currentCopilotMode="teaching_assistant";isLoadingModels=!1;currentToolCalls=new Map;currentAssistantMessage=null;destroy$=new Ye;saveStateTimer=null;dragRafId=null;aiChatService=f(hg);controllerService=f(_t);aiProfilesService=f(A_);loginService=f(Ol);aiChatStore=f(D_);toasterService=f(re);cdr=f(oe);boundaryService=f(Ql);constructor(){}logError(...e){console.error("[AI Chat Error]",...e)}ngOnInit(){let e=window.innerWidth<=n.MOBILE_BREAKPOINT?n.TOOLBAR_HEIGHT_MOBILE:n.TOOLBAR_HEIGHT_DESKTOP;this.boundaryService.setConfig({topOffset:e}),this.initializeChat(),this.subscribeToStateChanges()}ngOnChanges(e){(e.project||e.controller)&&this.initializeChat()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete(),this.cleanup()}onWindowResize(){this.isMinimized||this.isMaximized||(this.style=this.boundaryService.constrainWindowPosition(this.style),this.cdr.markForCheck())}initializeChat(){let e=this.project();!e||!this.controller||(this.aiChatService.resetCurrentSession(),this.aiChatStore.setCurrentProjectId(e.project_id),this.loadPanelState(),this.loadSessions(),this.loadModelConfigs())}loadPanelState(){let e=this.aiChatStore.getPanelStateValue();this.isMaximized=e.isMaximized||!1,this.isMinimized=e.isMinimized||!1;let t=e.width||800,i=e.height||900,a=e.position;this.style={position:"fixed",top:a?.top!==void 0?`${a.top}px`:"80px",right:a?.right!==void 0?`${a.right}px`:void 0,left:a?.left!==void 0?`${a.left}px`:void 0,width:`${t}px`,height:`${i}px`},this.previousStyle=q({},this.style),this.resizedWidth=t,this.resizedHeight=i,this.isMaximized?this.applyMaximizedStyle():this.isMinimized&&this.applyMinimizedStyle()}subscribeToStateChanges(){this.aiChatStore.getSessions().pipe(He(this.destroy$)).subscribe({next:e=>{this.sessions=e,this.cdr.markForCheck()},error:e=>{this.logError("Failed to subscribe to sessions:",e),this.showError(e||"Failed to load sessions")}}),this.aiChatStore.getCurrentSessionId().pipe(He(this.destroy$)).subscribe({next:e=>{this.currentSessionId=e,e&&!this.isStreaming&&this.loadSessionMessages(e),this.cdr.markForCheck()},error:e=>{this.logError("Failed to subscribe to current session:",e)}}),this.aiChatStore.getStreamingState().pipe(He(this.destroy$)).subscribe({next:e=>{this.isStreaming=e,this.cdr.markForCheck()},error:e=>{this.logError("Failed to subscribe to streaming state:",e)}}),this.aiChatStore.getPanelState().pipe(He(this.destroy$)).subscribe({next:e=>{let t=this.isMinimized,i=this.isMaximized;if(this.isMinimized=e.isMinimized,this.isMaximized=e.isMaximized,t&&!e.isMinimized?(Object.keys(this.previousStyle).length>0&&(this.style=q({},this.previousStyle)),this.cdr.markForCheck()):!t&&e.isMinimized&&(this.previousStyle=q({},this.style),this.style={position:"fixed",left:"-9999px",top:"-9999px",width:"0px",height:"0px"},this.cdr.markForCheck()),i&&!e.isMaximized&&!e.isMinimized){if(Object.keys(this.previousStyle).length>0){let a=this.boundaryService.constrainWindowPosition(this.previousStyle);this.style=a;let s=a.width,d=a.height;s&&(this.resizedWidth=Number(s.split("px")[0])),d&&(this.resizedHeight=Number(d.split("px")[0]))}this.cdr.markForCheck()}},error:e=>{this.logError("Failed to subscribe to panel state:",e)}})}loadSessions(){this.controller&&this.controllerService.get(this.controller.id).then(e=>{this.controller=e,this.aiChatService.getSessions(this.controller,this.project().project_id).pipe(Qn(t=>{this.aiChatStore.setSessions(t)}),He(this.destroy$)).subscribe({error:t=>{this.logError("Failed to load sessions:",t),this.showError(t||"Failed to load sessions")}})})}loadSessionMessages(e){this.controller&&this.controllerService.get(this.controller.id).then(t=>{this.controller=t,this.aiChatService.getSessionHistory(this.controller,this.project().project_id,e).pipe(Qn(i=>{let a=this.convertLegacyToolMessages(i.messages);this.aiChatStore.setMessages(e,a),this.currentMessages=a,this.cdr.markForCheck()}),He(this.destroy$)).subscribe({error:i=>{this.logError("Failed to load session history:",i),this.showError("Failed to load session history")}})})}onSessionSelected(e){this.aiChatStore.setCurrentSessionId(e)}onSessionCreated(){this.aiChatStore.setCurrentSessionId(null),this.aiChatService.resetCurrentSession(),this.currentMessages=[],this.currentToolCalls.clear(),this.cdr.markForCheck()}onSessionRenamed(e){this.controller&&this.controllerService.get(this.controller.id).then(t=>{this.controller=t,this.aiChatService.renameSession(this.controller,this.project().project_id,e.sessionId,e.title).pipe(Qn(i=>{this.aiChatStore.updateSession(i)}),He(this.destroy$)).subscribe({error:i=>{this.logError("Failed to rename session:",i),this.showError("Failed to rename session")}})})}onSessionDeleted(e){this.aiChatStore.deleteSession(e),this.currentSessionId===e&&(this.currentSessionId=null)}onSessionPinned(e){this.controller&&this.controllerService.get(this.controller.id).then(t=>{this.controller=t,this.aiChatService.pinSession(this.controller,this.project().project_id,e).pipe(Qn(i=>{this.aiChatStore.updateSession(i)}),He(this.destroy$)).subscribe({error:i=>{this.logError("Failed to pin session:",i),this.showError("Failed to pin session")}})})}onSessionUnpinned(e){this.controller&&this.controllerService.get(this.controller.id).then(t=>{this.controller=t,this.aiChatService.unpinSession(this.controller,this.project().project_id,e).pipe(Qn(i=>{this.aiChatStore.updateSession(i)}),He(this.destroy$)).subscribe({error:i=>{this.logError("Failed to unpin session:",i),this.showError("Failed to unpin session")}})})}onMessageSent(e){if(!this.controller||this.isStreaming)return;let t={id:this.generateMessageId(),role:"user",content:e,created_at:new Date().toISOString()},i=[...this.currentMessages,t];this.currentMessages=i;let a=this.currentSessionId||this.aiChatService.getCurrentSessionId();a?(this.isStreaming=!0,this.aiChatStore.setStreamingState(!0)):(a=this.generateUUID(),this.isStreaming=!0,this.aiChatStore.setStreamingState(!0),this.aiChatStore.setCurrentSessionId(a)),this.aiChatStore.addMessage(a,t),this.cdr.markForCheck(),this.startChatStream(e,a)}startChatStream(e,t){this.controller&&(this.currentAssistantMessage=null,this.controllerService.get(this.controller.id).then(i=>{this.controller=i,this.aiChatStore.setStreamingState(!0),this.aiChatStore.clearError(),this.aiChatService.streamChat(this.controller,this.project().project_id,{message:e,session_id:t,stream:!0}).pipe(He(this.destroy$)).subscribe({next:a=>{this.handleChatEvent(a)},error:a=>{this.logError("Chat stream error:",a),this.aiChatStore.setStreamingState(!1),this.showError(a||"Chat error occurred")},complete:()=>{this.aiChatStore.setStreamingState(!1),this.currentToolCalls.clear(),this.currentAssistantMessage=null}})}).catch(i=>{this.logError("Failed to get fresh controller:",i),this.showError("Failed to authenticate")}))}handleChatEvent(e){switch(e.type){case"content":this.handleContentEvent(e);break;case"tool_call":this.handleToolCallEvent(e);break;case"tool_start":this.handleToolStartEvent(e);break;case"tool_end":this.handleToolEndEvent(e);break;case"error":this.showError(e.error||"An error occurred");break;case"done":this.loadSessions();break}}handleContentEvent(e){this.currentAssistantMessage?(this.currentAssistantMessage.content+=e.content||"",this.currentMessages=[...this.currentMessages],this.cdr.markForCheck()):(this.currentAssistantMessage={id:e.message_id||this.generateMessageId(),role:"assistant",content:e.content||"",created_at:new Date().toISOString()},this.currentMessages=[...this.currentMessages,this.currentAssistantMessage],this.cdr.markForCheck())}handleToolCallEvent(e){if(!e.tool_call)return;let t=e.tool_call;this.currentToolCalls.set(t.id,t),this.currentAssistantMessage||(this.currentAssistantMessage={id:e.message_id||this.generateMessageId(),role:"assistant",content:"",created_at:new Date().toISOString(),tool_calls:[]},this.currentMessages=[...this.currentMessages,this.currentAssistantMessage]),this.currentAssistantMessage.tool_calls||(this.currentAssistantMessage.tool_calls=[]);let i=this.currentAssistantMessage.tool_calls.find(a=>a.id===t.id);i?(i.function.arguments=t.function.arguments,i.function.complete=t.function.complete):this.currentAssistantMessage.tool_calls.push(q({},t)),this.aiChatStore.addOrUpdateToolCall(t),this.cdr.markForCheck()}handleToolStartEvent(e){if(e.tool_call_id&&this.currentAssistantMessage?.tool_calls){let t=this.currentAssistantMessage.tool_calls.find(i=>i.id===e.tool_call_id);t&&(t.isExecuting=!0,this.currentMessages=[...this.currentMessages],this.cdr.markForCheck())}}handleToolEndEvent(e){let t=null;if(e.tool_call_id)for(let i=this.currentMessages.length-1;i>=0;i--){let a=this.currentMessages[i];if(a.role==="assistant"&&a.tool_calls&&a.tool_calls.find(d=>d.id===e.tool_call_id)){t=a;break}}if(t||(t=this.currentAssistantMessage),t)t.tool_result||(t.tool_result=[]),t.tool_result.push({toolName:e.tool_name||"",toolOutput:e.tool_output||"",tool_call_id:e.tool_call_id}),this.currentMessages=[...this.currentMessages],this.cdr.markForCheck(),this.currentAssistantMessage=null;else{let i={id:this.generateMessageId(),role:"assistant",content:"",created_at:new Date().toISOString(),tool_result:[{toolName:e.tool_name||"",toolOutput:e.tool_output||"",tool_call_id:e.tool_call_id}]};this.currentMessages=[...this.currentMessages,i]}this.cdr.markForCheck()}get currentSessionTitle(){return this.sessions.find(t=>t.thread_id===this.currentSessionId)?.title||"New chat"}toggleSidebar(){this.sidebarCollapsed=!this.sidebarCollapsed}closeChat(){this.aiChatStore.closePanel(),this.cleanup(),this.closed.emit()}onWindowFocus(){this.windowFocused.emit()}maximizeChat(){if(this.isMaximized){this.restoreChat();return}this.previousStyle=q({},this.style),this.isMaximized=!0,this.isMinimized=!1,this.aiChatStore.maximizePanel(),this.applyMaximizedStyle()}minimizeChat(){if(this.isMinimized){this.restoreChat();return}this.previousStyle=q({},this.style),this.isMaximized=!1,this.aiChatStore.minimizePanel()}restoreChat(){this.aiChatStore.restorePanel()}applyMaximizedStyle(){this.style={position:"fixed",top:"0",right:"0",left:"0",width:"100vw",height:"100vh"}}applyMinimizedStyle(){this.style={position:"fixed",left:"-9999px",top:"-9999px",width:"0px",height:"0px"}}onScrollToEnd(){}onSuggestionClicked(e){this.onMessageSent(e)}showError(e){let t;typeof e=="string"?t=e:e.error?.message?t=e.error.message:e.message?t=e.message:e.statusText?t=e.statusText:t="An unknown error occurred";let i=300,a=t;a.length>i&&(a=a.substring(0,i)+"..."),this.aiChatStore.setError(t);let s=this.parseErrorMessage(a);this.toasterService.error(s)}parseErrorMessage(e){if(!e)return"An unknown error occurred";let t=e.match(/Error code:\s*(\d+)\s*-\s*{.*?['"]message['"]:\s*['"]([^'"]+)['"]/);if(t){let s=t[1],d=t[2];return{401:"Authentication failed. Please check your API key or login again.",403:"Access denied. You don't have permission to perform this action.",404:"Resource not found. The requested resource may have been deleted.",429:"Too many requests. Please wait a moment and try again.",500:"Server error. Please try again later.",503:"Service temporarily unavailable. Please try again later."}[s]||d}if(e.includes("{")&&e.includes("}"))try{let s=JSON.parse(e.replace(/'/g,'"'));if(s.error?.message)return this.parseErrorMessage(s.error.message)}catch{}let i=e.match(/Error code:\s*(\d+)\s*-\s*(.+)/);if(i){let s=i[1],d=i[2];return`Error (${s}): ${d}`}let a={AuthenticationError:"Authentication failed. Please check your credentials.",PermissionDenied:"You don't have permission to access this resource.",ConnectionError:"Failed to connect to the server. Please check your network.",TimeoutError:"Request timed out. Please try again.",ValidationError:"Invalid input. Please check your data and try again."};for(let[s,d]of Object.entries(a))if(e.includes(s))return d;return e}clearError(){this.aiChatStore.clearError()}generateMessageId(){let e=new Uint8Array(4);if(typeof crypto<"u"&&crypto.getRandomValues)crypto.getRandomValues(e);else for(let i=0;i<e.length;i++)e[i]=Math.floor(Math.random()*256);let t=Array.from(e,i=>i.toString(16).padStart(2,"0")).join("");return`msg_${Date.now()}_${t}`}convertLegacyToolMessages(e){let t=[],i=-1;for(let a of e)if(a.role==="tool")if(i>=0){let s=t[i];s.tool_result||(s.tool_result=[]),s.tool_result.push({toolName:a.name||"",toolOutput:a.content||"",tool_call_id:a.tool_call_id})}else{let s={id:this.generateMessageId(),role:"assistant",content:"",created_at:a.created_at,tool_result:[{toolName:a.name||"",toolOutput:a.content||"",tool_call_id:a.tool_call_id}]};t.push(s),i=t.length-1}else t.push(q({},a)),a.role==="assistant"&&(i=t.length-1);return t}generateUUID(){let e=new Uint8Array(16);if(typeof crypto<"u"&&crypto.getRandomValues)crypto.getRandomValues(e);else for(let i=0;i<e.length;i++)e[i]=Math.floor(Math.random()*256);e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=Array.from(e,i=>i.toString(16).padStart(2,"0")).join("");return[t.substring(0,8),t.substring(8,12),t.substring(12,16),t.substring(16,20),t.substring(20,32)].join("-")}toggleDragging(e){this.isDraggingEnabled=e,e||this.debouncedSavePanelState()}dragWidget(e){this.dragRafId!==null&&cancelAnimationFrame(this.dragRafId),this.dragRafId=requestAnimationFrame(()=>{this.style=this.boundaryService.constrainDragPosition(this.style,e.movementX,e.movementY),this.cdr.markForCheck()})}validate(e){return!(e.rectangle.width&&e.rectangle.height&&(e.rectangle.width<n.MIN_PANEL_WIDTH||e.rectangle.height<n.MIN_PANEL_HEIGHT))}onResizeEnd(e){let t=this.boundaryService.constrainResizeSize(e.rectangle.width||this.resizedWidth,e.rectangle.height||this.resizedHeight,e.rectangle.left,e.rectangle.top),i=this.style.left!==void 0,a={position:"fixed",top:t.top!==void 0?`${t.top}px`:this.style.top};if(i)a.left=t.left!==void 0?`${t.left}px`:this.style.left;else{let s=window.innerWidth-(t.left||0)-t.width;a.right=`${s}px`}this.style=ze(q({},a),{width:`${t.width}px`,height:`${t.height}px`}),this.resizedWidth=t.width,this.resizedHeight=t.height,this.debouncedSavePanelState()}debouncedSavePanelState(){this.saveStateTimer&&clearTimeout(this.saveStateTimer),this.saveStateTimer=setTimeout(()=>{let e=Number(this.style.top?.split("px")[0]),t=Number(this.style.right?.split("px")[0]),i=Number(this.style.width?.split("px")[0]),a=Number(this.style.height?.split("px")[0]);!isNaN(i)&&!isNaN(a)&&this.aiChatStore.updatePanelSize(i,a),!isNaN(e)&&!isNaN(t)&&this.aiChatStore.updatePanelPosition({top:e,right:t})},300)}cleanup(){this.aiChatStore.resetSessionState(),this.saveStateTimer&&(clearTimeout(this.saveStateTimer),this.saveStateTimer=null),this.dragRafId!==null&&(cancelAnimationFrame(this.dragRafId),this.dragRafId=null)}loadModelConfigs(){this.controller&&(this.isLoadingModels=!0,this.cdr.markForCheck(),this.loginService.getLoggedUser(this.controller).then(e=>{if(!e){this.isLoadingModels=!1,this.cdr.markForCheck();return}this.aiProfilesService.getConfigs(this.controller,e.user_id).pipe(He(this.destroy$)).subscribe({next:t=>{this.modelConfigs=t.configs||[],this.currentModelId=t.default_config?.config_id||null,this.currentCopilotMode=t.default_config?.config?.copilot_mode||"teaching_assistant",this.isLoadingModels=!1,this.cdr.markForCheck()},error:t=>{this.logError("Failed to load model configs:",t),this.modelConfigs=[],this.currentModelId=null,this.isLoadingModels=!1,this.cdr.markForCheck()}})}).catch(e=>{this.logError("Failed to get logged user:",e),this.isLoadingModels=!1,this.cdr.markForCheck()}))}onModelSelected(e){this.controller&&this.loginService.getLoggedUser(this.controller).then(t=>{if(!t){this.showError("Failed to get user information");return}this.aiProfilesService.setDefaultConfig(this.controller,t.user_id,e.config_id).pipe(He(this.destroy$)).subscribe({next:i=>{this.currentModelId=i.config_id,this.currentCopilotMode=i.config?.copilot_mode||"teaching_assistant",this.cdr.markForCheck();let a=vC(e.config.model);this.toasterService.success(`Switched to ${a}`)},error:i=>{this.logError("Failed to set default model:",i),this.showError("Failed to switch model")}})}).catch(t=>{this.logError("Failed to get logged user:",t),this.showError("Failed to get user information")})}onCopilotModeSelected(e){!this.controller||!this.currentModelId||this.loginService.getLoggedUser(this.controller).then(t=>{if(!t){this.showError("Failed to get user information");return}this.aiProfilesService.updateConfig(this.controller,t.user_id,this.currentModelId,{copilot_mode:e}).pipe(He(this.destroy$)).subscribe({next:i=>{this.currentCopilotMode=i.config?.copilot_mode||"teaching_assistant",this.cdr.markForCheck();let a=e==="teaching_assistant"?"Teaching Assistant":"Lab Automation";this.toasterService.success(`Switched to ${a} mode`)},error:i=>{this.logError("Failed to update copilot mode:",i),this.showError("Failed to switch copilot mode")}})}).catch(t=>{this.logError("Failed to get logged user:",t),this.showError("Failed to get user information")})}onAbortClicked(){if(!this.controller||!this.isStreaming)return;let e=this.currentSessionId||this.aiChatService.getCurrentSessionId();if(!e){this.logError("No session ID to abort");return}this.controllerService.get(this.controller.id).then(t=>{this.controller=t,this.aiChatService.abortChat(this.controller,this.project().project_id,e).pipe(He(this.destroy$)).subscribe({next:()=>{this.logError("Chat aborted successfully")},error:i=>{this.logError("Failed to abort chat:",i),this.showError("Failed to abort chat")}})})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-ai-chat"]],hostBindings:function(t,i){t&1&&_("resize",function(){return i.onWindowResize()},So)},inputs:{project:[1,"project"],controller:"controller",zIndex:[1,"zIndex"]},outputs:{closed:"closed",windowFocused:"windowFocused"},features:[Nn],decls:4,vars:12,consts:[[1,"gns3-ai-chat__drag-overlay"],["mwlResizable","",1,"gns3-ai-chat",3,"mousedown","resizeStart","resizeEnd","ngStyle","validateResize","enableGhostResize"],[1,"gns3-ai-chat__drag-overlay",3,"mousemove","mouseup"],["mwlResizeHandle","",1,"resize-handle","resize-handle-top",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-right",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-bottom",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-left",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-top-left",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-top-right",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-bottom-left",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-bottom-right",3,"resizeEdges"],[1,"gns3-ai-chat__sidebar"],[1,"gns3-ai-chat__sidebar-header"],["title","Click to toggle sidebar",1,"gns3-ai-chat__sidebar-title",3,"mousedown","click"],[1,"gns3-ai-chat__logo"],[1,"sidebar-text"],[1,"gns3-ai-chat__sidebar-content"],[1,"gns3-ai-chat__main"],[1,"gns3-ai-chat__header",3,"mousedown"],[1,"gns3-ai-chat__title"],[1,"gns3-ai-chat__header-actions"],["mat-icon-button","",1,"minimize-button",3,"mousedown","click"],["xmlns","http://www.w3.org/2000/svg","height","20","width","20","viewBox","0 0 24 24",1,"gns3-ai-chat__header-icon"],["d","M19 13H5v-2h14v2z"],["mat-icon-button","",1,"maximize-button",3,"mousedown","click"],["d","M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"],["d","M5 5h14v14H5z"],["mat-icon-button","",1,"close-button",3,"mousedown","click"],["d","M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"],[1,"gns3-ai-chat__messages"],[3,"scrollToEnd","suggestionClicked","messages","isStreaming"],[1,"gns3-ai-chat__input"],[3,"messageSent","modelSelected","copilotModeSelected","abortClicked","disabled","isStreaming","modelConfigs","currentModelId","currentCopilotMode"],["mat-icon-button","",1,"gns3-ai-chat__new-chat-btn",3,"click"],[3,"sessionSelected","sessionCreated","sessionRenamed","sessionDeleted","sessionPinned","sessionUnpinned","sessions","currentSessionId","controller","projectId"]],template:function(t,i){t&1&&(T(0,IOe,1,0,"div",0),r(1,"div",1),_("mousedown",function(){return i.onWindowFocus()})("resizeStart",function(){return i.toggleDragging(!1)})("resizeEnd",function(s){return i.onResizeEnd(s)}),T(2,AOe,8,16),T(3,VOe,28,17),l()),t&2&&(E(i.isDraggingEnabled&&!i.isMaximized&&!i.isMinimized?0:-1),m(),Tt("z-index",i.zIndex()),ne("gns3-ai-chat--maximized",i.isMaximized)("gns3-ai-chat--minimized",i.isMinimized),v("ngStyle",i.style)("validateResize",i.validate)("enableGhostResize",!0),m(),E(i.isMinimized?-1:2),m(),E(i.isMinimized?-1:3))},dependencies:[fe,ll,er,tr,ie,ce,Y,Be,a2,r2,s2],styles:['.gns3-ai-chat[_ngcontent-%COMP%]{position:fixed;background-color:var(--mat-sys-surface-container-low);border-radius:16px;overflow:hidden;display:flex;z-index:1000;color:var(--mat-sys-on-surface);border:1px solid var(--mat-sys-outline-variant);transition:box-shadow var(--gns3-motion-duration-standard) ease,border-color var(--gns3-motion-duration-standard) ease}.gns3-ai-chat[_ngcontent-%COMP%]:before{content:"";position:absolute;inset:0;border-radius:16px;padding:1px;background:linear-gradient(135deg,color-mix(in srgb,var(--mat-sys-primary) 40%,transparent),color-mix(in srgb,var(--mat-sys-primary) 20%,transparent),color-mix(in srgb,var(--mat-sys-primary) 40%,transparent));-webkit-mask:linear-gradient(var(--mat-sys-on-surface) 0 0) content-box,linear-gradient(var(--mat-sys-on-surface) 0 0);mask:linear-gradient(var(--mat-sys-on-surface) 0 0) content-box,linear-gradient(var(--mat-sys-on-surface) 0 0);-webkit-mask-composite:xor;mask-composite:exclude;pointer-events:none;opacity:.8;transition:opacity var(--gns3-motion-duration-standard) ease}.gns3-ai-chat[_ngcontent-%COMP%]:hover:before{opacity:1}.gns3-ai-chat--minimized[_ngcontent-%COMP%]{border-radius:50%;border:none;box-shadow:0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 20%,transparent),0 0 8px var(--mat-sys-primary);backdrop-filter:none}.gns3-ai-chat--minimized[_ngcontent-%COMP%]:before{display:none}.gns3-ai-chat--maximized[_ngcontent-%COMP%]{border-radius:0}.gns3-ai-chat--maximized[_ngcontent-%COMP%] .gns3-ai-chat__sidebar[_ngcontent-%COMP%]{height:100vh}.gns3-ai-chat--maximized[_ngcontent-%COMP%] .gns3-ai-chat__header[_ngcontent-%COMP%], .gns3-ai-chat--maximized[_ngcontent-%COMP%] .gns3-ai-chat__sidebar-header[_ngcontent-%COMP%]{cursor:default}.gns3-ai-chat[_ngcontent-%COMP%]{background-color:var(--mat-sys-surface)}.gns3-ai-chat__drag-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;background-color:transparent;z-index:1001;cursor:grabbing}.gns3-ai-chat__sidebar[_ngcontent-%COMP%]{width:280px;background-color:color-mix(in srgb,var(--mat-sys-surface-container) 70%,transparent);display:flex;flex-direction:column;transition:width var(--gns3-motion-duration-standard) ease;flex-shrink:0}.gns3-ai-chat__sidebar--collapsed[_ngcontent-%COMP%]{width:60px}.gns3-ai-chat__sidebar-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;padding:var(--gns3-density-space-4);cursor:grab;user-select:none;height:56px;box-sizing:border-box}.gns3-ai-chat__sidebar-header[_ngcontent-%COMP%]:active{cursor:grabbing}.gns3-ai-chat__new-chat-btn[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:100%;height:56px;background:transparent;border-radius:0;transition:all var(--gns3-motion-duration-standard) ease;margin:var(--gns3-density-space-2) 0}.gns3-ai-chat__new-chat-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:24px;width:24px;height:24px;color:var(--mat-sys-primary);transition:all var(--gns3-motion-duration-standard) ease}.gns3-ai-chat__new-chat-btn[_ngcontent-%COMP%]:hover mat-icon[_ngcontent-%COMP%]{transform:scale(1.2);filter:drop-shadow(0 0 6px var(--mat-sys-primary))}.gns3-ai-chat__new-chat-btn[_ngcontent-%COMP%]:active mat-icon[_ngcontent-%COMP%]{transform:scale(.95)}.gns3-ai-chat__sidebar--collapsed[_ngcontent-%COMP%] .gns3-ai-chat__new-chat-btn[_ngcontent-%COMP%]{display:flex}.gns3-ai-chat__sidebar[_ngcontent-%COMP%]:not(--collapsed) .gns3-ai-chat__new-chat-btn[_ngcontent-%COMP%]{display:none}.gns3-ai-chat__sidebar-title[_ngcontent-%COMP%]{margin:0;font-size:14px;font-weight:500;color:var(--mat-sys-on-surface);display:flex;align-items:center;gap:var(--gns3-density-space-2);width:100%;justify-content:center}.gns3-ai-chat__sidebar-title--clickable[_ngcontent-%COMP%]{cursor:pointer;transition:all var(--gns3-motion-duration-standard) ease}.gns3-ai-chat__sidebar-title--clickable[_ngcontent-%COMP%]:hover{opacity:.9}.gns3-ai-chat__sidebar-title--clickable[_ngcontent-%COMP%]:active{opacity:.8}.gns3-ai-chat__logo[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;font-family:var(--mat-sys-body-medium-font, Roboto),sans-serif;letter-spacing:-.5px;background:linear-gradient(135deg,var(--mat-sys-primary),var(--mat-sys-primary));color:var(--mat-sys-on-primary);padding:6px 10px;border-radius:4px;transition:all var(--gns3-motion-duration-standard) ease;flex-shrink:0;box-shadow:0 2px 8px color-mix(in srgb,var(--mat-sys-primary) 30%,transparent);position:relative;overflow:hidden}.gns3-ai-chat__logo[_ngcontent-%COMP%]:after{content:"";position:absolute;top:-50%;left:-50%;width:200%;height:200%;background:linear-gradient(45deg,transparent 30%,color-mix(in srgb,var(--mat-sys-surface) 10%,transparent) 50%,transparent 70%);transform:translate(-100%);transition:transform var(--gns3-motion-duration-standard) ease}.gns3-ai-chat__sidebar-title--clickable[_ngcontent-%COMP%]:hover .gns3-ai-chat__logo[_ngcontent-%COMP%]{transform:scale(1.08);box-shadow:0 2px 8px color-mix(in srgb,var(--mat-sys-primary) 40%,transparent)}.gns3-ai-chat__sidebar-title--clickable[_ngcontent-%COMP%]:hover .gns3-ai-chat__logo[_ngcontent-%COMP%]:after{transform:translate(100%)}.gns3-ai-chat__sidebar-title--clickable[_ngcontent-%COMP%]:active .gns3-ai-chat__logo[_ngcontent-%COMP%]{transform:scale(.95)}.gns3-ai-chat__sidebar-content[_ngcontent-%COMP%]{flex:1;overflow:hidden}.gns3-ai-chat__main[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;background-color:color-mix(in srgb,var(--mat-sys-surface) 60%,transparent);min-width:0}.gns3-ai-chat__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:var(--gns3-density-space-4);flex-shrink:0;cursor:grab;user-select:none;transition:background var(--gns3-motion-duration-standard) ease;position:relative;height:56px;box-sizing:border-box}.gns3-ai-chat__header[_ngcontent-%COMP%]:active{cursor:grabbing}.gns3-ai-chat__title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-2);font-size:14px;font-weight:500;color:var(--mat-sys-on-surface)}.gns3-ai-chat__messages[_ngcontent-%COMP%]{flex:1;overflow:hidden;min-height:0}.gns3-ai-chat__input[_ngcontent-%COMP%]{border-top:1px solid transparent;flex-shrink:0;position:relative;transition:border-color var(--gns3-motion-duration-standard) ease,box-shadow var(--gns3-motion-duration-standard) ease}.gns3-ai-chat__input[_ngcontent-%COMP%]:focus-within{border-top-color:var(--mat-sys-primary);box-shadow:0 -2px 10px color-mix(in srgb,var(--mat-sys-primary) 20%,transparent)}.gns3-ai-chat__header-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px}.gns3-ai-chat__header-actions[_ngcontent-%COMP%] .mat-icon-button[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);transition:all var(--gns3-motion-duration-standard) ease;width:40px;height:40px;min-width:40px;min-height:40px;padding:0;display:inline-flex;align-items:center;justify-content:center;position:relative;overflow:hidden}.gns3-ai-chat__header-actions[_ngcontent-%COMP%] .mat-icon-button[_ngcontent-%COMP%]:before{content:"";position:absolute;top:50%;left:50%;width:0;height:0;border-radius:50%;background:var(--mat-sys-primary);transform:translate(-50%,-50%);transition:width var(--gns3-motion-duration-standard) ease,height var(--gns3-motion-duration-standard) ease}.gns3-ai-chat__header-actions[_ngcontent-%COMP%] .mat-icon-button[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-primary) 15%,transparent);border-radius:50%;transform:scale(1.15);box-shadow:0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 20%,transparent)}.gns3-ai-chat__header-actions[_ngcontent-%COMP%] .mat-icon-button[_ngcontent-%COMP%]:hover:before{width:100%;height:100%}.gns3-ai-chat__header-actions[_ngcontent-%COMP%] .mat-icon-button[_ngcontent-%COMP%]:active{transform:scale(.95)}.gns3-ai-chat__header-actions[_ngcontent-%COMP%] .gns3-ai-chat__header-icon[_ngcontent-%COMP%]{fill:var(--mat-sys-on-surface);transition:all var(--gns3-motion-duration-standard) ease;width:24px;height:24px;position:relative;z-index:1}.gns3-ai-chat__header-actions[_ngcontent-%COMP%] .mat-icon-button[_ngcontent-%COMP%]:hover .gns3-ai-chat__header-icon[_ngcontent-%COMP%]{fill:var(--mat-sys-primary);filter:drop-shadow(0 0 3px var(--mat-sys-primary))}.gns3-ai-chat__header-actions[_ngcontent-%COMP%] .close-button[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-error) 20%,transparent);box-shadow:0 0 10px color-mix(in srgb,var(--mat-sys-error) 40%,transparent)}.gns3-ai-chat__header-actions[_ngcontent-%COMP%] .close-button[_ngcontent-%COMP%]:hover .gns3-ai-chat__header-icon[_ngcontent-%COMP%]{fill:var(--mat-sys-error)}.gns3-ai-chat__minimized-bar[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:100%;height:100%;cursor:pointer;user-select:none;border-radius:50%;background:linear-gradient(135deg,var(--mat-sys-surface),var(--mat-sys-surface));box-shadow:0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 20%,transparent),0 0 10px var(--mat-sys-primary);transition:all var(--gns3-motion-duration-standard) ease;position:relative;overflow:hidden}.gns3-ai-chat__minimized-bar[_ngcontent-%COMP%]:hover{transform:scale(1.15);box-shadow:0 8px 24px color-mix(in srgb,var(--mat-sys-surface) 60%,transparent),0 0 15px var(--mat-sys-primary)}.gns3-ai-chat__minimized-bar[_ngcontent-%COMP%]:hover:before{background:radial-gradient(circle,var(--mat-sys-primary) 0%,transparent 70%);opacity:.5}.gns3-ai-chat__minimized-bar[_ngcontent-%COMP%]:active{transform:scale(1.05)}.gns3-ai-chat__minimized-bar[_ngcontent-%COMP%]:before{content:"";position:absolute;top:50%;left:50%;width:100%;height:100%;border-radius:50%;background:radial-gradient(circle,var(--mat-sys-primary) 0%,transparent 70%);opacity:0;transform:translate(-50%,-50%);transition:opacity var(--gns3-motion-duration-standard) ease}.gns3-ai-chat__minimized-icon[_ngcontent-%COMP%]{font-size:28px;width:28px;height:28px;color:var(--mat-sys-outline);position:relative;z-index:1}@media(max-width:768px){.gns3-ai-chat__sidebar[_ngcontent-%COMP%]{position:absolute;z-index:100;height:100%}.gns3-ai-chat__sidebar--collapsed[_ngcontent-%COMP%]{width:0}}.resize-handle[_ngcontent-%COMP%]{position:absolute;z-index:100;opacity:0;transition:opacity var(--gns3-motion-duration-standard) ease}.gns3-ai-chat[_ngcontent-%COMP%]:hover .resize-handle[_ngcontent-%COMP%]{opacity:1}.resize-handle.resize-handle-top[_ngcontent-%COMP%]{top:-4px;left:12px;right:12px;height:12px;cursor:ns-resize;background:transparent}.resize-handle.resize-handle-right[_ngcontent-%COMP%]{top:12px;right:-4px;bottom:12px;width:12px;cursor:ew-resize;background:transparent}.resize-handle.resize-handle-bottom[_ngcontent-%COMP%]{bottom:-4px;left:12px;right:12px;height:12px;cursor:ns-resize;background:transparent}.resize-handle.resize-handle-left[_ngcontent-%COMP%]{top:12px;left:-4px;bottom:12px;width:12px;cursor:ew-resize;background:transparent}.resize-handle.resize-handle-top-left[_ngcontent-%COMP%]{top:-6px;left:-6px;width:20px;height:20px;cursor:nwse-resize;background:transparent}.resize-handle.resize-handle-top-right[_ngcontent-%COMP%]{top:-6px;right:-6px;width:20px;height:20px;cursor:nesw-resize;background:transparent}.resize-handle.resize-handle-bottom-left[_ngcontent-%COMP%]{bottom:-6px;left:-6px;width:20px;height:20px;cursor:nesw-resize;background:transparent}.resize-handle.resize-handle-bottom-right[_ngcontent-%COMP%]{bottom:-6px;right:-6px;width:20px;height:20px;cursor:nwse-resize;background:transparent}'],changeDetection:0})}return n})();var Ij="gns3_console_appearance",bC=16,P4=8,T4=28,BOe="ui-monospace, 'Cascadia Code', 'JetBrains Mono', 'Fira Code', Menlo, Monaco, Consolas, 'Courier New', monospace",Aj=[{name:"Auto (system monospace)",value:null},{name:"Cascadia Code",value:"Cascadia Code"},{name:"JetBrains Mono",value:"JetBrains Mono"},{name:"Fira Code",value:"Fira Code"},{name:"Source Code Pro",value:"Source Code Pro"},{name:"Inconsolata",value:"Inconsolata"},{name:"Ubuntu Mono",value:"Ubuntu Mono"},{name:"Hack",value:"Hack"},{name:"Consolas",value:"Consolas"},{name:"Courier New",value:"Courier New"},{name:"Menlo",value:"Menlo"}],F_=(()=>{class n{themeService;_allowedFontFamilies=new Set(Aj.map(e=>e.value).filter(e=>e!==null));_settingsChanged=new Ye;settingsChanged$=this._settingsChanged.asObservable();_settings={fontSize:bC,fontFamily:null,foregroundColor:null,backgroundColor:null};constructor(e){this.themeService=e,this.loadSettings()}get settings(){return q({},this._settings)}loadSettings(){try{let e=localStorage.getItem(Ij);if(e){let t=JSON.parse(e);this._settings=this._sanitizeSettings(t)}}catch{}}updateSettings(e){this._settings=this._sanitizeSettings(q(q({},this._settings),e));try{localStorage.setItem(Ij,JSON.stringify(this._settings))}catch{}this._settingsChanged.next(q({},this._settings))}_sanitizeSettings(e){return{fontSize:this._sanitizeFontSize(e.fontSize),fontFamily:this._sanitizeFontFamily(e.fontFamily),foregroundColor:this._sanitizeColor(e.foregroundColor),backgroundColor:this._sanitizeColor(e.backgroundColor)}}_sanitizeFontSize(e){return typeof e!="number"||!Number.isFinite(e)?bC:Math.max(P4,Math.min(T4,Math.round(e)))}_sanitizeFontFamily(e){if(e==null||typeof e!="string")return null;let t=e.trim();return t&&this._allowedFontFamilies.has(t)?t:null}_sanitizeColor(e){if(e==null||typeof e!="string")return null;let t=e.trim();return t&&/^#[0-9a-f]{6}$/i.test(t)?t:null}resolveColorToHex(e){if(!e)return"#000000";if(/^#[0-9a-f]{6}$/i.test(e))return e;try{let t=document.createElement("canvas");t.width=t.height=1;let i=t.getContext("2d");if(!i)return"#000000";i.fillStyle=e,i.fillRect(0,0,1,1);let[a,s,d]=i.getImageData(0,0,1,1).data;return`#${a.toString(16).padStart(2,"0")}${s.toString(16).padStart(2,"0")}${d.toString(16).padStart(2,"0")}`}catch{return"#000000"}}getCssVar(e){return getComputedStyle(document.documentElement).getPropertyValue(e).trim()}_getCssVars(e){let t=getComputedStyle(document.documentElement),i={};for(let a of e)i[a]=t.getPropertyValue(a).trim();return i}getEffectiveForegroundHex(){return this._settings.foregroundColor?this._settings.foregroundColor:this.resolveColorToHex(this.getCssVar("--mat-sys-on-surface"))}getEffectiveBackgroundHex(){return this._settings.backgroundColor?this._settings.backgroundColor:this.resolveColorToHex(this.getCssVar("--mat-sys-surface"))}buildTerminalTheme(e){let t=this._getCssVars(["--mat-sys-on-surface","--mat-sys-surface","--mat-sys-primary-container","--mat-sys-on-primary-container","--mat-sys-error","--mat-sys-primary","--mat-sys-tertiary","--mat-sys-outline","--mat-sys-surface-variant"]),i=this._settings.foregroundColor||t["--mat-sys-on-surface"],a=this._settings.backgroundColor||t["--mat-sys-surface"],s={background:a,foreground:i,cursor:i,cursorAccent:a,selectionBackground:t["--mat-sys-primary-container"],selectionForeground:t["--mat-sys-on-primary-container"],black:t["--mat-sys-on-surface"],red:t["--mat-sys-error"],green:t["--mat-sys-primary"],yellow:t["--mat-sys-tertiary"],blue:t["--mat-sys-primary"],magenta:t["--mat-sys-error"],cyan:t["--mat-sys-primary"],brightBlack:t["--mat-sys-outline"],brightRed:t["--mat-sys-error"],brightGreen:t["--mat-sys-primary"],brightYellow:t["--mat-sys-tertiary"],brightBlue:t["--mat-sys-primary"],brightMagenta:t["--mat-sys-error"],brightCyan:t["--mat-sys-primary"]};return e?(s.white=t["--mat-sys-surface-variant"],s.brightWhite=t["--mat-sys-surface"]):(s.white=t["--mat-sys-on-surface"],s.brightWhite=t["--mat-sys-surface"]),s}updateTerminalTheme(e,t){let i=this.themeService.getActualTheme()==="light";e.options.theme=this.buildTerminalTheme(i),t?.markForCheck()}getDefaultTerminalOptions(){return{cursorBlink:!0,cursorStyle:"block",fontSize:this._settings.fontSize,fontFamily:this._resolveFontFamily(),rightClickSelectsWord:!0,altClickMovesCursor:!0,scrollback:1e3}}_resolveFontFamily(){return this._settings.fontFamily?`'${this._settings.fontFamily}', monospace`:BOe}initTerminal(e,t){e.loadAddon(t),t.activate(e)}getInstalledFonts(){return Aj.filter(e=>e.value?this._isFontInstalled(e.value):!0)}_isFontInstalled(e){try{if(document.fonts.check(`16px "${e}"`))return!0;let i=document.createElement("canvas").getContext("2d");if(!i)return!1;let a="abcdefghijklmnopqrstuvwxyz0123456789".repeat(2);i.font=`16px "${e}", monospace`;let s=i.measureText(a).width;i.font="16px monospace";let d=i.measureText(a).width;return Math.abs(s-d)>1}catch{return!1}}applySettingsToTerminal(e,t,i){let a=this.themeService.getActualTheme()==="light";e.options.fontSize=this._settings.fontSize,e.options.fontFamily=this._resolveFontFamily(),e.options.theme=this.buildTerminalTheme(a),t&&setTimeout(()=>{try{t.fit()}catch{}},50),i?.markForCheck()}calculateTerminalDimensions(e,t,i){let a=e._core;if(a){let s=a._charMeasure;if(s&&s.width&&s.height)return{cols:Math.floor(t/s.width),rows:Math.floor(i/s.height)}}return{cols:Math.floor(t/8.4),rows:Math.floor(i/17)}}static \u0275fac=function(t){return new(t||n)(_e(Ni))};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var Nj=n=>({lightTheme:n}),jOe=(n,o)=>o.node_id;function $Oe(n,o){n&1&&(r(0,"span",4),c(1,"Devices"),l())}function HOe(n,o){if(n&1){let e=R();r(0,"div",8),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.onDeviceClick(i))}),r(1,"div",9),L(2,"div",10),r(3,"div",11)(4,"div",12),c(5),l()()(),r(6,"mat-icon",13),c(7," terminal "),l()()}if(n&2){let e=o.$implicit,t=h(2);ne("started",t.isDeviceStarted(e)),m(2),Tt("background-color",t.getStatusColor(e.status)),m(3),N(e.name),m(),ne("disabled",!t.isDeviceStarted(e))}}function UOe(n,o){n&1&&(r(0,"div",7)(1,"mat-icon",14),c(2,"devices"),l(),r(3,"div",15),c(4,"No console devices available"),l()())}function WOe(n,o){if(n&1&&(r(0,"div",5),Q(1,HOe,8,7,"div",6,jOe),T(3,UOe,5,0,"div",7),l()),n&2){let e=h();m(),K(e.nodes()),m(2),E(e.nodes().length===0?3:-1)}}var c2=(()=>{class n{nodesDataSource=f(Xn);cdr=f(oe);deviceSelected=new be;isLightTheme=ee(!1);nodes=z([]);collapsed=z(!0);destroy$=new Ye;constructor(){}ngOnInit(){this.nodesDataSource.changes.pipe(He(this.destroy$)).subscribe(e=>{let t=e.filter(i=>{let a=i.console_type==="none"||!i.console_type,s=i.console_type==="vnc",d=i.console_type&&i.console_type.startsWith("http");return!a&&!s&&!d});this.nodes.set(t),this.sortNodes(),this.cdr.markForCheck()}),this.nodesDataSource.itemChanged.pipe(He(this.destroy$)).subscribe(e=>{let t=this.nodes(),i=t.findIndex(a=>a.node_id===e.node_id);i>=0&&(t[i]=e,this.nodes.set([...t]),this.sortNodes(),this.cdr.markForCheck())})}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}isDeviceStarted(e){return e.status==="started"}sortNodes(){let e=this.nodes();e.sort((t,i)=>{let a=t.status==="started",s=i.status==="started";return a&&!s?-1:!a&&s?1:t.name.localeCompare(i.name)}),this.nodes.set([...e])}getStatusColor(e){return{started:"var(--mat-sys-primary)",starting:"var(--mat-sys-tertiary)",stopped:"var(--mat-sys-outline)",suspended:"var(--mat-sys-secondary)",errored:"var(--mat-sys-error)"}[e]||"var(--mat-sys-outline)"}onDeviceClick(e){this.deviceSelected.emit(e)}togglePanel(){this.collapsed.set(!this.collapsed()),this.cdr.markForCheck()}getStatusLabel(e){return{started:"Running",starting:"Starting",stopped:"Stopped",suspended:"Suspended",errored:"Error"}[e]||"Unknown"}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-console-devices-panel"]],inputs:{isLightTheme:[1,"isLightTheme"]},outputs:{deviceSelected:"deviceSelected"},decls:7,vars:12,consts:[[1,"console-devices-panel",3,"ngClass"],["title","Click to toggle panel",1,"panel-header",3,"mousedown","click","ngClass"],[1,"header-title"],[1,"panel-icon"],[1,"header-text"],[1,"device-list"],[1,"device-item",3,"started"],[1,"empty-state"],[1,"device-item",3,"click"],[1,"device-info"],[1,"device-status-indicator"],[1,"device-details"],[1,"device-name"],[1,"device-icon"],[1,"empty-icon"],[1,"empty-text"]],template:function(t,i){t&1&&(r(0,"div",0)(1,"div",1),_("mousedown",function(s){return s.stopPropagation()})("click",function(){return i.togglePanel()}),r(2,"div",2)(3,"mat-icon",3),c(4,"devices"),l(),T(5,$Oe,2,0,"span",4),l()(),T(6,WOe,4,1,"div",5),l()),t&2&&(ne("collapsed",i.collapsed()),v("ngClass",tn(8,Nj,i.isLightTheme())),m(),ne("clickable",!0),v("ngClass",tn(10,Nj,i.isLightTheme())),m(4),E(i.collapsed()?-1:5),m(),E(i.collapsed()?-1:6))},dependencies:[fe,Ao,ie,ce],styles:[".console-devices-panel[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:200px;height:100%;background-color:var(--mat-sys-surface);border-right:1px solid var(--mat-sys-outline-variant);transition:width var(--gns3-motion-duration-standard) ease}.console-devices-panel.collapsed[_ngcontent-%COMP%]{width:48px}.panel-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;height:40px;padding:0 12px;border-bottom:1px solid var(--mat-sys-outline-variant);background-color:var(--mat-sys-surface-container-low);flex-shrink:0}.panel-header.clickable[_ngcontent-%COMP%]{cursor:pointer;transition:all var(--gns3-motion-duration-standard) ease}.panel-header[_ngcontent-%COMP%]:hover.clickable{background-color:var(--mat-sys-surface-container)}.panel-header[_ngcontent-%COMP%]:active.clickable{background-color:var(--mat-sys-surface-container-high)}.header-title[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;gap:4px;margin:0;font-size:12px;font-weight:500;color:var(--mat-sys-on-surface)}.panel-icon[_ngcontent-%COMP%]{font-size:14px;width:14px;height:14px;color:var(--mat-sys-primary)}.header-text[_ngcontent-%COMP%]{font-size:12px;font-weight:500;white-space:nowrap}.device-list[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:4px}.device-item[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:8px;margin-bottom:4px;border-radius:4px;cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease;background:var(--mat-sys-surface-container-low)}.device-item[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container)}.device-item.started[_ngcontent-%COMP%]{border-left:3px solid var(--mat-sys-primary)}.device-info[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;flex:1;min-width:0}.device-status-indicator[_ngcontent-%COMP%]{width:4px;height:4px;border-radius:50%;flex-shrink:0}.device-details[_ngcontent-%COMP%]{flex:1;min-width:0}.device-name[_ngcontent-%COMP%]{font-size:12px;font-weight:500;color:var(--mat-sys-on-surface);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.device-status[_ngcontent-%COMP%]{font-size:12px;margin-top:2px;opacity:.8}.device-icon[_ngcontent-%COMP%]{font-size:12px;width:12px;height:12px;color:var(--mat-sys-primary);flex-shrink:0;opacity:.8}.device-icon.disabled[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);opacity:.4}.empty-state[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:24px 8px;text-align:center}.empty-icon[_ngcontent-%COMP%]{font-size:24px;width:24px;height:24px;color:var(--mat-sys-on-surface-variant);opacity:.4;margin-bottom:8px}.empty-text[_ngcontent-%COMP%]{font-size:12px;color:var(--mat-sys-on-surface-variant);opacity:.8}@media(max-width:768px){.console-devices-panel[_ngcontent-%COMP%]{position:absolute;height:100%}.console-devices-panel.collapsed[_ngcontent-%COMP%]{width:0}}"],changeDetection:0})}return n})();var Rj=Jl(O4());var m2=class{constructor(n,o){this._disposables=[],this._socket=n,this._socket.binaryType="arraybuffer",this._bidirectional=!(o&&o.bidirectional===!1)}activate(n){this._disposables.push(D4(this._socket,"message",o=>{let e=o.data;n.write(typeof e=="string"?e:new Uint8Array(e))})),this._bidirectional&&(this._disposables.push(n.onData(o=>this._sendData(o))),this._disposables.push(n.onBinary(o=>this._sendBinary(o)))),this._disposables.push(D4(this._socket,"close",()=>this.dispose())),this._disposables.push(D4(this._socket,"error",()=>this.dispose()))}dispose(){for(let n of this._disposables)n.dispose()}_sendData(n){this._checkOpenSocket()&&this._socket.send(n)}_sendBinary(n){if(!this._checkOpenSocket())return;let o=new Uint8Array(n.length);for(let e=0;e<n.length;++e)o[e]=n.charCodeAt(e)&255;this._socket.send(o)}_checkOpenSocket(){switch(this._socket.readyState){case WebSocket.OPEN:return!0;case WebSocket.CONNECTING:throw new Error("Attach addon was loaded before socket was open");case WebSocket.CLOSING:return console.warn("Attach addon socket is closing"),!1;case WebSocket.CLOSED:throw new Error("Attach addon socket is closed");default:throw new Error("Unexpected socket state")}}};function D4(n,o,e){return n.addEventListener(o,e),{dispose:()=>{e&&n.removeEventListener(o,e)}}}var zj=Jl(A4());var u2=(()=>{class n{toaster=f(re);currentMenu=null;attachContextMenu(e,t){let i=a=>{a.preventDefault(),this.showContextMenu(a,e)};return t.addEventListener("contextmenu",i),()=>{t.removeEventListener("contextmenu",i)}}showContextMenu(e,t){this.dismissCurrentMenu();let i=!1;try{if(typeof t.hasSelection=="function")i=t.hasSelection();else{let p=t.getSelection();i=p!=null&&p.trim().length>0}}catch(p){console.error("Error checking selection:",p);let u=t.getSelection();i=u!=null&&u.trim().length>0}let a=document.createElement("div");a.className="xterm-context-menu",this.currentMenu=a;let{left:s,top:d}=this.calculateMenuPosition(e);a.style.left=`${s}px`,a.style.top=`${d}px`,this.createMenuItems(a,t,i),document.body.appendChild(a),this.setupMenuCleanup(a,t)}dismissCurrentMenu(){this.currentMenu&&this.currentMenu.parentNode&&this.currentMenu.remove(),this.currentMenu=null}calculateMenuPosition(e){let t=e.clientX,i=e.clientY,a=180,s=120;return t+a>window.innerWidth&&(t=window.innerWidth-a-10),i+s>window.innerHeight&&(i=window.innerHeight-s-10),t=Math.max(10,t),i=Math.max(10,i),{left:t,top:i}}createMenuItems(e,t,i){if(i){let p=this.createMenuItem("Copy","Ctrl+Shift+C",()=>{try{let u=t.getSelection();u&&navigator.clipboard.writeText(u).then(()=>{this.toaster.success("Copied to clipboard"),t.clearSelection()}).catch(g=>{console.error("Failed to copy:",g),g.name==="NotAllowedError"?this.toaster.error("Clipboard permission denied. Please allow clipboard access."):this.toaster.error("Failed to copy. Please try again.")})}catch(u){console.error("Error copying:",u),this.toaster.error("Failed to copy. Please try again.")}});e.appendChild(p)}let a=this.createMenuItem("Paste","Ctrl+Shift+V",()=>{try{navigator.clipboard.readText().then(p=>{p?t.paste(p):this.toaster.warning("Nothing to paste. Clipboard is empty.")}).catch(p=>{console.error("Failed to paste:",p),p.name==="NotAllowedError"?this.toaster.error("Clipboard permission denied. Please allow clipboard access."):this.toaster.error("Failed to paste. Please try again.")})}catch(p){console.error("Error pasting:",p),this.toaster.error("Failed to paste. Please try again.")}});e.appendChild(a);let s=document.createElement("div");s.className="xterm-context-menu-separator",e.appendChild(s);let d=this.createMenuItem("Select All","",()=>{try{t.selectAll()}catch(p){console.error("Error selecting all:",p)}});if(e.appendChild(d),i){let p=this.createMenuItem("Clear Selection","",()=>{try{t.clearSelection()}catch(u){console.error("Error clearing selection:",u)}});e.appendChild(p)}}createMenuItem(e,t,i){let a=document.createElement("div");return a.className="xterm-context-menu-item",a.textContent=e,a.setAttribute("role","menuitem"),a.setAttribute("tabindex","0"),t&&a.setAttribute("data-shortcut",t),a.addEventListener("click",()=>{i(),this.dismissCurrentMenu()}),a.addEventListener("keydown",s=>{(s.key==="Enter"||s.key===" ")&&(s.preventDefault(),a.click())}),a}setupMenuCleanup(e,t){let i=!1,a=()=>{i||(i=!0,this.currentMenu===e&&(this.currentMenu=null),e.remove(),document.removeEventListener("click",s),document.removeEventListener("keydown",d),t.focus())},s=u=>{e.contains(u.target)||a()},d=u=>{u.key==="Escape"&&(u.preventDefault(),a())},p=new MutationObserver(u=>{for(let g of u)if(g.type==="childList"&&g.removedNodes.length>0){let C=Array.from(g.removedNodes);for(let M of C)if(M===e){document.removeEventListener("click",s),document.removeEventListener("keydown",d),p.disconnect();return}}});p.observe(document.body,{childList:!0,subtree:!1}),setTimeout(()=>{i||(document.addEventListener("click",s),document.addEventListener("keydown",d))},0)}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var GOe=["terminal"],R_=(()=>{class n{controller=ee(void 0);project=ee(void 0);node=ee(void 0);consoleService=f(ga);themeService=f(Ni);cdr=f(oe);contextMenuService=f(u2);xtermService=f(F_);term=new Rj.Terminal(q({cols:100,rows:32},this.xtermService.getDefaultTerminalOptions()));fitAddon=new zj.FitAddon;socket=null;isLightThemeEnabled=!1;resizeObserver=null;contextMenuCleanup=null;destroy$=new Ye;isDestroying=!1;terminal=ln("terminal");constructor(){}ngOnInit(){this.isLightThemeEnabled=this.themeService.getActualTheme()==="light",this.cdr.markForCheck(),this.themeService.themeChanged.pipe(He(this.destroy$)).subscribe(()=>{this.xtermService.updateTerminalTheme(this.term,this.cdr),this.isLightThemeEnabled=this.themeService.getActualTheme()==="light"}),this.consoleService.consoleResized.pipe(He(this.destroy$)).subscribe(()=>{setTimeout(()=>{this.fitTerminal()},50)}),this.consoleService.getNumberOfColumns()&&this.consoleService.getNumberOfRows()&&this.term.resize(this.consoleService.getNumberOfColumns(),this.consoleService.getNumberOfRows())}ngAfterViewInit(){let e=this.terminal();this.term.open(e.nativeElement),this.xtermService.updateTerminalTheme(this.term,this.cdr),this.socket=new WebSocket(this.consoleService.getUrl(this.controller(),this.node())),this.socket.onerror=()=>{console.error("[WebConsole] Socket connection error"),this.term.write(`\r
|
||
\x1B[31mConnection lost. Please check if the node is still running.\x1B[0m\r
|
||
`)},this.socket.onclose=()=>{if(!this.isDestroying){console.log("[WebConsole] Socket closed unexpectedly"),this.term.write(`\r
|
||
\x1B[33mConnection closed.\x1B[0m\r
|
||
`);let i=this.node();i&&this.consoleService.closeConsoleForNode(i)}},this.socket.onopen=()=>{this.consoleService.sendTerminalSize(this.socket,this.term.cols,this.term.rows)},this.term.onResize(({cols:i,rows:a})=>{this.consoleService.sendTerminalSize(this.socket,i,a)});let t=new m2(this.socket);this.term.loadAddon(t),this.xtermService.initTerminal(this.term,this.fitAddon),this.fitAddon.fit(),this.term.focus(),this.term.attachCustomKeyEventHandler(i=>{if(i.altKey&&i.key>="1"&&i.key<="9"){let a=new CustomEvent("consoleTabShortcut",{detail:{key:i.key},bubbles:!0});return this.term.element.dispatchEvent(a),!1}return!((i.code==="KeyC"||i.code==="KeyV")&&i.ctrlKey&&i.shiftKey)}),this.setupResizeObserver(),this.xtermService.settingsChanged$.pipe(He(this.destroy$)).subscribe(()=>{this.xtermService.applySettingsToTerminal(this.term,this.fitAddon,this.cdr)}),this.contextMenuCleanup=this.contextMenuService.attachContextMenu(this.term,e.nativeElement)}setupResizeObserver(){let e=this.terminal();e?.nativeElement&&(this.resizeObserver=new ResizeObserver(t=>{for(let i of t){let{width:a,height:s}=i.contentRect;a===0||s===0||requestAnimationFrame(()=>{try{this.fitTerminal()}catch{}})}}),this.resizeObserver.observe(e.nativeElement))}fitTerminal(){this.fitAddon.fit();let e=this.term.cols,t=this.term.rows;this.consoleService.setNumberOfColumns(e),this.consoleService.setNumberOfRows(t),this.term.resize(e,t)}focusTerminal(){this.term&&this.term.focus()}ngOnDestroy(){this.isDestroying=!0,this.destroy$.next(),this.destroy$.complete(),this.socket&&(this.socket.close(),this.socket=null),this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null),this.contextMenuCleanup&&(this.contextMenuCleanup(),this.contextMenuCleanup=null),this.term.dispose()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-web-console"]],viewQuery:function(t,i){t&1&&Bn(i.terminal,GOe,5),t&2&&jn()},inputs:{controller:[1,"controller"],project:[1,"project"],node:[1,"node"]},decls:2,vars:0,consts:[["terminal",""],[1,"terminal"]],template:function(t,i){t&1&&kr(0,"div",1,0)},dependencies:[fe],styles:["[_nghost-%COMP%]{display:flex;flex-direction:column;flex:1;min-height:0;width:100%;height:100%}[hidden][_nghost-%COMP%]{display:none}.lightTheme[_nghost-%COMP%]{background:var(--mat-sys-surface);color:var(--mat-sys-on-surface)}.terminal[_ngcontent-%COMP%]{width:100%;height:100%}"],changeDetection:0})}return n})();var Lj={name:"gns3-web-ui",version:"3.1.0a7",author:{name:"GNS3 Technology Inc.",email:"developers@gns3.com"},description:"Graphical Network Simulator-3 is a network software emulator.",license:"GPLv3",repository:{type:"git",url:"https://github.com/GNS3/gns3-web-ui.git"},scripts:{ng:"ng",start:"ng serve",build:"ng build",buildforproduction:"ng build --source-map=false --configuration=production --base-href /static/web-ui/",buildforgithub:"ng build --configuration=githubProd",test:"ng test","test:run":"ng test --watch=false",lint:"ng lint",release:"build","prettier:base":"prettier","prettier:check":'yarn prettier:base -- --list-different "src/**/*.{ts,js,html,scss}"',"prettier:write":'yarn prettier:base -- --write "src/**/*.{ts,js,html,scss}"',"generate-licenses-file":"yarn license-checker --production --csv --out licenses.csv","snyk-protect":"snyk-protect",prepare:"husky install"},private:!0,dependencies:{"@angular/animations":"^21.0.0","@angular/cdk":"^21.0.0","@angular/common":"^21.0.0","@angular/compiler":"^21.0.0","@angular/core":"^21.0.0","@angular/forms":"^21.0.0","@angular/material":"^21.0.0","@angular/platform-browser":"^21.0.0","@angular/platform-browser-dynamic":"^21.0.0","@angular/router":"^21.0.0","@snyk/protect":"^1.972.0","@types/react":"^17.0.34","@types/react-dom":"^19.0.1","@xterm/addon-attach":"^0.12.0","@xterm/addon-fit":"^0.10.0","@xterm/xterm":"^5.5.0","angular-draggable-droppable":"^9.0.1","angular-resizable-element":"^8.0.3",bootstrap:"5.3.8","command-exists":"^1.2.9","core-js":"^3.50.0","css-tree":"^2.1.0","dagre-d3-es":"7.0.14",eev:"^0.1.5",ini:"^3.0.0","ipaddr.js":"^2.1.0",marked:"^17.0.0","material-design-icons":"^3.0.1","material-symbols":"^0.43.0",mousetrap:"^1.6.5","ng2-file-upload":"^12.0.0","ngx-device-detector":"4.0.1","ngx-json-viewer":"^3.2.1","ngx-markdown":"^21.2.0","node-fetch":"^3.2.10","notosans-fontface":"^1.3.0","postcss-loader":"^8.2.1","prettier-plugin-organize-imports":"^4.3.0",rxjs:"^7.5.0","save-svg-as-png":"^1.4.17","spark-md5":"^3.0.2","spice-html5-bower":"^1.7.3","svg-crowbar":"^0.7.0","tree-kill":"^1.2.2",tslib:"^2.4.0","typeface-roboto":"^1.1.13",yargs:"^17.4.1"},devDependencies:{"@analogjs/vite-plugin-angular":"^2.4.0","@angular-devkit/build-angular":"^21.0.0","@angular-eslint/builder":"^21.3.1","@angular-eslint/eslint-plugin":"^21.3.1","@angular-eslint/eslint-plugin-template":"^21.3.1","@angular-eslint/schematics":"^21.3.1","@angular-eslint/template-parser":"^21.3.1","@angular/build":"^21.2.5","@angular/cli":"^21.2.27","@angular/compiler-cli":"^21.0.0","@angular/language-service":"^21.0.0","@babel/runtime":"^7.29.2","@sentry/cli":"^2.0.4","@types/node":"26","@typescript-eslint/eslint-plugin":"^8.57.2","@typescript-eslint/parser":"^8.71.1","@typescript-eslint/utils":"^8.71.2",autoprefixer:"^10.4.27",esbuild:"^0.27.4",eslint:"^9.0.0","file-loader":"^6.2.0",husky:"^8.0.3",jsdom:"^30.1.3","license-checker":"^25.0.1","popper.js":"^1.16.1",postcss:"^8.5.8",prettier:"^2.6.2",replace:"^1.2.1",sass:"^1.105.1","ts-node":"^10.7.0",typescript:"~5.9.0",vite:"^8.3.4","vite-tsconfig-paths":"^6.1.1",vitest:"^4.1.2",webpack:"^5.72.0","yarn-upgrade-all":"^0.7.1"},greenkeeper:{ignore:["typescript"]},snyk:!0,engines:{node:">=22.22.2"},overrides:{dompurify:"3.4.0","dagre-d3-es":"7.0.14",yaml:"1.10.3","lodash-es":"4.18.0"},resolutions:{dompurify:"3.4.0","dagre-d3-es":"7.0.14",yaml:"1.10.3","lodash-es":"4.18.0","source-map-js":"1.2.2"}};var Op=Lj.version;var g2=(()=>{class n extends hm{getItemKey(e){return e}static \u0275fac=(()=>{let e;return function(i){return(e||(e=yi(n)))(i||n)}})();static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Vj=Jl(HM());var QOe=["console"],KOe=["commandInput"],h2=n=>({lightTheme:n});function XOe(n,o){if(n&1&&(r(0,"span",9),c(1),L(2,"br"),l()),n&2){let e=o.$implicit;m(),X(" ",e.message," ")}}var z_=(()=>{class n{projectWebServiceHandler=f(h_);nodeService=f(ft);nodesDataSource=f(Xn);protocolHandlerService=f(Tp);logEventsDataSource=f(g2);httpService=f(sn);themeService=f(Ni);cd=f(oe);nodeConsoleService=f(ga);controller;project=ee(void 0);console=ln("console");commandInput=ln("commandInput");focusInput(){let e=this.commandInput();e?.nativeElement&&e.nativeElement.focus()}version=Op;nodeSubscription;linkSubscription;drawingSubscription;controllerRequestsSubscription;errorSubscription;warningSubscription;infoSubscription;command=$("");filters=["all","errors","warnings","info","map updates","controller requests"];selectedFilter="all";filteredEvents=[];regexStart=/^start (.*?)$/;regexStop=/^stop (.*?)$/;regexSuspend=/^suspend (.*?)$/;regexReload=/^reload (.*?)$/;regexShow=/^show (.*?)$/;regexConsole=/^console (.*?)$/;style={};isDraggingEnabled=!1;isLightThemeEnabled=!1;selected=new Ge(0);constructor(){}ngOnInit(){this.nodeConsoleService.consoleResized.subscribe(e=>{this.style={width:`${e.width}px`,height:`${e.height-70}px`},this.cd.detectChanges()}),this.themeService.getActualTheme()==="light"?this.isLightThemeEnabled=!0:this.isLightThemeEnabled=!1,this.style={width:"848px",height:"477px"},this.nodeSubscription=this.projectWebServiceHandler.nodeNotificationEmitter.subscribe(e=>{let t=e.event,i="";t.label?i=`Event received: ${e.action} - ${this.printNode(t)}.`:i=`Event received: ${e.action} - ${t.name}.`,this.showMessage({type:"map update",message:i})}),this.linkSubscription=this.projectWebServiceHandler.linkNotificationEmitter.subscribe(e=>{let t=e.event,i=`Event received: ${e.action} - ${this.printLink(t)}.`;this.showMessage({type:"map update",message:i})}),this.drawingSubscription=this.projectWebServiceHandler.drawingNotificationEmitter.subscribe(e=>{let t=e.event,i=`Event received: ${e.action} - ${this.printDrawing(t)}.`;this.showMessage({type:"map update",message:i})}),this.controllerRequestsSubscription=this.httpService.requestsNotificationEmitter.subscribe(e=>{this.showMessage({type:"controller request",message:e})}),this.errorSubscription=this.projectWebServiceHandler.errorNotificationEmitter.subscribe(e=>{this.showMessage({type:"error",message:e})}),this.warningSubscription=this.projectWebServiceHandler.warningNotificationEmitter.subscribe(e=>{this.showMessage({type:"warning",message:e})}),this.infoSubscription=this.projectWebServiceHandler.infoNotificationEmitter.subscribe(e=>{this.showMessage({type:"info",message:e})})}ngAfterViewInit(){let e=this.console();e.nativeElement&&(e.nativeElement.scrollTop=e.nativeElement.scrollHeight)}ngOnDestroy(){this.nodeSubscription.unsubscribe(),this.linkSubscription.unsubscribe(),this.drawingSubscription.unsubscribe(),this.controllerRequestsSubscription.unsubscribe(),this.errorSubscription.unsubscribe(),this.warningSubscription.unsubscribe(),this.infoSubscription.unsubscribe()}applyFilter(e){this.selectedFilter=e,this.filteredEvents=this.getFilteredEvents(),this.cd.detectChanges()}onKeyDown(e){e.key==="Enter"&&this.handleCommand()}handleCommand(){if(this.command()==="help"||this.command()==="")this.showCommand("Available commands: help, version, console {node name}, start all, start {node name}, stop all, stop {node name}, suspend all, suspend {node name}, reload all, reload {node name}, show {node name}.");else if(this.command()==="version")this.showCommand("Current version: "+this.version);else if(this.command()==="start all")this.showCommand("Starting all nodes..."),this.nodeService.startAll(this.controller,this.project()).subscribe(()=>{this.showCommand("All nodes started.")});else if(this.command()==="stop all")this.showCommand("Stopping all nodes..."),this.nodeService.stopAll(this.controller,this.project()).subscribe(()=>{this.showCommand("All nodes stopped.")});else if(this.command()==="suspend all")this.showCommand("Suspending all nodes..."),this.nodeService.suspendAll(this.controller,this.project()).subscribe(()=>{this.showCommand("All nodes suspended.")});else if(this.command()==="reload all")this.showCommand("Reloading all nodes..."),this.nodeService.reloadAll(this.controller,this.project()).subscribe(()=>{this.showCommand("All nodes reloaded.")});else if(this.regexStart.test(this.command())||this.regexStop.test(this.command())||this.regexSuspend.test(this.command())||this.regexReload.test(this.command())||this.regexShow.test(this.command())||this.regexConsole.test(this.command())){let t=this.command().split(/[ ,]+/),i=this.nodesDataSource.getItems().find(a=>a.name.valueOf()===t[1].valueOf());if(i)if(this.regexStart.test(this.command()))if(i.missing_image){let a=(i.missing_images||[]).map(s=>s.image).filter(Boolean);this.showCommand(`Cannot start node ${t[1]}: missing image(s) ${a.length?a.join(", "):"unknown"} - a compatible image is required.`)}else this.showCommand(`Starting node ${t[1]}...`),this.nodeService.start(this.controller,i).subscribe(()=>this.showCommand(`Node ${i.name} started.`));else if(this.regexStop.test(this.command()))this.showCommand(`Stopping node ${t[1]}...`),this.nodeService.stop(this.controller,i).subscribe(()=>this.showCommand(`Node ${i.name} stopped.`));else if(this.regexSuspend.test(this.command()))this.showCommand(`Suspending node ${t[1]}...`),this.nodeService.suspend(this.controller,i).subscribe(()=>this.showCommand(`Node ${i.name} suspended.`));else if(this.regexReload.test(this.command()))this.showCommand(`Reloading node ${t[1]}...`),this.nodeService.reload(this.controller,i).subscribe(()=>this.showCommand(`Node ${i.name} reloaded.`));else if(this.regexConsole.test(this.command()))if(i.status==="started"){this.showCommand(`Launching console for node ${t[1]}...`);var e=i.console_host;(e==="0.0.0.0"||e==="::"||e==="0:0:0:0:0:0:0:0")&&(e=this.controller.host),Vj.IPv6.isValid(e)&&(e=`[${e}]`),i.console_type==="telnet"||i.console_type==="ssh"||i.console_type==="docker_exec"?this.protocolHandlerService.open(`gns3+${i.console_type}://${e}:${i.console}?name=${encodeURIComponent(i.name)}&project_id=${i.project_id}&node_id=${i.node_id}`):i.console_type==="vnc"?this.protocolHandlerService.open(`gns3+vnc://${e}:${i.console}?name=${encodeURIComponent(i.name)}&project_id=${i.project_id}&node_id=${i.node_id}`):i.console_type&&i.console_type.startsWith("spice")?this.protocolHandlerService.open(`gns3+spice://${e}:${i.console}?name=${encodeURIComponent(i.name)}&project_id=${i.project_id}&node_id=${i.node_id}`):i.console_type&&i.console_type.startsWith("http")?window.open(`${i.console_type}://${e}:${i.console}`):this.showCommand("Supported console types are: telnet, ssh, vnc, spice and spice+agent")}else this.showCommand("This node must be started before a console can be opened.");else this.regexShow.test(this.command())&&(this.showCommand(`Information about node ${i.name}:`),this.showCommand(this.printNode(i)));else this.showCommand(`Node with ${t[1]} name was not found.`)}else this.showCommand(`Unknown syntax: ${this.command()}`);this.command.set(""),this.cd.detectChanges()}clearConsole(){this.filteredEvents=[],this.console().nativeElement.scrollTop=this.console().nativeElement.scrollHeight}showCommand(e){this.showMessage({type:"command",message:e})}showMessage(e){this.logEventsDataSource.add(e),this.filteredEvents=this.getFilteredEvents(),this.console().nativeElement.scrollTop=this.console().nativeElement.scrollHeight,setTimeout(()=>{this.console().nativeElement.scrollTop=this.console().nativeElement.scrollHeight},100),this.cd.detectChanges()}getFilteredEvents(){return this.selectedFilter==="controller requests"?this.logEventsDataSource.getItems().filter(e=>e.type==="controller request"):this.selectedFilter==="errors"?this.logEventsDataSource.getItems().filter(e=>e.type==="error"):this.selectedFilter==="warnings"?this.logEventsDataSource.getItems().filter(e=>e.type==="warning"):this.selectedFilter==="info"?this.logEventsDataSource.getItems().filter(e=>e.type==="info"):this.selectedFilter==="map updates"?this.logEventsDataSource.getItems().filter(e=>e.type==="map update"||e.type==="command"):this.logEventsDataSource.getItems()}printNode(e){return`command_line: ${e.command_line},
|
||
compute_id: ${e.compute_id},
|
||
console: ${e.console},
|
||
console_host: ${e.console_host},
|
||
console_type: ${e.console_type},
|
||
first_port_name: ${e.first_port_name},
|
||
height: ${e.height},
|
||
label: ${e.label.text},
|
||
name: ${e.name},
|
||
node_directory: ${e.node_directory},
|
||
node_id: ${e.node_id},
|
||
node_type: ${e.node_type},
|
||
port_name_format: ${e.port_name_format},
|
||
port_segment_size: ${e.port_segment_size}, `+this.printPorts(e.ports)+`project_id: ${e.project_id},
|
||
status: ${e.status},
|
||
symbol: ${e.symbol},
|
||
symbol_url: ${e.symbol_url},
|
||
width: ${e.width},
|
||
x: ${e.x},
|
||
y: ${e.y},
|
||
z: ${e.z}`}printPorts(e){let t="ports: ";return e.forEach(i=>{t=t+`adapter_number: ${i.adapter_number},
|
||
link_type: ${i.link_type},
|
||
name: ${i.name},
|
||
port_number: ${i.port_number},
|
||
short_name: ${i.short_name}, `}),t}printLink(e){return`capture_file_name: ${e.capture_file_name},
|
||
capture_file_path: ${e.capture_file_path},
|
||
capturing: ${e.capturing},
|
||
link_id: ${e.link_id},
|
||
link_type: ${e.link_type},
|
||
project_id: ${e.project_id},
|
||
suspend: ${e.suspend}, `}printDrawing(e){return`drawing_id: ${e.drawing_id},
|
||
project_id: ${e.project_id},
|
||
rotation: ${e.rotation},
|
||
x: ${e.x},
|
||
y: ${e.y},
|
||
z: ${e.z}`}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-log-console"]],viewQuery:function(t,i){t&1&&Bn(i.console,QOe,5)(i.commandInput,KOe,5),t&2&&jn(2)},inputs:{controller:"controller",project:[1,"project"],command:[1,"command"]},outputs:{command:"commandChange"},decls:27,vars:15,consts:[["filterMenu","matMenu"],["console",""],["commandInput",""],[1,"consoleHeader"],[1,"consoleFiltering"],[1,"filterButton",3,"ngClass","matMenuTriggerFor"],["xPosition","after"],["mat-menu-item","",3,"click"],[1,"console",3,"ngClass","ngStyle"],[1,"console-item"],[1,"consoleInput",3,"ngClass"],[1,"inputIcon"],["autofocus","","type","text",1,"commandLine",3,"keydown","input","ngClass","value"]],template:function(t,i){if(t&1&&(r(0,"div",3)(1,"div",4)(2,"button",5),c(3," Apply filter "),l(),r(4,"mat-menu",6,0)(6,"button",7),_("click",function(){return i.applyFilter("all")}),c(7,"all"),l(),r(8,"button",7),_("click",function(){return i.applyFilter("errors")}),c(9,"errors"),l(),r(10,"button",7),_("click",function(){return i.applyFilter("warnings")}),c(11,"warnings"),l(),r(12,"button",7),_("click",function(){return i.applyFilter("info")}),c(13,"info"),l(),r(14,"button",7),_("click",function(){return i.applyFilter("map updates")}),c(15,"map updates"),l(),r(16,"button",7),_("click",function(){return i.applyFilter("controller requests")}),c(17,"controller requests"),l()()()(),r(18,"div",8,1),Q(20,XOe,3,1,"span",9,Oe),l(),r(22,"div",10)(23,"mat-icon",11),c(24,"keyboard_arrow_right"),l(),r(25,"input",12,2),_("keydown",function(s){return i.onKeyDown(s)})("input",function(s){return i.command.set(s.target.value)}),l()()),t&2){let a=Te(5);m(2),v("ngClass",tn(7,h2,i.isLightThemeEnabled))("matMenuTriggerFor",a),m(16),v("ngClass",tn(9,h2,i.isLightThemeEnabled))("ngStyle",i.style),m(2),K(i.filteredEvents),m(2),v("ngClass",tn(11,h2,i.isLightThemeEnabled)),m(3),v("ngClass",tn(13,h2,i.isLightThemeEnabled))("value",i.command())}},dependencies:[fe,Ao,ll,ie,ce,Y,it,Ko,ut,eo],styles:[".consoleWrapper[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%;height:100%;background:var(--mat-sys-surface);color:var(--mat-sys-on-surface);overflow:hidden;font-size:12px}.filterButton[_ngcontent-%COMP%]{background:transparent;color:var(--mat-sys-on-surface-variant);border:none;margin-top:0;outline:none;font-weight:700;padding:0}.consoleFiltering[_ngcontent-%COMP%]{display:flex}.consoleHeader[_ngcontent-%COMP%]{width:100%;height:32px;font-size:12px;overflow:hidden;display:flex;padding:4px 8px;justify-content:space-between;background:var(--mat-sys-surface);flex-shrink:0}.console[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:8px;color:var(--mat-sys-on-surface);font-family:var(--gns3-font-code);font-size:12px;line-height:1.4;scrollbar-color:var(--mat-sys-on-surface-variant) var(--mat-sys-surface);scrollbar-width:thin;background:var(--mat-sys-surface)}.consoleInput[_ngcontent-%COMP%]{width:100%;height:32px;padding:4px 8px;display:flex;background:var(--mat-sys-surface);flex-shrink:0}.commandLine[_ngcontent-%COMP%]{background-color:transparent;color:var(--mat-sys-on-surface);border:none;font-family:var(--gns3-font-code);font-size:12px}.inputIcon[_ngcontent-%COMP%]{margin-top:2px}mat-icon[_ngcontent-%COMP%]{font-size:14px;width:14px;height:14px}input[_ngcontent-%COMP%]:focus{outline:none}.closeButton[_ngcontent-%COMP%]{cursor:pointer}.filterButton[_ngcontent-%COMP%]:focus-visible, .commandLine[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--mat-sys-primary);outline-offset:2px}"],changeDetection:0})}return n})();var YOe=["consoleWrapper"],ZOe=(n,o,e,t)=>({lightTheme:n,"console-active":o,"is-minimized":e,"is-dragging":t}),JOe=()=>({top:!0}),eDe=()=>({right:!0}),tDe=()=>({bottom:!0}),nDe=()=>({left:!0}),iDe=()=>({top:!0,left:!0}),oDe=()=>({top:!0,right:!0}),aDe=()=>({bottom:!0,left:!0}),rDe=()=>({bottom:!0,right:!0}),sDe=(n,o)=>o.name;function lDe(n,o){n&1&&L(0,"div",15)(1,"div",16)(2,"div",17)(3,"div",18)(4,"div",19)(5,"div",20)(6,"div",21)(7,"div",22),n&2&&(v("resizeEdges",at(8,JOe)),m(),v("resizeEdges",at(9,eDe)),m(),v("resizeEdges",at(10,tDe)),m(),v("resizeEdges",at(11,nDe)),m(),v("resizeEdges",at(12,iDe)),m(),v("resizeEdges",at(13,oDe)),m(),v("resizeEdges",at(14,aDe)),m(),v("resizeEdges",at(15,rDe)))}function cDe(n,o){if(n&1){let e=R();L(0,"span",23),r(1,"span",24),c(2),l(),r(3,"button",25),_("mousedown",function(i){return i.stopPropagation()})("click",function(){y(e);let i=h().$index,a=h();return w(a.removeTab(i))}),r(4,"mat-icon"),c(5,"close"),l()()}if(n&2){let e=h().$implicit;m(2),N(e.name)}}function dDe(n,o){n&1&&(r(0,"mat-tab"),se(1,cDe,6,1,"ng-template",7),l())}function mDe(n,o){n&1&&(r(0,"span",24),c(1,"GNS3 console"),l())}function pDe(n,o){if(n&1){let e=R();r(0,"button",46),_("click",function(){y(e);let i=h(2);return w(i.resetBgColor())}),r(1,"mat-icon"),c(2,"restart_alt"),l()()}}function uDe(n,o){n&1&&(r(0,"span",35),c(1,"auto"),l())}function gDe(n,o){if(n&1){let e=R();r(0,"button",47),_("click",function(){y(e);let i=h(2);return w(i.resetFgColor())}),r(1,"mat-icon"),c(2,"restart_alt"),l()()}}function hDe(n,o){n&1&&(r(0,"span",35),c(1,"auto"),l())}function _De(n,o){if(n&1){let e=R();r(0,"button",48),_("click",function(){y(e);let i=h(2);return w(i.resetFontSize())}),r(1,"mat-icon"),c(2,"restart_alt"),l()()}}function fDe(n,o){if(n&1&&(r(0,"option",45),c(1),l()),n&2){let e=o.$implicit;v("value",e.value||""),m(),N(e.name)}}function vDe(n,o){if(n&1){let e=R();r(0,"div",26),_("click",function(){y(e);let i=h();return w(i.closeSettingsPanel())}),l(),r(1,"div",27),_("mousedown",function(i){return i.stopPropagation()})("click",function(i){return i.stopPropagation()}),r(2,"div",28),c(3,"Terminal Settings"),l(),r(4,"div",29)(5,"span",30),c(6,"Background"),l(),r(7,"div",31)(8,"label",32)(9,"input",33),_("change",function(i){y(e);let a=h();return w(a.onBgColorChange(i))}),l()(),T(10,pDe,3,0,"button",34)(11,uDe,2,0,"span",35),l()(),r(12,"div",29)(13,"span",30),c(14,"Text Color"),l(),r(15,"div",31)(16,"label",36)(17,"input",33),_("change",function(i){y(e);let a=h();return w(a.onFgColorChange(i))}),l()(),T(18,gDe,3,0,"button",37)(19,hDe,2,0,"span",35),l()(),r(20,"div",29)(21,"span",30),c(22,"Font Size"),l(),r(23,"div",38)(24,"button",39),_("click",function(){y(e);let i=h();return w(i.changeFontSize(-1))}),r(25,"mat-icon"),c(26,"remove"),l()(),r(27,"span",40),c(28),l(),r(29,"button",41),_("click",function(){y(e);let i=h();return w(i.changeFontSize(1))}),r(30,"mat-icon"),c(31,"add"),l()(),T(32,_De,3,0,"button",42),l()(),r(33,"div",43)(34,"span",30),c(35,"Font"),l(),r(36,"select",44),_("change",function(i){y(e);let a=h();return w(a.onFontFamilyChange(i.target.value))}),Q(37,fDe,2,2,"option",45,sDe),l()()()}if(n&2){let e=h();m(8),Tt("--swatch-color",e.effectiveBgHex()),ne("color-swatch--custom",e.currentSettings().backgroundColor),m(),v("value",e.effectiveBgHex()),m(),E(e.currentSettings().backgroundColor?10:11),m(6),Tt("--swatch-color",e.effectiveFgHex()),ne("color-swatch--custom",e.currentSettings().foregroundColor),m(),v("value",e.effectiveFgHex()),m(),E(e.currentSettings().foregroundColor?18:19),m(6),v("disabled",e.currentSettings().fontSize<=e.minFontSize),m(4),X("",e.currentSettings().fontSize,"px"),m(),v("disabled",e.currentSettings().fontSize>=e.maxFontSize),m(3),E(e.currentSettings().fontSize!==e.defaultFontSize?32:-1),m(4),v("value",e.currentSettings().fontFamily||""),m(),K(e.terminalFonts)}}function CDe(n,o){if(n&1&&L(0,"app-web-console",14),n&2){let e=o.$index,t=h();v("hidden",t.selected.value!==e)("controller",t.controller())("node",t.nodes[e])}}var _2=(()=>{class n{CONSOLE_HEADER_HEIGHT=40;DEFAULT_WIDTH=848;DEFAULT_HEIGHT=600;DEFAULT_LEFT="80px";DEFAULT_BOTTOM="100px";destroy$=new Ye;themeSubscription=null;controller=ee(void 0);project=ee(void 0);zIndex=ee(1e3);closeConsole=new be;deviceSelected=new be;consoleDeactivated=new be;windowFocused=new be;windowMinimized=new be;style={};styleInside={height:"120px"};isDraggingSignal=z(!1);isMinimizedSignal=z(!1);isMaximizedSignal=z(!1);isConsoleActiveSignal=z(!1);isLightThemeEnabledSignal=z(!1);isDragging=this.isDraggingSignal.asReadonly();isMinimized=this.isMinimizedSignal.asReadonly();isMaximized=this.isMaximizedSignal.asReadonly();isConsoleActive=this.isConsoleActiveSignal.asReadonly();isLightThemeEnabled=this.isLightThemeEnabledSignal.asReadonly();resizedWidth=this.DEFAULT_WIDTH;resizedHeight=this.DEFAULT_HEIGHT;_resizeNotifyTimeoutId=null;consoleService=f(ga);themeService=f(Ni);mapSettingsService=f(ui);boundaryService=f(Ql);windowManagement=f(Bs);cdr=f(oe);renderer=f(qi);xtermService=f(F_);showSettingsPanelSignal=z(!1);settingsSignal=z(this.xtermService.settings);terminalFonts=this.xtermService.getInstalledFonts();defaultFontSize=bC;minFontSize=P4;maxFontSize=T4;showSettingsPanel=this.showSettingsPanelSignal.asReadonly();currentSettings=this.settingsSignal.asReadonly();effectiveBgHex=Ne(()=>{let e=this.settingsSignal().backgroundColor;return e||this.xtermService.getEffectiveBackgroundHex()});effectiveFgHex=Ne(()=>{let e=this.settingsSignal().foregroundColor;return e||this.xtermService.getEffectiveForegroundHex()});dragStartX=0;dragStartY=0;dragStartLeft=0;dragStartBottom=0;preMinimizeStyle=null;constructor(){Vn(()=>{let t=this.windowManagement.minimizedWindows().some(i=>i.id==="console");t&&!this.isMinimizedSignal()?this.isMinimizedSignal.set(!0):!t&&this.isMinimizedSignal()&&this.isMinimizedSignal.set(!1)})}nodes=[];selected=new Ge(0);webConsoleComponents=fA(R_);logConsoleComponent=ln(z_);consoleWrapper=ln("consoleWrapper");ngOnInit(){this.isLightThemeEnabledSignal.set(this.themeService.getActualTheme()==="light"),this.themeSubscription=this.themeService.themeChanged.subscribe(()=>{this.isLightThemeEnabledSignal.set(this.themeService.getActualTheme()==="light"),this.cdr.markForCheck()}),this.loadWindowState();let e=window.innerWidth<=768?56:64;this.boundaryService.setConfig({topOffset:e}),this.consoleService.nodeConsoleTrigger.pipe(He(this.destroy$)).subscribe(t=>{this.addTab(t,!0)}),this.consoleService.closeNodeConsoleTrigger.pipe(He(this.destroy$)).subscribe(t=>{let i=this.nodes.findIndex(a=>a.node_id===t.node_id);i>=0&&this.removeTab(i)}),this.selected.valueChanges.pipe(He(this.destroy$)).subscribe(t=>{t>=0&&t<this.nodes.length&&this.deviceSelected.emit(this.nodes[t].node_id)})}minimize(e){if(this.isMinimizedSignal.set(e),e?this.windowManagement.minimizeWindow("console","console"):this.windowManagement.restoreWindow("console"),e)this.preMinimizeStyle=q({},this.style);else{if(this.preMinimizeStyle){let i=this.preMinimizeStyle.left||this.DEFAULT_LEFT,a=this.preMinimizeStyle.bottom||this.DEFAULT_BOTTOM;if(this.isMaximizedSignal()){let s=window.innerWidth<=768?56:64,p=window.innerHeight-s-20;this.updateStyle({bottom:"0px",left:i,width:`${this.resizedWidth}px`,height:`${p}px`})}else this.updateStyle({bottom:a,left:i,width:`${this.resizedWidth}px`,height:`${this.resizedHeight}px`});this.preMinimizeStyle=null}else{let i=this.style.left||this.DEFAULT_LEFT,a=this.style.bottom||this.DEFAULT_BOTTOM;this.updateStyle({bottom:a,left:i,width:`${this.resizedWidth}px`,height:`${this.resizedHeight}px`})}let t=this.selected.value;t<this.nodes.length?this.focusTerminalAfterRender(t):t===this.nodes.length&&this.focusGns3ConsoleInput()}}toggleMinimize(){this.minimize(!this.isMinimizedSignal())}toggleMaximize(){if(this.isMaximizedSignal.set(!this.isMaximizedSignal()),this.isMaximizedSignal()){let e=window.innerWidth<=768?56:64,i=window.innerHeight-e-20,a=this.style.left||this.DEFAULT_LEFT;this.updateStyle({bottom:"0px",left:a,width:`${this.resizedWidth}px`,height:`${i}px`}),this.notifyConsoleResized(i)}else{let e=this.style.left||this.DEFAULT_LEFT;this.updateStyle({bottom:this.DEFAULT_BOTTOM,left:e,width:`${this.resizedWidth}px`,height:`${this.resizedHeight}px`}),this.notifyConsoleResized(this.resizedHeight)}this.cdr.markForCheck(),this.saveWindowState()}addTab(e,t){if(e.console_type==="vnc")return;this.minimize(!1);let i=this.nodes.findIndex(a=>a.node_id===e.node_id);if(i>=0)t&&(this.selected.setValue(i),this.cdr.markForCheck());else if(this.nodes.push(e),this.consoleService.openConsoles++,t){let a=this.nodes.length-1;this.selected.setValue(-1),this.cdr.markForCheck(),setTimeout(()=>{this.selected.setValue(a),this.cdr.markForCheck(),this.focusTerminalAfterRender(a)},0)}}removeTab(e){if(e<0||e>=this.nodes.length)return;this.nodes.splice(e,1),this.consoleService.openConsoles>0&&this.consoleService.openConsoles--;let t=this.selected.value,i=this.nodes.length;i===0?this.selected.setValue(0):e<=t&&t<i?this.selected.setValue(Math.max(0,t-1)):t>=i&&this.selected.setValue(i-1),this.cdr.markForCheck()}applyStyleToElement(e){let t=this.consoleWrapper()?.nativeElement;t&&(e.position&&this.renderer.setStyle(t,"position",e.position),e.left&&this.renderer.setStyle(t,"left",e.left),e.top&&this.renderer.setStyle(t,"top",e.top),e.bottom&&this.renderer.setStyle(t,"bottom",e.bottom),e.right&&this.renderer.setStyle(t,"right",e.right),e.width&&this.renderer.setStyle(t,"width",e.width),e.height&&this.renderer.setStyle(t,"height",e.height))}updateStyle(e){this.style=e,this.applyStyleToElement(e),this.cdr.markForCheck()}validate(e){return!(e.rectangle.width&&e.rectangle.height&&(e.rectangle.width<500||e.rectangle.height<400))}onResizeEnd(e){let t=this.style,i=t.bottom!==void 0&&t.top===void 0,a=this.boundaryService.constrainResizeSize(e.rectangle.width||this.resizedWidth,e.rectangle.height||this.resizedHeight,e.rectangle.left,e.rectangle.top);if(i){let s=window.innerHeight-a.top-a.height;this.updateStyle({position:"fixed",left:`${a.left}px`,bottom:`${s}px`,width:`${a.width}px`,height:`${a.height}px`})}else this.updateStyle({position:"fixed",left:`${a.left}px`,top:`${a.top}px`,width:`${a.width}px`,height:`${a.height}px`});this.styleInside={height:`${a.height-this.CONSOLE_HEADER_HEIGHT}px`,width:`${a.width}px`},this.consoleService.consoleResized.next({width:a.width,height:a.height-this.CONSOLE_HEADER_HEIGHT}),this.resizedWidth=a.width,this.resizedHeight=a.height,this.saveWindowState()}close(){this.closeConsole.emit(!1)}getActiveTabName(){let e=this.selected.value;if(e<this.nodes.length){let t=this.nodes[e].name;return t.length>12?t.substring(0,10)+"...":t}else return"Console"}onDeviceSelected(e){this.addTab(e,!0),this.deviceSelected.emit(e.node_id)}handleTabShortcut(e){if(!this.isConsoleActiveSignal())return;e.preventDefault(),e.stopPropagation();let t=e.key;if(t==="9")this.switchToTab(this.nodes.length);else{let i=parseInt(t)-1;i<this.nodes.length&&this.switchToTab(i)}}onXtermTabShortcut(e){if(!this.isConsoleActiveSignal())return;e.preventDefault(),e.stopPropagation();let t=e.detail.key,i=parseInt(t)-1;this.switchToTab(i)}onConsoleActivate(){this.isConsoleActiveSignal.set(!0),this.cdr.markForCheck()}onWindowFocus(){this.windowFocused.emit()}onDocumentClick(e){setTimeout(()=>{let t=document.querySelector(".consoleWrapper"),i=e.target;t&&!t.contains(i)&&this.isConsoleActiveSignal()&&(this.isConsoleActiveSignal.set(!1),this.consoleDeactivated.emit(),this.cdr.markForCheck())},0)}switchToTab(e){e<0||e>this.nodes.length||(this.selected.setValue(e),e<this.nodes.length&&this.webConsoleComponents()&&this.focusTerminalAfterRender(e),e===this.nodes.length&&this.focusGns3ConsoleInput())}focusGns3ConsoleInput(){requestAnimationFrame(()=>{requestAnimationFrame(()=>{let e=this.logConsoleComponent();e&&e.focusInput()})})}focusTerminalAfterRender(e){requestAnimationFrame(()=>{requestAnimationFrame(()=>{let t=this.webConsoleComponents();t&&t[e]&&t[e].focusTerminal()})})}enableScroll(e){this.mapSettingsService.isScrollDisabled.next(!1)}disableScroll(e){this.mapSettingsService.isScrollDisabled.next(!0)}onWindowResize(){this.isMinimizedSignal()||this.updateStyle(this.boundaryService.constrainWindowPosition(this.style))}ngAfterViewInit(){this.applyStyleToElement(this.style),this.setupDragHandling(),requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(this.isMaximizedSignal()){let e=window.innerWidth<=768?56:64,i=window.innerHeight-e-20;this.consoleService.consoleResized.next({width:this.resizedWidth,height:i-this.CONSOLE_HEADER_HEIGHT})}else this.consoleService.consoleResized.next({width:this.resizedWidth,height:this.resizedHeight-this.CONSOLE_HEADER_HEIGHT})})})}setupDragHandling(){let e=this.consoleWrapper()?.nativeElement;if(!e)return;let t=e.querySelector(".consoleHeader");if(!t)return;let i=ma(t,"mousedown"),a=ma(document,"mousemove"),s=ma(document,"mouseup");i.pipe(Qn(d=>{d.preventDefault(),this.isDraggingSignal.set(!0),this.cdr.markForCheck(),this.dragStartX=d.clientX,this.dragStartY=d.clientY,this.dragStartLeft=Number(this.style.left?.split("px")[0])||0,this.dragStartBottom=Number(this.style.bottom?.split("px")[0])||0,this.setIframePointerEvents("none")}),Dn(()=>a.pipe(sl(0,rl),He(s.pipe(Qn(()=>{this.onDragEnd()}))))),He(this.destroy$)).subscribe(d=>{let p=d.clientX-this.dragStartX,u=d.clientY-this.dragStartY,g=this.dragStartLeft+p,C=this.dragStartBottom-u,M=this.resizedWidth,x=this.isMinimizedSignal()?48:this.resizedHeight,b=window.innerWidth-M,P=this.boundaryService.getConfigValue().topOffset||0,k=window.innerHeight-x-P;g=Math.max(0,Math.min(b,g)),C=Math.max(0,Math.min(k,C)),this.renderer.setStyle(e,"left",`${g}px`),this.renderer.setStyle(e,"bottom",`${C}px`),this.style.left=`${g}px`,this.style.bottom=`${C}px`})}notifyConsoleResized(e){let t={width:this.resizedWidth,height:e-this.CONSOLE_HEADER_HEIGHT};this.consoleService.consoleResized.next(t),this._resizeNotifyTimeoutId!==null&&clearTimeout(this._resizeNotifyTimeoutId),this._resizeNotifyTimeoutId=setTimeout(()=>{this._resizeNotifyTimeoutId=null,this.consoleService.consoleResized.next({width:this.resizedWidth,height:e-this.CONSOLE_HEADER_HEIGHT})},50)}onDragEnd(){this.isDraggingSignal.set(!1),this.setIframePointerEvents(""),this.cdr.markForCheck(),this.saveWindowState()}setIframePointerEvents(e){let t=this.consoleWrapper()?.nativeElement;t&&t.querySelectorAll("iframe").forEach(i=>{this.renderer.setStyle(i,"pointer-events",e)})}toggleSettingsPanel(){this.showSettingsPanelSignal.update(e=>!e),this.cdr.markForCheck()}closeSettingsPanel(){this.showSettingsPanelSignal.set(!1),this.cdr.markForCheck()}applySettings(e){this.xtermService.updateSettings(e),this.settingsSignal.set(this.xtermService.settings),this.cdr.markForCheck()}onBgColorChange(e){this.applySettings({backgroundColor:e.target.value})}onFgColorChange(e){this.applySettings({foregroundColor:e.target.value})}resetBgColor(){this.applySettings({backgroundColor:null})}resetFgColor(){this.applySettings({foregroundColor:null})}changeFontSize(e){this.applySettings({fontSize:Math.max(this.minFontSize,Math.min(this.maxFontSize,this.currentSettings().fontSize+e))})}resetFontSize(){this.applySettings({fontSize:bC})}onFontFamilyChange(e){this.applySettings({fontFamily:e||null})}ngOnDestroy(){this.themeSubscription&&(this.themeSubscription.unsubscribe(),this.themeSubscription=null),this.destroy$.next(),this.destroy$.complete()}loadWindowState(){let e="gns3_console_window_state";try{let t=localStorage.getItem(e);if(t){let i=JSON.parse(t);if(this.resizedWidth=i.width||this.DEFAULT_WIDTH,this.resizedHeight=i.height||this.DEFAULT_HEIGHT,this.isMaximizedSignal.set(i.isMaximized||!1),this.isMaximizedSignal()){let a=window.innerWidth<=768?56:64,d=window.innerHeight-a-20;this.style={bottom:"0px",left:i.left||this.DEFAULT_LEFT,width:`${this.resizedWidth}px`,height:`${d}px`}}else this.style={bottom:i.bottom||this.DEFAULT_BOTTOM,left:i.left||this.DEFAULT_LEFT,width:`${this.resizedWidth}px`,height:`${this.resizedHeight}px`}}else this.style={bottom:this.DEFAULT_BOTTOM,left:this.DEFAULT_LEFT,width:`${this.DEFAULT_WIDTH}px`,height:`${this.DEFAULT_HEIGHT}px`}}catch{this.style={bottom:this.DEFAULT_BOTTOM,left:this.DEFAULT_LEFT,width:`${this.DEFAULT_WIDTH}px`,height:`${this.DEFAULT_HEIGHT}px`}}}saveWindowState(){let e="gns3_console_window_state";try{let t={width:this.resizedWidth,height:this.resizedHeight,bottom:this.style.bottom,left:this.style.left,isMaximized:this.isMaximizedSignal()};localStorage.setItem(e,JSON.stringify(t))}catch{}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-console-wrapper"]],viewQuery:function(t,i){t&1&&Bn(i.webConsoleComponents,R_,5)(i.logConsoleComponent,z_,5)(i.consoleWrapper,YOe,5),t&2&&jn(3)},hostBindings:function(t,i){t&1&&_("keydown.alt.1",function(s){return i.handleTabShortcut(s)},So)("keydown.alt.2",function(s){return i.handleTabShortcut(s)},So)("keydown.alt.3",function(s){return i.handleTabShortcut(s)},So)("keydown.alt.4",function(s){return i.handleTabShortcut(s)},So)("keydown.alt.5",function(s){return i.handleTabShortcut(s)},So)("keydown.alt.6",function(s){return i.handleTabShortcut(s)},So)("keydown.alt.7",function(s){return i.handleTabShortcut(s)},So)("keydown.alt.8",function(s){return i.handleTabShortcut(s)},So)("keydown.alt.9",function(s){return i.handleTabShortcut(s)},So)("consoleTabShortcut",function(s){return i.onXtermTabShortcut(s)},lm)("click",function(s){return i.onDocumentClick(s)},lm)("resize",function(){return i.onWindowResize()},So)},inputs:{controller:[1,"controller"],project:[1,"project"],zIndex:[1,"zIndex"]},outputs:{closeConsole:"closeConsole",deviceSelected:"deviceSelected",consoleDeactivated:"consoleDeactivated",windowFocused:"windowFocused",windowMinimized:"windowMinimized"},decls:29,vars:22,consts:[["consoleWrapper",""],["mwlResizable","","tabindex","0",1,"consoleWrapper",3,"mousedown","resizeEnd","click","focus","ngClass","validateResize","enableGhostResize"],[1,"console-content"],[3,"deviceSelected","isLightTheme"],[1,"console-area"],[1,"consoleHeader"],[1,"console-wrapper__tabs",3,"selectedIndexChange","selectedIndex"],["mat-tab-label",""],[1,"console-header-actions"],["mat-icon-button","","title","Terminal settings","aria-label","Terminal settings",1,"header-action-btn",3,"mousedown","click"],["mat-icon-button","",1,"header-action-btn",3,"mousedown","click","title"],["mat-icon-button","","aria-label","Minimize console",1,"header-action-btn",3,"mousedown","click"],["mat-icon-button","","aria-label","Close console",1,"header-action-btn","header-action-btn--close",3,"mousedown","click"],[3,"hidden","controller","project"],[3,"hidden","controller","node"],["mwlResizeHandle","",1,"resize-handle","resize-handle-top",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-right",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-bottom",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-left",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-top-left",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-top-right",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-bottom-left",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-bottom-right",3,"resizeEdges"],[1,"tab-label-spacer"],[1,"tab-label-text"],["title","Close","aria-label","Close tab",1,"tab-close-btn",3,"mousedown","click"],[1,"settings-backdrop",3,"click"],[1,"console-settings-panel",3,"mousedown","click"],[1,"settings-panel__title"],[1,"settings-panel__row"],[1,"settings-panel__label"],[1,"settings-panel__color-control"],["title","Pick background color",1,"color-swatch"],["type","color",3,"change","value"],["title","Reset to theme default","aria-label","Reset background color",1,"reset-btn"],[1,"settings-panel__auto-badge"],["title","Pick text color",1,"color-swatch"],["title","Reset to theme default","aria-label","Reset text color",1,"reset-btn"],[1,"settings-panel__font-size-control"],["aria-label","Decrease font size",1,"font-size-step-btn",3,"click","disabled"],[1,"settings-panel__font-size-value"],["aria-label","Increase font size",1,"font-size-step-btn",3,"click","disabled"],["title","Reset to default size","aria-label","Reset font size",1,"reset-btn"],[1,"settings-panel__row","settings-panel__row--font"],["aria-label","Select terminal font",1,"settings-panel__font-select",3,"change","value"],[3,"value"],["title","Reset to theme default","aria-label","Reset background color",1,"reset-btn",3,"click"],["title","Reset to theme default","aria-label","Reset text color",1,"reset-btn",3,"click"],["title","Reset to default size","aria-label","Reset font size",1,"reset-btn",3,"click"]],template:function(t,i){t&1&&(r(0,"div",1,0),_("mousedown",function(){return i.onWindowFocus()})("resizeEnd",function(s){return i.onResizeEnd(s)})("click",function(){return i.onConsoleActivate()})("focus",function(){return i.onConsoleActivate()}),T(2,lDe,8,16),r(3,"div",2)(4,"app-console-devices-panel",3),_("deviceSelected",function(s){return i.onDeviceSelected(s)}),l(),r(5,"div",4)(6,"div",5)(7,"mat-tab-group",6),_("selectedIndexChange",function(s){return i.selected.setValue(s)}),Q(8,dDe,2,0,"mat-tab",null,ni),r(10,"mat-tab"),se(11,mDe,2,0,"ng-template",7),l()(),r(12,"div",8)(13,"button",9),_("mousedown",function(s){return s.stopPropagation()})("click",function(){return i.toggleSettingsPanel()}),r(14,"mat-icon"),c(15,"tune"),l()(),r(16,"button",10),_("mousedown",function(s){return s.stopPropagation()})("click",function(){return i.toggleMaximize()}),r(17,"mat-icon"),c(18),l()(),r(19,"button",11),_("mousedown",function(s){return s.stopPropagation()})("click",function(){return i.minimize(!0)}),r(20,"mat-icon"),c(21,"remove"),l()(),r(22,"button",12),_("mousedown",function(s){return s.stopPropagation()})("click",function(){return i.close()}),r(23,"mat-icon"),c(24,"close"),l()()()(),T(25,vDe,39,17),L(26,"app-log-console",13),Q(27,CDe,1,3,"app-web-console",14,ni),l()()()),t&2&&(Tt("z-index",i.zIndex()),v("ngClass",LC(17,ZOe,i.isLightThemeEnabled(),i.isConsoleActive(),i.isMinimized(),i.isDragging()))("validateResize",i.validate)("enableGhostResize",!0),m(2),E(i.isMinimized()?-1:2),m(2),v("isLightTheme",i.isLightThemeEnabled()),m(3),v("selectedIndex",i.selected.value),m(),K(i.nodes),m(5),ne("active",i.showSettingsPanel()),m(3),v("title",i.isMaximized()?"Restore":"Maximize height"),Ce("aria-label",i.isMaximized()?"Restore console height":"Maximize console height"),m(2),N(i.isMaximized()?"fullscreen_exit":"fullscreen"),m(7),E(i.showSettingsPanel()?25:-1),m(),v("hidden",i.selected.value!==i.nodes.length)("controller",i.controller())("project",i.project()),m(),K(i.nodes))},dependencies:[fe,Ao,St,QA,KA,bo,Ir,Xo,Yo,ie,ce,Y,Be,st,er,tr,c2,R_,z_],styles:['@charset "UTF-8";@media screen and (max-width:700px){.consoleWrapper[_ngcontent-%COMP%]{visibility:hidden}}.consoleWrapper[_ngcontent-%COMP%]{box-shadow:0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 20%,transparent);position:fixed;bottom:100px;left:80px;height:180px;width:600px;background:var(--mat-sys-surface);color:var(--mat-sys-on-surface);overflow:hidden;font-size:12px;border-radius:4px;outline:none;transition:box-shadow var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1);z-index:900;contain:layout style}.consoleWrapper.is-dragging[_ngcontent-%COMP%]{cursor:grabbing;user-select:none;box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 40%,transparent);transition:none;will-change:left,bottom}.consoleWrapper.is-minimized[_ngcontent-%COMP%]{display:none}.taskbar-icon[_ngcontent-%COMP%]{position:fixed;bottom:20px;left:20px;z-index:901;display:flex;align-items:center;gap:8px;padding:8px 12px;height:48px;width:180px;cursor:pointer;user-select:none;transition:background-color var(--gns3-motion-duration-standard) linear;background:var(--mat-sys-surface);border-radius:8px;box-shadow:0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 25%,transparent),0 0 0 1px var(--mat-sys-outline-variant)}.taskbar-icon[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-on-surface) 8%,var(--mat-sys-surface))}.taskbar-icon[_ngcontent-%COMP%]:active{background:color-mix(in srgb,var(--mat-sys-on-surface) 12%,var(--mat-sys-surface))}.taskbar-icon__icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px;color:var(--mat-sys-primary);flex-shrink:0}.taskbar-icon__label[_ngcontent-%COMP%]{flex:1;font-size:12px;font-weight:500;color:var(--mat-sys-on-surface);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:none}.consoleHeader[_ngcontent-%COMP%]{width:100%;height:40px;overflow:hidden;overflow:clip;display:flex;padding:0 2px;justify-content:space-between;align-items:center;background:var(--mat-sys-surface);cursor:grab;position:relative;z-index:10;flex-shrink:0;border-bottom:1px solid var(--mat-sys-outline-variant)}.consoleHeader[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px}.consoleHeader[_ngcontent-%COMP%]:active{cursor:grabbing}.console-wrapper__tabs[_ngcontent-%COMP%]{flex:1;min-width:0}.tab-label-spacer[_ngcontent-%COMP%]{width:18px;flex-shrink:0}.tab-label-text[_ngcontent-%COMP%]{flex:1;font-size:14px;font-weight:500;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tab-close-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border:none;background:transparent;border-radius:3px;cursor:pointer;color:var(--mat-sys-on-surface-variant);padding:0;flex-shrink:0;opacity:.6;transition:opacity var(--gns3-motion-duration-standard) ease,background-color var(--gns3-motion-duration-standard) ease}.tab-close-btn[_ngcontent-%COMP%]:hover{opacity:1;background:color-mix(in srgb,var(--mat-sys-on-surface) 15%,transparent)}.tab-close-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px;line-height:18px}.header-action-btn[_ngcontent-%COMP%]{width:32px;height:32px;--mat-icon-button-state-layer-size: 32px}.header-action-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px}.header-action-btn.active[_ngcontent-%COMP%]{color:var(--mat-sys-primary);background:color-mix(in srgb,var(--mat-sys-primary) 12%,transparent);border-radius:4px}.header-action-btn--close[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--mat-sys-error) 15%,transparent);border-radius:50%;color:var(--mat-sys-error)}.header-action-btn--close[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-error) 28%,transparent)}.settings-backdrop[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:199}.console-settings-panel[_ngcontent-%COMP%]{position:absolute;top:40px;right:15px;z-index:200;background:var(--mat-sys-surface-container-high);border:1px solid var(--mat-sys-outline-variant);border-top:none;border-radius:0 0 8px 8px;padding:12px 10px 12px 14px;min-width:280px;box-shadow:0 4px 16px color-mix(in srgb,var(--mat-sys-shadow) 28%,transparent)}.settings-panel__title[_ngcontent-%COMP%]{font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--mat-sys-on-surface-variant);margin-bottom:10px}.settings-panel__row[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;min-height:30px;gap:8px}.settings-panel__row[_ngcontent-%COMP%] + .settings-panel__row[_ngcontent-%COMP%]{margin-top:4px}.settings-panel__label[_ngcontent-%COMP%]{font-size:12px;color:var(--mat-sys-on-surface);flex:1}.settings-panel__color-control[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;flex-shrink:0}.color-swatch[_ngcontent-%COMP%]{display:flex;width:28px;height:22px;flex-shrink:0;border-radius:4px;background-color:var(--swatch-color);box-shadow:inset 0 0 0 1px var(--mat-sys-outline-variant),0 0 0 1px transparent;overflow:hidden;cursor:pointer;position:relative;transition:box-shadow var(--gns3-motion-duration-standard) ease}.color-swatch[_ngcontent-%COMP%]:hover{box-shadow:inset 0 0 0 1px var(--mat-sys-outline),0 0 0 1px transparent}.color-swatch--custom[_ngcontent-%COMP%]{box-shadow:inset 0 0 0 1px var(--mat-sys-primary),0 0 0 1px var(--mat-sys-primary)}.color-swatch[_ngcontent-%COMP%] input[type=color][_ngcontent-%COMP%]{position:absolute;inset:-4px;width:calc(100% + 8px);height:calc(100% + 8px);border:none;padding:0;cursor:pointer;background:none;opacity:.01}.settings-panel__auto-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:26px;height:22px;font-size:10px;font-weight:500;color:var(--mat-sys-on-surface-variant);background:color-mix(in srgb,var(--mat-sys-on-surface-variant) 12%,transparent);border-radius:3px;flex-shrink:0}.reset-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border:none;background:transparent;border-radius:4px;cursor:pointer;color:var(--mat-sys-on-surface-variant);padding:0;flex-shrink:0;transition:background-color var(--gns3-motion-duration-standard) ease,color var(--gns3-motion-duration-standard) ease}.reset-btn[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-on-surface-variant) 12%,transparent);color:var(--mat-sys-on-surface)}.reset-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px;line-height:20px}.settings-panel__font-size-control[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px}.settings-panel__row--font[_ngcontent-%COMP%]{align-items:center}.settings-panel__font-select[_ngcontent-%COMP%]{flex:1;min-width:0;height:26px;padding:0 6px;font-size:12px;color:var(--mat-sys-on-surface);background:var(--mat-sys-surface-container);border:1px solid var(--mat-sys-outline-variant);border-radius:4px;cursor:pointer;appearance:auto;transition:border-color var(--gns3-motion-duration-standard) ease}.settings-panel__font-select[_ngcontent-%COMP%]:hover{border-color:var(--mat-sys-outline)}.settings-panel__font-select[_ngcontent-%COMP%]:focus{outline:2px solid var(--mat-sys-primary);outline-offset:1px}.settings-panel__font-select[_ngcontent-%COMP%] option[_ngcontent-%COMP%]{background:var(--mat-sys-surface-container-high);color:var(--mat-sys-on-surface)}.settings-panel__font-size-value[_ngcontent-%COMP%]{font-size:12px;font-weight:600;color:var(--mat-sys-on-surface);min-width:36px;text-align:center}.font-size-step-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border:1px solid var(--mat-sys-outline-variant);border-radius:4px;background:transparent;color:var(--mat-sys-on-surface);cursor:pointer;padding:0;transition:background-color var(--gns3-motion-duration-standard) ease,border-color var(--gns3-motion-duration-standard) ease}.font-size-step-btn[_ngcontent-%COMP%]:hover:not(:disabled){background:color-mix(in srgb,var(--mat-sys-on-surface) 10%,transparent);border-color:var(--mat-sys-outline)}.font-size-step-btn[_ngcontent-%COMP%]:disabled{opacity:.38;cursor:default}.font-size-step-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:14px;width:14px;height:14px}.console-content[_ngcontent-%COMP%]{display:flex;height:100%;overflow:hidden}.console-area[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;overflow:hidden;position:relative}.resize-handle[_ngcontent-%COMP%]{position:absolute;z-index:100;opacity:0;transition:opacity var(--gns3-motion-duration-standard) ease}.consoleWrapper[_ngcontent-%COMP%]:hover .resize-handle[_ngcontent-%COMP%]{opacity:1}.resize-handle.resize-handle-top[_ngcontent-%COMP%]{top:-4px;left:12px;right:12px;height:12px;cursor:ns-resize;background:transparent}.resize-handle.resize-handle-right[_ngcontent-%COMP%]{top:12px;right:-4px;bottom:12px;width:12px;cursor:ew-resize;background:transparent}.resize-handle.resize-handle-bottom[_ngcontent-%COMP%]{bottom:-4px;left:12px;right:12px;height:12px;cursor:ns-resize;background:transparent}.resize-handle.resize-handle-left[_ngcontent-%COMP%]{top:12px;left:-4px;bottom:12px;width:12px;cursor:ew-resize;background:transparent}.resize-handle.resize-handle-top-left[_ngcontent-%COMP%]{top:-6px;left:-6px;width:20px;height:20px;cursor:nwse-resize;background:transparent}.resize-handle.resize-handle-top-right[_ngcontent-%COMP%]{top:-6px;right:-6px;width:20px;height:20px;cursor:nesw-resize;background:transparent}.resize-handle.resize-handle-bottom-left[_ngcontent-%COMP%]{bottom:-6px;left:-6px;width:20px;height:20px;cursor:nesw-resize;background:transparent}.resize-handle.resize-handle-bottom-right[_ngcontent-%COMP%]{bottom:-6px;right:-6px;width:20px;height:20px;cursor:nwse-resize;background:transparent}'],changeDetection:0})}return n})();var bDe=["windowWrapper"],xDe=()=>({top:!0}),yDe=()=>({right:!0}),wDe=()=>({bottom:!0}),MDe=()=>({left:!0}),SDe=()=>({top:!0,left:!0}),kDe=()=>({top:!0,right:!0}),PDe=()=>({bottom:!0,left:!0}),TDe=()=>({bottom:!0,right:!0});function EDe(n,o){n&1&&L(0,"div",17)(1,"div",18)(2,"div",19)(3,"div",20)(4,"div",21)(5,"div",22)(6,"div",23)(7,"div",24),n&2&&(v("resizeEdges",at(8,xDe)),m(),v("resizeEdges",at(9,yDe)),m(),v("resizeEdges",at(10,wDe)),m(),v("resizeEdges",at(11,MDe)),m(),v("resizeEdges",at(12,SDe)),m(),v("resizeEdges",at(13,kDe)),m(),v("resizeEdges",at(14,PDe)),m(),v("resizeEdges",at(15,TDe)))}function ODe(n,o){n&1&&(r(0,"div",14)(1,"mat-icon",25),c(2,"loading"),l(),r(3,"span"),c(4,"Starting Web Wireshark..."),l()())}function DDe(n,o){n&1&&(r(0,"div",15),L(1,"img",26),r(2,"span"),c(3,"Restarting Web Wireshark..."),l()())}var Bj=(()=>{class n{DEFAULT_WIDTH=800;DEFAULT_HEIGHT=600;DEFAULT_LEFT="100px";DEFAULT_TOP="100px";MIN_WIDTH=800;MIN_HEIGHT=600;MAX_WIDTH=1920;MAX_HEIGHT=1080;destroy$=new Ye;link=ee.required();controller=ee.required();project=ee.required();zIndex=ee(1e3);closeWindow=new be;windowFocused=new be;windowMinimized=new be;style={position:"fixed",left:this.DEFAULT_LEFT,top:this.DEFAULT_TOP,width:`${this.DEFAULT_WIDTH}px`,height:`${this.DEFAULT_HEIGHT}px`};resizedWidth=this.DEFAULT_WIDTH;resizedHeight=this.DEFAULT_HEIGHT;isDraggingSignal=z(!1);isResizingSignal=z(!1);isLoadingSignal=z(!0);isMinimizedSignal=z(!1);isRestartingSignal=z(!1);isDownloadingSignal=z(!1);isDragging=this.isDraggingSignal.asReadonly();isResizing=this.isResizingSignal.asReadonly();isLoading=this.isLoadingSignal.asReadonly();isMinimized=this.isMinimizedSignal.asReadonly();isRestarting=this.isRestartingSignal.asReadonly();isDownloading=this.isDownloadingSignal.asReadonly();wiresharkUrl="";xpraConsoleService=f(S_);boundaryService=f(Ql);toasterService=f(re);cdr=f(oe);renderer=f(qi);sanitizer=f(Pr);windowManagement=f(Bs);linkService=f(Ri);dragStartX=0;dragStartY=0;dragStartLeft=0;dragStartTop=0;windowWrapper=ln("windowWrapper");constructor(){Vn(()=>{let e=this.link(),t=this.windowManagement.minimizedWindows(),i=`wireshark-${e?.link_id}`,a=t.some(s=>s.id===i);a&&!this.isMinimizedSignal()?this.isMinimizedSignal.set(!0):!a&&this.isMinimizedSignal()&&this.isMinimizedSignal.set(!1)})}ngOnInit(){let e=window.innerWidth<=768?56:64;this.boundaryService.setConfig({topOffset:e,minWidth:this.MIN_WIDTH,minHeight:this.MIN_HEIGHT,maxWidth:this.MAX_WIDTH,maxHeight:this.MAX_HEIGHT}),this.wiresharkUrl=this.buildWiresharkUrl(),this.setupDragHandling()}getWindowId(){return`wireshark-${this.link().link_id}`}buildWiresharkUrl(){let e=this.link(),t=this.controller(),i=this.xpraConsoleService.buildXpraWebSocketUrlForWebWireshark(t,e),a=this.xpraConsoleService.buildXpraConsolePageUrl(i);return this.sanitizer.bypassSecurityTrustResourceUrl(a)}onIframeLoad(){this.isLoadingSignal.set(!1),this.cdr.markForCheck()}close(){this.windowManagement.restoreWindow(this.getWindowId()),this.closeWindow.emit()}toggleMinimize(){this.windowManagement.toggleMinimize(this.getWindowId(),"wireshark",this.link().link_id),this.cdr.markForCheck()}restartWireshark(){this.isRestartingSignal()||(this.isRestartingSignal.set(!0),this.cdr.markForCheck(),this.linkService.restartWiresharkCapture(this.controller(),this.link()).subscribe({next:e=>{this.isRestartingSignal.set(!1),this.wiresharkUrl=this.buildWiresharkUrl(),this.isLoadingSignal.set(!0),this.cdr.markForCheck()},error:e=>{this.isRestartingSignal.set(!1),this.toasterService.error(`Failed to restart Web Wireshark: ${e.message||e.detail||"Unknown error"}`),this.cdr.markForCheck()}}))}downloadPcapFile(){this.isDownloadingSignal()||(this.isDownloadingSignal.set(!0),this.cdr.markForCheck(),this.linkService.downloadPcap(this.controller(),this.link()).subscribe({next:e=>{let t=window.URL.createObjectURL(e),i=document.createElement("a");i.href=t;let a=this.link().capture_file_name||"capture";i.download=a.endsWith(".pcap")?a:`${a}.pcap`,document.body.appendChild(i),i.click(),document.body.removeChild(i),window.URL.revokeObjectURL(t),this.isDownloadingSignal.set(!1),this.toasterService.success("Pcap file downloaded successfully"),this.cdr.markForCheck()},error:e=>{this.isDownloadingSignal.set(!1);let t=e.error?.message||e.message||"Failed to download pcap file";this.toasterService.error(`Failed to download pcap file: ${t}`),this.cdr.markForCheck()}}))}onWindowFocus(){if(this.isMinimizedSignal()){this.toggleMinimize();return}this.windowFocused.emit()}validate(e){return!(e.rectangle.width&&e.rectangle.height&&(e.rectangle.width<this.MIN_WIDTH||e.rectangle.height<this.MIN_HEIGHT||e.rectangle.width>this.MAX_WIDTH||e.rectangle.height>this.MAX_HEIGHT))}onResizeStart(){this.isResizingSignal.set(!0),this.setIframePointerEvents("none"),this.cdr.markForCheck()}onResizeEnd(e){let t=this.boundaryService.constrainResizeSize(e.rectangle.width||this.resizedWidth,e.rectangle.height||this.resizedHeight,e.rectangle.left,e.rectangle.top);this.style={position:"fixed",left:`${t.left}px`,top:`${t.top}px`,width:`${t.width}px`,height:`${t.height}px`},this.resizedWidth=t.width,this.resizedHeight=t.height,this.applyStyleToElement(),this.isResizingSignal.set(!1),this.setIframePointerEvents(""),this.cdr.markForCheck()}applyStyleToElement(){let e=this.windowWrapper()?.nativeElement;e&&(this.style.position&&this.renderer.setStyle(e,"position",this.style.position),this.style.left&&this.renderer.setStyle(e,"left",this.style.left),this.style.top&&this.renderer.setStyle(e,"top",this.style.top),this.style.width&&this.renderer.setStyle(e,"width",this.style.width),this.style.height&&this.renderer.setStyle(e,"height",this.style.height))}setupDragHandling(){let e=this.windowWrapper()?.nativeElement;if(!e)return;let t=e.querySelector(".web-wireshark-inline-header");if(!t)return;let i=ma(t,"mousedown"),a=ma(document,"mousemove"),s=ma(document,"mouseup");i.pipe(Qn(d=>{d.preventDefault(),this.isDraggingSignal.set(!0),this.cdr.markForCheck(),this.dragStartX=d.clientX,this.dragStartY=d.clientY,this.dragStartLeft=Number(this.style.left?.split("px")[0])||0,this.dragStartTop=Number(this.style.top?.split("px")[0])||0,this.setIframePointerEvents("none")}),Dn(()=>a.pipe(He(s.pipe(Qn(()=>{this.onDragEnd()}))))),He(this.destroy$)).subscribe(d=>{let p=d.clientX-this.dragStartX,u=d.clientY-this.dragStartY,g=this.dragStartLeft+p,C=this.dragStartTop+u,M=this.resizedWidth,x=this.resizedHeight,b=window.innerWidth-M,P=this.boundaryService.getConfigValue().topOffset||0,k=window.innerHeight-x-P;g=Math.max(0,Math.min(b,g)),C=Math.max(P,Math.min(k,C)),this.renderer.setStyle(e,"left",`${g}px`),this.renderer.setStyle(e,"top",`${C}px`),this.style.left=`${g}px`,this.style.top=`${C}px`})}onDragEnd(){this.isDraggingSignal.set(!1),this.setIframePointerEvents(""),this.cdr.markForCheck()}setIframePointerEvents(e){let t=this.windowWrapper()?.nativeElement;t&&t.querySelectorAll("iframe").forEach(i=>{this.renderer.setStyle(i,"pointer-events",e)})}onWindowResize(){this.style=this.boundaryService.constrainWindowPosition(this.style),this.applyStyleToElement()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-web-wireshark-inline"]],viewQuery:function(t,i){t&1&&Bn(i.windowWrapper,bDe,5),t&2&&jn()},hostBindings:function(t,i){t&1&&_("resize",function(){return i.onWindowResize()},So)},inputs:{link:[1,"link"],controller:[1,"controller"],project:[1,"project"],zIndex:[1,"zIndex"]},outputs:{closeWindow:"closeWindow",windowFocused:"windowFocused",windowMinimized:"windowMinimized"},decls:29,vars:22,consts:[["windowWrapper",""],["mwlResizable","",1,"web-wireshark-inline",3,"mousedown","resizeStart","resizeEnd","ngStyle","validateResize","enableGhostResize"],[1,"web-wireshark-inline__content"],[1,"web-wireshark-inline-header"],[1,"web-wireshark-inline-header__title"],[1,"header-icon"],[1,"link-info"],[1,"web-wireshark-inline-header__actions"],["mat-icon-button","","title","Download pcap file",1,"download-button",3,"click","disabled"],["mat-icon-button","","title","Restart Web Wireshark",1,"restart-button",3,"click","disabled"],[1,"restart-icon"],["mat-icon-button","","title","Minimize",1,"minimize-button",3,"click"],["mat-icon-button","","title","Close",1,"close-button",3,"click"],[1,"web-wireshark-inline__iframe-container"],[1,"loading-overlay"],[1,"restart-overlay"],["allowfullscreen","",1,"web-wireshark-inline__iframe",3,"load","src"],["mwlResizeHandle","",1,"resize-handle","resize-handle-top",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-right",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-bottom",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-left",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-top-left",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-top-right",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-bottom-left",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-bottom-right",3,"resizeEdges"],[1,"loading-icon"],["src","assets/gns3_icon.svg","alt","GNS3",1,"restart-logo"]],template:function(t,i){t&1&&(r(0,"div",1,0),_("mousedown",function(){return i.onWindowFocus()})("resizeStart",function(){return i.onResizeStart()})("resizeEnd",function(s){return i.onResizeEnd(s)}),T(2,EDe,8,16),r(3,"div",2)(4,"div",3)(5,"div",4)(6,"mat-icon",5),c(7,"analytics"),l(),r(8,"span"),c(9,"Web Wireshark"),l(),r(10,"span",6),c(11),l()(),r(12,"div",7)(13,"button",8),_("click",function(){return i.downloadPcapFile()}),r(14,"mat-icon"),c(15,"download"),l()(),r(16,"button",9),_("click",function(){return i.restartWireshark()}),r(17,"mat-icon",10),c(18,"restart_alt"),l()(),r(19,"button",11),_("click",function(){return i.toggleMinimize()}),r(20,"mat-icon"),c(21,"remove"),l()(),r(22,"button",12),_("click",function(){return i.close()}),r(23,"mat-icon"),c(24,"close"),l()()()(),r(25,"div",13),T(26,ODe,5,0,"div",14),T(27,DDe,4,0,"div",15),r(28,"iframe",16),_("load",function(){return i.onIframeLoad()}),l()()()()),t&2&&(Tt("z-index",i.zIndex()),ne("is-dragging",i.isDragging())("is-resizing",i.isResizing())("is-minimized",i.isMinimized()),v("ngStyle",i.style)("validateResize",i.validate)("enableGhostResize",!1),m(2),E(i.isMinimized()?-1:2),m(9),N(i.link().capture_file_name),m(2),v("disabled",i.isDownloading()),m(),ne("is-downloading",i.isDownloading()),m(2),v("disabled",i.isRestarting()),m(),ne("is-spinning",i.isRestarting()),m(9),E(i.isLoading()?26:-1),m(),E(i.isRestarting()?27:-1),m(),v("src",i.wiresharkUrl,AC))},dependencies:[fe,ll,ie,ce,Y,Be,er,tr],styles:[".web-wireshark-inline[_ngcontent-%COMP%]{position:fixed;z-index:1000;background:var(--mat-sys-surface);border:2px solid var(--mat-sys-outline);border-radius:8px;box-shadow:0 8px 24px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent),0 4px 8px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent);overflow:visible;transition:box-shadow var(--gns3-motion-duration-standard) ease;contain:layout style}.web-wireshark-inline[_ngcontent-%COMP%]:hover{box-shadow:0 12px 32px color-mix(in srgb,var(--mat-sys-shadow) 20%,transparent),0 6px 12px color-mix(in srgb,var(--mat-sys-shadow) 12%,transparent)}.web-wireshark-inline.is-dragging[_ngcontent-%COMP%]{box-shadow:0 16px 48px color-mix(in srgb,var(--mat-sys-shadow) 25%,transparent),0 8px 16px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent);opacity:.9;cursor:grabbing;will-change:left,top}.web-wireshark-inline.is-minimized[_ngcontent-%COMP%]{display:none}.web-wireshark-inline__content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden;border-radius:6px}.web-wireshark-inline-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:4px 8px;background:var(--mat-sys-surface-container);border-bottom:1px solid var(--mat-sys-outline-variant);cursor:grab}.web-wireshark-inline-header[_ngcontent-%COMP%]:active{cursor:grabbing}.web-wireshark-inline-header[_ngcontent-%COMP%]{user-select:none;flex-shrink:0}.web-wireshark-inline-header__title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;font-size:12px;font-weight:500;color:var(--mat-sys-on-surface)}.web-wireshark-inline-header__title[_ngcontent-%COMP%] .header-icon[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-primary);width:14px;height:14px}.web-wireshark-inline-header__title[_ngcontent-%COMP%] .link-info[_ngcontent-%COMP%]{font-size:10px;color:var(--mat-sys-on-surface-variant);font-weight:400;margin-left:4px;padding-left:4px;border-left:1px solid var(--mat-sys-outline-variant)}.web-wireshark-inline-header__actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px}.web-wireshark-inline-header__actions[_ngcontent-%COMP%] .minimize-button[_ngcontent-%COMP%], .web-wireshark-inline-header__actions[_ngcontent-%COMP%] .close-button[_ngcontent-%COMP%]{width:24px;height:24px;padding:0;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle}.web-wireshark-inline-header__actions[_ngcontent-%COMP%] .minimize-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], .web-wireshark-inline-header__actions[_ngcontent-%COMP%] .close-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;vertical-align:middle}.web-wireshark-inline-header__actions[_ngcontent-%COMP%] .minimize-button[_ngcontent-%COMP%]:hover, .web-wireshark-inline-header__actions[_ngcontent-%COMP%] .close-button[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-error-container);color:var(--mat-sys-error)}.web-wireshark-inline-header__actions[_ngcontent-%COMP%] .restart-button[_ngcontent-%COMP%], .web-wireshark-inline-header__actions[_ngcontent-%COMP%] .download-button[_ngcontent-%COMP%]{width:24px;height:24px;padding:0;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle}.web-wireshark-inline-header__actions[_ngcontent-%COMP%] .restart-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], .web-wireshark-inline-header__actions[_ngcontent-%COMP%] .download-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;vertical-align:middle;color:var(--mat-sys-primary)}.web-wireshark-inline-header__actions[_ngcontent-%COMP%] .restart-button[_ngcontent-%COMP%]:hover:not(:disabled), .web-wireshark-inline-header__actions[_ngcontent-%COMP%] .download-button[_ngcontent-%COMP%]:hover:not(:disabled){background-color:var(--mat-sys-primary-container);color:var(--mat-sys-on-primary-container)}.web-wireshark-inline-header__actions[_ngcontent-%COMP%] .restart-button[_ngcontent-%COMP%]:hover mat-icon[_ngcontent-%COMP%], .web-wireshark-inline-header__actions[_ngcontent-%COMP%] .download-button[_ngcontent-%COMP%]:hover mat-icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container)}.web-wireshark-inline-header__actions[_ngcontent-%COMP%] .restart-button[_ngcontent-%COMP%]:disabled, .web-wireshark-inline-header__actions[_ngcontent-%COMP%] .download-button[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.web-wireshark-inline-header__actions[_ngcontent-%COMP%] .restart-button[_ngcontent-%COMP%] .restart-icon.is-spinning[_ngcontent-%COMP%], .web-wireshark-inline-header__actions[_ngcontent-%COMP%] .restart-button[_ngcontent-%COMP%] mat-icon.is-downloading[_ngcontent-%COMP%], .web-wireshark-inline-header__actions[_ngcontent-%COMP%] .download-button[_ngcontent-%COMP%] .restart-icon.is-spinning[_ngcontent-%COMP%], .web-wireshark-inline-header__actions[_ngcontent-%COMP%] .download-button[_ngcontent-%COMP%] mat-icon.is-downloading[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_spin 1s linear infinite}.web-wireshark-inline__iframe-container[_ngcontent-%COMP%]{flex:1;position:relative;overflow:hidden;min-height:200px;height:100%}.web-wireshark-inline__iframe[_ngcontent-%COMP%]{width:100%;height:100%;border:none;display:block}.loading-overlay[_ngcontent-%COMP%]{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;background:var(--mat-sys-surface);z-index:1}.loading-overlay[_ngcontent-%COMP%] .loading-icon[_ngcontent-%COMP%]{font-size:48px;color:var(--mat-sys-primary);will-change:transform;animation:_ngcontent-%COMP%_spin 1s linear infinite}.loading-overlay[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface-variant)}@keyframes _ngcontent-%COMP%_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.restart-overlay[_ngcontent-%COMP%]{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;background:color-mix(in srgb,var(--mat-sys-surface) 90%,transparent);backdrop-filter:blur(4px);z-index:10}.restart-overlay[_ngcontent-%COMP%] .restart-logo[_ngcontent-%COMP%]{width:80px;height:80px;animation:_ngcontent-%COMP%_breathe 2s ease-in-out infinite;filter:drop-shadow(0 0 8px var(--mat-sys-primary))}.restart-overlay[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface);font-weight:500}@keyframes _ngcontent-%COMP%_breathe{0%,to{transform:scale(1);opacity:.8}50%{transform:scale(1.1);opacity:1}}.resize-handle[_ngcontent-%COMP%]{position:absolute;z-index:100;opacity:0;transition:opacity var(--gns3-motion-duration-standard) ease}.web-wireshark-inline[_ngcontent-%COMP%]:hover .resize-handle[_ngcontent-%COMP%]{opacity:1}.resize-handle.resize-handle-top[_ngcontent-%COMP%]{top:-4px;left:12px;right:12px;height:12px;cursor:ns-resize;background:transparent}.resize-handle.resize-handle-right[_ngcontent-%COMP%]{top:12px;right:-4px;bottom:12px;width:12px;cursor:ew-resize;background:transparent}.resize-handle.resize-handle-bottom[_ngcontent-%COMP%]{bottom:-4px;left:12px;right:12px;height:12px;cursor:ns-resize;background:transparent}.resize-handle.resize-handle-left[_ngcontent-%COMP%]{top:12px;left:-4px;bottom:12px;width:12px;cursor:ew-resize;background:transparent}.resize-handle.resize-handle-top-left[_ngcontent-%COMP%]{top:-6px;left:-6px;width:20px;height:20px;cursor:nwse-resize;background:transparent}.resize-handle.resize-handle-top-right[_ngcontent-%COMP%]{top:-6px;right:-6px;width:20px;height:20px;cursor:nesw-resize;background:transparent}.resize-handle.resize-handle-bottom-left[_ngcontent-%COMP%]{bottom:-6px;left:-6px;width:20px;height:20px;cursor:nesw-resize;background:transparent}.resize-handle.resize-handle-bottom-right[_ngcontent-%COMP%]{bottom:-6px;right:-6px;width:20px;height:20px;cursor:nwse-resize;background:transparent}@media(prefers-reduced-motion:reduce){.restart-logo[_ngcontent-%COMP%]{animation:none}}"],changeDetection:0})}return n})();var IDe=["windowWrapper"],ADe=()=>({top:!0}),NDe=()=>({right:!0}),FDe=()=>({bottom:!0}),RDe=()=>({left:!0}),zDe=()=>({top:!0,left:!0}),LDe=()=>({top:!0,right:!0}),VDe=()=>({bottom:!0,left:!0}),BDe=()=>({bottom:!0,right:!0});function jDe(n,o){n&1&&L(0,"div",13)(1,"div",14)(2,"div",15)(3,"div",16)(4,"div",17)(5,"div",18)(6,"div",19)(7,"div",20),n&2&&(v("resizeEdges",at(8,ADe)),m(),v("resizeEdges",at(9,NDe)),m(),v("resizeEdges",at(10,FDe)),m(),v("resizeEdges",at(11,RDe)),m(),v("resizeEdges",at(12,zDe)),m(),v("resizeEdges",at(13,LDe)),m(),v("resizeEdges",at(14,VDe)),m(),v("resizeEdges",at(15,BDe)))}function $De(n,o){n&1&&(r(0,"div",11)(1,"mat-icon",21),c(2,"loading"),l(),r(3,"span"),c(4,"Starting Web Console..."),l()())}function HDe(n,o){if(n&1){let e=R();r(0,"iframe",22),_("load",function(){y(e);let i=h();return w(i.onIframeLoad())}),l()}if(n&2){let e=h();v("src",e.consoleUrl,AC)}}var jj=(()=>{class n{DEFAULT_WIDTH=1024;DEFAULT_HEIGHT=768;DEFAULT_LEFT="100px";DEFAULT_TOP="100px";MIN_WIDTH=400;MIN_HEIGHT=300;destroy$=new Ye;node=ee.required();controller=ee.required();project=ee.required();zIndex=ee(1e3);closeWindow=new be;windowFocused=new be;windowMinimized=new be;style={position:"fixed",left:this.DEFAULT_LEFT,top:this.DEFAULT_TOP,width:`${this.DEFAULT_WIDTH}px`,height:`${this.DEFAULT_HEIGHT}px`};resizedWidth=this.DEFAULT_WIDTH;resizedHeight=this.DEFAULT_HEIGHT;isDraggingSignal=z(!1);isResizingSignal=z(!1);isLoadingSignal=z(!0);isMinimizedSignal=z(!1);isDragging=this.isDraggingSignal.asReadonly();isResizing=this.isResizingSignal.asReadonly();isLoading=this.isLoadingSignal.asReadonly();isMinimized=this.isMinimizedSignal.asReadonly();consoleUrl="";boundaryService=f(Ql);toasterService=f(re);cdr=f(oe);renderer=f(qi);sanitizer=f(Pr);windowManagement=f(Bs);dragStartX=0;dragStartY=0;dragStartLeft=0;dragStartTop=0;windowWrapper=ln("windowWrapper");constructor(){Vn(()=>{let e=this.windowManagement.minimizedWindows(),t=this.getWindowId(),i=e.some(a=>a.id===t);i&&!this.isMinimizedSignal()?this.isMinimizedSignal.set(!0):!i&&this.isMinimizedSignal()&&this.isMinimizedSignal.set(!1)})}ngOnInit(){let e=window.innerWidth<=768?56:64;this.boundaryService.setConfig({topOffset:e}),this.adjustWindowSizeFromConsoleResolution(),this.consoleUrl=this.buildConsoleUrl(),this.setupDragHandling()}adjustWindowSizeFromConsoleResolution(){let e=this.node(),t=10,i=this.DEFAULT_WIDTH,a=this.DEFAULT_HEIGHT;if(e.properties){let s=e.properties;if(s.console_resolution){let p=s.console_resolution.split("x");if(p.length===2){let u=parseInt(p[0],10),g=parseInt(p[1],10);!isNaN(u)&&!isNaN(g)&&(i=u+t,a=g+t,this.style={position:"fixed",left:this.DEFAULT_LEFT,top:this.DEFAULT_TOP,width:`${i}px`,height:`${a}px`},this.resizedWidth=i,this.resizedHeight=a)}}}}getWindowId(){return`console-${this.node().node_id}`}buildConsoleUrl(){let e=this.node(),t=this.controller();if(e.console_type==="vnc"){let i=this.buildVncWebSocketUrl(t,e),a=this.buildVncConsolePageUrl(i,e);return this.sanitizer.bypassSecurityTrustResourceUrl(a)}else if(e.console_type&&e.console_type.startsWith("http")){let i=e.console_host;(i==="0.0.0.0"||i==="0:0:0:0:0:0:0:0"||i==="::")&&(i=t.host);let a=`${e.console_type}://${i}:${e.console}`;return this.sanitizer.bypassSecurityTrustResourceUrl(a)}return this.toasterService.error(`Console type '${e.console_type}' is not supported in inline mode.`),""}buildVncWebSocketUrl(e,t){return`${e.protocol==="https:"?"wss":"ws"}://${e.host}:${e.port}/v3/projects/${t.project_id}/nodes/${t.node_id}/console/vnc?token=${e.authToken}`}buildVncConsolePageUrl(e,t){return`assets/vnc-console/index.html?${new URLSearchParams({ws_url:e,node_name:t.name,node_id:t.node_id,project_id:t.project_id,autoconnect:"1"}).toString()}`}onIframeLoad(){this.isLoadingSignal.set(!1),this.cdr.markForCheck()}close(){this.windowManagement.restoreWindow(this.getWindowId()),this.closeWindow.emit()}toggleMinimize(){this.windowManagement.toggleMinimize(this.getWindowId(),"console",this.node().node_id),this.cdr.markForCheck()}onWindowFocus(){if(this.isMinimizedSignal()){this.toggleMinimize();return}this.windowFocused.emit(),this.cdr.markForCheck()}validate(e){return!(e.rectangle.width&&e.rectangle.height&&(e.rectangle.width<this.MIN_WIDTH||e.rectangle.height<this.MIN_HEIGHT))}onResizeStart(){this.isResizingSignal.set(!0),this.setIframePointerEvents("none"),this.cdr.markForCheck()}onResizeEnd(e){let t=this.boundaryService.constrainResizeSize(e.rectangle.width||this.resizedWidth,e.rectangle.height||this.resizedHeight,e.rectangle.left,e.rectangle.top);this.style={position:"fixed",left:`${t.left}px`,top:`${t.top}px`,width:`${t.width}px`,height:`${t.height}px`},this.resizedWidth=t.width,this.resizedHeight=t.height,this.applyStyleToElement(),this.isResizingSignal.set(!1),this.setIframePointerEvents(""),this.cdr.markForCheck()}applyStyleToElement(){let e=this.windowWrapper()?.nativeElement;e&&(this.style.position&&this.renderer.setStyle(e,"position",this.style.position),this.style.left&&this.renderer.setStyle(e,"left",this.style.left),this.style.top&&this.renderer.setStyle(e,"top",this.style.top),this.style.width&&this.renderer.setStyle(e,"width",this.style.width),this.style.height&&this.renderer.setStyle(e,"height",this.style.height))}setupDragHandling(){let e=this.windowWrapper()?.nativeElement;if(!e)return;let t=e.querySelector(".web-console-inline-header");if(!t)return;let i=ma(t,"mousedown"),a=ma(document,"mousemove"),s=ma(document,"mouseup");i.pipe(Qn(d=>{d.preventDefault(),this.isDraggingSignal.set(!0),this.cdr.markForCheck(),this.dragStartX=d.clientX,this.dragStartY=d.clientY,this.dragStartLeft=Number(this.style.left?.split("px")[0])||0,this.dragStartTop=Number(this.style.top?.split("px")[0])||0,this.setIframePointerEvents("none")}),Dn(()=>a.pipe(sl(0,rl),He(s.pipe(Qn(()=>{this.onDragEnd()}))))),He(this.destroy$)).subscribe(d=>{let p=d.clientX-this.dragStartX,u=d.clientY-this.dragStartY,g=this.dragStartLeft+p,C=this.dragStartTop+u,M=this.resizedWidth,x=this.resizedHeight,b=window.innerWidth-M,P=this.boundaryService.getConfigValue().topOffset||0,k=window.innerHeight-x-P;g=Math.max(0,Math.min(b,g)),C=Math.max(P,Math.min(k,C)),this.renderer.setStyle(e,"left",`${g}px`),this.renderer.setStyle(e,"top",`${C}px`),this.style.left=`${g}px`,this.style.top=`${C}px`})}onDragEnd(){this.isDraggingSignal.set(!1),this.setIframePointerEvents(""),this.cdr.markForCheck()}setIframePointerEvents(e){let t=this.windowWrapper()?.nativeElement;t&&t.querySelectorAll("iframe").forEach(i=>{this.renderer.setStyle(i,"pointer-events",e)})}onWindowResize(){this.style=this.boundaryService.constrainWindowPosition(this.style),this.applyStyleToElement()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-web-console-inline"]],viewQuery:function(t,i){t&1&&Bn(i.windowWrapper,IDe,5),t&2&&jn()},hostBindings:function(t,i){t&1&&_("resize",function(){return i.onWindowResize()},So)},inputs:{node:[1,"node"],controller:[1,"controller"],project:[1,"project"],zIndex:[1,"zIndex"]},outputs:{closeWindow:"closeWindow",windowFocused:"windowFocused",windowMinimized:"windowMinimized"},decls:22,vars:15,consts:[["windowWrapper",""],["mwlResizable","",1,"web-console-inline",3,"mousedown","resizeStart","resizeEnd","ngStyle","validateResize","enableGhostResize"],[1,"web-console-inline__content"],[1,"web-console-inline-header"],[1,"web-console-inline-header__title"],[1,"header-icon"],[1,"node-info"],[1,"web-console-inline-header__actions"],["mat-icon-button","","title","Minimize",1,"minimize-button",3,"click"],["mat-icon-button","","title","Close",1,"close-button",3,"click"],[1,"web-console-inline__iframe-container"],[1,"loading-overlay"],["allowfullscreen","",1,"web-console-inline__iframe",3,"src"],["mwlResizeHandle","",1,"resize-handle","resize-handle-top",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-right",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-bottom",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-left",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-top-left",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-top-right",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-bottom-left",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-bottom-right",3,"resizeEdges"],[1,"loading-icon"],["allowfullscreen","",1,"web-console-inline__iframe",3,"load","src"]],template:function(t,i){t&1&&(r(0,"div",1,0),_("mousedown",function(){return i.onWindowFocus()})("resizeStart",function(){return i.onResizeStart()})("resizeEnd",function(s){return i.onResizeEnd(s)}),T(2,jDe,8,16),r(3,"div",2)(4,"div",3)(5,"div",4)(6,"mat-icon",5),c(7,"terminal"),l(),r(8,"span"),c(9,"Web Console"),l(),r(10,"span",6),c(11),l()(),r(12,"div",7)(13,"button",8),_("click",function(){return i.toggleMinimize()}),r(14,"mat-icon"),c(15,"remove"),l()(),r(16,"button",9),_("click",function(){return i.close()}),r(17,"mat-icon"),c(18,"close"),l()()()(),r(19,"div",10),T(20,$De,5,0,"div",11),T(21,HDe,1,1,"iframe",12),l()()()),t&2&&(Tt("z-index",i.zIndex()),ne("is-dragging",i.isDragging())("is-resizing",i.isResizing())("is-minimized",i.isMinimized()),v("ngStyle",i.style)("validateResize",i.validate)("enableGhostResize",!1),m(2),E(i.isMinimized()?-1:2),m(9),N(i.node().name),m(9),E(i.isLoading()?20:-1),m(),E(i.consoleUrl?21:-1))},dependencies:[fe,ll,ie,ce,Y,Be,er,tr],styles:[".web-console-inline[_ngcontent-%COMP%]{position:fixed;z-index:1000;background:var(--mat-sys-surface);border:2px solid var(--mat-sys-outline);border-radius:8px;box-shadow:0 8px 24px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent),0 4px 8px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent);overflow:visible;transition:box-shadow var(--gns3-motion-duration-standard) ease;contain:layout style}.web-console-inline[_ngcontent-%COMP%]:hover{box-shadow:0 12px 32px color-mix(in srgb,var(--mat-sys-shadow) 20%,transparent),0 6px 12px color-mix(in srgb,var(--mat-sys-shadow) 12%,transparent)}.web-console-inline.is-dragging[_ngcontent-%COMP%]{box-shadow:0 16px 48px color-mix(in srgb,var(--mat-sys-shadow) 25%,transparent),0 8px 16px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent);opacity:.9;cursor:grabbing;will-change:left,top}.web-console-inline.is-minimized[_ngcontent-%COMP%]{display:none}.web-console-inline__content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden;border-radius:6px}.web-console-inline-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:4px 8px;background:var(--mat-sys-surface-container);border-bottom:1px solid var(--mat-sys-outline-variant);cursor:grab;user-select:none;flex-shrink:0}.web-console-inline-header[_ngcontent-%COMP%]:active{cursor:grabbing}.web-console-inline-header__title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;font-size:12px;font-weight:500;color:var(--mat-sys-on-surface)}.web-console-inline-header__title[_ngcontent-%COMP%] .header-icon[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-primary);width:14px;height:14px}.web-console-inline-header__title[_ngcontent-%COMP%] .node-info[_ngcontent-%COMP%]{font-size:10px;color:var(--mat-sys-on-surface-variant);font-weight:400;margin-left:4px;padding-left:4px;border-left:1px solid var(--mat-sys-outline-variant)}.web-console-inline-header__actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px}.web-console-inline-header__actions[_ngcontent-%COMP%] .minimize-button[_ngcontent-%COMP%], .web-console-inline-header__actions[_ngcontent-%COMP%] .close-button[_ngcontent-%COMP%]{width:24px;height:24px;padding:0;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle}.web-console-inline-header__actions[_ngcontent-%COMP%] .minimize-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], .web-console-inline-header__actions[_ngcontent-%COMP%] .close-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;vertical-align:middle}.web-console-inline-header__actions[_ngcontent-%COMP%] .minimize-button[_ngcontent-%COMP%]:hover, .web-console-inline-header__actions[_ngcontent-%COMP%] .close-button[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-error-container);color:var(--mat-sys-error)}.web-console-inline__iframe-container[_ngcontent-%COMP%]{flex:1;position:relative;overflow:hidden;min-height:200px;height:100%}.web-console-inline__iframe[_ngcontent-%COMP%]{width:100%;height:100%;border:none;display:block}.loading-overlay[_ngcontent-%COMP%]{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;background:var(--mat-sys-surface);z-index:1}.loading-overlay[_ngcontent-%COMP%] .loading-icon[_ngcontent-%COMP%]{font-size:48px;color:var(--mat-sys-primary);will-change:transform;animation:_ngcontent-%COMP%_spin 1s linear infinite}.loading-overlay[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface-variant)}@keyframes _ngcontent-%COMP%_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.resize-handle[_ngcontent-%COMP%]{position:absolute;z-index:100;opacity:0;transition:opacity var(--gns3-motion-duration-standard) ease}.web-console-inline[_ngcontent-%COMP%]:hover .resize-handle[_ngcontent-%COMP%]{opacity:1}.resize-handle.resize-handle-top[_ngcontent-%COMP%]{top:-4px;left:12px;right:12px;height:12px;cursor:ns-resize;background:transparent}.resize-handle.resize-handle-right[_ngcontent-%COMP%]{top:12px;right:-4px;bottom:12px;width:12px;cursor:ew-resize;background:transparent}.resize-handle.resize-handle-bottom[_ngcontent-%COMP%]{bottom:-4px;left:12px;right:12px;height:12px;cursor:ns-resize;background:transparent}.resize-handle.resize-handle-left[_ngcontent-%COMP%]{top:12px;left:-4px;bottom:12px;width:12px;cursor:ew-resize;background:transparent}.resize-handle.resize-handle-top-left[_ngcontent-%COMP%]{top:-6px;left:-6px;width:20px;height:20px;cursor:nwse-resize;background:transparent}.resize-handle.resize-handle-top-right[_ngcontent-%COMP%]{top:-6px;right:-6px;width:20px;height:20px;cursor:nesw-resize;background:transparent}.resize-handle.resize-handle-bottom-left[_ngcontent-%COMP%]{bottom:-6px;left:-6px;width:20px;height:20px;cursor:nesw-resize;background:transparent}.resize-handle.resize-handle-bottom-right[_ngcontent-%COMP%]{bottom:-6px;right:-6px;width:20px;height:20px;cursor:nwse-resize;background:transparent}"],changeDetection:0})}return n})();var UDe=["menuTrigger"],WDe=["editorGutter"],$j=(n,o)=>o.path;function GDe(n,o){if(n&1&&(r(0,"div",6),L(1,"div",16),r(2,"span",17)(3,"mat-icon",9),c(4,"download"),l(),c(5),l()()),n&2){let e=h();m(),Tt("width",e.downloadProgress(),"%"),m(4),X(" ",e.downloadProgress(),"% ")}}function qDe(n,o){n&1&&(r(0,"div",11),L(1,"mat-progress-spinner",18),l())}function QDe(n,o){if(n&1&&(r(0,"div",12)(1,"mat-icon",19),c(2,"error_outline"),l(),r(3,"p"),c(4),l()()),n&2){let e=h();m(4),N(e.error())}}function KDe(n,o){n&1&&(r(0,"div",11),L(1,"mat-progress-spinner",18),l())}function XDe(n,o){if(n&1&&(r(0,"div",26),L(1,"span",28),r(2,"span",29),c(3),l()()),n&2){let e=o.$implicit,t=h(3);m(),ne("editor-line-marker--modified",t.getLineState(e)==="modified")("editor-line-marker--added",t.getLineState(e)==="added"),m(2),N(e)}}function YDe(n,o){if(n&1){let e=R();r(0,"div",24)(1,"div",25,2),Q(3,XDe,4,5,"div",26,Oe),l(),r(5,"textarea",27),_("input",function(i){y(e);let a=h(2);return w(a.onContentChange(i.target.value))})("scroll",function(i){y(e);let a=h(2);return w(a.onEditorScroll(i))}),l()()}if(n&2){let e=h(2);m(3),K(e.lineNumbers()),m(2),v("value",e.editContent())}}function ZDe(n,o){if(n&1){let e=R();r(0,"div",13)(1,"div",20)(2,"span",4),c(3),l(),r(4,"div",21)(5,"button",22),_("click",function(){y(e);let i=h();return w(i.cancelEdit())}),c(6,"Cancel"),l(),r(7,"button",23),_("click",function(){y(e);let i=h();return w(i.saveEdit())}),c(8," Save "),l()()(),T(9,KDe,2,0,"div",11)(10,YDe,6,1,"div",24),l()}if(n&2){let e=h();m(3),X("Editing: ",o.path),m(2),v("disabled",e.saving()),m(2),v("disabled",e.saving()||e.loadingContent()),m(2),E(e.loadingContent()?9:10)}}function JDe(n,o){if(n&1){let e=R();r(0,"div",48),_("click",function(){y(e);let i=h().$implicit,a=h(2);return w(a.navigateToDir(i.path))}),L(1,"span"),r(2,"span",49),_("click",function(i){y(e);let a=h().$implicit;return h(2).expandDir(a),w(i.stopPropagation())}),r(3,"mat-icon",50),c(4),l()(),r(5,"mat-icon",51),c(6,"folder"),l(),r(7,"span",52),c(8),l()()}if(n&2){let e=h().$implicit,t=h(2),i=t.treeDepth(e.path);ne("node-file-manager__tree-row--active",t.currentPath()===e.path),m(),Tt("width",i*16,"px"),m(3),N(t.isExpanded(e.path)?"expand_more":"chevron_right"),m(4),N(e.name)}}function eIe(n,o){if(n&1&&T(0,JDe,9,6,"div",47),n&2){let e=o.$implicit,t=h(2);E(t.isNodeVisible(e)?0:-1)}}function tIe(n,o){n&1&&(r(0,"span",53),c(1,"/"),l())}function nIe(n,o){if(n&1){let e=R();T(0,tIe,2,0,"span",53),r(1,"button",54),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.currentPath.set(i.path))}),c(2),l()}if(n&2){let e=o.$implicit,t=o.$index;E(t!==0?0:-1),m(2),X(" ",e.label," ")}}function iIe(n,o){n&1&&L(0,"mat-header-cell")}function oIe(n,o){if(n&1&&(r(0,"mat-cell")(1,"mat-icon",55),c(2),l()()),n&2){let e=o.$implicit;m(),Tt("color",e.isDir?"var(--mat-sys-primary)":""),m(),N(e.isDir?"folder":"description")}}function aIe(n,o){n&1&&(r(0,"mat-header-cell"),c(1,"Name"),l())}function rIe(n,o){if(n&1){let e=R();r(0,"mat-cell",56),_("dblclick",function(){let i=y(e).$implicit,a=h(2);return w(i.isDir?a.navigateToDir(i.path):a.isEditableFile(i)&&a.editFile(i))}),r(1,"span"),c(2),l()()}if(n&2){let e=o.$implicit,t=h(2);Tt("cursor",e.isDir||t.isEditableFile(e)?"pointer":"default"),m(2),N(e.isDir?e.name:t.fileName(e))}}function sIe(n,o){n&1&&(r(0,"mat-header-cell"),c(1,"Type"),l())}function lIe(n,o){if(n&1&&(r(0,"mat-cell",57),c(1),l()),n&2){let e=o.$implicit,t=h(2);m(),N(e.isDir?"Dir":t.shortFileType(e.file_type))}}function cIe(n,o){n&1&&(r(0,"mat-header-cell"),c(1,"Size"),l())}function dIe(n,o){if(n&1&&(r(0,"mat-cell"),c(1),l()),n&2){let e=o.$implicit,t=h(2);m(),N(e.isDir?"-":t.formatFileSize(e.size))}}function mIe(n,o){n&1&&(r(0,"mat-header-cell"),c(1,"Modified"),l())}function pIe(n,o){if(n&1&&(r(0,"mat-cell",57),c(1),l()),n&2){let e=o.$implicit,t=h(2);m(),N(e.isDir?"-":t.formatDate(e.modified_at))}}function uIe(n,o){n&1&&L(0,"mat-header-row",58),n&2&&v("sticky",!0)}function gIe(n,o){if(n&1){let e=R();r(0,"mat-row",59),_("contextmenu",function(i){let a=y(e).$implicit,s=h(2);return w(s.onRowContextMenu(i,a))}),l()}n&2&&Tt("cursor","context-menu")}function hIe(n,o){if(n&1&&(r(0,"div",30),Q(1,eIe,1,1,null,null,$j),l(),r(3,"div",31)(4,"div",32),Q(5,nIe,3,2,null,null,$j),l(),r(7,"div",33)(8,"mat-table",34),Fe(9,35),se(10,iIe,1,0,"mat-header-cell",36)(11,oIe,3,3,"mat-cell",37),Re(),Fe(12,38),se(13,aIe,2,0,"mat-header-cell",36)(14,rIe,3,3,"mat-cell",39),Re(),Fe(15,40),se(16,sIe,2,0,"mat-header-cell",36)(17,lIe,2,1,"mat-cell",41),Re(),Fe(18,42),se(19,cIe,2,0,"mat-header-cell",36)(20,dIe,2,1,"mat-cell",37),Re(),Fe(21,43),se(22,mIe,2,0,"mat-header-cell",36)(23,pIe,2,1,"mat-cell",41),Re(),se(24,uIe,1,1,"mat-header-row",44)(25,gIe,1,2,"mat-row",45),l()(),r(26,"p",46),c(27,"Double-click a text file to edit"),l()()),n&2){let e=h();m(),K(e.treeNodes()),m(4),K(e.breadcrumbs()),m(3),v("dataSource",e.viewItems()),m(16),v("matHeaderRowDef",e.displayedColumns),m(),v("matRowDefColumns",e.displayedColumns)}}function _Ie(n,o){if(n&1){let e=R();r(0,"button",60),_("click",function(){let i=y(e).file,a=h();return w(a.downloadFile(i))}),r(1,"mat-icon"),c(2,"download"),l(),c(3," Download "),l(),r(4,"button",61),_("click",function(){let i=y(e).file,a=h();return w(a.copyPath(i.path))}),r(5,"mat-icon"),c(6),l(),c(7),l(),L(8,"mat-divider"),r(9,"button",61),_("click",function(){let i=y(e).file,a=h();return w(a.deleteFile(i))}),r(10,"mat-icon"),c(11,"delete"),l(),c(12),l()}if(n&2){let e=o.file,t=h();v("disabled",e.isDir),m(6),N(t.copied()===e.path?"check":"content_copy"),m(),X(" ",t.copied()===e.path?"Copied!":"Copy path"," "),m(5),X(" ",e.isDir?"Delete directory":"Delete"," ")}}var f2=(()=>{class n{route=f($t);nodeService=f(ft);controllerService=f(_t);dialog=f(Xe);toaster=f(re);clipboard=f(Hd);cd=f(oe);inputNode=ee(void 0);inputController=ee(void 0);controllerId="";projectId="";nodeId="";nodeName=z("");controller=z(null);currentPath=z("");loading=z(!0);error=z(null);copied=z(null);selectedFile=z(null);contextMenuTrigger=ln("menuTrigger");menuPosition=z({left:0,top:0});editorGutter=ln("editorGutter");uploading=z(!1);uploadProgress=z(0);downloading=z(!1);downloadProgress=z(0);editingFile=z(null);editContent=$("");saving=z(!1);loadingContent=z(!1);lineCount=z(1);originalLines=z([]);currentLines=z([]);displayedColumns=["icon","path","file_type","size","modified_at"];dirCache=z(new Map);setDirCache(e,t){let i=this.dirCache();i.set(e,t),this.dirCache.set(new Map(i))}getDirCache(e){return this.dirCache().get(e)||[]}breadcrumbs=Ne(()=>{let e=this.currentPath().split("/").filter(Boolean),t=[{label:"root",path:""}],i="";for(let a of e)i=i?`${i}/${a}`:a,t.push({label:a,path:i});return t});currentFiles=Ne(()=>this.getDirCache(this.currentPath()).filter(t=>t.file_type!=="directory"));subdirs=Ne(()=>this.getDirCache(this.currentPath()).filter(t=>t.file_type==="directory").map(t=>({name:t.path.split("/").pop(),path:t.path})));viewItems=Ne(()=>{let e=this.subdirs().map(i=>({isDir:!0,name:i.name,path:i.path,size:0,created_at:"",modified_at:"",file_type:"directory"})),t=this.currentFiles().map(i=>q({isDir:!1,name:this.fileName(i)},i));return[...e,...t]});treeNodes=z([]);expandedDirs=z(new Set);expandDir(e){let t=this.expandedDirs();if(t.has(e.path)){t.delete(e.path),this.expandedDirs.set(new Set(t));return}this.navigateToDir(e.path),t.add(e.path),this.expandedDirs.set(new Set(t)),this.dirCache().has(e.path)||this.loadDir(e.path)}addToTree(e,t){let i=this.treeNodes();if(i.some(d=>d.path===e))return;let s=e.split("/").pop()||e;i.push({name:s,path:e,expanded:!1,loading:!1}),i.sort((d,p)=>d.path.localeCompare(p.path)),this.treeNodes.set([...i])}isExpanded(e){return this.expandedDirs().has(e)}treeDepth(e){return e.split("/").length}isNodeVisible(e){let t=e.path.split("/");for(let i=1;i<t.length;i++)if(!this.expandedDirs().has(t.slice(0,i).join("/")))return!1;return!0}treeIsLastChild(e){let i=e.split("/").slice(0,-1).join("/"),a=this.treeNodes().filter(s=>{let d=s.path.split("/");return d.pop(),d.join("/")===i});return a.length>0&&a[a.length-1].path===e}ngOnInit(){let e=this.inputNode(),t=this.inputController();e&&t?(this.controllerId=t.id?.toString()||"",this.projectId=e.project_id,this.nodeId=e.node_id,this.nodeName.set(e.name),this.controller.set(t),this.loadFiles()):(this.controllerId=this.route.snapshot.paramMap.get("controller_id"),this.projectId=this.route.snapshot.paramMap.get("project_id"),this.nodeId=this.route.snapshot.paramMap.get("node_id"),this.nodeName.set(this.route.snapshot.queryParamMap.get("name")||this.nodeId),this.controllerService.get(+this.controllerId).then(i=>{this.controller.set(i),this.loadFiles()},()=>{this.loading.set(!1),this.toaster.error("Failed to load controller"),this.cd.markForCheck()}))}loadFiles(){this.loading.set(!0),this.error.set(null),this.dirCache.set(new Map),this.treeNodes.set([]);let e=this.controller();this.nodeService.getNodeFiles(e,this.projectId,this.nodeId).subscribe({next:t=>{this.setDirCache("",t);for(let i of t)i.file_type==="directory"&&this.addToTree(i.path,[]);this.loading.set(!1),this.cd.markForCheck()},error:t=>{this.error.set(t.error?.message||t.message||"Failed to load files"),this.loading.set(!1),this.cd.markForCheck()}})}loadDir(e){let t=e.endsWith("/")?e:e+"/",i=this.controller();this.nodeService.getNodeFiles(i,this.projectId,this.nodeId,t).subscribe({next:a=>{this.setDirCache(e,a);for(let s of a)s.file_type==="directory"&&this.addToTree(s.path,[]);this.cd.markForCheck()},error:a=>{this.toaster.error(a.error?.message||a.message||"Failed to load directory")}})}navigateToDir(e){this.currentPath.set(e),this.getDirCache(e).length||this.loadDir(e)}fileName(e){let t=this.currentPath();return t?e.path.substring(t.length+1):e.path}shortFileType(e){return e.split(" ").slice(0,2).join(" ")}isEditableFile(e){return e.file_type.includes("ASCII")||e.file_type.includes("UTF-8")||e.file_type.includes("text")}formatFileSize(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:e<1024*1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:`${(e/(1024*1024*1024)).toFixed(1)} GB`}formatDate(e){return e?new Date(e).toLocaleString():"-"}copyPath(e){this.clipboard.copy(e),this.copied.set(e),setTimeout(()=>this.copied.set(null),2e3)}onRowContextMenu(e,t){e.preventDefault(),this.selectedFile.set(t),this.menuPosition.set({left:e.clientX,top:e.clientY});let i=this.contextMenuTrigger();i&&(i.menuData={file:t},i.openMenu())}editFile(e){this.editingFile.set(e),this.editContent.set(""),this.loadingContent.set(!0);let t=this.controller();this.nodeService.getNodeFileContent(t,this.projectId,this.nodeId,e.path).subscribe({next:i=>{this.editContent.set(i),this.originalLines.set(i.split(`
|
||
`)),this.currentLines.set(i.split(`
|
||
`)),this.loadingContent.set(!1),this.updateLineCount(i),this.cd.markForCheck()},error:i=>{this.toaster.error(i.error?.message||i.message||"Failed to load file"),this.loadingContent.set(!1),this.cancelEdit(),this.cd.markForCheck()}})}saveEdit(){let e=this.editingFile();if(!e)return;this.saving.set(!0);let t=this.controller();this.nodeService.saveNodeFileContent(t,this.projectId,this.nodeId,e.path,this.editContent()).subscribe({next:()=>{this.toaster.success(`File "${e.path}" saved.`),this.saving.set(!1),this.editingFile.set(null),this.loadFiles(),this.cd.markForCheck()},error:i=>{this.toaster.error(i.error?.message||i.message||"Failed to save file"),this.saving.set(!1),this.cd.markForCheck()}})}cancelEdit(){this.editingFile.set(null),this.editContent.set("")}onEditorScroll(e){let t=e.target,i=this.editorGutter()?.nativeElement;i&&(i.scrollTop=t.scrollTop)}updateLineCount(e){this.lineCount.set((e.match(/\n/g)||[]).length+1)}onContentChange(e){this.editContent.set(e),this.currentLines.set(e.split(`
|
||
`)),this.updateLineCount(e)}getLineState(e){let t=this.originalLines(),i=this.currentLines(),a=e-1;return a<t.length&&a<i.length?t[a]!==i[a]?"modified":"unchanged":a<i.length?"added":"unchanged"}lineNumbers(){return Array.from({length:this.lineCount()},(e,t)=>t+1)}onUploadClick(){let e=document.createElement("input");e.type="file",e.style.display="none",document.body.appendChild(e),e.addEventListener("change",t=>{this.onFileSelected(t),document.body.removeChild(e)}),e.click()}onFileSelected(e){let t=e.target;if(!t.files?.length)return;let i=t.files[0];this.uploading.set(!0),this.uploadProgress.set(0);let a=this.controller(),s=this.currentPath()?`${this.currentPath()}/${i.name}`:i.name;this.nodeService.uploadNodeFileWithProgress(a,this.projectId,this.nodeId,s,i).subscribe({next:d=>{this.uploadProgress.set(d),this.cd.markForCheck()},error:d=>{this.uploading.set(!1),this.uploadProgress.set(0),this.toaster.error(d.message||"Upload failed"),this.cd.markForCheck()},complete:()=>{this.uploading.set(!1),this.uploadProgress.set(0),this.toaster.success(`File "${i.name}" uploaded.`);let d=this.getDirCache(this.currentPath()),p={path:s,size:i.size,created_at:"",modified_at:"",file_type:"ASCII text"};this.setDirCache(this.currentPath(),[...d,p]),this.cd.markForCheck()}})}async downloadFile(e){let t=window.showSaveFilePicker;if(t){let i;try{i=await t({suggestedName:e.path})}catch{return}this.downloading.set(!0),this.downloadProgress.set(0);try{await this.nodeService.streamNodeFileToFile(this.controller(),this.projectId,this.nodeId,e.path,i,a=>{this.downloadProgress.set(e.size>0?Math.min(Math.round(a/e.size*100),100):0),this.cd.markForCheck()}),this.downloading.set(!1),this.downloadProgress.set(0),this.toaster.success(`File "${e.path}" downloaded.`),this.cd.markForCheck()}catch(a){this.downloading.set(!1),this.downloadProgress.set(0),this.toaster.error(a.message||"Download failed"),this.cd.markForCheck()}return}this.downloading.set(!0),this.downloadProgress.set(0);try{let i=await OC(this.nodeService.downloadNodeFile(this.controller(),this.projectId,this.nodeId,e.path)),a=URL.createObjectURL(i),s=document.createElement("a");s.href=a,s.download=e.path,s.click(),URL.revokeObjectURL(a),this.downloading.set(!1),this.toaster.success(`File "${e.path}" downloaded.`),this.cd.markForCheck()}catch(i){this.downloading.set(!1),this.toaster.error(i.message||"Download failed"),this.cd.markForCheck()}}deleteFile(e){let t=e.isDir||e.file_type==="directory";this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-danger-panel","dialog-small-panel"],data:{title:t?"Delete directory":"Delete file",message:`Are you sure you want to delete "${e.path}"?${t?" This will permanently remove the directory and all its contents.":""}`,confirmButtonText:t?"Delete directory":"Delete",cancelButtonText:"Cancel"}}).afterClosed().subscribe(a=>{if(!a)return;let s=this.controller();this.nodeService.deleteNodeFile(s,this.projectId,this.nodeId,e.path).subscribe({next:()=>{this.toaster.success(`File "${e.path}" deleted.`);let d=e.path.split("/").slice(0,-1).join("/"),p=this.getDirCache(d).filter(u=>u.path!==e.path);this.setDirCache(d,p),this.currentPath().startsWith(e.path)&&this.currentPath.set(d),(e.isDir||e.file_type==="directory")&&this.treeNodes.set(this.treeNodes().filter(u=>u.path!==e.path&&!u.path.startsWith(e.path+"/"))),this.cd.markForCheck()},error:d=>{this.toaster.error(d.error?.message||d.message||"Delete failed"),this.cd.markForCheck()}})})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-node-file-manager-page"]],viewQuery:function(t,i){t&1&&Bn(i.contextMenuTrigger,UDe,5)(i.editorGutter,WDe,5),t&2&&jn(2)},inputs:{inputNode:[1,"inputNode"],inputController:[1,"inputController"],editContent:[1,"editContent"]},outputs:{editContent:"editContentChange"},decls:21,vars:13,consts:[["rowMenu","matMenu"],["menuTrigger","matMenuTrigger"],["editorGutter",""],[1,"node-file-manager__bar"],[1,"node-file-manager__title"],[1,"node-file-manager__actions"],[1,"node-file-manager__progress-btn"],[1,"node-file-manager__progress-fill",2,"background","var(--mat-sys-primary-container)"],["mat-stroked-button","",2,"font-size","14px","border","none","position","relative","z-index","1","background","transparent",3,"click","disabled"],[1,"node-file-manager__icon-lg"],[1,"node-file-manager__content"],[1,"node-file-manager__spinner"],[1,"node-file-manager__error"],[1,"node-file-manager__edit-area"],["matMenuContent",""],[2,"position","fixed","width","1px","height","1px","opacity","0","pointer-events","none",3,"matMenuTriggerFor"],[1,"node-file-manager__progress-fill",2,"background","var(--mat-sys-tertiary-container)"],[1,"node-file-manager__progress-label"],["mode","indeterminate"],[1,"node-file-manager__error-icon"],[1,"node-file-manager__edit-toolbar"],[1,"node-file-manager__edit-actions"],["mat-button","",3,"click","disabled"],["mat-raised-button","","color","primary",3,"click","disabled"],[1,"editor-container",2,"flex","1"],[1,"editor-gutter",2,"padding","12px 0","background","var(--mat-sys-surface-container)","border-radius","8px 0 0 8px","border","1px solid var(--mat-sys-outline-variant)","border-right","none","font-family","var(--gns3-font-code)","font-size","13px","line-height","1.5","user-select","none","overflow","hidden","min-width","52px"],[2,"display","flex","align-items","center"],["spellcheck","false",1,"editor-textarea",3,"input","scroll","value"],[1,"editor-line-marker",2,"width","4px","height","1.5em","flex-shrink","0"],[1,"node-file-manager__text-sm",2,"padding","0 8px","color","var(--mat-sys-on-surface-variant)","text-align","right","flex","1"],[1,"node-file-manager__sidebar"],[1,"node-file-manager__main"],[1,"node-file-manager__breadcrumbs"],[1,"node-file-browser__table-container",2,"flex","1","overflow-y","auto"],[1,"node-file-browser__table",3,"dataSource"],["matColumnDef","icon"],[4,"matHeaderCellDef"],[4,"matCellDef"],["matColumnDef","path"],["class","node-file-manager__mono",3,"cursor","dblclick",4,"matCellDef"],["matColumnDef","file_type"],["class","node-file-manager__text-sm",4,"matCellDef"],["matColumnDef","size"],["matColumnDef","modified_at"],[3,"sticky",4,"matHeaderRowDef"],[3,"cursor","contextmenu",4,"matRowDef","matRowDefColumns"],[1,"node-file-manager__hint"],[1,"node-file-manager__tree-row",3,"node-file-manager__tree-row--active"],[1,"node-file-manager__tree-row",3,"click"],[1,"node-file-manager__tree-toggle",3,"click"],[1,"node-file-manager__tree-icon"],[1,"node-file-manager__tree-icon",2,"color","var(--mat-sys-primary)","margin","0 4px"],[1,"node-file-manager__tree-name"],[2,"color","var(--mat-sys-on-surface-variant)"],["mat-button","",2,"min-width","0","padding","0 4px","font-size","13px","line-height","24px",3,"click"],[2,"font-size","20px"],[1,"node-file-manager__mono",3,"dblclick"],[1,"node-file-manager__text-sm"],[3,"sticky"],[3,"contextmenu"],["mat-menu-item","",3,"click","disabled"],["mat-menu-item","",3,"click"]],template:function(t,i){if(t&1&&(r(0,"div",3)(1,"span",4),c(2),l(),r(3,"div",5),T(4,GDe,6,3,"div",6),r(5,"div",6),L(6,"div",7),r(7,"button",8),_("click",function(){return i.onUploadClick()}),r(8,"mat-icon",9),c(9),l(),c(10),l()()()(),r(11,"div",10),T(12,qDe,2,0,"div",11)(13,QDe,5,1,"div",12)(14,ZDe,11,4,"div",13)(15,hIe,28,3),l(),r(16,"mat-menu",null,0),se(18,_Ie,13,4,"ng-template",14),l(),L(19,"span",15,1)),t&2){let a,s=Te(17);m(2),X("",i.nodeName()," - Files"),m(2),E(i.downloading()?4:-1),m(2),Tt("width",i.uploadProgress(),"%"),m(),v("disabled",i.uploading()),m(2),N(i.uploading()?"cloud_upload":"upload"),m(),X(" ",i.uploading()?i.uploadProgress()+"%":"Upload file"," "),m(2),E(i.loading()?12:i.error()?13:(a=i.editingFile())?14:15,a),m(7),Tt("left",i.menuPosition().left,"px")("top",i.menuPosition().top,"px"),v("matMenuTriggerFor",s)}},dependencies:[fe,Y,he,ie,ce,_n,bn,yn,kn,wn,xn,Pn,Mn,Sn,Tn,En,rt,mt,Is,X1,it,Ko,ut,u5,eo,Ja,fs],styles:['@charset "UTF-8";[_nghost-%COMP%]{container:node-files/inline-size;display:flex;flex-direction:column;height:100%;min-height:0;background:var(--mat-sys-surface);color:var(--mat-sys-on-surface)}.editor-container[_ngcontent-%COMP%]{display:flex;flex:1;min-height:200px}.editor-textarea[_ngcontent-%COMP%]{min-width:0;flex:1;font-family:var(--gns3-font-code);font-size:13px;padding:12px;border-radius:0 8px 8px 0;background:var(--mat-sys-surface-container-low);color:var(--mat-sys-on-surface);border:1px solid var(--mat-sys-outline-variant);border-left:none;resize:none;box-sizing:border-box;line-height:1.5;outline:none}.editor-textarea[_ngcontent-%COMP%]:focus{border-color:var(--mat-sys-primary)}.editor-line-marker--modified[_ngcontent-%COMP%]{background:var(--mat-sys-error)}.editor-line-marker--added[_ngcontent-%COMP%]{background:var(--mat-sys-tertiary)}.node-file-browser__table-container[_ngcontent-%COMP%]{width:100%;min-width:0;overflow-x:auto;scrollbar-width:thin;scrollbar-color:var(--mat-sys-outline) var(--mat-sys-surface)}.node-file-browser__table[_ngcontent-%COMP%]{width:100%;min-width:620px}.node-file-manager__bar[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:8px 16px;border-bottom:1px solid var(--mat-sys-outline-variant);flex-shrink:0}.node-file-manager__actions[_ngcontent-%COMP%]{margin-left:auto;display:flex;flex-wrap:wrap;align-items:center;gap:8px}.node-file-manager__progress-btn[_ngcontent-%COMP%]{position:relative;overflow:hidden;border-radius:20px;border:1px solid var(--mat-sys-outline);background:transparent}.node-file-manager__progress-fill[_ngcontent-%COMP%]{position:absolute;top:0;left:0;height:100%;transition:width var(--gns3-motion-duration-standard) ease}.node-file-manager__progress-label[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;font-size:14px;padding:4px 16px;position:relative;z-index:1}.node-file-manager__content[_ngcontent-%COMP%]{flex:1;min-height:0;overflow:hidden;display:flex}.node-file-manager__main[_ngcontent-%COMP%]{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden;padding:8px 16px}.node-file-manager__spinner[_ngcontent-%COMP%]{flex:1;display:flex;justify-content:center;align-items:center}.node-file-manager__error[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;justify-content:center;align-items:center;color:var(--mat-sys-error)}.node-file-manager__error-icon[_ngcontent-%COMP%]{font-size:48px;height:48px;width:48px}.node-file-manager__sidebar[_ngcontent-%COMP%]{width:200px;flex-shrink:0;overflow-y:auto;border-right:1px solid var(--mat-sys-outline-variant);padding:8px 4px 8px 0}.node-file-manager__tree-row[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:26px;cursor:pointer;background:transparent}.node-file-manager__tree-row[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container-low)}.node-file-manager__tree-row--active[_ngcontent-%COMP%], .node-file-manager__tree-row--active[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container-high)}.node-file-manager__tree-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;flex-shrink:0}.node-file-manager__tree-name[_ngcontent-%COMP%]{font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;user-select:none}.node-file-manager__tree-toggle[_ngcontent-%COMP%]{cursor:pointer;width:16px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.node-file-manager__breadcrumbs[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;flex-wrap:wrap;margin-bottom:8px}.node-file-manager__edit-area[_ngcontent-%COMP%]{flex:1;min-width:0;display:flex;flex-direction:column;padding:16px;overflow:hidden}.node-file-manager__edit-toolbar[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:8px}.node-file-manager__edit-actions[_ngcontent-%COMP%]{margin-left:auto;display:flex;gap:8px}.node-file-manager__title[_ngcontent-%COMP%]{min-width:0;overflow-wrap:anywhere;font-weight:500;font-size:16px}.node-file-manager__icon-lg[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px}.node-file-manager__text-sm[_ngcontent-%COMP%]{font-size:13px}.node-file-manager__hint[_ngcontent-%COMP%]{margin-top:8px;font-size:13px;color:var(--mat-sys-on-surface-variant);flex-shrink:0}.node-file-manager__mono[_ngcontent-%COMP%]{font-family:var(--gns3-font-code);word-break:break-all}@container node-files (max-width: 640px){.node-file-manager__content[_ngcontent-%COMP%]{flex-direction:column}.node-file-manager__sidebar[_ngcontent-%COMP%]{box-sizing:border-box;width:100%;max-height:160px;border-right:0;border-bottom:1px solid var(--mat-sys-outline-variant)}}.node-file-browser__table[_ngcontent-%COMP%] mat-cell[_ngcontent-%COMP%], .node-file-browser__table[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%]{padding-inline:var(--gns3-density-space-2)}.node-file-browser__table[_ngcontent-%COMP%] .mat-column-icon[_ngcontent-%COMP%]{flex:0 0 28px;min-width:28px;padding-inline:0;justify-content:center}.node-file-browser__table[_ngcontent-%COMP%] .mat-column-icon[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{flex-shrink:0}.mat-column-path[_ngcontent-%COMP%]{flex:1;min-width:180px}.mat-column-file_type[_ngcontent-%COMP%]{flex:0 0 112px;min-width:112px}.mat-column-size[_ngcontent-%COMP%]{flex:0 0 96px;min-width:96px}.mat-column-modified_at[_ngcontent-%COMP%]{flex:0 0 184px;min-width:184px}.node-file-browser__table[_ngcontent-%COMP%] mat-row[_ngcontent-%COMP%]:nth-child(2n){background:var(--mat-sys-surface-container-low)}.node-file-browser__table[_ngcontent-%COMP%] mat-header-row[_ngcontent-%COMP%]{position:sticky;top:0;z-index:1;background:var(--mat-sys-surface)}'],changeDetection:0})}return n})();var fIe=["windowWrapper"],vIe=()=>({top:!0}),CIe=()=>({right:!0}),bIe=()=>({bottom:!0}),xIe=()=>({left:!0}),yIe=()=>({top:!0,left:!0}),wIe=()=>({top:!0,right:!0}),MIe=()=>({bottom:!0,left:!0}),SIe=()=>({bottom:!0,right:!0});function kIe(n,o){n&1&&L(0,"div",13)(1,"div",14)(2,"div",15)(3,"div",16)(4,"div",17)(5,"div",18)(6,"div",19)(7,"div",20),n&2&&(v("resizeEdges",at(8,vIe)),m(),v("resizeEdges",at(9,CIe)),m(),v("resizeEdges",at(10,bIe)),m(),v("resizeEdges",at(11,xIe)),m(),v("resizeEdges",at(12,yIe)),m(),v("resizeEdges",at(13,wIe)),m(),v("resizeEdges",at(14,MIe)),m(),v("resizeEdges",at(15,SIe)))}var Hj=(()=>{class n{DEFAULT_WIDTH=900;DEFAULT_HEIGHT=600;DEFAULT_LEFT="120px";DEFAULT_TOP="80px";MIN_WIDTH=600;MIN_HEIGHT=400;destroy$=new Ye;node=ee();controller=ee();zIndex=ee(1e3);closeWindow=new be;windowFocused=new be;style={position:"fixed",left:this.DEFAULT_LEFT,top:this.DEFAULT_TOP,width:`${this.DEFAULT_WIDTH}px`,height:`${this.DEFAULT_HEIGHT}px`};resizedWidth=this.DEFAULT_WIDTH;resizedHeight=this.DEFAULT_HEIGHT;isDraggingSignal=z(!1);isResizingSignal=z(!1);isMinimizedSignal=z(!1);isDragging=this.isDraggingSignal.asReadonly();isResizing=this.isResizingSignal.asReadonly();isMinimized=this.isMinimizedSignal.asReadonly();boundaryService=f(Ql);windowManagement=f(Bs);cdr=f(oe);router=f(Ft);dragStartX=0;dragStartY=0;dragStartLeft=0;dragStartTop=0;windowWrapper=ln("windowWrapper");constructor(){Vn(()=>{if(!this.node())return;let t=this.getWindowId(),i=this.windowManagement.minimizedWindows();i.some(a=>a.id===t)&&!this.isMinimizedSignal()?this.isMinimizedSignal.set(!0):!i.some(a=>a.id===t)&&this.isMinimizedSignal()&&this.isMinimizedSignal.set(!1)})}ngOnInit(){let e=window.innerWidth<=768?56:64;this.boundaryService.setConfig({topOffset:e}),this.setupDragHandling()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}getWindowId(){return`filemgr-${this.node()?.node_id}`}close(){this.windowManagement.restoreWindow(this.getWindowId()),this.closeWindow.emit()}toggleMinimize(){this.node()&&(this.windowManagement.toggleMinimize(this.getWindowId(),"filemgr"),this.cdr.markForCheck())}onWindowFocus(){if(this.isMinimizedSignal()){this.toggleMinimize();return}this.windowFocused.emit(),this.cdr.markForCheck()}validate(e){return!(e.rectangle.width&&e.rectangle.height&&(e.rectangle.width<this.MIN_WIDTH||e.rectangle.height<this.MIN_HEIGHT))}onResizeStart(){this.isResizingSignal.set(!0),this.setContentPointerEvents("none"),this.cdr.markForCheck()}onResizeEnd(e){let t=this.boundaryService.constrainResizeSize(e.rectangle.width||this.resizedWidth,e.rectangle.height||this.resizedHeight,e.rectangle.left,e.rectangle.top);this.style={position:"fixed",left:`${t.left}px`,top:`${t.top}px`,width:`${t.width}px`,height:`${t.height}px`},this.resizedWidth=t.width,this.resizedHeight=t.height,this.isResizingSignal.set(!1),this.setContentPointerEvents(""),this.cdr.markForCheck()}setupDragHandling(){let e=this.windowWrapper()?.nativeElement;if(!e)return;let t=e.querySelector(".node-file-manager-inline-header");if(!t)return;let i=ma(t,"mousedown"),a=ma(document,"mousemove"),s=ma(document,"mouseup");i.pipe(He(this.destroy$),Qn(d=>{d.preventDefault(),this.isDraggingSignal.set(!0),this.cdr.markForCheck(),this.dragStartX=d.clientX,this.dragStartY=d.clientY,this.dragStartLeft=Number(this.style.left?.toString().split("px")[0])||0,this.dragStartTop=Number(this.style.top?.toString().split("px")[0])||0,this.setContentPointerEvents("none")}),Dn(()=>a.pipe(sl(0,rl),He(s.pipe(Qn(()=>{this.onDragEnd()})))))).subscribe(d=>{let p=d.clientX-this.dragStartX,u=d.clientY-this.dragStartY,g=this.dragStartLeft+p,C=this.dragStartTop+u;this.style={position:"fixed",left:`${g}px`,top:`${C}px`,width:this.style.width,height:this.style.height},this.cdr.markForCheck()})}onDragEnd(){this.isDraggingSignal.set(!1),this.setContentPointerEvents(""),this.cdr.markForCheck()}setContentPointerEvents(e){let t=this.windowWrapper()?.nativeElement;if(!t)return;let i=t.querySelector("app-node-file-manager-page");i&&(i.style.pointerEvents=e)}openInNewTab(){let e=this.node(),t=this.controller();if(!e||!t)return;let i=this.router.createUrlTree(["/controller",t.id,"project",e.project_id,"nodes",e.node_id,"files"],{queryParams:{name:e.name}}),a=window.location.origin+this.router.serializeUrl(i);window.open(a,"_blank")}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-node-file-manager-inline"]],viewQuery:function(t,i){t&1&&Bn(i.windowWrapper,fIe,5),t&2&&jn()},inputs:{node:[1,"node"],controller:[1,"controller"],zIndex:[1,"zIndex"]},outputs:{closeWindow:"closeWindow",windowFocused:"windowFocused"},decls:24,vars:15,consts:[["windowWrapper",""],["mwlResizable","",1,"node-file-manager-inline",3,"mousedown","resizeStart","resizeEnd","ngStyle","validateResize","enableGhostResize"],[1,"node-file-manager-inline__content"],[1,"node-file-manager-inline-header"],[1,"node-file-manager-inline-header__title"],[1,"header-icon"],[1,"node-info"],[1,"node-file-manager-inline-header__actions"],["mat-icon-button","","title","Open in new tab",1,"open-in-new-tab-button",3,"click"],["mat-icon-button","","title","Minimize",1,"minimize-button",3,"click"],["mat-icon-button","","title","Close",1,"close-button",3,"click"],[1,"node-file-manager-inline__iframe-container"],[3,"inputNode","inputController"],["mwlResizeHandle","",1,"resize-handle","resize-handle-top",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-right",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-bottom",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-left",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-top-left",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-top-right",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-bottom-left",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-bottom-right",3,"resizeEdges"]],template:function(t,i){if(t&1&&(r(0,"div",1,0),_("mousedown",function(){return i.onWindowFocus()})("resizeStart",function(){return i.onResizeStart()})("resizeEnd",function(s){return i.onResizeEnd(s)}),T(2,kIe,8,16),r(3,"div",2)(4,"div",3)(5,"div",4)(6,"mat-icon",5),c(7,"folder"),l(),r(8,"span"),c(9,"File Manager"),l(),r(10,"span",6),c(11),l()(),r(12,"div",7)(13,"button",8),_("click",function(){return i.openInNewTab()}),r(14,"mat-icon"),c(15,"open_in_new"),l()(),r(16,"button",9),_("click",function(){return i.toggleMinimize()}),r(17,"mat-icon"),c(18,"remove"),l()(),r(19,"button",10),_("click",function(){return i.close()}),r(20,"mat-icon"),c(21,"close"),l()()()(),r(22,"div",11),L(23,"app-node-file-manager-page",12),l()()()),t&2){let a;Tt("z-index",i.zIndex()),ne("is-dragging",i.isDragging())("is-resizing",i.isResizing())("is-minimized",i.isMinimized()),v("ngStyle",i.style)("validateResize",i.validate)("enableGhostResize",!1),m(2),E(i.isMinimized()?-1:2),m(9),N((a=i.node())==null?null:a.name),m(12),v("inputNode",i.node())("inputController",i.controller())}},dependencies:[fe,ll,ie,ce,Y,Be,er,tr,f2],styles:[".node-file-manager-inline[_ngcontent-%COMP%]{position:fixed;z-index:1000;background:var(--mat-sys-surface);border:2px solid var(--mat-sys-outline);border-radius:8px;box-shadow:0 8px 24px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent),0 4px 8px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent);overflow:visible;transition:box-shadow var(--gns3-motion-duration-standard) ease}.node-file-manager-inline[_ngcontent-%COMP%]:hover{box-shadow:0 12px 32px color-mix(in srgb,var(--mat-sys-shadow) 20%,transparent),0 6px 12px color-mix(in srgb,var(--mat-sys-shadow) 12%,transparent)}.node-file-manager-inline.is-dragging[_ngcontent-%COMP%]{box-shadow:0 16px 48px color-mix(in srgb,var(--mat-sys-shadow) 25%,transparent),0 8px 16px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent);opacity:.9;cursor:grabbing;will-change:left,top}.node-file-manager-inline.is-minimized[_ngcontent-%COMP%]{display:none}.node-file-manager-inline__content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden;border-radius:6px}.node-file-manager-inline-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:4px 8px;background:var(--mat-sys-surface-container);border-bottom:none;cursor:grab}.node-file-manager-inline-header[_ngcontent-%COMP%]:active{cursor:grabbing}.node-file-manager-inline-header[_ngcontent-%COMP%]{user-select:none;flex-shrink:0}.node-file-manager-inline-header__title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;font-size:12px;font-weight:500;color:var(--mat-sys-on-surface)}.node-file-manager-inline-header__title[_ngcontent-%COMP%] .header-icon[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-primary);width:14px;height:14px}.node-file-manager-inline-header__title[_ngcontent-%COMP%] .node-info[_ngcontent-%COMP%]{font-size:10px;color:var(--mat-sys-on-surface-variant);font-weight:400;margin-left:4px;padding-left:4px;border-left:1px solid var(--mat-sys-outline-variant)}.node-file-manager-inline-header__actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px}.node-file-manager-inline-header__actions[_ngcontent-%COMP%] .open-in-new-tab-button[_ngcontent-%COMP%]{width:24px;height:24px;padding:0;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle}.node-file-manager-inline-header__actions[_ngcontent-%COMP%] .open-in-new-tab-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;vertical-align:middle}.node-file-manager-inline-header__actions[_ngcontent-%COMP%] .open-in-new-tab-button[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-primary-container);color:var(--mat-sys-primary)}.node-file-manager-inline-header__actions[_ngcontent-%COMP%] .minimize-button[_ngcontent-%COMP%], .node-file-manager-inline-header__actions[_ngcontent-%COMP%] .close-button[_ngcontent-%COMP%]{width:24px;height:24px;padding:0;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle}.node-file-manager-inline-header__actions[_ngcontent-%COMP%] .minimize-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], .node-file-manager-inline-header__actions[_ngcontent-%COMP%] .close-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;vertical-align:middle}.node-file-manager-inline-header__actions[_ngcontent-%COMP%] .minimize-button[_ngcontent-%COMP%]:hover, .node-file-manager-inline-header__actions[_ngcontent-%COMP%] .close-button[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-error-container);color:var(--mat-sys-error)}.node-file-manager-inline__iframe-container[_ngcontent-%COMP%]{flex:1;position:relative;overflow:hidden;min-height:200px;height:100%}.node-file-manager-inline__iframe[_ngcontent-%COMP%]{width:100%;height:100%;border:none;display:block}.resize-handle[_ngcontent-%COMP%]{position:absolute;z-index:100;opacity:0;transition:opacity var(--gns3-motion-duration-standard) ease}.node-file-manager-inline[_ngcontent-%COMP%]:hover .resize-handle[_ngcontent-%COMP%]{opacity:1}.resize-handle.resize-handle-top[_ngcontent-%COMP%]{top:-4px;left:12px;right:12px;height:12px;cursor:ns-resize;background:transparent}.resize-handle.resize-handle-right[_ngcontent-%COMP%]{top:12px;right:-4px;bottom:12px;width:12px;cursor:ew-resize;background:transparent}.resize-handle.resize-handle-bottom[_ngcontent-%COMP%]{bottom:0;left:12px;right:12px;height:12px;cursor:ns-resize;background:transparent}.resize-handle.resize-handle-left[_ngcontent-%COMP%]{top:12px;left:-4px;bottom:12px;width:12px;cursor:ew-resize;background:transparent}.resize-handle.resize-handle-top-left[_ngcontent-%COMP%]{top:-6px;left:-6px;width:20px;height:20px;cursor:nwse-resize;background:transparent}.resize-handle.resize-handle-top-right[_ngcontent-%COMP%]{top:-6px;right:-6px;width:20px;height:20px;cursor:nesw-resize;background:transparent}.resize-handle.resize-handle-bottom-left[_ngcontent-%COMP%]{bottom:0;left:-6px;width:20px;height:20px;cursor:nesw-resize;background:transparent}.resize-handle.resize-handle-bottom-right[_ngcontent-%COMP%]{bottom:0;right:-6px;width:20px;height:20px;cursor:nwse-resize;background:transparent}"],changeDetection:0})}return n})();var v2=class{sourceNode;sourcePort;targetNode;targetPort;constructor(o,e,t,i){this.sourceNode=o,this.sourcePort=e,this.targetNode=t,this.targetPort=i}};var PIe=(n,o)=>o.name;function TIe(n,o){if(n&1){let e=R();r(0,"button",6),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.chooseInterface(i))}),r(1,"span",7),L(2,"span",8),r(3,"span",9),c(4),l()()()}if(n&2){let e=o.$implicit;v("disabled",!e.available),m(2),ne("status-icon--available",e.available)("status-icon--unavailable",!e.available),m(2),N(e.name)}}function EIe(n,o){if(n&1&&(r(0,"div",2),L(1,"span",3),r(2,"mat-menu",4,0),Q(4,TIe,5,6,"button",5,PIe),l()()),n&2){let e=Te(3),t=h();Tt("left",t.leftPosition)("top",t.topPosition),m(),v("matMenuTriggerFor",e),m(),Tt("min-height",0),m(2),K(t.ports)}}var L_=(()=>{class n{links=ee(void 0);chooseInterfaceChange=new be;contextMenu=ln(eo);sanitizer=f(Pr);changeDetector=f(oe);topPosition;leftPosition;node;ports;ngOnInit(){this.setPosition(0,0)}setPosition(e,t){this.topPosition=this.sanitizer.bypassSecurityTrustStyle(e+"px"),this.leftPosition=this.sanitizer.bypassSecurityTrustStyle(t+"px"),this.changeDetector.detectChanges()}open(e,t,i){this.node=e,this.filterNodePorts(),this.setPosition(t,i),this.contextMenu().openMenu()}filterNodePorts(){let e=[];this.links().forEach(t=>{t.nodes.forEach(i=>{i.node_id===this.node.node_id&&e.push(i)})}),this.ports=[],this.node.ports.forEach(t=>{let i=e.filter(a=>a.adapter_number===t.adapter_number);i.length===0||i.filter(a=>a.port_number===t.port_number).length===0?t.available=!0:t.available=!1,this.ports.push(t)})}chooseInterface(e){this.chooseInterfaceChange.emit({node:this.node,port:e})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-node-select-interface"]],viewQuery:function(t,i){t&1&&Bn(i.contextMenu,eo,5),t&2&&jn()},inputs:{links:[1,"links"]},outputs:{chooseInterfaceChange:"chooseInterfaceChange"},decls:1,vars:1,consts:[["selectInterfaceMenu","matMenu"],[1,"context-menu",3,"left","top"],[1,"context-menu"],[3,"matMenuTriggerFor"],[1,"interface-menu-panel"],["mat-menu-item","",3,"disabled"],["mat-menu-item","",3,"click","disabled"],[1,"interface-item"],["aria-hidden","true",1,"status-icon"],[1,"port"]],template:function(t,i){t&1&&T(0,EIe,6,7,"div",1),t&2&&E(i.node?0:-1)},dependencies:[fe,it,Ko,ut,eo],styles:[".context-menu[_ngcontent-%COMP%]{position:absolute}.context-menu-items[_ngcontent-%COMP%]{min-height:0}.interface-item[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:6px}.status-icon[_ngcontent-%COMP%]{flex-shrink:0;width:var(--gns3-status-indicator-size);height:var(--gns3-status-indicator-size);border-radius:50%}.status-icon--available[_ngcontent-%COMP%]{background-color:var(--gns3-status-available-color)}.status-icon--unavailable[_ngcontent-%COMP%]{background-color:var(--gns3-status-unavailable-color)}.port[_ngcontent-%COMP%]{white-space:nowrap}"],changeDetection:0})}return n})();var C2=(()=>{class n{links=ee(void 0);nodeSelectInterfaceMenu=ln(L_);nodeClicked$;drawingLineTool=f(s_);nodesEventSource=f(ql);linksEventSource=f(Wr);mapNodeToNode=f(Mp);nodeToMapNode=f(Xh);portToMapPort=f(Kh);toasterService=f(re);cdr=f(oe);constructor(){}ngOnInit(){this.nodeClicked$=this.nodesEventSource.clicked.subscribe({next:e=>{let t=this.mapNodeToNode.convert(e.datum);this.nodeSelectInterfaceMenu().open(t,e.y,e.x)},error:e=>{let t=e.error?.message||e.message||"Failed to handle node click";this.toasterService.error(t),this.cdr.markForCheck()}})}ngOnDestroy(){this.drawingLineTool.isDrawing()&&this.drawingLineTool.stop(),this.nodeClicked$.unsubscribe()}onChooseInterface(e){let t=this.nodeToMapNode.convert(e.node),i=this.portToMapPort.convert(e.port);if(this.drawingLineTool.isDrawing()){let a=this.drawingLineTool.stop();this.linksEventSource.created.emit(new v2(a.node,a.port,t,i))}else this.drawingLineTool.start(t.x+t.width/2,t.y+t.height/2,{node:t,port:i})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-draw-link-tool"]],viewQuery:function(t,i){t&1&&Bn(i.nodeSelectInterfaceMenu,L_,5),t&2&&jn()},inputs:{links:[1,"links"]},decls:1,vars:1,consts:[[3,"chooseInterfaceChange","links"]],template:function(t,i){t&1&&(r(0,"app-node-select-interface",0),_("chooseInterfaceChange",function(s){return i.onChooseInterface(s)}),l()),t&2&&v("links",i.links())},dependencies:[fe,L_],encapsulation:2,changeDetection:0})}return n})();var b2=(()=>{class n{nodeService=f(ft);nodeConsoleService=f(ga);nodesDataSource=f(Xn);toasterService=f(re);controllerService=f(_t);settingsService=f(sr);mapSettingsService=f(ui);dialog=f(Xe);cdr=f(oe);project=ee(void 0);controller=ee(void 0);async startConsoleForAllNodes(){this.mapSettingsService.openConsolesInWidget?this.nodeConsoleService.openConsolesForAllNodesInWidget(this.nodesDataSource.getItems()):this.nodeConsoleService.openConsolesForAllNodesInNewTabs(this.nodesDataSource.getItems())}startNodes(){let e=this.nodesDataSource.getItems().filter(t=>t.missing_image).length;e>0&&this.toasterService.warning(`${e} node(s) with a missing image cannot be started and will be skipped.`),this.nodeService.startAll(this.controller(),this.project()).subscribe({next:()=>this.toasterService.success(e>0?"All available nodes successfully started":"All nodes successfully started"),error:t=>{let i=t.error?.message||t.message||"Failed to start nodes";this.toasterService.error(i),this.cdr.markForCheck()}})}stopNodes(){this.nodeService.stopAll(this.controller(),this.project()).subscribe({next:()=>this.toasterService.success("All nodes successfully stopped"),error:e=>{let t=e.error?.message||e.message||"Failed to stop nodes";this.toasterService.error(t),this.cdr.markForCheck()}})}suspendNodes(){this.nodeService.suspendAll(this.controller(),this.project()).subscribe({next:()=>this.toasterService.success("All nodes successfully suspended"),error:e=>{let t=e.error?.message||e.message||"Failed to suspend nodes";this.toasterService.error(t),this.cdr.markForCheck()}})}reloadNodes(){this.nodeService.reloadAll(this.controller(),this.project()).subscribe({next:()=>this.toasterService.success("All nodes successfully reloaded"),error:e=>{let t=e.error?.message||e.message||"Failed to reload nodes";this.toasterService.error(t),this.cdr.markForCheck()}})}resetNodes(){this.nodeService.resetAllNodes(this.controller(),this.project()).subscribe({next:()=>this.toasterService.success("Successfully reset all console connections"),error:e=>{let t=e.error?.message||e.message||"Failed to reset nodes";this.toasterService.error(t),this.cdr.markForCheck()}})}confirmControlsActions(e){let t=String(e),i=t.charAt(0).toUpperCase()+t.slice(1);this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-warning-panel","dialog-small-panel"],autoFocus:".cancel-button",disableClose:!0,data:{title:`${i} all devices?`,message:`This will ${t} every device in the current project.`,confirmButtonText:`${i} all`,tone:"warning",icon:"power_settings_new"}}).afterClosed().subscribe(s=>{s&&(t=="start"?this.startNodes():t=="stop"?this.stopNodes():t=="reload"?this.reloadNodes():t=="suspend"?this.suspendNodes():t=="reset"&&this.resetNodes())})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-nodes-menu"]],inputs:{project:[1,"project"],controller:[1,"controller"]},decls:19,vars:0,consts:[[1,"menu-button-group"],["matTooltip","Console connect to all nodes","matTooltipClass","custom-tooltip","mat-icon-button","",1,"menu-button",3,"click"],["matTooltip","Start/Resume all nodes","matTooltipClass","custom-tooltip","mat-icon-button","",1,"menu-button",3,"click"],["matTooltip","Suspend all nodes","matTooltipClass","custom-tooltip","mat-icon-button","",1,"menu-button",3,"click"],["matTooltip","Stop all nodes","matTooltipClass","custom-tooltip","mat-icon-button","",1,"menu-button",3,"click"],["matTooltip","Reload all nodes","matTooltipClass","custom-tooltip","mat-icon-button","",1,"menu-button",3,"click"],["matTooltip","Reset all console connections","matTooltipClass","custom-tooltip","mat-icon-button","",1,"menu-button",3,"click"]],template:function(t,i){t&1&&(r(0,"div",0)(1,"button",1),_("click",function(){return i.startConsoleForAllNodes()}),r(2,"mat-icon"),c(3,"web_asset"),l()(),r(4,"button",2),_("click",function(){return i.confirmControlsActions("start")}),r(5,"mat-icon"),c(6,"play_arrow"),l()(),r(7,"button",3),_("click",function(){return i.confirmControlsActions("suspend")}),r(8,"mat-icon"),c(9,"pause"),l()(),r(10,"button",4),_("click",function(){return i.confirmControlsActions("stop")}),r(11,"mat-icon"),c(12,"stop"),l()(),r(13,"button",5),_("click",function(){return i.confirmControlsActions("reload")}),r(14,"mat-icon"),c(15,"replay"),l()(),r(16,"button",6),_("click",function(){return i.confirmControlsActions("reset")}),r(17,"mat-icon"),c(18,"compare_arrows"),l()()())},dependencies:[fe,ke,Y,Be,ie,ce,st,pt],styles:[".marked[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.menu-button[_ngcontent-%COMP%]{margin:0 4px;transition:transform var(--gns3-motion-duration-standard) ease}.menu-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary)}.menu-button[_ngcontent-%COMP%]:hover{transform:scale(1.2)}"],changeDetection:0})}return n})();var OIe=n=>["/controller",n,"preferences"],DIe=(n,o)=>o.template_id??o.name,IIe=(n,o)=>o.value;function AIe(n,o){if(n&1&&(r(0,"mat-option",15),c(1),l()),n&2){let e=o.$implicit,t=h();v("value",e),m(),X(" ",t.formatTemplateType(e)," ")}}function NIe(n,o){n&1&&L(0,"img",32),n&2&&v("src",o,Ba)}function FIe(n,o){n&1&&(r(0,"mat-icon",33),c(1,"device_hub"),l())}function RIe(n,o){if(n&1&&(r(0,"span",35),c(1),l()),n&2){let e=h().$implicit,t=h();m(),N(t.formatTemplateType(e.template_type))}}function zIe(n,o){n&1&&(r(0,"mat-icon",36),c(1,"check_circle"),l())}function LIe(n,o){if(n&1){let e=R();r(0,"button",30),_("mousedown",function(i){let a=y(e).$implicit,s=h();return w(s.onTemplatePointerDown(i,a))})("dragstart",function(i){let a=y(e).$implicit,s=h();return w(s.onTemplateDragStart(i,a))})("click",function(){let i=y(e).$implicit,a=h();return w(a.selectTemplate(i))}),r(1,"span",31),T(2,NIe,1,1,"img",32)(3,FIe,2,0,"mat-icon",33),l(),r(4,"span",34),c(5),l(),T(6,RIe,2,1,"span",35),T(7,zIe,2,0,"mat-icon",36),l()}if(n&2){let e,t=o.$implicit,i=h();ne("template-card--list",i.viewMode()==="list")("template-card--draggable",i.data.allowTopologyDrop)("template-card--selected",i.selectedTemplate()===t),v("draggable",i.data.allowTopologyDrop),Ce("aria-pressed",i.selectedTemplate()===t),m(2),E((e=i.getImageSourceForTemplate(t))?2:3,e),m(3),N(t.name),m(),E(i.viewMode()==="list"?6:-1),m(),E(i.selectedTemplate()===t?7:-1)}}function VIe(n,o){n&1&&(r(0,"div",18)(1,"mat-icon"),c(2,"search_off"),l(),r(3,"span"),c(4,"No templates match the current filters"),l()())}function BIe(n,o){if(n&1&&(r(0,"mat-option",15),c(1),l()),n&2){let e=o.$implicit;v("value",e.value),m(),X(" ",e.display," ")}}var Uj="addNodesViewMode",x2="__ask__",y2=(()=>{class n{data;dialogRef=f(We);templateService=f(fa);computeService=f(ml);formBuilder=f(Ai);toasterService=f(re);nonNegativeValidator=f(Ep);cd=f(oe);destroyRef=f(Va);nodeAddRequested=new be;templateDragStarted=new be;controller;project;templateTypes=["all","cloud","ethernet_hub","ethernet_switch","docker","dynamips","vpcs","iou","qemu"];configurationForm;positionForm;templates=[];filteredTemplates=[];nodeComputes=[{display:"local",value:"local"}];searchText=$("");selectedType=$("all");selectedTemplate=$(null);selectedComputeId=$(x2);askOnDrop=x2;viewMode=z(localStorage.getItem(Uj)==="list"?"list":"grid");toggleViewMode(){let e=this.viewMode()==="grid"?"list":"grid";this.viewMode.set(e),localStorage.setItem(Uj,e)}constructor(e){this.data=e,this.controller=e.controller,this.project=e.project,this.configurationForm=this.formBuilder.group({numberOfNodes:new Ge(1,[Ue.compose([Ue.required,Ue.min(1),this.nonNegativeValidator.get])])}),this.positionForm=this.formBuilder.group({top:new Ge(0,Ue.required),left:new Ge(0,Ue.required)})}ngOnInit(){this.templateService.list(this.controller).pipe(wo(this.destroyRef)).subscribe({next:e=>{this.templates=[...e].sort((t,i)=>t.name.localeCompare(i.name)),this.filteredTemplates=[...this.templates],this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load templates";this.toasterService.error(t),this.cd.markForCheck()}}),this.templateService.newTemplateCreated.pipe(wo(this.destroyRef)).subscribe(e=>{this.templates=[...this.templates,e].sort((t,i)=>t.name.localeCompare(i.name)),this.filterTemplates(),this.cd.markForCheck()}),this.computeService.getComputes(this.controller).pipe(wo(this.destroyRef)).subscribe({next:e=>{let t=e.filter(i=>i.compute_id!=="local").map(i=>{let a=i.compute_id.slice(-8);return{display:`${i.name||i.compute_id} (${a})`,value:i.compute_id}});this.nodeComputes=[{display:"local",value:"local"},...t],this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load computes";this.toasterService.error(t),this.nodeComputes=[{display:"local",value:"local"}],this.cd.markForCheck()}})}onNoClick(){this.dialogRef.close()}compareComputes(e,t){return e===t}selectTemplate(e){this.selectedTemplate.set(e)}onTemplatePointerDown(e,t){this.selectTemplate(t)}onTemplateDragStart(e,t){if(this.selectTemplate(t),!this.configurationForm.valid||!this.data.allowTopologyDrop){e.preventDefault();return}if(e.dataTransfer?.setData("text/plain",t.template_id??t.name),e.dataTransfer){e.dataTransfer.effectAllowed="copy";let i=e.currentTarget?.querySelector(".template-card__image-wrap");if(i){let a=i.getBoundingClientRect();e.dataTransfer.setDragImage(i,a.width/2,a.height/2)}}this.templateDragStarted.emit({event:e,template:t,numberOfNodes:this.configurationForm.get("numberOfNodes").value,computeId:this.resolveDragComputeId()})}resolveDragComputeId(){let e=this.selectedComputeId();return e===x2?void 0:e}resolveAddComputeId(e){let t=this.selectedComputeId();if(t!==x2)return t;let i=e?.compute_id;return i&&this.nodeComputes.some(a=>a.value===i)?i:"local"}refreshSymbolImages(){this.cd.markForCheck()}getImageSourceForTemplate(e){return this.data.symbolUrls?.get(e.symbol)??""}formatTemplateType(e){return e==="all"?"All template types":e.replace(/_/g," ").replace(/\b\w/g,t=>t.toUpperCase())}filterTemplates(){let e=this.templates.filter(t=>t.name.toLowerCase().includes(this.searchText().toLowerCase()));this.selectedType()===""||this.selectedType()==="all"?this.filteredTemplates=e:this.filteredTemplates=e.filter(t=>t.template_type===this.selectedType()),this.filteredTemplates.sort((t,i)=>t.name.localeCompare(i.name))}onAddClick(){if(!this.selectedTemplate()||this.filteredTemplates.length===0)this.toasterService.error("Please firstly choose template.");else if(!this.positionForm.valid||!this.configurationForm.valid||!this.selectedComputeId())this.toasterService.error("Please fill all required fields.");else{let e=this.positionForm.get("left").value,t=this.positionForm.get("top").value;if(e>this.project.scene_width/2||e<-(this.project.scene_width/2)||t>this.project.scene_height/2||t<-this.project.scene_height)this.toasterService.error("Please set correct position values.");else{let i={template:this.selectedTemplate(),computeId:this.resolveAddComputeId(this.selectedTemplate()),numberOfNodes:this.configurationForm.get("numberOfNodes").value,x:e,y:t};this.nodeAddRequested.emit(i)}}}static \u0275fac=function(t){return new(t||n)(Mt(Wt))};static \u0275cmp=V({type:n,selectors:[["app-template-list-dialog"]],inputs:{searchText:[1,"searchText"],selectedType:[1,"selectedType"],selectedTemplate:[1,"selectedTemplate"],selectedComputeId:[1,"selectedComputeId"]},outputs:{nodeAddRequested:"nodeAddRequested",templateDragStarted:"templateDragStarted",searchText:"searchTextChange",selectedType:"selectedTypeChange",selectedTemplate:"selectedTemplateChange",selectedComputeId:"selectedComputeIdChange"},decls:73,vars:20,consts:[["mat-dialog-title","",1,"dialog-title"],["cdkDrag","","cdkDragHandle","","cdkDragRootElement",".cdk-overlay-pane",1,"dialog-title__drag-handle",3,"cdkDragDisabled"],[1,"dialog-title__actions"],["mat-button","","color","accent","aria-label","Template preferences","target","_blank","rel","noopener",1,"dialog-title__preferences",3,"routerLink"],["mat-icon-button","","aria-label","Close add nodes",3,"click"],["mat-dialog-content","",1,"dialog-content"],["aria-labelledby","template-section-title",1,"dialog-section"],[1,"dialog-section__header"],["id","template-section-title",1,"dialog-section__title"],["mat-icon-button","","type","button","matTooltipPosition","left",1,"dialog-section__view-toggle",3,"click","matTooltip"],[1,"dialog-fields"],["subscriptSizing","dynamic"],["matPrefix",""],["matInput","","placeholder","Search by name",3,"input","value"],[3,"selectionChange","value"],[3,"value"],["role","group","aria-label","Node templates",1,"template-gallery"],["type","button",1,"template-card",3,"template-card--list","template-card--draggable","draggable","template-card--selected"],[1,"template-gallery__empty"],[1,"advanced-options"],[3,"formGroup"],["type","number","min","1","step","1","matInput","","formControlName","numberOfNodes"],[3,"selectionChange","value","compareWith"],["role","separator",1,"advanced-options__divider"],[1,"dialog-fields",3,"formGroup"],["matInput","","type","number","formControlName","left"],["matInput","","type","number","formControlName","top"],["mat-dialog-actions",""],["mat-button","","tabindex","-1","color","accent",3,"click"],["mat-flat-button","","tabindex","2","color","primary",3,"click","disabled"],["type","button",1,"template-card",3,"mousedown","dragstart","click","draggable"],[1,"template-card__image-wrap"],["alt","",1,"template-card__image",3,"src"],[1,"template-card__fallback-icon"],[1,"template-card__name"],[1,"template-card__type"],[1,"template-card__selected-icon"]],template:function(t,i){t&1&&(r(0,"div",0)(1,"span",1)(2,"mat-icon"),c(3,"drag_indicator"),l(),r(4,"span"),c(5,"Add nodes"),l()(),r(6,"span",2)(7,"a",3)(8,"mat-icon"),c(9,"tune"),l(),r(10,"span"),c(11,"Template preferences"),l()(),r(12,"button",4),_("click",function(){return i.onNoClick()}),r(13,"mat-icon"),c(14,"close"),l()()()(),r(15,"div",5)(16,"section",6)(17,"div",7)(18,"h2",8),c(19,"Choose a template"),l(),r(20,"button",9),_("click",function(){return i.toggleViewMode()}),r(21,"mat-icon"),c(22),l()()(),r(23,"div",10)(24,"mat-form-field",11)(25,"mat-label"),c(26,"Search templates"),l(),r(27,"mat-icon",12),c(28,"search"),l(),r(29,"input",13),_("input",function(s){return i.searchText.set(s.target.value),i.filterTemplates()}),l()(),r(30,"mat-form-field",11)(31,"mat-label"),c(32,"Template type"),l(),r(33,"mat-select",14),_("selectionChange",function(s){return i.selectedType.set(s.value),i.filterTemplates()}),Q(34,AIe,2,2,"mat-option",15,Oe),l()()(),r(36,"div",16),Q(37,LIe,8,12,"button",17,DIe,!1,VIe,5,0,"div",18),l()(),r(40,"mat-expansion-panel",19)(41,"mat-expansion-panel-header")(42,"mat-panel-title"),c(43,"Advanced options"),l()(),r(44,"div",10)(45,"div",20)(46,"mat-form-field",11)(47,"mat-label"),c(48,"Number of nodes"),l(),L(49,"input",21),l()(),r(50,"mat-form-field",11)(51,"mat-label"),c(52,"Compute"),l(),r(53,"mat-select",22),_("selectionChange",function(s){return i.selectedComputeId.set(s.value)}),r(54,"mat-option",15),c(55,"Ask when dropping"),l(),Q(56,BIe,2,2,"mat-option",15,IIe),l()()(),L(58,"div",23),r(59,"form",24)(60,"mat-form-field",11)(61,"mat-label"),c(62,"Left (X)"),l(),L(63,"input",25),l(),r(64,"mat-form-field",11)(65,"mat-label"),c(66,"Top (Y)"),l(),L(67,"input",26),l()()()(),r(68,"div",27)(69,"button",28),_("click",function(){return i.onNoClick()}),c(70,"Close"),l(),r(71,"button",29),_("click",function(){return i.onAddClick()}),c(72," Add nodes "),l()()),t&2&&(m(),ne("dialog-title__drag-handle--enabled",i.data.allowTopologyDrop),v("cdkDragDisabled",!i.data.allowTopologyDrop),m(6),v("routerLink",tn(18,OIe,i.controller==null?null:i.controller.id)),m(13),v("matTooltip",i.viewMode()==="grid"?"Switch to list view":"Switch to grid view"),Ce("aria-label",i.viewMode()==="grid"?"Switch to list view":"Switch to grid view"),m(2),N(i.viewMode()==="grid"?"view_list":"grid_view"),m(7),v("value",i.searchText()),m(4),v("value",i.selectedType()),m(),K(i.templateTypes),m(2),ne("template-gallery--list",i.viewMode()==="list"),m(),K(i.filteredTemplates),m(8),v("formGroup",i.configurationForm),m(8),v("value",i.selectedComputeId())("compareWith",i.compareComputes),m(),v("value",i.askOnDrop),m(2),K(i.nodeComputes),m(3),v("formGroup",i.positionForm),m(12),v("disabled",!i.selectedTemplate()||i.configurationForm.invalid||i.positionForm.invalid))},dependencies:[fe,It,Ct,At,No,Nt,vt,Er,Ut,Yt,vn,Co,ke,qe,Qe,bt,Y,he,Be,we,Pe,Ve,Bi,ye,Ee,ot,ct,nt,ie,ce,El,jd,$d,Wm,st,pt,Qx,S8,M8],styles:['@charset "UTF-8";.dialog-title[_ngcontent-%COMP%]{--gns3-density-section-header-height: calc( var(--gns3-density-space-1) * 2 + var(--gns3-density-section-header-title-size) * 1.2 + 1px );--gns3-density-section-header-padding: var(--gns3-density-space-1) 16px;display:flex;align-items:center;gap:var(--gns3-density-space-4);justify-content:space-between}.dialog-title__drag-handle[_ngcontent-%COMP%], .dialog-title__actions[_ngcontent-%COMP%]{display:flex;align-items:center}.dialog-title__drag-handle[_ngcontent-%COMP%]{min-width:0;flex:1 1 auto;gap:var(--gns3-density-space-2);user-select:none}.dialog-title__drag-handle--enabled[_ngcontent-%COMP%]{cursor:grab}.dialog-title__actions[_ngcontent-%COMP%]{flex:0 0 auto;gap:var(--gns3-density-space-1)}[mat-dialog-actions][_ngcontent-%COMP%]{--mat-dialog-actions-padding: 8px 16px}.dialog-title__preferences[_ngcontent-%COMP%]{flex:0 0 auto}.dialog-title__preferences[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{margin-right:var(--gns3-density-space-2)}.dialog-content[_ngcontent-%COMP%]{scrollbar-color:var(--mat-sys-outline) var(--mat-sys-surface);scrollbar-width:thin}.dialog-section[_ngcontent-%COMP%]{display:grid;gap:var(--gns3-density-space-3)}.advanced-options[_ngcontent-%COMP%]{--mat-expansion-container-elevation-shadow: none;--mat-expansion-container-background-color: transparent;margin-top:var(--gns3-density-space-1);padding-top:var(--gns3-density-space-1);border-top:1px solid var(--mat-sys-outline-variant)}.advanced-options[_ngcontent-%COMP%] mat-expansion-panel-header[_ngcontent-%COMP%]{padding:0 16px}.advanced-options__divider[_ngcontent-%COMP%]{height:1px;margin:var(--gns3-density-space-2) 0;background:var(--mat-sys-outline-variant);opacity:.5}.dialog-section[_ngcontent-%COMP%] + .dialog-section[_ngcontent-%COMP%]{margin-top:var(--gns3-density-space-5);padding-top:var(--gns3-density-space-5);border-top:1px solid var(--mat-sys-outline-variant)}.dialog-section__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:var(--gns3-density-space-2)}.dialog-section__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font:var(--mat-sys-title-small);font-weight:600;letter-spacing:0}.dialog-fields[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--gns3-density-space-3);margin:0}.dialog-fields[_ngcontent-%COMP%] > div[_ngcontent-%COMP%], .dialog-fields[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{width:100%;min-width:0}.template-gallery[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:var(--gns3-density-space-2);max-height:calc((var(--gns3-density-form-field-height) + 2.5em + var(--gns3-density-space-2) * 3) * 3 + var(--gns3-density-space-2) * 4 + 2px);padding:var(--gns3-density-space-2);overflow-y:auto;border:1px solid var(--mat-sys-outline-variant);border-radius:var(--gns3-density-radius-sm);background:var(--mat-sys-surface-container-lowest);scrollbar-color:var(--mat-sys-outline) transparent;scrollbar-width:thin}.template-card[_ngcontent-%COMP%]{position:relative;display:grid;grid-template-rows:calc(var(--gns3-density-form-field-height) * 1) minmax(2.5em,auto);min-width:0;min-height:calc(var(--gns3-density-form-field-height) * 2);box-sizing:border-box;place-items:center;align-content:start;gap:var(--gns3-density-space-2);padding:var(--gns3-density-space-2);border:1px solid transparent;border-radius:var(--gns3-density-radius-sm);color:var(--mat-sys-on-surface);background:transparent;cursor:pointer}.template-card[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container)}.template-card[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--mat-sys-primary);outline-offset:-2px}.template-card--draggable[_ngcontent-%COMP%]{cursor:grab}.template-card--draggable[_ngcontent-%COMP%]:active{cursor:grabbing}.template-card--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);background:var(--mat-sys-primary-container);color:var(--mat-sys-on-primary-container)}.template-card__image-wrap[_ngcontent-%COMP%]{display:grid;width:calc(var(--gns3-density-form-field-height) * 1);height:calc(var(--gns3-density-form-field-height) * 1);min-width:0;min-height:0;overflow:hidden;place-items:center}.template-card__image[_ngcontent-%COMP%]{display:block;max-width:100%;max-height:100%;width:100%;height:100%;object-fit:contain}.template-card__fallback-icon[_ngcontent-%COMP%]{width:24px;height:24px;color:var(--mat-sys-on-surface-variant);font-size:24px}.template-card__name[_ngcontent-%COMP%]{display:-webkit-box;width:100%;min-height:2.5em;max-width:100%;overflow:hidden;font:var(--mat-sys-label-large);line-height:1.25;letter-spacing:0;text-align:center;overflow-wrap:anywhere;-webkit-box-orient:vertical;-webkit-line-clamp:2}.template-card__selected-icon[_ngcontent-%COMP%]{position:absolute;top:var(--gns3-density-space-1);right:var(--gns3-density-space-1);width:18px;height:18px;color:var(--mat-sys-primary);font-size:18px}.template-gallery--list[_ngcontent-%COMP%]{grid-template-columns:1fr;align-content:start;gap:0;padding:0}.template-gallery--list[_ngcontent-%COMP%] .template-gallery__empty[_ngcontent-%COMP%]{margin:var(--gns3-density-space-3)}.template-card--list[_ngcontent-%COMP%]{grid-template-rows:none;grid-template-columns:28px minmax(0,1fr) auto;min-height:var(--gns3-density-form-field-height);align-content:stretch;align-items:center;justify-items:start;gap:var(--gns3-density-space-3);padding-inline:var(--gns3-density-space-3) calc(var(--gns3-density-space-3) + 24px);border-bottom:1px solid var(--mat-sys-outline-variant)}.template-card--list[_ngcontent-%COMP%]:last-child{border-bottom:none}.template-card--list[_ngcontent-%COMP%] .template-card__image-wrap[_ngcontent-%COMP%]{width:28px;height:28px}.template-card--list[_ngcontent-%COMP%] .template-card__name[_ngcontent-%COMP%]{min-height:0;text-align:left;-webkit-line-clamp:1}.template-card--list[_ngcontent-%COMP%] .template-card__type[_ngcontent-%COMP%]{justify-self:end;color:var(--mat-sys-on-surface-variant);font:var(--mat-sys-label-small);letter-spacing:0;white-space:nowrap}.template-card--list[_ngcontent-%COMP%] .template-card__selected-icon[_ngcontent-%COMP%]{top:50%;right:var(--gns3-density-space-3);transform:translateY(-50%)}.template-gallery__empty[_ngcontent-%COMP%]{display:flex;min-height:calc(var(--gns3-density-form-field-height) * 2);grid-column:1/-1;align-items:center;justify-content:center;gap:var(--gns3-density-space-2);color:var(--mat-sys-on-surface-variant);font:var(--mat-sys-body-medium);letter-spacing:0}@media(max-width:560px){.dialog-title__drag-handle[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{display:none}.dialog-title__preferences[_ngcontent-%COMP%]{min-width:0;padding-inline:var(--gns3-density-space-2)}.dialog-title__preferences[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{display:none}.dialog-title__preferences[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{margin-right:0}.dialog-fields[_ngcontent-%COMP%]{grid-template-columns:1fr}}'],changeDetection:0})}return n})();var jIe=["selectorContainer"],$Ie=(n,o)=>o.compute_id;function HIe(n,o){n&1&&(r(0,"mat-icon",7),c(1,"check_circle"),l())}function UIe(n,o){n&1&&(r(0,"mat-icon",8),c(1,"cancel"),l())}function WIe(n,o){if(n&1){let e=R();r(0,"button",4),_("click",function(){let i=y(e).$implicit,a=h();return w(a.selectCompute(i.compute_id))}),r(1,"div",5)(2,"span",6),c(3),l(),T(4,HIe,2,0,"mat-icon",7)(5,UIe,2,0,"mat-icon",8),l(),r(6,"div",9)(7,"span",10)(8,"span",11),c(9,"CPU:"),l(),r(10,"span"),c(11),l()(),r(12,"span",10)(13,"span",12),c(14,"MEM:"),l(),r(15,"span"),c(16),l()(),r(17,"span",10)(18,"span",13),c(19,"DISK:"),l(),r(20,"span"),c(21),l()()()()}if(n&2){let e=o.$implicit,t=o.$index,i=h();ne("compute-selector__item--even",t%2===1),m(3),N(i.getComputeDisplayName(e)),m(),E(e.connected?4:5),m(6),Za(i.getUsageColorClass(e,"cpu")),m(),N(i.getCpuInfo(e)),m(4),Za(i.getUsageColorClass(e,"mem")),m(),N(i.getMemoryInfo(e)),m(4),Za(i.getUsageColorClass(e,"disk")),m(),N(i.getDiskInfo(e))}}var Wj=(()=>{class n{cd=f(oe);selectorContainer;computes=ee.required();x=ee.required();y=ee.required();MARGIN=10;actualWidth=z(200);actualHeight=z(120);resizeObserver;computeSelected=new be;selectorX=Ne(()=>{let e=this.x(),t=window.innerWidth,i=this.actualWidth();return e+i+this.MARGIN>t?e-i-this.MARGIN:e+this.MARGIN});selectorY=Ne(()=>{let e=this.y(),t=window.innerHeight,i=this.actualHeight();return e+i+this.MARGIN>t?e-i-this.MARGIN:e+this.MARGIN});constructor(){this.resizeObserver=new ResizeObserver(e=>{for(let t of e)this.actualWidth.set(t.contentRect.width),this.actualHeight.set(t.contentRect.height);this.cd.markForCheck()})}ngAfterViewInit(){if(this.selectorContainer?.nativeElement){let e=this.selectorContainer.nativeElement.getBoundingClientRect();this.actualWidth.set(e.width),this.actualHeight.set(e.height),this.cd.markForCheck(),this.resizeObserver.observe(this.selectorContainer.nativeElement)}setTimeout(()=>{this.selectorContainer?.nativeElement&&this.selectorContainer.nativeElement.focus()},0)}ngOnDestroy(){this.resizeObserver&&this.resizeObserver.disconnect()}selectCompute(e){this.computeSelected.emit(e)}getComputeDisplayName(e){return e.compute_id==="local"?`${e.name} (controller)`:`${e.name} (${e.host}:${e.port})`}getCpuInfo(e){let t=e.capabilities?.cpus||0;return`${e.cpu_usage_percent||0}% / ${t}c`}getMemoryInfo(e){let t=e.capabilities?.memory||0,i=e.memory_usage_percent||0,a=this.bytesToGB(t);return`${(a*i/100).toFixed(1)}/${a.toFixed(0)} GB`}getDiskInfo(e){return`${e.disk_usage_percent||0}%`}getUsageColorClass(e,t){let i;switch(t){case"cpu":i=e.cpu_usage_percent||0;break;case"mem":i=e.memory_usage_percent||0;break;case"disk":i=e.disk_usage_percent||0;break}return i<60?"compute-selector__usage--low":i<85?"compute-selector__usage--medium":"compute-selector__usage--high"}bytesToGB(e){return e/(1024*1024*1024)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-compute-selector"]],viewQuery:function(t,i){if(t&1&&Kn(jIe,5),t&2){let a;gt(a=ht())&&(i.selectorContainer=a.first)}},inputs:{computes:[1,"computes"],x:[1,"x"],y:[1,"y"]},outputs:{computeSelected:"computeSelected"},decls:5,vars:4,consts:[["selectorContainer",""],["tabindex","0",1,"compute-selector"],[1,"compute-selector__list"],["mat-button","",1,"compute-selector__item",3,"compute-selector__item--even"],["mat-button","",1,"compute-selector__item",3,"click"],[1,"compute-selector__item-main"],[1,"compute-selector__item-name"],[1,"compute-selector__status","compute-selector__status--connected"],[1,"compute-selector__status","compute-selector__status--disconnected"],[1,"compute-selector__item-info"],[1,"compute-selector__info-item"],[1,"compute-selector__label","compute-selector__label--cpu"],[1,"compute-selector__label","compute-selector__label--mem"],[1,"compute-selector__label","compute-selector__label--disk"]],template:function(t,i){t&1&&(r(0,"div",1,0)(2,"div",2),Q(3,WIe,22,13,"button",3,$Ie),l()()),t&2&&(Tt("left",i.selectorX(),"px")("top",i.selectorY(),"px"),m(3),K(i.computes()))},dependencies:[fe,ie,ce,Y,he],styles:[".compute-selector[_ngcontent-%COMP%]{position:fixed;width:fit-content;min-width:min(200px,100vw - 32px);max-width:min(400px,100vw - 32px);background:var(--mat-sys-surface);border:1px solid var(--mat-sys-outline-variant);border-radius:8px;box-shadow:0 4px 16px color-mix(in srgb,var(--mat-sys-shadow) 20%,transparent);z-index:1100;overflow:hidden;padding:4px;outline:none}.compute-selector[_ngcontent-%COMP%]:focus{outline:none}.compute-selector__list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2px}.compute-selector__item[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:4px;width:100%;padding:8px 12px;border-radius:6px;text-align:left;transition:background-color var(--gns3-motion-duration-standard) ease}.compute-selector__item-main[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;width:100%;gap:8px}.compute-selector__item-info[_ngcontent-%COMP%]{display:flex;gap:12px;width:100%}.compute-selector__info-item[_ngcontent-%COMP%]{display:flex;gap:4px;font-size:12px;color:var(--mat-sys-on-surface-variant);white-space:nowrap}.compute-selector__label[_ngcontent-%COMP%]{font-weight:500;color:var(--mat-sys-primary)}.compute-selector__usage[_ngcontent-%COMP%]{font-weight:500}.compute-selector__usage--low[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.compute-selector__usage--medium[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary)}.compute-selector__usage--high[_ngcontent-%COMP%]{color:var(--mat-sys-error)}.compute-selector__item[_ngcontent-%COMP%]:hover, .compute-selector__item--even[_ngcontent-%COMP%]{background:var(--mat-sys-surface-container-highest)}.compute-selector__item-name[_ngcontent-%COMP%]{flex:1;font-size:13px;color:var(--mat-sys-on-surface);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.compute-selector__status[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;flex-shrink:0}.compute-selector__status--connected[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.compute-selector__status--disconnected[_ngcontent-%COMP%]{color:var(--mat-sys-error)}.compute-selector[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--mat-sys-primary);outline-offset:2px}"],changeDetection:0})}return n})();var GIe=(n,o)=>o.id;function qIe(n,o){if(n&1){let e=R();r(0,"div",4),_("click",function(){y(e);let i=h();return w(i.onComputeSelectorCancelled())}),l()}}function QIe(n,o){if(n&1){let e=R();r(0,"app-compute-selector",5),_("computeSelected",function(i){y(e);let a=h();return w(a.onComputeSelected(i))}),l()}if(n&2){let e=h();v("computes",e.availableComputes())("x",e.lastPageX())("y",e.lastPageY())}}function KIe(n,o){n&1&&(r(0,"div",9)(1,"mat-icon",10),c(2,"error"),l()())}function XIe(n,o){if(n&1&&(r(0,"div",6)(1,"div",7),c(2),l(),L(3,"img",8),T(4,KIe,3,0,"div",9),l()),n&2){let e=o.$implicit,t=h(),i=t.getCreatingNodeScreenPosition(e);Tt("left",i.x,"px")("top",i.y,"px"),m(2),N(e.template.name),m(),ne("template__ghost-icon-img--error",e.status==="error"),v("src",t.getImageSourceForTemplate(e.template),Ba),m(),E(e.status==="error"?4:-1)}}var V_=(()=>{class n{document;dialog=f(Xe);templateService=f(fa);symbolService=f(Lr);context=f(zo);cd=f(oe);computeService=f(ml);notificationService=f(_s);toasterService=f(re);controller=ee(void 0);project=ee(void 0);nodeCreationChange=new be;templates=[];templateSymbolBlobUrls=new Map;addNodesDialogRef;constructor(e){this.document=e}lastPageX=z(0);lastPageY=z(0);dragStartClientX=0;dragStartClientY=0;isDragging=z(!1);mouseOffsetX=0;mouseOffsetY=0;activeTemplateDrag;removeNativeDragListeners;showComputeSelector=z(!1);availableComputes=z([]);pendingNodePosition=z(null);pendingTemplate=z(null);cachedComputes=z([]);creatingNodes=z(new Map);pendingCreationId=z(null);ghostIconScreenPosition=Ne(()=>{let e=this.pendingNodePosition();if(!e)return{x:0,y:0};let t=this.context.transformation.k,i=this.context.getZeroZeroTransformationPoint(),a=e.x*t+i.x+this.context.transformation.x,s=e.y*t+i.y+this.context.transformation.y;return{x:a,y:s}});subscription;controllerWatcher=Vn(()=>{let e=this.controller();e&&e.id&&this.templates.length===0&&this.loadTemplates()});ngOnInit(){this.subscription=this.templateService.newTemplateCreated.subscribe(e=>{this.templates.push(e),this.loadTemplateSymbolBlobs([e]),this.cd.markForCheck()}),this.subscription.add(this.notificationService.computeCacheUpdated.subscribe(e=>{this.cachedComputes.set(e),this.cd.markForCheck()})),this.notificationService.hasCachedData()&&this.cachedComputes.set(this.notificationService.getCachedComputes()),this.controller()&&this.controller().id&&this.loadTemplates(),this.symbolService.list(this.controller())}loadTemplates(){this.templateService.list(this.controller()).subscribe({next:e=>{this.templates=e,this.loadTemplateSymbolBlobs(e),this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load templates";this.toasterService.error(t),this.cd.markForCheck()}})}loadTemplateSymbolBlobs(e){let t=new Map;e.forEach(a=>{let s=a.symbol,d;s.startsWith(":/")?d=`/symbols/${s}/raw`:d=`/symbols/${s}/raw`,t.set(s,d)});let i=Array.from(t.values());Ci(i.map(a=>this.symbolService.getSymbolBlobUrl(this.controller(),a))).subscribe({next:a=>{i.forEach((s,d)=>{for(let[p,u]of t.entries())if(u===s){this.templateSymbolBlobUrls.set(p,a[d]);break}}),this.addNodesDialogRef?.componentInstance.refreshSymbolImages(),this.cd.markForCheck()},error:a=>{let s=a.error?.message||a.message||"Failed to load template symbols";this.toasterService.error(s),this.cd.markForCheck()}})}dragStart(e,t,i=1,a){let s=e,d=s?.clientX||0,p=s?.clientY||0,u=s?.currentTarget;if(u){let b=u.querySelector(".template-card__image-wrap")?.getBoundingClientRect();this.mouseOffsetX=b?b.width/2:0,this.mouseOffsetY=b?b.height/2:0}this.isDragging.set(!0),this.dragStartClientX=d,this.dragStartClientY=p,this.lastPageX.set(d),this.lastPageY.set(p),this.activeTemplateDrag={template:t,numberOfNodes:i,computeId:a},this.removeNativeDragListeners?.();let g=x=>{this.activeTemplateDrag&&(this.lastPageX.set(x.clientX),this.lastPageY.set(x.clientY),this.isTopologyEventTarget(x.target)&&(x.preventDefault(),x.dataTransfer&&(x.dataTransfer.dropEffect="copy")))},C=x=>{if(!this.activeTemplateDrag||!this.isTopologyEventTarget(x.target))return;x.preventDefault(),this.lastPageX.set(x.clientX),this.lastPageY.set(x.clientY);let b=this.activeTemplateDrag;this.clearNativeDrag(),this.dragEnd(void 0,b.template,b.numberOfNodes,b.computeId)},M=()=>this.clearNativeDrag();this.document.addEventListener("dragover",g,!0),this.document.addEventListener("drop",C,!0),this.document.addEventListener("dragend",M,!0),this.removeNativeDragListeners=()=>{this.document.removeEventListener("dragover",g,!0),this.document.removeEventListener("drop",C,!0),this.document.removeEventListener("dragend",M,!0)}}clearNativeDrag(){this.isDragging.set(!1),this.activeTemplateDrag=void 0,this.removeNativeDragListeners?.(),this.removeNativeDragListeners=void 0}dragEnd(e,t,i=1,a,s=!1){let d=Number.isFinite(e?.x)&&Number.isFinite(e?.y),p=d?this.dragStartClientX+e.x:this.lastPageX(),u=d?this.dragStartClientY+e.y:this.lastPageY();if(e?.dragCancelled||s&&!this.isTopologyDropTarget(p,u))return;let g=this.context.getZeroZeroTransformationPoint(),C=this.context.size.width>0?g.x:this.project().scene_width/2,M=this.context.size.height>0?g.y:this.project().scene_height/2,x=(p-(C+this.context.transformation.x))/this.context.transformation.k,b=(u-(M+this.context.transformation.y))/this.context.transformation.k,P=Math.round(x-this.mouseOffsetX),k=Math.round(b-this.mouseOffsetY),S=this.cachedComputes();S.length===0?this.computeService.getComputes(this.controller()).subscribe({next:O=>{this.notificationService.setInitialComputes(O),this.cachedComputes.set(O),this.processNodeCreation(t,P,k,O,i,a)},error:O=>{let A=O.error?.message||O.message||"Failed to load computes";this.toasterService.error(A),this.cd.markForCheck();let D={template:t,computeId:a||"local",numberOfNodes:i,x:P,y:k};this.nodeCreationChange.emit(D)}}):this.processNodeCreation(t,P,k,S,i,a)}isTopologyDropTarget(e,t){return!!this.document.elementFromPoint(e,t)?.closest("svg#map")}isTopologyEventTarget(e){return e instanceof Element&&!!e.closest("svg#map")}processNodeCreation(e,t,i,a,s,d){let p=a.filter(M=>M.connected);if(p.length===0){this.toasterService.error("No reachable compute nodes available. Please check your compute nodes connection status.");return}let u=this.generateUniqueId(),g={id:u,template:e,x:t,y:i,numberOfNodes:s,computeId:null,status:"waiting_for_compute"};this.addCreatingNode(g);let C=p.find(M=>M.compute_id===d);if(C)this.startNodeCreation(u,C.compute_id);else if(p.length===1)this.startNodeCreation(u,p[0].compute_id);else{this.pendingCreationId.set(u);let M=[...p].sort((x,b)=>x.compute_id==="local"?-1:b.compute_id==="local"?1:(x.name||"").localeCompare(b.name||""));this.availableComputes.set(M),this.showComputeSelector.set(!0),this.cd.markForCheck()}}closeComputeSelector(){this.showComputeSelector.set(!1),this.pendingCreationId.set(null)}onComputeSelected(e){let t=this.pendingCreationId();t&&(this.updateCreatingNodeCompute(t,e),this.startNodeCreation(t,e),this.closeComputeSelector())}onComputeSelectorCancelled(){let e=this.pendingCreationId();e&&this.removeCreatingNode(e),this.closeComputeSelector()}generateUniqueId(){return`creation-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}addCreatingNode(e){let t=new Map(this.creatingNodes());t.set(e.id,e),this.creatingNodes.set(t),this.cd.markForCheck()}updateCreatingNodeCompute(e,t){let i=new Map(this.creatingNodes()),a=i.get(e);a&&(a.computeId=t,a.status="creating",i.set(e,a),this.creatingNodes.set(i),this.cd.markForCheck())}updateCreatingNodeStatus(e,t,i){let a=new Map(this.creatingNodes()),s=a.get(e);s&&(s.status=t,s.errorMessage=i,a.set(e,s),this.creatingNodes.set(a),this.cd.markForCheck())}removeCreatingNode(e){let t=new Map(this.creatingNodes());t.delete(e),this.creatingNodes.set(t),this.cd.markForCheck()}getCreatingNodeScreenPosition(e){let t=this.context.transformation.k,i=this.context.getZeroZeroTransformationPoint(),a=e.x*t+i.x+this.context.transformation.x,s=e.y*t+i.y+this.context.transformation.y;return{x:a,y:s}}startNodeCreation(e,t){let i=this.creatingNodes().get(e);if(!i)return;let a={template:i.template,computeId:t,numberOfNodes:i.numberOfNodes,x:i.x,y:i.y,creationId:e};this.nodeCreationChange.emit(a)}onNodeCreated(e,t,i){if(t){this.removeCreatingNode(e);return}this.updateCreatingNodeStatus(e,"error",i),setTimeout(()=>{this.removeCreatingNode(e)},3e3)}openDialog(){if(this.addNodesDialogRef)return;let e=this.document.defaultView?.matchMedia?.("(max-width: 720px)")?.matches??!1,t=this.document.documentElement.dataset.density==="compact"?"48px":"56px",i=this.dialog.open(y2,{panelClass:["base-dialog-panel","template-dialog-panel","add-nodes-dialog-panel","dialog-small-panel"],data:{controller:this.controller(),project:this.project(),symbolUrls:this.templateSymbolBlobUrls,allowTopologyDrop:!e},autoFocus:!1,restoreFocus:!1,hasBackdrop:e,position:e?void 0:{top:t}});this.addNodesDialogRef=i,this.loadTemplates();let a=new Oo;a.add(i.componentInstance.nodeAddRequested.subscribe(s=>{this.nodeCreationChange.emit(s)})),a.add(i.componentInstance.templateDragStarted.subscribe(s=>{this.dragStart(s.event,s.template,s.numberOfNodes,s.computeId)})),i.afterClosed().subscribe(()=>{a.unsubscribe(),this.addNodesDialogRef=void 0})}getImageSourceForTemplate(e){return this.templateSymbolBlobUrls.get(e.symbol)||""}ngOnDestroy(){this.clearNativeDrag(),this.subscription.unsubscribe()}static \u0275fac=function(t){return new(t||n)(Mt(Do))};static \u0275cmp=V({type:n,selectors:[["app-template"]],inputs:{controller:[1,"controller"],project:[1,"project"]},outputs:{nodeCreationChange:"nodeCreationChange"},decls:7,vars:2,consts:[["matTooltip","Add a node","matTooltipClass","custom-tooltip","mat-icon-button","",1,"template__add-btn",3,"click"],[1,"template__selector-backdrop"],[3,"computes","x","y"],[1,"template__ghost-icon",3,"left","top"],[1,"template__selector-backdrop",3,"click"],[3,"computeSelected","computes","x","y"],[1,"template__ghost-icon"],[1,"template__ghost-name"],["draggable","false",1,"template__ghost-icon-img",3,"src"],[1,"template__ghost-icon-status"],[1,"template__status-icon--error"]],template:function(t,i){t&1&&(r(0,"button",0),_("click",function(){return i.openDialog()}),r(1,"mat-icon"),c(2,"add"),l()(),T(3,qIe,1,0,"div",1),T(4,QIe,1,3,"app-compute-selector",2),Q(5,XIe,5,9,"div",3,GIe)),t&2&&(m(3),E(i.showComputeSelector()?3:-1),m(),E(i.showComputeSelector()?4:-1),m(),K(i.creatingNodes().values()))},dependencies:[fe,ke,ie,ce,Y,Be,Wj],styles:[".template__add-btn[_ngcontent-%COMP%]{transition:transform var(--gns3-motion-duration-standard) ease}.template__add-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary)}.template__add-btn[_ngcontent-%COMP%]:hover{transform:scale(1.1)}.template__ghost-icon[_ngcontent-%COMP%]{position:fixed;pointer-events:none;z-index:999}.template__ghost-name[_ngcontent-%COMP%]{position:absolute;bottom:100%;left:50%;transform:translate(-50%);margin-bottom:8px;font-size:12px;font-weight:500;color:var(--mat-sys-on-surface);background:var(--mat-sys-surface);padding:4px 8px;border-radius:4px;white-space:nowrap;box-shadow:0 2px 4px var(--mat-sys-shadow);pointer-events:none}.template__ghost-icon-img[_ngcontent-%COMP%]{width:60px;height:60px;opacity:1;filter:drop-shadow(0 4px 8px var(--mat-sys-shadow))}.template__ghost-icon-img--error[_ngcontent-%COMP%]{opacity:.4;filter:grayscale(100%) drop-shadow(0 4px 8px var(--mat-sys-shadow))}.template__ghost-icon-status[_ngcontent-%COMP%]{position:absolute;top:-8px;right:-8px;background:var(--mat-sys-surface);border-radius:50%;width:28px;height:28px;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px var(--mat-sys-shadow)}.template__ghost-icon-status[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:20px;height:20px;font-size:20px}.template__ghost-icon-status[_ngcontent-%COMP%] .template__status-icon--success[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.template__ghost-icon-status[_ngcontent-%COMP%] .template__status-icon--error[_ngcontent-%COMP%]{color:var(--mat-sys-error)}.template__selector-backdrop[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:1098;cursor:default}"],changeDetection:0})}return n})();var B_=(()=>{class n{httpController;constructor(e){this.httpController=e}create(e,t,i){return this.httpController.post(e,`/projects/${t}/snapshots`,i)}delete(e,t,i){return this.httpController.delete(e,`/projects/${t}/snapshots/${i}`)}list(e,t){return this.httpController.get(e,`/projects/${t}/snapshots`)}restore(e,t,i){return this.httpController.post(e,`/projects/${t}/snapshots/${i}/restore`,{})}static \u0275fac=function(t){return new(t||n)(_e(sn))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var j_=(()=>{class n{data;dialogRef=f(We);static CANCELLED;value=z(50);constructor(e){this.data=e}onCancelClick(){this.dialogRef.close(n.CANCELLED)}static \u0275fac=function(t){return new(t||n)(Mt(Wt))};static \u0275cmp=V({type:n,selectors:[["app-progress-dialog"]],decls:7,vars:1,consts:[["mat-dialog-title",""],["mat-dialog-content",""],["color","primary","mode","determinate",3,"value"],["mat-dialog-actions",""],["mat-button","","tabindex","-1","color","accent",3,"click"]],template:function(t,i){t&1&&(r(0,"h1",0),c(1,"Operation in progress"),l(),r(2,"div",1),L(3,"mat-progress-bar",2),l(),r(4,"div",3)(5,"button",4),_("click",function(){return i.onCancelClick()}),c(6,"Cancel"),l()()),t&2&&(m(3),v("value",i.value()))},dependencies:[ke,qe,Qe,bt,Y,he,rt,Is,od],encapsulation:2,changeDetection:0})}return n})();var w2=(()=>{class n{dialog;constructor(e){this.dialog=e}open(){return this.dialog.open(j_,{width:"250px",autoFocus:!1,disableClose:!0})}static \u0275fac=function(t){return new(t||n)(_e(Xe))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var M2=class{snapshot_id;name;created_at;project_id};var S2=(()=>{class n{data;dialogRef=f(We);formBuilder=f(Ai);toasterService=f(re);snapshotService=f(B_);cd=f(oe);controller;project;snapshot=new M2;inputForm;existingSnapshotNames=[];constructor(e){this.data=e,this.controller=e.controller,this.project=e.project,this.inputForm=this.formBuilder.group({snapshotName:new Ge("",Ue.required)}),this.project?.project_id&&this.snapshotService.list(this.controller,this.project.project_id).subscribe({next:t=>{this.existingSnapshotNames=t.map(i=>i.name),this.cd.markForCheck()},error:t=>{let i=t.error?.message||t.message||"Failed to load snapshots";this.toasterService.error(i),this.cd.markForCheck()}})}onAddClick(){let e=this.inputForm.get("snapshotName").value?.trim();this.inputForm.invalid||!e?this.toasterService.error("Fill all required fields"):this.existingSnapshotNames.includes(e)?this.toasterService.error("Snapshot with this name already exists"):(this.snapshot.name=e,this.dialogRef.close(this.snapshot))}static \u0275fac=function(t){return new(t||n)(Mt(Wt))};static \u0275cmp=V({type:n,selectors:[["app-create-snapshot-dialog"]],decls:11,vars:1,consts:[["mat-dialog-title",""],["mat-dialog-content",""],[3,"formGroup"],["subscriptSizing","dynamic",1,"name-input"],["matInput","","tabindex","1","formControlName","snapshotName","placeholder","Name"],["mat-dialog-actions",""],["mat-button","","mat-dialog-close",""],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click"]],template:function(t,i){t&1&&(r(0,"h1",0),c(1,"Create snapshot"),l(),r(2,"div",1)(3,"form",2)(4,"mat-form-field",3),L(5,"input",4),l()()(),r(6,"div",5)(7,"button",6),c(8,"Cancel"),l(),r(9,"button",7),_("click",function(){return i.onAddClick()}),c(10,"Add"),l()()),t&2&&(m(3),v("formGroup",i.inputForm))},dependencies:[fe,It,Ct,At,Nt,vt,Ut,Yt,ke,tb,qe,Qe,bt,Y,he,ye,Ee,Pe,we,rt],styles:[".name-input[_ngcontent-%COMP%]{width:100%}"],changeDetection:0})}return n})();var Gj=(()=>{class n{transform(e){let t=new Date(+e*1e3),i=t.getHours(),a="0"+t.getMinutes(),s="0"+t.getSeconds(),d=t.getFullYear(),p=t.getMonth()+1,u=t.getDate();return i+":"+a.substr(-2)+":"+s.substr(-2)+" "+u+"/"+p+"/"+d}static \u0275fac=function(t){return new(t||n)};static \u0275pipe=qr({name:"datefilter",type:n,pure:!0})}return n})();function YIe(n,o){n&1&&(r(0,"mat-header-cell",24),c(1,"Name"),l())}function ZIe(n,o){if(n&1&&(r(0,"mat-cell",24),c(1),l()),n&2){let e=o.$implicit;m(),N(e.name)}}function JIe(n,o){n&1&&(r(0,"mat-header-cell",25),c(1,"Date"),l())}function e4e(n,o){if(n&1&&(r(0,"mat-cell",25),c(1),Et(2,"datefilter"),l()),n&2){let e=o.$implicit;m(),N(gn(2,1,e.created_at))}}function t4e(n,o){n&1&&(r(0,"mat-header-cell",26),c(1,"Actions"),l())}function n4e(n,o){if(n&1){let e=R();r(0,"mat-cell",26)(1,"div",27)(2,"button",28),_("click",function(){let i=y(e).$implicit,a=h();return w(a.restoreSnapshot(i))}),r(3,"mat-icon"),c(4,"restore"),l()(),r(5,"button",29),_("click",function(){let i=y(e).$implicit,a=h();return w(a.deleteSnapshot(i))}),r(6,"mat-icon"),c(7,"delete"),l()()()()}}function i4e(n,o){n&1&&L(0,"mat-header-row")}function o4e(n,o){n&1&&L(0,"mat-row")}function a4e(n,o){n&1&&(r(0,"div",21),c(1,"No snapshots available"),l())}var qj=(()=>{class n{data;dialogRef=f(We);snapshotService=f(B_);progressDialogService=f(w2);toaster=f(re);dialog=f(Xe);cd=f(oe);controller;project;snapshots=$([]);searchText=$("");displayedColumns=["name","created_at","actions"];constructor(e){this.data=e,this.controller=e.controller,this.project=e.project,this.loadSnapshots()}filteredSnapshots=Ne(()=>{let e=this.searchText().toLowerCase();return e?this.snapshots().filter(t=>t.name.toLowerCase().includes(e)):this.snapshots()});openCreateDialog(){this.dialog.open(S2,{panelClass:["base-dialog-panel","dialog-small-panel"],data:{controller:this.controller,project:this.project},autoFocus:!1}).afterClosed().subscribe(t=>{if(t){let i=this.progressDialogService.open();this.snapshotService.create(this.controller,this.project.project_id,t).subscribe({next:()=>{i.close(),this.loadSnapshots(),this.toaster.success(`Snapshot '${t.name}' has been created.`)},error:a=>{i.close();let s=a.error?.message||a.message||"Unknown error";this.toaster.error(`Failed to create snapshot: ${s}`),this.cd.markForCheck()}})}})}restoreSnapshot(e){this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-warning-panel","dialog-small-panel"],autoFocus:".cancel-button",data:{title:"Restore snapshot?",message:`Restoring "${e.name}" will replace the current topology.`,confirmButtonText:"Restore snapshot",tone:"warning",icon:"restore"}}).afterClosed().subscribe(i=>{if(!i)return;let a=this.progressDialogService.open(),s=this.snapshotService.restore(this.controller,this.project.project_id,e.snapshot_id).subscribe({next:()=>{this.toaster.success(`Snapshot "${e.name}" has been restored.`),a.close(),this.cd.markForCheck()},error:d=>{a.close();let p=d.error?.message||d.message||"Unknown error";this.toaster.error(`Failed to restore snapshot: ${p}`),this.cd.markForCheck()}});a.afterClosed().subscribe(d=>{d===j_.CANCELLED&&s.unsubscribe()})})}deleteSnapshot(e){this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-danger-panel","dialog-small-panel"],autoFocus:".cancel-button",data:{title:"Delete snapshot?",message:`Snapshot "${e.name}" will be permanently deleted.`,note:"This action cannot be undone.",confirmButtonText:"Delete snapshot",tone:"danger"}}).afterClosed().subscribe(i=>{i&&this.snapshotService.delete(this.controller,this.project.project_id,e.snapshot_id).subscribe({next:()=>{this.loadSnapshots(),this.toaster.success(`Snapshot "${e.name}" has been deleted.`),this.cd.markForCheck()},error:a=>{let s=a.error?.message||a.message||"Unknown error";this.toaster.error(`Failed to delete snapshot: ${s}`),this.cd.markForCheck()}})})}loadSnapshots(){this.snapshotService.list(this.controller,this.project.project_id).subscribe({next:e=>{this.snapshots.set(e),this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Unknown error";this.toaster.error(`Failed to load snapshots: ${t}`),this.cd.markForCheck()}})}static \u0275fac=function(t){return new(t||n)(Mt(Wt))};static \u0275cmp=V({type:n,selectors:[["app-snapshot-dialog"]],inputs:{snapshots:[1,"snapshots"],searchText:[1,"searchText"]},outputs:{snapshots:"snapshotsChange",searchText:"searchTextChange"},decls:30,vars:5,consts:[["mat-dialog-title",""],["mat-dialog-content",""],[1,"snapshot-dialog__toolbar"],["appearance","fill","subscriptSizing","dynamic",1,"snapshot-dialog__search"],["matPrefix",""],["matInput","","aria-label","Filter snapshots","placeholder","Filter snapshots",3,"input","value"],[1,"snapshot-dialog__toolbar-actions"],["mat-raised-button","","color","primary","matTooltip","Create snapshot","matTooltipClass","custom-tooltip",1,"snapshot-dialog__create-button",3,"click"],[1,"snapshot-dialog__table-container"],[1,"snapshot-dialog__table",3,"dataSource"],["matColumnDef","name"],["class","snapshot-dialog__column-name",4,"matHeaderCellDef"],["class","snapshot-dialog__column-name",4,"matCellDef"],["matColumnDef","created_at"],["class","snapshot-dialog__column-date",4,"matHeaderCellDef"],["class","snapshot-dialog__column-date",4,"matCellDef"],["matColumnDef","actions"],["class","snapshot-dialog__column-actions",4,"matHeaderCellDef"],["class","snapshot-dialog__column-actions",4,"matCellDef"],[4,"matHeaderRowDef"],[4,"matRowDef","matRowDefColumns"],[1,"snapshot-dialog__empty"],["mat-dialog-actions",""],["mat-button","","mat-dialog-close",""],[1,"snapshot-dialog__column-name"],[1,"snapshot-dialog__column-date"],[1,"snapshot-dialog__column-actions"],[1,"snapshot-dialog__actions"],["mat-icon-button","","matTooltip","Restore snapshot","matTooltipClass","custom-tooltip",3,"click"],["mat-icon-button","","matTooltip","Delete snapshot","matTooltipClass","custom-tooltip",1,"destructive-icon-button",3,"click"]],template:function(t,i){t&1&&(r(0,"h1",0),c(1,"Snapshots"),l(),r(2,"div",1)(3,"div",2)(4,"mat-form-field",3)(5,"mat-icon",4),c(6,"search"),l(),r(7,"input",5),_("input",function(s){return i.searchText.set(s.target.value)}),l()(),r(8,"div",6)(9,"button",7),_("click",function(){return i.openCreateDialog()}),r(10,"mat-icon"),c(11,"add"),l(),c(12," Create snapshot "),l()()(),r(13,"div",8)(14,"mat-table",9),Fe(15,10),se(16,YIe,2,0,"mat-header-cell",11)(17,ZIe,2,1,"mat-cell",12),Re(),Fe(18,13),se(19,JIe,2,0,"mat-header-cell",14)(20,e4e,3,3,"mat-cell",15),Re(),Fe(21,16),se(22,t4e,2,0,"mat-header-cell",17)(23,n4e,8,0,"mat-cell",18),Re(),se(24,i4e,1,0,"mat-header-row",19)(25,o4e,1,0,"mat-row",20),l(),T(26,a4e,2,0,"div",21),l()(),r(27,"div",22)(28,"button",23),c(29,"Close"),l()()),t&2&&(m(7),v("value",i.searchText()),m(7),v("dataSource",i.filteredSnapshots()),m(10),v("matHeaderRowDef",i.displayedColumns),m(),v("matRowDefColumns",i.displayedColumns),m(),E(i.snapshots().length===0?26:-1))},dependencies:[fe,ke,tb,qe,Qe,bt,Y,he,Be,ie,ce,st,pt,we,Pe,Bi,ye,Ee,_n,bn,yn,kn,wn,xn,Pn,Mn,Sn,Tn,En,Gj],styles:[".snapshot-dialog__toolbar[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--gns3-density-card-gap);container:search-toolbar/inline-size}.snapshot-dialog__toolbar[_ngcontent-%COMP%] .snapshot-dialog__search[_ngcontent-%COMP%]{flex:1 1 260px;min-width:0;max-width:none;margin:0}.snapshot-dialog__toolbar[_ngcontent-%COMP%] .snapshot-dialog__toolbar-actions[_ngcontent-%COMP%]{display:flex;flex:0 1 auto;flex-wrap:wrap;align-items:center;gap:var(--gns3-density-space-3);min-width:0}@container search-toolbar (max-width: 640px){.snapshot-dialog__toolbar[_ngcontent-%COMP%] .snapshot-dialog__search[_ngcontent-%COMP%]{flex-basis:100%;width:100%}.snapshot-dialog__toolbar[_ngcontent-%COMP%] .snapshot-dialog__toolbar-actions[_ngcontent-%COMP%]{width:100%}}.snapshot-dialog__toolbar[_ngcontent-%COMP%]{margin-bottom:var(--gns3-density-card-gap)}.snapshot-dialog__search[_ngcontent-%COMP%] .mat-mdc-form-icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant)}.snapshot-dialog__create-button[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing);white-space:nowrap}.snapshot-dialog__table-container[_ngcontent-%COMP%]{max-height:400px;overflow:auto;border-radius:12px;background:var(--mat-sys-surface-container-low)}.snapshot-dialog__table[_ngcontent-%COMP%]{width:100%;min-width:calc(340px + 2 * var(--gns3-density-icon-button) + var(--gns3-action-gap) + 2 * var(--gns3-density-space-4))}.snapshot-dialog__actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:var(--gns3-action-gap)}.snapshot-dialog__actions[_ngcontent-%COMP%] button[mat-icon-button][_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-icon-button)}.snapshot-dialog__actions[_ngcontent-%COMP%] button[mat-icon-button][_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}.snapshot-dialog__empty[_ngcontent-%COMP%]{padding:32px;text-align:center;color:var(--mat-sys-on-surface-variant)}mat-header-cell.snapshot-dialog__column-name[_ngcontent-%COMP%], mat-cell.snapshot-dialog__column-name[_ngcontent-%COMP%]{flex:2;min-width:200px}mat-header-cell.snapshot-dialog__column-date[_ngcontent-%COMP%], mat-cell.snapshot-dialog__column-date[_ngcontent-%COMP%]{flex:1;min-width:140px}mat-header-cell.snapshot-dialog__column-actions[_ngcontent-%COMP%], mat-cell.snapshot-dialog__column-actions[_ngcontent-%COMP%]{flex:0 0 calc(2 * var(--gns3-density-icon-button) + (2 - 1) * var(--gns3-action-gap) + 2 * var(--gns3-density-space-4));min-width:calc(2 * var(--gns3-density-icon-button) + (2 - 1) * var(--gns3-action-gap) + 2 * var(--gns3-density-space-4));box-sizing:border-box;padding-inline:var(--gns3-density-space-4);justify-content:flex-end}"],changeDetection:0})}return n})();var k2=(()=>{class n{project=ee(void 0);controller=ee(void 0);dialog=f(Xe);openSnapshotDialog(){let e=this.project(),t=this.controller();!e||!t||this.dialog.open(qj,{panelClass:["base-dialog-panel","dialog-large-panel"],data:{controller:t,project:e},autoFocus:!1})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-snapshot-menu-item"]],inputs:{project:[1,"project"],controller:[1,"controller"]},decls:3,vars:0,consts:[["matTooltip","Manage snapshots","matTooltipClass","custom-tooltip","matTooltipPosition","left","mat-icon-button","",1,"snapshot-button","menu-button",3,"click"]],template:function(t,i){t&1&&(r(0,"button",0),_("click",function(){return i.openSnapshotDialog()}),r(1,"mat-icon"),c(2,"filter_none"),l()())},dependencies:[fe,ke,st,pt,ie,ce,Y,Be],styles:[".snapshot-button[_ngcontent-%COMP%]{transition:transform var(--gns3-motion-duration-standard) ease}.snapshot-button[_ngcontent-%COMP%]:hover{transform:scale(1.3)}"],changeDetection:0})}return n})();var Qj=(()=>{class n{controller=ee(void 0);project=ee(void 0);drawingDragged;drawingService=f(Wi);drawingsDataSource=f(Ui);drawingsEventSource=f(ia);mapChangeDetectorRef=f(Wl);toasterService=f(re);cdr=f(oe);ngOnInit(){this.drawingDragged=this.drawingsEventSource.dragged.subscribe(e=>this.onDrawingDragged(e))}onDrawingDragged(e){let t=this.drawingsDataSource.get(e.datum.id);t.x+=e.dx,t.y+=e.dy,this.drawingService.updatePosition(this.controller(),this.project(),t,t.x,t.y).subscribe({next:i=>{this.drawingsDataSource.update(i),this.mapChangeDetectorRef.detectChanges()},error:i=>{let a=i.error?.message||i.message||"Failed to update drawing position";this.toasterService.error(a),this.cdr.markForCheck()}})}ngOnDestroy(){this.drawingDragged.unsubscribe()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-drawing-dragged"]],inputs:{controller:[1,"controller"],project:[1,"project"]},decls:0,vars:0,template:function(t,i){},encapsulation:2,changeDetection:0})}return n})();var Kj=(()=>{class n{controller=ee(void 0);drawingResized;drawingService=f(Wi);drawingsDataSource=f(Ui);drawingsEventSource=f(ia);mapDrawingToSvgConverter=f(js);toasterService=f(re);cdr=f(oe);ngOnInit(){this.drawingResized=this.drawingsEventSource.resized.subscribe(e=>this.onDrawingResized(e))}onDrawingResized(e){let t=this.drawingsDataSource.get(e.datum.id);if(e.rotation!==void 0){t.rotation=e.rotation;let a=this.mapDrawingToSvgConverter.convert(e.datum);t.svg=a,this.drawingService.update(this.controller(),t).subscribe({next:s=>{this.drawingsDataSource.update(s)},error:s=>{let d=s.error?.message||s.message||"Failed to update drawing rotation";this.toasterService.error(d),this.cdr.markForCheck()}})}else{let a=this.mapDrawingToSvgConverter.convert(e.datum);this.drawingService.updateSizeAndPosition(this.controller(),t,e.x,e.y,a).subscribe({next:s=>{this.drawingsDataSource.update(s)},error:s=>{let d=s.error?.message||s.message||"Failed to update drawing size";this.toasterService.error(d),this.cdr.markForCheck()}})}}ngOnDestroy(){this.drawingResized.unsubscribe()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-drawing-resized"]],inputs:{controller:[1,"controller"]},decls:0,vars:0,template:function(t,i){},encapsulation:2,changeDetection:0})}return n})();var Xj=(()=>{class n{controller=ee(void 0);interfaceDragged;linkService=f(Ri);linksDataSource=f(so);linksEventSource=f(Wr);toasterService=f(re);cdr=f(oe);ngOnInit(){this.interfaceDragged=this.linksEventSource.interfaceDragged.subscribe(e=>this.onInterfaceLabelDragged(e))}onInterfaceLabelDragged(e){let t=this.linksDataSource.get(e.datum.linkId);t.nodes[0].node_id===e.datum.nodeId&&(t.nodes[0].label.x+=e.dx,t.nodes[0].label.y+=e.dy),t.nodes[1].node_id===e.datum.nodeId&&(t.nodes[1].label.x+=e.dx,t.nodes[1].label.y+=e.dy),this.linkService.updateNodes(this.controller(),t,t.nodes).subscribe({next:i=>{this.linksDataSource.update(i)},error:i=>{let a=i.error?.message||i.message||"Failed to update interface label position";this.toasterService.error(a),this.cdr.markForCheck()}})}ngOnDestroy(){this.interfaceDragged.unsubscribe()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-interface-label-dragged"]],inputs:{controller:[1,"controller"]},decls:0,vars:0,template:function(t,i){},encapsulation:2,changeDetection:0})}return n})();var Yj=(()=>{class n{controller=ee(void 0);project;linkCreated;projectService=f(Ti);linkService=f(Ri);linksDataSource=f(so);linksEventSource=f(Wr);mapNodeToNode=f(Mp);mapPortToPort=f(g_);toasterService=f(re);cdr=f(oe);ngOnInit(){this.linkCreated=this.linksEventSource.created.subscribe(e=>this.onLinkCreated(e))}onLinkCreated(e){let t=Math.abs(e.sourceNode.x-e.targetNode.x),i=Math.abs(e.sourceNode.y-e.targetNode.y),a=Math.sqrt(Math.pow(t,2)+Math.pow(i,2)),s=i/a,d=45/a*t,p=45/a*i,u=0,g=0,C=0,M=0;e.sourceNode.x<=e.targetNode.x&&e.sourceNode.y<=e.targetNode.y?(u=Math.floor(e.sourceNode.width/2)+Math.round(d)+5,g=Math.floor(e.sourceNode.height/2)+Math.round(p)+5,C=Math.floor(e.targetNode.width/2)-Math.round(d)-5-Math.round(20*s),M=Math.floor(e.targetNode.height/2)-Math.round(p)+5-Math.round(20*s)):e.sourceNode.x>e.targetNode.x&&e.sourceNode.y<e.targetNode.y?(u=Math.floor(e.sourceNode.width/2)-Math.round(d)-5-Math.round(20*s),g=Math.floor(e.sourceNode.height/2)+Math.round(p)+5-Math.round(20*s),C=Math.floor(e.targetNode.width/2)+Math.round(d)+5,M=Math.floor(e.targetNode.height/2)-Math.round(p)-5):e.sourceNode.x<e.targetNode.x&&e.sourceNode.y>e.targetNode.y?(u=Math.floor(e.sourceNode.width/2)+Math.round(d)+5-Math.round(20*s),g=Math.floor(e.sourceNode.height/2)-Math.round(p)-5-Math.round(20*s),C=Math.floor(e.targetNode.width/2)-Math.round(d)-5,M=Math.floor(e.targetNode.height/2)+Math.round(p)+5):e.sourceNode.x>=e.targetNode.x&&e.sourceNode.y>=e.targetNode.y&&(u=Math.floor(e.sourceNode.width/2)-Math.round(d)-5-Math.round(20*s),g=Math.floor(e.sourceNode.height/2)-Math.round(p)+5-Math.round(20*s),C=Math.floor(e.targetNode.width/2)+Math.round(d)+5,M=Math.floor(e.targetNode.height/2)+Math.round(p)+5);let x=this.mapNodeToNode.convert(e.sourceNode),b=this.mapPortToPort.convert(e.sourcePort),P=this.mapNodeToNode.convert(e.targetNode),k=this.mapPortToPort.convert(e.targetPort);this.linkService.createLink(this.controller(),x,b,P,k,u,g,C,M).subscribe({next:()=>{this.toasterService.success("Link created."),this.projectService.links(this.controller(),this.project.project_id).subscribe(S=>{this.linksDataSource.set(S)})},error:S=>{let O=S.error?.message||S.message||"Failed to create link";this.toasterService.error(O),this.cdr.markForCheck()}})}ngOnDestroy(){this.linkCreated.unsubscribe()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-link-created"]],inputs:{controller:[1,"controller"],project:"project"},decls:0,vars:0,template:function(t,i){},encapsulation:2,changeDetection:0})}return n})();var Zj=(()=>{class n{controller=ee(void 0);project=ee(void 0);nodeDragged;nodesDataSource=f(Xn);nodeService=f(ft);nodesEventSource=f(ql);mapChangeDetectorRef=f(Wl);toasterService=f(re);cdr=f(oe);ngOnInit(){this.nodeDragged=this.nodesEventSource.dragged.subscribe(e=>this.onNodeDragged(e))}onNodeDragged(e){let t=this.nodesDataSource.get(e.datum.id);t.x+=e.dx,t.y+=e.dy,this.nodeService.updatePosition(this.controller(),this.project(),t,t.x,t.y).subscribe({next:i=>{this.nodesDataSource.update(i),this.mapChangeDetectorRef.detectChanges()},error:i=>{let a=i.error?.message||i.message||"Failed to update node position";this.toasterService.error(a),this.cdr.markForCheck()}})}ngOnDestroy(){this.nodeDragged.unsubscribe()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-node-dragged"]],inputs:{controller:[1,"controller"],project:[1,"project"]},decls:0,vars:0,template:function(t,i){},encapsulation:2,changeDetection:0})}return n})();var Jj=(()=>{class n{controller=ee(void 0);nodeLabelDragged;nodesDataSource=f(Xn);nodeService=f(ft);nodesEventSource=f(ql);mapLabelToLabel=f(xd);toasterService=f(re);cdr=f(oe);ngOnInit(){this.nodeLabelDragged=this.nodesEventSource.labelDragged.subscribe(e=>this.onNodeLabelDragged(e))}onNodeLabelDragged(e){let t=this.nodesDataSource.get(e.datum.nodeId),i=e.datum,a=this.mapLabelToLabel.convert(i);t.label=a,this.nodeService.updateLabel(this.controller(),t,t.label).subscribe({next:s=>{this.nodesDataSource.update(s)},error:s=>{let d=s.error?.message||s.message||"Failed to update node label position";this.toasterService.error(d),this.cdr.markForCheck()}})}ngOnDestroy(){this.nodeLabelDragged.unsubscribe()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-node-label-dragged"]],inputs:{controller:[1,"controller"]},decls:0,vars:0,template:function(t,i){},encapsulation:2,changeDetection:0})}return n})();var e$=(()=>{class n{controller=ee(void 0);project;drawingSaved=new be;textAdded;drawingService=f(Wi);drawingsDataSource=f(Ui);drawingsEventSource=f(ia);drawingsFactory=f(O_);mapDrawingToSvgConverter=f(js);context=f(zo);toasterService=f(re);cdr=f(oe);ngOnInit(){this.textAdded=this.drawingsEventSource.textAdded.subscribe(e=>this.onTextAdded(e))}onTextAdded(e){let t=this.drawingsFactory.getDrawingMock("text");t.element.text=e.savedText;let i=this.mapDrawingToSvgConverter.convert(t);this.drawingService.add(this.controller(),this.project.project_id,e.x,e.y,i).subscribe({next:a=>{this.drawingsDataSource.add(a),this.drawingSaved.emit(!0),this.toasterService.success("Text note created.")},error:a=>{let s=a.error?.message||a.message||"Failed to create text drawing";this.toasterService.error(s),this.cdr.markForCheck()}})}ngOnDestroy(){this.textAdded.unsubscribe()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-text-added"]],inputs:{controller:[1,"controller"],project:"project"},outputs:{drawingSaved:"drawingSaved"},decls:0,vars:0,template:function(t,i){},encapsulation:2,changeDetection:0})}return n})();var P2=(()=>{class n{httpController;constructor(e){this.httpController=e}list(e,t,i){return this.httpController.get(e,`/projects/${t}/links/${i}/markers`)}create(e,t,i,a){return this.httpController.post(e,`/projects/${t}/links/${i}/markers`,a)}update(e,t,i,a,s){return this.httpController.put(e,`/projects/${t}/links/${i}/markers/${encodeURIComponent(a)}`,s)}delete(e,t,i,a){return this.httpController.delete(e,`/projects/${t}/links/${i}/markers/${encodeURIComponent(a)}`)}setEnabled(e,t,i,a,s){return this.httpController.put(e,`/projects/${t}/links/${i}/markers/${encodeURIComponent(a)}`,{enabled:s})}listDefinitions(e,t){return this.httpController.get(e,`/projects/${t}/marker-definitions`)}createDefinition(e,t,i){return this.httpController.post(e,`/projects/${t}/marker-definitions`,i)}updateDefinition(e,t,i,a){return this.httpController.put(e,`/projects/${t}/marker-definitions/${encodeURIComponent(i)}`,a)}deleteDefinition(e,t,i){return this.httpController.delete(e,`/projects/${t}/marker-definitions/${encodeURIComponent(i)}`)}pauseDefinition(e,t,i){return this.httpController.post(e,`/projects/${t}/marker-definitions/${encodeURIComponent(i)}/pause`,{})}resumeDefinition(e,t,i){return this.httpController.post(e,`/projects/${t}/marker-definitions/${encodeURIComponent(i)}/resume`,{})}aggregateList(e,t){return this.httpController.get(e,`/projects/${t}/markers`)}static \u0275fac=function(t){return new(t||n)(_e(sn))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var r4e=(n,o)=>o.id,s4e=(n,o)=>o.value;function l4e(n,o){n&1&&(r(0,"mat-error"),c(1,"BPF is required"),l())}function c4e(n,o){n&1&&(r(0,"mat-error"),c(1,"Name is required"),l())}function d4e(n,o){n&1&&(r(0,"mat-error"),c(1,'Name cannot start with "global"'),l())}function m4e(n,o){if(n&1&&(r(0,"mat-option",8),c(1),l()),n&2){let e=o.$implicit;v("value",e.id),m(),N(e.name)}}function p4e(n,o){if(n&1&&(r(0,"mat-option",8),c(1),l()),n&2){let e=o.$implicit;v("value",e.value),m(),N(e.label)}}function u4e(n,o){if(n&1&&(r(0,"mat-form-field",3)(1,"mat-label"),c(2,"Serial encapsulation"),l(),r(3,"mat-select",20),Q(4,p4e,2,2,"mat-option",8,s4e),l()()),n&2){let e=h();m(4),K(e.dataLinkOptions())}}function g4e(n,o){n&1&&(r(0,"mat-error"),c(1,"Required"),l())}function h4e(n,o){n&1&&(r(0,"mat-error"),c(1,"Must be \u2265 1"),l())}function _4e(n,o){if(n&1&&(L(0,"mat-spinner",21),c(1)),n&2){let e=h();v("diameter",16),m(),X(" ",e.mode()==="edit"?"Saving\u2026":"Adding\u2026"," ")}}function f4e(n,o){if(n&1&&c(0),n&2){let e=h();X(" ",e.submitLabel()," ")}}var $_="auto",t$=(()=>{class n{form=ee.required();mode=ee("create");captureOptions=ee([]);dataLinkOptions=ee([]);linkType=ee("ethernet");isSerial=Ne(()=>this.linkType()==="serial");submitLabel=Ne(()=>this.mode()==="edit"?"Save":"Add");submitting=ee(!1);captureAuto=$_;save=$o();cancel=$o();static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-marker-form"]],inputs:{form:[1,"form"],mode:[1,"mode"],captureOptions:[1,"captureOptions"],dataLinkOptions:[1,"dataLinkOptions"],linkType:[1,"linkType"],submitting:[1,"submitting"]},outputs:{save:"save",cancel:"cancel"},decls:55,vars:11,consts:[[1,"marker-form",3,"ngSubmit","formGroup"],[3,"expressionChange","expression"],[1,"marker-form__row","marker-form__row--full"],[1,"marker-form__field"],["matInput","","formControlName","bpf","placeholder","tcp port 80","rows","1","cdkTextareaAutosize","","cdkAutosizeMinRows","1","cdkAutosizeMaxRows","4"],[1,"marker-form__row","marker-form__row--identity"],["matInput","","formControlName","name","placeholder","my-filter"],["formControlName","capture_node_id"],[3,"value"],["formControlName","direction"],["value","both"],["value","tx"],["value","rx"],[1,"marker-form__row","marker-form__row--style"],["matInput","","type","number","formControlName","highlight_duration","placeholder","500"],["matInput","","type","color","formControlName","color",1,"marker-form__color"],["matInput","","type","number","formControlName","tag","placeholder","\u2014"],[1,"marker-form__actions"],["mat-flat-button","","color","primary","type","submit",3,"disabled"],["mat-stroked-button","","type","button",3,"click"],["formControlName","data_link_type","matTooltip","WAN encapsulation (matches the router's IOS setting)"],[1,"marker-form__submit-spinner",3,"diameter"]],template:function(t,i){if(t&1&&(r(0,"form",0),_("ngSubmit",function(){return i.save.emit()}),r(1,"app-bpf-presets",1),_("expressionChange",function(s){let d;return(d=i.form().get("bpf"))==null?null:d.setValue(s)}),l(),r(2,"div",2)(3,"mat-form-field",3)(4,"mat-label"),c(5,"BPF expression"),l(),L(6,"textarea",4),T(7,l4e,2,0,"mat-error"),l()(),r(8,"div",5)(9,"mat-form-field",3)(10,"mat-label"),c(11,"Name"),l(),L(12,"input",6),T(13,c4e,2,0,"mat-error"),T(14,d4e,2,0,"mat-error"),l(),r(15,"mat-form-field",3)(16,"mat-label"),c(17,"Capture node"),l(),r(18,"mat-select",7)(19,"mat-option",8),c(20,"Auto"),l(),Q(21,m4e,2,2,"mat-option",8,r4e),l()(),r(23,"mat-form-field",3)(24,"mat-label"),c(25,"Direction"),l(),r(26,"mat-select",9)(27,"mat-option",10),c(28,"Both"),l(),r(29,"mat-option",11),c(30,"Tx"),l(),r(31,"mat-option",12),c(32,"Rx"),l()()(),T(33,u4e,6,0,"mat-form-field",3),l(),r(34,"div",13)(35,"mat-form-field",3)(36,"mat-label"),c(37,"Highlight ms"),l(),L(38,"input",14),T(39,g4e,2,0,"mat-error"),T(40,h4e,2,0,"mat-error"),l(),r(41,"mat-form-field",3)(42,"mat-label"),c(43,"Color"),l(),L(44,"input",15),l(),r(45,"mat-form-field",3)(46,"mat-label"),c(47,"Tag"),l(),L(48,"input",16),l(),r(49,"div",17)(50,"button",18),T(51,_4e,2,2)(52,f4e,1,1),l(),r(53,"button",19),_("click",function(){return i.cancel.emit()}),c(54,"Cancel"),l()()()()),t&2){let a,s,d,p,u,g;v("formGroup",i.form()),m(),v("expression",((a=i.form().get("bpf"))==null?null:a.value)||""),m(6),E((s=i.form().get("bpf"))!=null&&s.hasError("required")?7:-1),m(6),E((d=i.form().get("name"))!=null&&d.hasError("required")?13:-1),m(),E((p=i.form().get("name"))!=null&&p.hasError("notGlobalName")?14:-1),m(5),v("value",i.captureAuto),m(2),K(i.captureOptions()),m(12),E(i.isSerial()?33:-1),m(6),E((u=i.form().get("highlight_duration"))!=null&&u.hasError("required")?39:-1),m(),E((g=i.form().get("highlight_duration"))!=null&&g.hasError("min")?40:-1),m(10),v("disabled",i.form().invalid||i.submitting()),m(),E(i.submitting()?51:52)}},dependencies:[fe,k_,It,Ct,At,No,Nt,vt,Ut,Yt,we,Pe,Ve,Wn,ye,Ee,Xc,ot,ct,nt,Y,he,st,pt,rt,mt,P_],styles:[".marker-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px;margin:8px 0 4px;padding:8px;background:var(--mat-sys-surface-container);border-radius:6px}.marker-form__row[_ngcontent-%COMP%]{display:grid;align-items:start;gap:16px}.marker-form__row--full[_ngcontent-%COMP%]{grid-template-columns:1fr}.marker-form__row--identity[_ngcontent-%COMP%]{grid-template-columns:2.5fr 1.5fr .9fr}.marker-form__row--style[_ngcontent-%COMP%]{grid-template-columns:minmax(7rem,1.3fr) minmax(6rem,1fr) minmax(6rem,1fr) 1fr}.marker-form__field[_ngcontent-%COMP%]{width:100%;margin-bottom:4px}.marker-form__color[_ngcontent-%COMP%]{cursor:pointer;block-size:20px;inline-size:100%;box-sizing:border-box}.marker-form__actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:8px;align-self:start;margin-top:18px}.marker-form__submit-spinner[_ngcontent-%COMP%]{--mdc-circular-progress-active-indicator-color: var(--mat-sys-on-primary)}"],changeDetection:0})}return n})();function Ku(n,o,e,t=!1){let a=o.get(n)?.nodes;if(!a||a.length<2)return n.slice(0,8);let s=e.get(a[0].node_id),d=e.get(a[1].node_id);if(!s||!d)return n.slice(0,8);if(!t)return`${s.name} \u2192 ${d.name}`;let p=a[0].label?.text??"",u=a[1].label?.text??"";return`${s.name} ${p} \u2192 ${d.name} ${u}`.replace(/\s+/g," ").trim()}var v4e=["windowWrapper"],C4e=()=>({top:!0}),b4e=()=>({right:!0}),x4e=()=>({bottom:!0}),y4e=()=>({left:!0}),w4e=()=>({top:!0,left:!0}),M4e=()=>({top:!0,right:!0}),S4e=()=>({bottom:!0,left:!0}),k4e=()=>({bottom:!0,right:!0}),i$=(n,o)=>({$implicit:n,off:o}),o$=(n,o)=>({$implicit:n,linkId:o}),P4e=(n,o)=>o.value,F4=(n,o)=>o.name,n$=(n,o)=>o.id,T4e=(n,o)=>o.linkId,E4e=(n,o)=>o.tag,O4e=(n,o)=>o.link_id+"/"+o.name;function D4e(n,o){n&1&&L(0,"div",20)(1,"div",21)(2,"div",22)(3,"div",23)(4,"div",24)(5,"div",25)(6,"div",26)(7,"div",27),n&2&&(v("resizeEdges",at(8,C4e)),m(),v("resizeEdges",at(9,b4e)),m(),v("resizeEdges",at(10,x4e)),m(),v("resizeEdges",at(11,y4e)),m(),v("resizeEdges",at(12,w4e)),m(),v("resizeEdges",at(13,M4e)),m(),v("resizeEdges",at(14,S4e)),m(),v("resizeEdges",at(15,k4e)))}function I4e(n,o){n&1&&(r(0,"mat-error"),c(1,"BPF is required"),l())}function A4e(n,o){n&1&&(r(0,"mat-error"),c(1,"Name is required"),l())}function N4e(n,o){n&1&&(r(0,"mat-error"),c(1,'Name cannot start with "global"'),l())}function F4e(n,o){if(n&1&&(r(0,"mat-option",40),c(1),l()),n&2){let e=o.$implicit;v("value",e.value),m(),N(e.label)}}function R4e(n,o){n&1&&(r(0,"mat-error"),c(1,"Required"),l())}function z4e(n,o){n&1&&(r(0,"mat-error"),c(1,"Must be \u2265 1"),l())}function L4e(n,o){if(n&1&&(L(0,"mat-spinner",50),c(1)),n&2){let e=h(2);v("diameter",18),m(),X(" ",e.editingDefinition()?"Saving\u2026":"Creating\u2026"," ")}}function V4e(n,o){if(n&1&&c(0),n&2){let e=h(2);X(" ",e.editingDefinition()?"Save":"Create"," ")}}function B4e(n,o){if(n&1){let e=R();r(0,"button",51),_("click",function(){y(e);let i=h(2);return w(i.cancelEditDefinition())}),c(1,"Cancel"),l()}}function j4e(n,o){if(n&1&&(r(0,"div",46),c(1),l()),n&2){let e=h(2);m(),N(e.defError())}}function $4e(n,o){n&1&&(r(0,"div",48),c(1,"Loading\u2026"),l())}function H4e(n,o){n&1&&(r(0,"div",48),c(1," No definitions. Create one above \u2014 it applies to all capable links. "),l())}function U4e(n,o){if(n&1&&(r(0,"span",56),c(1),l()),n&2){let e=h().$implicit;m(),X("#",e.tag)}}function W4e(n,o){if(n&1&&(r(0,"span",57),c(1),l()),n&2){let e=h().$implicit;m(),X("",e.highlight_duration,"ms")}}function G4e(n,o){if(n&1&&(r(0,"span",58),c(1),l()),n&2){let e=h().$implicit;m(),N(e.direction)}}function q4e(n,o){n&1&&L(0,"mat-spinner",65),n&2&&v("diameter",18)}function Q4e(n,o){n&1&&(r(0,"mat-icon"),c(1,"delete"),l())}function K4e(n,o){if(n&1){let e=R();r(0,"div",52),L(1,"span",53),r(2,"span",54),c(3),l(),r(4,"span",55),c(5),l(),T(6,U4e,2,1,"span",56),T(7,W4e,2,1,"span",57),T(8,G4e,2,1,"span",58),r(9,"span",59),c(10),l(),L(11,"span",60),r(12,"button",61),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.toggleDefinitionPaused(i))}),li(13,62),l(),r(14,"button",63),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.startEditDefinition(i))}),r(15,"mat-icon"),c(16,"edit"),l()(),r(17,"button",64),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.deleteDefinition(i))}),T(18,q4e,1,1,"mat-spinner",65)(19,Q4e,2,0,"mat-icon"),l()()}if(n&2){let e=o.$implicit,t=h(2),i=Te(26);ne("marker-manager__row--editing",t.editingDefinition()===e.name)("marker-manager__row--paused",e.paused),m(),Tt("background",e.color),ne("marker-manager__swatch--default",!e.color),v("title",e.color||"default color"),m(2),X("global-",e.name),m(2),N(e.bpf),m(),E(e.tag!==null?6:-1),m(),E(e.highlight_duration!==null?7:-1),m(),E(e.direction?8:-1),m(2),Un(" \u2192 ",e.linkCount," link",e.linkCount===1?"":"s"," "),m(2),v("matTooltip",e.paused?"Resume rule (all copies)":"Pause rule (disables all copies)"),m(),v("ngTemplateOutlet",i)("ngTemplateOutletContext",Go(20,i$,t.isTogglingDefinition(e.name),e.paused)),m(5),E(t.isDeletingDefinition(e.name)?18:19)}}function X4e(n,o){if(n&1){let e=R();r(0,"div",16)(1,"form",28),_("ngSubmit",function(){y(e);let i=h();return w(i.submitDefinition())}),r(2,"div",29),c(3),l(),r(4,"app-bpf-presets",30),_("expressionChange",function(i){let a;y(e);let s=h();return w((a=s.definitionForm.get("bpf"))==null?null:a.setValue(i))}),l(),r(5,"div",31)(6,"mat-form-field",32)(7,"mat-label"),c(8,"BPF expression"),l(),L(9,"textarea",33),T(10,I4e,2,0,"mat-error"),l()(),r(11,"div",34)(12,"mat-form-field",35)(13,"mat-label"),c(14,"Name"),l(),r(15,"span",36),c(16,"global-\xA0"),l(),L(17,"input",37),T(18,A4e,2,0,"mat-error"),T(19,N4e,2,0,"mat-error"),l(),r(20,"mat-form-field",32)(21,"mat-label"),c(22,"Tag"),l(),L(23,"input",38),l(),r(24,"mat-form-field",32)(25,"mat-label"),c(26,"Serial encapsulation"),l(),r(27,"mat-select",39),Q(28,F4e,2,2,"mat-option",40,P4e),l()(),r(30,"mat-form-field",32)(31,"mat-label"),c(32,"Highlight ms"),l(),L(33,"input",41),T(34,R4e,2,0,"mat-error"),T(35,z4e,2,0,"mat-error"),l(),r(36,"mat-form-field",32)(37,"mat-label"),c(38,"Color"),l(),L(39,"input",42),l(),r(40,"div",43)(41,"button",44),T(42,L4e,2,2)(43,V4e,1,1),l(),T(44,B4e,2,0,"button",45),l()()(),L(45,"mat-divider"),T(46,j4e,2,1,"div",46),r(47,"div",47),T(48,$4e,2,0,"div",48),T(49,H4e,2,0,"div",48),Q(50,K4e,20,23,"div",49,F4),l()()}if(n&2){let e,t,i,a,s,d,p=h();m(),v("formGroup",p.definitionForm),m(2),X(" ",p.editingDefinition()?"Edit definition":"New definition"," "),m(),v("expression",((e=p.definitionForm.get("bpf"))==null?null:e.value)||""),m(6),E((t=p.definitionForm.get("bpf"))!=null&&t.hasError("required")?10:-1),m(8),E((i=p.definitionForm.get("name"))!=null&&i.hasError("required")?18:-1),m(),E((a=p.definitionForm.get("name"))!=null&&a.hasError("notGlobalName")?19:-1),m(9),K(p.serialDataLinkTypes),m(6),E((s=p.definitionForm.get("highlight_duration"))!=null&&s.hasError("required")?34:-1),m(),E((d=p.definitionForm.get("highlight_duration"))!=null&&d.hasError("min")?35:-1),m(6),v("disabled",p.definitionForm.invalid||p.submittingDefinition()),m(),E(p.submittingDefinition()?42:43),m(2),E(p.editingDefinition()?44:-1),m(2),E(p.defError()?46:-1),m(2),E(p.loading()?48:-1),m(),E(!p.loading()&&p.definitions().length===0?49:-1),m(),K(p.definitions())}}function Y4e(n,o){n&1&&(r(0,"div",46),c(1),l()),n&2&&(m(),N(o))}function Z4e(n,o){if(n&1&&(r(0,"mat-option",40),c(1),l()),n&2){let e=o.$implicit;v("value",e.id),m(),N(e.name)}}function J4e(n,o){if(n&1&&(r(0,"mat-option",40),c(1),l()),n&2){let e=o.$implicit;v("value",e.id),m(),N(e.name)}}function eAe(n,o){n&1&&(r(0,"div",46),c(1),l()),n&2&&(m(),N(o))}function tAe(n,o){n&1&&(r(0,"div",76)(1,"mat-icon"),c(2,"info"),l(),c(3," Definitions are active \u2014 inherited markers on this link are managed via the Definitions tab. "),l())}function nAe(n,o){if(n&1){let e=R();r(0,"app-marker-form",78),_("save",function(){y(e);let i=h(),a=h(2);return w(a.submitMarker(i.linkId))})("cancel",function(){y(e);let i=h(),a=h(2);return w(a.toggleAddMarker(i.linkId))}),l()}if(n&2){let e=h(),t=h(2);v("form",t.markerForm)("captureOptions",t.linkEndpoints(e.linkId))("dataLinkOptions",t.serialDataLinkTypes)("linkType",t.linkTypeOf(e.linkId))("submitting",t.submittingMarker()===e.linkId)}}function iAe(n,o){if(n&1&&li(0,62),n&2){let e=o.$implicit,t=h();h(2);let i=Te(28);v("ngTemplateOutlet",i)("ngTemplateOutletContext",Go(2,o$,e,t.linkId))}}function oAe(n,o){if(n&1){let e=R();r(0,"div",70)(1,"div",71)(2,"span",72),c(3),l(),r(4,"span",73),c(5),l(),L(6,"span",60),r(7,"button",74),_("click",function(){let i=y(e),a=h(2);return w(a.toggleAddMarker(i.linkId))}),r(8,"mat-icon"),c(9,"add"),l(),c(10," Marker "),l(),r(11,"button",75),_("click",function(){y(e);let i=h(2);return w(i.resetLinkSelect())}),r(12,"mat-icon"),c(13,"arrow_back"),l()()(),T(14,eAe,2,1,"div",46),T(15,tAe,4,0,"div",76),T(16,nAe,1,5,"app-marker-form",77),Q(17,iAe,1,5,"ng-container",62,F4),l()}if(n&2){let e,t=o,i=h(2);m(2),v("title",t.linkId),m(),N(t.name),m(2),N(t.markers.length),m(2),ne("add-button--active",i.addingToLink()===t.linkId),m(7),E((e=i.groupError(t.linkId))?14:-1,e),m(),E(i.definitions().length>0?15:-1),m(),E(i.addingToLink()===t.linkId?16:-1),m(),K(t.markers)}}function aAe(n,o){n&1&&(r(0,"div",48),c(1," No markers on any link yet. Use the selector above to pick a link and add one. "),l())}function rAe(n,o){if(n&1&&(r(0,"div",48),c(1),r(2,"strong"),c(3,"Node / Link"),l(),c(4," selector above to filter by a specific link. "),l()),n&2){let e=h(3);m(),X(" ",e.linkGroups().length," links have markers. Use the ")}}function sAe(n,o){n&1&&(r(0,"div",46),c(1),l()),n&2&&(m(),N(o))}function lAe(n,o){if(n&1){let e=R();r(0,"app-marker-form",78),_("save",function(){y(e);let i=h(2).$implicit,a=h(4);return w(a.submitMarker(i.linkId))})("cancel",function(){y(e);let i=h(2).$implicit,a=h(4);return w(a.toggleAddMarker(i.linkId))}),l()}if(n&2){let e=h(2).$implicit,t=h(4);v("form",t.markerForm)("captureOptions",t.linkEndpoints(e.linkId))("dataLinkOptions",t.serialDataLinkTypes)("linkType",t.linkTypeOf(e.linkId))("submitting",t.submittingMarker()===e.linkId)}}function cAe(n,o){if(n&1&&li(0,62),n&2){let e=o.$implicit,t=h(2).$implicit;h(4);let i=Te(28);v("ngTemplateOutlet",i)("ngTemplateOutletContext",Go(2,o$,e,t.linkId))}}function dAe(n,o){if(n&1&&(T(0,sAe,2,1,"div",46),T(1,lAe,1,5,"app-marker-form",77),Q(2,cAe,1,5,"ng-container",62,F4)),n&2){let e,t=h().$implicit,i=h(4);E((e=i.groupError(t.linkId))?0:-1,e),m(),E(i.addingToLink()===t.linkId?1:-1),m(),K(t.markers)}}function mAe(n,o){if(n&1){let e=R();r(0,"div",70)(1,"div",79),_("click",function(){let i=y(e).$implicit,a=h(4);return w(a.toggleGroup(i.linkId))}),r(2,"mat-icon",80),c(3),l(),r(4,"span",72),c(5),l(),r(6,"span",73),c(7),l(),L(8,"span",60),r(9,"button",74),_("click",function(i){let a=y(e).$implicit,s=h(4);return i.stopPropagation(),w(s.toggleAddMarker(a.linkId))}),r(10,"mat-icon"),c(11,"add"),l(),c(12," Marker "),l()(),T(13,dAe,4,2),l()}if(n&2){let e=o.$implicit,t=h(4);m(3),X(" ",t.isGroupCollapsed(e.linkId)?"chevron_right":"expand_more"," "),m(),v("title",e.linkId),m(),N(e.name),m(2),N(e.markers.length),m(2),ne("add-button--active",t.addingToLink()===e.linkId),m(4),E(t.isGroupCollapsed(e.linkId)?-1:13)}}function pAe(n,o){if(n&1&&Q(0,mAe,14,7,"div",70,T4e),n&2){let e=h(3);K(e.linkGroups())}}function uAe(n,o){if(n&1&&(r(0,"div",47),T(1,aAe,2,0,"div",48)(2,rAe,5,1,"div",48)(3,pAe,2,0),l()),n&2){let e=h(2);m(),E(e.linkGroups().length===0?1:e.linkGroups().length>50?2:3)}}function gAe(n,o){if(n&1){let e=R();r(0,"div",16),T(1,Y4e,2,1,"div",46),r(2,"div",66)(3,"mat-form-field",32)(4,"mat-label"),c(5,"Node"),l(),r(6,"input",67),_("input",function(i){y(e);let a=h();return w(a.nodeSearchText.set(i.target.value))}),l(),r(7,"mat-autocomplete",68,3),_("optionSelected",function(i){y(e);let a=h();return w(a.onNodeSelect(i.option.value))}),r(9,"mat-option",40),c(10,"All nodes"),l(),Q(11,Z4e,2,2,"mat-option",40,n$),l()(),r(13,"mat-form-field",32)(14,"mat-label"),c(15,"Link"),l(),r(16,"input",69),_("input",function(i){y(e);let a=h();return w(a.linkSearchText.set(i.target.value))}),l(),r(17,"mat-autocomplete",68,4),_("optionSelected",function(i){y(e);let a=h();return w(a.onLinkSelect(i.option.value))}),r(19,"mat-option",40),c(20,"All links"),l(),Q(21,J4e,2,2,"mat-option",40,n$),l()()(),T(23,oAe,19,8,"div",70),T(24,uAe,4,1,"div",47),l()}if(n&2){let e,t,i=Te(8),a=Te(18),s=h();m(),E((e=s.panelError())?1:-1,e),m(5),v("value",s.nodeSearchText())("matAutocomplete",i),m(),v("displayWith",s.displayNode),m(2),v("value",null),m(2),K(s.filteredNodeOptions()),m(5),v("value",s.linkSearchText())("matAutocomplete",a)("placeholder",s.selectedNodeId()?"Select a link\u2026":"Pick a node first\u2026"),m(),v("displayWith",s.displayLink),m(2),v("value",null),m(2),K(s.filteredLinkOptions()),m(2),E((t=s.selectedLinkGroup())?23:-1,t),m(),E(s.selectedLinkId()?-1:24)}}function hAe(n,o){n&1&&(r(0,"div",48),c(1,"Loading\u2026"),l())}function _Ae(n,o){n&1&&(r(0,"div",48),c(1," No tagged markers yet \u2014 set a Tag on a definition or a link marker to build a replay timeline. "),l())}function fAe(n,o){if(n&1&&(r(0,"span",84),c(1),l()),n&2){let e=h().$implicit;m(),X(" ",e.enabled.length," capturing ")}}function vAe(n,o){n&1&&c(0," Pausing\u2026 ")}function CAe(n,o){n&1&&c(0," Pause & replay ")}function bAe(n,o){n&1&&c(0," Replay ")}function xAe(n,o){n&1&&(r(0,"span",92),c(1,"inherited"),l())}function yAe(n,o){if(n&1&&(r(0,"li"),c(1),T(2,xAe,2,0,"span",92),l()),n&2){let e=o.$implicit,t=h(4);m(),Un(" ",t.linkLabel(e.link_id)," \u2014 ",e.name," "),m(),E(e.inherited_from?2:-1)}}function wAe(n,o){n&1&&c(0," Pausing\u2026 ")}function MAe(n,o){n&1&&c(0," Pause all & replay ")}function SAe(n,o){if(n&1){let e=R();r(0,"div",86)(1,"div",87),c(2,"Pause these markers to unlock replay:"),l(),r(3,"ul",88),Q(4,yAe,3,3,"li",null,O4e),l(),r(6,"div",89)(7,"button",90),_("click",function(){y(e);let i=h(3);return w(i.pausePanelTag.set(null))}),c(8," Cancel "),l(),r(9,"button",91),_("click",function(){y(e);let i=h().$implicit,a=h(2);return w(a.pauseAllAndReplay(i))}),T(10,wAe,1,0)(11,MAe,1,0),l()()()}if(n&2){let e=h().$implicit,t=h(2);m(4),K(e.enabled),m(3),v("disabled",t.pausingTag()!==null),m(2),v("disabled",t.pausingTag()!==null),m(),E(t.pausingTag()===e.tag?10:11)}}function kAe(n,o){if(n&1){let e=R();r(0,"div",81)(1,"span",82),c(2),l(),r(3,"span",83),c(4),l(),T(5,fAe,2,1,"span",84),L(6,"span",60),r(7,"button",85),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.startReplayFor(i))}),T(8,vAe,1,0)(9,CAe,1,0)(10,bAe,1,0),l()(),T(11,SAe,12,3,"div",86)}if(n&2){let e=o.$implicit,t=h(2);m(2),X("#",e.tag),m(2),RC(" ",e.markers.length," marker",e.markers.length===1?"":"s"," on ",e.linkCount," link",e.linkCount===1?"":"s"," "),m(),E(e.enabled.length>0?5:-1),m(3),E(t.pausingTag()===e.tag?8:e.enabled.length>0?9:10),m(3),E(t.pausePanelTag()===e.tag&&e.enabled.length>0?11:-1)}}function PAe(n,o){if(n&1&&(r(0,"div",19),T(1,hAe,2,0,"div",48)(2,_Ae,2,0,"div",48),Q(3,kAe,12,8,null,null,E4e),l()),n&2){let e=h();m(),E(e.loading()?1:e.tags().length===0?2:-1),m(2),K(e.tags())}}function TAe(n,o){n&1&&L(0,"mat-spinner",65),n&2&&v("diameter",18)}function EAe(n,o){if(n&1&&(r(0,"mat-icon"),c(1),l()),n&2){let e=h().off;m(),N(e?"sensors_off":"sensors")}}function OAe(n,o){if(n&1&&T(0,TAe,1,1,"mat-spinner",65)(1,EAe,2,1,"mat-icon"),n&2){let e=o.$implicit;E(e?0:1)}}function DAe(n,o){if(n&1){let e=R();r(0,"app-marker-form",95),_("save",function(){y(e);let i=h(2).linkId,a=h();return w(a.submitEditMarker(i))})("cancel",function(){y(e);let i=h(3);return w(i.cancelEditMarker())}),l()}if(n&2){let e=h(2).linkId,t=h();v("form",t.markerEditForm)("captureOptions",t.linkEndpoints(e))("dataLinkOptions",t.serialDataLinkTypes)("linkType",t.linkTypeOf(e))("submitting",t.submittingEditMarker())}}function IAe(n,o){if(n&1&&T(0,DAe,1,5,"app-marker-form",94),n&2){let e=o,t=h(),i=t.$implicit,a=t.linkId;E(e.linkId===a&&e.name===i.name?0:-1)}}function AAe(n,o){if(n&1&&(r(0,"span",97),c(1),l()),n&2){let e=h(2).$implicit,t=h();m(),N(t.nodeName(e.capture_node_id))}}function NAe(n,o){if(n&1&&(r(0,"span",58),c(1),l()),n&2){let e=h(2).$implicit;m(),N(e.direction)}}function FAe(n,o){n&1&&(r(0,"span",98),c(1," inherited "),l())}function RAe(n,o){n&1&&(r(0,"button",99)(1,"mat-icon"),c(2,"lock"),l()())}function zAe(n,o){n&1&&L(0,"mat-spinner",65),n&2&&v("diameter",18)}function LAe(n,o){n&1&&(r(0,"mat-icon"),c(1,"delete"),l())}function VAe(n,o){if(n&1){let e=R();r(0,"button",61),_("click",function(){y(e);let i=h(2),a=i.$implicit,s=i.linkId,d=h();return w(d.toggleMarkerEnabled(s,a))}),li(1,62),l(),r(2,"button",63),_("click",function(){y(e);let i=h(2),a=i.$implicit,s=i.linkId,d=h();return w(d.startEditMarker(s,a))}),r(3,"mat-icon"),c(4,"edit"),l()(),r(5,"button",100),_("click",function(){y(e);let i=h(2),a=i.$implicit,s=i.linkId,d=h();return w(d.deleteMarker(s,a.name))}),T(6,zAe,1,1,"mat-spinner",65)(7,LAe,2,0,"mat-icon"),l()}if(n&2){let e=h(2),t=e.$implicit,i=e.linkId,a=h(),s=Te(26);v("matTooltip",t.enabled===!1?"Enable (signal + capture)":"Disable (signal + capture)"),m(),v("ngTemplateOutlet",s)("ngTemplateOutletContext",Go(4,i$,a.isTogglingMarker(i,t.name),t.enabled===!1)),m(5),E(a.isDeletingMarker(i,t.name)?6:7)}}function BAe(n,o){if(n&1&&(r(0,"div",52),L(1,"span",96),r(2,"span",54),c(3),l(),r(4,"span",55),c(5),l(),T(6,AAe,2,1,"span",97),T(7,NAe,2,1,"span",58),T(8,FAe,2,0,"span",98),L(9,"span",60),T(10,RAe,3,0,"button",99)(11,VAe,8,7),l()),n&2){let e=h().$implicit;ne("marker-manager__row--disabled",e.enabled===!1),m(),Tt("background",e.color),ne("marker-manager__swatch--default",!e.color),m(2),N(e.name),m(2),N(e.bpf),m(),E(e.capture_node_id?6:-1),m(),E(e.direction?7:-1),m(),E(e.inherited_from?8:-1),m(2),E(e.inherited_from?10:11)}}function jAe(n,o){if(n&1&&T(0,IAe,1,1)(1,BAe,12,12,"div",93),n&2){let e,t=h();E((e=t.editingMarker())?0:1,e)}}function N4(n){let o=n.value;return typeof o=="string"&&o.trim().toLowerCase().startsWith("global")?{notGlobalName:!0}:null}var a$=(()=>{class n{DEFAULT_WIDTH=800;DEFAULT_HEIGHT=600;DEFAULT_LEFT="120px";DEFAULT_TOP="80px";MIN_WIDTH=560;MIN_HEIGHT=400;WINDOW_ID="marker-manager";destroy$=new Ye;aggregateRequestSeq=0;controller=ee();project=ee();zIndex=ee(1e3);closeWindow=new be;windowFocused=new be;startReplay=new be;style={position:"fixed",left:this.DEFAULT_LEFT,top:this.DEFAULT_TOP,width:`${this.DEFAULT_WIDTH}px`,height:`${this.DEFAULT_HEIGHT}px`};get renderedWindowStyle(){return this.fitEmptyDefinitions()?ze(q({},this.style),{height:"auto",maxHeight:`calc(100dvh - ${this.style.top})`}):this.style}resizedWidth=this.DEFAULT_WIDTH;resizedHeight=this.DEFAULT_HEIGHT;manuallyResized=z(!1);fitEmptyDefinitions=Ne(()=>this.activeTabIndex()===0&&!this.loading()&&this.definitions().length===0&&!this.manuallyResized());isDraggingSignal=z(!1);isResizingSignal=z(!1);isMinimizedSignal=z(!1);isDragging=this.isDraggingSignal.asReadonly();isResizing=this.isResizingSignal.asReadonly();isMinimized=this.isMinimizedSignal.asReadonly();definitions=z([]);linkGroups=z([]);loading=z(!1);defError=z(null);linkError=z(null);activeTabIndex=z(0);editingDefinition=z(null);addingToLink=z(null);editingMarker=z(null);collapsedGroups=z(new Set);togglingDefinition=z(new Set);togglingMarker=z(new Set);deletingDefinition=z(new Set);submittingDefinition=z(!1);deletingMarker=z(new Set);submittingMarker=z(null);submittingEditMarker=z(!1);nodeOptions=z([]);nodeSearchText=z("");filteredNodeOptions=Ne(()=>{let e=this.nodeSearchText().trim().toLowerCase(),t=this.nodeOptions();return e?t.filter(i=>i.name.toLowerCase().includes(e)):t});selectedNodeId=z(null);linkOptions=z([]);linkSearchText=z("");filteredLinkOptions=Ne(()=>{let e=this.linkSearchText().trim().toLowerCase(),t=this.selectedNodeId(),i=this.linkOptions();return t&&(i=i.filter(a=>this.linksDataSource.get(a.id)?.nodes?.some(d=>d.node_id===t))),e?i.filter(a=>a.name.toLowerCase().includes(e)):i});selectedLinkId=z(null);selectedLinkGroup=Ne(()=>{let e=this.selectedLinkId();return e?this.linkGroups().find(i=>i.linkId===e)??{linkId:e,name:this.linkName(e),markers:[]}:null});tags=Ne(()=>{let e=new Map;for(let i of this.linkGroups())for(let a of i.markers){if(a.tag===null||a.tag===void 0)continue;let s=e.get(a.tag)??[];s.push(a),e.set(a.tag,s)}let t=[];for(let[i,a]of e)t.push({tag:i,markers:a,enabled:a.filter(s=>s.enabled!==!1),linkCount:new Set(a.map(s=>s.link_id)).size});return t.sort((i,a)=>i.tag-a.tag),t});pausePanelTag=z(null);pausingTag=z(null);definitionForm=new Qo({name:new Ge("",[Ue.required,N4]),bpf:new Ge("",[Ue.required]),tag:new Ge(null),color:new Ge(null),highlight_duration:new Ge(800,{nonNullable:!0,validators:[Ue.required,Ue.min(1)]}),direction:new Ge("both"),data_link_type:new Ge(null)});markerForm=new Qo({name:new Ge("",[Ue.required,N4]),bpf:new Ge("",[Ue.required]),tag:new Ge(null),color:new Ge(null),highlight_duration:new Ge(800,{nonNullable:!0,validators:[Ue.required,Ue.min(1)]}),direction:new Ge("both"),data_link_type:new Ge(null),capture_node_id:new Ge($_,{nonNullable:!0})});markerEditForm=new Qo({name:new Ge({value:"",disabled:!0},[Ue.required,N4]),bpf:new Ge("",[Ue.required]),tag:new Ge(null),color:new Ge(null),highlight_duration:new Ge(800,{nonNullable:!0,validators:[Ue.required,Ue.min(1)]}),direction:new Ge("both"),data_link_type:new Ge({value:"DLT_EN10MB",disabled:!0}),capture_node_id:new Ge({value:$_,disabled:!0})});serialDataLinkTypes=[{label:"Cisco HDLC",value:"DLT_C_HDLC"},{label:"Cisco PPP",value:"DLT_PPP_SERIAL"},{label:"Frame Relay",value:"DLT_FRELAY"},{label:"ATM",value:"DLT_ATM_RFC1483"}];boundaryService=f(Ql);windowManagement=f(Bs);cdr=f(oe);markerService=f(P2);linkService=f(Ri);linksDataSource=f(so);mapLinksDataSource=f(Fs);nodesDataSource=f(Xn);markerRegistryService=f(_m);toasterService=f(re);dialog=f(Xe);dragStartX=0;dragStartY=0;dragStartLeft=0;dragStartTop=0;windowWrapper=ln("windowWrapper");constructor(){Vn(()=>{let e=this.WINDOW_ID,i=this.windowManagement.minimizedWindows().some(a=>a.id===e);i!==this.isMinimizedSignal()&&this.isMinimizedSignal.set(i)}),Vn(()=>{this.activeTabIndex()===2&&this.loadAggregate()})}ngOnInit(){let e=window.innerWidth<=768?56:64;this.boundaryService.setConfig({topOffset:e}),this.setupDragHandling(),this.buildNodeOptions(),this.buildLinkOptions(),this.loadDefinitions(),this.loadAggregate()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}close(){this.windowManagement.restoreWindow(this.WINDOW_ID),this.closeWindow.emit()}toggleMinimize(){this.windowManagement.toggleMinimize(this.WINDOW_ID,"marker"),this.cdr.markForCheck()}onWindowFocus(){if(this.isMinimizedSignal()){this.toggleMinimize();return}this.windowFocused.emit(),this.cdr.markForCheck()}loadDefinitions(){let e=this.controller(),t=this.project();!e||!t||(this.loading.set(!0),this.markerService.listDefinitions(e,t.project_id).pipe(He(this.destroy$)).subscribe({next:i=>{this.definitions.set(this.toDefinitionRows(i)),this.loading.set(!1),this.cdr.markForCheck()},error:i=>{this.defError.set(i.error?.message||i.message||"Failed to load definitions"),this.loading.set(!1),this.cdr.markForCheck()}}))}buildNodeOptions(){let e=this.nodesDataSource.getItems(),t=[];for(let i of e)i&&t.push({id:i.node_id,name:i.name});t.sort((i,a)=>i.name.localeCompare(a.name)),this.nodeOptions.set(t)}buildLinkOptions(){let e=this.linksDataSource.getItems(),t=[];for(let i of e)i&&t.push({id:i.link_id,name:this.linkName(i.link_id)});t.sort((i,a)=>i.name.localeCompare(a.name)),this.linkOptions.set(t)}loadAggregate(){let e=this.controller(),t=this.project();if(!e||!t)return;let i=++this.aggregateRequestSeq;this.markerService.aggregateList(e,t.project_id).pipe(He(this.destroy$)).subscribe({next:a=>{i===this.aggregateRequestSeq&&(this.linkGroups.set(this.buildGroups(a)),this.markerRegistryService.rebuildFromAggregate(a),this.syncLinkMarkersFromAggregate(a),this.cdr.markForCheck())},error:a=>{i===this.aggregateRequestSeq&&(this.linkError.set({linkId:null,message:a.error?.message||a.message||"Failed to load markers"}),this.cdr.markForCheck())}})}toDefinitionRows(e){return Object.entries(e).map(([t,i])=>({name:t,bpf:i.bpf,tag:i.tag??null,color:i.color??null,highlight_duration:i.highlight_duration??null,direction:i.direction??null,data_link_type:i.data_link_type&&i.data_link_type!=="DLT_EN10MB"?i.data_link_type:null,linkCount:i.link_ids?.length??0,paused:i.paused??!1}))}buildGroups(e){let t=new Map;for(let[a,s]of Object.entries(e)){let d=a.indexOf("/"),p=d>=0?a.slice(d+1):a,u=t.get(s.link_id)??[];u.push(ze(q({},s),{name:p})),t.set(s.link_id,u)}let i=[];for(let[a,s]of t)i.push({linkId:a,name:this.linkName(a),markers:s});return i.sort((a,s)=>a.name.localeCompare(s.name)),i}syncLinkMarkersFromAggregate(e){let t=new Map;for(let[a,s]of Object.entries(e)){let d=s.link_id;if(!d)continue;let p=a.indexOf("/"),u=p>=0?a.slice(p+1):a,g=t.get(d);g||(g={},t.set(d,g));let i=s,{link_id:C,node_id:M}=i,x=EC(i,["link_id","node_id"]);g[u]=x}for(let a of this.linksDataSource.getItems()){let s=t.get(a.link_id);a.markers=s??(a.markers?{}:a.markers)}for(let a of this.mapLinksDataSource.getItems()){let s=t.get(a.id);a.markers=s??(a.markers?{}:a.markers)}}linkName(e){return Ku(e,this.linksDataSource,this.nodesDataSource,!0)}linkEndpoints(e){let i=this.linksDataSource.get(e)?.nodes;return!i||i.length===0?[]:i.map(a=>{let s=this.nodesDataSource.get(a.node_id);return{id:a.node_id,name:s?.name??a.node_id}})}nodeName(e){return this.nodesDataSource.get(e)?.name??e}linkTypeOf(e){return this.linksDataSource.get(e)?.link_type??"ethernet"}linkLabel(e){return this.linkName(e)}startReplayFor(e){if(this.pausingTag()===null){if(e.enabled.length>0){this.pausePanelTag.set(this.pausePanelTag()===e.tag?null:e.tag);return}this.pausePanelTag.set(null),this.startReplay.emit(e.tag)}}pauseAllAndReplay(e){let t=this.controller(),i=this.project();if(!t||!i||this.pausingTag()!==null||e.enabled.length===0)return;this.pausingTag.set(e.tag);let a=new Set(e.enabled.filter(d=>d.inherited_from).map(d=>d.inherited_from)),s=e.enabled.filter(d=>!d.inherited_from);Ci([...[...a].map(d=>this.markerService.pauseDefinition(t,i.project_id,d)),...s.map(d=>this.markerService.setEnabled(t,i.project_id,d.link_id,d.name,!1))]).pipe(He(this.destroy$)).subscribe({next:()=>{this.pausingTag.set(null),this.pausePanelTag.set(null),this.toasterService.success(`Paused ${e.enabled.length} marker(s) under tag ${e.tag}.`),this.loadAggregate(),this.loadDefinitions(),this.startReplay.emit(e.tag)},error:d=>{this.pausingTag.set(null);let p=d.error?.message||d.message||"Failed to pause markers";this.toasterService.error(p),this.cdr.markForCheck()}})}submitDefinition(){if(this.definitionForm.invalid){this.definitionForm.markAllAsTouched();return}let e=this.controller(),t=this.project();if(!e||!t)return;this.defError.set(null),this.submittingDefinition.set(!0);let i=this.definitionForm.getRawValue(),a={name:i.name.trim(),bpf:i.bpf.trim()},s=this.asNumber(i.tag);s!==null&&(a.tag=s),i.color&&(a.color=i.color);let d=this.asNumber(i.highlight_duration);d!==null&&(a.highlight_duration=d);let p=this.dirToBody(i.direction);p&&(a.direction=p),i.data_link_type&&(a.data_link_type=i.data_link_type);let u=this.editingDefinition(),g=u?this.definitions().find(P=>P.name===u)?.data_link_type??null:null,C=!!u&&g!==(i.data_link_type??null),M=()=>{this.submittingDefinition.set(!1),this.toasterService.success(`Marker definition "${a.name}" ${u?"updated":"created"}.`),this.cancelEditDefinition(),this.loadDefinitions(),this.loadAggregate()},x=P=>{this.submittingDefinition.set(!1);let k=P.error?.message||P.message||"Failed to save definition";this.defError.set(k),this.toasterService.error(k),this.cdr.markForCheck()},b=()=>{this.markerService.updateDefinition(e,t.project_id,u,a).pipe(He(this.destroy$)).subscribe({next:()=>M(),error:x})};u?C?this.dialog.open(jt,{data:{title:"Confirm encapsulation change",message:"Changing the encapsulation rebuilds this definition\u2019s markers and restarts capture on every link it applies to. uBridge itself is unaffected. Continue?",confirmButtonText:"Save",cancelButtonText:"Cancel"},panelClass:["base-confirmation-dialog-panel","confirmation-warning-panel","dialog-small-panel"],autoFocus:!1,restoreFocus:!1}).afterClosed().subscribe(k=>{k?b():(this.submittingDefinition.set(!1),this.cdr.markForCheck())}):b():this.markerService.createDefinition(e,t.project_id,a).pipe(He(this.destroy$)).subscribe({next:()=>M(),error:x})}startEditDefinition(e){this.editingDefinition.set(e.name),this.defError.set(null),this.definitionForm.reset({name:e.name,bpf:e.bpf,tag:e.tag,color:e.color,highlight_duration:e.highlight_duration,direction:this.dirFromMarker(e.direction),data_link_type:e.data_link_type??null}),this.definitionForm.get("name")?.disable(),this.cdr.markForCheck()}cancelEditDefinition(){this.editingDefinition.set(null),this.definitionForm.reset(),this.definitionForm.get("name")?.enable(),this.defError.set(null),this.cdr.markForCheck()}deleteDefinition(e){let t=this.controller(),i=this.project();!t||!i||this.isDeletingDefinition(e.name)||(this.defError.set(null),this.markPending(this.deletingDefinition,e.name),this.markerService.deleteDefinition(t,i.project_id,e.name).pipe(He(this.destroy$)).subscribe({next:()=>{this.clearPending(this.deletingDefinition,e.name),this.toasterService.success(`Marker definition "${e.name}" deleted.`),this.editingDefinition()===e.name&&this.cancelEditDefinition(),this.loadDefinitions(),this.loadAggregate()},error:a=>{this.clearPending(this.deletingDefinition,e.name);let s=a.error?.message||a.message||"Failed to delete definition";this.defError.set(s),this.toasterService.error(s),this.cdr.markForCheck()}}))}onNodeSelect(e){if(this.selectedNodeId.set(e),this.selectedLinkId.set(null),this.addingToLink.set(null),this.editingMarker.set(null),this.linkSearchText.set(""),this.markerForm.reset(),this.linkError.set(null),e){let t=this.nodeOptions().find(i=>i.id===e);t&&this.nodeSearchText.set(t.name)}else this.nodeSearchText.set("");this.cdr.markForCheck()}onLinkSelect(e){this.selectedLinkId.set(e),this.addingToLink.set(null),this.editingMarker.set(null),this.markerForm.reset(),this.linkError.set(null),this.linkSearchText.set(e?this.linkName(e):""),this.cdr.markForCheck()}displayNode=e=>e?this.nodeOptions().find(t=>t.id===e)?.name??e:"";displayLink=e=>e?this.linkName(e):"";resetLinkSelect(){this.selectedNodeId.set(null),this.nodeSearchText.set(""),this.selectedLinkId.set(null),this.addingToLink.set(null),this.editingMarker.set(null),this.linkSearchText.set(""),this.linkError.set(null),this.cdr.markForCheck()}isGroupCollapsed(e){return this.collapsedGroups().has(e)}isTogglingMarker(e,t){return this.togglingMarker().has(`${e}/${t}`)}isDeletingMarker(e,t){return this.deletingMarker().has(`${e}/${t}`)}isTogglingDefinition(e){return this.togglingDefinition().has(e)}isDeletingDefinition(e){return this.deletingDefinition().has(e)}markPending(e,t){let i=new Set(e());i.add(t),e.set(i)}clearPending(e,t){let i=new Set(e());i.delete(t),e.set(i)}panelError(){let e=this.linkError();return e&&!e.linkId?e.message:null}groupError(e){let t=this.linkError();return t&&t.linkId===e?t.message:null}toggleGroup(e){let t=new Set(this.collapsedGroups());t.has(e)?t.delete(e):t.add(e),this.collapsedGroups.set(t)}expandGroup(e){if(this.collapsedGroups().has(e)){let t=new Set(this.collapsedGroups());t.delete(e),this.collapsedGroups.set(t)}}toggleAddMarker(e){let t=this.addingToLink()!==e;this.addingToLink.set(t?e:null),this.editingMarker.set(null),t&&this.expandGroup(e),this.markerForm.reset(),t&&this.linkTypeOf(e)==="serial"&&this.markerForm.get("data_link_type")?.setValue(this.serialDataLinkTypes[0]?.value??null),this.linkError.set(null),this.cdr.markForCheck()}submitMarker(e){if(this.markerForm.invalid){this.markerForm.markAllAsTouched();return}let t=this.controller(),i=this.project();if(!t||!i)return;this.linkError.set(null),this.submittingMarker.set(e);let a=this.markerForm.getRawValue(),s={bpf:a.bpf.trim(),name:a.name.trim()},d=this.asNumber(a.tag);d!==null&&(s.tag=d),a.color&&(s.color=a.color);let p=this.asNumber(a.highlight_duration);p!==null&&(s.highlight_duration=p);let u=this.dirToBody(a.direction);u&&(s.direction=u),a.capture_node_id&&a.capture_node_id!==$_&&(s.capture_node_id=a.capture_node_id),a.data_link_type&&(s.data_link_type=a.data_link_type),this.markerService.create(t,i.project_id,e,s).pipe(He(this.destroy$)).subscribe({next:()=>{this.submittingMarker.set(null),this.toasterService.success(`Marker "${s.name}" created.`),this.toggleAddMarker(e),this.refreshLink(e),this.loadAggregate()},error:g=>{this.submittingMarker.set(null);let C=g.error?.message||g.message||"Failed to create marker";this.linkError.set({linkId:e,message:C}),this.toasterService.error(C),this.cdr.markForCheck()}})}deleteMarker(e,t){let i=this.controller(),a=this.project();if(!i||!a)return;let s=`${e}/${t}`;this.isDeletingMarker(e,t)||(this.linkError.set(null),this.markPending(this.deletingMarker,s),this.markerService.delete(i,a.project_id,e,t).pipe(He(this.destroy$)).subscribe({next:()=>{this.clearPending(this.deletingMarker,s),this.toasterService.success(`Marker "${t}" deleted.`),this.refreshLink(e),this.loadAggregate()},error:d=>{this.clearPending(this.deletingMarker,s);let p=d.error?.message||d.message||"Failed to delete marker";this.linkError.set({linkId:e,message:p}),this.toasterService.error(p),this.cdr.markForCheck()}}))}startEditMarker(e,t){this.editingMarker.set({linkId:e,name:t.name}),this.addingToLink.set(null),this.expandGroup(e),this.linkError.set(null),this.markerEditForm.reset({name:t.name,bpf:t.bpf,tag:t.tag??null,color:t.color??null,highlight_duration:t.highlight_duration??800,direction:this.dirFromMarker(t.direction),data_link_type:t.data_link_type??"DLT_EN10MB",capture_node_id:t.capture_node_id??$_}),this.markerEditForm.get("name")?.disable(),this.markerEditForm.get("data_link_type")?.disable(),this.markerEditForm.get("capture_node_id")?.disable(),this.cdr.markForCheck()}cancelEditMarker(){this.editingMarker.set(null),this.cdr.markForCheck()}submitEditMarker(e){if(this.markerEditForm.invalid){this.markerEditForm.markAllAsTouched();return}let t=this.editingMarker();if(!t)return;let i=this.controller(),a=this.project();if(!i||!a)return;this.linkError.set(null),this.submittingEditMarker.set(!0);let s=this.markerEditForm.getRawValue(),d={bpf:s.bpf.trim()},p=this.asNumber(s.tag);p!==null&&(d.tag=p),s.color&&(d.color=s.color);let u=this.asNumber(s.highlight_duration);u!==null&&(d.highlight_duration=u);let g=this.dirToBody(s.direction);g&&(d.direction=g),this.markerService.update(i,a.project_id,e,t.name,d).pipe(He(this.destroy$)).subscribe({next:()=>{this.submittingEditMarker.set(!1),this.toasterService.success(`Marker "${t.name}" updated.`),this.editingMarker.set(null),this.refreshLink(e),this.loadAggregate()},error:C=>{this.submittingEditMarker.set(!1);let M=C.error?.message||C.message||"Failed to update marker";this.linkError.set({linkId:e,message:M}),this.toasterService.error(M),this.cdr.markForCheck()}})}toggleDefinitionPaused(e){if(this.isTogglingDefinition(e.name))return;let t=this.controller(),i=this.project();if(!t||!i)return;let a=!e.paused;this.markPending(this.togglingDefinition,e.name),(a?this.markerService.pauseDefinition(t,i.project_id,e.name):this.markerService.resumeDefinition(t,i.project_id,e.name)).pipe(He(this.destroy$)).subscribe({next:()=>{this.clearPending(this.togglingDefinition,e.name),this.applyDefinitionPausedLocal(e.name,a),this.loadAggregate()},error:d=>{this.clearPending(this.togglingDefinition,e.name),this.defError.set(d.error?.message||d.message||"Failed to toggle definition"),this.cdr.markForCheck()}})}applyDefinitionPausedLocal(e,t){let i=this.definitions().map(a=>a.name===e?ze(q({},a),{paused:t}):a);this.definitions.set(i)}toggleMarkerEnabled(e,t){if(t.inherited_from)return;let i=this.controller(),a=this.project();if(!i||!a||this.isTogglingMarker(e,t.name))return;let s=t.enabled===!1;this.markPending(this.togglingMarker,`${e}/${t.name}`),this.markerService.setEnabled(i,a.project_id,e,t.name,s).pipe(He(this.destroy$)).subscribe({next:()=>{this.clearPending(this.togglingMarker,`${e}/${t.name}`),this.applyEnabledLocal(e,t.name,s),this.refreshLink(e),this.loadAggregate()},error:d=>{this.clearPending(this.togglingMarker,`${e}/${t.name}`),this.toasterService.error(d.error?.message||d.message||"Failed to toggle marker"),this.cdr.markForCheck()}})}applyEnabledLocal(e,t,i){let a=this.linkGroups().map(s=>s.linkId!==e?s:ze(q({},s),{markers:s.markers.map(d=>d.name===t?ze(q({},d),{enabled:i}):d)}));this.linkGroups.set(a)}refreshLink(e){let t=this.controller(),i=this.project();!t||!i||this.linkService.getLink(t,i.project_id,e).pipe(He(this.destroy$)).subscribe({next:a=>{this.linksDataSource.update(a);let s=this.mapLinksDataSource.get(e);s&&(s.markers=a.markers,this.mapLinksDataSource.update(s)),this.markerRegistryService.reconcileLink(a)},error:a=>this.toasterService.error(a.error?.message||a.message||"Failed to refresh link")})}asNumber(e){if(e==null||e==="")return null;let t=Number(e);return isNaN(t)?null:t}dirToBody(e){return e==="tx"||e==="rx"?e:"both"}dirFromMarker(e){return e==="tx"||e==="rx"?e:"both"}validate(e){return!(e.rectangle.width&&e.rectangle.height&&(e.rectangle.width<this.MIN_WIDTH||e.rectangle.height<this.MIN_HEIGHT))}onResizeStart(){this.resizedHeight=this.windowWrapper()?.nativeElement.getBoundingClientRect().height||this.resizedHeight,this.isResizingSignal.set(!0),this.setContentPointerEvents("none"),this.cdr.markForCheck()}onResizeEnd(e){this.manuallyResized.set(!0);let t=this.boundaryService.constrainResizeSize(e.rectangle.width||this.resizedWidth,e.rectangle.height||this.resizedHeight,e.rectangle.left,e.rectangle.top);this.style={position:"fixed",left:`${t.left}px`,top:`${t.top}px`,width:`${t.width}px`,height:`${t.height}px`},this.resizedWidth=t.width,this.resizedHeight=t.height,this.isResizingSignal.set(!1),this.setContentPointerEvents(""),this.cdr.markForCheck()}setupDragHandling(){let e=this.windowWrapper()?.nativeElement;if(!e)return;let t=e.querySelector(".marker-manager__header");if(!t)return;let i=ma(t,"mousedown"),a=ma(document,"mousemove"),s=ma(document,"mouseup");i.pipe(He(this.destroy$),Qn(d=>{d.preventDefault(),this.isDraggingSignal.set(!0),this.cdr.markForCheck(),this.dragStartX=d.clientX,this.dragStartY=d.clientY,this.dragStartLeft=Number(this.style.left?.toString().split("px")[0])||0,this.dragStartTop=Number(this.style.top?.toString().split("px")[0])||0,this.setContentPointerEvents("none")}),Dn(()=>a.pipe(sl(0,rl),He(s.pipe(Qn(()=>{this.onDragEnd()})))))).subscribe(d=>{let p=d.clientX-this.dragStartX,u=d.clientY-this.dragStartY,g=this.dragStartLeft+p,C=this.dragStartTop+u,M=this.resizedWidth,x=e.getBoundingClientRect().height||this.resizedHeight,b=window.innerWidth-M,P=this.boundaryService.getConfigValue().topOffset||0,k=window.innerHeight-x-P;g=Math.max(0,Math.min(b,g)),C=Math.max(P,Math.min(k,C)),this.style={position:"fixed",left:`${g}px`,top:`${C}px`,width:this.style.width,height:this.style.height},this.cdr.markForCheck()})}onDragEnd(){this.isDraggingSignal.set(!1),this.setContentPointerEvents(""),this.cdr.markForCheck()}setContentPointerEvents(e){let t=this.windowWrapper()?.nativeElement;if(!t)return;let i=t.querySelector(".marker-manager__body");i&&(i.style.pointerEvents=e)}onWindowResize(){this.style=this.boundaryService.constrainWindowPosition(this.style)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-marker-manager"]],viewQuery:function(t,i){t&1&&Bn(i.windowWrapper,v4e,5),t&2&&jn()},hostBindings:function(t,i){t&1&&_("resize",function(){return i.onWindowResize()},So)},inputs:{controller:[1,"controller"],project:[1,"project"],zIndex:[1,"zIndex"]},outputs:{closeWindow:"closeWindow",windowFocused:"windowFocused",startReplay:"startReplay"},decls:29,vars:18,consts:[["windowWrapper",""],["onOffIcon",""],["markerSlot",""],["nodeAuto","matAutocomplete"],["linkAuto","matAutocomplete"],["mwlResizable","",1,"marker-manager",3,"mousedown","resizeStart","resizeEnd","ngStyle","validateResize","enableGhostResize"],[1,"marker-manager__content"],[1,"marker-manager__header"],[1,"marker-manager__header-title"],[1,"header-icon"],[1,"marker-manager__header-actions"],["mat-icon-button","","title","Minimize",1,"minimize-button",3,"click"],["mat-icon-button","","title","Close",1,"close-button",3,"click"],[1,"marker-manager__body"],[3,"selectedIndexChange","selectedIndex"],["label","Definitions"],[1,"marker-manager__panel"],["label","Links"],["label","Replay"],[1,"marker-manager__panel","gns3-replay-tags"],["mwlResizeHandle","",1,"resize-handle","resize-handle-top",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-right",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-bottom",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-left",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-top-left",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-top-right",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-bottom-left",3,"resizeEdges"],["mwlResizeHandle","",1,"resize-handle","resize-handle-bottom-right",3,"resizeEdges"],[3,"ngSubmit","formGroup"],[1,"marker-manager__form-title"],[3,"expressionChange","expression"],[1,"marker-manager__single-grid"],["appearance","outline","subscriptSizing","dynamic",1,"form-field"],["matInput","","formControlName","bpf","placeholder","arp or icmp","rows","1","cdkTextareaAutosize","","cdkAutosizeMinRows","1","cdkAutosizeMaxRows","4"],[1,"marker-manager__definition-grid"],["appearance","outline","subscriptSizing","dynamic","floatLabel","always",1,"form-field"],["matTextPrefix","",1,"global-prefix"],["matInput","","formControlName","name","placeholder","auto"],["matInput","","type","number","formControlName","tag","placeholder","\u2014","min","0"],["formControlName","data_link_type","placeholder","Ethernet only"],[3,"value"],["matInput","","type","number","formControlName","highlight_duration","placeholder","500"],["matInput","","type","color","formControlName","color",1,"color-input"],[1,"marker-manager__definition-actions"],["mat-flat-button","","color","primary","type","submit",3,"disabled"],["mat-stroked-button","","type","button"],[1,"marker-manager__error"],[1,"marker-manager__list"],[1,"marker-manager__empty"],[1,"marker-manager__row",3,"marker-manager__row--editing","marker-manager__row--paused"],[1,"marker-manager__btn-spinner",3,"diameter"],["mat-stroked-button","","type","button",3,"click"],[1,"marker-manager__row"],[1,"marker-manager__swatch",3,"title"],[1,"marker-manager__row-name"],[1,"marker-manager__row-bpf"],["title","Replay tag",1,"marker-manager__chip","marker-manager__chip--tag"],[1,"marker-manager__chip"],["title","Direction filter",1,"marker-manager__chip","marker-manager__chip--dir"],["title","Links carrying this definition",1,"marker-manager__chip","marker-manager__chip--links"],[1,"marker-manager__row-spacer"],["mat-icon-button","",3,"click","matTooltip"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],["mat-icon-button","","matTooltip","Edit",3,"click"],["mat-icon-button","","matTooltip","Delete (clears all copies)",3,"click"],[1,"marker-manager__toggle-spinner",3,"diameter"],[2,"display","grid","grid-template-columns","1fr 1fr","gap","var(--gns3-form-row-gap)","align-items","start"],["matInput","","placeholder","Filter by node\u2026",3,"input","value","matAutocomplete"],[3,"optionSelected","displayWith"],["matInput","",3,"input","value","matAutocomplete","placeholder"],[1,"marker-manager__group"],[1,"marker-manager__group-header"],[1,"marker-manager__group-name",3,"title"],[1,"marker-manager__group-count"],["mat-raised-button","","color","primary",1,"add-button",3,"click"],["mat-icon-button","","matTooltip","Back to all links",3,"click"],[1,"marker-manager__hint"],["mode","create",3,"form","captureOptions","dataLinkOptions","linkType","submitting"],["mode","create",3,"save","cancel","form","captureOptions","dataLinkOptions","linkType","submitting"],[1,"marker-manager__group-header",3,"click"],[1,"marker-manager__group-chevron"],[1,"gns3-replay-tags__row"],[1,"gns3-replay-tags__tag"],[1,"gns3-replay-tags__meta"],["title","Replay needs every marker under the tag paused",1,"gns3-replay-tags__chip","gns3-replay-tags__chip--capturing"],["mat-flat-button","","color","primary",1,"gns3-replay-tags__action",3,"click"],[1,"gns3-replay-tags__pause-panel"],[1,"gns3-replay-tags__pause-title"],[1,"gns3-replay-tags__pause-list"],[1,"gns3-replay-tags__pause-actions"],["mat-stroked-button","","type","button",3,"click","disabled"],["mat-flat-button","","color","primary",3,"click","disabled"],["matTooltip","Global rule \u2014 paused via its definition",1,"marker-manager__chip","marker-manager__chip--inherited"],[1,"marker-manager__row",3,"marker-manager__row--disabled"],["mode","edit",3,"form","captureOptions","dataLinkOptions","linkType","submitting"],["mode","edit",3,"save","cancel","form","captureOptions","dataLinkOptions","linkType","submitting"],[1,"marker-manager__swatch"],["title","Capture node (observer)",1,"marker-manager__chip"],["matTooltip","Inherited \u2014 edit via Definitions",1,"marker-manager__chip","marker-manager__chip--inherited"],["mat-icon-button","","disabled","","matTooltip","Inherited \u2014 edit via Definitions"],["mat-icon-button","","matTooltip","Delete",3,"click"]],template:function(t,i){t&1&&(r(0,"div",5,0),_("mousedown",function(){return i.onWindowFocus()})("resizeStart",function(){return i.onResizeStart()})("resizeEnd",function(s){return i.onResizeEnd(s)}),T(2,D4e,8,16),r(3,"div",6)(4,"div",7)(5,"div",8)(6,"mat-icon",9),c(7,"insights"),l(),r(8,"span"),c(9,"Marker Manager"),l()(),r(10,"div",10)(11,"button",11),_("click",function(){return i.toggleMinimize()}),r(12,"mat-icon"),c(13,"remove"),l()(),r(14,"button",12),_("click",function(){return i.close()}),r(15,"mat-icon"),c(16,"close"),l()()()(),r(17,"div",13)(18,"mat-tab-group",14),_("selectedIndexChange",function(s){return i.activeTabIndex.set(s)}),r(19,"mat-tab",15),T(20,X4e,52,14,"div",16),l(),r(21,"mat-tab",17),T(22,gAe,25,12,"div",16),l(),r(23,"mat-tab",18),T(24,PAe,5,1,"div",19),l()()()()(),se(25,OAe,2,1,"ng-template",null,1,Qr)(27,jAe,2,1,"ng-template",null,2,Qr)),t&2&&(Tt("z-index",i.zIndex()),ne("is-dragging",i.isDragging())("is-resizing",i.isResizing())("is-minimized",i.isMinimized())("fit-empty-definitions",i.fitEmptyDefinitions()),v("ngStyle",i.renderedWindowStyle)("validateResize",i.validate)("enableGhostResize",!1),m(2),E(i.isMinimized()?-1:2),m(16),v("selectedIndex",i.activeTabIndex()),m(2),E(i.activeTabIndex()===0?20:-1),m(2),E(i.activeTabIndex()===1?22:-1),m(2),E(i.activeTabIndex()===2?24:-1))},dependencies:[fe,tc,ll,k_,It,Ct,At,No,Nt,vt,Er,Ut,Yt,ie,ce,Y,he,Be,bo,Xo,Yo,we,Pe,Ve,Wn,Bi,ye,Ee,Xc,Jo,ha,nt,ho,ot,ct,st,pt,Ja,fs,rt,mt,er,tr,t$,P_],styles:[".marker-manager[_ngcontent-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}.marker-manager[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}.marker-manager[_ngcontent-%COMP%]{position:fixed;z-index:1000;background:var(--mat-sys-surface);border:2px solid var(--mat-sys-outline);border-radius:8px;box-shadow:0 8px 24px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent),0 4px 8px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent);overflow:visible;transition:box-shadow var(--gns3-motion-duration-standard) ease}.marker-manager[_ngcontent-%COMP%]:hover{box-shadow:0 12px 32px color-mix(in srgb,var(--mat-sys-shadow) 20%,transparent),0 6px 12px color-mix(in srgb,var(--mat-sys-shadow) 12%,transparent)}.marker-manager.fit-empty-definitions[_ngcontent-%COMP%] .marker-manager__content[_ngcontent-%COMP%]{height:auto;max-height:inherit}.marker-manager.is-dragging[_ngcontent-%COMP%]{box-shadow:0 16px 48px color-mix(in srgb,var(--mat-sys-shadow) 25%,transparent),0 8px 16px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent);opacity:.9;cursor:grabbing;will-change:left,top}.marker-manager.is-minimized[_ngcontent-%COMP%]{display:none}.marker-manager__content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden;border-radius:6px}.marker-manager__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:4px 8px;background:var(--mat-sys-surface-container);border-bottom:1px solid var(--mat-sys-outline-variant);cursor:grab;user-select:none;flex-shrink:0}.marker-manager__header[_ngcontent-%COMP%]:active{cursor:grabbing}.marker-manager__header-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;font-size:12px;font-weight:500;color:var(--mat-sys-on-surface)}.marker-manager__header-title[_ngcontent-%COMP%] .header-icon[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-primary);width:14px;height:14px}.marker-manager__header-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px}.marker-manager__header-actions[_ngcontent-%COMP%] .minimize-button[_ngcontent-%COMP%], .marker-manager__header-actions[_ngcontent-%COMP%] .close-button[_ngcontent-%COMP%]{--gns3-action-icon-size: 16px;width:24px;height:24px;--mat-icon-button-state-layer-size: 24px;border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: 24px}.marker-manager__header-actions[_ngcontent-%COMP%] .minimize-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], .marker-manager__header-actions[_ngcontent-%COMP%] .close-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}.marker-manager__header-actions[_ngcontent-%COMP%] .minimize-button[_ngcontent-%COMP%], .marker-manager__header-actions[_ngcontent-%COMP%] .close-button[_ngcontent-%COMP%]{vertical-align:middle}.marker-manager__header-actions[_ngcontent-%COMP%] .minimize-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], .marker-manager__header-actions[_ngcontent-%COMP%] .close-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;vertical-align:middle}.marker-manager__header-actions[_ngcontent-%COMP%] .minimize-button[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-primary-container);color:var(--mat-sys-primary)}.marker-manager__header-actions[_ngcontent-%COMP%] .close-button[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-error-container);color:var(--mat-sys-error)}.marker-manager__body[_ngcontent-%COMP%]{flex:1;overflow:auto;min-height:0}.marker-manager__panel[_ngcontent-%COMP%]{container:marker-pane/inline-size;padding:12px 16px 16px}.marker-manager__single-grid[_ngcontent-%COMP%], .marker-manager__definition-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--gns3-form-row-gap);align-items:start}.marker-manager__definition-grid[_ngcontent-%COMP%]{grid-template-columns:repeat(3,minmax(0,1fr));margin-top:var(--gns3-form-row-gap)}.marker-manager__definition-actions[_ngcontent-%COMP%]{grid-column:1/-1;display:flex;flex-wrap:wrap;justify-content:flex-end;gap:var(--gns3-density-space-3);margin-bottom:var(--gns3-density-space-4)}.marker-manager__definition-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing)}.marker-manager__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px}.marker-manager__form--inline[_ngcontent-%COMP%]{margin:8px 0 4px;padding:8px;background:var(--mat-sys-surface-container);border-radius:6px}.marker-manager__form-title[_ngcontent-%COMP%]{font-size:12px;font-weight:600;color:var(--mat-sys-on-surface-variant);margin-bottom:4px}.marker-manager__form-row[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:var(--gns3-density-space-2);align-items:flex-start}.marker-manager__form-actions[_ngcontent-%COMP%]{display:flex;gap:var(--gns3-density-space-2);margin-top:4px}.marker-manager__error[_ngcontent-%COMP%]{margin:8px 0;padding:6px 10px;background:var(--mat-sys-error-container);color:var(--mat-sys-on-error-container);border-radius:4px;font-size:12px}.marker-manager__hint[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;margin-bottom:6px;padding:4px 8px;background:var(--mat-sys-tertiary-container);color:var(--mat-sys-on-tertiary-container);border-radius:4px;font-size:11px}.marker-manager__hint[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:14px;width:14px;height:14px}.marker-manager__empty[_ngcontent-%COMP%]{padding:16px 4px;color:var(--mat-sys-on-surface-variant);font-size:12px}.marker-manager__list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px;margin-top:8px}.marker-manager__list[_ngcontent-%COMP%] .marker-manager__empty[_ngcontent-%COMP%]{padding-block:4px}.marker-manager__group[_ngcontent-%COMP%]{border:1px solid var(--mat-sys-outline-variant);border-radius:6px;padding:6px 8px;background:color-mix(in srgb,var(--mat-sys-surface-container) 50%,transparent)}.marker-manager__group-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-2);margin-bottom:4px;cursor:pointer}.marker-manager__group-chevron[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px;color:var(--mat-sys-on-surface-variant);flex-shrink:0}.marker-manager__group-name[_ngcontent-%COMP%]{font-size:12px;font-weight:600;color:var(--mat-sys-on-surface);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.marker-manager__group-count[_ngcontent-%COMP%]{font-size:11px;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-highest);border-radius:10px;padding:1px 7px}.marker-manager__row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-2);padding:4px;border-radius:4px}.marker-manager__row[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container)}.marker-manager__row--editing[_ngcontent-%COMP%]{background:var(--mat-sys-secondary-container)}.marker-manager__row--disabled[_ngcontent-%COMP%], .marker-manager__row--paused[_ngcontent-%COMP%]{opacity:.5}.marker-manager__row-name[_ngcontent-%COMP%]{font-size:12px;font-weight:500;color:var(--mat-sys-on-surface);min-width:64px}.marker-manager__row-bpf[_ngcontent-%COMP%]{font-size:11px;color:var(--mat-sys-on-surface-variant);font-family:var(--mat-sys-label-large-font, monospace);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:200px}.marker-manager__row-spacer[_ngcontent-%COMP%]{flex:1}.marker-manager__swatch[_ngcontent-%COMP%]{width:14px;height:14px;border-radius:3px;flex-shrink:0;border:1px solid var(--mat-sys-outline-variant)}.marker-manager__swatch--default[_ngcontent-%COMP%]{background:var(--mat-sys-primary)}.marker-manager__chip[_ngcontent-%COMP%]{font-size:10px;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-highest);border-radius:8px;padding:1px 6px;white-space:nowrap}.marker-manager__chip--links[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.marker-manager__chip--dir[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary-container);background:var(--mat-sys-tertiary-container);text-transform:uppercase}.marker-manager__chip--inherited[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container)}.marker-manager__chip--tag[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.marker-manager[_ngcontent-%COMP%] .form-field[_ngcontent-%COMP%]{width:100%;min-width:0;margin:0}.marker-manager[_ngcontent-%COMP%] .global-prefix[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant)}.marker-manager[_ngcontent-%COMP%] .color-input[_ngcontent-%COMP%]{display:block;appearance:none;border:0;border-radius:var(--gns3-density-radius-sm);cursor:pointer;block-size:20px;inline-size:100%;box-sizing:border-box}.marker-manager[_ngcontent-%COMP%] .color-input[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--mat-sys-primary);outline-offset:3px}.marker-manager[_ngcontent-%COMP%] .add-button[_ngcontent-%COMP%]{height:28px;font-size:11px;line-height:1}.marker-manager[_ngcontent-%COMP%] .add-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:14px;width:14px;height:14px}.marker-manager[_ngcontent-%COMP%] .add-button--active[_ngcontent-%COMP%]{background:var(--mat-sys-primary-container);color:var(--mat-sys-primary)}.marker-manager[_ngcontent-%COMP%] .marker-manager__row[_ngcontent-%COMP%] button.mat-mdc-icon-button[_ngcontent-%COMP%]{--gns3-action-icon-size: 16px;width:28px;height:28px;--mat-icon-button-state-layer-size: 28px;border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: 28px}.marker-manager[_ngcontent-%COMP%] .marker-manager__row[_ngcontent-%COMP%] button.mat-mdc-icon-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}.marker-manager[_ngcontent-%COMP%] .marker-manager__row[_ngcontent-%COMP%] button.mat-mdc-icon-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;vertical-align:middle}.marker-manager__toggle-spinner[_ngcontent-%COMP%]{--mdc-circular-progress-active-indicator-color: var(--mat-sys-primary)}.marker-manager__btn-spinner[_ngcontent-%COMP%]{--mdc-circular-progress-active-indicator-color: var(--mat-sys-on-primary)}@container marker-pane (max-width: 800px){.marker-manager__definition-grid[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}}@container marker-pane (max-width: 480px){.marker-manager__definition-grid[_ngcontent-%COMP%]{grid-template-columns:minmax(0,1fr)}}.resize-handle[_ngcontent-%COMP%]{position:absolute;z-index:100;opacity:0;transition:opacity var(--gns3-motion-duration-standard) ease}.marker-manager[_ngcontent-%COMP%]:hover .resize-handle[_ngcontent-%COMP%]{opacity:1}.resize-handle.resize-handle-top[_ngcontent-%COMP%]{top:-4px;left:12px;right:12px;height:12px;cursor:ns-resize;background:transparent}.resize-handle.resize-handle-right[_ngcontent-%COMP%]{top:12px;right:-4px;bottom:12px;width:12px;cursor:ew-resize;background:transparent}.resize-handle.resize-handle-bottom[_ngcontent-%COMP%]{bottom:0;left:12px;right:12px;height:12px;cursor:ns-resize;background:transparent}.resize-handle.resize-handle-left[_ngcontent-%COMP%]{top:12px;left:-4px;bottom:12px;width:12px;cursor:ew-resize;background:transparent}.resize-handle.resize-handle-top-left[_ngcontent-%COMP%]{top:-6px;left:-6px;width:20px;height:20px;cursor:nwse-resize;background:transparent}.resize-handle.resize-handle-top-right[_ngcontent-%COMP%]{top:-6px;right:-6px;width:20px;height:20px;cursor:nesw-resize;background:transparent}.resize-handle.resize-handle-bottom-left[_ngcontent-%COMP%]{bottom:0;left:-6px;width:20px;height:20px;cursor:nesw-resize;background:transparent}.resize-handle.resize-handle-bottom-right[_ngcontent-%COMP%]{bottom:0;right:-6px;width:20px;height:20px;cursor:nwse-resize;background:transparent}.gns3-replay-tags[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px}.gns3-replay-tags__row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;background:var(--mat-sys-surface-container)}.gns3-replay-tags__row[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container-high)}.gns3-replay-tags__tag[_ngcontent-%COMP%]{font-size:12px;font-weight:600;color:var(--mat-sys-primary);background:var(--mat-sys-primary-container);border-radius:8px;padding:2px 8px;white-space:nowrap}.gns3-replay-tags__meta[_ngcontent-%COMP%]{font-size:11px;color:var(--mat-sys-on-surface-variant);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gns3-replay-tags__chip[_ngcontent-%COMP%]{font-size:10px;border-radius:8px;padding:1px 6px;white-space:nowrap}.gns3-replay-tags__chip--capturing[_ngcontent-%COMP%]{color:var(--mat-sys-on-error-container);background:var(--mat-sys-error-container)}.gns3-replay-tags__action[_ngcontent-%COMP%]{min-width:0}.gns3-replay-tags__pause-panel[_ngcontent-%COMP%]{margin:0 8px 6px;padding:10px 12px;border:1px solid var(--mat-sys-outline-variant);border-radius:6px;background:var(--mat-sys-surface-container-low)}.gns3-replay-tags__pause-title[_ngcontent-%COMP%]{font-size:11px;font-weight:500;color:var(--mat-sys-on-surface);margin-bottom:6px}.gns3-replay-tags__pause-list[_ngcontent-%COMP%]{margin:0 0 8px;padding-left:18px;font-size:11px;color:var(--mat-sys-on-surface-variant)}.gns3-replay-tags__pause-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{margin-bottom:2px;word-break:break-word}.gns3-replay-tags__pause-actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:8px}"],changeDetection:0})}return n})();function R4(n,o){return n.ts===o.ts&&n.node_id===o.node_id&&n.link_id===o.link_id&&n.marker===o.marker&&n.frame_number===o.frame_number}var $Ae=n=>`${n.ts}\0${n.node_id}\0${n.link_id}\0${n.marker}`,HAe=200,UAe=50,WAe=8,GAe="marker-replay-active",r$=2e3,Sc=(()=>{class n{httpController;toaster;constructor(e,t){this.httpController=e,this.toaster=t}replayRange(e,t,i,a,s){let d=[a?`filter=${encodeURIComponent(a)}`:null,s?`link=${encodeURIComponent(s)}`:null].filter(p=>!!p).join("&");return this.httpController.get(e,`/projects/${t}/markers/tags/${i}/replay/range${d?`?${d}`:""}`)}replayFrameDetail(e,t,i,a){return this.httpController.get(e,`/projects/${t}/markers/tags/${i}/replay/frame/detail?ts=${a.ts}&node_id=${a.node_id}&link_id=${a.link_id}&marker=${encodeURIComponent(a.marker)}`)}tag=z(-1);loadingRange=z(!1);rangeError=z(null);rangeErrorKind=z(null);filter=z("");appliedFilter=z("");appliedLink=z(null);filterError=z(null);sources=z([]);totalFrames=z(0);totalUnfiltered=z(0);frames=z([]);currentFrameIndex=z(0);searchQuery=z("");detail=z({status:"idle"});lastOkDetail=z(null);pinnedDetails=z([]);pinSeq=0;peek=z(null);peekSeq=0;currentFrame=Ne(()=>this.frames()[this.currentFrameIndex()]??null);isEmpty=Ne(()=>this.tag()>=0&&!this.loadingRange()&&this.rangeError()===null&&this.totalFrames()===0);controller=null;projectId="";destroy$=new Ye;detailTrigger$=new Ye;detailCache=new Map;pipelinesReady=!1;highlightedLinkId=null;loadEpoch=0;start(e,t,i){this.controller=e,this.projectId=t,this.tag.set(i),this.pipelinesReady||(this.pipelinesReady=!0,this.detailTrigger$.pipe(tg(HAe),He(this.destroy$),Qn(a=>{a&&this.detail.set({status:"loading"})}),Dn(a=>a?this.fetchDetail(a):Vt({status:"idle"}))).subscribe(a=>{this.detail.set(a),a.status==="ok"&&this.lastOkDetail.set(a.detail)})),this.load("")}load(e,t=null){if(!this.controller||this.tag()<0)return;let i=++this.loadEpoch;this.loadingRange.set(!0),this.rangeError.set(null),this.rangeErrorKind.set(null),this.filterError.set(null),this.replayRange(this.controller,this.projectId,this.tag(),e||void 0,t||void 0).pipe(He(this.destroy$)).subscribe({next:a=>{if(i!==this.loadEpoch)return;if(this.loadingRange.set(!1),this.appliedFilter.set(e),this.appliedLink.set(t),this.sources.set(a.sources??[]),this.totalFrames.set(a.frame_count),!e&&!t)this.totalUnfiltered.set(a.frame_count);else if(!e&&t){let d=(a.sources??[]).reduce((p,u)=>p+u.count,0);d>0&&this.totalUnfiltered.set(d)}this.clearWindowState(),this.frames.set(a.frames??[]),this.currentFrameIndex.set(0);let s=this.frames()[0];s&&this.detailTrigger$.next(s),this.applyHighlight(s?.link_id??null)},error:a=>{if(i!==this.loadEpoch)return;this.loadingRange.set(!1);let s=a.error?.message||a.message||"Failed to load replay timeline",d=this.errStatus(a),u=d===409?"gate":d===404?"missing":d===501?"unavailable":d===400&&!!e?"filter":"network";if(u==="filter"){this.filterError.set(s);return}this.rangeErrorKind.set(u),this.rangeError.set(s),this.toaster.error(s)}})}destroy(){this.destroy$.next(),this.destroy$.complete(),this.detailTrigger$.complete(),this.clearHighlight()}setCurrentIndex(e){let t=this.frames();if(t.length===0)return!1;let i=Math.max(0,Math.min(t.length-1,e));return i===this.currentFrameIndex()?!1:(this.currentFrameIndex.set(i),this.detailTrigger$.next(t[i]),this.applyHighlight(t[i].link_id),!0)}applyFilter(e){let t=e.trim();if(this.filter.set(t),t.length>r$){this.filterError.set(`Filter is longer than ${r$} characters`);return}t!==this.appliedFilter()&&this.load(t,this.appliedLink())}applyLinkFilter(e){let t=e&&e===this.appliedLink()?null:e;t!==this.appliedLink()&&this.load(this.appliedFilter(),t)}clearFilter(){this.filter.set(""),this.appliedFilter()!==""&&this.load("",this.appliedLink())}clearAllFilters(){this.filter.set(""),this.load("",null)}pinCurrent(){let e=this.currentFrame();if(!e)return;let t=this.pinnedDetails();if(t.some(s=>R4(s.frame,e)))return;let i={id:++this.pinSeq,frame:e,listStartTs:this.frames()[0]?.ts??e.ts,state:{status:"loading"}},a=[...t,i];a.length>WAe&&(a.shift(),this.toaster.warning("Pin limit reached \u2014 unpinned the oldest frame.")),this.pinnedDetails.set(a),this.fetchDetail(e).pipe(He(this.destroy$)).subscribe(s=>this.updatePinState(i.id,s))}unpin(e){this.pinnedDetails.set(this.pinnedDetails().filter(t=>t.id!==e)),this.pinRects.delete(e)}openPeek(e,t){let i=++this.peekSeq;this.peek.set({seq:i,frame:e,at:t,detail:{status:"loading"}}),this.fetchDetail(e).pipe(He(this.destroy$)).subscribe(a=>{let s=this.peek();s&&s.seq===i&&this.peek.set(ze(q({},s),{detail:a}))})}closePeek(){this.peek.set(null)}retryPeek(){let e=this.peek();!e||e.detail.status==="ok"||this.openPeek(e.frame,e.at)}pinRects=new Map;dockVersion=z(0);reportPinRect(e,t,i){let a=this.pinRects.get(e);this.pinRects.set(e,ze(q({},t),{docked:i})),a?.docked!==i&&this.dockVersion.update(s=>s+1)}pinSiblingRects(e){let t=[];for(let[i,a]of this.pinRects)i!==e&&t.push({left:a.left,top:a.top,width:a.width,height:a.height});return t}freedPinRects(){return this.pinnedDetails().map(e=>this.pinRects.get(e.id)).filter(e=>!!e&&!e.docked).map(({left:e,top:t,width:i,height:a})=>({left:e,top:t,width:i,height:a}))}dockedPinIds(){return this.pinnedDetails().filter(e=>this.pinRects.get(e.id)?.docked!==!1).map(e=>e.id)}lastUserSize=null;rememberWindowSize(e,t){this.lastUserSize={width:e,height:t}}userWindowSize(){return this.lastUserSize}retryPin(e){let t=this.pinnedDetails().find(i=>i.id===e);!t||t.state.status==="ok"||(this.updatePinState(e,{status:"loading"}),this.fetchDetail(t.frame).pipe(He(this.destroy$)).subscribe(i=>this.updatePinState(e,i)))}updatePinState(e,t){this.pinnedDetails.update(i=>i.map(a=>a.id===e?ze(q({},a),{state:t}):a))}retryDetail(){let e=this.detail(),t=e.status==="error"?e.frame:this.currentFrame();t&&this.detailTrigger$.next(t)}reloadTimeline(){this.load(this.appliedFilter(),this.appliedLink())}clearHighlight(){this.applyHighlight(null)}applyHighlight(e){e!==this.highlightedLinkId&&(this.setLinkClass(this.highlightedLinkId,!1),this.highlightedLinkId=e,this.setLinkClass(e,!0))}setLinkClass(e,t){e&&Lt("svg#map").select(`g.link[link_id="${e}"]`).select("path.ethernet_link, path.serial_link").classed(GAe,t)}errStatus(e){return e?.originalError?.status??e?.status}clearWindowState(){this.frames.set([]),this.currentFrameIndex.set(0),this.detail.set({status:"idle"}),this.lastOkDetail.set(null)}fetchDetail(e){let t=$Ae(e),i=this.detailCache.get(t);return i?(this.detailCache.delete(t),this.detailCache.set(t,i),Vt({status:"ok",detail:i})):this.controller?this.replayFrameDetail(this.controller,this.projectId,this.tag(),e).pipe(Pt(a=>{for(this.detailCache.set(t,a);this.detailCache.size>UAe;){let s=this.detailCache.keys().next().value;if(s===void 0)break;this.detailCache.delete(s)}return{status:"ok",detail:a}}),ei(a=>{let s=this.errStatus(a),d=s===501||s===502?"unavailable":s===404?"missing":"network",p=a.error?.message||a.message||"Failed to decode frame";return Vt({status:"error",kind:d,message:p,frame:e})})):Vt({status:"idle"})}static \u0275fac=function(t){return new(t||n)(_e(sn),_e(re))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();function il(n,o,e){let t=Math.max(0,o.width-n.width),i=Math.max(e,o.height-n.height);return{left:Math.min(Math.max(n.left,0),t),top:Math.min(Math.max(n.top,e),i),width:n.width,height:n.height}}var qAe=32,QAe=96;function tm(n,o,e,t,i){return{width:Math.min(Math.max(n,t),Math.max(e.width-qAe,t)),height:Math.min(Math.max(o,i),Math.max(e.height-QAe,i))}}var T2=440,E2=360,$s=12,KAe=80;function z4(n,o,e,t={width:T2,height:E2}){let a=e.width-16,s=Math.max($s,a-16),d=Math.max(1,Math.floor((s+$s)/(t.width+$s))),p=Math.max(200,Math.min(t.width,Math.floor((s-(d-1)*$s)/d))),u=Math.max(1,Math.ceil(o/d)),g=Math.max($s,e.height-16-KAe),C=Math.max(160,Math.min(t.height,Math.floor((g-(u-1)*$s)/u))),M=n%d,x=Math.floor(n/d);return{left:16+M*(p+$s),top:e.height-16-C-x*(C+$s),width:p,height:C}}var XAe=12;function s$(n,o,e=XAe){let t=n.left,i=n.top,a=e+1,s=e+1;for(let d of o){for(let p of[d.left,d.left+d.width+$s,d.left-$s-n.width]){let u=Math.abs(p-n.left);u<a&&(a=u,t=p)}for(let p of[d.top,d.top+d.height+$s,d.top-$s-n.height]){let u=Math.abs(p-n.top);u<s&&(s=u,i=p)}}return{left:t,top:i,width:n.width,height:n.height}}function l$(n,o,e){if(n.length===0)return null;let t=n.reduce((s,d)=>s.left+s.width>=d.left+d.width?s:d),i=t.left+t.width+$s,a=t.top;if(i+o.width>e.width-16){let s=n.reduce((p,u)=>p.top+p.height>=u.top+u.height?p:u);i=n.reduce((p,u)=>p.left<=u.left?p:u).left,a=s.top+s.height+$s}return i=Math.max(0,Math.min(i,Math.max(0,e.width-o.width))),a=Math.max(64,Math.min(a,Math.max(64,e.height-o.height))),{left:i,top:a}}function c$(n){return n.label}function d$(n){return`${n.name} ${n.label}`.toLowerCase()}function m$(n){let o=[],e=n;for(;;){let t=e.lastIndexOf("/");if(t<=0)return o;e=e.slice(0,t),o.push(e)}}function p$(n){let o=n.label||n.name;return n.filter_expr&&(o+=` \xB7 ${n.filter_expr}`),n.pos!==void 0&&n.size!==void 0&&(o+=` [${n.pos}+${n.size}]`),o}var YAe=new Set(["geninfo"]);function xC(n){return n.element==="proto"&&YAe.has(n.name)}function u$(n){return(n.children??[]).filter(o=>!xC(o))}function O2(n,o){let e=new Map;for(let a of n)xC(a)||e.set(a.name,(e.get(a.name)??0)+1);let t=new Map,i=[];for(let a of n){if(xC(a))continue;let s=t.get(a.name)??0;t.set(a.name,s+1);let d=(e.get(a.name)??1)>1?`${a.name}[${s}]`:a.name;i.push({node:a,path:o?`${o}/${d}`:d})}return i}function L4(n,o){let e=[],t=(i,a,s,d)=>{let p=new Map(O2(i,s).map(u=>[u.node,u.path]));i.forEach((u,g)=>{if(xC(u))return;let C=`${a}/${g}`,M=p.get(u)??u.name,x=u$(u);e.push({key:C,path:M,node:u,depth:d,hasChildren:x.length>0}),x.length>0&&o.has(C)&&t(x,C,M,d+1)})};return t(n,"","",0),e}function D2(n){return V4(n,ZAe)}var g$="frame",ZAe=new Set;function V4(n,o){let e=[],t=(i,a)=>{i.forEach((s,d)=>{if(xC(s)||o.has(s.name))return;let p=`${a}/${d}`,u=u$(s);u.length>0&&e.push(p),t(u,p)})};return t(n,""),e}function JAe(n){let o=new Map,e=(t,i)=>{for(let{node:a,path:s}of O2(t,i)){let d=a.children??[];O2(d,s).length===0?o.set(s,a.label??""):e(d,s)}};return e(n,""),o}function h$(n){if(n.length<2)return new Set;let o=n.map(JAe),e=new Set;for(let i of o)for(let a of i.keys())e.add(a);let t=new Set;for(let i of e){let a=o[0].get(i);o.some(s=>s.get(i)!==a)&&t.add(i)}return t}function _$(n){let o=new Set;for(let e of n){let t=e.indexOf("/");for(;t>0;)o.add(e.slice(0,t)),t=e.indexOf("/",t+1)}return o}var B4=n=>String(n).padStart(2,"0");function e5e(n){let o=new Date(n*1e3);return`${B4(o.getHours())}:${B4(o.getMinutes())}:${B4(o.getSeconds())}`}function I2(n){let[o,e=""]=n.split("."),t=(e+"000000").slice(0,6);return`${e5e(Number(o))}.${t}`}function f$(n,o){let e=Number(n)-Number(o);return`${e<0?"\u2212":"+"}${Math.abs(e).toFixed(3)}s`}var t5e=["scroller"],n5e=(n,o)=>o.index;function i5e(n,o){if(n&1){let e=R();ii(0,"div",9),Tc("click",function(){let i=y(e).$implicit,a=h(2);return w(a.svc.setCurrentIndex(i.index))})("dblclick",function(i){let a=y(e).$implicit,s=h(2);return w(s.onRowDblClick(i,a.frame))})("keydown",function(i){y(e);let a=h(2);return w(a.onRowKey(i))}),ii(1,"span",10),c(2),Si(),ii(3,"span",11),c(4),Si(),ii(5,"span",11),c(6),Si(),ii(7,"span",12),c(8),Si(),ii(9,"span",13),c(10),Si(),ii(11,"span",14),c(12),Si()()}if(n&2){let e=o.$implicit,t=h(2);Tt("--pkt-bg",e.frame.bg?"#"+e.frame.bg:null)("--pkt-fg",e.frame.fg?"#"+e.frame.fg:null),ne("gns3-replay__row--selected",e.index===t.svc.currentFrameIndex()),pr("title",e.frame.info??""),Ce("data-index",e.index),m(2),N(e.time),m(2),N(e.frame.src??"\u2014"),m(2),N(e.frame.dst??"\u2014"),m(2),N(e.frame.proto??"\u2014"),m(2),N(e.frame.len),m(2),N(e.frame.info??"")}}function o5e(n,o){if(n&1&&(kr(0,"div",7),Q(1,i5e,13,14,"div",8,n5e),kr(3,"div",7)),n&2){let e=o;Tt("height",e.top,"px"),m(),K(e.rows),m(2),Tt("height",e.bottom,"px")}}var nm=22,a5e=8,r5e=24,s5e=40,l5e={time:70,src:80,dst:80,proto:40,len:34},c5e=600,d5e="minmax(100px, 1fr)",v$="--gns3-replay-cols";function C$(n){let o=e=>e===null?d5e:`${e}px`;return`${n.time}px ${o(n.src)} ${o(n.dst)} ${n.proto}px ${n.len}px minmax(110px, 2fr)`}var b$=(()=>{class n{svc=f(Sc);host=f(Kt);ROW_H=nm;colWidths={time:104,src:null,dst:null,proto:58,len:42};cleanupColDrag=null;scroller;viewObserver=null;scrollTop=z(0);viewH=z(0);constructor(){this.host.nativeElement.style.setProperty(v$,C$(this.colWidths)),Vn(()=>{this.svc.frames(),this.scrollTop.set(0);let e=this.scroller?.nativeElement;e&&(e.scrollTop=0)})}ngAfterViewInit(){let e=this.scroller?.nativeElement;e&&(this.viewH.set(e.clientHeight),typeof ResizeObserver<"u"&&(this.viewObserver=new ResizeObserver(()=>this.viewH.set(e.clientHeight)),this.viewObserver.observe(e)))}ngOnDestroy(){this.viewObserver?.disconnect(),this.viewObserver=null,this.teardownColDrag()}renderWindow(e){let t=this.viewH()>0?this.viewH():s5e*nm;return[Math.max(0,Math.floor(this.scrollTop()/nm)-a5e),Math.min(e,Math.ceil((this.scrollTop()+t)/nm)+r5e)]}frameSlice=Ne(()=>{let e=this.svc.frames(),[t,i]=this.renderWindow(e.length),a=[];for(let s=t;s<i;s++)a.push({index:s,frame:e[s],time:I2(e[s].ts)});return{rows:a,top:t*nm,bottom:(e.length-i)*nm}});onScroll(e){let t=e.target;this.scrollTop.set(t.scrollTop),this.viewH.set(t.clientHeight)}onRowKey(e){if(e.key!=="ArrowDown"&&e.key!=="ArrowUp")return;e.preventDefault();let t=this.svc.currentFrameIndex()+(e.key==="ArrowDown"?1:-1);this.svc.setCurrentIndex(t)&&this.scrollSelectionIntoView(t)}scrollSelectionIntoView(e){let t=e*nm,i=this.scroller?.nativeElement;if(i&&t>=i.scrollTop&&t+nm<=i.scrollTop+i.clientHeight)return;let a=Math.max(0,t+nm/2-(i?.clientHeight??0)/2);this.scrollTop.set(a),i&&(i.scrollTop=a)}onRowDblClick(e,t){this.svc.openPeek(t,{x:e.clientX,y:e.clientY})}startColDrag(e,t){if(e.button!==0)return;e.preventDefault(),e.stopPropagation();let i=e.currentTarget.parentElement,a=this.colWidths[t],s=typeof a=="number"?a:i?.offsetWidth||150,d=e.clientX,p=g=>{let C=Math.min(Math.max(s+g.clientX-d,l5e[t]),c5e);this.colWidths[t]=C,this.host.nativeElement.style.setProperty(v$,C$(this.colWidths))},u=()=>this.teardownColDrag();document.addEventListener("mousemove",p),document.addEventListener("mouseup",u),this.cleanupColDrag=()=>{document.removeEventListener("mousemove",p),document.removeEventListener("mouseup",u)}}teardownColDrag(){this.cleanupColDrag?.(),this.cleanupColDrag=null}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-replay-packet-list"]],viewQuery:function(t,i){if(t&1&&Kn(t5e,5),t&2){let a;gt(a=ht())&&(i.scroller=a.first)}},decls:23,vars:1,consts:[["scroller",""],[1,"gns3-replay__list"],[1,"gns3-replay__list-head"],[1,"gns3-replay__list-cols","gns3-replay__list-cols--frames"],[1,"gns3-replay__col-head"],["title","Drag to resize",1,"gns3-replay__col-grip",3,"mousedown"],[1,"gns3-replay__list-scroll",3,"scroll"],[1,"gns3-replay__list-pad"],["role","row","tabindex","0",1,"gns3-replay__row",3,"gns3-replay__row--selected","--pkt-bg","--pkt-fg","title"],["role","row","tabindex","0",1,"gns3-replay__row",3,"click","dblclick","keydown","title"],[1,"gns3-replay__cell","gns3-replay__cell--time"],[1,"gns3-replay__cell","gns3-replay__cell--addr"],[1,"gns3-replay__cell","gns3-replay__cell--proto"],[1,"gns3-replay__cell","gns3-replay__cell--len"],[1,"gns3-replay__cell","gns3-replay__cell--info"]],template:function(t,i){if(t&1&&(ii(0,"div",1)(1,"div",2)(2,"div",3)(3,"span",4),c(4,"Time"),ii(5,"button",5),Tc("mousedown",function(s){return i.startColDrag(s,"time")}),Si()(),ii(6,"span",4),c(7,"Source"),ii(8,"button",5),Tc("mousedown",function(s){return i.startColDrag(s,"src")}),Si()(),ii(9,"span",4),c(10,"Destination"),ii(11,"button",5),Tc("mousedown",function(s){return i.startColDrag(s,"dst")}),Si()(),ii(12,"span",4),c(13,"Proto"),ii(14,"button",5),Tc("mousedown",function(s){return i.startColDrag(s,"proto")}),Si()(),ii(15,"span",4),c(16,"Len"),ii(17,"button",5),Tc("mousedown",function(s){return i.startColDrag(s,"len")}),Si()(),ii(18,"span"),c(19,"Info"),Si()()(),ii(20,"div",6,0),Tc("scroll",function(s){return i.onScroll(s)}),T(22,o5e,4,4),Si()()),t&2){let a;m(22),E((a=i.frameSlice())?22:-1,a)}},dependencies:[fe],styles:[".gns3-replay__list[_ngcontent-%COMP%]{display:flex;flex-direction:column;min-width:0;min-height:0;flex:1}.gns3-replay__list-head[_ngcontent-%COMP%]{position:sticky;top:0;z-index:1;background:var(--mat-sys-surface);border-bottom:1px solid var(--mat-sys-outline-variant);flex-shrink:0}.gns3-replay__list-cols[_ngcontent-%COMP%]{display:grid;padding:4px 10px 3px;font-size:9px;font-weight:600;letter-spacing:.4px;text-transform:uppercase;color:var(--mat-sys-on-surface-variant)}.gns3-replay__list-cols--frames[_ngcontent-%COMP%]{grid-template-columns:var(--gns3-replay-cols)}.gns3-replay__col-head[_ngcontent-%COMP%]{border-right:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 70%,transparent)}.gns3-replay__list-cols--frames[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:last-child{border-right:none}.gns3-replay__col-head[_ngcontent-%COMP%]{position:relative;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:8px}.gns3-replay__col-grip[_ngcontent-%COMP%]{position:absolute;top:-5px;bottom:-5px;right:-5px;width:9px;padding:0;border:none;background:transparent;cursor:col-resize}.gns3-replay__col-grip[_ngcontent-%COMP%]:hover, .gns3-replay__col-grip[_ngcontent-%COMP%]:active{background:color-mix(in srgb,var(--mat-sys-primary) 35%,transparent)}.gns3-replay__list-scroll[_ngcontent-%COMP%]{flex:1;min-height:0;overflow:auto}.gns3-replay__row[_ngcontent-%COMP%]{display:grid;grid-template-columns:var(--gns3-replay-cols);align-items:center;height:22px;padding:0 10px;font-family:var(--gns3-font-code);font-size:11px;color:var(--pkt-fg, var(--mat-sys-on-surface));background:var(--pkt-bg, transparent);cursor:default;outline:none}.gns3-replay__row[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container)}.gns3-replay__row[_ngcontent-%COMP%]:focus-visible{box-shadow:inset 0 0 0 1px var(--mat-sys-primary)}.gns3-replay__row--selected[_ngcontent-%COMP%]{background:var(--mat-sys-primary-container);color:var(--mat-sys-on-primary-container)}.gns3-replay__cell[_ngcontent-%COMP%]{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:8px}.gns3-replay__cell--len[_ngcontent-%COMP%]{text-align:right;font-variant-numeric:tabular-nums}.gns3-replay__cell--time[_ngcontent-%COMP%]{font-variant-numeric:tabular-nums}.gns3-replay__cell--proto[_ngcontent-%COMP%]{font-weight:600}"],changeDetection:0})}return n})();var m5e=["searchInput"],p5e=(n,o)=>o.key;function u5e(n,o){if(n&1){let e=R();r(0,"input",4,0),_("input",function(i){y(e);let a=h();return w(a.onSearchInput(i))})("keydown",function(i){y(e);let a=h();return w(a.onSearchKey(i))}),l(),r(2,"span",5),c(3),l(),r(4,"button",6),_("click",function(){y(e);let i=h();return w(i.prevMatch())}),r(5,"mat-icon"),c(6,"keyboard_arrow_up"),l()(),r(7,"button",7),_("click",function(){y(e);let i=h();return w(i.nextMatch())}),r(8,"mat-icon"),c(9,"keyboard_arrow_down"),l()(),r(10,"button",8),_("click",function(){y(e);let i=h();return w(i.closeSearch())}),r(11,"mat-icon"),c(12,"close"),l()()}if(n&2){let e=h();v("value",e.searchQuery()),m(3),N(e.matchLabel()),m(),v("disabled",!e.matchCount()),m(3),v("disabled",!e.matchCount())}}function g5e(n,o){if(n&1&&(r(0,"span",11),c(1),l()),n&2){let e=h();m(),X(" ",e.size," differ ")}}function h5e(n,o){n&1&&T(0,g5e,2,1,"span",11),n&2&&E(o.size?0:-1)}function _5e(n,o){if(n&1){let e=R();r(0,"button",12),_("click",function(){y(e);let i=h(2);return w(i.expandAll())}),r(1,"mat-icon"),c(2,"unfold_more"),l()(),r(3,"button",13),_("click",function(){y(e);let i=h(2);return w(i.collapseAll())}),r(4,"mat-icon"),c(5,"unfold_less"),l()()}}function f5e(n,o){if(n&1){let e=R();r(0,"span",9),c(1,"protocol tree"),l(),T(2,h5e,1,1),T(3,_5e,6,0),r(4,"button",10),_("click",function(){y(e);let i=h();return w(i.openSearch())}),r(5,"mat-icon"),c(6,"search"),l()()}if(n&2){let e,t=h();m(2),E((e=t.changedPaths())?2:-1,e),m(),E(t.hasExpandable()?3:-1)}}function v5e(n,o){n&1&&L(0,"span",15)}function C5e(n,o){if(n&1&&(r(0,"mat-icon",16),c(1),l()),n&2){let e=h().$implicit,t=h();m(),N(t.expanded().has(e.key)?"expand_more":"chevron_right")}}function b5e(n,o){n&1&&L(0,"span",17)}function x5e(n,o){if(n&1){let e=R();r(0,"button",20),_("click",function(i){y(e);let a=h().$implicit,s=h();return w(s.applyRowFilter(i,a))}),r(1,"mat-icon"),c(2,"filter_alt"),l()()}if(n&2){let e=h().$implicit;v("matTooltip","Apply as filter: "+e.node.filter_expr)}}function y5e(n,o){if(n&1){let e=R();r(0,"div",14),_("click",function(){let i=y(e).$implicit,a=h();return w(a.toggle(i))}),Q(1,v5e,1,0,"span",15,ni),T(3,C5e,2,1,"mat-icon",16)(4,b5e,1,0,"span",17),r(5,"span",18),c(6),l(),T(7,x5e,3,1,"button",19),l()}if(n&2){let e,t=o.$implicit,i=h();ne("gns3-replay__tree-row--proto",t.node.element==="proto")("gns3-replay__tree-row--selected",i.selectedKey()===t.key)("gns3-replay__tree-row--changed",((e=i.changedPaths())==null?null:e.has(t.path))??!1)("gns3-replay__tree-row--changed-subtree",i.diffAncestors().has(t.path))("gns3-replay__tree-row--match",i.matchPaths().has(t.path))("gns3-replay__tree-row--match-current",i.currentMatchKey()===t.key)("gns3-replay__tree-row--generated",t.node.generated??!1),v("title",i.rowTooltip(t.node)),Ce("data-key",t.key),m(),K(i.guides(t.depth)),m(2),E(t.hasChildren?3:4),m(3),N(i.rowText(t.node)),m(),E(t.node.filter_expr?7:-1)}}function w5e(n){return typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(n):n}var x$=(()=>{class n{tree=ee.required();changedPaths=ee(null);searchQuery=$("");autoExpand=ee(!1);searchOpen=z(!1);applyFilter=$o();expanded=z(new Set);selectedKey=z(null);matchIdx=z(0);host=f(Kt);searchInput=ln("searchInput");focusPending=!1;rows=Ne(()=>L4(this.tree(),this.expanded()));hasExpandable=Ne(()=>D2(this.tree()).length>0);diffAncestors=Ne(()=>{let e=this.changedPaths();return e?_$(e):new Set});allRows=Ne(()=>{let e=this.tree();return L4(e,new Set(D2(e)))});matches=Ne(()=>{let e=this.searchQuery().trim().toLowerCase();return e?this.allRows().filter(t=>d$(t.node).includes(e)):[]});matchPaths=Ne(()=>new Set(this.matches().map(e=>e.path)));matchCount=Ne(()=>this.matches().length);currentMatchKey=Ne(()=>{let e=this.matches();return e.length?e[Math.min(this.matchIdx(),e.length-1)].key:null});matchLabel=Ne(()=>{let e=this.matchCount();return e?`${Math.min(this.matchIdx(),e-1)+1}/${e}`:"0"});constructor(){Vn(()=>{if(!this.autoExpand())return;let e=this.tree();this.expanded.set(new Set(V4(e,new Set([g$]))))}),Vn(()=>{let e=this.matches();if(this.matchIdx.set(0),!e.length)return;let t=new Set(cf(()=>this.expanded())),i=!1;for(let a of e)for(let s of m$(a.key))t.has(s)||(t.add(s),i=!0);i&&this.expanded.set(t)}),Vn(()=>{let e=this.currentMatchKey();if(!e)return;let t=this.host.nativeElement.querySelector(`[data-key="${w5e(e)}"]`);t&&typeof t.scrollIntoView=="function"&&t.scrollIntoView({block:"center"})}),Vn(()=>{if(!this.searchOpen()||!this.focusPending)return;let e=this.searchInput()?.nativeElement;e&&(this.focusPending=!1,e.focus())})}rowText=c$;rowTooltip=p$;openSearch(){this.searchOpen.set(!0),this.focusPending=!0}closeSearch(){this.searchOpen.set(!1),this.searchQuery.set("")}onSearchInput(e){this.searchQuery.set(e.target.value)}onSearchKey(e){e.key==="Enter"?(e.preventDefault(),e.shiftKey?this.prevMatch():this.nextMatch()):e.key==="Escape"&&(e.preventDefault(),this.closeSearch())}nextMatch(){let e=this.matchCount();e&&this.matchIdx.set((Math.min(this.matchIdx(),e-1)+1)%e)}prevMatch(){let e=this.matchCount();e&&this.matchIdx.set((Math.min(this.matchIdx(),e-1)-1+e)%e)}toggle(e){if(this.selectedKey.set(e.key),!e.hasChildren)return;let t=new Set(this.expanded());t.has(e.key)?t.delete(e.key):t.add(e.key),this.expanded.set(t)}applyRowFilter(e,t){e.stopPropagation(),t.node.filter_expr&&this.applyFilter.emit(t.node.filter_expr)}expandAll(){this.expanded.set(new Set(D2(this.tree())))}collapseAll(){this.expanded.set(new Set)}guides(e){return Array.from({length:e})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-protocol-tree"]],viewQuery:function(t,i){t&1&&Bn(i.searchInput,m5e,5),t&2&&jn()},inputs:{tree:[1,"tree"],changedPaths:[1,"changedPaths"],searchQuery:[1,"searchQuery"],autoExpand:[1,"autoExpand"]},outputs:{searchQuery:"searchQueryChange",applyFilter:"applyFilter"},decls:6,vars:1,consts:[["searchInput",""],[1,"gns3-replay__tree-toolbar"],[1,"gns3-replay__tree"],[1,"gns3-replay__tree-row",3,"gns3-replay__tree-row--proto","gns3-replay__tree-row--selected","gns3-replay__tree-row--changed","gns3-replay__tree-row--changed-subtree","gns3-replay__tree-row--match","gns3-replay__tree-row--match-current","gns3-replay__tree-row--generated","title"],["type","text","placeholder","Find in packet\u2026","spellcheck","false",1,"gns3-replay__search-input",3,"input","keydown","value"],[1,"gns3-replay__search-count"],["matTooltip","Previous match (Shift+Enter)",1,"gns3-replay__tree-tool",3,"click","disabled"],["matTooltip","Next match (Enter)",1,"gns3-replay__tree-tool",3,"click","disabled"],["matTooltip","Close search (Esc)",1,"gns3-replay__tree-tool",3,"click"],[1,"gns3-replay__tree-summary"],["matTooltip","Find in packet details",1,"gns3-replay__tree-tool",3,"click"],["matTooltip","Fields differing across the pinned frames",1,"gns3-replay__tree-diff-count"],["matTooltip","Expand all",1,"gns3-replay__tree-tool",3,"click"],["matTooltip","Collapse all",1,"gns3-replay__tree-tool",3,"click"],[1,"gns3-replay__tree-row",3,"click","title"],[1,"gns3-replay__tree-guide"],[1,"gns3-replay__tree-chevron"],[1,"gns3-replay__tree-leaf"],[1,"gns3-replay__tree-text"],[1,"gns3-replay__tree-filter-btn",3,"matTooltip"],[1,"gns3-replay__tree-filter-btn",3,"click","matTooltip"]],template:function(t,i){t&1&&(r(0,"div",1),T(1,u5e,13,4)(2,f5e,7,2),l(),r(3,"div",2),Q(4,y5e,8,19,"div",3,p5e),l()),t&2&&(m(),E(i.searchOpen()||i.searchQuery()?1:2),m(3),K(i.rows()))},dependencies:[fe,ie,ce,st,pt],styles:[".gns3-replay__tree-toolbar[_ngcontent-%COMP%]{position:sticky;top:0;z-index:1;display:flex;align-items:center;gap:2px;padding:2px 6px 2px 10px;border-bottom:1px solid var(--mat-sys-outline-variant);background:var(--mat-sys-surface);flex-shrink:0}.gns3-replay__tree-summary[_ngcontent-%COMP%]{margin-right:auto;font-size:10px;letter-spacing:.4px;text-transform:uppercase;color:var(--mat-sys-on-surface-variant)}.gns3-replay__tree-diff-count[_ngcontent-%COMP%]{font-size:10px;color:var(--mat-sys-on-tertiary-container);background:var(--mat-sys-tertiary-container);border-radius:8px;padding:1px 7px;white-space:nowrap}.gns3-replay__tree-tool[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;border-radius:4px;background:transparent;color:var(--mat-sys-on-surface-variant);cursor:pointer}.gns3-replay__tree-tool[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container);color:var(--mat-sys-on-surface)}.gns3-replay__tree-tool[_ngcontent-%COMP%]:disabled{opacity:.4;cursor:default}.gns3-replay__tree-tool[_ngcontent-%COMP%]:disabled:hover{background:transparent;color:var(--mat-sys-on-surface-variant)}.gns3-replay__tree-tool[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:15px;width:15px;height:15px}.gns3-replay__search-input[_ngcontent-%COMP%]{flex:1;min-width:0;height:22px;border:none;outline:none;background:transparent;color:var(--mat-sys-on-surface);font-family:var(--gns3-font-code);font-size:11px}.gns3-replay__search-count[_ngcontent-%COMP%]{font-size:10px;color:var(--mat-sys-on-surface-variant);white-space:nowrap;font-variant-numeric:tabular-nums}.gns3-replay__tree[_ngcontent-%COMP%]{padding:2px 6px 8px 0}.gns3-replay__tree-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;min-height:20px;padding-right:8px;font-family:var(--gns3-font-code);font-size:11px;color:var(--mat-sys-on-surface);cursor:default}.gns3-replay__tree-row[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container)}.gns3-replay__tree-row--proto[_ngcontent-%COMP%]{font-weight:700}.gns3-replay__tree-row--selected[_ngcontent-%COMP%]{background:var(--mat-sys-primary-container);color:var(--mat-sys-on-primary-container)}.gns3-replay__tree-row--selected[_ngcontent-%COMP%] .gns3-replay__tree-chevron[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container)}.gns3-replay__tree-row--selected[_ngcontent-%COMP%] .gns3-replay__tree-guide[_ngcontent-%COMP%]{border-left-color:color-mix(in srgb,var(--mat-sys-on-primary-container) 25%,transparent)}.gns3-replay__tree-row--changed[_ngcontent-%COMP%]{background:var(--mat-sys-tertiary-container);color:var(--mat-sys-on-tertiary-container)}.gns3-replay__tree-row--changed[_ngcontent-%COMP%] .gns3-replay__tree-chevron[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary-container)}.gns3-replay__tree-row--changed-subtree[_ngcontent-%COMP%] .gns3-replay__tree-chevron[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary)}.gns3-replay__tree-row--match[_ngcontent-%COMP%]{background:var(--mat-sys-secondary-container);color:var(--mat-sys-on-secondary-container)}.gns3-replay__tree-row--match[_ngcontent-%COMP%] .gns3-replay__tree-chevron[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary-container)}.gns3-replay__tree-row--match-current[_ngcontent-%COMP%]{background:var(--mat-sys-primary);color:var(--mat-sys-on-primary)}.gns3-replay__tree-row--match-current[_ngcontent-%COMP%] .gns3-replay__tree-chevron[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary)}.gns3-replay__tree-guide[_ngcontent-%COMP%]{width:12px;align-self:stretch;flex-shrink:0;border-left:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 80%,transparent)}.gns3-replay__tree-chevron[_ngcontent-%COMP%]{font-size:14px;width:14px;height:14px;flex-shrink:0;color:var(--mat-sys-on-surface-variant)}.gns3-replay__tree-leaf[_ngcontent-%COMP%]{width:14px;flex-shrink:0}.gns3-replay__tree-text[_ngcontent-%COMP%]{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gns3-replay__tree-filter-btn[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:18px;height:18px;padding:0;margin-left:4px;flex-shrink:0;border:none;border-radius:4px;background:transparent;color:var(--mat-sys-on-surface-variant);opacity:.45;cursor:pointer}.gns3-replay__tree-filter-btn[_ngcontent-%COMP%]:hover{opacity:1;background:var(--mat-sys-surface-container)}.gns3-replay__tree-filter-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:13px;width:13px;height:13px}.gns3-replay__tree-row--generated[_ngcontent-%COMP%] .gns3-replay__tree-text[_ngcontent-%COMP%]{font-style:italic;color:var(--mat-sys-on-surface-variant)}.gns3-replay__tree-row--generated.gns3-replay__tree-row--selected[_ngcontent-%COMP%] .gns3-replay__tree-text[_ngcontent-%COMP%], .gns3-replay__tree-row--generated.gns3-replay__tree-row--changed[_ngcontent-%COMP%] .gns3-replay__tree-text[_ngcontent-%COMP%], .gns3-replay__tree-row--generated.gns3-replay__tree-row--match[_ngcontent-%COMP%] .gns3-replay__tree-text[_ngcontent-%COMP%], .gns3-replay__tree-row--generated.gns3-replay__tree-row--match-current[_ngcontent-%COMP%] .gns3-replay__tree-text[_ngcontent-%COMP%]{color:inherit}.gns3-replay__search-input[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--mat-sys-primary);outline-offset:2px}"],changeDetection:0})}return n})();function M5e(n,o){n&1&&(r(0,"span",8),c(1,"\u203A"),l())}function S5e(n,o){if(n&1&&(T(0,M5e,2,0,"span",8),r(1,"span",9),c(2),l()),n&2){let e=o.$implicit,t=o.$index;E(t!==0?0:-1),m(2),N(e)}}function k5e(n,o){if(n&1&&(r(0,"div",0),Q(1,S5e,3,2,null,null,ni),l()),n&2){let e=h();m(),K(e.breadcrumb())}}function P5e(n,o){n&1&&(r(0,"span",2),c(1),l()),n&2&&(m(),N(o))}function T5e(n,o){if(n&1){let e=R();r(0,"div",5)(1,"app-protocol-tree",10),rn("searchQueryChange",function(i){y(e);let a=h();return Xt(a.searchQuery,i)||(a.searchQuery=i),w(i)}),_("applyFilter",function(i){y(e);let a=h();return w(a.applyFilter.emit(i))}),l()()}if(n&2){let e=h();m(),v("tree",o.tree)("changedPaths",e.changedPaths())("autoExpand",e.autoExpand()),an("searchQuery",e.searchQuery)}}function E5e(n,o){n&1&&(r(0,"div",6),L(1,"mat-spinner",11),r(2,"span"),c(3,"Decoding frame\u2026"),l()()),n&2&&(m(),v("diameter",20))}function O5e(n,o){if(n&1){let e=R();r(0,"button",14),_("click",function(){y(e);let i=h(2);return w(i.reload.emit())}),c(1),l()}if(n&2){let e=h(2);m(),N(e.missingLabel())}}function D5e(n,o){if(n&1){let e=R();r(0,"button",14),_("click",function(){y(e);let i=h(2);return w(i.retry.emit())}),c(1,"Retry"),l()}}function I5e(n,o){if(n&1&&(r(0,"div",7)(1,"span"),c(2),l(),r(3,"div",12),T(4,O5e,2,1,"button",13)(5,D5e,2,0,"button",13),l()()),n&2){let e=h();m(2),N(e.errorMessage()),m(2),E(o.kind==="missing"?4:5)}}function A5e(n,o){n&1&&(r(0,"div",6)(1,"span"),c(2,"No frame decoded yet."),l()())}var H_=(()=>{class n{frame=ee.required();state=ee.required();changedPaths=ee(null);missingAction=ee("reload");holdDetail=ee(null);autoExpand=ee(!1);baselineTs=ee(null);searchQuery=$("");retry=$o();reload=$o();applyFilter=$o();applyLinkFilter=$o();svc=f(Sc);linksDataSource=f(so);nodesDataSource=f(Xn);detailError=Ne(()=>{let e=this.state();return e.status==="error"?e:null});shownDetail=Ne(()=>{let e=this.state();return e.status==="ok"?e.detail:e.status==="loading"?this.holdDetail():null});errorMessage=Ne(()=>{let e=this.state();return e.status!=="error"?"":e.kind==="unavailable"?"Frame detail unavailable \u2014 the sharkd engine is not usable on this server.":e.kind==="missing"?"Frame data is stale \u2014 the capture may have been rebuilt.":e.message});missingLabel=Ne(()=>this.missingAction()==="close"?"Close":"Reload timeline");breadcrumb=Ne(()=>{let e=this.shownDetail();return e?e.tree.filter(t=>t.element==="proto"&&t.name!=="geninfo"&&t.name!=="frame").map(t=>t.name.toUpperCase()):[]});frameTime(e){return I2(e)}deltaLabel(e){let t=this.baselineTs()??this.svc.frames()[0]?.ts;return t?f$(e,t):""}linkLabel(e){return Ku(e,this.linksDataSource,this.nodesDataSource)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-replay-detail-pane"]],inputs:{frame:[1,"frame"],state:[1,"state"],changedPaths:[1,"changedPaths"],missingAction:[1,"missingAction"],holdDetail:[1,"holdDetail"],autoExpand:[1,"autoExpand"],baselineTs:[1,"baselineTs"],searchQuery:[1,"searchQuery"]},outputs:{searchQuery:"searchQueryChange",retry:"retry",reload:"reload",applyFilter:"applyFilter",applyLinkFilter:"applyLinkFilter"},decls:14,vars:6,consts:[[1,"gns3-replay__crumbs"],[1,"gns3-replay__meta-chips"],[1,"gns3-replay__chip"],["type","button","matTooltip","Show only frames captured on this link",1,"gns3-replay__chip","gns3-replay__chip--link",3,"click"],[1,"gns3-replay__pane-body"],[1,"gns3-replay__tree-hold"],[1,"gns3-replay__detail-state"],[1,"gns3-replay__detail-error"],[1,"gns3-replay__crumb-sep"],[1,"gns3-replay__crumb"],[3,"searchQueryChange","applyFilter","tree","changedPaths","autoExpand","searchQuery"],[1,"gns3-replay__detail-spinner",3,"diameter"],[1,"gns3-replay__detail-error-actions"],["mat-raised-button","","color","primary"],["mat-raised-button","","color","primary",3,"click"]],template:function(t,i){if(t&1&&(T(0,k5e,3,0,"div",0),r(1,"div",1)(2,"span",2),c(3),l(),T(4,P5e,2,1,"span",2),r(5,"span",2),c(6),l(),r(7,"button",3),_("click",function(){return i.applyLinkFilter.emit(i.frame().link_id)}),c(8),l()(),r(9,"div",4),T(10,T5e,2,4,"div",5)(11,E5e,4,1,"div",6)(12,I5e,6,2,"div",7)(13,A5e,3,0,"div",6),l()),t&2){let a,s;E(i.breadcrumb().length?0:-1),m(3),N(i.frameTime(i.frame().ts)),m(),E((a=i.deltaLabel(i.frame().ts))?4:-1,a),m(2),X("",i.frame().len," B"),m(2),X(" ",i.linkLabel(i.frame().link_id)," "),m(2),E((s=i.shownDetail())?10:i.state().status==="loading"?11:(s=i.detailError())?12:13,s)}},dependencies:[fe,ie,Y,he,st,pt,rt,mt,x$],styles:["[_nghost-%COMP%]{display:flex;flex-direction:column;flex:1;min-height:0;border-radius:0 0 6px 6px}.gns3-replay__crumbs[_ngcontent-%COMP%]{display:flex;align-items:center;flex-wrap:wrap;gap:2px 6px;padding:4px 10px;border-bottom:1px solid var(--mat-sys-outline-variant);flex-shrink:0}.gns3-replay__crumb[_ngcontent-%COMP%]{font-size:10px;font-weight:600;letter-spacing:.5px;text-transform:uppercase;color:var(--mat-sys-on-surface-variant);white-space:nowrap}.gns3-replay__crumb-sep[_ngcontent-%COMP%]{font-size:10px;color:var(--mat-sys-outline)}.gns3-replay__meta-chips[_ngcontent-%COMP%]{display:flex;align-items:center;flex-wrap:wrap;gap:4px;padding:6px 10px;border-bottom:1px solid var(--mat-sys-outline-variant);flex-shrink:0}.gns3-replay__chip[_ngcontent-%COMP%]{font-size:10px;color:var(--mat-sys-on-surface);background:var(--mat-sys-surface-container);border-radius:8px;padding:2px 7px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;font-variant-numeric:tabular-nums}.gns3-replay__chip--link[_ngcontent-%COMP%]{border:none;font-family:inherit;cursor:pointer}.gns3-replay__chip--link[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container-high);color:var(--mat-sys-primary)}.gns3-replay__chip--link[_ngcontent-%COMP%]:focus-visible{outline:none;box-shadow:inset 0 0 0 1px var(--mat-sys-primary)}.gns3-replay__pane-body[_ngcontent-%COMP%]{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column}.gns3-replay__tree-hold[_ngcontent-%COMP%]{display:flex;flex-direction:column;min-height:0;flex:1}.gns3-replay__detail-state[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;padding:14px 12px;font-size:11px;color:var(--mat-sys-on-surface-variant)}.gns3-replay__detail-spinner[_ngcontent-%COMP%]{flex-shrink:0}.gns3-replay__detail-error[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px;padding:12px;font-size:11px;color:var(--mat-sys-error)}.gns3-replay__detail-error-actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end}"],changeDetection:0})}return n})();var N5e=()=>({top:!0}),F5e=()=>({right:!0}),R5e=()=>({bottom:!0}),z5e=()=>({left:!0}),L5e=()=>({top:!0,left:!0}),V5e=()=>({top:!0,right:!0}),B5e=()=>({bottom:!0,left:!0}),j5e=()=>({bottom:!0,right:!0});function $5e(n,o){if(n&1&&(Mi(),r(0,"svg",18),L(1,"line",19)(2,"circle",20),l()),n&2){let e=o,t=h();Tt("z-index",t.zVal()),m(),Ce("x1",e.x1)("y1",e.y1)("x2",e.x2)("y2",e.y2),m(),Ce("cx",e.x2)("cy",e.y2)}}function H5e(n,o){if(n&1){let e=R();r(0,"button",21),_("click",function(){y(e);let i=h();return w(i.reanchor())}),r(1,"mat-icon"),c(2,"anchor"),l()()}}function U5e(n,o){n&1&&(r(0,"span",16),c(1,"unanchored"),l())}var y$=(()=>{class n{zIndex=ee(1e3);zBoost=ee(0);pinned=ee.required();changedPaths=ee(null);windowFocused=$o();svc=f(Sc);mapScale=f(br);mapSettings=f(ui);MIN_W=320;MIN_H=220;winWidth=z(T2);winHeight=z(E2);winLeft=z(0);winTop=z(80);dragPinned=z(!1);dragging=z(!1);anchored=z(!1);leader=z(null);resizing=z(!1);placed=!1;zVal=Ne(()=>this.zIndex()+this.zBoost());observer=null;subs=[];rafId=null;rafPending=!1;constructor(){Vn(()=>{this.svc.pinnedDetails(),this.svc.dockVersion(),this.requestReposition()})}ngOnInit(){let e=Lt("svg#map").select("g.canvas").node();e&&typeof MutationObserver<"u"&&(this.observer=new MutationObserver(()=>this.requestReposition()),this.observer.observe(e,{attributes:!0,attributeFilter:["transform"]})),this.subs.push(this.mapScale.scaleChangeEmitter.subscribe({next:()=>this.requestReposition()}),this.mapSettings.mapRenderedEmitter.subscribe({next:()=>this.requestReposition()})),typeof window<"u"&&window.addEventListener("resize",this.onResize),this.requestReposition()}ngOnDestroy(){this.teardownDrag(),this.observer?.disconnect(),this.observer=null;for(let e of this.subs)e.unsubscribe();this.subs.length=0,typeof window<"u"&&window.removeEventListener("resize",this.onResize),this.rafId!==null&&typeof cancelAnimationFrame=="function"&&cancelAnimationFrame(this.rafId)}onResize=()=>this.requestReposition();requestReposition(){this.rafPending||(this.rafPending=!0,typeof requestAnimationFrame=="function"?this.rafId=requestAnimationFrame(()=>{this.rafPending=!1,this.reposition()}):(this.rafPending=!1,this.reposition()))}reposition(){let e=typeof window<"u"?window.innerWidth:this.winWidth(),t=typeof window<"u"?window.innerHeight:this.winHeight(),i=64,a=this.pinned();if(!this.dragPinned()&&!this.placed){let s=this.svc.userWindowSize()??{width:T2,height:E2},d=this.svc.freedPinRects(),p=d.length?l$(d,s,{width:e,height:t}):null;if(p)this.winWidth.set(s.width),this.winHeight.set(s.height),this.winLeft.set(p.left),this.winTop.set(p.top),this.dragPinned.set(!0);else{let u=this.svc.dockedPinIds(),g=u.indexOf(a.id),C=z4(g>=0?g:u.length,g>=0?u.length:u.length+1,{width:e,height:t},this.svc.userWindowSize()??void 0);this.winLeft.set(C.left),this.winTop.set(C.top),this.winWidth.set(C.width),this.winHeight.set(C.height)}}else if(this.dragPinned()){let s=il({left:this.winLeft(),top:this.winTop(),width:this.winWidth(),height:this.winHeight()},{width:e,height:t},i);this.winLeft.set(s.left),this.winTop.set(s.top)}else{let s=this.svc.dockedPinIds(),d=Math.max(0,s.indexOf(a.id)),p=z4(d,s.length,{width:e,height:t},this.svc.userWindowSize()??void 0);this.winLeft.set(p.left),this.winTop.set(p.top),this.winWidth.set(p.width),this.winHeight.set(p.height)}this.placed=!0,this.updateLeader(),this.reportRect()}updateLeader(){let e=this.pinned().frame,t=this.linkCenterScreen(e.link_id);if(!t){this.anchored.set(!1),this.leader.set(null);return}this.anchored.set(!0);let i=this.winLeft(),a=this.winTop(),s=t.x<i+this.winWidth()/2;this.leader.set({x1:s?i:i+this.winWidth(),y1:a+this.winHeight()/2,x2:t.x,y2:t.y})}linkCenterScreen(e){let t=Lt("svg#map").select(`g.link[link_id="${e}"]`).select("path.ethernet_link, path.serial_link").node();if(!t)return null;let i=t.getBoundingClientRect();return i.width===0&&i.height===0?null:{x:i.left+i.width/2,y:i.top+i.height/2}}validate=e=>{let t=e.rectangle.width,i=e.rectangle.height;return!(t!==void 0&&t<this.MIN_W||i!==void 0&&i<this.MIN_H)};onResizeStart(){this.resizing.set(!0)}onResizeEnd(e){let t=typeof window<"u"?window.innerWidth:this.winWidth(),i=typeof window<"u"?window.innerHeight:this.winHeight(),{width:a,height:s}=tm(e.rectangle.width||this.winWidth(),e.rectangle.height||this.winHeight(),{width:t,height:i},this.MIN_W,this.MIN_H);this.winWidth.set(a),this.winHeight.set(s),this.resizing.set(!1),this.svc.rememberWindowSize(a,s),this.dragPinned()||this.dragPinned.set(!0),this.requestReposition()}cleanupDrag=null;onHeaderMouseDown(e){if(e.button!==0||e.target?.closest("button, input"))return;e.preventDefault();let t=e.clientX,i=e.clientY,a=this.winLeft(),s=this.winTop(),d=64,p=!1,u=C=>{let M=C.clientX-t,x=C.clientY-i;if(!p&&Math.abs(M)<3&&Math.abs(x)<3)return;p=!0;let b=typeof window<"u"?window.innerWidth:this.winWidth(),P=typeof window<"u"?window.innerHeight:this.winHeight(),k=s$({left:a+M,top:s+x,width:this.winWidth(),height:this.winHeight()},this.svc.pinSiblingRects(this.pinned().id)),S=il(k,{width:b,height:P},d);this.winLeft.set(S.left),this.winTop.set(S.top),this.updateLeader()},g=()=>{this.teardownDrag(),this.dragging.set(!1),p&&this.dragPinned.set(!0),this.requestReposition()};document.addEventListener("mousemove",u),document.addEventListener("mouseup",g),this.cleanupDrag=()=>{document.removeEventListener("mousemove",u),document.removeEventListener("mouseup",g)},this.dragging.set(!0)}teardownDrag(){this.cleanupDrag?.(),this.cleanupDrag=null}reanchor(){this.dragPinned.set(!1),this.requestReposition()}reportRect(){this.svc.reportPinRect(this.pinned().id,{left:this.winLeft(),top:this.winTop(),width:this.winWidth(),height:this.winHeight()},!this.dragPinned())}unpinCurrent(){this.svc.unpin(this.pinned().id)}retryCurrentPin(){this.svc.retryPin(this.pinned().id)}onPaneApplyFilter(e){this.svc.applyFilter(e)}onPaneApplyLinkFilter(e){this.svc.applyLinkFilter(e)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-replay-detail-window"]],inputs:{zIndex:[1,"zIndex"],zBoost:[1,"zBoost"],pinned:[1,"pinned"],changedPaths:[1,"changedPaths"]},outputs:{windowFocused:"windowFocused"},decls:23,vars:44,consts:[[1,"gns3-replay__leader",3,"z-index"],["mwlResizable","",1,"gns3-replay__window","gns3-replay__window--snapshot",3,"mousedown","resizeStart","resizeEnd","validateResize","enableGhostResize"],["mwlResizeHandle","",1,"gns3-replay__resize-handle","gns3-replay__resize-handle--top",3,"resizeEdges"],["mwlResizeHandle","",1,"gns3-replay__resize-handle","gns3-replay__resize-handle--right",3,"resizeEdges"],["mwlResizeHandle","",1,"gns3-replay__resize-handle","gns3-replay__resize-handle--bottom",3,"resizeEdges"],["mwlResizeHandle","",1,"gns3-replay__resize-handle","gns3-replay__resize-handle--left",3,"resizeEdges"],["mwlResizeHandle","",1,"gns3-replay__resize-handle","gns3-replay__resize-handle--top-left",3,"resizeEdges"],["mwlResizeHandle","",1,"gns3-replay__resize-handle","gns3-replay__resize-handle--top-right",3,"resizeEdges"],["mwlResizeHandle","",1,"gns3-replay__resize-handle","gns3-replay__resize-handle--bottom-left",3,"resizeEdges"],["mwlResizeHandle","",1,"gns3-replay__resize-handle","gns3-replay__resize-handle--bottom-right",3,"resizeEdges"],[1,"gns3-replay__window-header",3,"mousedown"],[1,"gns3-replay__window-icon"],[1,"gns3-replay__window-title"],[1,"gns3-replay__window-frame"],["matTooltip","Dragged \u2014 click to return to the comparison row",1,"gns3-replay__window-reanchor"],["matTooltip","Close this comparison window",1,"gns3-replay__window-reanchor","gns3-replay__window-close",3,"click"],["matTooltip","This frame's link is not on the map",1,"gns3-replay__window-hint"],["missingAction","close",3,"searchQueryChange","reload","retry","applyFilter","applyLinkFilter","frame","state","changedPaths","baselineTs","searchQuery"],[1,"gns3-replay__leader"],[1,"gns3-replay__leader-line"],["r","4",1,"gns3-replay__leader-dot"],["matTooltip","Dragged \u2014 click to return to the comparison row",1,"gns3-replay__window-reanchor",3,"click"]],template:function(t,i){if(t&1&&(T(0,$5e,3,8,":svg:svg",0),r(1,"div",1),_("mousedown",function(){return i.windowFocused.emit()})("resizeStart",function(){return i.onResizeStart()})("resizeEnd",function(s){return i.onResizeEnd(s)}),L(2,"div",2)(3,"div",3)(4,"div",4)(5,"div",5)(6,"div",6)(7,"div",7)(8,"div",8)(9,"div",9),r(10,"div",10),_("mousedown",function(s){return i.onHeaderMouseDown(s)}),r(11,"mat-icon",11),c(12,"push_pin"),l(),r(13,"span",12),c(14),l(),r(15,"span",13),c(16),l(),T(17,H5e,3,0,"button",14),r(18,"button",15),_("click",function(){return i.unpinCurrent()}),r(19,"mat-icon"),c(20,"close"),l()(),T(21,U5e,2,0,"span",16),l(),r(22,"app-replay-detail-pane",17),rn("searchQueryChange",function(s){return Xt(i.svc.searchQuery,s)||(i.svc.searchQuery=s),s}),_("reload",function(){return i.unpinCurrent()})("retry",function(){return i.retryCurrentPin()})("applyFilter",function(s){return i.onPaneApplyFilter(s)})("applyLinkFilter",function(s){return i.onPaneApplyLinkFilter(s)}),l()()),t&2){let a;E((a=i.anchored()&&i.leader())?0:-1,a),m(),Tt("left",i.winLeft(),"px")("top",i.winTop(),"px")("width",i.winWidth(),"px")("height",i.winHeight(),"px")("z-index",i.zVal()),ne("gns3-replay__window--unanchored",!i.anchored())("gns3-replay__window--resizing",i.resizing())("gns3-replay__window--dragging",i.dragging()),v("validateResize",i.validate)("enableGhostResize",!1),m(),v("resizeEdges",at(36,N5e)),m(),v("resizeEdges",at(37,F5e)),m(),v("resizeEdges",at(38,R5e)),m(),v("resizeEdges",at(39,z5e)),m(),v("resizeEdges",at(40,L5e)),m(),v("resizeEdges",at(41,V5e)),m(),v("resizeEdges",at(42,B5e)),m(),v("resizeEdges",at(43,j5e)),m(5),N(i.pinned().frame.marker),m(2),X("#",i.pinned().frame.frame_number),m(),E(i.dragPinned()?17:-1),m(4),E(i.anchored()?-1:21),m(),v("frame",i.pinned().frame)("state",i.pinned().state)("changedPaths",i.changedPaths())("baselineTs",i.pinned().listStartTs),an("searchQuery",i.svc.searchQuery)}},dependencies:[fe,ie,ce,st,pt,H_,er,tr],styles:[".gns3-replay__resize-handle[_ngcontent-%COMP%]{position:absolute;z-index:100;background:transparent}.gns3-replay__resize-handle--top[_ngcontent-%COMP%]{top:-10px;left:12px;right:12px;height:10px;cursor:ns-resize}.gns3-replay__resize-handle--right[_ngcontent-%COMP%]{top:12px;right:-10px;bottom:12px;width:10px;cursor:ew-resize}.gns3-replay__resize-handle--bottom[_ngcontent-%COMP%]{bottom:-10px;left:12px;right:12px;height:10px;cursor:ns-resize}.gns3-replay__resize-handle--left[_ngcontent-%COMP%]{top:12px;left:-10px;bottom:12px;width:10px;cursor:ew-resize}.gns3-replay__resize-handle--top-left[_ngcontent-%COMP%]{top:-16px;left:-16px;width:16px;height:16px;cursor:nwse-resize}.gns3-replay__resize-handle--top-right[_ngcontent-%COMP%]{top:-16px;right:-16px;width:16px;height:16px;cursor:nesw-resize}.gns3-replay__resize-handle--bottom-left[_ngcontent-%COMP%]{bottom:-16px;left:-16px;width:16px;height:16px;cursor:nesw-resize}.gns3-replay__resize-handle--bottom-right[_ngcontent-%COMP%]{bottom:-16px;right:-16px;width:16px;height:16px;cursor:nwse-resize}.gns3-replay__window[_ngcontent-%COMP%]{position:fixed;display:flex;flex-direction:column;background:var(--mat-sys-surface);border:2px solid var(--mat-sys-tertiary);border-radius:8px;box-shadow:0 8px 24px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent),0 4px 8px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent)}.gns3-replay__window--unanchored[_ngcontent-%COMP%]{border-color:var(--mat-sys-outline-variant);opacity:.92}.gns3-replay__window--snapshot[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary)}.gns3-replay__window--snapshot[_ngcontent-%COMP%] .gns3-replay__window-header[_ngcontent-%COMP%]{background:var(--mat-sys-surface-container-high)}.gns3-replay__window--snapshot[_ngcontent-%COMP%] .gns3-replay__window-icon[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.gns3-replay__window--resizing[_ngcontent-%COMP%], .gns3-replay__window--dragging[_ngcontent-%COMP%]{user-select:none;box-shadow:0 0 0 2px color-mix(in srgb,var(--mat-sys-tertiary) 45%,transparent),0 8px 24px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent)}.gns3-replay__window-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;padding:4px 8px;background:var(--mat-sys-surface-container);border-radius:6px 6px 0 0;border-bottom:1px solid var(--mat-sys-outline-variant);flex-shrink:0;cursor:grab;user-select:none}.gns3-replay__window--dragging[_ngcontent-%COMP%] .gns3-replay__window-header[_ngcontent-%COMP%]{cursor:grabbing}.gns3-replay__window-icon[_ngcontent-%COMP%]{font-size:15px;width:15px;height:15px;color:var(--mat-sys-tertiary)}.gns3-replay__window-title[_ngcontent-%COMP%]{font-size:12px;font-weight:500;color:var(--mat-sys-on-surface);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gns3-replay__window-frame[_ngcontent-%COMP%]{margin-left:auto;flex-shrink:0;font-size:10px;font-variant-numeric:tabular-nums;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-high);border-radius:8px;padding:1px 6px;white-space:nowrap}.gns3-replay__window-hint[_ngcontent-%COMP%]{font-size:10px;color:var(--mat-sys-on-error-container);background:var(--mat-sys-error-container);border-radius:8px;padding:1px 6px;white-space:nowrap}.gns3-replay__window-reanchor[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:20px;height:20px;padding:0;flex-shrink:0;border:none;border-radius:4px;background:transparent;color:var(--mat-sys-tertiary);cursor:pointer}.gns3-replay__window-reanchor[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container-high)}.gns3-replay__window-reanchor[_ngcontent-%COMP%]:disabled{color:var(--mat-sys-outline);cursor:default;background:transparent}.gns3-replay__window-reanchor[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:14px;width:14px;height:14px}.gns3-replay__leader[_ngcontent-%COMP%]{position:fixed;inset:0;width:100%;height:100%;pointer-events:none}.gns3-replay__leader-line[_ngcontent-%COMP%]{stroke:var(--mat-sys-primary);stroke-width:1.5;stroke-dasharray:4 3}.gns3-replay__leader-dot[_ngcontent-%COMP%]{fill:var(--mat-sys-primary)}"],changeDetection:0})}return n})();var W5e=()=>({top:!0}),G5e=()=>({right:!0}),q5e=()=>({bottom:!0}),Q5e=()=>({left:!0}),K5e=()=>({top:!0,left:!0}),X5e=()=>({top:!0,right:!0}),Y5e=()=>({bottom:!0,left:!0}),Z5e=()=>({bottom:!0,right:!0});function J5e(n,o){if(n&1){let e=R();r(0,"app-replay-detail-pane",15),rn("searchQueryChange",function(i){y(e);let a=h();return Xt(a.svc.searchQuery,i)||(a.svc.searchQuery=i),w(i)}),_("retry",function(){y(e);let i=h();return w(i.svc.retryPeek())})("reload",function(){y(e);let i=h();return w(i.svc.closePeek())})("applyFilter",function(i){y(e);let a=h();return w(a.svc.applyFilter(i))})("applyLinkFilter",function(i){y(e);let a=h();return w(a.svc.applyLinkFilter(i))}),l()}if(n&2){let e=o,t=h();v("frame",e.frame)("state",e.detail)("autoExpand",!0),an("searchQuery",t.svc.searchQuery)}}var w$={x:14,y:-12},j4=64,M$=(()=>{class n{svc=f(Sc);zIndex=ee(1e3);zBoost=ee(0);windowFocused=$o();MIN_W=360;MIN_H=260;DEFAULT_W=600;DEFAULT_H=520;winLeft=z(0);winTop=z(0);winWidth=z(this.DEFAULT_W);winHeight=z(this.DEFAULT_H);dragging=z(!1);resizing=z(!1);zVal=Ne(()=>this.zIndex()+Math.max(this.zBoost(),2));placedSeq=0;constructor(){Vn(()=>{let e=this.svc.peek();if(!e){this.placedSeq=0;return}if(e.seq===this.placedSeq)return;this.placedSeq=e.seq;let t=typeof window<"u"?window.innerWidth:this.DEFAULT_W,i=typeof window<"u"?window.innerHeight:this.DEFAULT_H,{width:a,height:s}=tm(this.DEFAULT_W,this.DEFAULT_H,{width:t,height:i},this.MIN_W,this.MIN_H),d=il({left:e.at.x+w$.x,top:e.at.y+w$.y,width:a,height:s},{width:t,height:i},j4);this.winWidth.set(d.width),this.winHeight.set(d.height),this.winLeft.set(d.left),this.winTop.set(d.top)})}ngOnDestroy(){this.teardownDrag()}onHeaderContextMenu(e){e.preventDefault(),e.stopPropagation(),this.svc.closePeek()}cleanupDrag=null;onHeaderMouseDown(e){if(e.button!==0||e.target?.closest("button, input"))return;e.preventDefault();let t=e.clientX,i=e.clientY,a=this.winLeft(),s=this.winTop(),d=u=>{let g=typeof window<"u"?window.innerWidth:this.winWidth(),C=typeof window<"u"?window.innerHeight:this.winHeight(),M=il({left:a+(u.clientX-t),top:s+(u.clientY-i),width:this.winWidth(),height:this.winHeight()},{width:g,height:C},j4);this.winLeft.set(M.left),this.winTop.set(M.top)},p=()=>this.teardownDrag();document.addEventListener("mousemove",d),document.addEventListener("mouseup",p),this.cleanupDrag=()=>{document.removeEventListener("mousemove",d),document.removeEventListener("mouseup",p)},this.dragging.set(!0)}teardownDrag(){this.cleanupDrag?.(),this.cleanupDrag=null,this.dragging.set(!1)}validate=e=>{let t=e.rectangle.width,i=e.rectangle.height;return!(t!==void 0&&t<this.MIN_W||i!==void 0&&i<this.MIN_H)};onResizeStart(){this.resizing.set(!0)}onResizeEnd(e){let t=typeof window<"u"?window.innerWidth:this.winWidth(),i=typeof window<"u"?window.innerHeight:this.winHeight(),{width:a,height:s}=tm(e.rectangle.width||this.winWidth(),e.rectangle.height||this.winHeight(),{width:t,height:i},this.MIN_W,this.MIN_H);this.winWidth.set(a),this.winHeight.set(s),this.resizing.set(!1);let d=il({left:this.winLeft(),top:this.winTop(),width:a,height:s},{width:t,height:i},j4);this.winLeft.set(d.left),this.winTop.set(d.top)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-replay-peek-window"]],inputs:{zIndex:[1,"zIndex"],zBoost:[1,"zBoost"]},outputs:{windowFocused:"windowFocused"},decls:20,vars:35,consts:[["mwlResizable","",1,"gns3-replay__window","gns3-replay__window--snapshot","gns3-replay__window--peek",3,"mousedown","keydown.escape","resizeStart","resizeEnd","validateResize","enableGhostResize"],["mwlResizeHandle","",1,"gns3-replay__resize-handle","gns3-replay__resize-handle--top",3,"resizeEdges"],["mwlResizeHandle","",1,"gns3-replay__resize-handle","gns3-replay__resize-handle--right",3,"resizeEdges"],["mwlResizeHandle","",1,"gns3-replay__resize-handle","gns3-replay__resize-handle--bottom",3,"resizeEdges"],["mwlResizeHandle","",1,"gns3-replay__resize-handle","gns3-replay__resize-handle--left",3,"resizeEdges"],["mwlResizeHandle","",1,"gns3-replay__resize-handle","gns3-replay__resize-handle--top-left",3,"resizeEdges"],["mwlResizeHandle","",1,"gns3-replay__resize-handle","gns3-replay__resize-handle--top-right",3,"resizeEdges"],["mwlResizeHandle","",1,"gns3-replay__resize-handle","gns3-replay__resize-handle--bottom-left",3,"resizeEdges"],["mwlResizeHandle","",1,"gns3-replay__resize-handle","gns3-replay__resize-handle--bottom-right",3,"resizeEdges"],[1,"gns3-replay__window-header",3,"mousedown","contextmenu"],[1,"gns3-replay__window-icon"],[1,"gns3-replay__window-title"],[1,"gns3-replay__window-frame"],["matTooltip","Close",1,"gns3-replay__window-reanchor","gns3-replay__window-close",3,"click"],["missingAction","close",3,"frame","state","autoExpand","searchQuery"],["missingAction","close",3,"searchQueryChange","retry","reload","applyFilter","applyLinkFilter","frame","state","autoExpand","searchQuery"]],template:function(t,i){if(t&1&&(r(0,"div",0),_("mousedown",function(){return i.windowFocused.emit()})("keydown.escape",function(){return i.svc.closePeek()})("resizeStart",function(){return i.onResizeStart()})("resizeEnd",function(s){return i.onResizeEnd(s)}),L(1,"div",1)(2,"div",2)(3,"div",3)(4,"div",4)(5,"div",5)(6,"div",6)(7,"div",7)(8,"div",8),r(9,"div",9),_("mousedown",function(s){return i.onHeaderMouseDown(s)})("contextmenu",function(s){return i.onHeaderContextMenu(s)}),r(10,"mat-icon",10),c(11,"search"),l(),r(12,"span",11),c(13),l(),r(14,"span",12),c(15),l(),r(16,"button",13),_("click",function(){return i.svc.closePeek()}),r(17,"mat-icon"),c(18,"close"),l()()(),T(19,J5e,1,4,"app-replay-detail-pane",14),l()),t&2){let a,s,d;Tt("left",i.winLeft(),"px")("top",i.winTop(),"px")("width",i.winWidth(),"px")("height",i.winHeight(),"px")("z-index",i.zVal()),ne("gns3-replay__window--dragging",i.dragging())("gns3-replay__window--resizing",i.resizing()),v("validateResize",i.validate)("enableGhostResize",!1),m(),v("resizeEdges",at(27,W5e)),m(),v("resizeEdges",at(28,G5e)),m(),v("resizeEdges",at(29,q5e)),m(),v("resizeEdges",at(30,Q5e)),m(),v("resizeEdges",at(31,K5e)),m(),v("resizeEdges",at(32,X5e)),m(),v("resizeEdges",at(33,Y5e)),m(),v("resizeEdges",at(34,Z5e)),m(5),N((a=i.svc.peek())==null?null:a.frame.marker),m(2),X("#",(s=i.svc.peek())==null?null:s.frame.frame_number),m(4),E((d=i.svc.peek())?19:-1,d)}},dependencies:[fe,ie,ce,st,pt,H_,er,tr],styles:[".gns3-replay__resize-handle[_ngcontent-%COMP%]{position:absolute;z-index:100;background:transparent}.gns3-replay__resize-handle--top[_ngcontent-%COMP%]{top:-10px;left:12px;right:12px;height:10px;cursor:ns-resize}.gns3-replay__resize-handle--right[_ngcontent-%COMP%]{top:12px;right:-10px;bottom:12px;width:10px;cursor:ew-resize}.gns3-replay__resize-handle--bottom[_ngcontent-%COMP%]{bottom:-10px;left:12px;right:12px;height:10px;cursor:ns-resize}.gns3-replay__resize-handle--left[_ngcontent-%COMP%]{top:12px;left:-10px;bottom:12px;width:10px;cursor:ew-resize}.gns3-replay__resize-handle--top-left[_ngcontent-%COMP%]{top:-16px;left:-16px;width:16px;height:16px;cursor:nwse-resize}.gns3-replay__resize-handle--top-right[_ngcontent-%COMP%]{top:-16px;right:-16px;width:16px;height:16px;cursor:nesw-resize}.gns3-replay__resize-handle--bottom-left[_ngcontent-%COMP%]{bottom:-16px;left:-16px;width:16px;height:16px;cursor:nesw-resize}.gns3-replay__resize-handle--bottom-right[_ngcontent-%COMP%]{bottom:-16px;right:-16px;width:16px;height:16px;cursor:nwse-resize}.gns3-replay__window[_ngcontent-%COMP%]{position:fixed;display:flex;flex-direction:column;background:var(--mat-sys-surface);border:2px solid var(--mat-sys-tertiary);border-radius:8px;box-shadow:0 8px 24px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent),0 4px 8px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent)}.gns3-replay__window--unanchored[_ngcontent-%COMP%]{border-color:var(--mat-sys-outline-variant);opacity:.92}.gns3-replay__window--snapshot[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary)}.gns3-replay__window--snapshot[_ngcontent-%COMP%] .gns3-replay__window-header[_ngcontent-%COMP%]{background:var(--mat-sys-surface-container-high)}.gns3-replay__window--snapshot[_ngcontent-%COMP%] .gns3-replay__window-icon[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.gns3-replay__window--resizing[_ngcontent-%COMP%], .gns3-replay__window--dragging[_ngcontent-%COMP%]{user-select:none;box-shadow:0 0 0 2px color-mix(in srgb,var(--mat-sys-tertiary) 45%,transparent),0 8px 24px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent)}.gns3-replay__window-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;padding:4px 8px;background:var(--mat-sys-surface-container);border-radius:6px 6px 0 0;border-bottom:1px solid var(--mat-sys-outline-variant);flex-shrink:0;cursor:grab;user-select:none}.gns3-replay__window--dragging[_ngcontent-%COMP%] .gns3-replay__window-header[_ngcontent-%COMP%]{cursor:grabbing}.gns3-replay__window-icon[_ngcontent-%COMP%]{font-size:15px;width:15px;height:15px;color:var(--mat-sys-tertiary)}.gns3-replay__window-title[_ngcontent-%COMP%]{font-size:12px;font-weight:500;color:var(--mat-sys-on-surface);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gns3-replay__window-frame[_ngcontent-%COMP%]{margin-left:auto;flex-shrink:0;font-size:10px;font-variant-numeric:tabular-nums;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-high);border-radius:8px;padding:1px 6px;white-space:nowrap}.gns3-replay__window-hint[_ngcontent-%COMP%]{font-size:10px;color:var(--mat-sys-on-error-container);background:var(--mat-sys-error-container);border-radius:8px;padding:1px 6px;white-space:nowrap}.gns3-replay__window-reanchor[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:20px;height:20px;padding:0;flex-shrink:0;border:none;border-radius:4px;background:transparent;color:var(--mat-sys-tertiary);cursor:pointer}.gns3-replay__window-reanchor[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container-high)}.gns3-replay__window-reanchor[_ngcontent-%COMP%]:disabled{color:var(--mat-sys-outline);cursor:default;background:transparent}.gns3-replay__window-reanchor[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:14px;width:14px;height:14px}"],changeDetection:0})}return n})();var e6e=()=>({top:!0}),t6e=()=>({right:!0}),n6e=()=>({bottom:!0}),i6e=()=>({left:!0}),o6e=()=>({top:!0,left:!0}),a6e=()=>({top:!0,right:!0}),r6e=()=>({bottom:!0,left:!0}),s6e=()=>({bottom:!0,right:!0}),l6e=(n,o)=>o.id,c6e=(n,o)=>o.link_id;function d6e(n,o){if(n&1){let e=R();r(0,"button",36),_("click",function(){y(e);let i=h(2);return w(i.svc.clearFilter())}),r(1,"mat-icon"),c(2,"close"),l()()}}function m6e(n,o){if(n&1){let e=R();r(0,"button",37),_("click",function(){y(e);let i=h(2);return w(i.svc.applyLinkFilter(null))}),r(1,"mat-icon"),c(2,"close"),l()()}}function p6e(n,o){if(n&1){let e=R();r(0,"button",30),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.svc.applyLinkFilter(i.link_id))}),c(1),l()}if(n&2){let e=o.$implicit;m(),Un("",e.label," (",e.count,")")}}function u6e(n,o){n&1&&(r(0,"div",32),c(1),l()),n&2&&(m(),N(o))}function g6e(n,o){n&1&&(r(0,"div",34),L(1,"mat-spinner",38),r(2,"span"),c(3,"Loading frames\u2026"),l()()),n&2&&(m(),v("diameter",22))}function h6e(n,o){if(n&1){let e=R();r(0,"div",39)(1,"span"),c(2,"Packet replay requires the sharkd engine on this server (501)."),l(),r(3,"button",40),_("click",function(){y(e);let i=h(3);return w(i.close())}),c(4,"Close"),l()()}}function _6e(n,o){if(n&1){let e=R();r(0,"button",42),_("click",function(){y(e);let i=h(4);return w(i.svc.reloadTimeline())}),c(1,"Retry"),l()}}function f6e(n,o){if(n&1&&(r(0,"div",39)(1,"span"),c(2),l(),T(3,_6e,2,0,"button",41),l()),n&2){let e=h(),t=h(2);m(2),N(e),m(),E(t.svc.rangeErrorKind()==="network"?3:-1)}}function v6e(n,o){if(n&1&&T(0,h6e,5,0,"div",39)(1,f6e,4,2,"div",39),n&2){let e=h(2);E(e.svc.rangeErrorKind()==="unavailable"?0:1)}}function C6e(n,o){if(n&1){let e=R();r(0,"span"),c(1),l(),r(2,"button",43),_("click",function(){y(e);let i=h(3);return w(i.svc.clearAllFilters())}),c(3,"Clear filters"),l()}if(n&2){let e=h(3);m(),N(e.emptyFiltersLabel())}}function b6e(n,o){n&1&&(r(0,"span"),c(1,"No frames captured under this tag. Pause markers after traffic, then replay."),l())}function x6e(n,o){if(n&1&&(r(0,"div",34),T(1,C6e,4,1)(2,b6e,2,0,"span"),l()),n&2){let e=h(2);m(),E(e.svc.appliedFilter()||e.svc.appliedLink()?1:2)}}function y6e(n,o){if(n&1){let e=R();r(0,"app-replay-detail-pane",49),rn("searchQueryChange",function(i){y(e);let a=h(4);return Xt(a.svc.searchQuery,i)||(a.svc.searchQuery=i),w(i)}),_("retry",function(){y(e);let i=h(4);return w(i.svc.retryDetail())})("reload",function(){y(e);let i=h(4);return w(i.svc.reloadTimeline())})("applyFilter",function(i){y(e);let a=h(4);return w(a.onPaneApplyFilter(i))})("applyLinkFilter",function(i){y(e);let a=h(4);return w(a.svc.applyLinkFilter(i))}),l()}if(n&2){let e=h(4);v("frame",o)("state",e.svc.detail())("holdDetail",e.svc.lastOkDetail()),an("searchQuery",e.svc.searchQuery)}}function w6e(n,o){n&1&&(r(0,"div",34)(1,"span"),c(2,"Select a frame to decode it."),l()())}function M6e(n,o){if(n&1){let e=R();r(0,"button",46),_("click",function(){y(e);let i=h(3);return w(i.toggleDetail())}),r(1,"mat-icon"),c(2,"chevron_right"),l()(),r(3,"div",47),T(4,y6e,1,4,"app-replay-detail-pane",48)(5,w6e,3,0,"div",34),l()}if(n&2){let e,t=h(3);m(4),E((e=t.svc.currentFrame())?4:5,e)}}function S6e(n,o){if(n&1){let e=R();r(0,"button",50),_("click",function(){y(e);let i=h(3);return w(i.toggleDetail())}),r(1,"mat-icon"),c(2,"chevron_left"),l()()}}function k6e(n,o){if(n&1&&(r(0,"div",35),L(1,"app-replay-packet-list",44),T(2,M6e,6,1)(3,S6e,3,0,"button",45),l()),n&2){let e=h(2);m(2),E(e.detailOpen()?2:3)}}function P6e(n,o){if(n&1){let e=R();r(0,"div",4),_("mousedown",function(){y(e);let i=h();return w(i.focusWindow("main"))})("resizeStart",function(){y(e);let i=h();return w(i.onResizeStart())})("resizeEnd",function(i){y(e);let a=h();return w(a.onResizeEnd(i))}),L(1,"div",5)(2,"div",6)(3,"div",7)(4,"div",8)(5,"div",9)(6,"div",10)(7,"div",11)(8,"div",12),r(9,"div",13),_("mousedown",function(i){y(e);let a=h();return w(a.onHeaderMouseDown(i))}),r(10,"mat-icon",14),c(11,"history"),l(),r(12,"span",15),c(13,"Tag replay"),l(),r(14,"span",16),c(15),l(),r(16,"span",17),c(17),l(),r(18,"button",18),_("click",function(){y(e);let i=h();return w(i.svc.pinCurrent())}),r(19,"mat-icon"),c(20,"push_pin"),l()(),r(21,"button",19),_("click",function(){y(e);let i=h();return w(i.minimize())}),r(22,"mat-icon"),c(23,"remove"),l()(),r(24,"button",20),_("click",function(){y(e);let i=h();return w(i.close())}),r(25,"mat-icon"),c(26,"close"),l()()(),r(27,"div",21)(28,"mat-icon",22),c(29,"filter_alt"),l(),r(30,"input",23),_("input",function(i){y(e);let a=h();return w(a.onFilterInput(i))})("keydown",function(i){y(e);let a=h();return w(a.onFilterKey(i))}),l(),T(31,d6e,3,0,"button",24),L(32,"span",25),r(33,"button",26)(34,"mat-icon"),c(35,"cable"),l(),r(36,"span",27),c(37),l(),r(38,"mat-icon",28),c(39,"arrow_drop_down"),l()(),T(40,m6e,3,0,"button",29),l(),r(41,"mat-menu",null,0)(43,"button",30),_("click",function(){y(e);let i=h();return w(i.svc.applyLinkFilter(null))}),c(44),l(),Q(45,p6e,2,2,"button",31,c6e),l(),T(47,u6e,2,1,"div",32),r(48,"div",33),T(49,g6e,4,1,"div",34)(50,v6e,2,1)(51,x6e,3,1,"div",34)(52,k6e,4,1,"div",35),l()()}if(n&2){let e,t,i=Te(42),a=h();Tt("left",a.winLeft(),"px")("top",a.winTop(),"px")("width",a.winWidth(),"px")("height",a.winHeight(),"px")("z-index",a.mainZ()),ne("gns3-replay__main--dragging",a.dragging())("gns3-replay__main--resizing",a.resizing()),v("validateResize",a.validate)("enableGhostResize",!1),m(),v("resizeEdges",at(40,e6e)),m(),v("resizeEdges",at(41,t6e)),m(),v("resizeEdges",at(42,n6e)),m(),v("resizeEdges",at(43,i6e)),m(),v("resizeEdges",at(44,o6e)),m(),v("resizeEdges",at(45,a6e)),m(),v("resizeEdges",at(46,r6e)),m(),v("resizeEdges",at(47,s6e)),m(7),X("tag ",a.tag()),m(2),N(a.countLabel()),m(),v("disabled",!a.svc.currentFrame()||a.alreadyPinned())("matTooltip",a.alreadyPinned()?"Already pinned":"Pin frame"),m(12),v("value",a.svc.filter()),m(),E(a.svc.filter()?31:-1),m(2),ne("gns3-replay__link-pick--active",a.svc.appliedLink()),v("matMenuTriggerFor",i),m(4),N(a.linkPickLabel()),m(3),E(a.svc.appliedLink()?40:-1),m(4),X("All links (",a.svc.totalUnfiltered(),")"),m(),K(a.linkOptions()),m(2),E((e=a.svc.filterError())?47:-1,e),m(),ne("gns3-replay__body--busy",a.svc.loadingRange()&&a.hasList()),m(),E(a.svc.loadingRange()&&!a.hasList()?49:(t=a.svc.rangeError())?50:a.svc.isEmpty()?51:52,t)}}function T6e(n,o){if(n&1){let e=R();r(0,"app-replay-detail-window",51),_("windowFocused",function(){let i=y(e).$implicit,a=h();return w(a.focusWindow("pin-"+i.id))}),l()}if(n&2){let e=o.$implicit,t=h();v("zIndex",t.zIndex())("zBoost",t.zAssign().get("pin-"+e.id)??0)("pinned",e)("changedPaths",t.pinDiff())}}function E6e(n,o){if(n&1){let e=R();r(0,"app-replay-peek-window",52),_("windowFocused",function(){y(e);let i=h();return w(i.focusWindow("peek"))}),l()}if(n&2){let e=h();v("zIndex",e.zIndex())("zBoost",e.zAssign().get("peek")??0)}}var S$=(()=>{class n{controller=ee.required();project=ee.required();tag=ee.required();zIndex=ee(1e3);closeWindow=$o();windowFocused=$o();svc=f(Sc);windowManagement=f(Bs);linksDataSource=f(so);nodesDataSource=f(Xn);WINDOW_ID="replay-main";minimized=z(!1);detailOpen=z(!0);DEFAULT_W=1100;DEFAULT_H=640;MIN_H=420;OPEN_MIN_W=760;LIST_MIN_W=560;LIST_ONLY_W=640;DEFAULT_TOP=80;wideWidth=0;winLeft=z(0);winTop=z(this.DEFAULT_TOP);winWidth=z(this.DEFAULT_W);winHeight=z(this.DEFAULT_H);dragging=z(!1);resizing=z(!1);zSeq=1;zAssign=z(new Map([["main",1]]));mainZ=Ne(()=>this.zIndex()+Math.max(this.zAssign().get("main")??0,1));alreadyPinned=Ne(()=>{let e=this.svc.currentFrame();return!!e&&this.svc.pinnedDetails().some(t=>R4(t.frame,e))});countLabel=Ne(()=>{let e=this.svc.totalFrames(),t=this.svc.appliedFilter()||this.svc.appliedLink(),i=t?`${e} of ${this.svc.totalUnfiltered()}`:`${e}`,a=(t?this.svc.totalUnfiltered():e)!==1;return`${i} frame${a?"s":""}`});linkOptions=Ne(()=>{let e=new Map;for(let t of this.svc.sources())e.set(t.link_id,(e.get(t.link_id)??0)+t.count);return[...e.entries()].map(([t,i])=>({link_id:t,count:i,label:Ku(t,this.linksDataSource,this.nodesDataSource)})).sort((t,i)=>t.label.localeCompare(i.label))});linkPickLabel=Ne(()=>{let e=this.svc.appliedLink();return e?Ku(e,this.linksDataSource,this.nodesDataSource):"All links"});emptyFiltersLabel=Ne(()=>{let e=this.svc.appliedLink();return this.svc.appliedFilter()?e?"No frames match this filter on this link.":"No frames match this filter.":"No frames captured on this link."});pinDiff=Ne(()=>{let e=[];for(let t of this.svc.pinnedDetails())t.state.status==="ok"&&e.push(t.state.detail.tree);return e.length>=2?h$(e):new Set});hasList=Ne(()=>this.svc.frames().length>0);constructor(){Vn(()=>{let t=this.svc.rangeErrorKind();(t==="gate"||t==="missing")&&this.closeWindow.emit()}),Vn(()=>{let t=this.windowManagement.minimizedWindows().some(i=>i.id===this.WINDOW_ID);t!==this.minimized()&&this.minimized.set(t)});let e=0;Vn(()=>{let t=this.svc.peek()?.seq??0;t!==e&&(e=t,t>0&&this.focusWindow("peek"))})}ngOnInit(){let e=typeof window<"u"?window.innerWidth:this.DEFAULT_W,t=typeof window<"u"?window.innerHeight:this.DEFAULT_H,i=Math.min(this.DEFAULT_W,Math.max(this.OPEN_MIN_W,e-32)),a=Math.min(this.DEFAULT_H,Math.max(this.MIN_H,t-96)),s=il({left:Math.round((e-i)/2),top:this.DEFAULT_TOP,width:i,height:a},{width:e,height:t},64);this.winWidth.set(s.width),this.winHeight.set(s.height),this.winLeft.set(s.left),this.winTop.set(s.top),typeof window<"u"&&window.addEventListener("resize",this.onViewportResize),this.svc.start(this.controller(),this.project().project_id,this.tag())}ngOnDestroy(){typeof window<"u"&&window.removeEventListener("resize",this.onViewportResize),this.teardownDrag(),this.svc.destroy()}close(){this.closeWindow.emit()}minimize(){this.windowManagement.minimizeWindow(this.WINDOW_ID,"replay")}focusWindow(e){this.onWindowFocus();let t=this.zAssign();if((t.get(e)??0)===this.zSeq)return;this.zSeq++;let i=new Map(t);i.set(e,this.zSeq),this.zAssign.set(i)}onWindowFocus(){this.windowFocused.emit()}onFilterInput(e){this.svc.filter.set(e.target.value)}onFilterKey(e){e.key==="Enter"?(e.preventDefault(),this.svc.applyFilter(this.svc.filter())):e.key==="Escape"&&(e.preventDefault(),e.target.blur())}onPaneApplyFilter(e){this.svc.applyFilter(e)}currentMinW(){return this.detailOpen()?this.OPEN_MIN_W:this.LIST_MIN_W}toggleDetail(){!this.detailOpen()?(this.detailOpen.set(!0),this.wideWidth&&this.applyWidth(this.wideWidth)):(this.wideWidth=this.winWidth(),this.detailOpen.set(!1),this.applyWidth(this.LIST_ONLY_W))}applyWidth(e){let t=typeof window<"u"?window.innerWidth:e,i=typeof window<"u"?window.innerHeight:this.winHeight(),{width:a}=tm(e,this.winHeight(),{width:t,height:i},this.currentMinW(),this.MIN_H);this.winWidth.set(a);let s=il({left:this.winLeft(),top:this.winTop(),width:a,height:this.winHeight()},{width:t,height:i},64);this.winLeft.set(s.left),this.winTop.set(s.top)}onViewportResize=()=>this.clampIntoViewport();clampIntoViewport(){let e=window.innerWidth,t=window.innerHeight,{width:i,height:a}=tm(this.winWidth(),this.winHeight(),{width:e,height:t},this.currentMinW(),this.MIN_H),s=il({left:this.winLeft(),top:this.winTop(),width:i,height:a},{width:e,height:t},64);this.winWidth.set(s.width),this.winHeight.set(s.height),this.winLeft.set(s.left),this.winTop.set(s.top)}cleanupDrag=null;onHeaderMouseDown(e){if(e.button!==0||e.target?.closest("button, input"))return;e.preventDefault();let t=e.clientX,i=e.clientY,a=this.winLeft(),s=this.winTop(),d=u=>{let g=il({left:a+(u.clientX-t),top:s+(u.clientY-i),width:this.winWidth(),height:this.winHeight()},{width:window.innerWidth,height:window.innerHeight},64);this.winLeft.set(g.left),this.winTop.set(g.top)},p=()=>{this.teardownDrag(),this.dragging.set(!1)};document.addEventListener("mousemove",d),document.addEventListener("mouseup",p),this.cleanupDrag=()=>{document.removeEventListener("mousemove",d),document.removeEventListener("mouseup",p)},this.dragging.set(!0)}teardownDrag(){this.cleanupDrag?.(),this.cleanupDrag=null}validate=e=>{let t=e.rectangle.width,i=e.rectangle.height;return!(t!==void 0&&t<this.currentMinW()||i!==void 0&&i<this.MIN_H)};onResizeStart(){this.resizing.set(!0)}onResizeEnd(e){let t=typeof window<"u"?window.innerWidth:this.winWidth(),i=typeof window<"u"?window.innerHeight:this.winHeight(),{width:a,height:s}=tm(e.rectangle.width||this.winWidth(),e.rectangle.height||this.winHeight(),{width:t,height:i},this.currentMinW(),this.MIN_H);this.winWidth.set(a),this.winHeight.set(s),this.resizing.set(!1);let d=il({left:this.winLeft(),top:this.winTop(),width:a,height:s},{width:t,height:i},64);this.winLeft.set(d.left),this.winTop.set(d.top)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-marker-replay-overlay"]],inputs:{controller:[1,"controller"],project:[1,"project"],tag:[1,"tag"],zIndex:[1,"zIndex"]},outputs:{closeWindow:"closeWindow",windowFocused:"windowFocused"},features:[un([Sc])],decls:4,vars:2,consts:[["linkMenu","matMenu"],["mwlResizable","",1,"gns3-replay__main",3,"gns3-replay__main--dragging","gns3-replay__main--resizing","left","top","width","height","z-index","validateResize","enableGhostResize"],[3,"zIndex","zBoost","pinned","changedPaths"],[3,"zIndex","zBoost"],["mwlResizable","",1,"gns3-replay__main",3,"mousedown","resizeStart","resizeEnd","validateResize","enableGhostResize"],["mwlResizeHandle","",1,"gns3-replay__resize-handle","gns3-replay__resize-handle--top",3,"resizeEdges"],["mwlResizeHandle","",1,"gns3-replay__resize-handle","gns3-replay__resize-handle--right",3,"resizeEdges"],["mwlResizeHandle","",1,"gns3-replay__resize-handle","gns3-replay__resize-handle--bottom",3,"resizeEdges"],["mwlResizeHandle","",1,"gns3-replay__resize-handle","gns3-replay__resize-handle--left",3,"resizeEdges"],["mwlResizeHandle","",1,"gns3-replay__resize-handle","gns3-replay__resize-handle--top-left",3,"resizeEdges"],["mwlResizeHandle","",1,"gns3-replay__resize-handle","gns3-replay__resize-handle--top-right",3,"resizeEdges"],["mwlResizeHandle","",1,"gns3-replay__resize-handle","gns3-replay__resize-handle--bottom-left",3,"resizeEdges"],["mwlResizeHandle","",1,"gns3-replay__resize-handle","gns3-replay__resize-handle--bottom-right",3,"resizeEdges"],[1,"gns3-replay__header",3,"mousedown"],[1,"gns3-replay__icon"],[1,"gns3-replay__title-text"],[1,"gns3-replay__tag"],[1,"gns3-replay__count"],["mat-icon-button","",1,"gns3-replay__pin",3,"click","disabled","matTooltip"],["mat-icon-button","","matTooltip","Minimize",1,"gns3-replay__minimize",3,"click"],["mat-icon-button","","matTooltip","Close",1,"gns3-replay__close",3,"click"],[1,"gns3-replay__filterbar"],[1,"gns3-replay__filterbar-icon"],["type","text","placeholder","Display filter \u2014 e.g. ospf.msg == 1 (Enter to apply)","spellcheck","false",1,"gns3-replay__filter-input",3,"input","keydown","value"],["matTooltip","Clear display filter",1,"gns3-replay__filter-clear"],[1,"gns3-replay__filterbar-sep"],["type","button","matTooltip","Narrow the list to one captured link",1,"gns3-replay__link-pick",3,"matMenuTriggerFor"],[1,"gns3-replay__link-pick-label"],[1,"gns3-replay__link-caret"],["matTooltip","Show all links",1,"gns3-replay__filter-clear"],["mat-menu-item","",3,"click"],["mat-menu-item",""],[1,"gns3-replay__filter-error"],[1,"gns3-replay__body"],[1,"gns3-replay__state"],[1,"gns3-replay__panes"],["matTooltip","Clear display filter",1,"gns3-replay__filter-clear",3,"click"],["matTooltip","Show all links",1,"gns3-replay__filter-clear",3,"click"],[1,"gns3-replay__state-spinner",3,"diameter"],[1,"gns3-replay__state","gns3-replay__state--error"],["mat-stroked-button","",3,"click"],["mat-raised-button","","color","primary",1,"gns3-replay__retry"],["mat-raised-button","","color","primary",1,"gns3-replay__retry",3,"click"],["mat-raised-button","","color","primary",3,"click"],[1,"gns3-replay__left"],["matTooltip","Show packet details",1,"gns3-replay__pane-toggle"],["matTooltip","Hide packet details",1,"gns3-replay__pane-toggle",3,"click"],[1,"gns3-replay__right"],[3,"frame","state","holdDetail","searchQuery"],[3,"searchQueryChange","retry","reload","applyFilter","applyLinkFilter","frame","state","holdDetail","searchQuery"],["matTooltip","Show packet details",1,"gns3-replay__pane-toggle",3,"click"],[3,"windowFocused","zIndex","zBoost","pinned","changedPaths"],[3,"windowFocused","zIndex","zBoost"]],template:function(t,i){t&1&&(T(0,P6e,53,48,"div",1),Q(1,T6e,1,4,"app-replay-detail-window",2,l6e),T(3,E6e,1,2,"app-replay-peek-window",3)),t&2&&(E(i.minimized()?-1:0),m(),K(i.svc.pinnedDetails()),m(2),E(i.svc.peek()?3:-1))},dependencies:[fe,ie,ce,Y,he,Be,st,pt,it,Ko,ut,eo,rt,mt,b$,H_,y$,M$,er,tr],styles:[".gns3-replay__resize-handle[_ngcontent-%COMP%]{position:absolute;z-index:100;background:transparent}.gns3-replay__resize-handle--top[_ngcontent-%COMP%]{top:-10px;left:12px;right:12px;height:10px;cursor:ns-resize}.gns3-replay__resize-handle--right[_ngcontent-%COMP%]{top:12px;right:-10px;bottom:12px;width:10px;cursor:ew-resize}.gns3-replay__resize-handle--bottom[_ngcontent-%COMP%]{bottom:-10px;left:12px;right:12px;height:10px;cursor:ns-resize}.gns3-replay__resize-handle--left[_ngcontent-%COMP%]{top:12px;left:-10px;bottom:12px;width:10px;cursor:ew-resize}.gns3-replay__resize-handle--top-left[_ngcontent-%COMP%]{top:-16px;left:-16px;width:16px;height:16px;cursor:nwse-resize}.gns3-replay__resize-handle--top-right[_ngcontent-%COMP%]{top:-16px;right:-16px;width:16px;height:16px;cursor:nesw-resize}.gns3-replay__resize-handle--bottom-left[_ngcontent-%COMP%]{bottom:-16px;left:-16px;width:16px;height:16px;cursor:nesw-resize}.gns3-replay__resize-handle--bottom-right[_ngcontent-%COMP%]{bottom:-16px;right:-16px;width:16px;height:16px;cursor:nwse-resize}.gns3-replay__main[_ngcontent-%COMP%]{position:fixed;display:flex;flex-direction:column;background:var(--mat-sys-surface);border:2px solid var(--mat-sys-outline);border-radius:8px;box-shadow:0 8px 24px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent),0 4px 8px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent)}.gns3-replay__main--dragging[_ngcontent-%COMP%], .gns3-replay__main--resizing[_ngcontent-%COMP%]{user-select:none;box-shadow:0 0 0 2px color-mix(in srgb,var(--mat-sys-primary) 45%,transparent),0 8px 24px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent)}.gns3-replay__header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;padding:4px 6px 4px 10px;background:var(--mat-sys-surface-container);border-bottom:1px solid var(--mat-sys-outline-variant);border-radius:6px 6px 0 0;user-select:none;flex-shrink:0;cursor:grab}.gns3-replay__main--dragging[_ngcontent-%COMP%] .gns3-replay__header[_ngcontent-%COMP%]{cursor:grabbing}.gns3-replay__icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;color:var(--mat-sys-primary)}.gns3-replay__title-text[_ngcontent-%COMP%]{font-size:12px;font-weight:500;color:var(--mat-sys-on-surface);white-space:nowrap}.gns3-replay__tag[_ngcontent-%COMP%]{font-size:11px;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-high);border-radius:8px;padding:1px 6px;white-space:nowrap}.gns3-replay__count[_ngcontent-%COMP%]{margin-left:auto;font-size:11px;color:var(--mat-sys-on-surface-variant);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-variant-numeric:tabular-nums}.gns3-replay__pin[_ngcontent-%COMP%], .gns3-replay__minimize[_ngcontent-%COMP%], .gns3-replay__close[_ngcontent-%COMP%]{--gns3-action-icon-size: 16px;width:24px;height:24px;--mat-icon-button-state-layer-size: 24px;border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: 24px}.gns3-replay__pin[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], .gns3-replay__minimize[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], .gns3-replay__close[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}.gns3-replay__pin[_ngcontent-%COMP%], .gns3-replay__minimize[_ngcontent-%COMP%], .gns3-replay__close[_ngcontent-%COMP%]{vertical-align:middle}.gns3-replay__pin[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], .gns3-replay__minimize[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], .gns3-replay__close[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;vertical-align:middle}.gns3-replay__minimize[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-primary-container);color:var(--mat-sys-primary)}.gns3-replay__close[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-error-container);color:var(--mat-sys-error)}.gns3-replay__filterbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;padding:4px 10px;border-bottom:1px solid var(--mat-sys-outline-variant);flex-shrink:0}.gns3-replay__filterbar-icon[_ngcontent-%COMP%]{font-size:15px;width:15px;height:15px;color:var(--mat-sys-on-surface-variant);flex-shrink:0}.gns3-replay__filter-input[_ngcontent-%COMP%]{flex:1;min-width:0;height:24px;border:none;outline:none;background:transparent;color:var(--mat-sys-on-surface);font-family:var(--gns3-font-code);font-size:11px}.gns3-replay__filter-clear[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:22px;height:22px;padding:0;flex-shrink:0;border:none;border-radius:4px;background:transparent;color:var(--mat-sys-on-surface-variant);cursor:pointer}.gns3-replay__filter-clear[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container)}.gns3-replay__filter-clear[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:14px;width:14px;height:14px}.gns3-replay__filter-error[_ngcontent-%COMP%]{padding:4px 10px 6px 31px;font-size:10px;color:var(--mat-sys-error);border-bottom:1px solid var(--mat-sys-outline-variant);overflow-wrap:anywhere}.gns3-replay__filterbar-sep[_ngcontent-%COMP%]{width:1px;height:16px;flex-shrink:0;background:var(--mat-sys-outline-variant)}.gns3-replay__link-pick[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px;height:24px;max-width:45%;padding:0 2px;flex-shrink:0;border:none;border-radius:4px;background:transparent;color:var(--mat-sys-on-surface-variant);font-size:11px;cursor:pointer}.gns3-replay__link-pick[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%]{font-size:15px;width:15px;height:15px;flex-shrink:0}.gns3-replay__link-pick[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container)}.gns3-replay__link-pick--active[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.gns3-replay__link-pick--active[_ngcontent-%COMP%] .gns3-replay__link-pick-label[_ngcontent-%COMP%]{font-weight:600}.gns3-replay__link-pick-label[_ngcontent-%COMP%]{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gns3-replay__link-caret[_ngcontent-%COMP%]{margin-left:-6px}.gns3-replay__body[_ngcontent-%COMP%]{display:flex;flex-direction:column;min-height:0;flex:1;border-radius:0 0 6px 6px;overflow:hidden}.gns3-replay__body--busy[_ngcontent-%COMP%] .gns3-replay__panes[_ngcontent-%COMP%]{opacity:.5}.gns3-replay__state[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;padding:16px 12px;font-size:12px;color:var(--mat-sys-on-surface-variant)}.gns3-replay__state--error[_ngcontent-%COMP%]{flex-direction:column;align-items:stretch;gap:8px;color:var(--mat-sys-error)}.gns3-replay__state-spinner[_ngcontent-%COMP%]{flex-shrink:0}.gns3-replay__retry[_ngcontent-%COMP%]{align-self:flex-start}.gns3-replay__panes[_ngcontent-%COMP%]{display:flex;min-height:0;flex:1}.gns3-replay__left[_ngcontent-%COMP%]{flex:11 1 0;min-width:0;display:flex;flex-direction:column;min-height:0}.gns3-replay__pane-toggle[_ngcontent-%COMP%]{width:16px;flex-shrink:0;padding:0;border:none;border-left:1px solid var(--mat-sys-outline-variant);background:transparent;color:var(--mat-sys-on-surface-variant);cursor:pointer;display:flex;align-items:center;justify-content:center}.gns3-replay__pane-toggle[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container);color:var(--mat-sys-on-surface)}.gns3-replay__pane-toggle[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px}.gns3-replay__right[_ngcontent-%COMP%]{flex:9 1 0;min-width:340px;display:flex;flex-direction:column;min-height:0}.gns3-replay__filter-input[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--mat-sys-primary);outline-offset:2px}"],changeDetection:0})}return n})();var k$=(()=>{class n{controller=ee(void 0);textEdited;drawingService=f(Wi);drawingsDataSource=f(Ui);drawingsEventSource=f(ia);mapDrawingToSvgConverter=f(js);toasterService=f(re);cdr=f(oe);ngOnInit(){this.textEdited=this.drawingsEventSource.textEdited.subscribe(e=>this.onTextEdited(e))}onTextEdited(e){let t=new Hr;t.element=e.textElement,t.element.text=e.editedText;let i=this.mapDrawingToSvgConverter.convert(t),a=this.drawingsDataSource.get(e.textDrawingId);this.drawingService.updateText(this.controller(),a,i).subscribe({next:s=>{this.drawingsDataSource.update(s),this.drawingsEventSource.textSaved.emit(!0)},error:s=>{let d=s.error?.message||s.message||"Failed to update text drawing";this.toasterService.error(d),this.cdr.markForCheck()}})}ngOnDestroy(){this.textEdited.unsubscribe()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-text-edited"]],inputs:{controller:[1,"controller"]},decls:0,vars:0,template:function(t,i){},encapsulation:2,changeDetection:0})}return n})();var O6e=(n,o)=>o.value,D6e=(n,o)=>o.id;function I6e(n,o){if(n&1){let e=R();r(0,"button",18),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.activeFilter.set(i.value))}),r(1,"span"),c(2),l(),r(3,"strong"),c(4),l()()}if(n&2){let e=o.$implicit,t=h(2);ne("notification-center__filter--active",t.activeFilter()===e.value),Ce("aria-pressed",t.activeFilter()===e.value),m(2),N(e.label),m(2),N(t.count(e.value))}}function A6e(n,o){if(n&1){let e=R();r(0,"article",19)(1,"button",20),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.markAsRead(i))}),r(2,"mat-icon",21),c(3),l(),r(4,"span",22)(5,"span",23)(6,"strong"),c(7),l(),r(8,"time"),c(9),l()(),r(10,"span",24),c(11),l()()(),r(12,"button",25)(13,"mat-icon"),c(14,"content_copy"),l()(),r(15,"button",26),_("click",function(i){let a=y(e).$implicit,s=h(2);return w(s.remove(i,a.id))}),r(16,"mat-icon"),c(17,"close"),l()()()}if(n&2){let e=o.$implicit,t=h(2);ne("notification-center__item--unread",!e.read)("notification-center__item--success",e.kind==="success")("notification-center__item--info",e.kind==="info")("notification-center__item--warning",e.kind==="warning")("notification-center__item--error",e.kind==="error"),m(3),N(t.icon(e.kind)),m(4),N(t.label(e.kind)),m(),Ce("datetime",t.dateTime(e.createdAt)),m(),N(t.formatTime(e.createdAt)),m(2),N(e.message),m(),v("cdkCopyToClipboard",e.message)("cdkCopyToClipboardAttempts",3)}}function N6e(n,o){n&1&&(r(0,"div",17)(1,"mat-icon",11),c(2,"notifications_none"),l(),r(3,"strong"),c(4,"No notifications"),l(),r(5,"span"),c(6,"Completed activities and errors will appear here."),l()())}function F6e(n,o){if(n&1){let e=R();r(0,"button",0),_("click",function(){y(e);let i=h();return w(i.notificationCenter.closePanel())}),l(),r(1,"aside",1)(2,"header",2)(3,"div",3)(4,"h2",4),c(5,"Notifications"),l(),r(6,"span",5),c(7),l()(),r(8,"button",6),_("click",function(){y(e);let i=h();return w(i.notificationCenter.closePanel())}),r(9,"mat-icon"),c(10,"close"),l()()(),r(11,"nav",7),Q(12,I6e,5,5,"button",8,O6e),l(),r(14,"div",9)(15,"label",10)(16,"mat-icon",11),c(17,"search"),l(),r(18,"input",12),_("input",function(i){y(e);let a=h();return w(a.searchQuery.set(i.target.value))}),l()(),r(19,"button",13),_("click",function(){y(e);let i=h();return w(i.notificationCenter.markAllAsRead())}),r(20,"mat-icon"),c(21,"done_all"),l()(),r(22,"button",14),_("click",function(){y(e);let i=h();return w(i.notificationCenter.clear())}),r(23,"mat-icon"),c(24,"delete_sweep"),l()()(),r(25,"div",15),Q(26,A6e,18,17,"article",16,D6e,!1,N6e,7,0,"div",17),l()()}if(n&2){let e=h();m(7),X("",e.notificationCenter.unreadCount()," unread"),m(5),K(e.filters),m(6),v("value",e.searchQuery()),m(),v("disabled",e.notificationCenter.unreadCount()===0),m(3),v("disabled",e.notificationCenter.notifications().length===0),m(4),K(e.filteredNotifications())}}var A2=(()=>{class n{timeFormatter=new Intl.DateTimeFormat(void 0,{hour:"numeric",minute:"2-digit",second:"2-digit"});dateTimeFormatter=new Intl.DateTimeFormat(void 0,{year:"numeric",month:"short",day:"numeric",hour:"numeric",minute:"2-digit",second:"2-digit"});notificationCenter=f(gg);icon=w5;label=M5;activeFilter=z("all");searchQuery=z("");filters=[{value:"all",label:"All"},{value:"activity",label:"Activity"},{value:"error",label:"Errors"},{value:"warning",label:"Warnings"}];filteredNotifications=Ne(()=>{let e=this.activeFilter(),t=this.searchQuery().trim().toLocaleLowerCase();return this.notificationCenter.notifications().filter(i=>{let a=e==="all"||e==="activity"&&(i.kind==="success"||i.kind==="info")||i.kind===e,s=!t||i.message.toLocaleLowerCase().includes(t);return a&&s})});closeOnEscape(){this.notificationCenter.closePanel()}count(e){switch(e){case"activity":return this.notificationCenter.activityCount();case"error":return this.notificationCenter.errorCount();case"warning":return this.notificationCenter.warningCount();default:return this.notificationCenter.notifications().length}}formatTime(e){let t=new Date(e),i=new Date;return t.getFullYear()===i.getFullYear()&&t.getMonth()===i.getMonth()&&t.getDate()===i.getDate()?this.timeFormatter.format(t):this.dateTimeFormatter.format(t)}dateTime(e){return new Date(e).toISOString()}markAsRead(e){this.notificationCenter.markAsRead(e.id)}remove(e,t){e.stopPropagation(),this.notificationCenter.remove(t)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-notification-center"]],hostBindings:function(t,i){t&1&&_("keydown.escape",function(){return i.closeOnEscape()},lm)},decls:1,vars:1,consts:[["type","button","tabindex","-1","aria-hidden","true",1,"notification-center__backdrop",3,"click"],["id","notification-center-panel","role","region","aria-labelledby","notification-center-title",1,"notification-center"],[1,"notification-center__header"],[1,"notification-center__heading"],["id","notification-center-title"],[1,"notification-center__unread"],["mat-icon-button","","type","button","aria-label","Close notifications",1,"notification-center__close",3,"click"],["aria-label","Filter notifications",1,"notification-center__filters"],["type","button",3,"notification-center__filter--active"],[1,"notification-center__tools"],[1,"notification-center__search"],["aria-hidden","true"],["type","search","aria-label","Search notifications","placeholder","Search notifications",3,"input","value"],["mat-icon-button","","type","button","matTooltip","Mark all as read","aria-label","Mark all notifications as read",3,"click","disabled"],["mat-icon-button","","type","button","matTooltip","Clear history","aria-label","Clear notification history",3,"click","disabled"],[1,"notification-center__list"],[1,"notification-center__item",3,"notification-center__item--unread","notification-center__item--success","notification-center__item--info","notification-center__item--warning","notification-center__item--error"],[1,"notification-center__empty"],["type","button",3,"click"],[1,"notification-center__item"],["type","button",1,"notification-center__item-main",3,"click"],["aria-hidden","true",1,"notification-center__item-icon"],[1,"notification-center__item-content"],[1,"notification-center__item-meta"],[1,"notification-center__item-message"],["mat-icon-button","","type","button","matTooltip","Copy notification","aria-label","Copy notification",1,"notification-center__item-copy",3,"cdkCopyToClipboard","cdkCopyToClipboardAttempts"],["mat-icon-button","","type","button","matTooltip","Remove","aria-label","Remove notification",1,"notification-center__item-remove",3,"click"]],template:function(t,i){t&1&&T(0,F6e,29,5),t&2&&E(i.notificationCenter.panelOpen()?0:-1)},dependencies:[X1,hz,Y,Be,ie,ce,st,pt],styles:['[_nghost-%COMP%]{position:relative;z-index:950}.notification-center__backdrop[_ngcontent-%COMP%]{position:fixed;inset:var(--gns3-notification-anchor-height, var(--gns3-density-app-header-height)) 0 0;z-index:1000;padding:0;border:0;background:color-mix(in srgb,var(--mat-sys-scrim) 18%,transparent);cursor:default}.notification-center[_ngcontent-%COMP%]{position:fixed;top:calc(var(--gns3-notification-anchor-height, var(--gns3-density-app-header-height)) + var(--gns3-density-space-2));right:var(--gns3-density-space-3);z-index:1001;width:min(440px,100vw - 24px);max-height:calc(100vh - var(--gns3-notification-anchor-height, var(--gns3-density-app-header-height)) - var(--gns3-density-space-5));display:flex;flex-direction:column;overflow:hidden;color:var(--mat-sys-on-surface);background:var(--mat-sys-surface-container-lowest);border:1px solid var(--mat-sys-outline-variant);border-radius:var(--gns3-density-radius-xl);box-shadow:0 20px 48px color-mix(in srgb,var(--mat-sys-shadow) 28%,transparent)}.notification-center__header[_ngcontent-%COMP%]{height:var(--gns3-density-section-header-height);min-height:var(--gns3-density-section-header-height);flex:0 0 var(--gns3-density-section-header-height);padding:var(--gns3-density-space-2) var(--gns3-density-space-4);display:flex;align-items:center;justify-content:space-between;gap:var(--gns3-density-space-3);box-sizing:border-box;background:var(--mat-sys-primary-container);border-bottom:1px solid var(--mat-sys-outline-variant)}.notification-center__header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-primary-container);font-size:var(--gns3-density-section-title-size);font-weight:650;line-height:1.2}.notification-center__heading[_ngcontent-%COMP%]{min-width:0;display:flex;align-items:center;gap:var(--gns3-density-space-2)}.notification-center__unread[_ngcontent-%COMP%]{flex:0 0 auto;color:color-mix(in srgb,var(--mat-sys-on-primary-container) 76%,transparent);font-size:13px;line-height:1.2;white-space:nowrap}.notification-center__close[_ngcontent-%COMP%]{width:var(--gns3-density-control-height-sm);height:var(--gns3-density-control-height-sm);flex:0 0 var(--gns3-density-control-height-sm)}.notification-center__filters[_ngcontent-%COMP%]{padding:var(--gns3-density-space-3) var(--gns3-density-space-4);display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--gns3-density-space-2);border-bottom:1px solid var(--mat-sys-outline-variant)}.notification-center__filters[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{min-width:0;min-height:var(--gns3-density-control-height);padding:var(--gns3-density-space-2);display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:var(--gns3-density-space-1);border:1px solid var(--mat-sys-outline-variant);border-radius:var(--gns3-density-radius-sm);color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-low);font:inherit;cursor:pointer}.notification-center__filters[_ngcontent-%COMP%] button[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{overflow:hidden;font-size:11px;text-overflow:ellipsis;white-space:nowrap}.notification-center__filters[_ngcontent-%COMP%] button[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-size:16px}.notification-center__filters[_ngcontent-%COMP%] .notification-center__filter--active[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container);border-color:var(--mat-sys-primary)}.notification-center__tools[_ngcontent-%COMP%]{padding:var(--gns3-density-space-3) var(--gns3-density-space-4);display:flex;align-items:center;gap:var(--gns3-density-space-2);border-bottom:1px solid var(--mat-sys-outline-variant)}.notification-center__search[_ngcontent-%COMP%]{min-width:0;min-height:var(--gns3-density-control-height);flex:1;padding:0 var(--gns3-density-space-3);display:flex;align-items:center;gap:var(--gns3-density-space-2);box-sizing:border-box;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-low);border:1px solid var(--mat-sys-outline-variant);border-radius:var(--gns3-density-radius-sm)}.notification-center__search[_ngcontent-%COMP%]:focus-within{border-color:var(--mat-sys-primary);box-shadow:0 0 0 1px var(--mat-sys-primary)}.notification-center__search[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{flex:0 0 auto}.notification-center__search[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{min-width:0;width:100%;border:0;outline:0;color:var(--mat-sys-on-surface);background:transparent;font:inherit;font-size:13px}.notification-center__list[_ngcontent-%COMP%]{min-height:180px;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}.notification-center__item[_ngcontent-%COMP%]{--notification-accent: var(--mat-sys-primary);position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto auto;border-bottom:1px solid var(--mat-sys-outline-variant);background:var(--mat-sys-surface-container-lowest)}.notification-center__item--success[_ngcontent-%COMP%]{--notification-accent: var(--custom-mat-sys-success)}.notification-center__item--warning[_ngcontent-%COMP%]{--notification-accent: var(--mat-sys-tertiary)}.notification-center__item--error[_ngcontent-%COMP%]{--notification-accent: var(--mat-sys-error)}.notification-center__item--unread[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--notification-accent) 7%,var(--mat-sys-surface-container-lowest))}.notification-center__item--unread[_ngcontent-%COMP%]:before{position:absolute;inset:0 auto 0 0;width:3px;background:var(--notification-accent);content:""}.notification-center__item-main[_ngcontent-%COMP%]{min-width:0;padding:var(--gns3-density-space-3) var(--gns3-density-space-2) var(--gns3-density-space-3) var(--gns3-density-space-4);display:grid;grid-template-columns:auto minmax(0,1fr);align-items:start;gap:var(--gns3-density-space-3);border:0;color:inherit;background:transparent;font:inherit;text-align:left;cursor:pointer}.notification-center__item-main[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-on-surface) 4%,transparent)}.notification-center__item-icon[_ngcontent-%COMP%]{color:var(--notification-accent)}.notification-center__item-content[_ngcontent-%COMP%]{min-width:0;display:flex;flex-direction:column;gap:var(--gns3-density-space-1)}.notification-center__item-meta[_ngcontent-%COMP%]{display:flex;align-items:baseline;justify-content:space-between;gap:var(--gns3-density-space-2)}.notification-center__item-meta[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-size:12px;font-weight:650}.notification-center__item-meta[_ngcontent-%COMP%] time[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-surface-variant);font-size:11px}.notification-center__item-message[_ngcontent-%COMP%]{overflow-wrap:anywhere;color:var(--mat-sys-on-surface-variant);font-size:13px;line-height:1.4;white-space:pre-line}.notification-center__item-copy[_ngcontent-%COMP%], .notification-center__item-remove[_ngcontent-%COMP%]{align-self:center;margin-right:var(--gns3-density-space-2);width:var(--gns3-density-control-height-sm);height:var(--gns3-density-control-height-sm)}.notification-center__empty[_ngcontent-%COMP%]{min-height:220px;padding:var(--gns3-density-space-5);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--gns3-density-space-2);box-sizing:border-box;color:var(--mat-sys-on-surface-variant);text-align:center}.notification-center__empty[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:32px;height:32px;font-size:32px}.notification-center__empty[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface)}.notification-center__empty[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:13px}@media(max-width:600px){.notification-center[_ngcontent-%COMP%]{top:var(--gns3-notification-anchor-height, var(--gns3-density-app-header-height));right:0;bottom:0;width:100%;max-height:none;border-right:0;border-bottom:0;border-left:0;border-radius:0}}'],changeDetection:0})}return n})();var R6e=["topologySummaryContainer"],z6e=n=>["/controller",n,"projects"],L6e=n=>({visible:n}),V6e=n=>({selected:n}),O$=(n,o)=>o.link_id,N2=(n,o)=>o.node_id,P$=(n,o)=>e=>e.id==="console",B6e=(n,o)=>e=>{let t=y(o).$implicit;return w(e.id==="wireshark-"+t.link_id)},j6e=(n,o)=>e=>{let t=y(o).$implicit;return w(e.id==="console-"+t.node_id)},T$=(n,o)=>e=>e.id==="marker-manager",E$=(n,o)=>e=>e.id==="replay-main";function $6e(n,o){if(n&1){let e=R();r(0,"div",8)(1,"app-template",42),_("nodeCreationChange",function(i){y(e);let a=h();return w(a.onNodeCreation(i))}),l(),r(2,"button",43),_("click",function(){y(e);let i=h();return w(i.toggleDrawLineMode())}),r(3,"mat-icon"),c(4,"timeline"),l()()()}if(n&2){let e=h();m(),v("controller",e.controller)("project",e.project),m(),v("ngClass",tn(4,V6e,e.tools.draw_link))("color",e.tools.draw_link?"primary":"basic")}}function H6e(n,o){if(n&1&&(r(0,"span",14),c(1),l()),n&2){let e=h();m(),N(e.notificationCenter.unreadCount()>99?"99+":e.notificationCenter.unreadCount())}}function U6e(n,o){if(n&1){let e=R();r(0,"app-d3-map",44),_("contextmenu",function(i){y(e);let a=h();return w(a.onTopologyContextMenu(i))}),l()}if(n&2){let e=h();v("controller",e.controller)("project",e.project)("symbols",e.symbols)("nodes",e.nodes())("links",e.links())("drawings",e.drawings())("width",e.project.scene_width||2e3)("height",e.project.scene_height||1e3)("show-interface-labels",e.isInterfaceLabelVisible)("readonly",e.inReadOnlyMode)}}function W6e(n,o){if(n&1&&(r(0,"div",25),L(1,"app-snapshot-menu-item",10),l()),n&2){let e=h();m(),v("controller",e.controller)("project",e.project)}}function G6e(n,o){if(n&1){let e=R();r(0,"app-marker-manager",45),_("closeWindow",function(){y(e);let i=h();return w(i.closeMarkerManager())})("windowFocused",function(){y(e);let i=h();return w(i.bringMarkerManagerToFront())})("startReplay",function(i){y(e);let a=h();return w(a.openMarkerReplay(i))}),l()}if(n&2){let e=h();v("controller",e.controller)("project",e.project)("zIndex",e.markerManagerZIndex)}}function q6e(n,o){if(n&1){let e=R();r(0,"app-marker-replay-overlay",46),_("closeWindow",function(){y(e);let i=h();return w(i.closeMarkerReplay())})("windowFocused",function(){y(e);let i=h();return w(i.bringMarkerReplayToFront())}),l()}if(n&2){let e=h();v("controller",e.controller)("project",e.project)("tag",e.markerReplayTag)("zIndex",e.markerReplayZIndex)}}function Q6e(n,o){if(n&1&&L(0,"app-draw-link-tool",35),n&2){let e=h();v("links",e.links())}}function K6e(n,o){if(n&1){let e=R();r(0,"app-console-wrapper",47),_("closeConsole",function(i){y(e);let a=h();return w(a.toggleShowConsole(i))})("windowFocused",function(){y(e);let i=h();return w(i.bringConsoleToFront())}),l()}if(n&2){let e=h();v("controller",e.controller)("project",e.project)("zIndex",e.consoleZIndex)}}function X6e(n,o){if(n&1){let e=R();r(0,"app-ai-chat",48),_("closed",function(){y(e);let i=h();return w(i.closeAIChat())})("windowFocused",function(){y(e);let i=h();return w(i.bringAIChatToFront())}),l()}if(n&2){let e=h();v("project",e.project)("controller",e.controller)("zIndex",e.aiChatZIndex)}}function Y6e(n,o){if(n&1){let e=R();r(0,"app-web-wireshark-inline",50),_("closeWindow",function(){let i=y(e).$implicit,a=h(2);return w(a.closeWebWiresharkInline(i.link_id))})("windowFocused",function(){let i=y(e).$implicit,a=h(2);return w(a.bringWebWiresharkWindowToFront(i.link_id))}),l()}if(n&2){let e=o.$implicit,t=h(2);v("link",e)("controller",t.controller)("project",t.project)("zIndex",t.getWebWiresharkWindowZIndex(e.link_id))}}function Z6e(n,o){if(n&1&&Q(0,Y6e,1,4,"app-web-wireshark-inline",49,O$),n&2){let e=h();K(e.getWebWiresharkInlineWindows())}}function J6e(n,o){if(n&1){let e=R();r(0,"app-web-console-inline",52),_("closeWindow",function(){let i=y(e).$implicit,a=h(2);return w(a.closeWebConsoleInline(i.node_id))})("windowFocused",function(){let i=y(e).$implicit,a=h(2);return w(a.bringWebConsoleWindowToFront(i.node_id))}),l()}if(n&2){let e=o.$implicit,t=h(2);v("node",e)("controller",t.controller)("project",t.project)("zIndex",t.getWebConsoleWindowZIndex(e.node_id))}}function eNe(n,o){if(n&1&&Q(0,J6e,1,4,"app-web-console-inline",51,N2),n&2){let e=h();K(e.getWebConsoleInlineWindows())}}function tNe(n,o){if(n&1){let e=R();r(0,"app-node-file-manager-inline",54),_("closeWindow",function(){let i=y(e).$implicit,a=h(2);return w(a.closeFileManagerInline(i.node_id))})("windowFocused",function(){let i=y(e).$implicit,a=h(2);return w(a.bringFileManagerToFront(i.node_id))}),l()}if(n&2){let e=o.$implicit,t=h(2);v("node",e)("controller",t.controller)("zIndex",t.getFileManagerZIndex(e.node_id))}}function nNe(n,o){if(n&1&&Q(0,tNe,1,3,"app-node-file-manager-inline",53,N2),n&2){let e=h();K(e.getFileManagerInlineWindows())}}function iNe(n,o){if(n&1){let e=R();r(0,"div",55),_("click",function(){y(e);let i=h();return w(i.toggleConsoleMinimize())}),r(1,"mat-icon",56),c(2,"terminal"),l(),r(3,"span",57),c(4,"Console"),l()()}if(n&2){let e=h();Tt("left",e.getConsoleTaskbarLeft(),"px"),ne("inline-taskbar__icon--minimized",e.windowManagement.minimizedWindows().some(Md(5,P$,o))),v("title",e.windowManagement.minimizedWindows().some(Md(6,P$,o))?"Console - Click to restore":"Console - Click to minimize")}}function oNe(n,o){if(n&1){let e=R();r(0,"div",55),_("click",function(){let i=y(e).$implicit,a=h();return w(a.toggleWiresharkMinimize(i.link_id))}),r(1,"mat-icon",56),c(2,"analytics"),l(),r(3,"span",57),c(4),l()()}if(n&2){let e=o.$implicit,t=h();Tt("left",t.getWiresharkTaskbarLeft(e.link_id),"px"),ne("inline-taskbar__icon--minimized",t.windowManagement.minimizedWindows().some(Md(6,B6e,o))),v("title",e.capture_file_name),m(4),N(e.capture_file_name)}}function aNe(n,o){if(n&1){let e=R();r(0,"div",55),_("click",function(){let i=y(e).$implicit,a=h();return w(a.toggleWebConsoleMinimize(i.node_id))}),r(1,"mat-icon",56),c(2,"web"),l(),r(3,"span",57),c(4),l()()}if(n&2){let e=o.$implicit,t=h();Tt("left",t.getWebConsoleTaskbarLeft(e.node_id),"px"),ne("inline-taskbar__icon--minimized",t.windowManagement.minimizedWindows().some(Md(6,j6e,o))),v("title",e.name),m(4),N(e.name)}}function rNe(n,o){if(n&1){let e=R();r(0,"div",55),_("click",function(){let i=y(e).$implicit,a=h();return w(a.toggleFileManagerMinimize(i.node_id))}),r(1,"mat-icon",56),c(2,"folder"),l(),r(3,"span",57),c(4),l()()}if(n&2){let e=o.$implicit,t=h();Tt("left",t.getFileManagerTaskbarLeft(e.node_id),"px"),ne("inline-taskbar__icon--minimized",t.isFileManagerMinimized(e.node_id)),v("title","File Manager - "+e.name),m(4),N(e.name)}}function sNe(n,o){if(n&1){let e=R();r(0,"div",55),_("click",function(){y(e);let i=h();return w(i.toggleMarkerManagerMinimize())}),r(1,"mat-icon",56),c(2,"insights"),l(),r(3,"span",57),c(4,"Markers"),l()()}if(n&2){let e=h();Tt("left",e.getMarkerManagerTaskbarLeft(),"px"),ne("inline-taskbar__icon--minimized",e.windowManagement.minimizedWindows().some(Md(5,T$,o))),v("title",e.windowManagement.minimizedWindows().some(Md(6,T$,o))?"Marker Manager - Click to restore":"Marker Manager - Click to minimize")}}function lNe(n,o){if(n&1){let e=R();r(0,"div",55),_("click",function(){y(e);let i=h();return w(i.toggleReplayMinimize())}),r(1,"mat-icon",56),c(2,"history"),l(),r(3,"span",57),c(4,"Replay"),l()()}if(n&2){let e=h();Tt("left",e.getReplayTaskbarLeft(),"px"),ne("inline-taskbar__icon--minimized",e.windowManagement.minimizedWindows().some(Md(5,E$,o))),v("title",e.windowManagement.minimizedWindows().some(Md(6,E$,o))?"Tag Replay - Click to restore":"Tag Replay - Click to minimize")}}function cNe(n,o){}var F2=(()=>{class n{nodes=z([]);links=z([]);drawings=z([]);symbols=[];project={};controller={};projectws;ws;projectWsIntentionalClose=!1;reconnectTimer=null;reconnectAttempt=0;markerWs;markerWsIntentionalClose=!1;markerReconnectTimer=null;markerReconnectAttempt=0;MARKER_WS_LIVENESS_TIMEOUT_MS=15e3;MARKER_WS_LIVENESS_CHECK_MS=5e3;markerLastWsMessageAt=0;markerLivenessTimer=null;WS_LIVENESS_TIMEOUT_MS=15e3;WS_LIVENESS_CHECK_MS=5e3;lastWsMessageAt=0;livenessTimer=null;isProjectMapMenuVisible=!1;isConsoleVisible=!0;isTopologySummaryVisible=!0;isInterfaceLabelVisible=!1;notificationsVisibility=!1;layersVisibility=!1;itemLockStatusVisibility=!1;gridVisibility=!1;toolbarVisibility=!0;symbolScaling=!0;isAIChatVisible=!1;isMarkerManagerVisible=!1;isMarkerReplayVisible=!1;markerReplayTag=null;webWiresharkInlineWindows=new Map;webWiresharkInlineZIndex=new Map;webConsoleInlineWindows=new Map;webConsoleInlineZIndex=new Map;baseZIndex=1e3;fileManagerInlineWindows=new Map;fileManagerInlineZIndex=new Map;zIndexCounter=0;consoleZIndex=this.baseZIndex;aiChatZIndex=this.baseZIndex;markerManagerZIndex=this.baseZIndex;markerReplayZIndex=this.baseZIndex;TASKBAR_BASE_LEFT=20;TASKBAR_ICON_WIDTH=180;TASKBAR_ICON_GAP=8;mapBgClass=Ne(()=>{let e=this.themeService.savedMapTheme,t=e==="auto"?this.themeService.isDarkMode():e.startsWith("dark-");return e==="auto"?{[`gns3-map-bg-${this.themeService.isDarkMode()?"dark":"light"}`]:!0,"project-map--light-bg":!t,"project-map--dark-bg":t}:{[`gns3-map-bg-${e}`]:!0,"project-map--light-bg":!t,"project-map--dark-bg":t}});instance;destroyed=!1;tools={selection:!0,moving:!1,draw_link:!1,text_editing:!0};settings;inReadOnlyMode=!1;contextMenu=ln(E_);mapChild=ln(p_);projectMapMenuComponent=ln.required(I_);topologySummaryContainer=ln.required("topologySummaryContainer",{read:Wo});templateComponent=ln(V_);projectMapSubscription=new Oo;startedNodeIds=new Set;missingImagesHandled=new Set;missingImagesDialogOpen=!1;missingImagesChangesSubscription;route=f($t);controllerService=f(_t);projectService=f(Ti);nodeService=f(ft);linkService=f(Ri);drawingService=f(Wi);progressService=f(mo);projectWebServiceHandler=f(h_);mapChangeDetectorRef=f(Wl);nodeWidget=f(r_);drawingsWidget=f(bd);linkWidget=f(m_);labelWidget=f(bp);interfaceLabelWidget=f(vd);mapNodeToNode=f(Mp);mapDrawingToDrawing=f(yM);mapLabelToLabel=f(xd);mapLinkToLink=f(kM);mapLinkNodeToLinkNode=f(u_);nodesDataSource=f(Xn);linksDataSource=f(so);drawingsDataSource=f(Ui);settingsService=f(sr);toolsService=f(Ll);selectionManager=f(na);selectionTool=f(vp);recentlyOpenedProjectService=f(ep);movingEventSource=f(wp);mapScaleService=f(br);nodeCreatedLabelStylesFixer=f(XS);toasterService=f(re);missingImagesDialogService=f(IM);dialog=f(Xe);router=f(Ft);mapNodesDataSource=f(ip);mapLinksDataSource=f(Fs);markerRegistryService=f(_m);markerFlashService=f(hd);nodeSymbolResolver=f(EM);mapDrawingsDataSource=f(Eh);mapSymbolsDataSource=f(Oh);mapSettingsService=f(ui);ethernetLinkWidget=f(c_);serialLinkWidget=f(d_);notificationService=f(_s);notificationCenter=f(gg);title=f(rg);nodeConsoleService=f(ga);symbolService=f(Lr);themeService=f(Ni);cd=f(oe);aiChatStore=f(D_);windowManagement=f(Bs);ngOnInit(){this.notificationCenter.closePanel(),this.getSettings(),this.progressService.activate(),this.controllerService.isServiceInitialized?this.getData():this.projectMapSubscription.add(this.controllerService.serviceInitialized.subscribe(e=>{e&&this.getData()})),this.addSubscriptions(),this.addKeyboardListeners()}getSettings(){this.settings=this.settingsService.getAll(),this.symbolScaling=this.mapSettingsService.getSymbolScaling(),this.cd.markForCheck(),this.isConsoleVisible=this.mapSettingsService.isLogConsoleVisible,this.mapSettingsService.logConsoleSubject.subscribe(e=>this.isConsoleVisible=e),this.notificationsVisibility=this.notificationCenter.toastsEnabled,this.layersVisibility=localStorage.getItem("layersVisibility")==="true",this.gridVisibility=localStorage.getItem("gridVisibility")==="true"}async lazyLoadTopologySummary(){if(this.isTopologySummaryVisible){if(this.instance)return;let{TopologySummaryComponent:e}=await import("./chunk-2EU4MCU2.js");if(this.destroyed||!this.isTopologySummaryVisible||this.instance)return;this.instance=this.topologySummaryContainer().createComponent(e),this.instance.instance.controller=this.controller,this.instance.instance.project=this.project,this.instance.instance.openWebConsoleInline.subscribe(t=>this.onOpenWebConsoleInline(t)),this.instance.instance.openMarkerManager.subscribe(()=>this.toggleMarkerManager()),this.instance.changeDetectorRef.detectChanges()}else this.instance&&(this.instance.destroy(),this.instance=null)}addSubscriptions(){this.projectMapSubscription.add(this.drawingsDataSource.changes.subscribe(t=>{this.drawings.set(t)}));let e=new Map;this.projectMapSubscription.add(this.nodesDataSource.changes.subscribe(t=>{if(this.controller){for(let i of t){let a=e.get(i.node_id);a!==void 0&&a!==i.symbol&&(i.symbol_url=null),e.set(i.node_id,i.symbol)}this.nodeSymbolResolver.resolve(this.controller,t).subscribe(i=>{this.nodes.set(i),this.mapSettingsService.getSymbolScaling()&&this.applyScalingOfNodeSymbols()})}})),this.projectMapSubscription.add(this.linksDataSource.changes.subscribe(t=>{this.links.set(t)})),this.projectMapSubscription.add(this.projectWebServiceHandler.errorNotificationEmitter.subscribe(t=>{this.showMessage({type:"error",message:t})})),this.projectMapSubscription.add(this.projectWebServiceHandler.warningNotificationEmitter.subscribe(t=>{this.showMessage({type:"warning",message:t})})),this.projectMapSubscription.add(this.mapSettingsService.symbolScalingSubject.subscribe(t=>{t&&this.applyScalingOfNodeSymbols()})),this.projectMapSubscription.add(this.projectWebServiceHandler.nodeNotificationEmitter.subscribe(t=>{if(t.action!=="node.updated")return;let i=t.event,a=this.startedNodeIds.has(i.node_id);i.status==="started"?this.startedNodeIds.add(i.node_id):this.startedNodeIds.delete(i.node_id),!(a||i.status!=="started"||!i.console_auto_start||i.console_type==="none")&&(i.console_type==="vnc"?setTimeout(()=>this.onOpenWebConsoleInline({node:i,controller:this.controller,project:this.project}),500):(this.mapSettingsService.logConsoleSubject.next(!0),setTimeout(()=>this.nodeConsoleService.openConsoleForNode(i),500)))}))}applyScalingOfNodeSymbols(){this.nodesDataSource.getItems().forEach(e=>{if(e.height>this.symbolService.getMaximumSymbolSize()){let t=this.symbolService.scaleDimensionsForNode(e);e.width=t.width,e.height=t.height}})}getData(){let e=this.route.paramMap.subscribe(t=>{let i=parseInt(t.get("controller_id"),10),a=t.get("project_id");if(!a){this.router.navigate(["/controllers"]);return}sm(this.controllerService.get(i)).pipe(Np(s=>(s||this.router.navigate(["/controllers"]),this.controller=s,this.nodeWidget.setController(s),this.cd.markForCheck(),this.projectService.get(s,a).pipe(Pt(d=>d)))),Np(s=>{if(this.project=s,this.cd.markForCheck(),!s||!s.project_id)return this.router.navigate(["/controllers"]),new Sr(p=>p.complete());this.projectService.open(this.controller,this.project.project_id),this.title.setTitle(this.project.name),this.isInterfaceLabelVisible=this.project.show_interface_labels??this.mapSettingsService.showInterfaceLabels??!0,this.layersVisibility=this.project.show_layers??localStorage.getItem("layersVisibility")==="true",this.gridVisibility=this.project.show_grid??localStorage.getItem("gridVisibility")==="true",this.toggleShowTopologySummary(this.mapSettingsService.isTopologySummaryVisible);let d=`itemLockStatusVisibility_${this.project.project_id}`;return this.itemLockStatusVisibility=localStorage.getItem(d)==="true",this.mapSettingsService.toggleItemLockStatus(this.itemLockStatusVisibility),this.recentlyOpenedProjectService.setcontrollerId(this.controller.id.toString()),this.project.status==="opened"?new Sr(p=>{p.next(this.project)}):this.projectService.open(this.controller,this.project.project_id)})).subscribe(s=>{s&&s.project_id&&this.onProjectLoad(s),this.cd.markForCheck(),this.mapSettingsService.openReadme&&this.showReadme()},s=>{this.progressService.setError(s);let d=s?.message||s?.originalError?.message||"Failed to load project";s?.originalError?.status===404?this.router.navigate(["/controller",i,"projects"],{queryParams:{error:d}}):this.toasterService.error(d),this.cd.markForCheck()},()=>{this.progressService.deactivate(),this.cd.markForCheck()})});this.projectMapSubscription.add(e)}addKeyboardListeners(){this.projectMapSubscription.add(ma(document,"keydown",{capture:!0}).subscribe(e=>{e.key==="Escape"&&this.cancelDrawLineMode()})),im.bind("ctrl++",e=>{e.preventDefault(),this.zoomIn()}),im.bind("ctrl+-",e=>{e.preventDefault(),this.zoomOut()}),im.bind("ctrl+0",e=>{e.preventDefault(),this.resetZoom()}),im.bind("ctrl+a",e=>{e.preventDefault();let t=this.mapNodesDataSource.getItems(),i=this.mapDrawingsDataSource.getItems(),a=this.mapLinksDataSource.getItems(),s=this.mapSymbolsDataSource.getItems();this.selectionManager.setSelected(t.concat(i).concat(a).concat(s))}),im.bind("ctrl+h",e=>{e.preventDefault(),this.toolbarVisibility=!this.toolbarVisibility}),im.bind("ctrl+shift+a",e=>{e.preventDefault(),this.selectionManager.setSelected([])}),im.bind("ctrl+shift+s",e=>{e.preventDefault(),this.router.navigate(["/controller",this.controller.id,"preferences"])}),im.bind("del",e=>{e.preventDefault(),this.deleteItems()})}deleteItems(){let e=this.selectionManager.getSelected(),t=e.filter(u=>u instanceof cs),i=e.filter(u=>u instanceof zu),a=e.filter(u=>u instanceof Hr),s={nodes:t.length,links:i.length,drawings:a.length},d=t.length+i.length+a.length;if(d===0)return;this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","dialog-small-panel","confirmation-danger-panel"],autoFocus:".cancel-button",data:{title:"Delete selected objects?",message:`${T_(s)} will be permanently deleted.`,note:"This action cannot be undone.",confirmButtonText:d===1?"Delete object":"Delete objects",tone:"danger"}}).afterClosed().subscribe(u=>{if(u){let g={nodes:0,links:0,drawings:0},C=uo(t.length+i.length+a.length,M=>{M>0&&this.toasterService.success(`${T_(g)} deleted.`)});t.forEach(M=>{let x=this.mapNodeToNode.convert(M);this.nodeService.delete(this.controller,x).subscribe({next:()=>{g.nodes++,C.succeed()},error:b=>{C.fail();let P=b.error?.message||b.message||"Failed to delete node";this.toasterService.error(P),this.cd.markForCheck()}})}),i.forEach(M=>{let x=this.mapLinkToLink.convert(M);this.linkService.deleteLink(this.controller,x).subscribe({next:()=>{g.links++,C.succeed()},error:b=>{C.fail();let P=b.error?.message||b.message||"Failed to delete link";this.toasterService.error(P),this.cd.markForCheck()}})}),a.forEach(M=>{let x=this.mapDrawingToDrawing.convert(M);this.drawingService.delete(this.controller,x).subscribe({next:()=>{g.drawings++,C.succeed()},error:b=>{C.fail();let P=b.error?.message||b.message||"Failed to delete drawing";this.toasterService.error(P),this.cd.markForCheck()}})})}})}onProjectLoad(e){if(!e||!e.project_id){this.progressService.setError("Invalid project data"),this.router.navigate(["/controllers"]);return}this.readonly=this.projectService.isReadOnly(e),this.recentlyOpenedProjectService.setProjectId(this.project.project_id);let t=this.fetchTopologyData(e).subscribe({next:()=>{this.setUpMapCallbacks(),this.connectProjectWS(e),this.connectMarkerWS(e),this.progressService.deactivate(),this.missingImagesHandled.clear(),this.missingImagesDialogOpen=!1,this.missingImagesChangesSubscription?.unsubscribe(),this.missingImagesChangesSubscription=this.nodesDataSource.changes.subscribe(i=>this.maybeOpenMissingImagesDialog(i)),this.projectMapSubscription.add(this.missingImagesChangesSubscription),this.maybeOpenMissingImagesDialog(this.nodesDataSource.getItems())},error:i=>{this.toasterService.error("Failed to load project data: "+(i.error?.message||i.message||"Unknown error")),this.progressService.deactivate(),this.cd.markForCheck()}});this.projectMapSubscription.add(t)}maybeOpenMissingImagesDialog(e){if(this.readonly||this.missingImagesDialogOpen)return;let t=new Set((e||[]).filter(a=>a.missing_image).map(a=>a.node_id));for(let a of this.missingImagesHandled)t.has(a)||this.missingImagesHandled.delete(a);let i=(e||[]).filter(a=>a.missing_image&&!this.missingImagesHandled.has(a.node_id));i.length!==0&&(i.forEach(a=>this.missingImagesHandled.add(a.node_id)),this.missingImagesDialogOpen=!0,this.projectMapSubscription.add(this.missingImagesDialogService.open(this.controller,i).subscribe(a=>{this.missingImagesDialogOpen=!1,a&&a.updated>0&&this.toasterService.success(`Updated images for ${a.updated} ${a.updated===1?"node":"nodes"}.`),a&&a.remaining>0&&this.toasterService.warning("Some images are still missing - the affected nodes cannot be started."),this.maybeOpenMissingImagesDialog(this.nodesDataSource.getItems()),this.cd.markForCheck()})))}fetchTopologyData(e){return this.projectService.nodes(this.controller,e.project_id).pipe(Qn(t=>{this.nodesDataSource.set(t),t.filter(i=>i.status==="started").forEach(i=>this.startedNodeIds.add(i.node_id))}),Np(()=>this.projectService.links(this.controller,e.project_id)),Qn(t=>{this.projectWebServiceHandler.applyInterfaceStatuses(t),this.linksDataSource.set(t),this.markerRegistryService.rebuildAll(t)}),Np(()=>this.projectService.drawings(this.controller,e.project_id)),Qn(t=>{this.drawingsDataSource.set(t)}))}connectProjectWS(e){this.projectws=new WebSocket(this.notificationService.projectNotificationsPath(this.controller,e.project_id)),this.projectws.onopen=()=>{this.reconnectAttempt>0&&this.projectMapSubscription.add(this.fetchTopologyData(e).subscribe({error:t=>{console.warn("Topology resync after WS reconnect failed",t)}})),this.reconnectAttempt=0,this.startLivenessCheck()},this.projectws.onmessage=t=>{this.lastWsMessageAt=Date.now(),this.projectWebServiceHandler.handleMessage(JSON.parse(t.data))},this.projectws.onclose=()=>{this.stopLivenessCheck(),!this.projectWsIntentionalClose&&this.scheduleReconnect(e)},this.projectws.onerror=()=>{console.warn("Project notifications WebSocket error; will reconnect")}}scheduleReconnect(e){if(this.projectWsIntentionalClose)return;let t=this.reconnectAttempt++,i=Math.min(3e4,1e3*2**t),a=Math.round(i+Math.random()*.25*i);this.reconnectTimer=setTimeout(()=>this.connectProjectWS(e),a)}startLivenessCheck(){this.stopLivenessCheck(),this.lastWsMessageAt=Date.now(),this.livenessTimer=setInterval(()=>{Date.now()-this.lastWsMessageAt>this.WS_LIVENESS_TIMEOUT_MS&&(console.warn("Project WS liveness timeout \u2014 no message received, forcing reconnect"),this.stopLivenessCheck(),this.projectws?.close())},this.WS_LIVENESS_CHECK_MS)}stopLivenessCheck(){this.livenessTimer!==null&&(clearInterval(this.livenessTimer),this.livenessTimer=null)}connectMarkerWS(e){this.markerWs=new WebSocket(this.notificationService.markerNotificationsPath(this.controller,e.project_id)),this.markerWs.onopen=()=>{this.markerReconnectAttempt=0,this.startMarkerLivenessCheck()},this.markerWs.onmessage=t=>{this.markerLastWsMessageAt=Date.now(),this.projectWebServiceHandler.handleMessage(JSON.parse(t.data))},this.markerWs.onclose=()=>{this.stopMarkerLivenessCheck(),!this.markerWsIntentionalClose&&this.scheduleMarkerReconnect(e)},this.markerWs.onerror=()=>{console.warn("Marker notifications WebSocket error; will reconnect")}}scheduleMarkerReconnect(e){if(this.markerWsIntentionalClose)return;let t=this.markerReconnectAttempt++,i=Math.min(3e4,1e3*2**t),a=Math.round(i+Math.random()*.25*i);this.markerReconnectTimer=setTimeout(()=>this.connectMarkerWS(e),a)}startMarkerLivenessCheck(){this.stopMarkerLivenessCheck(),this.markerLastWsMessageAt=Date.now(),this.markerLivenessTimer=setInterval(()=>{Date.now()-this.markerLastWsMessageAt>this.MARKER_WS_LIVENESS_TIMEOUT_MS&&(console.warn("Marker WS liveness timeout \u2014 no message received, forcing reconnect"),this.stopMarkerLivenessCheck(),this.markerWs?.close())},this.MARKER_WS_LIVENESS_CHECK_MS)}stopMarkerLivenessCheck(){this.markerLivenessTimer!==null&&(clearInterval(this.markerLivenessTimer),this.markerLivenessTimer=null)}setUpWS(){this.ws=new WebSocket(this.notificationService.notificationsPath(this.controller))}setUpMapCallbacks(){this.mapChild()&&this.mapChild().gridVisibility.set(this.gridVisibility?1:0),this.readonly||this.toolsService.selectionToolActivation(!0);let e=this.linkWidget.onContextMenu.subscribe(g=>{let C=this.mapLinkToLink.convert(g.link);this.contextMenu().openMenuForListOfElements([],[],[],[C],g.event.clientY,g.event.clientX)}),t=this.ethernetLinkWidget.onContextMenu.subscribe(g=>{let C=this.mapLinkToLink.convert(g.link);this.contextMenu().openMenuForListOfElements([],[],[],[C],g.event.clientY,g.event.clientX)}),i=this.serialLinkWidget.onContextMenu.subscribe(g=>{let C=this.mapLinkToLink.convert(g.link);this.contextMenu().openMenuForListOfElements([],[],[],[C],g.event.clientY,g.event.clientX)}),a=this.nodeWidget.onContextMenu.subscribe(g=>{let C=this.selectionManager.getSelected();if(this.selectionManager.isSelected(g.node)&&this.openMenuForSelection(C,g.event))return;this.selectionManager.setSelected([g.node]);let M=this.mapNodeToNode.convert(g.node);this.contextMenu().openMenuForNode(M,g.event.clientY,g.event.clientX)}),s=this.drawingsWidget.onContextMenu.subscribe(g=>{let C=this.mapDrawingToDrawing.convert(g.drawing);this.contextMenu().openMenuForDrawing(C,g.event.clientY,g.event.clientX)}),d=this.labelWidget.onContextMenu.subscribe(g=>{let C=this.selectionManager.getSelected();if((this.selectionManager.isSelected(g.label)||C.some(P=>P instanceof cs&&P.id===g.label.nodeId))&&this.openMenuForSelection(C,g.event))return;let x=this.mapLabelToLabel.convert(g.label),b=this.nodes().find(P=>P.node_id===g.label.nodeId);this.contextMenu().openMenuForLabel(x,b,g.event.clientY,g.event.clientX)}),p=this.interfaceLabelWidget.onContextMenu.subscribe(g=>{let C=this.mapLinkNodeToLinkNode.convert(g.interfaceLabel),M=this.links().find(x=>x.link_id===g.interfaceLabel.linkId);this.contextMenu().openMenuForInterfaceLabel(C,M,g.event.clientY,g.event.clientX)}),u=this.selectionTool.contextMenuOpened.subscribe(g=>{let C=this.selectionManager.getSelected();this.openMenuForSelection(C,g)});this.projectMapSubscription.add(e),this.projectMapSubscription.add(t),this.projectMapSubscription.add(i),this.projectMapSubscription.add(a),this.projectMapSubscription.add(s),this.projectMapSubscription.add(u),this.projectMapSubscription.add(d),this.projectMapSubscription.add(p),this.mapChangeDetectorRef.detectChanges()}openMenuForSelection(e,t){if(e.length<2||!(t instanceof MouseEvent))return!1;let i=[],a=[],s=[],d=[];return e.forEach(p=>{p instanceof Hr?i.push(this.mapDrawingToDrawing.convert(p)):p instanceof cs?a.push(this.mapNodeToNode.convert(p)):p instanceof Cc?s.push(this.mapLabelToLabel.convert(p)):p instanceof zu&&d.push(this.mapLinkToLink.convert(p))}),this.contextMenu().openMenuForListOfElements(i,a,s,d,t.clientY,t.clientX),!0}onNodeCreation(e){if(!e)return;let t=e.creationId;this.nodeService.createFromTemplate(this.controller,this.project,e.template,e.x,e.y,e.computeId).subscribe(i=>{this.toasterService.success(`Node "${i.name}" created successfully`),this.projectService.nodes(this.controller,this.project.project_id).subscribe({next:a=>{a.filter(s=>s.label.style===null).forEach(s=>{let d=this.nodeCreatedLabelStylesFixer.fix(s);this.nodeService.updateLabel(this.controller,s,d.label).subscribe({next:()=>{},error:p=>{console.error("Failed to update node label:",p)}})}),this.nodesDataSource.set(a),e.numberOfNodes--,e.numberOfNodes>0?(e.x=e.x+50<this.project.scene_width/2?e.x+50:e.x,e.y=e.y+50<this.project.scene_height/2?e.y+50:e.y,this.onNodeCreation(e)):t&&this.templateComponent()&&this.templateComponent().onNodeCreated(t,!0)},error:a=>{t&&this.templateComponent()&&this.templateComponent().onNodeCreated(t,!1,a.error?.message||a.message||"Failed to load nodes"),this.toasterService.error("Failed to load nodes: "+(a.error?.message||a.message||"Unknown error")),this.cd.markForCheck()}})},i=>{if(t&&this.templateComponent()){let a=i.error?.message||i.message||"Unknown error";this.templateComponent().onNodeCreated(t,!1,a)}this.toasterService.error(i.error?.message||i.message||"Failed to create node from template")})}centerView(){if(this.project){let e=this.mapChild()?.context,t=document.documentElement.clientWidth,i=document.documentElement.clientHeight,a=e?e.centerX!==null?e.centerX:e.size.width/2:this.project.scene_width/2,s=e?e.centerY!==null?e.centerY:e.size.height/2:this.project.scene_height/2,d=Math.max(0,a-t/2),p=Math.max(0,s-i/2);window.scrollTo(d,p)}else this.toasterService.error("Please wait until all components are loaded.")}onDrawingSaved(){this.projectMapMenuComponent().resetDrawToolChoice()}set readonly(e){this.inReadOnlyMode=e,e?(this.tools.selection=!1,this.toolsService.selectionToolActivation(!1)):(this.tools.selection=!0,this.toolsService.selectionToolActivation(!0))}get readonly(){return this.inReadOnlyMode}toggleSymbolScaling(e){this.symbolScaling=e,this.mapSettingsService.setSymbolScaling(e)}toggleMovingMode(){this.tools.moving=!this.tools.moving,this.movingEventSource.movingModeState.emit(this.tools.moving),this.readonly||(this.tools.selection=!this.tools.moving,this.toolsService.selectionToolActivation(this.tools.selection))}toggleDrawLineMode(){this.tools.draw_link=!this.tools.draw_link,this.toolsService.drawLinkToolActivation(this.tools.draw_link)}cancelDrawLineMode(){this.tools.draw_link&&(this.toggleDrawLineMode(),this.cd.markForCheck())}onTopologyContextMenu(e){this.tools.draw_link&&e.target instanceof Element&&e.target.matches("svg.map, svg.map > rect, svg.map g.drawing-line-tool > path")&&(e.preventDefault(),this.cancelDrawLineMode())}toggleShowInterfaceLabels(e){let t=this.project.show_interface_labels;this.project.show_interface_labels=e,this.isInterfaceLabelVisible=e,this.mapSettingsService.toggleShowInterfaceLabels(this.isInterfaceLabelVisible),this.mapSettingsService.mapRenderedEmitter.emit(!0),this.projectService.update(this.controller,this.project).subscribe(i=>{this.project.show_interface_labels=i.show_interface_labels,this.isInterfaceLabelVisible=i.show_interface_labels,this.cd.markForCheck()},()=>{this.project.show_interface_labels=t,this.isInterfaceLabelVisible=t,this.mapSettingsService.toggleShowInterfaceLabels(this.isInterfaceLabelVisible),this.mapSettingsService.mapRenderedEmitter.emit(!0),this.toasterService.error("Cannot update project settings")})}toggleShowConsole(e){this.isConsoleVisible=e,this.mapSettingsService.toggleLogConsole(this.isConsoleVisible)}onAIChatOpened(){let e=this.aiChatStore.getPanelStateValue();this.aiChatStore.openPanel(),this.isAIChatVisible&&e.isMinimized&&this.aiChatStore.restorePanel(),this.isAIChatVisible=!0}onLeaveProject(){this.closeAIChat(),this.aiChatStore.setPanelState({isOpen:!1,isMinimized:!1,isMaximized:!1})}closeAIChat(){this.isAIChatVisible=!1}openWebWiresharkInline(e){if(this.webWiresharkInlineWindows.has(e.link.link_id)){this.bringWebWiresharkWindowToFront(e.link.link_id),this.toasterService.warning("Web Wireshark is already open for this link");return}this.zIndexCounter++;let t=this.baseZIndex+this.zIndexCounter;this.webWiresharkInlineWindows.set(e.link.link_id,e.link),this.webWiresharkInlineZIndex.set(e.link.link_id,t),this.cd.markForCheck()}closeWebWiresharkInline(e){this.webWiresharkInlineWindows.delete(e),this.webWiresharkInlineZIndex.delete(e),this.cd.markForCheck()}bringWebWiresharkWindowToFront(e){if(!this.webWiresharkInlineWindows.has(e))return;this.zIndexCounter++;let t=this.baseZIndex+this.zIndexCounter;this.webWiresharkInlineZIndex.set(e,t),this.cd.markForCheck()}getWebWiresharkWindowZIndex(e){return this.webWiresharkInlineZIndex.get(e)||this.baseZIndex}getWebWiresharkInlineWindows(){return Array.from(this.webWiresharkInlineWindows.values())}onOpenWebConsoleInline(e){if(this.webConsoleInlineWindows.has(e.node.node_id)){this.bringWebConsoleWindowToFront(e.node.node_id),this.toasterService.warning("Web Console is already open for this node");return}this.zIndexCounter++;let t=this.baseZIndex+this.zIndexCounter;this.webConsoleInlineWindows.set(e.node.node_id,e.node),this.webConsoleInlineZIndex.set(e.node.node_id,t),this.cd.markForCheck()}closeWebConsoleInline(e){this.webConsoleInlineWindows.delete(e),this.webConsoleInlineZIndex.delete(e),this.cd.markForCheck()}bringWebConsoleWindowToFront(e){if(!this.webConsoleInlineWindows.has(e))return;this.zIndexCounter++;let t=this.baseZIndex+this.zIndexCounter;this.webConsoleInlineZIndex.set(e,t),this.cd.markForCheck()}getWebConsoleWindowZIndex(e){return this.webConsoleInlineZIndex.get(e)||this.baseZIndex}getWebConsoleInlineWindows(){return Array.from(this.webConsoleInlineWindows.values())}bringConsoleToFront(){this.zIndexCounter++,this.consoleZIndex=this.baseZIndex+this.zIndexCounter,this.cd.markForCheck()}bringAIChatToFront(){this.zIndexCounter++,this.aiChatZIndex=this.baseZIndex+this.zIndexCounter,this.cd.markForCheck()}toggleMarkerManager(){if(this.isMarkerManagerVisible&&this.windowManagement.isMinimized("marker-manager")){this.windowManagement.restoreWindow("marker-manager"),this.bringMarkerManagerToFront();return}if(this.isMarkerManagerVisible){this.closeMarkerManager();return}this.isMarkerManagerVisible=!0,this.zIndexCounter++,this.markerManagerZIndex=this.baseZIndex+this.zIndexCounter,this.cd.markForCheck()}closeMarkerManager(){this.isMarkerManagerVisible=!1,this.windowManagement.restoreWindow("marker-manager"),this.cd.markForCheck()}bringMarkerManagerToFront(){this.zIndexCounter++,this.markerManagerZIndex=this.baseZIndex+this.zIndexCounter,this.cd.markForCheck()}openMarkerReplay(e){this.isMarkerReplayVisible=!0,this.markerReplayTag=e,this.windowManagement.restoreWindow("replay-main"),this.zIndexCounter++,this.markerReplayZIndex=this.baseZIndex+this.zIndexCounter,this.cd.markForCheck()}closeMarkerReplay(){this.isMarkerReplayVisible=!1,this.markerReplayTag=null,this.windowManagement.restoreWindow("replay-main"),this.cd.markForCheck()}toggleReplayMinimize(){let e="replay-main";this.windowManagement.minimizedWindows().some(t=>t.id===e)?this.windowManagement.restoreWindow(e):this.windowManagement.minimizeWindow(e,"replay"),this.cd.markForCheck()}getReplayTaskbarLeft(){let e=this.TASKBAR_ICON_WIDTH+this.TASKBAR_ICON_GAP,t=this.getMarkerManagerTaskbarLeft();return this.isMarkerManagerVisible&&(t+=e),t}bringMarkerReplayToFront(){this.zIndexCounter++,this.markerReplayZIndex=this.baseZIndex+this.zIndexCounter,this.cd.markForCheck()}getMarkerManagerTaskbarLeft(){let e=this.TASKBAR_ICON_WIDTH+this.TASKBAR_ICON_GAP,t=this.TASKBAR_BASE_LEFT;return this.isConsoleVisible&&(t+=e),t+=this.webWiresharkInlineWindows.size*e,t+=this.webConsoleInlineWindows.size*e,t+=this.fileManagerInlineWindows.size*e,t}toggleMarkerManagerMinimize(){let e="marker-manager";this.windowManagement.minimizedWindows().some(t=>t.id===e)?this.windowManagement.restoreWindow(e):this.windowManagement.minimizeWindow(e,"marker"),this.cd.markForCheck()}restoreConsole(){this.windowManagement.restoreWindow("console"),this.cd.markForCheck()}restoreWiresharkWindow(e){this.windowManagement.restoreWindow(`wireshark-${e}`),this.cd.markForCheck()}getConsoleTaskbarLeft(){return this.TASKBAR_BASE_LEFT}getWiresharkTaskbarLeft(e){if(!e)return this.TASKBAR_BASE_LEFT;let i=this.getWebWiresharkInlineWindows().findIndex(s=>s.link_id===e),a=this.TASKBAR_ICON_WIDTH+this.TASKBAR_ICON_GAP;return this.TASKBAR_BASE_LEFT+a+i*(this.TASKBAR_ICON_WIDTH+this.TASKBAR_ICON_GAP)}getFileManagerTaskbarLeft(e){let t=Array.from(this.fileManagerInlineWindows.keys()).indexOf(e),i=this.TASKBAR_ICON_WIDTH+this.TASKBAR_ICON_GAP,a=this.webWiresharkInlineWindows.size,s=this.webConsoleInlineWindows.size,d=this.fileManagerInlineWindows.size,p=this.TASKBAR_BASE_LEFT;return this.isConsoleVisible&&(p+=i),p+=a*i,p+=s*i,p+t*i}getWebConsoleTaskbarLeft(e){if(!e)return this.TASKBAR_BASE_LEFT;let i=this.getWebConsoleInlineWindows().findIndex(d=>d.node_id===e),a=this.TASKBAR_ICON_WIDTH+this.TASKBAR_ICON_GAP,s=this.webWiresharkInlineWindows.size;return a+=s*(this.TASKBAR_ICON_WIDTH+this.TASKBAR_ICON_GAP),this.TASKBAR_BASE_LEFT+a+i*(this.TASKBAR_ICON_WIDTH+this.TASKBAR_ICON_GAP)}toggleWebConsoleMinimize(e){let t=`console-${e}`;this.windowManagement.minimizedWindows().some(a=>a.id===t)?this.windowManagement.restoreWindow(t):this.windowManagement.minimizeWindow(t,"console",e),this.cd.markForCheck()}toggleConsoleMinimize(){this.windowManagement.minimizedWindows().some(t=>t.id==="console")?this.windowManagement.restoreWindow("console"):this.windowManagement.minimizeWindow("console","console"),this.cd.markForCheck()}toggleWiresharkMinimize(e){let t=`wireshark-${e}`;this.windowManagement.minimizedWindows().some(a=>a.id===t)?this.windowManagement.restoreWindow(t):this.windowManagement.minimizeWindow(t,"wireshark",e),this.cd.markForCheck()}toggleShowTopologySummary(e){this.isTopologySummaryVisible=e,this.mapSettingsService.toggleTopologySummary(this.isTopologySummaryVisible),this.lazyLoadTopologySummary(),this.cd.markForCheck()}toggleNotifications(e){this.notificationsVisibility=e,this.notificationCenter.setToastsEnabled(e)}toggleLayers(e){let t=this.project.show_layers;this.project.show_layers=e,this.layersVisibility=e,this.mapSettingsService.toggleLayers(e),e?localStorage.setItem("layersVisibility","true"):localStorage.removeItem("layersVisibility"),this.mapChild().applyMapSettingsChanges(),this.projectService.update(this.controller,this.project).subscribe(i=>{this.project.show_layers=i.show_layers,this.layersVisibility=i.show_layers,this.cd.markForCheck()},()=>{this.project.show_layers=t,this.layersVisibility=t,this.mapSettingsService.toggleLayers(this.layersVisibility),this.mapChild().applyMapSettingsChanges(),this.toasterService.error("Cannot update project settings")})}toggleItemLockStatus(e){this.itemLockStatusVisibility=e,this.mapSettingsService.toggleItemLockStatus(e);let t=this.project?.project_id;if(t!=null){let i=`itemLockStatusVisibility_${t}`;e?localStorage.setItem(i,"true"):localStorage.removeItem(i)}this.mapChild()?.applyMapSettingsChanges()}toggleGrid(e){let t=this.project.show_grid;this.project.show_grid=e,this.gridVisibility=e,e?localStorage.setItem("gridVisibility","true"):localStorage.removeItem("gridVisibility"),this.mapChild().gridVisibility.set(e?1:0),this.mapChild().applyMapSettingsChanges(),this.projectService.update(this.controller,this.project).subscribe(i=>{this.project.show_grid=i.show_grid,this.gridVisibility=i.show_grid,this.cd.markForCheck()},()=>{this.project.show_grid=t,this.gridVisibility=t,this.mapChild().gridVisibility.set(t?1:0),this.mapChild().applyMapSettingsChanges(),this.toasterService.error("Cannot update project settings")})}toggleSnapToGrid(e){let t=this.project.snap_to_grid;this.project.snap_to_grid=e,this.projectService.update(this.controller,this.project).subscribe(i=>{this.project.snap_to_grid=i.snap_to_grid},()=>{this.project.snap_to_grid=t,this.toasterService.error("Cannot update project settings")})}showMessage(e){e.type==="error"&&this.toasterService.error(e.message),e.type==="warning"&&this.toasterService.warning(e.message)}hideMenu(){this.projectMapMenuComponent().resetDrawToolChoice(),this.isProjectMapMenuVisible=!1}showMenu(){this.isProjectMapMenuVisible=!0}zoomIn(){let e=this.mapScaleService.getScale(),t=Math.min(br.MAX_SCALE,e+.1);t!==e&&this.mapScaleService.setScale(t)}zoomOut(){let e=this.mapScaleService.getScale(),t=Math.max(br.MIN_SCALE,e-.1);t!==e&&this.mapScaleService.setScale(t)}resetZoom(){this.mapScaleService.resetToDefault()}addNewProject(){let t=this.dialog.open(__,{panelClass:["base-dialog-panel","dialog-small-panel"],autoFocus:!1,disableClose:!0}).componentInstance;t.controller=this.controller}saveProject(){let t=this.dialog.open(DM,{panelClass:["base-dialog-panel","dialog-small-panel"],autoFocus:!1,disableClose:!0}).componentInstance;t.controller=this.controller,t.project=this.project}editProject(){let e=this.dialog.open(f_,{autoFocus:!1,disableClose:!0,panelClass:["base-dialog-panel","configurator-dialog-panel","edit-project-dialog-panel","dialog-large-panel"]}),t=e.componentInstance;t.controller=this.controller,t.project=this.project,e.afterClosed().subscribe(i=>{i&&(this.project=i,this.cd.markForCheck())})}importProject(){let e="",t=this.dialog.open(v_,{panelClass:["base-dialog-panel","dialog-small-panel"],autoFocus:!1,disableClose:!0}),i=t.componentInstance;i.controller=this.controller;let a=t.componentInstance.onImportProject.subscribe(s=>{e=s});t.afterClosed().subscribe(s=>{a.unsubscribe(),e&&!s&&this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","dialog-small-panel"],autoFocus:".cancel-button",data:{title:"Open imported project?",message:"The project was imported successfully. Would you like to open it now?",confirmButtonText:"Open project",tone:"neutral",icon:"folder_open"}}).afterClosed().subscribe(p=>{p&&this.projectService.open(this.controller,e).subscribe({next:()=>{this.router.navigate(["/controller",this.controller.id,"project",e])},error:u=>{let g=u.error?.message||u.message||"Failed to open project";this.toasterService.error(g),this.cd.markForCheck()}})})})}exportProject(){this.nodes().filter(e=>e.node_type==="virtualbox").length>0?this.toasterService.error("Map with VirtualBox machines cannot be exported."):this.nodes().filter(e=>e.status==="started"&&e.node_type==="vpcs"||e.status==="started"&&e.node_type==="virtualbox"||e.status==="started"&&e.node_type==="vmware").length>0?this.toasterService.error("Project with running nodes cannot be exported."):this.exportPortableProjectDialog()}exportPortableProjectDialog(){this.dialog.open(kh,{panelClass:["base-dialog-panel","dialog-medium-panel"],autoFocus:!1,disableClose:!0,data:{controllerDetails:this.controller,projectDetails:this.project}})}uploadImageFile(e){this.readImageFile(e.target)}readImageFile(e){let t=e.files[0],i=new FileReader,a=new Image;i.onloadend=()=>{let s=i.result,d=`<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
|
||
height="${a.height}" width="${a.width}">
|
||
<image height="${a.height}" width="${a.width}"
|
||
xlink:href="${s}"/>
|
||
</svg>`;this.drawingService.add(this.controller,this.project.project_id,-(a.width/2),-(a.height/2),d).subscribe({next:()=>this.toasterService.success("Image added to the topology."),error:p=>{let u=p.error?.message||p.message||"Failed to add image";this.toasterService.error(u),this.cd.markForCheck()}})},a.onload=()=>{i.readAsDataURL(t)},a.src=window.URL.createObjectURL(t)}closeProject(){this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","dialog-small-panel","confirmation-warning-panel"],autoFocus:".cancel-button",data:{title:"Close project?",message:`Close "${this.project.name}"? Open consoles for this project will be disconnected.`,confirmButtonText:"Close project",tone:"warning",icon:"folder_off"}}).afterClosed().subscribe(t=>{t&&this.projectService.close(this.controller,this.project.project_id).subscribe({next:()=>{this.toasterService.success(`Project "${this.project.name}" closed.`),this.router.navigate(["/controller",this.controller.id,"projects"])},error:i=>{let a=i.error?.message||i.message||"Failed to close project";this.toasterService.error(a),this.cd.markForCheck()}})})}deleteProject(){this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","dialog-small-panel","confirmation-danger-panel"],autoFocus:".cancel-button",data:{title:"Delete project?",message:`"${this.project.name}" and its project files will be permanently deleted.`,note:"This action cannot be undone.",confirmButtonText:"Delete project",tone:"danger"}}).afterClosed().subscribe(t=>{t&&this.projectService.delete(this.controller,this.project.project_id).subscribe({next:()=>{this.toasterService.success(`Project "${this.project.name}" deleted.`),this.router.navigate(["/controller",this.controller.id,"projects"])},error:i=>{let a=i.error?.message||i.message||"Failed to delete project";this.toasterService.error(a),this.cd.markForCheck()}})})}showReadme(){let t=this.dialog.open(i2,{panelClass:["base-dialog-panel","dialog-extra-large-panel","dialog-height-80-panel"],autoFocus:!1,disableClose:!0}).componentInstance;t.controller=this.controller,t.project=this.project}ngOnDestroy(){this.destroyed=!0,this.notificationCenter.closePanel(),this.onLeaveProject(),this.nodeConsoleService.openConsoles=0,this.title.setTitle("GNS3 Web UI"),this.drawingsDataSource.clear(),this.nodesDataSource.clear(),this.linksDataSource.clear(),this.project.project_id&&this.projectWebServiceHandler.clearInterfaceStatuses(this.project.project_id),this.markerRegistryService.reset(),this.markerFlashService.reset(),this.projectWsIntentionalClose=!0,this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null),this.stopLivenessCheck(),this.projectws&&this.projectws.OPEN&&this.projectws.close(),this.markerWsIntentionalClose=!0,this.markerReconnectTimer&&(clearTimeout(this.markerReconnectTimer),this.markerReconnectTimer=null),this.stopMarkerLivenessCheck(),this.markerWs&&this.markerWs.OPEN&&this.markerWs.close(),this.ws&&this.ws.OPEN&&this.ws.close(),this.projectMapSubscription.unsubscribe(),this.startedNodeIds.clear()}onOpenFileManagerInline(e){if(this.fileManagerInlineWindows.has(e.node.node_id)){this.bringFileManagerToFront(e.node.node_id);return}this.zIndexCounter++,this.fileManagerInlineWindows.set(e.node.node_id,e.node),this.fileManagerInlineZIndex.set(e.node.node_id,this.baseZIndex+this.zIndexCounter),this.cd.markForCheck()}closeFileManagerInline(e){this.fileManagerInlineWindows.delete(e),this.fileManagerInlineZIndex.delete(e),this.cd.markForCheck()}bringFileManagerToFront(e){this.fileManagerInlineWindows.has(e)&&(this.zIndexCounter++,this.fileManagerInlineZIndex.set(e,this.baseZIndex+this.zIndexCounter),this.cd.markForCheck())}getFileManagerZIndex(e){return this.fileManagerInlineZIndex.get(e)||this.baseZIndex}getFileManagerInlineWindows(){return Array.from(this.fileManagerInlineWindows.values())}isFileManagerMinimized(e){return this.windowManagement.minimizedWindows().some(t=>t.id==="filemgr-"+e)}toggleFileManagerMinimize(e){let t=`filemgr-${e}`;this.windowManagement.minimizedWindows().some(i=>i.id===t)?this.windowManagement.restoreWindow(t):this.windowManagement.minimizeWindow(t,"filemgr"),this.cd.markForCheck()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-project-map"]],viewQuery:function(t,i){t&1&&Bn(i.contextMenu,E_,5)(i.mapChild,p_,5)(i.projectMapMenuComponent,I_,5)(i.topologySummaryContainer,R6e,5,Wo)(i.templateComponent,V_,5),t&2&&jn(5)},decls:146,vars:67,consts:[["projectMap",""],["projectMenu","matMenu"],["viewMenu","matMenu"],["topologySummaryContainer",""],[1,"project-map",3,"ngClass"],["id","project-titlebar"],["mat-button","","matTooltip","Back to projects","matTooltipClass","custom-tooltip","matTooltipPosition","below",1,"back-to-projects",3,"routerLink"],[1,"project-titlebar-controls"],[1,"menu-button-group","primary-controls"],[1,"menu-button-group"],[3,"controller","project"],[3,"openWebWiresharkInline","openWebConsoleInline","openFileManagerInline","project","controller"],[1,"project-titlebar-actions"],["mat-icon-button","","type","button","matTooltip","Notifications","matTooltipClass","custom-tooltip","matTooltipPosition","below","aria-controls","notification-center-panel",1,"project-notifications",3,"click"],[1,"project-notifications__badge"],["mat-button","","matTooltip","Project settings","matTooltipClass","custom-tooltip","matTooltipPosition","below",1,"titlebar-action",3,"matMenuTriggerFor"],["mat-button","","matTooltip","Map settings","matTooltipClass","custom-tooltip","matTooltipPosition","below",1,"titlebar-action",3,"matMenuTriggerFor"],["matTooltip","Toggle topology map","matTooltipClass","custom-tooltip","matTooltipPosition","left","mat-icon-button","",3,"click"],[3,"overlapTrigger"],["mat-menu-item","",3,"click"],[1,"map-settings-menu",3,"overlapTrigger"],[1,"options-item"],[3,"change","checked"],[3,"controller","project","symbols","nodes","links","drawings","width","height","show-interface-labels","readonly"],["id","project-toolbar"],[1,"section"],["matTooltip","Selection mode","matTooltipClass","custom-tooltip","matTooltipPosition","left","mat-icon-button","",1,"selection-button","menu-button",3,"click","color"],["matTooltip","Pan workspace","matTooltipClass","custom-tooltip","matTooltipPosition","left","mat-icon-button","",1,"pan-button","menu-button",3,"click","color"],["matTooltip","Zoom in","matTooltipClass","custom-tooltip","matTooltipPosition","left","mat-icon-button","",1,"zoom-button",3,"click"],["matTooltip","Reset zoom","matTooltipClass","custom-tooltip","matTooltipPosition","left","mat-icon-button","",1,"reset-zoom-button",3,"click"],["matTooltip","Zoom out","matTooltipClass","custom-tooltip","matTooltipPosition","left","mat-icon-button","",1,"zoom-button",3,"click"],[3,"aiChatOpened","controller","project"],["matTooltip","Marker manager","matTooltipClass","custom-tooltip","matTooltipPosition","left","mat-icon-button","",1,"menu-button",3,"click","color"],[3,"controller","project","zIndex"],[3,"controller","project","tag","zIndex"],[3,"links"],[3,"controller"],[3,"drawingSaved","controller","project"],[3,"ngClass"],[3,"project","controller","zIndex"],[1,"inline-taskbar"],[1,"inline-taskbar__icon",3,"inline-taskbar__icon--minimized","left","title"],[3,"nodeCreationChange","controller","project"],["matTooltip","Add a link","matTooltipClass","custom-tooltip","matTooltipPosition","below","mat-icon-button","",1,"menu-button",3,"click","ngClass","color"],[3,"contextmenu","controller","project","symbols","nodes","links","drawings","width","height","show-interface-labels","readonly"],[3,"closeWindow","windowFocused","startReplay","controller","project","zIndex"],[3,"closeWindow","windowFocused","controller","project","tag","zIndex"],[3,"closeConsole","windowFocused","controller","project","zIndex"],[3,"closed","windowFocused","project","controller","zIndex"],[3,"link","controller","project","zIndex"],[3,"closeWindow","windowFocused","link","controller","project","zIndex"],[3,"node","controller","project","zIndex"],[3,"closeWindow","windowFocused","node","controller","project","zIndex"],[3,"node","controller","zIndex"],[3,"closeWindow","windowFocused","node","controller","zIndex"],[1,"inline-taskbar__icon",3,"click","title"],[1,"inline-taskbar__icon-type"],[1,"inline-taskbar__label"]],template:function(t,i){if(t&1&&(r(0,"div",4,0)(2,"div",5)(3,"button",6)(4,"mat-icon"),c(5,"arrow_back"),l(),r(6,"span"),c(7,"Back to projects"),l()(),r(8,"div",7),T(9,$6e,5,6,"div",8),r(10,"div",9),L(11,"app-nodes-menu",10),r(12,"app-context-menu",11),_("openWebWiresharkInline",function(s){return i.openWebWiresharkInline(s)})("openWebConsoleInline",function(s){return i.onOpenWebConsoleInline(s)})("openFileManagerInline",function(s){return i.onOpenFileManagerInline(s)}),l()()(),r(13,"div",12)(14,"button",13),_("click",function(){return i.notificationCenter.togglePanel()}),r(15,"mat-icon"),c(16),l(),T(17,H6e,2,1,"span",14),l(),r(18,"button",15)(19,"mat-icon"),c(20,"settings"),l(),r(21,"span"),c(22,"Project settings"),l()(),r(23,"button",16)(24,"mat-icon"),c(25,"view_module"),l(),r(26,"span"),c(27,"Map settings"),l()(),r(28,"button",17),_("click",function(){return i.toggleShowTopologySummary(!i.isTopologySummaryVisible)}),r(29,"mat-icon"),c(30,"account_tree"),l()()(),r(31,"mat-menu",18,1)(33,"div")(34,"button",19),_("click",function(){return i.addNewProject()}),r(35,"mat-icon"),c(36,"add"),l(),r(37,"span"),c(38,"Add new blank project"),l()(),r(39,"button",19),_("click",function(){return i.saveProject()}),r(40,"mat-icon"),c(41,"save"),l(),r(42,"span"),c(43,"Save project as"),l()(),r(44,"button",19),_("click",function(){return i.editProject()}),r(45,"mat-icon"),c(46,"edit"),l(),r(47,"span"),c(48,"Edit project"),l()(),r(49,"button",19),_("click",function(){return i.exportProject()}),r(50,"mat-icon"),c(51,"call_made"),l(),r(52,"span"),c(53,"Export project"),l()(),r(54,"button",19),_("click",function(){return i.importProject()}),r(55,"mat-icon"),c(56,"call_received"),l(),r(57,"span"),c(58,"Import project"),l()(),r(59,"button",19),_("click",function(){return i.closeProject()}),r(60,"mat-icon"),c(61,"close"),l(),r(62,"span"),c(63,"Close project"),l()(),r(64,"button",19),_("click",function(){return i.deleteProject()}),r(65,"mat-icon"),c(66,"delete"),l(),r(67,"span"),c(68,"Delete project"),l()()()(),r(69,"mat-menu",20,2)(71,"div",21)(72,"mat-checkbox",22),_("change",function(s){return i.toggleShowInterfaceLabels(s.checked)}),c(73," Show interface labels "),l(),r(74,"mat-checkbox",22),_("change",function(s){return i.toggleShowConsole(s.checked)}),c(75," Show console "),l(),r(76,"mat-checkbox",22),_("change",function(s){return i.toggleShowTopologySummary(s.checked)}),c(77," Show topology/controllers summary "),l(),r(78,"mat-checkbox",22),_("change",function(s){return i.toggleNotifications(s.checked)}),c(79," Show notification toasts "),l(),r(80,"mat-checkbox",22),_("change",function(s){return i.toggleLayers(s.checked)}),c(81," Show layers "),l(),r(82,"mat-checkbox",22),_("change",function(s){return i.toggleItemLockStatus(s.checked)}),c(83," Show item lock status "),l(),r(84,"mat-checkbox",22),_("change",function(s){return i.toggleGrid(s.checked)}),c(85," Show grid "),l(),r(86,"mat-checkbox",22),_("change",function(s){return i.toggleSnapToGrid(s.checked)}),c(87," Snap to grid "),l(),r(88,"mat-checkbox",22),_("change",function(s){return i.toggleSymbolScaling(s.checked)}),c(89," Scale symbols "),l()()()(),T(90,U6e,1,10,"app-d3-map",23),r(91,"div",24)(92,"div",25)(93,"button",26),_("click",function(){return i.toggleMovingMode()}),r(94,"mat-icon"),c(95,"near_me"),l()(),r(96,"button",27),_("click",function(){return i.toggleMovingMode()}),r(97,"mat-icon"),c(98,"zoom_out_map"),l()(),r(99,"button",28),_("click",function(){return i.zoomIn()}),r(100,"mat-icon"),c(101,"zoom_in"),l()(),r(102,"button",29),_("click",function(){return i.resetZoom()}),r(103,"mat-icon"),c(104,"adjust"),l()(),r(105,"button",30),_("click",function(){return i.zoomOut()}),r(106,"mat-icon"),c(107,"zoom_out"),l()()(),r(108,"div",25)(109,"app-project-map-menu",31),_("aiChatOpened",function(){return i.onAIChatOpened()}),l()(),r(110,"div",25)(111,"button",32),_("click",function(){return i.toggleMarkerManager()}),r(112,"mat-icon"),c(113,"insights"),l()()(),T(114,W6e,2,2,"div",25),l(),T(115,G6e,1,3,"app-marker-manager",33),T(116,q6e,1,4,"app-marker-replay-overlay",34),L(117,"app-progress"),T(118,Q6e,1,1,"app-draw-link-tool",35),L(119,"app-drawing-dragged",10)(120,"app-drawing-resized",36)(121,"app-interface-label-dragged",36)(122,"app-link-created",10)(123,"app-node-dragged",10)(124,"app-node-label-dragged",36),r(125,"app-text-added",37),_("drawingSaved",function(){return i.onDrawingSaved()}),l(),L(126,"app-text-edited",36),r(127,"div",38),T(128,K6e,1,3,"app-console-wrapper",33),l(),T(129,X6e,1,3,"app-ai-chat",39),T(130,Z6e,2,0),T(131,eNe,2,0),T(132,nNe,2,0),r(133,"div",40),T(134,iNe,5,7,"div",41),Q(135,oNe,5,7,"div",41,O$),Q(137,aNe,5,7,"div",41,N2),Q(139,rNe,5,6,"div",41,N2),T(141,sNe,5,7,"div",41),T(142,lNe,5,7,"div",41),l()(),L(143,"app-notification-center"),se(144,cNe,0,0,"ng-template",null,3,Qr)),t&2){let a=Te(32),s=Te(70);ne("pan-mode",i.tools.moving),v("ngClass",i.mapBgClass()),m(3),v("routerLink",tn(63,z6e,i.controller.id)),m(6),E(i.readonly?-1:9),m(2),v("controller",i.controller)("project",i.project),m(),v("project",i.project)("controller",i.controller),m(2),Ce("aria-label",i.notificationCenter.panelOpen()?"Close notifications":"Open notifications")("aria-expanded",i.notificationCenter.panelOpen()),m(2),N(i.notificationCenter.panelOpen()?"notifications":"notifications_none"),m(),E(i.notificationCenter.unreadCount()>0?17:-1),m(),v("matMenuTriggerFor",a),m(5),v("matMenuTriggerFor",s),m(8),v("overlapTrigger",!1),m(38),v("overlapTrigger",!1),m(3),v("checked",i.isInterfaceLabelVisible),m(2),v("checked",i.isConsoleVisible),m(2),v("checked",i.isTopologySummaryVisible),m(2),v("checked",i.notificationsVisibility),m(2),v("checked",i.layersVisibility),m(2),v("checked",i.itemLockStatusVisibility),m(2),v("checked",i.gridVisibility),m(2),v("checked",i.project.snap_to_grid),m(2),v("checked",i.symbolScaling),m(2),E(i.controller.id&&i.project.project_id?90:-1),m(3),ne("tool-active",!i.tools.moving),v("color",i.tools.moving?"basic":"primary"),m(3),ne("tool-active",i.tools.moving),v("color",i.tools.moving?"primary":"basic"),m(13),v("controller",i.controller)("project",i.project),m(2),ne("tool-active",i.isMarkerManagerVisible),v("color",i.isMarkerManagerVisible?"primary":"basic"),m(3),E(i.readonly?-1:114),m(),E(i.project&&i.isMarkerManagerVisible?115:-1),m(),E(i.project&&i.isMarkerReplayVisible&&i.markerReplayTag!==null?116:-1),m(2),E(i.tools.draw_link?118:-1),m(),v("controller",i.controller)("project",i.project),m(),v("controller",i.controller),m(),v("controller",i.controller),m(),v("controller",i.controller)("project",i.project),m(),v("controller",i.controller)("project",i.project),m(),v("controller",i.controller),m(),v("controller",i.controller)("project",i.project),m(),v("controller",i.controller),m(),v("ngClass",tn(65,L6e,!i.isConsoleVisible)),m(),E(i.project?128:-1),m(),E(i.project&&i.isAIChatVisible?129:-1),m(),E(i.project&&i.webWiresharkInlineWindows.size>0?130:-1),m(),E(i.project&&i.webConsoleInlineWindows.size>0?131:-1),m(),E(i.project&&i.fileManagerInlineWindows.size>0?132:-1),m(2),E(i.project&&i.isConsoleVisible?134:-1),m(),K(i.getWebWiresharkInlineWindows()),m(2),K(i.getWebConsoleInlineWindows()),m(2),K(i.getFileManagerInlineWindows()),m(2),E(i.project&&i.isMarkerManagerVisible?141:-1),m(),E(i.project&&i.isMarkerReplayVisible&&i.markerReplayTag!==null?142:-1)}},dependencies:[fe,Ao,St,Y,he,Be,Rt,Gt,ie,ce,it,Ko,ut,eo,st,pt,vn,Co,p_,E_,I_,C2,b2,k2,V_,_2,l2,Bj,jj,Hj,Um,Qj,Kj,Xj,Yj,Zj,Jj,e$,k$,a$,S$,A2],styles:['@charset "UTF-8";[_nghost-%COMP%]{--gns3-project-titlebar-height: 56px;--gns3-notification-anchor-height: var(--gns3-project-titlebar-height)}.shadow-subtle[_ngcontent-%COMP%], #project-toolbar[_ngcontent-%COMP%]{box-shadow:0 1px 3px color-mix(in srgb,var(--mat-sys-shadow) var(--gns3-shadow-opacity-light),transparent)}.shadow-normal[_ngcontent-%COMP%], .shadow[_ngcontent-%COMP%], #project-titlebar[_ngcontent-%COMP%]{box-shadow:0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) var(--gns3-shadow-opacity-normal),transparent)}.shadow-medium[_ngcontent-%COMP%], #menu-wrapper[_ngcontent-%COMP%], .shadowed[_ngcontent-%COMP%]{box-shadow:0 4px 16px color-mix(in srgb,var(--mat-sys-shadow) var(--gns3-shadow-opacity-medium),transparent)}.shadow-heavy[_ngcontent-%COMP%]{box-shadow:0 4px 16px color-mix(in srgb,var(--mat-sys-shadow) var(--gns3-shadow-opacity-heavy),transparent)}.selection-on-primary[_ngcontent-%COMP%], #project-titlebar[_ngcontent-%COMP%] .selected[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--mat-sys-on-primary) var(--gns3-selection-opacity-normal),transparent)}.selection-on-primary[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], #project-titlebar[_ngcontent-%COMP%] .selected[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], .selection-on-primary[_ngcontent-%COMP%] .icon[_ngcontent-%COMP%], #project-titlebar[_ngcontent-%COMP%] .selected[_ngcontent-%COMP%] .icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary)}.selection-on-surface[_ngcontent-%COMP%]{background:var(--mat-sys-primary-container)}.selection-on-surface[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], .selection-on-surface[_ngcontent-%COMP%] .icon[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.selection-svg-stroke[_ngcontent-%COMP%], line.selected[_ngcontent-%COMP%]{stroke:var(--mat-sys-primary)}.selection-error[_ngcontent-%COMP%], path.curve_element.selected[_ngcontent-%COMP%], path.serial_link.selected[_ngcontent-%COMP%]{stroke:var(--mat-sys-error)}.wrapper[_ngcontent-%COMP%]{height:500px}app-root[_ngcontent-%COMP%], app-project-map[_ngcontent-%COMP%], .project-map[_ngcontent-%COMP%], app-map[_ngcontent-%COMP%]{width:auto}g.node[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-primary)}.project-map[_ngcontent-%COMP%]{background:var(--gns3-map-bg, var(--mat-sys-surface));min-height:100vh;min-width:100vw}.project-map[_ngcontent-%COMP%] .label[_ngcontent-%COMP%]{fill:var(--mat-sys-on-surface)}.project-map[_ngcontent-%COMP%] path.ethernet_link[_ngcontent-%COMP%]{stroke:var(--mat-sys-on-surface)}.project-map[_ngcontent-%COMP%] path.serial_link[_ngcontent-%COMP%]{stroke:var(--mat-sys-error)}.project-map[_ngcontent-%COMP%] g.drawing-line-tool[_ngcontent-%COMP%] path[_ngcontent-%COMP%]{stroke:var(--mat-sys-on-surface)}.project-map.pan-mode[_ngcontent-%COMP%] app-d3-map[_ngcontent-%COMP%]{cursor:grab}.project-map.pan-mode[_ngcontent-%COMP%] app-d3-map[_ngcontent-%COMP%] svg.map[_ngcontent-%COMP%]{cursor:grab}#project-titlebar[_ngcontent-%COMP%]{position:fixed;top:0;left:0;right:0;height:var(--gns3-project-titlebar-height);box-sizing:border-box;padding:0 16px;background-color:var(--mat-sys-primary);color:var(--mat-sys-on-primary);display:flex;justify-content:space-between;align-items:center;z-index:2;transition:background-color var(--gns3-motion-duration-standard) ease}#project-titlebar[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary)}#project-titlebar[_ngcontent-%COMP%] .back-to-projects[_ngcontent-%COMP%], #project-titlebar[_ngcontent-%COMP%] .titlebar-action[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary);--mat-text-button-label-text-color: var(--mat-sys-on-primary)}#project-titlebar[_ngcontent-%COMP%] .back-to-projects[_ngcontent-%COMP%]{flex-shrink:0}#project-titlebar[_ngcontent-%COMP%] .project-titlebar-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;flex-shrink:0}#project-titlebar[_ngcontent-%COMP%] .project-notifications[_ngcontent-%COMP%]{position:relative;color:var(--mat-sys-on-primary);--mat-icon-button-icon-color: var(--mat-sys-on-primary)}#project-titlebar[_ngcontent-%COMP%] .project-notifications__badge[_ngcontent-%COMP%]{position:absolute;top:1px;right:1px;min-width:16px;height:16px;padding:0 4px;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;color:var(--mat-sys-on-error);background:var(--mat-sys-error);border:2px solid var(--mat-sys-primary);border-radius:999px;font-size:9px;font-weight:700;line-height:1}#project-titlebar[_ngcontent-%COMP%] .titlebar-action[_ngcontent-%COMP%]{padding:0 10px}#project-titlebar[_ngcontent-%COMP%] .primary-controls[_ngcontent-%COMP%]{border-right:1px solid color-mix(in srgb,var(--mat-sys-on-primary) var(--gns3-border-opacity-medium),transparent);padding-right:16px;margin-right:16px}#project-titlebar[_ngcontent-%COMP%] .menu-button-group[_ngcontent-%COMP%]{display:flex;align-items:center;height:40px}#project-titlebar[_ngcontent-%COMP%] .menu-button[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;height:40px;width:40px;margin:0 8px;border-radius:20px;background:none;font-size:14px;transition:transform var(--gns3-motion-duration-standard) ease}#project-titlebar[_ngcontent-%COMP%] .menu-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary)}#project-titlebar[_ngcontent-%COMP%] .menu-button[_ngcontent-%COMP%]:hover{transform:scale(1.3)}#project-titlebar[_ngcontent-%COMP%] .menu-button.selected[_ngcontent-%COMP%]:hover{transform:scale(1.15)}#project-titlebar[_ngcontent-%COMP%] .add-menu-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:28px}#project-titlebar[_ngcontent-%COMP%] .selected[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--mat-sys-on-primary) 30%,transparent);box-shadow:0 0 0 2px color-mix(in srgb,var(--mat-sys-on-primary) 50%,transparent);transform:scale(1.15)}#project-titlebar[_ngcontent-%COMP%] .project-titlebar-controls[_ngcontent-%COMP%]{display:flex;align-items:center}@media(max-width:1100px){#project-titlebar[_ngcontent-%COMP%] .titlebar-action[_ngcontent-%COMP%]{min-width:40px;padding:0 8px}#project-titlebar[_ngcontent-%COMP%] .titlebar-action[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{display:none}}#project-toolbar[_ngcontent-%COMP%]{position:fixed;top:var(--gns3-project-titlebar-height);left:0;width:56px;background-color:var(--mat-sys-surface-container);border-radius:0 0 4px;z-index:2;transition:background-color var(--gns3-motion-duration-standard) ease;display:flex;flex-direction:column;align-items:center}#project-toolbar[_ngcontent-%COMP%] button.mat-mdc-icon-button[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;--mdc-icon-button-icon-size: 20px;--mat-icon-button-icon-size: 20px;--mat-icon-button-state-layer-size: 40px;--mdc-icon-button-state-layer-size: 40px}#project-toolbar[_ngcontent-%COMP%] button.mat-mdc-icon-button[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;font-size:20px;margin:0}#project-toolbar[_ngcontent-%COMP%] button.mat-mdc-icon-button[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%] svg[_ngcontent-%COMP%]{width:20px;height:20px}#project-toolbar[_ngcontent-%COMP%] .menu-button[_ngcontent-%COMP%], #project-toolbar[_ngcontent-%COMP%] .zoom-button[_ngcontent-%COMP%], #project-toolbar[_ngcontent-%COMP%] .reset-zoom-button[_ngcontent-%COMP%], #project-toolbar[_ngcontent-%COMP%] .selection-button[_ngcontent-%COMP%], #project-toolbar[_ngcontent-%COMP%] .snapshot-button[_ngcontent-%COMP%]{width:40px;height:40px;border-radius:20px;margin:2px 0;transition:transform var(--gns3-motion-duration-standard) ease}#project-toolbar[_ngcontent-%COMP%] .menu-button[_ngcontent-%COMP%]:hover, #project-toolbar[_ngcontent-%COMP%] .zoom-button[_ngcontent-%COMP%]:hover, #project-toolbar[_ngcontent-%COMP%] .reset-zoom-button[_ngcontent-%COMP%]:hover, #project-toolbar[_ngcontent-%COMP%] .selection-button[_ngcontent-%COMP%]:hover, #project-toolbar[_ngcontent-%COMP%] .snapshot-button[_ngcontent-%COMP%]:hover{transform:scale(1.3)}#project-toolbar[_ngcontent-%COMP%] .menu-button.tool-active[_ngcontent-%COMP%], #project-toolbar[_ngcontent-%COMP%] .selection-button.tool-active[_ngcontent-%COMP%]{background-color:var(--mat-sys-secondary-container)}#project-toolbar[_ngcontent-%COMP%] .menu-button.tool-active[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], #project-toolbar[_ngcontent-%COMP%] .selection-button.tool-active[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary-container)}#project-toolbar[_ngcontent-%COMP%] .selection-button[_ngcontent-%COMP%]{margin-bottom:0}#project-toolbar[_ngcontent-%COMP%] .section[_ngcontent-%COMP%]{display:flex;flex-direction:column;justify-content:center;align-items:center;border-top:1px solid var(--mat-sys-outline-variant);padding:5px 0}#project-toolbar[_ngcontent-%COMP%] .section[_ngcontent-%COMP%]:first-child{border:none}[data-density=compact][_nghost-%COMP%], [data-density=compact] [_nghost-%COMP%]{--gns3-project-titlebar-height: 48px}[data-density=compact][_nghost-%COMP%] #project-titlebar[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] #project-titlebar[_ngcontent-%COMP%]{padding:0 12px}[data-density=compact][_nghost-%COMP%] #project-titlebar[_ngcontent-%COMP%] .menu-button-group[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] #project-titlebar[_ngcontent-%COMP%] .menu-button-group[_ngcontent-%COMP%]{height:36px}[data-density=compact][_nghost-%COMP%] #project-titlebar[_ngcontent-%COMP%] .menu-button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] #project-titlebar[_ngcontent-%COMP%] .menu-button[_ngcontent-%COMP%]{width:36px;height:36px;margin:0 6px;border-radius:18px}[data-density=compact][_nghost-%COMP%] #project-titlebar[_ngcontent-%COMP%] .primary-controls[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] #project-titlebar[_ngcontent-%COMP%] .primary-controls[_ngcontent-%COMP%]{padding-right:12px;margin-right:12px}img[_ngcontent-%COMP%]{-webkit-filter:invert(1);filter:invert(1)}#show-menu-wrapper[_ngcontent-%COMP%]{position:fixed;background:transparent;top:0;left:92px;background:var(--mat-sys-surface);height:48px;padding-top:16px;transition:background-color var(--gns3-motion-duration-standard) ease}#show-menu-wrapper[_ngcontent-%COMP%] .arrow-button[_ngcontent-%COMP%]{outline:0}.non-visible[_ngcontent-%COMP%]{display:none}#menu-wrapper[_ngcontent-%COMP%]{position:fixed;background:transparent;top:0;left:92px;right:0;background:var(--mat-sys-surface);height:48px;padding-top:16px;padding-bottom:16px;width:0;overflow:hidden;transition:var(--gns3-motion-duration-standard) ease;display:flex}#menu-wrapper[_ngcontent-%COMP%] .menu-button[_ngcontent-%COMP%]{outline:0;transition:var(--gns3-motion-duration-standard) ease;margin-bottom:16px;width:40px;margin-right:16px;margin-left:16px;background:transparent;padding:0;border:none;background-color:transparent}#menu-wrapper[_ngcontent-%COMP%] .arrow-button[_ngcontent-%COMP%]{outline:0;transition:var(--gns3-motion-duration-standard) ease;margin-bottom:16px}.extended[_ngcontent-%COMP%]{width:200px;height:100%;overflow:hidden}mat-divider.divider[_ngcontent-%COMP%]{height:40px;margin-left:1px;margin-right:7px;width:10px;color:var(--mat-sys-outline-variant)}@-moz-document url-prefix(){.mat-drawer-content{display:inline}}.mat-drawer-backdrop.mat-drawer-shown[_ngcontent-%COMP%]{background-color:transparent}.project-toolbar[_ngcontent-%COMP%] .mat-toolbar-multiple-rows[_ngcontent-%COMP%]{width:auto}.loading-spinner[_ngcontent-%COMP%]{position:absolute;top:50%;width:100px;margin-left:-50px;margin-top:-50px;left:50%}svg.map[_ngcontent-%COMP%] image[_ngcontent-%COMP%]:hover, svg.map[_ngcontent-%COMP%] image.chosen[_ngcontent-%COMP%], g.node_body.selected[_ngcontent-%COMP%] > image[_ngcontent-%COMP%]{filter:url(#grayscale)}.selected[_ngcontent-%COMP%] > .interface_label_border[_ngcontent-%COMP%]{stroke:var(--mat-sys-on-surface);fill:none}g.drawing_body[_ngcontent-%COMP%] .rotation-handle-stem[_ngcontent-%COMP%], g.drawing_body[_ngcontent-%COMP%] .rotation-handle-knob[_ngcontent-%COMP%]{visibility:hidden}g.drawing_body.drawing_selected[_ngcontent-%COMP%] .rotation-handle-stem[_ngcontent-%COMP%], g.drawing_body.drawing_selected[_ngcontent-%COMP%] .rotation-handle-knob[_ngcontent-%COMP%]{visibility:visible}g.drawing_body.drawing_selected[_ngcontent-%COMP%] .rotation-handle-stem[_ngcontent-%COMP%]{stroke:var(--mat-sys-primary);stroke-width:2;stroke-dasharray:4 2}g.drawing_body.drawing_selected[_ngcontent-%COMP%] .rotation-handle-knob[_ngcontent-%COMP%]{fill:var(--mat-sys-primary);stroke:var(--mat-sys-on-primary);stroke-width:2}g.node[_ngcontent-%COMP%] text[_ngcontent-%COMP%], .noselect[_ngcontent-%COMP%]{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.project-toolbar[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{outline:0;border:none;-moz-outline-style:none}.options-item[_ngcontent-%COMP%]{display:flex;min-width:280px;flex-direction:column}.options-item[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%]{display:flex;width:100%;min-height:var(--gns3-menu-item-min-height, 48px);box-sizing:border-box;align-items:center;padding-inline:var(--gns3-density-space-3);transition:color var(--gns3-motion-duration-standard) ease,background-color var(--gns3-motion-duration-standard) ease}.options-item[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%]:not(.mat-mdc-checkbox-disabled):hover{color:var(--mat-sys-on-surface);background:var(--gns3-menu-item-hover-background)}.options-item[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%]:not(.mat-mdc-checkbox-disabled):focus-within{color:var(--mat-sys-on-surface);background:var(--gns3-menu-item-focus-background)}.visible[_ngcontent-%COMP%]{display:none}.unmarked[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface)}.inline-taskbar[_ngcontent-%COMP%]{position:fixed;bottom:20px;left:0;z-index:999;display:flex;gap:8px}.inline-taskbar__icon[_ngcontent-%COMP%]{position:absolute;bottom:0;display:flex;align-items:center;gap:8px;padding:8px 12px;height:48px;width:180px;cursor:pointer;user-select:none;transition:background-color var(--gns3-motion-duration-standard) linear;background:var(--mat-sys-surface);border-radius:8px;box-shadow:0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 25%,transparent),0 0 0 1px var(--mat-sys-outline-variant)}.inline-taskbar__icon[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-on-surface) 8%,var(--mat-sys-surface))}.inline-taskbar__icon[_ngcontent-%COMP%]:active{background:color-mix(in srgb,var(--mat-sys-on-surface) 12%,var(--mat-sys-surface))}.inline-taskbar__icon--minimized[_ngcontent-%COMP%]{opacity:.7}.inline-taskbar__icon--minimized[_ngcontent-%COMP%]:hover{opacity:1}.inline-taskbar__icon-type[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px;color:var(--mat-sys-primary);flex-shrink:0}.inline-taskbar__label[_ngcontent-%COMP%]{font-size:12px;font-weight:500;color:var(--mat-sys-on-surface);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}'],changeDetection:0})}return n})();var R2=(()=>{class n{dialogRef=f(We);projectService=f(Ti);toasterService=f(re);cd=f(oe);controller;project;name=$("");ngOnInit(){this.name.set(this.project.name),this.cd.markForCheck()}onCloseClick(){this.dialogRef.close()}onSaveClick(){this.projectService.duplicate(this.controller,this.project.project_id,this.name()).subscribe({next:()=>{this.toasterService.success(`Project duplicated as "${this.name()}".`),this.dialogRef.close()},error:e=>{let t=e.error?.message||e.message||"Failed to duplicate project";this.toasterService.error(t),this.cd.markForCheck()}})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-choose-name-dialog"]],inputs:{controller:"controller",project:"project",name:[1,"name"]},outputs:{name:"nameChange"},decls:10,vars:1,consts:[["mat-dialog-title",""],["mat-dialog-content",""],["subscriptSizing","dynamic",1,"form-field"],["matInput","","placeholder","Project name","type","text",3,"input","value"],["mat-dialog-actions",""],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click"]],template:function(t,i){t&1&&(r(0,"h1",0),c(1,"Save project as"),l(),r(2,"div",1)(3,"mat-form-field",2)(4,"input",3),_("input",function(s){return i.name.set(s.target.value)}),l()()(),r(5,"div",4)(6,"button",5),_("click",function(){return i.onCloseClick()}),c(7,"Cancel"),l(),r(8,"button",6),_("click",function(){return i.onSaveClick()}),c(9,"Save project"),l()()),t&2&&(m(4),v("value",i.name()))},dependencies:[fe,St,ke,qe,Qe,bt,Y,he,ye,Ee,Pe,we],styles:[".form-field[_ngcontent-%COMP%]{width:100%}"],changeDetection:0})}return n})();function dNe(n,o){n&1&&(r(0,"h1",0),c(1,"Deleting projects"),l(),r(2,"div",1),L(3,"mat-spinner",2),l())}function mNe(n,o){if(n&1&&(r(0,"p"),c(1),l()),n&2){let e=o.$implicit,t=o.$index;m(),Un("",t+1,". ",(e==null?null:e.filename)||(e==null?null:e.project_id))}}function pNe(n,o){if(n&1&&(r(0,"h2",6),c(1),l(),Q(2,mNe,2,2,"p",null,Oe)),n&2){let e=h(2);m(),Un("\u2713 ",e.successfulDeletions().length," ",e.successfulDeletions().length===1?"Project":"Projects"," deleted successfully"),m(),K(e.successfulDeletions())}}function uNe(n,o){if(n&1&&(r(0,"p"),c(1),r(2,"strong"),c(3),l(),L(4,"br"),r(5,"span",8),c(6),l()()),n&2){let e=o.$implicit,t=o.$index;m(),X(" ",t+1,". "),m(2),N((e.project==null?null:e.project.filename)||(e.project==null?null:e.project.project_id)),m(3),N((e.error==null||e.error.error==null?null:e.error.error.message)||(e.error==null?null:e.error.message)||"Unknown error")}}function gNe(n,o){if(n&1&&(r(0,"h2",7),c(1),l(),Q(2,uNe,7,3,"p",null,ni)),n&2){let e=h(2);m(),Un("\u2717 ",e.failedDeletions().length," ",e.failedDeletions().length===1?"Project":"Projects"," failed to delete"),m(),K(e.failedDeletions())}}function hNe(n,o){if(n&1){let e=R();r(0,"div",3),T(1,pNe,4,2),T(2,gNe,4,2),l(),r(3,"div",4)(4,"button",5),_("click",function(){y(e);let i=h();return w(i.dialogRef.close(i.successfulDeletions().length>0))}),c(5,"Close"),l()()}if(n&2){let e=h();m(),E(e.successfulDeletions().length>0?1:-1),m(),E(e.failedDeletions().length>0?2:-1)}}var z2=(()=>{class n{deleteData;dialogRef=f(We);projectService=f(Ti);toasterService=f(re);cd=f(oe);isDelete=z(!0);isUsedFiles=z(!1);successfulDeletions=z([]);failedDeletions=z([]);constructor(e){this.deleteData=e}ngOnInit(){this.deleteData.autoStart!==!1&&this.deleteFile()}async deleteAll(){this.isDelete.set(!0),await this.deleteFile()}deleteFile(){let e=this.deleteData.deleteFilesPaths.map((t,i)=>this.projectService.delete(this.deleteData.controller,t.project_id).pipe(ei(a=>Vt({error:!0,data:a,projectIndex:i}))));Ci(e).subscribe({next:t=>{let i=[],a=[];t.forEach((s,d)=>{s&&s.error===!0?a.push({project:this.deleteData.deleteFilesPaths[d],error:s.data}):s==null?i.push(this.deleteData.deleteFilesPaths[d]):a.push({project:this.deleteData.deleteFilesPaths[d],error:s})}),this.successfulDeletions.set(i),this.failedDeletions.set(a),this.isUsedFiles.set(!0),this.isDelete.set(!0),this.cd.markForCheck()},error:t=>{let i=t.error?.message||t.message||"Failed to delete projects";this.toasterService.error(i),this.cd.markForCheck()}})}static \u0275fac=function(t){return new(t||n)(Mt(Wt))};static \u0275cmp=V({type:n,selectors:[["app-confirmation-delete-all-projects"]],decls:2,vars:2,consts:[["align","center","mat-dialog-title",""],["mat-dialog-content","","align","center"],["color","accent"],["mat-dialog-content",""],["mat-dialog-actions","","align","end"],["mat-raised-button","","color","primary",3,"click"],["mat-dialog-title",""],["mat-dialog-title","",1,"mat-error"],[1,"mat-error"]],template:function(t,i){t&1&&(T(0,dNe,4,0),T(1,hNe,6,2)),t&2&&(E(i.isUsedFiles()?-1:0),m(),E(i.isUsedFiles()?1:-1))},dependencies:[fe,ke,qe,Qe,bt,Y,he,rt,mt],encapsulation:2,changeDetection:0})}return n})();var _Ne=["viewport"],fNe=160,vNe=400,L2=(()=>{class n{controller=ee.required();project=ee.required();nodes=ee([]);links=ee([]);drawings=ee([]);variant=ee("panel");viewport=ln.required("viewport");mapSettingsService=f(ui);themeService=f(Ni);destroyRef=f(Va);resizeObserver=null;mapBgClass=Ne(()=>{let e=this.themeService.savedMapTheme,t=e==="auto"?this.themeService.isDarkMode():e.startsWith("dark-");return{"topology-preview__viewport--dark-bg":t,"topology-preview__viewport--light-bg":!t}});constructor(){this.mapSettingsService.mapRenderedEmitter.pipe(wo(this.destroyRef)).subscribe(()=>this.recomputeScale()),Ya(()=>{this.resizeObserver=new ResizeObserver(()=>this.recomputeScale()),this.resizeObserver.observe(this.viewport().nativeElement),this.recomputeScale()}),this.destroyRef.onDestroy(()=>{this.resizeObserver?.disconnect(),this.resizeObserver=null})}recomputeScale(){let e=this.viewport()?.nativeElement;if(!e)return;let t=e.querySelector("svg");if(!t)return;let i=parseFloat(t.getAttribute("width")??""),a=parseFloat(t.getAttribute("height")??"");if(!i||!a)return;let s=this.measureContentBox(t)??{x:0,y:0,width:i,height:a};if(this.variant()==="panel"){let C=Math.min(vNe,Math.round(window.innerHeight*.45)),M=Math.round(e.clientWidth*s.height/s.width);e.style.height=`${Math.max(fNe,Math.min(M,C))}px`}let d=16,p=Math.min(e.clientWidth/(s.width+2*d),e.clientHeight/(s.height+2*d)),u=(i/2-(s.x+s.width/2))*p,g=(a/2-(s.y+s.height/2))*p;e.style.setProperty("--topology-preview-scale",String(p)),e.style.setProperty("--topology-preview-shift-x",`${u}px`),e.style.setProperty("--topology-preview-shift-y",`${g}px`)}measureContentBox(e){let t=e.querySelector("g.canvas");if(!t)return null;let i=t.getBBox();if(!i.width||!i.height)return null;let a=t.transform.baseVal,s=a.numberOfItems>0?a.getItem(0).matrix:null,d=a.numberOfItems>1&&a.getItem(1).matrix.a||1;return{x:i.x*d+(s?.e??0),y:i.y*d+(s?.f??0),width:i.width*d,height:i.height*d}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-topology-preview"]],viewQuery:function(t,i){t&1&&Bn(i.viewport,_Ne,5),t&2&&jn()},inputs:{controller:[1,"controller"],project:[1,"project"],nodes:[1,"nodes"],links:[1,"links"],drawings:[1,"drawings"],variant:[1,"variant"]},decls:3,vars:15,consts:[["viewport",""],[1,"topology-preview__viewport"],[1,"topology-preview__map",3,"controller","project","nodes","links","drawings","width","height","show-interface-labels","readonly"]],template:function(t,i){t&1&&(r(0,"div",1,0),L(2,"app-d3-map",2),l()),t&2&&(ne("topology-preview__viewport--panel",i.variant()==="panel")("topology-preview__viewport--light-bg",i.mapBgClass()["topology-preview__viewport--light-bg"])("topology-preview__viewport--dark-bg",i.mapBgClass()["topology-preview__viewport--dark-bg"]),m(2),v("controller",i.controller())("project",i.project())("nodes",i.nodes())("links",i.links())("drawings",i.drawings())("width",i.project().scene_width||2e3)("height",i.project().scene_height||1e3)("show-interface-labels",!0)("readonly",!0))},dependencies:[p_],styles:['@charset "UTF-8";[_nghost-%COMP%]{display:flex;flex-direction:column;flex:1;min-height:0;width:100%}.topology-preview__viewport[_ngcontent-%COMP%]{position:relative;flex:1;min-height:0;overflow:hidden}.topology-preview__viewport--panel[_ngcontent-%COMP%]{pointer-events:none;flex:none;height:200px}.topology-preview__map[_ngcontent-%COMP%]{display:block;position:absolute;left:50%;top:50%;transform:translate(calc(-50% + var(--topology-preview-shift-x, 0px)),calc(-50% + var(--topology-preview-shift-y, 0px))) scale(var(--topology-preview-scale, 1))}'],changeDetection:0})}return n})();var D$=(()=>{class n{dialogRef=f(We);data=f(Wt);static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-topology-preview-dialog"]],decls:7,vars:6,consts:[["mat-dialog-title",""],[1,"topology-preview-dialog__content"],["variant","dialog",3,"controller","project","nodes","links","drawings"],["align","end"],["mat-button","",3,"click"]],template:function(t,i){t&1&&(r(0,"h2",0),c(1),l(),r(2,"mat-dialog-content",1),L(3,"app-topology-preview",2),l(),r(4,"mat-dialog-actions",3)(5,"button",4),_("click",function(){return i.dialogRef.close()}),c(6,"Close"),l()()),t&2&&(m(),N(i.data.project.name),m(2),v("controller",i.data.controller)("project",i.data.project)("nodes",i.data.topology.nodes)("links",i.data.topology.links)("drawings",i.data.topology.drawings))},dependencies:[ke,qe,Qe,bt,Y,he,L2],encapsulation:2,changeDetection:0})}return n})();var I$="font-family: TypeWriter;font-size: 10;font-weight: bold;";function A$(n,o){return n?{rotation:n.rotation??0,style:n.style??I$,text:n.text??o,x:n.x??null,y:n.y??null}:{rotation:0,style:I$,text:o,x:null,y:null}}function CNe(n,o){let e=n.name??n.node_id;return ze(q({},n),{name:e,project_id:o,status:"stopped",width:n.width??0,height:n.height??0,symbol_url:null,ports:[],label:A$(n.label,e),console:null,console_host:null,console_type:null,command_line:null,node_directory:null,x:n.x??0,y:n.y??0,z:n.z??0,locked:n.locked??!1,compute_id:n.compute_id??null,node_type:n.node_type??"",first_port_name:n.first_port_name??null,port_name_format:n.port_name_format??"{0}",port_segment_size:n.port_segment_size??0,properties:n.properties??{}})}function bNe(n){return{node_id:n.node_id,adapter_number:n.adapter_number??0,port_number:n.port_number??0,label:A$(n.label,"")}}function xNe(n,o){return ze(q({},n),{project_id:o,link_id:n.link_id,link_type:n.link_type??"ethernet",nodes:(n.nodes??[]).map(bNe),capturing:!1,show_filters_icon:!1,wireshark:!1,suspend:n.suspend??!1,filters:n.filters??{},capture_file_name:null,capture_file_path:null})}function yNe(n,o){return ze(q({},n),{project_id:o,rotation:n.rotation??0,svg:n.svg??"",locked:n.locked??!1,x:n.x??0,y:n.y??0,z:n.z??0})}function N$(n,o){let e=n?.topology??{};return{nodes:(e.nodes??[]).map(t=>CNe(t,o)),links:(e.links??[]).map(t=>xNe(t,o)),drawings:(e.drawings??[]).map(t=>yNe(t,o))}}var F$=(()=>{class n{projectService;nodeSymbolResolver;constructor(e,t){this.projectService=e,this.nodeSymbolResolver=t}load(e,t){return this.projectService.gns3file(e,t.project_id).pipe(Pt(i=>N$(i,t.project_id)),Np(i=>this.nodeSymbolResolver.resolve(e,i.nodes).pipe(Pt(a=>ze(q({},i),{nodes:a})))),tA(eA,1))}static \u0275fac=function(t){return new(t||n)(_e(Ti),_e(EM))};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var R$=(n,o)=>["/controller",n,"project",o],wNe=(n,o)=>o.project_id;function MNe(n,o){if(n&1){let e=R();r(0,"mat-header-cell")(1,"mat-checkbox",52),_("change",function(i){y(e);let a=h(2);return w(i.checked?a.allChecked():a.unChecked())}),l()()}if(n&2){let e=h(2);m(),v("checked",e.selection.hasValue()&&e.isAllSelected())("indeterminate",e.selection.hasValue()&&!e.isAllSelected())}}function SNe(n,o){if(n&1){let e=R();r(0,"mat-cell")(1,"mat-checkbox",53),_("click",function(i){return i.stopPropagation()})("change",function(i){let a=y(e).$implicit,s=h(2);return w(i?s.selection.toggle(a):null)}),l()()}if(n&2){let e=o.$implicit,t=h(2);m(),v("checked",t.selection.isSelected(e))}}function kNe(n,o){n&1&&(r(0,"mat-header-cell",54),c(1," Name "),l())}function PNe(n,o){if(n&1&&(r(0,"mat-cell")(1,"a",55),c(2),l()()),n&2){let e=o.$implicit,t=h(2);m(),v("routerLink",Go(2,R$,t.controller.id,e.project_id)),m(),X(" ",e.name," ")}}function TNe(n,o){n&1&&(r(0,"mat-header-cell",54),c(1," Created By "),l())}function ENe(n,o){if(n&1&&(r(0,"mat-cell"),c(1),l()),n&2){let e=o.$implicit;m(),X(" ",e.created_by," ")}}function ONe(n,o){n&1&&(r(0,"mat-header-cell",54),c(1," Status "),l())}function DNe(n,o){if(n&1&&(r(0,"mat-cell")(1,"span",56),L(2,"span",57),c(3),l()()),n&2){let e=o.$implicit;m(),ne("projects__table-status--opened",e.status==="opened")("projects__table-status--closed",e.status==="closed"),m(2),X(" ",e.status==="opened"?"Running":"Stopped"," ")}}function INe(n,o){n&1&&(r(0,"mat-header-cell"),c(1," Actions "),l())}function ANe(n,o){if(n&1){let e=R();r(0,"button",65),_("click",function(){y(e);let i=h().$implicit,a=h(2);return w(a.open(i))}),r(1,"mat-icon"),c(2,"play_arrow"),l()()}}function NNe(n,o){n&1&&L(0,"mat-progress-spinner",67)}function FNe(n,o){n&1&&(r(0,"mat-icon"),c(1,"pause"),l())}function RNe(n,o){if(n&1){let e=R();r(0,"button",66),_("click",function(){y(e);let i=h().$implicit,a=h(2);return w(a.close(i))}),T(1,NNe,1,0,"mat-progress-spinner",67)(2,FNe,2,0,"mat-icon"),l()}if(n&2){let e=h().$implicit,t=h(2);v("disabled",t.isProjectLoading(e.project_id)),m(),E(t.isProjectLoading(e.project_id)?1:2)}}function zNe(n,o){if(n&1){let e=R();r(0,"button",68),_("click",function(){y(e);let i=h().$implicit,a=h(2);return w(a.duplicate(i))}),r(1,"mat-icon"),c(2,"content_copy"),l()()}}function LNe(n,o){if(n&1){let e=R();r(0,"mat-cell")(1,"div",58),T(2,ANe,3,0,"button",59),T(3,RNe,3,2,"button",60),r(4,"button",61),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.selectProject(i))}),r(5,"mat-icon"),c(6,"info"),l()(),r(7,"button",62),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.editProject(i))}),r(8,"mat-icon"),c(9,"edit"),l()(),T(10,zNe,3,0,"button",63),r(11,"button",64),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.exportSelectProject(i))}),r(12,"mat-icon"),c(13,"file_download"),l()()()()}if(n&2){let e=o.$implicit;m(2),E(e.status==="closed"?2:-1),m(),E(e.status==="opened"?3:-1),m(7),E(e.status==="closed"?10:-1)}}function VNe(n,o){if(n&1){let e=R();r(0,"button",70),_("click",function(){y(e);let i=h(3);return w(i.deleteAllFiles())}),r(1,"mat-icon"),c(2,"delete"),l()()}}function BNe(n,o){if(n&1&&(r(0,"mat-header-cell"),T(1,VNe,3,0,"button",69),l()),n&2){let e=h(2);m(),E(e.selection.selected.length>1?1:-1)}}function jNe(n,o){n&1&&L(0,"mat-progress-spinner",67)}function $Ne(n,o){n&1&&(r(0,"mat-icon"),c(1,"delete"),l())}function HNe(n,o){if(n&1){let e=R();r(0,"button",72),_("click",function(){y(e);let i=h().$implicit,a=h(2);return w(a.delete(i))}),T(1,jNe,1,0,"mat-progress-spinner",67)(2,$Ne,2,0,"mat-icon"),l()}if(n&2){let e=h().$implicit,t=h(2);v("disabled",t.isProjectLoading(e.project_id)),m(),E(t.isProjectLoading(e.project_id)?1:2)}}function UNe(n,o){if(n&1&&(r(0,"mat-cell"),T(1,HNe,3,2,"button",71),l()),n&2){let e=o.$implicit,t=h(2);m(),E(e.status==="closed"&&t.selection.isSelected(e)?1:-1)}}function WNe(n,o){n&1&&L(0,"mat-header-row")}function GNe(n,o){n&1&&L(0,"mat-row")}function qNe(n,o){if(n&1){let e=R();r(0,"div",51)(1,"mat-paginator",73),_("page",function(i){y(e);let a=h(2);return w(a.onPageChange(i))}),l()()}if(n&2){let e=h(2);m(),v("length",e.displayProjects().length)("pageSize",e._pageSize())("pageSizeOptions",e.pageSizeOptions)}}function QNe(n,o){if(n&1){let e=R();r(0,"div",38)(1,"mat-table",39),_("matSortChange",function(i){y(e);let a=h();return w(a.onSortChange(i))}),Fe(2,40),se(3,MNe,2,2,"mat-header-cell",41)(4,SNe,2,1,"mat-cell",42),Re(),Fe(5,43),se(6,kNe,2,0,"mat-header-cell",44)(7,PNe,3,5,"mat-cell",42),Re(),Fe(8,45),se(9,TNe,2,0,"mat-header-cell",44)(10,ENe,2,1,"mat-cell",42),Re(),Fe(11,46),se(12,ONe,2,0,"mat-header-cell",44)(13,DNe,4,5,"mat-cell",42),Re(),Fe(14,47),se(15,INe,2,0,"mat-header-cell",41)(16,LNe,14,3,"mat-cell",42),Re(),Fe(17,48),se(18,BNe,2,1,"mat-header-cell",41)(19,UNe,2,1,"mat-cell",42),Re(),se(20,WNe,1,0,"mat-header-row",49)(21,GNe,1,0,"mat-row",50),l(),T(22,qNe,2,3,"div",51),l()}if(n&2){let e=h();ne("projects__table-container--with-details",e.selectedProject()),m(),v("dataSource",e.tableDataSource),m(19),v("matHeaderRowDef",e.displayedColumns)("matHeaderRowDefSticky",!0),m(),v("matRowDefColumns",e.displayedColumns),m(),E(e.displayProjects().length>0?22:-1)}}function KNe(n,o){if(n&1&&(r(0,"p",83),c(1),l()),n&2){let e=h().$implicit;m(),N(e.created_by)}}function XNe(n,o){if(n&1){let e=R();r(0,"button",65),_("click",function(i){y(e);let a=h().$implicit,s=h(2);return i.stopPropagation(),w(s.open(a))}),r(1,"mat-icon"),c(2,"play_arrow"),l()()}}function YNe(n,o){n&1&&L(0,"mat-progress-spinner",67)}function ZNe(n,o){n&1&&(r(0,"mat-icon"),c(1,"pause"),l())}function JNe(n,o){if(n&1){let e=R();r(0,"button",66),_("click",function(i){y(e);let a=h().$implicit,s=h(2);return i.stopPropagation(),w(s.close(a))}),T(1,YNe,1,0,"mat-progress-spinner",67)(2,ZNe,2,0,"mat-icon"),l()}if(n&2){let e=h().$implicit,t=h(2);v("disabled",t.isProjectLoading(e.project_id)),m(),E(t.isProjectLoading(e.project_id)?1:2)}}function eFe(n,o){if(n&1){let e=R();r(0,"button",68),_("click",function(i){y(e);let a=h().$implicit,s=h(2);return i.stopPropagation(),w(s.duplicate(a))}),r(1,"mat-icon"),c(2,"content_copy"),l()()}}function tFe(n,o){if(n&1){let e=R();r(0,"div",78)(1,"a",79)(2,"h3",80),c(3),l(),r(4,"span",81),L(5,"span",82),c(6),l(),T(7,KNe,2,1,"p",83),l(),r(8,"div",84),T(9,XNe,3,0,"button",59),T(10,JNe,3,2,"button",60),r(11,"button",61),_("click",function(i){let a=y(e).$implicit,s=h(2);return i.stopPropagation(),w(s.selectProject(a))}),r(12,"mat-icon"),c(13,"info"),l()(),r(14,"button",62),_("click",function(i){let a=y(e).$implicit,s=h(2);return i.stopPropagation(),w(s.editProject(a))}),r(15,"mat-icon"),c(16,"edit"),l()(),T(17,eFe,3,0,"button",63),r(18,"button",64),_("click",function(i){let a=y(e).$implicit,s=h(2);return i.stopPropagation(),w(s.exportSelectProject(a))}),r(19,"mat-icon"),c(20,"file_download"),l()()()()}if(n&2){let e,t=o.$implicit,i=h(2);ne("projects__card--selected",((e=i.selectedProject())==null?null:e.project_id)===t.project_id),m(),v("routerLink",Go(13,R$,i.controller.id,t.project_id)),m(2),N(t.name),m(),ne("projects__card-status--opened",t.status==="opened")("projects__card-status--closed",t.status==="closed"),m(2),X(" ",t.status==="opened"?"Running":"Stopped"," "),m(),E(t.created_by?7:-1),m(2),E(t.status==="closed"?9:-1),m(),E(t.status==="opened"?10:-1),m(7),E(t.status==="closed"?17:-1)}}function nFe(n,o){n&1&&(r(0,"div",76)(1,"mat-icon",85),c(2,"folder_off"),l(),r(3,"p"),c(4,"No projects found"),l()())}function iFe(n,o){if(n&1){let e=R();r(0,"mat-paginator",86),_("page",function(i){y(e);let a=h(2);return w(a.onPageChange(i))}),l()}if(n&2){let e=h(2);v("length",e.displayProjects().length)("pageSize",e._pageSize())("pageSizeOptions",e.pageSizeOptions)}}function oFe(n,o){if(n&1&&(r(0,"div",74),Q(1,tFe,21,16,"div",75,wNe,!1,nFe,5,0,"div",76),T(4,iFe,1,3,"mat-paginator",77),l()),n&2){let e=h();ne("projects__grid--with-details",e.selectedProject()),m(),K(e.paginatedProjects()),m(3),E(e.displayProjects().length>0?4:-1)}}function aFe(n,o){n&1&&(r(0,"div",91),L(1,"mat-spinner",107),l()),n&2&&(m(),v("diameter",24))}function rFe(n,o){n&1&&(r(0,"div",91)(1,"span",108),c(2,"Topology preview unavailable"),l()())}function sFe(n,o){n&1&&(r(0,"div",91)(1,"span",108),c(2,"Empty topology"),l()())}function lFe(n,o){if(n&1){let e=R();r(0,"button",110),_("click",function(){y(e);let i=h(3);return w(i.openTopologyPreview())}),L(1,"app-topology-preview",111),l()}if(n&2){let e=h(2),t=h();m(),v("controller",t.controller)("project",e)("nodes",t.previewTopology().nodes)("links",t.previewTopology().links)("drawings",t.previewTopology().drawings)}}function cFe(n,o){if(n&1&&T(0,lFe,2,5,"button",109),n&2){let e=h(2);E(e.previewEnlarged()?-1:0)}}function dFe(n,o){if(n&1&&(r(0,"div",92)(1,"span",93)(2,"mat-icon"),c(3,"person"),l()(),r(4,"span",95),c(5,"Owner"),l(),r(6,"span",96),c(7),l()()),n&2){let e=h();m(7),N(e.created_by)}}function mFe(n,o){if(n&1&&(r(0,"div",92)(1,"span",93)(2,"mat-icon"),c(3,"draw"),l()(),r(4,"span",95),c(5,"Drawings"),l(),r(6,"span",96),c(7),l()()),n&2){let e=h();m(7),N(e.drawings)}}function pFe(n,o){if(n&1&&(r(0,"div",92)(1,"span",93)(2,"mat-icon"),c(3,"camera_alt"),l()(),r(4,"span",95),c(5,"Snapshots"),l(),r(6,"span",96),c(7),l()()),n&2){let e=h();m(7),N(e.snapshots)}}function uFe(n,o){if(n&1&&(r(0,"div",92)(1,"span",93)(2,"mat-icon"),c(3,"device_hub"),l()(),r(4,"span",95),c(5,"Nodes"),l(),r(6,"span",96),c(7),l()(),r(8,"div",92)(9,"span",93)(10,"mat-icon"),c(11,"link"),l()(),r(12,"span",95),c(13,"Links"),l(),r(14,"span",96),c(15),l()(),T(16,mFe,8,1,"div",92),T(17,pFe,8,1,"div",92)),n&2){let e=o;m(7),N(e.nodes),m(8),N(e.links),m(),E(e.drawings>0?16:-1),m(),E(e.snapshots>0?17:-1)}}function gFe(n,o){if(n&1&&(r(0,"div",97)(1,"span",93)(2,"mat-icon"),c(3,"folder"),l()(),r(4,"span",95),c(5,"Location"),l(),r(6,"span",112),c(7),l()()),n&2){let e=h();m(7),N(e.path)}}function hFe(n,o){if(n&1&&(r(0,"div",99)(1,"span",93)(2,"mat-icon"),c(3,"description"),l()(),r(4,"span",95),c(5,"Description"),l(),L(6,"app-markdown-viewer",113),l()),n&2){let e=h(2);m(6),v("data",e.projectDescription())}}function _Fe(n,o){if(n&1){let e=R();r(0,"button",114),_("click",function(){y(e);let i=h(),a=h();return a.open(i),w(a.closeDetails())}),r(1,"mat-icon"),c(2,"play_arrow"),l()()}}function fFe(n,o){if(n&1){let e=R();r(0,"button",115),_("click",function(){y(e);let i=h(),a=h();return w(a.close(i))}),r(1,"mat-icon"),c(2,"pause"),l()()}}function vFe(n,o){if(n&1){let e=R();r(0,"button",116),_("click",function(){y(e);let i=h(),a=h();return w(a.duplicate(i))}),r(1,"mat-icon"),c(2,"content_copy"),l()()}}function CFe(n,o){if(n&1){let e=R();r(0,"button",117),_("click",function(){y(e);let i=h(),a=h();return a.delete(i),w(a.closeDetails())}),r(1,"mat-icon"),c(2,"delete"),l()()}}function bFe(n,o){if(n&1){let e=R();r(0,"div",28)(1,"div",87)(2,"h2",88),c(3),l(),r(4,"button",89),_("click",function(){y(e);let i=h();return w(i.closeDetails())}),r(5,"mat-icon"),c(6,"close"),l()()(),r(7,"div",90),T(8,aFe,2,1,"div",91)(9,rFe,3,0,"div",91)(10,sFe,3,0,"div",91)(11,cFe,1,1),r(12,"div",92)(13,"span",93),L(14,"span",94),l(),r(15,"span",95),c(16,"Status"),l(),r(17,"span",96),c(18),l()(),T(19,dFe,8,1,"div",92),r(20,"div",92)(21,"span",93)(22,"mat-icon"),c(23,"lock"),l()(),r(24,"span",95),c(25,"Access"),l(),r(26,"span",96),c(27),l()(),T(28,uFe,18,4),r(29,"div",97)(30,"span",93)(31,"mat-icon"),c(32,"fingerprint"),l()(),r(33,"span",95),c(34,"Project ID"),l(),r(35,"span",98),c(36),l()(),T(37,gFe,8,1,"div",97),T(38,hFe,7,1,"div",99),l(),r(39,"div",100),T(40,_Fe,3,0,"button",101),T(41,fFe,3,0,"button",102),r(42,"button",103),_("click",function(){let i=y(e),a=h();return w(a.editProject(i))}),r(43,"mat-icon"),c(44,"edit"),l()(),T(45,vFe,3,0,"button",104),r(46,"button",105),_("click",function(){let i=y(e),a=h();return w(a.exportSelectProject(i))}),r(47,"mat-icon"),c(48,"file_download"),l()(),T(49,CFe,3,0,"button",106),l()()}if(n&2){let e,t,i=o,a=h();m(3),N(i.name),m(5),E((e=a.previewState())==="loading"?8:e==="error"?9:e==="empty"?10:11),m(6),ne("projects__detail-status-dot--opened",i.status==="opened")("projects__detail-status-dot--closed",i.status==="closed"),m(4),N(i.status==="opened"?"Running":"Stopped"),m(),E(i.created_by?19:-1),m(8),N(i.readonly?"Read-only":"Read/Write"),m(),E((t=a.displayStats())?28:-1,t),m(8),N(i.project_id),m(),E(i.path?37:-1),m(),E(a.projectDescription()?38:-1),m(2),E(i.status==="closed"?40:-1),m(),E(i.status==="opened"?41:-1),m(4),E(i.status==="closed"?45:-1),m(4),E(i.status==="closed"?49:-1)}}function xFe(n,o){n&1&&L(0,"mat-icon",36)}function yFe(n,o){n&1&&L(0,"mat-icon",37)}var V2=(()=>{class n{controller;settings;project;displayedColumns=["select","name","created_by","status","actions","delete"];version=Op;currentYear=new Date().getFullYear();selection=new Yr(!0,[]);sort=ln(Ro);paginator=ln(ea);searchText=$("");_projects=z([]);sortActive=z("name");_sortDirection=z("asc");_loadingProjects=z(new Set);viewMode=z("list");selectedProject=z(null);projectStats=z(null);projectDescription=z("");previewTopology=z(null);previewState=z("loading");previewEnlarged=z(!1);displayStats=Ne(()=>{let e=this.previewTopology();return e?ze(q({},this.projectStats()??{}),{nodes:e.nodes.length,links:e.links.length,drawings:e.drawings.length}):this.projectStats()});filterStatus=z("all");pageSizeOptions=[5,10,25,50,100];_pageIndex=z(0);_pageSize=z(25);onPageChange(e){this._pageIndex.set(e.pageIndex),this._pageSize.set(e.pageSize)}_resetPageOnFilter=Vn(()=>{this.searchText(),this.filterStatus(),this.sortActive(),this._sortDirection(),this._pageIndex.set(0);let e=this.paginator();e&&e.firstPage()});_clearSelectionOnFilter=Vn(()=>{this.searchText(),this.filterStatus(),this.selection.clear()});displayProjects=Ne(()=>{let e=this.searchText()?.toLowerCase()||"",t=this.filterStatus(),i=this._projects();e&&(i=i.filter(d=>d.name.toLowerCase().includes(e)||d.created_by&&d.created_by.toLowerCase().includes(e))),t!=="all"&&(i=i.filter(d=>d.status===t));let a=this.sortActive(),s=this._sortDirection();return a&&s&&(i=[...i].sort((d,p)=>{let u=d[a],g=p[a],C=isNaN(+u)?u:+u,M=isNaN(+g)?g:+g;return(C<M?-1:C>M?1:0)*(s==="asc"?1:-1)})),i});paginatedProjects=Ne(()=>{let e=this.displayProjects(),t=this._pageIndex(),i=this._pageSize(),a=t*i;return e.slice(a,a+i)});tableDataSource=new Fr([]);_syncTableData=Vn(()=>{this.tableDataSource.data=this.displayProjects()});_connectPaginator=Vn(()=>{let e=this.paginator();e&&(this.tableDataSource.paginator=e)});destroyRef=f(Va);route=f($t);projectService=f(Ti);notificationService=f(_s);settingsService=f(sr);progressService=f(mo);dialog=f(Xe);router=f(Ft);toasterService=f(re);recentlyOpenedProjectService=f(ep);themeService=f(Ni);topologyPreviewService=f(F$);ngOnInit(){this.controller=this.route.snapshot.data.controller,this.controller||this.router.navigate(["/controllers"]),this.recentlyOpenedProjectService.setcontrollerIdProjectList(this.controller.id.toString());let e=this.route.snapshot.queryParams.error;e&&(this.toasterService.error(e),this.router.navigate([],{queryParams:{},replaceUrl:!0})),this.refresh(),this.sort()?.sort({id:"name",start:"asc"}),this.settings=this.settingsService.getAll(),this.projectService.projectListSubject.pipe(wo(this.destroyRef)).subscribe(()=>this.refresh()),this.notificationService.projectNotificationEmitter.pipe(wo(this.destroyRef)).subscribe(t=>this.handleProjectNotification(t))}onSortChange(e){this.sortActive.set(e.active),this._sortDirection.set(e.direction)}onSortByChange(e){this.sortActive.set(e),this._sortDirection.set("asc")}toggleView(e){this.viewMode.set(e)}selectProject(e){this.selectedProject.set(e),this.projectStats.set(null),this.projectDescription.set(""),this.loadProjectStats(e),this.loadProjectDescription(e),this.loadProjectTopology(e)}closeDetails(){this.selectedProject.set(null),this.projectStats.set(null),this.projectDescription.set(""),this.previewTopology.set(null),this.previewState.set("loading"),this.previewEnlarged.set(!1)}loadProjectStats(e){this.projectService.getStatistics(this.controller,e.project_id).subscribe({next:t=>{this.selectedProject()?.project_id===e.project_id&&this.projectStats.set(t)},error:()=>{this.selectedProject()?.project_id===e.project_id&&this.projectStats.set(null)}})}loadProjectDescription(e){this.projectService.getReadmeFile(this.controller,e.project_id).subscribe({next:t=>{this.selectedProject()?.project_id===e.project_id&&this.projectDescription.set(t?.trim()||"")},error:()=>{this.selectedProject()?.project_id===e.project_id&&this.projectDescription.set("")}})}loadProjectTopology(e){this.previewTopology.set(null),this.previewState.set("loading"),this.topologyPreviewService.load(this.controller,e).subscribe({next:t=>{if(this.selectedProject()?.project_id!==e.project_id)return;this.previewTopology.set(t);let i=t.nodes.length===0&&t.links.length===0&&t.drawings.length===0;this.previewState.set(i?"empty":"ready")},error:()=>{this.selectedProject()?.project_id===e.project_id&&this.previewState.set("error")}})}openTopologyPreview(){let e=this.selectedProject(),t=this.previewTopology();!e||!t||this.previewState()!=="ready"||(this.previewEnlarged.set(!0),this.dialog.open(D$,{panelClass:["base-dialog-panel","dialog-large-panel","topology-preview-dialog-panel"],data:{controller:this.controller,project:e,topology:t}}).afterClosed().subscribe(()=>this.previewEnlarged.set(!1)))}refresh(){this.projectService.list(this.controller).subscribe({next:e=>{this._projects.set(e)},error:e=>{let t=e.error?.message||e.message||"Failed to list projects";this.toasterService.error(t),this.progressService.setError(e)}})}handleProjectNotification(e){(e.action==="project.closed"||e.action==="project.updated")&&this.selectedProject()?.project_id===e.event.project_id&&this.loadProjectTopology(e.event),this._projects.update(t=>{let i=[...t],a=i.findIndex(s=>s.project_id===e.event.project_id);switch(e.action){case"project.created":a===-1&&i.push(e.event);break;case"project.opened":case"project.closed":case"project.updated":a>=0&&(i[a]=e.event);break;case"project.deleted":a>=0&&i.splice(a,1);break}return i})}isProjectLoading(e){return this._loadingProjects().has(e)}setProjectLoading(e,t){this._loadingProjects.update(i=>{let a=new Set(i);return t?a.add(e):a.delete(e),a})}isAllSelected(){let e=this.displayProjects();return e.length>0&&e.every(t=>this.selection.isSelected(t))}unChecked(){this.selection.clear()}allChecked(){this.displayProjects().forEach(e=>this.selection.select(e))}delete(e){this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","dialog-small-panel","confirmation-danger-panel"],autoFocus:".cancel-button",data:{title:"Delete project?",message:`"${e.name}" and its project files will be permanently deleted.`,note:"This action cannot be undone.",confirmButtonText:"Delete project",tone:"danger"}}).afterClosed().subscribe(i=>{i&&(this.setProjectLoading(e.project_id,!0),this.projectService.delete(this.controller,e.project_id).subscribe({next:()=>{this.toasterService.success(`Project "${e.name}" deleted.`),this.refresh()},error:a=>{let s=a.error?.message||a.message||"Failed to delete project";this.toasterService.error(s),this.setProjectLoading(e.project_id,!1)},complete:()=>{this.setProjectLoading(e.project_id,!1)}}))})}open(e){this.progressService.activate(),this.projectService.open(this.controller,e.project_id).subscribe({next:()=>{this.toasterService.success(`Project "${e.name}" opened.`),this.refresh()},error:t=>{let i=t.error?.message||t.message||"Project was deleted";this.refresh(),this.progressService.deactivate(),this.toasterService.error(i)},complete:()=>{this.progressService.deactivate()}})}close(e){this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","dialog-small-panel","confirmation-warning-panel"],autoFocus:".cancel-button",data:{title:"Close project?",message:`Close "${e.name}"? Open consoles for this project will be disconnected.`,confirmButtonText:"Close project",tone:"warning",icon:"folder_off"}}).afterClosed().subscribe(i=>{i&&(this.setProjectLoading(e.project_id,!0),this.projectService.close(this.controller,e.project_id).subscribe({next:()=>{this.toasterService.success(`Project "${e.name}" closed.`),this.refresh(),this.progressService.deactivate()},error:a=>{let s=a.error?.message||a.message||"Failed to close project";this.toasterService.error(s),this.setProjectLoading(e.project_id,!1),this.progressService.deactivate()},complete:()=>{this.setProjectLoading(e.project_id,!1)}}))})}duplicate(e){let t=this.dialog.open(R2,{panelClass:["base-dialog-panel","dialog-small-panel","choose-name-dialog-panel"],autoFocus:!1,disableClose:!0}),i=t.componentInstance;i.controller=this.controller,i.project=e,t.afterClosed().subscribe(()=>{this.refresh(),this.selectedProject()?.project_id===e.project_id&&this.loadProjectDescription(e)})}editProject(e){let t=this.dialog.open(f_,{autoFocus:!1,disableClose:!0,panelClass:["base-dialog-panel","configurator-dialog-panel","edit-project-dialog-panel","dialog-extra-large-panel"]}),i=t.componentInstance;i.controller=this.controller,i.project=e,t.afterClosed().subscribe(()=>{this.refresh()})}addBlankProject(){let t=this.dialog.open(__,{panelClass:["base-dialog-panel","dialog-small-panel","add-blank-project-dialog-panel"],autoFocus:!1,disableClose:!0}).componentInstance;t.controller=this.controller}importProject(){let e="",t=this.dialog.open(v_,{panelClass:["base-dialog-panel","dialog-small-panel","import-project-dialog-panel"],autoFocus:!1,disableClose:!0}),i=t.componentInstance;i.controller=this.controller;let a=t.componentInstance.onImportProject.subscribe(s=>{e=s});t.afterClosed().subscribe(()=>{this.refresh(),a.unsubscribe(),e&&this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","dialog-small-panel"],autoFocus:".cancel-button",data:{title:"Open imported project?",message:"The project was imported successfully. Would you like to open it now?",confirmButtonText:"Open project",tone:"neutral",icon:"folder_open"}}).afterClosed().subscribe(d=>{d&&this.projectService.open(this.controller,e).subscribe({next:()=>{this.router.navigate(["/controller",this.controller.id,"project",e])},error:p=>{let u=p.error?.message||p.message||"Failed to open project";this.toasterService.error(u)}})})})}deleteAllFiles(){let e=this.selection.selected;this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-danger-panel","dialog-small-panel"],autoFocus:".cancel-button",data:{title:"Delete selected projects?",message:`${e.length} selected ${e.length===1?"project":"projects"} will be permanently deleted.`,details:e.map(i=>i.name||i.project_id),note:"This action cannot be undone.",confirmButtonText:e.length===1?"Delete project":"Delete projects",tone:"danger"}}).afterClosed().subscribe(i=>{i&&this.openProjectDeletionProgress(e)})}openProjectDeletionProgress(e){this.dialog.open(z2,{panelClass:["base-confirmation-dialog-panel","confirmation-danger-panel","delete-all-projects-dialog-panel","dialog-small-panel"],autoFocus:!1,disableClose:!0,data:{controller:this.controller,deleteFilesPaths:e,autoStart:!0}}).afterClosed().subscribe(i=>{if(i)this.unChecked(),this.refresh(),this.toasterService.success("All projects deleted");else return this.unChecked(),this.refresh(),!1})}exportSelectProject(e){this.project=e,this.project.project_id&&this.exportPortableProjectDialog()}exportPortableProjectDialog(){this.dialog.open(kh,{panelClass:["base-dialog-panel","dialog-medium-panel"],autoFocus:!1,disableClose:!0,data:{controllerDetails:this.controller,projectDetails:this.project}})}isLightThemeEnabled(){return this.themeService.getActualTheme()==="light"}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-projects"]],viewQuery:function(t,i){t&1&&Bn(i.sort,Ro,5)(i.paginator,ea,5),t&2&&jn(2)},inputs:{searchText:[1,"searchText"]},outputs:{searchText:"searchTextChange"},decls:66,vars:16,consts:[[1,"projects"],[1,"projects__content"],[1,"projects__header"],[1,"projects__title"],[1,"projects__buttons-bar"],["mat-raised-button","","color","primary",1,"projects__button","projects__button--primary",3,"click"],["mat-raised-button","","color","primary",1,"projects__button",3,"click"],[1,"projects__toolbar"],[1,"projects__search-form"],["appearance","fill","subscriptSizing","dynamic",1,"projects__search"],["matPrefix",""],["matInput","","aria-label","Search projects by name or creator","placeholder","Search by name or created by",3,"input","value"],[1,"projects__toolbar-actions"],["appearance","fill","subscriptSizing","dynamic",1,"projects__filter"],[3,"valueChange","value"],["value","all"],["value","opened"],["value","closed"],["appearance","fill","subscriptSizing","dynamic",1,"projects__sort-by"],["value","name"],["value","created_by"],["value","status"],[1,"projects__view-toggle"],["mat-icon-button","","matTooltip","List view",1,"projects__view-toggle-btn",3,"click"],["mat-icon-button","","matTooltip","Grid view",1,"projects__view-toggle-btn",3,"click"],[1,"projects__main"],[1,"projects__table-container",3,"projects__table-container--with-details"],[1,"projects__grid",3,"projects__grid--with-details"],[1,"projects__details"],[1,"projects__footer"],[1,"projects__footer-content"],[1,"projects__footer-info"],[1,"projects__footer-social"],["href","https://github.com/GNS3","target","_blank","rel","noopener noreferrer","matTooltip","GitHub",1,"projects__footer-social-link"],["svgIcon","github",1,"projects__footer-icon"],["href","https://www.gns3.com/","target","_blank","rel","noopener noreferrer","matTooltip","Website",1,"projects__footer-social-link"],["svgIcon","gns3",1,"projects__footer-icon"],["svgIcon","gns3black",1,"projects__footer-icon"],[1,"projects__table-container"],["matSort","",3,"matSortChange","dataSource"],["matColumnDef","select"],[4,"matHeaderCellDef"],[4,"matCellDef"],["matColumnDef","name"],["mat-sort-header","",4,"matHeaderCellDef"],["matColumnDef","created_by"],["matColumnDef","status"],["matColumnDef","actions"],["matColumnDef","delete"],[4,"matHeaderRowDef","matHeaderRowDefSticky"],[4,"matRowDef","matRowDefColumns"],[1,"projects__table-footer"],[3,"change","checked","indeterminate"],[3,"click","change","checked"],["mat-sort-header",""],[1,"projects__link",3,"routerLink"],[1,"projects__table-status"],[1,"projects__table-status-dot"],[1,"projects__actions-cell"],["mat-icon-button","","matTooltip","Start project","aria-label","Start project",1,"projects__action-button","projects__action-button--start"],["mat-icon-button","","matTooltip","Stop project","aria-label","Stop project",1,"projects__action-button","projects__action-button--stop",3,"disabled"],["mat-icon-button","","matTooltip","View project details","aria-label","View project details",1,"projects__action-button","projects__action-button--details",3,"click"],["mat-icon-button","","matTooltip","Edit project","aria-label","Edit project",1,"projects__action-button","projects__action-button--edit",3,"click"],["mat-icon-button","","matTooltip","Duplicate project","aria-label","Duplicate project",1,"projects__action-button","projects__action-button--duplicate"],["mat-icon-button","","matTooltip","Export project","aria-label","Export project",1,"projects__action-button","projects__action-button--export",3,"click"],["mat-icon-button","","matTooltip","Start project","aria-label","Start project",1,"projects__action-button","projects__action-button--start",3,"click"],["mat-icon-button","","matTooltip","Stop project","aria-label","Stop project",1,"projects__action-button","projects__action-button--stop",3,"click","disabled"],["diameter","20","mode","indeterminate"],["mat-icon-button","","matTooltip","Duplicate project","aria-label","Duplicate project",1,"projects__action-button","projects__action-button--duplicate",3,"click"],["mat-button","","color","warn","matTooltip","Delete all selected"],["mat-button","","color","warn","matTooltip","Delete all selected",3,"click"],["mat-icon-button","","color","warn","matTooltip","Delete project","aria-label","Delete project",1,"projects__action-button","projects__action-button--delete",3,"disabled"],["mat-icon-button","","color","warn","matTooltip","Delete project","aria-label","Delete project",1,"projects__action-button","projects__action-button--delete",3,"click","disabled"],["showFirstLastButtons","",1,"projects__table-paginator",3,"page","length","pageSize","pageSizeOptions"],[1,"projects__grid"],[1,"projects__card",3,"projects__card--selected"],[1,"projects__empty"],["showFirstLastButtons","",1,"projects__grid-paginator",3,"length","pageSize","pageSizeOptions"],[1,"projects__card"],[1,"projects__card-body",3,"routerLink"],[1,"projects__card-name"],[1,"projects__card-status"],[1,"projects__card-status-dot"],[1,"projects__card-owner"],[1,"projects__card-actions"],[1,"projects__empty-icon"],["showFirstLastButtons","",1,"projects__grid-paginator",3,"page","length","pageSize","pageSizeOptions"],[1,"projects__details-header"],[1,"projects__details-title"],["mat-icon-button","","matTooltip","Close project details","aria-label","Close project details",1,"projects__details-close",3,"click"],[1,"projects__details-body"],[1,"projects__preview"],[1,"projects__detail-item"],[1,"projects__detail-icon"],[1,"projects__detail-status-dot"],[1,"projects__detail-label"],[1,"projects__detail-value"],[1,"projects__detail-item","projects__detail-item--secondary"],[1,"projects__detail-value","projects__detail-value--mono"],[1,"projects__detail-item","projects__detail-item--description"],[1,"projects__details-actions"],["mat-icon-button","","matTooltip","Start project","aria-label","Start project",1,"projects__details-action-btn","projects__details-action-btn--start"],["mat-icon-button","","matTooltip","Stop project","aria-label","Stop project",1,"projects__details-action-btn","projects__details-action-btn--stop"],["mat-icon-button","","matTooltip","Edit project","aria-label","Edit project",1,"projects__details-action-btn","projects__details-action-btn--edit",3,"click"],["mat-icon-button","","matTooltip","Duplicate project","aria-label","Duplicate project",1,"projects__details-action-btn","projects__details-action-btn--duplicate"],["mat-icon-button","","matTooltip","Export project","aria-label","Export project",1,"projects__details-action-btn","projects__details-action-btn--export",3,"click"],["mat-icon-button","","matTooltip","Delete project","aria-label","Delete project",1,"projects__details-action-btn","projects__details-action-btn--delete"],[1,"projects__preview-spinner",3,"diameter"],[1,"projects__preview-note"],["type","button","matTooltip","Enlarge topology preview","matTooltipClass","custom-tooltip","matTooltipPosition","below","aria-label","Enlarge topology preview",1,"projects__preview-thumb"],["type","button","matTooltip","Enlarge topology preview","matTooltipClass","custom-tooltip","matTooltipPosition","below","aria-label","Enlarge topology preview",1,"projects__preview-thumb",3,"click"],["variant","panel",3,"controller","project","nodes","links","drawings"],[1,"projects__detail-value","projects__detail-value--path"],[1,"projects__detail-description",3,"data"],["mat-icon-button","","matTooltip","Start project","aria-label","Start project",1,"projects__details-action-btn","projects__details-action-btn--start",3,"click"],["mat-icon-button","","matTooltip","Stop project","aria-label","Stop project",1,"projects__details-action-btn","projects__details-action-btn--stop",3,"click"],["mat-icon-button","","matTooltip","Duplicate project","aria-label","Duplicate project",1,"projects__details-action-btn","projects__details-action-btn--duplicate",3,"click"],["mat-icon-button","","matTooltip","Delete project","aria-label","Delete project",1,"projects__details-action-btn","projects__details-action-btn--delete",3,"click"]],template:function(t,i){if(t&1&&(r(0,"div",0)(1,"div",1)(2,"div",2)(3,"h1",3),c(4,"Projects"),l(),r(5,"div",4)(6,"button",5),_("click",function(){return i.addBlankProject()}),r(7,"mat-icon"),c(8,"add"),l(),c(9," New project "),l(),r(10,"button",6),_("click",function(){return i.importProject()}),r(11,"mat-icon"),c(12,"cloud_upload"),l(),c(13," Import project "),l(),r(14,"button",6),_("click",function(){return i.refresh()}),r(15,"mat-icon"),c(16,"refresh"),l(),c(17," Refresh projects "),l()()(),r(18,"div",7)(19,"form",8)(20,"mat-form-field",9)(21,"mat-icon",10),c(22,"search"),l(),r(23,"input",11),_("input",function(s){return i.searchText.set(s.target.value)}),l()()(),r(24,"div",12)(25,"mat-form-field",13)(26,"mat-label"),c(27,"Filter"),l(),r(28,"mat-select",14),_("valueChange",function(s){return i.filterStatus.set(s)}),r(29,"mat-option",15),c(30,"All"),l(),r(31,"mat-option",16),c(32,"Running"),l(),r(33,"mat-option",17),c(34,"Stopped"),l()()(),r(35,"mat-form-field",18)(36,"mat-label"),c(37,"Sort by"),l(),r(38,"mat-select",14),_("valueChange",function(s){return i.onSortByChange(s)}),r(39,"mat-option",19),c(40,"Name"),l(),r(41,"mat-option",20),c(42,"Created By"),l(),r(43,"mat-option",21),c(44,"Status"),l()()(),r(45,"div",22)(46,"button",23),_("click",function(){return i.toggleView("list")}),r(47,"mat-icon"),c(48,"view_list"),l()(),r(49,"button",24),_("click",function(){return i.toggleView("grid")}),r(50,"mat-icon"),c(51,"grid_view"),l()()()()(),r(52,"div",25),T(53,QNe,23,7,"div",26),T(54,oFe,5,4,"div",27),T(55,bFe,50,17,"div",28),l(),r(56,"footer",29)(57,"div",30)(58,"div",31),c(59),l(),r(60,"div",32)(61,"a",33),L(62,"mat-icon",34),l(),r(63,"a",35),T(64,xFe,1,0,"mat-icon",36),T(65,yFe,1,0,"mat-icon",37),l()()()()()()),t&2){let a;m(),ne("projects__content--with-details",i.selectedProject()),m(22),v("value",i.searchText()),m(5),v("value",i.filterStatus()),m(10),v("value",i.sortActive()),m(8),ne("projects__view-toggle-btn--active",i.viewMode()==="list"),m(3),ne("projects__view-toggle-btn--active",i.viewMode()==="grid"),m(4),E(i.viewMode()==="list"?53:-1),m(),E(i.viewMode()==="grid"?54:-1),m(),E((a=i.selectedProject())?55:-1,a),m(4),Un("GNS3 Web-UI \xA92018-",i.currentYear," v",i.version),m(5),E(i.isLightThemeEnabled()?-1:64),m(),E(i.isLightThemeEnabled()?65:-1)}},dependencies:[fe,Fl,St,Ct,vt,Ji,vn,Co,ke,_a,Ro,Aa,ot,Pe,Ve,Bi,ct,nt,_n,bn,yn,kn,wn,xn,Pn,Mn,Sn,Tn,En,Y,he,Be,ie,ce,we,ye,Ee,Rt,Gt,rt,mt,As,ea,st,pt,L2],styles:['@charset "UTF-8";[_nghost-%COMP%]{display:block;width:100%;background:transparent}.projects__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;max-width:1600px;margin:0 auto;padding:24px 20px 16px;animation:none}.projects__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.projects__content[_ngcontent-%COMP%]{animation:none}.projects__buttons-bar[_ngcontent-%COMP%]{display:flex;gap:var(--gns3-density-space-3)}.projects__button[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing);margin:12px 0}.projects__toolbar[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--gns3-density-card-gap);container:search-toolbar/inline-size}.projects__toolbar[_ngcontent-%COMP%] .projects__search-form[_ngcontent-%COMP%]{flex:1 1 260px;min-width:0;max-width:none;margin:0}.projects__toolbar[_ngcontent-%COMP%] .projects__toolbar-actions[_ngcontent-%COMP%]{display:flex;flex:0 1 auto;flex-wrap:wrap;align-items:center;gap:var(--gns3-density-space-3);min-width:0}.projects__toolbar[_ngcontent-%COMP%] .projects__filter[_ngcontent-%COMP%], .projects__toolbar[_ngcontent-%COMP%] .projects__sort-by[_ngcontent-%COMP%]{flex:1 1 155px;width:155px;min-width:0}@container search-toolbar (max-width: 640px){.projects__toolbar[_ngcontent-%COMP%] .projects__search-form[_ngcontent-%COMP%]{flex-basis:100%;width:100%}.projects__toolbar[_ngcontent-%COMP%] .projects__toolbar-actions[_ngcontent-%COMP%]{width:100%}}@container search-toolbar (max-width: 480px){.projects__toolbar[_ngcontent-%COMP%] .projects__view-toggle[_ngcontent-%COMP%]{flex-basis:100%;justify-content:center}}.projects__toolbar[_ngcontent-%COMP%]{max-width:1600px;margin:0 auto;padding:0 20px 8px;animation:none}.projects__search[_ngcontent-%COMP%]{width:100%}.projects__view-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px;padding:4px 2px;background:var(--mat-sys-surface-container-high);border-radius:8px}button.projects__view-toggle-btn[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);border-radius:var(--gns3-density-radius-lg);color:var(--mat-sys-on-surface-variant);--mat-icon-button-icon-size: 22px}button.projects__view-toggle-btn[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-surface)}button.projects__view-toggle-btn--active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}button.projects__view-toggle-btn--active[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-primary-container)}.projects__main[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:20px;max-width:1600px;margin:0 auto;padding:0 20px;animation:none}.projects__table-container[_ngcontent-%COMP%]{border-radius:16px;flex:1;min-width:0;overflow:hidden;border-radius:var(--gns3-density-radius-lg);background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;overflow-x:auto}.projects__table-container--with-details[_ngcontent-%COMP%]{max-width:none}.mat-table[_ngcontent-%COMP%], mat-table[_ngcontent-%COMP%]{width:100%;min-width:calc(340px + 7 * var(--gns3-density-icon-button) + 4 * var(--gns3-action-gap) + 6 * var(--gns3-density-space-4))}.mat-mdc-row[_ngcontent-%COMP%], .mat-row[_ngcontent-%COMP%]{height:var(--mat-table-row-item-container-height);min-height:var(--mat-table-row-item-container-height)}mat-row[_ngcontent-%COMP%]{transition:background-color var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard),color var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard),border-color var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard);cursor:default;position:relative}mat-row[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 3%,transparent)}mat-row[_ngcontent-%COMP%]:nth-child(2n){background-color:color-mix(in srgb,var(--mat-sys-on-surface) 1%,transparent)}mat-row[_ngcontent-%COMP%]:nth-child(2n):hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 4%,transparent)}.mat-header-row[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%]{position:sticky;top:0;z-index:10;background:color-mix(in srgb,var(--mat-sys-primary-container) 72%,var(--mat-sys-surface));--mat-sort-arrow-color: var(--mat-sys-on-primary-container)}.mat-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%]{font-size:13px;font-weight:600;color:var(--mat-sys-on-primary-container);letter-spacing:.5px;text-transform:uppercase}.mat-table-sticky[_ngcontent-%COMP%]{top:0}mat-header-cell[_ngcontent-%COMP%], mat-cell[_ngcontent-%COMP%]{justify-content:center}mat-cell[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface)}.mat-column-select[_ngcontent-%COMP%]{flex:0 0 calc(1 * var(--gns3-density-icon-button) + (1 - 1) * var(--gns3-action-gap) + 2 * var(--gns3-density-space-4));min-width:calc(1 * var(--gns3-density-icon-button) + (1 - 1) * var(--gns3-action-gap) + 2 * var(--gns3-density-space-4));box-sizing:border-box;padding-inline:var(--gns3-density-space-4);justify-content:center;padding-left:8px}.mat-column-name[_ngcontent-%COMP%]{flex:3;justify-content:flex-start;font-weight:500}.mat-column-status[_ngcontent-%COMP%]{flex:1;justify-content:center}.mat-column-actions[_ngcontent-%COMP%]{flex:0 0 calc(5 * var(--gns3-density-icon-button) + (5 - 1) * var(--gns3-action-gap) + 2 * var(--gns3-density-space-4));min-width:calc(5 * var(--gns3-density-icon-button) + (5 - 1) * var(--gns3-action-gap) + 2 * var(--gns3-density-space-4));box-sizing:border-box;padding-inline:var(--gns3-density-space-4);justify-content:center}.mat-column-delete[_ngcontent-%COMP%]{flex:0 0 calc(1 * var(--gns3-density-icon-button) + (1 - 1) * var(--gns3-action-gap) + 2 * var(--gns3-density-space-4));min-width:calc(1 * var(--gns3-density-icon-button) + (1 - 1) * var(--gns3-action-gap) + 2 * var(--gns3-density-space-4));box-sizing:border-box;padding-inline:var(--gns3-density-space-4);justify-content:center}.projects__link[_ngcontent-%COMP%]{transition:background-color var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard),color var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard),border-color var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard);display:inline-block;color:var(--mat-sys-primary);text-decoration:none;font-weight:500;position:relative}.projects__link[_ngcontent-%COMP%]:after{content:"";position:absolute;bottom:-2px;left:0;width:0;height:2px;background-color:currentColor;transition:width var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard)}.projects__link[_ngcontent-%COMP%]:hover{color:color-mix(in srgb,var(--mat-sys-primary) 80%,black)}.projects__link[_ngcontent-%COMP%]:hover:after{width:100%}.projects__table-status[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:var(--gns3-density-space-2);padding:4px 10px;border-radius:20px;font-size:12px;font-weight:600;letter-spacing:.3px}.projects__table-status--opened[_ngcontent-%COMP%]{background-color:color-mix(in srgb,var(--mat-sys-primary) 12%,transparent);color:var(--mat-sys-primary)}.projects__table-status--closed[_ngcontent-%COMP%]{background-color:color-mix(in srgb,var(--mat-sys-error) 12%,transparent);color:var(--mat-sys-error)}.projects__table-status-dot[_ngcontent-%COMP%]{width:8px;height:8px;border-radius:50%;display:inline-block}.projects__table-status--opened[_ngcontent-%COMP%] .projects__table-status-dot[_ngcontent-%COMP%]{background-color:var(--mat-sys-primary);box-shadow:0 0 6px color-mix(in srgb,var(--mat-sys-primary) 50%,transparent)}.projects__table-status--closed[_ngcontent-%COMP%] .projects__table-status-dot[_ngcontent-%COMP%]{background-color:var(--mat-sys-error);box-shadow:0 0 6px color-mix(in srgb,var(--mat-sys-error) 50%,transparent)}.projects__actions-cell[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;gap:var(--gns3-action-gap)}.projects__actions-cell[_ngcontent-%COMP%] button[mat-icon-button][_ngcontent-%COMP%], .projects__card-actions[_ngcontent-%COMP%] button[mat-icon-button][_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-icon-button)}.projects__actions-cell[_ngcontent-%COMP%] button[mat-icon-button][_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], .projects__card-actions[_ngcontent-%COMP%] button[mat-icon-button][_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}.projects__actions-cell[_ngcontent-%COMP%] button[mat-icon-button][_ngcontent-%COMP%], .projects__card-actions[_ngcontent-%COMP%] button[mat-icon-button][_ngcontent-%COMP%]{--mat-icon-button-state-layer-color: var(--projects-action-color)}.projects__action-button[_ngcontent-%COMP%]{--projects-action-color: var(--mat-sys-on-surface-variant);color:var(--projects-action-color);--mdc-circular-progress-active-indicator-color: var(--projects-action-color)}.projects__action-button[_ngcontent-%COMP%]:not(:disabled) mat-icon[_ngcontent-%COMP%]{color:var(--projects-action-color)}.projects__action-button[_ngcontent-%COMP%]:disabled{color:var(--gns3-button-disabled-label-color);--projects-action-color: var(--gns3-button-disabled-label-color)}.projects__action-button--start[_ngcontent-%COMP%], .projects__action-button--edit[_ngcontent-%COMP%]{--projects-action-color: var(--mat-sys-primary)}.projects__action-button--stop[_ngcontent-%COMP%], .projects__action-button--export[_ngcontent-%COMP%]{--projects-action-color: var(--mat-sys-tertiary)}.projects__action-button--details[_ngcontent-%COMP%], .projects__action-button--duplicate[_ngcontent-%COMP%]{--projects-action-color: var(--mat-sys-secondary)}.projects__action-button--delete[_ngcontent-%COMP%]{--projects-action-color: var(--mat-sys-error)}.projects__actions-cell[_ngcontent-%COMP%] button[mat-icon-button][_ngcontent-%COMP%] mat-progress-spinner[_ngcontent-%COMP%], .projects__card-actions[_ngcontent-%COMP%] button[mat-icon-button][_ngcontent-%COMP%] mat-progress-spinner[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;position:relative;z-index:1}.projects__actions-cell[_ngcontent-%COMP%] button[mat-icon-button][_ngcontent-%COMP%]:disabled, .projects__card-actions[_ngcontent-%COMP%] button[mat-icon-button][_ngcontent-%COMP%]:disabled{cursor:default}.projects__table-footer[_ngcontent-%COMP%]{min-height:var(--mat-table-footer-container-height);display:flex;align-items:center;padding:0 12px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container))}.projects__table-paginator[_ngcontent-%COMP%], .projects__grid-paginator[_ngcontent-%COMP%]{width:100%;--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.projects__grid-paginator[_ngcontent-%COMP%]{grid-column:1/-1;border-radius:12px;background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container))}.projects__grid[_ngcontent-%COMP%]{flex:1;min-width:0;display:grid;grid-template-columns:repeat(3,1fr);gap:var(--gns3-density-card-gap);align-content:start}.projects__grid--with-details[_ngcontent-%COMP%]{grid-template-columns:repeat(3,1fr)}.projects__card[_ngcontent-%COMP%]{overflow:hidden;border-radius:var(--gns3-density-radius-lg);background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;padding:var(--gns3-density-card-padding);cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard),color var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard),border-color var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard);display:flex;flex-direction:column;gap:var(--gns3-density-space-3)}.projects__card[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary) 4%,var(--mat-sys-surface));border-color:var(--mat-sys-outline-variant)}.projects__card--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);box-shadow:0 0 0 1px var(--mat-sys-primary)}.projects__card--selected[_ngcontent-%COMP%]:hover{border-color:var(--mat-sys-primary)}.projects__card-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between}.projects__card-status[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:var(--gns3-density-space-2);padding:4px 10px;border-radius:20px;font-size:12px;font-weight:600;letter-spacing:.3px;margin-top:8px}.projects__card-status--opened[_ngcontent-%COMP%]{background-color:color-mix(in srgb,var(--mat-sys-primary) 12%,transparent);color:var(--mat-sys-primary)}.projects__card-status--closed[_ngcontent-%COMP%]{background-color:color-mix(in srgb,var(--mat-sys-error) 12%,transparent);color:var(--mat-sys-error)}.projects__card-status-dot[_ngcontent-%COMP%]{width:8px;height:8px;border-radius:50%;display:inline-block}.projects__card-status--opened[_ngcontent-%COMP%] .projects__card-status-dot[_ngcontent-%COMP%]{background-color:var(--mat-sys-primary);box-shadow:0 0 6px color-mix(in srgb,var(--mat-sys-primary) 50%,transparent)}.projects__card-status--closed[_ngcontent-%COMP%] .projects__card-status-dot[_ngcontent-%COMP%]{background-color:var(--mat-sys-error);box-shadow:0 0 6px color-mix(in srgb,var(--mat-sys-error) 50%,transparent)}.projects__card-body[_ngcontent-%COMP%]{flex:1;text-decoration:none;cursor:pointer;display:block}.projects__card-body[_ngcontent-%COMP%]:hover .projects__card-name[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.projects__card-name[_ngcontent-%COMP%]{margin:0;font-size:16px;font-weight:600;color:var(--mat-sys-on-surface);line-height:1.3;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.projects__card-owner[_ngcontent-%COMP%]{margin:4px 0 0;font-size:13px;color:var(--mat-sys-on-surface-variant);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.projects__card-actions[_ngcontent-%COMP%]{flex-wrap:wrap;display:flex;align-items:center;gap:var(--gns3-action-gap);padding-top:8px;border-top:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 40%,transparent)}.projects__empty[_ngcontent-%COMP%]{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;color:var(--mat-sys-on-surface-variant);text-align:center}.projects__empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:8px 0 0;font-size:15px}.projects__empty-icon[_ngcontent-%COMP%]{font-size:48px;width:48px;height:48px;opacity:.5}.projects__details[_ngcontent-%COMP%]{flex:0 0 clamp(380px,30vw,460px);background:var(--mat-sys-surface);border-radius:16px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 60%,transparent);box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent);display:flex;flex-direction:column;height:70vh;min-height:360px;animation:_ngcontent-%COMP%_slideInRight .3s cubic-bezier(.4,0,.2,1);position:sticky;top:16px;overflow:hidden}@media(prefers-reduced-motion:reduce){.projects__details[_ngcontent-%COMP%]{animation:none}}.projects__details-header[_ngcontent-%COMP%]{min-height:56px;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;gap:var(--gns3-density-space-3);padding:8px 12px 8px 20px;background:color-mix(in srgb,var(--mat-sys-primary-container) 72%,var(--mat-sys-surface));border-bottom:1px solid var(--mat-sys-outline-variant)}.projects__details-title[_ngcontent-%COMP%]{flex:1;min-width:0;margin:0;font-size:19px;font-weight:650;color:var(--mat-sys-on-primary-container);line-height:24px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.projects__details-close[_ngcontent-%COMP%]{flex-shrink:0;color:var(--mat-sys-on-primary-container)}.projects__details-close[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-on-primary-container) 10%,transparent)}.projects__details-body[_ngcontent-%COMP%]{padding:12px 20px;overflow-y:auto;flex:1;display:flex;flex-direction:column;gap:0}.projects__detail-item[_ngcontent-%COMP%]{min-height:40px;box-sizing:border-box;display:flex;align-items:center;padding:8px 0;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.projects__detail-item[_ngcontent-%COMP%]:last-child{border-bottom:0}.projects__detail-item--secondary[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant)}.projects__detail-icon[_ngcontent-%COMP%]{width:22px;flex-shrink:0;display:flex;align-items:center;justify-content:center;margin-right:12px}.projects__detail-icon[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:19px;width:19px;height:19px;line-height:19px;color:var(--mat-sys-primary)}.projects__detail-label[_ngcontent-%COMP%]{flex:0 0 84px;font-size:12px;font-weight:650;color:var(--mat-sys-on-surface-variant);text-transform:uppercase;letter-spacing:.65px}.projects__detail-value[_ngcontent-%COMP%]{flex:1;min-width:0;text-align:right;font-size:14px;font-weight:500;color:var(--mat-sys-on-surface);line-height:1.45;word-break:break-word}.projects__detail-value--mono[_ngcontent-%COMP%]{font-family:var(--gns3-font-code);font-size:12px;color:var(--mat-sys-on-surface-variant)}.projects__detail-value--path[_ngcontent-%COMP%]{font-size:12px;color:var(--mat-sys-on-surface-variant);word-break:break-all}.projects__detail-item--description[_ngcontent-%COMP%]{flex-wrap:wrap;align-items:flex-start}.projects__detail-description[_ngcontent-%COMP%]{--markdown-viewer-font-size: 13px;--markdown-viewer-heading-scale: .85;flex:0 0 100%;margin-top:8px;padding:10px 12px;box-sizing:border-box;border-radius:10px;background:var(--mat-sys-surface-container-low);overflow-wrap:anywhere}.projects__preview[_ngcontent-%COMP%], .projects__preview-thumb[_ngcontent-%COMP%]{box-sizing:border-box;width:100%;margin-bottom:var(--gns3-density-space-3);display:flex;align-items:center;justify-content:center;overflow:hidden;border:1px solid var(--mat-sys-outline-variant);border-radius:10px;background:var(--mat-sys-surface-container-low)}.projects__preview[_ngcontent-%COMP%]{flex-shrink:0;height:200px}.projects__preview-note[_ngcontent-%COMP%]{font-size:13px;color:var(--mat-sys-on-surface-variant)}.projects__preview-thumb[_ngcontent-%COMP%]{flex-shrink:0;height:auto;min-height:160px;padding:0;cursor:zoom-in;text-align:inherit}.projects__preview-thumb[_ngcontent-%COMP%] app-topology-preview[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.projects__detail-status-dot[_ngcontent-%COMP%]{width:10px;height:10px;border-radius:50%;display:inline-block}.projects__detail-status-dot--opened[_ngcontent-%COMP%]{background-color:var(--mat-sys-primary);box-shadow:0 0 6px color-mix(in srgb,var(--mat-sys-primary) 50%,transparent)}.projects__detail-status-dot--closed[_ngcontent-%COMP%]{background-color:var(--mat-sys-error);box-shadow:0 0 6px color-mix(in srgb,var(--mat-sys-error) 50%,transparent)}.projects__details-actions[_ngcontent-%COMP%]{padding:12px 20px 16px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-surface-container) 72%,transparent);display:flex;align-items:center;justify-content:center;gap:var(--gns3-density-space-2)}.projects__details-action-btn[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-icon-button)}.projects__details-action-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}.projects__details-action-btn[_ngcontent-%COMP%]{--projects-details-action-color: var(--mat-sys-on-surface-variant);--mat-icon-button-state-layer-color: var(--projects-details-action-color)}.projects__details-action-btn[_ngcontent-%COMP%]:not(:disabled) mat-icon[_ngcontent-%COMP%]{color:var(--projects-details-action-color)}.projects__details-action-btn[_ngcontent-%COMP%]:disabled mat-icon[_ngcontent-%COMP%]{color:var(--gns3-button-disabled-label-color)}.projects__details-action-btn--start[_ngcontent-%COMP%], .projects__details-action-btn--edit[_ngcontent-%COMP%]{--projects-details-action-color: var(--mat-sys-primary)}.projects__details-action-btn--stop[_ngcontent-%COMP%], .projects__details-action-btn--export[_ngcontent-%COMP%]{--projects-details-action-color: var(--mat-sys-tertiary)}.projects__details-action-btn--duplicate[_ngcontent-%COMP%]{--projects-details-action-color: var(--mat-sys-secondary)}.projects__details-action-btn--delete[_ngcontent-%COMP%]{--projects-details-action-color: var(--mat-sys-error)}[data-density=compact][_nghost-%COMP%] .projects__details-header[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .projects__details-header[_ngcontent-%COMP%]{min-height:48px;padding-top:4px;padding-bottom:4px}[data-density=compact][_nghost-%COMP%] .projects__details-title[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .projects__details-title[_ngcontent-%COMP%]{font-size:18px;line-height:22px}[data-density=compact][_nghost-%COMP%] .projects__details-body[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .projects__details-body[_ngcontent-%COMP%]{padding-top:8px;padding-bottom:8px}[data-density=compact][_nghost-%COMP%] .projects__detail-item[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .projects__detail-item[_ngcontent-%COMP%]{min-height:36px;padding-top:6px;padding-bottom:6px}[data-density=compact][_nghost-%COMP%] .projects__details-actions[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .projects__details-actions[_ngcontent-%COMP%]{padding-top:10px;padding-bottom:12px}@media(max-width:1200px){.projects__main[_ngcontent-%COMP%]{flex-direction:column}.projects__details[_ngcontent-%COMP%]{position:static;flex-basis:auto;width:100%;height:auto;max-height:none}}.projects__footer[_ngcontent-%COMP%]{max-width:1600px;margin:0 auto;padding:24px 20px;color:var(--mat-sys-on-surface-variant);font-size:14px;opacity:.7;flex-shrink:0}.projects__footer-content[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:var(--gns3-density-card-gap)}.projects__footer-info[_ngcontent-%COMP%]{flex:1}.projects__footer-social[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-3)}.projects__footer-social-link[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;color:var(--mat-sys-on-surface-variant);transition:background-color var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard),color var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard),border-color var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard);text-decoration:none}.projects__footer-social-link[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-primary) 12%,transparent);color:var(--mat-sys-primary)}.projects__footer-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px;display:flex;align-items:center;justify-content:center;line-height:1;overflow:visible}@keyframes _ngcontent-%COMP%_slideInRight{0%{opacity:0;transform:translate(30px)}to{opacity:1;transform:translate(0)}}@media(max-width:768px){.projects__main[_ngcontent-%COMP%]{flex-direction:column}.projects__details[_ngcontent-%COMP%]{position:static;width:100%;height:auto;max-height:none}.projects__header[_ngcontent-%COMP%]{flex-direction:column;align-items:flex-start;gap:12px;padding:16px 16px 12px}.projects__button[_ngcontent-%COMP%]{margin:8px 0;width:100%}.projects__buttons-bar[_ngcontent-%COMP%]{flex-direction:column;width:100%}.projects__actions-cell[_ngcontent-%COMP%]{flex-wrap:wrap;gap:var(--gns3-action-gap)}mat-cell[_ngcontent-%COMP%]{padding:0 12px;font-size:13px}.projects__footer[_ngcontent-%COMP%]{padding:16px;font-size:12px}.projects__footer-content[_ngcontent-%COMP%]{gap:8px;text-align:left}}button.projects__button--primary[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-primary);background-color:var(--mat-sys-primary);--mat-button-protected-label-text-color: var(--mat-sys-on-primary);--mat-button-protected-container-color: var(--mat-sys-primary);--mat-button-protected-state-layer-color: var(--mat-sys-on-primary)}'],changeDetection:0})}return n})();var U_=(()=>{class n{controllerStatusChanged=new Ye;constructor(){}get statusChannel(){return"local-controller-status-events"}async start(e){var t={controllerName:e.name,status:"starting",message:""};return this.controllerStatusChanged.next(t),Promise.resolve()}async stop(e){return Promise.resolve()}async stopAll(){return Promise.resolve()}getRunningControllers(){return[]}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var wFe=(n,o)=>o.key;function MFe(n,o){n&1&&(r(0,"mat-error"),c(1,"You must enter a value"),l())}function SFe(n,o){if(n&1&&(r(0,"mat-option",8),c(1),l()),n&2){let e=o.$implicit;v("value",e.key),m(),X(" ",e.name," ")}}function kFe(n,o){if(n&1&&(r(0,"div",9)(1,"mat-error"),c(2),l()()),n&2){let e=h();m(2),N(e.connectionError)}}function PFe(n,o){if(n&1&&(r(0,"div",9)(1,"mat-error"),c(2),l()()),n&2){let e=h();m(2),N(e.duplicateNameError)}}function TFe(n,o){n&1&&L(0,"mat-spinner",13)}function EFe(n,o){n&1&&c(0," Add ")}function OFe(n,o){if(n&1){let e=R();r(0,"button",15),_("click",function(){y(e);let i=h();return w(i.onAddAnywayClick())}),c(1,"Add anyway"),l()}}var B2=(()=>{class n{dialogRef=f(We);controllerService=f(_t);toasterService=f(re);changeDetector=f(oe);data=f(Wt);protocols=[{key:"http:",name:"HTTP"},{key:"https:",name:"HTTPS"}];connectionError="";canAddAnyway=!1;isCheckingConnection=!1;duplicateNameError="";controllerForm=new Qo({name:new Ge("",[Ue.required]),host:new Ge("",[Ue.required]),port:new Ge("",[Ue.required,Ue.min(1)]),protocol:new Ge("http:")});getDefaultHost(){return"127.0.0.1"}getDefaultPort(){return 3080}constructor(){this.controllerForm.get("host").setValue(this.getDefaultHost()),this.controllerForm.get("port").setValue(this.getDefaultPort())}detectLocation(e){return e==="127.0.0.1"||e==="localhost"?"local":"remote"}onAddClick(){if(!this.controllerForm.valid)return;let e=this.controllerForm.get("name").value;if(this.controllerService.isControllerNameTaken(e)){this.duplicateNameError=`Controller with name "${e}" already exists`,this.toasterService.error(this.duplicateNameError),this.changeDetector.markForCheck();return}this.connectionError="",this.duplicateNameError="",this.canAddAnyway=!1,this.isCheckingConnection=!0,this.changeDetector.markForCheck();let t=Object.assign({},this.controllerForm.value);t.location=this.detectLocation(t.host),this.controllerService.checkControllerVersion(t).subscribe({next:i=>{this.isCheckingConnection=!1,i.version.split(".")[0]>=3?(this.dialogRef.close(t),this.toasterService.success(`Controller ${t.name} added.`)):(this.connectionError="Controller version is not supported.",this.canAddAnyway=!0,this.toasterService.error("Controller version is not supported.")),this.changeDetector.markForCheck()},error:i=>{this.isCheckingConnection=!1,this.connectionError="Cannot connect to the controller. It appears offline.",this.canAddAnyway=!0;let a=i.error?.message||i.message||"Cannot connect to the controller";this.toasterService.error(a),this.changeDetector.markForCheck()}})}onAddAnywayClick(){if(!this.controllerForm.valid)return;let e=this.controllerForm.get("name").value;if(this.controllerService.isControllerNameTaken(e)){this.duplicateNameError=`Controller with name "${e}" already exists`,this.toasterService.error(this.duplicateNameError),this.changeDetector.markForCheck();return}let t=Object.assign({},this.controllerForm.value);t.location=this.detectLocation(t.host),this.dialogRef.close(t),this.toasterService.warning(`Controller ${t.name} added in offline mode.`)}onNoClick(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-add-controller-dialog"]],decls:32,vars:7,consts:[["mat-dialog-title",""],[3,"formGroup"],["mat-dialog-content","",1,"gns3-form-stack","gns3-form-layout-fixed"],["appearance","outline",1,"full-width-field"],["matInput","","tabindex","1","formControlName","name","placeholder","Controller name"],["matInput","","tabindex","1","formControlName","host","placeholder","127.0.0.1"],["matInput","","type","number","tabindex","1","formControlName","port","placeholder","3080"],["formControlName","protocol"],[3,"value"],["mat-dialog-content",""],["mat-dialog-actions","","align","end"],["mat-button","","tabindex","-1","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"],["diameter","16"],["mat-button","","mat-raised-button","","color","warn"],["mat-button","","mat-raised-button","","color","warn",3,"click"]],template:function(t,i){t&1&&(r(0,"h2",0),c(1,"Add controller"),l(),r(2,"form",1)(3,"div",2)(4,"mat-form-field",3)(5,"mat-label"),c(6,"Name"),l(),L(7,"input",4),T(8,MFe,2,0,"mat-error"),l(),r(9,"mat-form-field",3)(10,"mat-label"),c(11,"Host"),l(),L(12,"input",5),l(),r(13,"mat-form-field",3)(14,"mat-label"),c(15,"Port"),l(),L(16,"input",6),l(),r(17,"mat-form-field",3)(18,"mat-label"),c(19,"Protocol"),l(),r(20,"mat-select",7),Q(21,SFe,2,2,"mat-option",8,wFe),l()()(),T(23,kFe,3,1,"div",9),T(24,PFe,3,1,"div",9),r(25,"div",10)(26,"button",11),_("click",function(){return i.onNoClick()}),c(27,"Cancel"),l(),r(28,"button",12),_("click",function(){return i.onAddClick()}),T(29,TFe,1,0,"mat-spinner",13)(30,EFe,1,0),l(),T(31,OFe,2,0,"button",14),l()()),t&2&&(m(2),v("formGroup",i.controllerForm),m(6),E(i.controllerForm.get("name").hasError("required")?8:-1),m(13),K(i.protocols),m(2),E(i.connectionError?23:-1),m(),E(i.duplicateNameError?24:-1),m(4),v("disabled",i.isCheckingConnection),m(),E(i.isCheckingConnection?29:30),m(2),E(i.canAddAnyway?31:-1))},dependencies:[fe,It,Ct,At,No,Nt,vt,Ut,Yt,ke,qe,Qe,bt,Y,he,we,Pe,Ve,Wn,ye,Ee,ot,ct,nt,Ho,rt,mt],encapsulation:2,changeDetection:0})}return n})();function DFe(n,o){n&1&&(r(0,"mat-error"),c(1,"Name is required"),l())}function IFe(n,o){n&1&&(r(0,"mat-error"),c(1,"Host is required"),l())}function AFe(n,o){n&1&&(r(0,"mat-error"),c(1,"Port is required"),l())}function NFe(n,o){n&1&&(r(0,"mat-error"),c(1,"Port must be at least 1"),l())}function FFe(n,o){if(n&1&&(r(0,"mat-error"),c(1),l()),n&2){let e=h();m(),N(e.duplicateNameError)}}var z$=(()=>{class n{dialogRef=f(We);controllerService=f(_t);toasterService=f(re);changeDetector=f(oe);controller;controllerForm;duplicateNameError="";ngOnInit(){this.controllerForm=new Qo({name:new Ge(this.controller.name,[Ue.required]),host:new Ge(this.controller.host,[Ue.required]),port:new Ge(this.controller.port,[Ue.required,Ue.min(1)]),protocol:new Ge(this.controller.protocol||"http:")})}onSave(){if(!this.controllerForm.valid)return;let e=this.controllerForm.value.name;if(e!==this.controller.name&&this.controllerService.isControllerNameTaken(e)){this.duplicateNameError=`Controller with name "${e}" already exists`,this.toasterService.error(this.duplicateNameError),this.changeDetector.markForCheck();return}this.duplicateNameError="";let t=ze(q({},this.controller),{name:e,host:this.controllerForm.value.host,port:this.controllerForm.value.port,protocol:this.controllerForm.value.protocol});this.controllerService.update(t).then(()=>{this.dialogRef.close(t),this.toasterService.success(`Controller ${t.name} updated.`)},i=>{let a=i.error?.message||i.message||"Failed to update controller";this.toasterService.error(a),this.changeDetector.markForCheck()})}onCancel(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-edit-controller-dialog"]],decls:34,vars:7,consts:[["mat-dialog-title",""],[1,"gns3-form-stack","gns3-form-layout-fixed",3,"formGroup"],["appearance","outline",1,"full-width-field"],["matInput","","formControlName","name","placeholder","Controller name"],["matInput","","formControlName","host","placeholder","127.0.0.1"],["matInput","","type","number","formControlName","port","placeholder","3080"],["formControlName","protocol"],["value","http:"],["value","https:"],["align","end"],["mat-button","",3,"click"],["mat-raised-button","","color","primary",3,"click","disabled"]],template:function(t,i){t&1&&(r(0,"h2",0),c(1,"Edit Controller"),l(),r(2,"mat-dialog-content")(3,"form",1)(4,"mat-form-field",2)(5,"mat-label"),c(6,"Name"),l(),L(7,"input",3),T(8,DFe,2,0,"mat-error"),l(),r(9,"mat-form-field",2)(10,"mat-label"),c(11,"Host"),l(),L(12,"input",4),T(13,IFe,2,0,"mat-error"),l(),r(14,"mat-form-field",2)(15,"mat-label"),c(16,"Port"),l(),L(17,"input",5),T(18,AFe,2,0,"mat-error"),T(19,NFe,2,0,"mat-error"),l(),r(20,"mat-form-field",2)(21,"mat-label"),c(22,"Protocol"),l(),r(23,"mat-select",6)(24,"mat-option",7),c(25,"HTTP"),l(),r(26,"mat-option",8),c(27,"HTTPS"),l()()(),T(28,FFe,2,1,"mat-error"),l()(),r(29,"mat-dialog-actions",9)(30,"button",10),_("click",function(){return i.onCancel()}),c(31,"Cancel"),l(),r(32,"button",11),_("click",function(){return i.onSave()}),c(33,"Save"),l()()),t&2&&(m(3),v("formGroup",i.controllerForm),m(5),E(i.controllerForm.get("name").hasError("required")?8:-1),m(5),E(i.controllerForm.get("host").hasError("required")?13:-1),m(5),E(i.controllerForm.get("port").hasError("required")?18:-1),m(),E(i.controllerForm.get("port").hasError("min")?19:-1),m(9),E(i.duplicateNameError?28:-1),m(4),v("disabled",!i.controllerForm.valid))},dependencies:[fe,It,Ct,At,No,Nt,vt,Ut,Yt,ke,qe,Qe,bt,Y,he,we,Pe,Ve,Wn,ye,Ee,ot,ct,nt,Ho],encapsulation:2,changeDetection:0})}return n})();var RFe=n=>["/controller",n,"projects"];function zFe(n,o){n&1&&(r(0,"div",28),L(1,"mat-progress-spinner",52),r(2,"span"),c(3,"Loading controllers\u2026"),l()())}function LFe(n,o){n&1&&(r(0,"mat-header-cell",53),c(1,"ID"),l())}function VFe(n,o){if(n&1&&(r(0,"mat-cell"),c(1),l()),n&2){let e=o.$implicit;m(),N(e.id)}}function BFe(n,o){n&1&&(r(0,"mat-header-cell",53),c(1,"Name"),l())}function jFe(n,o){if(n&1&&(r(0,"a",57),c(1),l()),n&2){let e=h().$implicit;v("routerLink",tn(2,RFe,e.id)),m(),N(e.name)}}function $Fe(n,o){if(n&1&&(r(0,"strong"),c(1),l()),n&2){let e=h().$implicit;m(),N(e.name)}}function HFe(n,o){if(n&1&&(r(0,"mat-cell")(1,"div",54)(2,"span",55)(3,"mat-icon"),c(4,"dns"),l()(),r(5,"div",56),T(6,jFe,2,4,"a",57)(7,$Fe,2,1,"strong"),l()()()),n&2){let e=o.$implicit,t=h();m(6),E(t.getControllerStatus(e)==="running"?6:7)}}function UFe(n,o){n&1&&(r(0,"mat-header-cell",53),c(1,"Status"),l())}function WFe(n,o){if(n&1&&(r(0,"mat-cell")(1,"span",58),L(2,"span"),c(3),Et(4,"titlecase"),l()()),n&2){let e=o.$implicit,t=h();m(),ne("controllers-page__status--running",t.getControllerStatus(e)==="running")("controllers-page__status--starting",t.getControllerStatus(e)==="starting"),m(2),X(" ",gn(4,5,t.getControllerStatus(e))," ")}}function GFe(n,o){n&1&&(r(0,"mat-header-cell",53),c(1,"Location"),l())}function qFe(n,o){if(n&1&&(r(0,"mat-cell")(1,"span",59)(2,"mat-icon"),c(3),l(),c(4),Et(5,"titlecase"),l()()),n&2){let e=o.$implicit;m(3),N(e.location==="local"?"computer":"cloud"),m(),X(" ",gn(5,2,e.location)," ")}}function QFe(n,o){n&1&&(r(0,"mat-header-cell",60),c(1,"Host"),l())}function KFe(n,o){if(n&1&&(r(0,"mat-cell")(1,"span",61),c(2),l()()),n&2){let e=o.$implicit;m(),v("matTooltip",e.host),m(),N(e.host)}}function XFe(n,o){n&1&&(r(0,"mat-header-cell",53),c(1,"Port"),l())}function YFe(n,o){if(n&1&&(r(0,"mat-cell"),c(1),l()),n&2){let e=o.$implicit;m(),N(e.port)}}function ZFe(n,o){n&1&&(r(0,"mat-header-cell"),c(1,"Actions"),l())}function JFe(n,o){if(n&1){let e=R();r(0,"button",66),_("click",function(){y(e);let i=h().$implicit,a=h();return w(a.openProjects(i))}),r(1,"mat-icon"),c(2,"folder_open"),l()()}if(n&2){let e=h().$implicit;Ce("aria-label","Open projects on "+e.name)}}function e8e(n,o){if(n&1){let e=R();r(0,"mat-cell")(1,"div",62),T(2,JFe,3,1,"button",63),r(3,"button",64),_("click",function(){let i=y(e).$implicit,a=h();return w(a.editController(i))}),r(4,"mat-icon"),c(5,"edit"),l()(),r(6,"button",65),_("click",function(){let i=y(e).$implicit,a=h();return w(a.deleteController(i))}),r(7,"mat-icon"),c(8,"delete"),l()()()()}if(n&2){let e=o.$implicit,t=h();m(2),E(t.getControllerStatus(e)==="running"?2:-1),m(),Ce("aria-label","Edit "+e.name),m(3),Ce("aria-label","Delete "+e.name)}}function t8e(n,o){n&1&&L(0,"mat-header-row")}function n8e(n,o){if(n&1&&L(0,"mat-row"),n&2){let e=o.$implicit,t=h();ne("controllers-page__row--running",t.getControllerStatus(e)==="running")}}function i8e(n,o){if(n&1){let e=R();r(0,"div",43)(1,"mat-paginator",67),Et(2,"async"),_("page",function(i){y(e);let a=h();return w(a.onPageEvent(i))}),l()()}if(n&2){let e=h();m(),v("length",gn(2,4,e.dataSource==null?null:e.dataSource.filteredLength)||0)("pageIndex",e.pageIndex())("pageSize",e.pageSize())("pageSizeOptions",e.pageSizeOptions)}}function o8e(n,o){if(n&1){let e=R();r(0,"button",7),_("click",function(){y(e);let i=h(2);return w(i.createModal())}),r(1,"mat-icon"),c(2,"add"),l(),c(3," Add Controller "),l()}}function a8e(n,o){if(n&1&&(r(0,"div",44)(1,"mat-icon"),c(2,"dns"),l(),r(3,"h3"),c(4,"No controllers found"),l(),r(5,"p"),c(6,"Try changing the search or status filter, or add a controller."),l(),T(7,o8e,4,0,"button",68),l()),n&2){let e=h();m(7),E(!e.searchText()&&e.statusFilter()==="all"?7:-1)}}function r8e(n,o){n&1&&L(0,"mat-icon",50)}function s8e(n,o){n&1&&L(0,"mat-icon",51)}var j2=(()=>{class n{dialog=f(Xe);controllerService=f(_t);controllerDatabase=f(dh);controllerManagement=f(U_);changeDetector=f(oe);router=f(Ft);toasterService=f(re);themeService=f(Ni);dataSource=null;displayedColumns=["id","name","status","location","ip","port","actions"];controllerStatusSubscription;searchText=$("");statusFilter=$("all");loading=z(!0);pageIndex=z(0);pageSize=z(25);pageSizeOptions=[5,10,25,50,100];minStartingDisplayMs=700;statusRefreshIntervalMs=5e3;startingTimestamps=new Map;startingTimeouts=new Map;statusRefreshSubscription;version=Op;currentYear=new Date().getFullYear();sort;getControllers(){this.loading.set(!0);let e=this.controllerManagement.getRunningControllers();this.controllerService.findAll().then(t=>{t.forEach(i=>{i.status="stopped",e.findIndex(s=>i.name===s)>=0&&(i.status="running"),i.protocol||(i.protocol=location.protocol)}),this.resetPage(),this.controllerDatabase.addControllers(t),this.loading.set(!1),this.changeDetector.markForCheck(),t.forEach(i=>{this.updateControllerOnlineStatus(i)})},t=>{this.loading.set(!1);let i=t.error?.message||t.message||"Failed to load controllers";this.toasterService.error(i),this.changeDetector.markForCheck()})}ngOnInit(){this.controllerService&&this.controllerService.isServiceInitialized?this.getControllers():this.controllerService.serviceInitialized.subscribe(async e=>{e&&this.getControllers()}),this.startStatusAutoRefresh(),this.controllerStatusSubscription=this.controllerManagement.controllerStatusChanged.subscribe(e=>{let t=this.controllerDatabase.find(e.controllerName);if(!t)return;let i=this.startingTimeouts.get(t.name);if(i&&e.status!=="started"&&(clearTimeout(i),this.startingTimeouts.delete(t.name)),e.status==="starting"&&(t.status="starting",this.startingTimestamps.set(t.name,Date.now()),this.controllerDatabase.update(t),this.changeDetector.markForCheck()),e.status==="stopped"&&(t.status="stopped",this.startingTimestamps.delete(t.name),this.controllerDatabase.update(t),this.changeDetector.markForCheck()),e.status==="errored"&&(t.status="stopped",this.startingTimestamps.delete(t.name),this.controllerDatabase.update(t),this.changeDetector.markForCheck()),e.status==="started"){let a=this.startingTimestamps.get(t.name)||Date.now(),s=Date.now()-a,d=Math.max(0,this.minStartingDisplayMs-s);if(d>0){let p=setTimeout(()=>{t.status="running",this.controllerDatabase.update(t),this.startingTimeouts.delete(t.name),this.startingTimestamps.delete(t.name),this.changeDetector.markForCheck()},d);this.startingTimeouts.set(t.name,p);return}t.status="running",this.startingTimestamps.delete(t.name),this.controllerDatabase.update(t),this.changeDetector.markForCheck()}})}ngAfterViewInit(){this.sort&&(this.sort.sort({id:"id",start:"asc"}),this.dataSource=new $4(this.controllerDatabase,this.sort),this.changeDetector.markForCheck())}ngOnDestroy(){this.controllerStatusSubscription.unsubscribe(),this.startingTimeouts.forEach(e=>clearTimeout(e)),this.startingTimeouts.clear(),this.statusRefreshSubscription&&this.statusRefreshSubscription.unsubscribe()}openProjects(e){this.router.navigate(["/controller",e.id,"projects"])}createModal(){this.dialog.open(B2,{panelClass:["base-dialog-panel","controller-small-dialog-panel","add-controller-dialog-panel","dialog-medium-panel"],autoFocus:!1,disableClose:!0}).afterClosed().subscribe(t=>{t&&this.controllerService.create(t).then(i=>{i.status="stopped",this.controllerDatabase.addController(i),this.updateControllerOnlineStatus(i),this.changeDetector.markForCheck()},i=>{let a=i.error?.message||i.message||"Failed to create controller";this.toasterService.error(a),this.changeDetector.markForCheck()})})}startStatusAutoRefresh(){this.statusRefreshSubscription=DC(this.statusRefreshIntervalMs).subscribe(()=>{this.refreshControllersStatuses()})}refreshControllersStatuses(){this.controllerDatabase.data.slice().forEach(e=>{e.status!=="starting"&&this.updateControllerOnlineStatus(e)})}updateControllerOnlineStatus(e){this.controllerService.checkControllerVersion(e).subscribe({next:t=>{e.status=t.version.split(".")[0]>=3?"running":"stopped",this.controllerDatabase.update(e),this.changeDetector.markForCheck()},error:()=>{e.status="stopped",this.controllerDatabase.update(e),this.changeDetector.markForCheck()}})}getControllerStatus(e){return e.status===void 0?"stopped":e.status}deleteController(e){this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","dialog-small-panel","confirmation-danger-panel"],autoFocus:".cancel-button",data:{title:"Delete controller?",message:`Controller "${e.name}" will be removed from this Web-UI.`,confirmButtonText:"Delete controller",tone:"danger"}}).afterClosed().subscribe(i=>{i&&this.controllerService.delete(e).then(()=>{this.resetPage(),this.controllerDatabase.remove(e),this.toasterService.success(`Controller "${e.name}" deleted.`),this.changeDetector.markForCheck()},a=>{let s=a.error?.message||a.message||"Failed to delete controller";this.toasterService.error(s),this.changeDetector.markForCheck()})})}editController(e){let t=this.dialog.open(z$,{panelClass:["base-dialog-panel","controller-dialog-panel","edit-controller-dialog-panel","dialog-medium-panel"],autoFocus:!1,disableClose:!0,data:{controller:e}});t.componentRef.instance.controller=e,t.afterClosed().subscribe(i=>{i&&(this.controllerDatabase.update(i),this.changeDetector.markForCheck())})}onSearchChange(e){this.searchText.set(e),this.resetPage(),this.dataSource&&this.dataSource.setFilter(e)}onStatusFilterChange(e){this.statusFilter.set(e),this.resetPage(),this.dataSource?.setStatusFilter(e)}onSortByChange(e){this.sort&&(this.sort.active=e,this.sort.direction="asc",this.sort.sortChange.emit({active:e,direction:"asc"}),this.resetPage())}onSortChange(){this.resetPage()}onPageEvent(e){this.pageIndex.set(e.pageIndex),this.pageSize.set(e.pageSize),this.dataSource?.setPage(e)}trackController(e,t){return t.id}isLightThemeEnabled(){return this.themeService.getActualTheme()==="light"}resetPage(){this.pageIndex.set(0),this.dataSource?.setPage({pageIndex:0,pageSize:this.pageSize(),length:this.dataSource.filteredLength.value})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-controller-list"]],viewQuery:function(t,i){if(t&1&&Kn(Ro,5),t&2){let a;gt(a=ht())&&(i.sort=a.first)}},inputs:{searchText:[1,"searchText"],statusFilter:[1,"statusFilter"]},outputs:{searchText:"searchTextChange",statusFilter:"statusFilterChange"},decls:88,vars:19,consts:[["table",""],[1,"controllers-page"],[1,"controllers-page__header"],[1,"controllers-page__heading"],[1,"controllers-page__title"],[1,"controllers-page__header-actions"],["mat-raised-button","","color","primary",1,"controllers-page__button",3,"click","disabled"],["mat-raised-button","","color","primary",1,"controllers-page__button",3,"click"],[1,"controllers-page__toolbar"],["subscriptSizing","dynamic",1,"controllers-page__search"],["matPrefix",""],["matInput","","placeholder","Search by name, host, location, port, or status",3,"input","value"],[1,"controllers-page__toolbar-actions"],["subscriptSizing","dynamic",1,"controllers-page__filter"],[3,"valueChange","value"],["value","all"],["value","running"],["value","starting"],["value","stopped"],["subscriptSizing","dynamic",1,"controllers-page__sort"],["value","id"],["value","name"],["value","status"],["value","location"],["value","host"],["value","port"],[1,"controllers-page__main"],[1,"controllers-page__table-container"],[1,"controllers-page__loading"],["matSort","",3,"matSortChange","dataSource","trackBy"],["matColumnDef","id"],["mat-sort-header","",4,"matHeaderCellDef"],[4,"matCellDef"],["matColumnDef","name"],["matColumnDef","status"],["matColumnDef","location"],["matColumnDef","ip"],["mat-sort-header","host",4,"matHeaderCellDef"],["matColumnDef","port"],["matColumnDef","actions"],[4,"matHeaderCellDef"],[4,"matHeaderRowDef","matHeaderRowDefSticky"],[3,"controllers-page__row--running",4,"matRowDef","matRowDefColumns"],[1,"controllers-page__table-footer"],[1,"controllers-page__empty"],[1,"controllers-page__footer"],[1,"controllers-page__footer-social"],["href","https://github.com/GNS3","target","_blank","rel","noopener noreferrer","matTooltip","GNS3 on GitHub",1,"controllers-page__footer-social-link"],["svgIcon","github",1,"controllers-page__footer-icon"],["href","https://www.gns3.com/","target","_blank","rel","noopener noreferrer","matTooltip","GNS3 website",1,"controllers-page__footer-social-link"],["svgIcon","gns3",1,"controllers-page__footer-icon"],["svgIcon","gns3black",1,"controllers-page__footer-icon"],["diameter","42","mode","indeterminate"],["mat-sort-header",""],[1,"controllers-page__name-cell"],[1,"controllers-page__controller-icon"],[1,"controllers-page__name-copy"],[3,"routerLink"],[1,"controllers-page__status"],[1,"controllers-page__location"],["mat-sort-header","host"],[1,"controllers-page__host",3,"matTooltip"],[1,"controllers-page__actions-cell"],["mat-icon-button","","matTooltip","Open projects",1,"controllers-page__action","controllers-page__action--open"],["mat-icon-button","","matTooltip","Edit controller",1,"controllers-page__action","controllers-page__action--edit",3,"click"],["mat-icon-button","","matTooltip","Delete controller",1,"controllers-page__action","controllers-page__action--delete",3,"click"],["mat-icon-button","","matTooltip","Open projects",1,"controllers-page__action","controllers-page__action--open",3,"click"],["showFirstLastButtons","","aria-label","Select controllers page",3,"page","length","pageIndex","pageSize","pageSizeOptions"],["mat-raised-button","","color","primary",1,"controllers-page__button"]],template:function(t,i){t&1&&(r(0,"div",1)(1,"header",2)(2,"div",3)(3,"h1",4),c(4,"Controllers"),l()(),r(5,"div",5)(6,"button",6),_("click",function(){return i.getControllers()}),r(7,"mat-icon"),c(8,"refresh"),l(),c(9," Refresh "),l(),r(10,"button",7),_("click",function(){return i.createModal()}),r(11,"mat-icon"),c(12,"add"),l(),c(13," Add Controller "),l()()(),r(14,"section",8)(15,"mat-form-field",9)(16,"mat-icon",10),c(17,"search"),l(),r(18,"input",11),_("input",function(s){return i.onSearchChange(s.target.value)}),l()(),r(19,"div",12)(20,"mat-form-field",13)(21,"mat-label"),c(22,"Status"),l(),r(23,"mat-select",14),_("valueChange",function(s){return i.onStatusFilterChange(s)}),r(24,"mat-option",15),c(25,"All statuses"),l(),r(26,"mat-option",16),c(27,"Running"),l(),r(28,"mat-option",17),c(29,"Starting"),l(),r(30,"mat-option",18),c(31,"Stopped"),l()()(),r(32,"mat-form-field",19)(33,"mat-label"),c(34,"Sort by"),l(),r(35,"mat-select",14),_("valueChange",function(s){return i.onSortByChange(s)}),r(36,"mat-option",20),c(37,"ID"),l(),r(38,"mat-option",21),c(39,"Name"),l(),r(40,"mat-option",22),c(41,"Status"),l(),r(42,"mat-option",23),c(43,"Location"),l(),r(44,"mat-option",24),c(45,"Host"),l(),r(46,"mat-option",25),c(47,"Port"),l()()()()(),r(48,"main",26)(49,"div",27),T(50,zFe,4,0,"div",28),r(51,"mat-table",29,0),_("matSortChange",function(){return i.onSortChange()}),Fe(53,30),se(54,LFe,2,0,"mat-header-cell",31)(55,VFe,2,1,"mat-cell",32),Re(),Fe(56,33),se(57,BFe,2,0,"mat-header-cell",31)(58,HFe,8,1,"mat-cell",32),Re(),Fe(59,34),se(60,UFe,2,0,"mat-header-cell",31)(61,WFe,5,7,"mat-cell",32),Re(),Fe(62,35),se(63,GFe,2,0,"mat-header-cell",31)(64,qFe,6,4,"mat-cell",32),Re(),Fe(65,36),se(66,QFe,2,0,"mat-header-cell",37)(67,KFe,3,2,"mat-cell",32),Re(),Fe(68,38),se(69,XFe,2,0,"mat-header-cell",31)(70,YFe,2,1,"mat-cell",32),Re(),Fe(71,39),se(72,ZFe,2,0,"mat-header-cell",40)(73,e8e,9,3,"mat-cell",32),Re(),se(74,t8e,1,0,"mat-header-row",41)(75,n8e,1,2,"mat-row",42),l(),T(76,i8e,3,6,"div",43),Et(77,"async"),FC(78,a8e,8,1,"div",44),l()(),r(79,"footer",45)(80,"span"),c(81),l(),r(82,"div",46)(83,"a",47),L(84,"mat-icon",48),l(),r(85,"a",49),T(86,r8e,1,0,"mat-icon",50),T(87,s8e,1,0,"mat-icon",51),l()()()()),t&2&&(m(6),v("disabled",i.loading()),m(12),v("value",i.searchText()),m(5),v("value",i.statusFilter()),m(12),v("value",(i.sort==null?null:i.sort.active)||"id"),m(14),ne("controllers-page__table-container--loading",i.loading()),m(),E(i.loading()?50:-1),m(),v("dataSource",i.dataSource)("trackBy",i.trackController),m(23),v("matHeaderRowDef",i.displayedColumns)("matHeaderRowDefSticky",!0),m(),v("matRowDefColumns",i.displayedColumns),m(),E(!i.loading()&&gn(77,17,i.dataSource==null?null:i.dataSource.filteredLength)>0?76:i.loading()?-1:78),m(5),Un("GNS3 Web-UI \xA92018-",i.currentYear," v",i.version),m(5),E(i.isLightThemeEnabled()?-1:86),m(),E(i.isLightThemeEnabled()?87:-1))},dependencies:[fe,vn,Co,ke,_a,Ro,Aa,_n,bn,yn,kn,wn,xn,Pn,Mn,Sn,Tn,En,we,Pe,Ve,Bi,ye,Ee,ie,ce,Y,he,Be,st,pt,As,ea,rt,mt,ot,ct,nt,Pa,og],styles:["[_nghost-%COMP%]{display:block;width:100%;background:transparent}.controllers-page[_ngcontent-%COMP%]{animation:none}.controllers-page__header[_ngcontent-%COMP%], .controllers-page__toolbar[_ngcontent-%COMP%], .controllers-page__main[_ngcontent-%COMP%], .controllers-page__footer[_ngcontent-%COMP%]{max-width:1600px;margin-inline:auto}.controllers-page__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:24px 20px 16px}.controllers-page__heading[_ngcontent-%COMP%], .controllers-page__header-actions[_ngcontent-%COMP%], .controllers-page__toolbar[_ngcontent-%COMP%], .controllers-page__toolbar-actions[_ngcontent-%COMP%], .controllers-page__actions-cell[_ngcontent-%COMP%], .controllers-page__footer[_ngcontent-%COMP%], .controllers-page__footer[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:flex;align-items:center}.controllers-page__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal;white-space:nowrap}.controllers-page__header-actions[_ngcontent-%COMP%]{gap:var(--gns3-density-space-3)}button.controllers-page__button[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing)}.controllers-page__toolbar[_ngcontent-%COMP%]{gap:var(--gns3-density-card-gap);padding:0 20px 8px}.controllers-page__search[_ngcontent-%COMP%]{flex:1;min-width:260px}.controllers-page__toolbar-actions[_ngcontent-%COMP%]{flex:0 0 auto;gap:var(--gns3-density-space-3)}.controllers-page__filter[_ngcontent-%COMP%], .controllers-page__sort[_ngcontent-%COMP%]{width:160px}.controllers-page__main[_ngcontent-%COMP%]{padding:0 20px 20px}.controllers-page__loading[_ngcontent-%COMP%]{position:absolute;z-index:2;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:320px;gap:var(--gns3-density-card-gap);color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface)}.controllers-page__table-container[_ngcontent-%COMP%]{position:relative;min-width:0;border-radius:16px;background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;overflow-x:auto}.controllers-page__table-container--loading[_ngcontent-%COMP%]{min-height:320px}mat-table[_ngcontent-%COMP%]{width:100%;min-width:900px}.mat-mdc-row[_ngcontent-%COMP%], .mat-row[_ngcontent-%COMP%]{height:var(--mat-table-row-item-container-height);min-height:var(--mat-table-row-item-container-height)}.mat-header-row[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%]{position:sticky;top:0;z-index:10;background:color-mix(in srgb,var(--mat-sys-primary-container) 72%,var(--mat-sys-surface));--mat-sort-arrow-color: var(--mat-sys-on-primary-container)}.mat-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);font-size:13px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}mat-row[_ngcontent-%COMP%]{border-left:3px solid var(--mat-sys-outline-variant);transition:background-color var(--gns3-motion-duration-standard) ease}mat-row[_ngcontent-%COMP%]:nth-child(2n){background:color-mix(in srgb,var(--mat-sys-on-surface) 1%,transparent)}mat-row[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}mat-row.controllers-page__row--running[_ngcontent-%COMP%]{border-left-color:var(--mat-sys-primary)}mat-cell[_ngcontent-%COMP%], mat-header-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:inherit;overflow:hidden;color:var(--mat-sys-on-surface);text-overflow:ellipsis;white-space:nowrap}.mat-column-id[_ngcontent-%COMP%]{flex:0 0 7%;min-width:72px;justify-content:center}.mat-column-name[_ngcontent-%COMP%]{flex:0 0 25%;min-width:250px;justify-content:center}.mat-column-status[_ngcontent-%COMP%]{flex:0 0 14%;min-width:110px;justify-content:center}.mat-column-location[_ngcontent-%COMP%]{flex:0 0 14%;min-width:125px;justify-content:center}.mat-column-ip[_ngcontent-%COMP%]{flex:0 0 16%;min-width:155px;justify-content:center}.mat-column-port[_ngcontent-%COMP%]{flex:0 0 10%;min-width:85px;justify-content:center}.mat-column-actions[_ngcontent-%COMP%]{flex:0 0 14%;min-width:150px;box-sizing:border-box;justify-content:center;padding-right:0}mat-header-cell[_ngcontent-%COMP%] .mat-sort-header-container[_ngcontent-%COMP%]{justify-content:center}.controllers-page__name-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-width:0;gap:var(--gns3-density-space-3);justify-content:center}.controllers-page__controller-icon[_ngcontent-%COMP%]{display:grid;flex:0 0 38px;width:38px;height:38px;place-items:center;border-radius:10px;color:var(--mat-sys-on-primary-container);background:color-mix(in srgb,var(--mat-sys-primary-container) 82%,var(--mat-sys-surface))}.controllers-page__controller-icon[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:21px;height:21px;font-size:21px}.controllers-page__name-copy[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column}.controllers-page__name-copy[_ngcontent-%COMP%] a[_ngcontent-%COMP%], .controllers-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%], .controllers-page__name-copy[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.controllers-page__name-copy[_ngcontent-%COMP%] a[_ngcontent-%COMP%], .controllers-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:14px;font-weight:600}.controllers-page__name-copy[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:var(--mat-sys-primary);text-decoration:none}.controllers-page__name-copy[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{text-decoration:underline}.controllers-page__status[_ngcontent-%COMP%], .controllers-page__location[_ngcontent-%COMP%]{display:inline-flex;align-items:center;width:fit-content;white-space:nowrap;font-size:12px;font-weight:600}.controllers-page__status[_ngcontent-%COMP%]{gap:var(--gns3-density-space-2);padding:4px 10px;border:1px solid var(--mat-sys-outline-variant);border-radius:18px;background:var(--mat-sys-surface-container-highest);color:var(--mat-sys-on-surface-variant)}.controllers-page__status[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{width:7px;height:7px;border-radius:50%;background:currentColor}.controllers-page__status--running[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.controllers-page__status--starting[_ngcontent-%COMP%]{border-color:var(--mat-sys-secondary);color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container)}.controllers-page__location[_ngcontent-%COMP%]{gap:var(--gns3-density-space-2);padding:4px 9px;border-radius:16px;color:var(--mat-sys-secondary);background:color-mix(in srgb,var(--mat-sys-secondary) 10%,transparent)}.controllers-page__location[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:16px;height:16px;font-size:16px}.controllers-page__host[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis}.controllers-page__actions-cell[_ngcontent-%COMP%]{gap:4px}button.controllers-page__action[_ngcontent-%COMP%]{--controller-action-color: var(--mat-sys-on-surface-variant);width:var(--gns3-density-control-height-sm);height:var(--gns3-density-control-height-sm);--mat-icon-button-state-layer-size: var(--gns3-density-control-height-sm);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-control-height-sm)}button.controllers-page__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}button.controllers-page__action[_ngcontent-%COMP%]{color:var(--controller-action-color);--mat-icon-button-state-layer-color: var(--controller-action-color)}button.controllers-page__action[_ngcontent-%COMP%]:not(:disabled) mat-icon[_ngcontent-%COMP%]{color:var(--controller-action-color)}button.controllers-page__action[_ngcontent-%COMP%]:disabled mat-icon[_ngcontent-%COMP%]{color:var(--gns3-button-disabled-label-color)}button.controllers-page__action--open[_ngcontent-%COMP%]{--controller-action-color: var(--mat-sys-secondary)}button.controllers-page__action--edit[_ngcontent-%COMP%]{--controller-action-color: var(--mat-sys-primary)}button.controllers-page__action--delete[_ngcontent-%COMP%]{--controller-action-color: var(--mat-sys-error)}.controllers-page__table-footer[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:var(--mat-table-footer-container-height);padding:0 12px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container))}.controllers-page__table-footer[_ngcontent-%COMP%] mat-paginator[_ngcontent-%COMP%]{width:100%;--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.controllers-page__empty[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:240px;padding:32px;color:var(--mat-sys-on-surface-variant);text-align:center}.controllers-page__empty[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{width:48px;height:48px;font-size:48px;opacity:.55}.controllers-page__empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:12px 0 0;color:var(--mat-sys-on-surface);font-size:17px}.controllers-page__empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:5px 0 16px;font-size:14px}.controllers-page__footer[_ngcontent-%COMP%]{justify-content:space-between;padding:4px 20px 20px;color:var(--mat-sys-on-surface-variant);font-size:12px}.controllers-page__footer[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{gap:var(--gns3-density-space-3)}.controllers-page__footer[_ngcontent-%COMP%] .controllers-page__footer-social-link[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;color:var(--mat-sys-on-surface-variant);transition:all var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1);text-decoration:none}.controllers-page__footer[_ngcontent-%COMP%] .controllers-page__footer-social-link[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-primary) 12%,transparent);color:var(--mat-sys-primary);transform:translateY(-2px)}.controllers-page__footer[_ngcontent-%COMP%] .controllers-page__footer-social-link[_ngcontent-%COMP%]:active{transform:translateY(0)}.controllers-page__footer[_ngcontent-%COMP%] .controllers-page__footer-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px;display:flex;align-items:center;justify-content:center;line-height:1;overflow:visible}[data-density=compact][_nghost-%COMP%] button.controllers-page__button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.controllers-page__button[_ngcontent-%COMP%]{min-height:40px;height:40px}[data-density=compact][_nghost-%COMP%] .controllers-page__controller-icon[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .controllers-page__controller-icon[_ngcontent-%COMP%]{flex-basis:34px;width:34px;height:34px}@media(max-width:900px){.controllers-page__header[_ngcontent-%COMP%], .controllers-page__toolbar[_ngcontent-%COMP%]{align-items:stretch;flex-direction:column}.controllers-page__header-actions[_ngcontent-%COMP%], .controllers-page__toolbar-actions[_ngcontent-%COMP%]{width:100%}.controllers-page__filter[_ngcontent-%COMP%], .controllers-page__sort[_ngcontent-%COMP%]{flex:1;width:auto}}@media(max-width:600px){.controllers-page__header[_ngcontent-%COMP%]{padding:20px 16px 12px}.controllers-page__toolbar[_ngcontent-%COMP%], .controllers-page__main[_ngcontent-%COMP%], .controllers-page__footer[_ngcontent-%COMP%]{padding-inline:16px}.controllers-page__header-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}button.controllers-page__button[_ngcontent-%COMP%]{width:100%}.controllers-page__toolbar-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.controllers-page__footer[_ngcontent-%COMP%]{gap:12px}}"],changeDetection:0})}return n})(),$4=class extends zp{controllerDatabase;sort;filterChange=new cn("");statusFilterChange=new cn("all");pageChange=new cn({pageIndex:0,pageSize:25,length:0});filteredLength=new cn(0);constructor(o,e){super(),this.controllerDatabase=o,this.sort=e}setFilter(o){this.filterChange.next((o||"").trim().toLowerCase()),this.resetPage()}setStatusFilter(o){this.statusFilterChange.next(o||"all"),this.resetPage()}setPage(o){this.pageChange.next(o)}connect(){return ro(this.controllerDatabase.dataChange,this.sort.sortChange,this.filterChange,this.statusFilterChange,this.pageChange).pipe(Pt(()=>{let o=this.controllerDatabase.data.slice(),e=this.filterChange.value,t=this.statusFilterChange.value;e&&(o=o.filter(p=>[p.id,p.name,p.location,p.host,p.port,p.status||"stopped"].map(g=>String(g||"").toLowerCase()).join(" ").includes(e))),t!=="all"&&(o=o.filter(p=>(p.status||"stopped")===t)),this.sort.active&&this.sort.direction!==""&&o.sort((p,u)=>{let g=p[this.sort.active]!==void 0?p[this.sort.active]:"",C=u[this.sort.active]!==void 0?u[this.sort.active]:"",M=isNaN(+g)?g:+g,x=isNaN(+C)?C:+C;return(M<x?-1:M>x?1:0)*(this.sort.direction==="asc"?1:-1)}),this.filteredLength.next(o.length);let i=this.pageChange.value.pageSize,a=Math.max(Math.ceil(o.length/i)-1,0),d=Math.min(this.pageChange.value.pageIndex,a)*i;return o.slice(d,d+i)}))}disconnect(){}resetPage(){this.pageChange.value.pageIndex!==0&&this.pageChange.next(ze(q({},this.pageChange.value),{pageIndex:0}))}};var $2=(()=>{class n{constructor(){}get(){}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var W_=(()=>{class n{defaultConsoleService;settingsService;constructor(e,t){this.defaultConsoleService=e,this.settingsService=t}get command(){let e=this.settingsService.getConsoleSettings();return e===void 0?this.defaultConsoleService.get():e}set command(e){this.settingsService.setConsoleSettings(e)}static \u0275fac=function(t){return new(t||n)(_e($2),_e(sr))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var H2=(()=>{class n{consoleForm=new Qo({command:new Ge("")});router=f(Ft);consoleService=f(W_);toasterService=f(re);ngOnInit(){this.consoleForm.get("command").setValue(this.consoleService.command)}goBack(){this.router.navigate(["/settings"])}save(){let e=this.consoleForm.value;this.consoleService.command=e.command,this.toasterService.success("Console command has been updated."),this.goBack()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-console"]],decls:30,vars:1,consts:[[1,"content"],[1,"default-header"],[1,"row"],[1,"col"],[1,"default-content"],[3,"formGroup"],[1,"form-field","full-width-field"],["matInput","","formControlName","command","placeholder","Command"],[1,"help"],[1,"buttons-bar"],["mat-button","",1,"cancel-button",3,"click"],["mat-raised-button","","color","primary",3,"click"]],template:function(t,i){t&1&&(r(0,"div",0)(1,"div",1)(2,"div",2)(3,"h1",3),c(4,"Console settings"),l()()(),r(5,"div",4)(6,"mat-card")(7,"form",5)(8,"mat-form-field",6),L(9,"textarea",7),l(),r(10,"div",8),c(11," The following variables are replaced by GNS3:"),L(12,"br"),c(13," %h: console IP or hostname"),L(14,"br"),c(15," %p: console port"),L(16,"br"),c(17," %s: path of the serial connection"),L(18,"br"),c(19," %d: title of the console"),L(20,"br"),c(21," %i: Project UUID"),L(22,"br"),c(23," %c: controller URL (http://user:password@controller:port) "),l()()(),r(24,"div",9)(25,"button",10),_("click",function(){return i.goBack()}),c(26,"Cancel"),l(),r(27,"button",11),_("click",function(){return i.save()}),c(28,"Save"),l(),L(29,"br"),l()()()),t&2&&(m(7),v("formGroup",i.consoleForm))},dependencies:[It,Ct,At,Nt,vt,Ut,Yt,Y,he,hn,Zn,we,Pe,ye,Ee],styles:[".help[_ngcontent-%COMP%]{font-size:14px}"],changeDetection:0})}return n})();var U2=(()=>{class n{httpClient;constructor(e){this.httpClient=e}getLatestVersion(){return this.httpClient.get("http://update.gns3.net/")}static \u0275fac=function(t){return new(t||n)(_e(us))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var G_=(()=>{class n{storageKey="gns3_interface_density";static DENSITY_ATTR="data-density";constructor(){this.applyToDocument(this.getDensity())}getDensity(){let e=this.readStorage();return e==="normal"||e==="compact"?e:"normal"}setDensity(e){this.writeStorage(e),this.applyToDocument(e)}readStorage(){try{return localStorage.getItem(this.storageKey)}catch{return null}}writeStorage(e){try{localStorage.setItem(this.storageKey,e)}catch{}}applyToDocument(e){try{let t=globalThis.document;t?.documentElement&&t.documentElement.setAttribute(n.DENSITY_ATTR,e)}catch{}}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var c8e=(n,o)=>o.id,L$=(n,o)=>o.key,d8e=(n,o)=>o.value;function m8e(n,o){if(n&1){let e=R();r(0,"button",17),_("click",function(){let i=y(e).$implicit,a=h();return w(a.selectCategory(i.id))}),r(1,"mat-icon"),c(2),l(),r(3,"span"),c(4),l()()}if(n&2){let e=o.$implicit,t=h();ne("settings__category--active",t.activeCategory()===e.id),Ce("aria-current",t.activeCategory()===e.id?"page":null),m(2),N(e.icon),m(2),N(e.label)}}function p8e(n,o){if(n&1){let e=R();r(0,"section",7)(1,"div",18)(2,"h2",19),c(3,"General"),l()(),r(4,"div",20)(5,"div",21)(6,"div",22)(7,"h3"),c(8,"Open project README automatically"),l(),r(9,"p"),c(10,"Show the project README when opening a project that contains one."),l()(),r(11,"mat-slide-toggle",23),_("change",function(i){y(e);let a=h();return w(a.setOpenReadme(i.checked))}),l()()()()}if(n&2){let e=h();m(11),v("checked",e.openReadme())}}function u8e(n,o){n&1&&(r(0,"mat-icon",29),c(1,"check_circle"),l())}function g8e(n,o){n&1&&(r(0,"mat-icon",29),c(1,"check_circle"),l())}function h8e(n,o){n&1&&(r(0,"mat-icon"),c(1,"check_circle"),l())}function _8e(n,o){if(n&1){let e=R();r(0,"button",33),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.setTheme(i.key))}),r(1,"span",34),L(2,"span",35),r(3,"span",36),L(4,"span")(5,"span")(6,"span"),l()(),r(7,"span",37)(8,"span")(9,"strong"),c(10),l(),r(11,"small"),c(12),Et(13,"titlecase"),l()(),T(14,h8e,2,0,"mat-icon"),l()()}if(n&2){let e=o.$implicit,t=h(2);ne("settings__theme-tile--selected",t.currentTheme===e.key),Ce("aria-checked",t.currentTheme===e.key),m(),ne("settings__theme-preview--dark",e.type==="dark"),m(),Tt("background",e.primaryColor),m(2),Tt("background",e.primaryColor),m(6),N(e.label),m(2),N(gn(13,12,e.type)),m(2),E(t.currentTheme===e.key?14:-1)}}function f8e(n,o){n&1&&(r(0,"mat-icon"),c(1,"check_circle"),l())}function v8e(n,o){if(n&1){let e=R();r(0,"button",33),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.setMapTheme(i.key))}),r(1,"span",38),L(2,"span",39)(3,"span",40)(4,"span",41),l(),r(5,"span",37)(6,"span")(7,"strong"),c(8),l(),r(9,"small"),c(10),Et(11,"titlecase"),l()(),T(12,f8e,2,0,"mat-icon"),l()()}if(n&2){let e=o.$implicit,t=h(2);ne("settings__theme-tile--selected",t.mapTheme===e.key),Ce("aria-checked",t.mapTheme===e.key),m(),Tt("background",e.key==="auto"?null:e.background)("color",e.textColor),ne("settings__map-preview--auto",e.key==="auto"),m(7),N(e.label),m(2),N(e.key==="auto"?"Uses application theme":gn(11,12,e.type)),m(2),E(t.mapTheme===e.key?12:-1)}}function C8e(n,o){if(n&1){let e=R();r(0,"section",8)(1,"div",18)(2,"h2",24),c(3,"Appearance"),l()(),r(4,"div",25)(5,"div",26)(6,"h3"),c(7,"Interface density"),l(),r(8,"p"),c(9,"Choose the vertical spacing used by controls inside dialog boxes."),l()(),r(10,"div",27)(11,"button",28),_("click",function(){y(e);let i=h();return w(i.setInterfaceDensity("normal"))}),r(12,"mat-icon"),c(13,"density_medium"),l(),r(14,"span")(15,"strong"),c(16,"Normal"),l(),r(17,"small"),c(18,"Standard vertical spacing"),l()(),T(19,u8e,2,0,"mat-icon",29),l(),r(20,"button",28),_("click",function(){y(e);let i=h();return w(i.setInterfaceDensity("compact"))}),r(21,"mat-icon"),c(22,"density_small"),l(),r(23,"span")(24,"strong"),c(25,"Compact"),l(),r(26,"small"),c(27,"Reduced vertical spacing"),l()(),T(28,g8e,2,0,"mat-icon",29),l()()(),r(29,"div",25)(30,"div",26)(31,"h3"),c(32,"Application theme"),l(),r(33,"p"),c(34,"Controls application surfaces, navigation, text, and components."),l()(),r(35,"div",30),Q(36,_8e,15,14,"button",31,L$),l()(),r(38,"div",25)(39,"div",26)(40,"h3"),c(41,"Project canvas background"),l(),r(42,"p"),c(43,"Choose a background optimized for topology diagrams and labels."),l()(),r(44,"div",32),Q(45,v8e,13,14,"button",31,L$),l()()()}if(n&2){let e=h();m(11),ne("settings__density-option--selected",e.interfaceDensity()==="normal"),Ce("aria-checked",e.interfaceDensity()==="normal"),m(8),E(e.interfaceDensity()==="normal"?19:-1),m(),ne("settings__density-option--selected",e.interfaceDensity()==="compact"),Ce("aria-checked",e.interfaceDensity()==="compact"),m(8),E(e.interfaceDensity()==="compact"?28:-1),m(8),K(e.availableThemes),m(9),K(e.availableMapBackgrounds)}}function b8e(n,o){if(n&1&&(r(0,"mat-option",53),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function x8e(n,o){if(n&1&&(r(0,"mat-option",53),c(1),Et(2,"titlecase"),l()),n&2){let e=o.$implicit;v("value",e),m(),N(gn(2,2,e))}}function y8e(n,o){if(n&1&&(r(0,"mat-option",53),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function w8e(n,o){if(n&1&&(r(0,"mat-option",53),c(1),Et(2,"titlecase"),l()),n&2){let e=o.$implicit;v("value",e),m(),N(gn(2,2,e))}}function M8e(n,o){if(n&1&&(r(0,"mat-option",53),c(1),l()),n&2){let e=o.$implicit,t=o.$index;v("value",t),m(),N(e)}}function S8e(n,o){if(n&1&&(r(0,"mat-option",53),c(1),l()),n&2){let e=o.$implicit;v("value",e.value),m(),N(e.label)}}function k8e(n,o){if(n&1){let e=R();r(0,"section",9)(1,"div",18)(2,"h2",42),c(3,"Project workspace"),l()(),r(4,"div",20)(5,"div",21)(6,"div",22)(7,"h3"),c(8,"Integrate interface labels with links"),l(),r(9,"p"),c(10,"Keep interface labels visually attached to their corresponding links."),l()(),r(11,"mat-slide-toggle",43),_("change",function(i){y(e);let a=h();return w(a.setIntegrateLinkLabels(i.checked))}),l()(),r(12,"div",44)(13,"div",26)(14,"h3"),c(15,"Default topology size"),l(),r(16,"p"),c(17,"Canvas dimensions applied to new projects (in pixels)."),l()(),r(18,"div",45)(19,"mat-form-field",46)(20,"mat-label"),c(21,"Width"),l(),r(22,"input",47),_("input",function(i){y(e);let a=h();return w(a.setDefaultSceneWidth(+i.target.value))}),l(),r(23,"span",48),c(24,"px"),l()(),r(25,"mat-form-field",46)(26,"mat-label"),c(27,"Height"),l(),r(28,"input",47),_("input",function(i){y(e);let a=h();return w(a.setDefaultSceneHeight(+i.target.value))}),l(),r(29,"span",48),c(30,"px"),l()()()(),r(31,"div",44)(32,"div",26)(33,"h3"),c(34,"Default node and drawing grid size"),l(),r(35,"p"),c(36," Grid spacing in pixels \u2014 "),r(37,"strong"),c(38,"node grid"),l(),c(39," aligns nodes when snap is on, "),r(40,"strong"),c(41,"drawing grid"),l(),c(42," aligns drawings and shapes. These seed new projects. "),l()(),r(43,"div",45)(44,"mat-form-field",46)(45,"mat-label"),c(46,"Node grid size"),l(),r(47,"input",47),_("input",function(i){y(e);let a=h();return w(a.setDefaultGridSize(+i.target.value))}),l(),r(48,"span",48),c(49,"px"),l()(),r(50,"mat-form-field",46)(51,"mat-label"),c(52,"Drawing grid size"),l(),r(53,"input",47),_("input",function(i){y(e);let a=h();return w(a.setDefaultDrawingGridSize(+i.target.value))}),l(),r(54,"span",48),c(55,"px"),l()()()(),r(56,"div",49)(57,"div",22)(58,"h3"),c(59,"Default label style"),l(),r(60,"p"),c(61,"Font and color applied to labels when nodes are added."),l()(),r(62,"div",50)(63,"mat-form-field",51)(64,"mat-label"),c(65,"Font family"),l(),r(66,"mat-select",52),_("selectionChange",function(i){y(e);let a=h();return w(a.setDefaultLabelStyle({fontFamily:i.value}))}),Q(67,b8e,2,2,"mat-option",53,Oe),l()(),r(69,"mat-form-field",51)(70,"mat-label"),c(71,"Font size"),l(),r(72,"input",54),_("input",function(i){y(e);let a=h();return w(a.setDefaultLabelStyle({fontSize:+i.target.value}))}),l(),r(73,"span",48),c(74,"pt"),l()(),r(75,"mat-form-field",51)(76,"mat-label"),c(77,"Font weight"),l(),r(78,"mat-select",52),_("selectionChange",function(i){y(e);let a=h();return w(a.setDefaultLabelStyle({fontWeight:i.value}))}),Q(79,x8e,3,4,"mat-option",53,Oe),l()(),r(81,"label",55)(82,"span"),c(83,"Color"),l(),r(84,"input",56),_("input",function(i){y(e);let a=h();return w(a.setDefaultLabelStyle({color:i.target.value}))}),l(),r(85,"code"),c(86),l()()()(),r(87,"div",49)(88,"div",22)(89,"h3"),c(90,"Default note style"),l(),r(91,"p"),c(92,"Font and color applied to new text notes on the canvas."),l()(),r(93,"div",50)(94,"mat-form-field",51)(95,"mat-label"),c(96,"Font family"),l(),r(97,"mat-select",52),_("selectionChange",function(i){y(e);let a=h();return w(a.setDefaultNoteStyle({fontFamily:i.value}))}),Q(98,y8e,2,2,"mat-option",53,Oe),l()(),r(100,"mat-form-field",51)(101,"mat-label"),c(102,"Font size"),l(),r(103,"input",54),_("input",function(i){y(e);let a=h();return w(a.setDefaultNoteStyle({fontSize:+i.target.value}))}),l(),r(104,"span",48),c(105,"pt"),l()(),r(106,"mat-form-field",51)(107,"mat-label"),c(108,"Font weight"),l(),r(109,"mat-select",52),_("selectionChange",function(i){y(e);let a=h();return w(a.setDefaultNoteStyle({fontWeight:i.value}))}),Q(110,w8e,3,4,"mat-option",53,Oe),l()(),r(112,"label",55)(113,"span"),c(114,"Color"),l(),r(115,"input",57),_("input",function(i){y(e);let a=h();return w(a.setDefaultNoteStyle({color:i.target.value}))}),l(),r(116,"code"),c(117),l()()()(),r(118,"div",49)(119,"div",22)(120,"h3"),c(121,"Default link style"),l(),r(122,"p"),c(123,"Color, width, line pattern, and routing style applied to newly created links."),l()(),r(124,"div",58)(125,"label",55)(126,"span"),c(127,"Color"),l(),r(128,"input",59),_("input",function(i){y(e);let a=h();return w(a.setDefaultLinkStyle({color:i.target.value}))}),l(),r(129,"code"),c(130),l()(),r(131,"mat-form-field",51)(132,"mat-label"),c(133,"Width"),l(),r(134,"input",60),_("input",function(i){y(e);let a=h();return w(a.setDefaultLinkStyle({width:+i.target.value}))}),l(),r(135,"span",48),c(136,"px"),l()(),r(137,"mat-form-field",51)(138,"mat-label"),c(139,"Line style"),l(),r(140,"mat-select",52),_("selectionChange",function(i){y(e);let a=h();return w(a.setDefaultLinkStyle({type:i.value}))}),Q(141,M8e,2,2,"mat-option",53,Oe),l()(),r(143,"mat-form-field",51)(144,"mat-label"),c(145,"Link style"),l(),r(146,"mat-select",52),_("selectionChange",function(i){y(e);let a=h();return w(a.setDefaultLinkStyle({link_type:i.value}))}),Q(147,S8e,2,2,"mat-option",53,d8e),l()()()(),r(149,"div",21)(150,"div",22)(151,"h3"),c(152,"Show grid on new projects"),l(),r(153,"p"),c(154,"Display the grid pattern on the canvas when a project is created."),l()(),r(155,"mat-slide-toggle",61),_("change",function(i){y(e);let a=h();return w(a.setDefaultShowGrid(i.checked))}),l()(),r(156,"div",21)(157,"div",22)(158,"h3"),c(159,"Snap to grid on new projects"),l(),r(160,"p"),c(161,"Align dragged nodes to the nearest grid intersection when a project is created."),l()(),r(162,"mat-slide-toggle",62),_("change",function(i){y(e);let a=h();return w(a.setDefaultSnapToGrid(i.checked))}),l()()()()}if(n&2){let e=h();m(11),v("checked",e.integrateLinksLabelsToLinks()),m(11),v("value",e.defaultSceneWidth()),m(6),v("value",e.defaultSceneHeight()),m(19),v("value",e.defaultGridSize()),m(6),v("value",e.defaultDrawingGridSize()),m(13),v("value",e.defaultLabelStyle().fontFamily),m(),K(e.fontFamilies),m(5),v("value",e.defaultLabelStyle().fontSize),m(6),v("value",e.defaultLabelStyle().fontWeight),m(),K(e.fontWeights),m(5),v("value",e.defaultLabelStyle().color),m(2),N(e.defaultLabelStyle().color),m(11),v("value",e.defaultNoteStyle().fontFamily),m(),K(e.fontFamilies),m(5),v("value",e.defaultNoteStyle().fontSize),m(6),v("value",e.defaultNoteStyle().fontWeight),m(),K(e.fontWeights),m(5),v("value",e.defaultNoteStyle().color),m(2),N(e.defaultNoteStyle().color),m(11),v("value",e.defaultLinkStyle().color),m(2),N(e.defaultLinkStyle().color),m(4),v("value",e.defaultLinkStyle().width),m(6),v("value",e.defaultLinkStyle().type),m(),K(e.linkStyleNames),m(5),v("value",e.defaultLinkStyle().link_type),m(),K(e.linkTypes),m(8),v("checked",e.defaultShowGrid()),m(7),v("checked",e.defaultSnapToGrid())}}function P8e(n,o){if(n&1){let e=R();r(0,"section",10)(1,"div",18)(2,"h2",63),c(3,"Console"),l()(),r(4,"div",20)(5,"div",21)(6,"div",22)(7,"h3"),c(8,"Open consoles inside the workspace"),l(),r(9,"p"),c(10,"Use the built-in console widget instead of opening a new browser tab."),l()(),r(11,"mat-slide-toggle",64),_("change",function(i){y(e);let a=h();return w(a.setOpenConsolesInWidget(i.checked))}),l()(),r(12,"div",44)(13,"div",22)(14,"h3"),c(15,"External console command"),l(),r(16,"p"),c(17,"Set the command used when launching an external console."),l()(),r(18,"mat-form-field",65)(19,"mat-label"),c(20,"Console command"),l(),r(21,"textarea",66),_("input",function(i){y(e);let a=h();return w(a.setConsoleCommand(i.target.value))}),l()(),r(22,"div",67)(23,"code"),c(24,"%h"),l(),c(25," host "),r(26,"code"),c(27,"%p"),l(),c(28," port "),r(29,"code"),c(30,"%s"),l(),c(31," serial path "),r(32,"code"),c(33,"%d"),l(),c(34," title "),r(35,"code"),c(36,"%i"),l(),c(37," project UUID "),r(38,"code"),c(39,"%c"),l(),c(40," controller URL "),l()()()()}if(n&2){let e=h();m(11),v("checked",e.openConsolesInWidget()),m(10),v("value",e.consoleCommand())}}function T8e(n,o){if(n&1){let e=R();r(0,"section",11)(1,"div",18)(2,"h2",68),c(3,"Privacy and diagnostics"),l()(),r(4,"div",20)(5,"div",21)(6,"div",22)(7,"h3"),c(8,"Anonymous crash reports"),l(),r(9,"p"),c(10,"Send diagnostic data after a crash without including personal information."),l()(),r(11,"mat-slide-toggle",69),_("change",function(i){y(e);let a=h();return w(a.setCrashReports(i.checked))}),l()(),r(12,"div",21)(13,"div",22)(14,"h3"),c(15,"Anonymous usage statistics"),l(),r(16,"p"),c(17,"Share aggregate feature usage to help prioritize improvements."),l()(),r(18,"mat-slide-toggle",70),_("change",function(i){y(e);let a=h();return w(a.setAnonymousStatistics(i.checked))}),l()()()()}if(n&2){let e=h();m(11),v("checked",e.crashReports()),m(7),v("checked",e.anonymousStatistics())}}function E8e(n,o){if(n&1){let e=R();r(0,"section",12)(1,"div",18)(2,"h2",71),c(3,"Updates"),l()(),r(4,"div",72)(5,"div")(6,"mat-icon"),c(7,"system_update"),l(),r(8,"div")(9,"h3"),c(10,"GNS3 application updates"),l(),r(11,"p"),c(12,"Compare your installed version with the latest available release."),l()()(),r(13,"button",73),_("click",function(){y(e);let i=h();return w(i.checkForUpdates())}),c(14,"Check for updates"),l()()()}}function O8e(n,o){n&1&&(L(0,"mat-spinner",76),r(1,"span"),c(2,"Reloading\u2026"),l())}function D8e(n,o){n&1&&(r(0,"span"),c(1,"Reload skills"),l())}function I8e(n,o){if(n&1){let e=R();r(0,"section",13)(1,"div",18)(2,"h2",74),c(3,"AI"),l()(),r(4,"div",72)(5,"div")(6,"mat-icon"),c(7,"auto_awesome"),l(),r(8,"div")(9,"h3"),c(10,"AI skills"),l(),r(11,"p"),c(12,"Reload the latest available skills from the connected controller."),l()()(),r(13,"button",75),_("click",function(){y(e);let i=h();return w(i.checkForAiSkillsUpdates())}),T(14,O8e,3,0)(15,D8e,2,0,"span"),l()()()}if(n&2){let e=h();m(13),v("disabled",e.isLoadingAiSkills())("matTooltip",e.isLoadingAiSkills()?"Updating AI skills\u2026":""),m(),E(e.isLoadingAiSkills()?14:15)}}function A8e(n,o){n&1&&(r(0,"span",15),c(1,"Unsaved changes"),l())}var W2=(()=>{class n{settingsService=f(sr);consoleService=f(W_);toaster=f(re);themeService=f(Ni);mapSettingsService=f(ui);updatesService=f(U2);cdr=f(oe);route=f($t);controllerService=f(_t);aiChatService=f(hg);interfaceDensityService=f(G_);settings;integrateLinksLabelsToLinks=$(!1);openReadme=$(!1);openConsolesInWidget=$(!1);crashReports=$(!1);anonymousStatistics=$(!1);consoleCommand=$("");isLoadingAiSkills=z(!1);isDirty=z(!1);activeCategory=z("general");interfaceDensity=z("normal");defaultSceneWidth=$(2e3);defaultSceneHeight=$(1e3);defaultGridSize=$(75);defaultDrawingGridSize=$(25);defaultShowGrid=$(!1);defaultSnapToGrid=$(!1);defaultLabelStyle=$(this.mapSettingsService.getDefaultLabelStyle());defaultNoteStyle=$(this.mapSettingsService.getDefaultNoteStyle());defaultLinkStyle=$(this.mapSettingsService.getDefaultLinkStyle());fontFamilies=ui.FONT_FAMILIES;fontWeights=ui.FONT_WEIGHTS;linkStyleNames=ui.LINK_STYLE_NAMES;linkTypes=ui.LINK_TYPES;categories=[{id:"general",label:"General",icon:"tune"},{id:"appearance",label:"Appearance",icon:"palette"},{id:"workspace",label:"Project workspace",icon:"account_tree"},{id:"console",label:"Console",icon:"terminal"},{id:"privacy",label:"Privacy and diagnostics",icon:"shield"},{id:"updates",label:"Updates",icon:"system_update"},{id:"ai",label:"AI",icon:"auto_awesome"}];dirtyFields=new Set;mapTheme;currentTheme;availableThemes=this.themeService.availableThemes;availableMapBackgrounds=this.themeService.availableMapBackgrounds;get lightThemes(){return this.themeService.availableThemes.filter(e=>e.type==="light")}get darkThemes(){return this.themeService.availableThemes.filter(e=>e.type==="dark")}get lightMapBackgrounds(){return this.themeService.availableMapBackgrounds.filter(e=>e.type==="light"&&e.key!=="auto")}get darkMapBackgrounds(){return this.themeService.availableMapBackgrounds.filter(e=>e.type==="dark")}get autoMapBackground(){return this.themeService.availableMapBackgrounds.find(e=>e.key==="auto")}ngOnInit(){this.settings=this.settingsService.getAll(),this.integrateLinksLabelsToLinks.set(this.mapSettingsService.integrateLinkLabelsToLinks),this.openReadme.set(this.mapSettingsService.openReadme),this.openConsolesInWidget.set(this.mapSettingsService.openConsolesInWidget),this.crashReports.set(this.settings.crash_reports),this.anonymousStatistics.set(this.settings.anonymous_statistics),this.consoleCommand.set(this.consoleService.command),this.mapTheme=this.themeService.savedMapTheme,this.currentTheme=this.themeService.getCurrentTheme(),this.interfaceDensity.set(this.interfaceDensityService.getDensity()),this.defaultSceneWidth.set(this.mapSettingsService.getDefaultSceneWidth()),this.defaultSceneHeight.set(this.mapSettingsService.getDefaultSceneHeight()),this.defaultGridSize.set(this.mapSettingsService.getDefaultGridSize()),this.defaultDrawingGridSize.set(this.mapSettingsService.getDefaultDrawingGridSize()),this.defaultShowGrid.set(this.mapSettingsService.getDefaultShowGrid()),this.defaultSnapToGrid.set(this.mapSettingsService.getDefaultSnapToGrid()),this.cdr.markForCheck()}selectCategory(e){this.activeCategory.set(e)}setCrashReports(e){this.crashReports()!==e&&(this.crashReports.set(e),this.markDirty("crashReports"))}setAnonymousStatistics(e){this.anonymousStatistics()!==e&&(this.anonymousStatistics.set(e),this.markDirty("anonymousStatistics"))}setIntegrateLinkLabels(e){this.integrateLinksLabelsToLinks()!==e&&(this.integrateLinksLabelsToLinks.set(e),this.markDirty("integrateLinkLabels"))}setOpenReadme(e){this.openReadme()!==e&&(this.openReadme.set(e),this.markDirty("openReadme"))}setOpenConsolesInWidget(e){this.openConsolesInWidget()!==e&&(this.openConsolesInWidget.set(e),this.markDirty("openConsolesInWidget"))}setConsoleCommand(e){this.consoleCommand()!==e&&(this.consoleCommand.set(e),this.markDirty("consoleCommand"))}setTheme(e){this.currentTheme!==e&&(this.currentTheme=e,this.markDirty("theme"),this.cdr.markForCheck())}setMapTheme(e){this.mapTheme!==e&&(this.mapTheme=e,this.markDirty("mapTheme"),this.cdr.markForCheck())}setInterfaceDensity(e){this.interfaceDensity()!==e&&(this.interfaceDensity.set(e),this.markDirty("interfaceDensity"))}setDefaultSceneWidth(e){let t=Number.isFinite(e)?Math.max(0,Math.round(e)):0;this.defaultSceneWidth()!==t&&(this.defaultSceneWidth.set(t),this.markDirty("defaultSceneWidth"))}setDefaultSceneHeight(e){let t=Number.isFinite(e)?Math.max(0,Math.round(e)):0;this.defaultSceneHeight()!==t&&(this.defaultSceneHeight.set(t),this.markDirty("defaultSceneHeight"))}setDefaultGridSize(e){let t=Number.isFinite(e)?Math.max(0,Math.round(e)):0;this.defaultGridSize()!==t&&(this.defaultGridSize.set(t),this.markDirty("defaultGridSize"))}setDefaultDrawingGridSize(e){let t=Number.isFinite(e)?Math.max(0,Math.round(e)):0;this.defaultDrawingGridSize()!==t&&(this.defaultDrawingGridSize.set(t),this.markDirty("defaultDrawingGridSize"))}setDefaultShowGrid(e){this.defaultShowGrid()!==e&&(this.defaultShowGrid.set(e),this.markDirty("defaultShowGrid"))}setDefaultSnapToGrid(e){this.defaultSnapToGrid()!==e&&(this.defaultSnapToGrid.set(e),this.markDirty("defaultSnapToGrid"))}setDefaultLabelStyle(e){let t=this.defaultLabelStyle(),i=this.mergeTextStyle(t,e);this.stylesEqual(t,i)||(this.defaultLabelStyle.set(i),this.markDirty("defaultLabelStyle"))}setDefaultNoteStyle(e){let t=this.defaultNoteStyle(),i=this.mergeTextStyle(t,e);this.stylesEqual(t,i)||(this.defaultNoteStyle.set(i),this.markDirty("defaultNoteStyle"))}setDefaultLinkStyle(e){let t=this.defaultLinkStyle(),i=e.width!==void 0&&Number.isFinite(e.width)?Math.min(20,Math.max(1,Math.round(e.width))):t.width,a=ze(q(q({},t),e),{width:i});this.stylesEqual(t,a)||(this.defaultLinkStyle.set(a),this.markDirty("defaultLinkStyle"))}mergeTextStyle(e,t){let i=t.fontSize!==void 0&&Number.isFinite(t.fontSize)?Math.min(200,Math.max(1,Math.round(t.fontSize*2)/2)):e.fontSize;return ze(q(q({},e),t),{fontSize:i})}stylesEqual(e,t){return Object.keys(e).every(i=>e[i]===t[i])}saveSettings(){this.settings=ze(q({},this.settings),{crash_reports:this.crashReports(),anonymous_statistics:this.anonymousStatistics(),console_command:this.consoleCommand()}),(this.dirtyFields.has("crashReports")||this.dirtyFields.has("anonymousStatistics")||this.dirtyFields.has("consoleCommand"))&&this.settingsService.setAll(this.settings),this.dirtyFields.has("consoleCommand")&&(this.consoleService.command=this.consoleCommand()),this.dirtyFields.has("integrateLinkLabels")&&this.mapSettingsService.toggleIntegrateInterfaceLabels(this.integrateLinksLabelsToLinks()),this.dirtyFields.has("openReadme")&&this.mapSettingsService.toggleOpenReadme(this.openReadme()),this.dirtyFields.has("openConsolesInWidget")&&this.mapSettingsService.toggleOpenConsolesInWidget(this.openConsolesInWidget()),this.dirtyFields.has("theme")&&this.themeService.setTheme(this.currentTheme),this.dirtyFields.has("mapTheme")&&this.themeService.setMapTheme(this.mapTheme),this.dirtyFields.has("interfaceDensity")&&this.interfaceDensityService.setDensity(this.interfaceDensity()),this.dirtyFields.has("defaultSceneWidth")&&this.mapSettingsService.setDefaultSceneWidth(this.defaultSceneWidth()),this.dirtyFields.has("defaultSceneHeight")&&this.mapSettingsService.setDefaultSceneHeight(this.defaultSceneHeight()),this.dirtyFields.has("defaultGridSize")&&this.mapSettingsService.setDefaultGridSize(this.defaultGridSize()),this.dirtyFields.has("defaultDrawingGridSize")&&this.mapSettingsService.setDefaultDrawingGridSize(this.defaultDrawingGridSize()),this.dirtyFields.has("defaultShowGrid")&&this.mapSettingsService.setDefaultShowGrid(this.defaultShowGrid()),this.dirtyFields.has("defaultSnapToGrid")&&this.mapSettingsService.setDefaultSnapToGrid(this.defaultSnapToGrid()),this.dirtyFields.has("defaultLabelStyle")&&this.mapSettingsService.setDefaultLabelStyle(this.defaultLabelStyle()),this.dirtyFields.has("defaultNoteStyle")&&this.mapSettingsService.setDefaultNoteStyle(this.defaultNoteStyle()),this.dirtyFields.has("defaultLinkStyle")&&this.mapSettingsService.setDefaultLinkStyle(this.defaultLinkStyle()),this.dirtyFields.clear(),this.isDirty.set(!1),this.toaster.success("Settings saved")}markDirty(e){this.dirtyFields.add(e),this.isDirty.set(!0)}onBeforeUnload(e){this.isDirty()&&(e.preventDefault(),e.returnValue="")}checkForUpdates(){window.open("https://gns3.com/software")}checkForAiSkillsUpdates(){let e=this.route.snapshot.paramMap.get("controller_id");if(!e){this.toaster.error("Controller not found");return}this.isLoadingAiSkills.set(!0),this.controllerService.get(+e).then(t=>{this.aiChatService.reloadSkills(t).subscribe({next:()=>{this.toaster.success("AI skills reloaded successfully"),this.isLoadingAiSkills.set(!1)},error:i=>{let a=i?.error?.message||i?.message||"Failed to reload AI skills";this.toaster.error(a),this.isLoadingAiSkills.set(!1)}})})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-settings"]],hostBindings:function(t,i){t&1&&_("beforeunload",function(s){return i.onBeforeUnload(s)},So)},inputs:{integrateLinksLabelsToLinks:[1,"integrateLinksLabelsToLinks"],openReadme:[1,"openReadme"],openConsolesInWidget:[1,"openConsolesInWidget"],crashReports:[1,"crashReports"],anonymousStatistics:[1,"anonymousStatistics"],consoleCommand:[1,"consoleCommand"],defaultSceneWidth:[1,"defaultSceneWidth"],defaultSceneHeight:[1,"defaultSceneHeight"],defaultGridSize:[1,"defaultGridSize"],defaultDrawingGridSize:[1,"defaultDrawingGridSize"],defaultShowGrid:[1,"defaultShowGrid"],defaultSnapToGrid:[1,"defaultSnapToGrid"],defaultLabelStyle:[1,"defaultLabelStyle"],defaultNoteStyle:[1,"defaultNoteStyle"],defaultLinkStyle:[1,"defaultLinkStyle"]},outputs:{integrateLinksLabelsToLinks:"integrateLinksLabelsToLinksChange",openReadme:"openReadmeChange",openConsolesInWidget:"openConsolesInWidgetChange",crashReports:"crashReportsChange",anonymousStatistics:"anonymousStatisticsChange",consoleCommand:"consoleCommandChange",defaultSceneWidth:"defaultSceneWidthChange",defaultSceneHeight:"defaultSceneHeightChange",defaultGridSize:"defaultGridSizeChange",defaultDrawingGridSize:"defaultDrawingGridSizeChange",defaultShowGrid:"defaultShowGridChange",defaultSnapToGrid:"defaultSnapToGridChange",defaultLabelStyle:"defaultLabelStyleChange",defaultNoteStyle:"defaultNoteStyleChange",defaultLinkStyle:"defaultLinkStyleChange"},decls:23,vars:3,consts:[[1,"settings"],[1,"settings__header"],[1,"settings__title"],[1,"settings__layout"],["aria-label","Web settings categories",1,"settings__categories"],["type","button",1,"settings__category",3,"settings__category--active"],[1,"settings__content"],["aria-labelledby","general-settings-title",1,"settings__panel"],["aria-labelledby","appearance-settings-title",1,"settings__panel"],["aria-labelledby","workspace-settings-title",1,"settings__panel"],["aria-labelledby","console-settings-title",1,"settings__panel"],["aria-labelledby","privacy-settings-title",1,"settings__panel"],["aria-labelledby","update-settings-title",1,"settings__panel"],["aria-labelledby","ai-settings-title",1,"settings__panel"],[1,"settings__footer"],["role","status",1,"settings__unsaved-status"],["mat-flat-button","","color","primary","type","button",3,"click","disabled"],["type","button",1,"settings__category",3,"click"],[1,"settings__panel-header"],["id","general-settings-title"],[1,"settings__setting-list"],[1,"settings__setting-row"],[1,"settings__setting-copy"],["aria-label","Open project README automatically",3,"change","checked"],["id","appearance-settings-title"],[1,"settings__theme-section"],[1,"settings__section-heading"],["role","radiogroup","aria-label","Interface density",1,"settings__density-options"],["type","button","role","radio",1,"settings__density-option",3,"click"],[1,"settings__density-check"],["role","radiogroup","aria-label","Application theme",1,"settings__theme-grid"],["type","button","role","radio",1,"settings__theme-tile",3,"settings__theme-tile--selected"],["role","radiogroup","aria-label","Project canvas background",1,"settings__theme-grid","settings__theme-grid--map"],["type","button","role","radio",1,"settings__theme-tile",3,"click"],[1,"settings__theme-preview"],[1,"settings__theme-preview-bar"],[1,"settings__theme-preview-body"],[1,"settings__tile-label"],[1,"settings__map-preview"],[1,"settings__map-node"],[1,"settings__map-link"],[1,"settings__map-node","settings__map-node--right"],["id","workspace-settings-title"],["aria-label","Integrate interface labels with links",3,"change","checked"],[1,"settings__setting-row","settings__setting-row--stacked"],[1,"settings__inline-fields"],["appearance","outline","subscriptSizing","dynamic",1,"settings__inline-field"],["matInput","","type","number","min","0","step","1","inputmode","numeric",3,"input","value"],["matSuffix",""],[1,"settings__setting-row","settings__setting-row--style"],[1,"settings__style-fields","settings__style-fields--text"],["appearance","outline"],[3,"selectionChange","value"],[3,"value"],["matInput","","type","number","min","1","max","200","step","0.5",3,"input","value"],[1,"settings__color-field"],["type","color","aria-label","Default label color",3,"input","value"],["type","color","aria-label","Default note color",3,"input","value"],[1,"settings__style-fields","settings__style-fields--link"],["type","color","aria-label","Default link color",3,"input","value"],["matInput","","type","number","min","1","max","20","step","1",3,"input","value"],["aria-label","Show grid on new projects",3,"change","checked"],["aria-label","Snap to grid on new projects",3,"change","checked"],["id","console-settings-title"],["aria-label","Open consoles inside the workspace",3,"change","checked"],["appearance","outline",1,"settings__console-field"],["matInput","","rows","3",3,"input","value"],[1,"settings__variables"],["id","privacy-settings-title"],["aria-label","Send anonymous crash reports",3,"change","checked"],["aria-label","Send anonymous usage statistics",3,"change","checked"],["id","update-settings-title"],[1,"settings__action-card"],["mat-raised-button","","color","primary",3,"click"],["id","ai-settings-title"],["mat-raised-button","","color","primary",3,"click","disabled","matTooltip"],["diameter","18"]],template:function(t,i){if(t&1&&(r(0,"div",0)(1,"header",1)(2,"div")(3,"h1",2),c(4,"Web settings"),l()()(),r(5,"div",3)(6,"nav",4),Q(7,m8e,5,5,"button",5,c8e),l(),r(9,"main",6),T(10,p8e,12,1,"section",7)(11,C8e,47,8,"section",8)(12,k8e,163,22,"section",9)(13,P8e,41,2,"section",10)(14,T8e,19,2,"section",11)(15,E8e,15,0,"section",12)(16,I8e,16,3,"section",13),l()(),r(17,"footer",14),T(18,A8e,2,0,"span",15),r(19,"button",16),_("click",function(){return i.saveSettings()}),r(20,"mat-icon"),c(21,"save"),l(),c(22," Save Settings "),l()()()),t&2){let a;m(7),K(i.categories),m(3),E((a=i.activeCategory())==="general"?10:a==="appearance"?11:a==="workspace"?12:a==="console"?13:a==="privacy"?14:a==="updates"?15:a==="ai"?16:-1),m(8),E(i.isDirty()?18:-1),m(),v("disabled",!i.isDirty())}},dependencies:[fe,Y,he,ie,ce,mc,Yc,rt,mt,st,pt,we,Pe,Ve,oi,ye,Ee,ot,ct,nt,Ho,og],styles:["[_nghost-%COMP%]{display:block;width:100%;background:transparent}.settings__header[_ngcontent-%COMP%]{width:100%;max-width:1600px;margin:0 auto;padding:var(--gns3-density-space-6) var(--gns3-density-page-padding) var(--gns3-density-space-4);box-sizing:border-box;animation:none}.settings__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.settings__layout[_ngcontent-%COMP%]{width:100%;max-width:1600px;margin:0 auto;padding:0 var(--gns3-density-page-padding) var(--gns3-density-space-6);box-sizing:border-box;animation:none;display:grid;grid-template-columns:228px minmax(0,1fr);gap:var(--gns3-density-card-gap);align-items:start}.settings__footer[_ngcontent-%COMP%]{width:100%;max-width:1600px;margin:0 auto;padding:0 var(--gns3-density-page-padding) var(--gns3-density-space-6);box-sizing:border-box;display:flex;align-items:center;justify-content:flex-end;gap:var(--gns3-density-space-3)}.settings__footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{min-height:var(--gns3-density-control-height)}.settings__unsaved-status[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:13px}.settings__categories[_ngcontent-%COMP%]{position:sticky;top:var(--gns3-density-app-header-height);padding:var(--gns3-density-space-2);display:flex;flex-direction:column;gap:var(--gns3-density-space-1);background:var(--mat-sys-surface-container);border:1px solid var(--mat-sys-outline-variant);border-radius:var(--gns3-density-radius-lg)}.settings__category[_ngcontent-%COMP%]{width:100%;min-height:var(--gns3-density-control-height);padding:0 var(--gns3-density-space-3);display:flex;align-items:center;gap:var(--gns3-density-space-3);border:0;border-radius:var(--gns3-density-radius-sm);background:transparent;color:var(--mat-sys-on-surface-variant);font:inherit;font-size:16px;font-weight:600;cursor:pointer;text-align:left}.settings__category[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.settings__category[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:20px;height:20px;font-size:20px}.settings__category[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-on-surface) 6%,transparent);color:var(--mat-sys-on-surface)}.settings__category[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--mat-sys-primary);outline-offset:-2px}.settings__category--active[_ngcontent-%COMP%], .settings__category--active[_ngcontent-%COMP%]:hover{background:var(--mat-sys-secondary-container);color:var(--mat-sys-on-secondary-container)}.settings__content[_ngcontent-%COMP%]{min-width:0}.settings__panel[_ngcontent-%COMP%]{overflow:hidden;color:var(--mat-sys-on-surface);background:var(--mat-sys-surface);border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:var(--gns3-density-radius-xl);box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 16%,transparent)}.settings__panel-header[_ngcontent-%COMP%]{padding:var(--gns3-density-space-4) var(--gns3-density-page-padding);color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container);border-bottom:1px solid var(--mat-sys-outline-variant)}.settings__panel-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-size:calc(var(--gns3-density-section-title-size) + 2px);font-weight:650;line-height:1.2}.settings__setting-list[_ngcontent-%COMP%]{padding:0 var(--gns3-density-page-padding)}.settings__setting-row[_ngcontent-%COMP%]{min-height:calc(var(--gns3-density-control-height) + var(--gns3-density-space-4) + var(--gns3-density-space-4));padding:var(--gns3-density-space-4) 0;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;gap:var(--gns3-density-space-5);border-bottom:1px solid var(--mat-sys-outline-variant)}.settings__setting-row[_ngcontent-%COMP%]:last-child{border-bottom:0}.settings__setting-row--stacked[_ngcontent-%COMP%]{align-items:stretch;flex-direction:column;gap:var(--gns3-density-space-3)}.settings__setting-row--stacked[_ngcontent-%COMP%] .settings__section-heading[_ngcontent-%COMP%]{margin-bottom:0}.settings__setting-copy[_ngcontent-%COMP%] h3[_ngcontent-%COMP%], .settings__section-heading[_ngcontent-%COMP%] h3[_ngcontent-%COMP%], .settings__action-card[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 4px;font-size:16px;font-weight:600;line-height:1.2}.settings__setting-copy[_ngcontent-%COMP%] p[_ngcontent-%COMP%], .settings__section-heading[_ngcontent-%COMP%] p[_ngcontent-%COMP%], .settings__action-card[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface-variant);font-size:14px;line-height:1.5}.settings__setting-copy[_ngcontent-%COMP%]{max-width:620px}.settings__theme-section[_ngcontent-%COMP%]{padding:var(--gns3-density-space-5) var(--gns3-density-page-padding);border-bottom:1px solid var(--mat-sys-outline-variant)}.settings__theme-section[_ngcontent-%COMP%]:last-child{border-bottom:0}.settings__section-heading[_ngcontent-%COMP%]{margin-bottom:var(--gns3-density-space-3)}.settings__density-options[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(180px,1fr));gap:var(--gns3-density-space-3);width:100%}.settings__density-option[_ngcontent-%COMP%]{min-width:0;min-height:calc(var(--gns3-density-control-height) + var(--gns3-density-space-2) + var(--gns3-density-space-2));padding:var(--gns3-density-space-2) var(--gns3-density-space-3);box-sizing:border-box;display:flex;align-items:center;gap:var(--gns3-density-space-3);border:1px solid var(--mat-sys-outline-variant);border-radius:var(--gns3-density-radius-md);background:var(--mat-sys-surface-container-low);color:var(--mat-sys-on-surface);font:inherit;cursor:pointer;text-align:left}.settings__density-option[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{min-width:0;display:flex;flex:1;flex-direction:column;gap:2px}.settings__density-option[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-size:16px;font-weight:600}.settings__density-option[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:12px}.settings__density-option[_ngcontent-%COMP%]:hover{border-color:var(--mat-sys-outline);background:var(--mat-sys-surface-container)}.settings__density-option[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--mat-sys-primary);outline-offset:2px}.settings__density-option--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);background:var(--mat-sys-primary-container);color:var(--mat-sys-on-primary-container)}.settings__density-check[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.settings__theme-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(4,minmax(130px,1fr));gap:var(--gns3-density-space-3)}.settings__theme-grid--map[_ngcontent-%COMP%]{grid-template-columns:repeat(3,minmax(150px,1fr))}.settings__theme-tile[_ngcontent-%COMP%]{min-width:0;padding:var(--gns3-density-space-2);border:1px solid var(--mat-sys-outline-variant);border-radius:var(--gns3-density-radius-md);background:var(--mat-sys-surface-container-low);color:var(--mat-sys-on-surface);font:inherit;cursor:pointer;text-align:left;transition:border-color var(--gns3-motion-duration-standard) ease,background-color var(--gns3-motion-duration-standard) ease,box-shadow var(--gns3-motion-duration-standard) ease}.settings__theme-tile[_ngcontent-%COMP%]:hover{border-color:var(--mat-sys-outline);background:var(--mat-sys-surface-container)}.settings__theme-tile[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--mat-sys-primary);outline-offset:2px}.settings__theme-tile--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);background:var(--mat-sys-primary-container);box-shadow:0 0 0 1px var(--mat-sys-primary);color:var(--mat-sys-on-primary-container)}.settings__theme-preview[_ngcontent-%COMP%]{height:calc(var(--gns3-density-form-field-height) + var(--gns3-density-space-4));display:flex;flex-direction:column;overflow:hidden;background:var(--mat-sys-surface-container-lowest);border:1px solid color-mix(in srgb,var(--mat-sys-outline) 30%,transparent);border-radius:7px}.settings__theme-preview--dark[_ngcontent-%COMP%]{background:var(--mat-sys-surface-container-highest);border-color:color-mix(in srgb,var(--mat-sys-on-surface) 18%,transparent)}.settings__theme-preview--dark[_ngcontent-%COMP%] .settings__theme-preview-body[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:not(:first-child){background:var(--mat-sys-outline-variant)}.settings__theme-preview-bar[_ngcontent-%COMP%]{height:16px;flex-shrink:0}.settings__theme-preview-body[_ngcontent-%COMP%]{padding:var(--gns3-density-space-3);display:grid;grid-template-columns:22px 1fr;grid-template-rows:repeat(2,8px);gap:var(--gns3-density-space-2)}.settings__theme-preview-body[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{border-radius:3px}.settings__theme-preview-body[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:first-child{grid-row:1/span 2;opacity:.85}.settings__theme-preview-body[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:not(:first-child){background:var(--mat-sys-surface-container-high)}.settings__map-preview[_ngcontent-%COMP%]{position:relative;height:calc(var(--gns3-density-form-field-height) + var(--gns3-density-space-4));display:block;overflow:hidden;border:1px solid var(--mat-sys-outline-variant);border-radius:7px}.settings__map-preview--auto[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--mat-sys-surface) 0 50%,var(--mat-sys-inverse-surface) 50% 100%)}.settings__map-node[_ngcontent-%COMP%]{position:absolute;top:24px;left:24px;width:20px;height:20px;background:var(--mat-sys-primary-container);border:2px solid var(--mat-sys-primary);border-radius:5px;z-index:1}.settings__map-node--right[_ngcontent-%COMP%]{right:24px;left:auto}.settings__map-link[_ngcontent-%COMP%]{position:absolute;top:33px;right:37px;left:37px;height:3px;background:currentColor;opacity:.72}.settings__tile-label[_ngcontent-%COMP%]{min-height:var(--gns3-density-control-height-sm);padding:var(--gns3-density-space-2) var(--gns3-density-space-1) 0;display:flex;align-items:center;justify-content:space-between;gap:var(--gns3-density-space-2)}.settings__tile-label[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{min-width:0;display:flex;flex-direction:column}.settings__tile-label[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{overflow:hidden;font-size:14px;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.settings__tile-label[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:11px}.settings__tile-label[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:18px;height:18px;color:var(--mat-sys-primary);flex:0 0 18px;font-size:18px}.settings__console-field[_ngcontent-%COMP%]{width:100%}.settings__inline-fields[_ngcontent-%COMP%]{display:flex;gap:var(--gns3-density-card-gap);flex-wrap:wrap}.settings__inline-field[_ngcontent-%COMP%]{flex:1 1 180px;min-width:0}.settings__variables[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:var(--gns3-density-space-2) var(--gns3-density-space-3);color:var(--mat-sys-on-surface-variant);font-size:11px}.settings__variables[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{padding:1px 4px;background:var(--mat-sys-surface-container-high);border-radius:var(--gns3-density-radius-sm);color:var(--mat-sys-primary)}.settings__action-card[_ngcontent-%COMP%]{margin:var(--gns3-density-page-padding);padding:var(--gns3-density-space-4);display:flex;align-items:center;justify-content:space-between;gap:var(--gns3-density-space-5);background:var(--mat-sys-surface-container-low);border:1px solid var(--mat-sys-outline-variant);border-radius:var(--gns3-density-radius-lg)}.settings__action-card[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:var(--gns3-density-space-3)}.settings__action-card[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.settings__action-card[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex-shrink:0}.settings__action-card[_ngcontent-%COMP%] mat-spinner[_ngcontent-%COMP%]{display:inline-block;margin-right:6px}@media(max-width:960px){.settings__theme-grid[_ngcontent-%COMP%], .settings__theme-grid--map[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(140px,1fr))}}@media(max-width:720px){.settings__header[_ngcontent-%COMP%]{padding:var(--gns3-density-space-5) var(--gns3-density-page-padding) var(--gns3-density-space-3)}.settings__layout[_ngcontent-%COMP%]{padding:0 var(--gns3-density-page-padding) var(--gns3-density-space-5);grid-template-columns:minmax(0,1fr);gap:var(--gns3-density-space-3)}.settings__footer[_ngcontent-%COMP%]{padding:0 var(--gns3-density-page-padding) var(--gns3-density-space-5)}.settings__categories[_ngcontent-%COMP%]{position:static;padding:var(--gns3-density-space-1);flex-direction:row;overflow-x:auto;border-radius:var(--gns3-density-radius-md);scrollbar-width:thin}.settings__category[_ngcontent-%COMP%]{width:auto;min-width:max-content;min-height:var(--gns3-density-control-height)}.settings__panel-header[_ngcontent-%COMP%], .settings__theme-section[_ngcontent-%COMP%]{padding-right:var(--gns3-density-page-padding);padding-left:var(--gns3-density-page-padding)}.settings__setting-list[_ngcontent-%COMP%]{padding:0 var(--gns3-density-page-padding)}.settings__setting-row[_ngcontent-%COMP%]{gap:var(--gns3-density-space-4)}}@media(max-width:480px){.settings__theme-grid[_ngcontent-%COMP%], .settings__theme-grid--map[_ngcontent-%COMP%]{grid-template-columns:minmax(0,1fr)}.settings__action-card[_ngcontent-%COMP%]{margin:var(--gns3-density-page-padding);align-items:stretch;flex-direction:column}.settings__action-card[_ngcontent-%COMP%] button[_ngcontent-%COMP%], .settings__footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:100%}}"],changeDetection:0})}return n})();var V$="**********";var N8e=new Set(["Server.host","Server.port","Server.protocol","Server.enable_ssl","Server.certfile","Server.certkey","Server.secrets_dir","Server.images_path","Server.projects_path","Server.appliances_path","Server.symbols_path","Server.configs_path","Server.resources_path","Server.console_start_port_range","Server.console_end_port_range","Server.vnc_console_start_port_range","Server.vnc_console_end_port_range","Server.udp_start_port_range","Server.udp_end_port_range","Server.enable_builtin_templates","Server.install_builtin_appliances","Server.skills_repo_url","Server.skills_repo_branch","Server.skills_auto_update","Server.ubridge_path","Controller.default_admin_username","Controller.default_admin_password"]);function Xu(n,o,e,t){return{name:n,label:o,icon:e,groups:t.map(i=>ze(q({},i),{fields:i.fields.map(a=>ze(q({},a),{restartRequired:N8e.has(`${n}.${a.key}`)}))}))}}var yC=1,Dp=65535,H4=5900,wC=[Xu("Server","Server","dns",[{id:"general",label:"General",summary:"Identity and reporting",fields:[{key:"name",label:"Server name",type:"string"},{key:"local",label:"Local server",type:"boolean",width:"half",defaultValue:!1},{key:"report_errors",label:"Report errors",type:"boolean",width:"half",defaultValue:!0}]},{id:"network",label:"Network and security",summary:"Listener and connection security",fields:[{key:"protocol",label:"Protocol",type:"enum",width:"third",defaultValue:"http",options:[{value:"http",label:"HTTP"},{value:"https",label:"HTTPS"}]},{key:"host",label:"Listen host",type:"string",width:"third",defaultValue:"0.0.0.0"},{key:"port",label:"Listen port",type:"int",width:"third",defaultValue:3080,min:yC,max:Dp},{key:"enable_ssl",label:"Enable SSL",type:"boolean",width:"half",defaultValue:!1},{key:"enable_http_auth",label:"HTTP authentication",type:"boolean",width:"half",defaultValue:!0},{key:"certfile",label:"Certificate file",type:"string",width:"half",defaultValue:null},{key:"certkey",label:"Certificate key",type:"string",width:"half",defaultValue:null},{key:"secrets_dir",label:"Secrets directory",type:"string",width:"half",defaultValue:null}]},{id:"paths",label:"Paths",summary:"Images, projects and resources",fields:[{key:"images_path",label:"Images",type:"string",width:"half",defaultValue:"~/GNS3/images"},{key:"projects_path",label:"Projects",type:"string",width:"half",defaultValue:"~/GNS3/projects"},{key:"appliances_path",label:"Appliances",type:"string",width:"half",defaultValue:"~/GNS3/appliances"},{key:"symbols_path",label:"Symbols",type:"string",width:"half",defaultValue:"~/GNS3/symbols"},{key:"configs_path",label:"Configs",type:"string",width:"half",defaultValue:"~/GNS3/configs"},{key:"resources_path",label:"Resources",type:"string",width:"half",defaultValue:null},{key:"additional_images_paths",label:"Additional image paths",type:"list",defaultValue:[]}]},{id:"images",label:"Images",summary:"Discovery and additional search paths",fields:[{key:"allow_raw_images",label:"Allow raw images",type:"boolean",width:"half",defaultValue:!0},{key:"auto_discover_images",label:"Auto-discover images",type:"boolean",width:"half",defaultValue:!0}]},{id:"console",label:"Console and port ranges",summary:"Remote access and port ranges",fields:[{key:"allow_remote_console",label:"Allow remote consoles",type:"boolean",defaultValue:!1},{key:"console_start_port_range",label:"Console ports from",type:"int",width:"half",defaultValue:5e3,min:yC,max:Dp},{key:"console_end_port_range",label:"Console ports to",type:"int",width:"half",defaultValue:1e4,min:yC,max:Dp},{key:"vnc_console_start_port_range",label:"VNC console ports from",type:"int",width:"half",defaultValue:H4,min:H4,max:Dp},{key:"vnc_console_end_port_range",label:"VNC console ports to",type:"int",width:"half",defaultValue:1e4,min:H4,max:Dp},{key:"udp_start_port_range",label:"UDP ports from",type:"int",width:"half",defaultValue:1e4,min:yC,max:Dp},{key:"udp_end_port_range",label:"UDP ports to",type:"int",width:"half",defaultValue:3e4,min:yC,max:Dp}]},{id:"ubridge",label:"uBridge and marker",summary:"Transport and listener settings",fields:[{key:"ubridge_path",label:"uBridge path",type:"string",width:"half",defaultValue:"ubridge"},{key:"ubridge_control_transport",label:"uBridge control transport",type:"enum",width:"half",defaultValue:"unix",options:[{value:"unix",label:"Unix socket (recommended)"},{value:"tcp",label:"TCP (legacy)"}]},{key:"marker_listen_host",label:"Marker listen host",type:"string",width:"half",defaultValue:"127.0.0.1"},{key:"marker_listen_port",label:"Marker listen port",type:"int",width:"half",defaultValue:3070,min:0,max:Dp}]},{id:"compute-auth",label:"Compute authentication",summary:"Username and password",fields:[{key:"compute_username",label:"Compute username",type:"string",width:"half",defaultValue:"gns3"},{key:"compute_password",label:"Compute password",type:"secret",width:"half",defaultValue:""}]},{id:"networking",label:"Networking",summary:"Interfaces and NAT",fields:[{key:"allowed_interfaces",label:"Allowed interfaces",type:"list",width:"half",defaultValue:[]},{key:"default_nat_interface",label:"Default NAT interface",type:"string",width:"half",defaultValue:null}]},{id:"builtin",label:"Builtin content",summary:"Templates, appliances and symbols",fields:[{key:"enable_builtin_templates",label:"Enable builtin templates",type:"boolean",width:"half",defaultValue:!0},{key:"install_builtin_appliances",label:"Install builtin appliances",type:"boolean",width:"half",defaultValue:!0},{key:"default_symbol_theme",label:"Default symbol theme",type:"enum",width:"half",defaultValue:"Affinity-square-blue",options:[{value:"Classic",label:"Classic"},{value:"Affinity-square-blue",label:"Affinity square blue"},{value:"Affinity-square-red",label:"Affinity square red"},{value:"Affinity-square-gray",label:"Affinity square gray"},{value:"Affinity-circle-blue",label:"Affinity circle blue"},{value:"Affinity-circle-red",label:"Affinity circle red"},{value:"Affinity-circle-gray",label:"Affinity circle gray"}]}]},{id:"skills",label:"Skills repository",summary:"Repository and updates",fields:[{key:"skills_repo_url",label:"Repository URL",type:"string",width:"half",defaultValue:"https://github.com/gns3/gns3-skills.git"},{key:"skills_repo_branch",label:"Branch",type:"string",width:"half",defaultValue:"main"},{key:"skills_auto_update",label:"Auto-update",type:"boolean",defaultValue:!0}]},{id:"mcp",label:"MCP transport security",summary:"Allowed hosts and origins",fields:[{key:"mcp_enable_dns_rebinding_protection",label:"DNS rebinding protection",type:"boolean",defaultValue:!1},{key:"mcp_allowed_hosts",label:"Allowed hosts",type:"list",defaultValue:[]},{key:"mcp_allowed_origins",label:"Allowed origins",type:"list",defaultValue:[]}]}]),Xu("Controller","Controller","shield",[{id:"jwt",label:"JSON Web Tokens",fields:[{key:"jwt_algorithm",label:"Algorithm",type:"string",width:"third",defaultValue:"HS256"},{key:"jwt_access_token_expire_minutes",label:"Access token expiry (minutes)",type:"int",width:"third",defaultValue:1440,min:1},{key:"jwt_refresh_token_expire_minutes",label:"Refresh token expiry (minutes)",type:"int",width:"third",defaultValue:43200,min:1}]},{id:"default-admin",label:"Default administrator",fields:[{key:"default_admin_username",label:"Username",type:"string",width:"half",defaultValue:"admin"},{key:"default_admin_password",label:"Password",type:"secret",width:"half",defaultValue:"admin"}]}]),Xu("VPCS","VPCS","terminal",[{id:"general",label:"General",fields:[{key:"vpcs_path",label:"VPCS path",type:"string",defaultValue:"vpcs"}]}]),Xu("Dynamips","Dynamips","memory",[{id:"general",label:"General",fields:[{key:"dynamips_path",label:"Dynamips path",type:"string",defaultValue:"dynamips"},{key:"allocate_aux_console_ports",label:"Allocate aux console ports",type:"boolean",width:"half",defaultValue:!1},{key:"mmap_support",label:"Memory-mapped I/O support",type:"boolean",width:"half",defaultValue:!0},{key:"sparse_memory_support",label:"Sparse memory support",type:"boolean",width:"half",defaultValue:!0},{key:"ghost_ios_support",label:"Ghost IOS support",type:"boolean",width:"half",defaultValue:!0}]}]),Xu("IOU","IOU","lan",[{id:"general",label:"General",fields:[{key:"iourc_path",label:"IOURC file",type:"string",defaultValue:null},{key:"license_check",label:"License check",type:"boolean",defaultValue:!0}]}]),Xu("Qemu","Qemu","developer_board",[{id:"general",label:"General",fields:[{key:"enable_monitor",label:"Enable Qemu monitor",type:"boolean",defaultValue:!0},{key:"monitor_host",label:"Monitor host",type:"string",defaultValue:"127.0.0.1"}]},{id:"advanced",label:"Advanced",fields:[{key:"ovmf_firmware_dir",label:"OVMF firmware directory",type:"string",defaultValue:"/usr/share/OVMF"},{key:"enable_hardware_acceleration",label:"Hardware acceleration (KVM/HAXM)",type:"boolean",width:"half",defaultValue:!0},{key:"require_hardware_acceleration",label:"Require hardware acceleration",type:"boolean",width:"half",defaultValue:!1},{key:"allow_unsafe_options",label:"Allow unsafe options",type:"boolean",defaultValue:!1}]}]),Xu("WebWireshark","Web Wireshark","insights",[{id:"general",label:"General",fields:[{key:"enabled",label:"Enabled",type:"boolean",defaultValue:!0},{key:"image",label:"Container image",type:"string",width:"half",defaultValue:"gns3/web-wireshark:latest"},{key:"network_subnet",label:"Network subnet",type:"string",width:"half",defaultValue:"172.31.0.0/22"},{key:"memory",label:"Memory limit",type:"string",width:"third",defaultValue:"2g"},{key:"cpus",label:"CPU limit",type:"float",width:"third",defaultValue:1,min:0},{key:"pids_limit",label:"PIDs limit",type:"int",width:"third",defaultValue:1e3,min:0}]}])];var F8e=/^#\/components\/schemas\/(.+)$/;function B$(n,o){let e=F8e.exec(o);return e?n[e[1]]:void 0}function j$(n){let o=n?.components?.schemas,e=o?.SettingsResponse?.properties;if(!o||!e)return null;let t={};for(let i of wC){let a=e[i.name]?.$ref,s=a?B$(o,a)?.properties:void 0;s&&(t[i.name]=R8e(s,o))}return Object.keys(t).length?t:null}function R8e(n,o){let e={};for(let[t,i]of Object.entries(n)){let a=i.$ref?B$(o,i.$ref):void 0;if(!a?.enum){e[t]=i;continue}let s=ze(q({},i),{enum:a.enum});delete s.$ref,e[t]=s}return e}function $$(n,o){return n.map(e=>{let t=o[e.name];return t?ze(q({},e),{groups:e.groups.map(i=>ze(q({},i),{fields:i.fields.map(a=>z8e(a,t[a.key]))}))}):e})}function z8e(n,o){if(!o)return n;let e=q({},n);o.description&&(e.hint=o.description);let t=L8e(o),i=V8e(o);t!==void 0&&(e.min=t),i!==void 0&&(e.max=i);let a=B8e(o);a&&(e.options=a.map(d=>({value:d,label:n.options?.find(p=>p.value===d)?.label??j8e(d)})));let s=$8e(o);return n.defaultValue!==void 0&&n.type!=="secret"&&s!==void 0&&(e.defaultValue=s),e}function L8e(n){if(typeof n.minimum=="number")return n.minimum;if(typeof n.exclusiveMinimum=="number")return n.exclusiveMinimum+1}function V8e(n){if(typeof n.maximum=="number")return n.maximum;if(typeof n.exclusiveMaximum=="number")return n.exclusiveMaximum-1}function B8e(n){let o=n.enum;return Array.isArray(o)&&o.every(e=>typeof e=="string")?o:null}function j8e(n){return n.replace(/[-_]+/g," ").replace(/\b\w/g,o=>o.toUpperCase())}function $8e(n){let o=n.default;if(typeof o=="boolean"||typeof o=="number"||typeof o=="string"||Array.isArray(o)&&o.every(e=>typeof e=="string"))return o}function H8e(n,o){return n.length===o.length&&n.every((e,t)=>e===o[t])}function G2(n,o){return Array.isArray(n)&&Array.isArray(o)?H8e(n,o):n===o}function Kl(n,o){return`${n}.${o}`}function H$(n){return n.groups.reduce((o,e)=>o.concat(e.fields),[])}function U8e(n,o,e){let t=n;return o!==void 0&&t<o&&(t=o),e!==void 0&&t>e&&(t=e),t}function W8e(n,o){return(n.type==="int"||n.type==="float")&&o!==null&&o!==""?U8e(Number(o),n.min,n.max):o}function U$(n,o,e,t,i){let a=new Set;for(let s of n)for(let d of H$(s)){let p=Kl(s.name,d.key);if(d.type==="secret"){i[p]&&i[p].state!=="unchanged"&&a.add(p);continue}if(t.has(p)){a.add(p);continue}let u=o[s.name][d.key],g=e[s.name][d.key];G2(u,g)||a.add(p)}return a}function W$(n,o,e,t,i){let a={};for(let s of n)for(let d of H$(s)){let p=Kl(s.name,d.key),u;if(d.type==="secret"){let g=i[p];if(!g||g.state==="unchanged")continue;u=g.state==="clear"?null:g.value}else if(t.has(p))u=null;else{let g=o[s.name][d.key],C=e[s.name][d.key];if(G2(g,C))continue;u=W8e(d,C)}a[s.name]||(a[s.name]={}),a[s.name][d.key]=u}return a}var q2=(()=>{class n{httpController;http=f(us);schemaCache=new Map;constructor(e){this.httpController=e}getServerSettings(e){return this.httpController.get(e,"/settings")}updateServerSettings(e,t){return this.httpController.put(e,"/settings",t)}getSettingsSchemas(e){let t=this.schemaCache.get(e.id);if(t)return t;e.protocol||(e.protocol=location.protocol);let i=`${e.protocol}//${e.host}:${e.port}/openapi.json`,a=this.http.get(i).pipe(Pt(s=>j$(s)),ei(()=>Vt(null)),wd(1));return this.schemaCache.set(e.id,a),a}static \u0275fac=function(t){return new(t||n)(_e(sn))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var G8e=()=>[],G$=(n,o)=>o.name,q8e=(n,o)=>o.id,q$=(n,o)=>o.key,Q8e=(n,o)=>o.value;function K8e(n,o){n&1&&(r(0,"div",6),L(1,"mat-spinner",7),l()),n&2&&(m(),v("diameter",40))}function X8e(n,o){if(n&1){let e=R();r(0,"div",6)(1,"p",8),c(2),l(),r(3,"button",9),_("click",function(){y(e);let i=h();return w(i.retryLoad())}),c(4,"Retry"),l()()}n&2&&(m(2),N(o))}function Y8e(n,o){if(n&1&&(r(0,"code"),c(1),l()),n&2){let e=o.$implicit;m(),N(e)}}function Z8e(n,o){if(n&1){let e=R();r(0,"div",10)(1,"mat-icon"),c(2,"restart_alt"),l(),r(3,"div",40)(4,"strong"),c(5,"Restart required"),l(),r(6,"span"),c(7,"These changes take effect after the server restarts:"),l(),r(8,"div",41),Q(9,Y8e,2,1,"code",null,Oe),l()(),r(11,"button",42),_("click",function(){y(e);let i=h(2);return w(i.restartBanner.set(null))}),r(12,"mat-icon"),c(13,"close"),l()()()}n&2&&(m(9),K(o))}function J8e(n,o){if(n&1){let e=R();r(0,"div",11)(1,"mat-icon"),c(2,"sync"),l(),r(3,"div",40)(4,"strong"),c(5,"Changed by another session"),l(),r(6,"span"),c(7,"The server settings were updated elsewhere. Review your unsaved changes before saving."),l()(),r(8,"button",43),_("click",function(){y(e);let i=h(2);return w(i.externalChange.set(!1))}),r(9,"mat-icon"),c(10,"close"),l()()()}}function eRe(n,o){if(n&1){let e=R();r(0,"div",12)(1,"mat-icon"),c(2,"error"),l(),r(3,"div",40)(4,"strong"),c(5,"Could not save the settings"),l(),r(6,"span"),c(7),l()(),r(8,"button",44),_("click",function(){y(e);let i=h(2);return w(i.serverError.set(null))}),r(9,"mat-icon"),c(10,"close"),l()()()}n&2&&(m(7),N(o.message))}function tRe(n,o){if(n&1&&(r(0,"span",47),c(1),l()),n&2){let e=h().$implicit,t=h(2);Ce("aria-label",t.sectionMatchCount(e)+" matching settings"),m(),N(t.sectionMatchCount(e))}}function nRe(n,o){if(n&1&&(r(0,"span",48),c(1),l()),n&2){let e=o,t=h().$implicit;Ce("aria-label",e+" unsaved "+(e===1?"change":"changes")+" in "+t.label),m(),N(e)}}function iRe(n,o){if(n&1){let e=R();r(0,"button",45),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.selectSection(i.name))}),r(1,"mat-icon"),c(2),l(),r(3,"span",46),c(4),l(),T(5,tRe,2,2,"span",47),T(6,nRe,2,2,"span",48),l()}if(n&2){let e,t,i,a=o.$implicit,s=h(2);ne("server-settings__category--active",((e=s.activeSectionMeta())==null?null:e.name)===a.name),v("disabled",s.hasSearch()&&s.sectionMatchCount(a)===0),Ce("aria-current",((t=s.activeSectionMeta())==null?null:t.name)===a.name?"page":null),m(2),N(a.icon),m(2),N(a.label),m(),E(s.hasSearch()?5:-1),m(),E((i=s.sectionChangeCount(a))?6:-1,i)}}function oRe(n,o){if(n&1){let e=R();r(0,"button",49),_("click",function(){y(e),h();let i=Te(19);return h().setSearchQuery(""),w(i.focus())}),r(1,"mat-icon"),c(2,"close"),l()()}}function aRe(n,o){if(n&1&&(r(0,"p",29),c(1),l()),n&2){let e=h(2);m(),RC(" ",e.matchingFields().size," matching ",e.matchingFields().size===1?"setting":"settings"," in ",e.matchingSections().length," ",e.matchingSections().length===1?"category":"categories"," ")}}function rRe(n,o){if(n&1){let e=R();r(0,"div",30)(1,"mat-icon",27),c(2,"search_off"),l(),r(3,"p"),c(4),l(),r(5,"button",50),_("click",function(){y(e),h();let i=Te(19);return h().setSearchQuery(""),w(i.focus())}),c(6,"Clear search"),l()()}if(n&2){let e=h(2);m(4),X("No settings match \u201C",e.searchQuery().trim(),"\u201D.")}}function sRe(n,o){if(n&1&&(r(0,"span",48),c(1),l()),n&2){let e=o;m(),Un("",e," ",e===1?"change":"changes")}}function lRe(n,o){n&1&&(r(0,"span"),c(1," (undo reset)"),l())}function cRe(n,o){if(n&1){let e=R();r(0,"button",60),_("click",function(){let i=y(e).$implicit,a=h(2).$implicit,s=h(2);return w(s.revertField(a,i))}),r(1,"mat-icon"),c(2),l(),c(3),T(4,lRe,2,0,"span"),l()}if(n&2){let e=o.$implicit,t=h(2).$implicit,i=h(2);Ce("aria-label",e.type==="secret"&&i.secretState(t,e).state==="clear"?"Undo reset for "+e.label:"Reset "+e.label+" to default"),m(2),N(e.type==="secret"&&i.secretState(t,e).state==="clear"?"check":"undo"),m(),X(" ",e.label," "),m(),E(e.type==="secret"&&i.secretState(t,e).state==="clear"?4:-1)}}function dRe(n,o){n&1&&(r(0,"mat-icon",66),c(1,"restart_alt"),l())}function mRe(n,o){if(n&1&&(r(0,"span",67),c(1),l()),n&2){let e=h(2).$implicit;m(),N(e.hint)}}function pRe(n,o){if(n&1){let e=R();r(0,"div",62)(1,"div",64)(2,"span",65),c(3),T(4,dRe,2,0,"mat-icon",66),l(),T(5,mRe,2,1,"span",67),l(),r(6,"mat-slide-toggle",68),_("change",function(i){y(e);let a=h().$implicit,s=h(2).$implicit,d=h(2);return w(d.setValue(s.name,a.key,i.checked))}),l()()}if(n&2){let e=h().$implicit,t=h(2).$implicit,i=h(2);m(3),X("",e.label," "),m(),E(e.restartRequired?4:-1),m(),E(e.hint?5:-1),m(),v("checked",!!i.valueOf(t,e)),Hs("aria-label",e.label)}}function uRe(n,o){n&1&&(r(0,"mat-icon",66),c(1,"restart_alt"),l())}function gRe(n,o){if(n&1&&(r(0,"mat-hint"),c(1),l()),n&2){let e=h(2).$implicit;m(),N(e.hint)}}function hRe(n,o){if(n&1){let e=R();r(0,"mat-chip-row",74),_("removed",function(){let i=y(e).$implicit,a=h(2).$implicit,s=h(2).$implicit,d=h(2);return w(d.removeListItem(s,a,i))}),c(1),r(2,"button",75)(3,"mat-icon"),c(4,"cancel"),l()()()}if(n&2){let e=o.$implicit;v("editable",!1)("matTooltip",e),m(),X(" ",e," "),m(),Ce("aria-label","Remove "+e)}}function _Re(n,o){if(n&1){let e=R();r(0,"div",63)(1,"mat-form-field",69)(2,"mat-label")(3,"span",70),c(4),T(5,uRe,2,0,"mat-icon",66),l()(),r(6,"input",71),_("matChipInputTokenEnd",function(i){y(e);let a=h().$implicit,s=h(2).$implicit,d=h(2);return w(d.addListItem(s,a,i))}),l(),T(7,gRe,2,1,"mat-hint"),l()(),r(8,"mat-chip-grid",72,2),Q(10,hRe,5,4,"mat-chip-row",73,ni),l()}if(n&2){let e=Te(9),t=h().$implicit,i=h(2).$implicit,a=h(2);m(4),X("",t.label," "),m(),E(t.restartRequired?5:-1),m(),v("matChipInputFor",e)("matChipInputSeparatorKeyCodes",a.separatorKeysCodes),Hs("aria-label","Add value to "+t.label),m(),E(t.hint?7:-1),m(),ne("server-settings__list-values--empty",a.listValueOf(i,t).length===0),Ce("aria-label",t.label+" values"),m(2),K(a.listValueOf(i,t))}}function fRe(n,o){n&1&&(r(0,"mat-icon",66),c(1,"restart_alt"),l())}function vRe(n,o){if(n&1&&L(0,"input",77),n&2){let e=h(2).$implicit;Hs("aria-label",e.label)}}function CRe(n,o){if(n&1){let e=R();r(0,"input",79),_("input",function(i){y(e);let a=h(2).$implicit,s=h(2).$implicit,d=h(2);return w(d.onSecretInput(s,a,i))}),l()}if(n&2){let e=h(2).$implicit,t=h(2).$implicit,i=h(2);v("value",i.secretInputValue(t,e)),Hs("aria-label",e.label)}}function bRe(n,o){if(n&1&&c(0),n&2){let e=h(2).$implicit;X(" ",e.hint," \xB7 ")}}function xRe(n,o){if(n&1&&(r(0,"div",63)(1,"mat-form-field",76)(2,"mat-label")(3,"span",70),c(4),T(5,fRe,2,0,"mat-icon",66),l()(),T(6,vRe,1,1,"input",77)(7,CRe,1,2,"input",78),r(8,"mat-hint"),T(9,bRe,1,1),c(10),l()()()),n&2){let e=h().$implicit,t=h(2).$implicit,i=h(2);m(4),X("",e.label," "),m(),E(e.restartRequired?5:-1),m(),E(i.secretState(t,e).state==="clear"?6:7),m(3),E(e.hint?9:-1),m(),X(" ",i.secretIsSet(t,e)?"A value is set":"Not set"," ")}}function yRe(n,o){n&1&&(r(0,"mat-icon",66),c(1,"restart_alt"),l())}function wRe(n,o){if(n&1&&(r(0,"mat-option",83),c(1),l()),n&2){let e=o.$implicit;v("value",e.value),m(),N(e.label)}}function MRe(n,o){if(n&1){let e=R();r(0,"mat-select",82),_("selectionChange",function(i){y(e);let a=h(2).$implicit,s=h(2).$implicit,d=h(2);return w(d.setValue(s.name,a.key,i.value))}),Q(1,wRe,2,2,"mat-option",83,Q8e),l()}if(n&2){let e=h(2).$implicit,t=h(2).$implicit,i=h(2);v("value",i.valueOf(t,e)),Hs("aria-label",e.label),m(),K(e.options??at(2,G8e))}}function SRe(n,o){if(n&1){let e=R();r(0,"input",84),_("input",function(i){y(e);let a=h(2).$implicit,s=h(2).$implicit,d=h(2);return w(a.type==="string"?d.onTextInput(s,a,i):d.onNumberInput(s,a,i))}),l()}if(n&2){let e=h(2).$implicit,t=h(2).$implicit,i=h(2);v("type",e.type==="string"?"text":"number")("min",e.min)("max",e.max)("step",e.type==="float"?"any":1)("value",i.valueOf(t,e)??""),Hs("aria-label",e.label)}}function kRe(n,o){if(n&1&&(r(0,"mat-hint"),c(1),l()),n&2){let e=h(2).$implicit;m(),N(e.hint)}}function PRe(n,o){if(n&1&&(r(0,"div",63)(1,"mat-form-field",76)(2,"mat-label")(3,"span",70),c(4),T(5,yRe,2,0,"mat-icon",66),l()(),T(6,MRe,3,3,"mat-select",80)(7,SRe,1,6,"input",81),T(8,kRe,2,1,"mat-hint"),l()()),n&2){let e=h().$implicit;m(4),X("",e.label," "),m(),E(e.restartRequired?5:-1),m(),E(e.type==="enum"?6:7),m(2),E(e.hint?8:-1)}}function TRe(n,o){if(n&1&&(r(0,"div",61),T(1,pRe,7,5,"div",62)(2,_Re,12,9)(3,xRe,11,5,"div",63)(4,PRe,9,4,"div",63),l()),n&2){let e,t=o.$implicit,i=h(2).$implicit,a=h(2);ne("server-settings__field--dirty",a.isFieldDirty(i,t))("server-settings__field--half",t.width==="half")("server-settings__field--third",t.width==="third")("server-settings__field--two-thirds",t.width==="two-thirds"),v("hidden",!a.fieldMatches(i,t)),Ce("data-setting",i.name+"."+t.key),m(),E((e=t.type)==="boolean"?1:e==="list"?2:e==="secret"?3:4)}}function ERe(n,o){if(n&1){let e=R();r(0,"section",51)(1,"div",52)(2,"h3",53)(3,"button",54),_("click",function(){let i=y(e).$implicit,a=h().$implicit,s=h(2);return w(s.toggleGroup(a,i))}),r(4,"mat-icon",27),c(5),l(),r(6,"span",55),c(7),l(),T(8,sRe,2,2,"span",48),l()(),r(9,"button",56)(10,"mat-icon"),c(11,"undo"),l(),c(12," Reset "),l(),r(13,"mat-menu",null,1),Q(15,cRe,5,4,"button",57,q$),l()(),r(17,"div",58),Q(18,TRe,5,11,"div",59,q$),l()()}if(n&2){let e,t=o.$implicit,i=Te(14),a=h().$implicit,s=h(2);v("hidden",!s.groupMatches(t,a));let d=s.resettableFields(a,t);m(3),v("id","server-settings-heading-"+a.name+"-"+t.id),Ce("aria-expanded",s.isGroupExpanded(a,t))("aria-controls","server-settings-group-"+a.name+"-"+t.id),m(2),N(s.isGroupExpanded(a,t)?"expand_more":"chevron_right"),m(2),N(t.label),m(),E((e=s.groupChangeCount(a,t))?8:-1,e),m(),v("matMenuTriggerFor",i)("disabled",d.length===0),Ce("aria-label","Reset settings in "+t.label),m(6),K(d),m(2),v("hidden",!s.isGroupExpanded(a,t))("id","server-settings-group-"+a.name+"-"+t.id),Ce("aria-labelledby","server-settings-heading-"+a.name+"-"+t.id),m(),K(t.fields)}}function ORe(n,o){if(n&1&&(r(0,"section",31)(1,"div"),Q(2,ERe,20,13,"section",51,q8e),l()()),n&2){let e,t=o.$implicit,i=h(2);v("hidden",((e=i.activeSectionMeta())==null?null:e.name)!==t.name),Ce("aria-label",t.label),m(2),K(t.groups)}}function DRe(n,o){if(n&1&&(r(0,"span",35)(1,"mat-icon",27),c(2,"restart_alt"),l(),c(3),l()),n&2){let e=o;m(3),Un("",e," ",e===1?"requires":"require"," restart")}}function IRe(n,o){n&1&&L(0,"mat-progress-spinner",39),n&2&&v("diameter",18)}function ARe(n,o){if(n&1){let e=R();T(0,Z8e,14,0,"div",10),T(1,J8e,11,0,"div",11),T(2,eRe,11,1,"div",12),r(3,"div",13)(4,"nav",14),Q(5,iRe,7,8,"button",15,G$),l(),r(7,"main",16)(8,"div",17)(9,"header",18)(10,"h2",19),c(11),l()(),r(12,"div",20)(13,"mat-form-field",21)(14,"mat-icon",22),c(15,"search"),l(),r(16,"mat-label"),c(17,"Search settings"),l(),r(18,"input",23,0),_("input",function(i){y(e);let a=h();return w(a.setSearchQuery(i.target.value))}),l(),T(20,oRe,3,0,"button",24),l(),r(21,"div",25)(22,"span",26)(23,"mat-icon",27),c(24,"restart_alt"),l(),c(25,"Restart required"),l(),r(26,"button",28),_("click",function(){y(e);let i=h();return w(i.toggleAllGroups())}),c(27),l()()(),T(28,aRe,2,4,"p",29),T(29,rRe,7,1,"div",30),Q(30,ORe,4,2,"section",31,G$),l(),r(32,"footer",32)(33,"div",33)(34,"span",34),c(35),l(),T(36,DRe,4,2,"span",35),l(),r(37,"div",36)(38,"button",37),_("click",function(){y(e);let i=h();return w(i.discardChanges())}),c(39," Discard "),l(),r(40,"button",38),_("click",function(){y(e);let i=h();return w(i.save())}),T(41,IRe,1,1,"mat-progress-spinner",39),c(42," Save changes "),l()()()()()}if(n&2){let e,t,i,a,s=h();E((e=s.restartBanner())?0:-1,e),m(),E(s.externalChange()?1:-1),m(),E((t=s.serverError())?2:-1,t),m(3),K(s.sections()),m(6),N(((i=s.activeSectionMeta())==null?null:i.label)||"Settings"),m(7),v("value",s.searchQuery()),m(2),E(s.searchQuery()?20:-1),m(6),v("disabled",!s.activeSectionMeta()),m(),X(" ",s.allGroupsExpanded()?"Collapse all":"Expand all"," "),m(),E(s.hasSearch()?28:-1),m(),E(s.activeSectionMeta()?-1:29),m(),K(s.sections()),m(5),Un("",s.dirtyKeys().size," unsaved ",s.dirtyKeys().size===1?"change":"changes"),m(),E((a=s.restartChangeCount())?36:-1,a),m(2),v("disabled",!s.isDirty()||s.isSaving()),m(2),v("disabled",!s.isDirty()||s.isSaving()),m(),E(s.isSaving()?41:-1)}}var Q$=(()=>{class n{sections=Ne(()=>{let e=this.sectionSchemas();return e?$$(wC,e):wC});separatorKeysCodes=[13,188];route=f($t);cd=f(oe);controllerService=f(_t);serverSettingsService=f(q2);notificationService=f(_s);toaster=f(re);controller;initialValues=null;subscriptions=new Oo;isLoading=z(!0);loadError=z(null);isSaving=z(!1);activeSection=z("Server");sectionSchemas=z(null);formValues=z(null);pendingRemoves=z(new Set);secrets=z({});serverError=z(null);restartBanner=z(null);externalChange=z(!1);searchQuery=z("");hasSearch=Ne(()=>this.searchQuery().trim().length>0);groupExpansion=z(new Map);collapsedSearchGroups=z(new Set);matchingFields=Ne(()=>{let e=this.searchQuery().trim().toLowerCase().split(/\s+/).filter(Boolean),t=new Set;for(let i of this.sections())for(let a of i.groups)for(let s of a.fields){let d=[i.label,a.label,a.summary,s.label,s.key,s.key.replace(/_/g," "),s.hint].join(" ").toLowerCase();e.every(p=>d.includes(p))&&t.add(Kl(i.name,s.key))}return t});matchingSections=Ne(()=>this.sections().filter(e=>this.sectionMatchCount(e)>0));activeSectionMeta=Ne(()=>{let e=this.hasSearch()?this.matchingSections():this.sections();return e.find(t=>t.name===this.activeSection())??e[0]});dirtyKeys=Ne(()=>{let e=this.formValues();return!e||!this.initialValues?new Set:U$(this.sections(),this.initialValues,e,this.pendingRemoves(),this.secrets())});isDirty=Ne(()=>this.dirtyKeys().size>0);restartChangeCount=Ne(()=>this.sections().reduce((e,t)=>e+t.groups.reduce((i,a)=>i+a.fields.filter(s=>s.restartRequired&&this.isFieldDirty(t,s)).length,0),0));allGroupsExpanded=Ne(()=>{let e=this.activeSectionMeta(),t=e?.groups.filter(i=>this.groupMatches(i,e))??[];return t.length>0&&t.every(i=>this.isGroupExpanded(e,i))});setSearchQuery(e){this.searchQuery.set(e),this.collapsedSearchGroups.set(new Set)}fieldMatches(e,t){return this.matchingFields().has(Kl(e.name,t.key))}groupMatches(e,t){return e.fields.some(i=>this.fieldMatches(t,i))}sectionMatchCount(e){return e.groups.reduce((t,i)=>t+i.fields.filter(a=>this.fieldMatches(e,a)).length,0)}groupChangeCount(e,t){return t.fields.filter(i=>this.isFieldDirty(e,i)).length}sectionChangeCount(e){return e.groups.reduce((t,i)=>t+this.groupChangeCount(e,i),0)}isGroupExpanded(e,t){let i=Kl(e.name,t.id);return this.hasSearch()?!this.collapsedSearchGroups().has(i):this.groupExpansion().get(i)??(e.name==="Server"?t.id==="general"||t.id==="network":t.id===e.groups[0]?.id)}toggleGroup(e,t){this.setGroupExpanded(e,t,!this.isGroupExpanded(e,t))}toggleAllGroups(){let e=this.activeSectionMeta();if(!e)return;let t=!this.allGroupsExpanded();for(let i of e.groups)this.groupMatches(i,e)&&this.setGroupExpanded(e,i,t)}setGroupExpanded(e,t,i){let a=Kl(e.name,t.id);if(this.hasSearch()){let s=new Set(this.collapsedSearchGroups());i?s.delete(a):s.add(a),this.collapsedSearchGroups.set(s)}else this.groupExpansion.set(new Map(this.groupExpansion()).set(a,i))}ngOnInit(){let e=this.route.snapshot.paramMap.get("controller_id"),t=parseInt(e??"",10);if(!Number.isInteger(t)||t<=0){this.loadError.set("Invalid controller identifier"),this.isLoading.set(!1);return}this.controllerService.get(t).then(i=>{this.controller=i,this.loadSettings(),this.loadSchema()},()=>{this.loadError.set("Failed to load the controller"),this.isLoading.set(!1),this.cd.markForCheck()}),this.subscriptions.add(this.notificationService.serverSettingsNotificationEmitter.subscribe(i=>this.onSettingsUpdated(i.event))),this.subscriptions.add(this.notificationService.wsReconnected.subscribe(()=>{this.isDirty()||this.refetchSettings(!0)}))}ngOnDestroy(){this.subscriptions.unsubscribe()}onBeforeUnload(){return!this.isDirty()}selectSection(e){this.activeSection.set(e)}isFieldDirty(e,t){return this.dirtyKeys().has(Kl(e.name,t.key))}valueOf(e,t){let i=this.formValues();return i?i[e.name][t.key]??null:null}listValueOf(e,t){let i=this.valueOf(e,t);return Array.isArray(i)?i:[]}canRevert(e,t){if(t.type==="secret"||t.defaultValue===void 0)return!1;let i=this.formValues();return!!i&&!G2(i[e.name][t.key],t.defaultValue)}resettableFields(e,t){return t.fields.filter(i=>this.fieldMatches(e,i)&&(this.canRevert(e,i)||i.type==="secret"))}revertField(e,t){let i=Kl(e.name,t.key);if(t.type==="secret"){this.toggleSecretClear(i);return}t.defaultValue!==void 0&&(this.setValue(e.name,t.key,t.defaultValue),this.addPendingRemove(i))}setValue(e,t,i){let a=this.formValues();a&&(this.formValues.set(ze(q({},a),{[e]:ze(q({},a[e]),{[t]:i})})),this.removePendingRemove(Kl(e,t)))}onNumberInput(e,t,i){let a=i.target.value;if(a===""){this.setValue(e.name,t.key,null);return}let s=Number(a);Number.isFinite(s)&&this.setValue(e.name,t.key,s)}onTextInput(e,t,i){this.setValue(e.name,t.key,i.target.value)}onSecretInput(e,t,i){let a=i.target.value;this.setSecret(Kl(e.name,t.key),a?{state:"set",value:a}:{state:"unchanged"})}secretState(e,t){return this.secrets()[Kl(e.name,t.key)]??{state:"unchanged"}}secretInputValue(e,t){let i=this.secretState(e,t);return i.state==="set"?i.value:""}secretIsSet(e,t){let i=this.formValues();return!!i&&i[e.name][t.key]===V$}toggleSecretClear(e){let t=this.secrets()[e]??{state:"unchanged"};this.setSecret(e,t.state==="clear"?{state:"unchanged"}:{state:"clear"})}setSecret(e,t){this.secrets.set(ze(q({},this.secrets()),{[e]:t}))}addListItem(e,t,i){let a=(i.value||"").trim(),s=this.formValues();if(a&&s){let d=s[e.name][t.key];this.setValue(e.name,t.key,[...d,a])}i.chipInput&&i.chipInput.clear()}removeListItem(e,t,i){let a=this.formValues();if(!a)return;let s=a[e.name][t.key];this.setValue(e.name,t.key,s.filter(d=>d!==i))}save(){let e=this.formValues();if(!this.controller||!this.initialValues||!e)return;let t=W$(this.sections(),this.initialValues,e,this.pendingRemoves(),this.secrets());Object.keys(t).length&&(this.isSaving.set(!0),this.serverError.set(null),this.serverSettingsService.updateServerSettings(this.controller,t).subscribe({next:i=>{this.applyLoadedSettings(i),this.isSaving.set(!1),this.externalChange.set(!1),this.restartBanner.set(i.restart_required.length?i.restart_required:null),this.toaster.success("Server settings saved"),this.cd.markForCheck()},error:i=>this.handleSaveError(i)}))}discardChanges(){this.initialValues&&this.applyLoadedSettings(this.initialValues),this.serverError.set(null),this.externalChange.set(!1)}retryLoad(){this.isLoading.set(!0),this.loadError.set(null),this.loadSettings()}loadSettings(){this.controller&&this.serverSettingsService.getServerSettings(this.controller).subscribe({next:e=>{this.applyLoadedSettings(e),this.isLoading.set(!1),this.loadError.set(null),this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load server settings";this.isLoading.set(!1),this.loadError.set(t),this.cd.markForCheck()}})}loadSchema(){this.controller&&this.subscriptions.add(this.serverSettingsService.getSettingsSchemas(this.controller).subscribe(e=>{this.sectionSchemas.set(e),this.cd.markForCheck()}))}refetchSettings(e){this.controller&&this.serverSettingsService.getServerSettings(this.controller).subscribe({next:t=>{this.applyLoadedSettings(t),this.cd.markForCheck()},error:t=>{if(!e){let i=t.error?.message||t.message||"Failed to load server settings";this.toaster.error(i),this.cd.markForCheck()}}})}applyLoadedSettings(e){this.initialValues=structuredClone(e),this.formValues.set(e),this.pendingRemoves.set(new Set),this.secrets.set({})}onSettingsUpdated(e){this.isDirty()?(this.externalChange.set(!0),this.toaster.warning("Server settings were changed by another session. Review your unsaved changes before saving.")):(e.restart_required.length&&!this.restartBanner()&&this.restartBanner.set(e.restart_required),this.refetchSettings(!0)),this.cd.markForCheck()}handleSaveError(e){this.isSaving.set(!1);let t=e?.originalError?.status??e?.status,i=e.error?.message||e.message||"Failed to save server settings";if(t===400||t===409){let a=t===409?`Some options are managed by another configuration file: ${i}`:i;this.serverError.set({status:t,message:a}),this.toaster.error(a)}else t===403?this.toaster.error("You do not have permission to modify server settings"):this.toaster.error(i);this.cd.markForCheck()}addPendingRemove(e){let t=new Set(this.pendingRemoves());t.add(e),this.pendingRemoves.set(t)}removePendingRemove(e){if(!this.pendingRemoves().has(e))return;let t=new Set(this.pendingRemoves());t.delete(e),this.pendingRemoves.set(t)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-server-settings"]],hostBindings:function(t,i){t&1&&_("beforeunload",function(){return i.onBeforeUnload()},So)},decls:7,vars:1,consts:[["settingsSearch",""],["resetMenu","matMenu"],["chipList",""],[1,"server-settings"],[1,"server-settings__header"],[1,"server-settings__title"],[1,"server-settings__state"],[3,"diameter"],["role","alert",1,"server-settings__state-message"],["mat-raised-button","","color","primary","type","button",3,"click"],["role","status",1,"server-settings__banner","server-settings__banner--warning"],["role","status",1,"server-settings__banner","server-settings__banner--info"],["role","alert",1,"server-settings__banner","server-settings__banner--error"],[1,"server-settings__layout"],["aria-label","Server settings sections",1,"server-settings__categories"],["type","button",1,"server-settings__category",3,"server-settings__category--active","disabled"],["aria-label","Server configuration",1,"server-settings__workspace"],["aria-labelledby","server-settings-panel-title",1,"server-settings__panel"],[1,"server-settings__panel-header"],["id","server-settings-panel-title"],[1,"server-settings__toolbar"],["appearance","outline","subscriptSizing","dynamic",1,"server-settings__search"],["matPrefix","","aria-hidden","true"],["matInput","","type","search","placeholder","Labels, keys or descriptions","aria-label","Search settings across all categories",3,"input","value"],["mat-icon-button","","matSuffix","","type","button","aria-label","Clear settings search"],[1,"server-settings__toolbar-actions"],[1,"server-settings__restart-legend"],["aria-hidden","true"],["mat-button","","type","button",3,"click","disabled"],["role","status",1,"server-settings__search-status"],[1,"server-settings__empty"],[1,"server-settings__content",3,"hidden"],[1,"server-settings__footer"],["role","status",1,"server-settings__change-status"],[1,"server-settings__unsaved-status"],[1,"server-settings__restart-summary"],[1,"server-settings__footer-actions"],["mat-stroked-button","","type","button",3,"click","disabled"],["mat-flat-button","","color","primary","type","button",3,"click","disabled"],["mode","indeterminate",3,"diameter"],[1,"server-settings__banner-content"],[1,"server-settings__banner-options"],["mat-icon-button","","type","button","aria-label","Dismiss restart notice",1,"server-settings__banner-dismiss",3,"click"],["mat-icon-button","","type","button","aria-label","Dismiss notice",1,"server-settings__banner-dismiss",3,"click"],["mat-icon-button","","type","button","aria-label","Dismiss error",1,"server-settings__banner-dismiss",3,"click"],["type","button",1,"server-settings__category",3,"click","disabled"],[1,"server-settings__category-name"],[1,"server-settings__match-count"],[1,"server-settings__change-badge"],["mat-icon-button","","matSuffix","","type","button","aria-label","Clear settings search",3,"click"],["mat-button","","type","button",3,"click"],[1,"server-settings__group",3,"hidden"],[1,"server-settings__group-header"],[1,"server-settings__group-heading"],["type","button",1,"server-settings__group-toggle",3,"click","id"],[1,"server-settings__group-title"],["mat-button","","type","button",1,"server-settings__group-reset",3,"matMenuTriggerFor","disabled"],["mat-menu-item","","type","button"],["role","region",1,"server-settings__group-fields",3,"hidden","id"],[1,"server-settings__field",3,"hidden","server-settings__field--dirty","server-settings__field--half","server-settings__field--third","server-settings__field--two-thirds"],["mat-menu-item","","type","button",3,"click"],[1,"server-settings__field",3,"hidden"],[1,"server-settings__toggle-row"],[1,"server-settings__control-row"],[1,"server-settings__field-copy"],[1,"server-settings__field-label","server-settings__field-name"],["matTooltip","Takes effect after a server restart","role","img","aria-label","Requires a server restart",1,"server-settings__restart-marker"],[1,"server-settings__field-hint"],[3,"change","checked","aria-label"],["appearance","outline","subscriptSizing","dynamic","floatLabel","always",1,"server-settings__control"],[1,"server-settings__field-name"],["matInput","","placeholder","Add a value",1,"server-settings__list-input",3,"matChipInputTokenEnd","matChipInputFor","matChipInputSeparatorKeyCodes","aria-label"],[1,"server-settings__list-values"],[3,"editable","matTooltip"],[3,"removed","editable","matTooltip"],["matChipRemove","","type","button"],["floatLabel","always","appearance","outline","subscriptSizing","dynamic",1,"server-settings__control"],["matInput","","type","text","value","Will be reset to its default","disabled","",3,"aria-label"],["matInput","","type","password","autocomplete","new-password","placeholder","Leave empty to keep the current value",3,"value","aria-label"],["matInput","","type","password","autocomplete","new-password","placeholder","Leave empty to keep the current value",3,"input","value","aria-label"],[3,"value","aria-label"],["matInput","",3,"type","min","max","step","value","aria-label"],[3,"selectionChange","value","aria-label"],[3,"value"],["matInput","",3,"input","type","min","max","step","value","aria-label"]],template:function(t,i){if(t&1&&(r(0,"div",3)(1,"header",4)(2,"h1",5),c(3,"Server settings"),l()(),T(4,K8e,2,1,"div",6)(5,X8e,5,1,"div",6)(6,ARe,43,16),l()),t&2){let a;m(4),E(i.isLoading()?4:(a=i.loadError())?5:i.formValues()?6:-1,a)}},dependencies:[fe,Y,he,Be,ri,bi,xi,hi,fi,we,Pe,Ve,Dr,Bi,oi,ie,ce,ye,Ee,it,Ko,ut,eo,rt,mt,ot,ct,nt,mc,Yc,st,pt],styles:["[_nghost-%COMP%]{display:block;width:100%;background:transparent;font-family:var(--mat-sys-body-medium-font, Roboto),sans-serif;container:settings-page/inline-size}.server-settings__header[_ngcontent-%COMP%]{width:100%;max-width:1600px;margin:0 auto;padding:var(--gns3-density-space-6) var(--gns3-density-page-padding) var(--gns3-density-space-4);box-sizing:border-box;animation:none}.server-settings__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.server-settings__state[_ngcontent-%COMP%]{width:100%;max-width:1600px;margin:0 auto;padding:0 var(--gns3-density-page-padding) var(--gns3-density-space-6);box-sizing:border-box;padding-top:calc(2 * var(--gns3-density-space-6));display:flex;flex-direction:column;align-items:center;gap:var(--gns3-density-space-4)}.server-settings__state[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing)}.server-settings__state-message[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface-variant);font-size:14px}.server-settings__banner[_ngcontent-%COMP%]{--server-settings-accent: var(--mat-sys-primary);width:100%;max-width:1600px;margin:0 auto;padding:0 0 var(--gns3-density-space-4);box-sizing:border-box;width:calc(100% - 2 * var(--gns3-density-page-padding));max-width:calc(1600px - 2 * var(--gns3-density-page-padding));padding:var(--gns3-density-space-3) var(--gns3-density-space-4);display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:flex-start;gap:var(--gns3-density-space-3);color:var(--mat-sys-on-surface);background:var(--mat-sys-surface-container-high);border:1px solid color-mix(in srgb,var(--server-settings-accent) 45%,var(--mat-sys-outline-variant));border-left:4px solid var(--server-settings-accent);border-radius:var(--gns3-density-radius-md)}.server-settings__banner--warning[_ngcontent-%COMP%]{--server-settings-accent: var(--mat-sys-tertiary)}.server-settings__banner--error[_ngcontent-%COMP%]{--server-settings-accent: var(--mat-sys-error)}.server-settings__banner--info[_ngcontent-%COMP%]{--server-settings-accent: var(--mat-sys-primary)}.server-settings__banner[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{color:var(--server-settings-accent)}.server-settings__banner-content[_ngcontent-%COMP%]{min-width:0;display:flex;flex-direction:column;gap:var(--gns3-density-space-1)}.server-settings__banner-content[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-size:14px;font-weight:500}.server-settings__banner-content[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:13px;line-height:1.4;overflow-wrap:anywhere}.server-settings__banner-options[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:var(--gns3-density-space-2)}.server-settings__banner-options[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{padding:1px 6px;background:var(--mat-sys-surface-container-highest);border-radius:var(--gns3-density-radius-sm);color:var(--mat-sys-primary);font-size:12px}.server-settings__banner-dismiss[_ngcontent-%COMP%]{width:var(--gns3-density-control-height-sm);height:var(--gns3-density-control-height-sm);--mat-icon-button-state-layer-size: var(--gns3-density-control-height-sm);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-control-height-sm)}.server-settings__banner-dismiss[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}.server-settings__layout[_ngcontent-%COMP%]{width:100%;max-width:1600px;margin:0 auto;padding:0 var(--gns3-density-page-padding) var(--gns3-density-space-4);box-sizing:border-box;animation:none;display:grid;grid-template-columns:228px minmax(0,1fr);gap:var(--gns3-density-card-gap);align-items:start}.server-settings__categories[_ngcontent-%COMP%]{position:sticky;top:var(--gns3-density-app-header-height);padding:var(--gns3-density-space-2);display:flex;flex-direction:column;gap:var(--gns3-density-space-1);background:var(--mat-sys-surface-container);border:1px solid var(--mat-sys-outline-variant);border-radius:var(--gns3-density-radius-lg)}.server-settings__category[_ngcontent-%COMP%]{width:100%;min-height:var(--gns3-density-control-height);padding:0 var(--gns3-density-space-3);display:flex;align-items:center;gap:var(--gns3-density-space-3);border:0;border-radius:var(--gns3-density-radius-sm);background:transparent;color:var(--mat-sys-on-surface-variant);font:inherit;font-size:16px;font-weight:600;cursor:pointer;text-align:left}.server-settings__category[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.server-settings__category[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:20px;height:20px;font-size:20px}.server-settings__category[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-on-surface) 6%,transparent);color:var(--mat-sys-on-surface)}.server-settings__category[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--mat-sys-primary);outline-offset:-2px}.server-settings__category--active[_ngcontent-%COMP%], .server-settings__category--active[_ngcontent-%COMP%]:hover{background:var(--mat-sys-secondary-container);color:var(--mat-sys-on-secondary-container)}.server-settings__content[_ngcontent-%COMP%]{min-width:0;container:settings-pane/inline-size}.server-settings__panel[_ngcontent-%COMP%]{overflow:hidden;color:var(--mat-sys-on-surface);background:var(--mat-sys-surface);border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:var(--gns3-density-radius-xl);box-shadow:none}.server-settings__workspace[_ngcontent-%COMP%]{min-width:0}.server-settings__panel-header[_ngcontent-%COMP%]{padding:var(--gns3-density-space-4) var(--gns3-density-page-padding);color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container);border-bottom:1px solid var(--mat-sys-outline-variant)}.server-settings__panel-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-size:calc(var(--gns3-density-section-title-size) + 2px);font-weight:650;line-height:1.2}.server-settings__toolbar[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--gns3-density-space-3);padding:var(--gns3-density-space-3) var(--gns3-density-page-padding);border-bottom:1px solid var(--mat-sys-outline-variant)}.server-settings__search[_ngcontent-%COMP%]{flex:1 1 480px;max-width:640px;min-width:0}.server-settings__search[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:var(--gns3-density-control-height-sm);height:var(--gns3-density-control-height-sm);--mat-icon-button-state-layer-size: var(--gns3-density-control-height-sm);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-control-height-sm)}.server-settings__search[_ngcontent-%COMP%] button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}.server-settings__toolbar-actions[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--gns3-density-space-2);margin-inline-start:auto}.server-settings__toolbar-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{height:var(--gns3-density-control-height-sm);min-height:var(--gns3-density-control-height-sm);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height-sm);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height-sm);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height-sm);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height-sm);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing)}.server-settings__restart-legend[_ngcontent-%COMP%], .server-settings__restart-summary[_ngcontent-%COMP%]{font-size:var(--gns3-helper-text-size);font-weight:var(--gns3-helper-text-weight);line-height:var(--gns3-helper-text-line-height);color:var(--mat-sys-on-surface-variant);display:inline-flex;align-items:center;gap:var(--gns3-density-space-1)}.server-settings__restart-legend[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], .server-settings__restart-summary[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:16px;height:16px;font-size:16px;line-height:16px}.server-settings__search-status[_ngcontent-%COMP%]{font-size:var(--gns3-helper-text-size);font-weight:var(--gns3-helper-text-weight);line-height:var(--gns3-helper-text-line-height);color:var(--mat-sys-on-surface-variant);margin:var(--gns3-density-space-3) var(--gns3-density-page-padding)}.server-settings__empty[_ngcontent-%COMP%]{overflow:hidden;border-radius:var(--gns3-density-radius-lg);background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:var(--mat-sys-on-surface-variant);padding:var(--gns3-density-space-6)}.server-settings__empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{overflow-wrap:anywhere}.server-settings__group[_ngcontent-%COMP%]:not([hidden]) ~ .server-settings__group[_ngcontent-%COMP%]:not([hidden]){border-top:1px solid var(--mat-sys-outline-variant)}.server-settings__group-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-2)}.server-settings__group-heading[_ngcontent-%COMP%]{flex:1;min-width:0;margin:0;font-size:16px;font-weight:600;line-height:1.2}.server-settings__group-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-2);width:100%;min-height:var(--gns3-density-control-height);padding:var(--gns3-density-space-2) var(--gns3-density-space-4);border:0;background:transparent;color:var(--mat-sys-on-surface);font:inherit;text-align:start;cursor:pointer}.server-settings__group-toggle[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{flex:0 0 20px;width:20px;height:20px;font-size:20px;color:var(--mat-sys-on-surface-variant)}.server-settings__group-toggle[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-on-surface) 6%,transparent)}.server-settings__group-toggle[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--mat-sys-primary);outline-offset:-2px}.server-settings__group-title[_ngcontent-%COMP%]{min-width:0;font-weight:600;overflow-wrap:anywhere}.server-settings__change-badge[_ngcontent-%COMP%]{flex-shrink:0;padding:2px var(--gns3-density-space-2);border-radius:var(--gns3-density-radius-lg);background:var(--mat-sys-secondary-container);color:var(--mat-sys-on-secondary-container);font-size:var(--gns3-helper-text-size);line-height:var(--gns3-helper-text-line-height);font-weight:500;white-space:nowrap}.server-settings__category-name[_ngcontent-%COMP%]{flex:1}.server-settings__match-count[_ngcontent-%COMP%]{font-size:var(--gns3-helper-text-size);font-weight:var(--gns3-helper-text-weight);line-height:var(--gns3-helper-text-line-height);color:var(--mat-sys-on-surface-variant);flex-shrink:0}.server-settings__category[_ngcontent-%COMP%]:disabled{opacity:.38;cursor:default}.server-settings__category[_ngcontent-%COMP%]:disabled:hover{background:transparent;color:var(--mat-sys-on-surface-variant)}.server-settings__group-fields[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));padding:var(--gns3-density-space-2) var(--gns3-density-space-4) var(--gns3-density-space-3);gap:0 var(--gns3-density-space-4)}.server-settings__content[hidden][_ngcontent-%COMP%], .server-settings__group[hidden][_ngcontent-%COMP%], .server-settings__group-fields[hidden][_ngcontent-%COMP%], .server-settings__field[hidden][_ngcontent-%COMP%]{display:none}.server-settings__field[_ngcontent-%COMP%]{grid-column:1/-1;min-width:0;padding:var(--gns3-density-space-2) var(--gns3-density-space-3);border-radius:var(--gns3-density-radius-md)}.server-settings__field--half[_ngcontent-%COMP%]{grid-column:span 3}.server-settings__field--third[_ngcontent-%COMP%]{grid-column:span 2}.server-settings__field--two-thirds[_ngcontent-%COMP%]{grid-column:span 4}.server-settings__field--dirty[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--mat-sys-primary) 7%,transparent);box-shadow:inset 2px 0 0 var(--mat-sys-primary)}.server-settings__toggle-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:var(--gns3-density-space-4);min-height:var(--gns3-density-control-height)}.server-settings__field-copy[_ngcontent-%COMP%]{min-width:0;display:flex;flex-direction:column;gap:2px}.server-settings__field-label[_ngcontent-%COMP%]{font-size:16px;font-weight:600;line-height:1.2}.server-settings__field-hint[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:14px;line-height:1.5;overflow-wrap:anywhere}.server-settings__control-row[_ngcontent-%COMP%]{min-width:0}.server-settings__control[_ngcontent-%COMP%]{min-width:0;width:100%}.server-settings__list-input[_ngcontent-%COMP%]{margin:0;min-width:0;width:100%}.server-settings__list-values[_ngcontent-%COMP%]{display:block;margin-top:var(--gns3-density-space-2);padding-inline:16px}.server-settings__list-values--empty[_ngcontent-%COMP%]{display:none}.server-settings__list-values[_ngcontent-%COMP%] mat-chip-row[_ngcontent-%COMP%]{max-width:100%}.server-settings__field-name[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:var(--gns3-density-space-1)}.server-settings__restart-marker[_ngcontent-%COMP%]{flex-shrink:0;width:16px;height:16px;font-size:16px;line-height:16px;color:var(--mat-sys-on-surface-variant)}.server-settings__group-reset[_ngcontent-%COMP%]{height:var(--gns3-density-control-height-sm);min-height:var(--gns3-density-control-height-sm);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height-sm);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height-sm);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height-sm);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height-sm);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing);flex-shrink:0;margin-inline-end:var(--gns3-density-space-4);min-width:0;padding-inline:var(--gns3-density-space-2)}.server-settings__footer[_ngcontent-%COMP%]{position:sticky;bottom:0;z-index:1;display:flex;flex-wrap:wrap;align-items:center;gap:var(--gns3-density-space-3);margin-top:var(--gns3-density-space-3);padding:var(--gns3-density-space-3) var(--gns3-density-space-4);border:1px solid var(--mat-sys-outline-variant);border-radius:var(--gns3-density-radius-md);background:var(--mat-sys-surface-container)}.server-settings__change-status[_ngcontent-%COMP%]{flex:1;min-width:0;display:flex;flex-wrap:wrap;align-items:center;gap:var(--gns3-density-space-2) var(--gns3-density-space-3)}.server-settings__footer-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-3);margin-inline-start:auto}.server-settings__footer-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing)}.server-settings__unsaved-status[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:14px;font-weight:500}.server-settings__footer[_ngcontent-%COMP%] mat-progress-spinner[_ngcontent-%COMP%]{display:inline-block;margin-right:6px}@container settings-pane (max-width: 800px){.server-settings__field--third[_ngcontent-%COMP%], .server-settings__field--two-thirds[_ngcontent-%COMP%]{grid-column:span 3}}@container settings-page (max-width: 800px){.server-settings__header[_ngcontent-%COMP%]{padding:var(--gns3-density-space-5) var(--gns3-density-page-padding) var(--gns3-density-space-3)}.server-settings__layout[_ngcontent-%COMP%]{padding:0 var(--gns3-density-page-padding) var(--gns3-density-space-5);grid-template-columns:minmax(0,1fr);gap:var(--gns3-density-space-3)}.server-settings__categories[_ngcontent-%COMP%]{position:static;padding:var(--gns3-density-space-1);flex-direction:row;overflow-x:auto;border-radius:var(--gns3-density-radius-md);scrollbar-width:thin}.server-settings__category[_ngcontent-%COMP%]{width:auto;min-width:max-content;min-height:var(--gns3-density-control-height)}.server-settings__group-fields[_ngcontent-%COMP%]{padding:var(--gns3-density-space-4) var(--gns3-density-space-4) var(--gns3-density-space-5);grid-template-columns:minmax(0,1fr)}.server-settings__field--half[_ngcontent-%COMP%], .server-settings__field--third[_ngcontent-%COMP%], .server-settings__field--two-thirds[_ngcontent-%COMP%]{grid-column:1/-1}}@container settings-page (max-width: 480px){.server-settings__change-status[_ngcontent-%COMP%], .server-settings__footer-actions[_ngcontent-%COMP%]{flex-basis:100%}.server-settings__footer-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex:1}}@container settings-pane (max-width: 560px){.server-settings__field[_ngcontent-%COMP%]{grid-column:1/-1}}"],changeDetection:0})}return n})();var NRe=n=>["/controller",n,"projects"],FRe=()=>[],RRe=(n,o)=>o.project_id,zRe=(n,o)=>o.compute_id,K$=(n,o)=>o[0];function LRe(n,o){n&1&&(r(0,"div",1),L(1,"mat-progress-spinner",2),r(2,"span"),c(3,"Loading system status\u2026"),l()())}function VRe(n,o){if(n&1&&(r(0,"span",6),c(1),Et(2,"date"),l()),n&2){let e=h(2);m(),X("Updated ",Io(2,1,e.lastUpdated(),"mediumTime"))}}function BRe(n,o){n&1&&L(0,"mat-progress-spinner",8)}function jRe(n,o){n&1&&(r(0,"mat-icon"),c(1,"refresh"),l())}function $Re(n,o){if(n&1){let e=R();r(0,"div",9)(1,"mat-icon"),c(2,"warning"),l(),r(3,"span"),c(4),l(),r(5,"button",36),_("click",function(){y(e);let i=h(2);return w(i.refresh())}),c(6,"Try again"),l()()}if(n&2){let e=h(2);m(4),N(e.statisticsError())}}function HRe(n,o){if(n&1&&(r(0,"div",26)(1,"span",37)(2,"mat-icon"),c(3,"folder"),l(),c(4),l(),r(5,"span",38),c(6),l(),r(7,"span",39),L(8,"span",40),c(9),l()()),n&2){let e=o.$implicit;m(4),N(e.name),m(2),N(e.created_by||"Unknown owner"),m(),ne("project-list__status--open",e.status==="opened")("project-list__status--closed",e.status!=="opened"),m(2),X(" ",e.status==="opened"?"Running":"Stopped"," ")}}function URe(n,o){n&1&&(r(0,"div",27),c(1,"No projects are available to this user."),l())}function WRe(n,o){if(n&1&&(r(0,"article",31)(1,"div",41)(2,"div",42)(3,"mat-icon"),c(4,"memory"),l()(),r(5,"div")(6,"h3"),c(7),l(),r(8,"span"),c(9),l()()(),r(10,"div",43)(11,"div",44)(12,"span"),c(13,"CPU"),l(),r(14,"strong"),c(15),l()(),r(16,"div",45),L(17,"span"),l(),r(18,"small"),c(19),l()(),r(20,"div",46)(21,"div",44)(22,"span"),c(23,"Memory"),l(),r(24,"strong"),c(25),l()(),r(26,"div",45),L(27,"span"),l(),r(28,"small"),c(29),l()(),r(30,"div",47)(31,"div",44)(32,"span"),c(33,"Disk"),l(),r(34,"strong"),c(35),l()(),r(36,"div",45),L(37,"span"),l(),r(38,"small"),c(39),l()(),r(40,"div",48)(41,"div",44)(42,"span"),c(43,"Swap"),l(),r(44,"strong"),c(45),l()(),r(46,"div",45),L(47,"span"),l(),r(48,"small"),c(49),l()(),r(50,"div",49)(51,"span"),c(52),l(),r(53,"strong"),c(54),Et(55,"number"),Et(56,"number"),Et(57,"number"),l()()()),n&2){let e=o.$implicit,t=h(2);m(7),N(e.compute_name),m(2),N(e.compute_id),m(6),X("",e.statistics.cpu_usage_percent,"%"),m(2),Tt("width",t.clampPercentage(e.statistics.cpu_usage_percent),"%"),m(2),N(t.cpuSummary(e.statistics)),m(6),X("",e.statistics.memory_usage_percent,"%"),m(2),Tt("width",t.clampPercentage(e.statistics.memory_usage_percent),"%"),m(2),N(t.memorySummary(e.statistics)),m(6),X("",e.statistics.disk_usage_percent,"%"),m(2),Tt("width",t.clampPercentage(e.statistics.disk_usage_percent),"%"),m(2),N(t.diskSummary(e.statistics)),m(6),X("",e.statistics.swap_usage_percent,"%"),m(2),Tt("width",t.clampPercentage(e.statistics.swap_usage_percent),"%"),m(2),N(t.swapSummary(e.statistics)),m(3),X("",t.hasRawLoadAverage(e.statistics)?"Load average":"CPU load"," (1m / 5m / 15m)"),m(2),uA(" ",Io(55,25,t.loadAverageValues(e.statistics)[0]??0,"1.2-2"),"",t.hasRawLoadAverage(e.statistics)?"":"%"," / ",Io(56,28,t.loadAverageValues(e.statistics)[1]??0,"1.2-2"),"",t.hasRawLoadAverage(e.statistics)?"":"%"," / ",Io(57,31,t.loadAverageValues(e.statistics)[2]??0,"1.2-2"),"",t.hasRawLoadAverage(e.statistics)?"":"%"," ")}}function GRe(n,o){n&1&&(r(0,"div",32),c(1,"No compute telemetry is available."),l())}function qRe(n,o){if(n&1&&(r(0,"div",35)(1,"span"),c(2),l(),r(3,"strong"),c(4),l()()),n&2){let e=o.$implicit,t=h(2);m(2),N(t.formatNodeType(e[0])),m(2),N(e[1])}}function QRe(n,o){n&1&&(r(0,"div",27),c(1,"No node information is available."),l())}function KRe(n,o){if(n&1&&(r(0,"div",35),L(1,"span",50),r(2,"span"),c(3),l(),r(4,"strong"),c(5),l()()),n&2){let e=o.$implicit,t=h(2);m(),Ce("data-status",e[0]),m(2),N(t.formatStatus(e[0])),m(2),N(e[1])}}function XRe(n,o){n&1&&(r(0,"div",27),c(1,"No runtime status is available."),l())}function YRe(n,o){if(n&1){let e=R();r(0,"header",3)(1,"div")(2,"h1",4)(3,"mat-icon"),c(4,"monitor_heart"),l(),c(5," System status "),l()(),r(6,"div",5)(7,"span",6),c(8,"Auto-refresh: 15s"),l(),T(9,VRe,3,4,"span",6),r(10,"button",7),_("click",function(){y(e);let i=h();return w(i.refresh())}),T(11,BRe,1,0,"mat-progress-spinner",8)(12,jRe,2,0,"mat-icon"),c(13," Refresh "),l()()(),T(14,$Re,7,1,"div",9),r(15,"main",10)(16,"section",11)(17,"article",12)(18,"div",13)(19,"mat-icon"),c(20),l()(),r(21,"div")(22,"span",14),c(23,"Controller status"),l(),r(24,"strong"),c(25),l(),r(26,"span",15),c(27),l()()(),r(28,"article",16)(29,"div",13)(30,"mat-icon"),c(31,"folder_open"),l()(),r(32,"div")(33,"span",14),c(34,"Projects"),l(),r(35,"strong"),c(36),l(),r(37,"span",15),c(38),l()()(),r(39,"article",17)(40,"div",13)(41,"mat-icon"),c(42,"device_hub"),l()(),r(43,"div")(44,"span",14),c(45,"Running nodes"),l(),r(46,"strong"),c(47),l(),r(48,"span",15),c(49),l()()(),r(50,"article",18)(51,"div",13)(52,"mat-icon"),c(53,"link"),l()(),r(54,"div")(55,"span",14),c(56,"Links"),l(),r(57,"strong"),c(58),l(),r(59,"span",15),c(60),l()()(),r(61,"article",19)(62,"div",13)(63,"mat-icon"),c(64,"dns"),l()(),r(65,"div")(66,"span",14),c(67,"Computes"),l(),r(68,"strong"),c(69),l(),r(70,"span",15),c(71,"Reporting resources"),l()()()(),r(72,"div",20)(73,"section",21)(74,"div",22)(75,"div")(76,"h2"),c(77,"Server information"),l()(),r(78,"mat-icon"),c(79,"info"),l()(),r(80,"dl",23)(81,"div")(82,"dt"),c(83,"Controller"),l(),r(84,"dd"),c(85),l()(),r(86,"div")(87,"dt"),c(88,"Endpoint"),l(),r(89,"dd"),c(90),l()(),r(91,"div")(92,"dt"),c(93,"GNS3 server"),l(),r(94,"dd"),c(95),l()(),r(96,"div")(97,"dt"),c(98,"Web UI"),l(),r(99,"dd"),c(100),l()(),r(101,"div")(102,"dt"),c(103,"Server uptime"),l(),r(104,"dd"),c(105),l()()()(),r(106,"section",21)(107,"div",22)(108,"div")(109,"h2"),c(110,"Project overview"),l()(),r(111,"a",24),c(112,"View all"),l()(),r(113,"div",25),Q(114,HRe,10,7,"div",26,RRe,!1,URe,2,0,"div",27),l()()(),r(117,"section",28)(118,"div",22)(119,"div")(120,"h2"),c(121,"Compute resources"),l()(),r(122,"span",29),c(123),l()(),r(124,"div",30),Q(125,WRe,58,34,"article",31,zRe,!1,GRe,2,0,"div",32),l()(),r(128,"div",33)(129,"section",21)(130,"div",22)(131,"div")(132,"h2"),c(133,"Nodes by type"),l()(),r(134,"mat-icon"),c(135,"category"),l()(),r(136,"div",34),Q(137,qRe,5,2,"div",35,K$,!1,QRe,2,0,"div",27),l()(),r(140,"section",21)(141,"div",22)(142,"div")(143,"h2"),c(144,"Nodes by status"),l()(),r(145,"mat-icon"),c(146,"fact_check"),l()(),r(147,"div",34),Q(148,KRe,6,3,"div",35,K$,!1,XRe,2,0,"div",27),l()()()()}if(n&2){let e,t,i,a,s,d,p,u,g,C,M,x=h();m(9),E(x.lastUpdated()?9:-1),m(),v("disabled",x.isRefreshing()),m(),E(x.isRefreshing()?11:12),m(3),E(x.statisticsError()?14:-1),m(6),N(x.isControllerOnline()?"check_circle":"error"),m(5),N(x.isControllerOnline()?"Online":"Offline"),m(2),N(((e=x.controller())==null?null:e.name)||"GNS3 Controller"),m(9),N(((t=x.statistics())==null||t.projects==null?null:t.projects.opened)??0),m(2),X("",((i=x.statistics())==null||i.projects==null?null:i.projects.total)??x.projects().length," total"),m(9),N(x.runningNodes()),m(2),X("",((a=x.statistics())==null||a.nodes==null?null:a.nodes.total)??0," total"),m(9),N(((s=x.statistics())==null||s.links==null?null:s.links.total)??0),m(2),X("",((d=x.statistics())==null||d.links==null?null:d.links.capturing)??0," capturing"),m(9),N(((p=x.statistics())==null||p.computes==null?null:p.computes.length)??0),m(16),N(((u=x.controller())==null?null:u.name)||"Unavailable"),m(5),N(x.controllerEndpoint()),m(5),N(x.gns3Version()||"Unavailable"),m(5),N(x.webUiVersion),m(5),N(x.formatUptime((g=x.statistics())==null?null:g.uptime_seconds)),m(6),v("routerLink",tn(25,NRe,x.controllerId())),m(3),K(x.visibleProjects()),m(9),X("",((C=x.statistics())==null||C.computes==null?null:C.computes.length)??0," computes"),m(2),K(((M=x.statistics())==null?null:M.computes)??at(27,FRe)),m(12),K(x.nodeTypeEntries()),m(11),K(x.nodeStatusEntries())}}var Q2=(()=>{class n{route=f($t);controllerService=f(_t);computeService=f(ml);projectService=f(Ti);versionService=f(uh);connectionManager=f(ed);toasterService=f(re);cd=f(oe);controllerId=z(0);controller=z(null);statistics=z(null);projects=z([]);gns3Version=z("");webUiVersion=Op;isLoading=z(!0);isRefreshing=z(!1);statisticsError=z("");lastUpdated=z(null);visibleProjects=Ne(()=>[...this.projects()].sort((e,t)=>e.status!==t.status?e.status==="opened"?-1:1:e.name.localeCompare(t.name)).slice(0,6));runningNodes=Ne(()=>this.statistics()?.nodes?.by_status?.started??0);nodeTypeEntries=Ne(()=>Object.entries(this.statistics()?.nodes?.by_type??{}));nodeStatusEntries=Ne(()=>Object.entries(this.statistics()?.nodes?.by_status??{}));pollingInterval=null;ngOnInit(){let e=Number(this.route.snapshot.paramMap.get("controller_id"));if(this.controllerId.set(e),!Number.isFinite(e)||e<=0){this.isLoading.set(!1),this.statisticsError.set("The selected controller is invalid.");return}this.controllerService.get(e).then(t=>{this.controller.set(t),this.loadSnapshot(!0),this.startPolling()},t=>{this.isLoading.set(!1),this.statisticsError.set("Unable to load the selected controller."),this.toasterService.error(t?.error?.message||t?.message||"Failed to load controller"),this.cd.markForCheck()})}ngOnDestroy(){this.pollingInterval&&(clearInterval(this.pollingInterval),this.pollingInterval=null)}refresh(){this.isRefreshing()||this.loadSnapshot(!1)}isControllerOnline(){let e=this.controller();return!!e&&(this.connectionManager.isConnectedTo(e)||e.status==="running")}controllerEndpoint(){let e=this.controller();return e?`${e.protocol||"http:"}//${e.host}:${e.port}`:"Unavailable"}formatBytes(e,t=1){if(!e)return"0 B";let i=["B","KB","MB","GB","TB"],a=e,s=0;for(;a>=1024&&s<i.length-1;)a/=1024,s++;return`${a.toFixed(s===0?0:t)} ${i[s]}`}formatUptime(e){if(e==null)return"Unavailable";let t=Math.max(0,Math.floor(e)),i=Math.floor(t/86400),a=Math.floor(t%86400/3600),s=Math.floor(t%3600/60),d=t%60;return`${i}d ${a}h ${s}m ${d}s`}formatNodeType(e){return{qemu:"QEMU",dynamips:"Dynamips",iou:"IOL",docker:"Docker",vpcs:"VPCS",virtualbox:"VirtualBox",vmware:"VMware"}[e]||e}formatStatus(e){return{started:"Running",stopped:"Stopped",suspended:"Suspended"}[e]||e}clampPercentage(e){return Math.min(100,Math.max(0,e||0))}memorySummary(e){return`${this.formatBytes(e.memory_used,2)} of ${this.formatBytes(e.memory_total,2)} (${this.formatBytes(e.memory_free,2)} free)`}swapSummary(e){return e.swap_total?`${this.formatBytes(e.swap_used,2)} of ${this.formatBytes(e.swap_total,2)} (${this.formatBytes(e.swap_free,2)} free)`:"Not configured"}diskSummary(e){return e.disk_total?`${this.formatBytes(e.disk_used,2)} of ${this.formatBytes(e.disk_total,2)} (${this.formatBytes(e.disk_free,2)} free)`:"Capacity details unavailable"}cpuSummary(e){let t=e.cpu_count,i=e.cpu_count_physical,a=i?`${i} cores${t&&t!==i?` / ${t} threads`:""}`:t?`${t} logical cores`:"";return[e.cpu_model,a].filter(Boolean).join(" \xB7 ")||"CPU details unavailable"}hasRawLoadAverage(e){return!!e.load_average?.length}loadAverageValues(e){return e.load_average?.length?e.load_average:e.load_average_percent}loadSnapshot(e){let t=this.controller();t&&(this.isRefreshing.set(!0),e&&this.isLoading.set(!0),Ci({statistics:this.computeService.getStatistics(t).pipe(ei(i=>(this.statisticsError.set(i?.error?.message||i?.message||"Statistics are currently unavailable."),Vt(null)))),projects:this.projectService.list(t).pipe(ei(()=>Vt([]))),versionInfo:this.versionService.get(t).pipe(ei(()=>Vt(null)))}).subscribe({next:({statistics:i,projects:a,versionInfo:s})=>{i&&(this.statistics.set(i),this.statisticsError.set("")),this.projects.set(a),this.gns3Version.set(s?.version||""),this.lastUpdated.set(new Date),this.isLoading.set(!1),this.isRefreshing.set(!1),this.cd.markForCheck()},error:()=>{this.isLoading.set(!1),this.isRefreshing.set(!1),this.statisticsError.set("System status could not be refreshed."),this.cd.markForCheck()}}))}startPolling(){this.pollingInterval=setInterval(()=>this.refresh(),15e3)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-system-status"]],decls:3,vars:1,consts:[[1,"system-status"],[1,"system-status__loading"],["diameter","42","mode","indeterminate"],[1,"system-status__header"],[1,"system-status__title"],[1,"system-status__header-actions"],[1,"system-status__updated"],["mat-raised-button","","color","primary","type","button",1,"system-status__refresh",3,"click","disabled"],["diameter","18","mode","indeterminate"],["role","status",1,"system-status__notice"],[1,"system-status__content"],["aria-label","System summary",1,"system-status__metrics"],[1,"metric-card","metric-card--status"],[1,"metric-card__icon"],[1,"metric-card__label"],[1,"metric-card__detail"],[1,"metric-card"],[1,"metric-card","metric-card--nodes"],[1,"metric-card","metric-card--links"],[1,"metric-card","metric-card--computes"],[1,"system-status__overview-grid"],[1,"status-panel"],[1,"status-panel__header"],[1,"system-info"],["mat-button","",3,"routerLink"],[1,"project-list"],[1,"project-list__row"],[1,"system-status__empty"],[1,"status-panel","status-panel--resources"],[1,"status-panel__meta"],[1,"compute-grid"],[1,"compute-card"],[1,"system-status__empty","system-status__empty--wide"],[1,"system-status__breakdown-grid"],[1,"breakdown-list"],[1,"breakdown-list__row"],["mat-button","","type","button",3,"click"],[1,"project-list__name"],[1,"project-list__owner"],[1,"project-list__status"],[1,"project-list__status-dot"],[1,"compute-card__header"],[1,"compute-card__avatar"],[1,"resource-meter"],[1,"resource-meter__label"],[1,"resource-meter__track"],[1,"resource-meter","resource-meter--memory"],[1,"resource-meter","resource-meter--disk"],[1,"resource-meter","resource-meter--swap"],[1,"compute-card__load"],[1,"status-dot"]],template:function(t,i){t&1&&(r(0,"div",0),T(1,LRe,4,0,"div",1)(2,YRe,151,28),l()),t&2&&(m(),E(i.isLoading()?1:2))},dependencies:[fe,vn,Co,Y,he,ie,ce,rt,mt,bA,dm],styles:["[_nghost-%COMP%]{display:block;width:100%}.system-status[_ngcontent-%COMP%]{width:min(1600px,100%);min-height:100%;box-sizing:border-box;margin:0 auto;padding:26px 30px 40px;color:var(--mat-sys-on-surface)}.system-status__loading[_ngcontent-%COMP%]{display:grid;min-height:420px;place-content:center;place-items:center;gap:var(--gns3-density-card-gap);color:var(--mat-sys-on-surface-variant)}.system-status__header[_ngcontent-%COMP%]{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--gns3-density-space-5);margin-bottom:22px}.system-status__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal;display:flex;align-items:center;gap:var(--gns3-density-space-3)}.system-status__title[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:32px;height:32px;color:var(--mat-sys-primary);font-size:32px}.system-status__header-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap)}.system-status__header-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing)}.system-status__header-actions[_ngcontent-%COMP%] mat-progress-spinner[_ngcontent-%COMP%]{display:inline-block;margin-right:8px}.system-status__updated[_ngcontent-%COMP%], .status-panel__meta[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:12px}.system-status__notice[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-3);margin-bottom:18px;padding:10px 14px;border:1px solid var(--mat-sys-error);border-radius:12px;color:var(--mat-sys-on-error-container);background:var(--mat-sys-error-container)}.system-status__notice[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{flex:1}.system-status__content[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-card-gap)}.system-status__metrics[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:var(--gns3-density-card-gap)}.metric-card[_ngcontent-%COMP%], .status-panel[_ngcontent-%COMP%], .compute-card[_ngcontent-%COMP%]{border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 70%,transparent);background:color-mix(in srgb,var(--mat-sys-surface-container-low) 84%,transparent);box-shadow:0 8px 28px color-mix(in srgb,var(--mat-sys-shadow) 10%,transparent)}.metric-card[_ngcontent-%COMP%]{display:flex;align-items:center;min-width:0;gap:var(--gns3-density-card-gap);padding:17px;border-radius:14px}.metric-card__icon[_ngcontent-%COMP%]{display:grid;flex:0 0 48px;width:48px;height:48px;place-items:center;border-radius:14px;color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.metric-card--status[_ngcontent-%COMP%] .metric-card__icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary-container);background:var(--mat-sys-tertiary-container)}.metric-card--nodes[_ngcontent-%COMP%] .metric-card__icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container)}.metric-card--links[_ngcontent-%COMP%] .metric-card__icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary-container);background:var(--mat-sys-tertiary-container)}.metric-card[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:last-child{display:flex;min-width:0;flex-direction:column}.metric-card__label[_ngcontent-%COMP%], .metric-card__detail[_ngcontent-%COMP%]{overflow:hidden;color:var(--mat-sys-on-surface-variant);font-size:12px;text-overflow:ellipsis;white-space:nowrap}.metric-card[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{margin:1px 0;font-size:26px;line-height:1.05}.system-status__overview-grid[_ngcontent-%COMP%], .system-status__breakdown-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--gns3-density-card-gap)}.status-panel[_ngcontent-%COMP%]{min-width:0;overflow:hidden;border-radius:16px}.status-panel__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;min-height:var(--gns3-density-section-header-height);box-sizing:border-box;gap:var(--gns3-density-card-gap);padding:var(--gns3-density-section-header-padding);border-bottom:1px solid var(--mat-sys-outline-variant);color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.status-panel__header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:2px 0 0;font-family:var(--gns3-density-section-header-font);font-size:var(--gns3-density-section-header-title-size);font-weight:650;line-height:1.2;letter-spacing:-.01em}.status-panel__header[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%], .status-panel__header[_ngcontent-%COMP%] > a[_ngcontent-%COMP%], .status-panel__header[_ngcontent-%COMP%] .status-panel__meta[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container)}.system-info[_ngcontent-%COMP%]{margin:0;padding:8px 18px 14px}.system-info[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:grid;grid-template-columns:minmax(120px,.65fr) minmax(0,1.35fr);gap:var(--gns3-density-card-gap);padding:10px 0;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 60%,transparent)}.system-info[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:last-child{border-bottom:0}.system-info[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant)}.system-info[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{min-width:0;margin:0;overflow-wrap:anywhere;font-weight:600;text-align:right}.project-list[_ngcontent-%COMP%]{padding:8px 18px 14px}.project-list__row[_ngcontent-%COMP%]{display:grid;grid-template-columns:minmax(0,1fr) minmax(90px,.55fr) auto;align-items:center;gap:var(--gns3-density-card-gap);min-height:42px;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 60%,transparent)}.project-list__row[_ngcontent-%COMP%]:last-child{border-bottom:0}.project-list__name[_ngcontent-%COMP%]{display:flex;min-width:0;align-items:center;gap:var(--gns3-density-space-2);overflow:hidden;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.project-list__name[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{flex:0 0 auto;width:18px;height:18px;color:var(--mat-sys-primary);font-size:18px}.project-list__owner[_ngcontent-%COMP%]{overflow:hidden;color:var(--mat-sys-on-surface-variant);font-size:12px;text-overflow:ellipsis;white-space:nowrap}.project-list__status[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:var(--gns3-density-space-2);padding:4px 10px;border-radius:20px;font-size:11px;font-weight:700;letter-spacing:.3px}.project-list__status-dot[_ngcontent-%COMP%]{display:inline-block;width:8px;height:8px;border-radius:50%}.project-list__status--open[_ngcontent-%COMP%]{color:var(--mat-sys-primary);background:color-mix(in srgb,var(--mat-sys-primary) 12%,transparent)}.project-list__status--open[_ngcontent-%COMP%] .project-list__status-dot[_ngcontent-%COMP%]{background:var(--mat-sys-primary);box-shadow:0 0 6px color-mix(in srgb,var(--mat-sys-primary) 50%,transparent)}.project-list__status--closed[_ngcontent-%COMP%]{color:var(--mat-sys-error);background:color-mix(in srgb,var(--mat-sys-error) 12%,transparent)}.project-list__status--closed[_ngcontent-%COMP%] .project-list__status-dot[_ngcontent-%COMP%]{background:var(--mat-sys-error);box-shadow:0 0 6px color-mix(in srgb,var(--mat-sys-error) 50%,transparent)}.status-panel--resources[_ngcontent-%COMP%]{padding-bottom:18px}.compute-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:var(--gns3-density-card-gap);padding:var(--gns3-density-card-padding)}.compute-card[_ngcontent-%COMP%]{padding:var(--gns3-density-card-padding);border-radius:14px;background:var(--mat-sys-surface-container);box-shadow:none}.compute-card__header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-3);margin-bottom:var(--gns3-density-card-gap)}.compute-card__avatar[_ngcontent-%COMP%]{display:grid;width:42px;height:42px;place-items:center;border-radius:12px;color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.compute-card[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:16px}.compute-card__header[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:11px}.resource-meter[_ngcontent-%COMP%]{--resource-color: var(--mat-sys-primary);margin-top:12px}.resource-meter--memory[_ngcontent-%COMP%]{--resource-color: var(--mat-sys-secondary)}.resource-meter--disk[_ngcontent-%COMP%]{--resource-color: var(--mat-sys-tertiary)}.resource-meter--swap[_ngcontent-%COMP%]{--resource-color: var(--mat-sys-error)}.resource-meter__label[_ngcontent-%COMP%]{display:flex;justify-content:space-between;margin-bottom:8px;font-size:16px}.resource-meter__track[_ngcontent-%COMP%]{height:16px;overflow:hidden;border-radius:999px;background:var(--mat-sys-surface-container-highest)}.resource-meter__track[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{display:block;height:100%;border-radius:inherit;background:var(--resource-color);transition:width var(--gns3-motion-duration-standard) ease}.resource-meter[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{display:block;margin-top:6px;color:var(--mat-sys-on-surface-variant);font-size:14px}.compute-card__load[_ngcontent-%COMP%]{display:flex;justify-content:space-between;gap:var(--gns3-density-space-3);margin-top:14px;padding-top:12px;border-top:1px solid var(--mat-sys-outline-variant);color:var(--mat-sys-on-surface-variant);font-size:16px}.compute-card__load[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface)}.breakdown-list[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--gns3-density-space-3);padding:var(--gns3-density-card-padding)}.breakdown-list__row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-2);padding:11px 12px;border-radius:10px;background:var(--mat-sys-surface-container);text-transform:capitalize}.breakdown-list__row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{margin-left:auto;color:var(--mat-sys-primary);font-size:18px}.status-dot[_ngcontent-%COMP%]{width:9px;height:9px;border-radius:50%;background:var(--mat-sys-outline)}.status-dot[data-status=started][_ngcontent-%COMP%]{background:var(--custom-mat-sys-success)}.status-dot[data-status=suspended][_ngcontent-%COMP%]{background:var(--mat-sys-secondary)}.status-dot[data-status=stopped][_ngcontent-%COMP%]{background:var(--mat-sys-error)}.system-status__empty[_ngcontent-%COMP%]{padding:22px 0;color:var(--mat-sys-on-surface-variant);font-size:13px;text-align:center}.system-status__empty--wide[_ngcontent-%COMP%]{grid-column:1/-1}@media(max-width:1180px){.system-status__metrics[_ngcontent-%COMP%]{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(max-width:860px){.system-status[_ngcontent-%COMP%]{padding-inline:18px}.system-status__header[_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column}.system-status__overview-grid[_ngcontent-%COMP%], .system-status__breakdown-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}}@media(max-width:640px){.system-status[_ngcontent-%COMP%]{padding:18px 14px 30px}.system-status__header-actions[_ngcontent-%COMP%]{width:100%;justify-content:space-between}.system-status__metrics[_ngcontent-%COMP%]{grid-template-columns:1fr}.project-list__row[_ngcontent-%COMP%]{grid-template-columns:minmax(0,1fr) auto}.project-list__owner[_ngcontent-%COMP%]{display:none}.compute-grid[_ngcontent-%COMP%]{grid-template-columns:1fr;padding:14px}}"],changeDetection:0})}return n})();var X$=Jl(O4());var Y$=Jl(A4());var ZRe=["terminal"],MC=(()=>{class n{controllerId;projectId;nodeId;destroy$=new Ye;controller;node;contextMenuCleanup=null;socket=null;consoleService=f(ga);controllerService=f(_t);route=f($t);title=f(rg);nodeService=f(ft);themeService=f(Ni);contextMenuService=f(u2);cdr=f(oe);xtermService=f(F_);toasterService=f(re);term=new X$.Terminal(q({},this.xtermService.getDefaultTerminalOptions()));fitAddon=new Y$.FitAddon;terminal=ln("terminal");constructor(){}ngOnInit(){this.themeService.themeChanged.pipe(He(this.destroy$)).subscribe(()=>{this.xtermService.updateTerminalTheme(this.term,this.cdr)}),this.controllerService.isServiceInitialized?this.getData():this.controllerService.serviceInitialized.pipe(He(this.destroy$)).subscribe(e=>{e&&this.getData()})}getData(){this.controllerId=this.route.snapshot.paramMap.get("controller_id"),this.projectId=this.route.snapshot.paramMap.get("project_id"),this.nodeId=this.route.snapshot.paramMap.get("node_id"),this.consoleService.consoleResized.pipe(He(this.destroy$)).subscribe(()=>{this.fitAddon.fit()}),this.controllerService.get(+this.controllerId).then(e=>{this.controller=e,this.nodeService.getNodeById(this.controller,this.projectId,this.nodeId).pipe(He(this.destroy$)).subscribe({next:t=>{this.node=t,this.title.setTitle(this.node.name),this.openTerminal()},error:t=>{let i=t.error?.message||t.message||"Failed to load node";this.toasterService.error(i),this.cdr.markForCheck()}})},e=>{let t=e.error?.message||e.message||"Failed to load controller";this.toasterService.error(t),this.cdr.markForCheck()})}openTerminal(){setTimeout(()=>{let e=this.terminal();this.term.open(e.nativeElement),this.xtermService.updateTerminalTheme(this.term,this.cdr),this.socket=new WebSocket(this.consoleService.getUrl(this.controller,this.node)),this.socket.onerror=()=>{console.error("[WebConsoleFullWindow] Socket connection error"),this.term.write(`\r
|
||
\x1B[31mConnection lost. Please check if the node is still running.\x1B[0m\r
|
||
`)},this.socket.onclose=()=>{console.log("[WebConsoleFullWindow] Socket closed"),this.term.write(`\r
|
||
\x1B[33mConnection closed.\x1B[0m\r
|
||
`)},this.socket.onopen=()=>{this.consoleService.sendTerminalSize(this.socket,this.term.cols,this.term.rows)},this.term.onResize(({cols:i,rows:a})=>{this.consoleService.sendTerminalSize(this.socket,i,a)});let t=new m2(this.socket);this.term.loadAddon(t),this.xtermService.initTerminal(this.term,this.fitAddon),this.fitAddon.fit(),this.term.focus(),this.term.attachCustomKeyEventHandler(i=>!((i.code==="KeyC"||i.code==="KeyV")&&i.ctrlKey&&i.shiftKey)),this.xtermService.settingsChanged$.pipe(He(this.destroy$)).subscribe(()=>{this.xtermService.applySettingsToTerminal(this.term,this.fitAddon,this.cdr)}),this.contextMenuCleanup=this.contextMenuService.attachContextMenu(this.term,e.nativeElement)},0)}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete(),this.socket&&(this.socket.close(),this.socket=null),this.contextMenuCleanup&&(this.contextMenuCleanup(),this.contextMenuCleanup=null),this.term&&this.term.dispose()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-web-console-full-window"]],viewQuery:function(t,i){t&1&&Bn(i.terminal,ZRe,5),t&2&&jn()},decls:2,vars:0,consts:[["terminal",""],[1,"terminal",2,"width","100%","height","100%"]],template:function(t,i){t&1&&kr(0,"div",1,0)},dependencies:[fe],styles:["[_nghost-%COMP%]{display:block;width:100vw;height:100vh;overflow:hidden}.terminal[_ngcontent-%COMP%]{width:100%;height:100%}"],changeDetection:0})}return n})();var K2=(()=>{class n{consoleService;dialog;constructor(e,t){this.consoleService=e,this.dialog=t}canDeactivate(){return this.consoleService.openConsoles>0?this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","dialog-small-panel","confirmation-warning-panel"],autoFocus:".cancel-button",data:{title:"Leave project?",message:"Leaving this project will close all open consoles.",confirmButtonText:"Leave project",tone:"warning",icon:"exit_to_app"}}).afterClosed():!0}static \u0275fac=function(t){return new(t||n)(_e(ga),_e(Xe))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Xi=(()=>{class n{controllerService;loginService;router;constructor(e,t,i){this.controllerService=e,this.loginService=t,this.router=i}async canActivate(e,t){let i=e.paramMap.get("controller_id");this.loginService.controller_id=i;let a=await this.controllerService.get(parseInt(i,10));try{await this.loginService.getLoggedUser(a)}catch{}return this.controllerService.get(parseInt(i,10)).then(s=>s?s.authToken&&!s.tokenExpired?!0:(this.router.navigate(["/controller",s.id,"login"],{queryParams:{returnUrl:t.url}}),!1):(this.router.navigate(["/controllers"]),!1))}static \u0275fac=function(t){return new(t||n)(_e(_t),_e(Ol),_e(Ft))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var ba=(()=>{class n{httpController;constructor(e){this.httpController=e}getInformationAboutLoggedUser(e){return this.httpController.get(e,"/access/users/me/")}get(e,t){return this.httpController.get(e,`/access/users/${t}`)}list(e){return this.httpController.get(e,"/access/users")}add(e,t){return this.httpController.post(e,"/access/users",t)}delete(e,t){return this.httpController.delete(e,`/access/users/${t}`)}update(e,t,i){return i?this.httpController.put(e,"/access/users/me",t):this.httpController.put(e,`/access/users/${t.user_id}`,t)}getGroupsByUserId(e,t){return this.httpController.get(e,`/access/users/${t}/groups`)}static \u0275fac=function(t){return new(t||n)(_e(sn))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var Yu=(()=>{class n{controllerService;userService;router;constructor(e,t,i){this.controllerService=e,this.userService=t,this.router=i}async canActivate(e,t){let i=this.findControllerId(e),a=Number.parseInt(i??"",10);if(!Number.isFinite(a))return await this.router.navigate(["/controllers"]),!1;try{let s=await this.controllerService.get(a);return s?(await OC(this.userService.getInformationAboutLoggedUser(s))).is_superadmin?!0:(await this.router.navigate(["/controller",a,"systemstatus"]),!1):(await this.router.navigate(["/controllers"]),!1)}catch{return await this.router.navigate(["/controller",a,"systemstatus"]),!1}}findControllerId(e){let t=e;for(;t;){let i=t.paramMap.get("controller_id");if(i)return i;t=t.parent}return null}static \u0275fac=function(t){return new(t||n)(_e(_t),_e(ba),_e(Ft))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();function X2(n){if(n.get("password").value!==n.get("confirmPassword").value){n.get("confirmPassword").setErrors({confirmPasswordMatch:!0});return}}function JRe(n,o){n&1&&(r(0,"mat-error"),c(1,"Password must be at least 8 characters long and contain at least one digit, one lowercase letter and one uppercase letter."),l())}function eze(n,o){n&1&&(r(0,"mat-error"),c(1,"Password and Confirm password must be the same."),l())}var Q_=(()=>{class n{dialogRef=f(We);userService=f(ba);toasterService=f(re);cd=f(oe);data=f(Wt);user=z(this.data.user);editPasswordForm=new Qo({password:new Ge(null,[Ue.minLength(6),Ue.maxLength(100),Ue.pattern(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$/),Ue.required]),confirmPassword:new Ge(null,[Ue.minLength(6),Ue.maxLength(100),Ue.pattern(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$/),Ue.required])},{validators:[X2]});constructor(){}get passwordForm(){return this.editPasswordForm.controls}onCancel(){this.dialogRef.close()}onPasswordSave(){if(!this.editPasswordForm.valid)return;let e={};e.password=this.editPasswordForm.get("password").value,e.user_id=this.user().user_id,this.userService.update(this.data.controller,e,this.data.self_update).subscribe({next:t=>{this.toasterService.success(`User ${t.username} password updated`),this.editPasswordForm.reset(),this.dialogRef.close(!0),this.cd.markForCheck()},error:t=>{let i=t.error?.message||t.message||"Failed to update password";this.toasterService.error(i),this.cd.markForCheck()}})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-change-user-password"]],decls:19,vars:5,consts:[["mat-dialog-title",""],["mat-dialog-content",""],[1,"gns3-form-stack",3,"formGroup"],["appearance","outline","subscriptSizing","dynamic",1,"form-field"],["matInput","","type","password","formControlName","password","placeholder","Password"],["matInput","","type","password","formControlName","confirmPassword","placeholder","Confirm Password"],["mat-dialog-actions",""],["mat-button","","color","accent",3,"click"],["mat-raised-button","","color","primary","tabindex","2",1,"add-project-button",3,"click","disabled"]],template:function(t,i){if(t&1&&(r(0,"h1",0),c(1),l(),r(2,"div",1)(3,"form",2)(4,"mat-form-field",3)(5,"mat-label"),c(6,"Password"),l(),L(7,"input",4),T(8,JRe,2,0,"mat-error"),l(),r(9,"mat-form-field",3)(10,"mat-label"),c(11,"Confirm Password"),l(),L(12,"input",5),T(13,eze,2,0,"mat-error"),l()()(),r(14,"div",6)(15,"button",7),_("click",function(){return i.onCancel()}),c(16,"Cancel"),l(),r(17,"button",8),_("click",function(){return i.onPasswordSave()}),c(18," Change password "),l()()),t&2){let a;m(),X("Change password for ",(a=i.user())==null?null:a.username),m(2),v("formGroup",i.editPasswordForm),m(5),E(i.passwordForm.password!=null&&i.passwordForm.password.touched&&(i.passwordForm.password!=null&&i.passwordForm.password.errors)?8:-1),m(5),E(i.passwordForm.confirmPassword!=null&&i.passwordForm.confirmPassword.touched&&(i.passwordForm.confirmPassword!=null&&i.passwordForm.confirmPassword.errors)?13:-1),m(4),v("disabled",!i.editPasswordForm.valid)}},dependencies:[fe,It,Ct,At,Nt,vt,Ut,Yt,ke,qe,Qe,bt,Y,he,we,Pe,Ve,Wn,ye,Ee],styles:[".form-field[_ngcontent-%COMP%]{width:100%;margin-bottom:var(--gns3-density-card-gap)}.form-field[_ngcontent-%COMP%]:last-of-type{margin-bottom:0}"],changeDetection:0})}return n})();function tze(n,o){if(n&1&&(r(0,"div",1)(1,"div",5)(2,"span",6),c(3,"Username:"),l(),r(4,"span",7),c(5),l()(),r(6,"div",5)(7,"span",6),c(8,"Full name:"),l(),r(9,"span",7),c(10),l()(),r(11,"div",5)(12,"span",6),c(13,"Email:"),l(),r(14,"span",7),c(15),l()()()),n&2){let e=o;m(5),N(e.username),m(5),N(e.full_name),m(5),N(e.email)}}var J$=(()=>{class n{dialogRef;data;controllerService;userService;toasterService;dialog;user=z(void 0);controller;constructor(e,t,i,a,s,d){this.dialogRef=e,this.data=t,this.controllerService=i,this.userService=a,this.toasterService=s,this.dialog=d}ngOnInit(){this.controllerService.get(this.data.controllerId).then(e=>{this.controller=e,this.userService.getInformationAboutLoggedUser(e).subscribe(t=>{this.user.set(t)})})}close(){this.dialogRef.close()}changePassword(){this.dialog.open(Q_,{panelClass:["base-dialog-panel","change-user-password-dialog-panel","dialog-small-panel"],data:{user:this.user(),controller:this.controller,self_update:!0}})}copyToken(){let e=document.createElement("textarea");e.style.position="fixed",e.style.left="0",e.style.top="0",e.style.opacity="0",e.value=this.controller.authToken,document.body.appendChild(e),e.focus(),e.select(),document.execCommand("copy"),document.body.removeChild(e),this.toasterService.success("Token copied")}static \u0275fac=function(t){return new(t||n)(Mt(We),Mt(Wt),Mt(_t),Mt(ba),Mt(re),Mt(Xe))};static \u0275cmp=V({type:n,selectors:[["app-logged-user"]],decls:11,vars:1,consts:[["mat-dialog-title",""],[1,"logged-user__info"],["align","end",1,"logged-user__actions"],["mat-raised-button","","color","primary",3,"click"],["mat-button","",3,"click"],[1,"logged-user__info-row"],[1,"logged-user__info-label"],[1,"logged-user__info-value"]],template:function(t,i){if(t&1&&(r(0,"h2",0),c(1,"Logged in user info"),l(),r(2,"mat-dialog-content"),T(3,tze,16,3,"div",1),l(),r(4,"mat-dialog-actions",2)(5,"button",3),_("click",function(){return i.changePassword()}),c(6," Change password "),l(),r(7,"button",3),_("click",function(){return i.copyToken()}),c(8," Copy access token "),l(),r(9,"button",4),_("click",function(){return i.close()}),c(10,"Close"),l()()),t&2){let a;m(3),E((a=i.user())?3:-1,a)}},dependencies:[fe,ke,qe,Qe,bt,Y,he,ie],styles:[".logged-user__info[_ngcontent-%COMP%]{padding:8px 0}.logged-user__info-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;padding:10px 0}.logged-user__info-row[_ngcontent-%COMP%]:not(:last-child){border-bottom:1px solid var(--mat-sys-outline-variant)}.logged-user__info-label[_ngcontent-%COMP%]{font-size:14px;font-weight:500;color:var(--mat-sys-on-surface-variant)}.logged-user__info-value[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface)}.logged-user__actions[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:8px}"],changeDetection:0})}return n})();var eH=(()=>{class n{dialogRef=f(We);close(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-model-type-help-dialog"]],decls:269,vars:0,consts:[["mat-dialog-title",""],[1,"help-content"],[1,"compatibility-card"],[1,"status-text"],[1,"status-icon"],[1,"help-section"],[1,"field-item"],[1,"info-card"],[1,"warning-card"],[1,"note"],[1,"strategy-table","mat-elevation-z1"],["align","end"],["mat-raised-button","","color","primary",3,"click"]],template:function(t,i){t&1&&(r(0,"h2",0)(1,"mat-icon"),c(2,"help_outline"),l(),c(3,` Custom Mode Field Documentation
|
||
`),l(),r(4,"mat-dialog-content",1)(5,"mat-card",2)(6,"mat-card-content")(7,"p",3)(8,"mat-icon",4),c(9,"info"),l(),r(10,"strong"),c(11,"OpenAI-Compatible Only:"),l(),c(12," GNS3 currently supports only OpenAI-compatible LLM APIs. Ensure your provider and model use the OpenAI API format (e.g., OpenAI, DeepSeek, OpenRouter, Ollama with OpenAI compatibility). "),l()()(),r(13,"div",5)(14,"h3"),c(15,"Basic Configuration"),l(),r(16,"div",6)(17,"h4"),c(18,"Configuration Name"),l(),r(19,"p"),c(20,"A unique identifier for this LLM model configuration."),l(),r(21,"ul")(22,"li")(23,"strong"),c(24,"Format:"),l(),c(25," 1-100 characters"),l(),r(26,"li")(27,"strong"),c(28,"Allowed characters:"),l(),c(29," Letters, numbers, underscores, and hyphens"),l(),r(30,"li")(31,"strong"),c(32,"Example:"),l(),r(33,"code"),c(34,"gpt-4o-config"),l(),c(35,", "),r(36,"code"),c(37,"claude-3-5-sonnet"),l()()()(),r(38,"div",6)(39,"h4"),c(40,"Model Type"),l(),r(41,"p"),c(42,"The category of AI model for this configuration."),l(),r(43,"mat-card",7)(44,"mat-card-content")(45,"p",3)(46,"mat-icon",4),c(47,"info"),l(),c(48," Currently fixed to "),r(49,"strong"),c(50,"text"),l(),c(51,". This field is reserved for future use when additional model types become supported. "),l()()()()(),r(52,"div",5)(53,"h3"),c(54,"API Configuration"),l(),r(55,"div",6)(56,"h4"),c(57,"Model Provider"),l(),r(58,"p"),c(59,"The LLM provider identifier for API communication."),l(),r(60,"p"),c(61," Enter the provider that matches your API endpoint. Common values include "),r(62,"code"),c(63,"openai"),l(),c(64,", "),r(65,"code"),c(66,"anthropic"),l(),c(67,", "),r(68,"code"),c(69,"ollama"),l(),c(70,", "),r(71,"code"),c(72,"deepseek"),l(),c(73,". "),l(),r(74,"p"),c(75,"For OpenAI-compatible APIs, use "),r(76,"code"),c(77,"openai"),l(),c(78," as the provider and customize the Base URL."),l()(),r(79,"div",6)(80,"h4"),c(81,"Base URL"),l(),r(82,"p"),c(83,"The API endpoint URL for the provider."),l(),r(84,"ul")(85,"li"),c(86,"Enter the full URL of the API endpoint"),l(),r(87,"li")(88,"strong"),c(89,"Examples:"),l(),r(90,"code"),c(91,"https://api.openai.com/v1"),l(),c(92,", "),r(93,"code"),c(94,"http://localhost:11434/v1"),l()()()(),r(95,"div",6)(96,"h4"),c(97,"Model Name"),l(),r(98,"p"),c(99,"The specific model to use."),l(),r(100,"p"),c(101,"Enter the model identifier exactly as required by the provider's API."),l(),r(102,"p")(103,"strong"),c(104,"Examples:"),l(),r(105,"code"),c(106,"gpt-4o"),l(),c(107,", "),r(108,"code"),c(109,"claude-sonnet-4"),l(),c(110,", "),r(111,"code"),c(112,"deepseek-v4-pro"),l(),c(113,", "),r(114,"code"),c(115,"llama-3-70b"),l()()(),r(116,"div",6)(117,"h4"),c(118,"API Key"),l(),r(119,"p"),c(120,"Your authentication key for accessing the API."),l(),r(121,"ul")(122,"li")(123,"strong"),c(124,"Create mode:"),l(),c(125," Required field, minimum 10 characters"),l(),r(126,"li")(127,"strong"),c(128,"Edit mode:"),l(),c(129," Leave empty to keep existing key"),l()(),r(130,"mat-card",8)(131,"mat-card-content")(132,"p",3)(133,"mat-icon",4),c(134,"lock"),l(),c(135," API keys are encrypted on the server for security. "),l()()()()(),r(136,"div",5)(137,"h3"),c(138,"Model Parameters"),l(),r(139,"div",6)(140,"h4"),c(141,"Temperature"),l(),r(142,"p"),c(143,"Controls the randomness of the model's responses."),l(),r(144,"ul")(145,"li")(146,"strong"),c(147,"Range:"),l(),c(148," 0.0 to 2.0"),l(),r(149,"li")(150,"strong"),c(151,"Lower values (0.0-0.3):"),l(),c(152," More focused, deterministic output"),l(),r(153,"li")(154,"strong"),c(155,"Higher values (0.7-2.0):"),l(),c(156," More creative, diverse output"),l(),r(157,"li")(158,"strong"),c(159,"Recommended:"),l(),c(160," 0.3 for technical tasks, 0.7 for creative tasks"),l()()(),r(161,"div",6)(162,"h4"),c(163,"Context Limit"),l(),r(164,"p"),c(165,"The maximum context window size in thousands (K) of tokens."),l(),r(166,"ul")(167,"li")(168,"strong"),c(169,"Range:"),l(),c(170," 1 to 10000"),l(),r(171,"li")(172,"strong"),c(173,"Unit:"),l(),c(174," K tokens (e.g., 128 = 128K tokens)"),l(),r(175,"li")(176,"strong"),c(177,"Meaning:"),l(),c(178," Maximum amount of text the model can consider"),l()(),r(179,"p",9),c(180,"Different models have different context limits. Check your model's documentation."),l()(),r(181,"div",6)(182,"h4"),c(183,"Context Strategy"),l(),r(184,"p"),c(185,"Determines how aggressively the system uses the available context limit."),l(),r(186,"table",10)(187,"thead")(188,"tr")(189,"th"),c(190,"Strategy"),l(),r(191,"th"),c(192,"Usage"),l()()(),r(193,"tbody")(194,"tr")(195,"td")(196,"strong"),c(197,"Conservative"),l()(),r(198,"td"),c(199,"60% of context limit (safer, more reserved)"),l()(),r(200,"tr")(201,"td")(202,"strong"),c(203,"Balanced"),l()(),r(204,"td"),c(205,"75% of context limit (recommended)"),l()(),r(206,"tr")(207,"td")(208,"strong"),c(209,"Aggressive"),l()(),r(210,"td"),c(211,"85% of context limit (maximizes capacity)"),l()()()()(),r(212,"div",6)(213,"h4"),c(214,"Copilot Mode"),l(),r(215,"p"),c(216,"Determines the AI assistant's operational permissions within GNS3."),l(),r(217,"table",10)(218,"thead")(219,"tr")(220,"th"),c(221,"Mode"),l(),r(222,"th"),c(223,"Capabilities"),l()()(),r(224,"tbody")(225,"tr")(226,"td")(227,"strong"),c(228,"Teaching Assistant"),l()(),r(229,"td"),c(230,"Diagnostics and suggestions only (read-only)"),l()(),r(231,"tr")(232,"td")(233,"strong"),c(234,"Lab Automation Assistant"),l()(),r(235,"td"),c(236,"Full configuration access (can modify settings)"),l()()()()()(),r(237,"div",5)(238,"h3"),c(239,"Advanced Parameters (Optional)"),l(),r(240,"p"),c(241,"Add custom parameters to pass additional options to the API."),l(),r(242,"ul")(243,"li")(244,"strong"),c(245,"Key:"),l(),c(246," Parameter name (e.g., "),r(247,"code"),c(248,"max_tokens"),l(),c(249,")"),l(),r(250,"li")(251,"strong"),c(252,"Value:"),l(),c(253," Parameter value (e.g., "),r(254,"code"),c(255,"4096"),l(),c(256,")"),l()(),r(257,"p",9),c(258,"This field is reserved for future use. Additional parameters may be supported in later versions."),l()(),r(259,"div",5)(260,"h3"),c(261,"Default Configuration"),l(),r(262,"p"),c(263,"When enabled, this configuration will be used as the default for AI Chat and other AI-powered features."),l(),r(264,"p"),c(265,"Only one configuration can be set as default at a time."),l()()(),r(266,"mat-dialog-actions",11)(267,"button",12),_("click",function(){return i.close()}),c(268,"Got it"),l()())},dependencies:[ke,qe,Qe,bt,Y,he,ie,ce,hn,Zn,Tl],styles:["[_nghost-%COMP%]{display:block}mat-dialog-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px}mat-dialog-title[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:24px;width:24px;height:24px}.help-content[_ngcontent-%COMP%]{max-width:700px;max-height:60vh;overflow-y:auto}.help-content[_ngcontent-%COMP%] .compatibility-card[_ngcontent-%COMP%]{margin:0 0 var(--gns3-density-card-gap) 0;border-radius:8px;background:var(--mat-sys-primary-container);border:1px solid var(--mat-sys-primary)}.help-content[_ngcontent-%COMP%] .compatibility-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%]{padding:12px 16px}.help-content[_ngcontent-%COMP%] .compatibility-card[_ngcontent-%COMP%] .status-text[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:var(--gns3-density-space-3);margin:0;font-size:14px;line-height:1.6;color:var(--mat-sys-on-primary-container)}.help-content[_ngcontent-%COMP%] .compatibility-card[_ngcontent-%COMP%] .status-text[_ngcontent-%COMP%] .status-icon[_ngcontent-%COMP%]{flex-shrink:0;margin-top:2px;color:var(--mat-sys-primary)}.help-content[_ngcontent-%COMP%] .help-section[_ngcontent-%COMP%]{margin-bottom:32px}.help-content[_ngcontent-%COMP%] .help-section[_ngcontent-%COMP%]:last-child{margin-bottom:0}.help-content[_ngcontent-%COMP%] .help-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:18px;font-weight:600;margin:0 0 20px;padding-bottom:8px;color:var(--mat-sys-on-surface);border-bottom:1px solid var(--mat-sys-outline-variant)}.help-content[_ngcontent-%COMP%] .help-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{font-size:16px;font-weight:600;margin:16px 0 8px;color:var(--mat-sys-on-surface)}.help-content[_ngcontent-%COMP%] .help-section[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{font-size:14px;line-height:1.6;margin:8px 0;color:var(--mat-sys-on-surface-variant)}.help-content[_ngcontent-%COMP%] .help-section[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-weight:500;color:var(--mat-sys-on-surface)}.help-content[_ngcontent-%COMP%] .help-section[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{font-family:var(--gns3-font-code);font-size:13px;background:var(--mat-sys-surface-container-high);color:var(--mat-sys-on-surface);padding:2px 6px;border-radius:4px}.help-content[_ngcontent-%COMP%] .help-section[_ngcontent-%COMP%] ul[_ngcontent-%COMP%]{margin:8px 0;padding-left:24px}.help-content[_ngcontent-%COMP%] .help-section[_ngcontent-%COMP%] ul[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{font-size:14px;line-height:1.6;margin:4px 0;color:var(--mat-sys-on-surface-variant)}.help-content[_ngcontent-%COMP%] .help-section[_ngcontent-%COMP%] .note[_ngcontent-%COMP%]{display:block;margin-top:12px;padding:12px;background:var(--mat-sys-surface-container);border-radius:8px;font-size:13px;color:var(--mat-sys-on-surface-variant)}.help-content[_ngcontent-%COMP%] .help-section[_ngcontent-%COMP%] .info-card[_ngcontent-%COMP%], .help-content[_ngcontent-%COMP%] .help-section[_ngcontent-%COMP%] .warning-card[_ngcontent-%COMP%]{margin:12px 0;border-radius:8px;background:var(--mat-sys-surface-container)}.help-content[_ngcontent-%COMP%] .help-section[_ngcontent-%COMP%] .info-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%], .help-content[_ngcontent-%COMP%] .help-section[_ngcontent-%COMP%] .warning-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%]{padding:12px 16px}.help-content[_ngcontent-%COMP%] .help-section[_ngcontent-%COMP%] .info-card[_ngcontent-%COMP%] .status-text[_ngcontent-%COMP%], .help-content[_ngcontent-%COMP%] .help-section[_ngcontent-%COMP%] .warning-card[_ngcontent-%COMP%] .status-text[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:var(--gns3-density-space-3);margin:0;font-size:14px;line-height:1.6;color:var(--mat-sys-on-surface-variant)}.help-content[_ngcontent-%COMP%] .help-section[_ngcontent-%COMP%] .info-card[_ngcontent-%COMP%] .status-text[_ngcontent-%COMP%] .status-icon[_ngcontent-%COMP%], .help-content[_ngcontent-%COMP%] .help-section[_ngcontent-%COMP%] .warning-card[_ngcontent-%COMP%] .status-text[_ngcontent-%COMP%] .status-icon[_ngcontent-%COMP%]{flex-shrink:0;margin-top:2px}.help-content[_ngcontent-%COMP%] .help-section[_ngcontent-%COMP%] .field-item[_ngcontent-%COMP%]{margin-bottom:var(--gns3-density-card-gap)}.help-content[_ngcontent-%COMP%] .help-section[_ngcontent-%COMP%] .field-item[_ngcontent-%COMP%]:last-child{margin-bottom:0}.help-content[_ngcontent-%COMP%] .help-section[_ngcontent-%COMP%] .strategy-table[_ngcontent-%COMP%]{width:100%;border-collapse:collapse;margin:12px 0}.help-content[_ngcontent-%COMP%] .help-section[_ngcontent-%COMP%] .strategy-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{text-align:left;padding:10px 12px;font-size:14px;font-weight:500;color:var(--mat-sys-on-surface);border-bottom:2px solid var(--mat-sys-outline)}.help-content[_ngcontent-%COMP%] .help-section[_ngcontent-%COMP%] .strategy-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]{border-bottom:1px solid var(--mat-sys-outline-variant)}.help-content[_ngcontent-%COMP%] .help-section[_ngcontent-%COMP%] .strategy-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child{border-bottom:none}.help-content[_ngcontent-%COMP%] .help-section[_ngcontent-%COMP%] .strategy-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:10px 12px;font-size:14px;color:var(--mat-sys-on-surface-variant)}.help-content[_ngcontent-%COMP%] .help-section[_ngcontent-%COMP%] .strategy-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] td[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-weight:500}"],changeDetection:0})}return n})();var nze=(n,o)=>o.id,U4=(n,o)=>o.value;function ize(n,o){if(n&1&&(r(0,"mat-error"),c(1),l()),n&2){let e=h(2);m(),N(e.getErrorMessage("name"))}}function oze(n,o){if(n&1&&(r(0,"mat-option",16),c(1),l()),n&2){let e=o.$implicit;v("value",e.id),m(),X(" ",e.label," ")}}function aze(n,o){if(n&1&&(r(0,"mat-option",16),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function rze(n,o){if(n&1){let e=R();r(0,"mat-form-field",13)(1,"mat-label"),c(2,"Model Name"),l(),r(3,"mat-select",15),_("selectionChange",function(i){y(e);let a=h(2);return w(a.onModelChange(i.value))}),Q(4,aze,2,2,"mat-option",16,Oe),l(),r(6,"mat-hint"),c(7,"Select a model from the list"),l()()}if(n&2){let e,t=h(2);m(3),v("value",(e=t.form.get("model"))==null?null:e.value),m(),K(t.selectedPreset.models)}}function sze(n,o){n&1&&(r(0,"mat-error"),c(1,"Model name is required"),l())}function lze(n,o){if(n&1&&(r(0,"mat-form-field",13)(1,"mat-label"),c(2,"Model Name"),l(),L(3,"input",24),T(4,sze,2,0,"mat-error"),r(5,"mat-hint"),c(6,"Enter your model name (e.g., gpt-4o, claude-3-5-sonnet-20241022)"),l()()),n&2){let e,t=h(2);m(4),E((e=t.form.get("model"))!=null&&e.value?-1:4)}}function cze(n,o){if(n&1&&(r(0,"mat-error"),c(1),l()),n&2){let e=h(2);m(),N(e.getErrorMessage("api_key"))}}function dze(n,o){n&1&&(r(0,"span",18),c(1,"A saved API key exists for this configuration. Leave empty to keep it, or enter a new key to update."),l())}function mze(n,o){n&1&&(r(0,"span"),c(1,"API key will be encrypted on the server. Minimum length: 10 characters"),l())}function pze(n,o){if(n&1&&(r(0,"mat-option",16),c(1),l()),n&2){let e=o.$implicit;v("value",e.value),m(),X(" ",e.label," ")}}function uze(n,o){if(n&1){let e=R();r(0,"div",7)(1,"div",12)(2,"h3"),c(3,"Quick Setup"),l()(),r(4,"mat-form-field",13)(5,"mat-label"),c(6,"Configuration Name"),l(),L(7,"input",14),T(8,ize,2,1,"mat-error"),r(9,"mat-hint"),c(10,"A name to identify this configuration"),l()(),r(11,"mat-form-field",13)(12,"mat-label"),c(13,"Select LLM Provider"),l(),r(14,"mat-select",15),_("selectionChange",function(i){y(e);let a=h();return w(a.onPresetChange(i.value))}),Q(15,oze,2,2,"mat-option",16,nze),l(),r(17,"mat-hint"),c(18,"Select a preset to auto-configure"),l()(),T(19,rze,8,1,"mat-form-field",13),T(20,lze,7,1,"mat-form-field",13),r(21,"mat-form-field",13)(22,"mat-label"),c(23,"API Key"),l(),L(24,"input",17),T(25,cze,2,1,"mat-error"),r(26,"mat-hint"),T(27,dze,2,0,"span",18),T(28,mze,2,0,"span"),l()(),r(29,"mat-form-field",13)(30,"mat-label"),c(31,"Copilot Mode"),l(),r(32,"mat-select",19),Q(33,pze,2,2,"mat-option",16,U4),l(),r(35,"mat-hint"),c(36),l()(),r(37,"div",20)(38,"mat-icon",21),c(39,"info"),l(),r(40,"p")(41,"strong"),c(42,"Teaching Assistant:"),l(),c(43," Diagnostics and suggestions only. "),r(44,"strong"),c(45,"Lab Automation Assistant:"),l(),c(46," Full configuration access. "),l()(),r(47,"div",22)(48,"mat-checkbox",23),c(49," Set as default configuration "),l()()()}if(n&2){let e=h();m(8),E(e.hasError("name")?8:-1),m(6),v("value",e.selectedPresetId),m(),K(e.basicModePresets),m(4),E(e.selectedPreset&&e.selectedPresetId!=="custom"&&!e.useCustomModel?19:-1),m(),E(e.selectedPresetId==="custom"||e.useCustomModel?20:-1),m(4),v("placeholder",e.mode==="edit"?"Leave empty to keep existing key":""),m(),E(e.hasError("api_key")?25:-1),m(2),E(e.mode==="edit"?27:-1),m(),E(e.mode==="create"?28:-1),m(5),K(e.copilotModes),m(3),N(e.getCopilotModeDescription())}}function gze(n,o){if(n&1&&(r(0,"mat-error"),c(1),l()),n&2){let e=h(2);m(),N(e.getErrorMessage("name"))}}function hze(n,o){if(n&1&&(r(0,"mat-error"),c(1),l()),n&2){let e=h(2);m(),N(e.getErrorMessage("api_key"))}}function _ze(n,o){n&1&&(r(0,"mat-error"),c(1,"Model name is required"),l())}function fze(n,o){if(n&1&&(r(0,"mat-error"),c(1),l()),n&2){let e=h(2);m(),N(e.getErrorMessage("temperature"))}}function vze(n,o){if(n&1&&(r(0,"mat-error"),c(1),l()),n&2){let e=h(2);m(),N(e.getErrorMessage("context_limit"))}}function Cze(n,o){if(n&1&&(r(0,"mat-option",16),c(1),l()),n&2){let e=o.$implicit;v("value",e.value),m(),X(" ",e.label," ")}}function bze(n,o){if(n&1&&(r(0,"mat-option",16),c(1),l()),n&2){let e=o.$implicit;v("value",e.value),m(),X(" ",e.label," ")}}function xze(n,o){if(n&1){let e=R();r(0,"div",41)(1,"mat-form-field",42)(2,"mat-label"),c(3,"Key"),l(),L(4,"input",43),l(),r(5,"mat-form-field",44)(6,"mat-label"),c(7,"Value"),l(),L(8,"input",45),l(),r(9,"button",46),_("click",function(){let i=y(e).$index,a=h(3);return w(a.removeCustomField(i))}),r(10,"mat-icon"),c(11,"delete"),l()()()}if(n&2){let e=o.$index;v("formGroupName",e)}}function yze(n,o){if(n&1&&(r(0,"div",39),Q(1,xze,12,1,"div",41,ni),l()),n&2){let e=h(2);v("formGroup",e.form),m(),K(e.customFieldsArray.controls)}}function wze(n,o){n&1&&(r(0,"div",40)(1,"mat-icon",47),c(2,"info"),l(),r(3,"p"),c(4,"No custom fields"),l()())}function Mze(n,o){if(n&1){let e=R();r(0,"div",8)(1,"div",25)(2,"h3"),c(3,"Custom Mode Configuration"),l(),r(4,"button",10),_("click",function(){y(e);let i=h();return w(i.openCustomModeHelp())}),r(5,"mat-icon",26),c(6,"help_outline"),l(),r(7,"span"),c(8,"Field Documentation"),l()()(),r(9,"div",12)(10,"h4"),c(11,"Basic Configuration"),l()(),r(12,"mat-form-field",13)(13,"mat-label"),c(14,"Configuration Name"),l(),L(15,"input",27),T(16,gze,2,1,"mat-error"),l(),r(17,"mat-form-field",13)(18,"mat-label"),c(19,"Model Type"),l(),L(20,"input",28),l(),r(21,"div",12)(22,"h4"),c(23,"API Configuration"),l()(),r(24,"mat-form-field",13)(25,"mat-label"),c(26,"Model Provider"),l(),L(27,"input",29),r(28,"mat-error"),c(29,"Provider is required"),l()(),r(30,"mat-form-field",13)(31,"mat-label"),c(32,"Base URL"),l(),L(33,"input",30),l(),r(34,"mat-form-field",13)(35,"mat-label"),c(36,"API Key"),l(),L(37,"input",17),T(38,hze,2,1,"mat-error"),l(),r(39,"mat-form-field",13)(40,"mat-label"),c(41,"Model Name"),l(),L(42,"input",31),T(43,_ze,2,0,"mat-error"),l(),r(44,"div",12)(45,"h4"),c(46,"Model Parameters"),l()(),r(47,"div",32)(48,"mat-form-field",33)(49,"mat-label"),c(50,"Temperature"),l(),L(51,"input",34),T(52,fze,2,1,"mat-error"),l(),r(53,"mat-form-field",33)(54,"mat-label"),c(55,"Context Limit"),l(),L(56,"input",35),T(57,vze,2,1,"mat-error"),l()(),r(58,"div",32)(59,"mat-form-field",33)(60,"mat-label"),c(61,"Context Strategy"),l(),r(62,"mat-select",36),Q(63,Cze,2,2,"mat-option",16,U4),l()(),r(65,"mat-form-field",33)(66,"mat-label"),c(67,"Copilot Mode"),l(),r(68,"mat-select",19),Q(69,bze,2,2,"mat-option",16,U4),l()()(),r(71,"div",22)(72,"mat-checkbox",23),c(73," Set as default configuration "),l()(),r(74,"div",37)(75,"div",12)(76,"h4"),c(77,"Advanced Parameters (Optional)"),l(),r(78,"button",38),_("click",function(){y(e);let i=h();return w(i.addCustomField())}),r(79,"mat-icon"),c(80,"add_circle"),l()()(),T(81,yze,3,1,"div",39)(82,wze,5,0,"div",40),l()()}if(n&2){let e,t=h();m(16),E(t.hasError("name")?16:-1),m(21),v("placeholder",t.mode==="edit"?"Leave empty to keep existing key":""),m(),E(t.hasError("api_key")?38:-1),m(5),E((e=t.form.get("model"))!=null&&e.value?-1:43),m(9),E(t.hasError("temperature")?52:-1),m(5),E(t.hasError("context_limit")?57:-1),m(6),K(t.contextStrategies),m(6),K(t.copilotModes),m(12),E(t.customFieldsArray.length>0?81:82)}}var Sze=[{id:"custom",label:"Custom (User Defined)",provider:"openai",baseUrl:"",models:[],defaultTemperature:.3},{id:"openrouter",label:"OpenRouter",provider:"openai",baseUrl:"https://openrouter.ai/api/v1",models:["deepseek/deepseek-v3.2","x-ai/grok-3","anthropic/claude-sonnet-4","z-ai/glm-4.7","openai/gpt-4o","google/gemini-2.5-flash"],defaultTemperature:.3,modelContextLimits:{"deepseek/deepseek-v3.2":128,"x-ai/grok-3":128,"anthropic/claude-sonnet-4":200,"z-ai/glm-4.7":200,"openai/gpt-4o":128,"google/gemini-2.5-flash":1e3}},{id:"deepseek",label:"DeepSeek",provider:"deepseek",baseUrl:"https://api.deepseek.com/v1",models:["deepseek-v4-flash","deepseek-v4-pro"],defaultTemperature:.3,modelContextLimits:{"deepseek-v4-flash":1e3,"deepseek-v4-pro":1e3}}],kze=[{value:"text",label:"Text",description:"Text generation models"},{value:"vision",label:"Vision",description:"Image understanding models"},{value:"stt",label:"STT",description:"Speech-to-Text models"},{value:"tts",label:"TTS",description:"Text-to-Speech models"},{value:"multimodal",label:"Multimodal",description:"Multiple input types"},{value:"embedding",label:"Embedding",description:"Text embedding models"},{value:"reranking",label:"Reranking",description:"Reranking models"},{value:"other",label:"Other",description:"Other model types"}],Pze=[{value:"conservative",label:"Conservative",description:"60% of context limit"},{value:"balanced",label:"Balanced",description:"75% of context limit (default)"},{value:"aggressive",label:"Aggressive",description:"85% of context limit"}],Tze=[{value:"teaching_assistant",label:"Teaching Assistant",description:"Diagnostics only"},{value:"lab_automation_assistant",label:"Lab Automation Assistant",description:"Full configuration access"}],Eze=["name","model_type","provider","model","api_key","base_url","temperature","context_limit","context_strategy","copilot_mode","is_default"],Ip=(()=>{class n{fb;dialogRef;dialog;cd;data;form;mode;existingNames;customFieldsArray;configMode="basic";providerPresets=Sze;selectedPresetId="custom";selectedPreset=null;useCustomModel=!1;get basicModePresets(){return this.providerPresets.filter(e=>e.id!=="custom")}modelTypes=kze;contextStrategies=Pze;copilotModes=Tze;get isPresetSelected(){return this.selectedPresetId!=="custom"&&this.selectedPreset!==null}constructor(e,t,i,a,s){this.fb=e,this.dialogRef=t,this.dialog=i,this.cd=a,this.data=s,this.mode=s.mode,this.existingNames=s.existingNames,this.form=this.createForm()}ngOnInit(){if(this.mode==="edit"&&this.data.config){let e=this.data.config,t=this.form.get("api_key");t&&(t.clearValidators(),t.setValidators([Ue.minLength(10)]),t.updateValueAndValidity()),this.form.patchValue({name:e.name,model_type:e.model_type,provider:e.config.provider,model:e.config.model,api_key:"",base_url:e.config.base_url,temperature:e.config.temperature,context_limit:e.config.context_limit,context_strategy:e.config.context_strategy||"balanced",copilot_mode:e.config.copilot_mode||"teaching_assistant",is_default:e.is_default});let i=Object.entries(e.config).filter(([a])=>!Eze.includes(a)&&a!=="max_tokens");for(;this.customFieldsArray.length!==0;)this.customFieldsArray.removeAt(0);i.forEach(([a,s])=>{this.customFieldsArray.push(this.fb.group({key:[a],value:[String(s)]}))}),this.detectPresetFromConfig(),this.cd.markForCheck()}}createForm(){return this.customFieldsArray=this.fb.array([]),this.fb.group({name:["",[Ue.required,Ue.minLength(1),Ue.maxLength(100),Ue.pattern(/^[a-zA-Z0-9_-]+$/),this.duplicateNameValidator()]],model_type:["text",Ue.required],provider:["",Ue.required],model:["",Ue.required],api_key:["",[Ue.required,Ue.minLength(10)]],base_url:[""],temperature:[.7,[Ue.min(0),Ue.max(2)]],context_limit:[128,[Ue.required,Ue.min(1),Ue.max(1e4)]],context_strategy:["balanced"],copilot_mode:["teaching_assistant"],is_default:[!1],customFields:this.customFieldsArray})}duplicateNameValidator(){return e=>{let t=e.value;return t&&this.existingNames.includes(t)?{duplicateName:!0}:null}}detectPresetFromConfig(){let e=this.form.get("provider")?.value,t=this.form.get("base_url")?.value,i=this.providerPresets.find(a=>a.id!=="custom"&&a.provider===e&&a.baseUrl===t);i?(this.selectedPresetId=i.id,this.selectedPreset=i,this.setPresetMode(!0),i.models.includes(this.form.get("model")?.value)||(this.useCustomModel=!0)):(this.selectedPresetId="custom",this.selectedPreset=null,this.setPresetMode(!1))}onPresetChange(e){if(this.selectedPresetId=e,this.selectedPreset=this.providerPresets.find(t=>t.id===e)||null,this.selectedPreset&&e!=="custom"){if(this.form.get("provider")?.setValue(this.selectedPreset.provider),this.form.get("base_url")?.setValue(this.selectedPreset.baseUrl),this.selectedPreset.models.length>0){let t=this.selectedPreset.models[0];this.form.get("model")?.setValue(t),this.useCustomModel=!1,this.selectedPreset.modelContextLimits&&this.selectedPreset.modelContextLimits[t]&&this.form.get("context_limit")?.setValue(this.selectedPreset.modelContextLimits[t])}this.selectedPreset.defaultTemperature!==void 0&&this.form.get("temperature")?.setValue(this.selectedPreset.defaultTemperature),this.setPresetMode(!0)}else this.setPresetMode(!1)}setPresetMode(e){e?(this.form.get("provider")?.disable(),this.form.get("base_url")?.disable()):(this.form.get("provider")?.enable(),this.form.get("base_url")?.enable())}onModelChange(e){e==="__custom__"?(this.useCustomModel=!0,this.form.get("model")?.setValue("")):(this.useCustomModel=!1,this.form.get("model")?.setValue(e),this.selectedPreset&&this.selectedPreset.modelContextLimits&&this.selectedPreset.modelContextLimits[e]&&this.form.get("context_limit")?.setValue(this.selectedPreset.modelContextLimits[e]))}getErrorMessage(e){let t=this.form.get(e);if(!t||!t.errors)return"";let i=t.errors;return e==="name"?i.required?"Name is required":i.minlength?"Name must be at least 1 character":i.maxlength?"Name cannot exceed 100 characters":i.pattern?"Name can only contain letters, numbers, underscores and hyphens":i.duplicateName?"Name already exists":"Invalid name format":e==="api_key"?i.required?"API Key is required":i.minlength?"API Key is too short (minimum 10 characters)":"Invalid API Key format":e==="temperature"?i.min?"Temperature cannot be less than 0":i.max?"Temperature cannot be greater than 2":"Invalid temperature value":e==="context_limit"?i.required?"Context limit is required":i.min?"Context limit must be at least 1K":i.max?"Context limit cannot exceed 10000K":"Invalid context limit":i.required?"This field is required":"Invalid format"}hasError(e){let t=this.form.get(e);return t?t.invalid&&(t.dirty||t.touched):!1}getContextStrategyDescription(){let e=this.form.get("context_strategy")?.value,t=this.contextStrategies.find(i=>i.value===e);return t?t.description:""}getCopilotModeDescription(){let e=this.form.get("copilot_mode")?.value,t=this.copilotModes.find(i=>i.value===e);return t?t.description:""}addCustomField(){this.customFieldsArray.push(this.fb.group({key:[""],value:[""]}))}removeCustomField(e){this.customFieldsArray.removeAt(e)}getCustomFieldsControls(){return this.customFieldsArray.controls}onSubmit(){if(this.form.invalid){this.form.markAllAsTouched();return}let e=this.form.getRawValue(),t={name:e.name,model_type:e.model_type,provider:e.provider,base_url:e.base_url||"",model:e.model,temperature:parseFloat(e.temperature),context_limit:parseInt(e.context_limit,10),context_strategy:e.context_strategy,copilot_mode:e.copilot_mode,is_default:e.is_default||!1};e.api_key&&e.api_key.trim()&&(t.api_key=e.api_key.trim()),this.customFieldsArray.controls.forEach(i=>{let a=i.get("key")?.value,s=i.get("value")?.value;a&&a.trim()&&s!==null&&s!==void 0&&s!==""&&(t[a.trim()]=s)}),this.dialogRef.close(t)}onCancel(){this.dialogRef.close()}openCustomModeHelp(){this.dialog.open(eH,{panelClass:["base-dialog-panel","ai-profile-dialog-panel","dialog-large-panel"]})}onModeChange(e){e==="basic"&&(this.form.get("temperature")?.value||this.form.patchValue({temperature:.7}),this.form.get("context_limit")?.value||this.form.patchValue({context_limit:128}),this.form.get("context_strategy")?.value||this.form.patchValue({context_strategy:"balanced"}),this.form.get("copilot_mode")?.value||this.form.patchValue({copilot_mode:"teaching_assistant"}),this.form.get("model_type")?.value||this.form.patchValue({model_type:"text"}))}static \u0275fac=function(t){return new(t||n)(Mt(cg),Mt(We),Mt(Xe),Mt(oe),Mt(Wt))};static \u0275cmp=V({type:n,selectors:[["app-ai-profile-dialog"]],decls:26,vars:7,consts:[["mat-dialog-title",""],[1,"config-form",3,"formGroup"],[1,"mode-selector"],[3,"valueChange","change","value"],["value","basic"],["value","custom"],["mat-icon-button","","matTooltip","Basic Mode: Select preset models | Custom Mode: Full control over all parameters",1,"help-icon"],[1,"basic-mode"],[1,"custom-mode"],["align","end"],["mat-button","",3,"click"],["mat-raised-button","","color","primary",3,"click","disabled"],[1,"section-header"],["appearance","outline","subscriptSizing","dynamic",1,"full-width"],["matInput","","formControlName","name","placeholder","e.g.: my-gpt4-config"],[3,"selectionChange","value"],[3,"value"],["matInput","","formControlName","api_key","type","password","autocomplete","off",3,"placeholder"],[1,"existing-key-hint"],["formControlName","copilot_mode"],[1,"mode-info"],[1,"info-icon"],[1,"checkbox-section"],["formControlName","is_default","color","primary"],["matInput","","formControlName","model","placeholder","Enter model name"],[1,"custom-mode-header"],[1,"help-icon"],["matInput","","formControlName","name","placeholder","e.g.: gpt-4o-config"],["matInput","","formControlName","model_type","value","text","readonly",""],["matInput","","formControlName","provider","placeholder","e.g.: openai, anthropic, ollama"],["matInput","","formControlName","base_url","placeholder","e.g.: https://api.openai.com/v1"],["matInput","","formControlName","model","placeholder","e.g.: gpt-4o, deepseek-v4-flash, claude-sonnet-4"],[1,"row"],["appearance","outline","subscriptSizing","dynamic",1,"half-width"],["matInput","","formControlName","temperature","type","number","step","0.1","min","0","max","2","placeholder","0.7"],["matInput","","formControlName","context_limit","type","number","min","1","max","10000","placeholder","128"],["formControlName","context_strategy"],[1,"custom-fields-section"],["mat-icon-button","",3,"click"],["formArrayName","customFields",1,"custom-fields-list",3,"formGroup"],[1,"empty-custom-fields"],[1,"custom-field-row",3,"formGroupName"],["appearance","outline","subscriptSizing","dynamic",1,"field-key"],["matInput","","formControlName","key"],["appearance","outline","subscriptSizing","dynamic",1,"field-value"],["matInput","","formControlName","value"],["mat-icon-button","",1,"delete-btn","destructive-icon-button",3,"click"],[1,"empty-icon"]],template:function(t,i){t&1&&(r(0,"h2",0),c(1),l(),r(2,"mat-dialog-content")(3,"form",1)(4,"div",2)(5,"mat-button-toggle-group",3),rn("valueChange",function(s){return Xt(i.configMode,s)||(i.configMode=s),s}),_("change",function(s){return i.onModeChange(s.value)}),r(6,"mat-button-toggle",4)(7,"mat-icon"),c(8,"stars"),l(),r(9,"span"),c(10,"Basic Mode"),l()(),r(11,"mat-button-toggle",5)(12,"mat-icon"),c(13,"tune"),l(),r(14,"span"),c(15,"Custom Mode"),l()()(),r(16,"button",6)(17,"mat-icon"),c(18,"help_outline"),l()()(),T(19,uze,50,9,"div",7),T(20,Mze,83,7,"div",8),l()(),r(21,"mat-dialog-actions",9)(22,"button",10),_("click",function(){return i.onCancel()}),c(23,"Cancel"),l(),r(24,"button",11),_("click",function(){return i.onSubmit()}),c(25),l()()),t&2&&(m(),X(" ",i.mode==="create"?"Create LLM Model Configuration":"Edit LLM Model Configuration",`
|
||
`),m(2),v("formGroup",i.form),m(2),an("value",i.configMode),m(14),E(i.configMode==="basic"?19:-1),m(),E(i.configMode==="custom"?20:-1),m(4),v("disabled",i.form.invalid),m(),X(" ",i.mode==="create"?"Create":"Save"," "))},dependencies:[fe,It,Ct,At,No,Nt,vt,Er,pm,Ut,Yt,GA,qA,ke,qe,Qe,bt,sb,T5,E5,ie,ce,we,Pe,Ve,Dr,Wn,ye,Ee,ot,ct,nt,Ho,Rt,Gt,Y,he,Be,st,pt,hn],styles:['.config-form[_ngcontent-%COMP%] .full-width[_ngcontent-%COMP%]{width:100%;margin-bottom:var(--gns3-density-space-3)}.config-form[_ngcontent-%COMP%] .section-header[_ngcontent-%COMP%]{margin-top:var(--gns3-density-space-4);margin-bottom:var(--gns3-density-card-gap)}.config-form[_ngcontent-%COMP%] .section-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%], .config-form[_ngcontent-%COMP%] .section-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin:0;font-size:16px;font-weight:600;color:var(--mat-sys-on-surface)}.config-form[_ngcontent-%COMP%] .help-icon[_ngcontent-%COMP%]{display:inline-flex;vertical-align:middle;width:18px;height:18px;margin-left:4px}.config-form[_ngcontent-%COMP%] .help-icon[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px;color:var(--mat-sys-on-surface-variant)}.config-form[_ngcontent-%COMP%] .help-icon[_ngcontent-%COMP%]:hover mat-icon[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.config-form[_ngcontent-%COMP%] .row[_ngcontent-%COMP%]{display:flex;gap:var(--gns3-density-space-3);margin-bottom:var(--gns3-density-space-3)}.config-form[_ngcontent-%COMP%] .row[_ngcontent-%COMP%] .half-width[_ngcontent-%COMP%]{flex:1;min-width:0}.config-form[_ngcontent-%COMP%] .checkbox-section[_ngcontent-%COMP%]{margin:var(--gns3-density-space-4) 0}.config-form[_ngcontent-%COMP%] .checkbox-section[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%]{display:block}.config-form[_ngcontent-%COMP%] .option-hint[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:14px}.config-form[_ngcontent-%COMP%] .existing-key-hint[_ngcontent-%COMP%]{color:var(--mat-sys-primary);font-size:12px}.config-form[_ngcontent-%COMP%] .warning-hint[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:14px}.config-form[_ngcontent-%COMP%] .custom-fields-section[_ngcontent-%COMP%]{margin-top:var(--gns3-density-space-4);padding-top:var(--gns3-density-space-4);border-top:1px solid var(--mat-sys-outline-variant)}.config-form[_ngcontent-%COMP%] .custom-fields-section[_ngcontent-%COMP%] .section-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-top:0;margin-bottom:var(--gns3-density-space-2)}.config-form[_ngcontent-%COMP%] .custom-fields-section[_ngcontent-%COMP%] .section-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:16px;font-weight:600;color:var(--mat-sys-on-surface)}.config-form[_ngcontent-%COMP%] .custom-fields-section[_ngcontent-%COMP%] .section-header[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:40px;height:40px;padding:8px;transition:all var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1);border-radius:50%;display:inline-flex;align-items:center;justify-content:center;position:relative}.config-form[_ngcontent-%COMP%] .custom-fields-section[_ngcontent-%COMP%] .section-header[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:before{content:"";position:absolute;width:100%;height:100%;border-radius:50%;background-color:currentColor;opacity:0;transition:opacity var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1);transform:scale(.75)}.config-form[_ngcontent-%COMP%] .custom-fields-section[_ngcontent-%COMP%] .section-header[_ngcontent-%COMP%] button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:24px;width:24px;height:24px;transition:transform var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1);position:relative;z-index:1}.config-form[_ngcontent-%COMP%] .custom-fields-section[_ngcontent-%COMP%] .section-header[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover:before{opacity:1;background-color:var(--mat-sys-primary-container)}.config-form[_ngcontent-%COMP%] .custom-fields-section[_ngcontent-%COMP%] .section-header[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover mat-icon[_ngcontent-%COMP%]{color:var(--mat-sys-primary);transform:scale(1.1)}.config-form[_ngcontent-%COMP%] .custom-fields-section[_ngcontent-%COMP%] .section-description[_ngcontent-%COMP%]{margin-bottom:var(--gns3-density-card-gap)}.config-form[_ngcontent-%COMP%] .custom-fields-section[_ngcontent-%COMP%] .section-description[_ngcontent-%COMP%] .reserved-field-hint[_ngcontent-%COMP%]{margin:0;font-size:14px;color:var(--mat-sys-on-surface-variant);font-style:italic}.config-form[_ngcontent-%COMP%] .custom-fields-section[_ngcontent-%COMP%] .custom-fields-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-space-3)}.config-form[_ngcontent-%COMP%] .custom-fields-section[_ngcontent-%COMP%] .custom-fields-list[_ngcontent-%COMP%] .custom-field-row[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:var(--gns3-density-space-2)}.config-form[_ngcontent-%COMP%] .custom-fields-section[_ngcontent-%COMP%] .custom-fields-list[_ngcontent-%COMP%] .custom-field-row[_ngcontent-%COMP%] .field-key[_ngcontent-%COMP%], .config-form[_ngcontent-%COMP%] .custom-fields-section[_ngcontent-%COMP%] .custom-fields-list[_ngcontent-%COMP%] .custom-field-row[_ngcontent-%COMP%] .field-value[_ngcontent-%COMP%]{flex:1;min-width:150px}.config-form[_ngcontent-%COMP%] .custom-fields-section[_ngcontent-%COMP%] .custom-fields-list[_ngcontent-%COMP%] .custom-field-row[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{margin-top:12px;width:40px;height:40px;padding:8px;transition:all var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1);border-radius:50%;display:inline-flex;align-items:center;justify-content:center;position:relative}.config-form[_ngcontent-%COMP%] .custom-fields-section[_ngcontent-%COMP%] .custom-fields-list[_ngcontent-%COMP%] .custom-field-row[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:before{content:"";position:absolute;width:100%;height:100%;border-radius:50%;background-color:currentColor;opacity:0;transition:opacity var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1);transform:scale(.75)}.config-form[_ngcontent-%COMP%] .custom-fields-section[_ngcontent-%COMP%] .custom-fields-list[_ngcontent-%COMP%] .custom-field-row[_ngcontent-%COMP%] button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:24px;width:24px;height:24px;transition:transform var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1);position:relative;z-index:1}.config-form[_ngcontent-%COMP%] .custom-fields-section[_ngcontent-%COMP%] .custom-fields-list[_ngcontent-%COMP%] .custom-field-row[_ngcontent-%COMP%] button.delete-btn[_ngcontent-%COMP%]:hover:before{opacity:1;background-color:var(--mat-sys-error-container)}.config-form[_ngcontent-%COMP%] .custom-fields-section[_ngcontent-%COMP%] .custom-fields-list[_ngcontent-%COMP%] .custom-field-row[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover mat-icon[_ngcontent-%COMP%]{transform:scale(1.1)}.config-form[_ngcontent-%COMP%] .custom-fields-section[_ngcontent-%COMP%] .empty-custom-fields[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--gns3-density-card-padding);color:var(--mat-sys-on-surface-variant);text-align:center}.config-form[_ngcontent-%COMP%] .custom-fields-section[_ngcontent-%COMP%] .empty-custom-fields[_ngcontent-%COMP%] .empty-icon[_ngcontent-%COMP%]{font-size:40px;margin-bottom:8px;opacity:.5}.config-form[_ngcontent-%COMP%] .custom-fields-section[_ngcontent-%COMP%] .empty-custom-fields[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:14px}.config-form[_ngcontent-%COMP%] .mode-selector[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-3);margin-bottom:var(--gns3-density-card-gap);padding:var(--gns3-density-space-2) 0}.config-form[_ngcontent-%COMP%] .mode-selector[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%]{flex:1;display:flex}.config-form[_ngcontent-%COMP%] .mode-selector[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%] .mat-button-toggle[_ngcontent-%COMP%]{flex:1}.config-form[_ngcontent-%COMP%] .mode-selector[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%] .mat-button-toggle[_ngcontent-%COMP%] .mat-button-toggle-button[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;gap:8px;padding:8px 16px}.config-form[_ngcontent-%COMP%] .mode-selector[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%] .mat-button-toggle[_ngcontent-%COMP%] .mat-button-toggle-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;height:20px;width:20px}.config-form[_ngcontent-%COMP%] .mode-selector[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%] .mat-button-toggle[_ngcontent-%COMP%] .mat-button-toggle-button[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:14px;font-weight:500}.config-form[_ngcontent-%COMP%] .mode-selector[_ngcontent-%COMP%] .help-icon[_ngcontent-%COMP%]{flex-shrink:0}.config-form[_ngcontent-%COMP%] .mode-selector[_ngcontent-%COMP%] .help-icon[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;height:20px;width:20px;color:var(--mat-sys-on-surface-variant)}.config-form[_ngcontent-%COMP%] .mode-selector[_ngcontent-%COMP%] .help-icon[_ngcontent-%COMP%]:hover mat-icon[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.config-form[_ngcontent-%COMP%] .basic-mode[_ngcontent-%COMP%] .mode-info[_ngcontent-%COMP%]{display:flex;gap:var(--gns3-density-space-3);padding:var(--gns3-density-space-3);margin-top:var(--gns3-density-space-4);background:var(--mat-sys-surface-container);border:1px solid var(--mat-sys-outline-variant);border-radius:8px}.config-form[_ngcontent-%COMP%] .basic-mode[_ngcontent-%COMP%] .mode-info[_ngcontent-%COMP%] .info-icon[_ngcontent-%COMP%]{flex-shrink:0;color:var(--mat-sys-on-surface-variant);font-size:20px;height:20px;width:20px;margin-top:2px}.config-form[_ngcontent-%COMP%] .basic-mode[_ngcontent-%COMP%] .mode-info[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:14px;color:var(--mat-sys-on-surface-variant);line-height:1.5}.config-form[_ngcontent-%COMP%] .basic-mode[_ngcontent-%COMP%] .mode-info[_ngcontent-%COMP%] p[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-weight:500;color:var(--mat-sys-on-surface)}.config-form[_ngcontent-%COMP%] .custom-mode[_ngcontent-%COMP%] .custom-mode-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--gns3-density-space-4);padding:var(--gns3-density-space-4);background:var(--mat-sys-surface-container);border-radius:8px}.config-form[_ngcontent-%COMP%] .custom-mode[_ngcontent-%COMP%] .custom-mode-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:16px;font-weight:600;color:var(--mat-sys-on-surface)}.config-form[_ngcontent-%COMP%] .custom-mode[_ngcontent-%COMP%] .custom-mode-header[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-space-2)}.config-form[_ngcontent-%COMP%] .custom-mode[_ngcontent-%COMP%] .custom-mode-header[_ngcontent-%COMP%] button[_ngcontent-%COMP%] .help-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px}.config-form[_ngcontent-%COMP%] .custom-mode[_ngcontent-%COMP%] .custom-mode-header[_ngcontent-%COMP%] button[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:14px;font-weight:500}'],changeDetection:0})}return n})();function Oze(n,o){n&1&&(r(0,"div",8),L(1,"mat-spinner",10),r(2,"p"),c(3,"Loading..."),l()())}function Dze(n,o){n&1&&(r(0,"th",24),c(1,"Name"),l())}function Ize(n,o){n&1&&(r(0,"mat-icon",26),c(1,"group"),l())}function Aze(n,o){if(n&1&&(r(0,"span",28),c(1),l()),n&2){let e=h().$implicit;m(),N(e.group_name)}}function Nze(n,o){if(n&1&&(r(0,"td",25),T(1,Ize,2,0,"mat-icon",26),r(2,"span",27),c(3),l(),T(4,Aze,2,1,"span",28),l()),n&2){let e=o.$implicit;m(),E(e.source==="group"?1:-1),m(2),N(e.name),m(),E(e.source==="group"?4:-1)}}function Fze(n,o){n&1&&(r(0,"th",24),c(1,"API Domain"),l())}function Rze(n,o){if(n&1&&(r(0,"td",25)(1,"span",29),c(2),l()()),n&2){let e=o.$implicit,t=h(3);m(2),N(t.getProviderDisplay(e))}}function zze(n,o){n&1&&(r(0,"th",24),c(1,"Model"),l())}function Lze(n,o){if(n&1&&(r(0,"td",25)(1,"span",30),c(2),l()()),n&2){let e=o.$implicit;m(2),N(e.config.model)}}function Vze(n,o){n&1&&(r(0,"th",24),c(1,"Context Limit"),l())}function Bze(n,o){if(n&1&&(r(0,"span",32),c(1),l()),n&2){let e=h().$implicit;m(),X(" ",e.config.context_strategy," ")}}function jze(n,o){if(n&1&&(r(0,"td",25)(1,"span",31),c(2),l(),T(3,Bze,2,1,"span",32),l()),n&2){let e=o.$implicit;m(2),X("",e.config.context_limit,"K"),m(),E(e.config.context_strategy?3:-1)}}function $ze(n,o){n&1&&(r(0,"th",24),c(1,"Actions"),l())}function Hze(n,o){if(n&1){let e=R();r(0,"td",25)(1,"div",33)(2,"button",34),Et(3,"async"),_("click",function(){let i=y(e).$implicit,a=h(3);return w(a.toggleDefaultConfig(i))}),r(4,"mat-icon"),c(5,"check_circle"),l()(),r(6,"button",34),_("click",function(){let i=y(e).$implicit,a=h(3);return w(a.openEditDialog(i))}),r(7,"mat-icon"),c(8,"edit"),l()(),r(9,"button",35),_("click",function(){let i=y(e).$implicit,a=h(3);return w(a.deleteConfig(i))}),r(10,"mat-icon"),c(11,"delete"),l()()()()}if(n&2){let e,t=o.$implicit,i=h(3);m(2),ne("active-btn",i.isDefault(t)),v("disabled",((e=gn(3,5,i.settingDefault$))==null?null:e.has(t.config_id))||!i.isEditable(t)),m(4),v("disabled",!i.isEditable(t)),m(3),v("disabled",!i.isEditable(t))}}function Uze(n,o){n&1&&L(0,"tr",36)}function Wze(n,o){if(n&1&&L(0,"tr",37),n&2){let e=o.$implicit,t=h(3);ne("active-row",t.isDefault(e))("inherited-row",e.source==="group")}}function Gze(n,o){if(n&1&&(r(0,"div",12)(1,"table",14),Fe(2,15),se(3,Dze,2,0,"th",16)(4,Nze,5,3,"td",17),Re(),Fe(5,18),se(6,Fze,2,0,"th",16)(7,Rze,3,1,"td",17),Re(),Fe(8,19),se(9,zze,2,0,"th",16)(10,Lze,3,1,"td",17),Re(),Fe(11,20),se(12,Vze,2,0,"th",16)(13,jze,4,2,"td",17),Re(),Fe(14,21),se(15,$ze,2,0,"th",16)(16,Hze,12,7,"td",17),Re(),se(17,Uze,1,0,"tr",22)(18,Wze,1,4,"tr",23),l()()),n&2){let e=h(2);m(),v("dataSource",e.configs()),m(16),v("matHeaderRowDef",e.displayedColumns),m(),v("matRowDefColumns",e.displayedColumns)}}function qze(n,o){n&1&&(r(0,"div",13)(1,"mat-icon",38),c(2,"folder_open"),l(),r(3,"p"),c(4,"No configurations yet"),l(),r(5,"p",39),c(6,'Click "New Configuration" above to create your first LLM model configuration'),l()())}function Qze(n,o){if(n&1&&(r(0,"div",9)(1,"mat-card",11)(2,"mat-card-header")(3,"mat-card-title"),c(4,"All Configurations (Own + Inherited)"),l()(),r(5,"mat-card-content"),T(6,Gze,19,3,"div",12),T(7,qze,7,0,"div",13),l()()()),n&2){let e=h();m(6),E(e.configs().length>0?6:-1),m(),E(e.configs().length===0?7:-1)}}var Y2=(()=>{class n{destroy$=new Ye;controller=ee(void 0);user=ee(void 0);loading$=new cn(!1);settingDefault$=new cn(new Set);error$=new cn(null);configs$=new cn([]);defaultConfig$=new cn(null);configs=z([]);defaultConfig=z(null);settingDefaultConfigs=new Set;displayedColumns=["name","provider","model","context_limit","actions"];aiProfilesService=f(A_);dialog=f(Xe);toasterService=f(re);constructor(){}ngOnInit(){if(!this.controller()||!this.user()){console.error("AiProfileTabComponent: controller or user inputs are not set");return}this.loadConfigs(),mr([this.configs$,this.defaultConfig$]).pipe(He(this.destroy$)).subscribe(([e,t])=>{this.configs.set(e),this.defaultConfig.set(t)}),this.error$.pipe(He(this.destroy$),Yi(e=>e!==null)).subscribe(e=>{this.showError(e)})}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}loadConfigs(){this.loading$.next(!0),this.error$.next(null),this.aiProfilesService.getConfigs(this.controller(),this.user().user_id).pipe(He(this.destroy$)).subscribe({next:e=>{this.configs$.next(e.configs),this.defaultConfig$.next(e.default_config),this.loading$.next(!1)},error:e=>{this.handleError(e,"Failed to load configurations")}})}isEditable(e){return e.source==="user"}getProviderDisplay(e){let t=e.config.base_url;if(!t)return e.config.provider;try{return new URL(t).hostname.replace(/^api\./,"")}catch{return e.config.provider}}isDefault(e){return this.defaultConfig()?.config_id===e.config_id}getSourceDisplay(e){return e.source==="group"?`Group: ${e.group_name||"Unknown"}`:"User"}openCreateDialog(){this.dialog.open(Ip,{panelClass:["base-dialog-panel","ai-profile-dialog-panel","dialog-large-panel"],data:{mode:"create",config:null,existingNames:this.configs().filter(t=>t.source==="user").map(t=>t.name)}}).afterClosed().pipe(He(this.destroy$)).subscribe(t=>{t&&this.createConfig(t)})}openEditDialog(e){this.dialog.open(Ip,{panelClass:["base-dialog-panel","ai-profile-dialog-panel","dialog-large-panel"],data:{mode:"edit",config:q({},e),existingNames:this.configs().filter(i=>i.source==="user"&&i.config_id!==e.config_id).map(i=>i.name)}}).afterClosed().pipe(He(this.destroy$)).subscribe(i=>{i&&this.updateConfig(e.config_id,i)})}createConfig(e){this.loading$.next(!0),this.aiProfilesService.createConfig(this.controller(),this.user().user_id,e).pipe(He(this.destroy$)).subscribe({next:()=>{this.loadConfigs(),this.showSuccess("Configuration created successfully")},error:t=>{this.handleError(t,"Failed to create configuration")}})}updateConfig(e,t){this.loading$.next(!0),this.aiProfilesService.updateConfig(this.controller(),this.user().user_id,e,t).pipe(He(this.destroy$)).subscribe({next:()=>{this.loadConfigs(),this.showSuccess("Configuration updated successfully")},error:i=>{i.status===409?this.handleConflict(i):this.handleError(i,"Failed to update configuration")}})}deleteConfig(e){this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-danger-panel","dialog-small-panel"],autoFocus:".cancel-button",data:{title:"Delete configuration?",message:`Configuration "${e.name}" will be permanently deleted.`,note:"This action cannot be undone.",confirmButtonText:"Delete configuration",tone:"danger"}}).afterClosed().pipe(He(this.destroy$)).subscribe(i=>{i&&(this.loading$.next(!0),this.aiProfilesService.deleteConfig(this.controller(),this.user().user_id,e.config_id).pipe(He(this.destroy$)).subscribe({next:()=>{this.loadConfigs(),this.showSuccess("Configuration deleted successfully")},error:a=>{this.handleError(a,"Failed to delete configuration")}}))})}toggleDefaultConfig(e){let t=e.config_id;if(this.settingDefaultConfigs.has(t))return;let i=e.is_default,a=this.defaultConfig(),s=[...this.configs()],d=s.map(p=>ze(q({},p),{is_default:i?!1:p.config_id===t}));this.configs.set(d),this.defaultConfig.set(i?null:e),this.settingDefaultConfigs.add(t),this.settingDefault$.next(new Set(this.settingDefaultConfigs)),i?this.aiProfilesService.unsetDefaultConfig(this.controller(),this.user().user_id,t).pipe(He(this.destroy$)).subscribe({next:()=>{this.settingDefaultConfigs.delete(t),this.settingDefault$.next(new Set(this.settingDefaultConfigs)),this.showSuccess("Default configuration removed"),this.loadConfigsWithoutLoading()},error:p=>{this.configs.set(s),this.defaultConfig.set(a),this.settingDefaultConfigs.delete(t),this.settingDefault$.next(new Set(this.settingDefaultConfigs)),p.status===409?this.handleConflict(p):this.handleError(p,"Failed to remove default configuration")}}):this.aiProfilesService.setDefaultConfig(this.controller(),this.user().user_id,t).pipe(He(this.destroy$)).subscribe({next:()=>{this.settingDefaultConfigs.delete(t),this.settingDefault$.next(new Set(this.settingDefaultConfigs)),this.showSuccess("Default configuration set successfully"),this.loadConfigsWithoutLoading()},error:p=>{this.configs.set(s),this.defaultConfig.set(a),this.settingDefaultConfigs.delete(t),this.settingDefault$.next(new Set(this.settingDefaultConfigs)),p.status===409?this.handleConflict(p):this.handleError(p,"Failed to set default configuration")}})}loadConfigsWithoutLoading(){this.error$.next(null),this.aiProfilesService.getConfigs(this.controller(),this.user().user_id).pipe(He(this.destroy$)).subscribe({next:e=>{this.configs$.next(e.configs),this.defaultConfig$.next(e.default_config)},error:e=>{this.handleError(e,"Failed to refresh configurations")}})}handleConflict(e){this.loadConfigs(),this.showWarning("Data has been modified by another user, auto-refreshed")}handleError(e,t){console.error(`${t}:`,e);let i=t;e?.error?.detail?i=e.error.detail:e?.message&&(i=e.message),this.error$.next(i),this.loading$.next(!1),this.showError(i)}showSuccess(e){this.toasterService.success(e)}showWarning(e){this.toasterService.warning(e)}showError(e){this.toasterService.error(e)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-ai-profile-tab"]],inputs:{controller:[1,"controller"],user:[1,"user"]},decls:23,vars:9,consts:[[1,"ai-profile-container"],[1,"toolbar"],[1,"toolbar-info"],[1,"compatibility-badge"],[1,"subtitle"],[1,"toolbar-actions"],["mat-button","",3,"click","disabled"],["mat-raised-button","","color","primary",3,"click"],[1,"loading-container"],[1,"content-area"],["diameter","40"],[1,"list-card"],[1,"table-container"],[1,"empty-state"],["mat-table","",1,"profiles-table",3,"dataSource"],["matColumnDef","name"],["mat-header-cell","",4,"matHeaderCellDef"],["mat-cell","",4,"matCellDef"],["matColumnDef","provider"],["matColumnDef","model"],["matColumnDef","context_limit"],["matColumnDef","actions"],["mat-header-row","",4,"matHeaderRowDef"],["mat-row","",3,"active-row","inherited-row",4,"matRowDef","matRowDefColumns"],["mat-header-cell",""],["mat-cell",""],[1,"group-icon"],[1,"profile-name"],[1,"group-badge"],[1,"provider-badge"],[1,"model-name"],[1,"context-limit-value"],[1,"context-strategy-badge"],[1,"action-buttons"],["mat-icon-button","",3,"click","disabled"],["mat-icon-button","",1,"delete-btn","destructive-icon-button",3,"click","disabled"],["mat-header-row",""],["mat-row",""],[1,"empty-icon"],[1,"empty-hint"]],template:function(t,i){t&1&&(r(0,"div",0)(1,"div",1)(2,"div",2)(3,"h3"),c(4,"LLM Model Configurations "),r(5,"span",3),c(6,"OpenAI-Compatible"),l()(),r(7,"p",4),c(8," Manage OpenAI-compatible LLM model configurations. Your configs and configs inherited from your groups are shown below. "),l()(),r(9,"div",5)(10,"button",6),Et(11,"async"),_("click",function(){return i.loadConfigs()}),r(12,"mat-icon"),c(13,"refresh"),l(),c(14," Refresh "),l(),r(15,"button",7),_("click",function(){return i.openCreateDialog()}),r(16,"mat-icon"),c(17,"add"),l(),c(18," New profile "),l()()(),T(19,Oze,4,0,"div",8),Et(20,"async"),T(21,Qze,8,2,"div",9),Et(22,"async"),l()),t&2&&(m(10),v("disabled",gn(11,3,i.loading$)),m(9),E(gn(20,5,i.loading$)?19:-1),m(2),E(gn(22,7,i.loading$)?-1:21))},dependencies:[fe,ke,_n,bn,yn,kn,wn,xn,Pn,Mn,Sn,Tn,En,Y,he,Be,ie,ce,we,ye,ot,Rt,hn,Zn,Tl,Jc,Zc,rt,mt,Pa],styles:['.ai-profile-container[_ngcontent-%COMP%]{padding:20px}.ai-profile-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.ai-profile-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] .toolbar-info[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 4px;font-size:18px;font-weight:500;display:flex;align-items:center;gap:12px}.ai-profile-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] .toolbar-info[_ngcontent-%COMP%] .subtitle[_ngcontent-%COMP%]{margin:0;font-size:13px}.ai-profile-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] .toolbar-info[_ngcontent-%COMP%] .compatibility-badge[_ngcontent-%COMP%]{display:inline-block;padding:2px 10px;font-size:11px;font-weight:600;letter-spacing:.3px;background:var(--mat-sys-primary-container);color:var(--mat-sys-primary);border-radius:12px;line-height:20px;text-transform:uppercase}.ai-profile-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] .toolbar-actions[_ngcontent-%COMP%]{display:flex;gap:8px}.ai-profile-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] .toolbar-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;white-space:nowrap;flex-shrink:0}.ai-profile-container[_ngcontent-%COMP%] .loading-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px}.ai-profile-container[_ngcontent-%COMP%] .loading-container[_ngcontent-%COMP%] mat-spinner[_ngcontent-%COMP%]{margin-bottom:16px}.ai-profile-container[_ngcontent-%COMP%] .loading-container[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-header[_ngcontent-%COMP%] mat-card-title[_ngcontent-%COMP%]{font-size:16px}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%]{padding:0}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%]{overflow-x:auto}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%]{width:100%}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] mat-header-row[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{font-weight:500}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] mat-row[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{border-bottom:1px solid var(--mat-sys-outline-variant)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] mat-row[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-primary) 8%,transparent)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] mat-row.inherited-row[_ngcontent-%COMP%]{background-color:var(--mat-sys-secondary-container)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] mat-row.inherited-row[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{border-bottom:1px solid var(--mat-sys-secondary)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] mat-row.inherited-row[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-secondary) 12%,var(--mat-sys-secondary-container))}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] mat-row.active-row[_ngcontent-%COMP%]{background-color:var(--mat-sys-tertiary-container)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] mat-row.active-row[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{border-bottom:1px solid var(--mat-sys-tertiary)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] mat-row.active-row[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-tertiary) 12%,var(--mat-sys-tertiary-container))}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .group-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px;margin-right:6px;color:var(--mat-sys-secondary);vertical-align:middle}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .group-badge[_ngcontent-%COMP%]{display:inline-block;margin-left:8px;padding:2px 6px;background-color:var(--mat-sys-secondary-container);color:var(--mat-sys-on-secondary-container);border-radius:4px;font-size:11px;font-weight:500;vertical-align:middle}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .name-cell[_ngcontent-%COMP%] .profile-name[_ngcontent-%COMP%]{font-weight:500}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .provider-badge[_ngcontent-%COMP%]{padding:4px 8px;background:var(--mat-sys-primary-container);border-radius:4px;font-size:12px;color:var(--mat-sys-on-primary-container)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .model-name[_ngcontent-%COMP%]{font-family:var(--gns3-font-code);font-size:13px}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .temperature-value[_ngcontent-%COMP%]{font-family:var(--gns3-font-code);font-size:13px}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%]{display:flex;gap:4px}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:32px;height:32px;padding:6px;transition:all var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1);border-radius:50%;display:inline-flex;align-items:center;justify-content:center;position:relative}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:before{content:"";position:absolute;width:100%;height:100%;border-radius:50%;background-color:currentColor;opacity:0;transition:opacity var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1);transform:scale(.75)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px;transition:transform var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1);position:relative;z-index:1}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%] button.active-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%] button.active-btn[_ngcontent-%COMP%]:hover:before{opacity:1;background-color:var(--mat-sys-tertiary-container)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%] button.active-btn[_ngcontent-%COMP%]:hover mat-icon[_ngcontent-%COMP%]{transform:scale(1.35)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:not(.active-btn):not(.delete-btn):hover:before{opacity:1;background-color:var(--mat-sys-primary-container)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:not(.active-btn):not(.delete-btn):hover mat-icon[_ngcontent-%COMP%]{color:var(--mat-sys-primary);transform:scale(1.35)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%] button.delete-btn[_ngcontent-%COMP%]:hover:before{opacity:1;background-color:var(--mat-sys-error-container)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%] button.delete-btn[_ngcontent-%COMP%]:hover mat-icon[_ngcontent-%COMP%]{transform:scale(1.35)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] .empty-icon[_ngcontent-%COMP%]{font-size:64px;margin-bottom:16px;opacity:.3}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:4px 0}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] p.empty-hint[_ngcontent-%COMP%]{font-size:13px}'],changeDetection:0})}return n})();var Z2=(()=>{class n{dialogRef=f(We);data=f(Wt);close(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-ai-profile-dialog"]],decls:7,vars:3,consts:[["mat-dialog-title",""],[3,"controller","user"],["mat-button","",3,"click"]],template:function(t,i){t&1&&(r(0,"h2",0),c(1),l(),r(2,"mat-dialog-content"),L(3,"app-ai-profile-tab",1),l(),r(4,"mat-dialog-actions")(5,"button",2),_("click",function(){return i.close()}),c(6,"Close"),l()()),t&2&&(m(),X("AI Profiles - ",i.data.user.username),m(2),v("controller",i.data.controller)("user",i.data.user))},dependencies:[fe,ke,qe,Qe,bt,Y,he,ie,Y2],styles:[".ai-profile-dialog__content[_ngcontent-%COMP%]{padding:16px 0}"],changeDetection:0})}return n})();var tH=(()=>{class n{httpController;constructor(e){this.httpController=e}list(e){return this.httpController.get(e,"/access/api-keys")}create(e,t){return this.httpController.post(e,"/access/api-keys",{name:t})}revoke(e,t){return this.httpController.post(e,`/access/api-keys/${t}/revoke`,null)}restore(e,t){return this.httpController.post(e,`/access/api-keys/${t}/restore`,null)}delete(e,t){return this.httpController.delete(e,`/access/api-keys/${t}`)}static \u0275fac=function(t){return new(t||n)(_e(sn))};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var nH=(()=>{class n{dialogRef=f(We);name=$("");onCancel(){this.dialogRef.close()}onSubmit(){let e=this.name().trim();e&&this.dialogRef.close(e)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-add-api-key-dialog"]],inputs:{name:[1,"name"]},outputs:{name:"nameChange"},decls:12,vars:2,consts:[["mat-dialog-title",""],["appearance","outline",1,"form-field"],["matInput","","placeholder","e.g. MCP Production","required","",3,"input","keyup.enter","value"],["align","end"],["mat-button","",3,"click"],["mat-flat-button","","color","primary",3,"click","disabled"]],template:function(t,i){t&1&&(r(0,"h2",0),c(1,"Create API Key"),l(),r(2,"mat-dialog-content")(3,"mat-form-field",1)(4,"mat-label"),c(5,"Key name"),l(),r(6,"input",2),_("input",function(s){return i.name.set(s.target.value)})("keyup.enter",function(){return i.onSubmit()}),l()()(),r(7,"mat-dialog-actions",3)(8,"button",4),_("click",function(){return i.onCancel()}),c(9,"Cancel"),l(),r(10,"button",5),_("click",function(){return i.onSubmit()}),c(11,"Create"),l()()),t&2&&(m(6),v("value",i.name()),m(4),v("disabled",!i.name().trim()))},dependencies:[fe,St,ke,qe,Qe,bt,Y,he,we,Pe,Ve,ye,Ee],styles:["mat-form-field[_ngcontent-%COMP%]{width:100%}"],changeDetection:0})}return n})();var iH=(()=>{class n{data;dialogRef=f(We);toasterService=f(re);clipboard=f(Hd);constructor(e){this.data=e}copyKey(){let e=this.data.response.api_key;this.clipboard.copy(e)?this.toasterService.success("API key copied to clipboard"):this.toasterService.error("Failed to copy. Please copy the key manually.")}onClose(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)(Mt(Wt))};static \u0275cmp=V({type:n,selectors:[["app-api-key-display-dialog"]],decls:29,vars:3,consts:[["mat-dialog-title",""],[1,"info-note"],[1,"detail-row"],[1,"detail-row__label"],[1,"detail-row__value"],[1,"detail-row__value","detail-row__value--key"],["mat-icon-button","","matTooltip","Copy to clipboard",3,"click"],["align","end"],["mat-flat-button","","color","primary",3,"click"]],template:function(t,i){t&1&&(r(0,"h2",0),c(1,"API Key Created"),l(),r(2,"mat-dialog-content")(3,"p",1)(4,"mat-icon"),c(5,"warning"),l(),c(6," This key will only be shown once. Copy it now \u2014 you cannot retrieve it later. "),l(),r(7,"div",2)(8,"span",3),c(9,"Name"),l(),r(10,"span",4),c(11),l()(),r(12,"div",2)(13,"span",3),c(14,"API Key"),l(),r(15,"div",5)(16,"code"),c(17),l(),r(18,"button",6),_("click",function(){return i.copyKey()}),r(19,"mat-icon"),c(20,"content_copy"),l()()()(),r(21,"div",2)(22,"span",3),c(23,"Created"),l(),r(24,"span",4),c(25),l()()(),r(26,"mat-dialog-actions",7)(27,"button",8),_("click",function(){return i.onClose()}),c(28,"I've saved the key"),l()()),t&2&&(m(11),N(i.data.response.name),m(6),N(i.data.response.api_key),m(8),N(i.data.response.created_at))},dependencies:[fe,ke,qe,Qe,bt,Y,he,Be,ie,ce],styles:[".info-note[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-high);padding:12px;border-radius:8px;margin:0 0 20px}.info-note[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px}.detail-row[_ngcontent-%COMP%]{margin-bottom:16px}.detail-row__label[_ngcontent-%COMP%]{display:block;font-size:12px;font-weight:500;color:var(--mat-sys-on-surface-variant);margin-bottom:4px}.detail-row__value[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface)}.detail-row__value--key[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.detail-row__value--key[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{flex:1;padding:8px 12px;background:var(--mat-sys-surface-container-highest);border-radius:4px;font-family:var(--gns3-font-code);font-size:13px;word-break:break-all;user-select:all}"],changeDetection:0})}return n})();function Kze(n,o){n&1&&(r(0,"div",1),L(1,"mat-progress-spinner",7),l())}function Xze(n,o){if(n&1){let e=R();r(0,"div",2)(1,"mat-icon"),c(2,"vpn_key"),l(),r(3,"p"),c(4,"No API keys yet"),l(),r(5,"button",8),_("click",function(){y(e);let i=h();return w(i.onCreate())}),c(6,"Create your first API key"),l()()}}function Yze(n,o){n&1&&(r(0,"mat-header-cell",25),c(1,"Name"),l())}function Zze(n,o){if(n&1&&(r(0,"mat-cell"),c(1),l()),n&2){let e=o.$implicit;m(),N(e.name)}}function Jze(n,o){n&1&&(r(0,"mat-header-cell",26),c(1,"Key Prefix"),l())}function eLe(n,o){if(n&1&&(r(0,"mat-cell",26)(1,"code"),c(2),l()()),n&2){let e=o.$implicit;m(2),N(e.key_prefix)}}function tLe(n,o){n&1&&(r(0,"mat-header-cell",25),c(1,"Created"),l())}function nLe(n,o){if(n&1&&(r(0,"mat-cell"),c(1),l()),n&2){let e=o.$implicit;m(),N(e.created_at)}}function iLe(n,o){n&1&&(r(0,"mat-header-cell",27),c(1,"Status"),l())}function oLe(n,o){n&1&&(r(0,"span",28),c(1,"Revoked"),l())}function aLe(n,o){n&1&&(r(0,"span",29),c(1,"Active"),l())}function rLe(n,o){if(n&1&&(r(0,"mat-cell",27),T(1,oLe,2,0,"span",28)(2,aLe,2,0,"span",29),l()),n&2){let e=o.$implicit;m(),E(e.revoked?1:2)}}function sLe(n,o){n&1&&(r(0,"mat-header-cell",30),c(1,"Actions"),l())}function lLe(n,o){if(n&1){let e=R();r(0,"button",32),_("click",function(){y(e);let i=h().$implicit,a=h(2);return w(a.onRevoke(i))}),r(1,"mat-icon"),c(2,"block"),l()()}}function cLe(n,o){if(n&1){let e=R();r(0,"button",33),_("click",function(){y(e);let i=h().$implicit,a=h(2);return w(a.onRestore(i))}),r(1,"mat-icon"),c(2,"restart_alt"),l()(),r(3,"button",34),_("click",function(){y(e);let i=h().$implicit,a=h(2);return w(a.onPermanentDelete(i))}),r(4,"mat-icon"),c(5,"delete_forever"),l()()}}function dLe(n,o){if(n&1&&(r(0,"mat-cell",30),T(1,lLe,3,0,"button",31)(2,cLe,6,0),l()),n&2){let e=o.$implicit;m(),E(e.revoked?2:1)}}function mLe(n,o){n&1&&L(0,"mat-header-row")}function pLe(n,o){if(n&1&&L(0,"mat-row"),n&2){let e=o.$implicit;ne("mat-row--revoked",e.revoked)}}function uLe(n,o){if(n&1){let e=R();r(0,"table",9),_("matSortChange",function(i){y(e);let a=h();return w(a.onSortChange(i))}),Fe(1,10),se(2,Yze,2,0,"mat-header-cell",11)(3,Zze,2,1,"mat-cell",12),Re(),Fe(4,13),se(5,Jze,2,0,"mat-header-cell",14)(6,eLe,3,1,"mat-cell",15),Re(),Fe(7,16),se(8,tLe,2,0,"mat-header-cell",11)(9,nLe,2,1,"mat-cell",12),Re(),Fe(10,17),se(11,iLe,2,0,"mat-header-cell",18)(12,rLe,3,1,"mat-cell",19),Re(),Fe(13,20),se(14,sLe,2,0,"mat-header-cell",21)(15,dLe,3,1,"mat-cell",22),Re(),se(16,mLe,1,0,"mat-header-row",23)(17,pLe,1,2,"mat-row",24),l()}if(n&2){let e=h();v("dataSource",e.dataSource),m(16),v("matHeaderRowDef",e.displayedColumns),m(),v("matRowDefColumns",e.displayedColumns)}}function gLe(n,o){if(n&1){let e=R();r(0,"button",35),_("click",function(){y(e);let i=h();return w(i.onCreate())}),r(1,"mat-icon"),c(2,"add"),l(),c(3," Create "),l()}}var oH=(()=>{class n{data;dialogRef=f(We);apiKeyService=f(tH);toasterService=f(re);dialog=f(Xe);destroyRef=f(Va);displayedColumns=["name","key_prefix","created_at","status","actions"];_keys=z([]);isLoading=z(!0);_sortActive=z("");_sortDirection=z("");sortedKeys=Ne(()=>{let e=this._keys(),t=this._sortActive(),i=this._sortDirection();return!t||!i?e:[...e].sort((a,s)=>{let d=a[t],p=s[t];if(d==null)return 1;if(p==null)return-1;let u=typeof d=="string"?d.toLowerCase():d,g=typeof p=="string"?p.toLowerCase():p;return(u<g?-1:1)*(i==="asc"?1:-1)})});_sortedKeys$=Cz(this.sortedKeys);dataSource=this._sortedKeys$;constructor(e){this.data=e}ngOnInit(){this.loadKeys()}onSortChange(e){this._sortActive.set(e.active),this._sortDirection.set(e.direction)}loadKeys(){this.isLoading.set(!0),this.apiKeyService.list(this.data.controller).pipe(wo(this.destroyRef)).subscribe({next:e=>{this._keys.set(e),this.isLoading.set(!1)},error:e=>{this.isLoading.set(!1),this.toasterService.error(e.error?.message||e.message||"Failed to load API keys")}})}onCreate(){this.dialog.open(nH,{panelClass:["base-dialog-panel","simple-dialog-panel","add-api-key-dialog-panel","dialog-medium-panel"],autoFocus:!1,disableClose:!0}).afterClosed().pipe(Yi(Boolean),wo(this.destroyRef)).subscribe(e=>{this.apiKeyService.create(this.data.controller,e).pipe(wo(this.destroyRef)).subscribe({next:t=>{this.loadKeys(),this.dialog.open(iH,{panelClass:["base-dialog-panel","simple-dialog-panel","dialog-medium-panel"],autoFocus:!1,disableClose:!0,data:{response:t}})},error:t=>{this.toasterService.error(t.error?.message||t.message||"Failed to create API key")}})})}onRevoke(e){this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-danger-panel","dialog-small-panel"],data:{title:"Revoke API Key",message:`Are you sure you want to revoke "${e.name}"? Any services using this key will immediately lose access. You can restore it later.`,confirmButtonText:"Revoke",cancelButtonText:"Cancel"}}).afterClosed().pipe(Yi(Boolean),wo(this.destroyRef)).subscribe(()=>{this.apiKeyService.revoke(this.data.controller,e.api_key_id).pipe(wo(this.destroyRef)).subscribe({next:t=>{this.toasterService.success(t.message||"API key revoked"),this.loadKeys()},error:t=>{this.toasterService.error(t.error?.message||t.message||"Failed to revoke API key")}})})}onRestore(e){this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-warning-panel","dialog-small-panel"],data:{title:"Restore API Key",message:`Restore "${e.name}"? It will become active again.`,confirmButtonText:"Restore",cancelButtonText:"Cancel"}}).afterClosed().pipe(Yi(Boolean),wo(this.destroyRef)).subscribe(()=>{this.apiKeyService.restore(this.data.controller,e.api_key_id).pipe(wo(this.destroyRef)).subscribe({next:t=>{this.toasterService.success(t.message||"API key restored"),this.loadKeys()},error:t=>{this.toasterService.error(t.error?.message||t.message||"Failed to restore API key")}})})}onPermanentDelete(e){this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-danger-panel","dialog-small-panel"],data:{title:"Permanently Delete API Key",message:`Delete "${e.name}" permanently? This action cannot be undone.`,confirmButtonText:"Delete",cancelButtonText:"Cancel"}}).afterClosed().pipe(Yi(Boolean),wo(this.destroyRef)).subscribe(()=>{this.apiKeyService.delete(this.data.controller,e.api_key_id).pipe(wo(this.destroyRef)).subscribe({next:()=>{this.toasterService.success("API key permanently deleted"),this.loadKeys()},error:t=>{this.toasterService.error(t.error?.message||t.message||"Failed to delete API key")}})})}onClose(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)(Mt(Wt))};static \u0275cmp=V({type:n,selectors:[["app-api-key-management-dialog"]],decls:10,vars:2,consts:[["mat-dialog-title",""],[1,"loading-container"],[1,"empty-state"],["mat-table","","matSort","",1,"keys-table",3,"dataSource"],["align","end"],["mat-flat-button","","color","primary"],["mat-button","",3,"click"],["mode","indeterminate","diameter","32"],["mat-raised-button","","color","primary",3,"click"],["mat-table","","matSort","",1,"keys-table",3,"matSortChange","dataSource"],["matColumnDef","name"],["mat-sort-header","",4,"matHeaderCellDef"],[4,"matCellDef"],["matColumnDef","key_prefix"],["class","col-key-prefix",4,"matHeaderCellDef"],["class","col-key-prefix",4,"matCellDef"],["matColumnDef","created_at"],["matColumnDef","status"],["class","col-status",4,"matHeaderCellDef"],["class","col-status",4,"matCellDef"],["matColumnDef","actions"],["class","col-actions",4,"matHeaderCellDef"],["class","col-actions",4,"matCellDef"],[4,"matHeaderRowDef"],[3,"mat-row--revoked",4,"matRowDef","matRowDefColumns"],["mat-sort-header",""],[1,"col-key-prefix"],[1,"col-status"],[1,"status-badge","status-badge--revoked"],[1,"status-badge","status-badge--active"],[1,"col-actions"],["mat-icon-button","","matTooltip","Revoke API key",1,"destructive-icon-button"],["mat-icon-button","","matTooltip","Revoke API key",1,"destructive-icon-button",3,"click"],["mat-icon-button","","matTooltip","Restore API key",3,"click"],["mat-icon-button","","matTooltip","Permanently delete",1,"destructive-icon-button",3,"click"],["mat-flat-button","","color","primary",3,"click"]],template:function(t,i){t&1&&(r(0,"h2",0),c(1,"API Keys"),l(),r(2,"mat-dialog-content"),T(3,Kze,2,0,"div",1)(4,Xze,7,0,"div",2)(5,uLe,18,3,"table",3),l(),r(6,"mat-dialog-actions",4),T(7,gLe,4,0,"button",5),r(8,"button",6),_("click",function(){return i.onClose()}),c(9,"Close"),l()()),t&2&&(m(3),E(i.isLoading()?3:i.sortedKeys().length===0?4:5),m(4),E(!i.isLoading()&&i.sortedKeys().length>0?7:-1))},dependencies:[fe,ke,qe,Qe,bt,Y,he,Be,ie,ce,_n,bn,yn,kn,wn,xn,Pn,Mn,Sn,Tn,En,_a,Ro,Aa,st,pt,rt,mt],styles:[".loading-container[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;min-height:120px}.empty-state[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:160px;gap:12px;color:var(--mat-sys-on-surface-variant)}.empty-state[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:48px;width:48px;height:48px;opacity:.5}.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:15px}.empty-state[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing)}.keys-table[_ngcontent-%COMP%]{width:100%}.keys-table[_ngcontent-%COMP%] .mat-mdc-header-cell[_ngcontent-%COMP%], .keys-table[_ngcontent-%COMP%] .mat-mdc-cell[_ngcontent-%COMP%]{justify-content:center}.keys-table[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{font-family:var(--gns3-font-code);font-size:13px;background:var(--mat-sys-surface-container-highest);padding:2px 6px;border-radius:3px}.status-badge[_ngcontent-%COMP%]{display:inline-block;padding:2px 10px;border-radius:12px;font-size:12px;font-weight:500}.status-badge--active[_ngcontent-%COMP%]{background:var(--mat-sys-primary-container);color:var(--mat-sys-on-primary-container)}.status-badge--revoked[_ngcontent-%COMP%]{background:var(--mat-sys-error-container);color:var(--mat-sys-on-error-container)}.mat-row--revoked[_ngcontent-%COMP%]{opacity:.55}.mat-row--revoked[_ngcontent-%COMP%] mat-cell[_ngcontent-%COMP%]{text-decoration:line-through}.mat-column-created_at[_ngcontent-%COMP%]{flex:0 0 200px}.col-key-prefix[_ngcontent-%COMP%]{flex:0 0 160px}.col-status[_ngcontent-%COMP%]{flex:0 0 100px}.col-actions[_ngcontent-%COMP%]{flex:0 0 120px}"],changeDetection:0})}return n})();var hLe=["*",[["mat-toolbar-row"]]],_Le=["*","mat-toolbar-row"],fLe=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["mat-toolbar-row"]],hostAttrs:[1,"mat-toolbar-row"],exportAs:["matToolbarRow"]})}return n})(),aH=(()=>{class n{_elementRef=f(Kt);_platform=f(ja);_document=f(Do);color;_toolbarRows;constructor(){}ngAfterViewInit(){this._platform.isBrowser&&(this._checkToolbarMixedModes(),this._toolbarRows.changes.subscribe(()=>this._checkToolbarMixedModes()))}_checkToolbarMixedModes(){this._toolbarRows.length}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["mat-toolbar"]],contentQueries:function(t,i,a){if(t&1&&Zi(a,fLe,5),t&2){let s;gt(s=ht())&&(i._toolbarRows=s)}},hostAttrs:[1,"mat-toolbar"],hostVars:6,hostBindings:function(t,i){t&2&&(Za(i.color?"mat-"+i.color:""),ne("mat-toolbar-multiple-rows",i._toolbarRows.length>0)("mat-toolbar-single-row",i._toolbarRows.length===0))},inputs:{color:"color"},exportAs:["matToolbar"],ngContentSelectors:_Le,decls:2,vars:0,template:function(t,i){t&1&&(pi(hLe),Zt(0),Zt(1,1))},styles:[`.mat-toolbar {
|
||
background: var(--mat-toolbar-container-background-color, var(--mat-sys-surface));
|
||
color: var(--mat-toolbar-container-text-color, var(--mat-sys-on-surface));
|
||
}
|
||
.mat-toolbar, .mat-toolbar h1, .mat-toolbar h2, .mat-toolbar h3, .mat-toolbar h4, .mat-toolbar h5, .mat-toolbar h6 {
|
||
font-family: var(--mat-toolbar-title-text-font, var(--mat-sys-title-large-font));
|
||
font-size: var(--mat-toolbar-title-text-size, var(--mat-sys-title-large-size));
|
||
line-height: var(--mat-toolbar-title-text-line-height, var(--mat-sys-title-large-line-height));
|
||
font-weight: var(--mat-toolbar-title-text-weight, var(--mat-sys-title-large-weight));
|
||
letter-spacing: var(--mat-toolbar-title-text-tracking, var(--mat-sys-title-large-tracking));
|
||
margin: 0;
|
||
}
|
||
@media (forced-colors: active) {
|
||
.mat-toolbar {
|
||
outline: solid 1px;
|
||
}
|
||
}
|
||
.mat-toolbar .mat-form-field-underline,
|
||
.mat-toolbar .mat-form-field-ripple,
|
||
.mat-toolbar .mat-focused .mat-form-field-ripple {
|
||
background-color: currentColor;
|
||
}
|
||
.mat-toolbar .mat-form-field-label,
|
||
.mat-toolbar .mat-focused .mat-form-field-label,
|
||
.mat-toolbar .mat-select-value,
|
||
.mat-toolbar .mat-select-arrow,
|
||
.mat-toolbar .mat-form-field.mat-focused .mat-select-arrow {
|
||
color: inherit;
|
||
}
|
||
.mat-toolbar .mat-input-element {
|
||
caret-color: currentColor;
|
||
}
|
||
.mat-toolbar .mat-mdc-button-base.mat-mdc-button-base.mat-unthemed {
|
||
--mat-button-text-label-text-color: var(--mat-toolbar-container-text-color, var(--mat-sys-on-surface));
|
||
--mat-button-outlined-label-text-color: var(--mat-toolbar-container-text-color, var(--mat-sys-on-surface));
|
||
}
|
||
|
||
.mat-toolbar-row, .mat-toolbar-single-row {
|
||
display: flex;
|
||
box-sizing: border-box;
|
||
padding: 0 16px;
|
||
width: 100%;
|
||
flex-direction: row;
|
||
align-items: center;
|
||
white-space: nowrap;
|
||
height: var(--mat-toolbar-standard-height, 64px);
|
||
}
|
||
@media (max-width: 599px) {
|
||
.mat-toolbar-row, .mat-toolbar-single-row {
|
||
height: var(--mat-toolbar-mobile-height, 56px);
|
||
}
|
||
}
|
||
|
||
.mat-toolbar-multiple-rows {
|
||
display: flex;
|
||
box-sizing: border-box;
|
||
flex-direction: column;
|
||
width: 100%;
|
||
min-height: var(--mat-toolbar-standard-height, 64px);
|
||
}
|
||
@media (max-width: 599px) {
|
||
.mat-toolbar-multiple-rows {
|
||
min-height: var(--mat-toolbar-mobile-height, 56px);
|
||
}
|
||
}
|
||
`],encapsulation:2,changeDetection:0})}return n})();var J2=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=on({type:n});static \u0275inj=nn({imports:[Vi]})}return n})();var CLe=["*"],bLe=`.mdc-list {
|
||
margin: 0;
|
||
padding: 8px 0;
|
||
list-style-type: none;
|
||
}
|
||
.mdc-list:focus {
|
||
outline: none;
|
||
}
|
||
|
||
.mdc-list-item {
|
||
display: flex;
|
||
position: relative;
|
||
justify-content: flex-start;
|
||
overflow: hidden;
|
||
padding: 0;
|
||
align-items: stretch;
|
||
cursor: pointer;
|
||
padding-left: 16px;
|
||
padding-right: 16px;
|
||
background-color: var(--mat-list-list-item-container-color, transparent);
|
||
border-radius: var(--mat-list-list-item-container-shape, var(--mat-sys-corner-none));
|
||
}
|
||
.mdc-list-item.mdc-list-item--selected {
|
||
background-color: var(--mat-list-list-item-selected-container-color);
|
||
}
|
||
.mdc-list-item:focus {
|
||
outline: 0;
|
||
}
|
||
.mdc-list-item.mdc-list-item--disabled {
|
||
cursor: auto;
|
||
}
|
||
.mdc-list-item.mdc-list-item--with-one-line {
|
||
height: var(--mat-list-list-item-one-line-container-height, 48px);
|
||
}
|
||
.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__start {
|
||
align-self: center;
|
||
margin-top: 0;
|
||
}
|
||
.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__end {
|
||
align-self: center;
|
||
margin-top: 0;
|
||
}
|
||
.mdc-list-item.mdc-list-item--with-two-lines {
|
||
height: var(--mat-list-list-item-two-line-container-height, 64px);
|
||
}
|
||
.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__start {
|
||
align-self: flex-start;
|
||
margin-top: 16px;
|
||
}
|
||
.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__end {
|
||
align-self: center;
|
||
margin-top: 0;
|
||
}
|
||
.mdc-list-item.mdc-list-item--with-three-lines {
|
||
height: var(--mat-list-list-item-three-line-container-height, 88px);
|
||
}
|
||
.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__start {
|
||
align-self: flex-start;
|
||
margin-top: 16px;
|
||
}
|
||
.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__end {
|
||
align-self: flex-start;
|
||
margin-top: 16px;
|
||
}
|
||
.mdc-list-item.mdc-list-item--selected::before, .mdc-list-item.mdc-list-item--selected:focus::before, .mdc-list-item:not(.mdc-list-item--selected):focus::before {
|
||
position: absolute;
|
||
box-sizing: border-box;
|
||
width: 100%;
|
||
height: 100%;
|
||
top: 0;
|
||
left: 0;
|
||
content: "";
|
||
pointer-events: none;
|
||
}
|
||
|
||
a.mdc-list-item {
|
||
color: inherit;
|
||
text-decoration: none;
|
||
}
|
||
|
||
.mdc-list-item__start {
|
||
fill: currentColor;
|
||
flex-shrink: 0;
|
||
pointer-events: none;
|
||
}
|
||
.mdc-list-item--with-leading-icon .mdc-list-item__start {
|
||
color: var(--mat-list-list-item-leading-icon-color, var(--mat-sys-on-surface-variant));
|
||
width: var(--mat-list-list-item-leading-icon-size, 24px);
|
||
height: var(--mat-list-list-item-leading-icon-size, 24px);
|
||
margin-left: 16px;
|
||
margin-right: 32px;
|
||
}
|
||
[dir=rtl] .mdc-list-item--with-leading-icon .mdc-list-item__start {
|
||
margin-left: 32px;
|
||
margin-right: 16px;
|
||
}
|
||
.mdc-list-item--with-leading-icon:hover .mdc-list-item__start {
|
||
color: var(--mat-list-list-item-hover-leading-icon-color);
|
||
}
|
||
.mdc-list-item--with-leading-avatar .mdc-list-item__start {
|
||
width: var(--mat-list-list-item-leading-avatar-size, 40px);
|
||
height: var(--mat-list-list-item-leading-avatar-size, 40px);
|
||
margin-left: 16px;
|
||
margin-right: 16px;
|
||
border-radius: 50%;
|
||
}
|
||
.mdc-list-item--with-leading-avatar .mdc-list-item__start, [dir=rtl] .mdc-list-item--with-leading-avatar .mdc-list-item__start {
|
||
margin-left: 16px;
|
||
margin-right: 16px;
|
||
border-radius: 50%;
|
||
}
|
||
|
||
.mdc-list-item__end {
|
||
flex-shrink: 0;
|
||
pointer-events: none;
|
||
}
|
||
.mdc-list-item--with-trailing-meta .mdc-list-item__end {
|
||
font-family: var(--mat-list-list-item-trailing-supporting-text-font, var(--mat-sys-label-small-font));
|
||
line-height: var(--mat-list-list-item-trailing-supporting-text-line-height, var(--mat-sys-label-small-line-height));
|
||
font-size: var(--mat-list-list-item-trailing-supporting-text-size, var(--mat-sys-label-small-size));
|
||
font-weight: var(--mat-list-list-item-trailing-supporting-text-weight, var(--mat-sys-label-small-weight));
|
||
letter-spacing: var(--mat-list-list-item-trailing-supporting-text-tracking, var(--mat-sys-label-small-tracking));
|
||
}
|
||
.mdc-list-item--with-trailing-icon .mdc-list-item__end {
|
||
color: var(--mat-list-list-item-trailing-icon-color, var(--mat-sys-on-surface-variant));
|
||
width: var(--mat-list-list-item-trailing-icon-size, 24px);
|
||
height: var(--mat-list-list-item-trailing-icon-size, 24px);
|
||
}
|
||
.mdc-list-item--with-trailing-icon:hover .mdc-list-item__end {
|
||
color: var(--mat-list-list-item-hover-trailing-icon-color);
|
||
}
|
||
.mdc-list-item.mdc-list-item--with-trailing-meta .mdc-list-item__end {
|
||
color: var(--mat-list-list-item-trailing-supporting-text-color, var(--mat-sys-on-surface-variant));
|
||
}
|
||
.mdc-list-item--selected.mdc-list-item--with-trailing-icon .mdc-list-item__end {
|
||
color: var(--mat-list-list-item-selected-trailing-icon-color, var(--mat-sys-primary));
|
||
}
|
||
|
||
.mdc-list-item__content {
|
||
text-overflow: ellipsis;
|
||
white-space: nowrap;
|
||
overflow: hidden;
|
||
align-self: center;
|
||
flex: 1;
|
||
pointer-events: none;
|
||
}
|
||
.mdc-list-item--with-two-lines .mdc-list-item__content, .mdc-list-item--with-three-lines .mdc-list-item__content {
|
||
align-self: stretch;
|
||
}
|
||
|
||
.mdc-list-item__primary-text {
|
||
text-overflow: ellipsis;
|
||
white-space: nowrap;
|
||
overflow: hidden;
|
||
color: var(--mat-list-list-item-label-text-color, var(--mat-sys-on-surface));
|
||
font-family: var(--mat-list-list-item-label-text-font, var(--mat-sys-body-large-font));
|
||
line-height: var(--mat-list-list-item-label-text-line-height, var(--mat-sys-body-large-line-height));
|
||
font-size: var(--mat-list-list-item-label-text-size, var(--mat-sys-body-large-size));
|
||
font-weight: var(--mat-list-list-item-label-text-weight, var(--mat-sys-body-large-weight));
|
||
letter-spacing: var(--mat-list-list-item-label-text-tracking, var(--mat-sys-body-large-tracking));
|
||
}
|
||
.mdc-list-item:hover .mdc-list-item__primary-text {
|
||
color: var(--mat-list-list-item-hover-label-text-color, var(--mat-sys-on-surface));
|
||
}
|
||
.mdc-list-item:focus .mdc-list-item__primary-text {
|
||
color: var(--mat-list-list-item-focus-label-text-color, var(--mat-sys-on-surface));
|
||
}
|
||
.mdc-list-item--with-two-lines .mdc-list-item__primary-text, .mdc-list-item--with-three-lines .mdc-list-item__primary-text {
|
||
display: block;
|
||
margin-top: 0;
|
||
line-height: normal;
|
||
margin-bottom: -20px;
|
||
}
|
||
.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before, .mdc-list-item--with-three-lines .mdc-list-item__primary-text::before {
|
||
display: inline-block;
|
||
width: 0;
|
||
height: 28px;
|
||
content: "";
|
||
vertical-align: 0;
|
||
}
|
||
.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after, .mdc-list-item--with-three-lines .mdc-list-item__primary-text::after {
|
||
display: inline-block;
|
||
width: 0;
|
||
height: 20px;
|
||
content: "";
|
||
vertical-align: -20px;
|
||
}
|
||
|
||
.mdc-list-item__secondary-text {
|
||
text-overflow: ellipsis;
|
||
white-space: nowrap;
|
||
overflow: hidden;
|
||
display: block;
|
||
margin-top: 0;
|
||
color: var(--mat-list-list-item-supporting-text-color, var(--mat-sys-on-surface-variant));
|
||
font-family: var(--mat-list-list-item-supporting-text-font, var(--mat-sys-body-medium-font));
|
||
line-height: var(--mat-list-list-item-supporting-text-line-height, var(--mat-sys-body-medium-line-height));
|
||
font-size: var(--mat-list-list-item-supporting-text-size, var(--mat-sys-body-medium-size));
|
||
font-weight: var(--mat-list-list-item-supporting-text-weight, var(--mat-sys-body-medium-weight));
|
||
letter-spacing: var(--mat-list-list-item-supporting-text-tracking, var(--mat-sys-body-medium-tracking));
|
||
}
|
||
.mdc-list-item__secondary-text::before {
|
||
display: inline-block;
|
||
width: 0;
|
||
height: 20px;
|
||
content: "";
|
||
vertical-align: 0;
|
||
}
|
||
.mdc-list-item--with-three-lines .mdc-list-item__secondary-text {
|
||
white-space: normal;
|
||
line-height: 20px;
|
||
}
|
||
.mdc-list-item--with-overline .mdc-list-item__secondary-text {
|
||
white-space: nowrap;
|
||
line-height: auto;
|
||
}
|
||
|
||
.mdc-list-item--with-leading-radio.mdc-list-item,
|
||
.mdc-list-item--with-leading-checkbox.mdc-list-item,
|
||
.mdc-list-item--with-leading-icon.mdc-list-item,
|
||
.mdc-list-item--with-leading-avatar.mdc-list-item {
|
||
padding-left: 0;
|
||
padding-right: 16px;
|
||
}
|
||
[dir=rtl] .mdc-list-item--with-leading-radio.mdc-list-item,
|
||
[dir=rtl] .mdc-list-item--with-leading-checkbox.mdc-list-item,
|
||
[dir=rtl] .mdc-list-item--with-leading-icon.mdc-list-item,
|
||
[dir=rtl] .mdc-list-item--with-leading-avatar.mdc-list-item {
|
||
padding-left: 16px;
|
||
padding-right: 0;
|
||
}
|
||
.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text,
|
||
.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text,
|
||
.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text,
|
||
.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text {
|
||
display: block;
|
||
margin-top: 0;
|
||
line-height: normal;
|
||
margin-bottom: -20px;
|
||
}
|
||
.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,
|
||
.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,
|
||
.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,
|
||
.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before {
|
||
display: inline-block;
|
||
width: 0;
|
||
height: 32px;
|
||
content: "";
|
||
vertical-align: 0;
|
||
}
|
||
.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,
|
||
.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,
|
||
.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,
|
||
.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after {
|
||
display: inline-block;
|
||
width: 0;
|
||
height: 20px;
|
||
content: "";
|
||
vertical-align: -20px;
|
||
}
|
||
.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,
|
||
.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,
|
||
.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,
|
||
.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end {
|
||
display: block;
|
||
margin-top: 0;
|
||
line-height: normal;
|
||
}
|
||
.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,
|
||
.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,
|
||
.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,
|
||
.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before {
|
||
display: inline-block;
|
||
width: 0;
|
||
height: 32px;
|
||
content: "";
|
||
vertical-align: 0;
|
||
}
|
||
|
||
.mdc-list-item--with-trailing-icon.mdc-list-item, [dir=rtl] .mdc-list-item--with-trailing-icon.mdc-list-item {
|
||
padding-left: 0;
|
||
padding-right: 0;
|
||
}
|
||
.mdc-list-item--with-trailing-icon .mdc-list-item__end {
|
||
margin-left: 16px;
|
||
margin-right: 16px;
|
||
}
|
||
|
||
.mdc-list-item--with-trailing-meta.mdc-list-item {
|
||
padding-left: 16px;
|
||
padding-right: 0;
|
||
}
|
||
[dir=rtl] .mdc-list-item--with-trailing-meta.mdc-list-item {
|
||
padding-left: 0;
|
||
padding-right: 16px;
|
||
}
|
||
.mdc-list-item--with-trailing-meta .mdc-list-item__end {
|
||
-webkit-user-select: none;
|
||
user-select: none;
|
||
margin-left: 28px;
|
||
margin-right: 16px;
|
||
}
|
||
[dir=rtl] .mdc-list-item--with-trailing-meta .mdc-list-item__end {
|
||
margin-left: 16px;
|
||
margin-right: 28px;
|
||
}
|
||
.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end, .mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end {
|
||
display: block;
|
||
line-height: normal;
|
||
align-self: flex-start;
|
||
margin-top: 0;
|
||
}
|
||
.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end::before, .mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end::before {
|
||
display: inline-block;
|
||
width: 0;
|
||
height: 28px;
|
||
content: "";
|
||
vertical-align: 0;
|
||
}
|
||
|
||
.mdc-list-item--with-leading-radio .mdc-list-item__start,
|
||
.mdc-list-item--with-leading-checkbox .mdc-list-item__start {
|
||
margin-left: 8px;
|
||
margin-right: 24px;
|
||
}
|
||
[dir=rtl] .mdc-list-item--with-leading-radio .mdc-list-item__start,
|
||
[dir=rtl] .mdc-list-item--with-leading-checkbox .mdc-list-item__start {
|
||
margin-left: 24px;
|
||
margin-right: 8px;
|
||
}
|
||
.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__start,
|
||
.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__start {
|
||
align-self: flex-start;
|
||
margin-top: 8px;
|
||
}
|
||
|
||
.mdc-list-item--with-trailing-radio.mdc-list-item,
|
||
.mdc-list-item--with-trailing-checkbox.mdc-list-item {
|
||
padding-left: 16px;
|
||
padding-right: 0;
|
||
}
|
||
[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item,
|
||
[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item {
|
||
padding-left: 0;
|
||
padding-right: 16px;
|
||
}
|
||
.mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-icon, .mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-avatar,
|
||
.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-icon,
|
||
.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-avatar {
|
||
padding-left: 0;
|
||
}
|
||
[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-icon, [dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-avatar,
|
||
[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-icon,
|
||
[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-avatar {
|
||
padding-right: 0;
|
||
}
|
||
.mdc-list-item--with-trailing-radio .mdc-list-item__end,
|
||
.mdc-list-item--with-trailing-checkbox .mdc-list-item__end {
|
||
margin-left: 24px;
|
||
margin-right: 8px;
|
||
}
|
||
[dir=rtl] .mdc-list-item--with-trailing-radio .mdc-list-item__end,
|
||
[dir=rtl] .mdc-list-item--with-trailing-checkbox .mdc-list-item__end {
|
||
margin-left: 8px;
|
||
margin-right: 24px;
|
||
}
|
||
.mdc-list-item--with-trailing-radio.mdc-list-item--with-three-lines .mdc-list-item__end,
|
||
.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-three-lines .mdc-list-item__end {
|
||
align-self: flex-start;
|
||
margin-top: 8px;
|
||
}
|
||
|
||
.mdc-list-group__subheader {
|
||
margin: 0.75rem 16px;
|
||
}
|
||
|
||
.mdc-list-item--disabled .mdc-list-item__start,
|
||
.mdc-list-item--disabled .mdc-list-item__content,
|
||
.mdc-list-item--disabled .mdc-list-item__end {
|
||
opacity: 1;
|
||
}
|
||
.mdc-list-item--disabled .mdc-list-item__primary-text,
|
||
.mdc-list-item--disabled .mdc-list-item__secondary-text {
|
||
opacity: var(--mat-list-list-item-disabled-label-text-opacity, 0.3);
|
||
}
|
||
.mdc-list-item--disabled.mdc-list-item--with-leading-icon .mdc-list-item__start {
|
||
color: var(--mat-list-list-item-disabled-leading-icon-color, var(--mat-sys-on-surface));
|
||
opacity: var(--mat-list-list-item-disabled-leading-icon-opacity, 0.38);
|
||
}
|
||
.mdc-list-item--disabled.mdc-list-item--with-trailing-icon .mdc-list-item__end {
|
||
color: var(--mat-list-list-item-disabled-trailing-icon-color, var(--mat-sys-on-surface));
|
||
opacity: var(--mat-list-list-item-disabled-trailing-icon-opacity, 0.38);
|
||
}
|
||
|
||
.mat-mdc-list-item.mat-mdc-list-item-both-leading-and-trailing, [dir=rtl] .mat-mdc-list-item.mat-mdc-list-item-both-leading-and-trailing {
|
||
padding-left: 0;
|
||
padding-right: 0;
|
||
}
|
||
|
||
.mdc-list-item.mdc-list-item--disabled .mdc-list-item__primary-text {
|
||
color: var(--mat-list-list-item-disabled-label-text-color, var(--mat-sys-on-surface));
|
||
}
|
||
|
||
.mdc-list-item:hover::before {
|
||
background-color: var(--mat-list-list-item-hover-state-layer-color, var(--mat-sys-on-surface));
|
||
opacity: var(--mat-list-list-item-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity));
|
||
}
|
||
|
||
.mdc-list-item.mdc-list-item--disabled::before {
|
||
background-color: var(--mat-list-list-item-disabled-state-layer-color, var(--mat-sys-on-surface));
|
||
opacity: var(--mat-list-list-item-disabled-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity));
|
||
}
|
||
|
||
.mdc-list-item:focus::before {
|
||
background-color: var(--mat-list-list-item-focus-state-layer-color, var(--mat-sys-on-surface));
|
||
opacity: var(--mat-list-list-item-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity));
|
||
}
|
||
|
||
.mdc-list-item--disabled .mdc-radio,
|
||
.mdc-list-item--disabled .mdc-checkbox {
|
||
opacity: var(--mat-list-list-item-disabled-label-text-opacity, 0.3);
|
||
}
|
||
|
||
.mdc-list-item--with-leading-avatar .mat-mdc-list-item-avatar {
|
||
border-radius: var(--mat-list-list-item-leading-avatar-shape, var(--mat-sys-corner-full));
|
||
background-color: var(--mat-list-list-item-leading-avatar-color, var(--mat-sys-primary-container));
|
||
}
|
||
|
||
.mat-mdc-list-item-icon {
|
||
font-size: var(--mat-list-list-item-leading-icon-size, 24px);
|
||
}
|
||
|
||
@media (forced-colors: active) {
|
||
a.mdc-list-item--activated::after {
|
||
content: "";
|
||
position: absolute;
|
||
top: 50%;
|
||
right: 16px;
|
||
transform: translateY(-50%);
|
||
width: 10px;
|
||
height: 0;
|
||
border-bottom: solid 10px;
|
||
border-radius: 10px;
|
||
}
|
||
a.mdc-list-item--activated [dir=rtl]::after {
|
||
right: auto;
|
||
left: 16px;
|
||
}
|
||
}
|
||
|
||
.mat-mdc-list-base {
|
||
display: block;
|
||
}
|
||
.mat-mdc-list-base .mdc-list-item__start,
|
||
.mat-mdc-list-base .mdc-list-item__end,
|
||
.mat-mdc-list-base .mdc-list-item__content {
|
||
pointer-events: auto;
|
||
}
|
||
|
||
.mat-mdc-list-item,
|
||
.mat-mdc-list-option {
|
||
width: 100%;
|
||
box-sizing: border-box;
|
||
-webkit-tap-highlight-color: transparent;
|
||
}
|
||
.mat-mdc-list-item:not(.mat-mdc-list-item-interactive),
|
||
.mat-mdc-list-option:not(.mat-mdc-list-item-interactive) {
|
||
cursor: default;
|
||
}
|
||
.mat-mdc-list-item .mat-divider-inset,
|
||
.mat-mdc-list-option .mat-divider-inset {
|
||
position: absolute;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
}
|
||
.mat-mdc-list-item .mat-mdc-list-item-avatar ~ .mat-divider-inset,
|
||
.mat-mdc-list-option .mat-mdc-list-item-avatar ~ .mat-divider-inset {
|
||
margin-left: 72px;
|
||
}
|
||
[dir=rtl] .mat-mdc-list-item .mat-mdc-list-item-avatar ~ .mat-divider-inset,
|
||
[dir=rtl] .mat-mdc-list-option .mat-mdc-list-item-avatar ~ .mat-divider-inset {
|
||
margin-right: 72px;
|
||
}
|
||
|
||
.mat-mdc-list-item-interactive::before {
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
position: absolute;
|
||
content: "";
|
||
opacity: 0;
|
||
pointer-events: none;
|
||
border-radius: inherit;
|
||
}
|
||
|
||
.mat-mdc-list-item > .mat-focus-indicator {
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
position: absolute;
|
||
pointer-events: none;
|
||
}
|
||
.mat-mdc-list-item:focus-visible > .mat-focus-indicator::before {
|
||
content: "";
|
||
}
|
||
|
||
.mat-mdc-list-item.mdc-list-item--with-three-lines .mat-mdc-list-item-line.mdc-list-item__secondary-text {
|
||
white-space: nowrap;
|
||
line-height: normal;
|
||
}
|
||
.mat-mdc-list-item.mdc-list-item--with-three-lines .mat-mdc-list-item-unscoped-content.mdc-list-item__secondary-text {
|
||
display: -webkit-box;
|
||
-webkit-box-orient: vertical;
|
||
-webkit-line-clamp: 2;
|
||
}
|
||
|
||
mat-action-list button {
|
||
background: none;
|
||
color: inherit;
|
||
border: none;
|
||
font: inherit;
|
||
outline: inherit;
|
||
-webkit-tap-highlight-color: transparent;
|
||
text-align: start;
|
||
}
|
||
mat-action-list button::-moz-focus-inner {
|
||
border: 0;
|
||
}
|
||
|
||
.mdc-list-item--with-leading-icon .mdc-list-item__start {
|
||
margin-inline-start: var(--mat-list-list-item-leading-icon-start-space, 16px);
|
||
margin-inline-end: var(--mat-list-list-item-leading-icon-end-space, 16px);
|
||
}
|
||
|
||
.mat-mdc-nav-list .mat-mdc-list-item {
|
||
border-radius: var(--mat-list-active-indicator-shape, var(--mat-sys-corner-full));
|
||
--mat-focus-indicator-border-radius: var(--mat-list-active-indicator-shape, var(--mat-sys-corner-full));
|
||
}
|
||
.mat-mdc-nav-list .mat-mdc-list-item.mdc-list-item--activated {
|
||
background-color: var(--mat-list-active-indicator-color, var(--mat-sys-secondary-container));
|
||
}
|
||
`,xLe=["unscopedContent"],yLe=["text"],wLe=[[["","matListItemAvatar",""],["","matListItemIcon",""]],[["","matListItemTitle",""]],[["","matListItemLine",""]],"*",[["","matListItemMeta",""]],[["mat-divider"]]],MLe=["[matListItemAvatar],[matListItemIcon]","[matListItemTitle]","[matListItemLine]","*","[matListItemMeta]","mat-divider"];var SLe=new mn("ListOption"),G4=(()=>{class n{_elementRef=f(Kt);constructor(){}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["","matListItemTitle",""]],hostAttrs:[1,"mat-mdc-list-item-title","mdc-list-item__primary-text"]})}return n})(),kLe=(()=>{class n{_elementRef=f(Kt);constructor(){}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["","matListItemLine",""]],hostAttrs:[1,"mat-mdc-list-item-line","mdc-list-item__secondary-text"]})}return n})(),PLe=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["","matListItemMeta",""]],hostAttrs:[1,"mat-mdc-list-item-meta","mdc-list-item__end"]})}return n})(),rH=(()=>{class n{_listOption=f(SLe,{optional:!0});constructor(){}_isAlignedAtStart(){return!this._listOption||this._listOption?._getTogglePosition()==="after"}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,hostVars:4,hostBindings:function(t,i){t&2&&ne("mdc-list-item__start",i._isAlignedAtStart())("mdc-list-item__end",!i._isAlignedAtStart())}})}return n})(),TLe=(()=>{class n extends rH{static \u0275fac=(()=>{let e;return function(i){return(e||(e=yi(n)))(i||n)}})();static \u0275dir=yt({type:n,selectors:[["","matListItemAvatar",""]],hostAttrs:[1,"mat-mdc-list-item-avatar"],features:[mi]})}return n})(),q4=(()=>{class n extends rH{static \u0275fac=(()=>{let e;return function(i){return(e||(e=yi(n)))(i||n)}})();static \u0275dir=yt({type:n,selectors:[["","matListItemIcon",""]],hostAttrs:[1,"mat-mdc-list-item-icon"],features:[mi]})}return n})(),ELe=new mn("MAT_LIST_CONFIG"),W4=(()=>{class n{_isNonInteractive=!0;get disableRipple(){return this._disableRipple}set disableRipple(e){this._disableRipple=Or(e)}_disableRipple=!1;get disabled(){return this._disabled()}set disabled(e){this._disabled.set(Or(e))}_disabled=z(!1);_defaultOptions=f(ELe,{optional:!0});static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,hostVars:1,hostBindings:function(t,i){t&2&&Ce("aria-disabled",i.disabled)},inputs:{disableRipple:"disableRipple",disabled:"disabled"}})}return n})(),OLe=(()=>{class n{_elementRef=f(Kt);_ngZone=f(Gi);_listBase=f(W4,{optional:!0});_platform=f(ja);_hostElement;_isButtonElement;_noopAnimations=$a();_avatars;_icons;set lines(e){this._explicitLines=mm(e,null),this._updateItemLines(!1)}_explicitLines=null;get disableRipple(){return this.disabled||this._disableRipple||this._noopAnimations||!!this._listBase?.disableRipple}set disableRipple(e){this._disableRipple=Or(e)}_disableRipple=!1;get disabled(){return this._disabled()||!!this._listBase?.disabled}set disabled(e){this._disabled.set(Or(e))}_disabled=z(!1);_subscriptions=new Oo;_rippleRenderer=null;_hasUnscopedTextContent=!1;rippleConfig;get rippleDisabled(){return this.disableRipple||!!this.rippleConfig.disabled}constructor(){f(Ta).load(Xr);let e=f(eb,{optional:!0});this.rippleConfig=e||{},this._hostElement=this._elementRef.nativeElement,this._isButtonElement=this._hostElement.nodeName.toLowerCase()==="button",this._listBase&&!this._listBase._isNonInteractive&&this._initInteractiveListItem(),this._isButtonElement&&!this._hostElement.hasAttribute("type")&&this._hostElement.setAttribute("type","button")}ngAfterViewInit(){this._monitorProjectedLinesAndTitle(),this._updateItemLines(!0)}ngOnDestroy(){this._subscriptions.unsubscribe(),this._rippleRenderer!==null&&this._rippleRenderer._removeTriggerEvents()}_hasIconOrAvatar(){return!!(this._avatars.length||this._icons.length)}_initInteractiveListItem(){this._hostElement.classList.add("mat-mdc-list-item-interactive"),this._rippleRenderer=new c5(this,this._ngZone,this._hostElement,this._platform,f(xa)),this._rippleRenderer.setupTriggerEvents(this._hostElement)}_monitorProjectedLinesAndTitle(){this._ngZone.runOutsideAngular(()=>{this._subscriptions.add(ro(this._lines.changes,this._titles.changes).subscribe(()=>this._updateItemLines(!1)))})}_updateItemLines(e){if(!this._lines||!this._titles||!this._unscopedContent)return;e&&this._checkDomForUnscopedTextContent();let t=this._explicitLines??this._inferLinesFromContent(),i=this._unscopedContent.nativeElement;if(this._hostElement.classList.toggle("mat-mdc-list-item-single-line",t<=1),this._hostElement.classList.toggle("mdc-list-item--with-one-line",t<=1),this._hostElement.classList.toggle("mdc-list-item--with-two-lines",t===2),this._hostElement.classList.toggle("mdc-list-item--with-three-lines",t===3),this._hasUnscopedTextContent){let a=this._titles.length===0&&t===1;i.classList.toggle("mdc-list-item__primary-text",a),i.classList.toggle("mdc-list-item__secondary-text",!a)}else i.classList.remove("mdc-list-item__primary-text"),i.classList.remove("mdc-list-item__secondary-text")}_inferLinesFromContent(){let e=this._titles.length+this._lines.length;return this._hasUnscopedTextContent&&(e+=1),e}_checkDomForUnscopedTextContent(){this._hasUnscopedTextContent=Array.from(this._unscopedContent.nativeElement.childNodes).filter(e=>e.nodeType!==e.COMMENT_NODE).some(e=>!!(e.textContent&&e.textContent.trim()))}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,contentQueries:function(t,i,a){if(t&1&&Zi(a,TLe,4)(a,q4,4),t&2){let s;gt(s=ht())&&(i._avatars=s),gt(s=ht())&&(i._icons=s)}},hostVars:4,hostBindings:function(t,i){t&2&&(Ce("aria-disabled",i.disabled)("disabled",i._isButtonElement&&i.disabled||null),ne("mdc-list-item--disabled",i.disabled))},inputs:{lines:"lines",disableRipple:"disableRipple",disabled:"disabled"}})}return n})();var sH=(()=>{class n extends OLe{_lines;_titles;_meta;_unscopedContent;_itemText;get activated(){return this._activated}set activated(e){this._activated=Or(e)}_activated=!1;_getAriaCurrent(){return this._hostElement.nodeName==="A"&&this._activated?"page":null}_hasBothLeadingAndTrailing(){return this._meta.length!==0&&(this._avatars.length!==0||this._icons.length!==0)}static \u0275fac=(()=>{let e;return function(i){return(e||(e=yi(n)))(i||n)}})();static \u0275cmp=V({type:n,selectors:[["mat-list-item"],["a","mat-list-item",""],["button","mat-list-item",""]],contentQueries:function(t,i,a){if(t&1&&Zi(a,kLe,5)(a,G4,5)(a,PLe,5),t&2){let s;gt(s=ht())&&(i._lines=s),gt(s=ht())&&(i._titles=s),gt(s=ht())&&(i._meta=s)}},viewQuery:function(t,i){if(t&1&&Kn(xLe,5)(yLe,5),t&2){let a;gt(a=ht())&&(i._unscopedContent=a.first),gt(a=ht())&&(i._itemText=a.first)}},hostAttrs:[1,"mat-mdc-list-item","mdc-list-item"],hostVars:13,hostBindings:function(t,i){t&2&&(Ce("aria-current",i._getAriaCurrent()),ne("mdc-list-item--activated",i.activated)("mdc-list-item--with-leading-avatar",i._avatars.length!==0)("mdc-list-item--with-leading-icon",i._icons.length!==0)("mdc-list-item--with-trailing-meta",i._meta.length!==0)("mat-mdc-list-item-both-leading-and-trailing",i._hasBothLeadingAndTrailing())("_mat-animation-noopable",i._noopAnimations))},inputs:{activated:"activated"},exportAs:["matListItem"],features:[mi],ngContentSelectors:MLe,decls:10,vars:0,consts:[["unscopedContent",""],[1,"mdc-list-item__content"],[1,"mat-mdc-list-item-unscoped-content",3,"cdkObserveContent"],[1,"mat-focus-indicator"]],template:function(t,i){t&1&&(pi(wLe),Zt(0),r(1,"span",1),Zt(2,1),Zt(3,2),r(4,"span",2,0),_("cdkObserveContent",function(){return i._updateItemLines(!0)}),Zt(6,3),l()(),Zt(7,4),Zt(8,5),L(9,"div",3))},dependencies:[YA],encapsulation:2,changeDetection:0})}return n})();var lH=(()=>{class n extends W4{_isNonInteractive=!1;static \u0275fac=(()=>{let e;return function(i){return(e||(e=yi(n)))(i||n)}})();static \u0275cmp=V({type:n,selectors:[["mat-nav-list"]],hostAttrs:["role","navigation",1,"mat-mdc-nav-list","mat-mdc-list-base","mdc-list"],exportAs:["matNavList"],features:[un([{provide:W4,useExisting:n}]),mi],ngContentSelectors:CLe,decls:1,vars:0,template:function(t,i){t&1&&(pi(),Zt(0))},styles:[bLe],encapsulation:2,changeDetection:0})}return n})();var ek=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=on({type:n});static \u0275inj=nn({imports:[ZA,Oc,C5,Vi,Ja]})}return n})();var ILe=()=>["/controllers"],ALe=n=>["controller",n,"help"],NLe=n=>["/controller",n,"computes"],FLe=n=>["/controller",n,"systemstatus"],RLe=n=>["/controller",n,"projects"],zLe=n=>["/controller",n,"image-manager"],LLe=n=>["/controller",n,"preferences"],VLe=n=>["/controller",n,"settings"],BLe=n=>["/controller",n,"server-settings"],jLe=n=>["/controller",n,"management","users"];function $Le(n,o){if(n&1){let e=R();r(0,"a",10),_("click",function(){y(e);let i=h(),a=Te(2);return w(i.isSmallScreen()&&a.close())}),r(1,"mat-icon",11),c(2,"dns"),l(),r(3,"span",12),c(4,"Computes"),l()(),r(5,"a",10),_("click",function(){y(e);let i=h(),a=Te(2);return w(i.isSmallScreen()&&a.close())}),r(6,"mat-icon",11),c(7,"monitor_heart"),l(),r(8,"span",12),c(9,"System status"),l()(),r(10,"a",10),_("click",function(){y(e);let i=h(),a=Te(2);return w(i.isSmallScreen()&&a.close())}),r(11,"mat-icon",11),c(12,"work"),l(),r(13,"span",12),c(14,"Projects"),l()(),r(15,"a",10),_("click",function(){y(e);let i=h(),a=Te(2);return w(i.isSmallScreen()&&a.close())}),r(16,"mat-icon",11),c(17,"image"),l(),r(18,"span",12),c(19,"Image manager"),l()(),r(20,"a",10),_("click",function(){y(e);let i=h(),a=Te(2);return w(i.isSmallScreen()&&a.close())}),r(21,"mat-icon",11),c(22,"settings_applications"),l(),r(23,"span",12),c(24,"Templates"),l()()}if(n&2){let e=h();v("routerLink",tn(5,NLe,e.controllerId)),m(5),v("routerLink",tn(7,FLe,e.controllerId)),m(5),v("routerLink",tn(9,RLe,e.controllerId)),m(5),v("routerLink",tn(11,zLe,e.controllerId)),m(5),v("routerLink",tn(13,LLe,e.controllerId))}}function HLe(n,o){if(n&1){let e=R();r(0,"a",10),_("click",function(){y(e);let i=h(2),a=Te(2);return w(i.isSmallScreen()&&a.close())}),r(1,"mat-icon",11),c(2,"dns"),l(),r(3,"span",12),c(4,"Server settings"),l()(),r(5,"a",10),_("click",function(){y(e);let i=h(2),a=Te(2);return w(i.isSmallScreen()&&a.close())}),r(6,"mat-icon",11),c(7,"manage_accounts"),l(),r(8,"span",12),c(9,"Access Management"),l()()}if(n&2){let e=h(2);v("routerLink",tn(2,BLe,e.controllerId)),m(5),v("routerLink",tn(4,jLe,e.controllerId))}}function ULe(n,o){if(n&1){let e=R();r(0,"a",10),_("click",function(){y(e);let i=h(),a=Te(2);return w(i.isSmallScreen()&&a.close())}),r(1,"mat-icon",11),c(2,"settings"),l(),r(3,"span",12),c(4,"Web settings"),l()(),T(5,HLe,10,6)}if(n&2){let e=h();v("routerLink",tn(2,VLe,e.controllerId)),m(5),E(e.isAdministrator()?5:-1)}}function WLe(n,o){if(n&1){let e=R();r(0,"button",31),_("click",function(){y(e);let i=h();return w(i.goToDocumentation())}),r(1,"mat-icon",11),c(2,"api"),l(),r(3,"span",12),c(4,"API documentation"),l()()}}function GLe(n,o){n&1&&(r(0,"span",23),L(1,"img",32),c(2," GNS3 "),l())}function qLe(n,o){if(n&1&&(r(0,"span",26),c(1),l()),n&2){let e=h();m(),N(e.notificationCenter.unreadCount()>99?"99+":e.notificationCenter.unreadCount())}}function QLe(n,o){if(n&1&&(r(0,"button",27)(1,"span",33)(2,"mat-icon"),c(3,"person"),l()(),r(4,"span",34),c(5),l(),r(6,"mat-icon",35),c(7,"arrow_drop_down"),l()()),n&2){let e=h(),t=Te(53);v("matMenuTriggerFor",t),m(5),N(e.controller.username||"User")}}var tk=(()=>{class n{isInstalledSoftwareAvailable=!1;routeSubscription;breakpointSubscription;controllerStatusSubscription;shouldStopControllersOnClosing=!0;controllerId;controller;sidenavOpened=z(!0);isSmallScreen=z(!1);sidebarMode=z("side");isAdministrator=z(!1);controllerManagement=f(U_);toasterService=f(re);userService=f(ba);progressService=f(mo);dialog=f(Xe);router=f(Ft);route=f($t);controllerService=f(_t);cd=f(oe);connectionManager=f(ed);breakpointObserver=f(XC);notificationCenter=f(gg);ngOnInit(){this.notificationCenter.closePanel(),this.routeSubscription=this.router.events.pipe(Yi(e=>e instanceof Vp)).subscribe(()=>{this.notificationCenter.closePanel();let e=this.getParamFromRoute(this.route,"controller_id");e!==this.controllerId&&(this.controllerId=e,this.getData()),this.cd.markForCheck()}),this.controllerId=this.getParamFromRoute(this.route,"controller_id"),this.getData(),this.isInstalledSoftwareAvailable=!1,this.controllerStatusSubscription=this.controllerManagement.controllerStatusChanged.subscribe(e=>{e.status==="errored"&&(console.error(e.message),this.toasterService.error(e.message)),e.status==="stderr"&&(console.error(e.message),this.toasterService.error(e.message))}),this.shouldStopControllersOnClosing=!1,this.breakpointSubscription=this.breakpointObserver.observe([mf.XSmall,mf.Small]).subscribe(e=>{let t=e.matches;this.isSmallScreen.set(t),t?(this.sidenavOpened.set(!1),this.sidebarMode.set("over")):(this.sidenavOpened.set(!0),this.sidebarMode.set("side")),this.cd.markForCheck()})}toggleSidenav(){this.sidenavOpened.update(e=>!e)}getParamFromRoute(e,t){let i=e;for(;i.firstChild;){i=i.firstChild;let a=i.snapshot.paramMap.get(t);if(a)return a}return i.snapshot.paramMap.get(t)}openLoggedUserDialog(){this.dialog.open(J$,{panelClass:["base-dialog-panel","dialog-small-panel"],autoFocus:!1,data:{controllerId:+this.controllerId}})}openApiKeyManagementDialog(){this.controllerService.get(+this.controllerId).then(e=>{this.dialog.open(oH,{panelClass:["base-dialog-panel","configurator-dialog-panel","dialog-large-panel"],autoFocus:!1,data:{controller:e}})})}openAiProfileDialog(){this.controllerService.get(+this.controllerId).then(e=>{this.userService.getInformationAboutLoggedUser(e).subscribe(t=>{this.dialog.open(Z2,{panelClass:["base-dialog-panel","configurator-dialog-panel","dialog-extra-large-panel"],autoFocus:!1,data:{user:t,controller:e}})})})}goToDocumentation(){this.controllerService.get(+this.controllerId).then(e=>{window.open(`${e.protocol}//${e.host}:${e.port}/docs`)})}logout(){this.controllerService.get(+this.controllerId).then(e=>{localStorage.removeItem(`refresh_token_${e.id}`),e.authToken=null,this.controllerService.update(e).then(t=>{this.connectionManager.disconnect(),this.router.navigate(["/controller",e.id,"login"])})})}async onBeforeUnload(e){if(this.shouldStopControllersOnClosing)return e.preventDefault(),e.returnValue=!1,this.progressService.activate(),await this.controllerManagement.stopAll(),this.shouldStopControllersOnClosing=!1,this.progressService.deactivate(),window.close(),!1}getData(){let e=this.controllerId;this.controller=void 0,this.isAdministrator.set(!1);let t=Number(e);if(!Number.isInteger(t)||t<=0){this.cd.markForCheck();return}this.controllerService.get(t).then(i=>{if(this.controllerId===e){if(this.controller=i,!i){this.cd.markForCheck();return}this.userService.getInformationAboutLoggedUser(i).subscribe({next:a=>{this.controllerId===e&&(this.isAdministrator.set(!!a.is_superadmin),this.cd.markForCheck())},error:()=>{this.controllerId===e&&(this.isAdministrator.set(!1),this.cd.markForCheck())}})}},()=>{this.controllerId===e&&(this.controller=void 0,this.isAdministrator.set(!1),this.cd.markForCheck())})}ngOnDestroy(){this.controllerStatusSubscription?.unsubscribe(),this.routeSubscription?.unsubscribe(),this.breakpointSubscription?.unsubscribe()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-default-layout"]],hostBindings:function(t,i){t&1&&_("beforeunload",function(s){return i.onBeforeUnload(s)},So)},decls:83,vars:21,consts:[["sidenav",""],["userMenu","matMenu"],["autosize","",1,"layout-container"],[1,"sidebar",3,"closed","mode","opened"],[1,"sidebar__inner"],[1,"sidebar__brand"],["svgIcon","gns3",1,"sidebar__brand-icon"],[1,"sidebar__brand-text"],[1,"sidebar__section-title"],[1,"sidebar__nav"],["mat-list-item","","routerLinkActive","active",1,"sidebar__nav-item",3,"click","routerLink"],["matListItemIcon",""],["matListItemTitle",""],[1,"sidebar__divider"],["mat-list-item","","href","https://docs.gns3.com/docs-3.1-en","target","_blank","rel","noopener",1,"sidebar__nav-item"],["mat-list-item","","href","https://gns3.com/community/featured","target","_blank","rel","noopener",1,"sidebar__nav-item"],["mat-list-item","","type","button",1,"sidebar__nav-item"],["mat-list-item","","href","https://github.com/GNS3/gns3-web-ui/issues","target","_blank","rel","noopener",1,"sidebar__nav-item"],[1,"sidebar__spacer"],[1,"layout-content"],[1,"header"],[1,"toolbar-primary"],["mat-icon-button","","matTooltip","Toggle sidebar",1,"gns3-button","menu-button",3,"click"],[1,"toolbar__brand"],[1,"spacer"],["mat-icon-button","","type","button","matTooltip","Notifications","aria-controls","notification-center-panel",1,"toolbar__notifications",3,"click"],[1,"toolbar__notification-badge"],["mat-button","","aria-label","Open user account menu",1,"toolbar__account",3,"matMenuTriggerFor"],["mat-menu-item","",3,"disabled","routerLink"],["mat-menu-item","",3,"click","disabled"],[1,"main-content"],["mat-list-item","","type","button",1,"sidebar__nav-item",3,"click"],["src","./assets/gns3_icon.svg","alt","",1,"toolbar__brand-icon"],[1,"toolbar__account-avatar"],[1,"toolbar__account-name"],[1,"toolbar__account-arrow"]],template:function(t,i){if(t&1){let a=R();r(0,"mat-drawer-container",2)(1,"mat-drawer",3,0),_("closed",function(){return i.sidenavOpened.set(!1)}),r(3,"div",4)(4,"div",5),L(5,"mat-icon",6),r(6,"span",7),c(7,"GNS3"),l()(),r(8,"div",8),c(9,"Main Menu"),l(),r(10,"mat-nav-list",9)(11,"a",10),_("click",function(){y(a);let d=Te(2);return w(i.isSmallScreen()&&d.close())}),r(12,"mat-icon",11),c(13,"developer_board"),l(),r(14,"span",12),c(15,"Controllers"),l()(),T(16,$Le,25,15),T(17,ULe,6,4),l(),L(18,"div",13),r(19,"div",8),c(20,"Support"),l(),r(21,"mat-nav-list",9)(22,"a",14)(23,"mat-icon",11),c(24,"menu_book"),l(),r(25,"span",12),c(26,"Documentation"),l()(),r(27,"a",15)(28,"mat-icon",11),c(29,"forum"),l(),r(30,"span",12),c(31,"Community"),l()(),T(32,WLe,5,0,"button",16),r(33,"a",17)(34,"mat-icon",11),c(35,"bug_report"),l(),r(36,"span",12),c(37,"Report Issue"),l()()(),L(38,"div",18),l()(),r(39,"mat-drawer-content",19)(40,"header",20)(41,"mat-toolbar",21)(42,"button",22),_("click",function(){return i.toggleSidenav()}),r(43,"mat-icon"),c(44,"menu"),l()(),T(45,GLe,3,0,"span",23),L(46,"span",24),r(47,"button",25),_("click",function(){return i.notificationCenter.togglePanel()}),r(48,"mat-icon"),c(49),l(),T(50,qLe,2,1,"span",26),l(),T(51,QLe,8,2,"button",27),r(52,"mat-menu",null,1)(54,"button",28)(55,"mat-icon"),c(56,"help"),l(),r(57,"span"),c(58,"Help"),l()(),r(59,"button",29),_("click",function(){return i.openLoggedUserDialog()}),r(60,"mat-icon"),c(61,"person"),l(),r(62,"span"),c(63,"User info"),l()(),r(64,"button",29),_("click",function(){return i.openApiKeyManagementDialog()}),r(65,"mat-icon"),c(66,"vpn_key"),l(),r(67,"span"),c(68,"API Keys"),l()(),r(69,"button",29),_("click",function(){return i.openAiProfileDialog()}),r(70,"mat-icon"),c(71,"psychology"),l(),r(72,"span"),c(73,"AI Profile"),l()(),r(74,"button",29),_("click",function(){return i.logout()}),r(75,"mat-icon"),c(76,"highlight_off"),l(),r(77,"span"),c(78,"Logout"),l()()()()(),r(79,"main",30),L(80,"router-outlet"),l()()(),L(81,"app-notification-center")(82,"app-progress")}t&2&&(m(),v("mode",i.sidebarMode())("opened",i.sidenavOpened()),m(10),v("routerLink",at(18,ILe)),m(5),E(i.controllerId?16:-1),m(),E(i.controllerId?17:-1),m(15),E(i.controllerId?32:-1),m(13),E(i.sidenavOpened()?-1:45),m(2),Ce("aria-label",i.notificationCenter.panelOpen()?"Close notifications":"Open notifications")("aria-expanded",i.notificationCenter.panelOpen()),m(2),N(i.notificationCenter.panelOpen()?"notifications":"notifications_none"),m(),E(i.notificationCenter.unreadCount()>0?50:-1),m(),E(i.controller&&i.controllerId?51:-1),m(3),v("disabled",!i.controllerId)("routerLink",tn(19,ALe,i.controllerId)),m(5),v("disabled",!i.controllerId),m(5),v("disabled",!i.controllerId),m(5),v("disabled",!i.controllerId),m(5),v("disabled",!i.controllerId))},dependencies:[fe,vn,mg,Co,JC,J2,aH,Y,he,Be,ie,ce,it,Ko,ut,eo,st,pt,n1,IT,AT,W0,ek,lH,sH,q4,G4,Um,A2],styles:['@charset "UTF-8";[_nghost-%COMP%]{--layout-header-height: 64px;display:block;height:100vh}.layout-container[_ngcontent-%COMP%]{height:100%;background:linear-gradient(135deg,var(--mat-sys-primary-container) 0%,var(--mat-sys-background) 100%)}.sidebar[_ngcontent-%COMP%]{width:240px;border-radius:0;background:var(--mat-sys-surface-container-low);border-right:1px solid var(--mat-sys-outline-variant)}.sidebar__inner[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;padding:0}.sidebar__brand[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;box-sizing:border-box;height:var(--layout-header-height);min-height:var(--layout-header-height);gap:10px;padding:0 20px;border-bottom:1px solid var(--mat-sys-outline-variant);margin-bottom:8px}.sidebar__brand-icon[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;width:32px;height:32px;padding:5px;border-radius:10px;color:var(--mat-sys-on-primary);background:var(--mat-sys-primary)}.sidebar__brand-text[_ngcontent-%COMP%]{font-size:24px;font-weight:600;color:var(--mat-sys-on-surface);letter-spacing:-.3px}.sidebar__section-title[_ngcontent-%COMP%]{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--mat-sys-on-surface-variant);opacity:.6;padding:12px 20px 6px}.sidebar__nav[_ngcontent-%COMP%]{padding:0 8px}.sidebar__nav-item[_ngcontent-%COMP%]{width:100%;border:0;border-radius:8px;margin:2px 0;color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;text-align:left;transition:background-color var(--gns3-motion-duration-standard) ease,color var(--gns3-motion-duration-standard) ease}.sidebar__nav-item[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container-high);color:var(--mat-sys-on-surface)}.sidebar__nav-item.active[_ngcontent-%COMP%]{background:var(--mat-sys-primary-container);color:var(--mat-sys-primary)}.sidebar__nav-item.active[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.sidebar__nav-item[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);margin-right:4px}.sidebar__divider[_ngcontent-%COMP%]{height:1px;background:var(--mat-sys-outline-variant);margin:12px 20px;opacity:.5}.sidebar__spacer[_ngcontent-%COMP%]{flex:1}.layout-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:hidden}.header[_ngcontent-%COMP%]{position:sticky;top:0;box-shadow:0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 20%,transparent);z-index:10}.toolbar-primary[_ngcontent-%COMP%]{background-color:var(--mat-sys-primary);color:var(--mat-sys-on-primary);height:var(--layout-header-height);min-height:var(--layout-header-height)}.toolbar-primary[_ngcontent-%COMP%] button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary)}.toolbar-primary[_ngcontent-%COMP%] .gns3-button[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;height:40px;width:40px;border-radius:20px;margin:2px 0;transition:transform var(--gns3-motion-duration-standard) ease}.toolbar-primary[_ngcontent-%COMP%] .gns3-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary)}.toolbar-primary[_ngcontent-%COMP%] .gns3-button[_ngcontent-%COMP%]:hover{transform:scale(1.3)}.toolbar__brand[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;font-size:16px;font-weight:600;margin:0 16px 0 4px;color:var(--mat-sys-on-primary);letter-spacing:-.3px}.toolbar__brand-icon[_ngcontent-%COMP%]{display:block;object-fit:contain;flex-shrink:0;width:24px;height:24px}.toolbar__account[_ngcontent-%COMP%]{min-width:0;height:52px;padding:4px 8px;border-radius:12px;color:var(--mat-sys-on-primary);--mat-text-button-label-text-color: var(--mat-sys-on-primary);line-height:normal}.toolbar__account[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-on-primary) 10%,transparent)}.toolbar__notifications[_ngcontent-%COMP%]{position:relative;width:var(--gns3-density-control-height);height:var(--gns3-density-control-height);margin-right:var(--gns3-density-space-2);color:var(--mat-sys-on-primary);--mat-icon-button-icon-color: var(--mat-sys-on-primary)}.toolbar__notification-badge[_ngcontent-%COMP%]{position:absolute;top:1px;right:1px;min-width:16px;height:16px;padding:0 4px;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;color:var(--mat-sys-on-error);background:var(--mat-sys-error);border:2px solid var(--mat-sys-primary);border-radius:999px;font-size:9px;font-weight:700;line-height:1}.toolbar__account-avatar[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container);vertical-align:middle}.toolbar__account-avatar[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:20px;height:20px;font-size:20px}.toolbar-primary[_ngcontent-%COMP%] .toolbar__account-avatar[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container)}.toolbar__account-name[_ngcontent-%COMP%]{display:inline-block;max-width:160px;overflow:hidden;margin-left:9px;font-size:14px;font-weight:600;line-height:36px;color:var(--mat-sys-on-primary);text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.toolbar__account-arrow[_ngcontent-%COMP%]{margin-left:4px;color:var(--mat-sys-on-primary);vertical-align:middle}.spacer[_ngcontent-%COMP%]{flex:1 1 auto}.main-content[_ngcontent-%COMP%]{overflow-y:auto;background:transparent;flex:1;min-height:0}@media(max-width:768px){.sidebar[_ngcontent-%COMP%]{width:200px}}@media(min-width:1920px){.sidebar[_ngcontent-%COMP%]{width:260px}}[data-density=compact][_nghost-%COMP%], [data-density=compact] [_nghost-%COMP%]{--layout-header-height: 52px}[data-density=compact][_nghost-%COMP%] .toolbar-primary[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .toolbar-primary[_ngcontent-%COMP%]{--mat-toolbar-standard-height: 52px;--mat-toolbar-mobile-height: 44px}[data-density=compact][_nghost-%COMP%] .toolbar-primary[_ngcontent-%COMP%] .gns3-button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .toolbar-primary[_ngcontent-%COMP%] .gns3-button[_ngcontent-%COMP%]{height:34px;width:34px;border-radius:17px;margin:1px 0}[data-density=compact][_nghost-%COMP%] .toolbar-primary[_ngcontent-%COMP%] .gns3-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .toolbar-primary[_ngcontent-%COMP%] .gns3-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:20px;height:20px;font-size:20px}[data-density=compact][_nghost-%COMP%] .toolbar__brand[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .toolbar__brand[_ngcontent-%COMP%]{font-size:15px;margin:0 12px 0 4px;line-height:1}[data-density=compact][_nghost-%COMP%] .toolbar__brand-icon[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .toolbar__brand-icon[_ngcontent-%COMP%]{width:22px;height:22px}[data-density=compact][_nghost-%COMP%] .toolbar__account[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .toolbar__account[_ngcontent-%COMP%]{height:42px;padding-block:2px}[data-density=compact][_nghost-%COMP%] .toolbar__account-avatar[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .toolbar__account-avatar[_ngcontent-%COMP%]{width:30px;height:30px}[data-density=compact][_nghost-%COMP%] .toolbar__account-avatar[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .toolbar__account-avatar[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:18px;height:18px;font-size:18px}[data-density=compact][_nghost-%COMP%] .toolbar__account-name[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .toolbar__account-name[_ngcontent-%COMP%]{font-size:13px;line-height:30px}[data-density=compact][_nghost-%COMP%] .sidebar__brand[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .sidebar__brand[_ngcontent-%COMP%]{padding:0 16px;margin-bottom:4px}[data-density=compact][_nghost-%COMP%] .sidebar__brand-icon[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .sidebar__brand-icon[_ngcontent-%COMP%]{width:28px;height:28px;padding:4px}[data-density=compact][_nghost-%COMP%] .sidebar__brand-text[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .sidebar__brand-text[_ngcontent-%COMP%]{font-size:24px}[data-density=compact][_nghost-%COMP%] .sidebar__section-title[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .sidebar__section-title[_ngcontent-%COMP%]{padding:8px 16px 4px}[data-density=compact][_nghost-%COMP%] .sidebar__nav[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .sidebar__nav[_ngcontent-%COMP%]{padding:0 6px}[data-density=compact][_nghost-%COMP%] .sidebar__nav-item[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .sidebar__nav-item[_ngcontent-%COMP%]{--mat-list-list-item-one-line-container-height: 40px;margin:1px 0}[data-density=compact][_nghost-%COMP%] .sidebar__nav-item[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .sidebar__nav-item[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:20px;height:20px;font-size:20px}[data-density=compact][_nghost-%COMP%] .sidebar__divider[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .sidebar__divider[_ngcontent-%COMP%]{margin:8px 16px}@media(max-width:599px){[_nghost-%COMP%]{--layout-header-height: 56px}[data-density=compact][_nghost-%COMP%], [data-density=compact] [_nghost-%COMP%]{--layout-header-height: 44px}}@media(max-width:640px){.toolbar__account-name[_ngcontent-%COMP%], .toolbar__account-arrow[_ngcontent-%COMP%]{display:none}.toolbar__account[_ngcontent-%COMP%]{padding-inline:4px}}'],changeDetection:0})}return n})();var K_=(()=>{class n{controllerService;constructor(e){this.controllerService=e}resolve(e){return this.controllerService.get(parseInt(e.params.controller_id))}static \u0275fac=function(t){return new(t||n)(_e(_t))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var nk=(n,o,e="")=>t=>La(500).pipe(Dn(()=>o.list(n)),Pt(i=>i.find(a=>a.username===t.value&&t.value!==e)?{userExists:!0}:null));var ik=(n,o,e="")=>t=>La(500).pipe(Dn(()=>o.list(n)),Pt(i=>i.find(a=>a.email===t.value&&t.value!==e)?{emailExists:!0}:null));var Xl=(()=>{class n{httpController;constructor(e){this.httpController=e}getGroups(e){return this.httpController.get(e,"/access/groups")}getGroupMember(e,t){return this.httpController.get(e,`/access/groups/${t}/members`)}addGroup(e,t){return this.httpController.post(e,"/access/groups",{name:t})}delete(e,t){return this.httpController.delete(e,`/access/groups/${t}`)}get(e,t){return this.httpController.get(e,`/access/groups/${t}`)}addMemberToGroup(e,t,i){return this.httpController.put(e,`/access/groups/${t.user_group_id}/members/${i.user_id}`,{})}removeUser(e,t,i){return this.httpController.delete(e,`/access/groups/${t.user_group_id}/members/${i.user_id}`)}update(e,t){return this.httpController.put(e,`/access/groups/${t.user_group_id}`,{name:t.name})}getGroupRole(e,t){return this.httpController.get(e,`/access/groups/${t}/roles`)}removeRole(e,t,i){return this.httpController.delete(e,`/access/groups/${t.user_group_id}/roles/${i.role_id}`)}addRoleToGroup(e,t,i){return this.httpController.put(e,`/access/groups/${t.user_group_id}/roles/${i.role_id}`,{})}static \u0275fac=function(t){return new(t||n)(_e(sn))};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var KLe=(n,o)=>o.name;function XLe(n,o){n&1&&(r(0,"mat-error"),c(1,"Username is required"),l())}function YLe(n,o){n&1&&(r(0,"mat-error"),c(1,"Username is incorrect"),l())}function ZLe(n,o){n&1&&(r(0,"mat-error"),c(1,"User with this username exists"),l())}function JLe(n,o){n&1&&(r(0,"mat-error"),c(1,"Email is required"),l())}function e7e(n,o){n&1&&(r(0,"mat-error"),c(1,"Email must include a valid domain (e.g., user@example.com)"),l())}function t7e(n,o){n&1&&(r(0,"mat-error"),c(1,"A password between 6 and 100 characters is required."),l())}function n7e(n,o){n&1&&(r(0,"mat-error"),c(1,"Password and Confirm password must be the same."),l())}function i7e(n,o){if(n&1&&(r(0,"mat-option",18),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e.name," ")}}function o7e(n,o){if(n&1){let e=R();r(0,"mat-chip",22),_("removed",function(){let i=y(e).$implicit,a=h();return w(a.deleteGroup(i))}),c(1),r(2,"button",23)(3,"mat-icon"),c(4,"cancel"),l()()()}if(n&2){let e=o.$implicit;m(),X(" ",e.name," ")}}var ok=(()=>{class n{dialogRef=f(We);userService=f(ba);toasterService=f(re);groupService=f(Xl);cd=f(oe);addUserForm;controller;hidePassword=!0;hideConfirmPassword=!0;groups=[];groupsToAdd=new Set([]);autocompleteControl=new Ge;filteredGroups;autocompleteTrigger;constructor(){}ngOnInit(){this.addUserForm=new Qo({username:new Ge(null,[Ue.required,Ue.minLength(3),Ue.pattern("[a-zA-Z0-9_-]+$")],[nk(this.controller,this.userService)]),full_name:new Ge,email:new Ge(null,[Ue.email,Ue.pattern(/^[^\s@]+@[^\s@]+\.[^\s@]+$/),Ue.required],[ik(this.controller,this.userService)]),password:new Ge(null,[Ue.required,Ue.minLength(6),Ue.maxLength(100)]),confirmPassword:new Ge(null,[Ue.minLength(6),Ue.maxLength(100),Ue.required]),is_active:new Ge(!0)},{validators:[X2]}),this.groupService.getGroups(this.controller).subscribe({next:e=>{this.groups=e,this.filteredGroups=this.autocompleteControl.valueChanges.pipe(Di(""),Pt(t=>this._filter(t))),this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load groups";this.toasterService.error(t),this.cd.markForCheck()}})}_filter(e){let t=typeof e=="string"?e.toLowerCase():"";return this.groups.filter(i=>i.name.toLowerCase().includes(t))}get form(){return this.addUserForm.controls}onCancelClick(){this.dialogRef.close()}onAddClick(){if(!this.addUserForm.valid)return;let e=this.addUserForm.value,t=Array.from(this.groupsToAdd.values());this.userService.add(this.controller,e).subscribe({next:i=>{this.toasterService.success(`User ${i.username} added`),t.forEach(a=>{this.groupService.addMemberToGroup(this.controller,a,i).subscribe({next:()=>{this.toasterService.success(`user ${i.username} was added to group ${a.name}`)},error:s=>{let d=s.error?.message||s.message||"Failed to add user to group";this.toasterService.error(d),this.cd.markForCheck()}})}),this.dialogRef.close()},error:i=>{let a=i.error?.message||i.message||"Failed to create user";this.toasterService.error(a),this.cd.markForCheck()}})}deleteGroup(e){this.groupsToAdd.delete(e)}openGroupPanel(){this.autocompleteControl.setValue("",{emitEvent:!0}),this.autocompleteTrigger&&this.autocompleteTrigger.openPanel()}selectedGroup(e){this.groupsToAdd.add(e),this.autocompleteControl.reset()}displayFn(e){return e&&e.name?e.name:""}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-add-user-dialog"]],viewQuery:function(t,i){if(t&1&&Kn(ho,5),t&2){let a;gt(a=ht())&&(i.autocompleteTrigger=a.first)}},decls:60,vars:18,consts:[["groupInput",""],["auto","matAutocomplete"],["mat-dialog-title",""],[3,"formGroup"],["mat-dialog-content","",1,"gns3-form-stack"],[1,"form-row","gns3-form-layout-fixed"],["appearance","outline"],["matInput","","type","text","formControlName","username","placeholder","Username"],["matInput","","type","text","formControlName","full_name","placeholder","Full name"],["appearance","outline",1,"full-width-field"],["matInput","","type","text","formControlName","email","placeholder","Email"],["matInput","","formControlName","password","placeholder","Password",3,"type"],["matSuffix","",2,"cursor","pointer","font-size","18px",3,"click"],["matInput","","formControlName","confirmPassword","placeholder","Confirm Password",3,"type"],["formControlName","is_active"],[1,"my-2"],["type","text","matInput","",3,"click","matAutocomplete","formControl"],[3,"optionSelected","displayWith"],[3,"value"],["mat-dialog-actions","","align","end"],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"],[3,"removed"],["matChipRemove",""]],template:function(t,i){if(t&1&&(r(0,"h1",2),c(1,"Create new user"),l(),r(2,"form",3)(3,"div",4)(4,"div",5)(5,"mat-form-field",6)(6,"mat-label"),c(7,"Username"),l(),L(8,"input",7),T(9,XLe,2,0,"mat-error"),T(10,YLe,2,0,"mat-error"),T(11,ZLe,2,0,"mat-error"),l(),r(12,"mat-form-field",6)(13,"mat-label"),c(14,"Full name"),l(),L(15,"input",8),l()(),r(16,"mat-form-field",9)(17,"mat-label"),c(18,"Email"),l(),L(19,"input",10),T(20,JLe,2,0,"mat-error"),T(21,e7e,2,0,"mat-error"),l(),r(22,"div",5)(23,"mat-form-field",6)(24,"mat-label"),c(25,"Password"),l(),L(26,"input",11),r(27,"mat-icon",12),_("click",function(){return i.hidePassword=!i.hidePassword}),c(28),l(),T(29,t7e,2,0,"mat-error"),l(),r(30,"mat-form-field",6)(31,"mat-label"),c(32,"Confirm Password"),l(),L(33,"input",13),r(34,"mat-icon",12),_("click",function(){return i.hideConfirmPassword=!i.hideConfirmPassword}),c(35),l(),T(36,n7e,2,0,"mat-error"),l()(),r(37,"mat-checkbox",14),c(38,"Is active"),l(),L(39,"mat-divider",15),r(40,"h6"),c(41,"Add user to groups:"),l(),r(42,"mat-form-field",9)(43,"mat-label"),c(44,"Groups"),l(),r(45,"input",16,0),_("click",function(){return i.openGroupPanel()}),l(),r(47,"mat-autocomplete",17,1),_("optionSelected",function(s){return i.selectedGroup(s.option.value)}),Q(49,i7e,2,2,"mat-option",18,Oe),Et(51,"async"),l()(),r(52,"mat-chip-set"),Q(53,o7e,5,1,"mat-chip",null,KLe),l()(),r(55,"div",19)(56,"button",20),_("click",function(){return i.onCancelClick()}),c(57,"Cancel"),l(),r(58,"button",21),_("click",function(){return i.onAddClick()}),c(59," Add user "),l()()()),t&2){let a=Te(48);m(2),v("formGroup",i.addUserForm),m(7),E(i.form.username!=null&&i.form.username.touched&&(i.form.username!=null&&i.form.username.errors)&&(i.form.username!=null&&i.form.username.errors.required)?9:-1),m(),E(i.form.username!=null&&i.form.username.errors&&(i.form.username!=null&&i.form.username.errors.pattern)?10:-1),m(),E(i.form.username!=null&&i.form.username.errors&&(i.form.username!=null&&i.form.username.errors.userExists)?11:-1),m(9),E(i.form.email!=null&&i.form.email.touched&&(i.form.email!=null&&i.form.email.errors)&&(i.form.email!=null&&i.form.email.errors.required)?20:-1),m(),E(i.form.email!=null&&i.form.email.errors&&(i.form.email!=null&&i.form.email.errors.email)?21:-1),m(5),v("type",i.hidePassword?"password":"text"),m(2),N(i.hidePassword?"visibility_off":"visibility"),m(),E(i.form.password!=null&&i.form.password.touched&&(i.form.password!=null&&i.form.password.errors)?29:-1),m(4),v("type",i.hideConfirmPassword?"password":"text"),m(2),N(i.hideConfirmPassword?"visibility_off":"visibility"),m(),E(i.form.confirmPassword!=null&&i.form.confirmPassword.touched&&(i.form.confirmPassword!=null&&i.form.confirmPassword.errors)?36:-1),m(9),v("matAutocomplete",a)("formControl",i.autocompleteControl),m(2),v("displayWith",i.displayFn),m(2),K(gn(51,16,i.filteredGroups)),m(4),K(i.groupsToAdd),m(5),v("disabled",!i.addUserForm.valid)}},dependencies:[fe,It,Ct,At,Nt,vt,Tr,Ut,Yt,ke,qe,Qe,bt,Y,he,ie,ce,st,ri,av,hi,ME,we,Pe,Ve,Wn,oi,ye,Ee,Rt,Gt,Ja,fs,Jo,ha,nt,ho,Pa],styles:[".form-row[_ngcontent-%COMP%]{display:flex;gap:16px}.form-row[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{flex:1}.full-width-field[_ngcontent-%COMP%]{width:100%}"],changeDetection:0})}return n})();var Ap=(()=>{class n{httpController;constructor(e){this.httpController=e}getEndpoints(e){return this.httpController.get(e,"/access/acl/endpoints")}list(e){return this.httpController.get(e,"/access/acl")}add(e,t){return this.httpController.post(e,"/access/acl",t)}get(e,t){return this.httpController.get(e,`/access/acl/${t}`)}delete(e,t){return this.httpController.delete(e,`/access/acl/${t}`)}update(e,t){return this.httpController.put(e,`/access/acl/${t.ace_id}`,t)}static \u0275fac=function(t){return new(t||n)(_e(sn))};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var Yl=(()=>{class n{httpController;constructor(e){this.httpController=e}get(e){return this.httpController.get(e,"/access/roles")}delete(e,t){return this.httpController.delete(e,`/access/roles/${t}`)}create(e,t){return this.httpController.post(e,"/access/roles",t)}getById(e,t){return this.httpController.get(e,`/access/roles/${t}`)}update(e,t){return this.httpController.put(e,`/access/roles/${t.role_id}`,{name:t.name,description:t.description})}setPrivileges(e,t,i){return this.httpController.put(e,`/access/roles/${t}/privileges/${i}`,void 0)}removePrivileges(e,t,i){return this.httpController.delete(e,`/access/roles/${t}/privileges/${i}`)}static \u0275fac=function(t){return new(t||n)(_e(sn))};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var r7e=(n,o)=>o.user_group_id;function s7e(n,o){n&1&&(r(0,"mat-error"),c(1,"Username is required"),l())}function l7e(n,o){n&1&&(r(0,"mat-error"),c(1,"Username is incorrect"),l())}function c7e(n,o){n&1&&(r(0,"mat-error"),c(1,"User with this username exists"),l())}function d7e(n,o){n&1&&(r(0,"mat-error"),c(1,"Email is required"),l())}function m7e(n,o){n&1&&(r(0,"mat-error"),c(1,"Email is invalid"),l())}function p7e(n,o){n&1&&(r(0,"mat-error"),c(1,"User with this email exists"),l())}function u7e(n,o){n&1&&(r(0,"p",22),c(1,"Loading..."),l())}function g7e(n,o){n&1&&(r(0,"p",23),c(1,"User is not member of any group"),l())}function h7e(n,o){if(n&1&&(r(0,"li")(1,"span",27),c(2),l()()),n&2){let e=o.$implicit;m(2),N(e.name)}}function _7e(n,o){if(n&1&&(r(0,"ul"),Q(1,h7e,3,1,"li",null,r7e),l()),n&2){let e=h();m(),K(e.groups)}}function f7e(n,o){n&1&&(r(0,"p",22),c(1,"Loading..."),l())}function v7e(n,o){n&1&&(r(0,"p",23),c(1,"No ACEs found for this user"),l())}function C7e(n,o){n&1&&(r(0,"th",36),c(1,"Endpoint"),l())}function b7e(n,o){if(n&1&&(r(0,"td",37),c(1),l()),n&2){let e=o.$implicit;m(),N(e.endpoint_name)}}function x7e(n,o){n&1&&(r(0,"th",36),c(1,"Role"),l())}function y7e(n,o){if(n&1&&(r(0,"td",37),c(1),l()),n&2){let e=o.$implicit;m(),N(e.role_name)}}function w7e(n,o){n&1&&(r(0,"th",36),c(1,"Propagate"),l())}function M7e(n,o){if(n&1&&(r(0,"td",37),c(1),l()),n&2){let e=o.$implicit;m(),N(e.propagate)}}function S7e(n,o){n&1&&(r(0,"th",36),c(1,"Allowed"),l())}function k7e(n,o){if(n&1&&(r(0,"td",37),c(1),l()),n&2){let e=o.$implicit;m(),N(e.allowed)}}function P7e(n,o){n&1&&L(0,"tr",38)}function T7e(n,o){n&1&&L(0,"tr",39)}function E7e(n,o){if(n&1&&(r(0,"table",24),Fe(1,28),se(2,C7e,2,0,"th",29)(3,b7e,2,1,"td",30),Re(),Fe(4,31),se(5,x7e,2,0,"th",29)(6,y7e,2,1,"td",30),Re(),Fe(7,32),se(8,w7e,2,0,"th",29)(9,M7e,2,1,"td",30),Re(),Fe(10,33),se(11,S7e,2,0,"th",29)(12,k7e,2,1,"td",30),Re(),se(13,P7e,1,0,"tr",34)(14,T7e,1,0,"tr",35),l()),n&2){let e=h();v("dataSource",e.aceDatasource),m(13),v("matHeaderRowDef",e.aceDisplayedColumns),m(),v("matRowDefColumns",e.aceDisplayedColumns)}}var ak=(()=>{class n{data;dialogRef=f(We);userService=f(ba);toasterService=f(re);aclService=f(Ap);roleService=f(Yl);dialog=f(Xe);cd=f(oe);editUserForm;groups=[];aces=[];aceDatasource=new Fr;aceDisplayedColumns=["endpoint","role","propagate","allowed"];groupsLoaded=!1;acesLoaded=!1;constructor(e){this.data=e,this.user=e.user,this.controller=e.controller}user;controller;ngOnInit(){this.initForm(),this.loadGroupsData(),this.loadAceData()}initForm(){this.editUserForm=new Qo({username:new Ge(this.user.username,[Ue.required,Ue.minLength(3),Ue.pattern("[a-zA-Z0-9_-]+$")],[nk(this.controller,this.userService,this.user.username)]),full_name:new Ge(this.user.full_name),email:new Ge(this.user.email,[Ue.email,Ue.required],[ik(this.controller,this.userService,this.user.email)]),is_active:new Ge(this.user.is_active)})}get form(){return this.editUserForm.controls}loadGroupsData(){this.userService.getGroupsByUserId(this.controller,this.user.user_id).subscribe({next:e=>{this.groups=e,this.groupsLoaded=!0,this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load groups";this.toasterService.error(t),this.groupsLoaded=!0,this.cd.markForCheck()}})}loadAceData(){Ci({roles:this.roleService.get(this.controller),endpoints:this.aclService.getEndpoints(this.controller),aces:this.aclService.list(this.controller)}).subscribe({next:({roles:e,endpoints:t,aces:i})=>{this.aces=i.filter(a=>a.ace_type==="user"&&a.user_id===this.user.user_id),this.aceDatasource.data=this.aces.map(a=>{let s=t.filter(p=>p.endpoint===a.path)[0],d=e.filter(p=>p.role_id===a.role_id)[0];return ze(q({},a),{endpoint_name:s?.name||a.path,role_name:d?.name||"Unknown"})}),this.acesLoaded=!0,this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load access control entries";this.toasterService.error(t),this.acesLoaded=!0,this.cd.markForCheck()}})}onSaveChanges(){if(!this.editUserForm.valid)return;let e=this.getUpdatedValues();e.user_id=this.user.user_id,this.userService.update(this.controller,e,!1).subscribe({next:t=>{this.toasterService.success(`User ${t.username} updated`),this.dialogRef.close(t)},error:t=>{let i=t.error?.message||t.message||"Failed to update user";this.toasterService.error(i),this.cd.markForCheck()}})}getUpdatedValues(){let e={};return Object.keys(this.editUserForm.controls).forEach(t=>{let i=this.editUserForm.get(t);i.dirty&&i.value!==this.user[t]&&(e[t]=i.value)}),e}onChangePassword(){this.dialog.open(Q_,{panelClass:["base-dialog-panel","change-user-password-dialog-panel","dialog-small-panel"],data:{user:this.user,controller:this.controller}})}onCancel(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)(Mt(Wt))};static \u0275cmp=V({type:n,selectors:[["app-user-detail-dialog"]],decls:84,vars:16,consts:[["mat-dialog-title",""],[1,"user-detail-dialog__content"],[1,"user-detail-dialog__section"],[1,"user-detail-dialog__section-title"],[1,"user-detail-dialog__card"],[1,"user-detail-dialog__form",3,"formGroup"],[1,"user-detail-dialog__form-row","gns3-form-layout-fixed"],["appearance","outline",1,"user-detail-dialog__field"],["matInput","","type","text","formControlName","username"],["matInput","","type","text","formControlName","full_name"],[1,"user-detail-dialog__form-row"],["matInput","","type","text","formControlName","email"],[1,"user-detail-dialog__checkbox"],["formControlName","is_active"],[1,"user-detail-dialog__card","user-detail-dialog__card--muted"],[1,"user-detail-dialog__info-grid"],[1,"user-detail-dialog__info-item"],[1,"user-detail-dialog__info-label"],[1,"user-detail-dialog__info-value"],[1,"user-detail-dialog__info-item","user-detail-dialog__info-item--full"],[1,"user-detail-dialog__info-value","user-detail-dialog__info-value--mono"],[1,"user-detail-dialog__groups-list"],[1,"user-detail-dialog__loading"],[1,"user-detail-dialog__empty-message"],["mat-table","",1,"user-detail-dialog__ace-table",3,"dataSource"],["mat-button","",3,"click"],["mat-raised-button","","color","primary",3,"click","disabled"],[1,"user-detail-dialog__group-name"],["matColumnDef","endpoint"],["mat-header-cell","",4,"matHeaderCellDef"],["mat-cell","",4,"matCellDef"],["matColumnDef","role"],["matColumnDef","propagate"],["matColumnDef","allowed"],["mat-header-row","",4,"matHeaderRowDef"],["mat-row","",4,"matRowDef","matRowDefColumns"],["mat-header-cell",""],["mat-cell",""],["mat-header-row",""],["mat-row",""]],template:function(t,i){t&1&&(r(0,"h2",0),c(1),l(),r(2,"mat-dialog-content")(3,"div",1)(4,"section",2)(5,"h3",3),c(6,"Details"),l(),r(7,"mat-card",4)(8,"mat-card-content")(9,"form",5)(10,"div",6)(11,"mat-form-field",7)(12,"mat-label"),c(13,"Username"),l(),L(14,"input",8),T(15,s7e,2,0,"mat-error"),T(16,l7e,2,0,"mat-error"),T(17,c7e,2,0,"mat-error"),l(),r(18,"mat-form-field",7)(19,"mat-label"),c(20,"Full name"),l(),L(21,"input",9),l()(),r(22,"div",10)(23,"mat-form-field",7)(24,"mat-label"),c(25,"Email"),l(),L(26,"input",11),T(27,d7e,2,0,"mat-error"),T(28,m7e,2,0,"mat-error"),T(29,p7e,2,0,"mat-error"),l(),r(30,"div",12)(31,"mat-checkbox",13),c(32,"Is active"),l()()()()()(),r(33,"mat-card",14)(34,"mat-card-header")(35,"mat-card-title"),c(36,"User Information"),l()(),r(37,"mat-card-content")(38,"div",15)(39,"div",16)(40,"span",17),c(41,"Is Superadmin"),l(),r(42,"span",18),c(43),l()(),r(44,"div",16)(45,"span",17),c(46,"Creation date"),l(),r(47,"span",18),c(48),l()(),r(49,"div",16)(50,"span",17),c(51,"Last update"),l(),r(52,"span",18),c(53),l()(),r(54,"div",16)(55,"span",17),c(56,"Last login"),l(),r(57,"span",18),c(58),l()(),r(59,"div",19)(60,"span",17),c(61,"UUID"),l(),r(62,"span",20),c(63),l()()()()()(),r(64,"section",2)(65,"h3",3),c(66,"Groups"),l(),r(67,"div",21),T(68,u7e,2,0,"p",22)(69,g7e,2,0,"p",23)(70,_7e,3,0,"ul"),l()(),r(71,"section",2)(72,"h3",3),c(73,"ACEs"),l(),T(74,f7e,2,0,"p",22)(75,v7e,2,0,"p",23)(76,E7e,15,3,"table",24),l()()(),r(77,"mat-dialog-actions")(78,"button",25),_("click",function(){return i.onChangePassword()}),c(79,"Change Password"),l(),r(80,"button",25),_("click",function(){return i.onCancel()}),c(81,"Cancel"),l(),r(82,"button",26),_("click",function(){return i.onSaveChanges()}),c(83," Save changes "),l()()),t&2&&(m(),X("User ",i.user.username),m(8),v("formGroup",i.editUserForm),m(6),E(i.form.username!=null&&i.form.username.touched&&(i.form.username!=null&&i.form.username.errors)&&(i.form.username!=null&&i.form.username.errors.required)?15:-1),m(),E(i.form.username!=null&&i.form.username.errors&&(i.form.username!=null&&i.form.username.errors.pattern)?16:-1),m(),E(i.form.username!=null&&i.form.username.errors&&(i.form.username!=null&&i.form.username.errors.userExists)?17:-1),m(10),E(i.form.email!=null&&i.form.email.touched&&(i.form.email!=null&&i.form.email.errors)&&(i.form.email!=null&&i.form.email.errors.required)?27:-1),m(),E(i.form.email!=null&&i.form.email.errors&&(i.form.email!=null&&i.form.email.errors.email)?28:-1),m(),E(i.form.email!=null&&i.form.email.errors&&(i.form.email!=null&&i.form.email.errors.emailExists)?29:-1),m(14),N(i.user.is_superadmin?"YES":"NO"),m(5),N(i.user.created_at),m(5),N(i.user.updated_at),m(5),N(i.user.last_login||"Never"),m(5),N(i.user.user_id),m(5),E(i.groupsLoaded?i.groups.length===0?69:70:68),m(6),E(i.acesLoaded?i.aces.length===0?75:76:74),m(8),v("disabled",!i.editUserForm.valid))},dependencies:[fe,St,Ct,At,Nt,vt,It,Ut,Yt,vn,ke,qe,Qe,bt,_n,bn,yn,kn,wn,xn,Pn,Mn,Sn,Tn,En,Y,he,ie,we,Pe,Ve,Wn,ye,Ee,Rt,Gt,hn,Zn,Tl,Jc,Zc],styles:[".user-detail-dialog__content[_ngcontent-%COMP%]{padding:0}.user-detail-dialog__section[_ngcontent-%COMP%]{margin-bottom:var(--gns3-density-card-gap)}.user-detail-dialog__section[_ngcontent-%COMP%]:last-child{margin-bottom:0}.user-detail-dialog__section-title[_ngcontent-%COMP%]{font-size:16px;font-weight:600;color:var(--mat-sys-on-surface);margin:0 0 12px}.user-detail-dialog__card[_ngcontent-%COMP%]{margin-bottom:var(--gns3-density-card-gap);border-radius:12px}.user-detail-dialog__card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%]{padding-top:16px}.user-detail-dialog__card--muted[_ngcontent-%COMP%]{background:var(--mat-sys-surface-container-low)}.user-detail-dialog__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-space-2)}.user-detail-dialog__form-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:var(--gns3-density-card-gap);align-items:flex-start}@media(max-width:600px){.user-detail-dialog__form-row[_ngcontent-%COMP%]{grid-template-columns:1fr}}.user-detail-dialog__field[_ngcontent-%COMP%]{width:100%}.user-detail-dialog__checkbox[_ngcontent-%COMP%]{display:flex;align-items:center;padding-top:4px}.user-detail-dialog__info-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--gns3-density-card-gap)}@media(max-width:600px){.user-detail-dialog__info-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}}.user-detail-dialog__info-item[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px}.user-detail-dialog__info-item--full[_ngcontent-%COMP%]{grid-column:1/-1}.user-detail-dialog__info-label[_ngcontent-%COMP%]{font-size:12px;font-weight:500;color:var(--mat-sys-on-surface-variant);text-transform:uppercase;letter-spacing:.5px}.user-detail-dialog__info-value[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface)}.user-detail-dialog__info-value--mono[_ngcontent-%COMP%]{font-family:var(--gns3-font-code);font-size:12px}.user-detail-dialog__groups-list[_ngcontent-%COMP%]{background:var(--mat-sys-surface-container-low);border-radius:8px;padding:12px 16px}.user-detail-dialog__groups-list[_ngcontent-%COMP%] ul[_ngcontent-%COMP%]{list-style:none;padding:0;margin:0}.user-detail-dialog__groups-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{padding:8px 0;border-bottom:1px solid var(--mat-sys-outline-variant)}.user-detail-dialog__groups-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:last-child{border-bottom:none}.user-detail-dialog__group-name[_ngcontent-%COMP%]{font-weight:500;color:var(--mat-sys-on-surface)}.user-detail-dialog__ace-table[_ngcontent-%COMP%]{width:100%;background:var(--mat-sys-surface-container-low);border-radius:8px;overflow:hidden}.user-detail-dialog__ace-table[_ngcontent-%COMP%] .mat-header-row[_ngcontent-%COMP%]{background:var(--mat-sys-surface-container)}.user-detail-dialog__ace-table[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%]{font-size:13px;font-weight:600;color:var(--mat-sys-on-surface-variant);text-transform:uppercase}.user-detail-dialog__ace-table[_ngcontent-%COMP%] mat-cell[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface)}.user-detail-dialog__ace-table[_ngcontent-%COMP%] mat-row[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 3%,transparent)}.user-detail-dialog__empty-message[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-style:italic;text-align:center;padding:var(--gns3-density-card-padding)}.user-detail-dialog__loading[_ngcontent-%COMP%]{text-align:center;padding:var(--gns3-density-card-padding);color:var(--mat-sys-on-surface-variant)}"],changeDetection:0})}return n})();var O7e=(n,o)=>o.user_id;function D7e(n,o){n&1&&(r(0,"div",30),L(1,"mat-progress-spinner",31),r(2,"span"),c(3,"Loading users\u2026"),l()())}function I7e(n,o){if(n&1){let e=R();r(0,"mat-header-cell")(1,"mat-checkbox",50),_("change",function(){y(e);let i=h(3);return w(i.masterToggle())}),l()()}if(n&2){let e=h(3);m(),v("checked",e.selection.hasValue()&&e.isAllSelected())("indeterminate",e.selection.hasValue()&&!e.isAllSelected())}}function A7e(n,o){if(n&1){let e=R();r(0,"mat-cell")(1,"mat-checkbox",51),_("click",function(i){return i.stopPropagation()})("change",function(){let i=y(e).$implicit,a=h(3);return w(a.selection.toggle(i))}),l()()}if(n&2){let e=o.$implicit,t=h(3);m(),v("checked",t.selection.isSelected(e)),Ce("aria-label","Select "+e.username)}}function N7e(n,o){n&1&&(r(0,"mat-header-cell",52),c(1,"Username"),l())}function F7e(n,o){if(n&1&&(r(0,"mat-cell")(1,"div",53)(2,"span",54),c(3),l(),r(4,"strong"),c(5),l()()()),n&2){let e=o.$implicit,t=h(3);m(3),N(t.userInitials(e)),m(2),N(e.username)}}function R7e(n,o){n&1&&(r(0,"mat-header-cell",52),c(1,"Full name"),l())}function z7e(n,o){if(n&1&&(r(0,"mat-cell"),c(1),l()),n&2){let e=o.$implicit;m(),N(e.full_name||"\u2014")}}function L7e(n,o){n&1&&(r(0,"mat-header-cell",52),c(1,"Email"),l())}function V7e(n,o){if(n&1&&(r(0,"mat-cell",55),c(1),l()),n&2){let e=o.$implicit;v("matTooltip",e.email||""),m(),N(e.email||"\u2014")}}function B7e(n,o){n&1&&(r(0,"mat-header-cell"),c(1,"Role"),l())}function j7e(n,o){if(n&1&&(r(0,"mat-cell")(1,"span",56),c(2),l()()),n&2){let e=o.$implicit,t=h(3);m(),ne("users-page__role--admin",e.is_superadmin),m(),X(" ",t.roleLabel(e)," ")}}function $7e(n,o){n&1&&(r(0,"mat-header-cell",52),c(1,"Status"),l())}function H7e(n,o){if(n&1&&(r(0,"mat-cell")(1,"span",57),L(2,"span"),c(3),l()()),n&2){let e=o.$implicit;m(),ne("users-page__status--inactive",!e.is_active),m(2),X("",e.is_active?"Active":"Inactive"," ")}}function U7e(n,o){n&1&&(r(0,"mat-header-cell"),c(1,"Actions"),l())}function W7e(n,o){if(n&1){let e=R();r(0,"mat-cell")(1,"div",58)(2,"button",59),_("click",function(i){let a=y(e).$implicit,s=h(3);return i.stopPropagation(),w(s.selectUser(a))}),r(3,"mat-icon"),c(4,"info"),l()(),r(5,"button",60),_("click",function(i){let a=y(e).$implicit,s=h(3);return i.stopPropagation(),w(s.openUserDetailDialog(a))}),r(6,"mat-icon"),c(7,"edit"),l()(),r(8,"button",61),_("click",function(i){let a=y(e).$implicit,s=h(3);return i.stopPropagation(),w(s.openAiProfileDialog(a))}),r(9,"mat-icon"),c(10,"psychology"),l()(),r(11,"button",62),_("click",function(i){let a=y(e).$implicit,s=h(3);return i.stopPropagation(),w(s.onDelete(a))}),r(12,"mat-icon"),c(13,"delete"),l()()()()}if(n&2){let e=o.$implicit;m(2),Ce("aria-label","View details for "+e.username),m(3),Ce("aria-label","Edit "+e.username),m(3),Ce("aria-label","Manage AI profiles for "+e.username),m(3),Ce("aria-label","Delete "+e.username)}}function G7e(n,o){n&1&&L(0,"mat-header-row")}function q7e(n,o){if(n&1){let e=R();r(0,"mat-row",63),_("click",function(){let i=y(e).$implicit,a=h(3);return w(a.selectUser(i))}),l()}if(n&2){let e,t=o.$implicit,i=h(3);ne("users-page__row--selected",((e=i.selectedUser())==null?null:e.user_id)===t.user_id)}}function Q7e(n,o){if(n&1){let e=R();r(0,"div",49)(1,"mat-paginator",64),_("page",function(i){y(e);let a=h(3);return w(a.onPageChange(i))}),l()()}if(n&2){let e=h(3);m(),v("length",e.filteredUsers().length)("pageIndex",e.pageIndex())("pageSize",e.pageSize())("pageSizeOptions",e.pageSizeOptions)}}function K7e(n,o){n&1&&li(0)}function X7e(n,o){if(n&1&&se(0,K7e,1,0,"ng-container",65),n&2){h(3);let e=Te(72);v("ngTemplateOutlet",e)}}function Y7e(n,o){if(n&1){let e=R();r(0,"div",32)(1,"mat-table",35),_("matSortChange",function(i){y(e);let a=h(2);return w(a.onSortChange(i))}),Fe(2,36),se(3,I7e,2,2,"mat-header-cell",37)(4,A7e,2,2,"mat-cell",38),Re(),Fe(5,39),se(6,N7e,2,0,"mat-header-cell",40)(7,F7e,6,2,"mat-cell",38),Re(),Fe(8,41),se(9,R7e,2,0,"mat-header-cell",40)(10,z7e,2,1,"mat-cell",38),Re(),Fe(11,42),se(12,L7e,2,0,"mat-header-cell",40)(13,V7e,2,2,"mat-cell",43),Re(),Fe(14,44),se(15,B7e,2,0,"mat-header-cell",37)(16,j7e,3,3,"mat-cell",38),Re(),Fe(17,45),se(18,$7e,2,0,"mat-header-cell",40)(19,H7e,4,3,"mat-cell",38),Re(),Fe(20,46),se(21,U7e,2,0,"mat-header-cell",37)(22,W7e,14,4,"mat-cell",38),Re(),se(23,G7e,1,0,"mat-header-row",47)(24,q7e,1,2,"mat-row",48),l(),T(25,Q7e,2,4,"div",49)(26,X7e,1,1,"ng-container"),l()}if(n&2){let e=h(2);m(),v("dataSource",e.paginatedUsers())("trackBy",e.trackUser)("matSortActive",e.sortActive())("matSortDirection",e.sortDirection()),m(22),v("matHeaderRowDef",e.displayedColumns)("matHeaderRowDefSticky",!0),m(),v("matRowDefColumns",e.displayedColumns),m(),E(e.filteredUsers().length?25:26)}}function Z7e(n,o){if(n&1){let e=R();r(0,"article",69),_("click",function(){let i=y(e).$implicit,a=h(3);return w(a.selectUser(i))}),r(1,"div",70)(2,"span",71),c(3),l(),r(4,"mat-checkbox",51),_("click",function(i){return i.stopPropagation()})("change",function(){let i=y(e).$implicit,a=h(3);return w(a.selection.toggle(i))}),l()(),r(5,"div",72)(6,"div",73)(7,"h3",55),c(8),l(),r(9,"span",57),L(10,"span"),c(11),l()(),r(12,"p"),c(13),l(),r(14,"span",56),c(15),l(),r(16,"dl")(17,"div")(18,"dt"),c(19,"Email"),l(),r(20,"dd",55),c(21),l()(),r(22,"div")(23,"dt"),c(24,"Last login"),l(),r(25,"dd"),c(26),Et(27,"date"),l()()()(),r(28,"div",74)(29,"button",59),_("click",function(i){let a=y(e).$implicit,s=h(3);return i.stopPropagation(),w(s.selectUser(a))}),r(30,"mat-icon"),c(31,"info"),l()(),r(32,"button",60),_("click",function(i){let a=y(e).$implicit,s=h(3);return i.stopPropagation(),w(s.openUserDetailDialog(a))}),r(33,"mat-icon"),c(34,"edit"),l()(),r(35,"button",61),_("click",function(i){let a=y(e).$implicit,s=h(3);return i.stopPropagation(),w(s.openAiProfileDialog(a))}),r(36,"mat-icon"),c(37,"psychology"),l()(),r(38,"button",62),_("click",function(i){let a=y(e).$implicit,s=h(3);return i.stopPropagation(),w(s.onDelete(a))}),r(39,"mat-icon"),c(40,"delete"),l()()()()}if(n&2){let e,t=o.$implicit,i=h(3);ne("users-page__card--selected",((e=i.selectedUser())==null?null:e.user_id)===t.user_id),m(3),N(i.userInitials(t)),m(),v("checked",i.selection.isSelected(t)),Ce("aria-label","Select "+t.username),m(3),v("matTooltip",t.username),m(),N(t.username),m(),ne("users-page__status--inactive",!t.is_active),m(2),X("",t.is_active?"Active":"Inactive"," "),m(2),N(t.full_name||"No full name provided"),m(),ne("users-page__role--admin",t.is_superadmin),m(),X(" ",i.roleLabel(t)," "),m(5),v("matTooltip",t.email||"Not provided"),m(),N(t.email||"\u2014"),m(5),N(t.last_login?Io(27,21,t.last_login,"medium"):"Never"),m(3),Ce("aria-label","View details for "+t.username),m(3),Ce("aria-label","Edit "+t.username),m(3),Ce("aria-label","Manage AI profiles for "+t.username),m(3),Ce("aria-label","Delete "+t.username)}}function J7e(n,o){n&1&&li(0)}function eVe(n,o){if(n&1&&se(0,J7e,1,0,"ng-container",65),n&2){h(3);let e=Te(72);v("ngTemplateOutlet",e)}}function tVe(n,o){if(n&1){let e=R();r(0,"mat-paginator",75),_("page",function(i){y(e);let a=h(3);return w(a.onPageChange(i))}),l()}if(n&2){let e=h(3);v("length",e.filteredUsers().length)("pageIndex",e.pageIndex())("pageSize",e.pageSize())("pageSizeOptions",e.pageSizeOptions)}}function nVe(n,o){if(n&1&&(r(0,"div",66),Q(1,Z7e,41,24,"article",67,O7e,!1,eVe,1,1,"ng-container"),T(4,tVe,1,4,"mat-paginator",68),l()),n&2){let e=h(2);ne("users-page__grid--with-details",e.selectedUser()),m(),K(e.paginatedUsers()),m(3),E(e.filteredUsers().length?4:-1)}}function iVe(n,o){if(n&1){let e=R();r(0,"aside",34)(1,"div",76)(2,"div",77)(3,"span",54),c(4),l(),r(5,"div",78)(6,"h2",55),c(7),l(),r(8,"span",56),c(9),l()()(),r(10,"button",79),_("click",function(){y(e);let i=h(2);return w(i.closeDetails())}),r(11,"mat-icon"),c(12,"close"),l()()(),r(13,"div",80)(14,"div",81)(15,"mat-icon"),c(16,"badge"),l(),r(17,"span"),c(18,"Full name"),l(),r(19,"strong"),c(20),l()(),r(21,"div",81)(22,"mat-icon"),c(23,"mail"),l(),r(24,"span"),c(25,"Email"),l(),r(26,"strong"),c(27),l()(),r(28,"div",81)(29,"mat-icon"),c(30,"toggle_on"),l(),r(31,"span"),c(32,"Status"),l(),r(33,"strong"),c(34),l()(),r(35,"div",81)(36,"mat-icon"),c(37,"login"),l(),r(38,"span"),c(39,"Last login"),l(),r(40,"strong"),c(41),Et(42,"date"),l()(),r(43,"div",81)(44,"mat-icon"),c(45,"event"),l(),r(46,"span"),c(47,"Created"),l(),r(48,"strong"),c(49),Et(50,"date"),l()(),r(51,"div",81)(52,"mat-icon"),c(53,"update"),l(),r(54,"span"),c(55,"Updated"),l(),r(56,"strong"),c(57),Et(58,"date"),l()(),r(59,"div",82)(60,"mat-icon"),c(61,"fingerprint"),l(),r(62,"span"),c(63,"User ID"),l(),r(64,"strong"),c(65),l()()(),r(66,"div",83)(67,"button",84),_("click",function(){let i=y(e),a=h(2);return w(a.openUserDetailDialog(i))}),r(68,"mat-icon"),c(69,"edit"),l(),c(70,"Edit "),l(),r(71,"button",85),_("click",function(){let i=y(e),a=h(2);return w(a.openAiProfileDialog(i))}),r(72,"mat-icon"),c(73,"psychology"),l(),c(74,"AI profiles "),l(),r(75,"button",86),_("click",function(){let i=y(e),a=h(2);return w(a.onDelete(i))}),r(76,"mat-icon"),c(77,"delete"),l(),c(78,"Delete "),l()()()}if(n&2){let e=o,t=h(2);m(4),N(t.userInitials(e)),m(2),v("matTooltip",e.username),m(),N(e.username),m(),ne("users-page__role--admin",e.is_superadmin),m(),X(" ",t.roleLabel(e)," "),m(11),N(e.full_name||"\u2014"),m(7),N(e.email||"\u2014"),m(7),N(e.is_active?"Active":"Inactive"),m(7),N(e.last_login?Io(42,13,e.last_login,"medium"):"Never"),m(8),N(e.created_at?Io(50,16,e.created_at,"medium"):"\u2014"),m(8),N(e.updated_at?Io(58,19,e.updated_at,"medium"):"\u2014"),m(8),N(e.user_id)}}function oVe(n,o){if(n&1&&(T(0,Y7e,27,8,"div",32),T(1,nVe,5,4,"div",33),T(2,iVe,79,22,"aside",34)),n&2){let e,t=h();E(t.viewMode()==="list"?0:-1),m(),E(t.viewMode()==="grid"?1:-1),m(),E((e=t.selectedUser())?2:-1,e)}}function aVe(n,o){n&1&&(r(0,"div",87)(1,"mat-icon"),c(2,"person_search"),l(),r(3,"h3"),c(4,"No users found"),l(),r(5,"p"),c(6,"Try changing the search, scope, or status filter."),l()())}var rk=(()=>{class n{controller;users=z([]);loading=z(!0);searchText=z("");selectedScope=z("all");statusFilter=z("all");viewMode=z("list");selectedUser=z(null);sortActive=z("username");sortDirection=z("asc");pageIndex=z(0);pageSize=z(25);pageSizeOptions=[5,10,25,50,100];displayedColumns=["select","username","full_name","email","role","is_active","actions"];selection=new Yr(!0,[]);filteredUsers=Ne(()=>{let e=this.searchText().trim().toLowerCase(),t=this.selectedScope(),i=this.statusFilter(),a=this.users();t==="active"?a=a.filter(p=>p.is_active):t==="administrators"&&(a=a.filter(p=>p.is_superadmin)),i!=="all"&&(a=a.filter(p=>p.is_active===(i==="active"))),e&&(a=a.filter(p=>[p.username,p.full_name,p.email,this.roleLabel(p)].filter(Boolean).some(u=>String(u).toLowerCase().includes(e))));let s=this.sortActive(),d=this.sortDirection();return d?[...a].sort((p,u)=>{let g=this.sortValue(p,s),C=this.sortValue(u,s);return g.localeCompare(C,void 0,{numeric:!0,sensitivity:"base"})*(d==="asc"?1:-1)}):a});paginatedUsers=Ne(()=>{let e=this.pageIndex()*this.pageSize();return this.filteredUsers().slice(e,e+this.pageSize())});activeUserCount=Ne(()=>this.users().filter(e=>e.is_active).length);administratorCount=Ne(()=>this.users().filter(e=>e.is_superadmin).length);route=f($t);userService=f(ba);progressService=f(mo);controllerService=f(_t);dialog=f(Xe);toasterService=f(re);location=f(ki);cd=f(oe);ngOnInit(){let e=this.route.snapshot.paramMap.get("controller_id")??this.route.parent?.snapshot.paramMap.get("controller_id")??"";this.controllerService.get(Number.parseInt(e,10)).then(t=>{this.controller=t,this.refresh()},t=>{this.loading.set(!1),this.toasterService.error(t.error?.message||t.message||"Failed to load controller"),this.location.back(),this.cd.markForCheck()})}refresh(){this.controller&&(this.loading.set(!0),this.userService.list(this.controller).subscribe({next:e=>{this.users.set(e||[]),this.loading.set(!1),this.selection.clear(),this.refreshSelectedUser(),this.ensureValidPage(),this.cd.markForCheck()},error:e=>{this.loading.set(!1),this.progressService.setError(e),this.toasterService.error(e.error?.message||e.message||"Failed to load users"),this.location.back(),this.cd.markForCheck()}}))}setScope(e){this.selectedScope.set(e),this.selection.clear(),this.resetPage()}setSearch(e){this.searchText.set(e),this.selection.clear(),this.resetPage()}setStatusFilter(e){this.statusFilter.set(e),this.selection.clear(),this.resetPage()}setViewMode(e){this.viewMode.set(e)}onSortByChange(e){this.sortActive.set(e),this.sortDirection()||this.sortDirection.set("asc"),this.resetPage()}onSortChange(e){this.sortActive.set(e.active||"username"),this.sortDirection.set(e.direction),this.resetPage()}onPageChange(e){this.pageIndex.set(e.pageIndex),this.pageSize.set(e.pageSize)}selectUser(e){this.selectedUser.set(e),this.userService.get(this.controller,e.user_id).subscribe({next:t=>{this.selectedUser()?.user_id===t.user_id&&(this.selectedUser.set(t),this.cd.markForCheck())},error:t=>{this.toasterService.error(t.error?.message||t.message||"Failed to load user details"),this.cd.markForCheck()}})}closeDetails(){this.selectedUser.set(null)}addUser(){let e=this.dialog.open(ok,{panelClass:["base-dialog-panel","add-user-dialog-panel","dialog-medium-panel"],autoFocus:!1,disableClose:!0});e.componentInstance.controller=this.controller,e.afterClosed().subscribe(t=>{t!==!1&&this.refresh()})}openUserDetailDialog(e){this.userService.get(this.controller,e.user_id).subscribe({next:t=>{let i={user:t,controller:this.controller};this.dialog.open(ak,{panelClass:["base-dialog-panel","configurator-dialog-panel","dialog-large-panel"],data:i,disableClose:!1}).afterClosed().subscribe(()=>this.refresh())},error:t=>{this.toasterService.error(t.error?.message||t.message||"Failed to load user data"),this.cd.markForCheck()}})}openAiProfileDialog(e){let t={user:e,controller:this.controller};this.dialog.open(Z2,{panelClass:["base-dialog-panel","configurator-dialog-panel","dialog-extra-large-panel"],data:t,disableClose:!1})}onDelete(e){this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-danger-panel","dialog-small-panel"],autoFocus:".cancel-button",data:{title:"Delete user?",message:`User "${e.username}" will be permanently deleted.`,note:"This action cannot be undone.",confirmButtonText:"Delete user",tone:"danger"}}).afterClosed().subscribe(t=>{t&&this.userService.delete(this.controller,e.user_id).subscribe({next:()=>{this.toasterService.success(`User "${e.username}" deleted.`),this.selectedUser()?.user_id===e.user_id&&this.closeDetails(),this.refresh()},error:i=>{this.toasterService.error(i.error?.message||i.message||`Failed to delete user ${e.username}`),this.cd.markForCheck()}})})}deleteMultiple(){let e=[...this.selection.selected];this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-danger-panel","dialog-small-panel"],autoFocus:".cancel-button",data:{title:"Delete users?",message:`${e.length} selected users will be permanently deleted.`,details:e.map(t=>t.full_name?`${t.username} (${t.full_name})`:t.username),note:"This action cannot be undone.",confirmButtonText:"Delete users",tone:"danger"}}).afterClosed().subscribe(t=>{if(!t)return;let i=uo(e.length,a=>{a>0&&(this.toasterService.success(`${a} ${a===1?"user":"users"} deleted.`),this.refresh())});e.forEach(a=>{this.userService.delete(this.controller,a.user_id).subscribe({next:()=>i.succeed(),error:s=>{i.fail(),this.toasterService.error(s.error?.message||s.message||`Failed to delete user ${a.username}`),this.cd.markForCheck()}})})})}isAllSelected(){let e=this.filteredUsers();return e.length>0&&e.every(t=>this.selection.isSelected(t))}masterToggle(){this.isAllSelected()?this.filteredUsers().forEach(e=>this.selection.deselect(e)):this.filteredUsers().forEach(e=>this.selection.select(e))}roleLabel(e){return e.is_superadmin?"Administrator":"Standard user"}userInitials(e){return(e.full_name?.trim()||e.username).split(/\s+/).slice(0,2).map(i=>i.charAt(0).toUpperCase()).join("")}trackUser(e,t){return t.user_id}sortValue(e,t){return t==="is_active"||t==="is_superadmin"?e[t]?"1":"0":String(e[t]??"").toLowerCase()}resetPage(){this.pageIndex.set(0)}ensureValidPage(){let e=Math.max(Math.ceil(this.filteredUsers().length/this.pageSize())-1,0);this.pageIndex()>e&&this.pageIndex.set(e)}refreshSelectedUser(){let e=this.selectedUser()?.user_id;e&&this.selectedUser.set(this.users().find(t=>t.user_id===e)??null)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-user-management"]],decls:73,vars:19,consts:[["emptyState",""],[1,"users-page"],[1,"users-page__header"],[1,"users-page__title"],[1,"users-page__header-actions"],["mat-raised-button","","color","primary",1,"users-page__refresh",3,"click","disabled"],["mat-flat-button","",1,"users-page__bulk-delete",3,"click","disabled"],["mat-raised-button","","color","primary",1,"users-page__add",3,"click"],["aria-label","User scope",1,"users-page__scopes"],["type","button",1,"users-page__scope",3,"click"],[1,"users-page__toolbar"],["appearance","fill","subscriptSizing","dynamic",1,"users-page__search"],["matPrefix",""],["matInput","","aria-label","Search users by name, username, email, or role","placeholder","Search users by name, username, email, or role",3,"input","value"],[1,"users-page__toolbar-actions"],["appearance","fill","subscriptSizing","dynamic",1,"users-page__filter"],[3,"valueChange","value"],["value","all"],["value","active"],["value","inactive"],["appearance","fill","subscriptSizing","dynamic",1,"users-page__sort"],["value","username"],["value","full_name"],["value","email"],["value","last_login"],["value","updated_at"],["aria-label","User view",1,"users-page__view-toggle"],["mat-icon-button","","matTooltip","List view","aria-label","List view",1,"users-page__view-button",3,"click"],["mat-icon-button","","matTooltip","Grid view","aria-label","Grid view",1,"users-page__view-button",3,"click"],[1,"users-page__main"],[1,"users-page__loading"],["diameter","42","mode","indeterminate"],[1,"users-page__table-container"],[1,"users-page__grid",3,"users-page__grid--with-details"],["aria-label","User details",1,"users-page__details"],["matSort","",3,"matSortChange","dataSource","trackBy","matSortActive","matSortDirection"],["matColumnDef","select"],[4,"matHeaderCellDef"],[4,"matCellDef"],["matColumnDef","username"],["mat-sort-header","",4,"matHeaderCellDef"],["matColumnDef","full_name"],["matColumnDef","email"],[3,"matTooltip",4,"matCellDef"],["matColumnDef","role"],["matColumnDef","is_active"],["matColumnDef","actions"],[4,"matHeaderRowDef","matHeaderRowDefSticky"],[3,"users-page__row--selected","click",4,"matRowDef","matRowDefColumns"],[1,"users-page__table-footer"],["aria-label","Select all filtered users",3,"change","checked","indeterminate"],[3,"click","change","checked"],["mat-sort-header",""],[1,"users-page__name-cell"],[1,"users-page__avatar","users-page__avatar--small"],[3,"matTooltip"],[1,"users-page__role"],[1,"users-page__status"],[1,"users-page__actions-cell"],["mat-icon-button","","matTooltip","View user details",1,"users-page__action","users-page__action--details",3,"click"],["mat-icon-button","","matTooltip","Edit user",1,"users-page__action","users-page__action--edit",3,"click"],["mat-icon-button","","matTooltip","Manage AI profiles",1,"users-page__action","users-page__action--ai",3,"click"],["mat-icon-button","","matTooltip","Delete user",1,"users-page__action","users-page__action--delete",3,"click"],[3,"click"],["showFirstLastButtons","",3,"page","length","pageIndex","pageSize","pageSizeOptions"],[4,"ngTemplateOutlet"],[1,"users-page__grid"],[1,"users-page__card",3,"users-page__card--selected"],["showFirstLastButtons","",1,"users-page__grid-paginator",3,"length","pageIndex","pageSize","pageSizeOptions"],[1,"users-page__card",3,"click"],[1,"users-page__card-header"],[1,"users-page__avatar"],[1,"users-page__card-body"],[1,"users-page__card-title"],[1,"users-page__card-actions"],["showFirstLastButtons","",1,"users-page__grid-paginator",3,"page","length","pageIndex","pageSize","pageSizeOptions"],[1,"users-page__details-header"],[1,"users-page__details-heading"],[1,"users-page__details-title-line"],["mat-icon-button","","matTooltip","Close details","aria-label","Close details",3,"click"],[1,"users-page__details-body"],[1,"users-page__detail-row"],[1,"users-page__detail-row","users-page__detail-row--id"],[1,"users-page__details-actions"],["mat-raised-button","","color","primary",1,"users-page__details-action","users-page__details-action--edit",3,"click"],["mat-raised-button","","color","primary",1,"users-page__details-action","users-page__details-action--ai",3,"click"],["mat-stroked-button","",1,"users-page__details-action","users-page__details-action--delete",3,"click"],[1,"users-page__empty"]],template:function(t,i){t&1&&(r(0,"div",1)(1,"header",2)(2,"div")(3,"h2",3),c(4,"Users"),l()(),r(5,"div",4)(6,"button",5),_("click",function(){return i.refresh()}),r(7,"mat-icon"),c(8,"refresh"),l(),c(9," Refresh "),l(),r(10,"button",6),_("click",function(){return i.deleteMultiple()}),r(11,"mat-icon"),c(12,"delete"),l(),c(13," Delete selected "),l(),r(14,"button",7),_("click",function(){return i.addUser()}),r(15,"mat-icon"),c(16,"person_add"),l(),c(17," Add user "),l()()(),r(18,"nav",8)(19,"button",9),_("click",function(){return i.setScope("all")}),c(20," All users "),r(21,"span"),c(22),l()(),r(23,"button",9),_("click",function(){return i.setScope("active")}),c(24," Active "),r(25,"span"),c(26),l()(),r(27,"button",9),_("click",function(){return i.setScope("administrators")}),c(28," Administrators "),r(29,"span"),c(30),l()()(),r(31,"section",10)(32,"mat-form-field",11)(33,"mat-icon",12),c(34,"search"),l(),r(35,"input",13),_("input",function(s){return i.setSearch(s.target.value)}),l()(),r(36,"div",14)(37,"mat-form-field",15)(38,"mat-label"),c(39,"Status"),l(),r(40,"mat-select",16),_("valueChange",function(s){return i.setStatusFilter(s)}),r(41,"mat-option",17),c(42,"All statuses"),l(),r(43,"mat-option",18),c(44,"Active"),l(),r(45,"mat-option",19),c(46,"Inactive"),l()()(),r(47,"mat-form-field",20)(48,"mat-label"),c(49,"Sort by"),l(),r(50,"mat-select",16),_("valueChange",function(s){return i.onSortByChange(s)}),r(51,"mat-option",21),c(52,"Username"),l(),r(53,"mat-option",22),c(54,"Full name"),l(),r(55,"mat-option",23),c(56,"Email"),l(),r(57,"mat-option",24),c(58,"Last login"),l(),r(59,"mat-option",25),c(60,"Last updated"),l()()(),r(61,"div",26)(62,"button",27),_("click",function(){return i.setViewMode("list")}),r(63,"mat-icon"),c(64,"view_list"),l()(),r(65,"button",28),_("click",function(){return i.setViewMode("grid")}),r(66,"mat-icon"),c(67,"grid_view"),l()()()()(),r(68,"main",29),T(69,D7e,4,0,"div",30)(70,oVe,3,3),l()(),se(71,aVe,7,0,"ng-template",null,0,Qr)),t&2&&(m(6),v("disabled",i.loading()),m(4),v("disabled",i.selection.isEmpty()),m(9),ne("users-page__scope--active",i.selectedScope()==="all"),m(3),N(i.users().length),m(),ne("users-page__scope--active",i.selectedScope()==="active"),m(3),N(i.activeUserCount()),m(),ne("users-page__scope--active",i.selectedScope()==="administrators"),m(3),N(i.administratorCount()),m(5),v("value",i.searchText()),m(5),v("value",i.statusFilter()),m(10),v("value",i.sortActive()),m(12),ne("users-page__view-button--active",i.viewMode()==="list"),m(3),ne("users-page__view-button--active",i.viewMode()==="grid"),m(4),E(i.loading()?69:70))},dependencies:[fe,tc,Y,he,Be,Rt,Gt,ke,we,Pe,Ve,Bi,ie,ce,ye,Ee,As,ea,rt,mt,ot,ct,nt,_a,Ro,Aa,_n,bn,yn,kn,wn,xn,Pn,Mn,Sn,Tn,En,st,pt,dm],styles:['[_nghost-%COMP%]{display:block;width:100%}.users-page[_ngcontent-%COMP%]{animation:none}.users-page__header[_ngcontent-%COMP%], .users-page__toolbar[_ngcontent-%COMP%], .users-page__main[_ngcontent-%COMP%]{display:flex;gap:var(--gns3-density-card-gap)}.users-page__header[_ngcontent-%COMP%]{align-items:center;justify-content:space-between;padding:20px 0 16px}.users-page__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.users-page__header-actions[_ngcontent-%COMP%], .users-page__toolbar-actions[_ngcontent-%COMP%], .users-page__actions-cell[_ngcontent-%COMP%], .users-page__card-actions[_ngcontent-%COMP%]{display:flex;align-items:center}.users-page__header-actions[_ngcontent-%COMP%]{gap:var(--gns3-density-space-3)}button.users-page__bulk-delete[_ngcontent-%COMP%], button.users-page__add[_ngcontent-%COMP%], button.users-page__refresh[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing)}button.users-page__add[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-primary);background-color:var(--mat-sys-primary);--mat-button-protected-label-text-color: var(--mat-sys-on-primary);--mat-button-protected-container-color: var(--mat-sys-primary);--mat-button-protected-state-layer-color: var(--mat-sys-on-primary)}button.users-page__bulk-delete[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-error);background-color:var(--mat-sys-error);--mat-button-filled-label-text-color: var(--mat-sys-on-error);--mat-button-filled-container-color: var(--mat-sys-error);--mat-button-filled-state-layer-color: var(--mat-sys-on-error)}.users-page__scopes[_ngcontent-%COMP%]{display:flex;gap:4px;margin-bottom:var(--gns3-density-card-gap);border-bottom:1px solid var(--mat-sys-outline-variant)}.users-page__scope[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center;min-height:48px;gap:8px;padding:0 16px;border:0;color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;font-size:14px;font-weight:550;cursor:pointer}.users-page__scope[_ngcontent-%COMP%]:after{position:absolute;right:8px;bottom:-1px;left:8px;height:2px;border-radius:2px 2px 0 0;background:transparent;content:""}.users-page__scope[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}.users-page__scope[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{min-width:22px;padding:2px 6px;border-radius:12px;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-high);font-size:11px;text-align:center}.users-page__scope--active[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.users-page__scope--active[_ngcontent-%COMP%]:after{background:var(--mat-sys-primary)}.users-page__scope--active[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.users-page__toolbar[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--gns3-density-card-gap);container:search-toolbar/inline-size}.users-page__toolbar[_ngcontent-%COMP%] .users-page__search[_ngcontent-%COMP%]{flex:1 1 260px;min-width:0;max-width:none;margin:0}.users-page__toolbar[_ngcontent-%COMP%] .users-page__toolbar-actions[_ngcontent-%COMP%]{display:flex;flex:0 1 auto;flex-wrap:wrap;align-items:center;gap:var(--gns3-density-space-3);min-width:0}.users-page__toolbar[_ngcontent-%COMP%] .users-page__filter[_ngcontent-%COMP%], .users-page__toolbar[_ngcontent-%COMP%] .users-page__sort[_ngcontent-%COMP%]{flex:1 1 155px;width:155px;min-width:0}@container search-toolbar (max-width: 640px){.users-page__toolbar[_ngcontent-%COMP%] .users-page__search[_ngcontent-%COMP%]{flex-basis:100%;width:100%}.users-page__toolbar[_ngcontent-%COMP%] .users-page__toolbar-actions[_ngcontent-%COMP%]{width:100%}}@container search-toolbar (max-width: 480px){.users-page__toolbar[_ngcontent-%COMP%] .users-page__view-toggle[_ngcontent-%COMP%]{flex-basis:100%;justify-content:center}}.users-page__toolbar[_ngcontent-%COMP%]{padding-bottom:8px}.users-page__view-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px;padding:4px 2px;border-radius:8px;background:var(--mat-sys-surface-container-high)}button.users-page__view-button[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);border-radius:var(--gns3-density-radius-lg);color:var(--mat-sys-on-surface-variant);--mat-icon-button-icon-size: 22px}button.users-page__view-button--active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.users-page__main[_ngcontent-%COMP%]{align-items:flex-start;padding-bottom:20px}.users-page__loading[_ngcontent-%COMP%]{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;min-height:320px;gap:var(--gns3-density-card-gap);color:var(--mat-sys-on-surface-variant)}.users-page__table-container[_ngcontent-%COMP%]{flex:1;min-width:0;border-radius:16px;background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;overflow-x:auto}mat-table[_ngcontent-%COMP%]{width:100%;min-width:920px}.mat-mdc-row[_ngcontent-%COMP%], .mat-row[_ngcontent-%COMP%]{height:var(--mat-table-row-item-container-height);min-height:var(--mat-table-row-item-container-height)}.mat-header-row[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%]{position:sticky;top:0;z-index:10;background:var(--mat-sys-surface-container-highest);box-shadow:inset 0 -2px var(--mat-sys-primary);--mat-sort-arrow-color: var(--mat-sys-primary)}.mat-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:13px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}mat-row[_ngcontent-%COMP%]{cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease}mat-row[_ngcontent-%COMP%]:nth-child(2n){background:color-mix(in srgb,var(--mat-sys-on-surface) 1%,transparent)}mat-row[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}mat-row.users-page__row--selected[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}mat-cell[_ngcontent-%COMP%], mat-header-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:inherit;overflow:hidden;color:var(--mat-sys-on-surface);text-overflow:ellipsis;white-space:nowrap}.mat-column-select[_ngcontent-%COMP%]{flex:0 0 54px;min-width:54px;padding-right:4px}.mat-column-username[_ngcontent-%COMP%]{flex:1.3;min-width:150px}.mat-column-full_name[_ngcontent-%COMP%]{flex:1.25;min-width:140px}.mat-column-email[_ngcontent-%COMP%]{flex:1.65;min-width:180px}.mat-column-role[_ngcontent-%COMP%]{flex:0 0 130px;min-width:130px}.mat-column-is_active[_ngcontent-%COMP%]{flex:0 0 95px;min-width:95px}.mat-column-actions[_ngcontent-%COMP%]{flex:0 0 190px;min-width:190px;box-sizing:border-box;justify-content:flex-start;padding-right:24px}.users-page__name-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-width:0;gap:var(--gns3-density-space-3)}.users-page__name-cell[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis}.users-page__avatar[_ngcontent-%COMP%]{display:grid;flex:0 0 52px;width:52px;height:52px;place-items:center;border-radius:14px;color:var(--mat-sys-on-primary-container);background:color-mix(in srgb,var(--mat-sys-primary-container) 82%,var(--mat-sys-surface));font-size:18px;font-weight:700}.users-page__avatar--small[_ngcontent-%COMP%]{flex-basis:36px;width:36px;height:36px;border-radius:10px;font-size:13px}.users-page__role[_ngcontent-%COMP%], .users-page__status[_ngcontent-%COMP%]{display:inline-flex;align-items:center;width:fit-content;white-space:nowrap;font-size:12px;font-weight:600}.users-page__role[_ngcontent-%COMP%]{padding:4px 9px;border-radius:16px;color:var(--mat-sys-secondary);background:color-mix(in srgb,var(--mat-sys-secondary) 11%,transparent)}.users-page__role--admin[_ngcontent-%COMP%]{color:var(--mat-sys-primary);background:color-mix(in srgb,var(--mat-sys-primary) 12%,transparent)}.users-page__status[_ngcontent-%COMP%]{gap:6px;color:var(--mat-sys-tertiary)}.users-page__status[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{width:7px;height:7px;border-radius:50%;background:currentColor}.users-page__status--inactive[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant)}.users-page__table-footer[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:var(--mat-table-footer-container-height);padding:0 12px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container))}.users-page__table-footer[_ngcontent-%COMP%] mat-paginator[_ngcontent-%COMP%]{width:100%;--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.users-page__actions-cell[_ngcontent-%COMP%], .users-page__card-actions[_ngcontent-%COMP%]{gap:3px}button.users-page__action[_ngcontent-%COMP%]{--user-action-color: var(--mat-sys-on-surface-variant);width:var(--gns3-density-control-height-sm);height:var(--gns3-density-control-height-sm);--mat-icon-button-state-layer-size: var(--gns3-density-control-height-sm);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-control-height-sm)}button.users-page__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}button.users-page__action[_ngcontent-%COMP%]{color:var(--user-action-color);--mat-icon-button-state-layer-color: var(--user-action-color)}button.users-page__action[_ngcontent-%COMP%]:not(:disabled) mat-icon[_ngcontent-%COMP%]{color:var(--user-action-color)}button.users-page__action[_ngcontent-%COMP%]:disabled mat-icon[_ngcontent-%COMP%]{color:var(--gns3-button-disabled-label-color)}button.users-page__action--details[_ngcontent-%COMP%]{--user-action-color: var(--mat-sys-secondary)}button.users-page__action--edit[_ngcontent-%COMP%]{--user-action-color: var(--mat-sys-primary)}button.users-page__action--ai[_ngcontent-%COMP%]{--user-action-color: var(--mat-sys-tertiary)}button.users-page__action--delete[_ngcontent-%COMP%]{--user-action-color: var(--mat-sys-error)}.users-page__grid[_ngcontent-%COMP%]{flex:1;min-width:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-content:start;gap:var(--gns3-density-card-gap)}.users-page__grid--with-details[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.users-page__card[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column;padding:16px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;background:var(--mat-sys-surface);cursor:pointer;transition:transform var(--gns3-motion-duration-standard) ease,box-shadow var(--gns3-motion-duration-standard) ease,border-color var(--gns3-motion-duration-standard) ease}.users-page__card[_ngcontent-%COMP%]:hover{border-color:var(--mat-sys-outline-variant);background:var(--mat-sys-surface-container-low)}.users-page__card--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);box-shadow:0 0 0 1px var(--mat-sys-primary)}.users-page__card-header[_ngcontent-%COMP%], .users-page__card-title[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--gns3-density-space-3)}.users-page__card-body[_ngcontent-%COMP%]{flex:1;min-width:0;padding:14px 0 12px}.users-page__card-body[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{min-width:0;overflow:hidden;margin:0;color:var(--mat-sys-on-surface);font-size:18px;font-weight:650;text-overflow:ellipsis;white-space:nowrap}.users-page__card-body[_ngcontent-%COMP%] > p[_ngcontent-%COMP%]{overflow:hidden;margin:6px 0 10px;color:var(--mat-sys-on-surface-variant);font-size:14px;text-overflow:ellipsis;white-space:nowrap}.users-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%]{display:grid;gap:8px;margin:16px 0 0}.users-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.users-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}.users-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{min-width:0;overflow:hidden;margin:0;color:var(--mat-sys-on-surface);font-size:13px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.users-page__card-actions[_ngcontent-%COMP%]{justify-content:flex-end;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.users-page__grid-paginator[_ngcontent-%COMP%]{grid-column:1/-1;width:100%;border-radius:12px;background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container));--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.users-page__empty[_ngcontent-%COMP%]{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:230px;padding:32px;color:var(--mat-sys-on-surface-variant);text-align:center}.users-page__empty[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{width:48px;height:48px;font-size:48px;opacity:.55}.users-page__empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:12px 0 0;color:var(--mat-sys-on-surface);font-size:17px}.users-page__empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:5px 0 0;font-size:14px}.users-page__details[_ngcontent-%COMP%]{position:sticky;top:16px;flex:0 0 clamp(380px,31vw,470px);display:flex;min-height:360px;max-height:calc(100vh - 176px);flex-direction:column;overflow:hidden;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 60%,transparent);border-radius:16px;background:var(--mat-sys-surface);box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent);animation:_ngcontent-%COMP%_users-slide-in var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard)}.users-page__details-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;min-height:56px;box-sizing:border-box;gap:var(--gns3-density-space-3);padding:8px 10px 8px 16px;border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 72%,var(--mat-sys-surface))}.users-page__details-header[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-primary-container)}.users-page__details-heading[_ngcontent-%COMP%], .users-page__details-title-line[_ngcontent-%COMP%]{display:flex;min-width:0;align-items:center;gap:var(--gns3-density-space-3)}.users-page__details-heading[_ngcontent-%COMP%], .users-page__details-title-line[_ngcontent-%COMP%]{flex:1}.users-page__details-title-line[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;margin:0;color:var(--mat-sys-on-primary-container);font-size:19px;font-weight:650;text-overflow:ellipsis;white-space:nowrap}.users-page__details-body[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:12px 20px}.users-page__detail-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:22px 92px minmax(0,1fr);align-items:center;min-height:40px;box-sizing:border-box;gap:var(--gns3-density-space-3);padding:8px 0;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.users-page__detail-row[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:19px;height:19px;color:var(--mat-sys-primary);font-size:19px}.users-page__detail-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:12px;font-weight:650;letter-spacing:.5px;text-transform:uppercase;white-space:nowrap}.users-page__detail-row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{min-width:0;color:var(--mat-sys-on-surface);font-size:14px;font-weight:500;text-align:right;overflow-wrap:anywhere}.users-page__detail-row--id[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-family:var(--gns3-font-code);font-size:12px}.users-page__details-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--gns3-density-space-2);padding:14px 16px 18px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-surface-container) 72%,transparent)}button.users-page__details-action[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-on-surface-variant);height:40px;border-radius:12px;color:var(--details-action-color);border-color:color-mix(in srgb,var(--details-action-color) 48%,transparent);font-size:13px}button.users-page__details-action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--details-action-color)}button.users-page__details-action--edit[_ngcontent-%COMP%], button.users-page__details-action--ai[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-primary)}button.users-page__details-action--delete[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-error)}[data-density=compact][_nghost-%COMP%] .users-page__scope[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .users-page__scope[_ngcontent-%COMP%]{min-height:40px;height:40px}[data-density=compact][_nghost-%COMP%] .users-page__details-header[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .users-page__details-header[_ngcontent-%COMP%]{min-height:48px;padding-block:4px}[data-density=compact][_nghost-%COMP%] .users-page__details-body[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .users-page__details-body[_ngcontent-%COMP%]{padding-block:8px}[data-density=compact][_nghost-%COMP%] .users-page__detail-row[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .users-page__detail-row[_ngcontent-%COMP%]{min-height:36px;padding-block:6px}[data-density=compact][_nghost-%COMP%] .users-page__card[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .users-page__card[_ngcontent-%COMP%]{padding:12px}@keyframes _ngcontent-%COMP%_users-slide-in{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@media(max-width:1400px){.users-page__grid[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.users-page__main[_ngcontent-%COMP%]{flex-direction:column}.users-page__table-container[_ngcontent-%COMP%], .users-page__grid[_ngcontent-%COMP%], .users-page__details[_ngcontent-%COMP%]{width:100%}.users-page__details[_ngcontent-%COMP%]{position:static;flex-basis:auto;max-height:none}}@media(max-width:900px){.users-page__header[_ngcontent-%COMP%]{align-items:stretch;flex-direction:column}.users-page__header-actions[_ngcontent-%COMP%]{width:100%}}@media(max-width:640px){.users-page__header-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.users-page__header-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:last-child{grid-column:1/-1}.users-page__scopes[_ngcontent-%COMP%]{overflow-x:auto}.users-page__scope[_ngcontent-%COMP%]{flex:0 0 auto}.users-page__grid[_ngcontent-%COMP%], .users-page__details-actions[_ngcontent-%COMP%]{grid-template-columns:1fr}}'],changeDetection:0})}return n})();var X_=(()=>{class n{uploadEvents=new Ye;cancelRequests=new Ye;cancelHandlers=new Map;get events$(){return this.uploadEvents.asObservable()}get cancelRequests$(){return this.cancelRequests.asObservable()}emit(e){this.uploadEvents.next(e)}requestCancel(e){let t=this.cancelHandlers.get(e);if(t){t();return}this.cancelRequests.next(e)}registerCancelHandler(e,t){!e||!t||this.cancelHandlers.set(e,t)}unregisterCancelHandler(e){e&&this.cancelHandlers.delete(e)}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var cH=(()=>{class n{completed=new WeakMap;calculate(e){let t=this.completed.get(e);return t?Vt({progress:100,checksum:t}):new Sr(i=>{if(typeof Worker>"u"){i.error(new Error("This browser does not support background image checks."));return}let a=new Worker(new URL("worker-457ML2XE.js",import.meta.url),{type:"module"});i.add(()=>a.terminate()),a.onmessage=({data:s})=>{if(s.error){i.error(new Error(s.error));return}s.checksum&&this.completed.set(e,s.checksum),i.next(s),s.checksum&&i.complete()},a.onerror=()=>i.error(new Error("The image checksum could not be calculated.")),a.postMessage(e)})}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var dH=(()=>{class n{http;imageService;imageUploadSessionService;toasterService;queue=[];activeUploads=new Set;activeUploadSizes=new Map;activeCountSource=new cn(0);activeCount$=this.activeCountSource.asObservable();constructor(e,t,i,a){this.http=e,this.imageService=t,this.imageUploadSessionService=i,this.toasterService=a,this.imageUploadSessionService.cancelRequests$.subscribe(s=>{this.cancelUploadByTempId(s)})}queueFile(e,t,i,a=""){let s=`img-${Date.now()}-${Math.random().toString(36).slice(2,10)}`,d={tempId:s,file:t,controller:e,installAppliance:i,subdirectory:a,cancel$:new Ye,status:"queued",progress:0};return this.queue.push(d),this.imageUploadSessionService.registerCancelHandler(s,()=>this.cancelUploadByTempId(s)),this.emitEvent(d),this.processQueue(),this.updateActiveCount(),s}cancelUploadByTempId(e){let t=this.queue.find(i=>i.tempId===e);t&&(t.cancel$.next(),t.cancel$.complete(),t.status="canceled",this.emitEvent(t),this.imageUploadSessionService.unregisterCancelHandler(e),this.releaseSlot(t),this.removeFromQueue(t),this.processQueue(),this.updateActiveCount())}processQueue(){let e=this.getHardConcurrencyCapFromEnvironment();for(;this.activeUploads.size<e;){let t=this.pickNextTask();if(!t||!this.canStartUpload(t))break;this.startUpload(t)}}startUpload(e){this.activeUploads.add(e.tempId),this.activeUploadSizes.set(e.tempId,e.file.size),e.status="uploading",this.emitEvent(e);let t=this.imageService.getImagePath(e.controller,e.installAppliance,e.file.name,e.subdirectory),i={};e.controller.authToken&&!e.controller.tokenExpired&&(i.Authorization=`Bearer ${e.controller.authToken}`);let a=new MA("POST",t,e.file,{headers:new BC(i),reportProgress:!0});this.http.request(a).pipe(He(e.cancel$)).subscribe({next:s=>{if(s.type===ag.UploadProgress)e.progress=s.total?Math.round(100*s.loaded/s.total):0,this.emitEvent(e),this.updateActiveCount();else if(s.type===ag.Response){let d=s.body,p=d?.filename||d?.message?.filename||e.file.name;e.path=d?.path||d?.message?.path,e.status="uploaded",e.progress=100,this.emitEvent(e),this.reportUploadResult(p,e.installAppliance,d?.template_results||d?.message?.template_results),this.releaseSlot(e),this.removeFromQueue(e),this.processQueue(),this.updateActiveCount()}},error:s=>{let d=s?.error?.message||s?.message||"Upload failed";e.status="error",this.emitEvent(e,d),this.toasterService.error(d),this.releaseSlot(e),this.removeFromQueue(e),this.processQueue(),this.updateActiveCount()}})}reportUploadResult(e,t,i){if(!t){this.toasterService.success(`Image ${e} imported successfully`);return}if(!Array.isArray(i)||!i.length||i.some(u=>!u||u.status!=="created"&&u.status!=="skipped")){this.toasterService.warning(`Image ${e} uploaded. The server did not report whether a template was created.`);return}let a=i.filter(u=>u.status==="created"),s=i.filter(u=>u.status==="skipped"),d=a.length?`Created templates: ${a.map(u=>u.name||u.template_id).join(", ")}.`:"",p=`Image ${e} uploaded.${d?` ${d}`:""}`;if(s.length){let u=s.map(g=>`${g.name?g.name+": ":""}${g.reason||"Template creation was skipped."}`);this.toasterService.warning(`${p} ${u.join(" ")}`)}else this.toasterService.success(p)}pickNextTask(){let e=this.getPendingTasks();if(!e.length)return null;let t=this.getInFlightBytesBudget()-this.getApproxInFlightBytes(),i=e.filter(a=>a.file.size<=t);return i.length?i.sort((a,s)=>a.file.size-s.file.size)[0]:this.activeUploads.size===0?e.sort((a,s)=>a.file.size-s.file.size)[0]:null}canStartUpload(e){if(this.activeUploads.size===0)return!0;let t=this.getApproxInFlightBytes(),i=e.file.size,a=this.getInFlightBytesBudget(),s=this.getPendingTasks(),d=s.length?s.reduce((g,C)=>g+C.file.size,0)/s.length:this.getAverageKnownSize(),p=Math.max(1,Math.floor(a/Math.max(d,this.getAverageKnownSize()))),u=Math.min(this.getHardConcurrencyCapFromEnvironment(),p);return this.activeUploads.size>=u?!1:t+i<=a}getPendingTasks(){return this.queue.filter(e=>e.status==="queued")}releaseSlot(e){this.activeUploads.delete(e.tempId),this.activeUploadSizes.delete(e.tempId)}removeFromQueue(e){let t=this.queue.indexOf(e);t>=0&&this.queue.splice(t,1)}getHardConcurrencyCapFromEnvironment(){let e=this.getRuntimeSignals(),t=Math.max(1,Math.round(Math.log2(e.cores+1)*2)),i=Math.max(1,Math.round(e.memoryGiB*1.2)),a=this.getPendingTasks().map(p=>p.file.size).filter(p=>p>0),s=a.length?a.reduce((p,u)=>p+u,0)/a.length:0,d=Math.min(t,Math.max(1,i*2));if(d=Math.max(1,Math.round(d*this.getNetworkMultiplier(e.effectiveType))),s>0){let p=Math.max(1,Math.round(e.memoryGiB*1024*1024*1024*.15/s));d=Math.min(d,p)}return this.clampConcurrency(d)}getInFlightBytesBudget(){let e=this.getRuntimeSignals(),t=this.getHardConcurrencyCapFromEnvironment(),i=this.getAverageKnownSize(),a=e.memoryGiB*1024*1024*1024*.18,s=i*t*1.5,p=Math.max(a,s)*this.getNetworkMultiplier(e.effectiveType);return Math.max(i,Math.round(p))}getApproxInFlightBytes(){let e=0;return this.activeUploadSizes.forEach(t=>e+=t),e}getAverageKnownSize(){let e=this.queue.map(a=>a.file.size).filter(a=>a>0),t=Array.from(this.activeUploadSizes.values()).filter(a=>a>0),i=[...e,...t];return i.length?Math.round(i.reduce((a,s)=>a+s,0)/i.length):32*1024*1024}clampConcurrency(e){return Math.max(1,Math.min(12,Math.floor(e||1)))}getRuntimeSignals(){let e=navigator;return{cores:Math.max(1,Number(e.hardwareConcurrency||4)),memoryGiB:Math.max(1,Number(e.deviceMemory||4)),effectiveType:e.connection&&e.connection.effectiveType?String(e.connection.effectiveType).toLowerCase():""}}getNetworkMultiplier(e){return e.includes("slow-2g")?.25:e.includes("2g")?.35:e.includes("3g")?.6:e.includes("4g")?1:e.includes("5g")?1.15:.85}emitEvent(e,t){this.imageUploadSessionService.emit({tempId:e.tempId,filename:e.file.name,image_size:e.file.size,image_type:this.resolveImageType(e.file.name),progress:e.progress,status:e.status,errorMessage:t,controller_id:e.controller.id,path:e.path}),(e.status==="uploaded"||e.status==="error"||e.status==="canceled")&&this.imageUploadSessionService.unregisterCancelHandler(e.tempId)}resolveImageType(e){let t=(e||"").split(".");return t.length>1?t[t.length-1].toLowerCase():"unknown"}updateActiveCount(){this.activeCountSource.next(this.activeUploads.size+this.getPendingTasks().length)}static \u0275fac=function(t){return new(t||n)(_e(us),_e(Ns),_e(X_),_e(re))};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();function sVe(n,o){if(n&1&&(r(0,"mat-error"),c(1),l()),n&2){let e=h(2);m(),N(e.subdirectoryError)}}function lVe(n,o){if(n&1&&(r(0,"li"),c(1),l()),n&2){let e=o.$implicit;m(),N(e.name)}}function cVe(n,o){if(n&1&&(r(0,"p"),c(1),l(),r(2,"ul"),Q(3,lVe,2,1,"li",null,ni),l()),n&2){let e=h(2);m(),X("",e.selectedFiles.length," file(s) selected:"),m(2),K(e.selectedFiles)}}function dVe(n,o){if(n&1){let e=R();r(0,"h1",1),c(1,"Select image file(s) to upload"),l(),r(2,"mat-dialog-content")(3,"p",2)(4,"mat-icon",3),c(5,"info_outline"),l(),c(6," Image uploads are done in the background. "),l(),r(7,"mat-form-field",4)(8,"mat-label"),c(9,"Subfolder (optional)"),l(),r(10,"input",5),rn("ngModelChange",function(i){y(e);let a=h();return Xt(a.subdirectory,i)||(a.subdirectory=i),w(i)}),l(),T(11,sVe,2,1,"mat-error"),l(),r(12,"p"),c(13,"Leave empty to use the default type folder. New subfolders are created when you upload."),l(),T(14,cVe,5,1),r(15,"input",6,0),_("change",function(i){y(e);let a=h();return w(a.onFilesSelected(i))}),l()(),r(17,"mat-dialog-actions",7)(18,"button",8),_("click",function(){y(e);let i=h();return w(i.closeDialog())}),c(19,"Cancel"),l(),r(20,"button",8),_("click",function(){y(e);let i=Te(16);return w(i.click())}),c(21,"Browse"),l(),r(22,"button",9),_("click",function(){y(e);let i=h();return w(i.nextStep())}),c(23,"Next"),l()()}if(n&2){let e=h();m(10),an("ngModel",e.subdirectory),v("errorStateMatcher",e.subdirectoryErrorStateMatcher),m(),E(e.subdirectoryError?11:-1),m(3),E(e.selectedFiles.length?14:-1),m(8),v("disabled",!e.canProceed)}}function mVe(n,o){if(n&1&&(r(0,"p")(1,"strong"),c(2),l()()),n&2){let e=o.$implicit;m(2),N(e.name)}}function pVe(n,o){if(n&1&&(r(0,"p"),c(1),l()),n&2){let e=h(2);m(),X("Subfolder: ",e.subdirectory)}}function uVe(n,o){if(n&1&&(r(0,"p"),c(1),l()),n&2){let e=h(3);m(),X("Checking appliance compatibility\u2026 ",e.compatibilityProgress)}}function gVe(n,o){if(n&1){let e=R();r(0,"p"),c(1),l(),r(2,"button",8),_("click",function(){y(e);let i=h(3);return w(i.checkCompatibility())}),c(3,"Retry check"),l()}if(n&2){let e=h(3);m(),N(e.compatibilityError)}}function hVe(n,o){if(n&1&&(r(0,"p")(1,"strong"),c(2),l()()),n&2){let e=h().$implicit;m(2),N(e.filename)}}function _Ve(n,o){if(n&1&&(r(0,"p",14),c(1),l()),n&2){let e=h().$implicit;m(),N(e.reason)}}function fVe(n,o){n&1&&(r(0,"p",14),c(1," No matching appliance definition was found. You can upload this image, but you will need to create a template manually. "),l())}function vVe(n,o){if(n&1&&(r(0,"p"),c(1),l()),n&2){let e=h().$implicit;m(),X(" Required images still missing: ",e.missing_images.join(", "),". This template cannot be created until they are available. ")}}function CVe(n,o){if(n&1&&(r(0,"p"),c(1),l()),n&2){let e=h().$implicit;m(),X("The server will attempt to download additional required images: ",e.downloadable_images.join(", "),".")}}function bVe(n,o){if(n&1&&(r(0,"p"),c(1),l(),T(2,vVe,2,1,"p"),T(3,CVe,2,1,"p")),n&2){let e=o.$implicit;m(),Un("Match found: ",e.name," (",e.version,")."),m(),E(e.missing_images.length?2:-1),m(),E(e.downloadable_images.length?3:-1)}}function xVe(n,o){if(n&1&&(T(0,hVe,3,1,"p"),T(1,_Ve,2,1,"p",14)(2,fVe,2,0,"p",14),Q(3,bVe,4,4,null,null,ni)),n&2){let e=o.$implicit,t=h(3);E(t.selectedFiles.length>1?0:-1),m(),E(e.reason?1:e.matches.length?-1:2),m(2),K(e.matches)}}function yVe(n,o){if(n&1&&(r(0,"div",13),T(1,uVe,2,1,"p"),T(2,gVe,4,1),Q(3,xVe,5,2,null,null,ni),l()),n&2){let e=h(2);m(),E(e.compatibilityState==="checking"?1:-1),m(),E(e.compatibilityState==="error"?2:-1),m(),K(e.compatibilityResults)}}function wVe(n,o){if(n&1){let e=R();r(0,"h1",1),c(1,"Create template using uploaded image?"),l(),r(2,"mat-dialog-content")(3,"p"),c(4),l(),Q(5,mVe,3,1,"p",null,ni),T(7,pVe,2,1,"p"),r(8,"mat-radio-group",10),_("change",function(i){y(e);let a=h();return w(a.selectInstallApplianceOption(i))}),r(9,"mat-radio-button",11),c(10,"Yes - uploads the image and creates a template based on appliance definition present in the server's catalog."),l(),r(11,"mat-radio-button",12),c(12,"No - uploads the images without creating a template."),l()(),T(13,yVe,5,2,"div",13),l(),r(14,"mat-dialog-actions",7)(15,"button",8),_("click",function(){y(e);let i=h();return w(i.back())}),c(16,"Back"),l(),r(17,"button",8),_("click",function(){y(e);let i=h();return w(i.closeDialog())}),c(18,"Cancel"),l(),r(19,"button",9),_("click",function(){y(e);let i=h();return w(i.uploadFiles())}),c(20,"Upload"),l()()}if(n&2){let e=h();m(4),X("",e.selectedFiles.length," file(s) selected. Uploads will run in the background."),m(),K(e.selectedFiles),m(2),E(e.subdirectory?7:-1),m(),v("value",e.install_appliance),m(),v("value",!0),m(2),v("value",!1),m(2),E(e.install_appliance?13:-1),m(6),v("disabled",!e.canUpload)}}var sk=(()=>{class n{controller;dialogRef;checksumService=f(cH);imageManagerService=f(Ns);compatibilitySubscription;compatibilityState="idle";compatibilityProgress="";compatibilityError="";compatibilityResults=[];backgroundUploadService=f(dH);toasterService=f(re);cd=f(oe);step="files";install_appliance=!1;selectedFiles=[];subdirectory="";subdirectoryErrorStateMatcher={isErrorState:()=>!!this.subdirectoryError};get subdirectoryError(){if(!this.subdirectory)return"";let e=this.subdirectory.split("/");return this.subdirectory.length>512||e.length>8?"Use at most eight subfolder levels and 512 characters.":e.some(t=>!/^[A-Za-z0-9][A-Za-z0-9 ._-]{0,63}$/.test(t)||/[\r\n]/.test(t)||/[. ]$/.test(t)||/\.(tmp|md5sum)$/.test(t)||/^(lib|lib64)$/i.test(t)||/^(con|prn|aux|nul|com[1-9]|lpt[1-9])(\..*)?$/i.test(t))?"Use relative folder names with letters, numbers, spaces, dots, hyphens or underscores. Hidden and reserved names are not allowed.":""}get canProceed(){return this.selectedFiles.length>0&&!this.subdirectoryError}get canUpload(){return this.canProceed&&(!this.install_appliance||this.compatibilityState==="ready")}constructor(e,t){this.controller=e,this.dialogRef=t}onFilesSelected(e){let t=e.target;!t.files||!t.files.length||(this.cancelCompatibilityCheck(),this.selectedFiles=Array.from(t.files),t.value="",this.cd.markForCheck())}nextStep(){this.canProceed&&(this.step="appliances",this.install_appliance&&this.checkCompatibility())}uploadFiles(){if(this.step!=="appliances"||!this.canUpload)return;for(let t of this.selectedFiles)this.backgroundUploadService.queueFile(this.controller,t,this.install_appliance,this.subdirectory);let e=this.selectedFiles.length===1?"1 file":`${this.selectedFiles.length} files`;this.toasterService.success(`${e} queued \u2014 uploading in the background`),this.dialogRef.close(!0)}selectInstallApplianceOption(e){this.install_appliance=e.value===!0,this.install_appliance?this.checkCompatibility():this.cancelCompatibilityCheck(),this.cd.markForCheck()}back(){this.cancelCompatibilityCheck(),this.step="files"}checkCompatibility(){this.cancelCompatibilityCheck(),this.compatibilityState="checking";let e=[...this.selectedFiles];this.compatibilityProgress="Checking the server appliance catalog\u2026";let t="catalog";this.compatibilitySubscription=this.imageManagerService.getCompatibilityCatalog(this.controller).pipe(Rk(3e4),Dn(i=>{if(!Array.isArray(i?.image_sizes)||i.image_sizes.some(s=>!Number.isSafeInteger(s)||s<0)||typeof i.has_unknown_sizes!="boolean")throw new Error("The server returned an invalid compatibility catalog.");let a=new Set(i.image_sizes);return sm(e).pipe(rf(s=>!i.has_unknown_sizes&&!a.has(s.size)?Vt({filename:s.name,checksum:"",reason:"No appliance definition found in the server catalog for this image. You can upload it and create a template manually."}):(t="file",this.checksumService.calculate(s).pipe(Qn(({progress:d})=>{this.compatibilityProgress=`Reading ${s.name}: ${d}%`,this.cd.markForCheck()}),Yi(d=>!!d.checksum),Pt(d=>({filename:s.name,checksum:d.checksum,reason:""}))))),iA())}),Dn(i=>{t="catalog",this.compatibilityProgress="Checking the server appliance catalog\u2026",this.cd.markForCheck();let a=i.filter(d=>d.checksum).map(d=>d.checksum);return(a.length?this.imageManagerService.checkCompatibility(this.controller,a):Vt([])).pipe(Rk(3e4),Pt(d=>i.map(p=>{if(!p.checksum)return{filename:p.filename,matches:[],reason:p.reason};let u=d.find(g=>g.checksum===p.checksum);if(!u||!Array.isArray(u.matches))throw new Error("The server returned an incomplete compatibility result.");return{filename:p.filename,matches:u.matches}})))})).subscribe({next:i=>{this.compatibilityResults=i,this.compatibilityState="ready",this.cd.markForCheck()},error:i=>{this.compatibilityState="error";let a=i?.originalError?.status??i?.status,s;t==="file"?s=i?.message||"The selected file could not be read.":a===404?s="The server does not support this compatibility endpoint. Restart the updated GNS3 server.":a===401||a===403?s="The server denied the compatibility check. Check your login and image upload permissions.":a===0?s="The server could not be reached. Check its connection and browser access settings.":i?.name==="TimeoutError"?s="The server catalog check timed out after 30 seconds.":s=i?.error?.message||i?.message||"The server returned an invalid compatibility response.",this.compatibilityError=`Compatibility could not be checked: ${s} Retry, or select No to upload without creating templates.`,this.cd.markForCheck()}}),this.cd.markForCheck()}cancelCompatibilityCheck(){this.compatibilitySubscription?.unsubscribe(),this.compatibilitySubscription=void 0,this.compatibilityState="idle",this.compatibilityProgress="",this.compatibilityResults=[],this.compatibilityError=""}ngOnDestroy(){this.cancelCompatibilityCheck()}closeDialog(){this.cancelCompatibilityCheck(),this.dialogRef.close(!1)}static \u0275fac=function(t){return new(t||n)(Mt(Wt),Mt(We))};static \u0275cmp=V({type:n,selectors:[["app-add-image-dialog"]],decls:2,vars:1,consts:[["fileInput",""],["mat-dialog-title",""],[1,"add-image-dialog-hint"],[1,"add-image-dialog-hint-icon"],["appearance","outline",2,"width","100%"],["matInput","","maxlength","512","placeholder","Cisco/IOSv",3,"ngModelChange","ngModel","errorStateMatcher"],["type","file","accept",".bin,.image,.iol,.qcow2,.vmdk,.raw,.img,.iso,.fd,.vhd,.vdi","multiple","",1,"add-image-dialog-file-input",3,"change"],["align","end"],["mat-button","",3,"click"],["mat-raised-button","","color","primary",3,"click","disabled"],["name","install_appliances","aria-label","Install appliance from uploaded image?",3,"change","value"],[1,"add-image-dialog-install-option",3,"value"],[3,"value"],["aria-live","polite",1,"add-image-dialog-compatibility-results"],[1,"add-image-dialog-compatibility-warning"]],template:function(t,i){t&1&&T(0,dVe,24,5)(1,wVe,21,7),t&2&&E(i.step==="files"?0:1)},dependencies:[ke,qe,Qe,bt,Y,he,ie,ce,Fo,la,Zo,St,At,Nt,XA,WA,we,Pe,Ve,Wn,ye,Ee],encapsulation:2,changeDetection:0})}return n})();function MVe(n,o){n&1&&(r(0,"h1",1),c(1,"Deleting images"),l(),r(2,"mat-dialog-content",2),L(3,"mat-spinner",3),l())}function SVe(n,o){if(n&1&&c(0),n&2){let e=h(),t=e.$implicit,i=e.$index;Un(" ",i+1,". ",t==null||t.error==null?null:t.error.message," ")}}function kVe(n,o){if(n&1&&(r(0,"li",11),T(1,SVe,1,2),l()),n&2){let e=o.$implicit;ne("delete-files__list-item--error",e==null||e.error==null?null:e.error.message),m(),E(e!==null?1:-1)}}function PVe(n,o){if(n&1&&(r(0,"h5",8),c(1,"Images can't be deleted because image used in one or more template."),l(),r(2,"ul",9),Q(3,kVe,2,3,"li",10,ni),l()),n&2){let e=h(2);m(3),K(e.deleteFliesDetails)}}function TVe(n,o){if(n&1&&(r(0,"h5",5),c(1),l()),n&2){let e=h(2);m(),X("",e.fileNotDeleted.length," Images deleted successfully.")}}function EVe(n,o){if(n&1){let e=R();r(0,"mat-dialog-content",4),T(1,PVe,5,0),T(2,TVe,2,1,"h5",5),l(),r(3,"mat-dialog-actions",6)(4,"button",7),_("click",function(){y(e);let i=h();return w(i.dialogRef.close(!1))}),c(5,"Close"),l()()}if(n&2){let e=h();m(),E(e.deleteFliesDetails.length>0?1:-1),m(),E(e.fileNotDeleted.length>0?2:-1)}}var lk=(()=>{class n{deleteData;dialogRef;imageService=f(Ns);toasterService=f(re);cd=f(oe);isDelete=!0;isUsedFiles=!1;deleteFliesDetails=[];fileNotDeleted=[];constructor(e,t){this.deleteData=e,this.dialogRef=t}ngOnInit(){this.deleteData.autoStart!==!1&&this.deleteFile()}async deleteAll(){this.isDelete=!0,await this.deleteFile()}deleteFile(){let e=[];this.deleteData.deleteFilesPaths.forEach(t=>{e.push(this.imageService.deleteFile(this.deleteData.controller,t.filename).pipe(ei(i=>Vt(i))))}),Ci(e).subscribe({next:t=>{this.deleteFliesDetails=t.filter(i=>i!==null),this.fileNotDeleted=t.filter(i=>i===null),this.isUsedFiles=!0,this.isDelete=!0,this.cd.markForCheck()},error:t=>{let i=t.error?.message||t.message||"Failed to delete files";this.toasterService.error(i),this.cd.markForCheck()}})}static \u0275fac=function(t){return new(t||n)(Mt(Wt),Mt(We))};static \u0275cmp=V({type:n,selectors:[["app-deleteallfiles-dialog"]],decls:3,vars:2,consts:[[1,"delete-files"],["mat-dialog-title","",1,"delete-files__title","delete-files__title--center"],[1,"delete-files__content","delete-files__content--center"],["color","accent"],[1,"delete-files__content"],[1,"delete-files__success-title"],[1,"delete-files__actions"],["mat-raised-button","","color","primary",3,"click"],[1,"delete-files__error-title"],[1,"delete-files__list"],[1,"delete-files__list-item",3,"delete-files__list-item--error"],[1,"delete-files__list-item"]],template:function(t,i){t&1&&(r(0,"div",0),T(1,MVe,4,0),T(2,EVe,6,2),l()),t&2&&(m(),E(i.isUsedFiles?-1:1),m(),E(i.isUsedFiles?2:-1))},dependencies:[fe,ke,qe,Qe,bt,Y,he,rt,mt],styles:[".delete-files[_ngcontent-%COMP%]{display:flex;flex-direction:column;min-width:0}.delete-files__title[_ngcontent-%COMP%]{margin:0;padding:var(--gns3-density-card-padding) var(--gns3-density-card-padding) 16px;font-size:18px;font-weight:500;color:var(--mat-sys-on-surface)}.delete-files__title--center[_ngcontent-%COMP%]{text-align:center}.delete-files__content[_ngcontent-%COMP%]{padding:0 var(--gns3-density-card-padding) 16px}.delete-files__content--center[_ngcontent-%COMP%]{display:flex;justify-content:center;padding:var(--gns3-density-card-padding)}.delete-files__subtitle[_ngcontent-%COMP%]{margin:0 0 12px;font-size:14px;color:var(--mat-sys-on-surface-variant)}.delete-files__list[_ngcontent-%COMP%]{margin:0;padding-left:20px;list-style:decimal}.delete-files__list-item[_ngcontent-%COMP%]{padding:4px 0;font-size:14px;color:var(--mat-sys-on-surface)}.delete-files__list-item--error[_ngcontent-%COMP%]{color:var(--mat-sys-error)}.delete-files__error-title[_ngcontent-%COMP%]{margin:0 0 12px;font-size:14px;font-weight:500;color:var(--mat-sys-error)}.delete-files__success-title[_ngcontent-%COMP%]{margin:16px 0 0;font-size:14px;font-weight:500;color:var(--mat-sys-primary)}.delete-files__actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;padding:16px var(--gns3-density-card-padding) var(--gns3-density-card-padding);gap:var(--gns3-density-space-3)}@media(max-width:480px){.delete-files[_ngcontent-%COMP%]{min-width:0;width:min(300px,100%)}.delete-files__title[_ngcontent-%COMP%]{padding:16px 16px 12px}.delete-files__content[_ngcontent-%COMP%]{padding:0 16px 12px}.delete-files__actions[_ngcontent-%COMP%]{padding:12px 16px 16px;flex-direction:column}}"],changeDetection:0})}return n})();function OVe(n,o){if(n&1&&(r(0,"mat-option",18),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e)}}function DVe(n,o){if(n&1){let e=R();r(0,"mat-header-cell")(1,"mat-checkbox",46),_("change",function(){y(e);let i=h(2);return w(i.selectAllImages())}),l()()}if(n&2){let e=h(2);m(),v("checked",e.hasSelection()&&e.isAllSelected())("indeterminate",e.hasSelection()&&!e.isAllSelected())}}function IVe(n,o){if(n&1){let e=R();r(0,"mat-cell")(1,"mat-checkbox",47),_("click",function(i){let a=y(e).$implicit,s=h(2);return w(s.onRowCheckboxClick(i,a))}),l()()}if(n&2){let e=o.$implicit,t=h(2);m(),v("checked",t.isRowSelected(e))("disabled",!t.isPersistedRow(e)),Ce("aria-label","Select "+e.filename)}}function AVe(n,o){n&1&&(r(0,"mat-header-cell",48),c(1,"Filename"),l())}function NVe(n,o){if(n&1&&(r(0,"span"),c(1),l()),n&2){let e=h(2).$implicit;m(),X(" \xB7 ",e.errorMessage)}}function FVe(n,o){if(n&1&&(r(0,"div",51),L(1,"mat-progress-bar",52),r(2,"span",53),c(3),Et(4,"titlecase"),T(5,NVe,2,1,"span"),l()()),n&2){let e=h().$implicit;m(),v("value",e.uploadProgress||0),m(),ne("image-manager__upload-error",e.uploadStatus==="error"),m(),Un(" ",gn(4,6,e.uploadStatus)," \xB7 ",e.uploadProgress||0,"% "),m(2),E(e.errorMessage?5:-1)}}function RVe(n,o){if(n&1&&(r(0,"mat-cell")(1,"div",49)(2,"span",50),c(3),l(),T(4,FVe,6,8,"div",51),l()()),n&2){let e=o.$implicit,t=h(2);m(3),N(e.filename),m(),E(t.hasUploadState(e)?4:-1)}}function zVe(n,o){n&1&&(r(0,"mat-header-cell"),c(1,"Status"),l())}function LVe(n,o){if(n&1&&(r(0,"mat-cell")(1,"span",54),c(2),Et(3,"titlecase"),l()()),n&2){let e=o.$implicit,t=h(2);m(),ne("image-manager__status-badge--uploading",t.hasUploadState(e))("image-manager__status-badge--error",t.imageStatusIsError(e)),m(),X(" ",gn(3,5,t.imageStatusLabel(e))," ")}}function VVe(n,o){n&1&&(r(0,"mat-header-cell",48),c(1,"Image Type"),l())}function BVe(n,o){if(n&1&&(r(0,"mat-cell")(1,"span",55)(2,"mat-icon"),c(3),l(),c(4),l()()),n&2){let e=o.$implicit,t=h(2);m(3),N(t.imageTypeIcon(e)),m(),X(" ",e.image_type||"Unknown"," ")}}function jVe(n,o){n&1&&(r(0,"mat-header-cell",48),c(1,"Image Size"),l())}function $Ve(n,o){if(n&1&&(r(0,"mat-cell"),c(1),l()),n&2){let e=o.$implicit,t=h(2);m(),N(t.formatImageSize(e))}}function HVe(n,o){n&1&&(r(0,"mat-header-cell",48),c(1,"Created"),l())}function UVe(n,o){if(n&1&&(r(0,"mat-cell"),c(1),Et(2,"date"),l()),n&2){let e=o.$implicit;m(),N(e.created_at?Io(2,1,e.created_at,"short"):"\u2014")}}function WVe(n,o){if(n&1){let e=R();r(0,"button",57),_("click",function(i){y(e);let a=h(3);return i.stopPropagation(),w(a.deleteAllFiles())}),r(1,"mat-icon"),c(2,"delete_sweep"),l()()}}function GVe(n,o){if(n&1&&(r(0,"mat-header-cell")(1,"span"),c(2,"Actions"),l(),T(3,WVe,3,0,"button",56),l()),n&2){let e=h(2);m(3),E(e.selectedCount()>1?3:-1)}}function qVe(n,o){if(n&1){let e=R();r(0,"button",62),_("click",function(i){y(e);let a=h().$implicit,s=h(2);return i.stopPropagation(),w(s.deleteFile(a.path))}),r(1,"mat-icon"),c(2,"delete"),l()()}if(n&2){let e=h().$implicit;Ce("aria-label","Delete "+e.filename)}}function QVe(n,o){if(n&1){let e=R();r(0,"button",63),_("click",function(i){y(e);let a=h().$implicit,s=h(2);return i.stopPropagation(),w(s.cancelUpload(a))}),r(1,"mat-icon"),c(2,"cancel"),l()()}if(n&2){let e=h().$implicit;Ce("aria-label","Cancel upload for "+e.filename)}}function KVe(n,o){if(n&1){let e=R();r(0,"mat-cell")(1,"div",58)(2,"button",59),_("click",function(i){let a=y(e).$implicit,s=h(2);return i.stopPropagation(),w(s.selectImage(a))}),r(3,"mat-icon"),c(4,"info"),l()(),T(5,qVe,3,1,"button",60)(6,QVe,3,1,"button",61),l()()}if(n&2){let e=o.$implicit,t=h(2);m(2),Ce("aria-label","View details for "+e.filename),m(3),E(t.isPersistedRow(e)?5:e.uploadStatus==="uploading"||e.uploadStatus==="queued"?6:-1)}}function XVe(n,o){n&1&&L(0,"mat-header-row")}function YVe(n,o){if(n&1){let e=R();r(0,"mat-row",64),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.selectImage(i))}),l()}if(n&2){let e,t=o.$implicit,i=h(2);ne("image-manager__row--selected",(((e=i.selectedImage())==null?null:e.tempId)||((e=i.selectedImage())==null?null:e.path))===(t.tempId||t.path))("image-manager__row-highlight",i.isHighlighted(t))}}function ZVe(n,o){if(n&1){let e=R();r(0,"div",44)(1,"mat-paginator",65),_("page",function(i){y(e);let a=h(2);return w(a.onPageEvent(i))}),l()()}if(n&2){let e=h(2);m(),v("length",e.filteredRows().length)("pageIndex",e.pageIndex())("pageSize",e.pageSize())("pageSizeOptions",e.pageSizeOptions)}}function JVe(n,o){n&1&&(r(0,"div",45)(1,"mat-icon",66),c(2,"image_not_supported"),l(),r(3,"p"),c(4,"No images match the current search and filter."),l()())}function e9e(n,o){if(n&1){let e=R();r(0,"div",28)(1,"mat-table",31),_("matSortChange",function(i){y(e);let a=h();return w(a.onSortChange(i))}),Fe(2,32),se(3,DVe,2,2,"mat-header-cell",33)(4,IVe,2,3,"mat-cell",34),Re(),Fe(5,35),se(6,AVe,2,0,"mat-header-cell",36)(7,RVe,5,2,"mat-cell",34),Re(),Fe(8,37),se(9,zVe,2,0,"mat-header-cell",33)(10,LVe,4,7,"mat-cell",34),Re(),Fe(11,38),se(12,VVe,2,0,"mat-header-cell",36)(13,BVe,5,2,"mat-cell",34),Re(),Fe(14,39),se(15,jVe,2,0,"mat-header-cell",36)(16,$Ve,2,1,"mat-cell",34),Re(),Fe(17,40),se(18,HVe,2,0,"mat-header-cell",36)(19,UVe,3,4,"mat-cell",34),Re(),Fe(20,41),se(21,GVe,4,1,"mat-header-cell",33)(22,KVe,7,2,"mat-cell",34),Re(),se(23,XVe,1,0,"mat-header-row",42)(24,YVe,1,4,"mat-row",43),l(),T(25,ZVe,2,4,"div",44)(26,JVe,5,0,"div",45),l()}if(n&2){let e=h();m(),v("dataSource",e.paginatedRows())("trackBy",e.trackByRow)("matSortActive",e.sortActive())("matSortDirection",e.sortDirection()),m(22),v("matHeaderRowDef",e.displayedColumns)("matHeaderRowDefSticky",!0),m(),v("matRowDefColumns",e.displayedColumns),m(),E(e.filteredRows().length>0?25:26)}}function t9e(n,o){if(n&1){let e=R();r(0,"mat-checkbox",80),_("click",function(i){y(e);let a=h().$implicit,s=h(2);return w(s.onRowCheckboxClick(i,a))}),l()}if(n&2){let e=h().$implicit,t=h(2);v("checked",t.isRowSelected(e)),Ce("aria-label","Select "+e.filename)}}function n9e(n,o){if(n&1&&c(0),n&2){let e=h(2).$implicit;X(" \xB7 ",e.errorMessage," ")}}function i9e(n,o){if(n&1&&(r(0,"div",78),L(1,"mat-progress-bar",52),r(2,"span"),c(3),T(4,n9e,1,1),l()()),n&2){let e=h().$implicit;m(),v("value",e.uploadProgress||0),m(),ne("image-manager__upload-error",e.uploadStatus==="error"),m(),X(" ",e.uploadProgress||0,"% "),m(),E(e.errorMessage?4:-1)}}function o9e(n,o){if(n&1){let e=R();r(0,"button",62),_("click",function(i){y(e);let a=h().$implicit,s=h(2);return i.stopPropagation(),w(s.deleteFile(a.path))}),r(1,"mat-icon"),c(2,"delete"),l()()}if(n&2){let e=h().$implicit;Ce("aria-label","Delete "+e.filename)}}function a9e(n,o){if(n&1){let e=R();r(0,"button",63),_("click",function(i){y(e);let a=h().$implicit,s=h(2);return i.stopPropagation(),w(s.cancelUpload(a))}),r(1,"mat-icon"),c(2,"cancel"),l()()}if(n&2){let e=h().$implicit;Ce("aria-label","Cancel upload for "+e.filename)}}function r9e(n,o){if(n&1){let e=R();r(0,"article",70),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.selectImage(i))}),r(1,"div",71)(2,"div",72)(3,"mat-icon"),c(4),l()(),T(5,t9e,1,2,"mat-checkbox",73),l(),r(6,"div",74)(7,"h3",75),c(8),l(),r(9,"span",54),L(10,"span",76),c(11),Et(12,"titlecase"),l(),r(13,"dl",77)(14,"div")(15,"dt"),c(16,"Type"),l(),r(17,"dd"),c(18),l()(),r(19,"div")(20,"dt"),c(21,"Size"),l(),r(22,"dd"),c(23),l()()(),T(24,i9e,5,5,"div",78),l(),r(25,"div",79)(26,"button",59),_("click",function(i){let a=y(e).$implicit,s=h(2);return i.stopPropagation(),w(s.selectImage(a))}),r(27,"mat-icon"),c(28,"info"),l()(),T(29,o9e,3,1,"button",60)(30,a9e,3,1,"button",61),l()()}if(n&2){let e,t=o.$implicit,i=h(2);ne("image-manager__card--selected",(((e=i.selectedImage())==null?null:e.tempId)||((e=i.selectedImage())==null?null:e.path))===(t.tempId||t.path))("image-manager__row-highlight",i.isHighlighted(t)),m(4),N(i.imageTypeIcon(t)),m(),E(i.isPersistedRow(t)?5:-1),m(2),v("matTooltip",t.filename),m(),N(t.filename),m(),ne("image-manager__status-badge--uploading",i.hasUploadState(t))("image-manager__status-badge--error",i.imageStatusIsError(t)),m(2),X(" ",gn(12,18,i.imageStatusLabel(t))," "),m(7),N(t.image_type||"Unknown"),m(5),N(i.formatImageSize(t)),m(),E(i.hasUploadState(t)?24:-1),m(2),Ce("aria-label","View details for "+t.filename),m(3),E(i.isPersistedRow(t)?29:t.uploadStatus==="uploading"||t.uploadStatus==="queued"?30:-1)}}function s9e(n,o){n&1&&(r(0,"div",45)(1,"mat-icon",66),c(2,"image_not_supported"),l(),r(3,"p"),c(4,"No images match the current search and filter."),l()())}function l9e(n,o){if(n&1){let e=R();r(0,"mat-paginator",81),_("page",function(i){y(e);let a=h(2);return w(a.onPageEvent(i))}),l()}if(n&2){let e=h(2);v("length",e.filteredRows().length)("pageIndex",e.pageIndex())("pageSize",e.pageSize())("pageSizeOptions",e.pageSizeOptions)}}function c9e(n,o){if(n&1&&(r(0,"div",67),Q(1,r9e,31,20,"article",68,mA().trackByRow,!0,s9e,5,0,"div",45),T(4,l9e,1,4,"mat-paginator",69),l()),n&2){let e=h();ne("image-manager__grid--with-details",e.selectedImage()),m(),K(e.paginatedRows()),m(3),E(e.filteredRows().length>0?4:-1)}}function d9e(n,o){if(n&1&&c(0),n&2){let e=h(2);X(" \xB7 ",e.errorMessage," ")}}function m9e(n,o){if(n&1&&(r(0,"div",90),L(1,"mat-progress-bar",52),r(2,"span"),c(3),T(4,d9e,1,1),l()()),n&2){let e=h();m(),v("value",e.uploadProgress||0),m(),ne("image-manager__upload-error",e.uploadStatus==="error"),m(),X(" ",e.uploadProgress||0,"% "),m(),E(e.errorMessage?4:-1)}}function p9e(n,o){if(n&1&&(r(0,"p",91),c(1),l()),n&2){let e=h();m(),N(e.last_error)}}function u9e(n,o){if(n&1&&(r(0,"div",86)(1,"span",87)(2,"mat-icon"),c(3,"verified"),l()(),r(4,"span",88),c(5,"Last verified"),l(),r(6,"span",89),c(7),Et(8,"date"),l()()),n&2){let e=h();m(7),N(Io(8,1,e.last_verified_at,"medium"))}}function g9e(n,o){if(n&1){let e=R();r(0,"button",98),_("click",function(){y(e);let i=h(),a=h();return w(a.deleteFile(i.path))}),r(1,"mat-icon"),c(2,"delete"),l(),c(3," Delete Image "),l()}}function h9e(n,o){if(n&1){let e=R();r(0,"button",99),_("click",function(){y(e);let i=h(),a=h();return w(a.cancelUpload(i))}),r(1,"mat-icon"),c(2,"cancel"),l(),c(3," Cancel Upload "),l()}}function _9e(n,o){if(n&1){let e=R();r(0,"aside",30)(1,"div",82)(2,"h2",83),c(3),l(),r(4,"button",84),_("click",function(){y(e);let i=h();return w(i.closeDetails())}),r(5,"mat-icon"),c(6,"close"),l()()(),r(7,"div",85)(8,"div",86)(9,"span",87)(10,"mat-icon"),c(11),l()(),r(12,"span",88),c(13,"Type"),l(),r(14,"span",89),c(15),l()(),r(16,"div",86)(17,"span",87)(18,"mat-icon"),c(19,"data_usage"),l()(),r(20,"span",88),c(21,"Size"),l(),r(22,"span",89),c(23),l()(),r(24,"div",86)(25,"span",87)(26,"mat-icon"),c(27,"check_circle"),l()(),r(28,"span",88),c(29,"Status"),l(),r(30,"span",89)(31,"span",54),c(32),Et(33,"titlecase"),l()()(),T(34,m9e,5,5,"div",90),T(35,p9e,2,1,"p",91),T(36,u9e,9,4,"div",86),r(37,"div",86)(38,"span",87)(39,"mat-icon"),c(40,"event"),l()(),r(41,"span",88),c(42,"Created"),l(),r(43,"span",89),c(44),Et(45,"date"),l()(),r(46,"div",86)(47,"span",87)(48,"mat-icon"),c(49,"update"),l()(),r(50,"span",88),c(51,"Updated"),l(),r(52,"span",89),c(53),Et(54,"date"),l()(),r(55,"div",86)(56,"span",87)(57,"mat-icon"),c(58,"fingerprint"),l()(),r(59,"span",88),c(60,"Algorithm"),l(),r(61,"span",89),c(62),l()(),r(63,"div",92)(64,"span",87)(65,"mat-icon"),c(66,"tag"),l()(),r(67,"span",88),c(68,"Checksum"),l(),r(69,"span",93),c(70),l()(),r(71,"div",92)(72,"span",87)(73,"mat-icon"),c(74,"folder"),l()(),r(75,"span",88),c(76,"Path"),l(),r(77,"span",94),c(78),l()()(),r(79,"div",95),T(80,g9e,4,0,"button",96)(81,h9e,4,0,"button",97),l()()}if(n&2){let e=o,t=h();m(2),v("matTooltip",e.filename),m(),N(e.filename),m(8),N(t.imageTypeIcon(e)),m(4),N(e.image_type||"Unknown"),m(8),N(t.formatImageSize(e)),m(8),ne("image-manager__status-badge--uploading",t.hasUploadState(e))("image-manager__status-badge--error",t.imageStatusIsError(e)),m(),X(" ",gn(33,19,t.imageStatusLabel(e))," "),m(2),E(t.hasUploadState(e)?34:-1),m(),E(e.last_error&&e.availability!=="missing"?35:-1),m(),E(e.last_verified_at?36:-1),m(8),N(e.created_at?Io(45,21,e.created_at,"medium"):"\u2014"),m(9),N(e.updated_at?Io(54,24,e.updated_at,"medium"):"\u2014"),m(9),N(e.checksum_algorithm||"\u2014"),m(8),N(e.checksum||"\u2014"),m(8),N(e.path||"Not available while uploading"),m(2),E(t.isPersistedRow(e)?80:e.uploadStatus==="uploading"||e.uploadStatus==="queued"?81:-1)}}var ck=(()=>{class n{controller;controllerId;searchText=$("");viewMode=z("list");selectedImage=z(null);filterType=z("all");sortActive=z("filename");sortDirection=z("asc");pageIndex=z(0);pageSize=z(25);rows=z([]);syncing=z(!1);pageSizeOptions=[5,10,25,50,100];displayedColumns=["select","filename","status","image_type","image_size","created_at","actions"];imageTypes=Ne(()=>Array.from(new Set(this.rows().map(e=>e.image_type).filter(e=>!!e))).sort((e,t)=>e.localeCompare(t)));filteredRows=Ne(()=>{let e=this.searchText().trim().toLowerCase(),t=this.filterType(),i=this.rows();e&&(i=i.filter(d=>[d.filename,d.image_type,d.path,d.checksum,d.uploadStatus,d.availability].filter(Boolean).some(p=>String(p).toLowerCase().includes(e)))),t!=="all"&&(i=i.filter(d=>d.image_type===t));let a=this.sortActive(),s=this.sortDirection();return!a||!s?i:[...i].sort((d,p)=>{let u=this.sortValue(d,a),g=this.sortValue(p,a);return(typeof u=="number"&&typeof g=="number"?u-g:String(u).localeCompare(String(g),void 0,{numeric:!0,sensitivity:"base"}))*(s==="asc"?1:-1)})});paginatedRows=Ne(()=>{let e=this.pageIndex()*this.pageSize();return this.filteredRows().slice(e,e+this.pageSize())});selectedPaths=new Set;highlightedFilename=null;images=[];uploadRows=new Map;uploadEventsSubscription;queryParamsSubscription;refreshAfterUploadTimer;highlightTimer;lastSelectedPath=null;syncSubscription;destroyed=!1;imageService=f(Ns);route=f($t);controllerService=f(_t);dialog=f(Xe);toasterService=f(re);imageUploadSessionService=f(X_);router=f(Ft);cd=f(oe);ngOnInit(){this.controllerId=parseInt(this.route.snapshot.paramMap.get("controller_id"),10),this.uploadEventsSubscription=this.imageUploadSessionService.events$.subscribe(e=>{this.onUploadEvent(e)}),this.queryParamsSubscription=this.route.queryParams.subscribe(e=>{e.highlight&&(this.flashRow(e.highlight),this.router.navigate([],{relativeTo:this.route,queryParams:{},replaceUrl:!0}))}),this.controllerService.get(this.controllerId).then(e=>{if(!this.destroyed&&(this.controller=e,e.authToken)){this.getImages();let t=this.pendingSyncJob();t&&this.followSync(this.pollSyncJob(t))}},e=>{if(this.destroyed)return;let t=e.error?.message||e.message||"Failed to load controller";this.toasterService.error(t),this.cd.markForCheck()})}ngOnDestroy(){this.destroyed=!0,this.syncSubscription?.unsubscribe(),this.uploadEventsSubscription?.unsubscribe(),this.queryParamsSubscription?.unsubscribe(),this.refreshAfterUploadTimer&&clearTimeout(this.refreshAfterUploadTimer),this.highlightTimer&&clearTimeout(this.highlightTimer)}getImages(){this.imageService.getImages(this.controller).subscribe({next:e=>{this.images=e||[],this.syncUploadedRowsWithPersistedData(),this.refreshTableRows(),this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to get images";this.toasterService.error(t),this.cd.markForCheck()}})}syncImages(){if(this.destroyed||!this.controller||this.syncing())return;let e=this.pendingSyncJob();if(e){this.followSync(this.pollSyncJob(e));return}this.followSync(this.imageService.syncImages(this.controller).pipe(Dn(t=>{try{sessionStorage.setItem(this.syncStorageKey(),t.job_id)}catch{}return this.pollSyncJob(t.job_id)})))}pendingSyncJob(){try{return sessionStorage.getItem(this.syncStorageKey())}catch{return null}}syncStorageKey(){return`gns3-image-sync-${this.controller.id}`}pollSyncJob(e){return La(0,1e3).pipe(aA(()=>this.imageService.getSyncJob(this.controller,e)),rA(t=>t.status==="queued"||t.status==="running",!0))}followSync(e){this.syncing.set(!0),this.syncSubscription=e.pipe(ig(()=>this.syncing.set(!1))).subscribe({next:t=>{if(t.status==="queued"||t.status==="running")return;try{sessionStorage.removeItem(this.syncStorageKey())}catch{}this.getImages();let i=this.syncResultMessage(t);t.status==="completed"?this.toasterService.success(i):t.status==="partial"?this.toasterService.warning(i):this.toasterService.error(`${i}. You can retry synchronization.`)},error:t=>{if(t.status===404)try{sessionStorage.removeItem(this.syncStorageKey())}catch{}this.toasterService.error(t.error?.message||t.error?.detail||t.message||"Failed to synchronize images")}})}syncResultMessage(e){let t=e.status.charAt(0).toUpperCase()+e.status.slice(1),i=["scanned","added","updated","missing","deferred","errors"].map(s=>`${e.counts[s]||0} ${s}`).join(" \xB7 "),a=e.errors.slice(0,5).map(s=>`${s.path}: ${s.reason}`);return e.counts.errors>a.length&&a.push(`Showing the first ${a.length} issues. Synchronize again after resolving them.`),[`Synchronization: ${t} \xB7 ${i}`,...a].join(`
|
||
`)}onPageEvent(e){this.pageIndex.set(e.pageIndex),this.pageSize.set(e.pageSize)}onSearchChange(e){this.searchText.set(e),this.unChecked(),this.resetPage()}onTypeFilterChange(e){this.filterType.set(e),this.unChecked(),this.resetPage()}onSortByChange(e){this.sortActive.set(e),this.sortDirection()||this.sortDirection.set("asc"),this.resetPage()}onSortChange(e){this.sortActive.set(e.active||"filename"),this.sortDirection.set(e.direction),this.resetPage()}toggleView(e){this.viewMode.set(e)}selectImage(e){this.selectedImage.set(e)}closeDetails(){this.selectedImage.set(null)}isHighlighted(e){return!!this.highlightedFilename&&e.filename===this.highlightedFilename}isPersistedRow(e){return e?.rowType==="image"}hasUploadState(e){return e?.rowType==="upload"}formatImageSize(e){let t=Number(e.image_size||0);return t?`${(t/1e6).toFixed(2)} MB`:"0 MB"}imageTypeIcon(e){let t=(e.image_type||"").toLowerCase();return t.includes("docker")?"deployed_code":t.includes("qemu")||t.includes("disk")?"hard_drive":t.includes("iou")||t.includes("ios")?"router":"memory"}imageStatusLabel(e){return this.hasUploadState(e)?e.uploadStatus||"queued":e.availability||"Available"}imageStatusIsError(e){return this.hasUploadState(e)?e.uploadStatus==="error":["missing","invalid","unavailable"].includes(e.availability||"")}deleteFile(e){this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-danger-panel","dialog-small-panel"],autoFocus:".cancel-button",data:{title:"Delete image?",message:"This image will be permanently deleted.",note:"This action cannot be undone.",confirmButtonText:"Delete image",tone:"danger"}}).afterClosed().subscribe(i=>{i&&this.imageService.deleteFile(this.controller,e).subscribe({next:()=>{this.selectedImage()?.path===e&&this.closeDetails(),this.getImages(),this.unChecked(),this.toasterService.success("File deleted"),this.cd.markForCheck()},error:a=>{let s=a.error?.message||a.message||"Failed to delete file";this.toasterService.error(s),this.getImages(),this.unChecked(),this.cd.markForCheck()}})})}cancelUpload(e){e?.tempId&&(this.imageUploadSessionService.requestCancel(e.tempId),this.toasterService.warning("Image file uploading canceled"))}onRowCheckboxClick(e,t){if(e.preventDefault(),e.stopPropagation(),!this.isPersistedRow(t))return;let i=!this.isRowSelected(t);e.shiftKey&&this.lastSelectedPath?this.selectRowRange(this.lastSelectedPath,t.path,i)||this.toggleRowSelection(t,i):this.toggleRowSelection(t,i),this.lastSelectedPath=t.path||null}trackByRow(e,t){return t.tempId||t.path||`${t.filename}-${e}`}isAllSelected(){let e=new Set(this.getSelectableRows().map(i=>i.path).filter(i=>!!i)),t=Array.from(this.selectedPaths).filter(i=>e.has(i)).length;return e.size>0&&t===e.size}selectAllImages(){this.isAllSelected()?this.unChecked():this.allChecked()}unChecked(){this.selectedPaths.clear(),this.lastSelectedPath=null}allChecked(){this.getSelectableRows().forEach(e=>{e.path&&this.selectedPaths.add(e.path)})}hasSelection(){return this.selectedPaths.size>0}selectedCount(){return this.selectedPaths.size}installAllImages(){this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-neutral-panel","dialog-small-panel"],autoFocus:".cancel-button",data:{title:"Install all images?",message:"GNS3 will attempt to create templates automatically from the available image checksums.",confirmButtonText:"Install images",tone:"neutral",icon:"install_desktop"}}).afterClosed().subscribe(t=>{t&&this.imageService.installImages(this.controller).subscribe({next:()=>{this.toasterService.success("Images installed"),this.cd.markForCheck()},error:i=>{let a=i.error?.message||i.message||"Failed to install images";this.toasterService.error(a),this.cd.markForCheck()}})})}pruneImages(){this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-danger-panel","dialog-small-panel"],autoFocus:".cancel-button",data:{title:"Prune unused images?",message:"All images that are not used by a template will be permanently deleted.",note:"This action cannot be undone.",confirmButtonText:"Prune images",tone:"danger"}}).afterClosed().subscribe(t=>{t&&this.imageService.pruneImages(this.controller).subscribe({next:()=>{this.getImages(),this.unChecked(),this.toasterService.success("Images pruned"),this.cd.markForCheck()},error:i=>{let a=i.error?.message||i.message||"Failed to prune images";this.toasterService.error(a),this.getImages(),this.unChecked(),this.cd.markForCheck()}})})}addImageDialog(){this.dialog.open(sk,{panelClass:["base-dialog-panel","add-image-dialog-panel","dialog-small-panel"],autoFocus:!1,data:this.controller}).afterClosed().subscribe(()=>{this.getImages(),this.unChecked()})}deleteAllFiles(){let e=this.getSelectedRows();this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-danger-panel","dialog-small-panel"],autoFocus:".cancel-button",data:{title:"Delete selected images?",message:`${e.length} selected ${e.length===1?"image":"images"} will be permanently deleted.`,details:e.map(i=>i.filename),note:"Images used by templates will be reported and kept.",confirmButtonText:e.length===1?"Delete image":"Delete images",tone:"danger"}}).afterClosed().subscribe(i=>{i&&this.openImageDeletionProgress(e)})}openImageDeletionProgress(e){this.dialog.open(lk,{panelClass:["base-confirmation-dialog-panel","confirmation-danger-panel","delete-all-images-dialog-panel","dialog-small-panel"],autoFocus:!1,disableClose:!0,data:{controller:this.controller,deleteFilesPaths:e,autoStart:!0}}).afterClosed().subscribe(i=>{this.unChecked(),this.getImages(),i&&this.toasterService.success("All files deleted")})}resetPage(){this.pageIndex.set(0)}sortValue(e,t){if(t==="image_size")return Number(e.image_size||0);if(t==="created_at"||t==="updated_at"){let i=e[t];return i?new Date(i).getTime():0}return String(e[t]||"").toLowerCase()}flashRow(e){this.highlightTimer&&clearTimeout(this.highlightTimer),this.highlightedFilename=e,this.highlightTimer=setTimeout(()=>{this.highlightedFilename=null,this.cd.markForCheck()},2e3)}onUploadEvent(e){if(!e)return;if(e.status==="canceled"){this.uploadRows.delete(e.tempId),this.selectedImage()?.tempId===e.tempId&&this.closeDetails(),this.refreshTableRows();return}let t=this.uploadRows.get(e.tempId),i={rowType:"upload",tempId:e.tempId,filename:e.filename,path:e.path,image_type:e.image_type,image_size:e.image_size,uploadProgress:e.progress,uploadStatus:e.status,errorMessage:e.errorMessage,created_at:"",updated_at:""};this.uploadRows.set(e.tempId,q(q({},t||{}),i)),this.refreshTableRows(),e.status==="uploaded"&&this.scheduleImagesRefresh()}scheduleImagesRefresh(){this.refreshAfterUploadTimer&&clearTimeout(this.refreshAfterUploadTimer),this.refreshAfterUploadTimer=setTimeout(()=>{this.getImages()},300)}refreshTableRows(){let e=this.images.map(d=>ze(q({},d),{rowType:"image"})),i=[...Array.from(this.uploadRows.values()),...e];this.removeInvalidSelections(e),this.rows.set(i);let a=this.selectedImage();if(a){let d=a.tempId||a.path,p=i.find(u=>(u.tempId||u.path)===d);this.selectedImage.set(p||null)}let s=Math.max(0,Math.ceil(this.filteredRows().length/this.pageSize())-1);this.pageIndex()>s&&this.pageIndex.set(s)}removeInvalidSelections(e){let t=new Set(e.map(i=>i.path).filter(i=>!!i));Array.from(this.selectedPaths).forEach(i=>{t.has(i)||this.selectedPaths.delete(i)}),this.lastSelectedPath&&!e.some(i=>i.path===this.lastSelectedPath)&&(this.lastSelectedPath=null)}syncUploadedRowsWithPersistedData(){let e=new Set(this.images.map(i=>i.filename)),t=new Set(this.images.map(i=>i.path));this.uploadRows.forEach((i,a)=>{i.uploadStatus==="uploaded"&&(i.path?t.has(i.path):e.has(i.filename))&&this.uploadRows.delete(a)})}getSelectableRows(){return this.filteredRows().filter(e=>this.isPersistedRow(e))}getVisibleSelectableRows(){return this.paginatedRows().filter(e=>this.isPersistedRow(e))}selectRowRange(e,t,i){let a=this.getVisibleSelectableRows(),s=a.findIndex(g=>g.path===e),d=a.findIndex(g=>g.path===t);if(s<0||d<0)return!1;let p=Math.min(s,d),u=Math.max(s,d);return a.slice(p,u+1).forEach(g=>this.toggleRowSelection(g,i)),!0}toggleRowSelection(e,t){if(t){this.selectRow(e);return}this.deselectRow(e)}isRowSelected(e){return!!e?.path&&this.selectedPaths.has(e.path)}selectRow(e){e?.path&&this.selectedPaths.add(e.path)}deselectRow(e){e?.path&&this.selectedPaths.delete(e.path)}getSelectedRows(){return this.rows().filter(e=>this.isPersistedRow(e)&&!!e.path&&this.selectedPaths.has(e.path))}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-image-manager"]],inputs:{searchText:[1,"searchText"]},outputs:{searchText:"searchTextChange"},decls:61,vars:14,consts:[[1,"image-manager"],[1,"image-manager__content"],[1,"image-manager__header"],[1,"image-manager__heading"],[1,"image-manager__title"],[1,"image-manager__buttons-bar"],["mat-raised-button","","color","primary",1,"image-manager__button",3,"click","disabled"],["mat-raised-button","","color","primary",1,"image-manager__button",3,"click"],["mat-flat-button","",1,"image-manager__button","image-manager__button--danger",3,"click"],[1,"image-manager__toolbar"],[1,"image-manager__search-form"],["appearance","fill","subscriptSizing","dynamic",1,"image-manager__search"],["matPrefix",""],["matInput","","placeholder","Search by filename, type, path, or checksum",3,"input","value"],[1,"image-manager__toolbar-actions"],["appearance","fill","subscriptSizing","dynamic",1,"image-manager__filter"],[3,"valueChange","value"],["value","all"],[3,"value"],["appearance","fill","subscriptSizing","dynamic",1,"image-manager__sort-by"],["value","filename"],["value","image_type"],["value","image_size"],["value","created_at"],["aria-label","Image view",1,"image-manager__view-toggle"],["mat-icon-button","","matTooltip","List view","aria-label","List view",1,"image-manager__view-toggle-btn",3,"click"],["mat-icon-button","","matTooltip","Grid view","aria-label","Grid view",1,"image-manager__view-toggle-btn",3,"click"],[1,"image-manager__main"],[1,"image-manager__table-container"],[1,"image-manager__grid",3,"image-manager__grid--with-details"],["aria-label","Image details",1,"image-manager__details"],["matSort","",3,"matSortChange","dataSource","trackBy","matSortActive","matSortDirection"],["matColumnDef","select"],[4,"matHeaderCellDef"],[4,"matCellDef"],["matColumnDef","filename"],["mat-sort-header","",4,"matHeaderCellDef"],["matColumnDef","status"],["matColumnDef","image_type"],["matColumnDef","image_size"],["matColumnDef","created_at"],["matColumnDef","actions"],[4,"matHeaderRowDef","matHeaderRowDefSticky"],[3,"image-manager__row--selected","image-manager__row-highlight","click",4,"matRowDef","matRowDefColumns"],[1,"image-manager__table-footer"],[1,"image-manager__empty"],["aria-label","Select all visible images",3,"change","checked","indeterminate"],[3,"click","checked","disabled"],["mat-sort-header",""],[1,"image-manager__row-content"],[1,"image-manager__filename"],[1,"image-manager__upload-status"],["mode","determinate",3,"value"],[1,"image-manager__upload-text"],[1,"image-manager__status-badge"],[1,"image-manager__type-badge"],["mat-icon-button","","matTooltip","Delete selected images","aria-label","Delete selected images",1,"image-manager__action-button","image-manager__action-button--delete"],["mat-icon-button","","matTooltip","Delete selected images","aria-label","Delete selected images",1,"image-manager__action-button","image-manager__action-button--delete",3,"click"],[1,"image-manager__actions-cell"],["mat-icon-button","","matTooltip","View image details",1,"image-manager__action-button","image-manager__action-button--details",3,"click"],["mat-icon-button","","matTooltip","Delete image",1,"image-manager__action-button","image-manager__action-button--delete"],["mat-icon-button","","matTooltip","Cancel upload",1,"image-manager__action-button","image-manager__action-button--cancel"],["mat-icon-button","","matTooltip","Delete image",1,"image-manager__action-button","image-manager__action-button--delete",3,"click"],["mat-icon-button","","matTooltip","Cancel upload",1,"image-manager__action-button","image-manager__action-button--cancel",3,"click"],[3,"click"],["showFirstLastButtons","",3,"page","length","pageIndex","pageSize","pageSizeOptions"],[1,"image-manager__empty-icon"],[1,"image-manager__grid"],[1,"image-manager__card",3,"image-manager__card--selected","image-manager__row-highlight"],["showFirstLastButtons","",1,"image-manager__grid-paginator",3,"length","pageIndex","pageSize","pageSizeOptions"],[1,"image-manager__card",3,"click"],[1,"image-manager__card-header"],[1,"image-manager__card-icon"],[3,"checked"],[1,"image-manager__card-body"],[1,"image-manager__card-name",3,"matTooltip"],[1,"image-manager__status-dot"],[1,"image-manager__card-metadata"],[1,"image-manager__card-upload"],[1,"image-manager__card-actions"],[3,"click","checked"],["showFirstLastButtons","",1,"image-manager__grid-paginator",3,"page","length","pageIndex","pageSize","pageSizeOptions"],[1,"image-manager__details-header"],[1,"image-manager__details-title",3,"matTooltip"],["mat-icon-button","","matTooltip","Close details","aria-label","Close image details",1,"image-manager__details-close",3,"click"],[1,"image-manager__details-body"],[1,"image-manager__detail-item"],[1,"image-manager__detail-icon"],[1,"image-manager__detail-label"],[1,"image-manager__detail-value"],[1,"image-manager__detail-upload"],[1,"image-manager__upload-error"],[1,"image-manager__detail-item","image-manager__detail-item--stacked"],[1,"image-manager__detail-value","image-manager__detail-value--mono"],[1,"image-manager__detail-value","image-manager__detail-value--path"],[1,"image-manager__details-actions"],["mat-stroked-button","",1,"image-manager__details-action","image-manager__details-action--delete"],["mat-stroked-button","",1,"image-manager__details-action","image-manager__details-action--cancel"],["mat-stroked-button","",1,"image-manager__details-action","image-manager__details-action--delete",3,"click"],["mat-stroked-button","",1,"image-manager__details-action","image-manager__details-action--cancel",3,"click"]],template:function(t,i){if(t&1&&(r(0,"div",0)(1,"div",1)(2,"header",2)(3,"div",3)(4,"h1",4),c(5,"Image Manager"),l()(),r(6,"div",5)(7,"button",6),_("click",function(){return i.syncImages()}),r(8,"mat-icon"),c(9,"sync"),l(),c(10),l(),r(11,"button",7),_("click",function(){return i.addImageDialog()}),r(12,"mat-icon"),c(13,"add"),l(),c(14," Add Image "),l(),r(15,"button",7),_("click",function(){return i.installAllImages()}),r(16,"mat-icon"),c(17,"done_all"),l(),c(18," Install Images "),l(),r(19,"button",8),_("click",function(){return i.pruneImages()}),r(20,"mat-icon"),c(21,"delete_sweep"),l(),c(22," Prune Images "),l()()(),r(23,"div",9)(24,"form",10)(25,"mat-form-field",11)(26,"mat-icon",12),c(27,"search"),l(),r(28,"input",13),_("input",function(s){return i.onSearchChange(s.target.value)}),l()()(),r(29,"div",14)(30,"mat-form-field",15)(31,"mat-label"),c(32,"Image type"),l(),r(33,"mat-select",16),_("valueChange",function(s){return i.onTypeFilterChange(s)}),r(34,"mat-option",17),c(35,"All types"),l(),Q(36,OVe,2,2,"mat-option",18,Oe),l()(),r(38,"mat-form-field",19)(39,"mat-label"),c(40,"Sort by"),l(),r(41,"mat-select",16),_("valueChange",function(s){return i.onSortByChange(s)}),r(42,"mat-option",20),c(43,"Filename"),l(),r(44,"mat-option",21),c(45,"Image type"),l(),r(46,"mat-option",22),c(47,"Image size"),l(),r(48,"mat-option",23),c(49,"Created"),l()()(),r(50,"div",24)(51,"button",25),_("click",function(){return i.toggleView("list")}),r(52,"mat-icon"),c(53,"view_list"),l()(),r(54,"button",26),_("click",function(){return i.toggleView("grid")}),r(55,"mat-icon"),c(56,"grid_view"),l()()()()(),r(57,"main",27),T(58,e9e,27,8,"div",28),T(59,c9e,5,4,"div",29),T(60,_9e,82,27,"aside",30),l()()()),t&2){let a;m(),ne("image-manager__content--with-details",i.selectedImage()),m(6),v("disabled",i.syncing()||!i.controller),m(3),X(" ",i.syncing()?"Synchronizing\u2026":"Sync Images"," "),m(18),v("value",i.searchText()),m(5),v("value",i.filterType()),m(3),K(i.imageTypes()),m(5),v("value",i.sortActive()),m(10),ne("image-manager__view-toggle-btn--active",i.viewMode()==="list"),m(3),ne("image-manager__view-toggle-btn--active",i.viewMode()==="grid"),m(4),E(i.viewMode()==="list"?58:-1),m(),E(i.viewMode()==="grid"?59:-1),m(),E((a=i.selectedImage())?60:-1,a)}},dependencies:[fe,St,Ct,vt,Ji,ke,_a,Ro,Aa,ot,Pe,Ve,Bi,ct,nt,As,ea,_n,bn,yn,kn,wn,xn,Pn,Mn,Sn,Tn,En,Y,he,Be,ie,ce,we,ye,Ee,Rt,Gt,Is,od,st,pt,og,dm],styles:["[_nghost-%COMP%]{display:block;width:100%;background:transparent}.image-manager__content[_ngcontent-%COMP%]{animation:none}.image-manager__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:20px;max-width:1600px;margin:0 auto;padding:24px 20px 16px}.image-manager__heading[_ngcontent-%COMP%], .image-manager__buttons-bar[_ngcontent-%COMP%]{display:flex;align-items:center}.image-manager__heading[_ngcontent-%COMP%]{min-width:0;gap:var(--gns3-density-space-3)}.image-manager__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal;white-space:nowrap}.image-manager__buttons-bar[_ngcontent-%COMP%]{gap:var(--gns3-density-space-3)}button.image-manager__button[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing)}button.image-manager__button--danger[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-error);background-color:var(--mat-sys-error);--mat-button-filled-label-text-color: var(--mat-sys-on-error);--mat-button-filled-container-color: var(--mat-sys-error);--mat-button-filled-state-layer-color: var(--mat-sys-on-error)}button.image-manager__button--danger[_ngcontent-%COMP%]:hover:not(:disabled){transform:none;box-shadow:none}.image-manager__toolbar[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--gns3-density-card-gap);container:search-toolbar/inline-size}.image-manager__toolbar[_ngcontent-%COMP%] .image-manager__search-form[_ngcontent-%COMP%]{flex:1 1 260px;min-width:0;max-width:none;margin:0}.image-manager__toolbar[_ngcontent-%COMP%] .image-manager__toolbar-actions[_ngcontent-%COMP%]{display:flex;flex:0 1 auto;flex-wrap:wrap;align-items:center;gap:var(--gns3-density-space-3);min-width:0}.image-manager__toolbar[_ngcontent-%COMP%] .image-manager__filter[_ngcontent-%COMP%], .image-manager__toolbar[_ngcontent-%COMP%] .image-manager__sort-by[_ngcontent-%COMP%]{flex:1 1 155px;width:155px;min-width:0}@container search-toolbar (max-width: 640px){.image-manager__toolbar[_ngcontent-%COMP%] .image-manager__search-form[_ngcontent-%COMP%]{flex-basis:100%;width:100%}.image-manager__toolbar[_ngcontent-%COMP%] .image-manager__toolbar-actions[_ngcontent-%COMP%]{width:100%}}@container search-toolbar (max-width: 480px){.image-manager__toolbar[_ngcontent-%COMP%] .image-manager__view-toggle[_ngcontent-%COMP%]{flex-basis:100%;justify-content:center}}.image-manager__toolbar[_ngcontent-%COMP%]{max-width:1600px;margin:0 auto;padding:0 20px 8px}.image-manager__search-form[_ngcontent-%COMP%]{margin:0}.image-manager__search[_ngcontent-%COMP%]{width:100%}.image-manager__view-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px;padding:4px 2px;border-radius:8px;background:var(--mat-sys-surface-container-high)}button.image-manager__view-toggle-btn[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);border-radius:var(--gns3-density-radius-lg);color:var(--mat-sys-on-surface-variant);--mat-icon-button-icon-size: 22px}button.image-manager__view-toggle-btn--active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.image-manager__main[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:20px;max-width:1600px;margin:0 auto;padding:0 20px 20px}.image-manager__table-container[_ngcontent-%COMP%]{flex:1;min-width:0;border-radius:16px;overflow:hidden;border-radius:var(--gns3-density-radius-lg);background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;overflow-x:auto}mat-table[_ngcontent-%COMP%]{width:100%;min-width:820px}.mat-mdc-row[_ngcontent-%COMP%], .mat-row[_ngcontent-%COMP%]{height:var(--mat-table-row-item-container-height);min-height:var(--mat-table-row-item-container-height)}.mat-header-row[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%]{position:sticky;top:0;z-index:10;background:color-mix(in srgb,var(--mat-sys-primary-container) 72%,var(--mat-sys-surface));--mat-sort-arrow-color: var(--mat-sys-on-primary-container)}.mat-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);font-size:13px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}mat-row[_ngcontent-%COMP%]{cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease}mat-row[_ngcontent-%COMP%]:nth-child(2n){background:color-mix(in srgb,var(--mat-sys-on-surface) 1%,transparent)}mat-row[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}mat-row.image-manager__row--selected[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}mat-cell[_ngcontent-%COMP%], mat-header-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:inherit;color:var(--mat-sys-on-surface)}.mat-column-select[_ngcontent-%COMP%]{flex:0 0 60px;min-width:60px;justify-content:center;padding-left:8px}.mat-column-filename[_ngcontent-%COMP%]{flex:2.5;min-width:240px;justify-content:flex-start}.mat-column-status[_ngcontent-%COMP%]{flex:0 0 120px;min-width:120px;justify-content:center}.mat-column-status[_ngcontent-%COMP%] .image-manager__status-badge[_ngcontent-%COMP%], .image-manager__detail-value[_ngcontent-%COMP%] .image-manager__status-badge[_ngcontent-%COMP%]{margin-top:0}.mat-column-image_type[_ngcontent-%COMP%]{flex:1.25;min-width:140px;justify-content:flex-start}.mat-column-image_size[_ngcontent-%COMP%]{flex:1;min-width:110px;justify-content:flex-end}.mat-column-created_at[_ngcontent-%COMP%]{flex:1.3;min-width:150px;justify-content:center}.mat-column-actions[_ngcontent-%COMP%]{flex:0 0 112px;min-width:112px;justify-content:center;gap:4px;padding-right:8px}.image-manager__row-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;justify-content:center;gap:4px;width:100%;min-width:0}.image-manager__filename[_ngcontent-%COMP%]{overflow:hidden;color:var(--mat-sys-on-surface);font-weight:550;text-overflow:ellipsis;white-space:nowrap}.image-manager__type-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:7px;min-width:0;padding:4px 9px;border-radius:16px;color:var(--mat-sys-secondary);background:color-mix(in srgb,var(--mat-sys-secondary) 10%,transparent);font-size:12px;font-weight:600}.image-manager__type-badge[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:17px;height:17px;font-size:17px}.image-manager__upload-status[_ngcontent-%COMP%], .image-manager__detail-upload[_ngcontent-%COMP%]{width:100%}.image-manager__upload-text[_ngcontent-%COMP%], .image-manager__detail-upload[_ngcontent-%COMP%] span[_ngcontent-%COMP%], .image-manager__card-upload[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{display:block;margin-top:4px;color:var(--mat-sys-on-surface-variant);font-size:12px;line-height:1.3}.image-manager__upload-error[_ngcontent-%COMP%]{color:var(--mat-sys-error)}.image-manager__table-footer[_ngcontent-%COMP%]{min-height:var(--mat-table-footer-container-height);display:flex;align-items:center;padding:0 12px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container))}.image-manager__table-footer[_ngcontent-%COMP%] mat-paginator[_ngcontent-%COMP%]{width:100%;--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.image-manager__actions-cell[_ngcontent-%COMP%], .image-manager__card-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px}button.image-manager__action-button[_ngcontent-%COMP%]{--image-action-color: var(--mat-sys-on-surface-variant);width:var(--gns3-density-control-height-sm);height:var(--gns3-density-control-height-sm);--mat-icon-button-state-layer-size: var(--gns3-density-control-height-sm);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-control-height-sm)}button.image-manager__action-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}button.image-manager__action-button[_ngcontent-%COMP%]{color:var(--image-action-color);--mat-icon-button-state-layer-color: var(--image-action-color)}button.image-manager__action-button[_ngcontent-%COMP%]:not(:disabled) mat-icon[_ngcontent-%COMP%]{color:var(--image-action-color)}button.image-manager__action-button[_ngcontent-%COMP%]:disabled mat-icon[_ngcontent-%COMP%]{color:var(--gns3-button-disabled-label-color)}button.image-manager__action-button--details[_ngcontent-%COMP%]{--image-action-color: var(--mat-sys-secondary)}button.image-manager__action-button--delete[_ngcontent-%COMP%], button.image-manager__action-button--cancel[_ngcontent-%COMP%]{--image-action-color: var(--mat-sys-error)}.image-manager__grid[_ngcontent-%COMP%]{flex:1;min-width:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-content:start;gap:var(--gns3-density-card-gap)}.image-manager__grid--with-details[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.image-manager__card[_ngcontent-%COMP%]{display:flex;flex-direction:column;min-width:0;padding:var(--gns3-density-card-padding);border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;background:var(--mat-sys-surface);cursor:pointer;transition:background-color var(--gns3-motion-duration-standard),border-color var(--gns3-motion-duration-standard)}.image-manager__card[_ngcontent-%COMP%]:hover{border-color:var(--mat-sys-outline-variant);background:var(--mat-sys-surface-container-low)}.image-manager__card--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);box-shadow:0 0 0 1px var(--mat-sys-primary),0 8px 24px color-mix(in srgb,var(--mat-sys-primary) 12%,transparent)}.image-manager__card-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;min-height:44px}.image-manager__card-icon[_ngcontent-%COMP%]{display:grid;width:44px;height:44px;place-items:center;border-radius:12px;color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.image-manager__card-icon[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:24px;height:24px;font-size:24px}.image-manager__card-body[_ngcontent-%COMP%]{flex:1;min-width:0;padding:14px 0 12px}.image-manager__card-name[_ngcontent-%COMP%]{display:-webkit-box;overflow:hidden;margin:0;color:var(--mat-sys-on-surface);font-size:16px;font-weight:650;line-height:1.35;overflow-wrap:anywhere;-webkit-box-orient:vertical;-webkit-line-clamp:2}.image-manager__status-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:var(--gns3-density-space-2);margin-top:9px;padding:4px 10px;border-radius:20px;color:var(--mat-sys-primary);background:color-mix(in srgb,var(--mat-sys-primary) 12%,transparent);font-size:12px;font-weight:600}.image-manager__status-badge--uploading[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary);background:color-mix(in srgb,var(--mat-sys-tertiary) 12%,transparent)}.image-manager__status-badge--error[_ngcontent-%COMP%]{color:var(--mat-sys-error);background:color-mix(in srgb,var(--mat-sys-error) 12%,transparent)}.image-manager__status-dot[_ngcontent-%COMP%]{width:8px;height:8px;border-radius:50%;background:currentColor;box-shadow:0 0 6px color-mix(in srgb,currentColor 50%,transparent)}.image-manager__card-metadata[_ngcontent-%COMP%]{display:grid;gap:7px;margin:14px 0 0}.image-manager__card-metadata[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.image-manager__card-metadata[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px}.image-manager__card-metadata[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{min-width:0;margin:0;overflow:hidden;color:var(--mat-sys-on-surface);font-size:13px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.image-manager__card-upload[_ngcontent-%COMP%]{margin-top:14px}.image-manager__card-actions[_ngcontent-%COMP%]{justify-content:flex-end;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.image-manager__grid-paginator[_ngcontent-%COMP%]{grid-column:1/-1;width:100%;border-radius:12px;background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container));--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.image-manager__empty[_ngcontent-%COMP%]{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:220px;padding:32px;color:var(--mat-sys-on-surface-variant);text-align:center}.image-manager__empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:10px 0 0;font-size:15px}.image-manager__empty-icon[_ngcontent-%COMP%]{width:48px;height:48px;font-size:48px;opacity:.55}.image-manager__details[_ngcontent-%COMP%]{position:sticky;top:16px;flex:0 0 clamp(380px,30vw,460px);display:flex;flex-direction:column;min-height:360px;max-height:calc(100vh - 176px);overflow:hidden;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 60%,transparent);border-radius:16px;background:var(--mat-sys-surface);box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent);animation:_ngcontent-%COMP%_slideInRight var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard)}.image-manager__details-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:var(--gns3-density-space-3);min-height:56px;box-sizing:border-box;padding:8px 12px 8px 20px;border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 72%,var(--mat-sys-surface))}.image-manager__details-title[_ngcontent-%COMP%]{display:-webkit-box;flex:1;min-width:0;overflow:hidden;margin:0;color:var(--mat-sys-on-primary-container);font-size:19px;font-weight:650;line-height:24px;overflow-wrap:anywhere;-webkit-box-orient:vertical;-webkit-line-clamp:2}.image-manager__details-close[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-primary-container)}.image-manager__details-body[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:12px 20px}.image-manager__detail-item[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:40px;box-sizing:border-box;padding:8px 0;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.image-manager__detail-item--stacked[_ngcontent-%COMP%]{align-items:flex-start}.image-manager__detail-icon[_ngcontent-%COMP%]{display:flex;flex:0 0 22px;align-items:center;justify-content:center;margin-right:12px}.image-manager__detail-icon[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:19px;height:19px;color:var(--mat-sys-primary);font-size:19px;line-height:19px}.image-manager__detail-label[_ngcontent-%COMP%]{flex:0 0 104px;white-space:nowrap;color:var(--mat-sys-on-surface-variant);font-size:12px;font-weight:650;letter-spacing:.6px;text-transform:uppercase}.image-manager__detail-value[_ngcontent-%COMP%]{flex:1;min-width:0;color:var(--mat-sys-on-surface);font-size:14px;font-weight:500;line-height:1.45;text-align:right;overflow-wrap:anywhere}.image-manager__detail-value--mono[_ngcontent-%COMP%], .image-manager__detail-value--path[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-family:var(--gns3-font-code);font-size:12px;word-break:break-all}.image-manager__detail-upload[_ngcontent-%COMP%]{box-sizing:border-box;padding:12px;border-radius:10px;background:var(--mat-sys-surface-container-low)}.image-manager__details-actions[_ngcontent-%COMP%]{display:flex;padding:14px 20px 18px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-surface-container) 72%,transparent)}button.image-manager__details-action[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing);width:100%;color:var(--mat-sys-error);border-color:color-mix(in srgb,var(--mat-sys-error) 50%,transparent);font-weight:500}.image-manager__row-highlight[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_row-flash 1.8s ease}[data-density=compact][_nghost-%COMP%] .image-manager__details-header[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .image-manager__details-header[_ngcontent-%COMP%]{min-height:48px;padding-block:4px}[data-density=compact][_nghost-%COMP%] .image-manager__details-title[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .image-manager__details-title[_ngcontent-%COMP%]{font-size:18px;line-height:22px}[data-density=compact][_nghost-%COMP%] .image-manager__details-body[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .image-manager__details-body[_ngcontent-%COMP%]{padding-block:8px}[data-density=compact][_nghost-%COMP%] .image-manager__detail-item[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .image-manager__detail-item[_ngcontent-%COMP%]{min-height:36px;padding-block:6px}[data-density=compact][_nghost-%COMP%] .image-manager__card[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .image-manager__card[_ngcontent-%COMP%]{padding:12px}@keyframes _ngcontent-%COMP%_slideInRight{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@keyframes _ngcontent-%COMP%_row-flash{20%,80%{background-color:color-mix(in srgb,var(--mat-sys-primary) 16%,transparent)}}@media(max-width:1200px){.image-manager__grid[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.image-manager__main[_ngcontent-%COMP%]{flex-direction:column}.image-manager__table-container[_ngcontent-%COMP%], .image-manager__grid[_ngcontent-%COMP%], .image-manager__details[_ngcontent-%COMP%]{width:100%}.image-manager__details[_ngcontent-%COMP%]{position:static;flex-basis:auto;max-height:none}.image-manager__button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{margin-right:0}}@media(max-width:980px){.image-manager__header[_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column}.image-manager__buttons-bar[_ngcontent-%COMP%]{width:100%;flex-wrap:wrap}}@media(max-width:640px){.image-manager__header[_ngcontent-%COMP%]{padding:20px 16px 12px}.image-manager__buttons-bar[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr}button.image-manager__button[_ngcontent-%COMP%]{width:100%}.image-manager__toolbar[_ngcontent-%COMP%], .image-manager__main[_ngcontent-%COMP%]{padding-inline:16px}.image-manager__grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.image-manager__details[_ngcontent-%COMP%]{min-width:0}}@media(prefers-reduced-motion:reduce){.image-manager__row-highlight[_ngcontent-%COMP%]{animation:none}}"],changeDetection:0})}return n})();var f9e=(n,o)=>o.route;function v9e(n,o){if(n&1&&(r(0,"a",7,1)(2,"mat-icon",9),c(3),l(),c(4),l()),n&2){let e=o.$implicit,t=Te(1);v("routerLink",ka("./",e.route))("active",t.isActive),m(3),N(e.icon),m(),X(" ",e.label," ")}}var dk=(()=>{class n{route=f($t);router=f(Ft);controllerService=f(_t);toasterService=f(re);cd=f(oe);controller;links=z([{label:"Users",icon:"people",route:"users"},{label:"Groups",icon:"group",route:"groups"},{label:"Roles",icon:"badge",route:"roles"},{label:"Pools",icon:"folder_special",route:"pools"},{label:"ACL",icon:"security",route:"ACL"}]);constructor(){}ngOnInit(){let e=this.route.snapshot.paramMap.get("controller_id");this.controllerService.get(+e).then(t=>{this.controller=t,this.cd.markForCheck()},t=>{let i=t.error?.message||t.message||"Failed to load controller";this.toasterService.error(i),this.cd.markForCheck()})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-management"]],decls:12,vars:1,consts:[["tabPanel",""],["rla","routerLinkActive"],[1,"management__header"],[1,"management__header-content"],[1,"management__title"],[1,"management__tab-nav"],["mat-tab-nav-bar","",3,"tabPanel"],["mat-tab-link","","routerLinkActive","management__tab-link--active","ariaCurrentWhenActive","page",1,"management__tab-link",3,"routerLink","active"],[1,"management__content"],[1,"management__tab-icon"]],template:function(t,i){if(t&1&&(r(0,"section",2)(1,"div",3)(2,"h1",4),c(3,"Access Management"),l()()(),r(4,"section",5),L(5,"mat-tab-nav-panel",null,0),r(7,"nav",6),Q(8,v9e,5,5,"a",7,f9e),l()(),r(10,"section",8),L(11,"router-outlet"),l()),t&2){let a=Te(6);m(7),v("tabPanel",a),m(),K(i.links())}},dependencies:[fe,vn,mg,Co,JC,bo,S5,P5,k5,ie,ce],styles:["[_nghost-%COMP%]{display:block;width:100%;background:transparent}.management__header[_ngcontent-%COMP%]{max-width:1600px;margin:0 auto;padding:32px 20px 16px;animation:none}.management__header-content[_ngcontent-%COMP%]{display:flex;align-items:flex-end;justify-content:flex-start;gap:16px;animation:none}.management__title[_ngcontent-%COMP%]{font-size:32px;font-weight:500;color:var(--mat-sys-on-surface);margin:0;padding-bottom:8px}.management__tab-nav[_ngcontent-%COMP%]{max-width:1600px;margin:0 auto;padding:0 20px;animation:none}.management__tab-link[_ngcontent-%COMP%]{font-weight:500;letter-spacing:.3px;transition:color var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1),background-color var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1),box-shadow var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1)}.management__tab-link--active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:color-mix(in srgb,var(--mat-sys-primary-container) 72%,transparent);box-shadow:inset 0 -3px var(--mat-sys-primary);font-weight:650}.management__tab-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px;margin-right:4px;vertical-align:middle}.management__content[_ngcontent-%COMP%]{max-width:1600px;margin:0 auto;padding:0 20px 20px;animation:none}@media(max-width:768px){.management__header[_ngcontent-%COMP%]{padding:24px 16px 12px}.management__title[_ngcontent-%COMP%]{font-size:24px}.management__tab-nav[_ngcontent-%COMP%]{padding:0 16px}.management__content[_ngcontent-%COMP%]{padding:0 16px 16px}}"],changeDetection:0})}return n})();var mH=(n,o)=>e=>La(500).pipe(Dn(()=>o.getGroups(n)),Pt(t=>t.find(i=>i.name===e.value)?{projectExist:!0}:null));var mk=(()=>{class n{get(e){return new RegExp(/[~`!#$%\^&*+=\[\]\\';,/{}|\\":<>\?]/).test(e.value)?{invalidName:!0}:null}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var b9e=(n,o)=>o.username;function x9e(n,o){n&1&&(r(0,"mat-error"),c(1,"Group name is required"),l())}function y9e(n,o){n&1&&(r(0,"mat-error"),c(1,"Group name is incorrect"),l())}function w9e(n,o){n&1&&(r(0,"mat-error"),c(1,"Group with this name exists"),l())}function M9e(n,o){if(n&1&&(r(0,"mat-option",8),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),Un(" ",e.username," - ",e.email," ")}}function S9e(n,o){if(n&1){let e=R();r(0,"div")(1,"div",13)(2,"div"),c(3),l(),r(4,"div"),c(5),l(),r(6,"button",14),_("click",function(){let i=y(e).$implicit,a=h();return w(a.delUser(i))}),r(7,"mat-icon"),c(8,"delete"),l()()()()}if(n&2){let e=o.$implicit;m(3),N(e.username),m(2),N(e.email)}}var pk=(()=>{class n{data;groupNameValidator;dialogRef=f(We);formBuilder=f(Ai);groupService=f(Xl);userService=f(ba);toasterService=f(re);cd=f(oe);groupNameForm;controller;users=[];usersToAdd=new Set([]);filteredUsers;loading=!1;autocompleteControl=new Ge;constructor(e,t){this.data=e,this.groupNameValidator=t}ngOnInit(){this.controller=this.data.controller,this.groupNameForm=this.formBuilder.group({groupName:new Ge(null,[Ue.required,this.groupNameValidator.get],[mH(this.data.controller,this.groupService)])}),this.userService.list(this.controller).subscribe({next:e=>{this.users=e,this.filteredUsers=this.autocompleteControl.valueChanges.pipe(Di(""),Pt(t=>this._filter(t))),this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load users";this.toasterService.error(t),this.cd.markForCheck()}})}onKeyDown(e){e.key==="Enter"&&this.onAddClick()}get form(){return this.groupNameForm.controls}onAddClick(){if(this.groupNameForm.invalid)return;let e=this.groupNameForm.controls.groupName.value,t=Array.from(this.usersToAdd.values());this.groupService.addGroup(this.controller,e).subscribe({next:i=>{t.forEach(a=>{this.groupService.addMemberToGroup(this.controller,i,a).subscribe({next:()=>{this.toasterService.success(`user ${a.username} was added`)},error:s=>{let d=s.error?.message||s.message||"Failed to add user to group";this.toasterService.error(d),this.cd.markForCheck()}})}),this.dialogRef.close(!0)},error:i=>{let a=i.error?.message||i.message||"Failed to create group";this.toasterService.error(a),this.dialogRef.close(!1)}})}onNoClick(){this.dialogRef.close()}selectedUser(e){this.usersToAdd.add(e)}delUser(e){this.usersToAdd.delete(e)}_filter(e){if(typeof e=="string"){let t=e.toLowerCase();return this.users.filter(i=>i.username.toLowerCase().includes(t)||i.email?.toLowerCase().includes(t))}}displayFn(e){return e&&e.username?e.username:""}static \u0275fac=function(t){return new(t||n)(Mt(Wt),Mt(mk))};static \u0275cmp=V({type:n,selectors:[["app-add-group-dialog"]],features:[un([mk])],decls:30,vars:9,consts:[["auto","matAutocomplete"],["mat-dialog-title",""],[3,"formGroup"],["mat-dialog-content","",1,"gns3-form-stack"],["appearance","outline","subscriptSizing","dynamic",1,"full-width-field"],["matInput","","type","text","formControlName","groupName","placeholder","Please enter group name",3,"keydown"],["type","text","matInput","",3,"matAutocomplete","formControl"],[3,"optionSelected","displayWith"],[3,"value"],[1,"users"],["mat-dialog-actions","","align","end"],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click"],[1,"userList"],["mat-icon-button","","type","button","aria-label","Remove user",1,"destructive-icon-button",3,"click"]],template:function(t,i){if(t&1&&(r(0,"h1",1),c(1,"Create new group"),l(),r(2,"form",2)(3,"div",3)(4,"mat-form-field",4)(5,"mat-label"),c(6,"Group name"),l(),r(7,"input",5),_("keydown",function(s){return i.onKeyDown(s)}),l(),T(8,x9e,2,0,"mat-error"),T(9,y9e,2,0,"mat-error"),T(10,w9e,2,0,"mat-error"),l(),r(11,"h5"),c(12,"Add users to group:"),l(),r(13,"mat-form-field",4)(14,"mat-label"),c(15,"Users"),l(),L(16,"input",6),r(17,"mat-autocomplete",7,0),_("optionSelected",function(s){return i.selectedUser(s.option.value)}),Q(19,M9e,2,3,"mat-option",8,Oe),Et(21,"async"),l()(),r(22,"div",9),Q(23,S9e,9,2,"div",null,b9e),l()(),r(25,"div",10)(26,"button",11),_("click",function(){return i.onNoClick()}),c(27,"Cancel"),l(),r(28,"button",12),_("click",function(){return i.onAddClick()}),c(29,"Add group"),l()()()),t&2){let a=Te(18);m(2),v("formGroup",i.groupNameForm),m(6),E(i.form.groupName!=null&&i.form.groupName.touched&&(i.form.groupName!=null&&i.form.groupName.errors)&&(i.form.groupName!=null&&i.form.groupName.errors.required)?8:-1),m(),E(i.form.groupName!=null&&i.form.groupName.errors&&(i.form.groupName!=null&&i.form.groupName.errors.invalidName)?9:-1),m(),E(i.form.groupName!=null&&i.form.groupName.errors&&(i.form.groupName!=null&&i.form.groupName.errors.projectExist)?10:-1),m(6),v("matAutocomplete",a)("formControl",i.autocompleteControl),m(),v("displayWith",i.displayFn),m(2),K(gn(21,7,i.filteredUsers)),m(4),K(i.usersToAdd)}},dependencies:[fe,It,Ct,At,Nt,vt,Tr,Ut,Yt,ke,qe,Qe,bt,Y,he,Be,we,Pe,Ve,Wn,ye,Ee,Jo,ha,nt,ho,ie,ce,Pa],styles:[".full-width-field[_ngcontent-%COMP%]{width:100%}.userList[_ngcontent-%COMP%]{display:flex;margin:10px;justify-content:space-between;flex:1 1 auto}.users[_ngcontent-%COMP%]{display:flex;min-height:40px;overflow:auto;flex-direction:column}"],changeDetection:0})}return n})();var pH=(()=>{class n{transform(e,t){return t&&(t=t.trim().toLowerCase(),e.filter=t),e}static \u0275fac=function(t){return new(t||n)};static \u0275pipe=qr({name:"groupFilter",type:n,pure:!0})}return n})();var k9e=(n,o)=>o.username;function P9e(n,o){if(n&1){let e=R();r(0,"div",8)(1,"mat-checkbox",15),_("change",function(){let i=y(e).$implicit,a=h();return w(a.toggleUserSelection(i.user_id))}),l(),r(2,"div",16)(3,"div",17),c(4),l(),r(5,"div",18),c(6),l()()()}if(n&2){let e=o.$implicit,t=h();m(),v("checked",t.isUserSelected(e.user_id)),m(3),N(e.username),m(2),N(e.email)}}function T9e(n,o){n&1&&(r(0,"div",19)(1,"mat-icon"),c(2,"person_off"),l(),r(3,"p"),c(4,"No users found"),l()())}function E9e(n,o){n&1&&T(0,T9e,5,0,"div",19),n&2&&E(o.length===0?0:-1)}var uk=(()=>{class n{data;dialogRef=f(We);userService=f(ba);groupService=f(Xl);toastService=f(re);cd=f(oe);users=new cn([]);displayedUsers=new cn([]);searchText=$("");loading=!1;selectedUserIds=z(new Set);selectedCount=Ne(()=>this.selectedUserIds().size);allSelected=Ne(()=>{let e=this.displayedUsers.value;return e.length>0&&e.every(t=>this.selectedUserIds().has(t.user_id))});constructor(e){this.data=e}ngOnInit(){this.getUsers()}onSearch(){La(500).subscribe(()=>{let e=this.users.value.filter(t=>t.username.includes(this.searchText())||t.email?.includes(this.searchText()));this.displayedUsers.next(e),this.cd.markForCheck()})}getUsers(){Ci([this.userService.list(this.data.controller),this.groupService.getGroupMember(this.data.controller,this.data.group.user_group_id)]).subscribe({next:e=>{let[t,i]=e,a=t.filter(s=>!i.find(d=>d.user_id===s.user_id));this.users.next(a),this.displayedUsers.next(a),this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load users";this.toastService.error(t),this.cd.markForCheck()}})}addUser(e){this.loading=!0,this.groupService.addMemberToGroup(this.data.controller,this.data.group,e).subscribe({next:()=>{this.toastService.success(`user ${e.username} was added`),this.removeUserFromList(e),this.selectedUserIds.update(t=>{let i=new Set(t);return i.delete(e.user_id),i}),this.loading=!1,this.cd.markForCheck()},error:t=>{let i=t.error?.message||t.message||"Failed to add user to group";this.toastService.error(i),this.loading=!1,this.cd.markForCheck()}})}toggleUserSelection(e){this.selectedUserIds.update(t=>{let i=new Set(t);return i.has(e)?i.delete(e):i.add(e),i})}isUserSelected(e){return this.selectedUserIds().has(e)}toggleSelectAll(){let e=this.displayedUsers.value,t=this.selectedUserIds();if(this.allSelected())this.selectedUserIds.set(new Set);else{let i=new Set(t);e.forEach(a=>i.add(a.user_id)),this.selectedUserIds.set(i)}}addSelectedUsers(){let e=this.selectedUserIds();if(e.size===0){this.toastService.warning("Please select at least one user");return}let t=this.displayedUsers.value.filter(i=>e.has(i.user_id));this.loading=!0,Ci(t.map(i=>this.groupService.addMemberToGroup(this.data.controller,this.data.group,i))).subscribe({next:()=>{this.toastService.success(`${t.length} user(s) added to group`),this.dialogRef.close(!0)},error:i=>{let a=i.error?.message||i.message||"Failed to add users to group";this.toastService.error(a),this.loading=!1,this.cd.markForCheck()}})}onClose(){this.dialogRef.close()}removeUserFromList(e){let t=this.users.value,i=this.displayedUsers.value;this.users.next(t.filter(a=>a.user_id!==e.user_id)),this.displayedUsers.next(i.filter(a=>a.user_id!==e.user_id))}static \u0275fac=function(t){return new(t||n)(Mt(Wt))};static \u0275cmp=V({type:n,selectors:[["app-add-user-to-group-dialog"]],inputs:{searchText:[1,"searchText"]},outputs:{searchText:"searchTextChange"},decls:26,vars:12,consts:[[1,"dialog-header"],[1,"dialog-title"],[1,"dialog-content"],[1,"search-section"],["appearance","outline",1,"search-field"],["matInput","","type","text","placeholder","Type to filter users...",3,"input","keydown","value"],["matPrefix",""],[1,"users-list"],[1,"user-item"],[1,"dialog-actions"],[1,"selection-info"],[3,"change","checked","indeterminate"],[1,"action-buttons"],["mat-button","",3,"click"],["mat-raised-button","","color","primary",3,"click","disabled"],[1,"user-checkbox",3,"change","checked"],[1,"user-info"],[1,"user-name"],[1,"user-email"],[1,"empty-state"]],template:function(t,i){if(t&1&&(r(0,"div",0)(1,"h2",1),c(2),l()(),r(3,"div",2)(4,"div",3)(5,"mat-form-field",4)(6,"mat-label"),c(7,"Search users"),l(),r(8,"input",5),_("input",function(s){return i.searchText.set(s.target.value)})("keydown",function(){return i.onSearch()}),l(),r(9,"mat-icon",6),c(10,"search"),l()()(),r(11,"div",7),Q(12,P9e,7,3,"div",8,k9e),Et(14,"async"),T(15,E9e,1,1),Et(16,"async"),l()(),r(17,"div",9)(18,"div",10)(19,"mat-checkbox",11),_("change",function(){return i.toggleSelectAll()}),c(20),l()(),r(21,"div",12)(22,"button",13),_("click",function(){return i.onClose()}),c(23,"Cancel"),l(),r(24,"button",14),_("click",function(){return i.addSelectedUsers()}),c(25),l()()()),t&2){let a;m(2),X("Add User To Group: ",i.data.group.name),m(6),v("value",i.searchText()),m(4),K(gn(14,8,i.displayedUsers)),m(3),E((a=gn(16,10,i.displayedUsers))?15:-1,a),m(4),v("checked",i.allSelected())("indeterminate",i.selectedCount()>0&&!i.allSelected()),m(),X(" Select All (",i.selectedCount(),") "),m(4),v("disabled",i.selectedCount()===0||i.loading),m(),X(" Add Selected (",i.selectedCount(),") ")}},dependencies:[fe,St,ke,we,Pe,Ve,Bi,ye,Ee,ie,ce,rt,Y,he,Rt,Gt,Pa],styles:["[_nghost-%COMP%]{display:flex;flex-direction:column;width:100%;height:100%}.dialog-header[_ngcontent-%COMP%]{display:flex;min-height:var(--gns3-density-section-header-height);box-sizing:border-box;align-items:center;padding:var(--gns3-density-section-header-padding);border-bottom:1px solid var(--mat-sys-outline-variant);color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.dialog-title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-primary-container);font-family:var(--gns3-density-section-header-font);font-size:var(--gns3-density-section-header-title-size);font-weight:650;line-height:1.2;letter-spacing:-.01em}.dialog-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;flex:1;overflow:hidden}.search-section[_ngcontent-%COMP%]{padding:16px 24px;border-bottom:1px solid var(--mat-sys-outline-variant)}.search-field[_ngcontent-%COMP%]{width:100%}.users-list[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:8px}.user-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;padding:12px 16px;margin-bottom:4px;border-radius:12px;background:var(--mat-sys-surface-container-low);transition:all var(--gns3-motion-duration-standard) ease}.user-item[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container)}.user-item[_ngcontent-%COMP%]:last-child{margin-bottom:0}.user-checkbox[_ngcontent-%COMP%]{flex-shrink:0}.user-info[_ngcontent-%COMP%]{flex:1;min-width:0}.user-name[_ngcontent-%COMP%]{font-size:15px;font-weight:500;color:var(--mat-sys-on-surface);margin-bottom:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-email[_ngcontent-%COMP%]{font-size:13px;color:var(--mat-sys-on-surface-variant);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.empty-state[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;color:var(--mat-sys-on-surface-variant)}.empty-state[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:48px;width:48px;height:48px;margin-bottom:12px;opacity:.5}.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:14px}.dialog-actions[_ngcontent-%COMP%]{display:flex;min-height:64px;box-sizing:border-box;align-items:center;justify-content:space-between;gap:var(--gns3-density-space-2);padding:10px 18px;border-top:1px solid var(--mat-sys-outline-variant);background:var(--mat-sys-surface-container)}.selection-info[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%]{margin:0}.action-buttons[_ngcontent-%COMP%]{display:flex;gap:var(--gns3-density-space-2)}.action-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{min-width:92px;border-radius:var(--gns3-density-radius-sm);font-weight:600}.action-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:first-child{border:1px solid var(--mat-sys-outline);color:var(--mat-sys-on-surface);background:transparent}.action-buttons[_ngcontent-%COMP%] button[color=primary][_ngcontent-%COMP%]{color:var(--mat-sys-on-primary);background:var(--mat-sys-primary);box-shadow:0 2px 8px color-mix(in srgb,var(--mat-sys-primary) 24%,transparent)}html[data-density=compact][_nghost-%COMP%] .dialog-actions[_ngcontent-%COMP%], html[data-density=compact] [_nghost-%COMP%] .dialog-actions[_ngcontent-%COMP%]{min-height:52px;padding:8px var(--gns3-density-space-4)}html[data-density=compact][_nghost-%COMP%] .action-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%], html[data-density=compact] [_nghost-%COMP%] .action-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{min-width:96px;height:var(--gns3-density-control-height-sm);min-height:var(--gns3-density-control-height-sm)}"],changeDetection:0})}return n})();var O9e=(n,o)=>o.user_id;function D9e(n,o){n&1&&(r(0,"p",24),c(1,"No members in this group"),l())}function I9e(n,o){if(n&1){let e=R();r(0,"li")(1,"span",27),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.openUserDetailDialog(i))}),c(2),l(),r(3,"button",28),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.openRemoveUserDialog(i))}),r(4,"mat-icon"),c(5,"delete"),l()()()}if(n&2){let e=o.$implicit;m(2),N(e.username)}}function A9e(n,o){if(n&1&&(r(0,"ul"),Q(1,I9e,6,1,"li",null,O9e),l()),n&2){let e=h();m(),K(e.filteredMembers())}}function N9e(n,o){n&1&&(r(0,"p",24),c(1,"No ACEs configured for this group"),l())}function F9e(n,o){n&1&&(r(0,"th",37),c(1,"Endpoint"),l())}function R9e(n,o){if(n&1&&(r(0,"td",38),c(1),l()),n&2){let e=o.$implicit;m(),N(e.endpoint_name)}}function z9e(n,o){n&1&&(r(0,"th",37),c(1,"Role"),l())}function L9e(n,o){if(n&1&&(r(0,"td",38),c(1),l()),n&2){let e=o.$implicit;m(),N(e.role_name)}}function V9e(n,o){n&1&&(r(0,"th",37),c(1,"Propagate"),l())}function B9e(n,o){if(n&1&&(r(0,"td",38),c(1),l()),n&2){let e=o.$implicit;m(),N(e.propagate)}}function j9e(n,o){n&1&&(r(0,"th",37),c(1,"Allowed"),l())}function $9e(n,o){if(n&1&&(r(0,"td",38),c(1),l()),n&2){let e=o.$implicit;m(),N(e.allowed)}}function H9e(n,o){n&1&&L(0,"tr",39)}function U9e(n,o){n&1&&L(0,"tr",40)}function W9e(n,o){if(n&1&&(r(0,"table",25),Fe(1,29),se(2,F9e,2,0,"th",30)(3,R9e,2,1,"td",31),Re(),Fe(4,32),se(5,z9e,2,0,"th",30)(6,L9e,2,1,"td",31),Re(),Fe(7,33),se(8,V9e,2,0,"th",30)(9,B9e,2,1,"td",31),Re(),Fe(10,34),se(11,j9e,2,0,"th",30)(12,$9e,2,1,"td",31),Re(),se(13,H9e,1,0,"tr",35)(14,U9e,1,0,"tr",36),l()),n&2){let e=h();v("dataSource",e.aceDatasource),m(13),v("matHeaderRowDef",e.aceDisplayedColumns),m(),v("matRowDefColumns",e.aceDisplayedColumns)}}var uH=(()=>{class n{data;dialogRef=f(We);dialog=f(Xe);groupService=f(Xl);aclService=f(Ap);roleService=f(Yl);toastService=f(re);cd=f(oe);group;controller;editGroupForm;members=z([]);aces=[];aceDatasource=new Fr;aceDisplayedColumns=["endpoint","role","propagate","allowed"];searchMembers=$("");filteredMembers=Ne(()=>{let e=this.searchMembers().toLowerCase(),t=this.members();return e?t.filter(i=>i.username.toLowerCase().includes(e)):t});constructor(e){this.data=e,this.group=e.group,this.controller=e.controller}ngOnInit(){this.editGroupForm=new Qo({groupname:new Ge(this.group.name,[Ue.required])}),this.loadMembers(),this.loadAces()}loadMembers(){this.groupService.getGroupMember(this.controller,this.group.user_group_id).subscribe({next:e=>{this.members.set(e.sort((t,i)=>t.username.toLowerCase().localeCompare(i.username.toLowerCase()))),this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load members";this.toastService.error(t),this.cd.markForCheck()}})}loadAces(){this.roleService.get(this.controller).subscribe({next:e=>{this.aclService.getEndpoints(this.controller).subscribe({next:t=>{this.aclService.list(this.controller).subscribe({next:i=>{let a=i.filter(s=>s.ace_type==="group"&&s.group_id===this.group.user_group_id);this.aces=a.map(s=>{let d=t.filter(u=>u.endpoint===s.path)[0],p=e.filter(u=>u.role_id===s.role_id)[0];return ze(q({},s),{endpoint_name:d?.name||s.path,role_name:p?.name||"Unknown"})}),this.aceDatasource.data=this.aces,this.cd.markForCheck()},error:i=>{let a=i.error?.message||i.message||"Failed to load ACEs";this.toastService.error(a),this.cd.markForCheck()}})},error:t=>{let i=t.error?.message||t.message||"Failed to load endpoints";this.toastService.error(i),this.cd.markForCheck()}})},error:e=>{let t=e.error?.message||e.message||"Failed to load roles";this.toastService.error(t),this.cd.markForCheck()}})}onUpdate(){if(!this.editGroupForm.valid)return;let e=ze(q({},this.group),{name:this.editGroupForm.get("groupname").value});this.groupService.update(this.controller,e).subscribe({next:()=>{this.group.name=e.name,this.toastService.success("Group updated successfully")},error:t=>{let i=t.error?.message||t.message||"Failed to update group";this.toastService.error(i),this.cd.markForCheck()}})}onClose(){this.dialogRef.close()}openAddUserDialog(){this.dialog.open(uk,{panelClass:["base-dialog-panel","simple-dialog-panel","add-user-to-group-dialog-panel","dialog-medium-panel"],data:{controller:this.controller,group:this.group}}).afterClosed().subscribe(e=>{e&&this.loadMembers()})}openRemoveUserDialog(e){this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-warning-panel","dialog-small-panel"],autoFocus:".cancel-button",data:{title:"Remove user from group?",message:`User "${e.username}" will lose the permissions granted through this group.`,confirmButtonText:"Remove user",tone:"warning",icon:"person_remove"}}).afterClosed().subscribe(t=>{t&&this.groupService.removeUser(this.controller,this.group,e).subscribe({next:()=>{this.toastService.success(`User ${e.username} was removed`),this.loadMembers()},error:i=>{let a=i.error?.message||i.message||"Failed to remove user";this.toastService.error(a),this.cd.markForCheck()}})})}openUserDetailDialog(e){this.dialog.open(ak,{panelClass:["base-dialog-panel","configurator-dialog-panel","dialog-large-panel"],data:{user:e,controller:this.controller}})}static \u0275fac=function(t){return new(t||n)(Mt(Wt))};static \u0275cmp=V({type:n,selectors:[["app-group-detail-dialog"]],inputs:{searchMembers:[1,"searchMembers"]},outputs:{searchMembers:"searchMembersChange"},decls:68,vars:10,consts:[["mat-dialog-title",""],[1,"group-detail-dialog__content"],[1,"group-detail-dialog__section"],[1,"group-detail-dialog__section-title"],[1,"group-detail-dialog__card"],[1,"group-detail-dialog__form",3,"formGroup"],["appearance","outline",1,"group-detail-dialog__field"],["matInput","","type","text","formControlName","groupname"],[1,"group-detail-dialog__checkbox"],["disabled","",3,"checked"],["mat-raised-button","","color","primary",3,"click","disabled"],[1,"group-detail-dialog__card","group-detail-dialog__card--muted"],[1,"group-detail-dialog__info-grid"],[1,"group-detail-dialog__info-item"],[1,"group-detail-dialog__info-label"],[1,"group-detail-dialog__info-value"],[1,"group-detail-dialog__info-item","group-detail-dialog__info-item--full"],[1,"group-detail-dialog__info-value","group-detail-dialog__info-value--mono"],[1,"group-detail-dialog__section-header"],["mat-icon-button","","matTooltip","Add user",3,"click"],[1,"group-detail-dialog__search"],["appearance","fill",1,"group-detail-dialog__search-field"],["matInput","",3,"input","value"],[1,"group-detail-dialog__members-list"],[1,"group-detail-dialog__empty-message"],["mat-table","",1,"group-detail-dialog__ace-table",3,"dataSource"],["mat-button","",3,"click"],[1,"group-detail-dialog__member-name",3,"click"],["mat-icon-button","","matTooltip","Remove user",1,"destructive-icon-button",3,"click"],["matColumnDef","endpoint"],["mat-header-cell","",4,"matHeaderCellDef"],["mat-cell","",4,"matCellDef"],["matColumnDef","role"],["matColumnDef","propagate"],["matColumnDef","allowed"],["mat-header-row","",4,"matHeaderRowDef"],["mat-row","",4,"matRowDef","matRowDefColumns"],["mat-header-cell",""],["mat-cell",""],["mat-header-row",""],["mat-row",""]],template:function(t,i){t&1&&(r(0,"h2",0),c(1),l(),r(2,"mat-dialog-content")(3,"div",1)(4,"section",2)(5,"h3",3),c(6,"Details"),l(),r(7,"mat-card",4)(8,"mat-card-content")(9,"form",5)(10,"mat-form-field",6)(11,"mat-label"),c(12,"Group name"),l(),L(13,"input",7),l(),r(14,"div",8)(15,"mat-checkbox",9),c(16,"Is built-in"),l()()()(),r(17,"mat-card-actions")(18,"button",10),_("click",function(){return i.onUpdate()}),c(19," Update Group "),l()()(),r(20,"mat-card",11)(21,"mat-card-header")(22,"mat-card-title"),c(23,"Group Information"),l()(),r(24,"mat-card-content")(25,"div",12)(26,"div",13)(27,"span",14),c(28,"Creation date"),l(),r(29,"span",15),c(30),l()(),r(31,"div",13)(32,"span",14),c(33,"Last update"),l(),r(34,"span",15),c(35),l()(),r(36,"div",16)(37,"span",14),c(38,"UUID"),l(),r(39,"span",17),c(40),l()()()()()(),r(41,"section",2)(42,"div",18)(43,"h3",3),c(44,"Members"),l(),r(45,"button",19),_("click",function(){return i.openAddUserDialog()}),r(46,"mat-icon"),c(47,"person_add"),l()()(),r(48,"mat-card",4)(49,"mat-card-content")(50,"div",20)(51,"mat-form-field",21)(52,"mat-label"),c(53,"Filter members"),l(),r(54,"input",22),_("input",function(s){return i.searchMembers.set(s.target.value)}),l()()(),r(55,"div",23),T(56,D9e,2,0,"p",24)(57,A9e,3,0,"ul"),l()()()(),r(58,"section",2)(59,"h3",3),c(60,"ACEs"),l(),r(61,"mat-card",4)(62,"mat-card-content"),T(63,N9e,2,0,"p",24)(64,W9e,15,3,"table",25),l()()()()(),r(65,"mat-dialog-actions")(66,"button",26),_("click",function(){return i.onClose()}),c(67,"Close"),l()()),t&2&&(m(),X("Group ",i.group.name),m(8),v("formGroup",i.editGroupForm),m(6),v("checked",i.group.is_builtin),m(3),v("disabled",!i.editGroupForm.valid||i.group.is_builtin),m(12),N(i.group.created_at),m(5),N(i.group.updated_at),m(5),N(i.group.user_group_id),m(14),v("value",i.searchMembers()),m(2),E(i.members().length===0?56:57),m(7),E(i.aces.length===0?63:64))},dependencies:[fe,St,Ct,At,Nt,vt,It,Ut,Yt,ke,qe,Qe,bt,_n,bn,yn,kn,wn,xn,Pn,Mn,Sn,Tn,En,Y,he,Be,ie,ce,we,Pe,Ve,ye,Ee,Rt,Gt,hn,Zn,k1,Tl,Jc,Zc,ot,st,pt],styles:[".group-detail-dialog__content[_ngcontent-%COMP%]{padding:0}.group-detail-dialog__section[_ngcontent-%COMP%]{margin-bottom:var(--gns3-density-card-gap)}.group-detail-dialog__section[_ngcontent-%COMP%]:last-child{margin-bottom:0}.group-detail-dialog__section-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.group-detail-dialog__section-title[_ngcontent-%COMP%]{font-size:16px;font-weight:600;color:var(--mat-sys-on-surface);margin:0 0 12px;padding-bottom:8px;border-bottom:2px solid var(--mat-sys-primary);display:inline-block}.group-detail-dialog__section-header[_ngcontent-%COMP%] .group-detail-dialog__section-title[_ngcontent-%COMP%]{margin-bottom:0;padding-bottom:0;border-bottom:none}.group-detail-dialog__card[_ngcontent-%COMP%]{margin-bottom:var(--gns3-density-card-gap);border-radius:12px}.group-detail-dialog__card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%]{padding-top:16px}.group-detail-dialog__card[_ngcontent-%COMP%] mat-card-actions[_ngcontent-%COMP%]{padding:16px;border-top:1px solid var(--mat-sys-outline-variant)}.group-detail-dialog__card--muted[_ngcontent-%COMP%]{background:var(--mat-sys-surface-container-low)}.group-detail-dialog__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-card-gap)}.group-detail-dialog__field[_ngcontent-%COMP%]{width:100%;max-width:400px}.group-detail-dialog__checkbox[_ngcontent-%COMP%]{display:flex;align-items:center}.group-detail-dialog__info-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--gns3-density-card-gap)}@media(max-width:600px){.group-detail-dialog__info-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}}.group-detail-dialog__info-item[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px}.group-detail-dialog__info-item--full[_ngcontent-%COMP%]{grid-column:1/-1}.group-detail-dialog__info-label[_ngcontent-%COMP%]{font-size:12px;font-weight:500;color:var(--mat-sys-on-surface-variant);text-transform:uppercase;letter-spacing:.5px}.group-detail-dialog__info-value[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface)}.group-detail-dialog__info-value--mono[_ngcontent-%COMP%]{font-family:var(--gns3-font-code);font-size:12px}.group-detail-dialog__search[_ngcontent-%COMP%]{margin-bottom:var(--gns3-density-card-gap)}.group-detail-dialog__search-field[_ngcontent-%COMP%]{width:100%}.group-detail-dialog__members-list[_ngcontent-%COMP%]{background:var(--mat-sys-surface-container-low);border-radius:8px;padding:8px 0}.group-detail-dialog__members-list[_ngcontent-%COMP%] ul[_ngcontent-%COMP%]{list-style:none;padding:0;margin:0}.group-detail-dialog__members-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:8px 16px;border-bottom:1px solid var(--mat-sys-outline-variant)}.group-detail-dialog__members-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:last-child{border-bottom:none}.group-detail-dialog__member-name[_ngcontent-%COMP%]{font-weight:500;color:var(--mat-sys-primary);cursor:pointer}.group-detail-dialog__member-name[_ngcontent-%COMP%]:hover{text-decoration:underline}.group-detail-dialog__empty-message[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-style:italic;text-align:center;padding:var(--gns3-density-card-padding)}.group-detail-dialog__ace-table[_ngcontent-%COMP%]{width:100%;background:var(--mat-sys-surface-container-low);border-radius:8px;overflow:hidden}.group-detail-dialog__ace-table[_ngcontent-%COMP%] .mat-header-row[_ngcontent-%COMP%]{background:var(--mat-sys-surface-container)}.group-detail-dialog__ace-table[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%]{font-size:13px;font-weight:600;color:var(--mat-sys-on-surface-variant);text-transform:uppercase}.group-detail-dialog__ace-table[_ngcontent-%COMP%] mat-cell[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface)}.group-detail-dialog__ace-table[_ngcontent-%COMP%] mat-row[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 3%,transparent)}"],changeDetection:0})}return n})();function G9e(n,o){n&1&&(r(0,"div",8),L(1,"mat-spinner",10),r(2,"p"),c(3,"Loading..."),l()())}function q9e(n,o){n&1&&(r(0,"th",24),c(1,"Name"),l())}function Q9e(n,o){if(n&1&&(r(0,"td",25)(1,"span",26),c(2),l()()),n&2){let e=o.$implicit;m(2),N(e.name)}}function K9e(n,o){n&1&&(r(0,"th",24),c(1,"API Domain"),l())}function X9e(n,o){if(n&1&&(r(0,"td",25)(1,"span",27),c(2),l()()),n&2){let e=o.$implicit,t=h(3);m(2),N(t.getProviderDisplay(e))}}function Y9e(n,o){n&1&&(r(0,"th",24),c(1,"Model"),l())}function Z9e(n,o){if(n&1&&(r(0,"td",25)(1,"span",28),c(2),l()()),n&2){let e=o.$implicit;m(2),N(e.config.model)}}function J9e(n,o){n&1&&(r(0,"th",24),c(1,"Context Limit"),l())}function eBe(n,o){if(n&1&&(r(0,"span",30),c(1),l()),n&2){let e=h().$implicit;m(),X(" ",e.config.context_strategy," ")}}function tBe(n,o){if(n&1&&(r(0,"td",25)(1,"span",29),c(2),l(),T(3,eBe,2,1,"span",30),l()),n&2){let e=o.$implicit;m(2),X("",e.config.context_limit,"K"),m(),E(e.config.context_strategy?3:-1)}}function nBe(n,o){n&1&&(r(0,"th",24),c(1,"Actions"),l())}function iBe(n,o){if(n&1){let e=R();r(0,"td",25)(1,"div",31)(2,"button",32),Et(3,"async"),_("click",function(){let i=y(e).$implicit,a=h(3);return w(a.toggleDefaultConfig(i))}),r(4,"mat-icon"),c(5,"check_circle"),l()(),r(6,"button",33),_("click",function(){let i=y(e).$implicit,a=h(3);return w(a.openEditDialog(i))}),r(7,"mat-icon"),c(8,"edit"),l()(),r(9,"button",34),_("click",function(){let i=y(e).$implicit,a=h(3);return w(a.deleteConfig(i))}),r(10,"mat-icon"),c(11,"delete"),l()()()()}if(n&2){let e,t=o.$implicit,i=h(3);m(2),ne("active-btn",i.isDefault(t)),v("disabled",(e=gn(3,4,i.settingDefault$))==null?null:e.has(t.config_id))("matTooltip",i.isDefault(t)?"Remove as default":"Set as default")}}function oBe(n,o){n&1&&L(0,"tr",35)}function aBe(n,o){if(n&1&&L(0,"tr",36),n&2){let e=o.$implicit,t=h(3);ne("active-row",t.isDefault(e))}}function rBe(n,o){if(n&1&&(r(0,"div",12)(1,"table",14),Fe(2,15),se(3,q9e,2,0,"th",16)(4,Q9e,3,1,"td",17),Re(),Fe(5,18),se(6,K9e,2,0,"th",16)(7,X9e,3,1,"td",17),Re(),Fe(8,19),se(9,Y9e,2,0,"th",16)(10,Z9e,3,1,"td",17),Re(),Fe(11,20),se(12,J9e,2,0,"th",16)(13,tBe,4,2,"td",17),Re(),Fe(14,21),se(15,nBe,2,0,"th",16)(16,iBe,12,6,"td",17),Re(),se(17,oBe,1,0,"tr",22)(18,aBe,1,2,"tr",23),l()()),n&2){let e=h(2);m(),v("dataSource",e.configs),m(16),v("matHeaderRowDef",e.displayedColumns()),m(),v("matRowDefColumns",e.displayedColumns())}}function sBe(n,o){n&1&&(r(0,"div",13)(1,"mat-icon",37),c(2,"folder_open"),l(),r(3,"p"),c(4,"No configurations yet"),l(),r(5,"p",38),c(6,'Click "New Configuration" above to create your first LLM model configuration'),l()())}function lBe(n,o){if(n&1&&(r(0,"div",9)(1,"mat-card",11)(2,"mat-card-header")(3,"mat-card-title"),c(4,"All Configurations"),l()(),r(5,"mat-card-content"),T(6,rBe,19,3,"div",12),T(7,sBe,7,0,"div",13),l()()()),n&2){let e=h();m(6),E(e.configs.length>0?6:-1),m(),E(e.configs.length===0?7:-1)}}var gk=(()=>{class n{destroy$=new Ye;controller=ee(void 0);group=ee(void 0);loading$=new cn(!1);settingDefault$=new cn(new Set);error$=new cn(null);configs$=new cn([]);defaultConfig$=new cn(null);configs=[];defaultConfig=null;settingDefaultConfigs=new Set;displayedColumns=z(["name","provider","model","context_limit","actions"]);aiProfilesService=f(A_);dialog=f(Xe);toasterService=f(re);constructor(){}ngOnInit(){this.loadConfigs(),mr([this.configs$,this.defaultConfig$]).pipe(He(this.destroy$)).subscribe(([e,t])=>{this.configs=e,this.defaultConfig=t}),this.error$.pipe(He(this.destroy$),Yi(e=>e!==null)).subscribe(e=>{this.showError(e)})}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}loadConfigs(){this.loading$.next(!0),this.error$.next(null),this.aiProfilesService.getGroupConfigs(this.controller(),this.group().user_group_id).pipe(He(this.destroy$)).subscribe({next:e=>{this.configs$.next(e.configs),this.defaultConfig$.next(e.default_config),this.loading$.next(!1)},error:e=>{this.handleError(e,"Failed to load configurations")}})}isDefault(e){return this.defaultConfig?.config_id===e.config_id}getProviderDisplay(e){let t=e.config.base_url;if(!t)return e.config.provider;try{return new URL(t).hostname.replace(/^api\./,"")}catch{return e.config.provider}}openCreateDialog(){this.dialog.open(Ip,{panelClass:["base-dialog-panel","ai-profile-dialog-panel","dialog-large-panel"],data:{mode:"create",config:null,existingNames:this.configs.map(t=>t.name)}}).afterClosed().pipe(He(this.destroy$)).subscribe(t=>{t&&this.createConfig(t)})}openEditDialog(e){this.dialog.open(Ip,{panelClass:["base-dialog-panel","ai-profile-dialog-panel","dialog-large-panel"],data:{mode:"edit",config:q({},e),existingNames:this.configs.filter(i=>i.config_id!==e.config_id).map(i=>i.name)}}).afterClosed().pipe(He(this.destroy$)).subscribe(i=>{i&&this.updateConfig(e.config_id,i)})}createConfig(e){this.loading$.next(!0),this.aiProfilesService.createGroupConfig(this.controller(),this.group().user_group_id,e).pipe(He(this.destroy$)).subscribe({next:()=>{this.loadConfigs(),this.showSuccess("Configuration created successfully")},error:t=>{this.handleError(t,"Failed to create configuration")}})}updateConfig(e,t){this.loading$.next(!0),this.aiProfilesService.updateGroupConfig(this.controller(),this.group().user_group_id,e,t).pipe(He(this.destroy$)).subscribe({next:()=>{this.loadConfigs(),this.showSuccess("Configuration updated successfully")},error:i=>{i.status===409?this.handleConflict(i):this.handleError(i,"Failed to update configuration")}})}deleteConfig(e){this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-danger-panel","dialog-small-panel"],autoFocus:".cancel-button",data:{title:"Delete configuration?",message:`Configuration "${e.name}" will be permanently deleted.`,note:"This action cannot be undone.",confirmButtonText:"Delete configuration",tone:"danger"}}).afterClosed().pipe(He(this.destroy$)).subscribe(i=>{i&&(this.loading$.next(!0),this.aiProfilesService.deleteGroupConfig(this.controller(),this.group().user_group_id,e.config_id).pipe(He(this.destroy$)).subscribe({next:()=>{this.loadConfigs(),this.showSuccess("Configuration deleted successfully")},error:a=>{this.handleError(a,"Failed to delete configuration")}}))})}toggleDefaultConfig(e){let t=e.config_id;if(this.settingDefaultConfigs.has(t))return;let i=e.is_default,a=this.defaultConfig,s=[...this.configs],d=s.map(p=>ze(q({},p),{is_default:i?!1:p.config_id===t}));this.configs=d,this.configs$.next(d),this.defaultConfig=i?null:e,this.defaultConfig$.next(i?null:e),this.settingDefaultConfigs.add(t),this.settingDefault$.next(new Set(this.settingDefaultConfigs)),i?this.aiProfilesService.unsetDefaultGroupConfig(this.controller(),this.group().user_group_id,t).pipe(He(this.destroy$)).subscribe({next:()=>{this.settingDefaultConfigs.delete(t),this.settingDefault$.next(new Set(this.settingDefaultConfigs)),this.showSuccess("Default configuration removed"),this.loadConfigsWithoutLoading()},error:p=>{this.configs=s,this.configs$.next(s),this.defaultConfig=a,this.defaultConfig$.next(a),this.settingDefaultConfigs.delete(t),this.settingDefault$.next(new Set(this.settingDefaultConfigs)),p.status===409?this.handleConflict(p):this.handleError(p,"Failed to remove default configuration")}}):this.aiProfilesService.setDefaultGroupConfig(this.controller(),this.group().user_group_id,t).pipe(He(this.destroy$)).subscribe({next:()=>{this.settingDefaultConfigs.delete(t),this.settingDefault$.next(new Set(this.settingDefaultConfigs)),this.showSuccess("Default configuration set successfully"),this.loadConfigsWithoutLoading()},error:p=>{this.configs=s,this.configs$.next(s),this.defaultConfig=a,this.defaultConfig$.next(a),this.settingDefaultConfigs.delete(t),this.settingDefault$.next(new Set(this.settingDefaultConfigs)),p.status===409?this.handleConflict(p):this.handleError(p,"Failed to set default configuration")}})}loadConfigsWithoutLoading(){this.error$.next(null),this.aiProfilesService.getGroupConfigs(this.controller(),this.group().user_group_id).pipe(He(this.destroy$)).subscribe({next:e=>{this.configs$.next(e.configs),this.defaultConfig$.next(e.default_config)},error:e=>{this.handleError(e,"Failed to refresh configurations")}})}handleConflict(e){this.loadConfigs(),this.showWarning("Data has been modified by another user, auto-refreshed")}handleError(e,t){console.error(`${t}:`,e);let i=e.error?.message||e.message||t;this.error$.next(i),this.loading$.next(!1),this.showError(i)}showSuccess(e){this.toasterService.success(e)}showWarning(e){this.toasterService.warning(e)}showError(e){this.toasterService.error(e)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-group-ai-profile-tab"]],inputs:{controller:[1,"controller"],group:[1,"group"]},decls:23,vars:9,consts:[[1,"ai-profile-container"],[1,"toolbar"],[1,"toolbar-info"],[1,"compatibility-badge"],[1,"subtitle"],[1,"toolbar-actions"],["mat-button","",3,"click","disabled"],["mat-raised-button","","color","primary",3,"click"],[1,"loading-container"],[1,"content-area"],["diameter","40"],[1,"list-card"],[1,"table-container"],[1,"empty-state"],["mat-table","",1,"profiles-table",3,"dataSource"],["matColumnDef","name"],["mat-header-cell","",4,"matHeaderCellDef"],["mat-cell","",4,"matCellDef"],["matColumnDef","provider"],["matColumnDef","model"],["matColumnDef","context_limit"],["matColumnDef","actions"],["mat-header-row","",4,"matHeaderRowDef"],["mat-row","",3,"active-row",4,"matRowDef","matRowDefColumns"],["mat-header-cell",""],["mat-cell",""],[1,"profile-name"],[1,"provider-badge"],[1,"model-name"],[1,"context-limit-value"],[1,"context-strategy-badge"],[1,"action-buttons"],["mat-icon-button","","matTooltipClass","custom-tooltip",3,"click","disabled","matTooltip"],["mat-icon-button","",3,"click"],["mat-icon-button","",1,"delete-btn","destructive-icon-button",3,"click"],["mat-header-row",""],["mat-row",""],[1,"empty-icon"],[1,"empty-hint"]],template:function(t,i){t&1&&(r(0,"div",0)(1,"div",1)(2,"div",2)(3,"h3"),c(4,"Group LLM Model Configurations "),r(5,"span",3),c(6,"OpenAI-Compatible"),l()(),r(7,"p",4),c(8,"Manage group OpenAI-compatible LLM model configurations. These configs will be inherited by group members."),l()(),r(9,"div",5)(10,"button",6),Et(11,"async"),_("click",function(){return i.loadConfigs()}),r(12,"mat-icon"),c(13,"refresh"),l(),c(14," Refresh "),l(),r(15,"button",7),_("click",function(){return i.openCreateDialog()}),r(16,"mat-icon"),c(17,"add"),l(),c(18," New Configuration "),l()()(),T(19,G9e,4,0,"div",8),Et(20,"async"),T(21,lBe,8,2,"div",9),Et(22,"async"),l()),t&2&&(m(10),v("disabled",gn(11,3,i.loading$)),m(9),E(gn(20,5,i.loading$)?19:-1),m(2),E(gn(22,7,i.loading$)?-1:21))},dependencies:[fe,ke,_n,bn,yn,kn,wn,xn,Pn,Mn,Sn,Tn,En,Y,he,Be,ie,ce,we,ye,ot,Rt,hn,Zn,Tl,Jc,Zc,rt,mt,Pa],styles:['.ai-profile-container[_ngcontent-%COMP%]{padding:20px}.ai-profile-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.ai-profile-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] .toolbar-info[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 4px;font-size:18px;font-weight:500;display:flex;align-items:center;gap:12px}.ai-profile-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] .toolbar-info[_ngcontent-%COMP%] .subtitle[_ngcontent-%COMP%]{margin:0;font-size:13px}.ai-profile-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] .toolbar-info[_ngcontent-%COMP%] .compatibility-badge[_ngcontent-%COMP%]{display:inline-block;padding:2px 10px;font-size:11px;font-weight:600;letter-spacing:.3px;background:var(--mat-sys-primary-container);color:var(--mat-sys-primary);border-radius:12px;line-height:20px;text-transform:uppercase}.ai-profile-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] .toolbar-actions[_ngcontent-%COMP%]{display:flex;gap:8px}.ai-profile-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] .toolbar-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px}.ai-profile-container[_ngcontent-%COMP%] .loading-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px}.ai-profile-container[_ngcontent-%COMP%] .loading-container[_ngcontent-%COMP%] mat-spinner[_ngcontent-%COMP%]{margin-bottom:16px}.ai-profile-container[_ngcontent-%COMP%] .loading-container[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-header[_ngcontent-%COMP%] mat-card-title[_ngcontent-%COMP%]{font-size:16px}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%]{padding:0}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%]{overflow-x:auto}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%]{width:100%}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] mat-header-row[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{font-weight:500}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] mat-row[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{border-bottom:1px solid var(--mat-sys-outline-variant)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] mat-row[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-primary) 8%,transparent)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] mat-row.active-row[_ngcontent-%COMP%]{background-color:var(--mat-sys-tertiary-container)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] mat-row.active-row[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{border-bottom:1px solid var(--mat-sys-tertiary)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] mat-row.active-row[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-tertiary) 12%,var(--mat-sys-tertiary-container))}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .name-cell[_ngcontent-%COMP%] .profile-name[_ngcontent-%COMP%]{font-weight:500}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .provider-badge[_ngcontent-%COMP%]{padding:4px 8px;background:var(--mat-sys-primary-container);border-radius:4px;font-size:12px;color:var(--mat-sys-on-primary-container)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .model-name[_ngcontent-%COMP%]{font-family:var(--gns3-font-code);font-size:13px}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .temperature-value[_ngcontent-%COMP%]{font-family:var(--gns3-font-code);font-size:13px}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%]{display:flex;gap:4px}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:32px;height:32px;padding:6px;transition:all var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1);border-radius:50%;display:inline-flex;align-items:center;justify-content:center;position:relative}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:before{content:"";position:absolute;width:100%;height:100%;border-radius:50%;background-color:currentColor;opacity:0;transition:opacity var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1);transform:scale(.75)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px;transition:transform var(--gns3-motion-duration-standard) cubic-bezier(.4,0,.2,1);position:relative;z-index:1}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%] button.active-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%] button.active-btn[_ngcontent-%COMP%]:hover:before{opacity:1;background-color:var(--mat-sys-tertiary-container)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%] button.active-btn[_ngcontent-%COMP%]:hover mat-icon[_ngcontent-%COMP%]{transform:scale(1.35)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:not(.active-btn):not(.delete-btn):hover:before{opacity:1;background-color:var(--mat-sys-primary-container)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:not(.active-btn):not(.delete-btn):hover mat-icon[_ngcontent-%COMP%]{color:var(--mat-sys-primary);transform:scale(1.35)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%] button.delete-btn[_ngcontent-%COMP%]:hover:before{opacity:1;background-color:var(--mat-sys-error-container)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] table.profiles-table[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%] button.delete-btn[_ngcontent-%COMP%]:hover mat-icon[_ngcontent-%COMP%]{transform:scale(1.35)}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] .empty-icon[_ngcontent-%COMP%]{font-size:64px;margin-bottom:16px;opacity:.3}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:4px 0}.ai-profile-container[_ngcontent-%COMP%] .content-area[_ngcontent-%COMP%] mat-card.list-card[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] p.empty-hint[_ngcontent-%COMP%]{font-size:13px}'],changeDetection:0})}return n})();var gH=(()=>{class n{dialogRef=f(We);data=f(Wt);close(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-group-ai-profile-dialog"]],decls:7,vars:3,consts:[["mat-dialog-title",""],[3,"controller","group"],["mat-button","",3,"click"]],template:function(t,i){t&1&&(r(0,"h2",0),c(1),l(),r(2,"mat-dialog-content"),L(3,"app-group-ai-profile-tab",1),l(),r(4,"mat-dialog-actions")(5,"button",2),_("click",function(){return i.close()}),c(6,"Close"),l()()),t&2&&(m(),X("AI Profiles - ",i.data.group.name),m(2),v("controller",i.data.controller)("group",i.data.group))},dependencies:[fe,ke,qe,Qe,bt,Y,he,ie,gk],styles:[".group-ai-profile-dialog__content[_ngcontent-%COMP%]{padding:16px 0}"],changeDetection:0})}return n})();var cBe=["groupsPaginator"],dBe=["groupsSort"],mBe=()=>[5,10,20];function pBe(n,o){if(n&1){let e=R();r(0,"th",30)(1,"mat-checkbox",31),_("change",function(i){y(e);let a=h(2);return w(i?a.masterToggle():null)}),l()()}if(n&2){let e=h(2);m(),v("checked",e.selection.hasValue()&&e.isAllSelected())("indeterminate",e.selection.hasValue()&&!e.isAllSelected())}}function uBe(n,o){if(n&1){let e=R();r(0,"td",32)(1,"mat-checkbox",33),_("click",function(i){return i.stopPropagation()})("change",function(i){let a=y(e).$implicit,s=h(2);return w(i?s.selection.toggle(a):null)}),l()()}if(n&2){let e=o.$implicit,t=h(2);m(),v("checked",t.selection.isSelected(e))}}function gBe(n,o){n&1&&(r(0,"th",34),c(1,"NAME"),l())}function hBe(n,o){if(n&1){let e=R();r(0,"td",35)(1,"span",36),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.openGroupDetailDialog(i))}),c(2),l()()}if(n&2){let e=o.$implicit;m(2),X(" ",e.name," ")}}function _Be(n,o){n&1&&(r(0,"th",34),c(1,"CREATION DATE"),l())}function fBe(n,o){if(n&1&&(r(0,"td",35),c(1),l()),n&2){let e=o.$implicit;m(),N(e.created_at)}}function vBe(n,o){n&1&&(r(0,"th",34),c(1,"LAST UPDATE"),l())}function CBe(n,o){if(n&1&&(r(0,"td",35),c(1),l()),n&2){let e=o.$implicit;m(),N(e.updated_at)}}function bBe(n,o){n&1&&(r(0,"th",34),c(1,"BUILT-IN"),l())}function xBe(n,o){if(n&1&&(r(0,"td",35),c(1),l()),n&2){let e=o.$implicit;m(),N(e.is_builtin)}}function yBe(n,o){n&1&&(r(0,"th",37),c(1,"ACTIONS"),l())}function wBe(n,o){if(n&1){let e=R();r(0,"td",38)(1,"button",39),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.openGroupDetailDialog(i))}),r(2,"mat-icon"),c(3,"edit"),l()(),r(4,"button",40),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.openGroupAiProfileDialog(i))}),r(5,"mat-icon"),c(6,"psychology"),l()()()}}function MBe(n,o){n&1&&L(0,"tr",41)}function SBe(n,o){n&1&&L(0,"tr",42)}function kBe(n,o){if(n&1){let e=R();r(0,"header",3)(1,"h1",4),c(2,"Groups"),l()(),r(3,"div",5)(4,"form",6)(5,"mat-form-field",7)(6,"mat-icon",8),c(7,"search"),l(),r(8,"input",9),_("input",function(i){y(e);let a=h();return w(a.searchText.set(i.target.value))}),l()()(),r(9,"div",10)(10,"button",11),_("click",function(){y(e);let i=h();return w(i.onDelete(i.selection.selected))}),c(11," Delete selected "),l(),r(12,"button",12),_("click",function(){y(e);let i=h();return w(i.addGroup())}),c(13,"Add group"),l()()(),r(14,"div",13)(15,"table",14,0),Et(17,"groupFilter"),Fe(18,15),se(19,pBe,2,2,"th",16)(20,uBe,2,1,"td",17),Re(),Fe(21,18),se(22,gBe,2,0,"th",19)(23,hBe,3,1,"td",20),Re(),Fe(24,21),se(25,_Be,2,0,"th",19)(26,fBe,2,1,"td",20),Re(),Fe(27,22),se(28,vBe,2,0,"th",19)(29,CBe,2,1,"td",20),Re(),Fe(30,23),se(31,bBe,2,0,"th",19)(32,xBe,2,1,"td",20),Re(),Fe(33,24),se(34,yBe,2,0,"th",25)(35,wBe,7,0,"td",26),Re(),se(36,MBe,1,0,"tr",27)(37,SBe,1,0,"tr",28),l(),L(38,"mat-paginator",29,1),l()}if(n&2){let e=h();m(8),v("value",e.searchText()),m(2),v("disabled",e.selection.selected.length===0),m(5),v("dataSource",Io(17,6,e.dataSource,e.searchText())),m(21),v("matHeaderRowDef",e.displayedColumns()),m(),v("matRowDefColumns",e.displayedColumns()),m(),v("pageSizeOptions",at(9,mBe))}}function PBe(n,o){n&1&&(r(0,"div",2),L(1,"mat-spinner",43),l())}var hk=(()=>{class n{route=f($t);controllerService=f(_t);toasterService=f(re);cd=f(oe);groupService=f(Xl);dialog=f(Xe);controller;groupsPaginator;groupsSort;displayedColumns=z(["select","name","created_at","updated_at","is_builtin","actions"]);selection=new Yr(!0,[]);groups;dataSource=new Fr;searchText=$("");isReady=z(!1);constructor(){}ngOnInit(){let e=this.route.parent.snapshot.paramMap.get("controller_id");this.controllerService.get(+e).then(t=>{this.controller=t,this.refresh()},t=>{let i=t.error?.message||t.message||"Failed to load controller";this.toasterService.error(i),this.cd.markForCheck()})}ngAfterViewInit(){this.groupsPaginator.changes.subscribe(e=>{this.dataSource.paginator=e.first}),this.groupsSort.changes.subscribe(e=>{this.dataSource.sort=e.first}),this.dataSource.sortingDataAccessor=(e,t)=>t==="name"?e[t]?e[t].toLowerCase():"":e[t]}isAllSelected(){let e=this.selection.selected.length,t=this.groups.length;return e===t}masterToggle(){this.isAllSelected()?this.selection.clear():this.groups.forEach(e=>this.selection.select(e))}addGroup(){this.dialog.open(pk,{panelClass:["base-dialog-panel","dialog-small-panel"],autoFocus:!1,disableClose:!0,data:{controller:this.controller}}).afterClosed().subscribe(e=>{e&&this.refresh()})}refresh(){this.groupService.getGroups(this.controller).subscribe({next:e=>{this.isReady.set(!0),this.groups=e,this.dataSource.data=e,this.selection.clear()},error:e=>{let t=e.error?.message||e.message||"Failed to load groups";this.toasterService.error(t),this.cd.markForCheck()}})}onDelete(e){this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-danger-panel","dialog-small-panel"],autoFocus:".cancel-button",data:{title:e.length===1?"Delete group?":"Delete groups?",message:`${e.length} selected ${e.length===1?"group":"groups"} will be permanently deleted.`,details:e.map(t=>t.name),note:"This action cannot be undone.",confirmButtonText:e.length===1?"Delete group":"Delete groups",tone:"danger"}}).afterClosed().subscribe(t=>{if(t){let i=e.map(a=>this.groupService.delete(this.controller,a.user_group_id));Ci(i).subscribe({next:()=>{this.toasterService.success(`${e.length} ${e.length===1?"group":"groups"} deleted.`),this.refresh()},error:a=>{let s=a.error?.message||a.message||"Failed to delete groups";this.toasterService.error(s),this.cd.markForCheck()}})}})}openGroupDetailDialog(e){this.dialog.open(uH,{panelClass:["base-dialog-panel","configurator-dialog-panel","dialog-large-panel"],data:{group:e,controller:this.controller},maxWidth:"90vw"})}openGroupAiProfileDialog(e){this.dialog.open(gH,{panelClass:["base-dialog-panel","configurator-dialog-panel","dialog-extra-large-panel"],data:{group:e,controller:this.controller}})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-group-management"]],viewQuery:function(t,i){if(t&1&&Kn(cBe,5)(dBe,5),t&2){let a;gt(a=ht())&&(i.groupsPaginator=a),gt(a=ht())&&(i.groupsSort=a)}},inputs:{searchText:[1,"searchText"]},outputs:{searchText:"searchTextChange"},decls:2,vars:1,consts:[["groupsSort","matSort"],["groupsPaginator","matPaginator"],[1,"group-management__loader"],[1,"group-management__header"],[1,"group-management__title"],[1,"group-management__toolbar"],[1,"group-management__search-form"],["appearance","fill","subscriptSizing","dynamic",1,"group-management__search"],["matPrefix",""],["matInput","","aria-label","Search groups by name","placeholder","Search groups by name",3,"input","value"],[1,"group-management__actions"],["mat-flat-button","",1,"group-management__button","group-management__button--destructive",3,"click","disabled"],["mat-raised-button","","color","primary",1,"group-management__button",3,"click"],[1,"group-management__table-container"],["mat-table","","matSort","",3,"dataSource"],["matColumnDef","select"],["mat-header-cell","","class","group-management__small-col",4,"matHeaderCellDef"],["mat-cell","","class","group-management__small-col",4,"matCellDef"],["matColumnDef","name"],["mat-header-cell","","mat-sort-header","",4,"matHeaderCellDef"],["mat-cell","",4,"matCellDef"],["matColumnDef","created_at"],["matColumnDef","updated_at"],["matColumnDef","is_builtin"],["matColumnDef","actions"],["mat-header-cell","",4,"matHeaderCellDef"],["mat-cell","","class","group-management__actions-cell",4,"matCellDef"],["mat-header-row","",4,"matHeaderRowDef"],["mat-row","",4,"matRowDef","matRowDefColumns"],["showFirstLastButtons","","aria-label","Select page",3,"pageSizeOptions"],["mat-header-cell","",1,"group-management__small-col"],[3,"change","checked","indeterminate"],["mat-cell","",1,"group-management__small-col"],[3,"click","change","checked"],["mat-header-cell","","mat-sort-header",""],["mat-cell",""],[1,"group-management__link",3,"click"],["mat-header-cell",""],["mat-cell","",1,"group-management__actions-cell"],["mat-icon-button","","matTooltip","Edit group",3,"click"],["mat-icon-button","","matTooltip","AI Profiles",3,"click"],["mat-header-row",""],["mat-row",""],[1,"group-management__spinner"]],template:function(t,i){t&1&&T(0,kBe,40,10)(1,PBe,2,0,"div",2),t&2&&E(i.isReady()?0:1)},dependencies:[fe,St,Ct,vt,Ji,vn,_a,Ro,Aa,ke,_n,bn,yn,kn,wn,xn,Pn,Mn,Sn,Tn,En,ea,Rt,Gt,Y,he,Be,ie,ce,we,Pe,Bi,ye,Ee,hn,pH],styles:['[_nghost-%COMP%]{display:block;width:100%}.group-management__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:20px 0;animation:none}.group-management__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.group-management__button[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing)}.group-management__button--destructive[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-error);background-color:var(--mat-sys-error);--mat-button-filled-label-text-color: var(--mat-sys-on-error);--mat-button-filled-container-color: var(--mat-sys-error);--mat-button-filled-state-layer-color: var(--mat-sys-on-error)}.group-management__toolbar[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--gns3-density-card-gap);container:search-toolbar/inline-size}.group-management__toolbar[_ngcontent-%COMP%] .group-management__search-form[_ngcontent-%COMP%]{flex:1 1 260px;min-width:0;max-width:none;margin:0}.group-management__toolbar[_ngcontent-%COMP%] .group-management__actions[_ngcontent-%COMP%]{display:flex;flex:0 1 auto;flex-wrap:wrap;align-items:center;gap:var(--gns3-density-space-3);min-width:0}@container search-toolbar (max-width: 640px){.group-management__toolbar[_ngcontent-%COMP%] .group-management__search-form[_ngcontent-%COMP%]{flex-basis:100%;width:100%}.group-management__toolbar[_ngcontent-%COMP%] .group-management__actions[_ngcontent-%COMP%]{width:100%}}.group-management__toolbar[_ngcontent-%COMP%]{margin-bottom:var(--gns3-density-card-gap);animation:none}.group-management__search[_ngcontent-%COMP%]{width:100%}.group-management__table-container[_ngcontent-%COMP%]{border-radius:16px;width:100%;overflow:hidden;border-radius:var(--gns3-density-radius-lg);background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;animation:none;overflow-x:auto}.group-management__table-container--hidden[_ngcontent-%COMP%]{display:none}.mat-mdc-table[_ngcontent-%COMP%]{width:100%}.mat-mdc-header-row[_ngcontent-%COMP%]{height:var(--mat-table-header-container-height)}.mat-mdc-row[_ngcontent-%COMP%]{height:var(--mat-table-row-item-container-height);transition:background-color var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard);cursor:default;position:relative}.mat-mdc-row[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 3%,transparent)}.mat-mdc-row[_ngcontent-%COMP%]:nth-child(2n){background-color:color-mix(in srgb,var(--mat-sys-on-surface) 1%,transparent)}.mat-mdc-row[_ngcontent-%COMP%]:nth-child(2n):hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 4%,transparent)}.mat-header-row[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%]{position:sticky;top:0;z-index:10;background:var(--mat-sys-surface-container-highest);box-shadow:inset 0 -2px var(--mat-sys-primary);--mat-sort-arrow-color: var(--mat-sys-primary)}.mat-header-row[_ngcontent-%COMP%] .mat-mdc-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] .mat-mdc-header-cell[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:13px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}.mat-mdc-header-cell[_ngcontent-%COMP%], .mat-mdc-cell[_ngcontent-%COMP%]{text-align:left;vertical-align:middle;padding:0 var(--gns3-density-space-4)}.mat-mdc-cell[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface)}.mat-mdc-cell.mat-column-name[_ngcontent-%COMP%]{text-align:left;font-weight:500}.group-management__link[_ngcontent-%COMP%]{transition:background-color var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard),color var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard),border-color var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard);display:inline-block;color:var(--mat-sys-primary);text-decoration:none;font-weight:500;position:relative;cursor:pointer}.group-management__link[_ngcontent-%COMP%]:after{content:"";position:absolute;bottom:-2px;left:0;width:0;height:2px;background-color:currentColor;transition:width var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard)}.group-management__link[_ngcontent-%COMP%]:hover{color:color-mix(in srgb,var(--mat-sys-primary) 80%,black)}.group-management__link[_ngcontent-%COMP%]:hover:after{width:100%}.group-management__overflow-text[_ngcontent-%COMP%]{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;padding-right:5px}.mat-mdc-cell.mat-column-actions[_ngcontent-%COMP%], .mat-mdc-header-cell.mat-column-actions[_ngcontent-%COMP%]{text-align:right;white-space:nowrap}.group-management__small-col[_ngcontent-%COMP%]{width:60px;min-width:60px;text-align:center}.group-management__loader[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;min-height:200px}.group-management__spinner[_ngcontent-%COMP%]{width:48px;height:48px}mat-paginator[_ngcontent-%COMP%]{background:var(--mat-sys-surface);color:var(--mat-sys-on-surface)}@media(max-width:768px){.group-management__header[_ngcontent-%COMP%]{flex-direction:column;align-items:flex-start;gap:16px;padding:16px 0}.group-management__button[_ngcontent-%COMP%]{flex:1 1 auto}.mat-mdc-header-cell[_ngcontent-%COMP%], .mat-mdc-cell[_ngcontent-%COMP%]{padding:0 var(--gns3-density-space-3);font-size:13px}}button.group-management__button.mat-mdc-raised-button[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-primary);background-color:var(--mat-sys-primary);--mat-button-protected-label-text-color: var(--mat-sys-on-primary);--mat-button-protected-container-color: var(--mat-sys-primary);--mat-button-protected-state-layer-color: var(--mat-sys-on-primary)}'],changeDetection:0})}return n})();function TBe(n,o){n&1&&(r(0,"mat-error"),c(1,"Role name is required"),l())}function EBe(n,o){n&1&&(r(0,"mat-error"),c(1,"Role name is incorrect"),l())}var _k=(()=>{class n{data;dialogRef=f(We);formBuilder=f(Ai);cd=f(oe);roleNameForm;constructor(e){this.data=e}ngOnInit(){this.roleNameForm=this.formBuilder.group({name:new Ge,description:new Ge}),this.cd.markForCheck()}get form(){return this.roleNameForm.controls}onAddClick(){if(this.roleNameForm.invalid)return;let e=this.roleNameForm.controls.name.value,t=this.roleNameForm.controls.description.value;this.dialogRef.close({name:e,description:t})}onNoClick(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)(Mt(Wt))};static \u0275cmp=V({type:n,selectors:[["app-add-role-dialog"]],decls:20,vars:3,consts:[["mat-dialog-title",""],[3,"formGroup"],["mat-dialog-content",""],[1,"add-role-dialog__fields"],["appearance","outline","subscriptSizing","dynamic",1,"full-width-field"],["matInput","","type","text","formControlName","name","placeholder","Please enter role name"],["matInput","","type","text","formControlName","description","placeholder","Please enter a description"],["mat-dialog-actions","","align","end"],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click"]],template:function(t,i){t&1&&(r(0,"h1",0),c(1,"Create new role"),l(),r(2,"form",1)(3,"div",2)(4,"div",3)(5,"mat-form-field",4)(6,"mat-label"),c(7,"Role name"),l(),L(8,"input",5),T(9,TBe,2,0,"mat-error"),T(10,EBe,2,0,"mat-error"),l(),r(11,"mat-form-field",4)(12,"mat-label"),c(13,"Description"),l(),L(14,"input",6),l()()(),r(15,"div",7)(16,"button",8),_("click",function(){return i.onNoClick()}),c(17,"Cancel"),l(),r(18,"button",9),_("click",function(){return i.onAddClick()}),c(19,"Add role"),l()()()),t&2&&(m(2),v("formGroup",i.roleNameForm),m(7),E(i.form.name!=null&&i.form.name.touched&&(i.form.name!=null&&i.form.name.errors)&&(i.form.name!=null&&i.form.name.errors.required)?9:-1),m(),E(i.form.name!=null&&i.form.name.errors&&(i.form.name!=null&&i.form.name.errors.invalidName)?10:-1))},dependencies:[fe,It,Ct,At,Nt,vt,Ut,Yt,ke,qe,Qe,bt,Y,he,we,Pe,Ve,Wn,ye,Ee],styles:["[_nghost-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%] mat-form-field[_ngcontent-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}.add-role-dialog__fields[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--gns3-density-space-4)}.full-width-field[_ngcontent-%COMP%]{width:100%}"],changeDetection:0})}return n})();var hH=(()=>{class n{transform(e,t){return t&&(t=t.trim().toLowerCase(),e.filter=t),e}static \u0275fac=function(t){return new(t||n)};static \u0275pipe=qr({name:"roleFilter",type:n,pure:!0})}return n})();var OBe=["rolesPaginator"],DBe=["rolesSort"],IBe=()=>[5,10,20],ABe=(n,o)=>["/controller",n,"management","roles",o];function NBe(n,o){if(n&1){let e=R();r(0,"mat-header-cell",26)(1,"mat-checkbox",27),_("change",function(i){y(e);let a=h(2);return w(i?a.masterToggle():null)}),l()()}if(n&2){let e=h(2);m(),v("checked",e.selection.hasValue()&&e.isAllSelected())("indeterminate",e.selection.hasValue()&&!e.isAllSelected())}}function FBe(n,o){if(n&1){let e=R();r(0,"mat-cell",26)(1,"mat-checkbox",28),_("click",function(i){return i.stopPropagation()})("change",function(i){let a=y(e).$implicit,s=h(2);return w(i?s.selection.toggle(a):null)}),l()()}if(n&2){let e=o.$implicit,t=h(2);m(),v("checked",t.selection.isSelected(e))}}function RBe(n,o){n&1&&(r(0,"mat-header-cell",29),c(1,"NAME"),l())}function zBe(n,o){if(n&1&&(r(0,"mat-cell")(1,"a",30),c(2),l()()),n&2){let e=o.$implicit,t=h(2);m(),v("routerLink",Go(2,ABe,t.controller.id,e.role_id)),m(),X(" ",e.name," ")}}function LBe(n,o){n&1&&(r(0,"mat-header-cell",29),c(1,"DESCRIPTION"),l())}function VBe(n,o){if(n&1&&(r(0,"mat-cell")(1,"span",31),c(2),l()()),n&2){let e=o.$implicit;m(2),N(e.description)}}function BBe(n,o){n&1&&(r(0,"mat-header-cell",29),c(1,"IS BUILT-IN"),l())}function jBe(n,o){if(n&1&&(r(0,"mat-cell"),c(1),l()),n&2){let e=o.$implicit;m(),N(e.is_builtin?"YES":"NO")}}function $Be(n,o){n&1&&L(0,"mat-header-row")}function HBe(n,o){n&1&&L(0,"mat-row")}function UBe(n,o){if(n&1){let e=R();r(0,"header",3)(1,"h1",4),c(2,"Roles"),l()(),r(3,"div",5)(4,"form",6)(5,"mat-form-field",7)(6,"mat-icon",8),c(7,"search"),l(),r(8,"input",9),_("input",function(i){y(e);let a=h();return w(a.searchText.set(i.target.value))}),l()()(),r(9,"div",10)(10,"button",11),_("click",function(){y(e);let i=h();return w(i.onDelete(i.selection.selected))}),c(11," Delete roles "),l(),r(12,"button",12),_("click",function(){y(e);let i=h();return w(i.addRole())}),c(13,"Add role"),l()()(),r(14,"div",13)(15,"mat-table",14,0),Et(17,"roleFilter"),Fe(18,15),se(19,NBe,2,2,"mat-header-cell",16)(20,FBe,2,1,"mat-cell",17),Re(),Fe(21,18),se(22,RBe,2,0,"mat-header-cell",19)(23,zBe,3,5,"mat-cell",20),Re(),Fe(24,21),se(25,LBe,2,0,"mat-header-cell",19)(26,VBe,3,1,"mat-cell",20),Re(),Fe(27,22),se(28,BBe,2,0,"mat-header-cell",19)(29,jBe,2,1,"mat-cell",20),Re(),se(30,$Be,1,0,"mat-header-row",23)(31,HBe,1,0,"mat-row",24),l(),L(32,"mat-paginator",25,1),l()}if(n&2){let e=h();m(8),v("value",e.searchText()),m(2),v("disabled",e.selection.selected.length===0),m(5),v("dataSource",Io(17,6,e.dataSource,e.searchText())),m(15),v("matHeaderRowDef",e.displayedColumns),m(),v("matRowDefColumns",e.displayedColumns),m(),v("pageSizeOptions",at(9,IBe))}}function WBe(n,o){n&1&&(r(0,"div",2),L(1,"mat-spinner",32),l())}var fk=(()=>{class n{route=f($t);router=f(Ft);roleService=f(Yl);progressService=f(mo);controllerService=f(_t);dialog=f(Xe);toasterService=f(re);cd=f(oe);controller;dataSource=new Fr;displayedColumns=["select","name","description","is_builtin"];selection=new Yr(!0,[]);searchText=$("");rolesPaginator;rolesSort;isReady=z(!1);constructor(){}ngOnInit(){let e=this.route.parent.snapshot.paramMap.get("controller_id");this.controllerService.get(+e).then(t=>{this.controller=t,this.refresh()},t=>{let i=t.error?.message||t.message||"Failed to load controller";this.toasterService.error(i),this.cd.markForCheck()})}ngAfterViewInit(){this.rolesPaginator.changes.subscribe(e=>{this.dataSource.paginator=e.first}),this.rolesSort.changes.subscribe(e=>{this.dataSource.sort=e.first}),this.dataSource.sortingDataAccessor=(e,t)=>t==="name"?e[t]?e[t].toLowerCase():"":e[t]}refresh(){this.roleService.get(this.controller).subscribe({next:e=>{this.isReady.set(!0),this.dataSource.data=e},error:e=>{let t=e.error?.message||e.message||"Failed to load roles";this.toasterService.error(t),this.progressService.setError(e),this.cd.markForCheck()}})}addRole(){let e=this.dialog.open(_k,{panelClass:["base-dialog-panel","dialog-small-panel"],autoFocus:!1,disableClose:!0,data:{controller:this.controller}}).afterClosed().subscribe(t=>{t&&this.roleService.create(this.controller,t).subscribe({next:()=>{this.toasterService.success(`${t.name} role created`),this.refresh()},error:i=>{let a=i.error?.message||i.message||"Failed to create role";this.toasterService.error(a),this.cd.markForCheck()}})})}isAllSelected(){let e=this.selection.selected.length,t=this.dataSource.data.length;return e===t}masterToggle(){this.isAllSelected()?this.selection.clear():this.dataSource.data.forEach(e=>this.selection.select(e))}onDelete(e){this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-danger-panel","dialog-small-panel"],autoFocus:".cancel-button",data:{title:e.length===1?"Delete role?":"Delete roles?",message:`${e.length} selected ${e.length===1?"role":"roles"} will be permanently deleted.`,details:e.map(t=>t.name),note:"This action cannot be undone.",confirmButtonText:e.length===1?"Delete role":"Delete roles",tone:"danger"}}).afterClosed().subscribe(t=>{if(t){let i=e.map(a=>this.roleService.delete(this.controller,a.role_id));Ci(i).subscribe({next:()=>{this.refresh()},error:a=>{let s=a.error?.message||a.message||"Failed to delete roles";this.toasterService.error(s),this.cd.markForCheck()}})}})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-role-management"]],viewQuery:function(t,i){if(t&1&&Kn(OBe,5)(DBe,5),t&2){let a;gt(a=ht())&&(i.rolesPaginator=a),gt(a=ht())&&(i.rolesSort=a)}},inputs:{searchText:[1,"searchText"]},outputs:{searchText:"searchTextChange"},decls:2,vars:1,consts:[["rolesSort","matSort"],["rolesPaginator","matPaginator"],[1,"role-management__loader"],[1,"role-management__header"],[1,"role-management__title"],[1,"role-management__toolbar"],[1,"role-management__search-form"],["appearance","fill","subscriptSizing","dynamic",1,"role-management__search"],["matPrefix",""],["matInput","","aria-label","Search roles by name","placeholder","Search roles by name",3,"input","value"],[1,"role-management__actions"],["mat-flat-button","",1,"role-management__button","role-management__button--destructive",3,"click","disabled"],["mat-raised-button","","color","primary",1,"role-management__button",3,"click"],[1,"role-management__table-container"],["matSort","",3,"dataSource"],["matColumnDef","select"],["class","role-management__small-col",4,"matHeaderCellDef"],["class","role-management__small-col",4,"matCellDef"],["matColumnDef","name"],["mat-sort-header","",4,"matHeaderCellDef"],[4,"matCellDef"],["matColumnDef","description"],["matColumnDef","is_builtin"],[4,"matHeaderRowDef"],[4,"matRowDef","matRowDefColumns"],["showFirstLastButtons","","aria-label","Select page",3,"pageSizeOptions"],[1,"role-management__small-col"],[3,"change","checked","indeterminate"],[3,"click","change","checked"],["mat-sort-header",""],[1,"role-management__link",3,"routerLink"],[1,"role-management__overflow-text"],[1,"role-management__spinner"]],template:function(t,i){t&1&&T(0,UBe,34,10)(1,WBe,2,0,"div",2),t&2&&E(i.isReady()?0:1)},dependencies:[fe,St,Ct,vt,Ji,vn,Co,_n,bn,yn,kn,wn,xn,Pn,Mn,Sn,Tn,En,ea,_a,Ro,Aa,Rt,Gt,Y,he,ie,ce,we,Pe,Bi,ye,Ee,ke,rt,mt,hH],styles:['[_nghost-%COMP%]{display:block;width:100%}.role-management__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:20px 0;animation:none}.role-management__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.role-management__button[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing)}.role-management__button--destructive[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-error);background-color:var(--mat-sys-error);--mat-button-filled-label-text-color: var(--mat-sys-on-error);--mat-button-filled-container-color: var(--mat-sys-error);--mat-button-filled-state-layer-color: var(--mat-sys-on-error)}.role-management__toolbar[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--gns3-density-card-gap);container:search-toolbar/inline-size}.role-management__toolbar[_ngcontent-%COMP%] .role-management__search-form[_ngcontent-%COMP%]{flex:1 1 260px;min-width:0;max-width:none;margin:0}.role-management__toolbar[_ngcontent-%COMP%] .role-management__actions[_ngcontent-%COMP%]{display:flex;flex:0 1 auto;flex-wrap:wrap;align-items:center;gap:var(--gns3-density-space-3);min-width:0}@container search-toolbar (max-width: 640px){.role-management__toolbar[_ngcontent-%COMP%] .role-management__search-form[_ngcontent-%COMP%]{flex-basis:100%;width:100%}.role-management__toolbar[_ngcontent-%COMP%] .role-management__actions[_ngcontent-%COMP%]{width:100%}}.role-management__toolbar[_ngcontent-%COMP%]{margin-bottom:var(--gns3-density-card-gap);animation:none}.role-management__search[_ngcontent-%COMP%]{width:100%}.role-management__table-container[_ngcontent-%COMP%]{border-radius:16px;width:100%;overflow:hidden;border-radius:var(--gns3-density-radius-lg);background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;animation:none;overflow-x:auto}.role-management__table-container--hidden[_ngcontent-%COMP%]{display:none}mat-row[_ngcontent-%COMP%]{transition:background-color var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard),color var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard),border-color var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard);cursor:default;position:relative}mat-row[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 3%,transparent)}mat-row[_ngcontent-%COMP%]:nth-child(2n){background-color:color-mix(in srgb,var(--mat-sys-on-surface) 1%,transparent)}mat-row[_ngcontent-%COMP%]:nth-child(2n):hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 4%,transparent)}.mat-header-row[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%]{position:sticky;top:0;z-index:10;background:var(--mat-sys-surface-container-highest);box-shadow:inset 0 -2px var(--mat-sys-primary);--mat-sort-arrow-color: var(--mat-sys-primary)}.mat-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%], .mat-header-row[_ngcontent-%COMP%] .mat-mdc-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] .mat-mdc-header-cell[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:13px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}mat-header-cell[_ngcontent-%COMP%], mat-cell[_ngcontent-%COMP%]{justify-content:center;padding:0 16px}mat-cell[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface)}mat-header-cell.mat-column-name[_ngcontent-%COMP%], mat-cell.mat-column-name[_ngcontent-%COMP%], mat-header-cell.mat-column-description[_ngcontent-%COMP%], mat-cell.mat-column-description[_ngcontent-%COMP%]{justify-content:flex-start;text-align:left}mat-cell.mat-column-name[_ngcontent-%COMP%]{font-weight:500}.mat-column-is_builtin[_ngcontent-%COMP%]{flex:0 0 140px}.role-management__link[_ngcontent-%COMP%]{transition:background-color var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard),color var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard),border-color var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard);display:inline-block;color:var(--mat-sys-primary);text-decoration:none;font-weight:500;position:relative}.role-management__link[_ngcontent-%COMP%]:after{content:"";position:absolute;bottom:-2px;left:0;width:0;height:2px;background-color:currentColor;transition:width var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard)}.role-management__link[_ngcontent-%COMP%]:hover{color:color-mix(in srgb,var(--mat-sys-primary) 80%,black)}.role-management__link[_ngcontent-%COMP%]:hover:after{width:100%}.role-management__overflow-text[_ngcontent-%COMP%]{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;padding-right:5px}.role-management__small-col[_ngcontent-%COMP%]{width:60px;min-width:60px}.role-management__loader[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;min-height:200px}.role-management__spinner[_ngcontent-%COMP%]{width:48px;height:48px}mat-paginator[_ngcontent-%COMP%]{background:var(--mat-sys-surface);color:var(--mat-sys-on-surface)}@media(max-width:768px){.role-management__header[_ngcontent-%COMP%]{flex-direction:column;align-items:flex-start;gap:16px;padding:16px 0}.role-management__button[_ngcontent-%COMP%]{flex:1 1 auto}.role-management__actions-cell[_ngcontent-%COMP%]{flex-wrap:wrap;gap:4px}mat-cell[_ngcontent-%COMP%]{padding:0 12px;font-size:13px}}button.role-management__button.mat-mdc-raised-button[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-primary);background-color:var(--mat-sys-primary);--mat-button-protected-label-text-color: var(--mat-sys-on-primary);--mat-button-protected-container-color: var(--mat-sys-primary);--mat-button-protected-state-layer-color: var(--mat-sys-on-primary)}'],changeDetection:0})}return n})();var _H=(()=>{class n{httpController;constructor(e){this.httpController=e}get(e){return this.httpController.get(e,"/access/privileges")}static \u0275fac=function(t){return new(t||n)(_e(sn))};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var SC=class{ownedPrivileges;change={add:new Set,delete:new Set};constructor(o){this.ownedPrivileges=o}add(o){this.change.delete.has(o)&&this.change.delete.delete(o),!this.ownedPrivileges.includes(o)&&this.change.add.add(o)}delete(o){this.change.add.has(o)&&this.change.add.delete(o),this.ownedPrivileges.includes(o)&&this.change.delete.add(o)}isAdded(o){return this.change.add.has(o)}isDeleted(o){return this.change.delete.has(o)}get(){return{add:Array.from(this.change.add),delete:Array.from(this.change.delete)}}};var fH=(()=>{class n{transform(e){if(e){let t={};e.forEach(a=>{let[s,d]=a.name.split(".");t.hasOwnProperty(s)?t[s].push({verb:d,privilege:a}):t[s]=[{verb:d,privilege:a}]});let i=[];for(let[a,s]of Object.entries(t))i.push({key:a,values:s});return i}}static \u0275fac=function(t){return new(t||n)};static \u0275pipe=qr({name:"groupPrivileges",type:n,pure:!0})}return n})();var GBe=(n,o)=>o.key,vH=(n,o)=>o.privilege.privilege_id;function qBe(n,o){if(n&1){let e=R();r(0,"button",7),_("click",function(){y(e);let i=h(2);return w(i.editMode=!0)}),r(1,"mat-icon"),c(2,"edit"),l()()}}function QBe(n,o){if(n&1){let e=R();r(0,"button",8),_("click",function(){y(e);let i=h(2);return w(i.editMode=!1)}),c(1,"Cancel"),l(),r(2,"button",9),_("click",function(){y(e);let i=h(2);return w(i.close())}),c(3,"Update"),l()}}function KBe(n,o){if(n&1&&(T(0,qBe,3,0,"button",6),T(1,QBe,4,0)),n&2){let e=h();E(e.editMode?-1:0),m(),E(e.editMode?1:-1)}}function XBe(n,o){if(n&1&&(r(0,"mat-icon",15),c(1,"info"),l()),n&2){let e=h().$implicit;v("matTooltip",e.privilege.description)}}function YBe(n,o){if(n&1){let e=R();r(0,"div",13)(1,"mat-checkbox",14),_("change",function(i){let a=y(e).$implicit,s=h(4);return w(s.onPrivilegeChange(i.checked,a.privilege))}),l(),r(2,"span"),c(3),l(),T(4,XBe,2,1,"mat-icon",15),l()}if(n&2){let e=o.$implicit,t=h(4);m(),v("checked",t.ownedPrivilegesList().includes(e.privilege.privilege_id)),m(),ne("privileges__verb--added",t.changer.isAdded(e.privilege.privilege_id))("privileges__verb--deleted",t.changer.isDeleted(e.privilege.privilege_id)),m(),X(" ",e.verb," "),m(),E(e.privilege.description?4:-1)}}function ZBe(n,o){if(n&1&&(r(0,"div",10)(1,"div",11),c(2),l(),r(3,"div",12),Q(4,YBe,5,7,"div",13,vH),l()()),n&2){let e=h().$implicit;m(2),X("",e.key,":"),m(2),K(e.values)}}function JBe(n,o){if(n&1&&(r(0,"span",13),c(1),l()),n&2){let e=h().$implicit;m(),X(" ",e.verb," ")}}function eje(n,o){if(n&1&&T(0,JBe,2,1,"span",13),n&2){let e=o.$implicit,t=h(5);E(t.ownedPrivilegesList().includes(e.privilege.privilege_id)?0:-1)}}function tje(n,o){if(n&1&&(r(0,"div",10)(1,"div",11),c(2),l(),r(3,"div",12),Q(4,eje,1,1,null,null,vH),l()()),n&2){let e=h(2).$implicit;m(2),X("",e.key,":"),m(2),K(e.values)}}function nje(n,o){if(n&1&&T(0,tje,6,1,"div",10),n&2){let e=h().$implicit,t=h(2);E(t.ownedPrivilegesName().includes(e.key)?0:-1)}}function ije(n,o){if(n&1&&T(0,ZBe,6,1,"div",10)(1,nje,1,1),n&2){let e=h(2);E(e.editMode?0:1)}}function oje(n,o){if(n&1&&(r(0,"div",5),Q(1,ije,2,1,null,null,GBe),Et(3,"groupPrivileges"),l()),n&2){let e=h();m(),K(gn(3,0,e.privileges()))}}var vk=(()=>{class n{disable=ee(!0);privileges=ee([]);set ownedPrivilege(e){e&&(this.ownedPrivilegesName.set(e.map(t=>t.name.split(".")[0])),this.ownedPrivilegesList.set(e.map(t=>t.privilege_id)))}update=new be;ownedPrivilegesName=z([]);ownedPrivilegesList=z([]);changer=new SC([]);editModeState=z(!1);collapsedState=z(!0);get editMode(){return this.editModeState()}set editMode(e){e&&(this.changer=new SC(this.ownedPrivilegesList())),this.editModeState.set(e)}get collapsed(){return this.collapsedState()}toggleCollapsed(){this.collapsedState.set(!this.collapsedState())}constructor(){}onPrivilegeChange(e,t){let i=t.privilege_id;e?this.changer.add(i):this.changer.delete(i)}close(){this.update.emit(this.changer.get()),this.editMode=!1}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-privilege"]],inputs:{disable:[1,"disable"],privileges:[1,"privileges"],ownedPrivilege:"ownedPrivilege"},outputs:{update:"update"},decls:10,vars:6,consts:[[1,"privileges"],[1,"privileges__header",3,"click"],[1,"privileges__title"],[1,"privileges__actions"],["mat-icon-button","",3,"click","matTooltip"],[1,"privileges__list"],["mat-icon-button","","matTooltip","Edit privileges"],["mat-icon-button","","matTooltip","Edit privileges",3,"click"],["mat-raised-button","","color","warn",3,"click"],["mat-raised-button","","color","primary",3,"click"],[1,"privileges__group"],[1,"privileges__key"],[1,"privileges__values"],[1,"privileges__verb"],[1,"privileges__checkbox",3,"change","checked"],["matTooltipPosition","right",1,"privileges__info-icon",3,"matTooltip"]],template:function(t,i){t&1&&(r(0,"div",0)(1,"div",1),_("click",function(){return i.collapsed&&i.toggleCollapsed()}),r(2,"h3",2),c(3,"Privileges"),l(),r(4,"div",3)(5,"button",4),_("click",function(){return i.toggleCollapsed()}),r(6,"mat-icon"),c(7),l()(),T(8,KBe,2,2),l()(),T(9,oje,4,2,"div",5),l()),t&2&&(m(),ne("privileges__header--clickable",i.collapsed),m(4),v("matTooltip",i.collapsed?"Expand":"Collapse"),m(2),N(i.collapsed?"expand_more":"expand_less"),m(),E(i.disable()?-1:8),m(),E(i.collapsed?-1:9))},dependencies:[fe,Y,he,Be,ie,ce,Rt,Gt,st,pt,fH],styles:["app-privilege[_ngcontent-%COMP%]{display:block;width:100%}.privileges[_ngcontent-%COMP%]{padding:16px;background:var(--mat-sys-surface);border-radius:12px;border:1px solid var(--mat-sys-outline-variant)}.privileges__header[_ngcontent-%COMP%]{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding-bottom:16px;margin-bottom:16px;border-bottom:1px solid var(--mat-sys-outline-variant)}.privileges__header--clickable[_ngcontent-%COMP%]{cursor:pointer}.privileges__header--clickable[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container-low);margin:-16px -16px 0;padding:16px;border-radius:12px 12px 0 0}.privileges__title[_ngcontent-%COMP%]{font-size:18px;font-weight:600;color:var(--mat-sys-on-surface);margin:0}.privileges__actions[_ngcontent-%COMP%]{display:flex;gap:8px}.privileges__list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px}.privileges__group[_ngcontent-%COMP%]{display:flex;flex-direction:row;padding:12px;background:var(--mat-sys-surface-container-low);border-radius:8px;min-height:40px;align-items:flex-start}.privileges__key[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);display:flex;flex-shrink:0;width:120px;align-items:center;height:40px;font-weight:500}.privileges__values[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:row;flex-wrap:wrap;gap:8px;padding:8px;min-height:40px;align-items:center}.privileges__verb[_ngcontent-%COMP%]{display:inline-flex;align-items:center;padding:4px 8px;border-radius:4px;white-space:nowrap;background:var(--mat-sys-surface-container-high);color:var(--mat-sys-on-surface);font-size:13px}.privileges__verb--added[_ngcontent-%COMP%]{background:var(--mat-sys-primary-container);color:var(--mat-sys-on-primary-container)}.privileges__verb--deleted[_ngcontent-%COMP%]{background:var(--mat-sys-error-container);color:var(--mat-sys-on-error-container);text-decoration:line-through}.privileges__checkbox[_ngcontent-%COMP%]{margin-right:8px}.privileges__info-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;margin-left:4px;color:var(--mat-sys-on-surface-variant);cursor:help;opacity:.6;transition:opacity var(--gns3-motion-duration-standard) ease}.privileges__info-icon[_ngcontent-%COMP%]:hover{opacity:1;color:var(--mat-sys-primary)}"],changeDetection:0})}return n})();var aje=n=>["/controller",n,"management","roles"];function rje(n,o){if(n&1&&(r(0,"div",10)(1,"div",21)(2,"span",22),c(3,"Role name"),l(),r(4,"span",23),c(5),Et(6,"async"),l()(),r(7,"div",21)(8,"span",22),c(9,"Description"),l(),r(10,"span",23),c(11),Et(12,"async"),l()()()),n&2){let e,t,i=h();m(5),N((e=gn(6,2,i.$role))==null?null:e.name),m(6),N(((t=gn(12,4,i.$role))==null?null:t.description)||"-")}}function sje(n,o){if(n&1&&(r(0,"form",11)(1,"mat-form-field",24)(2,"mat-label"),c(3,"Role name"),l(),L(4,"input",25),l(),r(5,"mat-form-field",24)(6,"mat-label"),c(7,"Description"),l(),L(8,"input",26),l()()),n&2){let e=h();v("formGroup",e.editRoleForm)}}var Ck=(()=>{class n{roleService=f(Yl);toastService=f(re);route=f($t);privilegeService=f(_H);fb=f(cg);cd=f(oe);controller;$role=new cn({role_id:"",description:"",updated_at:"",is_builtin:!1,privileges:[],name:"",created_at:""});editRoleForm;$ownedPrivilegesId=this.$role.pipe(Pt(e=>e.privileges));privileges;roleId;constructor(){this.$role.subscribe(e=>{this.editRoleForm=this.fb.group({rolename:[e.name],description:[e.description]})})}ngOnInit(){this.route.data.subscribe({next:e=>{this.controller=e.controller,this.roleId=e.role.role_id,this.privileges=this.privilegeService.get(this.controller),this.roleService.getById(this.controller,this.roleId).subscribe({next:t=>this.$role.next(t),error:t=>{let i=t.error?.message||t.message||"Failed to load role";this.toastService.error(i),this.cd.markForCheck()}})},error:e=>{let t=e.error?.message||e.message||"Failed to load route data";this.toastService.error(t),this.cd.markForCheck()}})}onUpdate(){let e=this.$role.value;e.name=this.editRoleForm.get("rolename")?.value,e.description=this.editRoleForm.get("description")?.value,this.roleService.update(this.controller,e).subscribe({next:()=>{this.toastService.success(`Role ${e.name} was updated`),this.roleService.getById(this.controller,this.roleId).subscribe({next:t=>this.$role.next(t),error:t=>{let i=t.error?.message||t.message||"Failed to load role after update";this.toastService.error(i),this.cd.markForCheck()}})},error:t=>{let i=t.error?.message||t.message||"Failed to update role";this.toastService.error(i),this.cd.markForCheck()}})}onPrivilegesUpdate(e){let t=[];for(let i of e.add)t.push(this.roleService.setPrivileges(this.controller,this.roleId,i));for(let i of e.delete)t.push(this.roleService.removePrivileges(this.controller,this.roleId,i));Ci(t).subscribe({next:()=>{this.roleService.getById(this.controller,this.roleId).subscribe({next:i=>this.$role.next(i),error:i=>{let a=i.error?.message||i.message||"Failed to load role after privilege update";this.toastService.error(a),this.cd.markForCheck()}})},error:i=>{let a=i.error?.message||i.message||"Failed to update privileges";this.toastService.error(a),this.cd.markForCheck()}})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-role-detail"]],decls:55,vars:35,consts:[[1,"role-detail"],[1,"role-detail__header"],[1,"role-detail__header-content"],["mat-icon-button","","matTooltip","Back to role management","matTooltipClass","custom-tooltip",1,"role-detail__back-btn",3,"routerLink"],["aria-label","Back to role management"],[1,"role-detail__title"],[1,"role-detail__content"],[1,"role-detail__main"],[1,"role-detail__section"],[1,"role-detail__card"],[1,"role-detail__readonly"],[1,"role-detail__form","gns3-form-layout-fixed",3,"formGroup"],[1,"role-detail__info-grid"],[1,"role-detail__info-item"],[1,"role-detail__info-label"],[1,"role-detail__info-value"],[1,"role-detail__info-item","role-detail__info-item--full"],[1,"role-detail__info-value","role-detail__info-value--mono"],[1,"role-detail__actions"],["mat-raised-button","","color","primary",3,"click","disabled"],[3,"update","disable","ownedPrivilege","privileges"],[1,"role-detail__readonly-item"],[1,"role-detail__readonly-label"],[1,"role-detail__readonly-value"],["appearance","outline",1,"role-detail__field"],["matInput","","type","text","formControlName","rolename"],["matInput","","type","text","formControlName","description"]],template:function(t,i){if(t&1&&(r(0,"div",0)(1,"header",1)(2,"div",2)(3,"a",3)(4,"mat-icon",4),c(5,"keyboard_arrow_left"),l()(),r(6,"h1",5),c(7),Et(8,"async"),l()()(),r(9,"div",6)(10,"div",7)(11,"section",8)(12,"mat-card",9)(13,"mat-card-header")(14,"mat-card-title"),c(15,"Role Details"),l()(),r(16,"mat-card-content"),T(17,rje,13,6,"div",10),Et(18,"async"),FC(19,sje,9,1,"form",11),r(20,"div",12)(21,"div",13)(22,"span",14),c(23,"Creation date"),l(),r(24,"span",15),c(25),Et(26,"async"),l()(),r(27,"div",13)(28,"span",14),c(29,"Last update"),l(),r(30,"span",15),c(31),Et(32,"async"),l()(),r(33,"div",16)(34,"span",14),c(35,"UUID"),l(),r(36,"span",17),c(37),Et(38,"async"),l()(),r(39,"div",13)(40,"span",14),c(41,"Is built-in"),l(),r(42,"span",15),c(43),Et(44,"async"),l()()()(),r(45,"mat-card-actions",18)(46,"button",19),Et(47,"async"),Et(48,"async"),_("click",function(){return i.onUpdate()}),c(49," Update Role "),l()()()(),r(50,"section",8)(51,"app-privilege",20),Et(52,"async"),Et(53,"async"),Et(54,"async"),_("update",function(s){return i.onPrivilegesUpdate(s)}),l()()()()()),t&2){let a,s,d,p,u,g,C,M;m(3),v("routerLink",tn(33,aje,i.controller.id)),m(4),X("Role ",(a=gn(8,11,i.$role))==null?null:a.name),m(10),E((s=gn(18,13,i.$role))!=null&&s.is_builtin?17:19),m(8),N((d=gn(26,15,i.$role))==null?null:d.created_at),m(6),N((p=gn(32,17,i.$role))==null?null:p.updated_at),m(6),N((u=gn(38,19,i.$role))==null?null:u.role_id),m(6),N((g=gn(44,21,i.$role))!=null&&g.is_builtin?"YES":"NO"),m(3),v("disabled",!gn(47,23,i.editRoleForm.valueChanges)&&i.editRoleForm.valid||((C=gn(48,25,i.$role))==null?null:C.is_builtin)),m(5),v("disable",(M=gn(52,27,i.$role))==null?null:M.is_builtin)("ownedPrivilege",gn(53,29,i.$ownedPrivilegesId))("privileges",gn(54,31,i.privileges))}},dependencies:[fe,It,Ct,At,Nt,vt,Ut,Yt,vn,Co,hn,Zn,k1,Tl,Jc,Zc,we,Pe,Ve,ye,Ee,Y,he,Be,ie,ce,st,pt,vk,Pa],styles:["[_nghost-%COMP%]{display:block;width:100%;background:transparent}.role-detail[_ngcontent-%COMP%]{padding:20px 24px;animation:none;display:flex;flex-direction:column;align-items:center}.role-detail__header[_ngcontent-%COMP%]{margin-bottom:24px;width:100%;max-width:1000px}.role-detail__header-content[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.role-detail__back-btn[_ngcontent-%COMP%]{flex-shrink:0}.role-detail__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.role-detail__content[_ngcontent-%COMP%]{width:100%;max-width:1000px}.role-detail__main[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:24px;width:100%;max-width:1000px}.role-detail__section[_ngcontent-%COMP%]{width:100%}.role-detail__card[_ngcontent-%COMP%]{border-radius:12px}.role-detail__card[_ngcontent-%COMP%] mat-card-header[_ngcontent-%COMP%]{padding:16px 16px 0}.role-detail__card[_ngcontent-%COMP%] mat-card-title[_ngcontent-%COMP%]{font-size:18px;font-weight:600;color:var(--mat-sys-on-surface)}.role-detail__card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%]{padding:16px}.role-detail__card[_ngcontent-%COMP%] mat-card-actions[_ngcontent-%COMP%]{padding:0 16px 16px}.role-detail__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}.role-detail__field[_ngcontent-%COMP%]{width:100%}.role-detail__readonly[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px;padding:16px;background:var(--mat-sys-surface-container-low);border-radius:8px;margin-bottom:16px}.role-detail__readonly-item[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px}.role-detail__readonly-label[_ngcontent-%COMP%]{font-size:12px;font-weight:500;color:var(--mat-sys-on-surface-variant);text-transform:uppercase;letter-spacing:.5px}.role-detail__readonly-value[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface)}.role-detail__actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-start;padding-top:8px}.role-detail__info-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,1fr);gap:16px;padding-top:16px;border-top:1px solid var(--mat-sys-outline-variant)}@media(max-width:600px){.role-detail__info-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}}.role-detail__info-item[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px}.role-detail__info-item--full[_ngcontent-%COMP%]{grid-column:1/-1}.role-detail__info-label[_ngcontent-%COMP%]{font-size:12px;font-weight:500;color:var(--mat-sys-on-surface-variant);text-transform:uppercase;letter-spacing:.5px}.role-detail__info-value[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface)}.role-detail__info-value--mono[_ngcontent-%COMP%]{font-family:var(--gns3-font-code);font-size:12px}"],changeDetection:0})}return n})();var CH=(()=>{class n{controllerService;roleService;constructor(e,t){this.controllerService=e,this.roleService=t}resolve(e,t){let i=e.paramMap.get("controller_id"),a=e.paramMap.get("role_id");return sm(this.controllerService.get(+i)).pipe(Dn(s=>this.roleService.getById(s,a)),ei(s=>jo(()=>s)))}static \u0275fac=function(t){return new(t||n)(_e(_t),_e(Yl))};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var Q4=class{dataNodes;expansionModel=new Yr(!0);trackBy;getLevel;isExpandable;getChildren;toggle(o){this.expansionModel.toggle(this._trackByValue(o))}expand(o){this.expansionModel.select(this._trackByValue(o))}collapse(o){this.expansionModel.deselect(this._trackByValue(o))}isExpanded(o){return this.expansionModel.isSelected(this._trackByValue(o))}toggleDescendants(o){this.expansionModel.isSelected(this._trackByValue(o))?this.collapseDescendants(o):this.expandDescendants(o)}collapseAll(){this.expansionModel.clear()}expandDescendants(o){let e=[o];e.push(...this.getDescendants(o)),this.expansionModel.select(...e.map(t=>this._trackByValue(t)))}collapseDescendants(o){let e=[o];e.push(...this.getDescendants(o)),this.expansionModel.deselect(...e.map(t=>this._trackByValue(t)))}_trackByValue(o){return this.trackBy?this.trackBy(o):o}};var bk=class extends Q4{getChildren;options;constructor(o,e){super(),this.getChildren=o,this.options=e,this.options&&(this.trackBy=this.options.trackBy),this.options?.isExpandable&&(this.isExpandable=this.options.isExpandable)}expandAll(){this.expansionModel.clear();let o=this.dataNodes.reduce((e,t)=>[...e,...this.getDescendants(t),t],[]);this.expansionModel.select(...o.map(e=>this._trackByValue(e)))}getDescendants(o){let e=[];return this._getDescendants(e,o),e.splice(1)}_getDescendants(o,e){o.push(e);let t=this.getChildren(e);Array.isArray(t)?t.forEach(i=>this._getDescendants(o,i)):af(t)&&t.pipe(Gr(1),Yi(Boolean)).subscribe(i=>{for(let a of i)this._getDescendants(o,a)})}},X4=new mn("CDK_TREE_NODE_OUTLET_NODE"),Y_=(()=>{class n{viewContainer=f(Wo);_node=f(X4,{optional:!0});constructor(){}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["","cdkTreeNodeOutlet",""]]})}return n})(),K4=class{$implicit;level;index;count;constructor(o){this.$implicit=o}},xk=(()=>{class n{template=f(pa);when;constructor(){}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["","cdkTreeNodeDef",""]],inputs:{when:[0,"cdkTreeNodeDefWhen","when"]}})}return n})();function bH(){return Error("Could not find a tree control, levelAccessor, or childrenAccessor for the tree.")}var kC=(()=>{class n{_differs=f(Sd);_changeDetectorRef=f(oe);_elementRef=f(Kt);_dir=f(Kr);_onDestroy=new Ye;_dataDiffer;_defaultNodeDef=null;_dataSubscription;_levels=new Map;_parents=new Map;_ariaSets=new Map;get dataSource(){return this._dataSource}set dataSource(e){this._dataSource!==e&&this._switchDataSource(e)}_dataSource;treeControl;levelAccessor;childrenAccessor;trackBy;expansionKey;_nodeOutlet;_nodeDefs;viewChange=new cn({start:0,end:Number.MAX_VALUE});_expansionModel;_flattenedNodes=new cn([]);_nodeType=new cn(null);_nodes=new cn(new Map);_keyManagerNodes=new cn([]);_keyManagerFactory=f(n5);_keyManager;_viewInit=!1;constructor(){}ngAfterContentInit(){this._initializeKeyManager()}ngAfterContentChecked(){this._updateDefaultNodeDefinition(),this._subscribeToDataChanges()}ngOnDestroy(){this._nodeOutlet.viewContainer.clear(),this._nodes.complete(),this._keyManagerNodes.complete(),this._nodeType.complete(),this._flattenedNodes.complete(),this.viewChange.complete(),this._onDestroy.next(),this._onDestroy.complete(),this._dataSource&&typeof this._dataSource.disconnect=="function"&&this.dataSource.disconnect(this),this._dataSubscription?.unsubscribe(),this._dataSubscription=void 0,this._keyManager?.destroy()}ngOnInit(){this._checkTreeControlUsage(),this._initializeDataDiffer()}ngAfterViewInit(){this._viewInit=!0}_updateDefaultNodeDefinition(){let e=this._nodeDefs.filter(t=>!t.when);e.length>1,this._defaultNodeDef=e[0]}_setNodeTypeIfUnset(e){this._nodeType.value===null&&this._nodeType.next(e)}_switchDataSource(e){this._dataSource&&typeof this._dataSource.disconnect=="function"&&this.dataSource.disconnect(this),this._dataSubscription?.unsubscribe(),this._dataSubscription=void 0,e||this._nodeOutlet.viewContainer.clear(),this._dataSource=e,this._nodeDefs&&this._subscribeToDataChanges()}_getExpansionModel(){return this.treeControl?this.treeControl.expansionModel:(this._expansionModel??=new Yr(!0),this._expansionModel)}_subscribeToDataChanges(){if(this._dataSubscription)return;let e;sg(this._dataSource)?e=this._dataSource.connect(this):af(this._dataSource)?e=this._dataSource:Array.isArray(this._dataSource)&&(e=Vt(this._dataSource)),e&&(this._dataSubscription=this._getRenderData(e).pipe(He(this._onDestroy)).subscribe(t=>{this._renderDataChanges(t)}))}_getRenderData(e){let t=this._getExpansionModel();return mr([e,this._nodeType,t.changed.pipe(Di(null),Qn(i=>{this._emitExpansionChanges(i)}))]).pipe(Dn(([i,a])=>a===null?Vt({renderNodes:i,flattenedNodes:null,nodeType:a}):this._computeRenderingData(i,a).pipe(Pt(s=>ze(q({},s),{nodeType:a})))))}_renderDataChanges(e){if(e.nodeType===null){this.renderNodeChanges(e.renderNodes);return}this._updateCachedData(e.flattenedNodes),this.renderNodeChanges(e.renderNodes),this._updateKeyManagerItems(e.flattenedNodes)}_emitExpansionChanges(e){if(!e)return;let t=this._nodes.value;for(let i of e.added)t.get(i)?._emitExpansionState(!0);for(let i of e.removed)t.get(i)?._emitExpansionState(!1)}_initializeKeyManager(){let e=mr([this._keyManagerNodes,this._nodes]).pipe(Pt(([i,a])=>i.reduce((s,d)=>{let p=a.get(this._getExpansionKey(d));return p&&s.push(p),s},[]))),t={trackBy:i=>this._getExpansionKey(i.data),skipPredicate:i=>!!i.isDisabled,typeAheadDebounceInterval:!0,horizontalOrientation:this._dir.value};this._keyManager=this._keyManagerFactory(e,t)}_initializeDataDiffer(){let e=this.trackBy??((t,i)=>this._getExpansionKey(i));this._dataDiffer=this._differs.find([]).create(e)}_checkTreeControlUsage(){}renderNodeChanges(e,t=this._dataDiffer,i=this._nodeOutlet.viewContainer,a){let s=t.diff(e);!s&&!this._viewInit||(s?.forEachOperation((d,p,u)=>{if(d.previousIndex==null)this.insertNode(e[u],u,i,a);else if(u==null)i.remove(p);else{let g=i.get(p);i.move(g,u)}}),s?.forEachIdentityChange(d=>{let p=d.item;if(d.currentIndex!=null){let u=i.get(d.currentIndex);u.context.$implicit=p}}),a?this._changeDetectorRef.markForCheck():this._changeDetectorRef.detectChanges())}_getNodeDef(e,t){if(this._nodeDefs.length===1)return this._nodeDefs.first;let i=this._nodeDefs.find(a=>a.when&&a.when(t,e))||this._defaultNodeDef;return i}insertNode(e,t,i,a){let s=this._getLevelAccessor(),d=this._getNodeDef(e,t),p=this._getExpansionKey(e),u=new K4(e);u.index=t,a??=this._parents.get(p)??void 0,s?u.level=s(e):a!==void 0&&this._levels.has(this._getExpansionKey(a))?u.level=this._levels.get(this._getExpansionKey(a))+1:u.level=0,this._levels.set(p,u.level),(i||this._nodeOutlet.viewContainer).createEmbeddedView(d.template,u,t),Z_.mostRecentTreeNode&&(Z_.mostRecentTreeNode.data=e)}isExpanded(e){return!!(this.treeControl?.isExpanded(e)||this._expansionModel?.isSelected(this._getExpansionKey(e)))}toggle(e){this.treeControl?this.treeControl.toggle(e):this._expansionModel&&this._expansionModel.toggle(this._getExpansionKey(e))}expand(e){this.treeControl?this.treeControl.expand(e):this._expansionModel&&this._expansionModel.select(this._getExpansionKey(e))}collapse(e){this.treeControl?this.treeControl.collapse(e):this._expansionModel&&this._expansionModel.deselect(this._getExpansionKey(e))}toggleDescendants(e){this.treeControl?this.treeControl.toggleDescendants(e):this._expansionModel&&(this.isExpanded(e)?this.collapseDescendants(e):this.expandDescendants(e))}expandDescendants(e){if(this.treeControl)this.treeControl.expandDescendants(e);else if(this._expansionModel){let t=this._expansionModel;t.select(this._getExpansionKey(e)),this._getDescendants(e).pipe(Gr(1),He(this._onDestroy)).subscribe(i=>{t.select(...i.map(a=>this._getExpansionKey(a)))})}}collapseDescendants(e){if(this.treeControl)this.treeControl.collapseDescendants(e);else if(this._expansionModel){let t=this._expansionModel;t.deselect(this._getExpansionKey(e)),this._getDescendants(e).pipe(Gr(1),He(this._onDestroy)).subscribe(i=>{t.deselect(...i.map(a=>this._getExpansionKey(a)))})}}expandAll(){this.treeControl?this.treeControl.expandAll():this._expansionModel&&this._forEachExpansionKey(e=>this._expansionModel?.select(...e))}collapseAll(){this.treeControl?this.treeControl.collapseAll():this._expansionModel&&this._forEachExpansionKey(e=>this._expansionModel?.deselect(...e))}_getLevelAccessor(){return this.treeControl?.getLevel?.bind(this.treeControl)??this.levelAccessor}_getChildrenAccessor(){return this.treeControl?.getChildren?.bind(this.treeControl)??this.childrenAccessor}_getDirectChildren(e){let t=this._getLevelAccessor(),i=this._expansionModel??this.treeControl?.expansionModel;if(!i)return Vt([]);let a=this._getExpansionKey(e),s=i.changed.pipe(Dn(p=>p.added.includes(a)?Vt(!0):p.removed.includes(a)?Vt(!1):eg),Di(this.isExpanded(e)));if(t)return mr([s,this._flattenedNodes]).pipe(Pt(([p,u])=>p?this._findChildrenByLevel(t,u,e,1):[]));let d=this._getChildrenAccessor();if(d)return YC(d(e)??[]);throw bH()}_findChildrenByLevel(e,t,i,a){let s=this._getExpansionKey(i),d=t.findIndex(C=>this._getExpansionKey(C)===s),p=e(i),u=p+a,g=[];for(let C=d+1;C<t.length;C++){let M=e(t[C]);if(M<=p)break;M<=u&&g.push(t[C])}return g}_registerNode(e){this._nodes.value.set(this._getExpansionKey(e.data),e),this._nodes.next(this._nodes.value)}_unregisterNode(e){this._nodes.value.delete(this._getExpansionKey(e.data)),this._nodes.next(this._nodes.value)}_getLevel(e){return this._levels.get(this._getExpansionKey(e))}_getSetSize(e){return this._getAriaSet(e).length}_getPositionInSet(e){let t=this._getAriaSet(e),i=this._getExpansionKey(e);return t.findIndex(a=>this._getExpansionKey(a)===i)+1}_getNodeParent(e){let t=this._parents.get(this._getExpansionKey(e.data));return t&&this._nodes.value.get(this._getExpansionKey(t))}_getNodeChildren(e){return this._getDirectChildren(e.data).pipe(Pt(t=>t.reduce((i,a)=>{let s=this._nodes.value.get(this._getExpansionKey(a));return s&&i.push(s),i},[])))}_sendKeydownToKeyManager(e){if(e.target===this._elementRef.nativeElement)this._keyManager.onKeydown(e);else{let t=this._nodes.getValue();for(let[,i]of t)if(e.target===i._elementRef.nativeElement){this._keyManager.onKeydown(e);break}}}_getDescendants(e){if(this.treeControl)return Vt(this.treeControl.getDescendants(e));if(this.levelAccessor){let t=this._findChildrenByLevel(this.levelAccessor,this._flattenedNodes.value,e,1/0);return Vt(t)}if(this.childrenAccessor)return this._getAllChildrenRecursively(e).pipe(Lk((t,i)=>(t.push(...i),t),[]));throw bH()}_getAllChildrenRecursively(e){return this.childrenAccessor?YC(this.childrenAccessor(e)).pipe(Gr(1),Dn(t=>{for(let i of t)this._parents.set(this._getExpansionKey(i),e);return Vt(...t).pipe(rf(i=>zk(Vt([i]),this._getAllChildrenRecursively(i))))})):Vt([])}_getExpansionKey(e){return this.expansionKey?.(e)??e}_getAriaSet(e){let t=this._getExpansionKey(e),i=this._parents.get(t),a=i?this._getExpansionKey(i):null;return this._ariaSets.get(a)??[e]}_findParentForNode(e,t,i){if(!i.length)return null;let a=this._levels.get(this._getExpansionKey(e))??0;for(let s=t-1;s>=0;s--){let d=i[s];if((this._levels.get(this._getExpansionKey(d))??0)<a)return d}return null}_flattenNestedNodesWithExpansion(e,t=0){let i=this._getChildrenAccessor();return i?Vt(...e).pipe(rf(a=>{let s=this._getExpansionKey(a);this._parents.has(s)||this._parents.set(s,null),this._levels.set(s,t);let d=YC(i(a));return zk(Vt([a]),d.pipe(Gr(1),Qn(p=>{this._ariaSets.set(s,[...p??[]]);for(let u of p??[]){let g=this._getExpansionKey(u);this._parents.set(g,a),this._levels.set(g,t+1)}}),Dn(p=>p?this._flattenNestedNodesWithExpansion(p,t+1).pipe(Pt(u=>this.isExpanded(a)?u:[])):Vt([]))))}),Lk((a,s)=>(a.push(...s),a),[])):Vt([...e])}_computeRenderingData(e,t){if(this.childrenAccessor&&t==="flat")return this._clearPreviousCache(),this._ariaSets.set(null,[...e]),this._flattenNestedNodesWithExpansion(e).pipe(Pt(i=>({renderNodes:i,flattenedNodes:i})));if(this.levelAccessor&&t==="nested"){let i=this.levelAccessor;return Vt(e.filter(a=>i(a)===0)).pipe(Pt(a=>({renderNodes:a,flattenedNodes:e})),Qn(({flattenedNodes:a})=>{this._calculateParents(a)}))}else return t==="flat"?Vt({renderNodes:e,flattenedNodes:e}).pipe(Qn(({flattenedNodes:i})=>{this._calculateParents(i)})):(this._clearPreviousCache(),this._ariaSets.set(null,[...e]),this._flattenNestedNodesWithExpansion(e).pipe(Pt(i=>({renderNodes:e,flattenedNodes:i}))))}_updateCachedData(e){this._flattenedNodes.next(e)}_updateKeyManagerItems(e){this._keyManagerNodes.next(e)}_calculateParents(e){let t=this._getLevelAccessor();if(t){this._clearPreviousCache();for(let i=0;i<e.length;i++){let a=e[i],s=this._getExpansionKey(a);this._levels.set(s,t(a));let d=this._findParentForNode(a,i,e);this._parents.set(s,d);let p=d?this._getExpansionKey(d):null,u=this._ariaSets.get(p)??[];u.splice(i,0,a),this._ariaSets.set(p,u)}}}_forEachExpansionKey(e){let t=[],i=[];this._nodes.value.forEach(a=>{t.push(this._getExpansionKey(a.data)),i.push(this._getDescendants(a.data))}),i.length>0?mr(i).pipe(Gr(1),He(this._onDestroy)).subscribe(a=>{a.forEach(s=>s.forEach(d=>t.push(this._getExpansionKey(d)))),e(t)}):e(t)}_clearPreviousCache(){this._parents.clear(),this._levels.clear(),this._ariaSets.clear()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["cdk-tree"]],contentQueries:function(t,i,a){if(t&1&&Zi(a,xk,5),t&2){let s;gt(s=ht())&&(i._nodeDefs=s)}},viewQuery:function(t,i){if(t&1&&Kn(Y_,7),t&2){let a;gt(a=ht())&&(i._nodeOutlet=a.first)}},hostAttrs:["role","tree",1,"cdk-tree"],hostBindings:function(t,i){t&1&&_("keydown",function(s){return i._sendKeydownToKeyManager(s)})},inputs:{dataSource:"dataSource",treeControl:"treeControl",levelAccessor:"levelAccessor",childrenAccessor:"childrenAccessor",trackBy:"trackBy",expansionKey:"expansionKey"},exportAs:["cdkTree"],decls:1,vars:0,consts:[["cdkTreeNodeOutlet",""]],template:function(t,i){t&1&&li(0,0)},dependencies:[Y_],encapsulation:2})}return n})(),Z_=(()=>{class n{_elementRef=f(Kt);_tree=f(kC);_tabindex=-1;_type="flat";get role(){return"treeitem"}set role(e){}get isExpandable(){return this._isExpandable()}set isExpandable(e){this._inputIsExpandable=e,!(this.data&&!this._isExpandable||!this._inputIsExpandable)&&(this._inputIsExpanded?this.expand():this._inputIsExpanded===!1&&this.collapse())}get isExpanded(){return this._tree.isExpanded(this._data)}set isExpanded(e){this._inputIsExpanded=e,e?this.expand():this.collapse()}isDisabled=!1;typeaheadLabel=null;getLabel(){return this.typeaheadLabel||this._elementRef.nativeElement.textContent?.trim()||""}activation=new be;expandedChange=new be;static mostRecentTreeNode=null;_destroyed=new Ye;_dataChanges=new Ye;_inputIsExpandable=!1;_inputIsExpanded=void 0;_shouldFocus=!0;_parentNodeAriaLevel;get data(){return this._data}set data(e){e!==this._data&&(this._data=e,this._dataChanges.next())}_data;get isLeafNode(){return this._tree.treeControl?.isExpandable!==void 0&&!this._tree.treeControl.isExpandable(this._data)?!0:this._tree.treeControl?.isExpandable===void 0&&this._tree.treeControl?.getDescendants(this._data).length===0}get level(){return this._tree._getLevel(this._data)??this._parentNodeAriaLevel}_isExpandable(){return this._tree.treeControl?!this.isLeafNode:this._inputIsExpandable}_getAriaExpanded(){return this._isExpandable()?String(this.isExpanded):null}_getSetSize(){return this._tree._getSetSize(this._data)}_getPositionInSet(){return this._tree._getPositionInSet(this._data)}_changeDetectorRef=f(oe);constructor(){n.mostRecentTreeNode=this}ngOnInit(){this._parentNodeAriaLevel=lje(this._elementRef.nativeElement),this._tree._getExpansionModel().changed.pipe(Pt(()=>this.isExpanded),ng(),He(this._destroyed)).pipe(He(this._destroyed)).subscribe(()=>this._changeDetectorRef.markForCheck()),this._tree._setNodeTypeIfUnset(this._type),this._tree._registerNode(this)}ngOnDestroy(){n.mostRecentTreeNode===this&&(n.mostRecentTreeNode=null),this._dataChanges.complete(),this._destroyed.next(),this._destroyed.complete()}getParent(){return this._tree._getNodeParent(this)??null}getChildren(){return this._tree._getNodeChildren(this)}focus(){this._tabindex=0,this._shouldFocus&&this._elementRef.nativeElement.focus(),this._changeDetectorRef.markForCheck()}unfocus(){this._tabindex=-1,this._changeDetectorRef.markForCheck()}activate(){this.isDisabled||this.activation.next(this._data)}collapse(){this.isExpandable&&this._tree.collapse(this._data)}expand(){this.isExpandable&&this._tree.expand(this._data)}makeFocusable(){this._tabindex=0,this._changeDetectorRef.markForCheck()}_focusItem(){this.isDisabled||this._tree._keyManager.focusItem(this)}_setActiveItem(){this.isDisabled||(this._shouldFocus=!1,this._tree._keyManager.focusItem(this),this._shouldFocus=!0)}_emitExpansionState(e){this.expandedChange.emit(e)}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["cdk-tree-node"]],hostAttrs:["role","treeitem",1,"cdk-tree-node"],hostVars:5,hostBindings:function(t,i){t&1&&_("click",function(){return i._setActiveItem()})("focus",function(){return i._focusItem()}),t&2&&(pr("tabIndex",i._tabindex),Ce("aria-expanded",i._getAriaExpanded())("aria-level",i.level+1)("aria-posinset",i._getPositionInSet())("aria-setsize",i._getSetSize()))},inputs:{role:"role",isExpandable:[2,"isExpandable","isExpandable",zt],isExpanded:"isExpanded",isDisabled:[2,"isDisabled","isDisabled",zt],typeaheadLabel:[0,"cdkTreeNodeTypeaheadLabel","typeaheadLabel"]},outputs:{activation:"activation",expandedChange:"expandedChange"},exportAs:["cdkTreeNode"]})}return n})();function lje(n){let o=n.parentElement;for(;o&&!cje(o);)o=o.parentElement;return o?o.classList.contains("cdk-nested-tree-node")?qo(o.getAttribute("aria-level")):0:-1}function cje(n){let o=n.classList;return!!(o?.contains("cdk-nested-tree-node")||o?.contains("cdk-tree"))}var Y4=(()=>{class n extends Z_{_type="nested";_differs=f(Sd);_dataDiffer;_children;nodeOutlet;constructor(){super()}ngAfterContentInit(){this._dataDiffer=this._differs.find([]).create(this._tree.trackBy),this._tree._getDirectChildren(this.data).pipe(He(this._destroyed)).subscribe(e=>this.updateChildrenNodes(e)),this.nodeOutlet.changes.pipe(He(this._destroyed)).subscribe(()=>this.updateChildrenNodes())}ngOnDestroy(){this._clear(),super.ngOnDestroy()}updateChildrenNodes(e){let t=this._getNodeOutlet();if(e&&(this._children=e),t&&this._children){let i=t.viewContainer;this._tree.renderNodeChanges(this._children,this._dataDiffer,i,this._data)}else this._dataDiffer.diff([])}_clear(){let e=this._getNodeOutlet();e&&(e.viewContainer.clear(),this._dataDiffer.diff([]))}_getNodeOutlet(){let e=this.nodeOutlet;return e&&e.find(t=>!t._node||t._node===this)}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["cdk-nested-tree-node"]],contentQueries:function(t,i,a){if(t&1&&Zi(a,Y_,5),t&2){let s;gt(s=ht())&&(i.nodeOutlet=s)}},hostAttrs:[1,"cdk-nested-tree-node"],exportAs:["cdkNestedTreeNode"],features:[un([{provide:Z_,useExisting:n},{provide:X4,useExisting:n}]),mi]})}return n})();var Z4=(()=>{class n{_tree=f(kC);_treeNode=f(Z_);recursive=!1;constructor(){}_toggle(e){e.stopPropagation(),this.recursive?this._tree.toggleDescendants(this._treeNode.data):this._tree.toggle(this._treeNode.data),this._tree._keyManager.focusItem(this._treeNode)}static \u0275fac=function(t){return new(t||n)};static \u0275dir=yt({type:n,selectors:[["","cdkTreeNodeToggle",""]],hostAttrs:["tabindex","-1"],hostBindings:function(t,i){t&1&&_("click",function(s){return i._toggle(s)})("keydown.Enter",function(s){return i._toggle(s),s.preventDefault()})("keydown.Space",function(s){return i._toggle(s),s.preventDefault()})},inputs:{recursive:[2,"cdkTreeNodeToggleRecursive","recursive",zt]}})}return n})();var J_=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=on({type:n});static \u0275inj=nn({})}return n})();var yk=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=on({type:n});static \u0275inj=nn({imports:[J_,Vi]})}return n})();var ef=(function(n){return n.group="group",n.user="user",n})(ef||{});var Zl=(()=>{class n{httpController;projectService;constructor(e,t){this.httpController=e,this.projectService=t}getAll(e){return this.httpController.get(e,"/pools")}get(e,t){return Ci([this.httpController.get(e,`/pools/${t}`),this.httpController.get(e,`/pools/${t}/resources`)]).pipe(Pt(i=>(i[0].resources=i[1],i[0])))}delete(e,t){return this.httpController.delete(e,`/pools/${t}`)}add(e,t){return this.httpController.post(e,"/pools",{name:t})}update(e,t){return this.httpController.put(e,`/pools/${t.resource_pool_id}`,{name:t.name})}addResource(e,t,i){return this.httpController.put(e,`/pools/${t.resource_pool_id}/resources/${i.project_id}`,{})}deleteResource(e,t,i){return this.httpController.delete(e,`/pools/${i.resource_pool_id}/resources/${t.resource_id}`)}getFreeResources(e){return this.projectService.list(e).pipe(Dn(t=>this.getAllNonFreeResources(e).pipe(Pt(i=>i.map(a=>a.resource_id)),Pt(i=>t.filter(a=>!i.includes(a.project_id))))))}getAllNonFreeResources(e){return this.getAll(e).pipe(Dn(t=>Ci(t.map(i=>this.httpController.get(e,`/pools/${i.resource_pool_id}/resources`)))),Pt(t=>{let i=[];for(let a of t)for(let s of a)i.push(s);return i}))}static \u0275fac=function(t){return new(t||n)(_e(sn),_e(Ti))};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var wk=class{endpoints;constructor(o){this.endpoints=o}buildTreeFromEndpoints(){let o=[],e=[];return this.endpoints.forEach(t=>{let i=this.extractParent(t);e.push(i)}),e.forEach(t=>{t.depth>0&&e.filter(a=>a.splitEndp.join("/")==t.splitEndp.slice(0,t.depth-1).join("/"))[0].children.push(t)}),o.push(e.find(t=>t.depth===0)),o}extractParent(o){let e=o.endpoint.split("/");e=e.filter(a=>a!==""&&a!=="access");let t=[];return e.length>0&&(t=e.slice(0,e.length-1)),{children:[],depth:e.length,splitEndp:e,endpoint:o.endpoint,endpoint_type:o.endpoint_type,name:o.name,parent:t}}};var pje=["userTrigger"],uje=["groupTrigger"],gje=["roleTrigger"],hje=(n,o)=>o.role_id,_je=(n,o)=>o.resource_pool_id,fje=(n,o)=>o.user_id,vje=(n,o)=>o.name;function Cje(n,o){if(n&1){let e=R();r(0,"cdk-nested-tree-node",32)(1,"div"),L(2,"button",33),c(3),r(4,"button",34),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.endpointSelection(i))}),r(5,"mat-icon"),c(6),l()()()()}if(n&2){let e=o.$implicit,t=h(2);m(),ne("selected",t.selectedEndpoint&&e.endpoint===t.selectedEndpoint.endpoint),m(2),X(" ",e.name," "),m(3),N(t.selectedEndpoint&&e.endpoint===t.selectedEndpoint.endpoint?"check_circle":"panorama_fish_eye")}}function bje(n,o){if(n&1){let e=R();r(0,"cdk-nested-tree-node",32)(1,"div")(2,"button",35)(3,"mat-icon",36),c(4),l()(),c(5),r(6,"button",34),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.endpointSelection(i))}),r(7,"mat-icon"),c(8),l()()(),r(9,"div"),li(10,37),l()()}if(n&2){let e=o.$implicit,t=h(2);m(),ne("selected",t.selectedEndpoint&&e.endpoint===t.selectedEndpoint.endpoint),m(),Ce("aria-label","Toggle "+e.name),m(2),X(" ",t.treeControl.isExpanded(e)?"expand_more":"chevron_right"," "),m(),X(" ",e.name," "),m(3),N(t.selectedEndpoint&&e.endpoint===t.selectedEndpoint.endpoint?"check_circle":"panorama_fish_eye"),m(),ne("example-tree-invisible",!t.treeControl.isExpanded(e))}}function xje(n,o){if(n&1&&(r(0,"cdk-tree",12),se(1,Cje,7,4,"cdk-nested-tree-node",30)(2,bje,11,8,"cdk-nested-tree-node",31),l()),n&2){let e=h();v("dataSource",e.treeDataSource)("treeControl",e.treeControl),m(2),v("cdkTreeNodeDefWhen",e.hasChild)}}function yje(n,o){n&1&&(r(0,"mat-icon",42),c(1,"check_circle"),l())}function wje(n,o){n&1&&(r(0,"mat-icon",43),c(1,"panorama_fish_eye"),l())}function Mje(n,o){if(n&1){let e=R();r(0,"div",39),_("click",function(){let i=y(e).$implicit,a=h(2);return w(a.resourcePoolSelection(i))}),r(1,"mat-icon",40),c(2,"folder"),l(),r(3,"span",41),c(4),l(),T(5,yje,2,0,"mat-icon",42)(6,wje,2,0,"mat-icon",43),l()}if(n&2){let e=o.$implicit,t=h(2);ne("selected",t.selectedResourcePool&&t.selectedResourcePool.resource_pool_id===e.resource_pool_id),m(4),N(e.name),m(),E(t.selectedResourcePool&&t.selectedResourcePool.resource_pool_id===e.resource_pool_id?5:6)}}function Sje(n,o){if(n&1&&(r(0,"div",13),Q(1,Mje,7,4,"div",38,_je),l()),n&2){let e=h();m(),K(e.resourcePools)}}function kje(n,o){if(n&1&&(r(0,"mat-option",18),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e.charAt(0).toUpperCase()+e.slice(1))}}function Pje(n,o){if(n&1&&(r(0,"mat-option",18),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),Un(" ",e.username,"",e.full_name?" - "+e.full_name:""," ")}}function Tje(n,o){if(n&1){let e=R();r(0,"mat-form-field",16)(1,"mat-label"),c(2,"User"),l(),r(3,"input",19,2),_("click",function(){y(e);let i=h();return w(i.openUserPanel())}),l(),r(5,"mat-autocomplete",20,3),_("optionSelected",function(i){y(e);let a=h();return w(a.userSelection(i.option.value))}),Q(7,Pje,2,3,"mat-option",18,fje),Et(9,"async"),l()()}if(n&2){let e=Te(6),t=h();m(3),v("matAutocomplete",e)("formControl",t.userAutocompleteControl),m(2),v("displayWith",t.displayFnUser),m(2),K(gn(9,3,t.filteredUsers))}}function Eje(n,o){if(n&1&&(r(0,"mat-option",18),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e.name)}}function Oje(n,o){if(n&1){let e=R();r(0,"mat-form-field",16)(1,"mat-label"),c(2,"Group"),l(),r(3,"input",19,4),_("click",function(){y(e);let i=h();return w(i.openGroupPanel())}),l(),r(5,"mat-autocomplete",20,5),_("optionSelected",function(i){y(e);let a=h();return w(a.groupSelection(i.option.value))}),Q(7,Eje,2,2,"mat-option",18,vje),Et(9,"async"),l()()}if(n&2){let e=Te(6),t=h();m(3),v("matAutocomplete",e)("formControl",t.groupAutocompleteControl),m(2),v("displayWith",t.displayFn),m(2),K(gn(9,3,t.filteredGroups))}}function Dje(n,o){if(n&1&&(r(0,"mat-option",18),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),N(e.name)}}var Mk=(()=>{class n{data;dialogRef=f(We);aclService=f(Ap);userService=f(ba);groupService=f(Xl);roleService=f(Yl);resourcePoolsService=f(Zl);toasterService=f(re);cd=f(oe);controller;addAceForm;allowed=!0;types=Object.values(ef);resourcePools=[];selectedResourcePool;showResourcePools=!1;userAutoTrigger;groupAutoTrigger;roleAutoTrigger;endpoints;selectedEndpoint;filteredEndpoint=[];endpointTypes;userAutocompleteControl=new Ge;groupAutocompleteControl=new Ge;roleAutocompleteControl=new Ge;filteredUsers;filteredGroups;filteredRoles;groups=[];selectedGroup;users=[];selectedUser;roles=[];selectedRole;TREE_DATA=[];treeControl=new bk(e=>e.children);treeDataSource;constructor(e){this.data=e,this.endpoints=e.endpoints;let i=new wk(this.endpoints).buildTreeFromEndpoints();this.treeDataSource=new IA(i),console.log(i)}ngOnInit(){this.addAceForm=new Qo({type:new Ge(ef.user),role_id:new Ge,propagate:new Ge(!0)}),this.addAceForm.get("type").valueChanges.subscribe(()=>{this.selectedUser=null,this.selectedGroup=null,this.userAutocompleteControl.reset(),this.groupAutocompleteControl.reset()}),this.resourcePoolsService.getAll(this.controller).subscribe({next:e=>{this.resourcePools=e,this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load resource pools";this.toasterService.error(t),this.cd.markForCheck()}}),this.groupService.getGroups(this.controller).subscribe({next:e=>{this.groups=e,this.filteredGroups=this.groupAutocompleteControl.valueChanges.pipe(Di(""),Pt(t=>this._filter(t,e))),this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load groups";this.toasterService.error(t),this.cd.markForCheck()}}),this.userService.list(this.controller).subscribe({next:e=>{this.users=e,this.filteredUsers=this.userAutocompleteControl.valueChanges.pipe(Di(""),Pt(t=>this._filterUser(t,e))),this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load users";this.toasterService.error(t),this.cd.markForCheck()}}),this.roleService.get(this.controller).subscribe({next:e=>{this.roles=e,this.filteredRoles=this.roleAutocompleteControl.valueChanges.pipe(Di(""),Pt(t=>this._filterRole(t,e))),this.cd.markForCheck()},error:e=>{let t=e.error?.message||e.message||"Failed to load roles";this.toasterService.error(t),this.cd.markForCheck()}})}get form(){return this.addAceForm.controls}onCancelClick(){this.dialogRef.close()}onAddClick(){if(!this.selectedEndpoint&&!this.selectedResourcePool){this.toasterService.error("Please select an endpoint or a resource pool");return}if(!this.selectedRole){this.toasterService.error("Please select a role");return}if(!this.selectedUser&&!this.selectedGroup){this.toasterService.error("Please select a user or group");return}let e={ace_type:this.form.type.value,allowed:this.allowed,group_id:this.form.type.value===ef.group?this.selectedGroup.user_group_id:null,path:this.selectedEndpoint?this.selectedEndpoint.endpoint:`/pools/${this.selectedResourcePool.resource_pool_id}`,propagate:this.form.propagate.value,role_id:this.selectedRole.role_id,user_id:this.form.type.value===ef.user?this.selectedUser.user_id:null};e.path&&e.role_id&&(e.user_id||e.group_id)&&(this.aclService.add(this.controller,e).subscribe({next:t=>{this.toasterService.success(`ACE was added for path ${e.path}`)},error:t=>{let i=t.error?.message||t.message||"Failed to create ACE";this.toasterService.error(i),this.cd.markForCheck()}}),this.dialogRef.close())}changeAllowed(){this.allowed=!this.allowed}displayFn(e){return e&&e.name?e.name:""}displayFnUser(e){return!e||!e.username?"":e.full_name?e.username.concat(" - ",e.full_name):e.username}_filter(e,t){let i=typeof e=="string"?e.toLowerCase():"";return t?t.filter(a=>a.name.toLowerCase().includes(i)):[]}_filterUser(e,t){let i=typeof e=="string"?e.toLowerCase():"";return t?t.filter(a=>(a.full_name?.toLowerCase().includes(i)??!1)||a.username.toLowerCase().includes(i)):[]}_filterRole(e,t){let i=typeof e=="string"?e.toLowerCase():"";return t?t.filter(a=>a.name.toLowerCase().includes(i)):[]}userSelection(e){this.selectedUser=e,this.userAutocompleteControl.setValue(e)}groupSelection(e){this.selectedGroup=e,this.groupAutocompleteControl.setValue(e)}roleSelection(e){this.selectedRole=e,this.roleAutocompleteControl.setValue(e)}openUserPanel(){this.userAutocompleteControl.setValue(""),this.userAutoTrigger&&this.userAutoTrigger.openPanel()}openGroupPanel(){this.groupAutocompleteControl.setValue(""),this.groupAutoTrigger&&this.groupAutoTrigger.openPanel()}openRolePanel(){this.roleAutocompleteControl.setValue(""),this.roleAutoTrigger&&this.roleAutoTrigger.openPanel()}endpointSelection(e){if(this.selectedEndpoint&&this.selectedEndpoint.endpoint===e.endpoint)this.selectedEndpoint=null;else{let t={endpoint:e.endpoint,endpoint_type:e.endpoint_type,name:e.name};this.selectedEndpoint=t,this.selectedResourcePool=null}}hasChild=(e,t)=>!!t.children&&t.children.length>0;toggleResourcePoolsView(){this.showResourcePools=!this.showResourcePools,this.showResourcePools?this.selectedEndpoint=null:this.selectedResourcePool=null}resourcePoolSelection(e){this.selectedResourcePool&&this.selectedResourcePool.resource_pool_id===e.resource_pool_id?this.selectedResourcePool=null:(this.selectedResourcePool=e,this.selectedEndpoint=null)}static \u0275fac=function(t){return new(t||n)(Mt(Wt))};static \u0275cmp=V({type:n,selectors:[["app-add-ace-dialog"]],viewQuery:function(t,i){if(t&1&&Kn(pje,5,ho)(uje,5,ho)(gje,5,ho),t&2){let a;gt(a=ht())&&(i.userAutoTrigger=a.first),gt(a=ht())&&(i.groupAutoTrigger=a.first),gt(a=ht())&&(i.roleAutoTrigger=a.first)}},decls:44,vars:21,consts:[["roleTrigger","matAutocompleteTrigger"],["roleAuto","matAutocomplete"],["userTrigger","matAutocompleteTrigger"],["userAuto","matAutocomplete"],["groupTrigger","matAutocompleteTrigger"],["groupAuto","matAutocomplete"],["mat-dialog-title",""],[1,"ace-form",3,"formGroup"],[1,"ace-form__tree-panel"],[1,"ace-form__toggle-buttons"],["mat-button","","matTooltip","All endpoints",3,"click"],["mat-button","","matTooltip","Resource pools",3,"click"],[3,"dataSource","treeControl"],[1,"ace-form__resource-pools"],[1,"ace-form__divider",3,"vertical"],[1,"ace-form__selection-panel"],["appearance","outline","subscriptSizing","dynamic"],["formControlName","type"],[3,"value"],["type","text","matInput","",3,"click","matAutocomplete","formControl"],[3,"optionSelected","displayWith"],[1,"ace-form__checkbox-row"],[1,"ace-form__checkbox-left"],["formControlName","propagate"],[1,"ace-form__divider-vertical",3,"vertical"],[1,"ace-form__checkbox-right"],["mat-button","",1,"ace-form__action-btn",3,"click"],["mat-dialog-actions","",1,"ace-form__actions"],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click","disabled"],["class","ace-form__tree-node",4,"cdkTreeNodeDef"],["class","ace-form__tree-node",4,"cdkTreeNodeDef","cdkTreeNodeDefWhen"],[1,"ace-form__tree-node"],["mat-icon-button","","disabled",""],["mat-icon-button","",3,"click"],["mat-icon-button","","cdkTreeNodeToggle",""],[1,"mat-icon-rtl-mirror"],["cdkTreeNodeOutlet",""],[1,"ace-form__pool-item",3,"selected"],[1,"ace-form__pool-item",3,"click"],[1,"pool-icon"],[1,"pool-name"],[1,"check-icon"],[1,"select-icon"]],template:function(t,i){if(t&1&&(r(0,"h1",6),c(1,"Create new ACE"),l(),r(2,"form",7)(3,"div",8)(4,"div",9)(5,"button",10),_("click",function(){return i.showResourcePools=!1}),c(6," All Endpoints "),l(),r(7,"button",11),_("click",function(){return i.showResourcePools=!0}),c(8," Resource Pools "),l()(),T(9,xje,3,3,"cdk-tree",12)(10,Sje,3,0,"div",13),l(),L(11,"mat-divider",14),r(12,"div",15)(13,"mat-form-field",16)(14,"mat-label"),c(15,"Type"),l(),r(16,"mat-select",17),Q(17,kje,2,2,"mat-option",18,Oe),l()(),T(19,Tje,10,5,"mat-form-field",16),T(20,Oje,10,5,"mat-form-field",16),r(21,"mat-form-field",16)(22,"mat-label"),c(23,"Role"),l(),r(24,"input",19,0),_("click",function(){return i.openRolePanel()}),l(),r(26,"mat-autocomplete",20,1),_("optionSelected",function(s){return i.roleSelection(s.option.value)}),Q(28,Dje,2,2,"mat-option",18,hje),Et(30,"async"),l()(),r(31,"div",21)(32,"div",22)(33,"mat-checkbox",23),c(34,"Propagate"),l()(),L(35,"mat-divider",24),r(36,"div",25)(37,"button",26),_("click",function(){return i.changeAllowed()}),c(38),l()()(),r(39,"div",27)(40,"button",28),_("click",function(){return i.onCancelClick()}),c(41,"Cancel"),l(),r(42,"button",29),_("click",function(){return i.onAddClick()}),c(43," Add ACE "),l()()()()),t&2){let a=Te(27);m(2),v("formGroup",i.addAceForm),m(3),ne("active",!i.showResourcePools),m(2),ne("active",i.showResourcePools),m(2),E(i.showResourcePools?10:9),m(2),v("vertical",!0),m(6),K(i.types),m(2),E(i.form.type.value==="user"?19:-1),m(),E(i.form.type.value==="group"?20:-1),m(4),v("matAutocomplete",a)("formControl",i.roleAutocompleteControl),m(2),v("displayWith",i.displayFn),m(2),K(gn(30,19,i.filteredRoles)),m(7),v("vertical",!0),m(2),ne("ace-form__action-btn--allow",i.allowed)("ace-form__action-btn--deny",!i.allowed),m(),X(" ",i.allowed?"ALLOWED":"DENY"," "),m(4),v("disabled",!i.addAceForm.valid)}},dependencies:[fe,It,Ct,At,Nt,vt,Tr,Ut,Yt,ke,qe,Qe,Y,he,Be,Rt,Gt,Ja,fs,we,Pe,Ve,ie,ce,st,pt,ye,Ee,ot,ct,nt,Jo,ha,ho,yk,J_,Y4,xk,Z4,kC,Y_,Pa],styles:["[_nghost-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%] mat-form-field[_ngcontent-%COMP%]{--mat-form-field-outlined-container-shape: var(--gns3-density-radius-sm)}[_nghost-%COMP%]{container:ace-dialog/inline-size}.ace-form[_ngcontent-%COMP%]{display:flex;width:100%;box-sizing:border-box;padding:var(--gns3-density-space-4)}.ace-form__tree-panel[_ngcontent-%COMP%]{flex:1;overflow-y:auto;min-width:0;max-height:400px;color:var(--mat-sys-on-surface);display:flex;flex-direction:column}.ace-form__toggle-buttons[_ngcontent-%COMP%]{display:flex;gap:8px;padding:8px;border-bottom:1px solid var(--mat-sys-outline-variant)}.ace-form__toggle-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex:1;font-size:13px;font-weight:500;opacity:.6;transition:opacity var(--gns3-motion-duration-standard)}.ace-form__toggle-buttons[_ngcontent-%COMP%] button.active[_ngcontent-%COMP%]{opacity:1;background-color:var(--mat-sys-secondary-container);color:var(--mat-sys-on-surface)}.ace-form__toggle-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{opacity:.8}.ace-form__resource-pools[_ngcontent-%COMP%]{padding:8px;overflow-y:auto;flex:1}.ace-form__pool-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:8px;cursor:pointer;transition:background-color var(--gns3-motion-duration-standard)}.ace-form__pool-item[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 8%,transparent)}.ace-form__pool-item.selected[_ngcontent-%COMP%]{background-color:var(--mat-sys-secondary-container)}.ace-form__pool-item[_ngcontent-%COMP%] .pool-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px;color:var(--mat-sys-primary)}.ace-form__pool-item[_ngcontent-%COMP%] .pool-name[_ngcontent-%COMP%]{flex:1;font-size:14px}.ace-form__pool-item[_ngcontent-%COMP%] .check-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px;color:var(--mat-sys-primary)}.ace-form__pool-item[_ngcontent-%COMP%] .select-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px;color:var(--mat-sys-outline)}.ace-form__divider[_ngcontent-%COMP%]{flex-shrink:0;margin:0 16px;height:auto;align-self:stretch}.ace-form__selection-panel[_ngcontent-%COMP%]{flex:0 0 280px;display:flex;flex-direction:column;gap:var(--gns3-density-space-4);min-width:0}.example-tree-invisible[_ngcontent-%COMP%]{display:none}.ace-form__tree-node[_ngcontent-%COMP%]{display:block}.ace-form__tree-node[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{line-height:32px}.ace-form__tree-node[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]{vertical-align:middle}.ace-form__tree-node[_ngcontent-%COMP%] .ace-form__tree-node[_ngcontent-%COMP%]{padding-left:40px}.ace-form__tree-node[_ngcontent-%COMP%] button.mat-mdc-icon-button[_ngcontent-%COMP%]{width:var(--gns3-density-control-height-sm);height:var(--gns3-density-control-height-sm);--mat-icon-button-state-layer-size: var(--gns3-density-control-height-sm);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-control-height-sm)}.ace-form__tree-node[_ngcontent-%COMP%] button.mat-mdc-icon-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}.ace-form__tree-node[_ngcontent-%COMP%] button.mat-mdc-icon-button[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle}.ace-form__tree-node[_ngcontent-%COMP%] button.mat-mdc-icon-button[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px}.selected[_ngcontent-%COMP%] button.mat-mdc-icon-button[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%]{color:var(--mat-sys-error)}.ace-form__checkbox-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;gap:8px}.ace-form__checkbox-left[_ngcontent-%COMP%]{flex:1}.ace-form__divider-vertical[_ngcontent-%COMP%]{height:auto;align-self:stretch}.ace-form__checkbox-right[_ngcontent-%COMP%]{flex:1;text-align:right}.ace-form__action-btn[_ngcontent-%COMP%]{min-width:80px}.ace-form__action-btn--allow[_ngcontent-%COMP%]{background-color:var(--custom-mat-sys-success);color:var(--custom-mat-sys-on-success)}.ace-form__action-btn--deny[_ngcontent-%COMP%]{background-color:var(--mat-sys-error);color:var(--mat-sys-on-error)}.ace-form__actions[_ngcontent-%COMP%]{margin-top:auto;padding-top:16px;display:flex;justify-content:flex-end;gap:8px}@container ace-dialog (max-width: 620px){.ace-form[_ngcontent-%COMP%]{flex-direction:column;gap:var(--gns3-density-space-4)}.ace-form__selection-panel[_ngcontent-%COMP%]{flex-basis:auto}.ace-form__divider[_ngcontent-%COMP%]{display:none}}"],changeDetection:0})}return n})();var xH=(()=>{class n{transform(e,t,i){if(!e)return[];if(!t)return e;t=t.toLowerCase();let a=i.filter(s=>s.name.toLowerCase().includes(t));return e.data.filter(s=>{let d=this.getEndpoint(s.user_id,i),p=this.getEndpoint(s.group_id,i),u=this.getEndpoint(s.path,i),g=this.getEndpoint(s.role_id,i);return a.some(C=>[d,p,u,g].includes(C.endpoint))})}getEndpoint(e,t){let i=t.filter(a=>a.endpoint.includes(e));return i.length>0?i[0].endpoint.toLowerCase():""}static \u0275fac=function(t){return new(t||n)};static \u0275pipe=qr({name:"aceFilter",type:n,pure:!0})}return n})();var Ije=["acesPaginator"],Aje=["acesSort"],Nje=()=>[5,10,20];function Fje(n,o){if(n&1){let e=R();r(0,"th",30)(1,"mat-checkbox",31),_("change",function(i){y(e);let a=h(2);return w(i?a.masterToggle():null)}),l()()}if(n&2){let e=h(2);m(),v("checked",e.selection.hasValue()&&e.isAllSelected())("indeterminate",e.selection.hasValue()&&!e.isAllSelected())}}function Rje(n,o){if(n&1){let e=R();r(0,"td",32)(1,"mat-checkbox",33),_("click",function(i){return i.stopPropagation()})("change",function(i){let a=y(e).$implicit,s=h(2);return w(i?s.selection.toggle(a):null)}),l()()}if(n&2){let e=o.$implicit,t=h(2);m(),v("checked",t.selection.isSelected(e))}}function zje(n,o){n&1&&(r(0,"th",34),c(1,"PATH"),l())}function Lje(n,o){if(n&1&&(r(0,"td",35)(1,"span",36),c(2),l()()),n&2){let e=o.$implicit,t=h(2);m(2),N(t.getNameByUuidFromEndpoint(e.path))}}function Vje(n,o){n&1&&(r(0,"th",34),c(1,"USER/GROUP"),l())}function Bje(n,o){if(n&1&&c(0),n&2){let e=h().$implicit,t=h(2);X(" ",t.getNameByUuidFromEndpoint(e.user_id)," ")}}function jje(n,o){if(n&1&&c(0),n&2){let e=h().$implicit,t=h(2);X(" ",t.getNameByUuidFromEndpoint(e.group_id)," ")}}function $je(n,o){if(n&1&&(r(0,"td",35)(1,"span",36),T(2,Bje,1,1)(3,jje,1,1),l()()),n&2){let e=o.$implicit;m(2),E(e.ace_type==="user"?2:3)}}function Hje(n,o){n&1&&(r(0,"th",34),c(1,"ROLE"),l())}function Uje(n,o){if(n&1&&(r(0,"td",35)(1,"span",36),c(2),l()()),n&2){let e=o.$implicit,t=h(2);m(2),N(t.getNameByUuidFromEndpoint(e.role_id))}}function Wje(n,o){n&1&&(r(0,"th",34),c(1,"PROPAGATE"),l())}function Gje(n,o){if(n&1&&(r(0,"td",35),c(1),l()),n&2){let e=o.$implicit;m(),N(e.propagate)}}function qje(n,o){n&1&&(r(0,"th",34),c(1,"ALLOWED"),l())}function Qje(n,o){if(n&1&&(r(0,"td",35),c(1),l()),n&2){let e=o.$implicit;m(),N(e.allowed)}}function Kje(n,o){n&1&&(r(0,"th",34),c(1,"CREATED"),l())}function Xje(n,o){if(n&1&&(r(0,"td",35)(1,"span",36),c(2),l()()),n&2){let e=o.$implicit;m(2),N(e.created_at)}}function Yje(n,o){n&1&&(r(0,"th",34),c(1,"LAST UPDATE"),l())}function Zje(n,o){if(n&1&&(r(0,"td",35)(1,"span",36),c(2),l()()),n&2){let e=o.$implicit;m(2),N(e.updated_at)}}function Jje(n,o){n&1&&L(0,"tr",37)}function e$e(n,o){n&1&&L(0,"tr",38)}function t$e(n,o){if(n&1){let e=R();r(0,"header",3)(1,"h1",4),c(2,"Access Control List (ACL)"),l()(),r(3,"div",5)(4,"form",6)(5,"mat-form-field",7)(6,"mat-icon",8),c(7,"search"),l(),r(8,"input",9),_("input",function(i){y(e);let a=h();return w(a.searchText.set(i.target.value))}),l()()(),r(9,"div",10)(10,"button",11),_("click",function(){y(e);let i=h();return w(i.deleteMultiple())}),c(11," Delete selected "),l(),r(12,"button",12),_("click",function(){y(e);let i=h();return w(i.addACE())}),c(13," Add ACE "),l()()(),r(14,"div",13)(15,"table",14,0),Et(17,"aceFilter"),Fe(18,15),se(19,Fje,2,2,"th",16)(20,Rje,2,1,"td",17),Re(),Fe(21,18),se(22,zje,2,0,"th",19)(23,Lje,3,1,"td",20),Re(),Fe(24,21),se(25,Vje,2,0,"th",19)(26,$je,4,1,"td",20),Re(),Fe(27,22),se(28,Hje,2,0,"th",19)(29,Uje,3,1,"td",20),Re(),Fe(30,23),se(31,Wje,2,0,"th",19)(32,Gje,2,1,"td",20),Re(),Fe(33,24),se(34,qje,2,0,"th",19)(35,Qje,2,1,"td",20),Re(),Fe(36,25),se(37,Kje,2,0,"th",19)(38,Xje,3,1,"td",20),Re(),Fe(39,26),se(40,Yje,2,0,"th",19)(41,Zje,3,1,"td",20),Re(),se(42,Jje,1,0,"tr",27)(43,e$e,1,0,"tr",28),l(),L(44,"mat-paginator",29,1),l()}if(n&2){let e=h();m(8),v("value",e.searchText()),m(2),v("disabled",e.selection.selected.length===0),m(5),v("dataSource",gA(17,6,e.dataSource,e.searchText(),e.endpoints())),m(27),v("matHeaderRowDef",e.displayedColumns),m(),v("matRowDefColumns",e.displayedColumns),m(),v("pageSizeOptions",at(10,Nje))}}function n$e(n,o){n&1&&(r(0,"div",2),L(1,"mat-spinner",39),l())}var Sk=(()=>{class n{route=f($t);controllerService=f(_t);toasterService=f(re);aclService=f(Ap);resourcePoolsService=f(Zl);dialog=f(Xe);cdr=f(oe);acesPaginator;acesSort;controller;displayedColumns=["select","path","user/group","role","propagate","allowed","updated_at"];selection=new Yr(!0,[]);aces;dataSource=new Fr;isReady=z(!1);searchText=$("");endpoints=z([]);resourcePools=z([]);constructor(){}ngOnInit(){let e=this.route.parent.snapshot.paramMap.get("controller_id");this.controllerService.get(+e).then(t=>{this.controller=t,this.aclService.getEndpoints(this.controller).subscribe({next:i=>{this.endpoints.set(i),this.refresh()},error:i=>{let a=i.error?.message||i.message||"Failed to load endpoints";this.toasterService.error(a),this.cdr.markForCheck()}}),this.resourcePoolsService.getAll(t).subscribe({next:i=>{this.resourcePools.set(i)},error:i=>{let a=i.error?.message||i.message||"Failed to load resource pools";this.toasterService.error(a),this.cdr.markForCheck()}})})}ngAfterViewInit(){this.acesPaginator.changes.subscribe(e=>{this.dataSource.paginator=e.first}),this.acesSort.changes.subscribe(e=>{this.dataSource.sort=e.first}),this.dataSource.sortingDataAccessor=(e,t)=>{switch(t){case"path":case"user/group":case"role":return e[t]?e[t].toLowerCase():"";default:return e[t]}}}refresh(){this.aclService.list(this.controller).subscribe({next:e=>{this.isReady.set(!0),this.aces=e,this.dataSource.data=e,this.selection.clear()},error:e=>{let t=e.error?.message||e.message||"Failed to load ACL list";this.toasterService.error(t),this.cdr.markForCheck()}})}addACE(){let e=this.dialog.open(Mk,{panelClass:["base-dialog-panel","add-ace-dialog-panel","dialog-extra-large-panel"],autoFocus:!1,disableClose:!0,data:{endpoints:this.endpoints()}}),t=e.componentInstance;t.controller=this.controller,e.afterClosed().subscribe(()=>this.refresh())}onDelete(e){this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-danger-panel","dialog-small-panel"],autoFocus:".cancel-button",data:{title:"Delete access rule?",message:`The access rule for "${e.path}" will be permanently deleted.`,confirmButtonText:"Delete rule",tone:"danger"}}).afterClosed().subscribe(t=>{t&&this.aclService.delete(this.controller,e.ace_id).subscribe({next:()=>{this.toasterService.success("Access rule deleted."),this.refresh()},error:i=>{let a=i.error?.message||i.message||"Failed to delete ACE";this.toasterService.error(a),this.cdr.markForCheck()}})})}isAllSelected(){let e=this.selection.selected.length,t=this.aces.length;return e===t}masterToggle(){this.isAllSelected()?this.selection.clear():this.aces.forEach(e=>this.selection.select(e))}deleteMultiple(){let e=[...this.selection.selected];this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-danger-panel","dialog-small-panel"],autoFocus:".cancel-button",data:{title:"Delete access rules?",message:`${e.length} selected access rules will be permanently deleted.`,details:e.map(t=>t.path),confirmButtonText:"Delete rules",tone:"danger"}}).afterClosed().subscribe(t=>{if(t){let i=uo(e.length,a=>{a>0&&(this.toasterService.success(`${a} access ${a===1?"rule":"rules"} deleted.`),this.refresh())});e.forEach(a=>{this.aclService.delete(this.controller,a.ace_id).subscribe({next:()=>i.succeed(),error:s=>{i.fail();let d=s.error?.message||s.message||"Failed to delete ACE";this.toasterService.error(d),this.cdr.markForCheck()}})}),this.selection.clear()}})}getNameByUuidFromEndpoint(e){let t=e.match(/^\/pools\/(.+)$/);if(t){let i=t[1],a=this.resourcePools().find(s=>s.resource_pool_id===i);return a?`Resource pool "${a.name}"`:`Resource pool (${i.slice(0,8)}...)`}if(this.endpoints()){let i=this.endpoints().filter(a=>a.endpoint.includes(e));if(i.length>=1)return i[0].name}return e}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-acl-management"]],viewQuery:function(t,i){if(t&1&&Kn(Ije,5)(Aje,5),t&2){let a;gt(a=ht())&&(i.acesPaginator=a),gt(a=ht())&&(i.acesSort=a)}},inputs:{searchText:[1,"searchText"]},outputs:{searchText:"searchTextChange"},decls:2,vars:1,consts:[["acesSort","matSort"],["acesPaginator","matPaginator"],[1,"acl-management__loader"],[1,"acl-management__header"],[1,"acl-management__title"],[1,"acl-management__toolbar"],[1,"acl-management__search-form"],["appearance","fill","subscriptSizing","dynamic",1,"acl-management__search"],["matPrefix",""],["matInput","","aria-label","Search by path, user/group or role","placeholder","Search by path, user/group or role",3,"input","value"],[1,"acl-management__actions"],["mat-flat-button","",1,"acl-management__button","acl-management__button--destructive",3,"click","disabled"],["mat-raised-button","","color","primary","matTooltip","Add access control entry",1,"acl-management__button",3,"click"],[1,"acl-management__table-container"],["mat-table","","matSort","",3,"dataSource"],["matColumnDef","select"],["mat-header-cell","","class","acl-management__small-col",4,"matHeaderCellDef"],["mat-cell","","class","acl-management__small-col",4,"matCellDef"],["matColumnDef","path"],["mat-header-cell","","mat-sort-header","",4,"matHeaderCellDef"],["mat-cell","",4,"matCellDef"],["matColumnDef","user/group"],["matColumnDef","role"],["matColumnDef","propagate"],["matColumnDef","allowed"],["matColumnDef","created_at"],["matColumnDef","updated_at"],["mat-header-row","",4,"matHeaderRowDef"],["mat-row","",4,"matRowDef","matRowDefColumns"],["showFirstLastButtons","","aria-label","Select page",3,"pageSizeOptions"],["mat-header-cell","",1,"acl-management__small-col"],[3,"change","checked","indeterminate"],["mat-cell","",1,"acl-management__small-col"],[3,"click","change","checked"],["mat-header-cell","","mat-sort-header",""],["mat-cell",""],[1,"acl-management__overflow-text"],["mat-header-row",""],["mat-row",""],[1,"acl-management__spinner"]],template:function(t,i){t&1&&T(0,t$e,46,11)(1,n$e,2,0,"div",2),t&2&&E(i.isReady()?0:1)},dependencies:[fe,St,Ct,vt,Ji,vn,_n,bn,yn,kn,wn,xn,Pn,Mn,Sn,Tn,En,ea,_a,Ro,Aa,Rt,Gt,Y,he,ie,ce,st,pt,we,Pe,Bi,ye,Ee,ke,hn,xH],styles:["[_nghost-%COMP%]{display:block;width:100%}.acl-management__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:20px 0;animation:none}.acl-management__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.acl-management__actions[_ngcontent-%COMP%]{display:flex;gap:var(--gns3-density-space-3)}.acl-management__button[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing)}.acl-management__button--destructive[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-error);background-color:var(--mat-sys-error);--mat-button-filled-label-text-color: var(--mat-sys-on-error);--mat-button-filled-container-color: var(--mat-sys-error);--mat-button-filled-state-layer-color: var(--mat-sys-on-error)}.acl-management__toolbar[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--gns3-density-card-gap);container:search-toolbar/inline-size}.acl-management__toolbar[_ngcontent-%COMP%] .acl-management__search-form[_ngcontent-%COMP%]{flex:1 1 260px;min-width:0;max-width:none;margin:0}.acl-management__toolbar[_ngcontent-%COMP%] .acl-management__actions[_ngcontent-%COMP%]{display:flex;flex:0 1 auto;flex-wrap:wrap;align-items:center;gap:var(--gns3-density-space-3);min-width:0}@container search-toolbar (max-width: 640px){.acl-management__toolbar[_ngcontent-%COMP%] .acl-management__search-form[_ngcontent-%COMP%]{flex-basis:100%;width:100%}.acl-management__toolbar[_ngcontent-%COMP%] .acl-management__actions[_ngcontent-%COMP%]{width:100%}}.acl-management__toolbar[_ngcontent-%COMP%]{margin-bottom:var(--gns3-density-card-gap);animation:none}.acl-management__search[_ngcontent-%COMP%]{width:100%}.acl-management__table-container[_ngcontent-%COMP%]{border-radius:16px;width:100%;overflow:hidden;border-radius:var(--gns3-density-radius-lg);background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;animation:none;overflow-x:auto}.acl-management__table-container--hidden[_ngcontent-%COMP%]{display:none}.mat-mdc-table[_ngcontent-%COMP%]{width:100%}.mat-mdc-header-row[_ngcontent-%COMP%]{height:var(--mat-table-header-container-height)}.mat-mdc-row[_ngcontent-%COMP%]{height:var(--mat-table-row-item-container-height);transition:background-color var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard);cursor:default;position:relative}.mat-mdc-row[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 3%,transparent)}.mat-mdc-row[_ngcontent-%COMP%]:nth-child(2n){background-color:color-mix(in srgb,var(--mat-sys-on-surface) 1%,transparent)}.mat-mdc-row[_ngcontent-%COMP%]:nth-child(2n):hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 4%,transparent)}.mat-header-row[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%]{position:sticky;top:0;z-index:10;background:var(--mat-sys-surface-container-highest);box-shadow:inset 0 -2px var(--mat-sys-primary);--mat-sort-arrow-color: var(--mat-sys-primary)}.mat-header-row[_ngcontent-%COMP%] .mat-mdc-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] .mat-mdc-header-cell[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:13px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}.mat-mdc-header-cell[_ngcontent-%COMP%], .mat-mdc-cell[_ngcontent-%COMP%]{text-align:left;vertical-align:middle;padding:0 var(--gns3-density-space-4)}.mat-mdc-cell[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface)}.acl-management__overflow-text[_ngcontent-%COMP%]{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;padding-right:5px}.acl-management__small-col[_ngcontent-%COMP%]{width:60px;min-width:60px;text-align:center}.acl-management__loader[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;min-height:200px}.acl-management__spinner[_ngcontent-%COMP%]{width:48px;height:48px}mat-paginator[_ngcontent-%COMP%]{background:var(--mat-sys-surface);color:var(--mat-sys-on-surface)}@media(max-width:768px){.acl-management__header[_ngcontent-%COMP%]{flex-direction:column;align-items:flex-start;gap:16px;padding:16px 0}.acl-management__button[_ngcontent-%COMP%]{flex:1 1 auto}.mat-mdc-header-cell[_ngcontent-%COMP%], .mat-mdc-cell[_ngcontent-%COMP%]{padding:0 var(--gns3-density-space-3);font-size:13px}}button.acl-management__button.mat-mdc-raised-button[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-primary);background-color:var(--mat-sys-primary);--mat-button-protected-label-text-color: var(--mat-sys-on-primary);--mat-button-protected-container-color: var(--mat-sys-primary);--mat-button-protected-state-layer-color: var(--mat-sys-on-primary)}"],changeDetection:0})}return n})();var kk=(()=>{class n{get(e){return new RegExp(/[~`!#$%\^&*+=\[\]\\';,/{}|\\":<>\?]/).test(e.value)?{invalidName:!0}:null}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var yH=(n,o)=>e=>La(500).pipe(Dn(()=>o.getAll(n)),Pt(t=>t.find(i=>i.name===e.value)?{projectExist:!0}:null));function o$e(n,o){n&1&&(r(0,"mat-error"),c(1,"Resource pool name is required"),l())}function a$e(n,o){n&1&&(r(0,"mat-error"),c(1,"Resource pool name is incorrect"),l())}function r$e(n,o){n&1&&(r(0,"mat-error"),c(1,"Resource pool with this name exists"),l())}var Pk=(()=>{class n{data;poolNameValidator;dialogRef=f(We);formBuilder=f(Ai);resourcePoolsService=f(Zl);toasterService=f(re);cd=f(oe);poolNameForm;controller;constructor(e,t){this.data=e,this.poolNameValidator=t}ngOnInit(){this.controller=this.data.controller,this.poolNameForm=this.formBuilder.group({poolName:new Ge(null,[Ue.required,this.poolNameValidator.get],[yH(this.data.controller,this.resourcePoolsService)])}),this.cd.markForCheck()}onKeyDown(e){e.key==="Enter"&&this.onAddClick()}get form(){return this.poolNameForm.controls}onAddClick(){if(this.poolNameForm.invalid)return;let e=this.poolNameForm.controls.poolName.value;this.resourcePoolsService.add(this.controller,e).subscribe({next:t=>{this.dialogRef.close(!0)},error:t=>{let i=t.error?.message||t.message||"Failed to create resource pool";this.toasterService.error(i),this.cd.markForCheck()}})}onNoClick(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)(Mt(Wt),Mt(kk))};static \u0275cmp=V({type:n,selectors:[["app-add-resource-pool-dialog"]],features:[un([kk])],decls:16,vars:4,consts:[["mat-dialog-title",""],[3,"formGroup"],["mat-dialog-content",""],["appearance","outline","subscriptSizing","dynamic",1,"full-width-field"],["matInput","","type","text","formControlName","poolName","placeholder","Please enter a resource pool name",3,"keydown"],["mat-dialog-actions","","align","end"],["mat-button","","color","accent",3,"click"],["mat-button","","tabindex","2","mat-raised-button","","color","primary",3,"click"]],template:function(t,i){t&1&&(r(0,"h1",0),c(1,"Create new resource pool"),l(),r(2,"form",1)(3,"div",2)(4,"mat-form-field",3)(5,"mat-label"),c(6,"Resource pool name"),l(),r(7,"input",4),_("keydown",function(s){return i.onKeyDown(s)}),l(),T(8,o$e,2,0,"mat-error"),T(9,a$e,2,0,"mat-error"),T(10,r$e,2,0,"mat-error"),l()(),r(11,"div",5)(12,"button",6),_("click",function(){return i.onNoClick()}),c(13,"Cancel"),l(),r(14,"button",7),_("click",function(){return i.onAddClick()}),c(15,"Add resource pool"),l()()()),t&2&&(m(2),v("formGroup",i.poolNameForm),m(6),E(i.form.poolName!=null&&i.form.poolName.touched&&(i.form.poolName!=null&&i.form.poolName.errors)&&(i.form.poolName!=null&&i.form.poolName.errors.required)?8:-1),m(),E(i.form.poolName!=null&&i.form.poolName.errors&&(i.form.poolName!=null&&i.form.poolName.errors.invalidName)?9:-1),m(),E(i.form.poolName!=null&&i.form.poolName.errors&&(i.form.poolName!=null&&i.form.poolName.errors.projectExist)?10:-1))},dependencies:[fe,It,Ct,At,Nt,vt,Ut,Yt,ke,qe,Qe,bt,we,Pe,Ve,Wn,ye,Ee,Y,he],styles:[".full-width-field[_ngcontent-%COMP%]{width:100%}"],changeDetection:0})}return n})();var wH=(()=>{class n{transform(e,t){return t&&(t=t.trim().toLowerCase(),e.filter=t),e}static \u0275fac=function(t){return new(t||n)};static \u0275pipe=qr({name:"resourcePoolsFilter",type:n,pure:!0})}return n})();var s$e=["resourcePoolsPaginator"],l$e=["resourcePoolsSort"],c$e=()=>[5,10,20],d$e=(n,o)=>["/controller",n,"management","pools",o];function m$e(n,o){if(n&1){let e=R();r(0,"th",26)(1,"mat-checkbox",27),_("change",function(i){y(e);let a=h(2);return w(i?a.masterToggle():null)}),l()()}if(n&2){let e=h(2);m(),v("checked",e.selection.hasValue()&&e.isAllSelected())("indeterminate",e.selection.hasValue()&&!e.isAllSelected())}}function p$e(n,o){if(n&1){let e=R();r(0,"td",28)(1,"mat-checkbox",29),_("click",function(i){return i.stopPropagation()})("change",function(i){let a=y(e).$implicit,s=h(2);return w(i?s.selection.toggle(a):null)}),l()()}if(n&2){let e=o.$implicit,t=h(2);m(),v("checked",t.selection.isSelected(e))}}function u$e(n,o){n&1&&(r(0,"th",30),c(1,"NAME"),l())}function g$e(n,o){if(n&1&&(r(0,"td",31)(1,"a",32),c(2),l()()),n&2){let e=o.$implicit,t=h(2);m(),v("routerLink",Go(2,d$e,t.controller.id,e.resource_pool_id)),m(),X(" ",e.name," ")}}function h$e(n,o){n&1&&(r(0,"th",30),c(1,"CREATION DATE"),l())}function _$e(n,o){if(n&1&&(r(0,"td",31),c(1),l()),n&2){let e=o.$implicit;m(),N(e.created_at)}}function f$e(n,o){n&1&&(r(0,"th",30),c(1,"LAST UPDATE"),l())}function v$e(n,o){if(n&1&&(r(0,"td",31),c(1),l()),n&2){let e=o.$implicit;m(),N(e.updated_at)}}function C$e(n,o){n&1&&L(0,"tr",33)}function b$e(n,o){n&1&&L(0,"tr",34)}function x$e(n,o){if(n&1){let e=R();r(0,"header",3)(1,"h1",4),c(2,"Resource pools"),l()(),r(3,"div",5)(4,"form",6)(5,"mat-form-field",7)(6,"mat-icon",8),c(7,"search"),l(),r(8,"input",9),_("input",function(i){y(e);let a=h();return w(a.searchText.set(i.target.value))}),l()()(),r(9,"div",10)(10,"button",11),_("click",function(){y(e);let i=h();return w(i.onDelete(i.selection.selected))}),c(11," Delete selected "),l(),r(12,"button",12),_("click",function(){y(e);let i=h();return w(i.addResourcePool())}),c(13," Add resource pool "),l()()(),r(14,"div",13)(15,"table",14,0),Et(17,"resourcePoolsFilter"),Fe(18,15),se(19,m$e,2,2,"th",16)(20,p$e,2,1,"td",17),Re(),Fe(21,18),se(22,u$e,2,0,"th",19)(23,g$e,3,5,"td",20),Re(),Fe(24,21),se(25,h$e,2,0,"th",19)(26,_$e,2,1,"td",20),Re(),Fe(27,22),se(28,f$e,2,0,"th",19)(29,v$e,2,1,"td",20),Re(),se(30,C$e,1,0,"tr",23)(31,b$e,1,0,"tr",24),l(),L(32,"mat-paginator",25,1),l()}if(n&2){let e=h();m(8),v("value",e.searchText()),m(2),v("disabled",e.selection.selected.length===0),m(5),v("dataSource",Io(17,6,e.dataSource,e.searchText())),m(15),v("matHeaderRowDef",e.displayedColumns),m(),v("matRowDefColumns",e.displayedColumns),m(),v("pageSizeOptions",at(9,c$e))}}function y$e(n,o){n&1&&(r(0,"div",2),L(1,"mat-spinner",35),l())}var Tk=(()=>{class n{route=f($t);controllerService=f(_t);toasterService=f(re);resourcePoolsService=f(Zl);dialog=f(Xe);cd=f(oe);controller;resourcePoolsPaginator;resourcePoolsSort;displayedColumns=["select","name","created_at","updated_at"];selection=new Yr(!0,[]);resourcePools=z([]);dataSource=new Fr;searchText=$("");isReady=z(!1);constructor(){}ngOnInit(){let e=this.route.parent.snapshot.paramMap.get("controller_id");this.controllerService.get(+e).then(t=>{this.controller=t,this.refresh()},t=>{let i=t.error?.message||t.message||"Failed to load controller";this.toasterService.error(i),this.cd.markForCheck()})}ngAfterViewInit(){this.resourcePoolsPaginator.changes.subscribe(e=>{this.dataSource.paginator=e.first}),this.resourcePoolsSort.changes.subscribe(e=>{this.dataSource.sort=e.first}),this.dataSource.sortingDataAccessor=(e,t)=>t==="name"?e[t]?e[t].toLowerCase():"":e[t]}isAllSelected(){let e=this.selection.selected.length,t=this.resourcePools().length;return e===t}masterToggle(){this.isAllSelected()?this.selection.clear():this.resourcePools().forEach(e=>this.selection.select(e))}addResourcePool(){this.dialog.open(Pk,{panelClass:["base-dialog-panel","dialog-small-panel"],autoFocus:!1,disableClose:!0,data:{controller:this.controller}}).afterClosed().subscribe(e=>{e&&this.refresh()})}refresh(){this.resourcePoolsService.getAll(this.controller).subscribe({next:e=>{this.isReady.set(!0),this.resourcePools.set(e),this.dataSource.data=e,this.selection.clear()},error:e=>{let t=e.error?.message||e.message||"Failed to load resource pools";this.toasterService.error(t),this.cd.markForCheck()}})}onDelete(e){this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-danger-panel","dialog-small-panel"],autoFocus:".cancel-button",data:{title:e.length===1?"Delete resource pool?":"Delete resource pools?",message:`${e.length} selected ${e.length===1?"pool":"pools"} will be permanently deleted.`,details:e.map(t=>t.name),note:"This action cannot be undone.",confirmButtonText:e.length===1?"Delete pool":"Delete pools",tone:"danger"}}).afterClosed().subscribe(t=>{if(t){let i=e.map(a=>this.resourcePoolsService.delete(this.controller,a.resource_pool_id));Ci(i).subscribe({next:()=>{this.toasterService.success(`${e.length} resource ${e.length===1?"pool":"pools"} deleted.`),this.refresh()},error:a=>{let s=a.error?.message||a.message||"Failed to delete resource pool";this.toasterService.error(s),this.cd.markForCheck()}})}})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-resource-pools-management"]],viewQuery:function(t,i){if(t&1&&Kn(s$e,5)(l$e,5),t&2){let a;gt(a=ht())&&(i.resourcePoolsPaginator=a),gt(a=ht())&&(i.resourcePoolsSort=a)}},inputs:{searchText:[1,"searchText"]},outputs:{searchText:"searchTextChange"},decls:2,vars:1,consts:[["resourcePoolsSort","matSort"],["resourcePoolsPaginator","matPaginator"],[1,"resource-pools-management__loader"],[1,"resource-pools-management__header"],[1,"resource-pools-management__title"],[1,"resource-pools-management__toolbar"],[1,"resource-pools-management__search-form"],["appearance","fill","subscriptSizing","dynamic",1,"resource-pools-management__search"],["matPrefix",""],["matInput","","aria-label","Search resource pools by name","placeholder","Search resource pools by name",3,"input","value"],[1,"resource-pools-management__actions"],["mat-flat-button","",1,"resource-pools-management__button","resource-pools-management__button--destructive",3,"click","disabled"],["mat-raised-button","","color","primary",1,"resource-pools-management__button",3,"click"],[1,"resource-pools-management__table-container"],["mat-table","","matSort","",3,"dataSource"],["matColumnDef","select"],["mat-header-cell","","class","resource-pools-management__small-col",4,"matHeaderCellDef"],["mat-cell","","class","resource-pools-management__small-col",4,"matCellDef"],["matColumnDef","name"],["mat-header-cell","","mat-sort-header","",4,"matHeaderCellDef"],["mat-cell","",4,"matCellDef"],["matColumnDef","created_at"],["matColumnDef","updated_at"],["mat-header-row","",4,"matHeaderRowDef"],["mat-row","",4,"matRowDef","matRowDefColumns"],["showFirstLastButtons","","aria-label","Select page",3,"pageSizeOptions"],["mat-header-cell","",1,"resource-pools-management__small-col"],[3,"change","checked","indeterminate"],["mat-cell","",1,"resource-pools-management__small-col"],[3,"click","change","checked"],["mat-header-cell","","mat-sort-header",""],["mat-cell",""],[1,"resource-pools-management__link",3,"routerLink"],["mat-header-row",""],["mat-row",""],[1,"resource-pools-management__spinner"]],template:function(t,i){t&1&&T(0,x$e,34,10)(1,y$e,2,0,"div",2),t&2&&E(i.isReady()?0:1)},dependencies:[fe,St,Ct,vt,Ji,vn,Co,_n,bn,yn,kn,wn,xn,Pn,Mn,Sn,Tn,En,ea,_a,Ro,Aa,Rt,Gt,Y,he,ie,ce,we,Pe,Bi,ye,Ee,ke,rt,mt,wH],styles:['[_nghost-%COMP%]{display:block;width:100%}.resource-pools-management__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:20px 0;animation:none}.resource-pools-management__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.resource-pools-management__button[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);min-height:var(--gns3-density-control-height);padding-inline:var(--gns3-density-space-4);border-radius:var(--gns3-density-radius-lg);font-family:var(--mat-sys-label-large-font, Roboto),sans-serif;font-size:var(--gns3-button-label-size);font-weight:var(--gns3-button-label-weight);line-height:var(--gns3-button-label-line-height);letter-spacing:var(--gns3-button-label-spacing);text-transform:none;--mat-button-filled-container-height: var(--gns3-density-control-height);--mat-button-filled-label-text-size: var(--gns3-button-label-size);--mat-button-filled-label-text-weight: var(--gns3-button-label-weight);--mat-button-filled-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-outlined-container-height: var(--gns3-density-control-height);--mat-button-outlined-label-text-size: var(--gns3-button-label-size);--mat-button-outlined-label-text-weight: var(--gns3-button-label-weight);--mat-button-outlined-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-protected-container-height: var(--gns3-density-control-height);--mat-button-protected-label-text-size: var(--gns3-button-label-size);--mat-button-protected-label-text-weight: var(--gns3-button-label-weight);--mat-button-protected-label-text-tracking: var(--gns3-button-label-spacing);--mat-button-text-container-height: var(--gns3-density-control-height);--mat-button-text-label-text-size: var(--gns3-button-label-size);--mat-button-text-label-text-weight: var(--gns3-button-label-weight);--mat-button-text-label-text-tracking: var(--gns3-button-label-spacing)}.resource-pools-management__button--destructive[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-error);background-color:var(--mat-sys-error);--mat-button-filled-label-text-color: var(--mat-sys-on-error);--mat-button-filled-container-color: var(--mat-sys-error);--mat-button-filled-state-layer-color: var(--mat-sys-on-error)}.resource-pools-management__toolbar[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--gns3-density-card-gap);container:search-toolbar/inline-size}.resource-pools-management__toolbar[_ngcontent-%COMP%] .resource-pools-management__search-form[_ngcontent-%COMP%]{flex:1 1 260px;min-width:0;max-width:none;margin:0}.resource-pools-management__toolbar[_ngcontent-%COMP%] .resource-pools-management__actions[_ngcontent-%COMP%]{display:flex;flex:0 1 auto;flex-wrap:wrap;align-items:center;gap:var(--gns3-density-space-3);min-width:0}@container search-toolbar (max-width: 640px){.resource-pools-management__toolbar[_ngcontent-%COMP%] .resource-pools-management__search-form[_ngcontent-%COMP%]{flex-basis:100%;width:100%}.resource-pools-management__toolbar[_ngcontent-%COMP%] .resource-pools-management__actions[_ngcontent-%COMP%]{width:100%}}.resource-pools-management__toolbar[_ngcontent-%COMP%]{margin-bottom:var(--gns3-density-card-gap);animation:none}.resource-pools-management__search[_ngcontent-%COMP%]{width:100%}.resource-pools-management__table-container[_ngcontent-%COMP%]{border-radius:16px;width:100%;overflow:hidden;border-radius:var(--gns3-density-radius-lg);background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;animation:none;overflow-x:auto}.resource-pools-management__table-container--hidden[_ngcontent-%COMP%]{display:none}.mat-mdc-table[_ngcontent-%COMP%]{width:100%}.mat-mdc-header-row[_ngcontent-%COMP%]{height:var(--mat-table-header-container-height)}.mat-mdc-row[_ngcontent-%COMP%]{height:var(--mat-table-row-item-container-height);transition:background-color var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard);cursor:default;position:relative}.mat-mdc-row[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 3%,transparent)}.mat-mdc-row[_ngcontent-%COMP%]:nth-child(2n){background-color:color-mix(in srgb,var(--mat-sys-on-surface) 1%,transparent)}.mat-mdc-row[_ngcontent-%COMP%]:nth-child(2n):hover{background-color:color-mix(in srgb,var(--mat-sys-on-surface) 4%,transparent)}.mat-header-row[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%]{position:sticky;top:0;z-index:10;background:var(--mat-sys-surface-container-highest);box-shadow:inset 0 -2px var(--mat-sys-primary);--mat-sort-arrow-color: var(--mat-sys-primary)}.mat-header-row[_ngcontent-%COMP%] .mat-mdc-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] .mat-mdc-header-cell[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:13px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}.mat-mdc-header-cell[_ngcontent-%COMP%], .mat-mdc-cell[_ngcontent-%COMP%]{text-align:left;vertical-align:middle;padding:0 var(--gns3-density-space-4)}.mat-mdc-cell[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface)}.mat-mdc-cell.mat-column-name[_ngcontent-%COMP%]{text-align:left;font-weight:500}.resource-pools-management__link[_ngcontent-%COMP%]{transition:background-color var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard),color var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard),border-color var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard);display:inline-block;color:var(--mat-sys-primary);text-decoration:none;font-weight:500;position:relative}.resource-pools-management__link[_ngcontent-%COMP%]:after{content:"";position:absolute;bottom:-2px;left:0;width:0;height:2px;background-color:currentColor;transition:width var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard)}.resource-pools-management__link[_ngcontent-%COMP%]:hover{color:color-mix(in srgb,var(--mat-sys-primary) 80%,black)}.resource-pools-management__link[_ngcontent-%COMP%]:hover:after{width:100%}.resource-pools-management__overflow-text[_ngcontent-%COMP%]{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;padding-right:5px}.resource-pools-management__small-col[_ngcontent-%COMP%]{width:60px;min-width:60px;text-align:center}.resource-pools-management__loader[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;min-height:200px}.resource-pools-management__spinner[_ngcontent-%COMP%]{width:48px;height:48px}mat-paginator[_ngcontent-%COMP%]{background:var(--mat-sys-surface);color:var(--mat-sys-on-surface)}@media(max-width:768px){.resource-pools-management__header[_ngcontent-%COMP%]{flex-direction:column;align-items:flex-start;gap:16px;padding:16px 0}.resource-pools-management__button[_ngcontent-%COMP%]{flex:1 1 auto}.mat-mdc-header-cell[_ngcontent-%COMP%], .mat-mdc-cell[_ngcontent-%COMP%]{padding:0 var(--gns3-density-space-3);font-size:13px}}button.resource-pools-management__button.mat-mdc-raised-button[_ngcontent-%COMP%]:not(:disabled){color:var(--mat-sys-on-primary);background-color:var(--mat-sys-primary);--mat-button-protected-label-text-color: var(--mat-sys-on-primary);--mat-button-protected-container-color: var(--mat-sys-primary);--mat-button-protected-state-layer-color: var(--mat-sys-on-primary)}'],changeDetection:0})}return n})();var w$e=n=>["/controller",n,"management","pools"],M$e=(n,o)=>o.name;function S$e(n,o){if(n&1&&(r(0,"mat-option",24),c(1),l()),n&2){let e=o.$implicit;v("value",e),m(),X(" ",e," ")}}function k$e(n,o){if(n&1){let e=R();r(0,"div",27)(1,"span",29),c(2),l(),r(3,"div",30)(4,"button",31),_("click",function(){let i=y(e).$implicit,a=h();return w(a.deleteResource(i))}),r(5,"mat-icon"),c(6,"delete"),l()()()()}if(n&2){let e=o.$implicit;m(2),N(e.name)}}function P$e(n,o){n&1&&(r(0,"div",28)(1,"mat-icon"),c(2,"folder_open"),l(),r(3,"span"),c(4,"No resources in this pool"),l()())}var Ek=(()=>{class n{toastService=f(re);route=f($t);resourcePoolsService=f(Zl);dialog=f(Xe);cd=f(oe);controller;pool=z(void 0);addResourceFormControl=new Ec("");addResourceFilteredOptions;projects=z([]);editPoolForm=new QC({poolname:new Ec("")});ngOnInit(){this.route.data.subscribe(e=>{this.controller=e.controller,this.pool.set(e.pool),this.editPoolForm.patchValue({poolname:e.pool.name}),this.refresh()})}onUpdate(){let e=this.editPoolForm.get("poolname")?.value;e&&this.pool()&&(this.pool.update(t=>t&&ze(q({},t),{name:e})),this.resourcePoolsService.update(this.controller,this.pool()).subscribe({next:t=>{this.toastService.success(`Pool ${t.name} updated`)},error:t=>{let i=t.error?.message||t.message||"Failed to update pool";this.toastService.error(i),this.cd.markForCheck()}}))}addResource(){let e=this.addResourceFormControl.value,t=this.projects().filter(i=>i.name.includes(e));if(t.length===1){this.resourcePoolsService.addResource(this.controller,this.pool(),t[0]).subscribe({next:()=>{this.toastService.success(`Project ${t[0].name} added to pool: ${this.pool().name}`),this.refresh(),this.addResourceFormControl.setValue("")},error:i=>{let a=i.error?.message||i.message||"Failed to add resource to pool";this.toastService.error(a),this.cd.markForCheck()}});return}if(t.length===0){this.toastService.error(`Cannot find related project with string: ${e}`);return}t.length>1&&this.toastService.error(`${t.length} matches for ${e}, please be more accurate`)}deleteResource(e){this.dialog.open(jt,{panelClass:["base-confirmation-dialog-panel","confirmation-danger-panel","dialog-small-panel"],autoFocus:".cancel-button",data:{title:"Delete resource?",message:`Resource "${e.name}" (${e.resource_type}) will be removed from this pool.`,confirmButtonText:"Delete resource",tone:"danger"}}).afterClosed().subscribe(t=>{t&&this.resourcePoolsService.deleteResource(this.controller,e,this.pool()).subscribe({next:()=>{this.refresh(),this.toastService.success(`Resource ${e.name} deleted from pool ${this.pool().name}`)},error:i=>{let a=i.error?.message||i.message||"Failed to delete resource from pool";this.toastService.error(a),this.cd.markForCheck()}})})}refresh(){this.resourcePoolsService.get(this.controller,this.pool().resource_pool_id).subscribe({next:e=>{this.pool.set(e)},error:e=>{let t=e.error?.message||e.message||"Failed to load pool";this.toastService.error(t),this.cd.markForCheck()}}),this.resourcePoolsService.getFreeResources(this.controller).subscribe({next:e=>{this.projects.set(e),this.addResourceFilteredOptions=this.addResourceFormControl.valueChanges.pipe(Di(""),Pt(t=>this.projects().filter(i=>i.name.toLowerCase().includes(t?.toLowerCase()||"")).map(i=>i.name)))},error:e=>{let t=e.error?.message||e.message||"Failed to load free resources";this.toastService.error(t),this.cd.markForCheck()}})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-resource-pool-details"]],decls:54,vars:20,consts:[["auto","matAutocomplete"],[1,"resource-pool-details"],[1,"resource-pool-details__header"],[1,"resource-pool-details__header-content"],["mat-icon-button","","matTooltip","Back to resource pools management",1,"resource-pool-details__back-btn",3,"routerLink"],[1,"resource-pool-details__title"],[1,"resource-pool-details__content"],[1,"resource-pool-details__details"],[3,"ngSubmit","formGroup"],[1,"resource-pool-details__form-field"],["matInput","","type","text","formControlName","poolname"],[1,"resource-pool-details__info-grid"],[1,"resource-pool-details__info-label"],[1,"resource-pool-details__info-value"],[1,"resource-pool-details__info-value","resource-pool-details__info-value--mono"],[1,"resource-pool-details__actions"],["mat-raised-button","","color","primary","type","submit"],[1,"resource-pool-details__divider",3,"vertical"],[1,"resource-pool-details__resources"],[1,"resource-pool-details__resources-title"],[1,"resource-pool-details__add-form"],["appearance","outline",1,"resource-pool-details__add-input"],["matInput","","type","text","placeholder","Search project...",3,"formControl","matAutocomplete"],["autoActiveFirstOption",""],[3,"value"],["mat-icon-button","","color","primary","matTooltip","Add project",1,"resource-pool-details__add-button",3,"click"],[1,"resource-pool-details__list"],[1,"resource-pool-details__item"],[1,"resource-pool-details__empty"],[1,"resource-pool-details__item-name"],[1,"resource-pool-details__item-actions"],["mat-icon-button","","color","warn","matTooltip","Delete resource",3,"click"]],template:function(t,i){if(t&1&&(r(0,"div",1)(1,"div",2)(2,"div",3)(3,"a",4)(4,"mat-icon"),c(5,"keyboard_arrow_left"),l()(),r(6,"h1",5),c(7),l()()(),r(8,"div",6)(9,"div",7)(10,"form",8),_("ngSubmit",function(){return i.onUpdate()}),r(11,"mat-form-field",9)(12,"mat-label"),c(13,"Resource pool name"),l(),L(14,"input",10),l(),r(15,"div",11)(16,"span",12),c(17,"Creation date:"),l(),r(18,"span",13),c(19),Et(20,"date"),l(),r(21,"span",12),c(22,"Last update:"),l(),r(23,"span",13),c(24),Et(25,"date"),l(),r(26,"span",12),c(27,"UUID:"),l(),r(28,"span",14),c(29),l()(),r(30,"div",15)(31,"button",16),c(32,"Update resource pool"),l()()()(),L(33,"mat-divider",17),r(34,"div",18)(35,"h3",19),c(36,"Resources"),l(),r(37,"div",20)(38,"mat-form-field",21)(39,"mat-label"),c(40,"Add project to resource pool"),l(),L(41,"input",22),r(42,"mat-autocomplete",23,0),Q(44,S$e,2,2,"mat-option",24,Oe),Et(46,"async"),l()(),r(47,"button",25),_("click",function(){return i.addResource()}),r(48,"mat-icon"),c(49,"add"),l()()(),r(50,"div",26),Q(51,k$e,7,1,"div",27,M$e,!1,P$e,5,0,"div",28),l()()()()),t&2){let a=Te(43);m(3),v("routerLink",tn(18,w$e,i.controller.id)),m(4),X("Resource pool: ",i.pool().name),m(3),v("formGroup",i.editPoolForm),m(9),N(Io(20,10,i.pool().created_at,"medium")),m(5),N(Io(25,13,i.pool().updated_at,"medium")),m(5),X(" ",i.pool().resource_pool_id," "),m(4),v("vertical",!0),m(8),v("formControl",i.addResourceFormControl)("matAutocomplete",a),m(3),K(gn(46,16,i.addResourceFilteredOptions)),m(7),K(i.pool().resources)}},dependencies:[fe,St,Ct,At,Nt,vt,It,Tr,Ut,Yt,vn,Co,we,Pe,Ve,ye,Ee,Y,he,Be,ie,ce,Ja,fs,Jo,ha,nt,ho,ke,st,pt,Pa,dm],styles:["[_nghost-%COMP%]{display:block;width:100%;background:transparent}.resource-pool-details[_ngcontent-%COMP%]{padding:20px 24px;animation:none;display:flex;flex-direction:column;align-items:center}.resource-pool-details__header[_ngcontent-%COMP%]{margin-bottom:24px;width:100%;max-width:1000px}.resource-pool-details__header-content[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.resource-pool-details__back-btn[_ngcontent-%COMP%]{flex-shrink:0}.resource-pool-details__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.resource-pool-details__content[_ngcontent-%COMP%]{width:100%;max-width:1000px;display:flex;gap:24px}@media(max-width:768px){.resource-pool-details__content[_ngcontent-%COMP%]{flex-direction:column}}.resource-pool-details__details[_ngcontent-%COMP%]{width:350px;flex-shrink:0;display:flex;flex-direction:column;gap:16px;padding:24px;background:var(--mat-sys-surface);border-radius:12px;border:1px solid var(--mat-sys-outline-variant)}.resource-pool-details__form-field[_ngcontent-%COMP%]{width:100%}.resource-pool-details__info-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:auto 1fr;gap:8px 16px}.resource-pool-details__info-label[_ngcontent-%COMP%]{font-size:12px;font-weight:500;color:var(--mat-sys-on-surface-variant);text-transform:uppercase;letter-spacing:.5px;display:flex;align-items:center}.resource-pool-details__info-value[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface);word-break:break-all}.resource-pool-details__info-value--mono[_ngcontent-%COMP%]{font-family:var(--gns3-font-code);font-size:12px}.resource-pool-details__actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-start;padding-top:8px}.resource-pool-details__divider[_ngcontent-%COMP%]{width:1px;background:var(--mat-sys-outline-variant);margin:0 16px}@media(max-width:768px){.resource-pool-details__divider[_ngcontent-%COMP%]{display:none}}.resource-pool-details__resources[_ngcontent-%COMP%]{flex:1;min-width:0;padding:24px;background:var(--mat-sys-surface);border-radius:12px;border:1px solid var(--mat-sys-outline-variant)}.resource-pool-details__resources-title[_ngcontent-%COMP%]{font-size:18px;font-weight:600;color:var(--mat-sys-on-surface);margin:0 0 16px}.resource-pool-details__add-form[_ngcontent-%COMP%]{display:flex;gap:8px;margin-bottom:16px}.resource-pool-details__add-input[_ngcontent-%COMP%]{flex:1}.resource-pool-details__add-button[_ngcontent-%COMP%]{flex-shrink:0}.resource-pool-details__list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px}.resource-pool-details__item[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background:var(--mat-sys-surface-container-low);border-radius:8px;transition:background-color var(--gns3-motion-duration-standard) ease}.resource-pool-details__item[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container-high)}.resource-pool-details__item-name[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.resource-pool-details__item-actions[_ngcontent-%COMP%]{flex-shrink:0}.resource-pool-details__empty[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:32px;color:var(--mat-sys-on-surface-variant);font-size:14px;text-align:center}"],changeDetection:0})}return n})();var MH=(()=>{class n{controllerService;resourcePoolsService;constructor(e,t){this.controllerService=e,this.resourcePoolsService=t}resolve(e,t){let i=e.paramMap.get("controller_id"),a=e.paramMap.get("pool_id");return sm(this.controllerService.get(+i)).pipe(Dn(s=>this.resourcePoolsService.get(s,a)),ei(s=>jo(()=>s)))}static \u0275fac=function(t){return new(t||n)(_e(_t),_e(Zl))};static \u0275prov=J({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var T$e=[{path:"controller/:controller_id/login",component:z1},{path:"",component:tk,children:[{path:"controllers",component:j2},{path:"",redirectTo:"controllers",pathMatch:"full"},{path:"bundled",component:w1},{path:"controller/:controller_id/image-manager",component:ck},{path:"controller/:controller_id/dashboard",redirectTo:"controller/:controller_id/systemstatus",pathMatch:"full"},{path:"controller/:controller_id/projects",component:V2,canActivate:[Xi],resolve:{controller:K_}},{path:"controller/:controller_id/help",component:O1},{path:"controller/:controller_id/settings",component:W2},{path:"controller/:controller_id/settings/console",component:H2},{path:"controller/:controller_id/server-settings",component:Q$,canActivate:[Xi,Yu]},{path:"controller/:controller_id/management/pools/:pool_id",component:Ek,canActivate:[Xi,Yu],resolve:{pool:MH,controller:K_}},{path:"installed-software",component:R1},{path:"controller/:controller_id/systemstatus",component:Q2,canActivate:[Xi]},{path:"controller/:controller_ip/:controller_port/project/:project_id",component:P1,canActivate:[Xi]},{path:"controller/:controller_id/preferences",component:dy,canActivate:[Xi]},{path:"controller/:controller_id/preferences/new-template",component:hy,canActivate:[Xi]},{path:"controller/:controller_id/computes",component:jR,canActivate:[Xi]},{path:"controller/:controller_id/preferences/builtin/ethernet-hubs/addtemplate",component:H1,canActivate:[Xi]},{path:"controller/:controller_id/preferences/builtin/ethernet-hubs/:template_id",component:U1,canActivate:[Xi]},{path:"controller/:controller_id/preferences/builtin/ethernet-switches/addtemplate",component:W1,canActivate:[Xi]},{path:"controller/:controller_id/preferences/builtin/ethernet-switches/:template_id",component:G1,canActivate:[Xi]},{path:"controller/:controller_id/preferences/builtin/cloud-nodes/addtemplate",component:j1,canActivate:[Xi]},{path:"controller/:controller_id/preferences/builtin/cloud-nodes/:template_id",component:$1,canActivate:[Xi]},{path:"controller/:controller_id/preferences/dynamips/templates/addtemplate",component:J1,canActivate:[Xi]},{path:"controller/:controller_id/preferences/dynamips/templates/:template_id",component:ey,canActivate:[Xi]},{path:"controller/:controller_id/preferences/qemu/templates/:template_id",component:fy,canActivate:[Xi]},{path:"controller/:controller_id/preferences/qemu/addtemplate",component:_y,canActivate:[Xi]},{path:"controller/:controller_id/preferences/vpcs/templates/:template_id",component:Cy,canActivate:[Xi]},{path:"controller/:controller_id/preferences/vpcs/addtemplate",component:vy,canActivate:[Xi]},{path:"controller/:controller_id/preferences/docker/templates/:template_id",component:Z1,canActivate:[Xi]},{path:"controller/:controller_id/preferences/docker/addtemplate",component:K1,canActivate:[Xi]},{path:"controller/:controller_id/preferences/iou/templates/:template_id",component:ny,canActivate:[Xi]},{path:"controller/:controller_id/preferences/iou/addtemplate",component:ty,canActivate:[Xi]},{path:"controller/:controller_id/management",component:dk,canActivate:[Xi,Yu],children:[{path:"users",component:rk},{path:"groups",component:hk},{path:"roles",component:fk},{path:"pools",component:Tk},{path:"ACL",component:Sk}]},{path:"controller/:controller_id/management/roles/:role_id",component:Ck,canActivate:[Xi,Yu],resolve:{role:CH,controller:K_}}]},{path:"controller/:controller_id/project/:project_id",component:F2,canActivate:[Xi],canDeactivate:[K2]},{path:"controller/:controller_id/project/:project_id/nodes/:node_id",component:MC,canActivate:[Xi]},{path:"controller/:controller_id/project/:project_id/nodes/:node_id/files",component:f2,canActivate:[Xi]},{path:"static/web-ui/controller/:controller_id/project/:project_id/nodes/:node_id",component:MC,canActivate:[Xi]},{path:"**",component:QR}],SH=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=on({type:n});static \u0275inj=nn({imports:[vn.forRoot(T$e,{anchorScrolling:"enabled",enableTracing:!1,scrollPositionRestoration:"enabled"}),vn]})}return n})();var Ok=class{builtin;filename;symbol_id;raw;theme};var kH=(()=>{class n{convert(e){let t=new Ok;return t.symbol_id=e.id,t.builtin=e.builtin,t.filename=e.filename,t.raw=e.raw,t}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var PH=(()=>{class n{convert(e){let t={font_family:void 0,font_size:void 0,font_weight:void 0};return Gh(e,{context:"declarationList"}).children.forEach(a=>{a.property==="font-size"&&a.value&&a.value.children&&a.value.children.forEach(s=>{s.type==="Dimension"&&(t.font_size=parseInt(s.value))}),a.property==="font-family"&&a.value&&a.value.children&&a.value.children.forEach(s=>{s.type==="Identifier"&&(t.font_family=s.name)}),a.property==="font-weight"&&a.value&&a.value.children&&a.value.children.forEach(s=>{s.type==="Identifier"&&(t.font_weight=s.name)})}),t}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var TH=[CM,yp,xp,r_,bp,bd,s_,vp,i_,vM,m_,dM,vd,_M,uM,hM,gM,pM,fM];var EH=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=on({type:n});static \u0275inj=nn({providers:[$l,dr,O_,YS,ZS,JS,e2,t2,mp,gd,Cd,dp,Wl,Ty,zo,ia,ql,Wr,wp,js,cp,Qh,Yh,hw,yM,xd,u_,kM,Mp,g_,kH,Xh,Kh,ww,pp,ip,Fs,Eh,Oh,o_,Ul,ld,PH,up,c_,d_,...TH],imports:[fe,it,ie]})}return n})();var OH=(()=>{class n extends hm{getItemKey(e){return e.symbol_id}static \u0275fac=(()=>{let e;return function(i){return(e||(e=yi(n)))(i||n)}})();static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var DH=(()=>{class n{injector=f(xa);extractError(e){return e&&e.ngOriginalError&&(e=e.ngOriginalError),typeof e=="string"||e instanceof Error?e:e instanceof SA?e.error instanceof Error?e.error:e.error instanceof ErrorEvent?e.error.message:typeof e.error=="string"?`Server returned code ${e.status} with body "${e.error}"`:e.message:null}handleError(e){let t=this.extractError(e)||"Handled unknown error";if(e.error&&e.error.status&&!(e.error.status===400||e.error.status===403||e.error.status===404||e.error.status===409)&&console.error(t),!e)return;let i=this.injector.get(re);e.error?.message?i.error(e.error.message):e.message?i.error(e.message):e.error&&i.error(e.error)}static \u0275fac=function(t){return new(t||n)};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var E$e=(n,o)=>o.value;function O$e(n,o){n&1&&(r(0,"th",11),c(1,"Adapter number"),l())}function D$e(n,o){if(n&1&&(r(0,"td",12),c(1),l()),n&2){let e=o.$implicit;m(),X("Adapter ",e.adapter_number)}}function I$e(n,o){n&1&&(r(0,"th",11),c(1,"Port name"),l())}function A$e(n,o){if(n&1){let e=R();r(0,"td",12)(1,"input",13),_("input",function(i){let a=y(e).$implicit,s=h();return w(s.onPortNameChange(a.adapter_number,i.target.value))}),l()()}if(n&2){let e=o.$implicit;m(),v("value",e.port_name)}}function N$e(n,o){n&1&&(r(0,"th",11),c(1,"Adapter type"),l())}function F$e(n,o){if(n&1&&(r(0,"mat-option",15),c(1),l()),n&2){let e=o.$implicit;v("value",e.value),m(),X(" ",e.name," ")}}function R$e(n,o){if(n&1){let e=R();r(0,"td",12)(1,"mat-select",14),_("selectionChange",function(i){let a=y(e).$implicit,s=h();return w(s.onAdapterTypeChange(a.adapter_number,i.value))}),Q(2,F$e,2,2,"mat-option",15,E$e),l()()}if(n&2){let e=o.$implicit,t=h();m(),v("value",e.adapter_type),m(),K(t.networkTypes())}}function z$e(n,o){n&1&&(r(0,"th",11),c(1,"MAC address"),l())}function L$e(n,o){if(n&1){let e=R();r(0,"td",12)(1,"input",16),_("input",function(i){let a=y(e).$implicit,s=h();return w(s.onMacAddressChange(a.adapter_number,i.target.value))}),l()()}if(n&2){let e=o.$implicit;m(),v("value",e.mac_address)}}function V$e(n,o){n&1&&(r(0,"th",11),c(1,"Actions"),l())}function B$e(n,o){if(n&1){let e=R();r(0,"td",12)(1,"button",17),_("click",function(){let i=y(e).$implicit,a=h();return w(a.delete(i))}),r(2,"mat-icon",18),c(3,"delete"),l()()()}}function j$e(n,o){n&1&&L(0,"tr",19)}function $$e(n,o){n&1&&L(0,"tr",20)}var IH=(()=>{class n{cd=f(oe);networkTypes=ee([]);displayedColumns=ee([]);adapters=$([]);onAdd(){let e=this.adapters(),t={adapter_number:e.length,adapter_type:this.networkTypes()[0]?.value};this.adapters.set([...e,t])}delete(e){this.adapters.set(this.adapters().filter(t=>t!==e))}onPortNameChange(e,t){this.adapters.update(i=>i.map(a=>a.adapter_number===e?ze(q({},a),{port_name:t}):a)),this.cd.markForCheck()}onAdapterTypeChange(e,t){this.adapters.update(i=>i.map(a=>a.adapter_number===e?ze(q({},a),{adapter_type:t}):a)),this.cd.markForCheck()}onMacAddressChange(e,t){this.adapters.update(i=>i.map(a=>a.adapter_number===e?ze(q({},a),{mac_address:t}):a)),this.cd.markForCheck()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-custom-adapters-table"]],inputs:{networkTypes:[1,"networkTypes"],displayedColumns:[1,"displayedColumns"],adapters:[1,"adapters"]},outputs:{adapters:"adaptersChange"},decls:20,vars:3,consts:[["mat-table","",3,"dataSource"],["matColumnDef","adapter_number"],["mat-header-cell","",4,"matHeaderCellDef"],["mat-cell","",4,"matCellDef"],["matColumnDef","port_name"],["matColumnDef","adapter_type"],["matColumnDef","mac_address"],["matColumnDef","actions"],["mat-header-row","",4,"matHeaderRowDef"],["mat-row","",4,"matRowDef","matRowDefColumns"],["mat-button","",1,"form-field",3,"click"],["mat-header-cell",""],["mat-cell",""],["matInput","","placeholder","Port name",2,"width","120px",3,"input","value"],["placeholder","Type",3,"selectionChange","value"],[3,"value"],["matInput","","placeholder","XX:XX:XX:XX:XX:XX",2,"width","150px",3,"input","value"],["mat-icon-button","","matTooltip","Delete adapter","matTooltipClass","custom-tooltip",3,"click"],["aria-label","Delete adapter"],["mat-header-row",""],["mat-row",""]],template:function(t,i){t&1&&(r(0,"table",0),Fe(1,1),se(2,O$e,2,0,"th",2)(3,D$e,2,1,"td",3),Re(),Fe(4,4),se(5,I$e,2,0,"th",2)(6,A$e,2,1,"td",3),Re(),Fe(7,5),se(8,N$e,2,0,"th",2)(9,R$e,4,1,"td",3),Re(),Fe(10,6),se(11,z$e,2,0,"th",2)(12,L$e,2,1,"td",3),Re(),Fe(13,7),se(14,V$e,2,0,"th",2)(15,B$e,4,0,"td",3),Re(),se(16,j$e,1,0,"tr",8)(17,$$e,1,0,"tr",9),l(),r(18,"button",10),_("click",function(){return i.onAdd()}),c(19,"Add"),l()),t&2&&(v("dataSource",i.adapters()),m(16),v("matHeaderRowDef",i.displayedColumns()),m(),v("matRowDefColumns",i.displayedColumns()))},dependencies:[fe,_n,bn,yn,kn,wn,xn,Pn,Mn,Sn,Tn,En,ot,ct,nt,Ho,Y,he,Be,ie,ce,st,pt,ye,Ee,we],styles:['[_nghost-%COMP%]{display:block;width:100%;background:transparent}.templates-page__content[_ngcontent-%COMP%]{animation:none}.templates-page__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:20px;max-width:1600px;margin:0 auto;padding:24px 20px 16px}.templates-page__heading[_ngcontent-%COMP%], .templates-page__header-actions[_ngcontent-%COMP%]{display:flex;align-items:center}.templates-page__heading[_ngcontent-%COMP%]{min-width:0;gap:var(--gns3-density-space-3)}.templates-page__title[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface);font-size:var(--gns3-density-page-title-size);font-weight:500;font-family:var(--mat-sys-title-large-font, Roboto),sans-serif;line-height:1.2;letter-spacing:normal}.templates-page__header-actions[_ngcontent-%COMP%]{gap:var(--gns3-density-space-3)}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{height:var(--gns3-density-control-height);border-radius:12px;padding-inline:18px;font-size:15px;font-weight:500;letter-spacing:.3px;text-transform:none}[class*=-templates__header][_ngcontent-%COMP%]{box-sizing:border-box;width:100%;height:calc(var(--gns3-density-space-4) * 2 + (var(--gns3-density-section-title-size) + 2px) * 1.2 + 1px);max-width:none;margin:0;padding:0 var(--gns3-density-page-padding);gap:var(--gns3-density-space-3);color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container);border-bottom:1px solid var(--mat-sys-outline-variant)}[class*=-templates__back-btn][_ngcontent-%COMP%], [class*=-templates__add-btn][_ngcontent-%COMP%]{flex:0 0 auto;width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:12px}[class*=-templates__back-btn][_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container)}[class*=-templates__add-btn][_ngcontent-%COMP%]{color:var(--mat-sys-primary)}[class*=-templates__title][_ngcontent-%COMP%]{flex:1;min-width:0;margin:0;padding-bottom:0;color:var(--mat-sys-on-primary-container);font-size:calc(var(--gns3-density-section-title-size) + 2px);font-weight:650;line-height:1.2;letter-spacing:-.01em}.templates-page__scopes[_ngcontent-%COMP%]{display:flex;gap:4px;max-width:1560px;margin:0 auto 16px;padding:0 20px;border-bottom:1px solid var(--mat-sys-outline-variant)}.templates-page__scope[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center;gap:8px;min-height:48px;padding:0 16px;border:0;color:var(--mat-sys-on-surface-variant);background:transparent;font:inherit;font-size:14px;font-weight:550;cursor:pointer}.templates-page__scope[_ngcontent-%COMP%]:after{position:absolute;right:8px;bottom:-1px;left:8px;height:2px;border-radius:2px 2px 0 0;background:transparent;content:""}.templates-page__scope[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}.templates-page__scope[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{min-width:22px;padding:2px 6px;border-radius:12px;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-high);font-size:11px;text-align:center}.templates-page__scope--active[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%]:after{background:var(--mat-sys-primary)}.templates-page__scope--active[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--gns3-density-card-gap);max-width:1600px;margin:0 auto;padding:0 20px 8px}.templates-page__search[_ngcontent-%COMP%]{flex:1;min-width:240px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:flex;align-items:center;flex:0 0 auto;gap:var(--gns3-density-space-3)}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{width:155px}.templates-page__view-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px;padding:4px 2px;border-radius:8px;background:var(--mat-sys-surface-container-high)}button.templates-page__view-button[_ngcontent-%COMP%]{width:var(--gns3-density-icon-button);height:var(--gns3-density-icon-button);border-radius:8px;color:var(--mat-sys-on-surface-variant);--mat-icon-button-state-layer-size: var(--gns3-density-icon-button);--mat-icon-button-icon-size: 22px}button.templates-page__view-button--active[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__main[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:20px;max-width:1600px;margin:0 auto;padding:0 20px 20px}.templates-page__loading[_ngcontent-%COMP%]{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;min-height:320px;gap:var(--gns3-density-card-gap);color:var(--mat-sys-on-surface-variant)}.templates-page__table-container[_ngcontent-%COMP%]{flex:1;min-width:0;border-radius:16px;background:var(--mat-sys-surface);border:var(--gns3-surface-border);box-shadow:none;overflow-x:auto}mat-table[_ngcontent-%COMP%]{width:100%;min-width:850px}.mat-mdc-row[_ngcontent-%COMP%], .mat-row[_ngcontent-%COMP%]{height:var(--mat-table-row-item-container-height);min-height:var(--mat-table-row-item-container-height)}.mat-header-row[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%]{position:sticky;top:0;z-index:10;background:var(--mat-sys-surface-container-highest);box-shadow:inset 0 -2px var(--mat-sys-primary);--mat-sort-arrow-color: var(--mat-sys-primary)}.mat-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%], .mat-mdc-header-row[_ngcontent-%COMP%] mat-header-cell[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:13px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}mat-row[_ngcontent-%COMP%]{cursor:pointer;transition:background-color var(--gns3-motion-duration-standard) ease}mat-row[_ngcontent-%COMP%]:nth-child(2n){background:color-mix(in srgb,var(--mat-sys-on-surface) 1%,transparent)}mat-row[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--mat-sys-primary) 5%,transparent)}mat-row.templates-page__row--selected[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--mat-sys-primary-container) 35%,transparent)}mat-cell[_ngcontent-%COMP%], mat-header-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:inherit;color:var(--mat-sys-on-surface)}.mat-column-name[_ngcontent-%COMP%]{flex:2.4;min-width:240px;justify-content:flex-start}.mat-column-template_type[_ngcontent-%COMP%]{flex:1.1;min-width:130px}.mat-column-category[_ngcontent-%COMP%]{flex:1;min-width:110px}.mat-column-compute_id[_ngcontent-%COMP%]{flex:1;min-width:105px}.mat-column-builtin[_ngcontent-%COMP%]{flex:0 0 90px;min-width:90px;justify-content:center}.mat-column-actions[_ngcontent-%COMP%]{flex:0 0 180px;min-width:180px;box-sizing:border-box;justify-content:flex-start;padding-right:24px}.templates-page__name-cell[_ngcontent-%COMP%]{display:flex;align-items:center;min-width:0;gap:var(--gns3-density-space-3)}.templates-page__name-copy[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.templates-page__name-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:14px;font-weight:600}.templates-page__symbol[_ngcontent-%COMP%]{display:grid;flex:0 0 52px;width:52px;height:52px;overflow:hidden;place-items:center;border-radius:14px;color:var(--mat-sys-on-primary-container);background:color-mix(in srgb,var(--mat-sys-primary-container) 82%,var(--mat-sys-surface))}.templates-page__symbol[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:78%;height:78%;object-fit:contain;filter:drop-shadow(0 2px 4px color-mix(in srgb,var(--mat-sys-shadow) 25%,transparent))}.templates-page__symbol[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:27px;height:27px;font-size:27px}.templates-page__symbol--small[_ngcontent-%COMP%]{flex-basis:38px;width:38px;height:38px;border-radius:10px}.templates-page__symbol--small[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:21px;height:21px;font-size:21px}.templates-page__type-badge[_ngcontent-%COMP%], .templates-page__source-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;width:fit-content;padding:4px 9px;border-radius:16px;font-size:12px;font-weight:600;white-space:nowrap}.templates-page__type-badge[_ngcontent-%COMP%]{color:var(--mat-sys-secondary);background:color-mix(in srgb,var(--mat-sys-secondary) 11%,transparent)}.templates-page__type-badge--qemu[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container);background:var(--mat-sys-primary-container)}.templates-page__type-badge--docker[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container)}.templates-page__type-badge--dynamips[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary-container);background:var(--mat-sys-tertiary-container)}.templates-page__type-badge--cloud[_ngcontent-%COMP%]{color:var(--mat-sys-on-error-container);background:var(--mat-sys-error-container)}.templates-page__type-badge--vpcs[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary);background:var(--mat-sys-primary)}.templates-page__type-badge--ethernet-hub[_ngcontent-%COMP%]{color:var(--mat-sys-on-secondary);background:var(--mat-sys-secondary)}.templates-page__type-badge--ethernet-switch[_ngcontent-%COMP%]{color:var(--mat-sys-on-tertiary);background:var(--mat-sys-tertiary)}.templates-page__type-badge--iou[_ngcontent-%COMP%]{color:var(--mat-sys-on-error);background:var(--mat-sys-error)}.templates-page__type-badge--nat[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container-highest)}.templates-page__source-badge[_ngcontent-%COMP%]{color:var(--mat-sys-primary);background:color-mix(in srgb,var(--mat-sys-primary) 11%,transparent)}.templates-page__source-badge--builtin[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary);background:color-mix(in srgb,var(--mat-sys-tertiary) 11%,transparent)}.templates-page__table-footer[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:var(--mat-table-footer-container-height);padding:0 12px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container))}.templates-page__table-footer[_ngcontent-%COMP%] mat-paginator[_ngcontent-%COMP%]{width:100%;--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__actions-cell[_ngcontent-%COMP%], .templates-page__card-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:3px}button.templates-page__action[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-on-surface-variant);width:var(--gns3-density-control-height-sm);height:var(--gns3-density-control-height-sm);--mat-icon-button-state-layer-size: var(--gns3-density-control-height-sm);border-radius:var(--gns3-density-radius-lg);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:0;--mat-icon-button-icon-size: var(--gns3-action-icon-size);--mat-icon-button-touch-target-size: var(--gns3-density-control-height-sm)}button.templates-page__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:var(--gns3-action-icon-size);height:var(--gns3-action-icon-size);font-size:var(--gns3-action-icon-size);line-height:var(--gns3-action-icon-size)}button.templates-page__action[_ngcontent-%COMP%]{color:var(--template-action-color);--mat-icon-button-state-layer-color: var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:not(:disabled) mat-icon[_ngcontent-%COMP%]{color:var(--template-action-color)}button.templates-page__action[_ngcontent-%COMP%]:disabled mat-icon[_ngcontent-%COMP%]{color:var(--gns3-button-disabled-label-color)}button.templates-page__action--details[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--edit[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-primary)}button.templates-page__action--duplicate[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-secondary)}button.templates-page__action--delete[_ngcontent-%COMP%]{--template-action-color: var(--mat-sys-error)}.templates-page__grid[_ngcontent-%COMP%]{flex:1;min-width:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-content:start;gap:var(--gns3-density-card-gap)}.templates-page__grid--with-details[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__card[_ngcontent-%COMP%]{display:flex;min-width:0;flex-direction:column;padding:16px;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 65%,transparent);border-radius:16px;background:var(--mat-sys-surface);cursor:pointer;transition:transform var(--gns3-motion-duration-standard) ease,box-shadow var(--gns3-motion-duration-standard) ease,border-color var(--gns3-motion-duration-standard) ease}.templates-page__card[_ngcontent-%COMP%]:hover{border-color:var(--mat-sys-outline-variant);background:var(--mat-sys-surface-container-low)}.templates-page__card--selected[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);box-shadow:0 0 0 1px var(--mat-sys-primary)}.templates-page__card-header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--gns3-density-space-3)}.templates-page__card-body[_ngcontent-%COMP%]{flex:1;min-width:0;padding:14px 0 12px}.templates-page__card-body[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{display:-webkit-box;overflow:hidden;margin:0 0 9px;color:var(--mat-sys-on-surface);font-size:17px;font-weight:650;line-height:1.35;overflow-wrap:anywhere;-webkit-box-orient:vertical;-webkit-line-clamp:2}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%]{display:grid;gap:8px;margin:16px 0 0}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.5px;text-transform:uppercase}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{min-width:0;margin:0;overflow:hidden;color:var(--mat-sys-on-surface);font-size:13px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] .templates-page__card-tags-row[_ngcontent-%COMP%]{align-items:flex-start}.templates-page__card-body[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] dd.templates-page__card-tags[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px;overflow:visible;white-space:normal}.templates-page__card-actions[_ngcontent-%COMP%]{justify-content:flex-end;min-height:33px;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__grid-paginator[_ngcontent-%COMP%]{grid-column:1/-1;width:100%;border-radius:12px;background:color-mix(in srgb,var(--mat-sys-primary-container) 20%,var(--mat-sys-surface-container));--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: var(--mat-table-footer-container-height)}.templates-page__empty[_ngcontent-%COMP%]{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:230px;padding:32px;color:var(--mat-sys-on-surface-variant);text-align:center}.templates-page__empty[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{width:48px;height:48px;font-size:48px;opacity:.55}.templates-page__empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:12px 0 0;color:var(--mat-sys-on-surface);font-size:17px}.templates-page__empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:5px 0 0;font-size:14px}.templates-page__details[_ngcontent-%COMP%]{position:sticky;top:16px;flex:0 0 clamp(390px,31vw,480px);display:flex;min-height:380px;max-height:calc(100vh - 176px);flex-direction:column;overflow:hidden;border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 60%,transparent);border-radius:16px;background:var(--mat-sys-surface);box-shadow:0 8px 32px color-mix(in srgb,var(--mat-sys-shadow) 15%,transparent);animation:_ngcontent-%COMP%_templates-slide-in var(--gns3-motion-duration-standard) var(--gns3-motion-easing-standard)}.templates-page__details-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:var(--gns3-density-space-3);min-height:56px;box-sizing:border-box;padding:8px 10px 8px 16px;border-bottom:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-primary-container) 72%,var(--mat-sys-surface))}.templates-page__details-header[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--mat-sys-on-primary-container)}.templates-page__details-heading[_ngcontent-%COMP%]{display:flex;min-width:0;align-items:center;gap:var(--gns3-density-space-3)}.templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;margin:0;color:var(--mat-sys-on-primary-container);font-size:19px;font-weight:650;line-height:1.25;text-overflow:ellipsis;white-space:nowrap}.templates-page__details-title-line[_ngcontent-%COMP%]{display:flex;flex:1;min-width:0;align-items:center;gap:var(--gns3-density-space-2)}.templates-page__details-title-line[_ngcontent-%COMP%] .templates-page__type-badge[_ngcontent-%COMP%]{flex:0 0 auto}.templates-page__details-body[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:12px 20px}.templates-page__description[_ngcontent-%COMP%]{padding:10px 0 14px;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__description[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:650;letter-spacing:.6px;text-transform:uppercase}.templates-page__description[_ngcontent-%COMP%] app-markdown-viewer[_ngcontent-%COMP%]{display:block;margin-top:8px;padding:2px 12px;border-radius:10px;background:var(--mat-sys-surface-container-low);overflow-wrap:anywhere;--markdown-viewer-font-size: 13px;--markdown-viewer-line-height: 1.5;--markdown-viewer-heading-scale: .85}.templates-page__detail-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:22px 105px minmax(0,1fr);align-items:center;gap:var(--gns3-density-space-3);min-height:40px;box-sizing:border-box;padding:8px 0;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 45%,transparent)}.templates-page__detail-row[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:19px;height:19px;color:var(--mat-sys-primary);font-size:19px}.templates-page__detail-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:12px;font-weight:650;letter-spacing:.5px;text-transform:uppercase;white-space:nowrap}.templates-page__detail-row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{min-width:0;color:var(--mat-sys-on-surface);font-size:14px;font-weight:500;line-height:1.45;text-align:right;overflow-wrap:anywhere}.templates-page__detail-row--stacked[_ngcontent-%COMP%]{align-items:start}.templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__mono[_ngcontent-%COMP%], .templates-page__detail-row[_ngcontent-%COMP%] strong.templates-page__path[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-family:var(--gns3-font-code);font-size:12px;word-break:break-all}.templates-page__tags[_ngcontent-%COMP%]{border-bottom:0}.templates-page__tags[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:7px}.templates-page__tag[_ngcontent-%COMP%]{padding:5px 9px;border-radius:14px;color:var(--mat-sys-on-secondary-container);background:var(--mat-sys-secondary-container);font-size:11px;font-weight:550}.templates-page__details-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(105px,1fr));gap:var(--gns3-density-space-2);padding:14px 16px 18px;border-top:1px solid var(--mat-sys-outline-variant);background:color-mix(in srgb,var(--mat-sys-surface-container) 72%,transparent)}button.templates-page__details-action[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-on-surface-variant);height:40px;border-radius:12px;color:var(--details-action-color);border-color:color-mix(in srgb,var(--details-action-color) 48%,transparent);font-size:13px;font-weight:500}button.templates-page__details-action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--details-action-color)}button.templates-page__details-action--edit[_ngcontent-%COMP%], button.templates-page__details-action--duplicate[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-primary)}button.templates-page__details-action--delete[_ngcontent-%COMP%]{--details-action-color: var(--mat-sys-error)}[data-density=compact][_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__refresh[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__new[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__manual[_ngcontent-%COMP%], [data-density=compact][_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__scope[_ngcontent-%COMP%]{min-height:40px;height:40px}[data-density=compact][_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] button.templates-page__view-button[_ngcontent-%COMP%]{width:40px;height:40px;--mat-icon-button-state-layer-size: 40px}[data-density=compact][_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-header[_ngcontent-%COMP%]{min-height:48px;padding-block:4px}[data-density=compact][_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:18px}[data-density=compact][_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__details-body[_ngcontent-%COMP%]{padding-block:8px}[data-density=compact][_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__detail-row[_ngcontent-%COMP%]{min-height:36px;padding-block:6px}[data-density=compact][_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%], [data-density=compact] [_nghost-%COMP%] .templates-page__card[_ngcontent-%COMP%]{padding:12px}@keyframes _ngcontent-%COMP%_templates-slide-in{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@media(max-width:1400px){.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__main[_ngcontent-%COMP%]{flex-direction:column}.templates-page__table-container[_ngcontent-%COMP%], .templates-page__grid[_ngcontent-%COMP%], .templates-page__details[_ngcontent-%COMP%]{width:100%}.templates-page__details[_ngcontent-%COMP%]{position:static;flex-basis:auto;max-height:none}}@media(max-width:900px){.templates-page__header[_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column}.templates-page__header-actions[_ngcontent-%COMP%]{width:100%}.templates-page__toolbar[_ngcontent-%COMP%]{align-items:stretch;flex-direction:column}.templates-page__toolbar-actions[_ngcontent-%COMP%]{width:100%}.templates-page__filter[_ngcontent-%COMP%], .templates-page__sort[_ngcontent-%COMP%]{flex:1;width:auto}}@media(max-width:640px){.templates-page__header[_ngcontent-%COMP%]{padding:20px 16px 12px}.templates-page__header-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}button.templates-page__refresh[_ngcontent-%COMP%], button.templates-page__new[_ngcontent-%COMP%], button.templates-page__manual[_ngcontent-%COMP%]{width:100%;padding-inline:10px}.templates-page__scopes[_ngcontent-%COMP%]{overflow-x:auto;padding-inline:16px}.templates-page__scope[_ngcontent-%COMP%]{flex:0 0 auto;padding-inline:12px}.templates-page__toolbar[_ngcontent-%COMP%], .templates-page__main[_ngcontent-%COMP%]{padding-inline:16px}.templates-page__toolbar-actions[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.templates-page__view-toggle[_ngcontent-%COMP%]{grid-column:1/-1;justify-self:end}.templates-page__grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.templates-page__details[_ngcontent-%COMP%]{min-width:0}}'],changeDetection:0})}return n})();var AH=(()=>{class n{controller=ee(void 0);symbol=ee(void 0);symbolChangedEmitter=new be;chosenSymbol=z("");symbolChanged(e){this.chosenSymbol.set(e)}chooseSymbol(){this.symbolChangedEmitter.emit(this.chosenSymbol())}cancelChooseSymbol(){this.symbolChangedEmitter.emit(this.symbol())}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-symbols-menu"]],inputs:{controller:[1,"controller"],symbol:[1,"symbol"]},outputs:{symbolChangedEmitter:"symbolChangedEmitter"},decls:11,vars:2,consts:[[1,"content","configurator"],[1,"default-header"],[1,"row"],[1,"col"],["mat-button","",1,"top-button","cancel-button",3,"click"],["mat-raised-button","","color","primary",1,"top-button",3,"click"],[1,"default-content"],[3,"symbolChanged","controller","symbol"]],template:function(t,i){t&1&&(r(0,"div",0)(1,"div",1)(2,"div",2)(3,"h1",3),c(4,"Symbol selection"),l(),r(5,"button",4),_("click",function(){return i.cancelChooseSymbol()}),c(6,"Cancel"),l(),r(7,"button",5),_("click",function(){return i.chooseSymbol()}),c(8,"Choose symbol"),l()()(),r(9,"div",6)(10,"app-symbols",7),_("symbolChanged",function(s){return i.symbolChanged(s)}),l()()()),t&2&&(m(10),v("controller",i.controller())("symbol",i.symbol()))},dependencies:[fe,Y,he,Gm],styles:["[_nghost-%COMP%]{display:block}.configurator[_ngcontent-%COMP%]{position:fixed;inset:0;background-color:color-mix(in srgb,var(--mat-sys-shadow) 50%,transparent);z-index:1000;overflow-y:auto}.content[_ngcontent-%COMP%]{max-width:800px;margin:40px auto;background:var(--mat-sys-surface);border-radius:16px;box-shadow:0 12px 40px color-mix(in srgb,var(--mat-sys-shadow) 25%,transparent),0 4px 12px color-mix(in srgb,var(--mat-sys-shadow) 12%,transparent)}.default-header[_ngcontent-%COMP%]{padding:16px 24px;border-bottom:1px solid color-mix(in srgb,var(--mat-sys-outline) 30%,transparent)}.default-header[_ngcontent-%COMP%] .row[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:16px}.default-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{margin:0;font-size:20px;font-weight:500;color:var(--mat-sys-on-surface)}.default-content[_ngcontent-%COMP%]{padding:24px}.top-button[_ngcontent-%COMP%]{text-transform:none;font-size:14px;font-weight:500}.cancel-button[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant)}@media(max-width:768px){.content[_ngcontent-%COMP%]{margin:16px;max-width:calc(100% - 32px)}.default-header[_ngcontent-%COMP%]{padding:12px 16px}.default-content[_ngcontent-%COMP%]{padding:16px}}"],changeDetection:0})}return n})();var H$e=["container"],NH=(()=>{class n{sanitizer=f(Pr);changeDetector=f(oe);mapSettingsService=f(ui);consoleService=f(ga);toasterService=f(re);router=f(Ft);vncConsoleService=f(kp);project=ee(void 0);controller;contextConsoleMenu=ln(eo);container=ln("container",{read:Wo});componentBrowserRef;topPosition=z(void 0);leftPosition=z(void 0);node;constructor(){}ngOnInit(){this.setPosition(0,0)}setPosition(e,t){this.topPosition.set(this.sanitizer.bypassSecurityTrustStyle(e+"px")),this.leftPosition.set(this.sanitizer.bypassSecurityTrustStyle(t+"px")),this.changeDetector.detectChanges()}openMenu(e,t,i){this.node=e;let a=this.mapSettingsService.getConsoleContextMenuAction();a?a==="web console"?this.openWebConsole():a==="web console in new tab"?this.openWebConsoleInNewTab():a==="console"&&this.openConsole():(this.setPosition(t,i),this.contextConsoleMenu().openMenu())}openConsole(){this.mapSettingsService.setConsoleContextMenuAction("console"),this.componentBrowserRef=this.container().createComponent(x_),this.componentBrowserRef.setInput("controller",this.controller),this.componentBrowserRef.setInput("node",this.node),this.componentBrowserRef.changeDetectorRef.detectChanges(),this.componentBrowserRef.instance.openConsole()}openWebConsole(){this.mapSettingsService.setConsoleContextMenuAction("web console"),this.node.status==="started"?this.node.console_type==="vnc"?this.vncConsoleService.openVncConsole(this.controller,this.node):this.node.console_type&&this.node.console_type.startsWith("spice")?this.toasterService.error("SPICE console is not yet supported."):this.node.console_type==="telnet"||this.node.console_type==="ssh"||this.node.console_type==="docker_exec"?(this.mapSettingsService.logConsoleSubject.next(!0),this.consoleService.openConsoleForNode(this.node)):this.toasterService.error(`Console type '${this.node.console_type}' is not supported in web console mode.`):this.toasterService.error("To open console please start the node")}openWebConsoleInNewTab(){if(this.mapSettingsService.setConsoleContextMenuAction("web console in new tab"),this.node.status==="started")if(this.node.console_type==="vnc")this.vncConsoleService.openVncConsole(this.controller,this.node);else if(this.node.console_type&&this.node.console_type.startsWith("spice"))this.toasterService.error("SPICE console is not yet supported.");else if(this.node.console_type==="telnet"||this.node.console_type==="ssh"||this.node.console_type==="docker_exec"){let e=this.router.url.split("/"),t=`/static/web-ui/${e[1]}/${e[2]}/${e[3]}/${e[4]}/nodes/${this.node.node_id}`;window.open(t)}else this.toasterService.error("Console type not supported in new tab");else this.toasterService.error("To open console please start the node")}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-context-console-menu"]],viewQuery:function(t,i){t&1&&Bn(i.contextConsoleMenu,eo,5)(i.container,H$e,5,Wo),t&2&&jn(2)},inputs:{project:[1,"project"],controller:"controller"},decls:23,vars:6,consts:[["contextConsoleMenu","matMenu"],["container",""],[1,"context-menu"],[3,"matMenuTriggerFor"],[1,"context-menu-items"],[1,"title"],["mat-menu-item","",3,"click"],[3,"hidden"]],template:function(t,i){if(t&1&&(r(0,"div",2),L(1,"span",3),r(2,"mat-menu",4,0)(4,"span",5),c(5," Choose default behavior for double click on node "),l(),r(6,"button",6),_("click",function(){return i.openConsole()}),r(7,"mat-icon"),c(8,"web_asset"),l(),r(9,"span"),c(10,"Open console"),l()(),r(11,"button",6),_("click",function(){return i.openWebConsole()}),r(12,"mat-icon"),c(13,"http"),l(),r(14,"span"),c(15,"Open web console"),l()(),r(16,"button",6),_("click",function(){return i.openWebConsoleInNewTab()}),r(17,"mat-icon"),c(18,"http"),l(),r(19,"span"),c(20,"Open web console in new tab"),l()()()(),L(21,"template",7,1)),t&2){let a=Te(3);Tt("left",i.leftPosition())("top",i.topPosition()),m(),v("matMenuTriggerFor",a),m(20),v("hidden",!0)}},dependencies:[fe,it,Ko,ut,eo,ie,ce],styles:[".context-menu[_ngcontent-%COMP%]{position:absolute;min-height:0}.title[_ngcontent-%COMP%]{margin:8px}"],changeDetection:0})}return n})();var FH=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=on({type:n});static \u0275inj=nn({imports:[Uk,Vi,Uk]})}return n})();var RH=[As,Y,it,hn,J2,ie,we,ye,_n,ke,Is,rt,ab,Rt,ek,El,_a,ot,st,Il,Fo,FH,bo,yk,ri];var Dk=(()=>{class n{settingsService;constructor(e,t){zi.production&&e.events.subscribe(i=>{t.getStatisticsSettings()&&i instanceof Vp&&(gtag("set","page",i.url),gtag("send","pageview"))})}static \u0275fac=function(t){return new(t||n)(_e(Ft),_e(sr))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();var zH=(()=>{class n{controllerService;loginService;constructor(e,t){this.controllerService=e,this.loginService=t}intercept(e,t){return t.handle(e).pipe(ei(i=>jo(()=>i)))}async call(){let e=JSON.parse(localStorage.getItem("isRememberMe"))??null,t=this.loginService.controller_id,i=await this.controllerService.get(parseInt(t,10));i.tokenExpired=!0,await this.controllerService.update(i);try{if(e&&e.isRememberMe){let a=await this.loginService.getLoggedUserRefToken(i,e);i.authToken=a.access_token,i.tokenExpired=!1,await this.controllerService.update(i),await this.loginService.getLoggedUser(i),this.reloadCurrentRoute()}}catch(a){throw a}}reloadCurrentRoute(){location.reload()}static \u0275fac=function(t){return new(t||n)(_e(_t),_e(Ol))};static \u0275prov=J({token:n,factory:n.\u0275fac})}return n})();function W$e(n,o){if(n&1&&(r(0,"mat-option",4),c(1),l()),n&2){let e=o.$implicit,t=h();v("value",e),m(),X(" ",t.displayFn()(e)," ")}}var LH=(()=>{class n{data=ee(void 0);filteredData;typeName;autocompleteControl=new Ge;eltType=ee(void 0);displayFn=ee(void 0);filterFn=ee(void 0);selectionChange=new be;constructor(){}ngOnChanges(){this.filteredData=this.autocompleteControl.valueChanges.pipe(Di(""),Pt(e=>this.filterFn()(e,this.data())))}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-autocomplete"]],inputs:{data:[1,"data"],eltType:[1,"eltType"],displayFn:[1,"displayFn"],filterFn:[1,"filterFn"]},outputs:{selectionChange:"selectionChange"},features:[Nn],decls:9,vars:6,consts:[["auto","matAutocomplete"],[1,"input-field"],["type","text","matInput","",3,"matAutocomplete","formControl"],[3,"optionSelected","displayWith"],[3,"value"]],template:function(t,i){if(t&1&&(r(0,"mat-form-field",1)(1,"mat-label"),c(2),l(),L(3,"input",2),r(4,"mat-autocomplete",3,0),_("optionSelected",function(s){return i.selectionChange.emit(s.option.value)}),Q(6,W$e,2,2,"mat-option",4,Oe),Et(8,"async"),l()()),t&2){let a=Te(5);m(2),N(i.eltType()),m(),v("matAutocomplete",a)("formControl",i.autocompleteControl),m(),v("displayWith",i.displayFn()),m(2),K(gn(8,4,i.filteredData))}},dependencies:[fe,St,At,Nt,It,Tr,we,Pe,Ve,ye,Ee,Jo,ha,nt,ho,Pa],styles:[".input-field[_ngcontent-%COMP%]{width:100%}"],changeDetection:0})}return n})();var G$e=(n,o,e,t)=>({"status-uploading":n,"status-done":o,"status-error":e,"status-canceled":t});function q$e(n,o){return this.trackByTempId}function Q$e(n,o){if(n&1&&(Fe(0),c(1),Re()),n&2){let e=h(2);m(),Un(" Uploading ",e.activeCount," file",e.activeCount!==1?"s":""," ")}}function K$e(n,o){n&1&&(Fe(0),c(1," Uploads complete "),Re())}function X$e(n,o){if(n&1&&L(0,"mat-progress-bar",6),n&2){let e=h(2);v("value",e.overallProgress)}}function Y$e(n,o){n&1&&(Fe(0),c(1,"check_circle"),Re())}function Z$e(n,o){n&1&&(Fe(0),c(1,"error"),Re())}function J$e(n,o){n&1&&(Fe(0),c(1,"cancel"),Re())}function eHe(n,o){n&1&&(Fe(0),c(1,"insert_drive_file"),Re())}function tHe(n,o){n&1&&(r(0,"span",15),c(1,"Queued"),l())}function nHe(n,o){if(n&1&&(r(0,"span",15),c(1),l()),n&2){let e=h().$implicit;m(),X("",e.progress,"%")}}function iHe(n,o){n&1&&(r(0,"span",16),c(1,"Done"),l())}function oHe(n,o){if(n&1&&(r(0,"span",17),c(1),l()),n&2){let e=h().$implicit;m(),N(e.errorMessage||"Failed")}}function aHe(n,o){n&1&&(r(0,"span",18),c(1,"Canceled"),l())}function rHe(n,o){if(n&1){let e=R();r(0,"button",21),_("click",function(){y(e);let i=h().$implicit,a=h(3);return w(a.cancelUpload(i.tempId))}),r(1,"mat-icon"),c(2,"close"),l()()}}function sHe(n,o){if(n&1&&L(0,"mat-progress-bar",20),n&2){let e=h().$implicit;v("value",e.progress)}}function lHe(n,o){if(n&1){let e=R();r(0,"div",10)(1,"div",11)(2,"mat-icon",12),T(3,Y$e,2,0,"ng-container"),T(4,Z$e,2,0,"ng-container"),T(5,J$e,2,0,"ng-container"),T(6,eHe,2,0,"ng-container"),l(),r(7,"div",13),_("click",function(i){let a=y(e).$implicit,s=h(3);return w(s.navigateToFile(a,i))}),r(8,"span",14),c(9),l(),T(10,tHe,2,0,"span",15),T(11,nHe,2,1,"span",15),T(12,iHe,2,0,"span",16),T(13,oHe,2,1,"span",17),T(14,aHe,2,0,"span",18),l(),T(15,rHe,3,0,"button",19),l(),T(16,sHe,1,1,"mat-progress-bar",20),l()}if(n&2){let e=o.$implicit;ne("dismissing",e.dismissing),m(2),v("ngClass",LC(16,G$e,e.status==="uploading"||e.status==="queued",e.status==="uploaded",e.status==="error",e.status==="canceled")),m(),E(e.status==="uploaded"?3:-1),m(),E(e.status==="error"?4:-1),m(),E(e.status==="canceled"?5:-1),m(),E(e.status==="uploading"||e.status==="queued"?6:-1),m(2),v("title",e.filename),m(),N(e.filename),m(),E(e.status==="queued"?10:-1),m(),E(e.status==="uploading"?11:-1),m(),E(e.status==="uploaded"?12:-1),m(),E(e.status==="error"?13:-1),m(),E(e.status==="canceled"?14:-1),m(),E(e.status==="uploading"||e.status==="queued"?15:-1),m(),E(e.status==="uploading"||e.status==="queued"?16:-1)}}function cHe(n,o){if(n&1&&(r(0,"div",8),Q(1,lHe,17,21,"div",9,q$e,!0),l()),n&2){let e=h(2);m(),K(e.uploadList)}}function dHe(n,o){if(n&1){let e=R();r(0,"div",0)(1,"div",1),_("click",function(){y(e);let i=h();return w(i.toggleExpanded())}),r(2,"div",2)(3,"mat-icon",3),c(4,"cloud_upload"),l(),r(5,"span",4),T(6,Q$e,2,2,"ng-container"),T(7,K$e,2,0,"ng-container"),l()(),r(8,"div",5),T(9,X$e,1,1,"mat-progress-bar",6),r(10,"mat-icon",7),c(11),l()()(),T(12,cHe,3,0,"div",8),l()}if(n&2){let e=h();m(6),E(e.activeCount>0?6:-1),m(),E(e.activeCount===0?7:-1),m(2),E(e.activeCount>0?9:-1),m(2),N(e.isExpanded()?"expand_more":"expand_less"),m(),E(e.isExpanded()?12:-1)}}var Ik=(()=>{class n{imageUploadSessionService=f(X_);router=f(Ft);uploads=new Map;isExpanded=z(!0);subscription;ngOnInit(){this.subscription=this.imageUploadSessionService.events$.subscribe(e=>{this.onUploadEvent(e)})}get uploadList(){return Array.from(this.uploads.values())}get hasUploads(){return this.uploads.size>0}get activeCount(){return this.uploadList.filter(e=>e.status==="uploading"||e.status==="queued").length}get overallProgress(){let e=this.uploadList.filter(t=>t.status==="uploading"||t.status==="queued");return e.length?Math.round(e.reduce((t,i)=>t+(i.progress||0),0)/e.length):100}cancelUpload(e){this.imageUploadSessionService.requestCancel(e)}navigateToFile(e,t){t.stopPropagation(),e.controller_id&&this.router.navigate(["/controller",e.controller_id,"image-manager"],{queryParams:{highlight:e.filename}})}toggleExpanded(){this.isExpanded.set(!this.isExpanded())}trackByTempId(e,t){return t.tempId}onUploadEvent(e){let t=this.uploads.get(e.tempId);t?.dismissTimer&&clearTimeout(t.dismissTimer);let i=q(q({},t||{}),e);e.status==="uploaded"||e.status==="error"||e.status==="canceled"?(i.dismissing=!1,i.dismissTimer=setTimeout(()=>{let a=this.uploads.get(e.tempId);a&&(a.dismissing=!0),setTimeout(()=>{this.uploads.delete(e.tempId)},400)},3e3)):i.dismissing=!1,this.uploads.set(e.tempId,i),!t&&e.status==="queued"&&this.isExpanded.set(!0)}ngOnDestroy(){this.subscription&&this.subscription.unsubscribe(),this.uploadList.forEach(e=>{e.dismissTimer&&clearTimeout(e.dismissTimer)})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-global-upload-indicator"]],decls:1,vars:1,consts:[[1,"upload-indicator-container"],[1,"upload-indicator-header",3,"click"],[1,"header-left"],[1,"upload-icon"],[1,"header-title"],[1,"header-right"],["mode","determinate",1,"header-progress",3,"value"],[1,"toggle-icon"],[1,"upload-list"],[1,"upload-item",3,"dismissing"],[1,"upload-item"],[1,"upload-item-info"],[1,"file-icon",3,"ngClass"],[1,"upload-item-text",3,"click"],[1,"filename",3,"title"],[1,"status-text"],[1,"status-text","status-done"],[1,"status-text","status-error"],[1,"status-text","status-canceled"],["mat-icon-button","","title","Cancel upload",1,"cancel-btn"],["mode","determinate",1,"item-progress",3,"value"],["mat-icon-button","","title","Cancel upload",1,"cancel-btn",3,"click"]],template:function(t,i){t&1&&T(0,dHe,13,5,"div",0),t&2&&E(i.hasUploads?0:-1)},dependencies:[fe,Ao,ie,ce,Is,od,Y,Be],styles:[".upload-indicator-container[_ngcontent-%COMP%]{position:fixed;bottom:16px;right:16px;width:320px;background:var(--mat-sys-surface);border-radius:4px;box-shadow:0 2px 8px color-mix(in srgb,var(--mat-sys-shadow) 20%,transparent);z-index:2000;overflow:hidden;font-size:12px}.upload-indicator-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:8px;cursor:pointer;background:var(--mat-sys-primary-container);color:var(--mat-sys-on-primary-container);user-select:none}.upload-indicator-header[_ngcontent-%COMP%]:hover{background:var(--mat-sys-primary-fixed-dim)}.header-left[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.upload-icon[_ngcontent-%COMP%]{font-size:14px;height:14px;width:14px;flex-shrink:0}.header-title[_ngcontent-%COMP%]{font-weight:500;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.header-right[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;flex-shrink:0}.header-progress[_ngcontent-%COMP%]{width:60px}.toggle-icon[_ngcontent-%COMP%]{font-size:14px;height:14px;width:14px}.upload-list[_ngcontent-%COMP%]{max-height:280px;overflow-y:auto;padding:8px 0}.upload-item[_ngcontent-%COMP%]{padding:8px;transition:opacity var(--gns3-motion-duration-standard) ease,max-height var(--gns3-motion-duration-standard) ease;opacity:1}.upload-item.dismissing[_ngcontent-%COMP%]{opacity:0}.upload-item-info[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.file-icon[_ngcontent-%COMP%]{font-size:14px;height:14px;width:14px;flex-shrink:0}.file-icon.status-uploading[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.file-icon.status-done[_ngcontent-%COMP%]{color:var(--custom-mat-sys-success)}.file-icon.status-error[_ngcontent-%COMP%]{color:var(--mat-sys-error)}.file-icon.status-canceled[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant)}.upload-item-text[_ngcontent-%COMP%]{flex:1;min-width:0;display:flex;flex-direction:column;cursor:pointer}.upload-item-text[_ngcontent-%COMP%]:hover .filename[_ngcontent-%COMP%]{text-decoration:underline}.filename[_ngcontent-%COMP%]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:12px;font-weight:500}.status-text[_ngcontent-%COMP%]{font-size:12px;color:var(--mat-sys-on-surface-variant)}.status-text.status-done[_ngcontent-%COMP%]{color:var(--custom-mat-sys-success)}.status-text.status-error[_ngcontent-%COMP%]{color:var(--mat-sys-error);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.status-text.status-canceled[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant)}.cancel-btn[_ngcontent-%COMP%]{width:10px;height:10px;line-height:10px;flex-shrink:0}.cancel-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:12px;height:12px;width:12px}.item-progress[_ngcontent-%COMP%]{margin-top:8px;height:2px;border-radius:2px}"],changeDetection:0})}return n})();var VH=(()=>{class n{_googleAnalyticsService;constructor(e){this._googleAnalyticsService=e}static \u0275fac=function(t){return new(t||n)(_e(Dk))};static \u0275mod=on({type:n});static \u0275inj=nn({providers:[sr,{provide:cA,useClass:DH},{provide:kA,useClass:zH,multi:!0},uh,Ti,Lr,_t,fa,ft,Ri,P2,hd,_m,Wi,sn,B_,w2,re,mo,h_,so,Xn,OH,g2,na,bM,Ui,p5,dh,zl,Ll,q2,Rl,Sh,Rr,Os,Km,A1,I1,D1,Qm,Zm,Jm,zr,td,qm,Xm,vh,ep,U_,br,W_,$2,XS,Ep,y_,ui,AM,ml,M_,Tp,_s,ed,Ni,Dk,ga,kp,S_,K_,Xi,Yu,K2,rg,uy,U2,G_,Ol,ba],imports:[VC,PA,SH,tk,hy,F2,dk,fk,rk,j2,V_,E_,NH,Tk,Ek,US,WS,bS,CS,yS,xS,z_,LS,R_,_2,c2,a2,r2,s2,Sk,hk,Y2,Ip,gk,ck,V2,kh,R1,F1,C2,AS,ZM,MC,l2,St,It,IR,Um,vk,Q2,H2,CC,oS,rS,aS,sS,pS,uS,Ik,cS,HS,GS,TS,FM,vS,qS,NS,FS,BS,jS,OS,DS,IS,fS,VS,$S,iS,QS,KS,lS,ES,x_,RS,w_,SS,kS,wS,gS,MS,hS,NM,n2,PS,y2,R2,S2,gy,w1,N1,O1,zS,z2,j_,Nl,_S,rr,Gm,zM,IH,AH,tS,YM,RM,qM,QM,nS,jM,eS,XM,KM,hh,WM,GM,sd,fy,vy,Cy,H1,U1,j1,$1,W1,G1,J1,K1,Z1,ty,ny,b2,I_,pk,ok,_k,Ck,lk,uk,Mk,LH,DM,sk,__,Pk,W2,L_,v_,OM,f_,i2,z1,Q_,k2,B2,P1,dy,gh,cy,ey,_y,e1,EH,Pl,n1,we,it,NR,Qx,RH,GC,mc,Rt,Jo,sb,T1,J_,ly.forRoot()]})}return n})();var BH=(()=>{class n{overlayContainer=f(WC);iconReg=f(l5);sanitizer=f(Pr);settingsService=f(sr);themeService=f(Ni);router=f(Ft);progressService=f(mo);connectionManager=f(ed);controllerService=f(_t);interfaceDensityService=f(G_);constructor(){this.iconReg.addSvgIcon("gns3",this.sanitizer.bypassSecurityTrustResourceUrl("./assets/gns3_icon.svg")),this.iconReg.addSvgIcon("gns3black",this.sanitizer.bypassSecurityTrustResourceUrl("./assets/gns3_icon_black.svg")),this.iconReg.addSvgIcon("github",this.sanitizer.bypassSecurityTrustResourceUrl("./assets/github-icon.svg")),this.router.events.subscribe(e=>{this.checkEvent(e)})}ngOnInit(){this.themeService.themeChanged.subscribe(e=>{this.applyTheme(e)}),this.router.events.pipe(Yi(e=>e instanceof Vp)).subscribe(e=>{this.checkAndEstablishConnection(e.url)})}async checkAndEstablishConnection(e){let t=e.match(/\/controller\/(\d+)/);if(!t)return;let i=parseInt(t[1],10);try{let a=await this.controllerService.get(i);a&&a.authToken&&this.connectionManager.establishConnection(a)}catch(a){console.error("Failed to check controller for auto-login:",a)}}applyTheme(e){let t=this.overlayContainer.getContainerElement().classList;t.remove("theme-deeppurple-amber","theme-indigo-pink","theme-magenta-violet","theme-rose-red","theme-pink-bluegrey","theme-purple-green","theme-azure-blue","theme-cyan-orange"),t.add(`theme-${e}`)}checkEvent(e){e instanceof a5?this.progressService.activate():(e instanceof Vp||e instanceof r5||e instanceof s5)&&this.progressService.deactivate()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=V({type:n,selectors:[["app-root"]],hostAttrs:[1,"componentCssClass"],decls:2,vars:0,template:function(t,i){t&1&&L(0,"router-outlet")(1,"app-global-upload-indicator")},dependencies:[fe,vn,mg,Ik],styles:["[_nghost-%COMP%]{display:block;height:100%}mat-menu-panel[_ngcontent-%COMP%]{min-height:0px}"],changeDetection:0})}return n})();zi.production&&void 0;yA(BH,{providers:[hA(),sA(VH)]}).then(n=>{TA(n.components[0])}).catch(n=>console.log(n));
|